From 75b0ed8e87120bddc785bd0aa1ef19c2a0e60634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lex=20Hermida?= Date: Mon, 4 Feb 2019 13:23:35 +0100 Subject: [PATCH] 9adf8835266d32452cae21a646dc2fc33bce1d2b --- dist/index.html | 12 ++++----- dist/v-1547534999795/js/app.js | 25 ------------------ dist/v-1547534999795/js/maps/app.js.map | 1 - dist/v-1547534999795/js/templates.js | 18 ------------- .../locales/taiga/locale-ca.json | 1 - .../locales/taiga/locale-de.json | 1 - .../locales/taiga/locale-en.json | 1 - .../locales/taiga/locale-es.json | 1 - .../locales/taiga/locale-fa.json | 1 - .../locales/taiga/locale-fi.json | 1 - .../locales/taiga/locale-fr.json | 1 - .../locales/taiga/locale-it.json | 1 - .../locales/taiga/locale-ja.json | 1 - .../locales/taiga/locale-ko.json | 1 - .../locales/taiga/locale-nb.json | 1 - .../locales/taiga/locale-nl.json | 1 - .../locales/taiga/locale-pl.json | 1 - .../locales/taiga/locale-pt-br.json | 1 - .../locales/taiga/locale-ru.json | 1 - .../locales/taiga/locale-sv.json | 1 - .../locales/taiga/locale-tr.json | 1 - .../locales/taiga/locale-zh-hans.json | 1 - .../locales/taiga/locale-zh-hant.json | 1 - .../styles/theme-high-contrast.css | 4 --- .../styles/theme-material-design.css | 4 --- dist/v-1547534999795/styles/theme-taiga.css | 4 --- .../emojis/0023-20e3.png | Bin .../emojis/002a-20e3.png | Bin .../emojis/0030-20e3.png | Bin .../emojis/0031-20e3.png | Bin .../emojis/0032-20e3.png | Bin .../emojis/0033-20e3.png | Bin .../emojis/0034-20e3.png | Bin .../emojis/0035-20e3.png | Bin .../emojis/0036-20e3.png | Bin .../emojis/0037-20e3.png | Bin .../emojis/0038-20e3.png | Bin .../emojis/0039-20e3.png | Bin .../emojis/1f004.png | Bin .../emojis/1f0cf.png | Bin .../emojis/1f170.png | Bin .../emojis/1f171.png | Bin .../emojis/1f17e.png | Bin .../emojis/1f17f.png | Bin .../emojis/1f18e.png | Bin .../emojis/1f191.png | Bin .../emojis/1f192.png | Bin .../emojis/1f193.png | Bin .../emojis/1f194.png | Bin .../emojis/1f195.png | Bin .../emojis/1f196.png | Bin .../emojis/1f197.png | Bin .../emojis/1f198.png | Bin .../emojis/1f199.png | Bin .../emojis/1f19a.png | Bin .../emojis/1f1e6-1f1e8.png | Bin .../emojis/1f1e6-1f1e9.png | Bin .../emojis/1f1e6-1f1ea.png | Bin .../emojis/1f1e6-1f1eb.png | Bin .../emojis/1f1e6-1f1ec.png | Bin .../emojis/1f1e6-1f1ee.png | Bin .../emojis/1f1e6-1f1f1.png | Bin .../emojis/1f1e6-1f1f2.png | Bin .../emojis/1f1e6-1f1f4.png | Bin .../emojis/1f1e6-1f1f6.png | Bin .../emojis/1f1e6-1f1f7.png | Bin .../emojis/1f1e6-1f1f8.png | Bin .../emojis/1f1e6-1f1f9.png | Bin .../emojis/1f1e6-1f1fa.png | Bin .../emojis/1f1e6-1f1fc.png | Bin .../emojis/1f1e6-1f1fd.png | Bin .../emojis/1f1e6-1f1ff.png | Bin .../emojis/1f1e7-1f1e6.png | Bin .../emojis/1f1e7-1f1e7.png | Bin .../emojis/1f1e7-1f1e9.png | Bin .../emojis/1f1e7-1f1ea.png | Bin .../emojis/1f1e7-1f1eb.png | Bin .../emojis/1f1e7-1f1ec.png | Bin .../emojis/1f1e7-1f1ed.png | Bin .../emojis/1f1e7-1f1ee.png | Bin .../emojis/1f1e7-1f1ef.png | Bin .../emojis/1f1e7-1f1f1.png | Bin .../emojis/1f1e7-1f1f2.png | Bin .../emojis/1f1e7-1f1f3.png | Bin .../emojis/1f1e7-1f1f4.png | Bin .../emojis/1f1e7-1f1f6.png | Bin .../emojis/1f1e7-1f1f7.png | Bin .../emojis/1f1e7-1f1f8.png | Bin .../emojis/1f1e7-1f1f9.png | Bin .../emojis/1f1e7-1f1fb.png | Bin .../emojis/1f1e7-1f1fc.png | Bin .../emojis/1f1e7-1f1fe.png | Bin .../emojis/1f1e7-1f1ff.png | Bin .../emojis/1f1e8-1f1e6.png | Bin .../emojis/1f1e8-1f1e8.png | Bin .../emojis/1f1e8-1f1e9.png | Bin .../emojis/1f1e8-1f1eb.png | Bin .../emojis/1f1e8-1f1ec.png | Bin .../emojis/1f1e8-1f1ed.png | Bin .../emojis/1f1e8-1f1ee.png | Bin .../emojis/1f1e8-1f1f0.png | Bin .../emojis/1f1e8-1f1f1.png | Bin .../emojis/1f1e8-1f1f2.png | Bin .../emojis/1f1e8-1f1f3.png | Bin .../emojis/1f1e8-1f1f4.png | Bin .../emojis/1f1e8-1f1f5.png | Bin .../emojis/1f1e8-1f1f7.png | Bin .../emojis/1f1e8-1f1fa.png | Bin .../emojis/1f1e8-1f1fb.png | Bin .../emojis/1f1e8-1f1fc.png | Bin .../emojis/1f1e8-1f1fd.png | Bin .../emojis/1f1e8-1f1fe.png | Bin .../emojis/1f1e8-1f1ff.png | Bin .../emojis/1f1e9-1f1ea.png | Bin .../emojis/1f1e9-1f1ec.png | Bin .../emojis/1f1e9-1f1ef.png | Bin .../emojis/1f1e9-1f1f0.png | Bin .../emojis/1f1e9-1f1f2.png | Bin .../emojis/1f1e9-1f1f4.png | Bin .../emojis/1f1e9-1f1ff.png | Bin .../emojis/1f1ea-1f1e6.png | Bin .../emojis/1f1ea-1f1e8.png | Bin .../emojis/1f1ea-1f1ea.png | Bin .../emojis/1f1ea-1f1ec.png | Bin .../emojis/1f1ea-1f1ed.png | Bin .../emojis/1f1ea-1f1f7.png | Bin .../emojis/1f1ea-1f1f8.png | Bin .../emojis/1f1ea-1f1f9.png | Bin .../emojis/1f1ea-1f1fa.png | Bin .../emojis/1f1eb-1f1ee.png | Bin .../emojis/1f1eb-1f1ef.png | Bin .../emojis/1f1eb-1f1f0.png | Bin .../emojis/1f1eb-1f1f2.png | Bin .../emojis/1f1eb-1f1f4.png | Bin .../emojis/1f1eb-1f1f7.png | Bin .../emojis/1f1ec-1f1e6.png | Bin .../emojis/1f1ec-1f1e7.png | Bin .../emojis/1f1ec-1f1e9.png | Bin .../emojis/1f1ec-1f1ea.png | Bin .../emojis/1f1ec-1f1eb.png | Bin .../emojis/1f1ec-1f1ec.png | Bin .../emojis/1f1ec-1f1ed.png | Bin .../emojis/1f1ec-1f1ee.png | Bin .../emojis/1f1ec-1f1f1.png | Bin .../emojis/1f1ec-1f1f2.png | Bin .../emojis/1f1ec-1f1f3.png | Bin .../emojis/1f1ec-1f1f5.png | Bin .../emojis/1f1ec-1f1f6.png | Bin .../emojis/1f1ec-1f1f7.png | Bin .../emojis/1f1ec-1f1f8.png | Bin .../emojis/1f1ec-1f1f9.png | Bin .../emojis/1f1ec-1f1fa.png | Bin .../emojis/1f1ec-1f1fc.png | Bin .../emojis/1f1ec-1f1fe.png | Bin .../emojis/1f1ed-1f1f0.png | Bin .../emojis/1f1ed-1f1f2.png | Bin .../emojis/1f1ed-1f1f3.png | Bin .../emojis/1f1ed-1f1f7.png | Bin .../emojis/1f1ed-1f1f9.png | Bin .../emojis/1f1ed-1f1fa.png | Bin .../emojis/1f1ee-1f1e8.png | Bin .../emojis/1f1ee-1f1e9.png | Bin .../emojis/1f1ee-1f1ea.png | Bin .../emojis/1f1ee-1f1f1.png | Bin .../emojis/1f1ee-1f1f2.png | Bin .../emojis/1f1ee-1f1f3.png | Bin .../emojis/1f1ee-1f1f4.png | Bin .../emojis/1f1ee-1f1f6.png | Bin .../emojis/1f1ee-1f1f7.png | Bin .../emojis/1f1ee-1f1f8.png | Bin .../emojis/1f1ee-1f1f9.png | Bin .../emojis/1f1ef-1f1ea.png | Bin .../emojis/1f1ef-1f1f2.png | Bin .../emojis/1f1ef-1f1f4.png | Bin .../emojis/1f1ef-1f1f5.png | Bin .../emojis/1f1f0-1f1ea.png | Bin .../emojis/1f1f0-1f1ec.png | Bin .../emojis/1f1f0-1f1ed.png | Bin .../emojis/1f1f0-1f1ee.png | Bin .../emojis/1f1f0-1f1f2.png | Bin .../emojis/1f1f0-1f1f3.png | Bin .../emojis/1f1f0-1f1f5.png | Bin .../emojis/1f1f0-1f1f7.png | Bin .../emojis/1f1f0-1f1fc.png | Bin .../emojis/1f1f0-1f1fe.png | Bin .../emojis/1f1f0-1f1ff.png | Bin .../emojis/1f1f1-1f1e6.png | Bin .../emojis/1f1f1-1f1e7.png | Bin .../emojis/1f1f1-1f1e8.png | Bin .../emojis/1f1f1-1f1ee.png | Bin .../emojis/1f1f1-1f1f0.png | Bin .../emojis/1f1f1-1f1f7.png | Bin .../emojis/1f1f1-1f1f8.png | Bin .../emojis/1f1f1-1f1f9.png | Bin .../emojis/1f1f1-1f1fa.png | Bin .../emojis/1f1f1-1f1fb.png | Bin .../emojis/1f1f1-1f1fe.png | Bin .../emojis/1f1f2-1f1e6.png | Bin .../emojis/1f1f2-1f1e8.png | Bin .../emojis/1f1f2-1f1e9.png | Bin .../emojis/1f1f2-1f1ea.png | Bin .../emojis/1f1f2-1f1eb.png | Bin .../emojis/1f1f2-1f1ec.png | Bin .../emojis/1f1f2-1f1ed.png | Bin .../emojis/1f1f2-1f1f0.png | Bin .../emojis/1f1f2-1f1f1.png | Bin .../emojis/1f1f2-1f1f2.png | Bin .../emojis/1f1f2-1f1f3.png | Bin .../emojis/1f1f2-1f1f4.png | Bin .../emojis/1f1f2-1f1f5.png | Bin .../emojis/1f1f2-1f1f6.png | Bin .../emojis/1f1f2-1f1f7.png | Bin .../emojis/1f1f2-1f1f8.png | Bin .../emojis/1f1f2-1f1f9.png | Bin .../emojis/1f1f2-1f1fa.png | Bin .../emojis/1f1f2-1f1fb.png | Bin .../emojis/1f1f2-1f1fc.png | Bin .../emojis/1f1f2-1f1fd.png | Bin .../emojis/1f1f2-1f1fe.png | Bin .../emojis/1f1f2-1f1ff.png | Bin .../emojis/1f1f3-1f1e6.png | Bin .../emojis/1f1f3-1f1e8.png | Bin .../emojis/1f1f3-1f1ea.png | Bin .../emojis/1f1f3-1f1eb.png | Bin .../emojis/1f1f3-1f1ec.png | Bin .../emojis/1f1f3-1f1ee.png | Bin .../emojis/1f1f3-1f1f1.png | Bin .../emojis/1f1f3-1f1f4.png | Bin .../emojis/1f1f3-1f1f5.png | Bin .../emojis/1f1f3-1f1f7.png | Bin .../emojis/1f1f3-1f1fa.png | Bin .../emojis/1f1f3-1f1ff.png | Bin .../emojis/1f1f4-1f1f2.png | Bin .../emojis/1f1f5-1f1e6.png | Bin .../emojis/1f1f5-1f1ea.png | Bin .../emojis/1f1f5-1f1eb.png | Bin .../emojis/1f1f5-1f1ec.png | Bin .../emojis/1f1f5-1f1ed.png | Bin .../emojis/1f1f5-1f1f0.png | Bin .../emojis/1f1f5-1f1f1.png | Bin .../emojis/1f1f5-1f1f2.png | Bin .../emojis/1f1f5-1f1f3.png | Bin .../emojis/1f1f5-1f1f7.png | Bin .../emojis/1f1f5-1f1f8.png | Bin .../emojis/1f1f5-1f1f9.png | Bin .../emojis/1f1f5-1f1fc.png | Bin .../emojis/1f1f5-1f1fe.png | Bin .../emojis/1f1f6-1f1e6.png | Bin .../emojis/1f1f7-1f1ea.png | Bin .../emojis/1f1f7-1f1f4.png | Bin .../emojis/1f1f7-1f1f8.png | Bin .../emojis/1f1f7-1f1fa.png | Bin .../emojis/1f1f7-1f1fc.png | Bin .../emojis/1f1f8-1f1e6.png | Bin .../emojis/1f1f8-1f1e7.png | Bin .../emojis/1f1f8-1f1e8.png | Bin .../emojis/1f1f8-1f1e9.png | Bin .../emojis/1f1f8-1f1ea.png | Bin .../emojis/1f1f8-1f1ec.png | Bin .../emojis/1f1f8-1f1ed.png | Bin .../emojis/1f1f8-1f1ee.png | Bin .../emojis/1f1f8-1f1ef.png | Bin .../emojis/1f1f8-1f1f0.png | Bin .../emojis/1f1f8-1f1f1.png | Bin .../emojis/1f1f8-1f1f2.png | Bin .../emojis/1f1f8-1f1f3.png | Bin .../emojis/1f1f8-1f1f4.png | Bin .../emojis/1f1f8-1f1f7.png | Bin .../emojis/1f1f8-1f1f8.png | Bin .../emojis/1f1f8-1f1f9.png | Bin .../emojis/1f1f8-1f1fb.png | Bin .../emojis/1f1f8-1f1fd.png | Bin .../emojis/1f1f8-1f1fe.png | Bin .../emojis/1f1f8-1f1ff.png | Bin .../emojis/1f1f9-1f1e6.png | Bin .../emojis/1f1f9-1f1e8.png | Bin .../emojis/1f1f9-1f1e9.png | Bin .../emojis/1f1f9-1f1eb.png | Bin .../emojis/1f1f9-1f1ec.png | Bin .../emojis/1f1f9-1f1ed.png | Bin .../emojis/1f1f9-1f1ef.png | Bin .../emojis/1f1f9-1f1f0.png | Bin .../emojis/1f1f9-1f1f1.png | Bin .../emojis/1f1f9-1f1f2.png | Bin .../emojis/1f1f9-1f1f3.png | Bin .../emojis/1f1f9-1f1f4.png | Bin .../emojis/1f1f9-1f1f7.png | Bin .../emojis/1f1f9-1f1f9.png | Bin .../emojis/1f1f9-1f1fb.png | Bin .../emojis/1f1f9-1f1fc.png | Bin .../emojis/1f1f9-1f1ff.png | Bin .../emojis/1f1fa-1f1e6.png | Bin .../emojis/1f1fa-1f1ec.png | Bin .../emojis/1f1fa-1f1f2.png | Bin .../emojis/1f1fa-1f1f3.png | Bin .../emojis/1f1fa-1f1f8.png | Bin .../emojis/1f1fa-1f1fe.png | Bin .../emojis/1f1fa-1f1ff.png | Bin .../emojis/1f1fb-1f1e6.png | Bin .../emojis/1f1fb-1f1e8.png | Bin .../emojis/1f1fb-1f1ea.png | Bin .../emojis/1f1fb-1f1ec.png | Bin .../emojis/1f1fb-1f1ee.png | Bin .../emojis/1f1fb-1f1f3.png | Bin .../emojis/1f1fb-1f1fa.png | Bin .../emojis/1f1fc-1f1eb.png | Bin .../emojis/1f1fc-1f1f8.png | Bin .../emojis/1f1fd-1f1f0.png | Bin .../emojis/1f1fe-1f1ea.png | Bin .../emojis/1f1fe-1f1f9.png | Bin .../emojis/1f1ff-1f1e6.png | Bin .../emojis/1f1ff-1f1f2.png | Bin .../emojis/1f1ff-1f1fc.png | Bin .../emojis/1f201.png | Bin .../emojis/1f202.png | Bin .../emojis/1f21a.png | Bin .../emojis/1f22f.png | Bin .../emojis/1f232.png | Bin .../emojis/1f233.png | Bin .../emojis/1f234.png | Bin .../emojis/1f235.png | Bin .../emojis/1f236.png | Bin .../emojis/1f237.png | Bin .../emojis/1f238.png | Bin .../emojis/1f239.png | Bin .../emojis/1f23a.png | Bin .../emojis/1f250.png | Bin .../emojis/1f251.png | Bin .../emojis/1f300.png | Bin .../emojis/1f301.png | Bin .../emojis/1f302.png | Bin .../emojis/1f303.png | Bin .../emojis/1f304.png | Bin .../emojis/1f305.png | Bin .../emojis/1f306.png | Bin .../emojis/1f307.png | Bin .../emojis/1f308.png | Bin .../emojis/1f309.png | Bin .../emojis/1f30a.png | Bin .../emojis/1f30b.png | Bin .../emojis/1f30c.png | Bin .../emojis/1f30d.png | Bin .../emojis/1f30e.png | Bin .../emojis/1f30f.png | Bin .../emojis/1f310.png | Bin .../emojis/1f311.png | Bin .../emojis/1f312.png | Bin .../emojis/1f313.png | Bin .../emojis/1f314.png | Bin .../emojis/1f315.png | Bin .../emojis/1f316.png | Bin .../emojis/1f317.png | Bin .../emojis/1f318.png | Bin .../emojis/1f319.png | Bin .../emojis/1f31a.png | Bin .../emojis/1f31b.png | Bin .../emojis/1f31c.png | Bin .../emojis/1f31d.png | Bin .../emojis/1f31e.png | Bin .../emojis/1f31f.png | Bin .../emojis/1f320.png | Bin .../emojis/1f321.png | Bin .../emojis/1f324.png | Bin .../emojis/1f325.png | Bin .../emojis/1f326.png | Bin .../emojis/1f327.png | Bin .../emojis/1f328.png | Bin .../emojis/1f329.png | Bin .../emojis/1f32a.png | Bin .../emojis/1f32b.png | Bin .../emojis/1f32c.png | Bin .../emojis/1f32d.png | Bin .../emojis/1f32e.png | Bin .../emojis/1f32f.png | Bin .../emojis/1f330.png | Bin .../emojis/1f331.png | Bin .../emojis/1f332.png | Bin .../emojis/1f333.png | Bin .../emojis/1f334.png | Bin .../emojis/1f335.png | Bin .../emojis/1f336.png | Bin .../emojis/1f337.png | Bin .../emojis/1f338.png | Bin .../emojis/1f339.png | Bin .../emojis/1f33a.png | Bin .../emojis/1f33b.png | Bin .../emojis/1f33c.png | Bin .../emojis/1f33d.png | Bin .../emojis/1f33e.png | Bin .../emojis/1f33f.png | Bin .../emojis/1f340.png | Bin .../emojis/1f341.png | Bin .../emojis/1f342.png | Bin .../emojis/1f343.png | Bin .../emojis/1f344.png | Bin .../emojis/1f345.png | Bin .../emojis/1f346.png | Bin .../emojis/1f347.png | Bin .../emojis/1f348.png | Bin .../emojis/1f349.png | Bin .../emojis/1f34a.png | Bin .../emojis/1f34b.png | Bin .../emojis/1f34c.png | Bin .../emojis/1f34d.png | Bin .../emojis/1f34e.png | Bin .../emojis/1f34f.png | Bin .../emojis/1f350.png | Bin .../emojis/1f351.png | Bin .../emojis/1f352.png | Bin .../emojis/1f353.png | Bin .../emojis/1f354.png | Bin .../emojis/1f355.png | Bin .../emojis/1f356.png | Bin .../emojis/1f357.png | Bin .../emojis/1f358.png | Bin .../emojis/1f359.png | Bin .../emojis/1f35a.png | Bin .../emojis/1f35b.png | Bin .../emojis/1f35c.png | Bin .../emojis/1f35d.png | Bin .../emojis/1f35e.png | Bin .../emojis/1f35f.png | Bin .../emojis/1f360.png | Bin .../emojis/1f361.png | Bin .../emojis/1f362.png | Bin .../emojis/1f363.png | Bin .../emojis/1f364.png | Bin .../emojis/1f365.png | Bin .../emojis/1f366.png | Bin .../emojis/1f367.png | Bin .../emojis/1f368.png | Bin .../emojis/1f369.png | Bin .../emojis/1f36a.png | Bin .../emojis/1f36b.png | Bin .../emojis/1f36c.png | Bin .../emojis/1f36d.png | Bin .../emojis/1f36e.png | Bin .../emojis/1f36f.png | Bin .../emojis/1f370.png | Bin .../emojis/1f371.png | Bin .../emojis/1f372.png | Bin .../emojis/1f373.png | Bin .../emojis/1f374.png | Bin .../emojis/1f375.png | Bin .../emojis/1f376.png | Bin .../emojis/1f377.png | Bin .../emojis/1f378.png | Bin .../emojis/1f379.png | Bin .../emojis/1f37a.png | Bin .../emojis/1f37b.png | Bin .../emojis/1f37c.png | Bin .../emojis/1f37d.png | Bin .../emojis/1f37e.png | Bin .../emojis/1f37f.png | Bin .../emojis/1f380.png | Bin .../emojis/1f381.png | Bin .../emojis/1f382.png | Bin .../emojis/1f383.png | Bin .../emojis/1f384.png | Bin .../emojis/1f385.png | Bin .../emojis/1f386.png | Bin .../emojis/1f387.png | Bin .../emojis/1f388.png | Bin .../emojis/1f389.png | Bin .../emojis/1f38a.png | Bin .../emojis/1f38b.png | Bin .../emojis/1f38c.png | Bin .../emojis/1f38d.png | Bin .../emojis/1f38e.png | Bin .../emojis/1f38f.png | Bin .../emojis/1f390.png | Bin .../emojis/1f391.png | Bin .../emojis/1f392.png | Bin .../emojis/1f393.png | Bin .../emojis/1f396.png | Bin .../emojis/1f397.png | Bin .../emojis/1f399.png | Bin .../emojis/1f39a.png | Bin .../emojis/1f39b.png | Bin .../emojis/1f39e.png | Bin .../emojis/1f39f.png | Bin .../emojis/1f3a0.png | Bin .../emojis/1f3a1.png | Bin .../emojis/1f3a2.png | Bin .../emojis/1f3a3.png | Bin .../emojis/1f3a4.png | Bin .../emojis/1f3a5.png | Bin .../emojis/1f3a6.png | Bin .../emojis/1f3a7.png | Bin .../emojis/1f3a8.png | Bin .../emojis/1f3a9.png | Bin .../emojis/1f3aa.png | Bin .../emojis/1f3ab.png | Bin .../emojis/1f3ac.png | Bin .../emojis/1f3ad.png | Bin .../emojis/1f3ae.png | Bin .../emojis/1f3af.png | Bin .../emojis/1f3b0.png | Bin .../emojis/1f3b1.png | Bin .../emojis/1f3b2.png | Bin .../emojis/1f3b3.png | Bin .../emojis/1f3b4.png | Bin .../emojis/1f3b5.png | Bin .../emojis/1f3b6.png | Bin .../emojis/1f3b7.png | Bin .../emojis/1f3b8.png | Bin .../emojis/1f3b9.png | Bin .../emojis/1f3ba.png | Bin .../emojis/1f3bb.png | Bin .../emojis/1f3bc.png | Bin .../emojis/1f3bd.png | Bin .../emojis/1f3be.png | Bin .../emojis/1f3bf.png | Bin .../emojis/1f3c0.png | Bin .../emojis/1f3c1.png | Bin .../emojis/1f3c2.png | Bin .../emojis/1f3c3-200d-2640-fe0f.png | Bin .../emojis/1f3c3-200d-2642-fe0f.png | Bin .../emojis/1f3c3.png | Bin .../emojis/1f3c4-200d-2640-fe0f.png | Bin .../emojis/1f3c4-200d-2642-fe0f.png | Bin .../emojis/1f3c4.png | Bin .../emojis/1f3c5.png | Bin .../emojis/1f3c6.png | Bin .../emojis/1f3c7.png | Bin .../emojis/1f3c8.png | Bin .../emojis/1f3c9.png | Bin .../emojis/1f3ca-200d-2640-fe0f.png | Bin .../emojis/1f3ca-200d-2642-fe0f.png | Bin .../emojis/1f3ca.png | Bin .../emojis/1f3cb-fe0f-200d-2640-fe0f.png | Bin .../emojis/1f3cb-fe0f-200d-2642-fe0f.png | Bin .../emojis/1f3cb.png | Bin .../emojis/1f3cc-fe0f-200d-2640-fe0f.png | Bin .../emojis/1f3cc-fe0f-200d-2642-fe0f.png | Bin .../emojis/1f3cc.png | Bin .../emojis/1f3cd.png | Bin .../emojis/1f3ce.png | Bin .../emojis/1f3cf.png | Bin .../emojis/1f3d0.png | Bin .../emojis/1f3d1.png | Bin .../emojis/1f3d2.png | Bin .../emojis/1f3d3.png | Bin .../emojis/1f3d4.png | Bin .../emojis/1f3d5.png | Bin .../emojis/1f3d6.png | Bin .../emojis/1f3d7.png | Bin .../emojis/1f3d8.png | Bin .../emojis/1f3d9.png | Bin .../emojis/1f3da.png | Bin .../emojis/1f3db.png | Bin .../emojis/1f3dc.png | Bin .../emojis/1f3dd.png | Bin .../emojis/1f3de.png | Bin .../emojis/1f3df.png | Bin .../emojis/1f3e0.png | Bin .../emojis/1f3e1.png | Bin .../emojis/1f3e2.png | Bin .../emojis/1f3e3.png | Bin .../emojis/1f3e4.png | Bin .../emojis/1f3e5.png | Bin .../emojis/1f3e6.png | Bin .../emojis/1f3e7.png | Bin .../emojis/1f3e8.png | Bin .../emojis/1f3e9.png | Bin .../emojis/1f3ea.png | Bin .../emojis/1f3eb.png | Bin .../emojis/1f3ec.png | Bin .../emojis/1f3ed.png | Bin .../emojis/1f3ee.png | Bin .../emojis/1f3ef.png | Bin .../emojis/1f3f0.png | Bin .../emojis/1f3f3-fe0f-200d-1f308.png | Bin .../emojis/1f3f3.png | Bin .../emojis/1f3f4.png | Bin .../emojis/1f3f5.png | Bin .../emojis/1f3f7.png | Bin .../emojis/1f3f8.png | Bin .../emojis/1f3f9.png | Bin .../emojis/1f3fa.png | Bin .../emojis/1f3fb.png | Bin .../emojis/1f3fc.png | Bin .../emojis/1f3fd.png | Bin .../emojis/1f3fe.png | Bin .../emojis/1f3ff.png | Bin .../emojis/1f400.png | Bin .../emojis/1f401.png | Bin .../emojis/1f402.png | Bin .../emojis/1f403.png | Bin .../emojis/1f404.png | Bin .../emojis/1f405.png | Bin .../emojis/1f406.png | Bin .../emojis/1f407.png | Bin .../emojis/1f408.png | Bin .../emojis/1f409.png | Bin .../emojis/1f40a.png | Bin .../emojis/1f40b.png | Bin .../emojis/1f40c.png | Bin .../emojis/1f40d.png | Bin .../emojis/1f40e.png | Bin .../emojis/1f40f.png | Bin .../emojis/1f410.png | Bin .../emojis/1f411.png | Bin .../emojis/1f412.png | Bin .../emojis/1f413.png | Bin .../emojis/1f414.png | Bin .../emojis/1f415.png | Bin .../emojis/1f416.png | Bin .../emojis/1f417.png | Bin .../emojis/1f418.png | Bin .../emojis/1f419.png | Bin .../emojis/1f41a.png | Bin .../emojis/1f41b.png | Bin .../emojis/1f41c.png | Bin .../emojis/1f41d.png | Bin .../emojis/1f41e.png | Bin .../emojis/1f41f.png | Bin .../emojis/1f420.png | Bin .../emojis/1f421.png | Bin .../emojis/1f422.png | Bin .../emojis/1f423.png | Bin .../emojis/1f424.png | Bin .../emojis/1f425.png | Bin .../emojis/1f426.png | Bin .../emojis/1f427.png | Bin .../emojis/1f428.png | Bin .../emojis/1f429.png | Bin .../emojis/1f42a.png | Bin .../emojis/1f42b.png | Bin .../emojis/1f42c.png | Bin .../emojis/1f42d.png | Bin .../emojis/1f42e.png | Bin .../emojis/1f42f.png | Bin .../emojis/1f430.png | Bin .../emojis/1f431.png | Bin .../emojis/1f432.png | Bin .../emojis/1f433.png | Bin .../emojis/1f434.png | Bin .../emojis/1f435.png | Bin .../emojis/1f436.png | Bin .../emojis/1f437.png | Bin .../emojis/1f438.png | Bin .../emojis/1f439.png | Bin .../emojis/1f43a.png | Bin .../emojis/1f43b.png | Bin .../emojis/1f43c.png | Bin .../emojis/1f43d.png | Bin .../emojis/1f43e.png | Bin .../emojis/1f43f.png | Bin .../emojis/1f440.png | Bin .../emojis/1f441.png | Bin .../emojis/1f442.png | Bin .../emojis/1f443.png | Bin .../emojis/1f444.png | Bin .../emojis/1f445.png | Bin .../emojis/1f446.png | Bin .../emojis/1f447.png | Bin .../emojis/1f448.png | Bin .../emojis/1f449.png | Bin .../emojis/1f44a.png | Bin .../emojis/1f44b.png | Bin .../emojis/1f44c.png | Bin .../emojis/1f44d.png | Bin .../emojis/1f44e.png | Bin .../emojis/1f44f.png | Bin .../emojis/1f450.png | Bin .../emojis/1f451.png | Bin .../emojis/1f452.png | Bin .../emojis/1f453.png | Bin .../emojis/1f454.png | Bin .../emojis/1f455.png | Bin .../emojis/1f456.png | Bin .../emojis/1f457.png | Bin .../emojis/1f458.png | Bin .../emojis/1f459.png | Bin .../emojis/1f45a.png | Bin .../emojis/1f45b.png | Bin .../emojis/1f45c.png | Bin .../emojis/1f45d.png | Bin .../emojis/1f45e.png | Bin .../emojis/1f45f.png | Bin .../emojis/1f460.png | Bin .../emojis/1f461.png | Bin .../emojis/1f462.png | Bin .../emojis/1f463.png | Bin .../emojis/1f464.png | Bin .../emojis/1f465.png | Bin .../emojis/1f466.png | Bin .../emojis/1f467.png | Bin .../emojis/1f468-200d-1f33e.png | Bin .../emojis/1f468-200d-1f373.png | Bin .../emojis/1f468-200d-1f393.png | Bin .../emojis/1f468-200d-1f3a4.png | Bin .../emojis/1f468-200d-1f3a8.png | Bin .../emojis/1f468-200d-1f3eb.png | Bin .../emojis/1f468-200d-1f3ed.png | Bin .../emojis/1f468-200d-1f466-200d-1f466.png | Bin .../emojis/1f468-200d-1f466.png | Bin .../emojis/1f468-200d-1f467-200d-1f466.png | Bin .../emojis/1f468-200d-1f467-200d-1f467.png | Bin .../emojis/1f468-200d-1f467.png | Bin ...1f468-200d-1f468-200d-1f466-200d-1f466.png | Bin .../emojis/1f468-200d-1f468-200d-1f466.png | Bin ...1f468-200d-1f468-200d-1f467-200d-1f466.png | Bin ...1f468-200d-1f468-200d-1f467-200d-1f467.png | Bin .../emojis/1f468-200d-1f468-200d-1f467.png | Bin ...1f468-200d-1f469-200d-1f466-200d-1f466.png | Bin .../emojis/1f468-200d-1f469-200d-1f466.png | Bin ...1f468-200d-1f469-200d-1f467-200d-1f466.png | Bin ...1f468-200d-1f469-200d-1f467-200d-1f467.png | Bin .../emojis/1f468-200d-1f469-200d-1f467.png | Bin .../emojis/1f468-200d-1f4bb.png | Bin .../emojis/1f468-200d-1f4bc.png | Bin .../emojis/1f468-200d-1f527.png | Bin .../emojis/1f468-200d-1f52c.png | Bin .../emojis/1f468-200d-1f680.png | Bin .../emojis/1f468-200d-1f692.png | Bin .../emojis/1f468-200d-2695-fe0f.png | Bin .../emojis/1f468-200d-2696-fe0f.png | Bin .../emojis/1f468-200d-2708-fe0f.png | Bin .../1f468-200d-2764-fe0f-200d-1f468.png | Bin ...8-200d-2764-fe0f-200d-1f48b-200d-1f468.png | Bin .../emojis/1f468.png | Bin .../emojis/1f469-200d-1f33e.png | Bin .../emojis/1f469-200d-1f373.png | Bin .../emojis/1f469-200d-1f393.png | Bin .../emojis/1f469-200d-1f3a4.png | Bin .../emojis/1f469-200d-1f3a8.png | Bin .../emojis/1f469-200d-1f3eb.png | Bin .../emojis/1f469-200d-1f3ed.png | Bin .../emojis/1f469-200d-1f466-200d-1f466.png | Bin .../emojis/1f469-200d-1f466.png | Bin .../emojis/1f469-200d-1f467-200d-1f466.png | Bin .../emojis/1f469-200d-1f467-200d-1f467.png | Bin .../emojis/1f469-200d-1f467.png | Bin ...1f469-200d-1f469-200d-1f466-200d-1f466.png | Bin .../emojis/1f469-200d-1f469-200d-1f466.png | Bin ...1f469-200d-1f469-200d-1f467-200d-1f466.png | Bin ...1f469-200d-1f469-200d-1f467-200d-1f467.png | Bin .../emojis/1f469-200d-1f469-200d-1f467.png | Bin .../emojis/1f469-200d-1f4bb.png | Bin .../emojis/1f469-200d-1f4bc.png | Bin .../emojis/1f469-200d-1f527.png | Bin .../emojis/1f469-200d-1f52c.png | Bin .../emojis/1f469-200d-1f680.png | Bin .../emojis/1f469-200d-1f692.png | Bin .../emojis/1f469-200d-2695-fe0f.png | Bin .../emojis/1f469-200d-2696-fe0f.png | Bin .../emojis/1f469-200d-2708-fe0f.png | Bin .../1f469-200d-2764-fe0f-200d-1f468.png | Bin .../1f469-200d-2764-fe0f-200d-1f469.png | Bin ...9-200d-2764-fe0f-200d-1f48b-200d-1f468.png | Bin ...9-200d-2764-fe0f-200d-1f48b-200d-1f469.png | Bin .../emojis/1f469.png | Bin .../emojis/1f46a.png | Bin .../emojis/1f46b.png | Bin .../emojis/1f46c.png | Bin .../emojis/1f46d.png | Bin .../emojis/1f46e-200d-2640-fe0f.png | Bin .../emojis/1f46e-200d-2642-fe0f.png | Bin .../emojis/1f46e.png | Bin .../emojis/1f46f-200d-2640-fe0f.png | Bin .../emojis/1f46f-200d-2642-fe0f.png | Bin .../emojis/1f46f.png | Bin .../emojis/1f470.png | Bin .../emojis/1f471-200d-2640-fe0f.png | Bin .../emojis/1f471-200d-2642-fe0f.png | Bin .../emojis/1f471.png | Bin .../emojis/1f472.png | Bin .../emojis/1f473-200d-2640-fe0f.png | Bin .../emojis/1f473-200d-2642-fe0f.png | Bin .../emojis/1f473.png | Bin .../emojis/1f474.png | Bin .../emojis/1f475.png | Bin .../emojis/1f476.png | Bin .../emojis/1f477-200d-2640-fe0f.png | Bin .../emojis/1f477-200d-2642-fe0f.png | Bin .../emojis/1f477.png | Bin .../emojis/1f478.png | Bin .../emojis/1f479.png | Bin .../emojis/1f47a.png | Bin .../emojis/1f47b.png | Bin .../emojis/1f47c.png | Bin .../emojis/1f47d.png | Bin .../emojis/1f47e.png | Bin .../emojis/1f47f.png | Bin .../emojis/1f480.png | Bin .../emojis/1f481-200d-2640-fe0f.png | Bin .../emojis/1f481-200d-2642-fe0f.png | Bin .../emojis/1f481.png | Bin .../emojis/1f482-200d-2640-fe0f.png | Bin .../emojis/1f482-200d-2642-fe0f.png | Bin .../emojis/1f482.png | Bin .../emojis/1f483.png | Bin .../emojis/1f484.png | Bin .../emojis/1f485.png | Bin .../emojis/1f486-200d-2640-fe0f.png | Bin .../emojis/1f486-200d-2642-fe0f.png | Bin .../emojis/1f486.png | Bin .../emojis/1f487-200d-2640-fe0f.png | Bin .../emojis/1f487-200d-2642-fe0f.png | Bin .../emojis/1f487.png | Bin .../emojis/1f488.png | Bin .../emojis/1f489.png | Bin .../emojis/1f48a.png | Bin .../emojis/1f48b.png | Bin .../emojis/1f48c.png | Bin .../emojis/1f48d.png | Bin .../emojis/1f48e.png | Bin .../emojis/1f48f.png | Bin .../emojis/1f490.png | Bin .../emojis/1f491.png | Bin .../emojis/1f492.png | Bin .../emojis/1f493.png | Bin .../emojis/1f494.png | Bin .../emojis/1f495.png | Bin .../emojis/1f496.png | Bin .../emojis/1f497.png | Bin .../emojis/1f498.png | Bin .../emojis/1f499.png | Bin .../emojis/1f49a.png | Bin .../emojis/1f49b.png | Bin .../emojis/1f49c.png | Bin .../emojis/1f49d.png | Bin .../emojis/1f49e.png | Bin .../emojis/1f49f.png | Bin .../emojis/1f4a0.png | Bin .../emojis/1f4a1.png | Bin .../emojis/1f4a2.png | Bin .../emojis/1f4a3.png | Bin .../emojis/1f4a4.png | Bin .../emojis/1f4a5.png | Bin .../emojis/1f4a6.png | Bin .../emojis/1f4a7.png | Bin .../emojis/1f4a8.png | Bin .../emojis/1f4a9.png | Bin .../emojis/1f4aa.png | Bin .../emojis/1f4ab.png | Bin .../emojis/1f4ac.png | Bin .../emojis/1f4ad.png | Bin .../emojis/1f4ae.png | Bin .../emojis/1f4af.png | Bin .../emojis/1f4b0.png | Bin .../emojis/1f4b1.png | Bin .../emojis/1f4b2.png | Bin .../emojis/1f4b3.png | Bin .../emojis/1f4b4.png | Bin .../emojis/1f4b5.png | Bin .../emojis/1f4b6.png | Bin .../emojis/1f4b7.png | Bin .../emojis/1f4b8.png | Bin .../emojis/1f4b9.png | Bin .../emojis/1f4ba.png | Bin .../emojis/1f4bb.png | Bin .../emojis/1f4bc.png | Bin .../emojis/1f4bd.png | Bin .../emojis/1f4be.png | Bin .../emojis/1f4bf.png | Bin .../emojis/1f4c0.png | Bin .../emojis/1f4c1.png | Bin .../emojis/1f4c2.png | Bin .../emojis/1f4c3.png | Bin .../emojis/1f4c4.png | Bin .../emojis/1f4c5.png | Bin .../emojis/1f4c6.png | Bin .../emojis/1f4c7.png | Bin .../emojis/1f4c8.png | Bin .../emojis/1f4c9.png | Bin .../emojis/1f4ca.png | Bin .../emojis/1f4cb.png | Bin .../emojis/1f4cc.png | Bin .../emojis/1f4cd.png | Bin .../emojis/1f4ce.png | Bin .../emojis/1f4cf.png | Bin .../emojis/1f4d0.png | Bin .../emojis/1f4d1.png | Bin .../emojis/1f4d2.png | Bin .../emojis/1f4d3.png | Bin .../emojis/1f4d4.png | Bin .../emojis/1f4d5.png | Bin .../emojis/1f4d6.png | Bin .../emojis/1f4d7.png | Bin .../emojis/1f4d8.png | Bin .../emojis/1f4d9.png | Bin .../emojis/1f4da.png | Bin .../emojis/1f4db.png | Bin .../emojis/1f4dc.png | Bin .../emojis/1f4dd.png | Bin .../emojis/1f4de.png | Bin .../emojis/1f4df.png | Bin .../emojis/1f4e0.png | Bin .../emojis/1f4e1.png | Bin .../emojis/1f4e2.png | Bin .../emojis/1f4e3.png | Bin .../emojis/1f4e4.png | Bin .../emojis/1f4e5.png | Bin .../emojis/1f4e6.png | Bin .../emojis/1f4e7.png | Bin .../emojis/1f4e8.png | Bin .../emojis/1f4e9.png | Bin .../emojis/1f4ea.png | Bin .../emojis/1f4eb.png | Bin .../emojis/1f4ec.png | Bin .../emojis/1f4ed.png | Bin .../emojis/1f4ee.png | Bin .../emojis/1f4ef.png | Bin .../emojis/1f4f0.png | Bin .../emojis/1f4f1.png | Bin .../emojis/1f4f2.png | Bin .../emojis/1f4f3.png | Bin .../emojis/1f4f4.png | Bin .../emojis/1f4f5.png | Bin .../emojis/1f4f6.png | Bin .../emojis/1f4f7.png | Bin .../emojis/1f4f8.png | Bin .../emojis/1f4f9.png | Bin .../emojis/1f4fa.png | Bin .../emojis/1f4fb.png | Bin .../emojis/1f4fc.png | Bin .../emojis/1f4fd.png | Bin .../emojis/1f4ff.png | Bin .../emojis/1f500.png | Bin .../emojis/1f501.png | Bin .../emojis/1f502.png | Bin .../emojis/1f503.png | Bin .../emojis/1f504.png | Bin .../emojis/1f505.png | Bin .../emojis/1f506.png | Bin .../emojis/1f507.png | Bin .../emojis/1f508.png | Bin .../emojis/1f509.png | Bin .../emojis/1f50a.png | Bin .../emojis/1f50b.png | Bin .../emojis/1f50c.png | Bin .../emojis/1f50d.png | Bin .../emojis/1f50e.png | Bin .../emojis/1f50f.png | Bin .../emojis/1f510.png | Bin .../emojis/1f511.png | Bin .../emojis/1f512.png | Bin .../emojis/1f513.png | Bin .../emojis/1f514.png | Bin .../emojis/1f515.png | Bin .../emojis/1f516.png | Bin .../emojis/1f517.png | Bin .../emojis/1f518.png | Bin .../emojis/1f519.png | Bin .../emojis/1f51a.png | Bin .../emojis/1f51b.png | Bin .../emojis/1f51c.png | Bin .../emojis/1f51d.png | Bin .../emojis/1f51e.png | Bin .../emojis/1f51f.png | Bin .../emojis/1f520.png | Bin .../emojis/1f521.png | Bin .../emojis/1f522.png | Bin .../emojis/1f523.png | Bin .../emojis/1f524.png | Bin .../emojis/1f525.png | Bin .../emojis/1f526.png | Bin .../emojis/1f527.png | Bin .../emojis/1f528.png | Bin .../emojis/1f529.png | Bin .../emojis/1f52a.png | Bin .../emojis/1f52b.png | Bin .../emojis/1f52c.png | Bin .../emojis/1f52d.png | Bin .../emojis/1f52e.png | Bin .../emojis/1f52f.png | Bin .../emojis/1f530.png | Bin .../emojis/1f531.png | Bin .../emojis/1f532.png | Bin .../emojis/1f533.png | Bin .../emojis/1f534.png | Bin .../emojis/1f535.png | Bin .../emojis/1f536.png | Bin .../emojis/1f537.png | Bin .../emojis/1f538.png | Bin .../emojis/1f539.png | Bin .../emojis/1f53a.png | Bin .../emojis/1f53b.png | Bin .../emojis/1f53c.png | Bin .../emojis/1f53d.png | Bin .../emojis/1f549.png | Bin .../emojis/1f54a.png | Bin .../emojis/1f54b.png | Bin .../emojis/1f54c.png | Bin .../emojis/1f54d.png | Bin .../emojis/1f54e.png | Bin .../emojis/1f550.png | Bin .../emojis/1f551.png | Bin .../emojis/1f552.png | Bin .../emojis/1f553.png | Bin .../emojis/1f554.png | Bin .../emojis/1f555.png | Bin .../emojis/1f556.png | Bin .../emojis/1f557.png | Bin .../emojis/1f558.png | Bin .../emojis/1f559.png | Bin .../emojis/1f55a.png | Bin .../emojis/1f55b.png | Bin .../emojis/1f55c.png | Bin .../emojis/1f55d.png | Bin .../emojis/1f55e.png | Bin .../emojis/1f55f.png | Bin .../emojis/1f560.png | Bin .../emojis/1f561.png | Bin .../emojis/1f562.png | Bin .../emojis/1f563.png | Bin .../emojis/1f564.png | Bin .../emojis/1f565.png | Bin .../emojis/1f566.png | Bin .../emojis/1f567.png | Bin .../emojis/1f56f.png | Bin .../emojis/1f570.png | Bin .../emojis/1f573.png | Bin .../emojis/1f574.png | Bin .../emojis/1f575-fe0f-200d-2640-fe0f.png | Bin .../emojis/1f575-fe0f-200d-2642-fe0f.png | Bin .../emojis/1f575.png | Bin .../emojis/1f576.png | Bin .../emojis/1f577.png | Bin .../emojis/1f578.png | Bin .../emojis/1f579.png | Bin .../emojis/1f57a.png | Bin .../emojis/1f587.png | Bin .../emojis/1f58a.png | Bin .../emojis/1f58b.png | Bin .../emojis/1f58c.png | Bin .../emojis/1f58d.png | Bin .../emojis/1f590.png | Bin .../emojis/1f595.png | Bin .../emojis/1f596.png | Bin .../emojis/1f5a4.png | Bin .../emojis/1f5a5.png | Bin .../emojis/1f5a8.png | Bin .../emojis/1f5b1.png | Bin .../emojis/1f5b2.png | Bin .../emojis/1f5bc.png | Bin .../emojis/1f5c2.png | Bin .../emojis/1f5c3.png | Bin .../emojis/1f5c4.png | Bin .../emojis/1f5d1.png | Bin .../emojis/1f5d2.png | Bin .../emojis/1f5d3.png | Bin .../emojis/1f5dc.png | Bin .../emojis/1f5dd.png | Bin .../emojis/1f5de.png | Bin .../emojis/1f5e1.png | Bin .../emojis/1f5e3.png | Bin .../emojis/1f5e8.png | Bin .../emojis/1f5ef.png | Bin .../emojis/1f5f3.png | Bin .../emojis/1f5fa.png | Bin .../emojis/1f5fb.png | Bin .../emojis/1f5fc.png | Bin .../emojis/1f5fd.png | Bin .../emojis/1f5fe.png | Bin .../emojis/1f5ff.png | Bin .../emojis/1f600.png | Bin .../emojis/1f601.png | Bin .../emojis/1f602.png | Bin .../emojis/1f603.png | Bin .../emojis/1f604.png | Bin .../emojis/1f605.png | Bin .../emojis/1f606.png | Bin .../emojis/1f607.png | Bin .../emojis/1f608.png | Bin .../emojis/1f609.png | Bin .../emojis/1f60a.png | Bin .../emojis/1f60b.png | Bin .../emojis/1f60c.png | Bin .../emojis/1f60d.png | Bin .../emojis/1f60e.png | Bin .../emojis/1f60f.png | Bin .../emojis/1f610.png | Bin .../emojis/1f611.png | Bin .../emojis/1f612.png | Bin .../emojis/1f613.png | Bin .../emojis/1f614.png | Bin .../emojis/1f615.png | Bin .../emojis/1f616.png | Bin .../emojis/1f617.png | Bin .../emojis/1f618.png | Bin .../emojis/1f619.png | Bin .../emojis/1f61a.png | Bin .../emojis/1f61b.png | Bin .../emojis/1f61c.png | Bin .../emojis/1f61d.png | Bin .../emojis/1f61e.png | Bin .../emojis/1f61f.png | Bin .../emojis/1f620.png | Bin .../emojis/1f621.png | Bin .../emojis/1f622.png | Bin .../emojis/1f623.png | Bin .../emojis/1f624.png | Bin .../emojis/1f625.png | Bin .../emojis/1f626.png | Bin .../emojis/1f627.png | Bin .../emojis/1f628.png | Bin .../emojis/1f629.png | Bin .../emojis/1f62a.png | Bin .../emojis/1f62b.png | Bin .../emojis/1f62c.png | Bin .../emojis/1f62d.png | Bin .../emojis/1f62e.png | Bin .../emojis/1f62f.png | Bin .../emojis/1f630.png | Bin .../emojis/1f631.png | Bin .../emojis/1f632.png | Bin .../emojis/1f633.png | Bin .../emojis/1f634.png | Bin .../emojis/1f635.png | Bin .../emojis/1f636.png | Bin .../emojis/1f637.png | Bin .../emojis/1f638.png | Bin .../emojis/1f639.png | Bin .../emojis/1f63a.png | Bin .../emojis/1f63b.png | Bin .../emojis/1f63c.png | Bin .../emojis/1f63d.png | Bin .../emojis/1f63e.png | Bin .../emojis/1f63f.png | Bin .../emojis/1f640.png | Bin .../emojis/1f641.png | Bin .../emojis/1f642.png | Bin .../emojis/1f643.png | Bin .../emojis/1f644.png | Bin .../emojis/1f645-200d-2640-fe0f.png | Bin .../emojis/1f645-200d-2642-fe0f.png | Bin .../emojis/1f645.png | Bin .../emojis/1f646-200d-2640-fe0f.png | Bin .../emojis/1f646-200d-2642-fe0f.png | Bin .../emojis/1f646.png | Bin .../emojis/1f647-200d-2640-fe0f.png | Bin .../emojis/1f647-200d-2642-fe0f.png | Bin .../emojis/1f647.png | Bin .../emojis/1f648.png | Bin .../emojis/1f649.png | Bin .../emojis/1f64a.png | Bin .../emojis/1f64b-200d-2640-fe0f.png | Bin .../emojis/1f64b-200d-2642-fe0f.png | Bin .../emojis/1f64b.png | Bin .../emojis/1f64c.png | Bin .../emojis/1f64d-200d-2640-fe0f.png | Bin .../emojis/1f64d-200d-2642-fe0f.png | Bin .../emojis/1f64d.png | Bin .../emojis/1f64e-200d-2640-fe0f.png | Bin .../emojis/1f64e-200d-2642-fe0f.png | Bin .../emojis/1f64e.png | Bin .../emojis/1f64f.png | Bin .../emojis/1f680.png | Bin .../emojis/1f681.png | Bin .../emojis/1f682.png | Bin .../emojis/1f683.png | Bin .../emojis/1f684.png | Bin .../emojis/1f685.png | Bin .../emojis/1f686.png | Bin .../emojis/1f687.png | Bin .../emojis/1f688.png | Bin .../emojis/1f689.png | Bin .../emojis/1f68a.png | Bin .../emojis/1f68b.png | Bin .../emojis/1f68c.png | Bin .../emojis/1f68d.png | Bin .../emojis/1f68e.png | Bin .../emojis/1f68f.png | Bin .../emojis/1f690.png | Bin .../emojis/1f691.png | Bin .../emojis/1f692.png | Bin .../emojis/1f693.png | Bin .../emojis/1f694.png | Bin .../emojis/1f695.png | Bin .../emojis/1f696.png | Bin .../emojis/1f697.png | Bin .../emojis/1f698.png | Bin .../emojis/1f699.png | Bin .../emojis/1f69a.png | Bin .../emojis/1f69b.png | Bin .../emojis/1f69c.png | Bin .../emojis/1f69d.png | Bin .../emojis/1f69e.png | Bin .../emojis/1f69f.png | Bin .../emojis/1f6a0.png | Bin .../emojis/1f6a1.png | Bin .../emojis/1f6a2.png | Bin .../emojis/1f6a3-200d-2640-fe0f.png | Bin .../emojis/1f6a3-200d-2642-fe0f.png | Bin .../emojis/1f6a3.png | Bin .../emojis/1f6a4.png | Bin .../emojis/1f6a5.png | Bin .../emojis/1f6a6.png | Bin .../emojis/1f6a7.png | Bin .../emojis/1f6a8.png | Bin .../emojis/1f6a9.png | Bin .../emojis/1f6aa.png | Bin .../emojis/1f6ab.png | Bin .../emojis/1f6ac.png | Bin .../emojis/1f6ad.png | Bin .../emojis/1f6ae.png | Bin .../emojis/1f6af.png | Bin .../emojis/1f6b0.png | Bin .../emojis/1f6b1.png | Bin .../emojis/1f6b2.png | Bin .../emojis/1f6b3.png | Bin .../emojis/1f6b4-200d-2640-fe0f.png | Bin .../emojis/1f6b4-200d-2642-fe0f.png | Bin .../emojis/1f6b4.png | Bin .../emojis/1f6b5-200d-2640-fe0f.png | Bin .../emojis/1f6b5-200d-2642-fe0f.png | Bin .../emojis/1f6b5.png | Bin .../emojis/1f6b6-200d-2640-fe0f.png | Bin .../emojis/1f6b6-200d-2642-fe0f.png | Bin .../emojis/1f6b6.png | Bin .../emojis/1f6b7.png | Bin .../emojis/1f6b8.png | Bin .../emojis/1f6b9.png | Bin .../emojis/1f6ba.png | Bin .../emojis/1f6bb.png | Bin .../emojis/1f6bc.png | Bin .../emojis/1f6bd.png | Bin .../emojis/1f6be.png | Bin .../emojis/1f6bf.png | Bin .../emojis/1f6c0.png | Bin .../emojis/1f6c1.png | Bin .../emojis/1f6c2.png | Bin .../emojis/1f6c3.png | Bin .../emojis/1f6c4.png | Bin .../emojis/1f6c5.png | Bin .../emojis/1f6cb.png | Bin .../emojis/1f6cc.png | Bin .../emojis/1f6cd.png | Bin .../emojis/1f6ce.png | Bin .../emojis/1f6cf.png | Bin .../emojis/1f6d0.png | Bin .../emojis/1f6d1.png | Bin .../emojis/1f6d2.png | Bin .../emojis/1f6e0.png | Bin .../emojis/1f6e1.png | Bin .../emojis/1f6e2.png | Bin .../emojis/1f6e3.png | Bin .../emojis/1f6e4.png | Bin .../emojis/1f6e5.png | Bin .../emojis/1f6e9.png | Bin .../emojis/1f6eb.png | Bin .../emojis/1f6ec.png | Bin .../emojis/1f6f0.png | Bin .../emojis/1f6f3.png | Bin .../emojis/1f6f4.png | Bin .../emojis/1f6f5.png | Bin .../emojis/1f6f6.png | Bin .../emojis/1f910.png | Bin .../emojis/1f911.png | Bin .../emojis/1f912.png | Bin .../emojis/1f913.png | Bin .../emojis/1f914.png | Bin .../emojis/1f915.png | Bin .../emojis/1f916.png | Bin .../emojis/1f917.png | Bin .../emojis/1f918.png | Bin .../emojis/1f919.png | Bin .../emojis/1f91a.png | Bin .../emojis/1f91b.png | Bin .../emojis/1f91c.png | Bin .../emojis/1f91d.png | Bin .../emojis/1f91e.png | Bin .../emojis/1f920.png | Bin .../emojis/1f921.png | Bin .../emojis/1f922.png | Bin .../emojis/1f923.png | Bin .../emojis/1f924.png | Bin .../emojis/1f925.png | Bin .../emojis/1f926-200d-2640-fe0f.png | Bin .../emojis/1f926-200d-2642-fe0f.png | Bin .../emojis/1f926.png | Bin .../emojis/1f927.png | Bin .../emojis/1f930.png | Bin .../emojis/1f933.png | Bin .../emojis/1f934.png | Bin .../emojis/1f935.png | Bin .../emojis/1f936.png | Bin .../emojis/1f937-200d-2640-fe0f.png | Bin .../emojis/1f937-200d-2642-fe0f.png | Bin .../emojis/1f937.png | Bin .../emojis/1f938-200d-2640-fe0f.png | Bin .../emojis/1f938-200d-2642-fe0f.png | Bin .../emojis/1f938.png | Bin .../emojis/1f939-200d-2640-fe0f.png | Bin .../emojis/1f939-200d-2642-fe0f.png | Bin .../emojis/1f939.png | Bin .../emojis/1f93a.png | Bin .../emojis/1f93c-200d-2640-fe0f.png | Bin .../emojis/1f93c-200d-2642-fe0f.png | Bin .../emojis/1f93c.png | Bin .../emojis/1f93d-200d-2640-fe0f.png | Bin .../emojis/1f93d-200d-2642-fe0f.png | Bin .../emojis/1f93d.png | Bin .../emojis/1f93e-200d-2640-fe0f.png | Bin .../emojis/1f93e-200d-2642-fe0f.png | Bin .../emojis/1f93e.png | Bin .../emojis/1f940.png | Bin .../emojis/1f941.png | Bin .../emojis/1f942.png | Bin .../emojis/1f943.png | Bin .../emojis/1f944.png | Bin .../emojis/1f945.png | Bin .../emojis/1f947.png | Bin .../emojis/1f948.png | Bin .../emojis/1f949.png | Bin .../emojis/1f94a.png | Bin .../emojis/1f94b.png | Bin .../emojis/1f950.png | Bin .../emojis/1f951.png | Bin .../emojis/1f952.png | Bin .../emojis/1f953.png | Bin .../emojis/1f954.png | Bin .../emojis/1f955.png | Bin .../emojis/1f956.png | Bin .../emojis/1f957.png | Bin .../emojis/1f958.png | Bin .../emojis/1f959.png | Bin .../emojis/1f95a.png | Bin .../emojis/1f95b.png | Bin .../emojis/1f95c.png | Bin .../emojis/1f95d.png | Bin .../emojis/1f95e.png | Bin .../emojis/1f980.png | Bin .../emojis/1f981.png | Bin .../emojis/1f982.png | Bin .../emojis/1f983.png | Bin .../emojis/1f984.png | Bin .../emojis/1f985.png | Bin .../emojis/1f986.png | Bin .../emojis/1f987.png | Bin .../emojis/1f988.png | Bin .../emojis/1f989.png | Bin .../emojis/1f98a.png | Bin .../emojis/1f98b.png | Bin .../emojis/1f98c.png | Bin .../emojis/1f98d.png | Bin .../emojis/1f98e.png | Bin .../emojis/1f98f.png | Bin .../emojis/1f990.png | Bin .../emojis/1f991.png | Bin .../emojis/1f9c0.png | Bin .../emojis/203c.png | Bin .../emojis/2049.png | Bin .../emojis/2122.png | Bin .../emojis/2139.png | Bin .../emojis/2194.png | Bin .../emojis/2195.png | Bin .../emojis/2196.png | Bin .../emojis/2197.png | Bin .../emojis/2198.png | Bin .../emojis/2199.png | Bin .../emojis/21a9.png | Bin .../emojis/21aa.png | Bin .../emojis/231a.png | Bin .../emojis/231b.png | Bin .../emojis/2328.png | Bin .../emojis/23cf.png | Bin .../emojis/23e9.png | Bin .../emojis/23ea.png | Bin .../emojis/23eb.png | Bin .../emojis/23ec.png | Bin .../emojis/23ed.png | Bin .../emojis/23ee.png | Bin .../emojis/23ef.png | Bin .../emojis/23f0.png | Bin .../emojis/23f1.png | Bin .../emojis/23f2.png | Bin .../emojis/23f3.png | Bin .../emojis/23f8.png | Bin .../emojis/23f9.png | Bin .../emojis/23fa.png | Bin .../emojis/24c2.png | Bin .../emojis/25aa.png | Bin .../emojis/25ab.png | Bin .../emojis/25b6.png | Bin .../emojis/25c0.png | Bin .../emojis/25fb.png | Bin .../emojis/25fc.png | Bin .../emojis/25fd.png | Bin .../emojis/25fe.png | Bin .../emojis/2600.png | Bin .../emojis/2601.png | Bin .../emojis/2602.png | Bin .../emojis/2603.png | Bin .../emojis/2604.png | Bin .../emojis/260e.png | Bin .../emojis/2611.png | Bin .../emojis/2614.png | Bin .../emojis/2615.png | Bin .../emojis/2618.png | Bin .../emojis/261d.png | Bin .../emojis/2620.png | Bin .../emojis/2622.png | Bin .../emojis/2623.png | Bin .../emojis/2626.png | Bin .../emojis/262a.png | Bin .../emojis/262e.png | Bin .../emojis/262f.png | Bin .../emojis/2638.png | Bin .../emojis/2639.png | Bin .../emojis/263a.png | Bin .../emojis/2640.png | Bin .../emojis/2642.png | Bin .../emojis/2648.png | Bin .../emojis/2649.png | Bin .../emojis/264a.png | Bin .../emojis/264b.png | Bin .../emojis/264c.png | Bin .../emojis/264d.png | Bin .../emojis/264e.png | Bin .../emojis/264f.png | Bin .../emojis/2650.png | Bin .../emojis/2651.png | Bin .../emojis/2652.png | Bin .../emojis/2653.png | Bin .../emojis/2660.png | Bin .../emojis/2663.png | Bin .../emojis/2665.png | Bin .../emojis/2666.png | Bin .../emojis/2668.png | Bin .../emojis/267b.png | Bin .../emojis/267f.png | Bin .../emojis/2692.png | Bin .../emojis/2693.png | Bin .../emojis/2694.png | Bin .../emojis/2695.png | Bin .../emojis/2696.png | Bin .../emojis/2697.png | Bin .../emojis/2699.png | Bin .../emojis/269b.png | Bin .../emojis/269c.png | Bin .../emojis/26a0.png | Bin .../emojis/26a1.png | Bin .../emojis/26aa.png | Bin .../emojis/26ab.png | Bin .../emojis/26b0.png | Bin .../emojis/26b1.png | Bin .../emojis/26bd.png | Bin .../emojis/26be.png | Bin .../emojis/26c4.png | Bin .../emojis/26c5.png | Bin .../emojis/26c8.png | Bin .../emojis/26ce.png | Bin .../emojis/26cf.png | Bin .../emojis/26d1.png | Bin .../emojis/26d3.png | Bin .../emojis/26d4.png | Bin .../emojis/26e9.png | Bin .../emojis/26ea.png | Bin .../emojis/26f0.png | Bin .../emojis/26f1.png | Bin .../emojis/26f2.png | Bin .../emojis/26f3.png | Bin .../emojis/26f4.png | Bin .../emojis/26f5.png | Bin .../emojis/26f7.png | Bin .../emojis/26f8.png | Bin .../emojis/26f9-fe0f-200d-2640-fe0f.png | Bin .../emojis/26f9-fe0f-200d-2642-fe0f.png | Bin .../emojis/26f9.png | Bin .../emojis/26fa.png | Bin .../emojis/26fd.png | Bin .../emojis/2702.png | Bin .../emojis/2705.png | Bin .../emojis/2708.png | Bin .../emojis/2709.png | Bin .../emojis/270a.png | Bin .../emojis/270b.png | Bin .../emojis/270c.png | Bin .../emojis/270d.png | Bin .../emojis/270f.png | Bin .../emojis/2712.png | Bin .../emojis/2714.png | Bin .../emojis/2716.png | Bin .../emojis/271d.png | Bin .../emojis/2721.png | Bin .../emojis/2728.png | Bin .../emojis/2733.png | Bin .../emojis/2734.png | Bin .../emojis/2744.png | Bin .../emojis/2747.png | Bin .../emojis/274c.png | Bin .../emojis/274e.png | Bin .../emojis/2753.png | Bin .../emojis/2754.png | Bin .../emojis/2755.png | Bin .../emojis/2757.png | Bin .../emojis/2763.png | Bin .../emojis/2764.png | Bin .../emojis/2795.png | Bin .../emojis/2796.png | Bin .../emojis/2797.png | Bin .../emojis/27a1.png | Bin .../emojis/27b0.png | Bin .../emojis/27bf.png | Bin .../emojis/2934.png | Bin .../emojis/2935.png | Bin .../emojis/2b05.png | Bin .../emojis/2b06.png | Bin .../emojis/2b07.png | Bin .../emojis/2b1b.png | Bin .../emojis/2b1c.png | Bin .../emojis/2b50.png | Bin .../emojis/2b55.png | Bin .../emojis/3030.png | Bin .../emojis/303d.png | Bin .../emojis/3297.png | Bin .../emojis/3299.png | Bin .../emojis/emojis-data.json | 0 .../fonts/OpenSans-Bold.ttf | Bin .../fonts/OpenSans-CondLight.eot | Bin .../fonts/OpenSans-CondLight.svg | 0 .../fonts/OpenSans-CondLight.ttf | Bin .../fonts/OpenSans-CondLight.woff | Bin .../fonts/OpenSans-Light.ttf | Bin .../fonts/OpenSans-Regular.ttf | Bin .../fonts/OpenSans-Semibold.ttf | Bin .../fonts/taiga.eot | Bin .../fonts/taiga.svg | 0 .../fonts/taiga.ttf | Bin .../fonts/taiga.woff | Bin .../images/attachment-gallery.png | Bin .../images/bg.png | Bin .../images/discover.png | Bin .../images/empty/empty_contact.png | Bin .../images/empty/empty_des.png | Bin .../images/empty/empty_field.png | Bin .../images/empty/empty_like.png | Bin .../images/empty/empty_mex.png | Bin .../images/empty/empty_moon.png | Bin .../images/empty/empty_sprint.png | Bin .../images/empty/empty_tex.png | Bin .../images/empty/empty_upvote.png | Bin .../images/empty/empty_watch.png | Bin .../images/epics-empty.png | Bin .../images/favicon.png | Bin .../images/import-logos/asana.png | Bin .../images/import-logos/github.png | Bin .../images/import-logos/jira.png | Bin .../images/import-logos/trello.png | Bin .../images/invitation_bg.jpg | Bin .../images/logo-color.png | Bin .../images/logo.png | Bin .../images/looking-for-people.png | Bin .../images/markitup/bg-container.png | Bin .../images/markitup/bg-editor-bbcode.png | Bin .../images/markitup/bg-editor-dotclear.png | Bin .../images/markitup/bg-editor-html.png | Bin .../images/markitup/bg-editor-json.png | Bin .../images/markitup/bg-editor-markdown.png | Bin .../images/markitup/bg-editor-textile.png | Bin .../images/markitup/bg-editor-wiki.png | Bin .../images/markitup/bg-editor-xml.png | Bin .../images/markitup/bg-editor.png | Bin .../images/markitup/body.png | Bin .../images/markitup/bold.png | Bin .../images/markitup/clean.png | Bin .../images/markitup/code.png | Bin .../images/markitup/h1.png | Bin .../images/markitup/h2.png | Bin .../images/markitup/h3.png | Bin .../images/markitup/h4.png | Bin .../images/markitup/h5.png | Bin .../images/markitup/h6.png | Bin .../images/markitup/handle.png | Bin .../images/markitup/help.png | Bin .../images/markitup/image.png | Bin .../images/markitup/italic.png | Bin .../images/markitup/jaysalvat.png | Bin .../images/markitup/link.png | Bin .../images/markitup/list-bullet.png | Bin .../images/markitup/list-numeric.png | Bin .../images/markitup/markitup.png | Bin .../images/markitup/menu.png | Bin .../images/markitup/picture.png | Bin .../images/markitup/preview.png | Bin .../images/markitup/preview_ico.png | Bin .../images/markitup/quotes.png | Bin .../images/markitup/stroke.png | Bin .../images/markitup/submenu.png | Bin .../images/menu-vert.png | Bin .../images/menu.png | Bin .../images/monster-fight.png | Bin .../images/notification-decoration.png | Bin .../images/project-logos/project-logo-01.png | Bin .../images/project-logos/project-logo-02.png | Bin .../images/project-logos/project-logo-03.png | Bin .../images/project-logos/project-logo-04.png | Bin .../images/project-logos/project-logo-05.png | Bin .../images/quote.png | Bin .../images/tribe-logo.png | Bin .../images/unnamed.png | Bin .../images/user-avatars/user-avatar-01.png | Bin .../images/user-avatars/user-avatar-02.png | Bin .../images/user-avatars/user-avatar-03.png | Bin .../images/user-avatars/user-avatar-04.png | Bin .../images/user-avatars/user-avatar-05.png | Bin .../images/user-noimage.png | Bin .../js/app-loader.js | 2 +- dist/v-1549282893552/js/app.js | 25 ++++++++++++++++++ .../js/libs.js | 0 dist/v-1549282893552/js/maps/app.js.map | 1 + .../js/maps/libs.js.map | 0 dist/v-1549282893552/js/templates.js | 19 +++++++++++++ .../locales/moment-locales/af.js | 0 .../locales/moment-locales/ar-dz.js | 0 .../locales/moment-locales/ar-kw.js | 0 .../locales/moment-locales/ar-ly.js | 0 .../locales/moment-locales/ar-ma.js | 0 .../locales/moment-locales/ar-sa.js | 0 .../locales/moment-locales/ar-tn.js | 0 .../locales/moment-locales/ar.js | 0 .../locales/moment-locales/az.js | 0 .../locales/moment-locales/be.js | 0 .../locales/moment-locales/bg.js | 0 .../locales/moment-locales/bm.js | 0 .../locales/moment-locales/bn.js | 0 .../locales/moment-locales/bo.js | 0 .../locales/moment-locales/br.js | 0 .../locales/moment-locales/bs.js | 0 .../locales/moment-locales/ca.js | 0 .../locales/moment-locales/cs.js | 0 .../locales/moment-locales/cv.js | 0 .../locales/moment-locales/cy.js | 0 .../locales/moment-locales/da.js | 0 .../locales/moment-locales/de-at.js | 0 .../locales/moment-locales/de-ch.js | 0 .../locales/moment-locales/de.js | 0 .../locales/moment-locales/dv.js | 0 .../locales/moment-locales/el.js | 0 .../locales/moment-locales/en-au.js | 0 .../locales/moment-locales/en-ca.js | 0 .../locales/moment-locales/en-gb.js | 0 .../locales/moment-locales/en-ie.js | 0 .../locales/moment-locales/en-il.js | 0 .../locales/moment-locales/en-nz.js | 0 .../locales/moment-locales/eo.js | 0 .../locales/moment-locales/es-do.js | 0 .../locales/moment-locales/es-us.js | 0 .../locales/moment-locales/es.js | 0 .../locales/moment-locales/et.js | 0 .../locales/moment-locales/eu.js | 0 .../locales/moment-locales/fa.js | 0 .../locales/moment-locales/fi.js | 0 .../locales/moment-locales/fo.js | 0 .../locales/moment-locales/fr-ca.js | 0 .../locales/moment-locales/fr-ch.js | 0 .../locales/moment-locales/fr.js | 0 .../locales/moment-locales/fy.js | 0 .../locales/moment-locales/gd.js | 0 .../locales/moment-locales/gl.js | 0 .../locales/moment-locales/gom-latn.js | 0 .../locales/moment-locales/gu.js | 0 .../locales/moment-locales/he.js | 0 .../locales/moment-locales/hi.js | 0 .../locales/moment-locales/hr.js | 0 .../locales/moment-locales/hu.js | 0 .../locales/moment-locales/hy-am.js | 0 .../locales/moment-locales/id.js | 0 .../locales/moment-locales/is.js | 0 .../locales/moment-locales/it.js | 0 .../locales/moment-locales/ja.js | 0 .../locales/moment-locales/jv.js | 0 .../locales/moment-locales/ka.js | 0 .../locales/moment-locales/kk.js | 0 .../locales/moment-locales/km.js | 0 .../locales/moment-locales/kn.js | 0 .../locales/moment-locales/ko.js | 0 .../locales/moment-locales/ku.js | 0 .../locales/moment-locales/ky.js | 0 .../locales/moment-locales/lb.js | 0 .../locales/moment-locales/lo.js | 0 .../locales/moment-locales/lt.js | 0 .../locales/moment-locales/lv.js | 0 .../locales/moment-locales/me.js | 0 .../locales/moment-locales/mi.js | 0 .../locales/moment-locales/mk.js | 0 .../locales/moment-locales/ml.js | 0 .../locales/moment-locales/mn.js | 0 .../locales/moment-locales/mr.js | 0 .../locales/moment-locales/ms-my.js | 0 .../locales/moment-locales/ms.js | 0 .../locales/moment-locales/mt.js | 0 .../locales/moment-locales/my.js | 0 .../locales/moment-locales/nb.js | 0 .../locales/moment-locales/ne.js | 0 .../locales/moment-locales/nl-be.js | 0 .../locales/moment-locales/nl.js | 0 .../locales/moment-locales/nn.js | 0 .../locales/moment-locales/pa-in.js | 0 .../locales/moment-locales/pl.js | 0 .../locales/moment-locales/pt-br.js | 0 .../locales/moment-locales/pt.js | 0 .../locales/moment-locales/ro.js | 0 .../locales/moment-locales/ru.js | 0 .../locales/moment-locales/sd.js | 0 .../locales/moment-locales/se.js | 0 .../locales/moment-locales/si.js | 0 .../locales/moment-locales/sk.js | 0 .../locales/moment-locales/sl.js | 0 .../locales/moment-locales/sq.js | 0 .../locales/moment-locales/sr-cyrl.js | 0 .../locales/moment-locales/sr.js | 0 .../locales/moment-locales/ss.js | 0 .../locales/moment-locales/sv.js | 0 .../locales/moment-locales/sw.js | 0 .../locales/moment-locales/ta.js | 0 .../locales/moment-locales/te.js | 0 .../locales/moment-locales/tet.js | 0 .../locales/moment-locales/tg.js | 0 .../locales/moment-locales/th.js | 0 .../locales/moment-locales/tl-ph.js | 0 .../locales/moment-locales/tlh.js | 0 .../locales/moment-locales/tr.js | 0 .../locales/moment-locales/tzl.js | 0 .../locales/moment-locales/tzm-latn.js | 0 .../locales/moment-locales/tzm.js | 0 .../locales/moment-locales/ug-cn.js | 0 .../locales/moment-locales/uk.js | 0 .../locales/moment-locales/ur.js | 0 .../locales/moment-locales/uz-latn.js | 0 .../locales/moment-locales/uz.js | 0 .../locales/moment-locales/vi.js | 0 .../locales/moment-locales/x-pseudo.js | 0 .../locales/moment-locales/yo.js | 0 .../locales/moment-locales/zh-cn.js | 0 .../locales/moment-locales/zh-hk.js | 0 .../locales/moment-locales/zh-tw.js | 0 .../locales/taiga/locale-ca.json | 1 + .../locales/taiga/locale-de.json | 1 + .../locales/taiga/locale-en.json | 1 + .../locales/taiga/locale-es.json | 1 + .../locales/taiga/locale-fa.json | 1 + .../locales/taiga/locale-fi.json | 1 + .../locales/taiga/locale-fr.json | 1 + .../locales/taiga/locale-it.json | 1 + .../locales/taiga/locale-ja.json | 1 + .../locales/taiga/locale-ko.json | 1 + .../locales/taiga/locale-nb.json | 1 + .../locales/taiga/locale-nl.json | 1 + .../locales/taiga/locale-pl.json | 1 + .../locales/taiga/locale-pt-br.json | 1 + .../locales/taiga/locale-ru.json | 1 + .../locales/taiga/locale-sv.json | 1 + .../locales/taiga/locale-tr.json | 1 + .../locales/taiga/locale-uk.json | 1 + .../locales/taiga/locale-zh-hans.json | 1 + .../locales/taiga/locale-zh-hant.json | 1 + .../prism/prism-abap.min.js | 0 .../prism/prism-actionscript.min.js | 0 .../prism/prism-ada.min.js | 0 .../prism/prism-apacheconf.min.js | 0 .../prism/prism-apl.min.js | 0 .../prism/prism-applescript.min.js | 0 .../prism/prism-arduino.min.js | 0 .../prism/prism-arff.min.js | 0 .../prism/prism-asciidoc.min.js | 0 .../prism/prism-asm6502.min.js | 0 .../prism/prism-aspnet.min.js | 0 .../prism/prism-autohotkey.min.js | 0 .../prism/prism-autoit.min.js | 0 .../prism/prism-bash.min.js | 0 .../prism/prism-basic.min.js | 0 .../prism/prism-batch.min.js | 0 .../prism/prism-bison.min.js | 0 .../prism/prism-brainfuck.min.js | 0 .../prism/prism-bro.min.js | 0 .../prism/prism-c.min.js | 0 .../prism/prism-clike.min.js | 0 .../prism/prism-clojure.min.js | 0 .../prism/prism-coffeescript.min.js | 0 .../prism/prism-core.min.js | 0 .../prism/prism-cpp.min.js | 0 .../prism/prism-crystal.min.js | 0 .../prism/prism-csharp.min.js | 0 .../prism/prism-csp.min.js | 0 .../prism/prism-css-extras.min.js | 0 .../prism/prism-css.min.js | 0 .../prism/prism-d.min.js | 0 .../prism/prism-dart.min.js | 0 .../prism/prism-diff.min.js | 0 .../prism/prism-django.min.js | 0 .../prism/prism-docker.min.js | 0 .../prism/prism-eiffel.min.js | 0 .../prism/prism-elixir.min.js | 0 .../prism/prism-elm.min.js | 0 .../prism/prism-erb.min.js | 0 .../prism/prism-erlang.min.js | 0 .../prism/prism-flow.min.js | 0 .../prism/prism-fortran.min.js | 0 .../prism/prism-fsharp.min.js | 0 .../prism/prism-gedcom.min.js | 0 .../prism/prism-gherkin.min.js | 0 .../prism/prism-git.min.js | 0 .../prism/prism-glsl.min.js | 0 .../prism/prism-go.min.js | 0 .../prism/prism-graphql.min.js | 0 .../prism/prism-groovy.min.js | 0 .../prism/prism-haml.min.js | 0 .../prism/prism-handlebars.min.js | 0 .../prism/prism-haskell.min.js | 0 .../prism/prism-haxe.min.js | 0 .../prism/prism-hpkp.min.js | 0 .../prism/prism-hsts.min.js | 0 .../prism/prism-http.min.js | 0 .../prism/prism-ichigojam.min.js | 0 .../prism/prism-icon.min.js | 0 .../prism/prism-inform7.min.js | 0 .../prism/prism-ini.min.js | 0 .../prism/prism-io.min.js | 0 .../prism/prism-j.min.js | 0 .../prism/prism-java.min.js | 0 .../prism/prism-javascript.min.js | 0 .../prism/prism-jolie.min.js | 0 .../prism/prism-json.min.js | 0 .../prism/prism-jsx.min.js | 0 .../prism/prism-julia.min.js | 0 .../prism/prism-keyman.min.js | 0 .../prism/prism-kotlin.min.js | 0 .../prism/prism-languages.json | 0 .../prism/prism-latex.min.js | 0 .../prism/prism-less.min.js | 0 .../prism/prism-liquid.min.js | 0 .../prism/prism-lisp.min.js | 0 .../prism/prism-livescript.min.js | 0 .../prism/prism-lolcode.min.js | 0 .../prism/prism-lua.min.js | 0 .../prism/prism-makefile.min.js | 0 .../prism/prism-markdown.min.js | 0 .../prism/prism-markup-templating.min.js | 0 .../prism/prism-markup.min.js | 0 .../prism/prism-matlab.min.js | 0 .../prism/prism-mel.min.js | 0 .../prism/prism-mizar.min.js | 0 .../prism/prism-monkey.min.js | 0 .../prism/prism-n4js.min.js | 0 .../prism/prism-nasm.min.js | 0 .../prism/prism-nginx.min.js | 0 .../prism/prism-nim.min.js | 0 .../prism/prism-nix.min.js | 0 .../prism/prism-nsis.min.js | 0 .../prism/prism-objectivec.min.js | 0 .../prism/prism-ocaml.min.js | 0 .../prism/prism-opencl.min.js | 0 .../prism/prism-oz.min.js | 0 .../prism/prism-parigp.min.js | 0 .../prism/prism-parser.min.js | 0 .../prism/prism-pascal.min.js | 0 .../prism/prism-perl.min.js | 0 .../prism/prism-php-extras.min.js | 0 .../prism/prism-php.min.js | 0 .../prism/prism-plsql.min.js | 0 .../prism/prism-powershell.min.js | 0 .../prism/prism-processing.min.js | 0 .../prism/prism-prolog.min.js | 0 .../prism/prism-properties.min.js | 0 .../prism/prism-protobuf.min.js | 0 .../prism/prism-pug.min.js | 0 .../prism/prism-puppet.min.js | 0 .../prism/prism-pure.min.js | 0 .../prism/prism-python.min.js | 0 .../prism/prism-q.min.js | 0 .../prism/prism-qore.min.js | 0 .../prism/prism-r.min.js | 0 .../prism/prism-reason.min.js | 0 .../prism/prism-renpy.min.js | 0 .../prism/prism-rest.min.js | 0 .../prism/prism-rip.min.js | 0 .../prism/prism-roboconf.min.js | 0 .../prism/prism-ruby.min.js | 0 .../prism/prism-rust.min.js | 0 .../prism/prism-sas.min.js | 0 .../prism/prism-sass.min.js | 0 .../prism/prism-scala.min.js | 0 .../prism/prism-scheme.min.js | 0 .../prism/prism-scss.min.js | 0 .../prism/prism-smalltalk.min.js | 0 .../prism/prism-smarty.min.js | 0 .../prism/prism-soy.min.js | 0 .../prism/prism-sql.min.js | 0 .../prism/prism-stylus.min.js | 0 .../prism/prism-swift.min.js | 0 .../prism/prism-tap.min.js | 0 .../prism/prism-tcl.min.js | 0 .../prism/prism-textile.min.js | 0 .../prism/prism-tsx.min.js | 0 .../prism/prism-tt2.min.js | 0 .../prism/prism-twig.min.js | 0 .../prism/prism-typescript.min.js | 0 .../prism/prism-vbnet.min.js | 0 .../prism/prism-velocity.min.js | 0 .../prism/prism-verilog.min.js | 0 .../prism/prism-vhdl.min.js | 0 .../prism/prism-vim.min.js | 0 .../prism/prism-visual-basic.min.js | 0 .../prism/prism-wasm.min.js | 0 .../prism/prism-wiki.min.js | 0 .../prism/prism-xeora.min.js | 0 .../prism/prism-xojo.min.js | 0 .../prism/prism-xquery.min.js | 0 .../prism/prism-yaml.min.js | 0 .../styles/theme-high-contrast.css | 4 +++ .../styles/theme-material-design.css | 4 +++ dist/v-1549282893552/styles/theme-taiga.css | 4 +++ .../svg/editor.svg | 0 .../svg/icons/block-user.svg | 0 .../svg/icons/multi-block-project.svg | 0 .../svg/icons/project-limit.svg | 0 .../svg/icons/team-question.svg | 0 .../svg/logo-color.svg | 0 .../svg/logo-moustache.svg | 0 .../svg/logo-nav.svg | 0 .../svg/logo.svg | 0 .../svg/pattern.svg | 0 .../svg/spinner-circle.svg | 0 .../svg/spinner.svg | 0 .../svg/sprite.svg | 0 1921 files changed, 84 insertions(+), 82 deletions(-) delete mode 100644 dist/v-1547534999795/js/app.js delete mode 100644 dist/v-1547534999795/js/maps/app.js.map delete mode 100644 dist/v-1547534999795/js/templates.js delete mode 100644 dist/v-1547534999795/locales/taiga/locale-ca.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-de.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-en.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-es.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-fa.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-fi.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-fr.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-it.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-ja.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-ko.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-nb.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-nl.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-pl.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-pt-br.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-ru.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-sv.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-tr.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-zh-hans.json delete mode 100644 dist/v-1547534999795/locales/taiga/locale-zh-hant.json delete mode 100644 dist/v-1547534999795/styles/theme-high-contrast.css delete mode 100644 dist/v-1547534999795/styles/theme-material-design.css delete mode 100644 dist/v-1547534999795/styles/theme-taiga.css rename dist/{v-1547534999795 => v-1549282893552}/emojis/0023-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/002a-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0030-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0031-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0032-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0033-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0034-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0035-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0036-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0037-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0038-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/0039-20e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f004.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f0cf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f170.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f171.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f17e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f17f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f18e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f191.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f192.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f193.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f194.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f195.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f196.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f197.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f198.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f199.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f19a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1f6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e6-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1e7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1f6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e7-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e8-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e9-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e9-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e9-1f1ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e9-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e9-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e9-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1e9-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ea-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1eb-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1eb-1f1ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1eb-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1eb-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1eb-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1eb-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1e7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1f6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ec-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ed-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ed-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ed-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ed-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ed-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ed-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1f6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ee-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ef-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ef-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ef-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ef-1f1f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f0-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1e7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f1-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f2-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f3-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f4-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f5-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f6-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f7-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f7-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f7-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f7-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f7-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1e7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f8-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1f9-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fa-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fa-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fa-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fa-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fa-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fa-1f1fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fa-1f1ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fb-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fb-1f1e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fb-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fb-1f1ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fb-1f1ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fb-1f1f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fb-1f1fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fc-1f1eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fc-1f1f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fd-1f1f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fe-1f1ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1fe-1f1f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ff-1f1e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ff-1f1f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f1ff-1f1fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f201.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f202.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f21a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f22f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f232.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f233.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f234.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f235.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f236.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f237.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f238.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f239.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f23a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f250.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f251.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f300.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f301.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f302.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f303.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f304.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f305.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f306.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f307.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f308.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f309.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f30a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f30b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f30c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f30d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f30e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f30f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f310.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f311.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f312.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f313.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f314.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f315.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f316.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f317.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f318.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f319.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f31a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f31b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f31c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f31d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f31e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f31f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f320.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f321.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f324.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f325.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f326.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f327.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f328.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f329.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f32a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f32b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f32c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f32d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f32e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f32f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f330.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f331.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f332.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f333.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f334.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f335.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f336.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f337.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f338.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f339.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f33a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f33b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f33c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f33d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f33e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f33f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f340.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f341.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f342.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f343.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f344.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f345.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f346.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f347.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f348.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f349.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f34a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f34b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f34c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f34d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f34e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f34f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f350.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f351.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f352.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f353.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f354.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f355.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f356.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f357.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f358.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f359.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f35a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f35b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f35c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f35d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f35e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f35f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f360.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f361.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f362.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f363.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f364.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f365.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f366.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f367.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f368.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f369.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f36a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f36b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f36c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f36d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f36e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f36f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f370.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f371.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f372.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f373.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f374.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f375.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f376.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f377.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f378.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f379.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f37a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f37b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f37c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f37d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f37e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f37f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f380.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f381.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f382.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f383.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f384.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f385.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f386.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f387.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f388.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f389.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f38a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f38b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f38c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f38d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f38e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f38f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f390.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f391.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f392.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f393.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f396.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f397.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f399.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f39a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f39b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f39e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f39f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3a9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3aa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ab.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ac.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ad.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ae.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3af.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3b9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ba.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3bb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3bc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3bd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3be.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3bf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c3-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c3-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c4-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c4-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3c9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ca-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ca-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ca.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3cb-fe0f-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3cb-fe0f-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3cb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3cc-fe0f-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3cc-fe0f-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3cc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3cd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ce.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3cf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3d9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3da.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3db.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3dc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3dd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3de.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3df.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3f3-fe0f-200d-1f308.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f3ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f400.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f401.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f402.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f403.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f404.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f405.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f406.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f407.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f408.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f409.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f40a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f40b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f40c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f40d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f40e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f40f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f410.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f411.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f412.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f413.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f414.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f415.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f416.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f417.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f418.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f419.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f41a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f41b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f41c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f41d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f41e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f41f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f420.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f421.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f422.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f423.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f424.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f425.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f426.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f427.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f428.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f429.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f42a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f42b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f42c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f42d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f42e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f42f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f430.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f431.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f432.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f433.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f434.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f435.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f436.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f437.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f438.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f439.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f43a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f43b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f43c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f43d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f43e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f43f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f440.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f441.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f442.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f443.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f444.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f445.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f446.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f447.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f448.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f449.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f44a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f44b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f44c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f44d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f44e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f44f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f450.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f451.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f452.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f453.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f454.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f455.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f456.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f457.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f458.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f459.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f45a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f45b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f45c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f45d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f45e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f45f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f460.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f461.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f462.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f463.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f464.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f465.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f33e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f373.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f393.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f3a4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f3a8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f3eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f3ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f466-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f467-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f467-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f468-200d-1f466-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f468-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f468-200d-1f467-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f468-200d-1f467-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f468-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f469-200d-1f466-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f469-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f469-200d-1f467-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f469-200d-1f467-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f469-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f4bb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f4bc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f527.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f52c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f680.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-1f692.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-2695-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-2696-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-2708-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-2764-fe0f-200d-1f468.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f468.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f33e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f373.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f393.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f3a4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f3a8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f3eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f3ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f466-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f467-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f467-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f469-200d-1f466-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f469-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f469-200d-1f467-200d-1f466.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f469-200d-1f467-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f469-200d-1f467.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f4bb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f4bc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f527.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f52c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f680.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-1f692.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-2695-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-2696-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-2708-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-2764-fe0f-200d-1f468.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-2764-fe0f-200d-1f469.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f469.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46e-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46e-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46f-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46f-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f46f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f470.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f471-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f471-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f471.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f472.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f473-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f473-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f473.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f474.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f475.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f476.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f477-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f477-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f477.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f478.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f479.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f47a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f47b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f47c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f47d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f47e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f47f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f480.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f481-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f481-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f481.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f482-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f482-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f482.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f483.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f484.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f485.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f486-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f486-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f486.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f487-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f487-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f487.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f488.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f489.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f48a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f48b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f48c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f48d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f48e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f48f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f490.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f491.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f492.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f493.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f494.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f495.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f496.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f497.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f498.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f499.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f49a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f49b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f49c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f49d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f49e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f49f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4a9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4aa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ab.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ac.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ad.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ae.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4af.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4b9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ba.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4bb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4bc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4bd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4be.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4bf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4c9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ca.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4cb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4cc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4cd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ce.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4cf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4d9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4da.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4db.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4dc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4dd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4de.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4df.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f4ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f500.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f501.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f502.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f503.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f504.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f505.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f506.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f507.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f508.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f509.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f50a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f50b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f50c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f50d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f50e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f50f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f510.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f511.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f512.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f513.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f514.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f515.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f516.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f517.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f518.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f519.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f51a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f51b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f51c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f51d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f51e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f51f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f520.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f521.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f522.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f523.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f524.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f525.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f526.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f527.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f528.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f529.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f52a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f52b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f52c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f52d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f52e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f52f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f530.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f531.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f532.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f533.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f534.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f535.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f536.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f537.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f538.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f539.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f53a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f53b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f53c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f53d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f549.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f54a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f54b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f54c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f54d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f54e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f550.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f551.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f552.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f553.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f554.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f555.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f556.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f557.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f558.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f559.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f55a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f55b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f55c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f55d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f55e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f55f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f560.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f561.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f562.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f563.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f564.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f565.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f566.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f567.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f56f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f570.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f573.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f574.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f575-fe0f-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f575-fe0f-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f575.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f576.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f577.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f578.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f579.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f57a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f587.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f58a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f58b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f58c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f58d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f590.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f595.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f596.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5a4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5a5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5a8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5b1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5b2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5bc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5c2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5c3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5c4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5d1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5d2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5d3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5dc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5dd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5de.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5e1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5e8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f5ff.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f600.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f601.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f602.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f603.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f604.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f605.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f606.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f607.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f608.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f609.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f60a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f60b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f60c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f60d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f60e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f60f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f610.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f611.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f612.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f613.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f614.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f615.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f616.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f617.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f618.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f619.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f61a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f61b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f61c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f61d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f61e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f61f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f620.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f621.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f622.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f623.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f624.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f625.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f626.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f627.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f628.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f629.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f62a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f62b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f62c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f62d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f62e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f62f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f630.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f631.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f632.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f633.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f634.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f635.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f636.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f637.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f638.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f639.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f63a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f63b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f63c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f63d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f63e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f63f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f640.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f641.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f642.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f643.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f644.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f645-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f645-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f645.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f646-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f646-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f646.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f647-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f647-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f647.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f648.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f649.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64b-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64b-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64d-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64d-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64e-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64e-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f64f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f680.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f681.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f682.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f683.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f684.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f685.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f686.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f687.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f688.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f689.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f68a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f68b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f68c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f68d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f68e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f68f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f690.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f691.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f692.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f693.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f694.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f695.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f696.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f697.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f698.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f699.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f69a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f69b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f69c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f69d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f69e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f69f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a3-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a3-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6a9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6aa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6ab.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6ac.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6ad.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6ae.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6af.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b4-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b4-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b5-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b5-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b6-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b6-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6b9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6ba.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6bb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6bc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6bd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6be.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6bf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6c0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6c1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6c2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6c3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6c4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6c5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6cb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6cc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6cd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6ce.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6cf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6d0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6d1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6d2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6e0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6e1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6e2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6e3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6e4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6e5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f6f6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f910.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f911.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f912.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f913.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f914.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f915.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f916.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f917.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f918.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f919.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f91a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f91b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f91c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f91d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f91e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f920.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f921.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f922.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f923.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f924.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f925.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f926-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f926-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f926.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f927.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f930.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f933.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f934.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f935.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f936.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f937-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f937-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f937.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f938-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f938-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f938.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f939-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f939-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f939.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93c-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93c-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93d-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93d-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93e-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93e-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f93e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f940.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f941.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f942.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f943.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f944.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f945.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f947.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f948.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f949.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f94a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f94b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f950.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f951.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f952.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f953.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f954.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f955.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f956.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f957.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f958.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f959.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f95a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f95b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f95c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f95d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f95e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f980.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f981.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f982.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f983.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f984.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f985.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f986.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f987.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f988.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f989.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f98a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f98b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f98c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f98d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f98e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f98f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f990.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f991.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/1f9c0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/203c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2049.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2122.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2139.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2194.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2195.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2196.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2197.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2198.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2199.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/21a9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/21aa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/231a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/231b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2328.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23cf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23eb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23ec.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23ed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23ee.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23ef.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/23fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/24c2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/25aa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/25ab.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/25b6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/25c0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/25fb.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/25fc.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/25fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/25fe.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2600.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2601.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2602.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2603.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2604.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/260e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2611.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2614.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2615.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2618.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/261d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2620.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2622.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2623.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2626.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/262a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/262e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/262f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2638.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2639.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/263a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2640.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2642.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2648.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2649.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/264a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/264b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/264c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/264d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/264e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/264f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2650.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2651.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2652.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2653.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2660.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2663.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2665.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2666.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2668.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/267b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/267f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2692.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2693.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2694.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2695.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2696.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2697.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2699.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/269b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/269c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26a0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26a1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26aa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26ab.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26b0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26b1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26bd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26be.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26c4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26c5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26c8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26ce.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26cf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26d1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26d3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26d4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26e9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26ea.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f7.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f8.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f9-fe0f-200d-2640-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f9-fe0f-200d-2642-fe0f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26f9.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26fa.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/26fd.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2702.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2705.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2708.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2709.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/270a.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/270b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/270c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/270d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/270f.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2712.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2714.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2716.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/271d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2721.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2728.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2733.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2734.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2744.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2747.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/274c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/274e.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2753.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2754.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2755.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2757.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2763.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2764.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2795.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2796.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2797.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/27a1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/27b0.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/27bf.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2934.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2935.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2b05.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2b06.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2b07.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2b1b.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2b1c.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2b50.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/2b55.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/3030.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/303d.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/3297.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/3299.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/emojis/emojis-data.json (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/OpenSans-Bold.ttf (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/OpenSans-CondLight.eot (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/OpenSans-CondLight.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/OpenSans-CondLight.ttf (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/OpenSans-CondLight.woff (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/OpenSans-Light.ttf (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/OpenSans-Regular.ttf (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/OpenSans-Semibold.ttf (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/taiga.eot (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/taiga.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/taiga.ttf (100%) rename dist/{v-1547534999795 => v-1549282893552}/fonts/taiga.woff (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/attachment-gallery.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/bg.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/discover.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_contact.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_des.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_field.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_like.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_mex.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_moon.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_sprint.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_tex.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_upvote.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/empty/empty_watch.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/epics-empty.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/favicon.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/import-logos/asana.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/import-logos/github.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/import-logos/jira.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/import-logos/trello.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/invitation_bg.jpg (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/logo-color.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/logo.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/looking-for-people.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-container.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor-bbcode.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor-dotclear.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor-html.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor-json.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor-markdown.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor-textile.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor-wiki.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor-xml.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bg-editor.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/body.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/bold.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/clean.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/code.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/h1.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/h2.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/h3.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/h4.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/h5.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/h6.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/handle.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/help.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/image.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/italic.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/jaysalvat.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/link.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/list-bullet.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/list-numeric.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/markitup.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/menu.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/picture.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/preview.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/preview_ico.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/quotes.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/stroke.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/markitup/submenu.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/menu-vert.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/menu.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/monster-fight.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/notification-decoration.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/project-logos/project-logo-01.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/project-logos/project-logo-02.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/project-logos/project-logo-03.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/project-logos/project-logo-04.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/project-logos/project-logo-05.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/quote.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/tribe-logo.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/unnamed.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/user-avatars/user-avatar-01.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/user-avatars/user-avatar-02.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/user-avatars/user-avatar-03.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/user-avatars/user-avatar-04.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/user-avatars/user-avatar-05.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/images/user-noimage.png (100%) rename dist/{v-1547534999795 => v-1549282893552}/js/app-loader.js (96%) create mode 100644 dist/v-1549282893552/js/app.js rename dist/{v-1547534999795 => v-1549282893552}/js/libs.js (100%) create mode 100644 dist/v-1549282893552/js/maps/app.js.map rename dist/{v-1547534999795 => v-1549282893552}/js/maps/libs.js.map (100%) create mode 100644 dist/v-1549282893552/js/templates.js rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/af.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ar-dz.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ar-kw.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ar-ly.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ar-ma.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ar-sa.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ar-tn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ar.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/az.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/be.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/bg.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/bm.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/bn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/bo.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/br.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/bs.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ca.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/cs.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/cv.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/cy.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/da.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/de-at.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/de-ch.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/de.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/dv.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/el.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/en-au.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/en-ca.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/en-gb.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/en-ie.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/en-il.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/en-nz.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/eo.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/es-do.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/es-us.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/es.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/et.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/eu.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/fa.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/fi.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/fo.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/fr-ca.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/fr-ch.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/fr.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/fy.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/gd.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/gl.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/gom-latn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/gu.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/he.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/hi.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/hr.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/hu.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/hy-am.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/id.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/is.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/it.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ja.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/jv.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ka.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/kk.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/km.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/kn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ko.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ku.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ky.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/lb.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/lo.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/lt.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/lv.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/me.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/mi.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/mk.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ml.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/mn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/mr.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ms-my.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ms.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/mt.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/my.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/nb.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ne.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/nl-be.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/nl.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/nn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/pa-in.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/pl.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/pt-br.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/pt.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ro.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ru.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/sd.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/se.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/si.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/sk.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/sl.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/sq.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/sr-cyrl.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/sr.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ss.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/sv.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/sw.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ta.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/te.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/tet.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/tg.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/th.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/tl-ph.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/tlh.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/tr.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/tzl.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/tzm-latn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/tzm.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ug-cn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/uk.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/ur.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/uz-latn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/uz.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/vi.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/x-pseudo.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/yo.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/zh-cn.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/zh-hk.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/locales/moment-locales/zh-tw.js (100%) create mode 100644 dist/v-1549282893552/locales/taiga/locale-ca.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-de.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-en.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-es.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-fa.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-fi.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-fr.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-it.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-ja.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-ko.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-nb.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-nl.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-pl.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-pt-br.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-ru.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-sv.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-tr.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-uk.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-zh-hans.json create mode 100644 dist/v-1549282893552/locales/taiga/locale-zh-hant.json rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-abap.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-actionscript.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-ada.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-apacheconf.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-apl.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-applescript.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-arduino.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-arff.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-asciidoc.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-asm6502.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-aspnet.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-autohotkey.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-autoit.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-bash.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-basic.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-batch.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-bison.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-brainfuck.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-bro.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-c.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-clike.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-clojure.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-coffeescript.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-core.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-cpp.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-crystal.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-csharp.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-csp.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-css-extras.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-css.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-d.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-dart.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-diff.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-django.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-docker.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-eiffel.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-elixir.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-elm.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-erb.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-erlang.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-flow.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-fortran.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-fsharp.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-gedcom.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-gherkin.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-git.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-glsl.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-go.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-graphql.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-groovy.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-haml.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-handlebars.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-haskell.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-haxe.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-hpkp.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-hsts.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-http.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-ichigojam.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-icon.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-inform7.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-ini.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-io.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-j.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-java.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-javascript.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-jolie.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-json.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-jsx.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-julia.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-keyman.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-kotlin.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-languages.json (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-latex.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-less.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-liquid.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-lisp.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-livescript.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-lolcode.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-lua.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-makefile.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-markdown.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-markup-templating.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-markup.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-matlab.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-mel.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-mizar.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-monkey.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-n4js.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-nasm.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-nginx.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-nim.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-nix.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-nsis.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-objectivec.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-ocaml.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-opencl.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-oz.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-parigp.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-parser.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-pascal.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-perl.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-php-extras.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-php.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-plsql.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-powershell.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-processing.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-prolog.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-properties.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-protobuf.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-pug.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-puppet.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-pure.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-python.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-q.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-qore.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-r.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-reason.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-renpy.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-rest.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-rip.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-roboconf.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-ruby.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-rust.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-sas.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-sass.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-scala.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-scheme.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-scss.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-smalltalk.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-smarty.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-soy.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-sql.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-stylus.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-swift.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-tap.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-tcl.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-textile.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-tsx.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-tt2.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-twig.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-typescript.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-vbnet.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-velocity.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-verilog.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-vhdl.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-vim.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-visual-basic.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-wasm.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-wiki.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-xeora.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-xojo.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-xquery.min.js (100%) rename dist/{v-1547534999795 => v-1549282893552}/prism/prism-yaml.min.js (100%) create mode 100644 dist/v-1549282893552/styles/theme-high-contrast.css create mode 100644 dist/v-1549282893552/styles/theme-material-design.css create mode 100644 dist/v-1549282893552/styles/theme-taiga.css rename dist/{v-1547534999795 => v-1549282893552}/svg/editor.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/icons/block-user.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/icons/multi-block-project.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/icons/project-limit.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/icons/team-question.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/logo-color.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/logo-moustache.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/logo-nav.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/logo.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/pattern.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/spinner-circle.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/spinner.svg (100%) rename dist/{v-1547534999795 => v-1549282893552}/svg/sprite.svg (100%) diff --git a/dist/index.html b/dist/index.html index 1d22832..47262d9 100644 --- a/dist/index.html +++ b/dist/index.html @@ -8,8 +8,8 @@ Taiga - - + + - - + + + diff --git a/dist/v-1547534999795/js/app.js b/dist/v-1547534999795/js/app.js deleted file mode 100644 index 29aa55e..0000000 --- a/dist/v-1547534999795/js/app.js +++ /dev/null @@ -1,25 +0,0 @@ -(function(){var t,e,r,n,i,o,s,a;this.taiga=a={},a.emojis=window.emojis,this.taigaContribPlugins=this.taigaContribPlugins||window.taigaContribPlugins||[],a.generateHash=function(t){return null==t&&(t=[]),t=_.map(t,function(t){return JSON.stringify(t)}),hex_sha1(t.join(":"))},a.generateUniqueSessionIdentifier=function(){var t,e;return t=(new Date).getTime(),e=Math.floor(150994944*Math.random()),a.generateHash([t,e])},a.sessionId=a.generateUniqueSessionIdentifier(),t=function(t,e,r,n,i,o,s,c,u){var l,p,d,f,h,g,m,v,y;return u.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/),g=t.when,t.when=function(e,r){return r.resolve||(r.resolve={}),angular.extend(r.resolve,{languageLoad:["$q","$translate",function(t,e){var r;return r=t.defer(),e().then(function(){return r.resolve()}),r.promise}],projectLoaded:["$q","tgProjectService","$route",function(t,e,r){var n,i;return n=t.defer(),e.setSection(null!=(i=r.current.$$route)?i.section:void 0),r.current.params.pslug?e.setProjectBySlug(r.current.params.pslug).then(n.resolve):(e.cleanProject(),n.resolve()),n.promise}]}),g.call(t,e,r)},t.when("/",{templateUrl:"home/home.html",controller:"Home",controllerAs:"vm",loader:!0,title:"HOME.PAGE_TITLE",loader:!0,description:"HOME.PAGE_DESCRIPTION",joyride:"dashboard"}),t.when("/discover",{templateUrl:"discover/discover-home/discover-home.html",controller:"DiscoverHome",controllerAs:"vm",title:"PROJECT.NAVIGATION.DISCOVER",loader:!0}),t.when("/discover/search",{templateUrl:"discover/discover-search/discover-search.html",title:"PROJECT.NAVIGATION.DISCOVER",loader:!0,controller:"DiscoverSearch",controllerAs:"vm",reloadOnSearch:!1}),t.when("/projects/",{templateUrl:"projects/listing/projects-listing.html",access:{requiresLogin:!0},title:"PROJECTS.PAGE_TITLE",description:"PROJECTS.PAGE_DESCRIPTION",loader:!0,controller:"ProjectsListing",controllerAs:"vm"}),t.when("/project/new",{title:"PROJECT.CREATE.TITLE",templateUrl:"projects/create/create-project.html",loader:!0,controller:"CreateProjectCtrl",controllerAs:"vm"}),t.when("/project/new/scrum",{title:"PROJECT.CREATE.TITLE",template:'',loader:!0}),t.when("/project/new/kanban",{title:"PROJECT.CREATE.TITLE",template:'',loader:!0}),t.when("/project/new/duplicate",{title:"PROJECT.CREATE.TITLE",template:"",loader:!0}),t.when("/project/new/import/:platform?",{title:"PROJECT.CREATE.TITLE",template:"",loader:!0}),t.when("/project/:pslug/",{template:"",loader:!0,controller:"ProjectRouter"}),t.when("/project/:pslug/timeline",{templateUrl:"projects/project/project.html",loader:!0,controller:"Project",controllerAs:"vm",section:"project-timeline"}),t.when("/project/:pslug/t/:ref",{loader:!0,controller:"DetailController",template:""}),t.when("/project/:pslug/search",{templateUrl:"search/search.html",reloadOnSearch:!1,section:"search",loader:!0}),t.when("/project/:pslug/epics",{section:"epics",templateUrl:"epics/dashboard/epics-dashboard.html",loader:!0,controller:"EpicsDashboardCtrl",controllerAs:"vm"}),t.when("/project/:pslug/epic/:epicref",{templateUrl:"epic/epic-detail.html",loader:!0,section:"epics"}),t.when("/project/:pslug/backlog",{templateUrl:"backlog/backlog.html",loader:!0,section:"backlog",joyride:"backlog"}),t.when("/project/:pslug/kanban",{templateUrl:"kanban/kanban.html",loader:!0,section:"kanban",joyride:"kanban"}),t.when("/project/:pslug/taskboard/:sslug",{templateUrl:"taskboard/taskboard.html",loader:!0,section:"backlog"}),t.when("/project/:pslug/us/:usref",{templateUrl:"us/us-detail.html",loader:!0,section:"backlog-kanban"}),t.when("/project/:pslug/task/:taskref",{templateUrl:"task/task-detail.html",loader:!0,section:"backlog-kanban"}),t.when("/project/:pslug/wiki",{redirectTo:function(t){return"/project/"+t.pslug+"/wiki/home"}}),t.when("/project/:pslug/wiki-list",{templateUrl:"wiki/wiki-list.html",loader:!0,section:"wiki"}),t.when("/project/:pslug/wiki/:slug",{templateUrl:"wiki/wiki.html",loader:!0,section:"wiki"}),t.when("/project/:pslug/team",{templateUrl:"team/team.html",loader:!0,section:"team"}),t.when("/project/:pslug/issues",{templateUrl:"issue/issues.html",loader:!0,section:"issues"}),t.when("/project/:pslug/issue/:issueref",{templateUrl:"issue/issues-detail.html",loader:!0,section:"issues"}),t.when("/project/:pslug/admin/project-profile/details",{templateUrl:"admin/admin-project-profile.html",section:"admin"}),t.when("/project/:pslug/admin/project-profile/default-values",{templateUrl:"admin/admin-project-default-values.html",section:"admin"}),t.when("/project/:pslug/admin/project-profile/modules",{templateUrl:"admin/admin-project-modules.html",section:"admin"}),t.when("/project/:pslug/admin/project-profile/export",{templateUrl:"admin/admin-project-export.html",section:"admin"}),t.when("/project/:pslug/admin/project-profile/reports",{templateUrl:"admin/admin-project-reports.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/status",{templateUrl:"admin/admin-project-values-status.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/points",{templateUrl:"admin/admin-project-values-points.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/priorities",{templateUrl:"admin/admin-project-values-priorities.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/severities",{templateUrl:"admin/admin-project-values-severities.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/types",{templateUrl:"admin/admin-project-values-types.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/custom-fields",{templateUrl:"admin/admin-project-values-custom-fields.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/tags",{templateUrl:"admin/admin-project-values-tags.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/due-dates",{templateUrl:"admin/admin-project-values-due-dates.html",section:"admin"}),t.when("/project/:pslug/admin/memberships",{templateUrl:"admin/admin-memberships.html",section:"admin"}),t.when("/project/:pslug/admin/roles",{templateUrl:"admin/admin-roles.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/webhooks",{templateUrl:"admin/admin-third-parties-webhooks.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/github",{templateUrl:"admin/admin-third-parties-github.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/gitlab",{templateUrl:"admin/admin-third-parties-gitlab.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/bitbucket",{templateUrl:"admin/admin-third-parties-bitbucket.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/gogs",{templateUrl:"admin/admin-third-parties-gogs.html",section:"admin"}),t.when("/project/:pslug/admin/contrib/:plugin",{templateUrl:"contrib/main.html"}),t.when("/project/:pslug/transfer/:token",{templateUrl:"projects/transfer/transfer-page.html",loader:!0,controller:"Project",controllerAs:"vm"}),t.when("/user-settings/user-profile",{templateUrl:"user/user-profile.html"}),t.when("/user-settings/user-change-password",{templateUrl:"user/user-change-password.html"}),t.when("/user-settings/user-project-settings",{templateUrl:"user/user-project-settings.html"}),t.when("/user-settings/mail-notifications",{templateUrl:"user/mail-notifications.html"}),t.when("/user-settings/live-notifications",{templateUrl:"user/live-notifications.html"}),t.when("/user-settings/web-notifications",{templateUrl:"user/web-notifications.html"}),t.when("/change-email/:email_token",{templateUrl:"user/change-email.html"}),t.when("/cancel-account/:cancel_token",{templateUrl:"user/cancel-account.html"}),t.when("/user-settings/contrib/:plugin",{templateUrl:"contrib/user-settings.html"}),t.when("/profile",{templateUrl:"profile/profile.html",loader:!0,access:{requiresLogin:!0},controller:"Profile",controllerAs:"vm"}),t.when("/notifications",{templateUrl:"notifications/notifications.html",loader:!0,access:{requiresLogin:!0},controller:"Notifications",controllerAs:"vm"}),t.when("/profile/:slug",{templateUrl:"profile/profile.html",loader:!0,controller:"Profile",controllerAs:"vm"}),t.when("/login",{templateUrl:"auth/login.html",title:"LOGIN.PAGE_TITLE",description:"LOGIN.PAGE_DESCRIPTION",disableHeader:!0,controller:"LoginPage"}),t.when("/register",{templateUrl:"auth/register.html",title:"REGISTER.PAGE_TITLE",description:"REGISTER.PAGE_DESCRIPTION",disableHeader:!0}),t.when("/forgot-password",{templateUrl:"auth/forgot-password.html",title:"FORGOT_PASSWORD.PAGE_TITLE",description:"FORGOT_PASSWORD.PAGE_DESCRIPTION",disableHeader:!0}),t.when("/change-password/:token",{templateUrl:"auth/change-password-from-recovery.html",title:"CHANGE_PASSWORD.PAGE_TITLE",description:"CHANGE_PASSWORD.PAGE_TITLE",disableHeader:!0}),t.when("/invitation/:token",{templateUrl:"auth/invitation.html",title:"INVITATION.PAGE_TITLE",description:"INVITATION.PAGE_DESCRIPTION",disableHeader:!0}),t.when("/external-apps",{templateUrl:"external-apps/external-app.html",title:"EXTERNAL_APP.PAGE_TITLE",description:"EXTERNAL_APP.PAGE_DESCRIPTION",controller:"ExternalApp",controllerAs:"vm",disableHeader:!0,mobileViewport:!0}),t.when("/blocked-project/:pslug/",{templateUrl:"projects/project/blocked-project.html",loader:!0}),t.when("/error",{templateUrl:"error/error.html"}),t.when("/not-found",{templateUrl:"error/not-found.html"}),t.when("/permission-denied",{templateUrl:"error/permission-denied.html"}),t.otherwise({templateUrl:"error/not-found.html"}),e.html5Mode({enabled:!0,requireBase:!1}),f={"Content-Type":"application/json","Accept-Language":window.taigaConfig.defaultLanguage||"en","X-Session-Id":a.sessionId},r.defaults.headers["delete"]=f,r.defaults.headers.patch=f,r.defaults.headers.post=f,r.defaults.headers.put=f,r.defaults.headers.get={"X-Session-Id":a.sessionId},r.useApplyAsync(!0),i.setSessionId(a.sessionId),l=function(t,e,r,n,i){var o;return o=function(o){var s,a;return 0===o.status||o.status===-1&&!o.config.cancelable?(n.closeAll(),i.error()):401===o.status&&e.url().indexOf("/login")===-1&&(s=e.url(),a=e.search(),a.force_next?e.url(r.resolve("login")).search("force_next",a.force_next):e.url(r.resolve("login")).search({unauthorized:!0,next:s})),t.reject(o)},{responseError:o}},n.factory("authHttpIntercept",["$q","$location","$tgNavUrls","lightboxService","tgErrorHandlingService",l]),r.interceptors.push("authHttpIntercept"),h=function(t,e){return{request:function(t){return e.logRequest(),t},requestError:function(r){return e.logResponse(),t.reject(r)},responseError:function(r){return e.logResponse(),t.reject(r)},response:function(t){return e.logResponse(),t}}},n.factory("loaderIntercept",["$q","tgLoader",h]),r.interceptors.push("loaderIntercept"),y=function(t){var e;return e=function(e){var r;return 400===e.status&&e.data.version&&(r=angular.element("body").injector(),r.invoke(["$tgConfirm","$translate",function(t){return function(t,e){var r;return r=e.instant("ERROR.VERSION_ERROR"),t.notify("error",r,null,1e4)}}(this)])),t.reject(e)},{responseError:e}},n.factory("versionCheckHttpIntercept",["$q",y]),r.interceptors.push("versionCheckHttpIntercept"),p=function(t,e){var r,n,i;return r=function(){return e.block()},i=function(t){return t.data.blocked_code&&r(),t},n=function(e){return 451===e.status&&r(),t.reject(e)},{response:i,responseError:n}},n.factory("blockingIntercept",["$q","tgErrorHandlingService",p]),r.interceptors.push("blockingIntercept"),o.debugInfoEnabled(window.taigaConfig.debugInfo||!1),localStorage.userInfo&&(v=JSON.parse(localStorage.userInfo)),m=(null!=v?v.lang:void 0)||window.taigaConfig.defaultLanguage||"en",c.addPart("taiga"),s.useLoader("$translatePartialLoader",{urlTemplate:"/"+window._version+"/locales/{part}/locale-{lang}.json"}).useSanitizeValueStrategy("escapeParameters").addInterpolation("$translateMessageFormatInterpolation").preferredLanguage(m),s.fallbackLanguage(m),d=window.getDecorators(),_.each(d,function(t){return n.decorator(t.provider,t.decorator)})},e=function(t,e){var r;return moment.locale(t),"en"!==t&&ljs.load("/"+window._version+"/locales/moment-locales/"+t+".js"),r={defaultMessage:e.instant("COMMON.FORM_ERRORS.DEFAULT_MESSAGE"),type:{email:e.instant("COMMON.FORM_ERRORS.TYPE_EMAIL"),url:e.instant("COMMON.FORM_ERRORS.TYPE_URL"),urlstrict:e.instant("COMMON.FORM_ERRORS.TYPE_URLSTRICT"),number:e.instant("COMMON.FORM_ERRORS.TYPE_NUMBER"),digits:e.instant("COMMON.FORM_ERRORS.TYPE_DIGITS"),dateIso:e.instant("COMMON.FORM_ERRORS.TYPE_DATEISO"),alphanum:e.instant("COMMON.FORM_ERRORS.TYPE_ALPHANUM"),phone:e.instant("COMMON.FORM_ERRORS.TYPE_PHONE")},notnull:e.instant("COMMON.FORM_ERRORS.NOTNULL"),notblank:e.instant("COMMON.FORM_ERRORS.NOT_BLANK"),required:e.instant("COMMON.FORM_ERRORS.REQUIRED"),regexp:e.instant("COMMON.FORM_ERRORS.REGEXP"),min:e.instant("COMMON.FORM_ERRORS.MIN"),max:e.instant("COMMON.FORM_ERRORS.MAX"),range:e.instant("COMMON.FORM_ERRORS.RANGE"),minlength:e.instant("COMMON.FORM_ERRORS.MIN_LENGTH"),maxlength:e.instant("COMMON.FORM_ERRORS.MAX_LENGTH"),rangelength:e.instant("COMMON.FORM_ERRORS.RANGE_LENGTH"),mincheck:e.instant("COMMON.FORM_ERRORS.MIN_CHECK"),maxcheck:e.instant("COMMON.FORM_ERRORS.MAX_CHECK"),rangecheck:e.instant("COMMON.FORM_ERRORS.RANGE_CHECK"),equalto:e.instant("COMMON.FORM_ERRORS.EQUAL_TO"),linewidth:e.instant("COMMON.FORM_ERRORS.LINEWIDTH"),pikaday:e.instant("COMMON.FORM_ERRORS.PIKADAY")},checksley.updateMessages("default",r)},r=function(t,r,n,i,o,s,c,u,l,p,d,f,h,g,m){var v,y,b;return t.debug("Initialize application"),r.$on("$translatePartialLoaderStructureChanged",function(){return s.refresh()}),b={linewidth:function(t,e){var r,n;return r=a.nl2br(t).split("
"),n=_.every(r,function(t){return t.length-1}),Promise.setScheduler(function(t){return r.$evalAsync(t)}),i.setupConnection(),n.isAuthenticated()&&(y=n.getUser(),n.showTerms()),o.initialize(),r.$on("$locationChangeStart",function(t){var e;if(f.init(),(null!=(e=m.project)?e.get("blocked_code"):void 0)&&(m.setProject(null),f.block()),h.getLightboxOpen().length)return t.preventDefault(),h.closeAll()}),v=r.$on("$routeChangeStart",function(t,e){return e.loader&&p.start(!0),v()}),r.$on("$routeChangeSuccess",function(t,e){var r,i;return e.loader&&p.start(!0),e.access&&e.access.requiresLogin&&(n.isAuthenticated()||c.path(u.resolve("login"))),(e.title||e.description)&&(i=s.instant(e.title||""),r=s.instant(e.description||""),l.setAll(i,r)),e.mobileViewport?l.addMobileViewport():l.removeMobileViewport(),e.disableHeader?d.disableHeader():d.enableHeader()})},angular.module("infinite-scroll").value("THROTTLE_MILLISECONDS",500),s=_.filter(this.taigaContribPlugins,function(t){return t.module}),o=_.map(s,function(t){return t.module}),i=["taigaBase","taigaCommon","taigaResources","taigaResources2","taigaAuth","taigaEvents","taigaHome","taigaNavigationBar","taigaProjects","taigaRelatedTasks","taigaBacklog","taigaTaskboard","taigaKanban","taigaIssues","taigaUserStories","taigaTasks","taigaTeam","taigaWiki","taigaSearch","taigaAdmin","taigaProject","taigaUserSettings","taigaFeedback","taigaPlugins","taigaIntegrations","taigaComponents","taigaProfile","taigaHome","taigaUserTimeline","taigaExternalApps","taigaDiscover","taigaHistory","taigaNotifications","taigaWikiHistory","taigaEpics","taigaUtils","templates","ngSanitize","ngRoute","ngAnimate","ngAria","pascalprecht.translate","infinite-scroll","tgRepeat"].concat(o),n=angular.module("taiga",i),n.config(["$routeProvider","$locationProvider","$httpProvider","$provide","$tgEventsProvider","$compileProvider","$translateProvider","$translatePartialLoaderProvider","$animateProvider",t]),n.run(["$log","$rootScope","$tgAuth","$tgEvents","$tgAnalytics","$translate","$tgLocation","$tgNavUrls","tgAppMetaService","tgLoader","tgNavigationBarService","tgErrorHandlingService","lightboxService","$tgConfig","tgProjectService",r])}).call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty,o=function(t,e){return function(){return t.apply(e,arguments)}};t=function(){function t(){}return t}(),r=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return n(e,t),e}(t),e=function(t){function e(){return this.onInitialDataError=o(this.onInitialDataError,this),e.__super__.constructor.apply(this,arguments)}return n(e,t),e.prototype.onInitialDataError=function(t){return t&&(404===t.status?this.errorHandlingService.notfound():403===t.status&&this.errorHandlingService.permissionDenied()),this.q.reject(t)},e}(t),this.taiga.Base=t,this.taiga.Service=r,this.taiga.Controller=e}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k,$,I,T,E,C,P,w,A,O,R,M,U=[].indexOf||function(t){for(var e=0,r=this.length;e\r\n]?)(\r\n|\n\r|\r|\n)/g,"$1"+e+"$2")}}(this),r=function(t){return function(t){var e,r;return e=_.keys(t),r=[],_.forIn(t,function(t,n){if(U.call(e,n)<0&&_.isFunction(t))return r.push(n)}),_.bindAll(t,r)}}(this),n=function(t){return function(t,e,r){var n,i;return i=t.$eval(e),void 0!==i?r(i):(n=null,n=t.$watch(e,function(t){if(void 0!==t)return r(t),n?n():void 0}))}}(this),m=function(){var t,e,r,n,i,o,s,a;for(e=arguments[0],o=2<=arguments.length?N.call(arguments,1):[],t=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return D(e,t),e}(e),r=o.length-1;r>=0;r+=-1){i=o[r],a=i.prototype;for(s in a)n=a[s],t.prototype[s]=n}return t},O=function(t,e){return _.trim(t,e)},I=function(t){return t.toString().toLowerCase().trim().replace(/\s+/g,"-").replace(/&/g,"-and-").replace(/[^\w\-]+/g,"").replace(/\-\-+/g,"-")},M=function(t){return t?_.capitalize(t.replace(/-/g," ")):t},A=function(t,e){var r,n;return r=t.data("nextTextPosition"),(null==r||r>=e.length)&&(r=0),n=e[r],t.data("nextTextPosition",r+1),t.text(n)},p=function(t,e){var r,n,i,o;for(o={},r=0,i=t.length;re&&(n=n.substring(0,e+1),n=n.substring(0,Math.min(n.length,n.lastIndexOf(" "))),n+=r),n):t},$=function(t,e){var r,n,i;return null==e&&(e=1),isNaN(parseFloat(t))||!isFinite(t)?"-":0===t?"0 bytes":(i=["bytes","KB","MB","GB","TB","PB"],r=Math.floor(Math.log(t)/Math.log(1024)),r>5&&(r=5),n=(t/Math.pow(1024,r)).toFixed(e),n+" "+i[r])},E=function(t,e){var r;return e?(r=new RegExp("<(?!"+e+"s*/?)[^>]+>","gi"),String(t).replace(r,"")):String(t).replace(/<\/?[^>]+>/g,"")},j=function(t,e,r){var n;return n=new RegExp("<("+e+")>","gi"),t=t.replace(n,"<"+r+">"),n=new RegExp("","gi"),t=t.replace(n,"")},a=function(t){return function(t,e,r){return Object.defineProperty(t,e,{get:function(){var t;if(!_.isFunction(r))throw"defineImmutableProperty third param must be a function";if(t=r(),t&&_.isObject(t)&&void 0===t.size)throw"defineImmutableProperty must return immutable data";return t}})}}(this),_.mixin({removeKeys:function(t,e){return _.chain([e]).flatten().reduce(function(t,e){return delete t[e],t},t).value()},cartesianProduct:function(){return _.reduceRight(arguments,function(t,e){return _.flatten(_.map(t,function(t){return _.map(e,function(e){return[e].concat(t)})}),!0)},[[]])}}),f=function(t){return null!==t.match(/\.(jpe?g|png|gif|gifv|webm|svg|psd)/i)},d=function(t){return null!=t&&null!==t.match(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)},h=function(t){return null!==t.match(/\.(pdf)/i)},b=function(t,e){var r;return r={},e.forEach(function(e,n){if(e!==t.get(n))return e.toJS?r[n]=e.toJS():r[n]=e}),r},t=["#fce94f","#edd400","#c4a000","#8ae234","#73d216","#4e9a06","#d3d7cf","#fcaf3e","#f57900","#ce5c00","#729fcf","#3465a4","#204a87","#888a85","#ad7fa8","#75507b","#5c3566","#ef2929","#cc0000","#a40000","#222222"],l=function(){return _.sample(t)},c=function(){return _.clone(t)},u=function(t,e,r){var n,i;for(r||(r=1),i=[],n=null;n=e.exec(t);)r===-1?i.push(n):i.push(n[r]);return i},S=function(t,e){var r;return r=e-t,t+Math.floor(Math.random()*(r+1))},y=function(t){var e;return e=t,e=e.replace("Á","A").replace("Ä","A").replace("À","A"),e=e.replace("É","E").replace("Ë","E").replace("È","E"),e=e.replace("Í","I").replace("Ï","I").replace("Ì","I"),e=e.replace("Ó","O").replace("Ö","O").replace("Ò","O"),e=e.replace("Ú","U").replace("Ü","U").replace("Ù","U")},C=this.taiga,C.addClass=e,C.nl2br=v,C.bindMethods=r,C.bindOnce=n,C.mixOf=m,C.trim=O,C.slugify=I,C.unslugify=M,C.toggleText=A,C.groupBy=p,C.timeout=P,C.cancelTimeout=i,C.scopeDefer=k,C.toString=w,C.joinStr=g,C.truncate=R,C.debounce=o,C.debounceLeading=s,C.startswith=T,C.sizeFormat=$,C.stripTags=E,C.replaceTags=j,C.defineImmutableProperty=a,C.isImage=f,C.isEmail=d,C.isPdf=h,C.patch=b,C.getRandomDefaultColor=l,C.getDefaulColorList=c,C.getMatches=u,C.randomInt=S,C.normalizeString=y}.call(this),function(){var t,e,r,n,i,o,s,a;o=this.taiga,n=this.taiga.groupBy,i=this.taiga.joinStr,a=this.taiga.trim,s=this.taiga.toString,e=function(){function t(){}return t.prototype.fillUsersAndRoles=function(t,e){var r,i;return r=_.filter(t,function(t){return function(t){return t.is_active}}(this)),this.scope.activeUsers=_.sortBy(r,"full_name_display"),this.scope.activeUsersById=n(this.scope.activeUsers,function(t){return t.id}),this.scope.users=_.sortBy(t,"full_name_display"),this.scope.usersById=n(t,function(t){return t.id}),this.scope.roles=_.sortBy(e,"order"),i=_(this.scope.project.members).map("role").uniq().value(),this.scope.computableRoles=_(e).filter("computable").filter(function(t){return _.includes(i,t.id)}).value()},t.prototype.loadUsersAndRoles=function(){var t;return t=this.q.all([this.rs.projects.usersList(this.scope.projectId),this.rs.projects.rolesList(this.scope.projectId)]),t.then(function(t){return function(e){var r,n;return n=e[0],r=e[1],t.fillUsersAndRoles(n,r),e}}(this))},t}(),o.PageMixin=e,t=function(){function t(){}return t.prototype.selectFilter=function(t,e,r){var n,s,c;if(null==r&&(r=!1),c=this.location.search(),void 0!==c[t]&&"page"!==t&&(n=_.map(o.toString(c[t]).split(","),function(t){return a(t)}),n.push(o.toString(e)),n=_.compact(n),e=i(",",_.uniq(n))),!this.location.isInCurrentRouteParams(t,e))return s=r?this.location:this.location.noreload(this.scope),s.search(t,e)},t.prototype.replaceFilter=function(t,e,r){var n;if(null==r&&(r=!1),!this.location.isInCurrentRouteParams(t,e))return n=r?this.location:this.location.noreload(this.scope),n.search(t,e)},t.prototype.replaceAllFilters=function(t,e){var r;return null==e&&(e=!1),r=e?this.location:this.location.noreload(this.scope),r.search(t)},t.prototype.unselectFilter=function(t,e,r){var n,s,c,u;if(null==r&&(r=!1),c=this.location.search(),void 0!==c[t])return void 0!==e&&null!==e||delete c[t],u=_.map(o.toString(c[t]).split(","),function(t){return a(t)}),s=_.reject(u,function(t){return t===o.toString(e)}),s=_.compact(s),e=_.isEmpty(s)?null:i(",",_.uniq(s)),n=r?this.location:this.location.noreload(this.scope),n.search(t,e)},t.prototype.applyStoredFilters=function(t,e){var r;return!(!_.isEmpty(this.location.search())||(r=this.getFilters(t,e),!Object.keys(r).length))&&(this.location.search(r),this.location.replace(),!0)},t.prototype.storeFilters=function(t,e,r){var n,i;return i=t+":"+r,n=o.generateHash([t,i]),this.storage.set(n,e)},t.prototype.getFilters=function(t,e){var r,n;return n=t+":"+e,r=o.generateHash([t,n]),this.storage.get(r)||{}},t.prototype.formatSelectedFilters=function(t,e,r){var n,i,o,s,a;return s=r.split(","),o=_.filter(e,function(t){return s.indexOf(_.toString(t.id))!==-1}),i=_.filter(s,function(t){return!_.find(o,function(e){return _.toString(e.id)===t})}),n=_.map(i,function(e){return{id:e,key:t+":"+e,dataType:t,name:e}}),a=_.map(o,function(e){return{id:e.id,key:t+":"+e.id,dataType:t,name:e.name,color:e.color}}),n.concat(a)},t}(),o.FiltersMixin=t,r=function(){function t(){}return t.prototype.changeQ=function(t){return this.replaceFilter("q",t),this.filtersReloadContent(),this.generateFilters()},t.prototype.removeFilter=function(t){return this.unselectFilter(t.dataType,t.id),this.filtersReloadContent(),this.generateFilters()},t.prototype.addFilter=function(t){return this.selectFilter(t.category.dataType,t.filter.id),this.filtersReloadContent(),this.generateFilters()},t.prototype.selectCustomFilter=function(t){return this.replaceAllFilters(t.filter),this.filtersReloadContent(),this.generateFilters()},t.prototype.saveCustomFilter=function(t){var e,r;return e={},r=this.location.search(),e.tags=r.tags,e.status=r.status,e.assigned_to=r.assigned_to,e.assigned_users=r.assigned_users,e.owner=r.owner,e.epic=r.epic,e.role=r.role,this.filterRemoteStorageService.getFilters(this.scope.projectId,this.storeCustomFiltersName).then(function(r){return function(n){return n[t]=e,r.filterRemoteStorageService.storeFilters(r.scope.projectId,n,r.storeCustomFiltersName).then(r.generateFilters)}}(this))},t.prototype.removeCustomFilter=function(t){return this.filterRemoteStorageService.getFilters(this.scope.projectId,this.storeCustomFiltersName).then(function(e){return function(r){return delete r[t.id],e.filterRemoteStorageService.storeFilters(e.scope.projectId,r,e.storeCustomFiltersName).then(e.generateFilters),e.generateFilters()}}(this))},t.prototype.isFilterDataTypeSelected=function(t){var e,r,n,i;for(i=this.selectedFilters,r=0,n=i.length;r0}),i=_.map(s.assigned_users,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.full_name||"Unassigned",t}),n=_.map(s.assigned_to,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.full_name||"Unassigned",t}),u=_.map(s.roles,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.name||"Unassigned",t}),c=_.map(s.owners,function(t){return t.id=t.id.toString(),t.name=t.full_name,t}),a=_.map(s.epics,function(t){return t.id?(t.id=t.id.toString(),t.name="#"+t.ref+" "+t.subject):(t.id="null",t.name="Not in an epic"),t}),t.selectedFilters=[],e.status&&(l=t.formatSelectedFilters("status",p,e.status),t.selectedFilters=t.selectedFilters.concat(l)),e.tags&&(l=t.formatSelectedFilters("tags",d,e.tags),t.selectedFilters=t.selectedFilters.concat(l)),e.assigned_users&&(l=t.formatSelectedFilters("assigned_users",i,e.assigned_users),t.selectedFilters=t.selectedFilters.concat(l)),e.assigned_to&&(l=t.formatSelectedFilters("assigned_to",n,e.assigned_to),t.selectedFilters=t.selectedFilters.concat(l)),e.owner&&(l=t.formatSelectedFilters("owner",c,e.owner),t.selectedFilters=t.selectedFilters.concat(l)),e.epic&&(l=t.formatSelectedFilters("epic",a,e.epic),t.selectedFilters=t.selectedFilters.concat(l)),e.role&&(l=t.formatSelectedFilters("role",u,e.role),t.selectedFilters=t.selectedFilters.concat(l)),t.filterQ=e.q,t.filters=[{title:t.translate.instant("COMMON.FILTERS.CATEGORIES.STATUS"),dataType:"status",content:p},{title:t.translate.instant("COMMON.FILTERS.CATEGORIES.TAGS"),dataType:"tags",content:d,hideEmpty:!0,totalTaggedElements:f.length},{title:t.translate.instant("COMMON.FILTERS.CATEGORIES.ASSIGNED_USERS"),dataType:"assigned_users",content:i},{title:t.translate.instant("COMMON.FILTERS.CATEGORIES.ROLE"),dataType:"role",content:u},{title:t.translate.instant("COMMON.FILTERS.CATEGORIES.CREATED_BY"),dataType:"owner",content:c},{title:t.translate.instant("COMMON.FILTERS.CATEGORIES.EPIC"),dataType:"epic",content:a}],t.customFilters=[],_.forOwn(o,function(e,r){return t.customFilters.push({id:r,name:r,filter:e})})}}(this))},t}(),o.UsFiltersMixin=r}.call(this),function(){var t;t=angular.module("taigaAdmin",[])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f=function(t,e){function r(){this.constructor=t}for(var n in e)h.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},h={}.hasOwnProperty;d=this.taiga,l=this.taiga.debounce,p=angular.module("taigaAuth",["taigaResources"]),a=function(){function t(t,e,r,n,i){var o;t.isAuthenticated()&&(n.force_login||(o=r.resolve("home"),n.next&&(o=decodeURIComponent(n.next),e.search("next",null)),n.unauthorized?(i.clear(),i.removeToken()):e.url(o)))}return t.$inject=["tgCurrentUserService","$location","$tgNavUrls","$routeParams","$tgAuth"],t}(),p.controller("LoginPage",a),t=function(t){function e(t,r,n,i,o,s,a,c,u,l,p,d){var f;this.rootscope=t,this.storage=r,this.model=n,this.rs=i,this.http=o,this.urls=s,this.config=a,this.translate=c,this.currentUserService=u,this.themeService=l,this.analytics=p,this.termsAnnouncementService=d,e.__super__.constructor.call(this),f=this.getUser(),this._currentTheme=this._getUserTheme(),this.setUserdata(f)}return f(e,t),e.$inject=["$rootScope","$tgStorage","$tgModel","$tgResources","$tgHttp","$tgUrls","$tgConfig","$translate","tgCurrentUserService","tgThemeService","$tgAnalytics","tgTermsAnnouncementService"],e.prototype.setUserdata=function(t){return t?(this.userData=Immutable.fromJS(t.getAttrs()),this.currentUserService.setUser(this.userData)):this.userData=null,this.analytics.setUserId()},e.prototype._getUserTheme=function(){var t;return(null!=(t=this.rootscope.user)?t.theme:void 0)||this.config.get("defaultTheme")||"taiga"},e.prototype._setTheme=function(){ -var t;if(t=this._getUserTheme(),this._currentTheme!==t)return this._currentTheme=t,this.themeService.use(this._currentTheme)},e.prototype._setLocales=function(){var t,e;return t=(null!=(e=this.rootscope.user)?e.lang:void 0)||this.config.get("defaultLanguage")||"en",this.translate.preferredLanguage(t),this.translate.use(t)},e.prototype.getUser=function(){var t,e;return this.rootscope.user?this.rootscope.user:(e=this.storage.get("userInfo"))?(t=this.model.make_model("users",e),this.rootscope.user=t,this._setLocales(),this._setTheme(),t):(this._setTheme(),null)},e.prototype.setUser=function(t){return this.rootscope.auth=t,this.storage.set("userInfo",t.getAttrs()),this.rootscope.user=t,this.setUserdata(t),this._setLocales(),this._setTheme()},e.prototype.clear=function(){return this.rootscope.auth=null,this.rootscope.user=null,this.storage.remove("userInfo")},e.prototype.setToken=function(t){return this.storage.set("token",t)},e.prototype.getToken=function(){return this.storage.get("token")},e.prototype.removeToken=function(){return this.storage.remove("token")},e.prototype.isAuthenticated=function(){return null!==this.getUser()},e.prototype.refresh=function(){var t;return t=this.urls.resolve("user-me"),this.http.get(t).then(function(t){return function(e,r){var n;return n=e.data,n.token=t.getUser().auth_token,n=t.model.make_model("users",n),t.setUser(n),t.rootscope.$broadcast("auth:refresh",n),n}}(this))},e.prototype.login=function(t,e){var r;return r=this.urls.resolve("auth"),t=_.clone(t,!1),t.type=e?e:"normal",this.removeToken(),this.http.post(r,t).then(function(t){return function(e,r){var n;return n=t.model.make_model("users",e.data),t.setToken(n.auth_token),t.setUser(n),t.rootscope.$broadcast("auth:login",n),n}}(this))},e.prototype.logout=function(){return this.removeToken(),this.clear(),this.currentUserService.removeUser(),this._setTheme(),this._setLocales(),this.rootscope.$broadcast("auth:logout"),this.analytics.setUserId()},e.prototype.register=function(t,e,r){var n;return n=this.urls.resolve("auth-register"),t=_.clone(t,!1),t.type=e?e:"public","private"===e&&(t.existing=!!r&&r),this.removeToken(),this.http.post(n,t).then(function(t){return function(e){var r;return r=t.model.make_model("users",e.data),t.setToken(r.auth_token),t.setUser(r),t.rootscope.$broadcast("auth:register",r),r}}(this))},e.prototype.getInvitation=function(t){return this.rs.invitations.get(t)},e.prototype.acceptInvitiationWithNewUser=function(t){return this.register(t,"private",!1)},e.prototype.forgotPassword=function(t){var e;return e=this.urls.resolve("users-password-recovery"),t=_.clone(t,!1),this.removeToken(),this.http.post(e,t)},e.prototype.changePasswordFromRecovery=function(t){var e;return e=this.urls.resolve("users-change-password-from-recovery"),t=_.clone(t,!1),this.removeToken(),this.http.post(e,t)},e.prototype.changeEmail=function(t){var e;return e=this.urls.resolve("users-change-email"),t=_.clone(t,!1),this.http.post(e,t)},e.prototype.cancelAccount=function(t){var e;return e=this.urls.resolve("users-cancel-account"),t=_.clone(t,!1),this.http.post(e,t)},e.prototype.exportProfile=function(){var t;return t=this.urls.resolve("users-export"),this.http.post(t)},e.prototype.showTerms=function(t){var e;if(e=this.getUser(),e&&!e.read_new_terms)return this.termsAnnouncementService.show()},e}(d.Service),p.service("$tgAuth",t),c=function(t,e,r,n){var i,o;return i=n.get("auth/login-text.html",!0),o=function(){var n,o,s;return(o=t.get("publicRegisterEnabled"))?(s=e.resolve("register"),r.force_next&&(n=encodeURIComponent(r.force_next),s+="?next="+n),i({url:s})):""},{restrict:"AE",scope:{},template:o}},p.directive("tgPublicRegisterMessage",["$tgConfig","$tgNavUrls","$routeParams","$tgTemplate",c]),s=function(t,e,r,n,i,o,s,a,c,u){var p;return p=function(p,d,f){var h,g,m,v;return h=new checksley.Form(d.find("form.login-form")),i.next&&i.next!==o.resolve("login")?p.nextUrl=decodeURIComponent(i.next):p.nextUrl=o.resolve("home"),i.force_next&&(p.nextUrl=decodeURIComponent(i.force_next)),m=function(e){return s.setupConnection(),u.trackEvent("auth","login","user login",1),t.showTerms(),0===p.nextUrl.indexOf("http")?c.location.href=p.nextUrl:r.url(p.nextUrl)},g=function(t){return e.notify("light-error",a.instant("LOGIN_FORM.ERROR_AUTH_INCORRECT"))},p.onKeyUp=function(t){var e,r;if(e=angular.element(t.currentTarget),r=e.val(),p.iscapsLockActivated=!1,r!==r.toLowerCase())return p.iscapsLockActivated=!0},v=l(2e3,function(e){return function(e){var r,i,o;if(e.preventDefault(),h.validate())return r={username:d.find("form.login-form input[name=username]").val(),password:d.find("form.login-form input[name=password]").val()},i=n.get("loginFormType","normal"),o=t.login(r,i),o.then(m,g)}}(this)),d.on("submit","form",v),window.prerenderReady=!0,p.$on("$destroy",function(){return d.off()})},{link:p}},p.directive("tgLogin",["$tgAuth","$tgConfirm","$tgLocation","$tgConfig","$routeParams","$tgNavUrls","$tgEvents","$translate","$window","$tgAnalytics",s]),u=function(t,e,r,n,i,o,s,a,c){var u;return u=function(u,p,d){var f,h,g,m;return i.get("publicRegisterEnabled")||(r.path(n.resolve("not-found")),r.replace()),u.data={},f=p.find("form").checksley({onlyOneErrorElement:!0}),o.next&&o.next!==n.resolve("login")?u.nextUrl=decodeURIComponent(o.next):u.nextUrl=n.resolve("home"),g=function(t){return s.trackEvent("auth","register","user registration",1),0===u.nextUrl.indexOf("http")?c.location.href=u.nextUrl:r.url(u.nextUrl)},h=function(t){var r;return t.data._error_message&&(r=a.instant("COMMON.GENERIC_ERROR",{error:t.data._error_message}),e.notify("light-error",r)),f.setErrors(t.data)},m=l(2e3,function(e){return function(e){var r;if(e.preventDefault(),f.validate())return r=t.register(u.data),r.then(g,h)}}(this)),p.on("submit","form",m),u.$on("$destroy",function(){return p.off()}),window.prerenderReady=!0},{link:u}},p.directive("tgRegister",["$tgAuth","$tgConfirm","$tgLocation","$tgNavUrls","$tgConfig","$routeParams","$tgAnalytics","$translate","$window",u]),i=function(t,e,r,n,i){var o;return o=function(o,s,a){var c,u,p,d;return o.data={},c=s.find("form").checksley(),p=function(t){var o,s;return r.path(n.resolve("login")),s=i.instant("FORGOT_PASSWORD_FORM.SUCCESS_TITLE"),o=i.instant("FORGOT_PASSWORD_FORM.SUCCESS_TEXT"),e.success(s,o)},u=function(t){var r;return r=i.instant("FORGOT_PASSWORD_FORM.ERROR"),e.notify("light-error",r)},d=l(2e3,function(e){return function(e){var r;if(e.preventDefault(),c.validate())return r=t.forgotPassword(o.data),r.then(p,u)}}(this)),s.on("submit","form",d),o.$on("$destroy",function(){return s.off()}),window.prerenderReady=!0},{link:o}},p.directive("tgForgotPassword",["$tgAuth","$tgConfirm","$tgLocation","$tgNavUrls","$translate",i]),n=function(t,e,r,n,i,o){var s;return s=function(s,a,c){var u,p,d,f,h;return s.data={},null!=n.token?(s.tokenInParams=!0,s.data.token=n.token):(r.path(i.resolve("login")),h=o.instant("CHANGE_PASSWORD_RECOVERY_FORM.ERROR"),e.notify("light-error",h)),u=a.find("form").checksley(),d=function(t){return r.path(i.resolve("login")),h=o.instant("CHANGE_PASSWORD_RECOVERY_FORM.SUCCESS"),e.success(h)},p=function(t){return h=o.instant("CHANGE_PASSWORD_RECOVERY_FORM.ERROR"),e.notify("light-error",h)},f=l(2e3,function(e){return function(e){var r;if(e.preventDefault(),u.validate())return r=t.changePasswordFromRecovery(s.data),r.then(d,p)}}(this)),a.on("submit","form",f),s.$on("$destroy",function(){return a.off()})},{link:s}},p.directive("tgChangePasswordFromRecovery",["$tgAuth","$tgConfirm","$tgLocation","$routeParams","$tgNavUrls","$translate",n]),o=function(t,e,r,n,i,o,s,a,c){var u;return u=function(u,p,d){var f,h,g,m,v,y,_,b,S,j;return j=i.token,y=t.getInvitation(j),y.then(function(t){return u.invitation=t,u.publicRegisterEnabled=c.get("publicRegisterEnabled")}),y.then(null,function(t){var n;return r.path(o.resolve("login")),n=a.instant("INVITATION_LOGIN_FORM.NOT_FOUND"),e.notify("light-error",n)}),u.dataLogin={token:j},f=p.find("form.login-form").checksley({onlyOneErrorElement:!0}),m=function(t){var n;return s.trackEvent("auth","invitationAccept","invitation accept with existing user",1),r.path(o.resolve("project",{project:u.invitation.project_slug})),n=a.instant("INVITATION_LOGIN_FORM.SUCCESS",{project_name:u.invitation.project_name}),e.notify("success",n)},h=function(t){return e.notify("light-error",t.data._error_message)},b=l(2e3,function(e){return function(e){var r,i;if(e.preventDefault(),f.validate())return i=n.get("loginFormType","normal"),r=u.dataLogin,y=t.login({username:r.username,password:r.password,invitation_token:r.token},i),y.then(m,h)}}(this)),p.on("submit","form.login-form",b),p.on("click",".button-login",b),u.dataRegister={token:j},_=p.find("form.register-form").checksley({onlyOneErrorElement:!0}),v=function(t){var n;return s.trackEvent("auth","invitationAccept","invitation accept with new user",1),r.path(o.resolve("project",{project:u.invitation.project_slug})),n=a.instant("INVITATION_LOGIN_FORM.SUCCESS",{project_name:u.invitation.project_name}),e.notify("success",n)},g=function(t){var r;return t.data._error_message&&(r=a.instant("COMMON.GENERIC_ERROR",{error:t.data._error_message}),e.notify("light-error",r)),_.setErrors(t.data)},S=l(2e3,function(e){return function(e){if(e.preventDefault(),_.validate())return y=t.acceptInvitiationWithNewUser(u.dataRegister),y.then(v,g)}}(this)),p.on("submit","form.register-form",S),p.on("click",".button-register",S),u.$on("$destroy",function(){return p.off()})},{link:u}},p.directive("tgInvitation",["$tgAuth","$tgConfirm","$tgLocation","$tgConfig","$routeParams","$tgNavUrls","$tgAnalytics","$translate","$tgConfig",o]),r=function(t,e,r,n,i,o,s,a){var c;return c=function(e,c,u){var l,p,d,f;return e.data={},e.data.email_token=o.email_token,l=c.find("form").checksley(),d=function(e){var o;return r.isAuthenticated()?t.queryOne("users",r.getUser().id).then(function(t){return function(t){return r.setUser(t),i.path(s.resolve("home")),i.replace()}}(this)):(i.path(s.resolve("login")),i.replace()),o=a.instant("CHANGE_EMAIL_FORM.SUCCESS"),n.success(o)},p=function(t){var e;return e=a.instant("COMMON.GENERIC_ERROR",{error:t.data._error_message}),n.notify("light-error",e)},f=function(){var t;if(l.validate())return t=r.changeEmail(e.data),t.then(d,p)},c.on("submit",function(t){return t.preventDefault(),f()}),c.on("click","a.button-change-email",function(t){return t.preventDefault(),f()}),e.$on("$destroy",function(){return c.off()})},{link:c}},p.directive("tgChangeEmail",["$tgRepo","$tgModel","$tgAuth","$tgConfirm","$tgLocation","$routeParams","$tgNavUrls","$translate",r]),e=function(t,e,r,n,i,o,s){var a;return a=function(t,e,a){var c,u,p,d;return t.data={},t.data.cancel_token=o.cancel_token,c=e.find("form").checksley(),p=function(t){var e;return r.logout(),i.path(s.resolve("home")),e=$translate.instant("CANCEL_ACCOUNT.SUCCESS"),n.success(e)},u=function(t){var e;return e=$translate.instant("COMMON.GENERIC_ERROR",{error:t.data._error_message}),n.notify("error",e)},d=l(2e3,function(e){return function(e){var n;if(e.preventDefault(),c.validate())return n=r.cancelAccount(t.data),n.then(p,u)}}(this)),e.on("submit","form",d),t.$on("$destroy",function(){return e.off()})},{link:a}},p.directive("tgCancelAccount",["$tgRepo","$tgModel","$tgAuth","$tgConfirm","$tgLocation","$routeParams","$tgNavUrls",e])}.call(this),function(){var t;t=angular.module("taigaBacklog",[])}.call(this),function(){var t,e,r,n,i,o,s;o=this.taiga,r=this.taiga.groupBy,e=this.taiga.bindOnce,i=angular.module("taigaBase",[]),t=function(t,e){var r;return r=function(r,n,i){return e.onresize=function(){return t.$broadcast("resize")}},{link:r}},i.directive("tgMain",["$rootScope","$window",t]),s={home:"/",projects:"/projects",error:"/error","not-found":"/not-found","permission-denied":"/permission-denied",discover:"/discover","discover-search":"/discover/search",login:"/login","forgot-password":"/forgot-password","change-password":"/change-password/:token","change-email":"/change-email/:token","cancel-account":"/cancel-account/:token",register:"/register",invitation:"/invitation/:token","create-project":"/project/new","create-project-scrum":"/project/new/scrum","create-project-kanban":"/project/new/kanban","create-project-duplicate":"/project/new/duplicate","create-project-import":"/project/new/import","create-project-import-platform":"/project/new/import/:platform",profile:"/profile","user-profile":"/profile/:username","blocked-project":"/blocked-project/:project",project:"/project/:project","project-detail-ref":"/project/:project/t/:ref","project-backlog":"/project/:project/backlog","project-taskboard":"/project/:project/taskboard/:sprint","project-kanban":"/project/:project/kanban","project-issues":"/project/:project/issues","project-epics":"/project/:project/epics","project-search":"/project/:project/search","project-timeline":"/project/:project/timeline","project-epics-detail":"/project/:project/epic/:ref","project-userstories-detail":"/project/:project/us/:ref","project-tasks-detail":"/project/:project/task/:ref","project-issues-detail":"/project/:project/issue/:ref","project-wiki":"/project/:project/wiki","project-wiki-list":"/project/:project/wiki-list","project-wiki-page":"/project/:project/wiki/:slug","project-team":"/project/:project/team","project-admin-home":"/project/:project/admin/project-profile/details","project-admin-project-profile-details":"/project/:project/admin/project-profile/details","project-admin-project-profile-default-values":"/project/:project/admin/project-profile/default-values","project-admin-project-profile-modules":"/project/:project/admin/project-profile/modules","project-admin-project-profile-export":"/project/:project/admin/project-profile/export","project-admin-project-profile-reports":"/project/:project/admin/project-profile/reports","project-admin-project-values-status":"/project/:project/admin/project-values/status","project-admin-project-values-points":"/project/:project/admin/project-values/points","project-admin-project-values-priorities":"/project/:project/admin/project-values/priorities","project-admin-project-values-severities":"/project/:project/admin/project-values/severities","project-admin-project-values-types":"/project/:project/admin/project-values/types","project-admin-project-values-custom-fields":"/project/:project/admin/project-values/custom-fields","project-admin-project-values-tags":"/project/:project/admin/project-values/tags","project-admin-project-values-due-dates":"/project/:project/admin/project-values/due-dates","project-admin-memberships":"/project/:project/admin/memberships","project-admin-roles":"/project/:project/admin/roles","project-admin-third-parties-webhooks":"/project/:project/admin/third-parties/webhooks","project-admin-third-parties-github":"/project/:project/admin/third-parties/github","project-admin-third-parties-gitlab":"/project/:project/admin/third-parties/gitlab","project-admin-third-parties-bitbucket":"/project/:project/admin/third-parties/bitbucket","project-admin-third-parties-gogs":"/project/:project/admin/third-parties/gogs","project-admin-contrib":"/project/:project/admin/contrib/:plugin","user-settings-user-profile":"/user-settings/user-profile","user-settings-user-change-password":"/user-settings/user-change-password","user-settings-user-avatar":"/user-settings/user-avatar","user-settings-user-project-settings":"/user-settings/user-project-settings","user-settings-mail-notifications":"/user-settings/mail-notifications","user-settings-live-notifications":"/user-settings/live-notifications","user-settings-web-notifications":"/user-settings/web-notifications","user-settings-contrib":"/user-settings/contrib/:plugin",notifications:"/notifications"},n=function(t,e){return t.debug("Initialize navigation urls"),e.update(s)},i.run(["$log","$tgNavUrls",n])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v=[].slice,y=function(t,e){function r(){this.constructor=t}for(var n in e)b.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},b={}.hasOwnProperty;m=this.taiga,g=angular.module("taigaCommon",[]),s=function(t,e,r){return{get:function(){var n,i,o,s;return s=r.getUser(),i=(null!=s?s.lang:void 0)||t.preferredLanguage(),o=e.get("rtlLanguages",[]),n=o.indexOf(i)>-1,{i18n:{previousMonth:t.instant("COMMON.PICKERDATE.PREV_MONTH"),nextMonth:t.instant("COMMON.PICKERDATE.NEXT_MONTH"),months:[t.instant("COMMON.PICKERDATE.MONTHS.JAN"),t.instant("COMMON.PICKERDATE.MONTHS.FEB"),t.instant("COMMON.PICKERDATE.MONTHS.MAR"),t.instant("COMMON.PICKERDATE.MONTHS.APR"),t.instant("COMMON.PICKERDATE.MONTHS.MAY"),t.instant("COMMON.PICKERDATE.MONTHS.JUN"),t.instant("COMMON.PICKERDATE.MONTHS.JUL"),t.instant("COMMON.PICKERDATE.MONTHS.AUG"),t.instant("COMMON.PICKERDATE.MONTHS.SEP"),t.instant("COMMON.PICKERDATE.MONTHS.OCT"),t.instant("COMMON.PICKERDATE.MONTHS.NOV"),t.instant("COMMON.PICKERDATE.MONTHS.DEC")],weekdays:[t.instant("COMMON.PICKERDATE.WEEK_DAYS.SUN"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.MON"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.TUE"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.WED"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.THU"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.FRI"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.SAT")],weekdaysShort:[t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT")]},isRTL:n,firstDay:parseInt(t.instant("COMMON.PICKERDATE.FIRST_DAY_OF_WEEK"),10),format:t.instant("COMMON.PICKERDATE.FORMAT")}}}},g.factory("tgDatePickerConfigService",["$translate","$tgConfig","$tgAuth",s]),p=function(t,e){var r;return r=function(){return t.getSelection?t.getSelection().toString():e.selection?e.selection.createRange().text:""},{get:r}},g.factory("$selectedText",["$window","$document",p]),n=function(t){var e,r;return r=function(t,e,r){if(e&&r&&e.get("my_permissions").indexOf(r)>-1)return t.removeClass("hidden")},e=function(e,n,i){var o,s,a;return n.addClass("hidden"),o=i.tgCheckPermission,a=e.$watch(function(){return t.project},function(){if(t.project)return r(n,t.project,o),a()}),s=i.$observe("tgCheckPermission",function(e){if(e)return r(n,t.project,e),s()}),e.$on("$destroy",function(){return n.off()})},{link:e}},n.$inject=["tgProjectService"],g.directive("tgCheckPermission",n),i=function(){var t,e;return e="tgClassPermission",t=function(t,r,n){var i,o,s;return i=function(t,e,n){var i;return i="!"===n[0],i&&(n=n.slice(1)),i&&t.my_permissions.indexOf(n)===-1?r.addClass(e):i||t.my_permissions.indexOf(n)===-1?r.removeClass(e):r.addClass(e)},o=function(r){var o,a,c,u;if(r){s(),a=t.$eval(n[e]),u=[];for(o in a)c=a[o],u.push(i(r,o,c));return u}},s=t.$watch("project",o)},{link:t}},g.directive("tgClassPermission",i),t=function(){var t,e,r,n;return e=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,r=function(t){return function(t){var i;if(i=n.shift(),i(),n.length)return e(r)}}(this),n=[],t=function(){var t,i,o,s;for(s=[],i=0,o=arguments.length;i-1?t.resolve("project-backlog",r):e.is_kanban_activated&&e.my_permissions.indexOf("view_us")>-1?t.resolve("project-kanban",r):e.is_wiki_activated&&e.my_permissions.indexOf("view_wiki_pages")>-1?t.resolve("project-wiki",r):e.is_issues_activated&&e.my_permissions.indexOf("view_issues")>-1?t.resolve("project-issues",r):t.resolve("project",r)},{get:e}},g.factory("$projectUrl",["$tgNavUrls",c]),u=function(t){var e,r,n;return e=t.defer(),e.resolve(),r=e.promise,n={bindAdd:function(t){return function(e){return function(){var n;return n=1<=arguments.length?v.call(arguments,0):[],r=r.then(function(){return e.apply(t,n)})}}}(this),add:function(t){return function(t){return r=r?r.then(t):t(),n}}(this)}},g.factory("$tgQqueue",["$q",u]),l=function(t){function e(t,e,r,n){this.qqueue=t,this.repo=e,this.q=r,this.model=n}return y(e,t),e.$inject=["$tgQqueue","$tgRepo","$q","$tgModel"],e.prototype.setObject=function(t,e){this.scope=t,this.prop=e},e.prototype.clone=function(){var t,e;return t=_.cloneDeep(this.scope[this.prop]._attrs),e=this.model.make_model(this.scope[this.prop]._name,t)},e.prototype.getObj=function(){return this.scope[this.prop]},e.prototype.save=function(t){var e;return e=this.q.defer(),this.qqueue.add(function(r){return function(){var n,i,o,s,a;return s=r.getObj(),i=s.comment,s.comment="",n=r.clone(),o=_.omit(s._modifiedAttrs,["version"]),n=_.assign(n,o),t(n),i.length&&(n.comment=i),a=function(){return r.scope[r.prop]=n,e.resolve.apply(null,arguments)},r.repo.save(n).then(a,e.reject)}}(this)),e.promise},e}(m.Service),g.service("$tgQueueModelTransformation",l),f=function(t){return{get:function(e){return function(e,r){var n;return null==r&&(r=!1),n=t.get(e),r&&(n=_.template(n)),n}}(this)}},g.factory("$tgTemplate",["$templateCache",f]),r=function(){var t;return t="",{template:t}},g.directive("tgCapslock",[r]),a=function(){var t,e;return e='\n \n',t=function(t,e,r){},{scope:{onClose:"&"},link:t,template:e}},g.directive("tgLightboxClose",[a]),d=function(){var t;return t='\n \n {{svgTitle}}\n {{svgTitleTranslate | translate: svgTitleTranslateValues}}\n \n',{scope:{svgIcon:"@",svgTitle:"@",svgTitleTranslate:"@",svgTitleTranslateValues:"=",svgFill:"="},template:t}},g.directive("tgSvg",[d]),e=function(t,e,r){return{restrict:"A",link:function(r,n,i){var o;return i.ngShow?(o=e(i.ngShow),r.$watch(o,function(e){if(e===!0)return t(function(){return n[0].focus()})})):t(function(){return n[0].focus()})}}},g.directive("tgAutofocus",["$timeout","$parse","animationFrame",e]),g.directive("tgPreloadImage",function(){var t,e,r;return e="loading...",r="
\n \n
",t=function(t,e){var r;return r=new Image,r.onload=e,r.src=t,r},{template:r,transclude:!0,replace:!0,link:function(r,n,i){var o,s,a;return o=n.find("img:last"),a=null,s=function(){if(n.find(".loading-spinner").remove(),o.show(),a)return clearTimeout(a),a=null},i.$observe("preloadSrc",function(r){return a&&clearTimeout(a),n.find(".loading-spinner").remove(),a=setTimeout(function(){return n.prepend(e)},200),o.hide(),t(r,s)})}}}),o=function(){var t;return t=function(t,e,r){return e.on("click",function(t){if(t.ctrlKey||t.metaKey)return t.preventDefault()})},{link:t}},g.directive("tgCtrlClickDisable",o)}.call(this),function(){var t,e,r,n,i,o,s,a,c;a=this.taiga,o=this.taiga.mixOf,c=this.taiga.toString,i=this.taiga.joinStr,n=this.taiga.groupBy,r=this.taiga.bindOnce,e=this.taiga.bindMethods,s=angular.module("taigaCommon"),t=function(){function t(t,e,r,n,i){this.params=t,this.repo=e,this.projectService=r,this.navurls=n,this.location=i,this.repo.resolve({pslug:this.params.pslug,ref:this.params.ref}).then(function(t){return function(e){var r;return e.issue?r=t.navurls.resolve("project-issues-detail",{project:t.projectService.project.get("slug"),ref:t.params.ref}):e.task?r=t.navurls.resolve("project-tasks-detail",{project:t.projectService.project.get("slug"),ref:t.params.ref}):e.us?r=t.navurls.resolve("project-userstories-detail",{project:t.projectService.project.get("slug"),ref:t.params.ref}):e.epic?r=t.navurls.resolve("project-epics-detail",{project:t.projectService.project.get("slug"),ref:t.params.ref}):e.wikipage&&(r=t.navurls.resolve("project-wiki-page",{project:t.projectService.project.get("slug"),slug:t.params.ref})),t.location.path(r)}}(this))}return t.$inject=["$routeParams","$tgRepo","tgProjectService","$tgNavUrls","$location"],t}(),s.controller("DetailController",t)}.call(this),function(){var t;t=angular.module("taigaEpics",[])}.call(this),function(){var t,e,r,n,i,o,s=function(t,e){return function(){return t.apply(e,arguments)}};o=this.taiga,i=this.taiga.startswith,r=this.taiga.bindMethods,n=angular.module("taigaEvents",[]),e=function(){function t(t,e,n,i,o,a){this.win=t,this.log=e,this.config=n,this.auth=i,this.liveAnnouncementService=o,this.rootScope=a,this.processMessage=s(this.processMessage,this),r(this)}return t.prototype.initialize=function(t){if(this.sessionId=t,this.subscriptions={},this.connected=!1,this.error=!1,this.pendingMessages=[],this.missedHeartbeats=0,this.heartbeatInterval=null,void 0===this.win.WebSocket)return this.log.info("WebSockets not supported on your browser")},t.prototype.setupConnection=function(){var t,e,r,n;if(this.stopExistingConnection(),n=this.config.get("eventsUrl"))return i(n,"ws:")||i(n,"wss:")||(t=this.win.location,r="https:"===t.protocol?"wss:":"ws:",e=_.trimStart(n,"/"),n=r+"//"+t.host+"/"+e),this.error=!1,this.ws=new this.win.WebSocket(n),this.ws.addEventListener("open",this.onOpen),this.ws.addEventListener("message",this.onMessage),this.ws.addEventListener("error",this.onError),this.ws.addEventListener("close",this.onClose)},t.prototype.stopExistingConnection=function(){if(void 0!==this.ws)return this.ws.removeEventListener("open",this.onOpen),this.ws.removeEventListener("close",this.onClose),this.ws.removeEventListener("error",this.onError),this.ws.removeEventListener("message",this.onMessage),this.stopHeartBeatMessages(),this.ws.close(),delete this.ws},t.prototype.notifications=function(){return this.subscribe(null,"notifications",function(t){return function(e){return t.liveAnnouncementService.show(e.title,e.desc),t.rootScope.$digest()}}(this))},t.prototype.liveNotifications=function(){var t,e;if(null!=this.auth.userData)return e=this.auth.userData.get("id"),t=function(t){return function(){return t.subscribe(null,"live_notifications."+e,function(t){var e;if(e=new Notification(t.title,{icon:"/"+window._version+"/images/favicon.png",body:t.body,tag:t.id}),e.onshow=function(){if(t.timeout&&t.timeout>0)return setTimeout(function(){return e.close()},t.timeout)},t.url)return e.onclick=function(){return window.open(t.url)}})}}(this),Notification?"granted"===Notification.permission?t():"denied"!==Notification.permission?Notification.requestPermission(function(e){return function(e){if("granted"===e)return t()}}(this)):void 0:console.log("This browser does not support desktop notification")},t.prototype.webNotifications=function(){var t,e,r;if(null!=this.auth.userData)return r=this.auth.userData.get("id"),e="web_notifications."+r,t=o.randomInt(700,1e3),this.subscribe(null,e,function(t){return function(e){return t.rootScope.$broadcast("notifications:new")}}(this))},t.prototype.startHeartBeatMessages=function(){var t,e,r;if(!this.heartbeatInterval)return e=this.config.get("eventsMaxMissedHeartbeats",5),t=this.config.get("eventsHeartbeatIntervalTime",6e4),r=this.config.get("eventsReconnectTryInterval",1e4),this.missedHeartbeats=0,this.heartbeatInterval=setInterval(function(t){return function(){var r;try{if(t.missedHeartbeats>=e)throw new Error("Too many missed heartbeats PINGs.");return t.missedHeartbeats++,t.sendMessage({cmd:"ping"}),t.log.debug("HeartBeat send PING")}catch(n){return r=n,t.log.error("HeartBeat error: "+r.message),t.setupConnection()}}}(this),t),this.log.debug("HeartBeat enabled")},t.prototype.stopHeartBeatMessages=function(){if(this.heartbeatInterval)return clearInterval(this.heartbeatInterval),this.heartbeatInterval=null,this.log.debug("HeartBeat disabled")},t.prototype.processHeartBeatPongMessage=function(t){return this.missedHeartbeats=0,this.log.debug("HeartBeat recived PONG")},t.prototype.serialize=function(t){return _.isObject(t)?JSON.stringify(t):t},t.prototype.sendMessage=function(t){var e,r,n,i,o;if(this.pendingMessages.push(t),this.connected){for(n=_.map(this.pendingMessages,this.serialize),this.pendingMessages=[],o=[],e=0,r=n.length;e\n
<%- name %>
'),i=function(i,c,u){var l,p,d,f,h;return h=function(t){var e,o,a;return o={name:r.instant("COMMON.ASSIGNED_TO.NOT_ASSIGNED")},a=i.usersById[t.assigned_to],e=n.getAvatar(a),o.imgurl=e.url,o.bg=e.bg,a&&(o.name=a.full_name_display),c.find(".avatar").html(s(o)),c.find(".task-assignedto").attr("title",o.name)},l=c.controller(),f=i.$eval(u.tgRelatedTaskAssignedToInlineEdition),d=i.$eval(u.notAutoSave),p=!d,i.$watch(u.tgRelatedTaskAssignedToInlineEdition,function(){return f=i.$eval(u.tgRelatedTaskAssignedToInlineEdition),h(f)}),h(f),c.on("click",".task-assignedto",function(t){return e.$broadcast("assigned-to:add",f)}),a.bindOnce(i,"project",function(t){if(t.my_permissions.indexOf("modify_task")===-1)return c.unbind("click"),c.find("a").addClass("not-clickable")}),i.$on("assigned-to:added",o(2e3,function(e){return function(e,r,n){if(n.id===f.id)return n.assigned_to=r,p&&t.save(n).then(function(){return i.$emit("related-tasks:assigned-to-changed")}),h(n)}}(this))),i.$on("$destroy",function(){return c.off()})},{link:i}},s.directive("tgRelatedTaskAssignedToInlineEdition",["$tgRepo","$rootScope","$translate","tgAvatarService",t])}.call(this),function(){var t,e,r,n,i,o,s=function(t,e){function r(){this.constructor=t}for(var n in e)a.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},a={}.hasOwnProperty;i=this.taiga,t=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return s(e,t),e}(i.Service),o={auth:"/auth","auth-register":"/auth/register",invitations:"/invitations",users:"/users",by_username:"/users/by_username","users-password-recovery":"/users/password_recovery","users-change-password-from-recovery":"/users/change_password_from_recovery","users-change-password":"/users/change_password","users-change-email":"/users/change_email","users-cancel-account":"/users/cancel","users-export":"/users/export","user-stats":"/users/%s/stats","user-liked":"/users/%s/liked","user-voted":"/users/%s/voted","user-watched":"/users/%s/watched","user-contacts":"/users/%s/contacts","user-me":"/users/me",permissions:"/permissions","notify-policies":"/notify-policies",notifications:"/web-notifications","user-project-settings":"/user-project-settings","user-storage":"/user-storage",memberships:"/memberships","bulk-create-memberships":"/memberships/bulk_create",roles:"/roles",permissions:"/permissions",resolver:"/resolver",projects:"/projects","project-templates":"/project-templates","project-modules":"/projects/%s/modules","bulk-update-projects-order":"/projects/bulk_update_order","project-like":"/projects/%s/like","project-unlike":"/projects/%s/unlike","project-watch":"/projects/%s/watch","project-unwatch":"/projects/%s/unwatch","project-contact":"contact","project-transfer-validate-token":"/projects/%s/transfer_validate_token","project-transfer-accept":"/projects/%s/transfer_accept","project-transfer-reject":"/projects/%s/transfer_reject","project-transfer-request":"/projects/%s/transfer_request","project-transfer-start":"/projects/%s/transfer_start","epic-statuses":"/epic-statuses","userstory-statuses":"/userstory-statuses","userstory-due-dates":"/userstory-due-dates","userstory-due-dates-create-default":"/userstory-due-dates/create_default",points:"/points","task-statuses":"/task-statuses","task-due-dates":"/task-due-dates","task-due-dates-create-default":"/task-due-dates/create_default","issue-statuses":"/issue-statuses","issue-due-dates":"/issue-due-dates","issue-due-dates-create-default":"/issue-due-dates/create_default","issue-types":"/issue-types",priorities:"/priorities",severities:"/severities",milestones:"/milestones","move-userstories-to-milestone":"/milestones/%s/move_userstories_to_sprint","move-tasks-to-milestone":"/milestones/%s/move_tasks_to_sprint","move-issues-to-milestone":"/milestones/%s/move_issues_to_sprint",epics:"/epics","epic-upvote":"/epics/%s/upvote","epic-downvote":"/epics/%s/downvote","epic-watch":"/epics/%s/watch","epic-unwatch":"/epics/%s/unwatch","epic-related-userstories":"/epics/%s/related_userstories","epic-related-userstories-bulk-create":"/epics/%s/related_userstories/bulk_create",userstories:"/userstories","bulk-create-us":"/userstories/bulk_create","bulk-update-us-backlog-order":"/userstories/bulk_update_backlog_order","bulk-update-us-milestone":"/userstories/bulk_update_milestone","bulk-update-us-miles-order":"/userstories/bulk_update_sprint_order","bulk-update-us-kanban-order":"/userstories/bulk_update_kanban_order","userstories-filters":"/userstories/filters_data","userstory-upvote":"/userstories/%s/upvote","userstory-downvote":"/userstories/%s/downvote","userstory-watch":"/userstories/%s/watch","userstory-unwatch":"/userstories/%s/unwatch",tasks:"/tasks","bulk-create-tasks":"/tasks/bulk_create","bulk-update-task-taskboard-order":"/tasks/bulk_update_taskboard_order","bulk-update-task-milestone":"/tasks/bulk_update_milestone","task-upvote":"/tasks/%s/upvote","task-downvote":"/tasks/%s/downvote","task-watch":"/tasks/%s/watch","task-unwatch":"/tasks/%s/unwatch","task-filters":"/tasks/filters_data",issues:"/issues","bulk-create-issues":"/issues/bulk_create","bulk-update-issue-milestone":"/issues/bulk_update_milestone","issues-filters":"/issues/filters_data","issue-upvote":"/issues/%s/upvote","issue-downvote":"/issues/%s/downvote","issue-watch":"/issues/%s/watch","issue-unwatch":"/issues/%s/unwatch",wiki:"/wiki","wiki-restore":"/wiki/%s/restore","wiki-links":"/wiki-links","history/epic":"/history/epic","history/us":"/history/userstory","history/issue":"/history/issue","history/task":"/history/task","history/wiki":"/history/wiki","attachments/epic":"/epics/attachments","attachments/us":"/userstories/attachments","attachments/issue":"/issues/attachments","attachments/task":"/tasks/attachments","attachments/wiki_page":"/wiki/attachments","custom-attributes/epic":"/epic-custom-attributes","custom-attributes/userstory":"/userstory-custom-attributes","custom-attributes/task":"/task-custom-attributes","custom-attributes/issue":"/issue-custom-attributes","custom-attributes-values/epic":"/epics/custom-attributes-values","custom-attributes-values/userstory":"/userstories/custom-attributes-values","custom-attributes-values/task":"/tasks/custom-attributes-values","custom-attributes-values/issue":"/issues/custom-attributes-values",webhooks:"/webhooks","webhooks-test":"/webhooks/%s/test",webhooklogs:"/webhooklogs","webhooklogs-resend":"/webhooklogs/%s/resend","epics-csv":"/epics/csv?uuid=%s","userstories-csv":"/userstories/csv?uuid=%s","tasks-csv":"/tasks/csv?uuid=%s","issues-csv":"/issues/csv?uuid=%s","timeline-profile":"/timeline/profile","timeline-user":"/timeline/user","timeline-project":"/timeline/project",search:"/search",exporter:"/exporter",importer:"/importer/load_dump",feedback:"/feedback",locales:"/locales",applications:"/applications","application-tokens":"/application-tokens","stats-discover":"/stats/discover","importers-trello-auth-url":"/importers/trello/auth_url","importers-trello-authorize":"/importers/trello/authorize","importers-trello-list-projects":"/importers/trello/list_projects","importers-trello-list-users":"/importers/trello/list_users","importers-trello-import-project":"/importers/trello/import_project","importers-jira-auth-url":"/importers/jira/auth_url","importers-jira-authorize":"/importers/jira/authorize","importers-jira-list-projects":"/importers/jira/list_projects","importers-jira-list-users":"/importers/jira/list_users","importers-jira-import-project":"/importers/jira/import_project","importers-github-auth-url":"/importers/github/auth_url","importers-github-authorize":"/importers/github/authorize","importers-github-list-projects":"/importers/github/list_projects","importers-github-list-users":"/importers/github/list_users","importers-github-import-project":"/importers/github/import_project","importers-asana-auth-url":"/importers/asana/auth_url","importers-asana-authorize":"/importers/asana/authorize","importers-asana-list-projects":"/importers/asana/list_projects","importers-asana-list-users":"/importers/asana/list_users","importers-asana-import-project":"/importers/asana/import_project"},r=function(t,e){return t.debug("Initialize api urls"),e.update(o)},e=function(t,e){var r,n,i,o,s;for(t.debug("Initialize resources"),o=_.toArray(arguments).slice(2),s=[],r=0,n=o.length;rn){n=a.length,s.name=i,s.value=a;break}return 0===n?s:s},h=function(t){var e,r,n;r=[];for(e in t)n=t[e],m.find("li."+e).show(),r.push(m.find("li."+e+" .num").html(n.length));return r},f=function(t){return m.find("a.active").removeClass("active"),m.find("li."+t.name+" a").addClass("active"),u=!1,c=t.name},v={epics:r.get("search-epics"),issues:r.get("search-issues"),tasks:r.get("search-tasks"),userstories:r.get("search-userstories"),wikipages:r.get("search-wikipages")},g=function(r){var i,o,s,a,c;return o=n.find(".search-result-table").children(),s=o.scope(),s&&(s.$destroy(),o.remove()),a=t.$new(),a[r.name]=r.value,c=angular.element.parseHTML(l(v[r.name])),i=e(c)(a),n.find(".search-result-table").html(i)},t.$watch("searchResults",function(t){var e;if(p=t)return e=d(t),h(t),g(e),f(e)}),t.$watch("searchTerm",function(t){return void 0!==t&&i.search("text",t),o.trackPage(i.url(),"Search")}),n.on("click",".search-filter li > a",function(e){var r,n,i,o;return e.preventDefault(),o=angular.element(e.currentTarget),i=o.parent().data("name"),n=p?p[i]:[],r={name:i,value:n},t.$apply(function(){return g(r),f(r)})})},s=function(t,e,r){var i,o;return i=e.controller(),a(t,e,r,i),o=n.text,t.$watch("projectId",function(e){if(null!=e)return t.searchTerm=o})},{link:s}},c.directive("tgSearch",["$log","$compile","$templateCache","$routeParams","$tgLocation","$tgAnalytics",r])}.call(this),function(){var t;t=angular.module("taigaTaskboard",[])}.call(this),function(){var t;t=angular.module("taigaTasks",[])}.call(this),function(){var t;t=angular.module("taigaTeam",[])}.call(this),function(){var t;t=angular.module("taigaUserSettings",[])}.call(this),function(){var t;t=angular.module("taigaUserStories",[])}.call(this),function(){var t;t=angular.module("taigaWiki",[])}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=this.taiga,e=angular.module("taigaCommon"),t=function(t){function e(t,e,r,n,i,o){var s;this.rootscope=t,this.log=e,this.config=r,this.win=n,this.doc=i,this.location=o,this.initialized=!1,s=this.config.get("analytics",{}),this.accountId=s.accountId,this.pageEvent=s.pageEvent||"$routeChangeSuccess",this.trackRoutes=s.trackRoutes||!0,this.ignoreFirstPageLoad=s.ignoreFirstPageLoad||!1}return n(e,t),e.$inject=["$rootScope","$log","$tgConfig","$window","$document","$location"],e.prototype.initialize=function(){return this.accountId?(this.injectAnalytics(),this.win.ga("create",this.accountId,"auto"),this.win.ga("require","ec"),this.win.ga("require","displayfeatures"),this.trackRoutes&&!this.ignoreFirstPageLoad&&this.win.ga("send","pageview",this.getUrl()),this.trackRoutes&&this.rootscope.$on(this.pageEvent,function(t){return function(){return t.trackPage(t.getUrl(),"Taiga")}}(this)),this.initialized=!0,this.setUserId()):void this.log.debug("Analytics: no acount id provided. Disabling.")},e.prototype.setUserId=function(){var t,e;if(this.initialized&&this.win.ga)return this.win.ga("set","userId",null!=(t=this.rootscope)&&null!=(e=t.user)?e.uuid:void 0)},e.prototype.getUrl=function(){return this.location.path()},e.prototype.injectAnalytics=function(){var t;return(t=function(t,e,r,n,i,o,s){t.GoogleAnalyticsObject=i,t[i]=t[i]||function(){(t[i].q=t[i].q||[]).push(arguments)},t[i].l=1*new Date,o=e.createElement(r),s=e.getElementsByTagName(r)[0],o.async=1,o.src=n,s.parentNode.insertBefore(o,s)})(window,document,"script","//www.google-analytics.com/analytics.js","ga")},e.prototype.trackPage=function(t,e){if(this.initialized&&this.win.ga)return e=e||this.doc[0].title,this.win.ga("send","pageview",{page:t,title:e})},e.prototype.trackEvent=function(t,e,r,n){if(this.initialized&&this.win.ga)return this.win.ga("send","event",t,e,r,n)},e.prototype.ecViewPlan=function(t){if(this.initialized&&this.win.ga)return this.win.ga("ec:addProduct",{id:t.plan_id,name:t.name,category:"plans",quantity:1,position:1}),this.win.ga("ec:setAction","detail"),this.trackEvent("ecommerce","view-product-detail",t.name,t.plan_id)},e.prototype.ecClickPlan=function(t){if(this.initialized&&this.win.ga)return this.win.ga("ec:addProduct",{id:t.plan_id,name:t.name,category:"plans",quantity:1,position:1}),this.win.ga("ec:setAction","click"),this.trackEvent("ecommerce","click-product",t.name,t.plan_id)},e.prototype.ecListPlans=function(t,e){var r,n,i,o,s;if(o=t[0],this.initialized&&this.win.ga){for(s=1,r=0,n=o.length;r"+t+""))}),u.on("click.confirm-dialog","a.button-green",i(2e3,function(t){return function(e){var r,n;return e.preventDefault(),n=angular.element(e.currentTarget),r=t.loading().target(n).start(),c.resolve({selected:a.val(),finish:function(e){if(null==e&&(e=!0),r.finish(),e)return t.hide(u)}})}}(this))),u.on("click.confirm-dialog",".button-red",function(t){return function(e){return e.preventDefault(),c.reject(),t.hide(u)}}(this)),this.lightboxService.open(u),c.promise},o.prototype.error=function(t){var e,r;return e=this.q.defer(),r=angular.element(".lightbox-generic-error"),r.find(".title").html(t),r.on("click.confirm-dialog",".button-green",function(t){return function(n){return n.preventDefault(),e.resolve(),t.hide(r)}}(this)),r.on("click.confirm-dialog",".close",function(t){return function(n){return n.preventDefault(),e.resolve(),t.hide(r)}}(this)),this.lightboxService.open(r),e.promise},o.prototype.success=function(t,e,r,n){var i,o,a,c,u;return i=this.q.defer(),a=angular.element(".lightbox-generic-success"),a.find("img").remove(),a.find("svg").remove(),r&&("img"===r.type?o=$("").addClass("lb-icon").attr("src",r.name):"svg"===r.type&&(o=document.createElement("div"),s.addClass(o,"icon"),s.addClass(o,r.name),s.addClass(o,"lb-icon"),c=document.createElementNS("http://www.w3.org/2000/svg","svg"),u=document.createElementNS("http://www.w3.org/2000/svg","use"),u.setAttributeNS("http://www.w3.org/1999/xlink","href","#"+r.name),o.appendChild(c).appendChild(u)),o&&a.find("section").prepend(o)),t&&a.find(".title").html(t),e&&a.find(".message").html(e),n&&(a.find(".button-green").html(n),a.find(".button-green").attr("title",n)),a.on("click.confirm-dialog",".button-green",function(t){return function(e){return e.preventDefault(),i.resolve(),t.hide(a)}}(this)),a.on("click.confirm-dialog",".close",function(t){return function(e){return e.preventDefault(),i.resolve(),t.hide(a)}}(this)),this.lightboxService.open(a),i.promise},o.prototype.loader=function(t,e,r){var n;return null==r&&(r=!1),n=angular.element(".lightbox-generic-loading"),t&&n.find(".title").html(t),e&&n.find(".message").html(e),r&&n.find(".spin").removeClass("hidden"),{start:function(t){return function(){return t.lightboxService.open(n)}}(this),stop:function(t){return function(){return t.lightboxService.close(n)}}(this),update:function(t){return function(t,e,r,i){return e&&n.find(".title").html(e),r&&n.find(".message").html(r),i?(n.find(".spin").addClass("hidden"),n.find(".progress-bar-wrapper").removeClass("hidden"),n.find(".progress-bar-wrapper > .bar").width(i+"%"),n.find(".progress-bar-wrapper > span").html(i+"%").css("left",i-9+"%")):(n.find(".spin").removeClass("hidden"),n.find(".progress-bar-wrapper").addClass("hidden"))}}(this)}},o.prototype.notify=function(t,r,i,o){var s,c,u;if(u=".notification-message-"+t,c=angular.element(u),!c.hasClass("active"))return i?c.find("h4").html(i):c.find("h4").html(this.translate.instant(e[t].title)),r?c.find("p").html(r):c.find("p").html(this.translate.instant(e[t].message)),s=angular.element("body"),s.find(".notification-message .notification-light").removeClass("active").addClass("inactive"),s.find(u).removeClass("inactive").addClass("active"),this.tsem&&n(this.tsem),o||(o="error"===t||"light-error"===t?3500:1500),this.tsem=a(o,function(t){return function(){return s.find(u).removeClass("active").addClass("inactive").one("animationend",function(){return $(this).removeClass("inactive")}),delete t.tsem}}(this)),c.on("click",".icon-close, .close",function(t){return function(t){return s.find(u).removeClass("active").addClass("inactive")}}(this))},o}(s.Service),o=angular.module("taigaCommon"),o.service("$tgConfirm",t)}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y=function(t,e){function r(){this.constructor=t}for(var n in e)b.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},b={}.hasOwnProperty;v=this.taiga,d=this.taiga.bindMethods,f=this.taiga.bindOnce,h=this.taiga.debounce,g=v.generateHash,m=angular.module("taigaCommon"),u="text",c="url",s="multiline",i="date",p="url",o="dropdown",t="checkbox",a="number",l=[{key:u,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT"},{key:s,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI"},{key:i,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE"},{key:p,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL"},{key:c,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT"},{key:o,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DROPDOWN"},{key:t,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_CHECKBOX"},{key:a,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_NUMBER"}],r=function(t){function e(t,e,r,n,i,o){this.scope=t,this.rootscope=e,this.repo=r,this.rs=n,this.confirm=i,this.q=o,d(this),this.type=null,this.objectId=null,this.projectId=null,this.customAttributes=[],this.customAttributesValues=null}return y(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgResources","$tgConfirm","$q"],e.prototype.initialize=function(t,e){return this.project=this.scope.project,this.type=t,this.objectId=e,this.projectId=this.scope.projectId},e.prototype.loadCustomAttributesValues=function(){return this.objectId?this.rs.customAttributesValues[this.type].get(this.objectId).then(function(t){return function(e){return t.customAttributes=t.project[t.type+"_custom_attributes"],t.customAttributesValues=e,e}}(this)):this.customAttributesValues},e.prototype.getAttributeValue=function(t){var e;return e=_.clone(t,!1),e.value=this.customAttributesValues.attributes_values[t.id],e},e.prototype.updateAttributeValue=function(t){var e,r,n;return n=function(t){return function(){return t.rootscope.$broadcast("custom-attributes-values:edit")}}(this),r=function(t){return function(e){return t.confirm.notify("error"),t.q.reject()}}(this),e=_.clone(this.customAttributesValues.attributes_values,!0),e[t.id]=t.value,this.customAttributesValues.attributes_values=e,this.customAttributesValues.id=this.objectId,this.repo.save(this.customAttributesValues).then(n,r)},e}(v.Controller),n=function(t,e){var n,i,o,s;return o=t.get("custom-attributes/custom-attributes-values.html",!0),n=function(t){return g(["custom-attributes-collapsed",t])},i=function(t,r,i,o){var s,a,c;return s=o[0],a=o[1],c=n(i.type),t.collapsed=e.get(c)||!1,f(t,i.ngModel,function(t){return s.initialize(i.type,t.id),s.loadCustomAttributesValues()}),t.toggleCollapse=function(){return t.collapsed=!t.collapsed,e.set(c,t.collapsed)},t.$on("$destroy",function(){return r.off()})},s=function(t,e){return o({requiredEditionPerm:e.requiredEditionPerm})},{require:["tgCustomAttributesValues","ngModel"],controller:r,controllerAs:"ctrl",restrict:"AE",scope:!0,link:i,template:s}},m.directive("tgCustomAttributesValues",["$tgTemplate","$tgStorage","$translate",n]),e=function(e,r,n,s,c,u){var l,p,d;return p=e.get("custom-attributes/custom-attribute-value.html",!0),d=e.get("custom-attributes/custom-attribute-value-edit.html",!0),l=function(e,l,f,g){var m,v,y,b,S,j;return y=s.instant("COMMON.PICKERDATE.FORMAT"),b=function(t,r){var o,s,f,h,g,m;return null==r&&(r=!1),t.type===i&&t.value&&(m=moment(t.value,"YYYY-MM-DD").format(y)),m=t.type===a&&t.value?parseFloat(t.value):t.value,f=v(),o={id:t.id,name:t.name,description:t.description,value:m,type:t.type,isEditable:f},g=e.$new(),g.attributeHtml=u.getHTML(m),g.extra=t.extra,g.model=m,!f||!r&&m?(h=p(o),h=n(h)(g),l.html(h)):(h=d(o),h=n(h)(g),l.html(h),t.type===i?(s=c.get(),_.merge(s,{field:l.find("input[name=value]")[0],onSelect:function(t){return function(t){var e;return e=t}}(this),onOpen:function(t){return function(){if("undefined"!=typeof selectedDate&&null!==selectedDate)return l.picker.setDate(selectedDate)}}(this)}),l.picker=new Pikaday(s)):void 0)},v=function(){var t,r;return t=e.project.my_permissions,r=f.requiredEditionPerm,t.indexOf(r)>-1},e.saveCustomRichText=function(t){return function(t,e){return m.value=t,g.updateAttributeValue(m).then(function(){return e(),b(m,!1)})}}(this),e.cancelCustomRichText=function(t){return function(){return b(m,!1),null}}(this),j=h(2e3,function(r){return function(r){var n,s;if(r.preventDefault(),n=l.find("form").checksley(),n.validate())return m.type===o?(s=l.find("select[name='value']"),m.value=s.val()):m.type===t?(s=l.find("input[name=value]"),m.value=s[0].checked):(s=l.find("input[name=value], textarea[name='value']"),m.value=s.val(),m.type===i&&moment(m.value,y).isValid()&&(m.value=moment(m.value,y).format("YYYY-MM-DD")),m.type===a&&(m.value=parseFloat(m.value))),e.$apply(function(){return g.updateAttributeValue(m).then(function(){return b(m,!1)})})}}(this)),S=function(){return l.find("input[name='value'], textarea[name='value']").focus().select()},m=e.$eval(f.tgCustomAttributeValue),null!==m.value&&void 0!==m.value||(m.value=""),e.customAttributeValue=m,b(m),l.on("click",".js-value-view-mode span a",function(t){return t.stopPropagation()}),l.on("click",".js-value-view-mode",function(){if(v()&&!r.get().length)return b(m,!0),S()}),l.on("click",".js-edit-description",function(t){return t.preventDefault(),b(m,!0),S()}),l.on("keyup","input[name=value], textarea[name='value']",function(t){return 13===t.keyCode&&"textarea"!==t.currentTarget.type?j(t):27===t.keyCode?b(m,!1):void 0}),l.on("submit","form",j),l.on("click",".js-save-description",j),e.$on("$destroy",function(){return l.off()})},{link:l,require:"^tgCustomAttributesValues",restrict:"AE"}},m.directive("tgCustomAttributeValue",["$tgTemplate","$selectedText","$compile","$translate","tgDatePickerConfigService","tgWysiwygService",e])}.call(this),function(){var t,e,r,n=function(t,e){return function(){return t.apply(e,arguments)}},i=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;r=this.taiga,e=angular.module("taigaCommon"),t=function(t){function e(){this.replaceEmojiNameByHtmlImgs=n(this.replaceEmojiNameByHtmlImgs,this),this.replaceEmojiNameByImgs=n(this.replaceEmojiNameByImgs,this),this.replaceImgsByEmojiName=n(this.replaceImgsByEmojiName,this),this.getEmojiByName=n(this.getEmojiByName,this),this.getEmojiById=n(this.getEmojiById,this),this.searchByName=n(this.searchByName,this),this.emojis=_.map(r.emojis,function(t){return t.image="/"+window._version+"/emojis/"+t.image,t}),this.emojisById=_.keyBy(this.emojis,"id"),this.emojisByName=_.keyBy(this.emojis,"name")}return i(e,t),e.$inject=[],e.prototype.searchByName=function(t){return _.filter(this.emojis,function(e){return e.name.indexOf(t)!==-1})},e.prototype.getEmojiById=function(t){return this.emojisById[t]},e.prototype.getEmojiByName=function(t){return this.emojisByName[t]},e.prototype.replaceImgsByEmojiName=function(t){var e,n,i,o,s,a;for(i=r.getMatches(t,/emojis\/([^"]+).png"/gi),o=0,s=i.length;o]+>","g"),e=this.getEmojiById(n),t=t.replace(a,":"+e.name+":");return t},e.prototype.replaceEmojiNameByImgs=function(t){var e,n,i,o,s,a;for(i=r.getMatches(t,/:([\w +-]*):/g),o=0,s=i.length;o'));return t},e}(r.Service),e.service("$tgEmojis",t)}.call(this),function(){var t,e,r,n,i,o,s=function(t,e){return function(){return t.apply(e,arguments)}};o=this.taiga,n=this.taiga.groupBy,i=angular.module("taigaCommon"),e=function(t,e,r,n,i){var o;return o=function(e,r,o,s){return e.$watch(o.ngModel,function(o){var a;if(o)return a=t.create(r,o,e.project),a.onSelectedPointForRole=function(t,r,n){return o.points=n,a.render(),e.$apply(function(){return s.$setViewValue(o)})},a.render=function(){var t,r,o,s;return t={totalPoints:this.calculateTotalPoints(),roles:this.calculateRoles(),editable:this.isEditable,loading:!1},o="common/estimation/us-estimation-points-per-role.html",s=n.get(o,!0),r=s(t),r=i(r)(e),this.$el.html(r)},a.render()}),e.$on("$destroy",function(){return r.off()})},{link:o,restrict:"EA",require:"ngModel"}},i.directive("tgLbUsEstimation",["$tgEstimationsService","$rootScope","$tgRepo","$tgTemplate","$compile",e]),r=function(t,e,r,n,i,o,s){var a;return a=function(r,a,c,u){var l;return l=function(t){var e,r;return r=o.save(function(e){return function(e){return e.points=t,e}}(this)),e=function(t){return function(){return s.notify("error")}}(this),r.then(null,e)},r.$watchCollection(function(){return u.$modelValue&&u.$modelValue.points},function(){var o,s;if(s=u.$modelValue)return o=t.create(a,s,r.project),o.onSelectedPointForRole=function(t,r,n){return o.loading=t,o.render(),l(n).then(function(){return o.loading=!1,e.$broadcast("object:updated"),o.render()})},o.render=function(){var t,e,s,a;return t={totalPoints:this.calculateTotalPoints(),roles:this.calculateRoles(),editable:this.isEditable,loading:o.loading},s="common/estimation/us-estimation-points-per-role.html",a=n.get(s,!0),e=a(t),e=i(e)(r),this.$el.html(e)},o.render()}),r.$on("$destroy",function(){return a.off()})},{link:a,restrict:"EA",require:"ngModel"}},i.directive("tgUsEstimation",["$tgEstimationsService","$rootScope","$tgRepo","$tgTemplate","$compile","$tgQueueModelTransformation","$tgConfirm",r]),t=function(t,e,r,i,o){var a,c,u;return u=t.get("common/estimation/us-estimation-points.html",!0),a=function(){function t(t,e,r){this.$el=t,this.us=e,this.project=r,this.bindClickEvents=s(this.bindClickEvents,this),this.isEditable=this.project.my_permissions.indexOf("modify_us")!==-1,this.roles=this.project.roles,this.points=this.project.points,this.loading=!1,this.pointsById=n(this.points,function(t){return t.id}),this.onSelectedPointForRole=function(t,e){},this.render=function(){}}return t.prototype.save=function(t,n){var s;return s=i.defer(),o.add(function(t){return function(){var n,i;return i=function(){return s.resolve(),t.render()},n=function(){return r.notify("error"),t.us.revert(),t.render(),s.reject()},e.save(t.us).then(i,n)}}(this)),s.promise},t.prototype.calculateTotalPoints=function(){var t,e;return e=_.map(this.us.points,function(t){return function(e,r){var n;return null!=(n=t.pointsById[e])?n.value:void 0}}(this)),0===e.length?"?":(t=_.filter(e,function(t){return null!=t}),0===t.length?"?":_.reduce(t,function(t,e){return t+e}))},t.prototype.calculateRoles=function(){var t,e;return t=_.filter(this.project.roles,"computable"),e=_.map(t,function(t){return function(e){var r,n;return r=t.us.points[e.id],n=t.pointsById[r],e=_.clone(e,!0),e.points=null!=n&&null!=n.name?n.name:"?",e}}(this))},t.prototype.bindClickEvents=function(){return this.$el.on("click",".total.clickable",function(t){return function(e){var r,n;return e.preventDefault(),e.stopPropagation(),n=angular.element(e.currentTarget),r=n.data("role-id"),t.renderPointsSelector(r,n),n.siblings().removeClass("active"),n.addClass("active")}}(this)),this.$el.on("click",".point",function(t){return function(e){var r,n,i,o;return e.preventDefault(),e.stopPropagation(),o=angular.element(e.currentTarget),i=o.data("role-id"),r=o.data("point-id"),t.$el.find(".popover").popover().close(),n=_.clone(t.us.points,!0),n[i]=r,t.onSelectedPointForRole(i,r,n)}}(this))},t.prototype.renderPointsSelector=function(t,e){var r,n,i,o,s;if(o=_.map(this.points,function(e){return function(r){return r=_.clone(r,!0),r.selected=e.us.points[t]!==r.id,r}}(this)),i=5,r=_.some(o,function(t){return function(t){return t.name.length>i}}(this)),n=u({points:o,roleId:t,horizontal:r}),this.$el.find(".popover").popover().close(),this.$el.find(".pop-points-open").remove(),null!=e?this.$el.find(e).append(n):this.$el.append(n),this.$el.find(".pop-points-open").popover().open(function(){return $(this).removeClass("active").closest("li").removeClass("active")}),this.$el.find(".pop-points-open").show(),s=this.$el.find(".pop-points-open"),s.offset().top+s.height()>document.body.clientHeight)return s.addClass("pop-bottom")},t}(),c=function(t,e,r){var n;return t.unbind("click"),n=new a(t,e,r),n.isEditable&&n.bindClickEvents(),n},{create:c}},i.factory("$tgEstimationsService",["$tgTemplate","$tgRepo","$tgConfirm","$q","$tgQqueue",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h;l=this.taiga,s=angular.module("taigaCommon"),r=function(){return function(t,e){return t===[null,void 0]?e:t}},s.filter("default",r),h=function(t){return function(e){return e?t.instant("COMMON.YES"):t.instant("COMMON.NO")}},s.filter("yesNo",["$translate",h]),f=function(){return l.unslugify},s.filter("unslugify",f),a=function(){return function(t,e){return t?moment(t).format(e):""}},s.filter("momentFormat",a),c=function(){return function(t,e){return t?moment(t).fromNow(e||!1):""}},s.filter("momentFromNow",c),u=function(t){return function(){return t.taiga.sizeFormat}}(this),s.filter("sizeFormat",u),d=function(){var t,e;return e=function(t){return t.toJS()},t=_.memoize(e),function(e){return e instanceof Immutable.List?t(e):e}},s.filter("toMutable",d),t=function(t){return function(e,r){var n;return(null!=r?r.startsWith("#"):void 0)?(n=r.substr(1),_.filter(e,function(t){return function(t){return String(t.ref).startsWith(n)}}(this))):t(e,r)}},s.filter("byRef",["filterFilter",t]),e=function(){return function(t,e){var r,n,i,o,s,a,c,u;for(t=new String(t).replace(/[^0-9a-f]/gi,""),t.length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),e=e||0,a="#",n=0,i=0,r=0,u=255,c=[0,1,2],o=0,s=c.length;o/g,""):""}},s.filter("textToHTML",["$filter",p])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k=function(t,e){function r(){this.constructor=t}for(var n in e)I.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},I={}.hasOwnProperty,T=[].indexOf||function(t){for(var e=0,r=this.length;e5},c=f(r),c=n(c)(s),a.find(".assigned-to-list").html(c)},u=function(){return e.stop(),t.close(a)},s.$on("assigned-to:add",function(r,n){var i;return p=n,i=n.assigned_to,d=s.usersById[i],l(d),t.open(a).then(function(){return a.find("input").focus(),e.init(a)})}),s.$watch("usersSearch",function(t){if(null!=t)return l(d,t),a.find("input").focus()}),a.on("click",".user-list-single",function(t){var e;return t.preventDefault(),e=angular.element(t.currentTarget),u(),s.$apply(function(){return s.$broadcast("assigned-to:added",e.data("user-id"),p),s.usersSearch=null})}),a.on("click",".remove-assigned-to",function(t){return t.preventDefault(),t.stopPropagation(),u(),s.$apply(function(){return s.usersSearch=null,s.$broadcast("assigned-to:added",null,p)})}),a.on("click",".close",function(t){return t.preventDefault(),u(),s.$apply(function(){return s.usersSearch=null})}),s.$on("$destroy",function(){return a.off()})},{templateUrl:"common/lightbox/lightbox-assigned-to.html",link:s}},v.directive("tgLbAssignedto",["lightboxService","lightboxKeyboardNavigationService","$tgTemplate","$compile","tgAvatarService","tgUserListService",t]),e=function(t,e,r,n,i,o,s){var a;return a=function(t,a,c){var u,l,p,d,f;return d=[],p=null,f=n.get("common/lightbox/lightbox-assigned-users-users.html",!0),l=function(e,r){var n,c,u,l,p;return l=s.searchUsers(r),u=[],_.map(l,function(t){var r;if(r=t.id,T.call(e,r)>=0)return t.avatar=o.getAvatar(t),u.push(t)}),p=[],_.map(l,function(t){var r;if(r=t.id,T.call(e,r)<0)return t.avatar=o.getAvatar(t),p.push(t)}),n={selected:u,users:_.slice(p,0,5),showMore:l.length>5},c=f(n),c=i(c)(t),a.find(".assigned-to-list").html(c)},u=function(){return r.stop(),e.close(a)},t.$on("assigned-user:add",function(t,n){return p=n,d=n.assigned_users,l(d),e.open(a).then(function(){return a.find("input").focus(),r.init(a)})}),t.$watch("usersSearch",function(t){if(null!=t)return l(d,t),a.find("input").focus()}),a.on("click",".user-list-single",h(200,function(e){var r;return u(),e.preventDefault(),r=angular.element(e.currentTarget),t.$apply(function(){return t.usersSearch=null,t.$broadcast("assigned-user:added",r.data("user-id"),p)})})),a.on("click",".remove-assigned-to",function(e){var r;return e.preventDefault(),r=angular.element(e.currentTarget),e.stopPropagation(),t.$apply(function(){return t.usersSearch=null,t.$broadcast("assigned-user:deleted",r.data("user-id"),p)}),u()}),a.on("click",".close",function(t){return t.preventDefault(),u()}),t.$on("$destroy",function(){return a.off()})},{templateUrl:"common/lightbox/lightbox-assigned-users.html",link:a}},v.directive("tgLbAssignedUsers",["$tgRepo","lightboxService","lightboxKeyboardNavigationService","$tgTemplate","$compile","tgAvatarService","tgUserListService",e]),d=function(t,e,r,n,i,o){ -var s;return s=function(t,s,a){var c,u,l,p,d;return p=null,d=n.get("common/lightbox/lightbox-assigned-to-users.html",!0),u=function(e){var r,n;return null==e&&(e=""),r=function(t,e){var r;return(!p||!_.find(p.watchers,function(t){return t===e.id}))&&(r=e.full_name_display.toUpperCase(),t=t.toUpperCase(),_.includes(r,t))},n=_.clone(t.activeUsers,!0),n=_.filter(n,_.partial(r,e))},l=function(e){var r,n,a;return a=_.slice(e,0,5),a=_.map(a,function(t){return t.avatar=o.getAvatar(t),t}),r={selected:!1,users:a,showMore:e.length>5},n=d(r),n=i(n)(t),s.find(".ticket-watchers").html(n)},c=function(){return r.stop(),e.close(s)},t.$on("watcher:add",function(t,n){var i;return p=n,i=u(),l(i),e.open(s).then(function(){return s.find("input").focus(),r.init(s)})}),t.$watch("usersSearch",function(t){var e;if(null!=t)return e=u(t),l(e),s.find("input").focus()}),s.on("click",".user-list-single",h(200,function(e){var r;return c(),e.preventDefault(),r=angular.element(e.currentTarget),t.$apply(function(){return t.usersSearch=null,t.$broadcast("watcher:added",r.data("user-id"))})})),s.on("click",".close",function(e){return e.preventDefault(),c(),t.$apply(function(){return t.usersSearch=null})}),t.$on("$destroy",function(){return s.off()})},{templateUrl:"common/lightbox/lightbox-users.html",link:s}},v.directive("tgLbWatchers",["$tgRepo","lightboxService","lightboxKeyboardNavigationService","$tgTemplate","$compile","tgAvatarService",d]),c=function(t,e,r){var n;return n=function(e,r,n){return t.open(r)},{templateUrl:"common/lightbox/lightbox-leave-project-warning.html",link:n,scope:!0}},v.directive("tgLightboxLeaveProjectWarning",["lightboxService",c]),p=function(t,e,r,n,i,o){var s;return s=function(s,a,c){var u,l,p;return u=n.instant("COMMON.PICKERDATE.FORMAT"),e.open(a),s.object.due_date&&(s.new_due_date=moment(s.object.due_date).format(u)),a.on("click",".suggestion",function(t){var e,r,n,i;return r=angular.element(t.currentTarget),e=r.data("quantity"),n=r.data("unit"),i=moment().add(e,n).format(u),a.find(".due-date").val(i)}),p=function(){var n,c,l;return n=r().target(a.find(".submit-button")).start(),s.notAutoSave?(c=$(".due-date").val(),s.object.due_date=c?moment(c,u).format("YYYY-MM-DD"):null,s.$apply(),n.finish(),void e.close(a)):(l=o.save(function(t){return c=$(".due-date").val(),t.due_date=c?moment(c,u).format("YYYY-MM-DD"):null,t}),l.then(function(){return i.notify("success")}),l.then(null,function(){return i.notify("error")}),l["finally"](function(){return n.finish(),e.close(a),t.$broadcast("object:updated")}))},a.on("click",".submit-button",function(t){return t.preventDefault(),p()}),l=function(){var t,r,o;return o=n.instant("LIGHTBOX.DELETE_DUE_DATE.TITLE"),r=n.instant("LIGHTBOX.DELETE_DUE_DATE.SUBTITLE"),t=moment(s.object.due_date).format(u),i.askOnDelete(o,t,r).then(function(t){return t.finish(),$(".due-date").val(null),s.object.due_date_reason=null,s.notAutoSave?(s.object.due_date=null,e.close(a)):p()})},a.on("click",".delete-due-date",function(t){return t.preventDefault(),l()})},{templateUrl:"common/lightbox/lightbox-due-date.html",link:s,scope:!0}},v.directive("tgLbSetDueDate",["$rootScope","lightboxService","$tgLoading","$translate","$tgConfirm","$tgQueueModelTransformation",p]),m=this.taiga.groupBy,o=function(t,e,r,n,i,o,s,a,c,u,l,p,d){var f;return f=function(f,g,v){var y,b,S,k,$,I,E,C,P,w,A,O,R,M,U,N,D,x,L,F,B;return D=null,R=null,P=null,b=Immutable.List(),S=Immutable.List(),x={us:{objName:"User Story",model:"userstories",params:{include_attachments:!0,include_tasks:!0},data:function(t){return{translationID:"US",translationIDPlural:"US",statusList:_.sortBy(t.us_statuses,"order")}},initialData:function(t){return{project:t.project.id,subject:"",description:"",tags:[],points:{},status:t.statusId?t.statusId:t.project.default_us_status,is_archived:!1}}},task:{objName:"Task",model:"tasks",params:{include_attachments:!0},data:function(t){return{translationID:"TASK",translationIDPlural:"TASKS",statusList:_.sortBy(t.task_statuses,"order")}},initialData:function(t){return{project:t.project.id,subject:"",description:"",assigned_to:null,tags:[],milestone:t.sprintId,status:t.project.default_task_status,user_story:t.usId,is_archived:!1}}},issue:{objName:"Issue",model:"issues",params:{include_attachments:!0},data:function(t){return{translationID:"ISSUE",translationIDPlural:"ISSUES",project:t,statusList:_.sortBy(t.issue_statuses,"order"),typeById:m(t.issue_types,function(t){return t.id}),typeList:_.sortBy(t.issue_types,"order"),severityById:m(t.severities,function(t){return t.id}),severityList:_.sortBy(t.severities,"order"),priorityById:m(t.priorities,function(t){return t.id}),priorityList:_.sortBy(t.priorities,"order"),milestonesById:m(t.milestones,function(t){return t.id})}},initialData:function(t){return{assigned_to:null,milestone:t.sprintId,priority:t.project.default_priority,project:t.project.id,severity:t.project.default_severity,status:t.project.default_issue_status,subject:"",tags:[],type:t.project.default_issue_type}}}},f.setMode=function(t){return f.mode=t},f.$on("genericform:new",function(t,e){return w(e),f.mode="new",f.getOrCreate=!1,O(e)}),f.$on("genericform:new-or-existing",function(t,e){return w(e),f.mode="add-existing",f.getOrCreate=!0,f.existingFilterText="",n[D.model].listInAllProjects({project:f.project.id},!0).then(function(t){return f.existingItems=angular.copy(t)}),O(e)}),f.$on("genericform:edit",function(t,e){return w(e),f.mode="edit",f.getOrCreate=!1,O(e)}),w=function(e){return _.map(e,function(t,e){return f[e]=t}),f.objType&&x[f.objType]?D=x[f.objType]:t.error("Invalid objType `"+f.objType+"` for `genericform` event")},O=function(t){return f.objName=D.objName,"edit"===f.mode?(f.obj=t.obj,f.attachments=Immutable.fromJS(t.attachments)):(f.obj=r.make_model(D.model,D.initialData(t)),f.attachments=Immutable.List()),_.map(D.data(f.project),function(t,e){return f[e]=t}),P&&P.reset(),U(),L(f.obj.status),M(),f.lightboxOpen=!0,o.open(g,null,null,!0)},U=function(){return b=Immutable.List(),S=Immutable.List()},f.addAttachment=function(t){return b=b.push(t)},f.deleteAttachment=function(t){if(b=b.filter(function(e){return e.get("name")!==t.get("name")}),t.get("id"))return S=S.push(t)},f.addTag=function(t,e){var r,n,i,o,s;if(s=j(t.toLowerCase()),o=f.project.tags,i=f.project.tags_colors,null==o&&(o=[]),null==i&&(i={}),T.call(o,s)<0&&o.push(s),i[t]=e||null,f.project.tags=o,n=_.clone(f.obj.tags),r=_.find(n,function(t){return t[0]===s}),!r)return n.push([s,e]),f.obj.tags=n},f.deleteTag=function(t){var e,r,n;return n=j(t[0].toLowerCase()),r=f.project.tags,e=_.clone(f.obj.tags),_.remove(e,function(t){return t[0]===n}),f.obj.tags=e,_.pull(f.obj.tags,n)},I=function(t){var e;return e=_.map(b.toJS(),function(e){return l.upload(e.file,t.id,f.obj.project,f.objType)}),u.all(e)},E=function(t){var e;return e=_.map(S.toJS(),function(t){return l["delete"](f.objType,t.id)}),u.all(e)},y=function(t){var e,r,n;return e=s().target(g.find(".add-existing-button")).start(),t.milestone?F(t):(n=function(){return $(),i.$broadcast(f.objType+"form:add:success",t)},r=function(){return $()},N(t,n,r))},F=function(t){var e,r,n,s;return n=f.milestonesById[t.milestone].name,r=f.milestonesById[f.relatedObjectId].name,s=a.instant("ISSUES.CONFIRM_CHANGE_FROM_SPRINT.TITLE"),e=a.instant("ISSUES.CONFIRM_CHANGE_FROM_SPRINT.MESSAGE",{issue:t.subject,oldSprintName:n,newSprintName:r}),c.ask(s,null,e).then(function(e){var r,n;return n=function(){return e.finish(),o.closeAll(),f.lightboxOpen=!1,i.$broadcast(f.objType+"form:add:success",t)},r=function(){return e.finish(!1),c.notify("error")},N(t,n,r)})},N=function(t,r,n){return t.setAttr(f.relatedField,f.relatedObjectId),e.save(t,!0).then(r,n)},A=function(t){return t&&t[f.relatedField]===f.relatedObjectId},f.isDisabledExisting=function(t){return A(t)},f.addExistingToSprint=function(t){return y(t)},B=h(2e3,function(t){var r,o,u,l;if(P=g.find("form").checksley(),P.validate())return o=s().target(g.find(".submit-button")).start(),"new"===f.mode?(l=e.create(D.model,f.obj),r=f.objType+"form:new:success"):(f.obj.due_date instanceof moment&&(u=a.instant("COMMON.PICKERDATE.FORMAT"),f.obj.due_date=f.obj.due_date.format("YYYY-MM-DD")),l=e.save(f.obj,!0),r=f.objType+"form:edit:success"),l.then(function(t){return E(t).then(function(){return I(t).then(function(){if(o.finish(),$(),t.ref)return n[D.model].getByRef(t.project,t.ref,D.params).then(function(t){return i.$broadcast(r,t)})})})}),l.then(null,function(t){if(o.finish(),P.setErrors(t),t._error_message)return c.notify("error",t._error_message)})}),k=function(){return f.obj.isModified()?c.ask(a.instant("LIGHTBOX.CREATE_EDIT.CONFIRM_CLOSE")).then(function(t){return t.finish(),$()}):($(),f.$apply(function(){return f.obj.revert()}))},$=function(){return o.closeAll(),f.lightboxOpen=!1},C=angular.element(document),C.on("keydown.lightbox-create-edit",function(t){var e;if(f.lightboxOpen&&(t.stopPropagation(),e=t.keyCode?t.keyCode:t.which,27===e))return k()}),g.on("submit","form",B),g.find(".close").on("click",function(t){return t.preventDefault(),t.stopPropagation(),k()}),g.on("click",".status-dropdown",function(t){return t.preventDefault(),t.stopPropagation(),g.find(".pop-status").popover().open()}),g.on("click",".status",function(t){return t.preventDefault(),t.stopPropagation(),L(angular.element(t.currentTarget).data("status-id")),f.$apply(),f.$broadcast("status:changed",f.obj.status),g.find(".pop-status").popover().close()}),g.on("click",".team-requirement",function(t){return f.obj.team_requirement=!f.obj.team_requirement,f.$apply()}),g.on("click",".client-requirement",function(t){return f.obj.client_requirement=!f.obj.client_requirement,f.$apply()}),g.on("click",".is-blocked",function(t){return f.obj.is_blocked=!f.obj.is_blocked,f.$apply()}),g.on("click",".iocaine",function(t){return f.obj.is_iocaine=!f.obj.is_iocaine,f.$broadcast("isiocaine:changed",f.obj)}),f.isTeamRequirement=function(){var t;return null!=(t=f.obj)?t.team_requirement:void 0},f.isClientRequirement=function(){var t;return null!=(t=f.obj)?t.client_requirement:void 0},L=function(t){return f.obj.status=t,f.selectedStatus=_.find(f.statusList,function(e){return e.id===t}),f.obj.is_closed=f.selectedStatus.is_closed},M=function(t){var e,r,n;return r=p.get("common/lightbox/lightbox-create-edit/lb-create-edit.html"),n=f.$new(),e=d(r)(n),g.html(e)}},{link:f}},v.directive("tgLbCreateEdit",["$log","$tgRepo","$tgModel","$tgResources","$rootScope","lightboxService","$tgLoading","$translate","$tgConfirm","$q","tgAttachmentsService","$tgTemplate","$compile",o]),g=this.taiga.debounceLeading,l=function(t,e,r,n,i,o,s,a){var c;return c=function(o,c,u){var l,p,d,f,h,m;return m=null,o.projects=null,o.projectEpics=Immutable.List(),o.loading=!1,o.selectedProject=o.project.id,f=c.find(".new-epic-form").checksley(),l=c.find(".existing-epic-form").checksley(),d=function(){if(null===o.projects)return o.projects=n.projects.get("unblocked")},p=function(t,e){return i.epics.listInAllProjects({is_epics_activated:!0,project__blocked_code:"null",project:t,q:e},!0).then(function(t){var e,r;return e=[],m.epics&&(e=m.epics.map(function(t){return t.id})),r=t.filter(function(t){return e.indexOf(t.get("id"))===-1}),o.projectEpics=r})},h=function(t){return o.selectedEpic=null,o.searchEpic="",p(t,o.searchEpic)},c.on("click",".close",function(t){return t.preventDefault(),r.close(c)}),o.$on("relate-to-epic:add",function(t,e){return m=e,o.selectedEpic=null,o.searchEpic="",d(),p(o.selectedProject,o.searchEpic).then(function(){return r.open(c).then(function(){return c.find("input").focus})})}),o.$on("$destroy",function(){return c.off()}),o.selectProject=function(t){return h(t)},o.onUpdateSearchEpic=g(300,function(){return o.selectedEpic=null,p(o.selectedProject,o.searchEpic)}),o.saveRelatedEpic=function(n,s){var u,p,d;if(l.validate())return o.loading=!0,u=function(t){return o.loading=!1,e.notify("error"),l.setErrors(t)},p=function(e){return a.trackEvent("user story related epic","create","create related epic on user story",1),o.loading=!1,t.$broadcast("related-epics:changed",m),r.close(c)},d=m.id,i.epics.addRelatedUserstory(n,d).then(p,u)},o.createEpic=function(n,u){var l,p,d;if(f.validate())return this.loading=!0,p=function(t){return o.loading=!1,e.notify("error"),f.setErrors(errors)},d=function(){return a.trackEvent("user story related epic","create","create related epic on user story",1),o.loading=!1,t.$broadcast("related-epics:changed",m),r.close(c)},l=function(t){var e,r;return e=t.get("id"),r=m.id,i.epics.addRelatedUserstory(e,r).then(d,p)},s.createEpic({subject:u},null,n).then(l,p)}},{templateUrl:"common/lightbox/lightbox-relate-to-epic.html",link:c}},v.directive("tgLbRelatetoepic",["$rootScope","$tgConfirm","lightboxService","tgCurrentUserService","tgResources","$tgResources","tgEpicsService","$tgAnalytics",l])}.call(this),function(){var t,e,r,n,i,o;i=this.taiga,n=this.taiga.sizeFormat,o=this.taiga.timeout,r=angular.module("taigaCommon"),e=function(t,e){var r;return r=function(e,r,n){return t.onStart(function(){return $(document.body).addClass("loader-active"),r.addClass("active")}),t.onEnd(function(){return $(document.body).removeClass("loader-active"),r.removeClass("active")})},{link:r}},r.directive("tgLoader",["tgLoader","$rootScope",e]),t=function(t){var e,r,n,i,s,a,c,u;return r={minTime:300},i=!1,u=0,a=0,n=0,s=function(e){var s,c,l;return null==e&&(e=!1),u&&(l=0,e||(c=(new Date).getTime(),s=c-u,s",function(){var r;return r={settings:{target:null,scope:null,classes:[],timeout:0,template:null},target:function(t){return r.settings.target=t,r},scope:function(t){return r.settings.scope=t,r},template:function(t){return r.settings.template=t,r},removeClasses:function(){var t;return t=1<=arguments.length?n.call(arguments,0):[],r.settings.classes=t,r},timeout:function(t){return r.settings.timeout=t,r},start:function(){var t,n;return t=r.settings.target,r.settings.classes.map(function(e){return t.removeClass(e)}),t.hasClass("loading")||r.settings.template||(r.settings.template=t.html()),n=setTimeout(function(){if(!t.hasClass("loading"))return t.addClass("loading"),t.html(e)},r.settings.timeout),r.settings.timeoutId=n,r},finish:function(){var e,n,i;return n=r.settings.target,i=r.settings.timeoutId,i&&(clearTimeout(i),e=r.settings.classes,e.map(function(t){return r.settings.target.addClass(t)}),n.html(r.settings.template),n.removeClass("loading"),r.settings.scope&&t(n.contents())(r.settings.scope)),r}}}},e.$inject=["$compile"],r.factory("$tgLoading",e),t=function(t){var e;return e=function(e,r,n){var i,o;return i=null,o=r.html(),e.$watch(n.tgLoading,function(n){return function(n){return n?i=t().target(r).timeout(100).template(o).scope(e).start():i?i.finish():void 0}}(this))},{priority:99999,link:e}},r.directive("tgLoading",["$tgLoading",t])}.call(this),function(){var t,e,r,n,i,o;o=this.taiga,r=this.taiga.bindOnce,n=this.taiga.debounce,i=angular.module("taigaCommon"),e=function(t,e){var i,o;return o=e.get("common/popover/popover-us-status.html",!0),i=function(e,i,s){var a,c,u;return a=i.controller(),c=function(t){var r,n,o;if(o=i.find(".us-status"),n=i.find(".us-status .us-status-bind"),r=e.usStatusById,r[t.status])return n.text(r[t.status].name),o.css("color",r[t.status].color)},i.on("click",".us-status",function(t){return t.preventDefault(),t.stopPropagation(),i.find(".pop-status").popover().open()}),i.on("click",".status",n(2e3,function(r){var n,o;return r.preventDefault(),r.stopPropagation(),n=angular.element(r.currentTarget),o=e.$eval(s.tgUsStatus),o.status=n.data("status-id"),c(o),i.find(".pop-status").popover().close(),e.$apply(function(){return t.save(o).then(function(){return e.$eval(s.onUpdate)})})})),e.$on("userstories:loaded",function(){return c(e.$eval(s.tgUsStatus))}),e.$on("$destroy",function(){return i.off()}),u=e.$eval(s.tgUsStatus),c(u),r(e,"project",function(t){var r;if(r=o({statuses:t.us_statuses}),i.append(r),e.project.my_permissions.indexOf("modify_us")===-1)return i.unbind("click"),i.find("a").addClass("not-clickable")})},{link:i}},i.directive("tgUsStatus",["$tgRepo","$tgTemplate",e]),t=function(t,e){var r,i,s;return i=e.get("common/popover/popover-related-task-status.html",!0),s=function(t,e,r){var n,i;if(i=t.find(".us-status"),n=t.find(".task-status .task-status-bind"),r[e.status])return n.text(r[e.status].name),i.css("color",r[e.status].color)},r=function(e,r,a){var c,u,l,p;return c=r.controller(),p=e.$eval(a.tgRelatedTaskStatus),l=e.$eval(a.notAutoSave),u=!l,r.on("click",".task-status",function(t){return t.preventDefault(),t.stopPropagation(),r.find(".pop-status").popover().open()}),r.on("click",".status",n(2e3,function(n){var i;if(n.preventDefault(),n.stopPropagation(),i=angular.element(n.currentTarget),p.status=i.data("status-id"),r.find(".pop-status").popover().close(),s(r,p,e.taskStatusById),u)return e.$apply(function(){return t.save(p).then(function(){return e.$eval(a.onUpdate),e.$emit("related-tasks:status-changed")})})})),e.$watch(a.tgRelatedTaskStatus,function(){return p=e.$eval(a.tgRelatedTaskStatus),s(r,p,e.taskStatusById)}),o.bindOnce(e,"project",function(t){if(r.append(i({statuses:t.task_statuses})),s(r,p,e.taskStatusById),t.my_permissions.indexOf("modify_task")===-1)return r.unbind("click"),r.find("a").addClass("not-clickable")}),e.$on("$destroy",function(){return r.off()})},{link:r}},i.directive("tgRelatedTaskStatus",["$tgRepo","$tgTemplate",t]),$.fn.popover=function(){var t,e,r,n,i,o;return t=this,i=function(e){return function(){var e,r,n,i,o,s,a,c,u,l;return t.css({display:"block",visibility:"hidden"}),i=$(window).scrollTop(),e=i+$(window).height(),o=$(window).width(),n=o,r=0,u=t.offset().top,s=u+t.height(),l=t.width(),a=t.offset().left,c=t.offset().left+l,t.css({display:"none",visibility:"visible"}),s<=e&&u>=i&&a>=r&&c<=n}}(this),n=function(e){return function(e){return e&&e.call(t),t.fadeOut(function(){return t.removeClass("active").removeClass("fix")}),t.off("popup:close")}}(this),r=function(t){return function(){return $(".popover.active").each(function(){return $(this).trigger("popup:close")})}}(this),o=function(o){return function(o){return t.hasClass("active")?e():(r(),i()||t.addClass("fix"),t.fadeIn(function(){return t.addClass("active"),$(document.body).off("popover"),$(document.body).one("click.popover",function(){return r()})}),t.on("popup:close",function(t){return n(o)}))}}(this),e=function(e){return function(){return t.trigger("popup:close")}}(this),{open:o,close:e,closeAll:r}}}.call(this),function(){var t,e,r;r=this.taiga,e=angular.module("taigaCommon"),t=function(t,e){var r;return this.config=e,r=this.config.get("ravenConfig",null),r?(t.debug("Using the RavenJS exception handler."),Raven.config(r).install(),function(e,r){return t.error.apply(t,arguments),Raven.captureException(e)}):(t.debug("Using the default logging exception handler."),function(e,r){return t.error.apply(t,arguments)})},e.factory("$exceptionHandler",["$log","$tgConfig",t])}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=angular.module("taigaCommon"),t=function(t){function e(t,r){this.translate=t,this.currentUserService=r,e.__super__.constructor.call(this),_.map(n,function(t){return function(e){return e.title=t.translate.instant("PROJECT.SECTION."+e.title)}}(this))}var n;return r(e,t),e.$inject=["$translate","tgCurrentUserService"],n={1:{id:1,title:"TIMELINE",path:"timeline",enabled:""},2:{id:2,title:"EPICS",path:"epics",enabled:"is_epics_activated"},3:{id:3,title:"BACKLOG",path:"backlog",enabled:"is_backlog_activated"},4:{id:4,title:"KANBAN",path:"kanban",enabled:"is_kanban_activated"},5:{id:5,title:"ISSUES",path:"issues",enabled:"is_issues_activated"},6:{id:6,title:"WIKI",path:"wiki",enabled:"is_wiki_activated"}},e.prototype.list=function(){return n},e.prototype.getPath=function(t,e){var r,i,o,s,a;return r="timeline",(o=null!=(s=this.currentUserService.projects)?s.get("all"):void 0)&&(i=o.find(function(e){return e.get("slug")===t}))?(e||(e=i.get("my_homepage")),a=_.find(n,{id:e}),a&&(null!=i?i.get(a.enabled):void 0)!==!1?a.path:r):r},e}(taiga.Service),e.service("$tgSections",t)}.call(this),function(){var e,r,n,i,o,s,a,c=[].indexOf||function(t){for(var e=0,r=this.length;e\n <% if (tag[1] !== null) { %>\n \n <%= emojify(tag[0]) %>\n \n <% } %>\n<% }) %>\n<% _.each(tags, function(tag) { %>\n <% if (tag[1] === null) { %>\n \n <%= emojify(tag[0]) %>\n \n <% } %>\n<% }) %>'),e=function(e,n,i,o){var s;return s=function(e){var i;return i=r({tags:e,emojify:function(e){return t.replaceEmojiNameByHtmlImgs(_.escape(e))}}),n.html(i)},e.$watch(i.tgColorizeBacklogTags,function(t){if(null!=t)return s(t)}),e.$on("$destroy",function(){return n.off()})},{link:e}},o.directive("tgColorizeBacklogTags",["$tgEmojis",e]),r=function(e,r,n){var o,s,u,l,p;return s=13,o=188,p=r.get("common/tag/lb-tag-line-tags.html",!0),u=null,l=function(e,r,o,l){var d,f,h,g,m,v,y,b;return b=_.has(o,"withoutColors"),g=function(i,o){var s,a,c;return null==o&&(o=[]),s=b?null:o[t],a={tags:_.map(i,function(t){return{name:t,style:s?"border-left: 5px solid "+s:""}})},c=n(p(a))(e),r.find(".tags-container").html(c)},y=function(){return r.find(".save").removeClass("hidden")},h=function(){return r.find(".save").addClass("hidden")},m=function(){return r.find("input").val(""),u.close()},d=function(t){var r;if(t=a(t.toLowerCase()),0!==t.length)return r=_.clone(l.$modelValue,!1),null==r&&(r=[]),c.call(r,t)<0&&r.push(t),e.$apply(function(){return l.$setViewValue(r)}),h()},f=function(t){var r;if(t=a(t.toLowerCase()),0!==t.length)return r=_.clone(l.$modelValue,!1),r=_.pull(r,t),e.$apply(function(){return l.$setViewValue(r)})},v=function(){var t;return t=r.find("input").val(),d(t),m()},r.on("keypress","input",function(t){var e;return e=angular.element(t.currentTarget),t.keyCode===s?(t.preventDefault(),v()):","===String.fromCharCode(t.keyCode)?(t.preventDefault(),v()):e.val().length?y():h()}),r.on("click",".save",function(t){return t.preventDefault(),v()}),r.on("click",".remove-tag",function(t){var e,r;return t.preventDefault(),e=angular.element(t.currentTarget),r=e.siblings(".tag-name").text(),f(r)}),i(e,"project",function(t){var e;return e=r.find("input"),u=new Awesomplete(e[0],{list:_.keys(t.tags_colors)}),e.on("awesomplete-selectcomplete",function(){return d(e.val()),e.val("")})}),e.$watch(o.ngModel,function(t){var r,n;return n=(null!=(r=e.project)?r.tags_colors:void 0)||[],g(t,n)}),e.$on("$destroy",function(){return r.off()})},{link:l,require:"ngModel",templateUrl:"common/tag/lb-tag-line.html"}},o.directive("tgLbTagLine",["$tgResources","$tgTemplate","$compile",r])}.call(this),function(){var t,e,r,n,i;i=this.taiga,e=this.taiga.bindOnce,r=this.taiga.debounce,n=angular.module("taigaBacklog"),t=function(t,e,n,i,o,s,a){var c;return c=function(n,c,u){var l,p,d,f,h,g,m,v;return f=!1,l=!0,p=null,n.newSprint={},v=null,g=function(){return p&&p.reset(),n.newSprint={project:null,name:null,estimated_start:null,estimated_finish:null}},m=r(2e3,function(r){return function(r){var u,d,h,g,m,y,b,S,j;return r.preventDefault(),j=angular.element(r.currentTarget),y=a.instant("COMMON.PICKERDATE.FORMAT"),S=c.find(".submit-button"),p=c.find("form").checksley(),p.validate()?(f=!1,u=null,g=$(".date-start").val(),h=$(".date-end").val(),l?(m=angular.copy(n.newSprint),m.estimated_start=moment(g,y).format("YYYY-MM-DD"),m.estimated_finish=moment(h,y).format("YYYY-MM-DD"),b=t.create("milestones",m),u="sprintform:create:success"):(m=n.newSprint.realClone(),m.estimated_start=moment(g,y).format("YYYY-MM-DD"),m.estimated_finish=moment(h,y).format("YYYY-MM-DD"),b=t.save(m),u="sprintform:edit:success"),d=s().target(S).start(),b.then(function(t){return d.finish(),l&&(n.sprintsCounter+=1),n.sprints=_.map(n.sprints,function(e){return e.id===t.id?t:e}),"sprintform:create:success"===u&&v?i.$broadcast(u,t,v):i.$broadcast(u,t),o.close(c)}),b.then(null,function(t){return d.finish(),p.setErrors(t),t._error_message?e.notify("light-error",t._error_message):t.__all__?e.notify("light-error",t.__all__[0]):void 0})):(f=!0,void c.find(".last-sprint-name").addClass("disappear"))}}(this)),h=function(){var r,s;return s=a.instant("LIGHTBOX.DELETE_SPRINT.TITLE"),r=n.newSprint.name,e.askOnDelete(s,r).then(function(r){return function(r){var s,a;return a=function(){return r.finish(),n.milestonesCounter-=1,o.close(c),i.$broadcast("sprintform:remove:success",n.newSprint)},s=function(){return r.finish(!1),e.notify("error")},t.remove(n.newSprint).then(a,s)}}(this))},d=function(){var t,e;return t=_.filter(n.sprints,function(t){return!t.closed}),e=_.sortBy(t,function(t){return moment(t.estimated_finish,"YYYY-MM-DD").format("X")}),e[e.length-1]},n.$on("sprintform:create",function(t,e,r){var i,s,u,f,h,m;return v=r,g(),p=c.find("form").checksley(),p.reset(),l=!0,h=a.instant("COMMON.PICKERDATE.FORMAT"),n.newSprint.project=e,n.newSprint.name=null,n.newSprint.slug=null,u=d(),s=moment(),u?s=moment(u.estimated_finish):n.newSprint.estimated_start&&(s=moment(n.newSprint.estimated_start)),n.newSprint.estimated_start=s.format(h),i=moment().add(2,"weeks"),u?i=moment(u.estimated_finish).add(2,"weeks"):n.newSprint.estimated_finish&&(i=moment(n.newSprint.estimated_finish)),n.newSprint.estimated_finish=i.format(h),f=c.find(".last-sprint-name"),null!=(null!=u?u.name:void 0)&&(m=a.instant("LIGHTBOX.ADD_EDIT_SPRINT.LAST_SPRINT_NAME",{lastSprint:u.name}),f.html(m)),c.find(".delete-sprint").addClass("hidden"),m=a.instant("LIGHTBOX.ADD_EDIT_SPRINT.TITLE"),c.find(".title").text(m),m=a.instant("COMMON.CREATE"),c.find(".button-green").text(m),o.open(c),c.find(".sprint-name").focus(),c.find(".last-sprint-name").removeClass("disappear")}),n.$on("sprintform:edit",function(t,e){var r,i,s;return g(),l=!1,i=a.instant("COMMON.PICKERDATE.FORMAT"),n.$apply(function(){return n.newSprint=e.realClone(),n.newSprint.estimated_start=moment(n.newSprint.estimated_start).format(i),n.newSprint.estimated_finish=moment(n.newSprint.estimated_finish).format(i)}),c.find(".delete-sprint").removeClass("hidden"),r=a.instant("BACKLOG.EDIT_SPRINT"),c.find(".title").text(r),s=a.instant("COMMON.SAVE"),c.find(".button-green").text(s),o.open(c),c.find(".sprint-name").focus().select(),c.find(".last-sprint-name").addClass("disappear")}),c.on("keyup",".sprint-name",function(t){return c.find(".sprint-name").val().length>0||f?c.find(".last-sprint-name").addClass("disappear"):c.find(".last-sprint-name").removeClass("disappear")}),c.on("submit","form",m),c.on("click",".delete-sprint",function(t){return t.preventDefault(),h()}),n.$on("$destroy",function(){return c.off()}),g()},{link:c}},n.directive("tgLbCreateEditSprint",["$tgRepo","$tgConfirm","$tgResources","$rootScope","lightboxService","$tgLoading","$translate",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v=function(t,e){function r(){this.constructor=t}for(var n in e)y.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},y={}.hasOwnProperty;h=this.taiga,p=this.taiga.mixOf,m=this.taiga.toggleText,f=this.taiga.scopeDefer,c=this.taiga.bindOnce,l=this.taiga.groupBy,g=this.taiga.timeout,a=this.taiga.bindMethods,u=this.taiga.generateHash,d=angular.module("taigaBacklog"),t=function(t){function e(t,e,r,n,i,o,s,c,u,l,p,d,f,h,g,m,v,y,_,b){var S;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=c,this.appMetaService=u,this.navUrls=l,this.events=p,this.analytics=d,this.translate=f,this.loading=h,this.rs2=g,this.modelTransform=m,this.errorHandlingService=v,this.storage=y,this.filterRemoteStorageService=_,this.projectService=b,a(this),this.backlogOrder={},this.milestonesOrder={},this.page=1,this.disablePagination=!1,this.firstLoadComplete=!1,this.scope.userstories=[],this.applyStoredFilters(this.params.pslug,"backlog-filters")||(this.scope.sectionName=this.translate.instant("BACKLOG.SECTION_NAME"),this.showTags=!1,this.activeFilters=!1,this.scope.showGraphPlaceholder=null,this.displayVelocity=!1,this.initializeEventHandlers(),S=this.loadInitialData(),S.then(function(t){return function(){var e,r;if(t.firstLoadComplete=!0,r=t.translate.instant("BACKLOG.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.translate.instant("BACKLOG.PAGE_DESCRIPTION",{projectName:t.scope.project.name,projectDescription:t.scope.project.description}),t.appMetaService.setAll(r,e),t.rs.userstories.getShowTags(t.scope.projectId))return t.showTags=!0,t.scope.$broadcast("showTags",t.showTags)}}(this)),S.then(null,this.onInitialDataError.bind(this)))}return v(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","tgAppMetaService","$tgNavUrls","$tgEvents","$tgAnalytics","$translate","$tgLoading","tgResources","$tgQueueModelTransformation","tgErrorHandlingService","$tgStorage","tgFilterRemoteStorageService","tgProjectService"],e.prototype.storeCustomFiltersName="backlog-custom-filters",e.prototype.storeFiltersName="backlog-filters",e.prototype.backlogOrder={},e.prototype.milestonesOrder={},e.prototype.filtersReloadContent=function(){return this.loadUserstories(!0)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("usform:bulk:success",function(t){return function(){return t.loadUserstories(!0),t.loadProjectStats(),t.confirm.notify("success"),t.analytics.trackEvent("userstory","create","bulk create userstory on backlog",1)}}(this)),this.scope.$on("sprintform:create:success",function(t){return function(e,r,n){return t.loadSprints().then(function(){return t.scope.$broadcast("sprintform:create:success:callback",n)}),t.loadProjectStats(),t.confirm.notify("success"),t.analytics.trackEvent("sprint","create","create sprint on backlog",1)}}(this)),this.scope.$on("usform:new:success",function(t){return function(){return t.loadUserstories(!0),t.loadProjectStats(),t.rootscope.$broadcast("filters:update"),t.confirm.notify("success"),t.analytics.trackEvent("userstory","create","create userstory on backlog",1)}}(this)),this.scope.$on("sprintform:edit:success",function(t){return function(){return t.loadProjectStats()}}(this)),this.scope.$on("sprintform:remove:success",function(t){return function(e,r){return t.loadSprints(),t.loadProjectStats(),t.loadUserstories(!0),r.closed&&t.loadClosedSprints(),t.rootscope.$broadcast("filters:update")}}(this)),this.scope.$on("usform:edit:success",function(t){ -return function(e,r){var n;return n=_.findIndex(t.scope.userstories,function(t){return t.id===r.id}),t.scope.userstories[n]=r,t.rootscope.$broadcast("filters:update")}}(this)),this.scope.$on("sprint:us:move",this.moveUs),this.scope.$on("sprint:us:moved",function(t){return function(){return t.loadSprints(),t.loadProjectStats()}}(this)),this.scope.$on("backlog:load-closed-sprints",this.loadClosedSprints),this.scope.$on("backlog:unload-closed-sprints",this.unloadClosedSprints)},e.prototype.initializeSubscription=function(){var t,e;return t="changes.project."+this.scope.projectId+".userstories",this.events.subscribe(this.scope,t,function(t){return function(e){return t.loadAllPaginatedUserstories(),t.loadSprints()}}(this)),e="changes.project."+this.scope.projectId+".milestones",this.events.subscribe(this.scope,e,function(t){return function(e){return t.loadSprints()}}(this))},e.prototype.toggleShowTags=function(){return this.scope.$apply(function(t){return function(){return t.showTags=!t.showTags,t.rs.userstories.storeShowTags(t.scope.projectId,t.showTags)}}(this))},e.prototype.toggleActiveFilters=function(){return this.activeFilters=!this.activeFilters},e.prototype.toggleVelocityForecasting=function(){return this.displayVelocity=!this.displayVelocity,this.displayVelocity?this.scope.visibleUserStories=_.map(this.forecastedStories,function(t){return t.ref}):this.scope.visibleUserStories=_.map(this.scope.userstories,function(t){return t.ref}),f(this.scope,function(t){return function(){return t.scope.$broadcast("userstories:loaded")}}(this))},e.prototype.loadProjectStats=function(){return this.rs.projects.stats(this.scope.projectId).then(function(t){return function(e){var r;return t.scope.stats=e,r=e.total_points?e.total_points:e.defined_points,r?t.scope.stats.completedPercentage=Math.round(100*e.closed_points/r):t.scope.stats.completedPercentage=0,t.scope.showGraphPlaceholder=!(null!=e.total_points&&null!=e.total_milestones),t.calculateForecasting(),e}}(this))},e.prototype.setMilestonesOrder=function(t){var e,r,n,i,o;for(i=[],r=0,n=t.length;r0&&t>s.speed));r++)o.push(void 0);return o},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_backlog_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.closedMilestones=!!t.total_closed_milestones,this.scope.$emit("project:loaded",t),this.scope.points=_.sortBy(t.points,"order"),this.scope.pointsById=l(t.points,function(t){return t.id}),this.scope.usStatusById=l(t.us_statuses,function(t){return t.id}),this.scope.usStatusList=_.sortBy(t.us_statuses,"id"),t},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.initializeSubscription(),this.loadBacklog().then(function(t){return function(){var e;return t.generateFilters(e="null")}}(this)).then(function(t){return function(){return t.scope.$emit("backlog:loaded")}}(this))},e.prototype.prepareBulkUpdateData=function(t,e){return null==e&&(e="backlog_order"),_.map(t,function(t){return{us_id:t.id,order:t[e]}})},e.prototype.moveUs=function(t,e,r,n){var i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k,$,I,T,E,C,P,w,A,O,R,M,U,N,D,x,L,F,B,H,q,G,V;if(E=e[0].milestone,M=e[0].project,E&&(q=this.scope.sprintsById[E]||this.scope.closedSprintsById[E]),n&&(I=this.scope.sprintsById[n]||this.scope.closedSprintsById[n]),s=n!==E?n:E,w=null,P="",n!==E)if(null===n){for(l=u=0,d=e.length;u1&&(H=_.map(R,function(t){return{us_id:t.id,order:w[t.id]}}))):G=0,k=[],l=j=0,h=e.length;j1&&n!==E)a=k.concat(H,F),U=this.rs.userstories.bulkUpdateMilestone(M,n,a);else if(e.length>1)a=k.concat(H,F),U=this.rs.userstories.bulkUpdateBacklogOrder(M,a);else{for(B={},N=0,y=H.length;N=n&&t<=r})},e}(p(h.Controller,h.PageMixin,h.FiltersMixin,h.UsFiltersMixin)),d.controller("BacklogController",t),e=function(t,e,r,n){var i,o,s,a,c,u,l,p;return i=_.template('
<%- text %>
'),s=function(t,e,n,o){var s,a,c,u;return c=function(){var r,n,i,o,a,c,l,p,d,f;if(t.displayVelocity&&u(),null!=t.stats&&null!=t.stats.total_points&&0!==t.stats.total_points&&null==t.displayVelocity){if(u(),p=t.stats,d=p.total_points,r=p.assigned_points,!t.userstories)return;for(c=t.userstories,l=[],i=o=0,a=c.length;od){n=e.find(".backlog-table-body .us-item-row")[i],s(n);break}l.push(void 0)}return l}},u=function(){return e.find(".doom-line").remove()},s=function(t){var e;return e=r.instant("BACKLOG.DOOMLINE"),$(t).before(i({text:e}))},a=function(){var t;return t=e.find(".backlog-table-body .us-item-row"),_.map(t,function(t){return angular.element(t)})},t.$on("userstories:loaded",c),t.$on("userstories:forecast",u),t.$watch("stats",c)},c=function(t,r,i,o){var s,a,c,u,l,d,f;return a=function(){var e;return e=r.find(".backlog-table-body input:checkbox:checked"),_.map(e,function(e){var r;return e=$(e).closest(".tg-scope"),r=e.scope(),r.us.milestone=t.sprints[0].id,r.us})},d=function(e,i){var s,a,c,u;return u=_(t.userstories),t.userstories=u.without.apply(u,e).value(),a=_.map(e,function(t,e){return t.total_points}),c=_.reduce(a,function(t,e){return t+e}),i.user_stories=_.union(i.user_stories,e),i.total_points+=c,s=_.map(e,function(t){return{us_id:t.id,order:t.sprint_order}}),n.userstories.bulkUpdateMilestone(t.project.id,t.sprints[0].id,s).then(function(t){return function(){return o.loadSprints(),o.loadProjectStats(),o.toggleVelocityForecasting(),o.calculateForecasting()}}(this)),r.find(".move-to-sprint").hide()},u=function(e){return d(e,t.currentSprint)},l=function(e){return d(e,t.sprints[0])},t.$on("sprintform:create:success:callback",function(t,e){return _.partial(u,e)()}),f=!1,c=null,s=function(e){var n,i;return c=e.closest(".us-item-row"),e.closest(".us-item-row").toggleClass("ui-multisortable-multiple"),n=r.find(".move-to-sprint"),i=r.find(".backlog-table-body input:checkbox:checked"),i.length>0&&t.sprints.length>0?n.show():n.hide()},$(window).on("keydown.shift-pressed keyup.shift-pressed",function(t){return f=!!t.shiftKey,!0}),r.on("change",".backlog-table-body input:checkbox",function(t){var e,r,n,i,o;return c&&f&&(r=[],e=$(t.currentTarget).closest(".us-item-row"),n=c.nextAll(),i=c.prevAll(),_.some(n,function(t){return t===e[0]})?r=c.nextUntil(e):_.some(i,function(t){return t===e[0]})&&(r=c.prevUntil(e)),_.map(r,function(t){var e;return e=$(t).find("input:checkbox"),e.prop("checked",!0),s(e)})),o=angular.element(t.currentTarget),o.closest(".us-item-row").toggleClass("is-checked"),s(o)}),r.on("click","#move-to-latest-sprint",function(e){return function(e){var r;return r=a(),t.$apply(_.partial(l,r))}}(this)),r.on("click","#move-to-current-sprint",function(e){return function(e){var r;return r=a(),t.$apply(_.partial(u,r))}}(this)),r.on("click","#show-tags",function(t){return t.preventDefault(),o.toggleShowTags(),p(o)}),r.on("click",".forecasting-add-sprint",function(r){var n,i;return i=o.forecastedStories,t.currentSprint?(n=_.map(i,function(e,r){return e.milestone=t.currentSprint.id,e.order=r,e}),t.$apply(_.partial(u,n))):(n=_.map(i,function(t,e){return t.order=e,t}),e.$broadcast("sprintform:create",t.projectId,n))})},p=function(t){var e,n;return e=angular.element("#show-tags"),t.showTags?(e.addClass("active"),n=r.instant("BACKLOG.TAGS.HIDE"),e.text(n)):(e.removeClass("active"),n=r.instant("BACKLOG.TAGS.SHOW"),e.text(n))},u=function(t,e,r){var n;return n=e.find("sidebar.backlog-filter"),n.addClass("active"),r.activeFilters=!0},l=function(t,n,i){var o,s,a,c;return a=n.find("sidebar.backlog-filter"),a.one("transitionend",function(){return g(150,function(){return e.$broadcast("resize"),$(".burndown").css("visibility","visible")})}),c=angular.element("#show-filters-button"),$(".burndown").css("visibility","hidden"),a.toggleClass("active"),c.toggleClass("active"),o=r.instant("BACKLOG.FILTERS.HIDE"),s=r.instant("BACKLOG.FILTERS.SHOW"),m(c,[o,s]),i.toggleActiveFilters()},a=function(t,e,r,n){return t.filtersSearch={},e.on("click","#show-filters-button",function(r){return r.preventDefault(),t.$apply(function(){return l(t,e,n)})})},o=function(t,e,r,n){var i,o;return i=e.controller(),c(t,e,r,i),a(t,e,r,i),s(t,e,r,i),o=i.location.search(),(o.status||o.tags||o.q||o.assigned_to||o.owner)&&u(t,e,i),t.$on("showTags",function(){return p(i)}),t.$on("$destroy",function(){return e.off(),$(window).off(".shift-pressed")})},{link:o}},d.directive("tgBacklog",["$tgRepo","$rootScope","$translate","$tgResources",e]),s=function(t,e,r,n){var i,o;return o=e.get("backlog/us-role-points-popover.html",!0),i=function(e,i,s){return c(e,"project",function(t){var n,s;return s=_.filter(t.roles,"computable"),n=_.size(s),n>1?i.append(r(o({roles:s}))(e)):(i.find(".icon-arrow-down").remove(),i.find(".header-points").addClass("not-clickable"))}),e.$on("uspoints:select",function(t,e,r){return i.find(".popover").popover().close(),i.find(".header-points").html(r+"/Total")}),e.$on("uspoints:clear-selection",function(t,e){var r;return i.find(".popover").popover().close(),r=n.instant("COMMON.FIELDS.POINTS"),i.find(".header-points").text(r)}),i.on("click",function(t){var e;return e=angular.element(t.target),(e.is("span")||e.is("div"))&&t.stopPropagation(),i.find(".popover").popover().open()}),i.on("click",".clear-selection",function(e){return e.preventDefault(),e.stopPropagation(),t.$broadcast("uspoints:clear-selection")}),i.on("click",".role",function(e){var r,n;return e.preventDefault(),e.stopPropagation(),n=angular.element(e.currentTarget),r=n.scope(),t.$broadcast("uspoints:select",n.data("role-id"),n.text())}),e.$on("$destroy",function(){return i.off()})},{link:i}},d.directive("tgUsRolePointsSelector",["$rootScope","$tgTemplate","$compile","$translate",s]),o=function(t,e,r){var n,i;return i=r.get("common/estimation/us-points-roles-popover.html",!0),n=function(e,n,o){var s,a,c,u,l,p,d;return s=n.controller(),d=null,p=null,u=null,c=null,e.$on("uspoints:select",function(t,r,n){var i;return i=e.$eval(o.tgBacklogUsPoints),p=r,c.render()}),e.$on("uspoints:clear-selection",function(t){var r;return r=e.$eval(o.tgBacklogUsPoints),p=null,c.render()}),e.$watch(o.tgBacklogUsPoints,function(i){var o;if(i)return c=t.create(n,i,e.project),o=c.calculateRoles(),0===o.length?(n.find(".icon-arrow-bottom").remove(),n.find("a.us-points").addClass("not-clickable")):1===o.length&&(p=_.keys(i.points)[0]),c.isEditable&&a(),c.onSelectedPointForRole=function(t,e,r){return i.points=r,c.render(),this.save(t,e).then(function(){return s.loadProjectStats()})},c.render=function(){var t,e,n,i,s,a,c,u,l;return l=this.calculateTotalPoints(),null==p||1===o.length?(c=l,u=l):(i=this.us.points[p],s=this.pointsById[i],c=s.name+" / "+l+"",u=s.name+" / "+l),t={totalPoints:l,roles:this.calculateRoles(),editable:this.isEditable,text:c,title:u},n="common/estimation/us-estimation-total.html",a=r.get(n,!0),e=a(t),this.$el.html(e)},c.render()}),l=function(){var t,e;return e=c.calculateRoles(),t=i({roles:e}),n.append(t),n.find(".pop-role").popover().open(function(){return $(this).remove()})},a=function(){return n.on("click","a.us-points",function(t){var r;return t.preventDefault(),t.stopPropagation(),r=e.$eval(o.tgBacklogUsPoints),d=p,null!=p?c.renderPointsSelector(p):l()}),n.on("click",".role",function(t){var r,i,s;return t.preventDefault(),t.stopPropagation(),i=angular.element(t.currentTarget),s=e.$eval(o.tgBacklogUsPoints),d=i.data("role-id"),r=n.find(".pop-role"),r.find("a").removeClass("active"),r.find("a[data-role-id='"+d+"']").addClass("active"),c.renderPointsSelector(d)})},e.$on("$destroy",function(){return n.off()})},{link:n}},d.directive("tgBacklogUsPoints",["$tgEstimationsService","$tgRepo","$tgTemplate",o]),i=function(t){var e,r,n;return e=function(){return $(".js-burndown-graph").removeClass("shown"),$(".js-toggle-burndown-visibility-button").removeClass("active"),$(".js-burndown-graph").removeClass("open")},n=function(t){return $(".js-toggle-burndown-visibility-button").addClass("active"),t?$(".js-burndown-graph").addClass("shown"):$(".js-burndown-graph").addClass("open")},r=function(r,i,o){var s,a,c;return s=!0,a=u(["is-burndown-grpahs-collapsed"]),r.isBurndownGraphCollapsed=t.get(a)||!1,c=function(){return r.isBurndownGraphCollapsed?e(s):n(s),s=!1},r.$watch("showGraphPlaceholder",function(){if(null!=r.showGraphPlaceholder)return r.isBurndownGraphCollapsed=r.isBurndownGraphCollapsed||r.showGraphPlaceholder,c()}),i.on("click",".js-toggle-burndown-visibility-button",function(){return r.isBurndownGraphCollapsed=!r.isBurndownGraphCollapsed,t.set(a,r.isBurndownGraphCollapsed),c()}),r.$on("$destroy",function(){return i.off()})},{link:r}},d.directive("tgToggleBurndownVisibility",["$tgStorage",i]),r=function(t){var e,r;return r=function(e,r){var n,i,o,s,a,c,u,l,p,d,f;return d=e.width(),e.height(d/6),a=function(){l=[];for(var t=0,e=r.milestones.length-1;0<=e?t<=e:t>=e;0<=e?t++:t--)l.push(t);return l}.apply(this),o=[],f=_.map(r.milestones,function(t){return 0}),o.push({data:_.zip(a,f),lines:{fillColor:"rgba(0,0,0,0)"},points:{show:!1}}),c=_.map(r.milestones,function(t){return t.optimal}),o.push({data:_.zip(a,c),lines:{fillColor:"rgba(120,120,120,0.2)"}}),s=_.filter(_.map(r.milestones,function(t){return t.evolution}),function(t){return null!=t}),o.push({data:_.zip(a,s),lines:{fillColor:"rgba(102,153,51,0.3)"}}),n=_.map(r.milestones,function(t){return-t["team-increment"]-t["client-increment"]}),o.push({data:_.zip(a,n),lines:{fillColor:"rgba(255,51,51,0.3)"}}),p=_.map(r.milestones,function(t){return-t["team-increment"]}),o.push({data:_.zip(a,p),lines:{fillColor:"rgba(153,51,51,0.3)"}}),i=["rgba(0,0,0,1)","rgba(120,120,120,0.2)","rgba(102,153,51,1)","rgba(153,51,51,1)","rgba(255,51,51,1)"],u={grid:{borderWidth:{top:0,right:1,left:0,bottom:0},borderColor:"#ccc",hoverable:!0},xaxis:{ticks:r.milestones.length,axisLabel:t.instant("BACKLOG.CHART.XAXIS_LABEL"),axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5,tickFormatter:function(t,e){return""}},yaxis:{axisLabel:t.instant("BACKLOG.CHART.YAXIS_LABEL"),axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5},series:{shadowSize:0,lines:{show:!0,fill:!0},points:{show:!0,fill:!0,radius:4,lineWidth:2}},colors:i,tooltip:!0,tooltipOpts:{content:function(e,n,i,o){var s;return 1===o.seriesIndex?(s={sprintName:r.milestones[n].name,value:Math.abs(i)},t.instant("BACKLOG.CHART.OPTIMAL",s)):2===o.seriesIndex?(s={sprintName:r.milestones[n].name,value:Math.abs(i)},t.instant("BACKLOG.CHART.REAL",s)):3===o.seriesIndex?(s={sprintName:r.milestones[n].name,value:Math.abs(i)},t.instant("BACKLOG.CHART.INCREMENT_CLIENT",s)):(s={sprintName:r.milestones[n].name,value:Math.abs(i)},t.instant("BACKLOG.CHART.INCREMENT_TEAM",s))}}},e.empty(),e.plot(o,u).data("plot")},e=function(t,e,n){var i;return i=angular.element(e),t.$watch("stats",function(e){if(null!=t.stats)return r(i,t.stats),t.$on("resize",function(){return r(i,t.stats)})}),t.$on("$destroy",function(){return e.off()})},{link:e}},d.directive("tgBurndownBacklogGraph",["$translate",r]),n=function(t,e){var r,n,i,o;return o=t.get("backlog/progress-bar.html",!0),i=function(t,r,n,i){var s;return s=o({projectPointsPercentaje:n,closedPointsPercentaje:i}),s=e(s)(t),r.html(s)},r=function(t){var e;return e=_.max([0,t]),e=_.min([100,e]),Math.round(e)},n=function(t,e,n){var o;return o=angular.element(e),t.$watch(n.tgBacklogProgressBar,function(n){var o,s,a,c,u;if(null!=n)return u=n.total_points?n.total_points:n.defined_points,a=n.defined_points,o=n.closed_points,a>u?(c=100*u/a,s=100*o/a):(c=100,s=100*o/u),c=r(c-3),s=r(s-3),i(t,e,c,s)}),t.$on("$destroy",function(){return e.off()})},{link:n}},d.directive("tgBacklogProgressBar",["$tgTemplate","$compile",n])}.call(this),function(){var t,e,r,n,i;i=this.taiga,e=this.taiga.bindOnce,n=angular.module("taigaBacklog"),r=function(t){return $(t).scope().$destroy(),$(t).off(),$(t).remove()},t=function(){var t;return t=function(t,n,i){return e(t,"project",function(e){var i,o,s;if(e.my_permissions.indexOf("modify_us")>-1)return o=!1,i=dragula([n[0],$(".js-empty-backlog")[0]],{copySortSource:!1,copy:!1,isContainer:function(t){return t.classList.contains("sprint-table")},moves:function(t){return!!$(t).hasClass("row")}}),i.on("drag",function(t,e){var r,n;return n=$(t).parent(),o=n.hasClass("backlog-table-body"),$(document.body).addClass("drag-active"),r=$(t).find("input[type='checkbox']").is(":checked"),window.dragMultiple.start(t,e)}),i.on("cloned",function(t){return $(t).addClass("multiple-drag-mirror")}),i.on("dragend",function(e){var n,i,s,a,c,u,l,p;return c=$(e).parent(),$(".doom-line").remove(),c=$(e).parent(),a=c.hasClass("backlog-table-body")||c.hasClass("js-empty-backlog"),u=o||a?o===a:$(e).scope().sprint.id===c.scope().sprint.id,n=window.dragMultiple.stop(),$(document.body).removeClass("drag-active"),l=null,i=n.length?n[0]:e,a?s=$(i).index(".backlog-table-body .row"):(s=$(i).index(),l=c.scope().sprint.id),u?p=n.length?_.map(n,function(t){return t=$(t).scope().us}):[$(e).scope().us]:(p=n.length?_.map(n,function(t){return t=$(t).scope().us}):[$(e).scope().us],n.length?_.each(n,function(t){return r(t)}):r(e)),t.$emit("sprint:us:move",p,s,l)}),s=autoScroll([window],{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&i.dragging}}),t.$on("$destroy",function(){return n.off(),i.destroy()})})},{link:t}},n.directive("tgBacklogSortable",t)}.call(this),function(){var t,e,r,n,i;i=this.taiga,n=angular.module("taigaBacklog"),t=function(t,e){var r,n,i,o;return i=50,n={duration:500,easing:"linear"},o=function(t){return function(t){var e,r;return r=t.find(".sprint-table"),e=t.find(".compact-sprint"),e.toggleClass("active"),r.toggleClass("open")}}(this),r=function(t,r,i){return t.$watch(i.tgBacklogSprint,function(e){return e=t.$eval(i.tgBacklogSprint),e.closed?r.addClass("sprint-closed"):o(r)}),r.on("click",".sprint-name > .compact-sprint",function(t){return t.preventDefault(),o(r),r.find(".sprint-table").slideToggle(n)}),r.on("click",".edit-sprint",function(r){var n;return r.preventDefault(),n=t.$eval(i.tgBacklogSprint),e.$broadcast("sprintform:edit",n)}),t.$on("$destroy",function(){return r.off()})},{link:r}},n.directive("tgBacklogSprint",["$tgRepo","$rootScope",t]),e=function(t,e,r,n){var i,o;return o=e.get("backlog/sprint-header.html"),i=function(e,i,s,a){var c,u,l,p;return l=n.instant("BACKLOG.SPRINTS.DATE"),c=function(){return e.project.my_permissions.indexOf("modify_milestone")!==-1},u=function(){return e.project.my_permissions.indexOf("view_milestones")!==-1},p=function(n){var s,a,p,d,f,h,g;return h=t.resolve("project-taskboard",{project:e.project.slug,sprint:n.slug}),f=moment(n.estimated_start).format(l),d=moment(n.estimated_finish).format(l),p=f+"-"+d,a={name:n.name,taskboardUrl:h,estimatedDateRange:p,closedPoints:n.closed_points||0,totalPoints:n.total_points||0,isVisible:u(),isEditable:c()},g=e.$new(),_.assign(g,a),s=r(o)(g),i.html(s)},e.$watch("sprint",function(t){return p(t)}),e.$on("$destroy",function(){return i.off()})},{link:i,restrict:"EA"}},n.directive("tgBacklogSprintHeader",["$tgNavUrls","$tgTemplate","$compile","$translate",e]),r=function(t,e,r){var n,i;return n=!0,i=function(i,o,s){var a,c;return c=$("
"),o.after(c),a=null,o.on("click",function(r){return r.preventDefault(),n=!n,a=e().target(c).start(),n?t.$broadcast("backlog:unload-closed-sprints"):t.$broadcast("backlog:load-closed-sprints")}),i.$on("$destroy",function(){return o.off()}),i.$on("closed-sprints:reloaded",function(t,e){var n,i;return a.finish(),n=e.length>0?"BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS":"BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS",i=r.instant(n),o.find(".text").text(i)})},{link:i}},n.directive("tgBacklogToggleClosedSprintsVisualization",["$rootScope","$tgLoading","$translate",r])}.call(this),function(){var t,e,r,n,i,o,s,a,c;s=this.taiga,n=this.taiga.mixOf,c=this.taiga.toggleText,o=this.taiga.scopeDefer,e=this.taiga.bindOnce,r=this.taiga.groupBy,a=this.taiga.timeout,i=angular.module("taigaTaskboard"),t=function(t){var e,r;return r=function(e,r){var n,i,o,s;return s=e.width(),e.height(240),i=_.map(r,function(t){return moment.utc(t.day)}),n=[],n.unshift({data:_.zip(i,_.map(r,function(t){return t.optimal_points})),lines:{fillColor:"rgba(120,120,120,0.2)"}}),n.unshift({data:_.zip(i,_.map(r,function(t){return t.open_points})),lines:{fillColor:"rgba(102,153,51,0.3)"}}),o={grid:{borderWidth:{top:0,right:1,left:0,bottom:0},borderColor:"#ccc",hoverable:!0},xaxis:{tickSize:[1,"day"],min:i[0],max:_.last(i),mode:"time",daysNames:i,axisLabel:t.instant("TASKBOARD.CHARTS.XAXIS_LABEL"),axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5},yaxis:{min:0,axisLabel:t.instant("TASKBOARD.CHARTS.YAXIS_LABEL"),axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5},series:{shadowSize:0,lines:{show:!0,fill:!0},points:{show:!0,fill:!0,radius:4,lineWidth:2}},colors:["rgba(102,153,51,1)","rgba(120,120,120,0.2)"],tooltip:!0,tooltipOpts:{content:function(e,r,n,i){var o,s;return o=moment(r).format(t.instant("TASKBOARD.CHARTS.DATE")),s=Math.round(n),1===i.seriesIndex?t.instant("TASKBOARD.CHARTS.OPTIMAL",{formattedDate:o,roundedValue:s}):t.instant("TASKBOARD.CHARTS.REAL",{formattedDate:o,roundedValue:s})}}},e.empty(),e.plot(n,o).data("plot")},e=function(t,e,n){var i;return i=angular.element(e),t.$on("resize",function(){if(t.stats)return r(i,t.stats.days)}),t.$on("taskboard:graph:toggle-visibility",function(){return e.parent().toggleClass("open"),a(100,function(){if(t.stats)return r(i,t.stats.days)})}),t.$watch("stats",function(e){if(null!=t.stats)return r(i,t.stats.days)}),t.$on("$destroy",function(){return e.off()})},{link:e}},i.directive("tgSprintGraph",["$translate",t])}.call(this),function(){var t,e,r,n,i,o;i=this.taiga,e=this.taiga.bindOnce,r=this.taiga.debounce,o=this.taiga.trim,n=angular.module("taigaTaskboard"),t=function(t,e,n,i,o,s){var a;return a=function(t,a,c){var u,l;return t.form={data:"",usId:null},u=r(2e3,function(r){return function(r){var c,u,p,d,f,h,g;if(r.preventDefault(),p=a.find("form").checksley(),p.validate())return c=i().target(l).start(),u=t.form.data,d=t.projectId,h=t.form.sprintId,g=t.form.usId,f=e.tasks.bulkCreate(d,h,g,u),f.then(function(t){return t=_.map(t,function(t){return function(t){return s.make_model("tasks",t)}}(this)),c.finish(),n.$broadcast("taskform:bulk:success",t),o.close(a)}),f.then(null,function(){return c.finish()})}}(this)),t.$on("taskform:bulk",function(e,r,n){return o.open(a),t.form={data:"",sprintId:r,usId:n}}),l=a.find(".submit-button"),a.on("submit","form",u),t.$on("$destroy",function(){return a.off()})},{link:a}},n.directive("tgLbCreateBulkTasks",["$tgRepo","$tgResources","$rootScope","$tgLoading","lightboxService","$tgModel",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f=function(t,e){function r(){this.constructor=t}for(var n in e)h.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},h={}.hasOwnProperty;l=this.taiga,d=this.taiga.toggleText,a=this.taiga.mixOf,s=this.taiga.groupBy,i=this.taiga.bindOnce,u=this.taiga.scopeDefer,p=this.taiga.timeout,n=this.taiga.bindMethods,o=this.taiga.debounceLeading,c=angular.module("taigaTaskboard"),t=function(t){function e(t,e,r,i,o,s,a,c,u,p,d,f,h,g,m,v,y,_,b){this.scope=t,this.rootscope=e,this.repo=r,this.confirm=i,this.rs=o,this.rs2=s,this.params=a,this.q=c,this.appMetaService=u,this.location=p,this.navUrls=d,this.events=f,this.analytics=h,this.translate=g,this.errorHandlingService=m,this.taskboardTasksService=v,this.taskboardIssuesService=y,this.storage=_,this.filterRemoteStorageService=b,n(this),this.taskboardTasksService.reset(),this.scope.userstories=[],this.openFilter=!1,this.applyStoredFilters(this.params.pslug,"tasks-filters")||(this.scope.sectionName=this.translate.instant("TASKBOARD.SECTION_NAME"),this.initializeEventHandlers(),l.defineImmutableProperty(this.scope,"usTasks",function(t){return function(){return t.taskboardTasksService.usTasks}}(this)),l.defineImmutableProperty(this.scope,"milestoneIssues",function(t){return function(){return t.taskboardIssuesService.milestoneIssues}}(this)))}return f(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","tgResources","$routeParams","$q","tgAppMetaService","$tgLocation","$tgNavUrls","$tgEvents","$tgAnalytics","$translate","tgErrorHandlingService","tgTaskboardTasks","tgTaskboardIssues","$tgStorage","tgFilterRemoteStorageService"],e.prototype.firstLoad=function(){var t;return t=this.loadInitialData(),t.then(function(t){return function(){return t._setMeta()}}(this)),t.then(null,this.onInitialDataError.bind(this))},e.prototype.setZoom=function(t,e){ -var r;return this.zoomLevel===t?null:(this.isFirstLoad=!this.zoomLevel,r=this.zoomLevel,this.zoomLevel=t,this.zoom=e,this.isFirstLoad?this.firstLoad().then(function(t){return function(){return t.isFirstLoad=!1,t.taskboardTasksService.resetFolds()}}(this)):this.zoomLevel>1&&r<=1&&(this.zoomLoading=!0,this.q.all([this.loadTasks(),this.loadIssues()]).then(function(t){return function(){return t.zoomLoading=!1,t.taskboardTasksService.resetFolds()}}(this))),"0"===this.zoomLevel?this.rootscope.$broadcast("sprint:zoom0"):void 0)},e.prototype.changeQ=function(t){return this.replaceFilter("q",t),this.loadTasks(),this.generateFilters()},e.prototype.removeFilter=function(t){return this.unselectFilter(t.dataType,t.id),this.loadTasks(),this.generateFilters()},e.prototype.addFilter=function(t){return this.selectFilter(t.category.dataType,t.filter.id),this.loadTasks(),this.generateFilters()},e.prototype.selectCustomFilter=function(t){return this.replaceAllFilters(t.filter),this.loadTasks(),this.generateFilters()},e.prototype.removeCustomFilter=function(t){return this.filterRemoteStorageService.getFilters(this.scope.projectId,"tasks-custom-filters").then(function(e){return function(r){return delete r[t.id],e.filterRemoteStorageService.storeFilters(e.scope.projectId,r,"tasks-custom-filters").then(e.generateFilters)}}(this))},e.prototype.isFilterDataTypeSelected=function(t){var e,r,n,i;for(i=this.selectedFilters,r=0,n=i.length;r0}),n=_.map(o.assigned_to,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.full_name||"Unassigned",t}),a=_.map(o.roles,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.name||"Unassigned",t}),s=_.map(o.owners,function(t){return t.id=t.id.toString(),t.name=t.full_name,t}),e.selectedFilters=[],t.status&&(c=e.formatSelectedFilters("status",u,t.status),e.selectedFilters=e.selectedFilters.concat(c)),t.tags&&(c=e.formatSelectedFilters("tags",l,t.tags),e.selectedFilters=e.selectedFilters.concat(c)),t.assigned_to&&(c=e.formatSelectedFilters("assigned_to",n,t.assigned_to),e.selectedFilters=e.selectedFilters.concat(c)),t.owner&&(c=e.formatSelectedFilters("owner",s,t.owner),e.selectedFilters=e.selectedFilters.concat(c)),t.role&&(c=e.formatSelectedFilters("role",a,t.role),e.selectedFilters=e.selectedFilters.concat(c)),e.filterQ=t.q,e.filters=[{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.STATUS"),dataType:"status",content:u},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.TAGS"),dataType:"tags",content:l,hideEmpty:!0,totalTaggedElements:p.length},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.ASSIGNED_TO"),dataType:"assigned_to",content:n},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.ROLE"),dataType:"role",content:a},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.CREATED_BY"),dataType:"owner",content:s}],e.customFilters=[],_.forOwn(i,function(t,r){return e.customFilters.push({id:r,name:r,filter:t})})}}(this))},e.prototype._setMeta=function(){var t,e,r;return e=this.translate.instant("BACKLOG.SPRINTS.DATE"),r=this.translate.instant("TASKBOARD.PAGE_TITLE",{projectName:this.scope.project.name,sprintName:this.scope.sprint.name}),t=this.translate.instant("TASKBOARD.PAGE_DESCRIPTION",{projectName:this.scope.project.name,sprintName:this.scope.sprint.name,startDate:moment(this.scope.sprint.estimated_start).format(e),endDate:moment(this.scope.sprint.estimated_finish).format(e),completedPercentage:this.scope.stats.completedPercentage||"0",completedPoints:this.scope.stats.completedPointsSum||"--",totalPoints:this.scope.stats.totalPointsSum||"--",openTasks:this.scope.stats.openTasks||"--",totalTasks:this.scope.stats.total_tasks||"--"}),this.appMetaService.setAll(r,t)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("taskform:bulk:success",function(t){return function(e,r){return t.refreshTagsColors().then(function(){return t.taskboardTasksService.add(r)}),t.analytics.trackEvent("task","create","bulk create task on taskboard",1)}}(this)),this.scope.$on("taskform:new:success",function(t){return function(e,r){return t.refreshTagsColors().then(function(){return t.taskboardTasksService.add(r)}),t.analytics.trackEvent("task","create","create task on taskboard",1)}}(this)),this.scope.$on("taskform:edit:success",function(t){return function(e,r){return t.refreshTagsColors().then(function(){return t.taskboardTasksService.replaceModel(r)})}}(this)),this.scope.$on("issueform:new:success",function(t){return function(e,r){return t.refreshTagsColors().then(function(){return t.taskboardIssuesService.add(r)}),t.analytics.trackEvent("issue","create","create issue on taskboard",1)}}(this)),this.scope.$on("issueform:add:success",function(t){return function(e,r){return t.refreshTagsColors().then(function(){return t.taskboardIssuesService.add(r)})}}(this)),this.scope.$on("issueform:edit:success",function(t){return function(e,r){return t.refreshTagsColors().then(function(){return t.taskboardIssuesService.replaceModel(r)})}}(this)),this.scope.$on("taskboard:task:deleted",function(t){return function(e,r){return t.loadTasks()}}(this)),this.scope.$on("taskboard:issue:deleted",function(t){return function(e,r){return t.loadIssues()}}(this)),this.scope.$on("taskboard:task:move",this.taskMove),this.scope.$on("assigned-to:added",this.onAssignedToChanged),this.scope.$on("taskboard:items:move",function(t){return function(e,r){return r.uss?t.firstLoad():(r.tasks&&t.loadTasks(),r.issues?t.loadIssues():void 0)}}(this))},e.prototype.onAssignedToChanged=function(t,e,r){if("tasks"===r.getName()&&(r.assigned_to=e,this.taskboardTasksService.replaceModel(r),this.repo.save(r).then(function(t){return function(){if(t.generateFilters(),t.isFilterDataTypeSelected("assigned_to")||t.isFilterDataTypeSelected("role"))return t.loadTasks()}}(this))),"issues"===r.getName())return r.assigned_to=e,this.taskboardIssuesService.replaceModel(r),this.repo.save(r).then(function(t){return function(){if(t.generateFilters(),t.isFilterDataTypeSelected("assigned_to")||t.isFilterDataTypeSelected("role"))return t.loadIssues()}}(this))},e.prototype.initializeSubscription=function(){var t,e;return t="changes.project."+this.scope.projectId+".tasks",this.events.subscribe(this.scope,t,o(500,function(t){return function(e){return t.loadTaskboard()}}(this))),t="changes.project."+this.scope.projectId+".issues",this.events.subscribe(this.scope,t,o(500,function(t){return function(e){return t.loadIssues()}}(this))),e="changes.project."+this.scope.projectId+".userstories",this.events.subscribe(this.scope,e,function(t){return function(e){return t.refreshTagsColors(),t.loadSprintStats(),t.loadSprint()}}(this))},e.prototype.loadProject=function(){return this.rs.projects.get(this.scope.projectId).then(function(t){return function(e){return e.is_backlog_activated||t.errorHandlingService.permissionDenied(),t.scope.project=e,t.scope.pointsList=_.sortBy(e.points,"order"),t.scope.pointsById=s(e.points,function(t){return t.id}),t.scope.roleById=s(e.roles,function(t){return t.id}),t.scope.taskStatusList=_.sortBy(e.task_statuses,"order"),t.scope.usStatusList=_.sortBy(e.us_statuses,"order"),t.scope.usStatusById=s(e.us_statuses,function(t){return t.id}),t.scope.issueStatusById=s(e.issue_statuses,function(t){return t.id}),t.scope.$emit("project:loaded",e),t.fillUsersAndRoles(e.members,e.roles),e}}(this))},e.prototype.loadSprintStats=function(){return this.rs.sprints.stats(this.scope.projectId,this.scope.sprintId).then(function(t){return function(e){var r,n,i,o;return o=_.reduce(_.values(e.total_points),function(t,e){return t+e},0),r=_.reduce(_.values(e.completed_points),function(t,e){return t+e},0),n=o-r,i=e.total_tasks-e.completed_tasks,t.scope.stats=e,t.scope.stats.totalPointsSum=o,t.scope.stats.completedPointsSum=r,t.scope.stats.remainingPointsSum=n,t.scope.stats.remainingTasks=i,e.totalPointsSum?t.scope.stats.completedPercentage=Math.round(100*e.completedPointsSum/e.totalPointsSum):t.scope.stats.completedPercentage=0,t.scope.stats.openTasks=e.total_tasks-e.completed_tasks,e}}(this))},e.prototype.refreshTagsColors=function(){return this.rs.projects.tagsColors(this.scope.projectId).then(function(t){return function(e){return t.scope.project.tags_colors=e._attrs}}(this))},e.prototype.loadSprint=function(){return this.rs.sprints.get(this.scope.projectId,this.scope.sprintId).then(function(t){return function(e){return t.scope.sprint=e,t.scope.userstories=_.sortBy(e.user_stories,"sprint_order"),t.taskboardTasksService.setUserstories(t.scope.userstories),e}}(this))},e.prototype.loadIssues=function(){var t;return t={},this.zoomLevel>1&&(t.include_attachments=1),t=_.merge(t,this.location.search()),this.rs.issues.listInProject(this.scope.projectId,this.scope.sprintId,t).then(function(t){return function(e){return t.taskboardIssuesService.init(t.scope.project,t.scope.usersById,t.scope.issueStatusById),t.taskboardIssuesService.set(e),t.scope.taskBoardLoading=!1}}(this))},e.prototype.loadTasks=function(){var t;return t={},this.zoomLevel>1&&(t.include_attachments=1),t=_.merge(t,this.location.search()),this.rs.tasks.list(this.scope.projectId,this.scope.sprintId,null,t).then(function(t){return function(e){return t.taskboardTasksService.init(t.scope.project,t.scope.usersById),t.taskboardTasksService.set(e)}}(this))},e.prototype.loadTaskboard=function(){return this.q.all([this.refreshTagsColors(),this.loadSprintStats(),this.loadSprint().then(function(t){return function(){return t.loadTasks(),t.loadIssues()}}(this))])},e.prototype.loadInitialData=function(){var t,e;return t={pslug:this.params.pslug,sslug:this.params.sslug},e=this.repo.resolve(t).then(function(t){return function(e){return t.scope.projectId=e.project,t.scope.sprintId=e.milestone,t.initializeSubscription(),e}}(this)),e.then(function(t){return function(){return t.loadProject()}}(this)).then(function(t){return function(){return t.generateFilters(),t.loadTaskboard().then(function(){return t.setRolePoints()})}}(this))},e.prototype.showPlaceHolder=function(t,e){return!(this.taskboardTasksService.tasksRaw.length||this.scope.taskStatusList[0].id!==t||this.scope.userstories.length&&this.scope.userstories[0].id!==e)},e.prototype.editTask=function(t){var e;return e=this.taskboardTasksService.getTask(t),e=e.set("loading-edit",!0),this.taskboardTasksService.replace(e),this.rs.tasks.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){return t.rs2.attachments.list("task",e.get("id"),e.getIn(["model","project"])).then(function(n){return t.rootscope.$broadcast("genericform:edit",{objType:"task",obj:r,project:t.scope.project,sprintId:t.scope.sprintId,attachments:n.toJS()}),e=e.set("loading-edit",!1),t.taskboardTasksService.replace(e)})}}(this))},e.prototype.editIssue=function(t){var e;return e=this.taskboardIssuesService.getIssue(t),e=e.set("loading-edit",!0),this.rs.issues.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){return t.rs2.attachments.list("issue",e.get("id"),e.getIn(["model","project"])).then(function(n){return t.rootscope.$broadcast("genericform:edit",{objType:"issue",obj:r,project:t.scope.project,sprintId:t.scope.sprintId,attachments:n.toJS()}),e=e.set("loading-edit",!1)})}}(this))},e.prototype.deleteTask=function(t){var e;return e=this.taskboardTasksService.getTask(t),e=e.set("loading-delete",!0),this.rs.tasks.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){var n,i;return e=e.set("loading-delete",!1),i=t.translate.instant("TASK.TITLE_DELETE_ACTION"),n=r.subject,t.confirm.askOnDelete(i,n).then(function(e){var n;return n=t.repo.remove(r),n.then(function(){return t.scope.$broadcast("taskboard:task:deleted"),e.finish()}),n.then(null,function(){return e.finish(!1),this.confirm.notify("error")})})}}(this))},e.prototype.deleteIssue=function(t){var e;return e=this.taskboardIssuesService.getIssue(t),e=e.set("loading-delete",!0),this.rs.issues.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){var n,i;return e=e.set("loading-delete",!1),i=t.translate.instant("ISSUES.ACTION_DELETE"),n=r.subject,t.confirm.askOnDelete(i,n).then(function(e){var n;return n=t.repo.remove(r),n.then(function(){return t.scope.$broadcast("taskboard:issue:deleted"),e.finish()}),n.then(null,function(){return e.finish(!1),this.confirm.notify("error")})})}}(this))},e.prototype.removeIssueFromSprint=function(t){var e;return e=this.taskboardIssuesService.getIssue(t),e=e.set("loading-delete",!0),this.rs.issues.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){var n,i;return e=e.set("loading-delete",!1),i=t.translate.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.TITLE"),n=t.translate.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE"),n=t.translate.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE",{sprintName:t.scope.sprint.name}),t.confirm.ask(i,null,n).then(function(e){var n;return r.milestone=null,n=t.repo.save(r),n.then(function(){return t.taskboardIssuesService.remove(r),e.finish()}),n.then(null,function(){return e.finish(!1),this.confirm.notify("error")})})}}(this))},e.prototype.taskMove=function(t,e,r,n,i,o){var s,a,c,u;return this.scope.movingTask=!0,e=this.taskboardTasksService.getTaskModel(e.get("id")),s=this.taskboardTasksService.move(e.id,n,i,o),c={status__is_archived:!1,include_attachments:!0},a={headers:{"set-orders":JSON.stringify(s.set_orders)}},u=this.repo.save(e,!0,c,a,!0).then(function(t){return function(e){var r;if(e[0].user_story&&t.reloadUserStory(e[0].user_story),t.scope.movingTask=!1,r=e[1],r&&r["taiga-info-order-updated"]&&(o=JSON.parse(r["taiga-info-order-updated"]),t.taskboardTasksService.assignOrders(o)),t.loadSprintStats(),t.generateFilters(),t.isFilterDataTypeSelected("status"))return t.loadTasks()}}(this))},e.prototype.reloadUserStory=function(t){return this.rs.userstories.get(this.scope.project.id,t).then(function(t){return function(e){return t.scope.userstories=_.map(t.scope.userstories,function(t){return t.id===e.id?e:t})}}(this))},e.prototype.addNewTask=function(t,e){switch(t){case"standard":return this.rootscope.$broadcast("genericform:new",{objType:"task",project:this.scope.project,sprintId:this.scope.sprintId,usId:null!=e?e.id:void 0});case"bulk":return this.rootscope.$broadcast("taskform:bulk",this.scope.sprintId,null!=e?e.id:void 0)}},e.prototype.addNewIssue=function(t,e){switch(t){case"standard":return this.rootscope.$broadcast("genericform:new-or-existing",{objType:"issue",project:this.scope.project,sprintId:this.scope.sprintId,relatedField:"milestone",relatedObjectId:this.scope.sprintId,targetName:this.scope.sprint.name});case"standard":return this.rootscope.$broadcast("taskform:new",this.scope.sprintId,null!=e?e.id:void 0);case"bulk":return this.rootscope.$broadcast("issueform:bulk",this.scope.projectId,this.scope.sprintId)}},e.prototype.toggleFold=function(t,e){return"issues"===e?this.taskboardIssuesService.toggleFold(t):"tasks"===e?this.taskboardTasksService.toggleFold(t):void 0},e.prototype.changeTaskAssignedTo=function(t){var e;return e=this.taskboardTasksService.getTaskModel(t),this.rootscope.$broadcast("assigned-to:add",e)},e.prototype.changeIssueAssignedTo=function(t){var e;return e=this.taskboardIssuesService.getIssueModel(t),this.rootscope.$broadcast("assigned-to:add",e)},e.prototype.setRolePoints=function(){var t,e,r,n;return t=_.filter(this.scope.project.roles,"computable"),r=function(e){return function(e){return e=parseInt(e,10),_.find(t,function(t){return t.id===e})}}(this),e=function(t){return function(e){var r;return r=parseInt(e,10),_.find(t.scope.project.points,function(t){return t.id===e})}}(this),n=_.reduce(this.scope.userstories,function(t){return function(t,n,i){return _.forOwn(n.points,function(n,i){var o,s;return s=r(i),o=e(n),t[s.id]||(t[s.id]=s,t[s.id].points=0),t[s.id].points+=o.value}),t}}(this),{}),this.scope.pointsByRole=Object.keys(n).map(function(t){return n[t]})},e}(a(l.Controller,l.PageMixin,l.FiltersMixin)),c.controller("TaskboardController",t),e=function(t){var e;return e=function(e,r,n){var i,o;return i=r.controller(),r.on("click",".toggle-analytics-visibility",function(e){var r;return e.preventDefault(),r=angular.element(e.currentTarget),r.toggleClass("active"),t.$broadcast("taskboard:graph:toggle-visibility")}),o=r.find(".taskboard-table-body"),o.on("scroll",function(t){var e,n;return n=angular.element(t.currentTarget),e=r.find(".taskboard-table-header .taskboard-table-inner"),e.css("left",-1*n.scrollLeft())}),e.$on("$destroy",function(){return r.off()})},{link:e}},c.directive("tgTaskboard",["$rootScope",e]),r=function(t){var e,r,n;return e=40,n=300,r=function(r,i,o){var s,a,c,u,l;return r.$on("sprint:zoom0",function(t){return function(){return c()}}(this)),r.$on("sprint:task:moved",function(t){return function(){return c()}}(this)),r.$watch("usTasks",function(){if(r.project)return r.statusesFolded=t.tasks.getStatusColumnModes(r.project.id),r.usFolded=t.tasks.getUsRowModes(r.project.id,r.sprintId),c()}),r.foldStatus=function(e){return r.statusesFolded[e.id]=!r.statusesFolded[e.id],t.tasks.storeStatusColumnModes(r.projectId,r.statusesFolded),c()},r.foldUs=function(e){return r.usFolded[e]=!r.usFolded[e],t.tasks.storeUsRowModes(r.projectId,r.sprintId,r.usFolded),c()},s=function(t){return function(t,n){var i,o,s;return i=t?r.usTasks.getIn([t.toString(),n.toString()]).size:r.usTasks.getIn(["null",n.toString()]).size,r.statusesFolded[n]?(i&&r.usFolded[t]?(o=Math.round(Math.sqrt(i)),s=e*o):s=e,s):0}}(this),l=function(t){return function(t,e){var o;return o=i.find(".squish-status-"+t),e?o.css("max-width",e):"0"===r.ctrl.zoomLevel?o.css("max-width",148):o.css("max-width",n)}}(this),u=function(t){return function(){var t,e,n,o,s;return t=[],e=i.find(".task-colum-name"),t=_.map(e,function(t){return $(t).outerWidth(!0)}),s=_.reduce(t,function(t,e){return t+e}),i.find(".taskboard-table-inner").css("width",s),o=i.find(".issues-row .taskboard-row-title-box").outerWidth(!0),i.find(".issues-row").css("width",s-t.pop()),n="0"===r.ctrl.zoomLevel?128:280,i.find(".issues-row .taskboard-cards-box .card").css("max-width",n)}}(this),a=function(t){return function(t){var e;return e=s(null,t),_.forEach(r.userstories,function(r){var n;if(n=s(r.id,t),n>e)return e=n}),l(t,e)}}(this),c=function(t){return function(){_.forEach(r.taskStatusList,function(t){return a(t.id)}),u()}}(this)},{link:r}},c.directive("tgTaskboardSquishColumn",["$tgResources",r])}.call(this),function(){var t,e,r,n,i,o,s,a;s=this.taiga,n=this.taiga.mixOf,a=this.taiga.toggleText,o=this.taiga.scopeDefer,e=this.taiga.bindOnce,r=this.taiga.groupBy,i=angular.module("taigaBacklog"),t=function(t,e,r,n){var i;return i=function(t,e,i){var o;return o=t.$watch("usTasks",function(i){var s,a,c,u,l,p,d,f,h;if(i&&i.size&&(o(),t.project.my_permissions.indexOf("modify_task")>-1))return d=null,p=null,l=null,h=e,u=function(){var t;return t=n.instant("BACKLOG.SORTABLE_FILTER_ERROR"),$tgConfirm.notify("error",t)},a=function(t){return t.scope().$destroy(),t.off(),t.remove()},s=_.map(e.find(".taskboard-column"),function(t){return t}),c=dragula(s,{copySortSource:!1,copy:!1,accepts:function(t,e){return!$(e).hasClass("taskboard-row-title-box")},moves:function(t){return $(t).is("tg-card")}}),c.on("drag",function(t){if(d=$(t).parent().scope(),e.hasClass("active-filters"))return u(),setTimeout(function(){return c.cancel(!0)},0),!1}),c.on("dragend",function(e){var n,i,o,s,c,u,f;return f=$(e).parent(),l=$(e),i=l.scope().task,n=l.index(),p=f.scope(),u=d.us?d.us.id:null,c=d.st.id,s=p.us?p.us.id:null,o=p.st.id,o===c&&s===u||a(l),t.$apply(function(){return r.$broadcast("taskboard:task:move",i,i.getIn(["model","status"]),s,o,n)})}),f=autoScroll([$(".taskboard-table-body")[0]],{margin:100,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&c.dragging}}),t.$on("$destroy",function(){return e.off(),c.destroy()})})},{link:i}},i.directive("tgTaskboardSortable",["$tgRepo","$tgResources","$rootScope","$translate",t])}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga.groupBy,t=function(t){function e(){this.reset()}return r(e,t),e.$inject=[],e.prototype.reset=function(){return this.foldStatusChanged={},this.issuesRaw=[]},e.prototype.init=function(t,e,r){return this.issueStatusById=r,this.project=t,this.usersById=e},e.prototype.resetFolds=function(){return this.foldStatusChanged={},this.refresh()},e.prototype.toggleFold=function(t){return this.foldStatusChanged[t]=!this.foldStatusChanged[t],this.refresh()},e.prototype.add=function(t){return this.issuesRaw=this.issuesRaw.concat(t),this.refresh()},e.prototype.remove=function(t){var e,r,n;n=this.issuesRaw;for(r in n)if(e=n[r],t.id===e.id)return this.issuesRaw.splice(r,1),void this.refresh()},e.prototype.set=function(t){return this.issuesRaw=t,this.refresh()},e.prototype.getIssue=function(t){return this.milestoneIssues.find(function(e){return e.get("id")===t})},e.prototype.getIssueModel=function(t){return _.find(this.issuesRaw,function(e){return e.id===t})},e.prototype.replaceModel=function(t){return this.issuesRaw=_.map(this.issuesRaw,function(e){return t.id===e.id?t:e}),this.refresh()},e.prototype.refresh=function(){var t,e,r,n,i,o;for(n=[],o=this.issuesRaw,t=0,i=o.length;t1)for(s=0,l=f.length;s1)for(o=0,f=b.length;o1&&(k=_.map(b,function(t){return function(e){return{us_id:e.id,order:t.order[e.id]}}}(this)))}}else{for($=0,p=u=0,h=n.length;u1&&r<=1?(this.zoomLoading=!0,this.loadUserstories().then(function(t){return function(){return t.zoomLoading=!1,t.kanbanUserstoriesService.resetFolds()}}(this))):void 0)},e.prototype.filtersReloadContent=function(){return this.loadUserstories().then(function(t){return function(){var e,r,n,i,o;if(n=_.difference(t.kanbanUserstoriesService.archivedStatus,t.kanbanUserstoriesService.statusHide),n.length){for(i=[],e=0,r=n.length;e0&&(r.assigned_to=n[0]),0===n.length&&(r.assigned_to=null),this.kanbanUserstoriesService.replaceModel(r),this.repo.save(r).then(function(t){return function(){if(t.generateFilters(),t.isFilterDataTypeSelected("assigned_users")||t.isFilterDataTypeSelected("role"))return t.filtersReloadContent()}}(this))},e.prototype.refreshTagsColors=function(){return this.rs.projects.tagsColors(this.scope.projectId).then(function(t){return function(e){return t.scope.project.tags_colors=e._attrs}}(this))},e.prototype.loadUserstories=function(){var t,e;return t={status__is_archived:!1},this.zoomLevel>1&&(t.include_attachments=1,t.include_tasks=1),t=_.merge(t,this.location.search()),e=this.rs.userstories.listAll(this.scope.projectId,t).then(function(t){return function(e){return t.kanbanUserstoriesService.init(t.scope.project,t.scope.usersById),t.kanbanUserstoriesService.set(e),d(t.scope,function(){return t.scope.$broadcast("userstories:loaded",e)}),e}}(this)),e.then(function(t){return function(){return t.scope.$broadcast("redraw:wip")}}(this)),e},e.prototype.loadUserStoriesForStatus=function(t,e){var r,n;if(r=this.location.search().status,!r||(r=r.split(",").map(function(t){return parseInt(t,10)}),r.indexOf(e)!==-1))return n={status:e,include_attachments:!0,include_tasks:!0},n=_.merge(n,this.location.search()),this.rs.userstories.listAll(this.scope.projectId,n).then(function(t){return function(r){return t.scope.$broadcast("kanban:shown-userstories-for-status",e,r),r}}(this))},e.prototype.hideUserStoriesForStatus=function(t,e){return this.scope.$broadcast("kanban:hidden-userstories-for-status",e)},e.prototype.loadKanban=function(){return this.q.all([this.refreshTagsColors(),this.loadUserstories()])},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_kanban_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.projectId=t.id,this.scope.points=_.sortBy(t.points,"order"),this.scope.pointsById=u(t.points,function(t){return t.id}),this.scope.usStatusById=u(t.us_statuses,function(t){return t.id}),this.scope.usStatusList=_.sortBy(t.us_statuses,"order"),this.scope.$emit("project:loaded",t),t},e.prototype.initializeSubscription=function(){var t,e;return e="changes.project."+this.scope.projectId+".userstories",t=f.randomInt(700,1e3),this.events.subscribe(this.scope,e,c(t,function(t){return function(e){return t.loadUserstories()}}(this)))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.initializeSubscription(),this.loadKanban(),this.generateFilters()},e.prototype.prepareBulkUpdateData=function(t,e){return null==e&&(e="kanban_order"),_.map(t,function(t){return{us_id:t.id,order:t[e]}})},e.prototype.moveUs=function(t,e,r,n){var i,o;return this.cleanSelectedUss(),e=_.map(e,function(t){return function(e){return t.kanbanUserstoriesService.getUsModel(e.id)}}(this)),i=this.kanbanUserstoriesService.move(e,r,n),o=this.rs.userstories.bulkUpdateKanbanOrder(this.scope.projectId,r,i.bulkOrders),o.then(function(t){return function(){var r,n,s;return r={headers:{"set-orders":JSON.stringify(i.setOrders)}},n={include_attachments:!0,include_tasks:!0},s=_.map(e,function(e){return t.repo.save(e,!0,n,r,!0)}),o=t.q.all(s),o.then(function(e){var r,n;return r=e[1],r&&r["taiga-info-order-updated"]&&(n=JSON.parse(r["taiga-info-order-updated"]),t.kanbanUserstoriesService.assignOrders(n)),t.scope.$broadcast("redraw:wip"),t.generateFilters(),t.isFilterDataTypeSelected("status")&&t.filtersReloadContent(),o})}}(this))},e}(l(f.Controller,f.PageMixin,f.FiltersMixin,f.UsFiltersMixin)),p.controller("KanbanController",r),n=function(t,e){var r;return r=function(t,e,r){var n;return n=e.find(".kanban-table-body"),n.on("scroll",function(t){var r,n;return n=angular.element(t.currentTarget),r=e.find(".kanban-table-header .kanban-table-inner"),r.css("left",-1*n.scrollLeft())}),t.$on("$destroy",function(){return e.off()})},{link:r}},p.directive("tgKanban",["$tgRepo","$rootScope",n]),t=function(t,e,r){var n,i,o;return o=e.instant("KANBAN.ACTION_SHOW_ARCHIVED"),n=e.instant("KANBAN.ACTION_HIDE_ARCHIVED"),i=function(e,i,s){var a,c;return c=e.$eval(s.tgKanbanArchivedStatusHeader),a=!0,r.addArchivedStatus(c.id),r.hideStatus(c.id),e["class"]="icon-watch",e.title=o,i.on("click",function(i){return a=!a,e.$apply(function(){return a?(e["class"]="icon-watch",e.title=o,t.$broadcast("kanban:hide-userstories-for-status",c.id),r.hideStatus(c.id)):(e["class"]="icon-unwatch",e.title=n,t.$broadcast("kanban:show-userstories-for-status",c.id),r.showStatus(c.id))})}),e.$on("$destroy",function(){return i.off()})},{link:i}},p.directive("tgKanbanArchivedStatusHeader",["$rootScope","$translate","tgKanbanUserstories",t]),e=function(t,e){var r,n;return n=[],r=function(r,n,i){var o,s,a;return o=t.instant("KANBAN.HIDDEN_USER_STORIES"),s=r.$eval(i.tgKanbanArchivedStatusIntro),n.text(o),a=function(t){return t?n.text(""):n.text(o)},r.$on("kanban:us:move",function(t,r,n,i,o){var s;return s=!!e.getStatus(i).length,a(s)}),r.$on("kanban:shown-userstories-for-status",function(t,r,n){var i;if(r===s.id)return e.deleteStatus(r),e.add(n),i=!!e.getStatus(r).length,a(i)}),r.$on("kanban:hidden-userstories-for-status",function(t,e){if(e===s.id)return a(!1)}),r.$on("$destroy",function(){return n.off()})},{link:r}},p.directive("tgKanbanArchivedStatusIntro",["$translate","tgKanbanUserstories",e]),i=function(t,e){var r;return r=function(r,n,i){var o,s;return r.foldStatus=function(e){r.folds[e.id]=!r.folds[e.id],t.kanban.storeStatusColumnModes(r.projectId,r.folds),s()},s=function(){var t,e;return t=_.map(r.usStatusList,function(t){return r.folds[t.id]?40:310}),e=_.reduce(t,function(t,e){return t+e}),n.find(".kanban-table-inner").css("width",e)},o=r.$watch("usByStatus",function(n){if(n.size)return r.folds=t.kanban.getStatusColumnModes(e.project.get("id")),s(),o()})},{link:r}},p.directive("tgKanbanSquishColumn",["$tgResources","tgProjectService",i]),o=function(t){var e;return e=function(e,r,n){var i,o;return o=e.$eval(n.tgKanbanWipLimit),i=function(e){return function(){return r.find(".kanban-wip-limit").remove(),t(function(){var t;if(t=r.find("tg-card")[o.wip_limit])return angular.element(t).before("
")})}}(this),o&&!o.is_archived&&(e.$on("redraw:wip",i),e.$on("kanban:us:move",i),e.$on("usform:new:success",i),e.$on("usform:bulk:success",i)),e.$on("$destroy",function(){return r.off()})},{link:e}},p.directive("tgKanbanWipLimit",["$timeout",o])}.call(this),function(){var t,e,r,n,i,o,s,a,c;s=this.taiga,n=this.taiga.mixOf,c=this.taiga.toggleText,o=this.taiga.scopeDefer,e=this.taiga.bindOnce,r=this.taiga.groupBy,a=this.taiga.timeout,i=angular.module("taigaKanban"),t=function(t,e,r){var n;return n=function(t,e,n){var i;return i=t.$watch("usByStatus",function(n){var o,s,a,c,u,l,p;if(n&&n.size&&(i(),t.project.my_permissions.indexOf("modify_us")>-1))return u=null,c=null,p=e,s=function(t){return t.scope().$destroy(),t.off(),t.remove()},o=_.map(e.find(".taskboard-column"),function(t){return t}),a=dragula(o,{copySortSource:!1,copy:!1,moves:function(t){return $(t).is("tg-card")}}),a.on("drag",function(t){return window.dragMultiple.start(t,o)}),a.on("cloned",function(t,e){return $(t).addClass("multiple-drag-mirror")}),a.on("dragend",function(e){var n,i,o,a,l,p,d,f;return d=$(e).parent(),u=d.scope(),p=u.s.id,n=window.dragMultiple.stop(),n.length||(n=[e]),o=n[0],a=$(d).find("tg-card").index(o),l=u.s.id,f=_.map(n,function(t){return $(t).scope().us}),i=_.map(f,function(t){return{id:t.get("id"),oldStatusId:t.getIn(["model","status"])}}),t.$apply(function(){return _.each(f,function(t){return function(t,e){var r,i;if(r=t.getIn(["model","status"]),i=l===r,!i)return c=$(n[e]),s(c)}}(this)),r.$broadcast("kanban:us:move",i,l,a)})}),l=autoScroll(o,{margin:100,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&a.dragging}}),t.$on("$destroy",function(){return e.off(),a.destroy()})})},{link:n}},i.directive("tgKanbanSortable",["$tgRepo","$tgResources","$rootScope",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p=function(t,e){function r(){this.constructor=t}for(var n in e)d.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},d={}.hasOwnProperty;u=this.taiga,a=this.taiga.mixOf,l=this.taiga.toString,s=this.taiga.joinStr,o=this.taiga.groupBy,i=this.taiga.bindOnce,n=this.taiga.bindMethods,c=angular.module("taigaEpics"),t=function(t){function e(t,e,r,i,o,s,a,c,u,l,p,d,f,h,g,m,v){var y;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=i,this.rs=o,this.rs2=s,this.params=a,this.q=c,this.location=u,this.log=l,this.appMetaService=p,this.analytics=d,this.navUrls=f,this.translate=h,this.modelTransform=g,this.errorHandlingService=m,this.projectService=v,n(this),this.scope.epicRef=this.params.epicref,this.scope.sectionName=this.translate.instant("EPIC.SECTION_NAME"),this.initializeEventHandlers(),y=this.loadInitialData(),y.then(function(t){return function(){return t._setMeta(),t.initializeOnDeleteGoToUrl()}}(this)),y.then(null,this.onInitialDataError.bind(this))}return p(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","tgResources","$routeParams","$q","$tgLocation","$log","tgAppMetaService","$tgAnalytics","$tgNavUrls","$translate","$tgQueueModelTransformation","tgErrorHandlingService","tgProjectService"],e.prototype._setMeta=function(){var t,e,r;return r=this.translate.instant("EPIC.PAGE_TITLE",{epicRef:"#"+this.scope.epic.ref,epicSubject:this.scope.epic.subject,projectName:this.scope.project.name}),t=this.translate.instant("EPIC.PAGE_DESCRIPTION",{epicStatus:(null!=(e=this.scope.statusById[this.scope.epic.status])?e.name:void 0)||"--",epicDescription:angular.element(this.scope.epic.description_html||"").text()}),this.appMetaService.setAll(r,t)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("attachment:create",function(t){return function(){return t.analytics.trackEvent("attachment","create","create attachment on epic",1)}}(this)),this.scope.$on("comment:new",function(t){return function(){return t.loadEpic()}}(this)),this.scope.$on("custom-attributes-values:edit",function(t){return function(){return t.rootscope.$broadcast("object:updated")}}(this))},e.prototype.initializeOnDeleteGoToUrl=function(){var t;return t={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-epics",t)},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.immutableProject=this.projectService.project,this.scope.$emit("project:loaded",t),this.scope.statusList=t.epic_statuses,this.scope.statusById=o(t.epic_statuses,function(t){return t.id}),t},e.prototype.loadEpic=function(){return this.rs.epics.getByRef(this.scope.projectId,this.params.epicref).then(function(t){return function(e){var r,n,i;if(t.scope.epic=e,t.scope.immutableEpic=Immutable.fromJS(e._attrs),t.scope.epicId=e.id,t.scope.commentModel=e,t.modelTransform.setObject(t.scope,"epic"),null!=(null!=(n=t.scope.epic.neighbors.previous)?n.ref:void 0)&&(r={project:t.scope.project.slug,ref:t.scope.epic.neighbors.previous.ref},t.scope.previousUrl=t.navUrls.resolve("project-epics-detail",r)),null!=(null!=(i=t.scope.epic.neighbors.next)?i.ref:void 0))return r={project:t.scope.project.slug,ref:t.scope.epic.neighbors.next.ref},t.scope.nextUrl=t.navUrls.resolve("project-epics-detail",r)}}(this))},e.prototype.loadUserstories=function(){return this.rs2.userstories.listInEpic(this.scope.epicId).then(function(t){return function(e){return t.scope.userstories=e}}(this))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.loadEpic().then(function(t){return function(){return t.loadUserstories()}}(this))},e.prototype.onUpvote=function(){var t,e;return e=function(t){return function(){return t.loadEpic(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.epics.upvote(this.scope.epicId).then(e,t)},e.prototype.onDownvote=function(){var t,e;return e=function(t){return function(){return t.loadEpic(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.epics.downvote(this.scope.epicId).then(e,t)},e.prototype.onWatch=function(){var t,e;return e=function(t){return function(){return t.loadEpic(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.epics.watch(this.scope.epicId).then(e,t)},e.prototype.onUnwatch=function(){var t,e;return e=function(t){return function(){return t.loadEpic(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.epics.unwatch(this.scope.epicId).then(e,t)},e.prototype.onSelectColor=function(t){var e,r,n;return r=function(t){return function(){return t.rootscope.$broadcast("object:updated"),t.confirm.notify("success")}}(this),e=function(t){return function(){return t.confirm.notify("error")}}(this),n=this.modelTransform.save(function(e){return e.color=t,e}),n.then(r,e)},e}(a(u.Controller,u.PageMixin)),c.controller("EpicDetailController",t),r=function(t,e){var r,n;return n=t.get("common/components/status-display.html",!0),r=function(t,r,i){var o;return o=function(i){var o,s;return s=t.statusById[i.status],o=n({is_closed:s.is_closed,status:s}),o=e(o)(t),r.html(o)},t.$watch(i.ngModel,function(t){if(null!=t)return o(t)}),t.$on("$destroy",function(){return r.off()})},{link:r,restrict:"EA",require:"ngModel"}},c.directive("tgEpicStatusDisplay",["$tgTemplate","$compile",r]),e=function(t,e,r,n,i,o,s,a){var c,u;return u=a.get("common/components/status-button.html",!0),c=function(e,s,a,c){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_epic")!==-1},p=function(t){return function(t){var r,n;return n=e.statusById[t.status],r=o(u({status:n,statuses:e.statusList,editable:l()}))(e),s.html(r)}}(this),d=function(e){var o,a,c,u;return o=n().target(s).start(),u=i.save(function(t){return t.status=e,t}),c=function(){return t.$broadcast("object:updated"),o.finish()},a=function(){return r.notify("error"),o.finish()},u.then(c,a)},s.on("click",".js-edit-status",function(t){if(t.preventDefault(),t.stopPropagation(),l())return s.find(".pop-status").popover().open()}),s.on("click",".status",function(t){var e;if(t.preventDefault(),t.stopPropagation(),l())return e=angular.element(t.currentTarget),$.fn.popover().closeAll(),d(e.data("status-id"))}),e.$watch(function(){var t;return null!=(t=c.$modelValue)?t.status:void 0},function(){var t;if(t=c.$modelValue)return p(t)}),e.$on("$destroy",function(){return s.off()})},{link:c,restrict:"EA",require:"ngModel"}},c.directive("tgEpicStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$compile","$translate","$tgTemplate",e])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v=function(t,e){function r(){this.constructor=t}for(var n in e)y.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},y={}.hasOwnProperty;g=this.taiga,d=this.taiga.mixOf,m=this.taiga.toString,p=this.taiga.joinStr,l=this.taiga.groupBy,u=this.taiga.bindOnce,c=this.taiga.bindMethods,h=this.taiga.normalizeString,f=angular.module("taigaIssues"),e=function(t){function e(t,e,r,n,i,o,s,a,u,l,p,d,f,h,g,m){var v;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.log=u,this.appMetaService=l,this.analytics=p,this.navUrls=d,this.translate=f,this.modelTransform=h,this.errorHandlingService=g,this.projectService=m,c(this),this.scope.issueRef=this.params.issueref,this.scope.sectionName=this.translate.instant("ISSUES.SECTION_NAME"),this.initializeEventHandlers(),v=this.loadInitialData(),v.then(function(t){return function(){return t._setMeta(),t.initializeOnDeleteGoToUrl()}}(this)),v.then(null,this.onInitialDataError.bind(this))}return v(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","tgAppMetaService","$tgAnalytics","$tgNavUrls","$translate","$tgQueueModelTransformation","tgErrorHandlingService","tgProjectService"],e.prototype._setMeta=function(){var t,e,r,n,i,o;return o=this.translate.instant("ISSUE.PAGE_TITLE",{issueRef:"#"+this.scope.issue.ref,issueSubject:this.scope.issue.subject,projectName:this.scope.project.name}),t=this.translate.instant("ISSUE.PAGE_DESCRIPTION",{issueStatus:(null!=(e=this.scope.statusById[this.scope.issue.status])?e.name:void 0)||"--",issueType:(null!=(r=this.scope.typeById[this.scope.issue.type])?r.name:void 0)||"--",issueSeverity:(null!=(n=this.scope.severityById[this.scope.issue.severity])?n.name:void 0)||"--",issuePriority:(null!=(i=this.scope.priorityById[this.scope.issue.priority])?i.name:void 0)||"--",issueDescription:angular.element(this.scope.issue.description_html||"").text()}),this.appMetaService.setAll(o,t)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("attachment:create",function(t){return function(){return t.analytics.trackEvent("attachment","create","create attachment on issue",1)}}(this)),this.scope.$on("promote-issue-to-us:success",function(t){return function(){return t.analytics.trackEvent("issue","promoteToUserstory","promote issue to userstory",1),t.rootscope.$broadcast("object:updated"),t.loadIssue()}}(this)),this.scope.$on("comment:new",function(t){return function(){return t.loadIssue()}}(this)),this.scope.$on("custom-attributes-values:edit",function(t){return function(){return t.rootscope.$broadcast("object:updated")}}(this)),this.scope.$on("assign-sprint-to-issue:success",function(t){return function(e,r){return t.scope.issue.milestone=r,t.rootscope.$broadcast("object:updated"),r?t.loadSprint():t.scope.sprint=null}}(this))},e.prototype.initializeOnDeleteGoToUrl=function(){var t;return t={project:this.scope.project.slug},this.scope.project.is_issues_activated?this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-issues",t):this.scope.onDeleteGoToUrl=this.navUrls.resolve("project",t)},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.statusList=t.issue_statuses,this.scope.statusById=l(t.issue_statuses,function(t){return t.id}),this.scope.typeById=l(t.issue_types,function(t){return t.id}),this.scope.typeList=_.sortBy(t.issue_types,"order"),this.scope.severityList=t.severities,this.scope.severityById=l(t.severities,function(t){return t.id}),this.scope.priorityList=t.priorities,this.scope.priorityById=l(t.priorities,function(t){return t.id}),t},e.prototype.loadIssue=function(){return this.rs.issues.getByRef(this.scope.projectId,this.params.issueref).then(function(t){return function(e){var r,n,i;if(t.scope.issue=e,t.scope.issueId=e.id,t.scope.commentModel=e,t.modelTransform.setObject(t.scope,"issue"),null!=(null!=(n=t.scope.issue.neighbors.previous)?n.ref:void 0)&&(r={project:t.scope.project.slug,ref:t.scope.issue.neighbors.previous.ref},t.scope.previousUrl=t.navUrls.resolve("project-issues-detail",r)),null!=(null!=(i=t.scope.issue.neighbors.next)?i.ref:void 0))return r={project:t.scope.project.slug,ref:t.scope.issue.neighbors.next.ref},t.scope.nextUrl=t.navUrls.resolve("project-issues-detail",r)}}(this))},e.prototype.loadSprint=function(){if(this.scope.issue.milestone)return this.rs.sprints.get(this.scope.issue.project,this.scope.issue.milestone).then(function(t){return function(e){return t.scope.sprint=e,e}}(this))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.loadIssue().then(function(t){return function(){return t.loadSprint()}}(this))},e.prototype.onUpvote=function(){var t,e;return e=function(t){return function(){return t.loadIssue(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.issues.upvote(this.scope.issueId).then(e,t)},e.prototype.onDownvote=function(){var t,e;return e=function(t){return function(){return t.loadIssue(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.issues.downvote(this.scope.issueId).then(e,t)},e.prototype.onWatch=function(){var t,e;return e=function(t){return function(){return t.loadIssue(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.issues.watch(this.scope.issueId).then(e,t)},e.prototype.onUnwatch=function(){var t,e;return e=function(t){return function(){return t.loadIssue(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.issues.unwatch(this.scope.issueId).then(e,t)},e}(d(g.Controller,g.PageMixin)),f.controller("IssueDetailController",e),o=function(t,e){var r,n;return n=t.get("common/components/status-display.html",!0),r=function(t,r,i){var o;return o=function(i){var o,s;return s=t.statusById[i.status],o=n({is_closed:s.is_closed,status:s}),o=e(o)(t),r.html(o)},t.$watch(i.ngModel,function(t){if(null!=t)return o(t)}),t.$on("$destroy",function(){return r.off()})},{link:r,restrict:"EA",require:"ngModel"}},f.directive("tgIssueStatusDisplay",["$tgTemplate","$compile",o]),i=function(t,e,r,n,i,o,s){var a,c;return c=o.get("common/components/status-button.html",!0),a=function(e,o,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_issue")!==-1},p=function(t){return function(t){var r,n;return n=e.statusById[t.status],r=c({status:n,statuses:e.statusList,editable:l()}),r=s(r)(e),o.html(r)}}(this),d=function(e){var s,a,c,u;return $.fn.popover().closeAll(),s=n().target(o).start(),u=i.save(function(t){return t.status=e,t}),c=function(){return t.$broadcast("object:updated"),s.finish()},a=function(){return r.notify("error"),s.finish()},u.then(c,a)},o.on("click",".js-edit-status",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-status").popover().open()}),o.on("click",".status",function(t){var e;if(t.preventDefault(),t.stopPropagation(),l())return e=angular.element(t.currentTarget),d(e.data("status-id"))}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.status:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},f.directive("tgIssueStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",i]),s=function(t,e,r,n,i,o,s){var a,c;return c=o.get("issue/issue-type-button.html",!0),a=function(e,o,a,u){var l,p,d,f;return p=e.$eval(a.notAutoSave),l=function(){return e.project.my_permissions.indexOf("modify_issue")!==-1},d=function(t){var r,n;return n=e.typeById[t.type],r=c({type:n,typees:e.typeList,editable:l()}),r=s(r)(e),o.html(r)},f=function(s){var a,c,l,d;return $.fn.popover().closeAll(),p?(u.$modelValue.type=s,void e.$apply()):(a=n().target(o.find(".level-name")).start(),d=i.save(function(t){return t.type=s,t}),l=function(){return t.$broadcast("object:updated"),a.finish()},c=function(){return r.notify("error"),a.finish()},d.then(l,c))},o.on("click",".type-data",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-type").popover().open()}),o.on("click",".type",function(t){var e,r;if(t.preventDefault(),t.stopPropagation(),l())return e=angular.element(t.currentTarget),r=e.data("type-id"),f(r)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.type:void 0},function(){var t;if(t=u.$modelValue)return d(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},f.directive("tgIssueTypeButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",s]),n=function(t,e,r,n,i,o,s){var a,c;return c=o.get("issue/issue-severity-button.html",!0),a=function(e,o,a,u){var l,p,d,f;return p=e.$eval(a.notAutoSave),l=function(){return e.project.my_permissions.indexOf("modify_issue")!==-1},d=function(t){var r,n;return n=e.severityById[t.severity],r=c({severity:n,severityes:e.severityList,editable:l()}),r=s(r)(e),o.html(r)},f=function(s){var a,c,l,d;return $.fn.popover().closeAll(),p?(u.$modelValue.severity=s,void e.$apply()):(a=n().target(o.find(".level-name")).start(),d=i.save(function(t){return t.severity=s,t}),l=function(){return t.$broadcast("object:updated"),a.finish()},c=function(){return r.notify("error"), -a.finish()},d.then(l,c))},o.on("click",".severity-data",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-severity").popover().open()}),o.on("click",".severity",function(t){var e,r;if(t.preventDefault(),t.stopPropagation(),l())return r=angular.element(t.currentTarget),e=r.data("severity-id"),f(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.severity:void 0},function(){var t;if(t=u.$modelValue)return d(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},f.directive("tgIssueSeverityButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",n]),r=function(t,e,r,n,i,o,s){var a,c;return c=o.get("issue/issue-priority-button.html",!0),a=function(e,o,a,u){var l,p,d,f;return p=e.$eval(a.notAutoSave),l=function(){return e.project.my_permissions.indexOf("modify_issue")!==-1},d=function(t){var r,n;return n=e.priorityById[t.priority],r=c({priority:n,priorityes:e.priorityList,editable:l()}),r=s(r)(e),o.html(r)},f=function(s){var a,c,l,d;return $.fn.popover().closeAll(),p?(u.$modelValue.priority=s,void e.$apply()):(a=n().target(o.find(".level-name")).start(),d=i.save(function(t){return t.priority=s,t}),l=function(){return t.$broadcast("object:updated"),a.finish()},c=function(){return r.notify("error"),a.finish()},d.then(l,c))},o.on("click",".priority-data",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-priority").popover().open()}),o.on("click",".priority",function(t){var e,r;if(t.preventDefault(),t.stopPropagation(),l())return r=angular.element(t.currentTarget),e=r.data("priority-id"),f(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.priority:void 0},function(){var t;if(t=u.$modelValue)return d(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},f.directive("tgIssuePriorityButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",r]),a=function(t,e,r,n){var i;return i=function(i,o,s,a){var c;return c=function(n){return function(n,i){var o,s,a;return o={generated_from_issue:n.id,project:n.project,subject:n.subject,description:n.description,tags:n.tags,is_blocked:n.is_blocked,blocked_note:n.blocked_note,due_date:n.due_date},a=function(){return i.finish(),r.notify("success"),t.$broadcast("promote-issue-to-us:success")},s=function(){return i.finish(),r.notify("error")},e.create("userstories",o).then(a,s)}}(this),o.on("click","a",function(t){var e,i,o,s;return t.preventDefault(),e=a.$modelValue,s=n.instant("ISSUES.CONFIRM_PROMOTE.TITLE"),i=n.instant("ISSUES.CONFIRM_PROMOTE.MESSAGE"),o=e.subject,r.ask(s,o,i).then(function(t){return function(t){return c(e,t)}}(this))}),i.$on("$destroy",function(){return o.off()})},{restrict:"AE",require:"ngModel",templateUrl:"issue/promote-issue-to-us-button.html",link:i}},f.directive("tgPromoteIssueToUsButton",["$rootScope","$tgRepo","$tgConfirm","$translate",a]),t=function(t,e,r,n,i,o,s,a){var c;return c=function(r,c,u,l){var p,d,f;return p=[],f=null,r.$watch(u.ngModel,function(t){if(t)return t.milestone?(c.find(".assign-issue-button.button-unset").removeClass("is-active"),c.find(".assign-issue-button.button-set").addClass("is-active")):(c.find(".assign-issue-button.button-set").removeClass("is-active"),c.find(".assign-issue-button.button-unset").addClass("is-active"))}),c.on("click",".assign-issue-button.button-unset",function(t){var n;return t.preventDefault(),t.stopPropagation(),n=i.instant("ISSUES.ACTION_ATTACH_SPRINT"),f=l.$modelValue,e.sprints.list(r.projectId,null).then(function(t){return r.milestones=t.milestones,r.selectedSprint=f.milestone,p=angular.copy(r.milestones),o.open(c.find(".lightbox-assign-sprint-to-issue"))})}),c.on("click",".assign-issue-button.button-set",function(n){return n.preventDefault(),n.stopPropagation(),f=l.$modelValue,e.sprints.list(r.projectId,null).then(function(e){var r,n,u;return r=_.find(e.milestones,{id:f.milestone}),u=i.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.TITLE"),n=i.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE",{sprintName:r.name}),a.ask(u,null,n).then(function(e){var r,n,i;return n=function(){return t.$broadcast("assign-sprint-to-issue:success",null),e.finish(),o.close(c)},r=function(){return e.finish(!1),a.notify("error")},i=s.save(function(t){return t.setAttr("milestone",null),t}),i.then(n,r)})})}),r.$on("$destroy",function(){return c.off()}),d=function(t,e){return e=h(e.toUpperCase()),t=h(t.toUpperCase()),_.includes(e,t)},r.filterMilestones=function(t){return r.milestones=p.filter(function(e){return d(t,e.name)})},r.saveIssueToSprint=function(e,r){var i,a;return i=n().target($(r.currentTarget)).start(),f.setAttr("milestone",e.id),a=s.save(function(t){return f.setAttr("milestone",e.id),t}),a.then(function(){return i.finish(),o.close(c.find(".lightbox-assign-sprint-to-issue")),t.$broadcast("assign-sprint-to-issue:success",e.id)})}},{link:c,restrict:"EA",require:"ngModel",templateUrl:"issue/assign-sprint-to-issue-button.html"}},f.directive("tgAssignSprintToIssueButton",["$rootScope","$tgResources","$tgRepo","$tgLoading","$translate","lightboxService","$tgQueueModelTransformation","$tgConfirm",t])}.call(this),function(){var t,e,r,n,i,o;i=this.taiga,e=this.taiga.bindOnce,r=this.taiga.debounce,o=this.taiga.trim,n=angular.module("taigaIssues"),t=function(t,e,n,i,o,s,a){var c;return c=function(t,c,u){var l,p,d;return l=null,t.$on("issueform:bulk",function(e,r,n,i){return l&&l.reset(),s.open(c),t["new"]={projectId:r,milestoneId:n,bulk:""}}),p=r(2e3,function(r){var u,p,f,h,g;if(r.preventDefault(),l=c.find("form").checksley(),l.validate())return u=o().target(d).start(),p=t["new"].bulk,h=t["new"].projectId,f=t["new"].milestoneId,g=e.issues.bulkCreate(h,f,p),g.then(function(t){return t=_.map(t.data,function(t){return a.make_model("issues",t)}),u.finish(),i.$broadcast("issueform:new:success",t),s.close(c),n.notify("success")}),g.then(null,function(){return u.finish(),n.notify("error")})}),d=c.find(".submit-button"),c.on("submit","form",p),t.$on("$destroy",function(){return c.off()})},{link:c}},n.directive("tgLbCreateBulkIssues",["$tgRepo","$tgResources","$tgConfirm","$rootScope","$tgLoading","lightboxService","$tgModel",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g=function(t,e){return function(){return t.apply(e,arguments)}},m=function(t,e){function r(){this.constructor=t}for(var n in e)v.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},v={}.hasOwnProperty;d=this.taiga,u=this.taiga.mixOf,h=this.taiga.trim,f=this.taiga.toString,c=this.taiga.joinStr,a=this.taiga.groupBy,o=this.taiga.bindOnce,s=this.taiga.debounceLeading,p=this.taiga.startswith,i=this.taiga.bindMethods,s=this.taiga.debounceLeading,l=angular.module("taigaIssues"),r=function(t){function e(t,e,r,n,o,s,a,c,u,l,p,d,f,h,m,v,y,_){var b;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=o,this.urls=s,this.params=a,this.q=c,this.location=u,this.appMetaService=l,this.navUrls=p,this.events=d,this.analytics=f,this.translate=h,this.errorHandlingService=m,this.storage=v,this.filterRemoteStorageService=y,this.projectService=_,this.loadIssues=g(this.loadIssues,this),i(this),this.scope.sectionName=this.translate.instant("PROJECT.SECTION.ISSUES"),this.voting=!1,this.applyStoredFilters(this.params.pslug,this.filtersHashSuffix)||(b=this.loadInitialData(),b.then(function(t){return function(){var e,r;return r=t.translate.instant("ISSUES.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.translate.instant("ISSUES.PAGE_DESCRIPTION",{projectName:t.scope.project.name,projectDescription:t.scope.project.description}),t.appMetaService.setAll(r,e)}}(this)),b.then(null,this.onInitialDataError.bind(this)),this.scope.$on("issueform:new:success",function(t){return function(){return t.analytics.trackEvent("issue","create","create issue on issues list",1),t.loadIssues()}}(this)),this.scope.$on("assigned-to:changed",function(t){return function(){if(t.generateFilters(),t.isFilterDataTypeSelected("assigned_to")||t.isFilterDataTypeSelected("role")||t.isOrderedBy("assigned_to")||t.isOrderedBy("modified"))return t.loadIssues()}}(this)),this.scope.$on("status:changed",function(t){return function(){if(t.generateFilters(),t.isFilterDataTypeSelected("status")||t.isOrderedBy("status")||t.isOrderedBy("modified"))return t.loadIssues()}}(this)))}return m(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$tgUrls","$routeParams","$q","$tgLocation","tgAppMetaService","$tgNavUrls","$tgEvents","$tgAnalytics","$translate","tgErrorHandlingService","$tgStorage","tgFilterRemoteStorageService","tgProjectService","tgUserActivityService"],e.prototype.filtersHashSuffix="issues-filters",e.prototype.myFiltersHashSuffix="issues-my-filters",e.prototype.isOrderedBy=function(t){var e;return e=new RegExp("-*"+t),e.test(this.location.search().order_by)},e.prototype.changeQ=function(t){return this.unselectFilter("page"),this.replaceFilter("q",t),this.loadIssues(),this.generateFilters()},e.prototype.removeFilter=function(t){return this.unselectFilter("page"),this.unselectFilter(t.dataType,t.id),this.loadIssues(),this.generateFilters()},e.prototype.addFilter=function(t){return this.unselectFilter("page"),this.selectFilter(t.category.dataType,t.filter.id),this.loadIssues(),this.generateFilters()},e.prototype.selectCustomFilter=function(t){var e;return e=this.location.search().order_by,e&&(t.filter.order_by=e),this.unselectFilter("page"),this.replaceAllFilters(t.filter),this.loadIssues(),this.generateFilters()},e.prototype.removeCustomFilter=function(t){return this.filterRemoteStorageService.getFilters(this.scope.projectId,this.myFiltersHashSuffix).then(function(e){return function(r){return delete r[t.id],e.filterRemoteStorageService.storeFilters(e.scope.projectId,r,e.myFiltersHashSuffix).then(e.generateFilters)}}(this))},e.prototype.isFilterDataTypeSelected=function(t){var e,r,n,i;for(i=this.selectedFilters,r=0,n=i.length;r0}),n=_.map(o.assigned_to,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.full_name||"Unassigned",t}),s=_.map(o.owners,function(t){return t.id=t.id.toString(),t.name=t.full_name,t}),c=_.map(o.roles,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.name||"Unassigned",t}),e.selectedFilters=[],t.status&&(u=e.formatSelectedFilters("status",p,t.status),e.selectedFilters=e.selectedFilters.concat(u)),t.tags&&(u=e.formatSelectedFilters("tags",d,t.tags),e.selectedFilters=e.selectedFilters.concat(u)),t.assigned_to&&(u=e.formatSelectedFilters("assigned_to",n,t.assigned_to),e.selectedFilters=e.selectedFilters.concat(u)),t.owner&&(u=e.formatSelectedFilters("owner",s,t.owner),e.selectedFilters=e.selectedFilters.concat(u)),t.type&&(u=e.formatSelectedFilters("type",h,t.type),e.selectedFilters=e.selectedFilters.concat(u)),t.severity&&(u=e.formatSelectedFilters("severity",l,t.severity),e.selectedFilters=e.selectedFilters.concat(u)),t.priority&&(u=e.formatSelectedFilters("priority",a,t.priority),e.selectedFilters=e.selectedFilters.concat(u)),t.role&&(u=e.formatSelectedFilters("role",c,t.role),e.selectedFilters=e.selectedFilters.concat(u)),e.filterQ=t.q,e.filters=[{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.TYPE"),dataType:"type",content:h},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.SEVERITY"),dataType:"severity",content:l},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.PRIORITIES"),dataType:"priority",content:a},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.STATUS"),dataType:"status",content:p},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.TAGS"),dataType:"tags",content:d,hideEmpty:!0,totalTaggedElements:f.length},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.ASSIGNED_TO"),dataType:"assigned_to",content:n},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.ROLE"),dataType:"role",content:c},{title:e.translate.instant("COMMON.FILTERS.CATEGORIES.CREATED_BY"),dataType:"owner",content:s}],e.customFilters=[],_.forOwn(i,function(t,r){return e.customFilters.push({id:r,name:r,filter:t})})}}(this))},e.prototype.initializeSubscription=function(){var t;return t="changes.project."+this.scope.projectId+".issues",this.events.subscribe(this.scope,t,s(500,function(t){return function(e){return t.loadIssues()}}(this)))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_issues_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.issueStatusById=a(t.issue_statuses,function(t){return t.id}),this.scope.issueStatusList=_.sortBy(t.issue_statuses,"order"),this.scope.severityById=a(t.severities,function(t){return t.id}),this.scope.severityList=_.sortBy(t.severities,"order"),this.scope.priorityById=a(t.priorities,function(t){return t.id}),this.scope.priorityList=_.sortBy(t.priorities,"order"),this.scope.issueTypes=_.sortBy(t.issue_types,"order"),this.scope.issueTypeById=a(t.issue_types,function(t){return t.id}),t},e.prototype.loadIssuesRequests=0,e.prototype.loadIssues=function(){var t,e;return t=this.location.search(),e=this.rs.issues.list(this.scope.projectId,t),this.loadIssuesRequests+=1,e.index=this.loadIssuesRequests,e.then(function(t){return function(r){return e.index===t.loadIssuesRequests&&(t.scope.issues=r.models,t.scope.page=r.current,t.scope.count=r.count,t.scope.paginatedBy=r.paginatedBy),r}}(this)),e},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.initializeSubscription(),this.generateFilters(),this.loadIssues()},e.prototype.addNewIssue=function(){var t;return t=this.projectService.project.toJS(),this.rootscope.$broadcast("genericform:new",{objType:"issue",project:t})},e.prototype.addIssuesInBulk=function(){return this.rootscope.$broadcast("issueform:bulk",this.scope.projectId)},e.prototype.upVoteIssue=function(t){var e,r;return this.voting=t,r=function(t){return function(){return t.loadIssues(),t.voting=null}}(this),e=function(t){return function(){return t.confirm.notify("error"),t.voting=null}}(this),this.rs.issues.upvote(t).then(r,e)},e.prototype.downVoteIssue=function(t){var e,r;return this.voting=t,r=function(t){return function(){return t.loadIssues(),t.voting=null}}(this),e=function(t){return function(){return t.confirm.notify("error"),t.voting=null}}(this),this.rs.issues.downvote(t).then(r,e)},e.prototype.getOrderBy=function(){return _.isString(this.location.search().order_by)?this.location.search().order_by:"created_date"},e}(u(d.Controller,d.PageMixin,d.FiltersMixin)),l.controller("IssuesController",r),n=function(t,e,r,n){var i,o,s,a;return a=r.get("issue/issue-paginator.html",!0),s=function(t,e,r,i){var o,s,c,u,l,p,d;return s=2,l=4,c=2,u=2,o=e.find(".issues-paginator"),p=function(){var e;return e=t.count/t.paginatedBy,e=parseInt(e,10)1,h.showNext=!(t.page===f),e=t.page,i=d=1,m=f;1<=m?d<=m:d>=m;i=1<=m?++d:--d)i===e+s&&f>e+s+u?g.push({classes:"dots",type:"dots"}):i===e-l&&e>c+l?g.push({classes:"dots",type:"dots"}):i>e+s&&i<=f-u||ic||(i===e?g.push({classes:"active",num:i,type:"page-active"}):g.push({classes:"page",num:i,type:"page"}));return r=a(h),r=n(r)(t),o.html(r)},t.$watch("issues",function(t){if(t)return d()}),e.on("click",".issues-paginator a.next",function(e){return e.preventDefault(),t.$apply(function(){return i.selectFilter("page",t.page+1),i.loadIssues()})}),e.on("click",".issues-paginator a.previous",function(e){return e.preventDefault(),t.$apply(function(){return i.selectFilter("page",t.page-1),i.loadIssues()})}),e.on("click",".issues-paginator li.page > a",function(e){var r,n;return e.preventDefault(),n=angular.element(e.currentTarget),r=n.data("pagenum"),t.$apply(function(){return i.selectFilter("page",r),i.loadIssues()})})},o=function(t,r,i,o){var s,a,c,u;return a=o.getOrderBy(),a&&(c=p(a,"-")?"icon-arrow-up":"icon-arrow-down",s=r.find(".row.title > div[data-fieldname='"+h(a,"-")+"']"),u=$("").attr("svg-icon",c),s.append(u),n(s.contents())(t)),r.on("click",".row.title > div",function(i){var s,l,d;return d=angular.element(i.currentTarget),a=o.getOrderBy(),l=d.data("fieldname"),"total_voters"===l&&"-total_voters"!==a&&(a="total_voters"),s=a===l?"-"+l:l,t.$apply(function(){return o.replaceFilter("order_by",s),o.storeFilters(o.params.pslug,e.search(),o.filtersHashSuffix),o.loadIssues().then(function(){return r.find(".row.title > div > tg-svg").remove(),c=p(s,"-")?"icon-arrow-up":"icon-arrow-down",u=$("").attr("svg-icon",c),d.append(u),n(d.contents())(t)})})})},i=function(t,e,r){var n;return n=e.controller(),o(t,e,r,n),s(t,e,r,n),t.$on("$destroy",function(){return e.off()})},{link:i}},l.directive("tgIssues",["$log","$tgLocation","$tgTemplate","$compile",n]),e=function(t,e,r){var n,i,o;return i=e.get("issue/issue-status-inline-edition-selection.html",!0),o=function(t,e,r){var n,i,o;if(i=t.find(".issue-status"),n=t.find(".issue-status .issue-status-bind"),o=r[e.status])return n.text(o.name),n.prop("title",o.name),i.css("color",o.color)},n=function(e,n,s){var a,c;return a=n.controller(),c=e.$eval(s.tgIssueStatusInlineEdition),n.on("click",".issue-status",function(t){return t.preventDefault(),t.stopPropagation(),n.find(".pop-status").popover().open()}),n.on("click",".status",function(i){var s;return i.preventDefault(),i.stopPropagation(),s=angular.element(i.currentTarget),c.status=s.data("status-id"),n.find(".pop-status").popover().close(),o(n,c,e.issueStatusById),e.$apply(function(){return t.save(c).then(function(t){return r.$broadcast("status:changed",t)})})}),d.bindOnce(e,"project",function(t){if(n.append(i({statuses:t.issue_statuses})),o(n,c,e.issueStatusById),t.my_permissions.indexOf("modify_issue")===-1)return n.unbind("click"),n.find("a").addClass("not-clickable")}),e.$watch(s.tgIssueStatusInlineEdition,function(t){return function(t){return o(n,t,e.issueStatusById)}}(this)),e.$on("$destroy",function(){return n.off()})},{link:n}},l.directive("tgIssueStatusInlineEdition",["$tgRepo","$tgTemplate","$rootScope",e]),t=function(t,e,r,n){var i,o;return o=_.template('<%- name %>\n
<%- name %>
'),i=function(i,s,a){var c,u,l;return l=function(t){var e,a,c;return a={name:r.instant("COMMON.ASSIGNED_TO.NOT_ASSIGNED"),imgurl:"/"+window._version+"/images/unnamed.png"},c=i.usersById[t.assigned_to],e=n.getAvatar(c),a.imgurl=e.url,a.bg=null,c&&(a.name=c.full_name_display,a.bg=e.bg),s.find(".avatar").html(o(a)),s.find(".issue-assignedto").attr("title",a.name)},c=s.controller(),u=i.$eval(a.tgIssueAssignedToInlineEdition),l(u),s.on("click",".issue-assignedto",function(t){return e.$broadcast("assigned-to:add",u)}),d.bindOnce(i,"project",function(t){if(t.my_permissions.indexOf("modify_issue")===-1)return s.unbind("click"),s.find("a").addClass("not-clickable")}),i.$on("assigned-to:added",function(r,n,i){if(i.id===u.id)return i.assigned_to=n,t.save(u).then(function(){return l(i),e.$broadcast("assigned-to:changed",i)})}),i.$watch(a.tgIssueAssignedToInlineEdition,function(t){return l(t)}),i.$on("$destroy",function(){return s.off()})},{link:i}},l.directive("tgIssueAssignedToInlineEdition",["$tgRepo","$rootScope","$translate","tgAvatarService",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p=function(t,e){function r(){this.constructor=t}for(var n in e)d.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},d={}.hasOwnProperty;l=this.taiga,c=this.taiga.mixOf,a=this.taiga.groupBy,s=this.taiga.bindOnce,o=this.taiga.bindMethods,u=angular.module("taigaUserStories"),i=function(t){function e(t,e,r,n,i,s,a,c,u,l,p,d,f,h,g,m,v,y){var _;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=s,this.q=a,this.location=c,this.log=u,this.appMetaService=l,this.navUrls=p,this.analytics=d,this.translate=f,this.modelTransform=h,this.errorHandlingService=g,this.configService=m,this.projectService=v,this.wysiwigService=y,o(this),this.scope.usRef=this.params.usref,this.scope.sectionName=this.translate.instant("US.SECTION_NAME"),this.scope.tribeEnabled=this.configService.config.tribeHost,this.initializeEventHandlers(),_=this.loadInitialData(),_.then(function(t){return function(){return t._setMeta(),t.initializeOnDeleteGoToUrl()}}(this)),_.then(null,this.onInitialDataError.bind(this))}return p(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","tgAppMetaService","$tgNavUrls","$tgAnalytics","$translate","$tgQueueModelTransformation","tgErrorHandlingService","$tgConfig","tgProjectService","tgWysiwygService"],e.prototype._setMeta=function(){var t,e,r,n,i,o;return o=this.scope.tasks.length,t=_.filter(this.scope.tasks,function(t){return function(e){return t.scope.taskStatusById[e.status].is_closed}}(this)).length,r=o>0?Math.round(100*t/o):0,i=this.translate.instant("US.PAGE_TITLE",{userStoryRef:"#"+this.scope.us.ref,userStorySubject:this.scope.us.subject,projectName:this.scope.project.name}),e=this.translate.instant("US.PAGE_DESCRIPTION",{userStoryStatus:(null!=(n=this.scope.statusById[this.scope.us.status])?n.name:void 0)||"--",userStoryPoints:this.scope.us.total_points,userStoryDescription:angular.element(this.wysiwigService.getHTML(this.scope.us.description)||"").text(),userStoryClosedTasks:t,userStoryTotalTasks:o,userStoryProgressPercentage:r}),this.appMetaService.setAll(i,e)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("related-tasks:update",function(t){return function(){var e;if(t.loadTasks(),t.scope.tasks=_.clone(t.scope.tasks,!1),e=_.every(t.scope.tasks,function(t){return t.is_closed}),t.scope.us.is_closed!==e)return t.loadUs()}}(this)),this.scope.$on("attachment:create",function(t){return function(){return t.analytics.trackEvent("attachment","create","create attachment on userstory",1)}}(this)),this.scope.$on("task:reorder",function(t){return function(e,r,n){return t.reorderTask(r,n)}}(this)),this.scope.$on("comment:new",function(t){return function(){return t.loadUs()}}(this))},e.prototype.initializeOnDeleteGoToUrl=function(){var t;return t={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.navUrls.resolve("project",t),this.scope.project.is_backlog_activated?this.scope.us.milestone?(t.sprint=this.scope.sprint.slug,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-taskboard",t)):this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-backlog",t):this.scope.project.is_kanban_activated?this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-kanban",t):void 0},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.statusList=t.us_statuses,this.scope.statusById=a(t.us_statuses,function(t){return t.id}),this.scope.taskStatusById=a(t.task_statuses,function(t){return t.id}),this.scope.pointsList=_.sortBy(t.points,"order"),this.scope.pointsById=a(this.scope.pointsList,function(t){return t.id}),t},e.prototype.loadUs=function(){var t,e,r,n;return t=_.pick(this.location.search(),"milestone","no-milestone","kanban-status"),r=t.milestone,r&&this.rs.userstories.storeQueryParams(this.scope.projectId,{milestone:r,order_by:"sprint_order"}),n=t["no-milestone"],n&&this.rs.userstories.storeQueryParams(this.scope.projectId,{milestone:"null",order_by:"backlog_order"}),e=t["kanban-status"],e&&this.rs.userstories.storeQueryParams(this.scope.projectId,{status:e,order_by:"kanban_order"}),this.rs.userstories.getByRef(this.scope.projectId,this.params.usref).then(function(t){return function(e){return t.scope.us=e,t.scope.usId=e.id,t.scope.commentModel=e,t.modelTransform.setObject(t.scope,"us"),e}}(this))},e.prototype.loadSprint=function(){if(this.scope.us.milestone)return this.rs.sprints.get(this.scope.us.project,this.scope.us.milestone).then(function(t){return function(e){return t.scope.sprint=e,e}}(this))},e.prototype.loadTasks=function(){return this.rs.tasks.list(this.scope.projectId,null,this.scope.usId).then(function(t){return function(e){return t.scope.tasks=e,e}}(this))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.loadUs().then(function(t){return function(){return t.q.all([t.loadSprint(),t.loadTasks()])}}(this))},e.prototype.onUpvote=function(){var t,e;return e=function(t){return function(){return t.loadUs(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.userstories.upvote(this.scope.usId).then(e,t)},e.prototype.onDownvote=function(){var t,e;return e=function(t){return function(){return t.loadUs(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.userstories.downvote(this.scope.usId).then(e,t)},e.prototype.onWatch=function(){var t,e;return e=function(t){return function(){return t.loadUs(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.userstories.watch(this.scope.usId).then(e,t)},e.prototype.onUnwatch=function(){var t,e;return e=function(t){return function(){return t.loadUs(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.userstories.unwatch(this.scope.usId).then(e,t)},e.prototype.onTribeInfo=function(){var t,e,r,n;return r=this.translate.instant("US.TRIBE.PUBLISH_MORE_INFO_TITLE"),t=$("").attr({src:"/"+window._version+"/images/monster-fight.png",alt:this.translate.instant("US.TRIBE.PUBLISH_MORE_INFO_TITLE")}),n=this.translate.instant("US.TRIBE.PUBLISH_MORE_INFO_TEXT"),e=$("
").append(t).append(n),this.confirm.success(r,e)},e.prototype.reorderTask=function(t,e){var r,n,i,o,s,a,c,u,l;return s={},this.scope.tasks.forEach(function(t){return s[t.id]=t.us_order}),l=this.scope.tasks.filter(function(e){return e.id!==t.id}),n=l.slice(0,e),r=l.slice(e),a=n[n.length-1],o=a?a.us_order+1:0,s[t.id]=o,c=n.filter(function(t){return t.us_order===a.us_order}),u=_.fromPairs(c.map(function(t){return[t.id,t.us_order]})),r.forEach(function(t){return s[t.id]=t.us_order+1}),this.scope.tasks=_.map(this.scope.tasks,function(t){return t.us_order=s[t.id],t}),this.scope.tasks=_.sortBy(this.scope.tasks,"us_order"),i={us_order:o,version:t.version},this.rs.tasks.reorder(t.id,i,u).then(function(t){return function(e){return t.scope.tasks=_.map(t.scope.tasks,function(t){return t.id===e.id?e:t}),t.rootscope.$broadcast("related-tasks:reordered")}}(this))},e}(c(l.Controller,l.PageMixin)),u.controller("UserStoryDetailController",i),r=function(t,e){var r,n;return n=t.get("common/components/status-display.html",!0),r=function(t,r,i){var o;return o=function(i){var o,s;return s=t.statusById[i.status],o=n({is_closed:i.is_closed,status:s}),o=e(o)(t),r.html(o)},t.$watch(i.ngModel,function(t){if(null!=t)return o(t)}),t.$on("$destroy",function(){return r.off()})},{link:r,restrict:"EA",require:"ngModel"}},u.directive("tgUsStatusDisplay",["$tgTemplate","$compile",r]),e=function(t,e,r,n,i,o,s){var a,c;return c=o.get("common/components/status-button.html",!0),a=function(e,o,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_us")!==-1},p=function(t){return function(t){var r,n;return n=e.statusById[t.status],r=c({status:n,statuses:e.statusList,editable:l()}),o.html(r),s(o.contents())(e)}}(this),d=function(e){return function(e){var s,a,c,u;return o.find(".pop-status").popover().close(),s=n().target(o.find(".js-edit-status")).start(),u=i.save(function(t){return t.status=e,t}),c=function(){return t.$broadcast("object:updated"),s.finish()},a=function(){return r.notify("error"),s.finish()},u.then(c,a)}}(this),o.on("click",".js-edit-status",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-status").popover().open()}),o.on("click",".status",function(t){var e,r;if(t.preventDefault(),t.stopPropagation(),l())return r=angular.element(t.currentTarget),e=r.data("status-id"),d(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.status:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},u.directive("tgUsStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",e]),n=function(t,e,r,n,i,o,s){var a,c;return c=o.get("us/us-team-requirement-button.html",!0),a=function(e,o,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_us")!==-1},p=function(t){var r,n;return r={canEdit:l(),isRequired:t.team_requirement},n=c(r),n=s(n)(e),o.html(n)},d=function(e){var s,a;return s=n().target(o.find("label")).start(),a=i.save(function(t){return t.team_requirement=e,t}),a.then(function(e){return function(){return s.finish(),t.$broadcast("object:updated")}}(this)),a.then(null,function(){return s.finish(),r.notify("error")})},o.on("click",".team-requirement",function(t){var e;if(l())return e=!u.$modelValue.team_requirement,d(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.team_requirement:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},u.directive("tgUsTeamRequirementButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",n]),t=function(t,e,r,n,i,o,s){var a,c;return c=o.get("us/us-client-requirement-button.html",!0),a=function(e,o,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_us")!==-1},p=function(t){var r,n;return r={canEdit:l(),isRequired:t.client_requirement},n=s(c(r))(e),o.html(n)},d=function(e){var s,a;return s=n().target(o.find("label")).start(),a=i.save(function(t){return t.client_requirement=e,t}),a.then(function(e){return function(){return s.finish(),t.$broadcast("object:updated")}}(this)),a.then(null,function(){return r.notify("error")})},o.on("click",".client-requirement",function(t){var e;if(l())return e=!u.$modelValue.client_requirement,d(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.client_requirement:void 0; -},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},u.directive("tgUsClientRequirementButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u=function(t,e){function r(){this.constructor=t}for(var n in e)l.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},l={}.hasOwnProperty;c=this.taiga,s=this.taiga.mixOf,o=this.taiga.groupBy,i=this.taiga.bindMethods,a=angular.module("taigaTasks"),t=function(t){function e(t,e,r,n,o,s,a,c,u,l,p,d,f,h,g,m){var v;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=o,this.params=s,this.q=a,this.location=c,this.log=u,this.appMetaService=l,this.navUrls=p,this.analytics=d,this.translate=f,this.modelTransform=h,this.errorHandlingService=g,this.projectService=m,i(this),this.scope.taskRef=this.params.taskref,this.scope.sectionName=this.translate.instant("TASK.SECTION_NAME"),this.initializeEventHandlers(),v=this.loadInitialData(),v.then(function(t){return function(){return t._setMeta(),t.initializeOnDeleteGoToUrl()}}(this)),v.then(null,this.onInitialDataError.bind(this))}return u(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","tgAppMetaService","$tgNavUrls","$tgAnalytics","$translate","$tgQueueModelTransformation","tgErrorHandlingService","tgProjectService"],e.prototype._setMeta=function(){var t,e,r;return r=this.translate.instant("TASK.PAGE_TITLE",{taskRef:"#"+this.scope.task.ref,taskSubject:this.scope.task.subject,projectName:this.scope.project.name}),t=this.translate.instant("TASK.PAGE_DESCRIPTION",{taskStatus:(null!=(e=this.scope.statusById[this.scope.task.status])?e.name:void 0)||"--",taskDescription:angular.element(this.scope.task.description_html||"").text()}),this.appMetaService.setAll(r,t)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("attachment:create",function(t){return function(){return t.analytics.trackEvent("attachment","create","create attachment on task",1)}}(this)),this.scope.$on("custom-attributes-values:edit",function(t){return function(){return t.rootscope.$broadcast("object:updated")}}(this)),this.scope.$on("comment:new",function(t){return function(){return t.loadTask()}}(this))},e.prototype.initializeOnDeleteGoToUrl=function(){var t;if(t={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.navUrls.resolve("project",t),this.scope.project.is_backlog_activated){if(this.scope.task.milestone)return t.sprint=this.scope.sprint.slug,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-taskboard",t);if(this.scope.task.us)return t.ref=this.scope.us.ref,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-userstories-detail",t)}else if(this.scope.project.is_kanban_activated&&this.scope.us)return t.ref=this.scope.us.ref,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-userstories-detail",t)},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.statusList=t.task_statuses,this.scope.statusById=o(t.task_statuses,function(t){return t.id}),t},e.prototype.loadTask=function(){return this.rs.tasks.getByRef(this.scope.projectId,this.params.taskref).then(function(t){return function(e){var r,n,i;return t.scope.task=e,t.scope.taskId=e.id,t.scope.commentModel=e,t.modelTransform.setObject(t.scope,"task"),null!=(null!=(n=t.scope.task.neighbors.previous)?n.ref:void 0)&&(r={project:t.scope.project.slug,ref:t.scope.task.neighbors.previous.ref},t.scope.previousUrl=t.navUrls.resolve("project-tasks-detail",r)),null!=(null!=(i=t.scope.task.neighbors.next)?i.ref:void 0)&&(r={project:t.scope.project.slug,ref:t.scope.task.neighbors.next.ref},t.scope.nextUrl=t.navUrls.resolve("project-tasks-detail",r)),e}}(this))},e.prototype.loadSprint=function(){if(this.scope.task.milestone)return this.rs.sprints.get(this.scope.task.project,this.scope.task.milestone).then(function(t){return function(e){return t.scope.sprint=e,e}}(this))},e.prototype.loadUserStory=function(){if(this.scope.task.user_story)return this.rs.userstories.get(this.scope.task.project,this.scope.task.user_story).then(function(t){return function(e){return t.scope.us=e,e}}(this))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.loadTask().then(function(t){return function(){return t.q.all([t.loadSprint(),t.loadUserStory()])}}(this))},e.prototype.onUpvote=function(){var t,e;return e=function(t){return function(){return t.loadTask(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.tasks.upvote(this.scope.taskId).then(e,t)},e.prototype.onDownvote=function(){var t,e;return e=function(t){return function(){return t.loadTask(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.tasks.downvote(this.scope.taskId).then(e,t)},e.prototype.onWatch=function(){var t,e;return e=function(t){return function(){return t.loadTask(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.tasks.watch(this.scope.taskId).then(e,t)},e.prototype.onUnwatch=function(){var t,e;return e=function(t){return function(){return t.loadTask(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.tasks.unwatch(this.scope.taskId).then(e,t)},e}(s(c.Controller,c.PageMixin)),a.controller("TaskDetailController",t),n=function(t,e){var r,n;return n=t.get("common/components/status-display.html",!0),r=function(t,r,i){var o;return o=function(i){var o,s;return s=t.statusById[i.status],o=n({is_closed:s.is_closed,status:s}),o=e(o)(t),r.html(o)},t.$watch(i.ngModel,function(t){if(null!=t)return o(t)}),t.$on("$destroy",function(){return r.off()})},{link:r,restrict:"EA",require:"ngModel"}},a.directive("tgTaskStatusDisplay",["$tgTemplate","$compile",n]),r=function(t,e,r,n,i,o,s,a){var c,u;return u=a.get("common/components/status-button.html",!0),c=function(e,s,a,c){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_task")!==-1},p=function(t){return function(t){var r,n;return n=e.statusById[t.status],r=o(u({status:n,statuses:e.statusList,editable:l()}))(e),s.html(r)}}(this),d=function(e){var o,a,c,u;return o=n().target(s).start(),u=i.save(function(t){return t.status=e,t}),c=function(){return t.$broadcast("object:updated"),o.finish()},a=function(){return r.notify("error"),o.finish()},u.then(c,a)},s.on("click",".js-edit-status",function(t){if(t.preventDefault(),t.stopPropagation(),l())return s.find(".pop-status").popover().open()}),s.on("click",".status",function(t){var e;if(t.preventDefault(),t.stopPropagation(),l())return e=angular.element(t.currentTarget),$.fn.popover().closeAll(),d(e.data("status-id"))}),e.$watch(function(){var t;return null!=(t=c.$modelValue)?t.status:void 0},function(){var t;if(t=c.$modelValue)return p(t)}),e.$on("$destroy",function(){return s.off()})},{link:c,restrict:"EA",require:"ngModel"}},a.directive("tgTaskStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$compile","$translate","$tgTemplate",r]),e=function(t,e,r,n,i,o,s){var a,c;return c=s.get("issue/iocaine-button.html",!0),a=function(e,s,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_task")!==-1},p=function(t){var r,n;return l()||t.is_iocaine?(r={isIocaine:t.is_iocaine,isEditable:l()},n=o(c(r))(e),s.html(n)):void s.html("")},d=function(e){var o,a;return o=n().target(s.find("label")).start(),a=i.save(function(t){return t.is_iocaine=e,t}),a.then(function(){return t.$broadcast("object:updated")}),a.then(null,function(){return r.notify("error")}),a["finally"](function(){return o.finish()})},s.on("click",".is-iocaine",function(t){var e;if(l())return e=!u.$modelValue.is_iocaine,d(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.is_iocaine:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return s.off()})},{link:a,restrict:"EA",require:"ngModel"}},a.directive("tgTaskIsIocaineButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$compile","$tgTemplate",e])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l=function(t,e){function r(){this.constructor=t}for(var n in e)p.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},p={}.hasOwnProperty;u=this.taiga,a=this.taiga.mixOf,c=angular.module("taigaTeam"),e=function(t){function e(t,e,r,n,i,o,s,a,c,u,l,p,d){var f;this.scope=t,this.rootscope=e,this.repo=r,this.rs=n,this.params=i,this.q=o,this.location=s,this.navUrls=a,this.appMetaService=c,this.auth=u,this.translate=l,this.projectService=p,this.errorHandlingService=d,this.scope.sectionName="TEAM.SECTION_NAME",f=this.loadInitialData(),f.then(function(t){return function(){var e,r;return r=t.translate.instant("TEAM.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.translate.instant("TEAM.PAGE_DESCRIPTION",{projectName:t.scope.project.name,projectDescription:t.scope.project.description}),t.appMetaService.setAll(r,e)}}(this)),f.then(null,this.onInitialDataError.bind(this))}return l(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgResources","$routeParams","$q","$location","$tgNavUrls","tgAppMetaService","$tgAuth","$translate","tgProjectService","tgErrorHandlingService"],e.prototype.setRole=function(t){return t?this.scope.filtersRole=t:this.scope.filtersRole=null},e.prototype.loadMembers=function(){var t,e,r,n,i;for(i=this.auth.getUser(),this.scope.totals={},n=this.scope.activeUsers,t=0,e=n.length;t=0)})}},c.filter("membersFilter",s)}.call(this),function(){var t,e,r,n,i,o,s,a,c,u=function(t,e){return function(){return t.apply(e,arguments)}},l=function(t,e){function r(){this.constructor=t}for(var n in e)p.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},p={}.hasOwnProperty;c=this.taiga,s=this.taiga.mixOf,o=this.taiga.groupBy,n=this.taiga.bindOnce,i=this.taiga.debounce,a=angular.module("taigaWiki"),t=function(t){function e(t,e,r,n,i,o,s,a,c,l,p,d,f,h,g,m,v){var y;this.scope=t,this.rootscope=e,this.repo=r,this.model=n,this.confirm=i,this.rs=o,this.params=s,this.q=a,this.location=c,this.filter=l,this.log=p,this.appMetaService=d,this.navUrls=f,this.analytics=h,this.translate=g,this.errorHandlingService=m,this.projectService=v,this.moveLink=u(this.moveLink,this),this.loadWiki=u(this.loadWiki,this),this.scope.$on("wiki:links:move",this.moveLink),this.scope.$on("wikipage:add",this.loadWiki),this.scope.projectSlug=this.params.pslug,this.scope.wikiSlug=this.params.slug,this.scope.sectionName="Wiki",this.scope.linksVisible=!1,y=this.loadInitialData(),y.then(function(t){return function(){return t._setMeta()}}(this)),y.then(null,this.onInitialDataError.bind(this))}return l(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgModel","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$filter","$log","tgAppMetaService","$tgNavUrls","$tgAnalytics","$translate","tgErrorHandlingService","tgProjectService"],e.prototype._setMeta=function(){var t,e,r,n,i;return i=this.translate.instant("WIKI.PAGE_TITLE",{wikiPageName:this.scope.wikiSlug,projectName:this.scope.project.name}),t=this.translate.instant("WIKI.PAGE_DESCRIPTION",{wikiPageContent:angular.element((null!=(e=this.scope.wiki)?e.html:void 0)||"").text(),totalEditions:(null!=(r=this.scope.wiki)?r.editions:void 0)||0,lastModifiedDate:moment(null!=(n=this.scope.wiki)?n.modified_date:void 0).format(this.translate.instant("WIKI.DATETIME"))}),this.appMetaService.setAll(i,t)},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_wiki_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadWiki=function(){var t;return t=this.rs.wiki.getBySlug(this.scope.projectId,this.params.slug),t.then(function(t){return function(e){return t.scope.wiki=e,t.scope.wikiId=e.id,t.scope.wiki}}(this)),t.then(null,function(t){return function(e){var r;return t.scope.wikiId=null,t.scope.project.my_permissions.indexOf("add_wiki_page")===-1?null:(r={project:t.scope.projectId,slug:t.scope.wikiSlug,content:""},t.scope.wiki=t.model.make_model("wiki",r),t.scope.wiki)}}(this))},e.prototype.loadWikiLinks=function(){return this.rs.wiki.listLinks(this.scope.projectId).then(function(t){return function(e){var r,n,i,o,s;for(t.scope.wikiLinks=e,o=t.scope.wikiLinks,r=0,n=o.length;r\n \n \n\n
\n\n \n {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}}\n \n"}},a.directive("tgWikiWysiwyg",["$tgQueueModelTransformation","$rootScope","$tgConfirm","tgAttachmentsFullService","$tgQqueue","$tgRepo","$tgAnalytics","tgActivityService",r])}.call(this),function(){var t,e,r,n,i,o;o=this.taiga,n=this.taiga.mixOf,r=this.taiga.groupBy,e=this.taiga.bindOnce,i=angular.module("taigaWiki"),t=function(t,r,n,i,o,s,a,c,u){var l,p,d;return d=a.get("wiki/wiki-nav.html",!0),p=function(n,a,l){var p,f,h,g;return p=a.controller(),null==l.ngModel?r.error("WikiNavDirective: no ng-model attr is defined"):(f=n.project.my_permissions.indexOf("add_wiki_link")>-1,h=null,g=function(e){var r,l,m,v,y;return f=n.project.my_permissions.indexOf("add_wiki_link")>-1,r=n.project.my_permissions.indexOf("delete_wiki_link")>-1,l=d({wikiLinks:e,projectSlug:n.projectSlug,addWikiLinkPermission:f,deleteWikiLinkPermission:r}),l=c(l)(n),a.off(),f&&h&&h.destroy(),a.html(l),f&&(m=null,y=a.find(".sortable"),h=dragula([y[0]],{direction:"vertical",copySortSource:!1,copy:!1,mirrorContainer:y[0],moves:function(t){return $(t).is("li")}}),h.on("dragend",function(t){var e;return m=$(t),t=m.scope().link,e=m.index(),n.$emit("wiki:links:move",t,e)}),v=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&h.dragging}})),a.on("click",".add-button",function(t){return t.preventDefault(),a.find(".new").removeClass("hidden"),a.find(".new input").focus(),a.find(".add-button").hide()}),a.on("click",".js-delete-link",function(e){var r,o,s,a;return e.preventDefault(),e.stopPropagation(),s=angular.element(e.currentTarget),r=s.parents(".wiki-link").data("id"),a=u.instant("WIKI.DELETE_LINK_TITLE"),o=n.wikiLinks[r].title,i.askOnDelete(a,o).then(function(e){return function(e){var o;return o=t.remove(n.wikiLinks[r]),o.then(function(){return o=p.loadWikiLinks(),o.then(function(){return e.finish(),g(n.wikiLinks)}),o.then(null,function(){return e.finish()})}),o.then(null,function(){return e.finish(!1),i.notify("error")})}}(this))}),a.on("keyup",".new input",function(e){var r,c,u,l;return e.preventDefault(),13===e.keyCode?(l=angular.element(e.currentTarget),c=l.val(),r=s().target(a.find(".new")).start(),u=t.create("wiki-links",{project:n.projectId,title:c}),u.then(function(){var t;return o.trackEvent("wikilink","create","create wiki link",1),t=p.loadWikiLinks(),t.then(function(){return r.finish(),a.find(".new").addClass("hidden"),a.find(".new input").val(""),a.find(".add-button").show(),g(n.wikiLinks)}),t.then(null,function(){return r.finish(),a.find(".new").addClass("hidden"),a.find(".new input").val(""),a.find(".add-button").show(),i.notify("error","Error loading wiki links")})}),u.then(null,function(t){var e;return r.finish(),a.find(".new input").val(c),a.find(".new input").focus().select(),null!=(null!=t&&null!=(e=t.__all__)?e[0]:void 0)?i.notify("error","The link already exists"):i.notify("error")})):27===e.keyCode?(l=angular.element(e.currentTarget),a.find(".new").addClass("hidden"),a.find(".new input").val(""),a.find(".add-button").show()):void 0})},e(n,l.ngModel,g))},l=function(t,e,r){return p(t,e,r),t.$on("$destroy",function(){return e.off()})},{link:l}},i.directive("tgWikiNav",["$tgRepo","$log","$tgLocation","$tgConfirm","$tgAnalytics","$tgLoading","$tgTemplate","$compile","$translate",t])}.call(this),function(){var t,e,r,n,i=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;n=this.taiga,e=this.taiga.mixOf,r=angular.module("taigaWiki"),t=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){var p;this.scope=t,this.rootscope=e,this.repo=r,this.model=n,this.confirm=i,this.rs=o,this.params=s,this.q=a,this.navUrls=c,this.errorHandlingService=u,this.projectService=l,this.scope.projectSlug=this.params.pslug,this.scope.wikiSlug=this.params.slug,this.scope.sectionName="Wiki",this.scope.linksVisible=!1,p=this.loadInitialData(),p.then(null,this.onInitialDataError.bind(this))}return i(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgModel","$tgConfirm","$tgResources","$routeParams","$q","$tgNavUrls","tgErrorHandlingService","tgProjectService"],e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_wiki_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadWikiPages=function(){var t;return t=this.rs.wiki.list(this.scope.projectId).then(function(t){return function(e){return t.scope.wikipages=e}}(this))},e.prototype.loadWikiLinks=function(){return this.rs.wiki.listLinks(this.scope.projectId).then(function(t){return function(e){var r,n,i,o,s;for(t.scope.wikiLinks=e,o=t.scope.wikiLinks,r=0,n=o.length;rt.total_memberships,this.scope.$emit("project:loaded",t),t},e.prototype.loadMembers=function(){var t;return t=this.getUrlFilters(),this.rs.memberships.list(this.scope.projectId,t).then(function(t){return function(e){return t.scope.memberships=_.filter(e.models,function(t){return null===t.user||t.is_user_active}),_.map(t.scope.memberships,function(e){if(e.is_owner)return t.scope.projectOwnerEmail=e.user_email}),t.scope.page=e.current,t.scope.count=e.count,t.scope.paginatedBy=e.paginatedBy,e}}(this))},e.prototype.loadInitialData=function(){return this.loadProject(),this.q.all([this.loadMembers(),this.auth.refresh()])},e.prototype.getUrlFilters=function(){var t;return t=_.pick(this.location.search(),"page"),t.page||(t.page=1),t},e.prototype.addNewMembers=function(){return this.lightboxFactory.create("tg-lb-add-members",{"class":"lightbox lightbox-add-member",project:"project"},{project:this.scope.project})},e.prototype.showLimitUsersWarningMessage=function(){var t,e,r;return r=this.translate.instant("ADMIN.MEMBERSHIPS.LIMIT_USERS_WARNING"),e=this.translate.instant("ADMIN.MEMBERSHIPS.LIMIT_USERS_WARNING_MESSAGE",{members:this.scope.project.max_memberships}),t="/"+window._version+"/svg/icons/team-question.svg",this.confirm.success(r,e,{name:t,type:"img"})},e}(c(l.Controller,l.PageMixin,l.FiltersMixin)),u.controller("MembershipsController",t),e=function(t,e){var r,n,i;return i=t.get("admin/admin-membership-paginator.html",!0),n=function(t,r,n,o){var s,a,c,u,l,p,d;return a=2,l=4,c=2,u=2,s=r.find(".memberships-paginator"),p=function(){var e;return e=t.count/t.paginatedBy,e=parseInt(e,10)1, -h.showNext=!(t.page===f),r=t.page,o=d=1,m=f;1<=m?d<=m:d>=m;o=1<=m?++d:--d)o===r+a&&f>r+a+u?g.push({classes:"dots",type:"dots"}):o===r-l&&r>c+l?g.push({classes:"dots",type:"dots"}):o>r+a&&o<=f-u||oc||(o===r?g.push({classes:"active",num:o,type:"page-active"}):g.push({classes:"page",num:o,type:"page"}));return n=i(h),n=e(n)(t),s.html(n),s.show()},t.$watch("memberships",function(t){if(t)return d()}),r.on("click",".memberships-paginator a.next",function(e){return e.preventDefault(),t.$apply(function(){return o.selectFilter("page",t.page+1),o.loadMembers()})}),r.on("click",".memberships-paginator a.previous",function(e){return e.preventDefault(),t.$apply(function(){return o.selectFilter("page",t.page-1),o.loadMembers()})}),r.on("click",".memberships-paginator li.page > a",function(e){var r,n;return e.preventDefault(),n=angular.element(e.currentTarget),r=n.data("pagenum"),t.$apply(function(){return o.selectFilter("page",r),o.loadMembers()})})},r=function(t,e,r){var i;return i=e.controller(),n(t,e,r,i),t.$on("$destroy",function(){return e.off()})},{link:r}},u.directive("tgMemberships",["$tgTemplate","$compile",e]),i=function(t,e,r,n,i){var o,s;return s=e.get("admin/memberships-row-avatar.html",!0),o=function(e,o,a){var c,u,l;return u=r.instant("ADMIN.MEMBERSHIP.STATUS_PENDING"),l=function(t){var r,a,c;return r=i.getAvatar(t),a={full_name:t.full_name?t.full_name:"",email:t.user_email?t.user_email:t.email,imgurl:r.url,bg:r.bg,pending:t.is_user_active?"":u,isOwner:t.is_owner},c=s(a),c=n(c)(e),o.html(c)},null==a.tgMembershipsRowAvatar?t.error("MembershipsRowAvatarDirective: the directive need a member"):(c=e.$eval(a.tgMembershipsRowAvatar),l(c),e.$on("$destroy",function(){return o.off()}))},{link:o}},u.directive("tgMembershipsRowAvatar",["$log","$tgTemplate","$translate","$compile","tgAvatarService",i]),n=function(t,e,r,n,i){var o,s;return s=n.get("admin/admin-memberships-row-checkbox.html",!0),o=function(n,o,a){var c,u,l;return n.$on("$destroy",function(){return o.off()}),null==a.tgMembershipsRowAdminCheckbox?t.error("MembershipsRowAdminCheckboxDirective: the directive need a member"):(u=n.$eval(a.tgMembershipsRowAdminCheckbox),u.is_owner?void o.find(".js-check").remove():(l=function(t){var e,r;return e={inputId:"is-admin-"+t.id},r=s(e),r=i(r)(n),o.html(r)},o.on("click",":checkbox",function(t){return function(t){var n,i,s;return i=function(){return r.notify("success")},n=function(t){return u.revert(),o.find(":checkbox").prop("checked",u.is_admin),r.notify("error",t.is_admin[0])},s=angular.element(t.currentTarget),u.is_admin=s.prop("checked"),e.save(u).then(i,n)}}(this)),c=l(u),u.is_admin?o.find(":checkbox").prop("checked",!0):void 0))},{link:o}},u.directive("tgMembershipsRowAdminCheckbox",["$log","$tgRepo","$tgConfirm","$tgTemplate","$compile",n]),o=function(t,e,r){var n,i;return i=_.template(''),n=function(n,o,s){var a,c,u,l;return l=function(t){var e,r;return e={roleList:n.project.roles,selectedRole:t.role},r=i(e),o.html(r)},null==s.tgMembershipsRowRoleSelector?t.error("MembershipsRowRoleSelectorDirective: the directive need a member"):(a=o.controller(),u=n.$eval(s.tgMembershipsRowRoleSelector),c=l(u),o.on("change","select",function(t){return function(t){var n,i,o,s;if(o=function(){return r.notify("success")},i=function(){return r.notify("error")},s=angular.element(t.currentTarget),n=parseInt(s.val(),10),u.role!==n)return u.role=n,e.save(u).then(o,i)}}(this)),n.$on("$destroy",function(){return o.off()}))},{link:n}},u.directive("tgMembershipsRowRoleSelector",["$log","$tgRepo","$tgConfirm",o]),r=function(t,e,r,n,i,o,s,a,c,u){var l,p,d;return l='
\n
\n\n \n',d='\n\n\n \n',p=function(p,f,h){var g,m,v,y;return y=function(t){var e;return e=t.user?i(l)(p):i(d)(p),f.html(e)},null==h.tgMembershipsRowActions?t.error("MembershipsRowActionsDirective: the directive need a member"):(g=f.controller(),v=p.$eval(h.tgMembershipsRowActions),y(v),f.on("click",".js-resend",function(t){var e,i;return t.preventDefault(),i=function(){var t;return t=o.instant("ADMIN.MEMBERSHIP.SUCCESS_SEND_INVITATION",{email:p.member.email}),n.notify("success",t)},e=function(){var t;return t=o.instant("ADMIM.MEMBERSHIP.ERROR_SEND_INVITATION"),n.notify("error",t)},r.memberships.resendInvitation(p.member.id).then(i,e)}),m=function(){var t,r,i;return i=o.instant("ADMIN.MEMBERSHIP.DELETE_MEMBER"),t=o.instant("ADMIN.MEMBERSHIP.DEFAULT_DELETE_MESSAGE",{email:v.email}),r=v.user?v.full_name:t,n.askOnDelete(i,r).then(function(t){var i,c;return c=function(e){return function(){var e;return t.finish(),v.user!==p.user.id?(p.page>1&&p.count-1<=p.paginatedBy&&g.selectFilter("page",p.page-1),u.fetchProject().then(function(){return g.loadInitialData()})):s.path(a.resolve("home")),e=o.instant("ADMIN.MEMBERSHIP.SUCCESS_DELETE",{message:r}),n.notify("success",e,null,5e3)}}(this),i=function(e){return function(){var e;return t.finish(!1),e=o.instant("ADMIN.MEMBERSHIP.ERROR_DELETE",{message:r}),n.notify("error",e)}}(this),e.remove(v).then(c,i)})},f.on("click",".delete",function(t){var e;return t.preventDefault(),p.project.owner.id===v.user?(e=p.user.id===v.user,c.create("tg-lightbox-leave-project-warning",{"class":"lightbox lightbox-leave-project-warning"},{isCurrentUser:e,project:p.project})):m()}),p.$on("$destroy",function(){return f.off()}))},{link:p}},u.directive("tgMembershipsRowActions",["$log","$tgRepo","$tgResources","$tgConfirm","$compile","$translate","$tgLocation","$tgNavUrls","tgLightboxFactory","tgProjectService",r]),s=function(){return{templateUrl:"admin/no-more-memberships-explanation.html",scope:{project:"=",ownerEmail:"="}}},u.directive("tgNoMoreMembershipsExplanation",[s])}.call(this),function(){var t,e;t=function(){var t;return t=function(t,e,r){var n;return n=r.tgAdminNavigation,e.find(".active").removeClass("active"),e.find("#adminmenu-"+n+" a").addClass("active"),t.$on("$destroy",function(){return e.off()})},{link:t}},e=angular.module("taigaAdmin"),e.directive("tgAdminNavigation",t)}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k,$,I,T,E,C,P,w=function(t,e){function r(){this.constructor=t}for(var n in e)A.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},A={}.hasOwnProperty,O=function(t,e){return function(){return t.apply(e,arguments)}};E=this.taiga,$=this.taiga.mixOf,T=this.taiga.scopeDefer,P=this.taiga.trim,C=this.taiga.toString,k=this.taiga.joinStr,j=this.taiga.groupBy,b=this.taiga.bindOnce,S=this.taiga.debounce,I=angular.module("taigaAdmin"),v=function(t){function e(t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g){var m;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.appMetaService=u,this.translate=l,this.tgAuth=p,this.currentUserService=d,this.errorHandlingService=f,this.projectService=h,this.model=g,this.scope.project={},this.scope.projectTags=[],m=this.loadInitialData(),m.then(function(t){return function(){var e,r,n;return r=t.translate.instant(t.scope.sectionName),n=t.translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE",{sectionName:r,projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(n,e),t.fillUsersAndRoles(t.scope.project.members,t.scope.project.roles)}}(this)),m.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:loaded",function(t){return function(){var e,r,n;return r=t.translate.instant(t.scope.sectionName),n=t.translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE",{sectionName:r,projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(n,e)}}(this))}return w(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","tgAppMetaService","$translate","$tgAuth","tgCurrentUserService","tgErrorHandlingService","tgProjectService","$tgModel"],e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t=this.model.make_model("projects",t),t.i_am_admin||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.epicStatusList=_.sortBy(t.epic_statuses,"order"),this.scope.usStatusList=_.sortBy(t.us_statuses,"order"),this.scope.pointsList=_.sortBy(t.points,"order"),this.scope.taskStatusList=_.sortBy(t.task_statuses,"order"),this.scope.issueTypesList=_.sortBy(t.issue_types,"order"),this.scope.issueStatusList=_.sortBy(t.issue_statuses,"order"),this.scope.prioritiesList=_.sortBy(t.priorities,"order"),this.scope.severitiesList=_.sortBy(t.severities,"order"),T(this.scope,function(e){return function(){return e.scope.$emit("project:loaded",t)}}(this)),this.scope.projectTags=_.map(this.scope.project.tags,function(t){return function(e){return[e,t.scope.project.tags_colors[e]]}}(this)),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.tgAuth.refresh()},e.prototype.openDeleteLightbox=function(){return this.rootscope.$broadcast("deletelightbox:new",this.scope.project)},e.prototype.addTag=function(t,e){var r;return r=_.clone(this.scope.project.tags),r.push(t),this.scope.projectTags.push([t,null]),this.scope.project.tags=r},e.prototype.deleteTag=function(t){var e;return e=_.clone(this.scope.project.tags),_.pull(e,t[0]),_.remove(this.scope.projectTags,function(e){return function(e){return e[0]===t[0]}}(this)),this.scope.project.tags=e},e}($(E.Controller,E.PageMixin)),I.controller("ProjectProfileController",v),y=function(t,e,r,n,i,o,s,a){var c;return c=function(c,u,l){var p,d,f,h;return p=u.controller(),d=u.find("form").checksley({onlyOneErrorElement:!0}),f=S(2e3,function(u){return function(u){var l,f,g;if(u.preventDefault(),d.validate())return l=r().target(h).start(),f=c.project.isAttributeModified("is_private"),g=t.save(c.project),g.then(function(){var t;return l.finish(),f&&c.project.is_private?a.trackEvent("project-privacy-changed","from-public-to-private","Change project privacy from public to private",1):f&&!c.project.is_private&&a.trackEvent("project-privacy-changed","from-private-to-public","Change project privacy from private to public",1),e.notify("success"),t=n.resolve("project-admin-project-profile-details",{project:c.project.slug}),i.path(t),o.fetchProject().then(function(t){return function(){return p.loadInitialData()}}(this)),s.loadProjects()}),g.then(null,function(t){if(l.finish(),d.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),h=u.find(".submit-button"),u.on("submit","form",f)},{link:c}},I.directive("tgProjectProfile",["$tgRepo","$tgConfirm","$tgLoading","$tgNavUrls","$tgLocation","tgProjectService","tgCurrentUserService","$tgAnalytics",y]),d=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=S(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=n().target(u).start(),c=e.save(i.project),c.then(function(){return s.finish(),r.notify("success"),t.$broadcast("admin:project-default-values:updated")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return r.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c),i.$on("$destroy",function(){return o.off()})},{link:i}},I.directive("tgProjectDefaultValues",["$rootScope","$tgRepo","$tgConfirm","$tgLoading",d]),m=function(t,e,r,n){var i;return i=function(n,i,o){var s;return s=function(o){return function(){var o,s;if(o=i.find("form").checksley(),o.initializeFields(),o.reset(),o.validate())return s=e.save(n.project),s.then(function(){return n.$emit("project:loaded",n.project),t.$broadcast("admin:project-modules:updated"),r.notify("success")}),s.then(null,function(t){if(o.setErrors(t),t._error_message)return r.notify("error",t._error_message)})}}(this),i.on("change",".module-activation.module-direct-active input",function(t){return t.preventDefault(),n.$applyAsync(s)}),i.on("submit","form",function(t){return t.preventDefault(),s()}),i.on("click",".save",function(t){return t.preventDefault(),s()}),i.on("keydown",".videoconference-attributes input",function(t){return 32!==t.which}),n.$watch("project.videoconferences",function(t,e){if(null!=t&&null!=e&&t!==e)return n.project.videoconferences_extra_data=""}),n.$watch("isVideoconferenceActivated",function(t,e){if(t===!1&&(n.project.videoconferences=null,n.project.videoconferences_extra_data="",e===!0))return s()}),n.$watch("project",function(t){return null!=t.videoconferences?n.isVideoconferenceActivated=!0:n.isVideoconferenceActivated=!1})},{link:i}},I.directive("tgProjectModules",["$rootScope","$tgRepo","$tgConfirm","$tgLoading",m]),f=function(t,e,r,n,i){var o;return o=function(o,s,a){var c,u,l,p,d,f,h,g,m,v,y,_,b,j,k,$,I,T,E,C,P,w,A,O,R,M;return u=s.find(".admin-project-export-buttons"),T=function(){return u.removeClass("hidden")},p=function(){return u.addClass("hidden")},m=s.find(".admin-project-export-result"),A=function(){return m.removeClass("hidden")},d=function(){return m.addClass("hidden")},R=s.find(".spin"),O=function(){return R.removeClass("hidden")},f=function(){return R.addClass("hidden")},y=s.find(".result-title"),g=n.instant("ADMIN.PROJECT_EXPORT.LOADING_TITLE"),h=n.instant("ADMIN.PROJECT_EXPORT.LOADING_MESSAGE"),l=function(){return y.html(n.instant("ADMIN.PROJECT_EXPORT.DUMP_READY"))},c=function(){return y.html(n.instant("ADMIN.PROJECT_EXPORT.ASYNC_MESSAGE"))},M=function(t){return y.html(n.instant("ADMIN.PROJECT_EXPORT.SYNC_MESSAGE",{url:t}))},k=function(){return y.html(g)},b=function(){return y.html(h)},I=function(){return y.html(l)},v=s.find(".result-message "),j=function(){return v.html(h)},_=function(){return v.html(c)},$=function(t){return v.html(M(t))},w=function(){return O(),k(),j(),p(),A()},C=function(){return f(),b(),_()},P=function(t){return f(),I(),$(t)},E=function(){return f(),d(),T()},s.on("click","a.button-export",S(2e3,function(s){return function(s){var a,c;return s.preventDefault(),c=function(e){var r;return i.trackEvent("exporter","export-project","Exported project",1),202===e.status?C():(r=e.data.url,P(r),t.open(r,"_blank"))},a=function(t){var e,i;return E(),e=n.instant("ADMIN.PROJECT_EXPORT.ERROR"),429===t.status?e=n.instant("ADMIN.PROJECT_EXPORT.ERROR_BUSY"):(null!=(i=t.data)?i._error_message:void 0)&&(e=n.instant("ADMIN.PROJECT_EXPORT.ERROR_BUSY",{message:t.data._error_message})),r.notify("error",e)},w(),e.projects["export"](o.projectId).then(c,a)}}(this)))},{link:o}},I.directive("tgProjectExport",["$window","$tgResources","$tgConfirm","$translate","$tgAnalytics",f]),i=function(t){function e(t,e,r,n,i,o){this.scope=t,this.rootscope=e,this.urls=r,this.confirm=n,this.rs=i,this.translate=o,this._deleteUuid=O(this._deleteUuid,this),this._generateUuid=O(this._generateUuid,this),this.setCsvUuid=O(this.setCsvUuid,this),this.rootscope.$on("project:loaded",this.setCsvUuid),this.scope.$watch("csvUuid",function(t){return function(e){return e?t.scope.csvUrl=t.urls.resolveAbsolute(t.type+"-csv",e):t.scope.csvUrl=""}}(this))}return w(e,t),e.$inject=["$scope","$rootScope","$tgUrls","$tgConfirm","$tgResources","$translate"],e.prototype.setCsvUuid=function(){return this.scope.csvUuid=this.scope.project[this.type+"_csv_uuid"]},e.prototype._generateUuid=function(t){var e;return null==t&&(t=null),e=this.rs.projects["regenerate_"+this.type+"_csv_uuid"](this.scope.projectId),e.then(function(t){return function(e){var r;return t.scope.csvUuid=null!=(r=e.data)?r.uuid:void 0}}(this)),e.then(null,function(t){return function(){return t.confirm.notify("error")}}(this)),e["finally"](function(){if(t)return t.finish()}),e},e.prototype._deleteUuid=function(t){var e;return null==t&&(t=null),e=this.rs.projects["delete_"+this.type+"_csv_uuid"](this.scope.projectId),e.then(function(t){return function(e){var r;return t.scope.csvUuid=null!=(r=e.data)?r.uuid:void 0}}(this)),e.then(null,function(t){return function(){return t.confirm.notify("error")}}(this)),e["finally"](function(){if(t)return t.finish()}),e},e.prototype.regenerateUuid=function(){var t,e;return this.scope.csvUuid?(e=this.translate.instant("ADMIN.REPORTS.REGENERATE_TITLE"),t=this.translate.instant("ADMIN.REPORTS.REGENERATE_SUBTITLE"),this.confirm.ask(e,t).then(this._generateUuid)):this._generateUuid()},e.prototype.deleteUuid=function(){var t,e;return this.scope.csvUuid?(e=this.translate.instant("ADMIN.REPORTS.DELETE_TITLE"),t=this.translate.instant("ADMIN.REPORTS.DELETE_SUBTITLE"),this.confirm.ask(e,t).then(this._deleteUuid)):this._deleteUuid()},e}(E.Controller),o=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return w(e,t),e.prototype.type="epics",e}(i),c=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return w(e,t),e.prototype.type="userstories",e}(i),a=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return w(e,t),e.prototype.type="tasks",e}(i),s=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return w(e,t),e.prototype.type="issues",e}(i),I.controller("CsvExporterEpicsController",o),I.controller("CsvExporterUserstoriesController",c),I.controller("CsvExporterTasksController",a),I.controller("CsvExporterIssuesController",s),n=function(t){var e;return e=function(t){return t.sectionTitle="ADMIN.CSV.SECTION_TITLE_EPIC"},{controller:"CsvExporterEpicsController",controllerAs:"ctrl",templateUrl:"admin/project-csv.html",link:e,scope:!0}},I.directive("tgCsvEpic",["$translate",n]),p=function(t){var e;return e=function(t){return t.sectionTitle="ADMIN.CSV.SECTION_TITLE_US"},{controller:"CsvExporterUserstoriesController",controllerAs:"ctrl",templateUrl:"admin/project-csv.html",link:e,scope:!0}},I.directive("tgCsvUs",["$translate",p]),l=function(t){var e;return e=function(t){return t.sectionTitle="ADMIN.CSV.SECTION_TITLE_TASK"},{controller:"CsvExporterTasksController",controllerAs:"ctrl",templateUrl:"admin/project-csv.html",link:e,scope:!0}},I.directive("tgCsvTask",["$translate",l]),u=function(t){var e;return e=function(t){return t.sectionTitle="ADMIN.CSV.SECTION_TITLE_ISSUE"},{controller:"CsvExporterIssuesController",controllerAs:"ctrl",templateUrl:"admin/project-csv.html",link:e,scope:!0}},I.directive("tgCsvIssue",["$translate",u]),h=function(t,e,r,n){var i;return i=function(t,i,o){var s,a,c;return c=function(){return i.find(".size-info").addClass("active")},a=function(r){var o;return o=e.make_model("projects",r.data),t.project=o,i.find(".loading-overlay").removeClass("active"),n.notify("success")},s=function(t){return 413===t.status&&c(),i.find(".loading-overlay").removeClass("active"),n.notify("error",t.data._error_message)},i.on("click",".js-change-logo",function(){return i.find("#logo-field").click()}),i.on("change","#logo-field",function(e){if(t.logoAttachment)return i.find(".loading-overlay").addClass("active"),r.projects.changeLogo(t.project.id,t.logoAttachment).then(a,s)}),i.on("click","a.js-use-default-logo",function(e){return i.find(".loading-overlay").addClass("active"),r.projects.removeLogo(t.project.id).then(a,s)}),t.$on("$destroy",function(){return i.off()})},{link:i}},I.directive("tgProjectLogo",["$tgAuth","$tgModel","$tgResources","$tgConfirm",h]),g=function(t){var e;return e=function(e,r,n){var i,o;return i=t(n.tgProjectLogoModel),o=i.assign,r.bind("change",function(){return e.$apply(function(){return o(e,r[0].files[0])})})},{link:e}},I.directive("tgProjectLogoModel",["$parse",g]),r=function(){return{scope:{project:"="},templateUrl:"admin/admin-project-restrictions.html"}},I.directive("tgAdminProjectRestrictions",[r]),e=function(t){return{link:function(e){return e.requestOwnership=function(){return t.create("tg-lb-request-ownership",{"class":"lightbox lightbox-request-ownership"},{projectId:e.projectId})}},scope:{projectId:"=",owner:"="},templateUrl:"admin/admin-project-request-ownership.html"}},I.directive("tgAdminProjectRequestOwnership",["tgLightboxFactory",e]),t=function(t){return{link:function(e){return e.changeOwner=function(){return t.create("tg-lb-change-owner",{"class":"lightbox lightbox-select-user","project-id":"projectId","active-users":"activeUsers","current-owner-id":"currentOwnerId"},{projectId:e.projectId,activeUsers:e.activeUsers,currentOwnerId:e.owner.id,members:e.members})}},scope:{activeUsers:"=",projectId:"=",owner:"=",members:"="},templateUrl:"admin/admin-project-change-owner.html"}},I.directive("tgAdminProjectChangeOwner",["tgLightboxFactory",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k,I,T,E,C,P,w,A=function(t,e){function r(){this.constructor=t}for(var n in e)O.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},O={}.hasOwnProperty,R=function(t,e){return function(){return t.apply(e,arguments)}};C=this.taiga,T=this.taiga.mixOf,w=this.taiga.trim,P=this.taiga.toString,I=this.taiga.joinStr,k=this.taiga.groupBy,b=this.taiga.bindOnce,S=this.taiga.debounce,j=this.taiga.getDefaulColorList,E=angular.module("taigaAdmin"),h=function(t){function e(t,e,r,n,i,o,s,a,c,u,l,p,d){var f,h,g;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.appMetaService=u,this.translate=l,this.errorHandlingService=p,this.projectService=d,this.scope.project={},this.loadInitialData(),h=this.translate.instant(this.scope.sectionName),g=this.translate.instant("ADMIN.PROJECT_VALUES.PAGE_TITLE",{sectionName:h,projectName:this.scope.project.name}),f=this.scope.project.description,this.appMetaService.setAll(g,f)}return A(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","tgAppMetaService","$translate","tgErrorHandlingService","tgProjectService"],e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.i_am_admin||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){var t;return t=this.loadProject()},e}(T(C.Controller,C.PageMixin)),E.controller("ProjectValuesSectionController",h),d=function(t){function e(t,e,r,n,i){var o;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.moveValue=R(this.moveValue,this),this.loadValues=R(this.loadValues,this),this.scope.$on("admin:project-values:move",this.moveValue),o=this.scope.$watch("resource",function(t){return function(e){if(e)return t.loadValues(),o()}}(this))}return A(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources"],e.prototype.loadValues=function(){return this.rs[this.scope.resource].listValues(this.scope.projectId,this.scope.type).then(function(t){return function(e){return e.length&&(t.scope.values=e,t.scope.maxValueOrder=_.maxBy(e,"order").order),e}}(this))},e.prototype.moveValue=function(t,e,r){var n,i;return i=this.scope.values,n=i.indexOf(e),i.splice(n,1),i.splice(r,0,e),_.each(i,function(t,e){return t.order=e}),this.repo.saveAll(i).then(function(t){return function(){return t.rootscope.$broadcast("admin:project-values:updated")}}(this))},e}(C.Controller),E.controller("ProjectValuesController",d),u=function(t){function e(){return this.displayValues=R(this.displayValues,this),this.createDefaultValues=R(this.createDefaultValues,this),this.loadValues=R(this.loadValues,this),e.__super__.constructor.apply(this,arguments)}return A(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources"],e.prototype.loadValues=function(){return this.rs[this.scope.resource].listValues(this.scope.projectId,this.scope.type).then(function(t){return function(e){return e.length?(t.scope.maxValueOrder=_.maxBy(e,"order").order,t.displayValues(e)):t.createDefaultValues(),e}}(this))},e.prototype.createDefaultValues=function(){if(null!=this.rs[this.scope.resource].createDefaultValues)return this.rs[this.scope.resource].createDefaultValues(this.scope.projectId,this.scope.type).then(function(t){return function(e){var r;return t.rootscope.$broadcast("admin:project-values:updated"),r=e.data,r.length&&(t.scope.maxValueOrder=_.maxBy(r,"order").order,t.displayValues(r)),r}}(this))},e.prototype.displayValues=function(t){return _.each(t,function(t,e){return t.days_to_due_abs=null!==t.days_to_due?Math.abs(t.days_to_due):null,t.sign=t.days_to_due>=0?1:-1}),this.scope.values=t},e}(d),E.controller("ProjectDueDatesValuesController",u),f=function(t,e,r,n,i,o,s,a){var c,u,l;return u=function(t,e,r){var n,i,o,s,a,c;return s=null,o=null,i=null,c=e.find(".sortable"),n=dragula([c[0]],{direction:"vertical",copySortSource:!1,copy:!1,mirrorContainer:c[0],moves:function(t){return $(t).is("div[tg-bind-scope]")}}),n.on("dragend",function(e){var r,n;return i=$(e),n=i.scope().value,r=i.index(),t.$broadcast("admin:project-values:move",n,r)}),a=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&n.dragging}}),t.$on("$destroy",function(){return e.off(),n.destroy()})},l=function(t,n,i){var c,u,l,p,d,f,h,g,m;return c=n.controller(),m=i.type,f=i.objname,p=function(){return t.newValue={name:"",is_closed:!1,is_archived:!1}},d=function(){return t.addNewElementText=o.instant("ADMIN.PROJECT_VALUES_"+f.toUpperCase()+".ACTION_ADD")},p(),d(),s.$on("$translateChangeEnd",function(){return t.$evalAsync(d)}),l=function(t){return function(t){var e;if(null==t&&(t=!1),e=n.find(".table-main"),$(document.body).scrollTop(e.offset().top+e.height()),t)return n.find(".new-value input:visible").first().focus()}}(this),g=function(t){var r,n,i,o;if(n=t.parents("form"),r=n.checksley(),r.validate())return o=n.scope().value,i=e.save(o),i.then(function(){var e;return e=t.parents(".row.table-main"),e.addClass("hidden"),e.siblings(".visualization").removeClass("hidden"),s.$broadcast("admin:project-values:updated"),a.fetchProject()}),i.then(null,function(t){return r.setErrors(t)})},h=function(r){var n,i,o;if(i=r.parents("form"),n=i.checksley(),n.validate())return t.newValue.project=t.project.id,t.newValue.order=t.maxValueOrder?t.maxValueOrder+1:1,o=e.create(m,t.newValue),o.then(function(e){return r.addClass("hidden"),t.values.push(e),t.maxValueOrder=e.order,p(),s.$broadcast("admin:project-values:updated")}),o.then(null,function(t){return n.setErrors(t)})},u=function(e){var r,n,i;return n=e.parents(".row.table-main"),r=e.parents("form"),i=r.scope().value,t.$apply(function(){return n.addClass("hidden"),i.revert(),n.siblings(".visualization").removeClass("hidden")})},n.on("click",".show-add-new",function(t){return t.preventDefault(),n.find(".new-value").removeClass("hidden"),l(!0)}),n.on("click",".add-new",S(2e3,function(t){var e;return t.preventDefault(),e=n.find(".new-value"),h(e)})),n.on("click",".delete-new",function(t){return t.preventDefault(),n.find(".new-value").addClass("hidden"),p()}),n.on("click",".edit-value",function(t){var e,r,n;return t.preventDefault(),n=angular.element(t.currentTarget),r=n.parents(".row.table-main"),r.addClass("hidden"),e=r.siblings(".edition"),e.removeClass("hidden"),e.find("input:visible").first().focus().select()}),n.on("keyup",".new-value input",function(t){var e;return 13===t.keyCode?(e=n.find(".new-value"),h(e)):27===t.keyCode?(n.find(".new-value").addClass("hidden"),p()):void 0}),n.on("click",".save",function(t){var e;return t.preventDefault(),e=angular.element(t.currentTarget),g(e)}),n.on("click",".cancel",function(t){var e;return t.preventDefault(),e=angular.element(t.currentTarget),u(e)}),n.on("click",".delete-value",function(n){var i,a,u,l,p,d,f;return n.preventDefault(),l=angular.element(n.currentTarget),a=l.parents("form"),f=a.scope().value,i={},_.each(t.values,function(t){if(f.id!==t.id)return i[t.id]=t.name}),u=f.name,0===_.keys(i).length?r.error(o.instant("ADMIN.PROJECT_VALUES.ERROR_DELETE_ALL")):(d=o.instant("ADMIN.COMMON.TITLE_ACTION_DELETE_VALUE"),p=o.instant("ADMIN.PROJECT_VALUES.REPLACEMENT"),r.askChoice(d,u,i,p).then(function(t){var n,i;return i=function(){return c.loadValues()["finally"](function(){return s.$broadcast("admin:project-values:updated"),t.finish()})},n=function(){return r.notify("error")},e.remove(f,{moveTo:t.selected}).then(i,n)}))})},c=function(t,e,r){return u(t,e,r),l(t,e,r),t.$on("$destroy",function(){return e.off()})},{link:c}},E.directive("tgProjectValues",["$log","$tgRepo","$tgConfirm","$tgLocation","animationFrame","$translate","$rootScope","tgProjectService",f]),c=function(t,e,r,n,i,o,s,a){var c,u;return u=f(t,e,r,n,i,o,s,a),c=function(t,n,i,a){var c,u,l,p,d;return a=n.controller(),d=i.type,l=function(){return t.newValue={name:"",days_to_due:0,sign:1}},l(),c=function(t){return t.days_to_due=t.days_to_due_abs*t.sign},u=function(t){var e,r,n;return n=angular.element(t.currentTarget),r=n.parents(".row.table-main"),e=n.parents("form"),e.scope().value?e.scope().value:e.scope().newValue},p=function(r){var n,i,o;if(i=r.parents("form"),n=i.checksley(),n.validate())return t.newValue.project=t.project.id,t.newValue.order=t.maxValueOrder?t.maxValueOrder+1:1,o=e.create(d,t.newValue),o.then(function(e){return r.addClass("hidden"),e.sign=t.newValue.sign,e.days_to_due_abs=t.newValue.days_to_due_abs,t.values.push(e),s.$broadcast("admin:project-values:updated"),l()}),o.then(null,function(t){return n.setErrors(t)})},n.on("input",".days-to-due-abs",function(e){var r;return e.preventDefault(),r=u(e),t.$apply(function(){return c(r)})}),n.on("click",".days-to-due-sign",function(e){var r;return e.preventDefault(),r=u(e),t.$apply(function(){return r.sign=r.sign*-1,c(r)})}),n.on("click",".add-new-due-date",S(2e3,function(t){var e;return t.preventDefault(),e=n.find(".new-value"),p(e)})),n.on("click",".delete-due-date",function(t){var n,i,c,u,l;return t.preventDefault(),c=angular.element(t.currentTarget),n=c.parents("form"),l=n.scope().value,u=o.instant("LIGHTBOX.ADMIN_DUE_DATES.TITLE_ACTION_DELETE_DUE_DATE"),i=o.instant("LIGHTBOX.ADMIN_DUE_DATES.SUBTITLE_ACTION_DELETE_DUE_DATE",{due_date_status_name:l.name}),r.ask(u,i).then(function(t){var n,i;return i=function(){return a.loadValues()["finally"](function(){return s.$broadcast("admin:project-values:updated"),t.finish()})},n=function(){return r.notify("error")},e.remove(l).then(i,n)})})},{link:function(t,e,r){return u.link(t,e,r),c(t,e,r)}}},E.directive("tgProjectDueDatesValues",["$log","$tgRepo","$tgConfirm","$tgLocation","animationFrame","$translate","$rootScope","tgProjectService",c]),e=function(){var t;return t=function(t,e,r,n){var i;return t.colorList=j(),t.allowEmpty=!1,r.tgAllowEmpty&&(t.allowEmpty=!0),i=e.controller(),t.$watch(r.ngModel,function(e){return t.color=e.color}),e.on("click",".current-color",function(t){var r,n;return t.preventDefault(),t.stopPropagation(),n=angular.element(t.currentTarget),$(".select-color").hide(),n.siblings(".select-color").show(),r=angular.element("body"),r.on("click",function(t){return function(t){if(0===angular.element(t.target).parent(".select-color").length)return e.find(".select-color").hide(),r.unbind("click")}}(this))}),e.on("click",".select-color .color",function(r){var i;return r.preventDefault(),i=angular.element(r.currentTarget),t.$apply(function(){return n.$modelValue.color=i.data("color")}),e.find(".select-color").hide()}),e.on("click",".select-color .selected-color",function(r){return r.preventDefault(),t.$apply(function(){return n.$modelValue.color=t.color}),e.find(".select-color").hide()}),e.on("keyup","input",function(r){return r.stopPropagation(), -13===r.keyCode?(t.$apply(function(){return n.$modelValue.color=t.color}),e.find(".select-color").hide()):27===r.keyCode?e.find(".select-color").hide():void 0}),t.$on("$destroy",function(){return e.off()})},{link:t,require:"ngModel"}},E.directive("tgColorSelection",e),m="text",i="multiline",g="richtext",r="date",y="url",n="dropdown",t="checkbox",o="number",v=[{key:m,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT"},{key:i,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI"},{key:g,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT"},{key:r,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE"},{key:y,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL"},{key:n,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DROPDOWN"},{key:t,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_CHECKBOX"},{key:o,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_NUMBER"}],s=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){var p,d,f;this.scope=t,this.rootscope=e,this.repo=r,this.rs=n,this.params=i,this.q=o,this.location=s,this.navUrls=a,this.appMetaService=c,this.translate=u,this.projectService=l,this.moveCustomAttributes=R(this.moveCustomAttributes,this),this.deleteCustomAttribute=R(this.deleteCustomAttribute,this),this.saveCustomAttribute=R(this.saveCustomAttribute,this),this.createCustomAttribute=R(this.createCustomAttribute,this),this.loadCustomAttributes=R(this.loadCustomAttributes,this),this._onCustomAttributesModified=R(this._onCustomAttributesModified,this),this.scope.TYPE_CHOICES=v,this.scope.project=this.projectService.project.toJS(),this.scope.projectId=this.scope.project.id,d=this.translate.instant(this.scope.sectionName),f=this.translate.instant("ADMIN.CUSTOM_ATTRIBUTES.PAGE_TITLE",{sectionName:d,projectName:this.scope.project.name}),p=this.scope.project.description,this.appMetaService.setAll(f,p),this.scope.init=function(t){return function(e){return t.scope.type=e,t.loadCustomAttributes()}}(this)}return A(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","tgAppMetaService","$translate","tgProjectService"],e.prototype._parseAttributesExtra=function(){return this.scope.customAttributes=_.map(this.scope.customAttributes,function(t){return function(e){return t._parseAttributeExtra(e)}}(this))},e.prototype._parseAttributeExtra=function(t){return"dropdown"!==t.type||t.extra||(t.extra=[""]),t},e.prototype._onCustomAttributesModified=function(){return this.rootscope.$broadcast("admin:project-custom-attributes:updated")},e.prototype.loadCustomAttributes=function(){return this.rs.customAttributes[this.scope.type].list(this.scope.projectId).then(function(t){return function(e){var r;return t.scope.customAttributes=e,t.scope.maxOrder=null!=(r=_.maxBy(e,"order"))?r.order:void 0,t._parseAttributesExtra(),e}}(this))},e.prototype.createCustomAttribute=function(t){return this.repo.create("custom-attributes/"+this.scope.type,t).then(function(t){return function(){return t._onCustomAttributesModified()}}(this))},e.prototype.saveCustomAttribute=function(t){return this.repo.save(t).then(function(t){return function(){return t._onCustomAttributesModified()}}(this))},e.prototype.deleteCustomAttribute=function(t){return this.repo.remove(t).then(function(t){return function(){return t._onCustomAttributesModified()}}(this))},e.prototype.moveCustomAttributes=function(t,e){var r,n;return r=this.scope.customAttributes,n=r.indexOf(t),r.splice(n,1),r.splice(e,0,t),_.each(r,function(t,e){return t.order=e}),this.repo.saveAll(r).then(function(t){return function(){return t._onCustomAttributesModified()}}(this))},e}(T(C.Controller,C.PageMixin)),E.controller("ProjectCustomAttributesController",s),a=function(t,e,r,n){var i;return i=function(t,r,i){var o,s,a,c,u,l,p,d,f,h,g,m,v,y,_,b,j,k,I,T,E,C,P,w;return o=r.controller(),t.$on("$destroy",function(){return r.off()}),t.isExtraVisible={},a=function(t,e){var r;return t.preventDefault(),r=angular.element(t.currentTarget).closest("form"),e(r)},_=function(){var t,n,i,s,a,c,u;for(u=r.find(".js-sortable"),t=dragula([u[0]],{direction:"vertical",copySortSource:!1,copy:!1,mirrorContainer:u[0],moves:function(t,e,r){var n;return n=$(r).closest(".js-child-sortable"),!n[0]&&$(t).is("div[tg-bind-scope]")}}),t.on("dragend",function(t){var e,r,n;return r=$(t),e=r.scope().attr,n=r.index(),o.moveCustomAttributes(e,n)}),c=r.find(".js-child-sortable"),a=[],i=0,s=c.length;i\n
\n
<%- category.activePermissions %>/<%- category.permissions.length %>
\n <% _.each(category.permissions, function(permission) { %>\n
\n <% }) %>\n
\n'),o=_.template('
\n
\n
\n
\n
\n <% _.each(category.permissions, function(permission) { %>\n
\n \n
\n disabled="disabled" <% } %>\n <% if(permission.active) { %> checked="checked" <% } %>/>\n
\n \n \n
\n
\n <% }) %>\n
\n
\n
'),i=_.template('
'),a=function(a,u,l){var p,d,f,g,m;return p=u.controller(),d=function(t){var e,r,n,i,o,s,c,u,l,p;return s=function(e){return _.map(e,function(e){var r;return _.extend({},e,{active:(r=e.key,h.call(t.permissions,r)>=0)})})},n=function(t,e,r){return!(e.external_user&&!r.is_private&&0===t.key.indexOf("view_"))},c=function(e){return _.map(e,function(e){return e.permissions=e.permissions.map(function(e){return e.editable=n(e,t,a.project),e}),_.extend({},e,{activePermissions:_.filter(e.permissions,"active").length})})},e=[],r=[{key:"view_epics",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.VIEW_EPICS"},{key:"add_epic",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.ADD_EPICS"},{key:"modify_epic",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.MODIFY_EPICS"},{key:"comment_epic",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.COMMENT_EPICS"},{key:"delete_epic",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.DELETE_EPICS"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.EPICS.NAME",permissions:s(r)}),o=[{key:"view_milestones",name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.VIEW_SPRINTS"},{key:"add_milestone",name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.ADD_SPRINTS"},{key:"modify_milestone",name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.MODIFY_SPRINTS"},{key:"delete_milestone",name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.DELETE_SPRINTS"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.NAME",permissions:s(o)}),l=[{key:"view_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.VIEW_USER_STORIES"},{key:"add_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.ADD_USER_STORIES"},{key:"modify_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.MODIFY_USER_STORIES"},{key:"comment_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.COMMENT_USER_STORIES"},{key:"delete_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.DELETE_USER_STORIES"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.NAME",permissions:s(l)}),u=[{key:"view_tasks",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.VIEW_TASKS"},{key:"add_task",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.ADD_TASKS"},{key:"modify_task",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.MODIFY_TASKS"},{key:"comment_task",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.COMMENT_TASKS"},{key:"delete_task",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.DELETE_TASKS"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.TASKS.NAME",permissions:s(u)}),i=[{key:"view_issues",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.VIEW_ISSUES"},{key:"add_issue",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.ADD_ISSUES"},{key:"modify_issue",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.MODIFY_ISSUES"},{key:"comment_issue",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.COMMENT_ISSUES"},{key:"delete_issue",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.DELETE_ISSUES"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.NAME",permissions:s(i)}),p=[{key:"view_wiki_pages",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_PAGES"},{key:"add_wiki_page",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_PAGES"},{key:"modify_wiki_page",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.MODIFY_WIKI_PAGES"},{key:"delete_wiki_page",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_PAGES"},{key:"view_wiki_links",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_LINKS"},{key:"add_wiki_link",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_LINKS"},{key:"delete_wiki_link",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_LINKS"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.WIKI.NAME",permissions:s(p)}),c(e)},m=function(t,e){return t.find(".resume").html(n(c({category:e}))(a))},f=function(t,e){var r;return r=o({category:t,index:e}),r=angular.element(r),m(r,t),n(r)(a)},g=function(){var n;return u.off(),n=i(),_.each(d(a.role),function(t,e){return n=angular.element(n).append(f(t,e))}),u.html(n),u.on("click",".resume",function(t){var e;return t.preventDefault(),e=angular.element(t.currentTarget),e.toggleClass("open-drawer"),e.next().toggleClass("open")}),u.on("change",".category-item input",function(n){var i,o,s,c;return i=function(){var t;return t=_.filter(u.find(".category-item input"),function(t){return angular.element(t).is(":checked")}),t=_.sortBy(_.map(t,function(t){var e;return e=angular.element(t).parents(".category-item").data("id")})),t.length&&t.push("view_project"),t},c=angular.element(n.currentTarget),a.role.permissions=i(),s=function(){var e,n;return e=d(a.role),n=c.parents(".category-config").data("id"),m(c.parents(".category-config"),e[n]),t.$broadcast("projects:reload"),r.notify("success"),p.forceLoadProject()},o=function(){return r.notify("error"),c.prop("checked",!c.prop("checked")),a.role.permissions=i()},a.role.external_user?(a.project.public_permissions=a.role.permissions,a.project.anon_permissions=a.role.permissions.filter(function(t){return 0===t.indexOf("view_")}),e.save(a.project).then(s,o)):e.save(a.role).then(s,o)})},a.$on("$destroy",function(){return u.off()}),a.$on("role:changed",function(){return g()}),s(a,l.ngModel,g)},{link:a}},u.directive("tgRolePermissions",["$rootScope","$tgRepo","$tgConfirm","$compile",r])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b=function(t,e){function r(){this.constructor=t}for(var n in e)S.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},S={}.hasOwnProperty;v=this.taiga,g=this.taiga.mixOf,f=this.taiga.bindMethods,h=this.taiga.debounce,y=this.taiga.timeout,m=angular.module("taigaAdmin"),d=function(t){function e(t,e,r,n,i,o,s,a,c,u){var l;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.location=i,this.navUrls=o,this.appMetaService=s,this.translate=a,this.errorHandlingService=c,this.projectService=u,f(this),this.scope.sectionName="ADMIN.WEBHOOKS.SECTION_NAME",this.scope.project={},l=this.loadInitialData(),l.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.WEBHOOKS.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),l.then(null,this.onInitialDataError.bind(this)),this.scope.$on("webhooks:reload",this.loadWebhooks)}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","$tgLocation","$tgNavUrls","tgAppMetaService","$translate","tgErrorHandlingService","tgProjectService"],e.prototype.loadWebhooks=function(){return this.rs.webhooks.list(this.scope.projectId).then(function(t){return function(e){return t.scope.webhooks=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.i_am_admin||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.loadWebhooks()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),m.controller("WebhooksController",d),p=function(t,e,r,n,i){var o;return o=function(n,o,s){var a,c,u,l,p,d,f,g;return g=n.$eval(s.tgWebhook),d=function(){var e;return e=i.instant("ADMIN.WEBHOOKS.DATE"),t.webhooklogs.list(g.id).then(function(t){return function(t){var r,n,i,o;for(r=0,n=t.length;r=1)return a.addClass("hidden")})}),s.on("click",function(t){return a.removeClass("hidden"),a.find("input")[0].focus()})},{link:o}},m.directive("tgNewWebhook",["$tgResources","$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",c]),r=function(t){function e(t,e,r,n,i,o,s){var a;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.appMetaService=i,this.translate=o,this.projectService=s,f(this),this.scope.sectionName=this.translate.instant("ADMIN.GITHUB.SECTION_NAME"),this.scope.project={},a=this.loadInitialData(),a.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.GITHUB.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),a.then(null,this.onInitialDataError.bind(this))}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","tgAppMetaService","$translate","tgProjectService"],e.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"github").then(function(t){return function(e){return t.scope.github=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.loadModules()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),m.controller("GithubController",r),i=function(t){function e(t,e,r,n,i,o,s){var a;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.appMetaService=i,this.translate=o,this.projectService=s,f(this),this.scope.sectionName=this.translate.instant("ADMIN.GITLAB.SECTION_NAME"),this.scope.project={},a=this.loadInitialData(),a.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.GITLAB.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),a.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:modules:reload",function(t){return function(){return t.loadModules()}}(this))}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","tgAppMetaService","$translate","tgProjectService"],e.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"gitlab").then(function(t){return function(e){return t.scope.gitlab=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.loadModules()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),m.controller("GitlabController",i),t=function(t){function e(t,e,r,n,i,o,s){var a;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.appMetaService=i,this.translate=o,this.projectService=s,f(this),this.scope.sectionName=this.translate.instant("ADMIN.BITBUCKET.SECTION_NAME"),this.scope.project={},a=this.loadInitialData(),a.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.BITBUCKET.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),a.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:modules:reload",function(t){return function(){return t.loadModules()}}(this))}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","tgAppMetaService","$translate","tgProjectService"],e.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"bitbucket").then(function(t){return function(e){return t.scope.bitbucket=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.loadModules()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),m.controller("BitbucketController",t),u=function(t,e){var r;return r=function(r,n,i){return n.on("click",".select-input-content",function(){var r;if(r=n.find("input"),r.val())return r.select(),document.execCommand("copy"),e.notify("success",t.instant("COMMON.COPIED_TO_CLIPBOARD"))})},{link:r}},m.directive("tgSelectInputText",["$translate","$tgConfirm",u]),n=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=h(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=r().target(u).start(),c=t.saveAttribute(i.github,"github"),c.then(function(){return n.trackEvent("github-webhook","created-or-changed","Create or changed github webhook",1),s.finish(),e.notify("success")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c)},{link:i}},m.directive("tgGithubWebhooks",["$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",n]),o=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=h(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=r().target(u).start(),c=t.saveAttribute(i.gitlab,"gitlab"),c.then(function(){return n.trackEvent("gitlab-webhook","created-or-changed","Create or changed gitlab webhook",1),s.finish(),e.notify("success"),i.$emit("project:modules:reload")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c)},{link:i}},m.directive("tgGitlabWebhooks",["$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",o]),e=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=h(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=r().target(u).start(),c=t.saveAttribute(i.bitbucket,"bitbucket"),c.then(function(){return n.trackEvent("bitbucket-webhook","created-or-changed","Create or changed bitbucket webhook",1),s.finish(),e.notify("success"),i.$emit("project:modules:reload")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c)},{link:i}},m.directive("tgBitbucketWebhooks",["$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",e]),l=function(){var t;return t=function(t,e,r,n){return n.$parsers.push(function(t){return t=$.trim(t),""===t?[]:t.split(",")})},{link:t,restrict:"EA",require:"ngModel"}},m.directive("tgValidOriginIps",l),s=function(t){function e(t,e,r,n,i,o,s){var a;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.appMetaService=i,this.translate=o,this.projectService=s,f(this),this.scope.sectionName=this.translate.instant("ADMIN.GOGS.SECTION_NAME"),this.scope.project={},a=this.loadInitialData(),a.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.GOGS.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),a.then(null,this.onInitialDataError.bind(this))}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","tgAppMetaService","$translate","tgProjectService"],e.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"gogs").then(function(t){return function(e){return t.scope.gogs=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.loadModules()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),a=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=h(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=r().target(u).start(),c=t.saveAttribute(i.gogs,"gogs"),c.then(function(){return n.trackEvent("gogs-webhook","create-or-change","Create or change gogs webhook",1),s.finish(),e.notify("success"),i.$emit("project:modules:reload")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c),o.on("click",".submit-button",c)},{link:i}},m.controller("GogsController",s),m.directive("tgGogsWebhooks",["$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",a])}.call(this),function(){var t,e,r,n,i,o;i=this.taiga,e=this.taiga.bindOnce,o=this.taiga.timeout,r=this.taiga.debounce,n=angular.module("taigaProject"),t=function(t,e,r,n,i,o,s,a,c,u){var l;return l=function(r,l,p){var d,f;return d=null,r.$on("deletelightbox:new",function(t,e){return s.open(l),d=e}),r.$on("$destroy",function(){return l.off()}),f=function(){var r;return a.start(),s.close(l),r=t.remove(d),r.then(function(t){return u.trackEvent("projects","delete","Delete project",1),a.pageLoaded(),e.$broadcast("projects:reload"),n.path(i.resolve("home")),o.notify("success"),c.loadProjects()}),r.then(null,function(){return o.notify("error"),s.close(l)})},l.on("click",".button-red",function(t){return t.preventDefault(),s.close(l)}),l.on("click",".button-green",function(t){return t.preventDefault(),f()})},{link:l}},n.directive("tgLbDeleteProject",["$tgRepo","$rootScope","$tgAuth","$tgLocation","$tgNavUrls","$tgConfirm","lightboxService","tgLoader","tgCurrentUserService","$tgAnalytics",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l;u=this.taiga.bindOnce,r=function(){var t;return t=function(t,e,r){return u(t,r.tgBoBind,function(t){return e.text(t)})},{link:t}},i=function(){var t;return t=function(t,e,r){return u(t,r.tgBoHtml,function(t){return e.html(t)})},{link:t}},o=function(){var t;return t=function(t,e,r){return u(t,r.tgBoRef,function(t){return e.html("#"+t+" ")})},{link:t}},s=function(){var t;return t=function(t,e,r){return u(t,r.tgBoSrc,function(t){return e.attr("src",t)})},{link:t}},n=function(){var t;return t=function(t,e,r){return u(t,r.tgBoHref,function(t){return e.attr("href",t)})},{link:t}},e=function(){var t;return t=function(t,e,r){return u(t,r.tgBoAlt,function(t){return e.attr("alt",t)})},{link:t}},a=function(){var t;return t=function(t,e,r){return u(t,r.tgBoTitle,function(t){return e.attr("title",t)})},{link:t}},c=function(){var t;return t=function(t,e,r){return t.$watch(r.tgTitleHtml,function(t){if(null!=t)return e.attr("title",t)})},{link:t}},t=function(){var t;return t=function(t,e,r){return t.$watch(r.tgBindHtml,function(t){if(null!=t)return e.html(t)})},{link:t}},l=angular.module("taigaBase"),l.directive("tgBoBind",r),l.directive("tgBoHtml",i),l.directive("tgBoRef",o),l.directive("tgBoSrc",s),l.directive("tgBoHref",n),l.directive("tgBoAlt",e),l.directive("tgBoTitle",a),l.directive("tgBindTitle",c),l.directive("tgBindHtml",t)}.call(this),function(){var t,e;t=function(){function t(){this.config=window.taigaConfig}return t.prototype.get=function(t,e){return null==e&&(e=null),_.has(this.config,t)?this.config[t]:e},t}(),e=angular.module("taigaBase"),e.service("$tgConfig",t)}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=angular.module("taigaBase"),t=function(t){function e(t,e,r,n,i,o,s){this.rootScope=t,this.scope=e,this.params=r,this.repo=n,this.rs=i,this.confirm=o,this.projectService=s,this.scope.currentPlugin=_.head(_.filter(this.rootScope.adminPlugins,{slug:this.params.plugin})),this.scope.projectSlug=this.params.pslug,this.loadInitialData()}return n(e,t),e.$inject=["$rootScope","$scope","$routeParams","$tgRepo","$tgResources","$tgConfirm","tgProjectService"],e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.$broadcast("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject()},e}(taiga.Controller),r.controller("ContribController",t),e=function(t){function e(t,e,r){this.rootScope=t,this.scope=e,this.params=r,this.scope.currentPlugin=_.head(_.filter(this.rootScope.userSettingsPlugins,{slug:this.params.plugin}))}return n(e,t),e.$inject=["$rootScope","$scope","$routeParams"],e}(taiga.Controller),r.controller("ContribUserSettingsController",e)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga,t=function(t){function e(t,e){this.storage=t,this.params=e}return r(e,t),e.$inject=["$tgStorage","$routeParams"],e.prototype.generateHash=function(t){return null==t&&(t=[]),t=_.map(t,function(t){return JSON.stringify(t)}),hex_sha1(t.join(":"))},e}(e.Service)}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=this.taiga,t=function(t){function e(t,r,n,i,o,s){this.http=t,this.q=r,this.storage=n,this.rootScope=i,this.cacheFactory=o,this.translate=s,e.__super__.constructor.call(this),this.cache=this.cacheFactory("httpget")}return n(e,t),e.$inject=["$http","$q","$tgStorage","$rootScope","$cacheFactory","$translate"],e.prototype.headers=function(){var t,e,r;return t={},r=this.storage.get("token"),r&&(t.Authorization="Bearer "+r),e=this.translate.preferredLanguage(),e&&(t["Accept-Language"]=e),t},e.prototype.request=function(t){return t.headers=_.assign({},t.headers||{},this.headers()),this.http(t)},e.prototype.get=function(t,e,r){return r=_.assign({method:"GET",url:t},r),e&&(r.params=e),r.cache=this.cache,this.request(r)["finally"](function(t){return function(e){return t.cache.removeAll()}}(this))},e.prototype.post=function(t,e,r,n){return n=_.assign({method:"POST",url:t},n),e&&(n.data=e),r&&(n.params=r),this.request(n)},e.prototype.put=function(t,e,r,n){return n=_.assign({method:"PUT",url:t},n),e&&(n.data=e),r&&(n.params=r),this.request(n)},e.prototype.patch=function(t,e,r,n){return n=_.assign({method:"PATCH",url:t},n),e&&(n.data=e),r&&(n.params=r),this.request(n)},e.prototype["delete"]=function(t,e,r,n){return n=_.assign({method:"DELETE",url:t},n),e&&(n.data=e),r&&(n.params=r),this.request(n)},e}(r.Service),e=angular.module("taigaBase"),e.service("$tgHttp",t)}.call(this),function(){var t,e;t=function(t,e,r){return t.noreload=function(r){var n,i;return n=e.current,i=r.$on("$locationChangeSuccess",function(){return e.current=n,i()}),t},t.isInCurrentRouteParams=function(e,r){var n;return n=t.search()||{},n[e]===r},t},e=angular.module("taigaBase"),e.factory("$tgLocation",["$location","$route","$rootScope",t])}.call(this),function(){var t,e,r,n,i,o=[].indexOf||function(t){for(var e=0,r=this.length;ef?(p=a.instant("PROJECT.IMPORT.ERROR_MAX_SIZE_EXCEEDED",{fileName:e.name,fileSize:r(e.size),maxFileSize:r(f)}),h={status:413,data:{_error_message:p}},l.reject(h),l.promise):(v=function(t){return function(t){var e,i;return i=Math.round(t.loaded/t.total*100),e=a.instant("PROJECT.IMPORT.UPLOAD_IN_PROGRESS_MESSAGE",{uploadedSize:r(t.loaded),totalSize:r(t.total)}),n("in-progress",null,e,i)}}(this),g=function(t){return function(t){return n("done",a.instant("PROJECT.IMPORT.TITLE"),a.instant("PROJECT.IMPORT.DESCRIPTION"))}}(this),m=function(t){return function(t){return n("error")}}(this),c=function(t){return function(t){var e;h={};try{h.data=JSON.parse(t.target.responseText)}catch(r){h.data={}}return h.status=t.target.status,t.target.getResponseHeader("Taiga-Info-Project-Is-Private")&&(h.headers={isPrivate:"True"===t.target.getResponseHeader("Taiga-Info-Project-Is-Private"),memberships:parseInt(t.target.getResponseHeader("Taiga-Info-Project-Memberships"))}),201!==(e=h.status)&&202!==e||l.resolve(h),l.reject(h)}}(this),d=function(t){return function(t){return l.reject("fail")}}(this),u=new FormData,u.append("dump",e),y=new XMLHttpRequest,y.upload.addEventListener("progress",v,!1),y.upload.addEventListener("load",g,!1),y.upload.addEventListener("error",m,!1),y.upload.addEventListener("abort",m,!1),y.addEventListener("load",c,!1),y.addEventListener("error",d,!1),y.open("POST",i.resolve("importer")),y.setRequestHeader("Authorization","Bearer "+o.getToken()),y.setRequestHeader("Accept","application/json"),y.send(u),l.promise)},c.changeLogo=function(e,o){var a,c,u,l,p,d;return u=t.get("maxUploadFileSize",null),u&&o.size>u?(p={status:413,data:{_error_message:"'"+o.name+"' ("+r(o.size)+") is too heavy for our oompa loompas, try it with a smaller than ("+r(u)+")"}},c=s.defer(),c.reject(p),c.promise):(a=new FormData,a.append("logo",o),l={transformRequest:angular.identity,headers:{"Content-Type":void 0}},d=i.resolve("projects")+"/"+e+"/change_logo",n.post(d,a,{},l))},c.removeLogo=function(t){var e;return e=i.resolve("projects")+"/"+t+"/remove_logo",n.post(e)},function(t){return t.projects=c}},t=angular.module("taigaResources"),t.factory("$tgProjectsResourcesProvider",["$tgConfig","$tgRepo","$tgHttp","$tgUrls","$tgAuth","$q","$translate",e])}.call(this),function(){var t,e,r;r=this.taiga,e=function(t,e,r){var n;return n={},n.get=function(e){return t.queryOne("roles",e)},n.list=function(e){return t.queryMany("roles",{project:e})},function(t){return t.roles=n}},t=angular.module("taigaResources"),t.factory("$tgRolesResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",e])}.call(this),function(){var t,e,r;r=this.taiga,e=function(t,e,r,n){var i;return i={},i["do"]=function(t,i){var o,s,a,c;return o=n.defer(),c=e.resolve("search"),s={url:c,method:"GET",timeout:o.promise,cancelable:!0,params:{project:t,text:i,get_all:!1}},a=r.request(s).then(function(t){return t.data}),a.abort=function(){return o.resolve()},a["finally"]=function(){return a.abort=angular.noop,o=a=null},a},function(t){return t.search=i}},t=angular.module("taigaResources"),t.factory("$tgSearchResourcesProvider",["$tgRepo","$tgUrls","$tgHttp","$q",e])}.call(this),function(){var t,e,r,n;n=this.taiga,t=n.generateHash,r=function(t,e,r,n,i){var o;return o={},o.get=function(r,n){return t.queryOne("milestones",n).then(function(t){var r;return r=t.user_stories,r=_.map(r,function(t){return e.make_model("userstories",t)}),t._attrs.user_stories=r,t})},o.stats=function(e,r){return t.queryOneRaw("milestones",r+"/stats")},o.list=function(r,n){var i;return i={project:r},i=_.extend({},i,n||{}),t.queryMany("milestones",i,{},!0).then(function(t){return function(t){var r,n,i,o,s,a;for(s=t[0],r=t[1],n=0,i=s.length;nc?(l={status:413,data:{_error_message:"'"+e.name+"' ("+r(e.size)+") is too heavy for our oompa loompas, try it with a smaller than ("+r(c)+")"}},a=o.defer(),a.reject(l),a.promise):(s=new FormData,s.append("avatar",e),u={transformRequest:angular.identity,headers:{"Content-Type":void 0}},p=i.resolve("users")+"/change_avatar",n.post(p,s,{},u))},s.removeAvatar=function(){var t;return t=i.resolve("users")+"/remove_avatar",n.post(t)},s.changePassword=function(t,e){var r,o;return o=i.resolve("users")+"/change_password",r={current_password:t,password:e},n.post(o,r)},function(t){return t.userSettings=s}},t=angular.module("taigaResources"),t.factory("$tgUserSettingsResourcesProvider",["$tgConfig","$tgRepo","$tgHttp","$tgUrls","$q",e])}.call(this),function(){var t,e,r,n;n=this.taiga,r=this.taiga.sizeFormat,e=function(t,e){var r;return r={},r.contacts=function(r,n){var i,o;return null==n&&(n={}),o=e.resolve("user-contacts",r),i={headers:{}},n.enablePagination||(i.headers["x-disable-pagination"]="1"),t.get(o,{},i).then(function(t){return t.data})},function(t){return t.users=r}},t=angular.module("taigaResources"),t.factory("$tgUsersResourcesProvider",["$tgHttp","$tgUrls","$q",e])}.call(this),function(){var t,e,r,n;n=this.taiga,t=n.generateHash,r=function(e,r,n,i,o){var s,a;return a={},s="userstories-queryparams",a.get=function(t,r,n){var i;return i=a.getQueryParams(t),i.project=t,i=_.extend({},i,n),e.queryOne("userstories",r,i)},a.getByRef=function(t,r,n){var i;return null==n&&(n={}),i=a.getQueryParams(t),i.project=t,i.ref=r,i=_.extend({},i,n),e.queryOne("userstories","by_ref",i)},a.listInAllProjects=function(t){return e.queryMany("userstories",t)},a.filtersData=function(t){return e.queryOneRaw("userstories-filters",null,t)},a.listUnassigned=function(t,r,n){var i;return i={project:t,milestone:"null"},i=_.extend({},i,r||{}),a.storeQueryParams(t,i),e.queryMany("userstories",_.extend(i,{page_size:n}),{enablePagination:!0},!0)},a.listAll=function(t,r){var n;return n={project:t},n=_.extend({},n,r||{}),a.storeQueryParams(t,n),e.queryMany("userstories",n)},a.bulkCreate=function(t,e,i){var o,s;return o={project_id:t,status_id:e,bulk_stories:i},s=n.resolve("bulk-create-us"),r.post(s,o)},a.upvote=function(t){var e;return e=n.resolve("userstory-upvote",t),r.post(e)},a.downvote=function(t){var e;return e=n.resolve("userstory-downvote",t),r.post(e)},a.watch=function(t){var e;return e=n.resolve("userstory-watch",t),r.post(e)},a.unwatch=function(t){var e;return e=n.resolve("userstory-unwatch",t),r.post(e)},a.bulkUpdateBacklogOrder=function(t,e){var i,o;return o=n.resolve("bulk-update-us-backlog-order"),i={project_id:t,bulk_stories:e},r.post(o,i)},a.bulkUpdateMilestone=function(t,e,i){var o,s;return s=n.resolve("bulk-update-us-milestone"),o={project_id:t,milestone_id:e,bulk_stories:i},r.post(s,o)},a.bulkUpdateKanbanOrder=function(t,e,i){var o,s;return s=n.resolve("bulk-update-us-kanban-order"),o={project_id:t,status_id:e,bulk_stories:i},r.post(s,o)},a.listValues=function(t,r){var n;return n={project:t},a.storeQueryParams(t,n),e.queryMany(r,n)},a.createDefaultValues=function(t,e){var i,o;return i={project_id:t},o=n.resolve(e+"-create-default"),r.post(o,i)},a.storeQueryParams=function(e,r){var n,o;return o=e+":"+s,n=t([e,o]),i.set(n,r)},a.getQueryParams=function(e){var r,n;return n=e+":"+s,r=t([e,n]),i.get(r)||{}},a.storeShowTags=function(e,r){var n;return n=t([e,"showTags"]),i.set(n,r)},a.getShowTags=function(e){var r;return r=t([e,"showTags"]),i.get(r)||null},function(t){return t.userstories=a}},e=angular.module("taigaResources"),e.factory("$tgUserstoriesResourcesProvider",["$tgRepo","$tgHttp","$tgUrls","$tgStorage","$q",r])}.call(this),function(){var t,e;e=function(t,e,r){var n;return n={},n.list=function(e){var r;return r={webhook:e},t.queryMany("webhooklogs",r)},n.resend=function(t){var n;return n=e.resolve("webhooklogs-resend",t),r.post(n)},function(t){return t.webhooklogs=n}},t=angular.module("taigaResources"),t.factory("$tgWebhookLogsResourcesProvider",["$tgRepo","$tgUrls","$tgHttp",e])}.call(this),function(){var t,e;e=function(t,e,r){var n;return n={},n.list=function(e){var r;return r={project:e},t.queryMany("webhooks",r)},n.test=function(t){var n;return n=e.resolve("webhooks-test",t),r.post(n)},function(t){return t.webhooks=n}},t=angular.module("taigaResources"),t.factory("$tgWebhooksResourcesProvider",["$tgRepo","$tgUrls","$tgHttp",e])}.call(this),function(){var t,e,r;r=this.taiga,e=function(t,e,r){var n;return n={},n.get=function(e){return t.queryOne("wiki",e)},n.getBySlug=function(e,r){return t.queryOne("wiki","by_slug?project="+e+"&slug="+r)},n.list=function(e){return t.queryMany("wiki",{project:e})},n.listLinks=function(e){return t.queryMany("wiki-links",{project:e})},function(t){return t.wiki=n}},t=angular.module("taigaResources"),t.factory("$tgWikiResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",e])}.call(this),function(){var t,e,r,n,i,o,s=function(t,e){function r(){this.constructor=t}for(var n in e)a.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},a={}.hasOwnProperty;o=this.taiga,n=this.taiga.mixOf,r=this.taiga.debounce,i=angular.module("taigaUserSettings"),t=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.auth=u,this.translate=l,this.scope.sectionName=this.translate.instant("CHANGE_PASSWORD.SECTION_NAME"),this.scope.user=this.auth.getUser()}return s(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth","$translate"],e}(n(o.Controller,o.PageMixin)),i.controller("UserChangePasswordController",t),e=function(t,e,n,i){var o;return o=function(o,s,a,c){var u,l,p;return u=new checksley.Form(s.find("form")),l=r(2e3,function(r){return function(r){var s,a;if(r.preventDefault(),u.validate())return o.newPassword1!==o.newPassword2?void e.notify("error",i.instant("CHANGE_PASSWORD.ERROR_PASSWORD_MATCH")):(s=n().target(p).start(),a=t.userSettings.changePassword(o.currentPassword,o.newPassword1),a.then(function(){return s.finish(),e.notify("success")}),a.then(null,function(t){return s.finish(),e.notify("error",t.data._error_message)}))}}(this)),p=s.find(".submit-button"),s.on("submit","form",l),o.$on("$destroy",function(){return s.off()})},{link:o}},i.directive("tgUserChangePassword",["$tgResources","$tgConfirm","$tgLoading","$translate",e])}.call(this),function(){var t,e,r,n,i;i=this.taiga,e=this.taiga.bindOnce,r=this.taiga.debounce,n=angular.module("taigaUserSettings"),t=function(t,e,n,i,o,s,a){var c;return c=function(e,c,u){var l,p;return e.$on("deletelightbox:new",function(t,e){return s.open(c)}),e.$on("$destroy",function(){return c.off()}),l=function(){var r,u;return r=a().target(p).start(),u=t.remove(e.user),u.then(function(t){return r.finish(),s.close(c),n.logout(),i.path(o.resolve("login"))}),u.then(null,function(){return r.finish(),console.log("FAIL")})},c.on("click",".button-green",function(t){return t.preventDefault(),s.close(c)}),c.on("click",".button-red",r(2e3,function(t){return t.preventDefault(),l()})),p=c.find(".button-red")},{link:c,templateUrl:"user/lightbox/lightbox-delete-account.html"}},n.directive("tgLbDeleteUser",["$tgRepo","$rootScope","$tgAuth","$tgLocation","$tgNavUrls","lightboxService","$tgLoading",t])}.call(this),function(){var t,e,r,n,i,o,s,a=function(t,e){function r(){this.constructor=t}for(var n in e)c.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},c={}.hasOwnProperty;s=this.taiga,i=this.taiga.mixOf,n=this.taiga.bindOnce,o=angular.module("taigaUserSettings"),t=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){var p;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.auth=u,this.errorHandlingService=l,this.scope.sectionName="USER_SETTINGS.EVENTS.LIVE_SECTION_NAME",this.scope.user=this.auth.getUser(),p=this.loadInitialData(),p.then(null,this.onInitialDataError.bind(this))}return a(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth","tgErrorHandlingService"],e.prototype.loadInitialData=function(){return this.rs.notifyPolicies.list().then(function(t){return function(e){return t.scope.notifyPolicies=e,e}}(this))},e}(i(s.Controller,s.PageMixin)),o.controller("UserLiveNotificationsController",t),e=function(){var t;return t=function(t,e,r){return t.$on("$destroy",function(){return e.off()})},{link:t}},o.directive("tgUserLiveNotifications",e),r=function(t,e,r){var i,o;return o=_.template('<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
\n
<%- notifyPolicy.project_name %>
\n
\n
\n checked="checked"<% } %>/>\n \n
\n
\n
\n
\n checked="checked"<% } %> />\n \n
\n
\n
\n
\n checked="checked"<% } %> />\n \n
\n
\n
\n<% }) %>'),i=function(i,s,a){var c;return c=function(){var n,a;return s.off(),n={notifyPolicies:i.notifyPolicies},a=o(n),s.html(r(a)(i)),s.on("change","input[type=radio]",function(r){var n,o,s,a,c,u;return u=angular.element(r.currentTarget),a=u.parents(".policy-table-row").data("index"),s=i.notifyPolicies[a],c=s.live_notify_level,s.live_notify_level=parseInt(u.val(),10),o=function(){return e.notify("success")},n=function(){return e.notify("error"),u.parents(".policy-table-row").find("input[value="+c+"]").prop("checked",!0)},t.save(s).then(o,n)})},i.$on("$destroy",function(){return s.off()}),n(i,a.ngModel,c)},{link:i}},o.directive("tgUserLiveNotificationsList",["$tgRepo","$tgConfirm","$compile",r])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u=function(t,e){function r(){this.constructor=t}for(var n in e)l.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},l={}.hasOwnProperty;c=this.taiga,o=this.taiga.mixOf,a=this.taiga.sizeFormat,s=angular.module("taigaUserSettings"),i=this.taiga.debounce,n=function(t){function e(t,e,r,n,i,o,s,c,u,l,p,d,f,h){var g,m,v;this.scope=t,this.rootscope=e,this.config=r,this.repo=n,this.confirm=i,this.rs=o,this.params=s,this.q=c,this.location=u,this.navUrls=l,this.auth=p,this.translate=d,this.errorHandlingService=f,this.window=h,this.scope.sectionName="USER_SETTINGS.MENU.SECTION_TITLE",this.scope.project={},this.scope.user=this.auth.getUser(),this.scope.user||this.errorHandlingService.permissionDenied(),this.scope.lang=this.getLan(),this.scope.theme=this.getTheme(),g=this.config.get("maxUploadFileSize",null),g&&(v=this.translate.instant("USER_SETTINGS.AVATAR_MAX_SIZE",{maxFileSize:a(g)}),this.scope.maxFileSizeMsg=v),m=this.loadInitialData(),m.then(null,this.onInitialDataError.bind(this))}return u(e,t),e.$inject=["$scope","$rootScope","$tgConfig","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth","$translate","tgErrorHandlingService","$window"],e.prototype.loadInitialData=function(){return this.scope.availableThemes=this.config.get("themes",[]),this.rs.locales.list().then(function(t){return function(e){return t.scope.locales=e,e}}(this))},e.prototype.openDeleteLightbox=function(){return this.rootscope.$broadcast("deletelightbox:new",this.scope.user)},e.prototype.getLan=function(){return this.scope.user.lang||this.translate.preferredLanguage()},e.prototype.getTheme=function(){return this.scope.user.theme||this.config.get("defaultTheme")||"taiga"},e.prototype.exportProfile=function(){var t,e;return e=function(t){var e;return e=t.data.url,this.window.open(e,"_blank")},t=function(t){return function(e){var r;if(null!=(r=e.data)?r._error_message:void 0)return t.confirm.notify("error",e.data._error_message)}}(this),this.auth.exportProfile().then(e,t)},e}(o(c.Controller,c.PageMixin)),s.controller("UserSettingsController",n),r=function(t,e,r,n){var o;return o=function(o,s,a){var c;return c=i(2e3,function(i){return function(i){var a,c,u,l;if(i.preventDefault(),c=s.find("form").checksley(),c.validate())return a=o.user.isAttributeModified("email"),o.user.lang=o.lang,o.user.theme=o.theme,l=function(r){var i;return e.setUser(r),a?(i=n.instant("USER_PROFILE.CHANGE_EMAIL_SUCCESS"),t.success(i)):t.notify("success")},u=function(e){return c.setErrors(e),t.notify("error",e._error_message)},r.save(o.user).then(l,u)}}(this)),s.on("submit","form",c),o.$on("$destroy",function(){return s.off()})},{link:o}},s.directive("tgUserProfile",["$tgConfirm","$tgAuth","$tgRepo","$translate",r]),e=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return u=function(){return o.find(".size-info").removeClass("hidden")},c=function(r){var s;return s=e.make_model("users",r.data),t.setUser(s),i.user=s,o.find(".loading-overlay").removeClass("active"),n.notify("success")},a=function(t){return 413===t.status&&u(),o.find(".loading-overlay").removeClass("active"),n.notify("error",t.data._error_message)},o.on("click",".js-change-avatar",function(){return o.find("#avatar-field").click()}),o.on("change","#avatar-field",function(t){if(i.avatarAttachment)return o.find(".loading-overlay").addClass("active"),r.userSettings.changeAvatar(i.avatarAttachment).then(c,a)}),o.on("click","a.js-use-gravatar",function(t){return o.find(".loading-overlay").addClass("active"),r.userSettings.removeAvatar().then(c,a)}),i.$on("$destroy",function(){return o.off()})},{link:i}},s.directive("tgUserAvatar",["$tgAuth","$tgModel","$tgResources","$tgConfirm",e]), -t=function(t){var e;return e=function(e,r,n){var i,o;return i=t(n.tgAvatarModel),o=i.assign,r.bind("change",function(){return e.$apply(function(){return o(e,r[0].files[0])})})},{link:e}},s.directive("tgAvatarModel",["$parse",t])}.call(this),function(){var t,e;t=function(){var t;return t=function(t,e,r){var n;return n=r.tgUserSettingsNavigation,e.find(".active").removeClass("active"),e.find("#usersettingsmenu-"+n+" a").addClass("active"),t.$on("$destroy",function(){return e.off()})},{link:t}},e=angular.module("taigaUserSettings"),e.directive("tgUserSettingsNavigation",t)}.call(this),function(){var t,e,r,n,i,o,s,a=function(t,e){function r(){this.constructor=t}for(var n in e)c.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},c={}.hasOwnProperty;s=this.taiga,i=this.taiga.mixOf,n=this.taiga.bindOnce,o=angular.module("taigaUserSettings"),t=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){var p;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.auth=u,this.errorHandlingService=l,this.scope.sectionName="USER_SETTINGS.NOTIFICATIONS.SECTION_NAME",this.scope.user=this.auth.getUser(),p=this.loadInitialData(),p.then(null,this.onInitialDataError.bind(this))}return a(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth","tgErrorHandlingService"],e.prototype.loadInitialData=function(){return this.rs.notifyPolicies.list().then(function(t){return function(e){return t.scope.notifyPolicies=e,e}}(this))},e}(i(s.Controller,s.PageMixin)),o.controller("UserNotificationsController",t),e=function(){var t;return t=function(t,e,r){return t.$on("$destroy",function(){return e.off()})},{link:t}},o.directive("tgUserNotifications",e),r=function(t,e,r){var i,o;return o=_.template('<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
\n
<%- notifyPolicy.project_name %>
\n
\n
\n checked="checked"<% } %>/>\n \n
\n
\n
\n
\n checked="checked"<% } %> />\n \n
\n
\n
\n
\n checked="checked"<% } %> />\n \n
\n
\n
\n<% }) %>'),i=function(i,s,a){var c;return c=function(){var n,a;return s.off(),n={notifyPolicies:i.notifyPolicies},a=o(n),s.html(r(a)(i)),s.on("change","input[type=radio]",function(r){var n,o,s,a,c,u;return u=angular.element(r.currentTarget),a=u.parents(".policy-table-row").data("index"),s=i.notifyPolicies[a],c=s.notify_level,s.notify_level=parseInt(u.val(),10),o=function(){return e.notify("success")},n=function(){return e.notify("error"),u.parents(".policy-table-row").find("input[value="+c+"]").prop("checked",!0)},t.save(s).then(o,n)})},i.$on("$destroy",function(){return s.off()}),n(i,a.ngModel,c)},{link:i}},o.directive("tgUserNotificationsList",["$tgRepo","$tgConfirm","$compile",r])}.call(this),function(){var t,e,r,n,i,o=function(t,e){function r(){this.constructor=t}for(var n in e)s.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},s={}.hasOwnProperty,a=[].indexOf||function(t){for(var e=0,r=this.length;e=0})},e}(r(i.Controller,i.PageMixin)),n.controller("UserProjectSettingsController",t)}.call(this),function(){var t,e,r,n,i,o,s,a=function(t,e){function r(){this.constructor=t}for(var n in e)c.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},c={}.hasOwnProperty;s=this.taiga,i=this.taiga.mixOf,n=this.taiga.bindOnce,o=angular.module("taigaUserSettings"),t=function(t){function e(t,e,r){var n;this.scope=t,this.rs=e,this.auth=r,this.scope.sectionName="USER_SETTINGS.EVENTS.SECTION_NAME",this.scope.user=this.auth.getUser(),n=this.loadInitialData(),n.then(null,this.onInitialDataError.bind(this))}return a(e,t),e.$inject=["$scope","$tgResources","$tgAuth"],e.prototype.loadInitialData=function(){return this.rs.notifyPolicies.list().then(function(t){return function(e){return t.scope.notifyPolicies=e,e}}(this))},e}(i(s.Controller,s.PageMixin)),o.controller("UserWebNotificationsController",t),e=function(){var t;return t=function(t,e,r){return t.$on("$destroy",function(){return e.off()})},{link:t}},o.directive("tgUserWebNotifications",e),r=function(t,e,r){var i,o;return o=_.template('<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
\n
<%- notifyPolicy.project_name %>
\n
\n
\n checked="checked" <% } %>\n name="policy-<%- notifyPolicy.id %>" id="policy-<%- notifyPolicy.id %>"/>\n
\n \n \n
\n
\n
\n<% }) %>'),i=function(i,s,a){var c;return c=function(){var n,a;return s.off(),n={notifyPolicies:i.notifyPolicies},a=o(n),s.html(r(a)(i)),s.on("click",".check",function(r){var n,o,s,a,c;return c=angular.element(r.currentTarget),a=c.data("index"),s=i.notifyPolicies[a],s.web_notify_level=!s.web_notify_level,o=function(){return e.notify("success"),c.find("input").prop("checked",s.web_notify_level)},n=function(){return e.notify("error")},t.save(s).then(o,n)})},i.$on("$destroy",function(){return s.off()}),n(i,a.ngModel,c)},{link:i}},o.directive("tgUserWebNotificationsList",["$tgRepo","$tgConfirm","$compile",r])}.call(this),function(){angular.module("taigaComponents",[])}.call(this),function(){var t;t=angular.module("taigaDiscover",[])}.call(this),function(){var t;t=angular.module("taigaExternalApps",[])}.call(this),function(){angular.module("taigaHistory",[])}.call(this),function(){var t;t=angular.module("taigaHome",[])}.call(this),function(){angular.module("taigaNavigationBar",[])}.call(this),function(){angular.module("taigaNotifications",[])}.call(this),function(){var t;t=angular.module("taigaProfile",[])}.call(this),function(){angular.module("taigaProjects",[])}.call(this),function(){angular.module("taigaResources2",[])}.call(this),function(){angular.module("taigaUserTimeline",[])}.call(this),function(){var t;t=angular.module("taigaUtils",[])}.call(this),function(){angular.module("taigaWikiHistory",[])}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r){},{templateUrl:"components/assigned-to/assigned-item/assigned-item.html",scope:{member:"="},link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAssignedItem",t)}.call(this),function(){var t;t=function(){function t(){this.assigned&&this._getAssignedMember(),this._filterAssignedMember()}return t.$inject=[],t.prototype._getAssignedMember=function(){return this.assignedMember=_.filter(this.project.members,function(t){return function(e){return e.id===t.assigned.get("id")}}(this))},t.prototype._filterAssignedMember=function(){return this.assigned?this.nonAssignedMembers=_.filter(this.project.members,function(t){return function(e){return e.id!==t.assigned.get("id")}}(this)):this.nonAssignedMembers=this.project.members},t}(),angular.module("taigaComponents").controller("AssignedToSelectorCtrl",t)}.call(this),function(){var t;t=function(){return{controller:"AssignedToSelectorCtrl",controllerAs:"vm",bindToController:!0,templateUrl:"components/assigned-to/assigned-to-selector/assigned-to-selector.html",scope:{assigned:"=",project:"=",onRemoveAssigned:"&",onAssignTo:"&"}}},t.$inject=[],angular.module("taigaComponents").directive("tgAssignedToSelector",t)}.call(this),function(){var t;t=function(){function t(t,e){this.lightboxFactory=t,this.lightboxService=e,this.has_permissions=_.includes(this.project.my_permissions,"modify_epic")}return t.$inject=["tgLightboxFactory","lightboxService"],t.prototype._closeAndRemoveAssigned=function(){return this.lightboxService.closeAll(),this.onRemoveAssigned()},t.prototype._closeAndAssign=function(t){return this.lightboxService.closeAll(),this.onAssignTo({member:t})},t.prototype.onSelectAssignedTo=function(t,e){return this.lightboxFactory.create("tg-assigned-to-selector",{"class":"lightbox lightbox-assigned-to-selector open",assigned:"assigned",project:"project","on-remove-assigned":"onRemoveAssigned()","on-assign-to":"assignTo(member)"},{assigned:this.assignedTo,project:this.project,onRemoveAssigned:this._closeAndRemoveAssigned.bind(this),assignTo:this._closeAndAssign.bind(this)})},t}(),angular.module("taigaComponents").controller("AssignedToCtrl",t)}.call(this),function(){var t;t=function(){return{controller:"AssignedToCtrl",controllerAs:"vm",bindToController:!0,templateUrl:"components/assigned-to/assigned-to.html",scope:{assignedTo:"=",project:"=",onRemoveAssigned:"&",onAssignTo:"&"}}},t.$inject=[],angular.module("taigaComponents").directive("tgAssignedToComponent",t)}.call(this),function(){var t;t=function(t,e,r,n,i,o,s,a,c,u,l){var p;return p=function(t,e,r,n){var i,o,a;return i=function(){var e,n;return(null!=(e=t.project)&&null!=(n=e.my_permissions)?n.indexOf(r.requiredPerm):void 0)!==-1},a=function(e){var r,i,o;return r=n.$modelValue.assigned_to,i=l.searchUsers(e),r&&(i=_.reject(i,{id:r})),o=_.slice(i,0,5),o=_.map(o,function(t){return t.avatar=u.getAvatar(t)}),t.users=_.slice(i,0,5),t.showMore=i.length>5},o=function(e){var r;return(null!=e?e.assigned_to:void 0)?(t.selected=e.assigned_to,r=t.usersById[t.selected],t.fullName=null!=r?r.full_name_display:void 0,t.isUnassigned=!1,t.avatar=u.getAvatar(r),t.bg=t.avatar.bg,t.isIocaine=null!=e?e.is_iocaine:void 0):(t.fullName=s.instant("COMMON.ASSIGNED_TO.ASSIGN"),t.isUnassigned=!0,t.avatar=u.getAvatar(null),t.bg=null,t.isIocaine=!1),t.fullNameVisible=!(t.isUnassigned&&!c.isAuthenticated()),t.isEditable=i()},e.on("click",".users-search",function(t){return t.stopPropagation()}),e.on("click",".users-dropdown",function(r){return r.preventDefault(),r.stopPropagation(),t.usersSearch="",a(),t.$apply(),e.find(".pop-users").popover().open()}),t.selfAssign=function(){return n.$modelValue.assigned_to=c.getUser().get("id"),o(n.$modelValue)},t.unassign=function(){return n.$modelValue.assigned_to=null,o()},t.$watch("usersSearch",function(t){if(null!=t)return a(t),e.find("input").focus()}),e.on("click",".user-list-single",function(e){var r;return e.preventDefault(),r=angular.element(e.currentTarget),n.$modelValue.assigned_to=r.data("user-id"),o(n.$modelValue),t.$apply()}),t.$watch(r.ngModel,function(t){return o(t)}),t.$on("isiocaine:changed",function(t,e){return o(e)}),t.$on("$destroy",function(){return e.off()})},{link:p,templateUrl:"common/components/assigned-to-inline.html",require:"ngModel"}},angular.module("taigaComponents").directive("tgAssignedToInline",["$rootScope","$tgConfirm","$tgRepo","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$translate","$compile","tgCurrentUserService","tgAvatarService","tgUserListService",t])}.call(this),function(){var t;t=function(t,e,r,n,i,o,s,a,c,u){var l,p;return p=o.get("common/components/assigned-to.html",!0),l=function(r,l,d,f){var h,g,m;return h=function(){var t,e;return(null!=(t=r.project)&&null!=(e=t.my_permissions)?e.indexOf(d.requiredPerm):void 0)!==-1},m=function(r){var o,s,a;return s=f.$modelValue.clone(),s.assigned_to=r,o=n().target(l).start(),a=i.save(function(t){return t.assigned_to=r,t}),a.then(function(e){return o.finish(),t.$broadcast("object:updated")}),a.then(null,function(){return e.notify("error"),o.finish()}),a},g=function(){var t,e;return p=o.get("common/components/assigned-to.html"),e=r.$new(),t=a(p)(e),l.html(t)},r.assign=function(){return t.$broadcast("assigned-to:add",f.$modelValue)},r.unassign=function(){var t;return t=s.instant("COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED"),e.ask(t).then(function(t){return t.finish(),m(null)})},r.selfAssign=function(){var t;return t=c.getUser().get("id"),m(t)},r.$on("assigned-to:added",function(t,e,r){if(r.id===f.$modelValue.id)return m(e)}),r.$watch(d.ngModel,function(t){var e;return(null!=t?t.assigned_to:void 0)?(r.selected=t.assigned_to,e=r.usersById[r.selected],r.fullName=null!=e?e.full_name_display:void 0,r.isUnassigned=!1,r.avatar=u.getAvatar(e),r.bg=r.avatar.bg,r.isIocaine=null!=t?t.is_iocaine:void 0):(r.fullName=s.instant("COMMON.ASSIGNED_TO.ASSIGN"),r.isUnassigned=!0,r.avatar=u.getAvatar(null),r.bg=null,r.isIocaine=!1),r.fullNameVisible=!(r.isUnassigned&&!c.isAuthenticated()),r.isEditable=h(),g()}),r.$on("$destroy",function(){return l.off()})},{link:l,require:"ngModel"}},angular.module("taigaComponents").directive("tgAssignedTo",["$rootScope","$tgConfirm","$tgRepo","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$translate","$compile","tgCurrentUserService","tgAvatarService",t])}.call(this),function(){var t,e=[].indexOf||function(t){for(var e=0,r=this.length;e0},f=function(r){var n,i,o;return i=p.searchUsers(r),n=[],_.map(i,function(t){var r;if(r=t.id,e.call(s,r)>=0)return t.avatar=l.getAvatar(t),n.push(t)}),o=[],_.map(i,function(t){var r;if(r=t.id,e.call(s,r)<0)return t.avatar=l.getAvatar(t),o.push(t)}),t.selected=_.slice(n,0,5),t.selected.length<5?t.users=_.slice(o,0,5-t.selected.length):t.users=[],t.showMore=i.length>5},d=function(){var e;return e=_.map(s,function(e){return t.usersById[e]}),e=_.filter(e,function(t){return!!t}),t.hiddenUsers=s.length>3?s.length-3:0,t.assignedUsers=_.slice(e,0,3),t.isAssigned=c()},o=function(){return _.map(s,function(e){if(!t.usersById[e])return s.splice(s.indexOf(e),1)}),0===s.length?a=null:s.indexOf(a)!==-1&&a||(a=s[0]),i.$modelValue.setAttr("assigned_users",s),i.$modelValue.assigned_to=a},r.on("click",".users-dropdown",function(e){return e.preventDefault(),e.stopPropagation(),t.usersSearch=null,f(),t.$apply(),r.find(".pop-users").popover().open()}),t.assign=function(t){return s.push(t.id),d(),o()},t.selfAssign=function(){return s.push(u.getUser().get("id")),d(),o()},t.unassign=function(t){var e;return e=s.indexOf(t.id),s.splice(e,1),d(),o()},r.on("click",".users-search",function(t){return t.stopPropagation()}),t.$watch("usersSearch",function(t){if(null!=t)return f(t),r.find("input").focus()}),t.$watch(n.ngModel,function(t){var e;if(null!=t)return s=[],e=null,null!=t.assigned_users&&(s=t.assigned_users),e=t.assigned_to,d()}),t.$on("$destroy",function(){return r.off()})},{scope:!0,link:d,templateUrl:"common/components/assigned-users-inline.html",require:"ngModel"}},angular.module("taigaComponents").directive("tgAssignedUsersInline",["$rootScope","$tgConfirm","$tgRepo","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$translate","$compile","tgCurrentUserService","tgAvatarService","tgUserListService",t])}.call(this),function(){var t,e=[].indexOf||function(t){for(var e=0,r=this.length;e0},g=function(e,o){var s;return s=i.save(function(t){return t.assigned_users=e,t.assigned_to||(t.assigned_to=o),t}),s.then(function(){var r;return e=_.map(e,function(t){return n.usersById[t]}),h(e),r=t.$broadcast("object:updated")}),s.then(null,function(){return r.notify("error")})},f=function(){var e;return e=_.clone(u.$modelValue,!1),t.$broadcast("assigned-user:add",e)},n.selfAssign=function(){var t,e;if(d())return e=c.getUser().get("id"),t=_.clone(u.$modelValue.assigned_users,!1),t.push(e),t=_.uniq(t),g(t,e)},n.unassign=function(t){var e,i,o;if(d())return e=t.id,o=a.instant("COMMON.ASSIGNED_USERS.TITLE_LIGHTBOX_DELETE_ASSIGNED"),i=n.usersById[e].full_name_display,r.askOnDelete(o,i).then(function(t){var r;return t.finish(),r=_.clone(u.$modelValue.assigned_users,!1),r=_.pull(r,e),l(r)})},l=function(o){var s;return s=i.save(function(t){var r;return t.assigned_users=o,r=t.assigned_to,e.call(o,r)<0&&o.length>0&&(t.assigned_to=o[0]),0===o.length&&(t.assigned_to=null),t}),s.then(function(){var e,r;return r=i.getObj(),e=_.map(r.assignedUsers,function(t){return n.usersById[t]}),h(e),t.$broadcast("object:updated")}),s.then(null,function(){return item.revert(),r.notify("error")})},h=function(t){return n.assignedUsers=t,n.isEditable=d(),n.isAssigned=p(),n.openAssignedUsers=f},n.$on("assigned-user:deleted",function(t,e){var r;return r=_.clone(u.$modelValue.assigned_users,!1),r=_.pull(r,e),r=_.uniq(r),l(r)}),n.$on("assigned-user:added",function(t,e){var r;return r=_.clone(u.$modelValue.assigned_users,!1),r.push(e),r=_.uniq(r),g(r,e)}),n.$watch(s.ngModel,function(t){var e;if(null!=t)return e=_.map(t.assigned_users,function(t){return n.usersById[t]}),e=_.filter(e,function(t){return!!t}),h(e)}),n.$on("$destroy",function(){return o.off()})},{scope:!0,templateUrl:"common/components/assigned-users.html",link:u,require:"ngModel"}},angular.module("taigaComponents").directive("tgAssignedUsers",["$rootScope","$tgConfirm","$tgRepo","$tgQueueModelTransformation","$tgTemplate","$compile","$translate","tgCurrentUserService",t])}.call(this),function(){var t;t=function(t,e,r){var n;return n=function(n,i,o){var s;return s=t(o.tgAttachmentLink)(n),i.on("click",function(t){return taiga.isImage(s.getIn(["file","name"]))?(t.preventDefault(),n.$apply(function(){return r.open($("tg-attachments-preview")),e.fileId=s.getIn(["file","id"])})):taiga.isPdf(s.getIn(["file","name"]))?(t.preventDefault(),window.open(s.getIn(["file","url"]))):void 0}),n.$on("$destroy",function(){return i.off()})},{link:n}},t.$inject=["$parse","tgAttachmentsPreviewService","lightboxService"],angular.module("taigaComponents").directive("tgAttachmentLink",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{scope:{},bindToController:{attachment:"=",onDelete:"&",onUpdate:"&",type:"="},controller:"Attachment",controllerAs:"vm",templateUrl:"components/attachment/attachment-gallery.html",link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAttachmentGallery",t)}.call(this),function(){var t;t=function(){function t(t,e){this.attachmentsService=t,this.translate=e,this.form={},this.form.description=this.attachment.getIn(["file","description"]),this.form.is_deprecated=this.attachment.get(["file","is_deprecated"]),this.title=this.translate.instant("ATTACHMENT.TITLE",{fileName:this.attachment.get("name"),date:moment(this.attachment.get("created_date")).format(this.translate.instant("ATTACHMENT.DATE"))})}return t.$inject=["tgAttachmentsService","$translate"],t.prototype.editMode=function(t){var e;return e=this.attachment.set("editable",t),this.onUpdate({attachment:e})},t.prototype["delete"]=function(){return this.onDelete({attachment:this.attachment})},t.prototype.save=function(){var t;return t=this.attachment.set("loading",!0),this.onUpdate({attachment:t}),t=this.attachment.merge({editable:!1,loading:!1}),t=t.mergeIn(["file"],{description:this.form.description,is_deprecated:!!this.form.is_deprecated}),this.onUpdate({attachment:t})},t}(),angular.module("taigaComponents").controller("Attachment",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{scope:{},bindToController:{attachment:"=",onDelete:"&",onUpdate:"&",type:"="},controller:"Attachment",controllerAs:"vm",templateUrl:"components/attachment/attachment.html",link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAttachment",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i;return i=t(n.tgAttachmentsDrop),r.on("dragover",function(t){return t.preventDefault(),!1}),r.on("drop",function(t){var r;return t.stopPropagation(),t.preventDefault(),r=t.dataTransfer||t.originalEvent&&t.originalEvent.dataTransfer,e.$apply(function(){return i(e,{files:r.files})})}),e.$on("$destroy",function(){return r.off()})},{link:e}},t.$inject=["$parse"],angular.module("taigaComponents").directive("tgAttachmentsDrop",t)}.call(this),function(){var t,e;e=this.taiga.sizeFormat,t=function(){function t(t,r,n,i,o,s,a){this.translate=t,this.confirm=r,this.config=n,this.storage=i,this.attachmentsFullService=o,this.projectService=s,this.attachmentsPreviewService=a,this.mode=this.storage.get("attachment-mode","list"),this.maxFileSize=this.config.get("maxUploadFileSize",null),this.maxFileSize&&(this.maxFileSize=e(this.maxFileSize)),this.maxFileSizeMsg=this.maxFileSize?this.translate.instant("ATTACHMENT.MAX_UPLOAD_SIZE",{maxFileSize:this.maxFileSize}):"",taiga.defineImmutableProperty(this,"attachments",function(t){return function(){return t.attachmentsFullService.attachments}}(this)),taiga.defineImmutableProperty(this,"deprecatedsCount",function(t){return function(){return t.attachmentsFullService.deprecatedsCount}}(this)),taiga.defineImmutableProperty(this,"attachmentsVisible",function(t){return function(){return t.attachmentsFullService.attachmentsVisible}}(this)),taiga.defineImmutableProperty(this,"deprecatedsVisible",function(t){return function(){return t.attachmentsFullService.deprecatedsVisible}}(this))}return t.$inject=["$translate","$tgConfirm","$tgConfig","$tgStorage","tgAttachmentsFullService","tgProjectService","tgAttachmentsPreviewService"],t.prototype.uploadingAttachments=function(){return this.attachmentsFullService.uploadingAttachments},t.prototype.addAttachment=function(t){var e;return e="list"===this.mode,this.attachmentsFullService.addAttachment(this.projectId,this.objId,this.type,t,e)},t.prototype.setMode=function(t){return this.mode=t,this.storage.set("attachment-mode",t)},t.prototype.toggleDeprecatedsVisible=function(){return this.attachmentsFullService.toggleDeprecatedsVisible()},t.prototype.addAttachments=function(t){return _.forEach(t,function(t){return function(e){return t.addAttachment(e)}}(this))},t.prototype.loadAttachments=function(){return this.attachmentsFullService.loadAttachments(this.type,this.objId,this.projectId)},t.prototype.deleteAttachment=function(t){var e,r;return this.attachmentsPreviewService.fileId=null,r=this.translate.instant("ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT"),e=this.translate.instant("ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT",{fileName:t.getIn(["file","name"])}),this.confirm.askOnDelete(r,e).then(function(r){return function(n){var i,o;return i=function(){return e=r.translate.instant("ATTACHMENT.ERROR_DELETE_ATTACHMENT",{errorMessage:e}),r.confirm.notify("error",null,e),n.finish(!1)},o=function(){return n.finish()},r.attachmentsFullService.deleteAttachment(t,r.type).then(o,i)}}(this))},t.prototype.reorderAttachment=function(t,e){return this.attachmentsFullService.reorderAttachment(this.type,t,e)},t.prototype.updateAttachment=function(t){return this.attachmentsFullService.updateAttachment(t,this.type)},t.prototype._isEditable=function(){return!!this.projectService.project&&this.projectService.hasPermission(this.editPermission)},t.prototype.showAttachments=function(){return this._isEditable()||this.attachmentsFullService.attachments.size},t}(),angular.module("taigaComponents").controller("AttachmentsFull",t)}.call(this),function(){var t,e;e=this.taiga.bindOnce,t=function(){var t;return t=function(t,r,n,i){return e(t,"vm.objId",function(t){return i.loadAttachments()})},{scope:{},bindToController:{type:"@",objId:"=",projectId:"=",editPermission:"@"},controller:"AttachmentsFull",controllerAs:"vm",templateUrl:"components/attachments-full/attachments-full.html",link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAttachmentsFull",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t,e){this.attachmentsService=t,this.rootScope=e,this._attachments=Immutable.List(),this._deprecatedsCount=0,this._attachmentsVisible=Immutable.List(),this._deprecatedsVisible=!1,this.uploadingAttachments=[],taiga.defineImmutableProperty(this,"attachments",function(t){return function(){return t._attachments}}(this)),taiga.defineImmutableProperty(this,"deprecatedsCount",function(t){return function(){return t._deprecatedsCount}}(this)),taiga.defineImmutableProperty(this,"attachmentsVisible",function(t){return function(){return t._attachmentsVisible}}(this)),taiga.defineImmutableProperty(this,"deprecatedsVisible",function(t){return function(){return t._deprecatedsVisible}}(this))}return e(r,t),r.$inject=["tgAttachmentsService","$rootScope"],r.prototype.toggleDeprecatedsVisible=function(){return this._deprecatedsVisible=!this._deprecatedsVisible,this.regenerate()},r.prototype.regenerate=function(){return this._deprecatedsCount=this._attachments.count(function(t){return t.getIn(["file","is_deprecated"])}),this._deprecatedsVisible?this._attachmentsVisible=this._attachments:this._attachmentsVisible=this._attachments.filter(function(t){return!t.getIn(["file","is_deprecated"])})},r.prototype.addAttachment=function(t,e,r,n,i,o){return null==i&&(i=!0),null==o&&(o=!1),new Promise(function(s){return function(a,c){var u;return s.attachmentsService.validate(n)?(s.uploadingAttachments.push(n),u=s.attachmentsService.upload(n,e,t,r,o),u.then(function(t){var e;return s.uploadingAttachments=s.uploadingAttachments.filter(function(e){return e.name!==t.get("name")}),e=Immutable.Map(),e=e.merge({file:t,editable:i,loading:!1,from_comment:o}),s._attachments=s._attachments.push(e),s.regenerate(),s.rootScope.$broadcast("attachment:create"),a(e)})):c(new Error(n))}}(this))},r.prototype.loadAttachments=function(t,e,r){return this.attachmentsService.list(t,e,r).then(function(t){return function(e){return t._attachments=e.map(function(t){var e;return e=Immutable.Map(),e.merge({loading:!1,editable:!1,file:t})}),t.regenerate()}}(this))},r.prototype.deleteAttachment=function(t,e){var r;return r=function(e){return function(){return e._attachments=e._attachments.filter(function(e){return e!==t}),e.regenerate()}}(this),this.attachmentsService["delete"](e,t.getIn(["file","id"])).then(r)},r.prototype.reorderAttachment=function(t,e,r){var n,i,o;if(i=this.attachments.findIndex(function(t){return t===e}),i!==r)return n=this.attachments.remove(i),n=n.splice(r,0,e),n=n.map(function(t,e){return t.setIn(["file","order"],e+1)}),o=[],n.forEach(function(e){return function(r){var n;return n={order:r.getIn(["file","order"])},o.push(e.attachmentsService.patch(r.getIn(["file","id"]),t,n))}}(this)),Promise.all(o).then(function(t){return function(){return t._attachments=n,t.regenerate()}}(this))},r.prototype.updateAttachment=function(t,e){var r,n,i;return r=this._attachments.findIndex(function(e){return e.getIn(["file","id"])===t.getIn(["file","id"])}),n=this._attachments.get(r),i=taiga.patch(n.get("file"),t.get("file")),t.get("loading")?(this._attachments=this._attachments.set(r,t),this.regenerate()):this.attachmentsService.patch(t.getIn(["file","id"]),e,i).then(function(e){return function(){return e._attachments=e._attachments.set(r,t),e.regenerate()}}(this))},r}(taiga.Service),angular.module("taigaComponents").service("tgAttachmentsFullService",t)}.call(this),function(){var t;t=function(){function t(t){this.attachmentsPreviewService=t,taiga.defineImmutableProperty(this,"current",function(t){return function(){return t.attachmentsPreviewService.fileId?t.getCurrent():null}}(this))}return t.$inject=["tgAttachmentsPreviewService"],t.prototype.hasPagination=function(){var t;return t=this.attachments.filter(function(t){return function(t){return taiga.isImage(t.getIn(["file","name"]))}}(this)),t.size>1},t.prototype.getCurrent=function(){var t,e;return t=this.attachments.find(function(t){return function(e){return t.attachmentsPreviewService.fileId===e.getIn(["file","id"])}}(this)),e=t.get("file")},t.prototype.getIndex=function(){return this.attachments.findIndex(function(t){return function(e){return t.attachmentsPreviewService.fileId===e.getIn(["file","id"])}}(this))},t.prototype.next=function(){var t,e;return t=this.getIndex(),e=this.attachments.slice(t+1).find(function(t){return taiga.isImage(t.getIn(["file","name"]))}),e||(e=this.attachments.find(function(t){return taiga.isImage(t.getIn(["file","name"]))})),this.attachmentsPreviewService.fileId=e.getIn(["file","id"])},t.prototype.previous=function(){var t,e;return t=this.getIndex(),e=this.attachments.slice(0,t).findLast(function(t){return taiga.isImage(t.getIn(["file","name"]))}),e||(e=this.attachments.findLast(function(t){return taiga.isImage(t.getIn(["file","name"]))})),this.attachmentsPreviewService.fileId=e.getIn(["file","id"])},t}(),angular.module("taigaComponents").controller("AttachmentsPreview",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(t,r,n,i){return $(document.body).on("keydown.image-preview",function(r){return e.fileId&&(39===r.keyCode?i.next():37===r.keyCode&&i.previous()),t.$digest()}),t.$on("$destroy",function(){return $(document.body).off(".image-preview")})},{scope:{},controller:"AttachmentsPreview",templateUrl:"components/attachments-preview/attachments-preview.html",link:r,controllerAs:"vm",bindToController:{attachments:"="}}},angular.module("taigaComponents").directive("tgAttachmentsPreview",["lightboxService","tgAttachmentsPreviewService",t])}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(){}return e(r,t),r.$inject=[],r}(taiga.Service),angular.module("taigaComponents").service("tgAttachmentsPreviewService",t); -}.call(this),function(){var t;t=function(){function t(t){this.attachmentsService=t}return t.$inject=["tgAttachmentsService"],t.prototype.addAttachment=function(t){var e;if(e=Immutable.fromJS({file:t,name:t.name,size:t.size}),this.attachmentsService.validate(t)&&(this.attachments=this.attachments.push(e),this.onAdd))return this.onAdd({attachment:e})},t.prototype.addAttachments=function(t){return _.forEach(t,this.addAttachment.bind(this))},t.prototype.deleteAttachment=function(t){if(this.attachments=this.attachments.filter(function(e){return e!==t}),this.onDelete)return this.onDelete({attachment:t})},t}(),angular.module("taigaComponents").controller("AttachmentsSimple",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{scope:{},bindToController:{attachments:"=",onAdd:"&",onDelete:"&"},controller:"AttachmentsSimple",controllerAs:"vm",templateUrl:"components/attachments-simple/attachments-simple.html",link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAttachmentsSimple",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i,o,s;return i=t(n.tgAttachmentsSortable),o=dragula([r[0]],{copySortSource:!1,copy:!1,mirrorContainer:r[0],moves:function(t){return $(t).is("div[tg-bind-scope]")}}),o.on("dragend",function(t){var r,n;return t=$(t),r=t.scope().attachment,n=t.index(),e.$apply(function(){return i(e,{attachment:r,index:n})})}),s=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&o.dragging}}),e.$on("$destroy",function(){return r.off(),o.destroy()})},{link:e}},t.$inject=["$parse"],angular.module("taigaComponents").directive("tgAttachmentsSortable",t)}.call(this),function(){var t;t=function(t){return{link:function(e,r){return t(function(){return r[0].select()})}}},t.$inject=["$timeout"],angular.module("taigaComponents").directive("tgAutoSelect",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i;return i=n.tgAvatarBig?"avatarBig":"avatar",e.$watch(i,function(e){var n;return n=t.getAvatar(e,i),r.attr("src",n.url),r.attr("title",""+n.username),r.attr("alt",""+n.username),r.css("background",n.bg||"")})},{link:e,scope:{avatar:"=tgAvatar",avatarBig:"=tgAvatarBig"}}},t.$inject=["tgAvatarService"],angular.module("taigaComponents").directive("tgAvatar",t),angular.module("taigaComponents").directive("tgAvatarBig",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(t,e,r,n,i){var o,s;return o=function(i,o,s){var a;return i.$watch("epics",function(t){return a(t)}),i.$on("related-epics:changed",function(t,e){return r.userstories.getByRef(e.project,e.ref,{}).then(function(t){return i.item.epics=t.epics,a(t.epics)})}),i.removeEpicRelationship=function(r){var o,s;return s=t.instant("LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.TITLE"),o=t.instant("LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.MESSAGE",{epicSubject:r.get("subject")}),e.ask(s,null,o).then(function(t){var o,s,a,c;return a=function(){return t.finish(),i.$broadcast("related-epics:changed",i.item)},s=function(){return t.finish(!1),e.notify("error")},o=r.get("id"),c=i.item.id,n.epics.deleteRelatedUserstory(o,c).then(a,s)})},a=function(t){if(i.epicsLength=0,i.immutable_epics=[],t&&!t.isIterable)return i.epicsLength=t.length,i.immutable_epics=Immutable.fromJS(t)}},s=function(t,e){return e.format?"components/belong-to-epics/belong-to-epics-"+e.format+".html":"components/belong-to-epics/belong-to-epics-pill.html"},{link:o,scope:{epics:"=",item:"="},templateUrl:s}},e.directive("tgBelongToEpics",["$translate","$tgConfirm","$tgResources","tgResources","lightboxService",t])}.call(this),function(){var t;t=function(t,e,r,n,i){return{restrict:"A",compile:function(o,s){var a,c;return a=e(s.tgBindCode),c=e(s.tgBindCode,function(t){return(t||"").toString()}),r.$$addBindingClass(o),function(e,o,s){return r.$$addBindingInfo(o,s.tgBindCode),e.$watch(c,function(){var r;return r=n.getHTML(a(e)),o.html(t.getTrustedHtml(r)||""),i.addHightlighter(o)})}}}},angular.module("taigaComponents").directive("tgBindCode",["$sce","$parse","$compile","tgWysiwygService","tgWysiwygCodeHightlighterService",t])}.call(this),function(){var t;t=function(){return{scope:{levels:"=",value:"="},templateUrl:"components/board-zoom/board-zoom.html"}},angular.module("taigaComponents").directive("tgBoardZoom",[t])}.call(this),function(){var t;t=function(){function t(){this.index=0}return t.$inject=[],t.prototype.next=function(){if(this.index++,this.index>=this.images.size)return this.index=0},t.prototype.previous=function(){if(this.index--,this.index<0)return this.index=this.images.size-1},t}(),angular.module("taigaComponents").controller("CardSlideshow",t)}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(){return{controller:"CardSlideshow",templateUrl:"components/card-slideshow/card-slideshow.html",bindToController:!0,controllerAs:"vm",scope:{images:"="}}},e.directive("tgCardSlideshow",t)}.call(this),function(){var t;t=function(){function t(){}return t.$inject=[],t.prototype.visible=function(t){return this.zoom.indexOf(t)!==-1},t.prototype.hasTasks=function(){var t;return t=this.item.getIn(["model","tasks"]),t&&t.size>0},t.prototype.hasMultipleAssignedUsers=function(){var t;return t=this.item.getIn(["model","assigned_users"]),t&&t.size>1},t.prototype.hasVisibleAttachments=function(){return this.item.get("images").size>0},t.prototype.toggleFold=function(){return this.onToggleFold({id:this.item.get("id")})},t.prototype.getClosedTasks=function(){return this.item.getIn(["model","tasks"]).filter(function(t){return t.get("is_closed")})},t.prototype.closedTasksPercent=function(){return 100*this.getClosedTasks().size/this.item.getIn(["model","tasks"]).size},t.prototype.getModifyPermisionKey=function(){return"task"===this.type?"modify_task":"modify_us"},t.prototype.getDeletePermisionKey=function(){return"task"===this.type?"delete_task":"delete_us"},t.prototype._setVisibility=function(){var t;return t={related:this.visible("related_tasks"),slides:this.visible("attachments")},_.isUndefined(this.item.get("foldStatusChanged"))||(this.visible("related_tasks")&&this.visible("attachments")?(t.related=!this.item.get("foldStatusChanged"),t.slides=!this.item.get("foldStatusChanged")):this.visible("attachments")?(t.related=this.item.get("foldStatusChanged"),t.slides=this.item.get("foldStatusChanged")):this.visible("related_tasks")||this.visible("attachments")||(t.related=this.item.get("foldStatusChanged"),t.slides=this.item.get("foldStatusChanged"))),this.item.getIn(["model","tasks"])&&this.item.getIn(["model","tasks"]).size||(t.related=!1),this.item.get("images")&&this.item.get("images").size||(t.slides=!1),t},t.prototype.isRelatedTasksVisible=function(){var t;return t=this._setVisibility(),t.related},t.prototype.isSlideshowVisible=function(){var t;return t=this._setVisibility(),t.slides},t.prototype.getNavKey=function(){return"task"===this.type?"project-tasks-detail":"issue"===this.type?"project-issues-detail":"project-userstories-detail"},t}(),angular.module("taigaComponents").controller("Card",t)}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(){return{link:function(t){},controller:"Card",controllerAs:"vm",bindToController:!0,templateUrl:"components/card/card.html",scope:{onToggleFold:"&",onClickAssignedTo:"&",onClickEdit:"&",onClickRemove:"&",onClickDelete:"&",project:"=",item:"=",zoom:"=",zoomLevel:"=",archived:"=",type:"@"}}},e.directive("tgCard",t)}.call(this),function(){var t;t=function(){return{link:function(t,e){return e.on("click",function(t){var r;if(!$(t.target).is("input"))return t.preventDefault(),r=e.find('input[type="file"]'),r.val(""),r.trigger("click")}),t.$on("$destroy",function(){return e.off()})}}},angular.module("taigaComponents").directive("tgClickInputFile",[t])}.call(this),function(){var t,e,r;r=this.taiga,e=r.getDefaulColorList,t=function(){function t(t){this.projectService=t,this.colorList=e(),this.checkIsColorRequired(),this.displayColorList=!1}return t.$inject=["tgProjectService"],t.prototype.userCanChangeColor=function(){return!this.requiredPerm||this.projectService.hasPermission(this.requiredPerm)},t.prototype.checkIsColorRequired=function(){if(!this.isColorRequired)return this.colorList=_.dropRight(this.colorList)},t.prototype.setColor=function(t){return this.color=t,this.customColor=t},t.prototype.resetColor=function(){if(this.isColorRequired&&!this.color)return this.color=this.initColor},t.prototype.toggleColorList=function(){return this.displayColorList=!this.displayColorList,this.customColor=this.color,this.resetColor()},t.prototype.onSelectDropdownColor=function(t){return this.color=t,this.onSelectColor({color:t}),this.toggleColorList()},t.prototype.onKeyDown=function(t){if(13===t.which)return!this.customColor&&this.isColorRequired||this.onSelectDropdownColor(this.customColor),t.preventDefault()},t}(),angular.module("taigaComponents").controller("ColorSelectorCtrl",t)}.call(this),function(){var t,e;e=this.taiga.bindOnce,t=function(t){var e;return e=function(e,r,n,i){var o,s,a;return o=null,s=function(){return t.cancel(o),o=null},a=function(){if(!o)return o=t(function(){return i.displayColorList=!1,i.resetColor()},400)},r.find(".color-selector").mouseenter(s).mouseleave(a),r.find(".color-selector-dropdown").mouseenter(s).mouseleave(a),e.$watch("vm.initColor",function(t){return i.setColor(t)})},{link:e,templateUrl:"components/color-selector/color-selector.html",controller:"ColorSelectorCtrl",controllerAs:"vm",bindToController:{isColorRequired:"=",onSelectColor:"&",initColor:"=",requiredPerm:"@"},scope:{}}},t.$inject=["$timeout"],angular.module("taigaComponents").directive("tgColorSelector",t)}.call(this),function(){var t,e;e=angular.module("taigaUserStories"),t=function(){function t(t,e,r,n,i){this.rootScope=t,this.confirm=e,this.modelTransform=r,this.navUrls=n,this.window=i,this.editMode=!1,this.loadingSubject=!1,this.originalSubject=this.item.subject,this.objType={tasks:"task",issues:"issue",userstories:"us"}[this.item._name]}return t.$inject=["$rootScope","$tgConfirm","$tgQueueModelTransformation","$tgNavUrls","$window"],t.prototype._checkNav=function(){var t,e,r;if(null!=(null!=(e=this.item.neighbors.previous)?e.ref:void 0)&&(t={project:this.project.slug,ref:this.item.neighbors.previous.ref},this.previousUrl=this.navUrls.resolve("project-"+this.item._name+"-detail",t)),null!=(null!=(r=this.item.neighbors.next)?r.ref:void 0))return t={project:this.project.slug,ref:this.item.neighbors.next.ref},this.nextUrl=this.navUrls.resolve("project-"+this.item._name+"-detail",t)},t.prototype._checkPermissions=function(){return this.permissions={canEdit:_.includes(this.project.my_permissions,this.requiredPerm)}},t.prototype.cancelEdit=function(){return this.editMode=!1,this.item.subject=this.originalSubject},t.prototype.editSubject=function(t){var e;if(e=this.window.getSelection(),"Range"!==e.type&&(t&&(this.editMode=!0),!t))return this.editMode=!1},t.prototype.onKeyDown=function(t){if(13===t.which&&this.saveSubject(),27===t.which)return this.item.subject=this.originalSubject,this.editSubject(!1)},t.prototype.saveSubject=function(){var t,e,r,n;return r=function(t){return function(){return t.loadingSubject=!1,t.rootScope.$broadcast("object:updated"),t.confirm.notify("success"),t.originalSubject=t.item.subject}}(this),e=function(t){return function(){return t.loadingSubject=!1,t.confirm.notify("error")}}(this),this.editMode=!1,this.loadingSubject=!0,t=this.item,n=this.modelTransform.save(function(t){return t}),n.then(r,e)},t.prototype.relateToEpic=function(t){return this.rootScope.$broadcast("relate-to-epic:add",t)},t}(),e.controller("StoryHeaderCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaUserStories"),t=function(){var t;return this.$inject=[],t=function(t,e,r,n){return n._checkPermissions(),n._checkNav()},{link:t,controller:"StoryHeaderCtrl",bindToController:!0,scope:{item:"=",project:"=",requiredPerm:"@"},controllerAs:"vm",templateUrl:"components/detail/header/detail-header.html"}},e.directive("tgDetailHeader",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.translate=t,this.tgLightboxFactory=e,this.projectService=r,this.rootscope=n,this.defaultConfig=[{color:"#9dce0a",name:"normal due",days_to_due:null,by_default:!0},{color:"#ff9900",name:"due soon",days_to_due:14,by_default:!1},{color:"#ff8a84",name:"past due",days_to_due:0,by_default:!1}]}return t.$inject=["$translate","tgLightboxFactory","tgProjectService","$rootScope"],t.prototype.visible=function(){return"button"===this.format||null!=this.dueDate},t.prototype.disabled=function(){return this.isClosed},t.prototype.color=function(){var t;return(null!=(t=this.getStatus())?t.color:void 0)||null},t.prototype.title=function(){return this.dueDate?this._formatTitle():"button"===this.format?this.translate.instant("COMMON.DUE_DATE.TITLE_ACTION_SET_DUE_DATE"):""},t.prototype.getStatus=function(t){var e;return this.dueDate?(e=this.projectService.project.toJS(),t=e[this.objType+"_duedates"],t||(t=this.defaultConfig),this._getAppearance(t)):null},t.prototype._getDefaultAppearance=function(t){var e;return e=null,_.map(t,function(t){if(t.by_default===!0)return e=t}),e},t.prototype._getAppearance=function(t){var e,r,n;return e=this._getDefaultAppearance(t),t=_.sortBy(t,function(t){return-t.days_to_due}),r=moment(this.dueDate),n=moment(),_.map(t,function(t){var i;if(null!==t.days_to_due)return i=moment(r-moment.duration(t.days_to_due,"days")),n>=i?e=t:void 0}),e},t.prototype._formatTitle=function(){var t,e,r;return e=this.translate.instant("COMMON.PICKERDATE.FORMAT"),t=moment(this.dueDate).format(e),r=this.getStatus(),(null!=r?r.name:void 0)?t+" ("+r.name+")":t},t.prototype.setDueDate=function(){if(!this.disabled())return this.tgLightboxFactory.create("tg-lb-set-due-date",{"class":"lightbox lightbox-set-due-date"},{object:this.item,notAutoSave:this.notAutoSave})},t}(),angular.module("taigaComponents").controller("DueDateCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(t,e){return{link:function(t,r,n,i){var o;return t.open=!1,o=e.get(),_.merge(o,{field:r.find(".due-date-button")[0],container:r.find(".date-picker-container")[0],bound:!0,onClose:function(){return t.open=!1,t.$apply()},onSelect:function(){return i.dueDate=this.getMoment().format("YYYY-MM-DD")}}),r.picker=new Pikaday(o),r.on("click",".due-date-button",function(e){return t.open?void r.picker.hide():(!r.picker.getDate()&&i.dueDate&&r.picker.setDate(moment(i.dueDate).format("YYYY-MM-DD")),r.picker.show(),t.open=!0,t.$apply())}),r.on("click",".date-picker-clean",function(e){return e.preventDefault(),e.stopPropagation(),i.dueDate=null,r.picker.setDate(i.dueDate),t.open=!1,r.picker.hide(),t.$apply()}),t.$on("status:changed",function(t,e){return i.isClosed=i.item.is_closed})},controller:"DueDateCtrl",controllerAs:"vm",bindToController:!0,templateUrl:"components/due-date/due-date-popover.html",scope:{dueDate:"=",isClosed:"=",item:"=",objType:"@",format:"@",notAutoSave:"="}}},e.directive("tgDueDatePopover",["$translate","tgDatePickerConfigService",t])}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(t,e){var r;return r=function(t,e){return e.format?"components/due-date/due-date-"+e.format+".html":"components/due-date/due-date-icon.html"},{link:function(r,n,i,o){var s;if(s=function(){var i,s;return s=t.instant("COMMON.PICKERDATE.FORMAT"),o.dueDate&&(o.dueDate=moment(o.dueDate,s)),n.on("click",".date-picker-popover-trigger",function(t){if(!o.disabled())return t.preventDefault(),t.stopPropagation(),n.find(".date-picker-popover").popover().open()}),n.on("click",".date-picker-clean",function(t){return t.preventDefault(),t.stopPropagation(),o.dueDate=null,r.$apply(),n.find(".date-picker-popover").popover().close()}),i=e.get(),_.merge(i,{field:n.find("input.due-date")[0],container:n.find(".date-picker-container")[0],bound:!1,onSelect:function(){return o.dueDate=this.getMoment().format("YYYY-MM-DD"),n.find(".date-picker-popover").popover().close(),r.$apply()}}),n.picker=new Pikaday(i)},"button-popover"===i.format)return s()},controller:"DueDateCtrl",controllerAs:"vm",bindToController:!0,templateUrl:r,scope:{dueDate:"=",isClosed:"=",item:"=",objType:"@",format:"@",notAutoSave:"="}}},e.directive("tgDueDate",["$translate","tgDatePickerConfigService",t])}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n,i){var o;return o=t(n.tgFileChange),r.on("change",function(t){return e.$apply(function(){return o(e,{files:t.currentTarget.files})})}),e.$on("$destroy",function(){return r.off()})},{restrict:"A",link:e}},t.$inject=["$parse"],angular.module("taigaComponents").directive("tgFileChange",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=taiga.generateHash,t=function(t){function n(t,e,r){this.q=t,this.urls=e,this.http=r}return r(n,t),n.$inject=["$q","$tgUrls","$tgHttp"],n.prototype.storeFilters=function(t,r,n){var i,o,s,a,c;return i=this.q.defer(),c=this.urls.resolve("user-storage"),s=t+":"+n,o=e([t,s]),_.isEmpty(r)?(a=this.http["delete"](c+"/"+o,{key:o,value:r}),a.then(function(){return i.resolve()}),a.then(null,function(){return i.reject()})):(a=this.http.put(c+"/"+o,{key:o,value:r}),a.then(function(t){return i.resolve()}),a.then(null,function(t){return function(e){var n;return n=t.http.post(""+c,{key:o,value:r}),n.then(function(){return i.resolve()}),n.then(null,function(){return i.reject()})}}(this))),i.promise},n.prototype.getFilters=function(t,r){var n,i,o,s,a;return n=this.q.defer(),a=this.urls.resolve("user-storage"),o=t+":"+r,i=e([t,o]),s=this.http.get(a+"/"+i),s.then(function(t){return n.resolve(t.data.value)}),s.then(null,function(t){return n.resolve({})}),n.promise},n}(taiga.Service),angular.module("taigaComponents").service("tgFilterRemoteStorageService",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){var i;return i=$("tg-filter"),t.$watch(r.ngIf,function(t){var r,n;if(t)return i.find(".filter-list").hide(),n=i.height(),r=0,i.children().each(function(){return r+=$(this).outerHeight(!0)}),$(e.context.nextSibling).css({"max-height":n-r,display:"block"})})},{priority:900,link:t}},angular.module("taigaComponents").directive("tgFilterSlideDown",[t])}.call(this),function(){var t;t=function(){function t(){this.opened=null,this.customFilterForm=!1,this.customFilterName=""}return t.$inject=[],t.prototype.toggleFilterCategory=function(t){return this.opened===t?this.opened=null:this.opened=t},t.prototype.isOpen=function(t){return this.opened===t},t.prototype.saveCustomFilter=function(){return this.onSaveCustomFilter({name:this.customFilterName}),this.customFilterForm=!1,this.opened="custom-filter",this.customFilterName=""},t.prototype.changeQ=function(){return this.onChangeQ({q:this.q})},t.prototype.unselectFilter=function(t){return this.onRemoveFilter({filter:t})},t.prototype.unselectFilter=function(t){return this.onRemoveFilter({filter:t})},t.prototype.selectFilter=function(t,e){return e={category:t,filter:e},this.onAddFilter({filter:e})},t.prototype.removeCustomFilter=function(t){return this.onRemoveCustomFilter({filter:t})},t.prototype.selectCustomFilter=function(t){return this.onSelectCustomFilter({filter:t})},t.prototype.isFilterSelected=function(t,e){return!!_.find(this.selectedFilters,function(r){return e.id===r.id&&t.dataType===r.dataType})},t}(),angular.module("taigaComponents").controller("Filter",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){var i;return i=t.$watch("vm.defaultQ",function(e){return e&&!t.vm.filtersForm.$dirty?(t.vm.q=e,i()):t.vm.filtersForm.$dirty?i():void 0}),r.$observe("open",function(r){return r=t.$eval(r),r?e.addClass("open"):e.removeClass("open")})},{scope:{onChangeQ:"&",onAddFilter:"&",onSelectCustomFilter:"&",onRemoveFilter:"&",onRemoveCustomFilter:"&",onSaveCustomFilter:"&",customFilters:"<",defaultQ:"=q",filters:"<",customFilters:"<",selectedFilters:"<"},bindToController:!0,controller:"Filter",controllerAs:"vm",templateUrl:"components/filter/filter.html",link:t}},angular.module("taigaComponents").directive("tgFilter",[t])}.call(this),function(){var t,e;e=this.taiga,t=function(t,e,r,n,i){var o;return o=function(n,o,s,a){var c,u,l;return l=null,u=introJs(),u.oncomplete(function(){return $("html,body").scrollTop(0)}),u.onexit(function(){return e.disableJoyRide()}),c=function(t,e){if(e[t.joyride])return u.setOptions({exitOnEsc:!1,exitOnOverlayClick:!1,showStepNumbers:!1,nextLabel:i.instant("JOYRIDE.NAV.NEXT")+" →",prevLabel:"← "+i.instant("JOYRIDE.NAV.BACK"),skipLabel:i.instant("JOYRIDE.NAV.SKIP"),doneLabel:i.instant("JOYRIDE.NAV.DONE"),disableInteraction:!0}),u.setOption("steps",r.get(t.joyride)),u.start()},t.$on("$routeChangeSuccess",function(r,n){return n.joyride&&e.isAuthenticated()?(u.oncomplete(function(){return e.disableJoyRide(n.joyride)}),n.loader?l=t.$on("loader:end",function(){return e.loadJoyRideConfig().then(function(t){return c(n,t)}),l()}):e.loadJoyRideConfig().then(function(t){return c(n,t)})):(u.exit(),void(l&&l()))})},{scope:{},link:o}},t.$inject=["$rootScope","tgCurrentUserService","tgJoyRideService","$location","$translate"],angular.module("taigaComponents").directive("tgJoyRide",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t,e){this.translate=t,this.checkPermissionsService=e}return e(r,t),r.$inject=["$translate","tgCheckPermissionsService"],r.prototype.getConfig=function(){return{dashboard:function(t){return function(){var e;return e=[{element:".project-list > section:not(.ng-hide)",position:"left",joyride:{title:t.translate.instant("JOYRIDE.DASHBOARD.STEP1.TITLE"),text:t.translate.instant("JOYRIDE.DASHBOARD.STEP1.TEXT")}},{element:".working-on-container",position:"right",joyride:{title:t.translate.instant("JOYRIDE.DASHBOARD.STEP2.TITLE"),text:t.translate.instant("JOYRIDE.DASHBOARD.STEP2.TEXT")}},{element:".watching-container",position:"right",joyride:{title:t.translate.instant("JOYRIDE.DASHBOARD.STEP3.TITLE"),text:[t.translate.instant("JOYRIDE.DASHBOARD.STEP3.TEXT1"),t.translate.instant("JOYRIDE.DASHBOARD.STEP3.TEXT2")]}}],$(".project-list .create-project-button").is(":hidden")||e.push({element:".project-list .create-project-button",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.DASHBOARD.STEP4.TITLE"),text:[t.translate.instant("JOYRIDE.DASHBOARD.STEP4.TEXT1"),t.translate.instant("JOYRIDE.DASHBOARD.STEP4.TEXT2")]}}),e}}(this),backlog:function(t){return function(){var e;return e=[{element:".summary",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.BACKLOG.STEP1.TITLE"),text:[t.translate.instant("JOYRIDE.BACKLOG.STEP1.TEXT1"),t.translate.instant("JOYRIDE.BACKLOG.STEP1.TEXT2")]}},{element:".backlog-table-empty",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.BACKLOG.STEP2.TITLE"),text:t.translate.instant("JOYRIDE.BACKLOG.STEP2.TEXT")}},{element:".sprints",position:"left",joyride:{title:t.translate.instant("JOYRIDE.BACKLOG.STEP3.TITLE"),text:t.translate.instant("JOYRIDE.BACKLOG.STEP3.TEXT")}}],t.checkPermissionsService.check("add_us")&&e.push({element:".new-us",position:"rigth",joyride:{title:t.translate.instant("JOYRIDE.BACKLOG.STEP4.TITLE"),text:t.translate.instant("JOYRIDE.BACKLOG.STEP4.TEXT")}}),e}}(this),kanban:function(t){return function(){var e;return e=[{element:".kanban-table-inner",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.KANBAN.STEP1.TITLE"),text:t.translate.instant("JOYRIDE.KANBAN.STEP1.TEXT")}},{element:".card-placeholder",position:"right",joyride:{title:t.translate.instant("JOYRIDE.KANBAN.STEP2.TITLE"),text:t.translate.instant("JOYRIDE.KANBAN.STEP2.TEXT")}}],t.checkPermissionsService.check("add_us")&&e.push({element:".add-action",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.KANBAN.STEP3.TITLE"),text:[t.translate.instant("JOYRIDE.KANBAN.STEP3.TEXT1"),t.translate.instant("JOYRIDE.KANBAN.STEP3.TEXT2")]}}),e}}(this)}},r.prototype.get=function(t){var e,r;return r=this.getConfig(),e=r[t].call(this),_.map(e,function(t){var e;return e="",t.joyride.title&&(e+="

"+t.joyride.title+"

"),_.isArray(t.joyride.text)?_.forEach(t.joyride.text,function(t){return e+="

"+t+"

"}):e+="

"+t.joyride.text+"

",t.intro=e,t})},r}(taiga.Service),angular.module("taigaComponents").service("tgJoyRideService",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i,o){var s,a,c;return r.zoomIndex=t.get("kanban_zoom")||2,r.levels=5,c=[["ref"],["subject"],["owner","tags","extra_info","unfold"],["attachments"],["related_tasks","empty_extra_info"]],s=function(e){return null==e&&(e=0),t.get("kanban_zoom")!==e&&t.set("kanban_zoom",e),_.reduce(c,function(t,r,n){return n<=e&&(t=t.concat(r)),t})},r.$watch("zoomIndex",function(t){var e;return e=s(t),r.onZoomChange({zoomLevel:t,zoom:e})}),a=r.$watch(function(){return e.project},function(t){if(t)return t.get("my_permissions").indexOf("view_tasks")===-1&&(r.levels=4),a()})},{scope:{onZoomChange:"&"},template:'',link:r}},angular.module("taigaComponents").directive("tgKanbanBoardZoom",["$tgStorage","tgProjectService",t])}.call(this),function(){var t;t=function(t){var e;return e=function(t,e,r){},{restrict:"AE",scope:{},controllerAs:"vm",controller:function(){return this.close=function(){return t.open=!1},Object.defineProperties(this,{open:{get:function(){return t.open}},title:{get:function(){return t.title}},desc:{get:function(){return t.desc}}})},link:e,templateUrl:"components/live-announcement/live-announcement.html"}},t.$inject=["tgLiveAnnouncementService"],angular.module("taigaComponents").directive("tgLiveAnnouncement",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(){this.open=!1,this.title="",this.desc=""}return e(r,t),r.prototype.show=function(t,e){return this.open=!0,this.title=t,this.desc=e},r}(taiga.Service),angular.module("taigaComponents").service("tgLiveAnnouncementService",t)}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(){function t(t,e,r,n,i,o,s){this.rootScope=t,this.scope=e,this.rs=r,this.projectService=n,this.translate=i,this.lightboxService=o,this.confirm=s,this.projectId=this.projectService.project.get("id"),this.loading=!1,this.someSelected=!1,this.selectedSprintId=null,this.typesSelected={uss:!1,tasks:!1,issues:!1},this.itemsToMove={},this._loadSprints(),this.scope.$watch("vm.openItems",function(t){return function(e){if(e)return t._init(e)}}(this))}return t.$inject=["$rootScope","$scope","$tgResources","tgProjectService","$translate","lightboxService","$tgConfirm"],t.prototype._init=function(t){var e,r,n;return this.hasManyItemTypes=_.size(this.openItems)>1,this.ussCount=parseInt(null!=(e=t.uss)?e.length:void 0),this.updateSelected("uss",this.ussCount>0),this.tasksCount=parseInt(null!=(r=t.tasks)?r.length:void 0),this.updateSelected("tasks",this.tasksCount>0),this.issuesCount=parseInt(null!=(n=t.issues)?n.length:void 0),this.updateSelected("issues",this.issuesCount>0)},t.prototype._loadSprints=function(){return this.rs.sprints.list(this.projectId,{closed:!1}).then(function(t){return function(e){return t.sprints=_.filter(e.milestones,function(e){return e.id!==t.sprint.id})}}(this))},t.prototype.updateSelected=function(t,e){return this.typesSelected[t]=e,this.someSelected=_.some(this.typesSelected),e===!0?this.itemsToMove[t]=this.openItems[t]:this.itemsToMove[t]?delete this.itemsToMove[t]:void 0},t.prototype.submit=function(){var t;return t={},_.map(this.openItems,function(e){return function(r,n){if(!e.itemsToMove[n])return t[n]=!0}}(this)),this.loading=!0,this.moveItems().then(function(e){return function(){if(e.rootScope.$broadcast("taskboard:items:move",e.typesSelected),e.lightboxService.closeAll(),e.loading=!1,_.size(t)>0)return e.displayWarning(t)}}(this))},t.prototype.moveItems=function(){var t;return t=[],this.itemsToMove.uss&&t.push(this.rs.sprints.moveUserStoriesMilestone(this.sprint.id,this.projectId,this.selectedSprintId,this.itemsToMove.uss)),this.itemsToMove.tasks&&t.push(this.rs.sprints.moveTasksMilestone(this.sprint.id,this.projectId,this.selectedSprintId,this.itemsToMove.tasks)),this.itemsToMove.issues&&t.push(this.rs.sprints.moveIssuesMilestone(this.sprint.id,this.projectId,this.selectedSprintId,this.itemsToMove.issues)),Promise.all(t)},t.prototype.displayWarning=function(t){var e,r,n,i,o;return e=this.translate.instant("COMMON.I_GET_IT"),1===_.size(t)&&t.issues===!0?(i=this.translate.instant("TASKBOARD.MOVE_TO_SPRINT.WARNING_ISSUES_NOT_MOVED_TITLE"),r=this.translate.instant("TASKBOARD.MOVE_TO_SPRINT.WARNING_ISSUES_NOT_MOVED")):(o=0,_.map(this.itemsToMove,function(t,e){return o+=t.length}),i=this.translate.instant("TASKBOARD.MOVE_TO_SPRINT.WARNING_SPRINT_STILL_OPEN_TITLE",{total:o},"messageformat"),r=this.translate.instant("TASKBOARD.MOVE_TO_SPRINT.WARNING_SPRINT_STILL_OPEN",{sprintName:null!=(n=this.sprint)?n.name:void 0})),this.confirm.success(i,r,null,e)},t}(),e.controller("MoveToSprintLbCtrl",t)}.call(this),function(){var t,e;t=angular.module("taigaComponents"),e=function(t){var e;return e=function(e,r,n,i){return t.open(r)},{scope:{},bindToController:{openItems:"=",sprint:"="},templateUrl:"components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.html",controller:"MoveToSprintLbCtrl",controllerAs:"vm",link:e}},e.$inject=["lightboxService"],t.directive("tgLbMoveToSprint",e)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,e,r){this.scope=t,this.lightboxFactory=e,this.projectService=r,this.permissions=this.projectService.project.get("my_permissions"),this.hasOpenItems=!1,this.disabled=!1,this.openItems={uss:[],tasks:[],issues:[]},this.scope.$watch("vm.uss",function(t){return function(){return t.getOpenUss()}}(this)),this.scope.$watch("vm.unnasignedTasks",function(t){return function(){return t.getOpenStorylessTasks()}}(this)),this.scope.$watch("vm.issues",function(t){return function(){return t.getOpenIssues()}}(this))}return t.$inject=["$scope","tgLightboxFactory","tgProjectService"],t.prototype.checkOpenItems=function(){return _.some(Object.keys(this.openItems),function(t){return function(e){return t.openItems[e].length>0}}(this))},t.prototype.openLightbox=function(){var t;if(this.disabled===!1&&this.hasOpenItems)return t={},_.map(this.openItems,function(e,r){if(e.length)return t[r]=e}),this.lightboxFactory.create("tg-lb-move-to-sprint",{"class":"lightbox lightbox-move-to-sprint",sprint:"sprint","open-items":"openItems"},{sprint:this.sprint,openItems:t})},t.prototype.getOpenUss=function(){if(this.uss&&this.permissions.indexOf("modify_us")!==-1)return this.openItems.uss=[],this.uss.map(function(t){return function(e){if(e.is_closed===!1)return t.openItems.uss.push({us_id:e.id,order:e.sprint_order})}}(this)),this.hasOpenItems=this.checkOpenItems()},t.prototype.getOpenStorylessTasks=function(){if(this.unnasignedTasks&&this.permissions.indexOf("modify_task")!==-1)return this.openItems.tasks=[],this.unnasignedTasks.map(function(t){return function(e){return e.map(function(e){if(e.get("model").get("is_closed")===!1)return t.openItems.tasks.push({task_id:e.get("model").get("id"),order:e.get("model").get("taskboard_order")})})}}(this)),this.hasOpenItems=this.checkOpenItems()},t.prototype.getOpenIssues=function(){if(this.issues&&this.permissions.indexOf("modify_issue")!==-1)return this.openItems.issues=[],this.issues.map(function(t){return function(e){if(e.get("status").get("is_closed")===!1)return t.openItems.issues.push({ -issue_id:e.get("id")})}}(this)),this.hasOpenItems=this.checkOpenItems()},t}(),angular.module("taigaComponents").controller("MoveToSprintCtrl",t)}.call(this),function(){var t,e;t=angular.module("taigaComponents"),e=function(t){return{controller:"MoveToSprintCtrl",controllerAs:"vm",bindToController:!0,templateUrl:"components/move-to-sprint/move-to-sprint.html",scope:{sprint:"=",uss:"=",unnasignedTasks:"=",issues:"=",disabled:"="}}},e.$inject=["tgTaskboardTasks"],t.directive("tgMoveToSprint",[e])}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){return e.$watch("project",function(e){var n,i;if(e=Immutable.fromJS(e))return i=e.get("logo_big_url"),i?(r.attr("src",i),r.css("background","")):(n=t.getDefaultProjectLogo(e.get("slug"),e.get("id")),r.attr("src",n.src),r.css("background",n.color))})},{link:e,scope:{project:"=tgProjectLogoBigSrc"}}},t.$inject=["tgProjectLogoService"],angular.module("taigaComponents").directive("tgProjectLogoBigSrc",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){return e.$watch("project",function(e){var n,i;if(e=Immutable.fromJS(e))return i=e.get("logo_small_url"),i?(r.attr("src",i),r.css("background","")):(n=t.getDefaultProjectLogo(e.get("slug"),e.get("id")),r.attr("src",n.src),r.css("background",n.color))})},{link:e,scope:{project:"=tgProjectLogoSmallSrc"}}},t.$inject=["tgProjectLogoService"],angular.module("taigaComponents").directive("tgProjectLogoSmallSrc",t)}.call(this),function(){var t;t=function(){function t(t,e){this.projectService=t,this.lightboxFactory=e,this.project=null,this.menu=Immutable.Map()}return t.$inject=["tgProjectService","tgLightboxFactory"],t.prototype.show=function(){var t;return this.project=this.projectService.project,this.sprints=null!=(t=this.project.get("milestones"))?t.toJS():void 0,this.active=this._getActiveSection(),this._setVideoConference(),this._setMenuPermissions()},t.prototype.hide=function(){return this.project=null,this.menu={}},t.prototype.search=function(){return this.lightboxFactory.create("tg-search-box",{"class":"lightbox lightbox-search"})},t.prototype._setVideoConference=function(){var t;if(t=this._videoConferenceUrl())return this.project=this.project.set("videoconferenceUrl",t)},t.prototype._setMenuPermissions=function(){if(this.menu=Immutable.Map({epics:!1,backlog:!1,kanban:!1,issues:!1,wiki:!1}),this.project.get("is_epics_activated")&&this.project.get("my_permissions").indexOf("view_epics")!==-1&&(this.menu=this.menu.set("epics",!0)),this.project.get("is_backlog_activated")&&this.project.get("my_permissions").indexOf("view_us")!==-1&&(this.menu=this.menu.set("backlog",!0)),this.project.get("is_kanban_activated")&&this.project.get("my_permissions").indexOf("view_us")!==-1&&(this.menu=this.menu.set("kanban",!0)),this.project.get("is_issues_activated")&&this.project.get("my_permissions").indexOf("view_issues")!==-1&&(this.menu=this.menu.set("issues",!0)),this.project.get("is_wiki_activated")&&this.project.get("my_permissions").indexOf("view_wiki_pages")!==-1)return this.menu=this.menu.set("wiki",!0)},t.prototype._getActiveSection=function(){var t,e,r,n,i;return n=this.projectService.section,i=this.projectService.sectionsBreadcrumb,t=i.lastIndexOf("backlog"),e=i.lastIndexOf("kanban"),t===-1&&e===-1||(r=e===-1||t>e?"backlog":"kanban"),"backlog-kanban"===n&&("backlog"===r||"kanban"===r?n=r:this.project.get("is_backlog_activated")&&!this.project.get("is_kanban_activated")?n="backlog":!this.project.get("is_backlog_activated")&&this.project.get("is_kanban_activated")&&(n="kanban")),n},t.prototype._videoConferenceUrl=function(){var t,e;if("appear-in"===this.project.get("videoconferences"))t="https://appear.in/";else if("talky"===this.project.get("videoconferences"))t="https://talky.io/";else{if("jitsi"!==this.project.get("videoconferences"))return"custom"===this.project.get("videoconferences")?this.project.get("videoconferences_extra_data"):"";t="https://meet.jit.si/"}return e=this.project.get("videoconferences_extra_data")?this.project.get("slug")+"-"+taiga.slugify(this.project.get("videoconferences_extra_data")):this.project.get("slug"),"jitsi"===this.project.get("videoconferences")&&(e=e.replace(/-/g,"")),t+e},t}(),angular.module("taigaComponents").controller("ProjectMenu",t)}.call(this),function(){var t,e;e=this.taiga,t=function(t,e){var r;return r=function(e,r,n,i){var o;return o=function(){return t.project?i.show():i.hide()},e.$watch(function(){return t.project},o),e.vm.fixed=!1,$(window).on("scroll",function(){var t;return t=$(window).scrollTop(),t>100&&e.vm.fixed===!1?(e.vm.fixed=!0,e.$digest()):t<100&&e.vm.fixed===!0?(e.vm.fixed=!1,e.$digest()):void 0})},{scope:{},controller:"ProjectMenu",controllerAs:"vm",templateUrl:"components/project-menu/project-menu.html",link:r}},t.$inject=["tgProjectService","tgLightboxFactory"],angular.module("taigaComponents").directive("tgProjectMenu",t)}.call(this),function(){var t,e,r,n;e=angular.module("taigaComponents"),r=this.taiga.normalizeString,t=this.taiga.groupBy,n=function(e){var n;return n=function(n,i,o,s){var a,c,u,l,p,d,f;return n.templateUrl="components/search-list/search-list-"+n.itemType+"-choice.html",n.currentSelected=null,c=!1,a=[],l={},"issue"===n.itemType&&(n.milestonesById=t(n.project.milestones,function(t){return t.id})),n.filterClosed&&(n.showClosed=!1,"sprint"===n.itemType&&(n.textShowClosed=e.instant("BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS"),n.textHideClosed=e.instant("BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS"))),i.on("click",".choice",function(t){var e,r,i;return e=parseInt($(t.currentTarget).data("choice-id")),i=(null!=(r=o.ngModel)?r.id:void 0)!==e?l[e]:null,s.$setViewValue(i),n.currentSelected=i,n.$apply()}),u=function(t,e){return _.includes(p(e),p(t))},p=function(t){return"string"!=typeof t&&(t=t.toString()),r(t.toUpperCase())},f=function(){return n.currentSelected=null,s.$setViewValue(null)},d=function(){return f(),n.searchText="",a=angular.copy(n.items),l=t(a,function(t){return t.id})},n.isVisible=function(t){var e;return!(n.filterClosed&&!n.showClosed)||("sprint"!==n.itemType||!t.closed&&!t.is_closed||((null!=(e=n.currentSelected)?e.id:void 0)===t.id&&f(),!1))},n.toggleShowClosed=function(t){return n.showClosed=!n.showClosed},n.filterItems=function(t){if(n.filtering=!0,n.items=_.filter(a,function(e){var r;return r=e.getAttrs(),Array.isArray(n.filterBy)?_.some(n.filterBy,function(e){return u(t,r[e])}):u(t,r[n.filterBy])}),!_.find(n.items,n.currentSelected))return f()},n.$watch("items",function(t){if(!n.filtering&&t)return d()})},{link:n,templateUrl:"components/search-list/search-list.html",require:"ngModel",scope:{label:"@",placeholder:"@",project:"=",filterBy:"=",items:"=",itemType:"@",filterClosed:"=",itemDisabled:"="}}},e.directive("tgSearchList",["$translate",n])}.call(this),function(){var t,e;e=angular.module("taigaCommon"),t=function(){var t,e,r,n;return r=function(t){var e,r,n;return t.addClass("selected"),n=t.position().top+t.outerHeight(),e=t.parent().outerHeight(),n>e?(r=n-e,t.parent().scrollTop(t.parent().scrollTop()+r)):t.position().top<0?t.parent().scrollTop(t.parent().scrollTop()+t.position().top):void 0},t=function(t,e,n){var i,o,s;if(i=t.find(".selected"),40===e){if(!i.length)return r(t.find("li:first"));if(o=i.next("li"),o.length)return i.removeClass("selected"),r(o)}else if(38===e){if(!i.length)return r(t.find("li:last"));if(s=i.prev("li"),s.length)return i.removeClass("selected"),r(s)}},n=function(){return $(document).off(".tags-keyboard-navigation")},e=function(e,r){return n(),$(r).parent().on("keydown.tags-keyboard-navigation",function(n){return function(n){var i;if(i=n.keyCode?n.keyCode:n.which,40===i||38===i)return n.preventDefault(),t(r,i,e)}}(this)),e.$on("$destroy",n)},{link:e,templateUrl:"components/tags/tag-dropdown/tag-dropdown.html",scope:{onSelectTag:"&",colorArray:"=",tag:"="}}},e.directive("tgTagsDropdown",t)}.call(this),function(){var t,e,r;r=this.taiga.trim,e=angular.module("taigaCommon"),t=function(){function t(t){this.tagLineService=t,this.disableColorSelection=!1,this.newTag={name:"",color:null},this.colorArray=[],this.addTag=!1}return t.$inject=["tgTagLineService"],t.prototype.checkPermissions=function(){return this.tagLineService.checkPermissions(this.project.my_permissions,this.permissions)},t.prototype._createColorsArray=function(t){return this.colorArray=this.tagLineService.createColorsArray(t)},t.prototype.displayTagInput=function(){return this.addTag=!0},t.prototype.addNewTag=function(t,e){if(this.newTag.name="",this.newTag.color=null,t.length)return this.disableColorSelection?t.length?this.onAddTag({name:t,color:e}):void 0:(this.project.tags_colors[t]&&(e=this.project.tags_colors[t]),this.onAddTag({name:t,color:e}))},t.prototype.selectColor=function(t){return this.newTag.color=t},t}(),e.controller("TagLineCommonCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaCommon"),t=function(){var t;return t=function(t,e,r,n){var i;return _.isUndefined(r.disableColorSelection)||(n.disableColorSelection=!0),i=t.$watch("vm.project",function(t){if(t&&Object.keys(t).length)return i(),n.disableColorSelection?void 0:n.colorArray=n._createColorsArray(n.project.tags_colors)}),e.on("keydown",".tag-input",function(r){var i;return 27===r.keyCode?(n.addTag=!1,n.newTag.name="",n.newTag.color="",r.stopPropagation()):13===r.keyCode&&(r.preventDefault(),e.find(".tags-dropdown .selected").length?(i=$(".tags-dropdown .selected .tags-dropdown-name").text(),n.addNewTag(i,null)):n.addNewTag(n.newTag.name,n.newTag.color)),t.$apply()})},{link:t,scope:{permissions:"@",loadingAddTag:"=",loadingRemoveTag:"=",tags:"=",project:"=",onAddTag:"&",onDeleteTag:"&"},templateUrl:"components/tags/tag-line-common/tag-line-common.html",controller:"TagLineCommonCtrl",controllerAs:"vm",bindToController:!0}},e.directive("tgTagLineCommon",t)}.call(this),function(){var t,e,r;r=this.taiga.trim,e=angular.module("taigaCommon"),t=function(){function t(t,e,r){this.rootScope=t,this.confirm=e,this.modelTransform=r,this.loadingAddTag=!1}return t.$inject=["$rootScope","$tgConfirm","$tgQueueModelTransformation"],t.prototype.onDeleteTag=function(t){var e,n,i,o;return this.loadingRemoveTag=t[0],n=function(t){return function(e){return t.rootScope.$broadcast("object:updated"),t.loadingRemoveTag=!1,e}}(this),e=function(t){return function(){return t.confirm.notify("error"),t.loadingRemoveTag=!1}}(this),i=r(t[0].toLowerCase()),o=this.modelTransform.save(function(t){var e;return e=_.clone(t.tags),_.remove(e,function(t){return t[0]===i}),t.tags=e,t}),o.then(n,e)},t.prototype.onAddTag=function(t,e){var n,i,o;return this.loadingAddTag=!0,i=function(t){return function(e){return t.rootScope.$broadcast("object:updated"),t.rootScope.$broadcast("tags:updated"),t.addTag=!1,t.loadingAddTag=!1,e}}(this),n=function(t){return function(){return t.loadingAddTag=!1,t.confirm.notify("error")}}(this),o=this.modelTransform.save(function(n){return function(n){var i,o;return o=r(t.toLowerCase()),i=_.clone(n.tags),i.push([t,e]),n.tags=i,n}}(this)),o.then(i,n)},t}(),e.controller("TagLineCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaCommon"),t=function(){return{scope:{item:"=",permissions:"@",project:"="},templateUrl:"components/tags/tag-line-detail/tag-line-detail.html",controller:"TagLineCtrl",controllerAs:"vm",bindToController:!0}},e.directive("tgTagLine",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=angular.module("taigaCommon"),t=function(t){function e(){}return r(e,t),e.$inject=[],e.prototype.checkPermissions=function(t,e){return _.includes(t,e)},e.prototype.createColorsArray=function(t){return _.map(t,function(t,e){return[e,t]})},e}(taiga.Service),e.service("tgTagLineService",t)}.call(this),function(){var t,e;e=angular.module("taigaCommon"),t=function(){return{templateUrl:"components/tags/tag/tag.html",scope:{tag:"<",loadingRemoveTag:"<",onDeleteTag:"&",hasPermissions:"@"}}},e.directive("tgTag",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n,i){var o,s;return e.zoomIndex=t.get("taskboard_zoom")||2,e.levels=4,s=[["ref"],["subject"],["owner","tags","extra_info","unfold"],["attachments","empty_extra_info"],["related_tasks"]],o=function(e){return null==e&&(e=0),t.get("taskboard_zoom")!==e&&t.set("taskboard_zoom",e),_.reduce(s,function(t,r,n){return n<=e&&(t=t.concat(r)),t})},e.$watch("zoomIndex",function(t){var r;return r=o(t),e.onZoomChange({zoomLevel:t,zoom:r})})},{scope:{onZoomChange:"&"},template:'',link:e}},angular.module("taigaComponents").directive("tgTaskboardZoom",["$tgStorage",t])}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i){var o,s,a;if(e.hasPermission("modify_task"))return o=t(i.tgTasksSortable),s=dragula([n[0]],{copySortSource:!1,copy:!1,mirrorContainer:n[0],moves:function(t){return $(t).is("div.single-related-task.js-related-task")}}),s.on("dragend",function(t){var e,n,i;return e=$(t),i=e.scope().task,n=e.index(),r.$apply(function(){return o(r,{task:i,newIndex:n})})}),a=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&s.dragging}}),r.$on("$destroy",function(){return n.off(),s.destroy()})},{link:r}},t.$inject=["$parse","tgProjectService"],angular.module("taigaComponents").directive("tgTasksSortable",t)}.call(this),function(){var t;t=function(t,e,r,n,i){var o;return o=function(t,e,r){return t.privacyPolicyUrl=n.get("privacyPolicyUrl"),t.termsOfServiceUrl=n.get("termsOfServiceUrl"),t.GDPRUrl=n.get("GDPRUrl")},{restrict:"AE",scope:{},controllerAs:"vm",controller:function(){return this.close=function(){var n,o,s;return t.open=!1,o=r.getUser(),void 0===o.read_new_terms&&(s=o.getAttrs(),s.read_new_terms=!1,o=i.make_model("users",s)),o.read_new_terms=!0,n=function(t){return r.setUser(t)},e.save(o).then(n)},Object.defineProperties(this,{open:{get:function(){return t.open}}})},link:o,templateUrl:"components/terms-announcement/terms-announcement.html"}},t.$inject=["tgTermsAnnouncementService","$tgRepo","$tgAuth","$tgConfig","$tgModel"],angular.module("taigaComponents").directive("tgTermsAnnouncement",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(){this.open=!1}return e(r,t),r.prototype.show=function(){return this.open=!0},r}(taiga.Service),angular.module("taigaComponents").service("tgTermsAnnouncementService",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){return e.privacyPolicyUrl=t.get("privacyPolicyUrl"),e.termsOfServiceUrl=t.get("termsOfServiceUrl"),e.target=!1,e.privacyPolicyUrl&&e.termsOfServiceUrl||(e.target=!0),r.on("change","input[name='accepted_terms']",function(t){var r;return r=angular.element(t.currentTarget),e.target=r.is(":checked"),e.$apply()})},{restrict:"AE",link:e,scope:{target:"="},templateUrl:"components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html"}},angular.module("taigaComponents").directive("tgTermsOfServiceAndPrivacyPolicyNotice",["$tgConfig",t])}.call(this),function(){var t,e,r;e=this.taiga.timeout,t=angular.module("taigaComponents"),r=function(t,r){var n,i,o;return o=[{contentType:"icon",icon:"icon-project",message:"PROJECTS_ORDER"},{contentType:"icon",icon:"icon-upvote",message:"VOTING"},{contentType:"icon",icon:"icon-attach",message:"ISSUES_TO_SPRINT"},{contentType:"icon",icon:"icon-clock",message:"DUE_DATE"},{contentType:"icon",icon:"icon-iocaine",message:"IOCAIN"},{contentType:"icon",icon:"icon-blocked-project",message:"BLOCKED"},{contentType:"icon",icon:"icon-promote",message:"PROMOTE"},{contentType:"icon",icon:"icon-bulk",message:"BULK"},{contentType:"range",message:"ZOOM"},{contentType:"icon",icon:"icon-settings",message:"CUSTOM_FIELDS"},{contentType:"arrows",message:"SLIDE_ARROWS"}],i=function(t){return Math.floor(Math.random()*t)+1},n=function(r,n,s){var a,c;return r.tipLoaded=!1,c=null,t.onStart(function(){return c=e(1e3,function(){return a()})}),t.onEnd(function(){return clearTimeout(c),r.tipLoaded=!1}),a=function(){var t;return r.tipLoaded=!0,t=o[i(o.length-1)],r.tip={contentType:t.contentType,message:"TIPS.TIP_"+t.message,icon:t.icon,color:"tip-color-"+i(5)}}},{link:n,scope:!0,templateUrl:"components/tips/tip.html"}},t.directive("tgTips",["tgLoader","$translate",r])}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i){return r.vm={},r.vm.tribeHost=t.config.tribeHost,r.vm.url=e.protocol()+"://"+e.host(),"http"===e.protocol()&&80!==e.port()?r.vm.url=r.vm.url+":"+e.port():"https"===e.protocol()&&443!==e.port()?r.vm.url=r.vm.url+":"+e.port():void 0},{scope:{usId:"=",projectSlug:"="},controllerAs:"vm",templateUrl:"components/tribe-button/tribe-button.html",link:r}},t.$inject=["$tgConfig","$tgLocation"],angular.module("taigaComponents").directive("tgTribeButton",t)}.call(this),function(){var t;t=function(t){var e,r;return r=function(e,r,n){return e.vm={},e.vm.tribeHost=t.config.tribeHost,e.vm.show=function(){return e.vm.open=!0},e.vm.hide=function(t){return e.vm.open=!1}},e={templateUrl:"components/tribe-button/tribe-linked.html",scope:{gigTitle:"=",gigId:"="},link:r}},t.$inject=["$tgConfig"],angular.module("taigaComponents").directive("tgTribeLinked",t)}.call(this),function(){var t;t=function(){function t(t){this.currentUserService=t,this.user=this.currentUserService.getUser(),this.isMouseOver=!1,this.loading=!1}return t.$inject=["tgCurrentUserService"],t.prototype.showTextWhenMouseIsOver=function(){return this.isMouseOver=!0},t.prototype.showTextWhenMouseIsLeave=function(){return this.isMouseOver=!1},t.prototype.toggleVote=function(){var t;return this.loading=!0,t=this.item.is_voter?this._downvote():this._upvote(),t["finally"](function(t){return function(){return t.loading=!1}}(this)),t},t.prototype._upvote=function(){return this.onUpvote().then(function(t){return function(){return t.showTextWhenMouseIsLeave()}}(this))},t.prototype._downvote=function(){return this.onDownvote()},t}(),angular.module("taigaComponents").controller("VoteButton",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"VoteButton",bindToController:{item:"=",onUpvote:"=",onDownvote:"="},controllerAs:"vm",templateUrl:"components/vote-button/vote-button.html"}},angular.module("taigaComponents").directive("tgVoteButton",t)}.call(this),function(){var t;t=function(){function t(t,e){this.currentUserService=t,this.rootScope=e,this.user=this.currentUserService.getUser(),this.isMouseOver=!1,this.loading=!1}return t.$inject=["tgCurrentUserService","$rootScope"],t.prototype.showTextWhenMouseIsOver=function(){return this.isMouseOver=!0},t.prototype.showTextWhenMouseIsLeave=function(){return this.isMouseOver=!1},t.prototype.openWatchers=function(){return this.rootScope.$broadcast("watcher:add",this.item)},t.prototype.getPerms=function(){var t,e;return this.item?(t=this.item._name,e={userstories:"modify_us",issues:"modify_issue",tasks:"modify_task",epics:"modify_epic"},e[t]):""},t.prototype.toggleWatch=function(){var t;return this.loading=!0,t=this.item.is_watcher?this._unwatch():this._watch(),t["finally"](function(t){return function(){return t.loading=!1}}(this)),t},t.prototype._watch=function(){return this.onWatch().then(function(t){return function(){return t.showTextWhenMouseIsLeave()}}(this))},t.prototype._unwatch=function(){return this.onUnwatch()},t}(),angular.module("taigaComponents").controller("WatchButton",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"WatchButton",bindToController:{item:"=",onWatch:"=",onUnwatch:"="},controllerAs:"vm",templateUrl:function(t,e){return"components/watch-button/watch-button-"+e.environment+".html"}}},angular.module("taigaComponents").directive("tgWatchButton",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i,o;return i={epics:"epic",userstories:"us",issues:"issue",tasks:"task"},o=function(r,n){return t.addAttachment(e.vm.projectId,e.vm.comment.comment.id,i[e.vm.comment.comment._name],r,!0,!0).then(function(t){return n(t.getIn(["file","name"]),t.getIn(["file","url"]))})},e.uploadFiles=function(t,e){var r,n,i,s;for(s=[],n=0,i=t.length;n\n \n \n"}},angular.module("taigaComponents").directive("tgCommentEditWysiwyg",["tgAttachmentsFullService",t])}.call(this),function(){var t;t=function(t,e,r){var n;return n=function(n,i,o){var s,a;return n.editableDescription=!1,n.saveComment=function(r,i){var o;return n.content="",n.vm.type.comment=r,o=t.save(function(t){}),o.then(function(){return n.vm.onAddComment&&n.vm.onAddComment(),e.$broadcast("object:updated")}),o["finally"](i)},s={epics:"epic",userstories:"us",issues:"issue",tasks:"task"},a=function(t,e){return r.addAttachment(n.vm.projectId,n.vm.type.id,s[n.vm.type._name],t,!0,!0).then(function(t){return e(t.getIn(["file","name"]),t.getIn(["file","url"]))})},n.onChange=function(t){return n.vm.type.comment=t},n.uploadFiles=function(t,e){var r,n,i,o;for(o=[],n=0,i=t.length;n\n \n \n"}},angular.module("taigaComponents").directive("tgCommentWysiwyg",["$tgQueueModelTransformation","$rootScope","tgAttachmentsFullService",t])}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i,o;return i={userstories:"us",issues:"issue",tasks:"task"},o=function(r,n){return t.addAttachment(e.vm.projectId,e.vm.comment.comment.id,i[e.vm.comment.comment._name],r).then(function(t){return n(t.getIn(["file","name"]),t.getIn(["file","url"]))})},e.uploadFiles=function(t,e){var r,n,i,s;for(s=[],n=0,i=t.length;n\n \n \n"}},angular.module("taigaComponents").directive("tgCustomFieldEditWysiwyg",["tgAttachmentsFullService",t])}.call(this),function(){var t;t=function(t,e,r,n,i){var o;return o=function(i,o,s){var a;return i.editableDescription=!1,i.saveDescription=function(n,i){var o;return o=t.save(function(t){return t.description=n,t}),o.then(function(){return r.notify("success"),e.$broadcast("object:updated")}),o.then(null,function(){return r.notify("error")}),o["finally"](i)},a=function(t,e){return n.addAttachment(i.project.id,i.item.id,s.type,t).then(function(t){return e(t.getIn(["file","name"]),t.getIn(["file","url"]))})},i.uploadFiles=function(t,e){var r,n,i,o;for(o=[],n=0,i=t.length;n\n \n \n\n \n\n \n {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}}\n \n"}},angular.module("taigaComponents").directive("tgItemWysiwyg",["$tgQueueModelTransformation","$rootScope","$tgConfirm","tgAttachmentsFullService","$translate",t])}.call(this),function(){var t;t=function(){function t(){Prism.plugins.customClass.prefix("prism-"),Prism.plugins.customClass.map({})}return t.prototype.getLanguages=function(){return new Promise(function(t){return function(e,r){return t.languages?e(t.languages):t.loadPromise?t.loadPromise.then(function(){return e(t.languages)}):t.loadPromise=$.getJSON("/"+window._version+"/prism/prism-languages.json").then(function(r){return t.loadPromise=null,t.languages=_.map(r,function(t){return t.url="/"+window._version+"/prism/"+t.file,t}),e(t.languages)})}}(this))},t.prototype.getLanguageInClassList=function(t){var e;return e=_.find(this.languages,function(e){return!!_.find(t,function(t){return"language-"+e.name===t})}),e?e.name:null},t.prototype.loadLanguage=function(t){return new Promise(function(e){return Prism.languages[t]?e():ljs.load("/"+window._version+"/prism/prism-"+t+".min.js",e)})},t.prototype.replaceCodeBrToNl=function(t){return $(t).find("br").replaceWith("\n")},t.prototype.hightlightCode=function(t){var e;if(this.replaceCodeBrToNl(t),e=this.getLanguageInClassList(t.classList))return this.loadLanguage(e).then(function(){return Prism.highlightElement(t)})},t.prototype.addHightlighter=function(t){var e;return e=$(t).find("code"),e.each(function(t){return function(e,r){return t.hightlightCode(r)}}(this))},t}(),angular.module("taigaComponents").service("tgWysiwygCodeHightlighterService",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n,i){return e.$watch("visible",function(n){return n&&!r.hasClass("open")?(e.open=!0,t.open(r,null,e.onClose),e.$applyAsync(function(){var t;if(t=r[0].querySelector("textarea"))return t.select()})):!n&&r.hasClass("open")?(e.open=!1,t.close(r)):void 0})},{scope:{languages:"<",codeLanguage:"<",code:"<",visible:"<",onClose:"&",onSave:"&"},link:e,templateUrl:"components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.html"}},angular.module("taigaComponents").directive("tgWysiwygCodeLightbox",["lightboxService",t])}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.projectService=t,this.wysiwygService=e,this.navurls=r,this.rs=n,this.cancelablePromise=null,this.projectSlug=this.projectService.project.get("slug")}return t.$inject=["tgProjectService","tgWysiwygService","$tgNavUrls","$tgResources"],t.prototype.search=function(t){return new Promise(function(e){return function(r){return"#".indexOf(t[0])!==-1?e.searchItem(t.replace("#","")).then(r):"@".indexOf(t[0])!==-1?e.searchUser(t.replace("@",""),r):":".indexOf(t[0])!==-1?e.searchEmoji(t.replace(":",""),r):void 0}}(this))},t.prototype.searchItem=function(t){return new Promise(function(e){return function(r,n){var i;return t=taiga.slugify(t),i=function(e){return["subject","ref"].some(function(r){return taiga.slugify(e[r]).indexOf(t)>=0})},e.rs.search["do"](e.projectService.project.get("id"),t).then(function(t){var n,o,s,a,c,u,l;if(c=[],t.count&&t.count!==t.wikipages.length){for(l={issues:"project-issues-detail",userstories:"project-userstories-detail",tasks:"project-tasks-detail"},a=["issues","tasks","userstories"],n=0,s=a.length;n=0||e[r].indexOf(t)>=0})}),r=r.slice(0,10).map(function(t){return function(e){return e.url=t.navurls.resolve("user-profile",{project:t.projectSlug,username:e.username}),e}}(this)),e(r)},t.prototype.searchEmoji=function(t,e){var r;return r=this.wysiwygService.searchEmojiByName(t),r=r.slice(0,10),e(r)},t}(),angular.module("taigaComponents").service("tgWysiwygMentionService",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.bindOnce,t=function(t,e,n,i,o,s,a,c,u,l){var p,d,f,h,g,m,v,y,b,S,j,k;return k=function(){if(window.getSelection){if(window.getSelection().empty)return window.getSelection().empty()}else{if(window.getSelection().removeAllRanges)return window.getSelection().removeAllRanges();if(document.selection)return document.selection.empty()}},m=function(t){return $(t.endContainer).parentsUntil(".editor","code")},v=function(t){return!!m(t).length},j=function(t,e){var r,n,i;return r=$(t).is("code")?t:$(t).closest("code")[0],i=r.parentNode,n=document.createElement("p"),n.innerText=r.innerText,i.parentNode.replaceChild(n,i),e.checkContentChanged(e.elements[0])},h=function(t,e){var r,n,i,o;return i=document.createElement("pre"),r=document.createElement("code"),t.startContainer.parentNode.nextSibling||$("
").insertAfter(t.startContainer.parentNode),o=t.endContainer.parentNode.nextSibling,n=t.extractContents(),r.appendChild(n),i.appendChild(r),o.parentNode.insertBefore(i,o),S(e),e.checkContentChanged(e.elements[0])},S=function(e){var r,n,i,o,s,a,c,u,l,p;if(e){for(l=e.elements[0].children,r=0,i=l.length;rRTL",this.button.title="RTL",this.on(this.button,"click",this.handleClick.bind(this))},getButton:function(){return this.button},handleClick:function(t){var e;return e=MediumEditor.selection.getSelectionRange(document),"right"===e.commonAncestorContainer.parentNode.style.textAlign?document.execCommand("justifyLeft",!1):document.execCommand("justifyRight",!1)}}),g=function(t){return'\n \n'},d=MediumEditor.extensions.button.extend({name:"code",init:function(){var t;return t=_.find(this.base.options.toolbar.buttons,function(t){return"code"===t.name}),this.button=this.document.createElement("button"),this.button.classList.add("medium-editor-action"),this.button.innerHTML=t.contentDefault||"Code",this.button.title="Code",this.on(this.button,"click",this.handleClick.bind(this))},getButton:function(){return this.button},tagNames:["code"],handleClick:function(t){var e,r;if(e=MediumEditor.selection.getSelectionRange(self.document), -v(e,this.base)?j(e.endContainer,this.base):(h(e,this.base),k()),r=this.base.getExtensionByName("toolbar"))return r.hideToolbar()}}),f=MediumEditor.extensions.paste.extend({doPaste:function(t,e,r){var n;return n=MediumEditor.util.htmlEntities(e),MediumEditor.util.insertHTMLCommand(this.document,n)}}),b=MediumEditor.util.isBlockContainer,MediumEditor.util.isBlockContainer=function(t){var e;return t?(e=t.tagName?t.tagName:t.parentNode.tagName,"code"===e.toLowerCase()||b(t)):b(t)},y=function(o,h,m){var v,y,b,k,I,T,E,C,P,w,A,O,R,M,U,N,D,x,L,F,B,H;return R=null,E=h.find(".medium"),T=h.find(".markdown"),b=null,w=!!m.$attr.editonly,M=!!m.$attr.notPersist,o.required=!!m.$attr.required,o.editMode=w||!1,o.mode=n.get("editor-mode","html"),o.markdown="",o.codeEditorVisible=!1,o.codeLans=[],a.getLanguages().then(function(t){return o.codeLans=t}),D=function(t){return o.editMode=t},x=function(t){var e;if(e=i.getHTML(t),E.html(e),a.addHightlighter(R.elements[0]),o.editMode)return S(R)},o.saveSnippet=function(t,e){var r;return o.codeEditorVisible=!1,b.innerText=e,r=b.parentNode,"remove-formating"===t?(b.className="",r.className="",j(b,R)):_.trim(e).length?(t?(b.className="language-"+t,r.className="language-"+t):(b.className="",r.className=""),a.hightlightCode(b),R.checkContentChanged(R.elements[0])):(b.parentNode.parentNode.removeChild(b.parentNode),R.checkContentChanged(R.elements[0])),L(),null},o.setMode=function(t){return n.set("editor-mode",t),"markdown"===t?B():x(o.markdown),o.mode=t,R.trigger("editableBlur",{},E[0])},o.save=function(t){t&&t.preventDefault(),"html"===o.mode&&B(),x(o.markdown),o.required&&!o.markdown.length||(o.saving=!0,o.outdated=!1,o.onSave({text:o.markdown,cb:N}))},o.cancel=function(t){t&&t.preventDefault(),w||D(!1),M?y():"html"===o.mode&&x(o.content||null),o.markdown=o.content,I(),R.trigger("blur",{},E[0]),o.outdated=!1,S(R),o.onCancel()},y=function(){return o.markdown="",E.html("")},N=function(){return o.saving=!1,w||D(!1),M&&y(),I(),R.trigger("blur",{},E[0]),u.trackEvent("develop","save wysiwyg",o.mode,1)},H=function(t,e){return r.isImage(t)?R.pasteHTML("
"):(t=$("
").text(t).html(),R.pasteHTML(""+t+"
"))},A=function(){var t;return t=n.get(o.storageKey),!(!t||!t.version||t.version===o.version)},P=function(){var t;return t=n.get(o.storageKey),!!t},C=function(){var t;return t=n.get(o.storageKey),t?t.text:o.content},I=function(){return n.remove(o.storageKey)},o.cancelWithConfirmation=function(){var r,n;return o.content===o.markdown?(o.cancel(),document.activeElement.blur(),document.body.click(),null):(n=t.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_TITLE"),r=t.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_MESSAGE"),e.ask(n,null,r).then(function(t){return o.cancel(),t.finish()}))},U=function(){var t;return t=$("
").html(E.html()),t.find("code br").replaceWith("\n"),t.html()},B=function(){var t;return t=U(),o.markdown=i.getMarkdown(t)},O=function(t){var e;if(o.storageKey)return e={},e.version=o.version||0,e.text=t,n.set(o.storageKey,e)},v=function(){return"html"===o.mode&&B(),O(o.markdown),o.onChange({markdown:o.markdown})},L=_.throttle(v,200),k=function(t,e){var r;return null==e&&(e=!1),t.length&&(r=i.getHTML(t),E.html(r)),R=new MediumEditor(E[0],{imageDragging:!1,placeholder:{text:o.placeholder},toolbar:{buttons:[{name:"bold",contentDefault:g("editor-bold")},{name:"italic",contentDefault:g("editor-italic")},{name:"strikethrough",contentDefault:g("editor-cross-out")},{name:"anchor",contentDefault:g("editor-link")},{name:"image",contentDefault:g("editor-image")},{name:"orderedlist",contentDefault:g("editor-list-n")},{name:"unorderedlist",contentDefault:g("editor-list-o")},{name:"h1",contentDefault:g("editor-h1")},{name:"h2",contentDefault:g("editor-h2")},{name:"h3",contentDefault:g("editor-h3")},{name:"quote",contentDefault:g("editor-quote")},{name:"removeFormat",contentDefault:g("editor-no-format")},{name:"rtl",contentDefault:g("editor-rtl")},{name:"code",contentDefault:g("editor-code")}]},extensions:{paste:new f,code:new d,autolist:new AutoList,alignright:new p,mediumMention:new MentionExtension({getItems:function(t,e){return c.search(t).then(e)}})}}),o.changeMarkdown=L,R.subscribe("editableInput",function(t){return o.$applyAsync(L)}),R.subscribe("editableClick",function(t){var e;if(e=new RegExp("^(?:[a-z]+:)?//","i"),t.target.href)return e.test(t.target.getAttribute("href"))||"_blank"===t.target.getAttribute("target")?(t.stopPropagation(),window.open(t.target.href)):l.url(t.target.href)}),R.subscribe("editableDrop",function(t){return o.onUploadFile({files:t.dataTransfer.files,cb:H})}),R.subscribe("editableKeydown",function(t){var e,r;return e=t.keyCode?t.keyCode:t.which,r=$(".medium-mention"),40!==e&&38!==e||!r.length?o.editMode&&27===e?(t.stopPropagation(),o.$applyAsync(o.cancelWithConfirmation)):27===e?E.blur():void 0:(t.stopPropagation(),void t.preventDefault())}),D(e),o.$applyAsync(function(){return a.addHightlighter(R.elements[0]),S(R)})},$(E[0]).on("mousedown",function(t){return t.target.href?(t.preventDefault(),t.stopPropagation()):o.$applyAsync(function(){if(!o.editMode)return D(!0),S(R)})}),$(E[0]).on("dblclick","pre",function(t){return o.$applyAsync(function(){return o.codeEditorVisible=!0,b=t.currentTarget.querySelector("code"),o.currentCodeLanguage=a.getLanguageInClassList(b.classList),o.code=b.innerText})}),F=o.$watch("content",function(t){var e;if(!_.isUndefined(t)){if(o.outdated=A(),!R&&P()&&D(!0),(o.markdown.length||t.length)&&o.markdown===t)return;return t=C(),o.markdown=t,R&&R.destroy(),s.open()?e=s.onEnd(function(){return k(t,o.editMode),e()}):k(t,o.editMode),F()}}),o.$on("$destroy",function(){if(R)return E.length&&$(E[0]).off(),R.destroy()})},{templateUrl:"common/components/wysiwyg-toolbar.html",scope:{placeholder:"@",version:"<",storageKey:"<",content:"<",onCancel:"&",onSave:"&",onUploadFile:"&",onChange:"&"},link:y}},angular.module("taigaComponents").directive("tgWysiwyg",["$translate","$tgConfirm","$tgStorage","tgWysiwygService","animationFrame","tgLoader","tgWysiwygCodeHightlighterService","tgWysiwygMentionService","$tgAnalytics","$location",t])}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.wysiwygCodeHightlighterService=t,this.projectService=e,this.navurls=r,this.emojis=n}return t.$inject=["tgWysiwygCodeHightlighterService","tgProjectService","$tgNavUrls","$tgEmojis"],t.prototype.searchEmojiByName=function(t){return this.emojis.searchByName(t)},t.prototype.pipeLinks=function(t){return t.replace(/\[\[(.*?)\]\]/g,function(t,e,r,n){var i,o,s;return o=e.split("|"),i=o[0],s=o[1]||o[0],"["+s+"]("+i+")"})},t.prototype.replaceUrls=function(t){var e,r,n,i,o;for(e=document.createElement("html"),e.innerHTML=t,o=e.querySelectorAll("a"),r=0,n=o.length;r(.*?)
<\/li>/g,"
  • $1
  • ")},t.prototype.getMarkdown=function(t){var e,r,n;return e={filter:["html","body","span","div"],replacement:function(t){return t}},r={filter:function(t){return function(t){return"PRE"===t.nodeName&&t.firstChild&&"CODE"===t.firstChild.nodeName}}(this),replacement:function(t){return function(e,r){var n;return n=t.wysiwygCodeHightlighterService.getLanguageInClassList(r.firstChild.classList),n||(n=""),"\n\n```"+n+"\n"+_.trim(r.firstChild.textContent)+"\n```\n\n"}}(this)},t=t.replace(/ (<\/.*>)/g,"$1"),t=this.emojis.replaceImgsByEmojiName(t),t=this.replaceUrls(t),t=this.removeTrailingListBr(t),n=toMarkdown(t,{gfm:!0,converters:[e,r]})},t.prototype.parseMentionMatches=function(t){var e,r,n,i,o,s,a;for(s="twitter",a=this.tagBuilder,r=[],o=/@[^\s]{1,50}[^.\s]/g,e=o.exec(t);null!==e;)n=e.index,i=t.charAt(n-1),e.index===o.lastIndex&&o.lastIndex++,e.forEach(function(t,e){return r.push(new Autolinker.match.Mention({tagBuilder:a,matchedText:t,offset:n,serviceName:s,mention:t.slice(1)}))}),e=o.exec(t);return r},t.prototype.autoLinkHTML=function(t){var e,r;return r=String(Autolinker.matcher.Mention.prototype.matcherRegexes.twitter),r.indexOf(".")===-1&&(r="@[^s]{1,50}[^.s]"),e=new Autolinker({mention:"twitter",hashtag:"twitter",replaceFn:function(t){return function(e){var r,n;return"mention"===e.getType()?(r=t.navurls.resolve("user-profile",{project:t.projectService.project.get("slug"),username:e.getMention()}),'@'+e.getMention()+""):"hashtag"===e.getType()?(n=t.navurls.resolve("project-detail-ref",{project:t.projectService.project.get("slug"),ref:e.getHashtag()}),'#'+e.getHashtag()+""):void 0}}(this)}),Autolinker.matcher.Mention.prototype.parseMatches=this.parseMentionMatches.bind(e),e.link(t)},t.prototype.getHTML=function(t){var e,r,n;return t&&t.length?(r={breaks:!0},t=this.emojis.replaceEmojiNameByImgs(t),t=this.pipeLinks(t),e=window.markdownit({breaks:!0}),e.use(window.markdownitLazyHeaders),n=e.render(t),n=this.searchWikiLinks(n),n=this.autoLinkHTML(n)):""},t}(),angular.module("taigaComponents").service("tgWysiwygService",t)}.call(this),function(){var t;t=function(){function t(t){this.translate=t,this.is_open=!1,this.texts={week:this.translate.instant("DISCOVER.FILTERS.WEEK"),month:this.translate.instant("DISCOVER.FILTERS.MONTH"),year:this.translate.instant("DISCOVER.FILTERS.YEAR"),all:this.translate.instant("DISCOVER.FILTERS.ALL_TIME")}}return t.$inject=["$translate"],t.prototype.currentText=function(){return this.texts[this.currentOrderBy]},t.prototype.open=function(){return this.is_open=!0},t.prototype.close=function(){return this.is_open=!1},t.prototype.orderBy=function(t){return this.currentOrderBy=t,this.is_open=!1,this.onChange({orderBy:this.currentOrderBy})},t}(),angular.module("taigaDiscover").controller("DiscoverHomeOrderBy",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r){},{controller:"DiscoverHomeOrderBy",controllerAs:"vm",bindToController:!0,templateUrl:"discover/components/discover-home-order-by/discover-home-order-by.html",scope:{currentOrderBy:"=orderBy",onChange:"&"},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgDiscoverHomeOrderBy",t)}.call(this),function(){var t;t=function(){function t(t){this.discoverProjectsService=t,taiga.defineImmutableProperty(this,"projects",function(t){return function(){return t.discoverProjectsService.projectsCount}}(this)),this.discoverProjectsService.fetchStats()}return t.$inject=["tgDiscoverProjectsService"],t.prototype.selectFilter=function(t){return this.onChange({filter:t,q:this.q})},t.prototype.submitFilter=function(){return this.onChange({filter:this.filter,q:this.q})},t}(),angular.module("taigaDiscover").controller("DiscoverSearchBar",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{controller:"DiscoverSearchBar",controllerAs:"vm",templateUrl:"discover/components/discover-search-bar/discover-search-bar.html",bindToController:!0,scope:{q:"=",filter:"=",onChange:"&"},compile:function(t,e){if(!e.q)return e.q=""},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgDiscoverSearchBar",t)}.call(this),function(){var t;t=function(){function t(){this.like_is_open=0===this.orderBy.indexOf("-total_fans"),this.activity_is_open=0===this.orderBy.indexOf("-total_activity")}return t.$inject=[],t.prototype.openLike=function(){return this.like_is_open=!0,this.activity_is_open=!1,this.setOrderBy("-total_fans_last_week")},t.prototype.openActivity=function(){return this.activity_is_open=!0,this.like_is_open=!1,this.setOrderBy("-total_activity_last_week")},t.prototype.setOrderBy=function(t){return null==t&&(t=""),t||(this.like_is_open=!1,this.activity_is_open=!1),this.onChange({orderBy:t})},t}(),angular.module("taigaDiscover").controller("DiscoverSearchListHeader",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r){},{controller:"DiscoverSearchListHeader",controllerAs:"vm",bindToController:!0,templateUrl:"discover/components/discover-search-list-header/discover-search-list-header.html",scope:{onChange:"&",orderBy:"="},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgDiscoverSearchListHeader",t)}.call(this),function(){var t;t=function(){function t(t){this.discoverProjectsService=t,taiga.defineImmutableProperty(this,"featured",function(t){return function(){return t.discoverProjectsService.featured}}(this)),this.discoverProjectsService.fetchFeatured()}return t.$inject=["tgDiscoverProjectsService"],t}(),angular.module("taigaDiscover").controller("FeaturedProjects",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r){},{controller:"FeaturedProjects",controllerAs:"vm",templateUrl:"discover/components/featured-projects/featured-projects.html",scope:{},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgFeaturedProjects",t)}.call(this),function(){var t;t=function(){return{templateUrl:"discover/components/highlighted/highlighted.html",scope:{loading:"=",highlighted:"=",orderBy:"="}}},t.$inject=[],angular.module("taigaDiscover").directive("tgHighlighted",t)}.call(this),function(){var t;t=function(){function t(t){this.discoverProjectsService=t,taiga.defineImmutableProperty(this,"highlighted",function(t){return function(){return t.discoverProjectsService.mostActive}}(this)),this.currentOrderBy="week",this.order_by=this.getOrderBy()}return t.$inject=["tgDiscoverProjectsService"],t.prototype.fetch=function(){return this.loading=!0,this.order_by=this.getOrderBy(),this.discoverProjectsService.fetchMostActive({order_by:this.order_by}).then(function(t){return function(){return t.loading=!1}}(this))},t.prototype.orderBy=function(t){return this.currentOrderBy=t,this.fetch()},t.prototype.getOrderBy=function(t){return"all"===this.currentOrderBy?"-total_activity":"-total_activity_last_"+this.currentOrderBy},t}(),angular.module("taigaDiscover").controller("MostActive",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.fetch()},{controller:"MostActive",controllerAs:"vm",templateUrl:"discover/components/most-active/most-active.html",scope:{},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgMostActive",t)}.call(this),function(){var t;t=function(){function t(t){this.discoverProjectsService=t,taiga.defineImmutableProperty(this,"highlighted",function(t){return function(){return t.discoverProjectsService.mostLiked}}(this)),this.currentOrderBy="week",this.order_by=this.getOrderBy()}return t.$inject=["tgDiscoverProjectsService"],t.prototype.fetch=function(){return this.loading=!0,this.order_by=this.getOrderBy(),this.discoverProjectsService.fetchMostLiked({order_by:this.order_by}).then(function(t){return function(){return t.loading=!1}}(this))},t.prototype.orderBy=function(t){return this.currentOrderBy=t,this.fetch()},t.prototype.getOrderBy=function(){return"all"===this.currentOrderBy?"-total_fans":"-total_fans_last_"+this.currentOrderBy},t}(),angular.module("taigaDiscover").controller("MostLiked",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.fetch()},{controller:"MostLiked",controllerAs:"vm",templateUrl:"discover/components/most-liked/most-liked.html",scope:{},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgMostLiked",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n){var i,o;this.location=t,this.navUrls=e,this.appMetaService=r,this.translate=n,o=this.translate.instant("DISCOVER.PAGE_TITLE"),i=this.translate.instant("DISCOVER.PAGE_DESCRIPTION"),this.appMetaService.setAll(o,i)}return t.$inject=["$tgLocation","$tgNavUrls","tgAppMetaService","$translate"],t.prototype.onSubmit=function(t){var e;return e=this.navUrls.resolve("discover-search"),this.location.search("text",t).path(e)},t}(),angular.module("taigaDiscover").controller("DiscoverHome",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n,i,o,s){var a,c;this.routeParams=t,this.discoverProjectsService=e,this.route=r,this.location=n,this.analytics=i,this.appMetaService=o,this.translate=s,this.page=1,taiga.defineImmutableProperty(this,"searchResult",function(t){return function(){return t.discoverProjectsService.searchResult}}(this)),taiga.defineImmutableProperty(this,"nextSearchPage",function(t){return function(){return t.discoverProjectsService.nextSearchPage}}(this)),this.q=this.routeParams.text,this.filter=this.routeParams.filter||"all",this.orderBy=this.routeParams.order_by||"",this.loadingGlobal=!1,this.loadingList=!1,this.loadingPagination=!1,c=this.translate.instant("DISCOVER.SEARCH.PAGE_TITLE"),a=this.translate.instant("DISCOVER.SEARCH.PAGE_DESCRIPTION"),this.appMetaService.setAll(c,a),this.analytics.trackPage(this.location.url(),"Discover Search")}return t.$inject=["$routeParams","tgDiscoverProjectsService","$route","$tgLocation","$tgAnalytics","tgAppMetaService","$translate"],t.prototype.fetch=function(){return this.page=1,this.discoverProjectsService.resetSearchList(),this.search()},t.prototype.fetchByGlobalSearch=function(){if(!this.loadingGlobal)return this.loadingGlobal=!0,this.fetch().then(function(t){return function(){return t.loadingGlobal=!1}}(this))},t.prototype.fetchByOrderBy=function(){if(!this.loadingList)return this.loadingList=!0,this.fetch().then(function(t){return function(){return t.loadingList=!1}}(this))},t.prototype.showMore=function(){if(!this.loadingPagination)return this.loadingPagination=!0,this.page++,this.search().then(function(t){return function(){return t.loadingPagination=!1}}(this))},t.prototype.search=function(){var t,e;return t=this.getFilter(),e={page:this.page,q:this.q,order_by:this.orderBy},_.assign(e,t),this.discoverProjectsService.fetchSearch(e)},t.prototype.getFilter=function(){return"people"===this.filter?{is_looking_for_people:!0}:"scrum"===this.filter?{is_backlog_activated:!0}:"kanban"===this.filter?{is_kanban_activated:!0}:{}},t.prototype.onChangeFilter=function(t,e){return this.filter=t,this.q=e,this.route.updateParams({filter:this.filter,text:this.q}),this.analytics.trackPage(this.location.url(),"Discover Search"),this.fetchByGlobalSearch()},t.prototype.onChangeOrder=function(t){return this.orderBy=t,this.route.updateParams({order_by:t}),this.analytics.trackPage(this.location.url(),"Discover Search"),this.fetchByOrderBy()},t}(),angular.module("taigaDiscover").controller("DiscoverSearch",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.fetch()},{controller:"DiscoverSearch",controllerAs:"vm",link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgDiscoverSearch",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga,t=function(t){function n(t,r){this.rs=t,this.projectsService=r,this._mostLiked=Immutable.List(),this._mostActive=Immutable.List(),this._featured=Immutable.List(),this._searchResult=Immutable.List(),this._projectsCount=0,this.decorate=this.projectsService._decorate.bind(this.projectsService),e.defineImmutableProperty(this,"mostLiked",function(t){return function(){return t._mostLiked}}(this)),e.defineImmutableProperty(this,"mostActive",function(t){return function(){return t._mostActive}}(this)),e.defineImmutableProperty(this,"featured",function(t){return function(){return t._featured}}(this)),e.defineImmutableProperty(this,"searchResult",function(t){return function(){return t._searchResult}}(this)),e.defineImmutableProperty(this,"nextSearchPage",function(t){return function(){return t._nextSearchPage}}(this)),e.defineImmutableProperty(this,"projectsCount",function(t){return function(){return t._projectsCount}}(this))}var i;return r(n,t),n.$inject=["tgResources","tgProjectsService"],i={discover_mode:!0},n.prototype.fetchMostLiked=function(t){var e;return e=_.extend({},i,t),this.rs.projects.getProjects(e,!1).then(function(t){return function(e){var r,n;return r=e.data.slice(0,5),n=Immutable.fromJS(r),n=n.map(t.decorate),t._mostLiked=n}}(this))},n.prototype.fetchMostActive=function(t){var e;return e=_.extend({},i,t),this.rs.projects.getProjects(e,!1).then(function(t){return function(e){var r,n;return r=e.data.slice(0,5),n=Immutable.fromJS(r),n=n.map(t.decorate),t._mostActive=n}}(this))},n.prototype.fetchFeatured=function(){var t;return t=_.extend({},i),t.is_featured=!0,this.rs.projects.getProjects(t,!1).then(function(t){return function(e){var r,n;return r=e.data.slice(0,4),n=Immutable.fromJS(r),n=n.map(t.decorate),t._featured=n}}(this))},n.prototype.resetSearchList=function(){return this._searchResult=Immutable.List()},n.prototype.fetchStats=function(){return this.rs.stats.discover().then(function(t){return function(e){return t._projectsCount=e.getIn(["projects","total"])}}(this))},n.prototype.fetchSearch=function(t){var e;return e=_.extend({},i,t),this.rs.projects.getProjects(e).then(function(t){return function(e){var r;return t._nextSearchPage=!!e.headers("X-Pagination-Next"),r=Immutable.fromJS(e.data),r=r.map(t.decorate),t._searchResult=t._searchResult.concat(r)}}(this))},n}(e.Service),angular.module("taigaDiscover").service("tgDiscoverProjectsService",t)}.call(this),function(){var t,e,r,n;r=this.taiga,n=r.trim,e=r.getRandomDefaultColor,t=function(){function t(t,r,n,i){this.confirm=t,this.projectService=r,this.epicsService=n,this.analytics=i,this.project=this.projectService.project.toJS(),this.newEpic={color:e(),status:this.project.default_epic_status,tags:[]},this.attachments=Immutable.List(),this.loading=!1}return t.$inject=["$tgConfirm","tgProjectService","tgEpicsService","$tgAnalytics"],t.prototype.createEpic=function(){if(this.validateForm())return this.loading=!0,this.epicsService.createEpic(this.newEpic,this.attachments).then(function(t){return function(e){return t.analytics.trackEvent("epic","create","create epic",1),t.onCreateEpic(),t.loading=!1}}(this))["catch"](function(t){return function(e){if(t.loading=!1,t.setFormErrors(e.data),e.data._error_message)return t.confirm.notify("error",e.data._error_message)}}(this))},t.prototype.selectColor=function(t){return this.newEpic.color=t},t.prototype.addTag=function(t,e){if(t=n(t.toLowerCase()),!_.find(this.newEpic.tags,function(e){return e[0]===t}))return this.newEpic.tags.push([t,e])},t.prototype.deleteTag=function(t){return _.remove(this.newEpic.tags,function(e){return e[0]===t[0]})},t.prototype.addAttachment=function(t){return this.attachments.push(t)},t}(),angular.module("taigaEpics").controller("CreateEpicCtrl",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){var i;return i=e.find("form").checksley(),n.validateForm=function(t){return function(){return i.validate()}}(this),n.setFormErrors=function(t){return function(t){return i.setErrors(t)}}(this)},{link:t,templateUrl:"epics/create-epic/create-epic.html",controller:"CreateEpicCtrl",controllerAs:"vm",bindToController:{onCreateEpic:"&"},scope:{}}},angular.module("taigaEpics").directive("tgCreateEpic",t)}.call(this),function(){var t;t=function(){function t(t,e,r){this.confirm=t,this.projectService=e,this.epicsService=r,this.displayUserStories=!1,this.displayAssignedTo=!1,this.displayStatusList=!1,this.loadingStatus=!1,this.project=this.projectService.project.toJS(),this._calculateProgressBar()}return t.$inject=["$tgConfirm","tgProjectService","tgEpicsService"],t.prototype._calculateProgressBar=function(){var t,e;return this.epic.getIn(["status_extra_info","is_closed"])===!0?this.percentage="100%":(t=this.epic.getIn(["user_stories_counts","progress"]),e=this.epic.getIn(["user_stories_counts","total"]),0===e?this.percentage="0%":this.percentage=100*t/e+"%")},t.prototype.canEditEpics=function(){return this.projectService.hasPermission("modify_epic")},t.prototype.toggleUserStoryList=function(){return this.displayUserStories?this.displayUserStories=!1:this.epicsService.listRelatedUserStories(this.epic).then(function(t){return function(e){return t.epicStories=e,t.displayUserStories=!0}}(this))["catch"](function(t){return function(){return t.confirm.notify("error")}}(this))},t.prototype.updateStatus=function(t){return this.displayStatusList=!1,this.loadingStatus=!0,this.epicsService.updateEpicStatus(this.epic,t)["catch"](function(t){return function(){return t.confirm.notify("error")}}(this))["finally"](function(t){return function(){return t.loadingStatus=!1}}(this))},t.prototype.updateAssignedTo=function(t){return this.assignLoader=!0,this.epicsService.updateEpicAssignedTo(this.epic,(null!=t?t.id:void 0)||null)["catch"](function(t){return function(){return t.confirm.notify("error")}}(this)).then(function(t){return function(){return t.assignLoader=!1}}(this))},t}(),angular.module("taigaEpics").controller("EpicRowCtrl",t)}.call(this),function(){var t;t=function(){return{templateUrl:"epics/dashboard/epic-row/epic-row.html",controller:"EpicRowCtrl",controllerAs:"vm",bindToController:!0,scope:{epic:"=",column:"="}}},angular.module("taigaEpics").directive("tgEpicRow",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,r,n,i,o,s,a,c,u){this.params=t,this.errorHandlingService=r,this.lightboxFactory=n,this.lightboxService=i,this.confirm=o,this.projectService=s,this.epicsService=a,this.appMetaService=c,this.translate=u,this.sectionName="EPICS.SECTION_NAME",e.defineImmutableProperty(this,"project",function(t){return function(){return t.projectService.project}}(this)),e.defineImmutableProperty(this,"epics",function(t){return function(){return t.epicsService.epics}}(this)),this.appMetaService.setfn(this._setMeta.bind(this))}return t.$inject=["$routeParams","tgErrorHandlingService","tgLightboxFactory","lightboxService","$tgConfirm","tgProjectService","tgEpicsService","tgAppMetaService","$translate"],t.prototype._setMeta=function(){var t;return this.project?(t={projectName:this.project.get("name"),projectDescription:this.project.get("description")},{title:this.translate.instant("EPICS.PAGE_TITLE",t),description:this.translate.instant("EPICS.PAGE_DESCRIPTION",t)}):null},t.prototype.loadInitialData=function(){return this.epicsService.clear(),this.projectService.setProjectBySlug(this.params.pslug).then(function(t){return function(){return t.projectService.isEpicsDashboardEnabled()?t.projectService.hasPermission("view_epics")?t.epicsService.fetchEpics():t.errorHandlingService.permissionDenied():t.errorHandlingService.notFound()}}(this))},t.prototype.canCreateEpics=function(){return this.projectService.hasPermission("add_epic")},t.prototype.onCreateEpic=function(){var t;return t=function(t){return function(){t.lightboxService.closeAll(),t.confirm.notify("success")}}(this),this.lightboxFactory.create("tg-create-epic",{"class":"lightbox lightbox-create-epic open","on-create-epic":"onCreateEpic()"},{onCreateEpic:t.bind(this)})},t}(),angular.module("taigaEpics").controller("EpicsDashboardCtrl",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i){var o,s,a;if(e.hasPermission("modify_epic"))return o=t(i.tgEpicsSortable),s=dragula([n[0]],{copySortSource:!1,copy:!1,mirrorContainer:n[0],moves:function(t){return $(t).is("div.epics-table-body-row")}}),s.on("dragend",function(t){var e,n,i;return n=$(t),e=n.scope().epic,i=n.index(),r.$apply(function(){return o(r,{epic:e,newIndex:i})})}),a=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&s.dragging}}),r.$on("$destroy",function(){return n.off(),s.destroy()})},{link:r}},t.$inject=["$parse","tgProjectService"],angular.module("taigaComponents").directive("tgEpicsSortable",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.generateHash,t=function(){function t(t,n,i,o,s){this.confirm=t,this.epicsService=n,this.timeout=i,this.storage=o,this.projectService=s,this.hash=e([this.projectService.project.get("id"),"epics"]),this.displayOptions=!1,this.displayVotes=!0,this.column=this.storage.get(this.hash,{votes:!0,name:!0,project:!0,sprint:!0,assigned:!0,status:!0,progress:!0}),r.defineImmutableProperty(this,"epics",function(t){return function(){return t.epicsService.epics}}(this)),r.defineImmutableProperty(this,"disabledEpicsPagination",function(t){return function(){return t.epicsService._disablePagination}}(this)),r.defineImmutableProperty(this,"loadingEpics",function(t){return function(){return t.epicsService._loadingEpics}}(this))}return t.$inject=["$tgConfirm","tgEpicsService","$timeout","$tgStorage","tgProjectService"],t.prototype.toggleEpicTableOptions=function(){return this.displayOptions=!this.displayOptions},t.prototype.reorderEpic=function(t,e){return t.get("epics_order")===e?null:this.epicsService.reorderEpic(t,e).then(null,function(t){return function(){return t.confirm.notify("error")}}(this))},t.prototype.nextPage=function(){return this.epicsService.nextPage()},t.prototype.hoverEpicTableOption=function(){if(this.timer)return this.timeout.cancel(this.timer)},t.prototype.hideEpicTableOption=function(){return this.timer=this.timeout(function(t){return function(){return t.displayOptions=!1}}(this),400)},t.prototype.updateViewOptions=function(){return this.storage.set(this.hash,this.column)},t}(),angular.module("taigaEpics").controller("EpicsTableCtrl",t)}.call(this),function(){var t;t=function(){return{templateUrl:"epics/dashboard/epics-table/epics-table.html",controller:"EpicsTableCtrl",controllerAs:"vm",scope:{}}},angular.module("taigaEpics").directive("tgEpicsTable",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){function t(){this._calculateProgressBar()}return t.$inject=[],t.prototype._calculateProgressBar=function(){var t,e;return this.story.get("is_closed")===!0?this.percentage="100%":(t=this.story.get("tasks").size,e=this.story.get("tasks").filter(function(t){return t.get("is_closed")}).size,0===t?this.percentage="0%":this.percentage=100*e/t+"%")},t}(),e.controller("StoryRowCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){return{templateUrl:"epics/dashboard/story-row/story-row.html",controller:"StoryRowCtrl",controllerAs:"vm",bindToController:!0,scope:{story:"=",column:"="}}},e.directive("tgStoryRow",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,r,n,i){this.projectService=t,this.attachmentsService=r,this.resources=n,this.xhrError=i,this.clear(),e.defineImmutableProperty(this,"epics",function(t){return function(){return t._epics}}(this))}return t.$inject=["tgProjectService","tgAttachmentsService","tgResources","tgXhrErrorService"],t.prototype.clear=function(){return this._loadingEpics=!1,this._disablePagination=!1,this._page=1,this._epics=Immutable.List()},t.prototype.fetchEpics=function(t){return null==t&&(t=!1),this._loadingEpics=!0,this._disablePagination=!0,this.resources.epics.list(this.projectService.project.get("id"),this._page).then(function(e){return function(r){return t?(e.clear(),e._epics=r.list):e._epics=e._epics.concat(r.list),e._loadingEpics=!1,e._disablePagination=!r.headers("x-pagination-next")}}(this))["catch"](function(t){return function(e){return t.xhrError.response(e)}}(this))},t.prototype.nextPage=function(){return this._page++,this.fetchEpics()},t.prototype.listRelatedUserStories=function(t){return this.resources.userstories.listInEpic(t.get("id"))},t.prototype.createEpic=function(t,e,r){return r?t.project=r:t.project=this.projectService.project.get("id"),this.resources.epics.post(t).then(function(t){return function(r){var n;return e?(n=_.map(e.toJS(),function(e){ -return t.attachmentsService.upload(e.file,r.get("id"),r.get("project"),"epic")}),Promise.all(n).then(t.fetchEpics.bind(t,!0))):r}}(this))},t.prototype.reorderEpic=function(t,e){var r,n,i,o,s,a,c,u,l;return s={},this._epics.forEach(function(t){return s[t.get("id")]=t.get("epics_order")}),l=this.epics.filter(function(e){return function(e){return e.get("id")!==t.get("id")}}(this)),n=l.slice(0,e),r=l.slice(e),a=n.last(),o=a?a.get("epics_order")+1:0,s[t.get("id")]=o,c=n.filter(function(t){return function(t){return t.get("epics_order")===a.get("epics_order")}}(this)),u=_.fromPairs(c.map(function(t){return function(t){return[t.get("id"),t.get("epics_order")]}}(this)).toJS()),r.forEach(function(t){return s[t.get("id")]=t.get("epics_order")+1}),this._epics=this._epics.map(function(t){return t.set("epics_order",s[t.get("id")])}),this._epics=this._epics.sortBy(function(t){return t.get("epics_order")}),i={epics_order:o,version:t.get("version")},this.resources.epics.reorder(t.get("id"),i,u).then(function(t){return function(e){return t._epics=t._epics.map(function(t){return t.get("id")===e.get("id")?e:t})}}(this))},t.prototype.reorderRelatedUserstory=function(t,e,r,n){var i,o,s,a,c,u,l,p,d;return d=e.filter(function(t){return function(t){return t.get("id")!==r.get("id")}}(this)),i=d.slice(0,n),c=i.last(),a=c?c.get("epic_order")+1:0,u=i.filter(function(t){return function(t){return t.get("epic_order")===c.get("epic_order")}}(this)),l=_.fromPairs(u.map(function(t){return function(t){return[t.get("id"),t.get("epic_order")]}}(this)).toJS()),o={order:a},s=t.get("id"),p=r.get("id"),this.resources.epics.reorderRelatedUserstory(s,p,o,l).then(function(e){return function(){return e.listRelatedUserStories(t)}}(this))},t.prototype.replaceEpic=function(t){return this._epics=this._epics.map(function(e){return e.get("id")===t.get("id")?t:e})},t.prototype.updateEpicStatus=function(t,e){var r;return r={status:e,version:t.get("version")},this.resources.epics.patch(t.get("id"),r).then(this.replaceEpic.bind(this))},t.prototype.updateEpicAssignedTo=function(t,e){var r;return r={assigned_to:e,version:t.get("version")},this.resources.epics.patch(t.get("id"),r).then(this.replaceEpic.bind(this))},t}(),angular.module("taigaEpics").service("tgEpicsService",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){function t(t,e){this.projectService=t,this.epicsService=e,this.sectionName="Epics",this.showCreateRelatedUserstoriesLightbox=!1}return t.$inject=["tgProjectService","tgEpicsService"],t.prototype.showRelatedUserStoriesSection=function(){var t;return this.projectService.hasPermission("view_epics")||(null!=(t=this.userstories)?t.length:void 0)>0},t.prototype.userCanSort=function(){return this.projectService.hasPermission("modify_epic")},t.prototype.loadRelatedUserstories=function(){return this.epicsService.listRelatedUserStories(this.epic).then(function(t){return function(e){return t.userstories=e}}(this))},t.prototype.reorderRelatedUserstory=function(t,e){return this.epicsService.reorderRelatedUserstory(this.epic,this.userstories,t,e).then(function(t){return function(e){return t.userstories=e}}(this))},t}(),e.controller("RelatedUserStoriesCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){function t(t,e,r,n){this.currentUserService=t,this.rs=e,this.confirm=r,this.analytics=n,this.projects=null,this.projectUserstories=Immutable.List(),this.loading=!1}return t.$inject=["tgCurrentUserService","tgResources","$tgConfirm","$tgAnalytics"],t.prototype.loadProjects=function(){if(null===this.projects)return this.projects=this.currentUserService.projects.get("unblocked")},t.prototype.filterUss=function(t,e){var r;return r=this.rs.userstories.listInAllProjects({project:t,q:e},!0).then(function(t){return function(e){var r,n;return r=t.epicUserstories.map(function(t){return t.get("id")}),n=e.filter(function(t){return r.indexOf(t.get("id"))===-1}),t.projectUserstories=n}}(this))},t.prototype.saveRelatedUserStory=function(t,e){var r,n,i;if(this.validateExistingUserstoryForm())return this.loading=!0,n=function(t){return function(e){return t.loading=!1,t.confirm.notify("error"),t.setExistingUserstoryFormErrors(e)}}(this),i=function(t){return function(){return t.analytics.trackEvent("epic related user story","create","create related user story on epic",1),t.loading=!1,e&&e(),t.loadRelatedUserstories()}}(this),r=this.epic.get("id"),this.rs.epics.addRelatedUserstory(r,t).then(i,n)},t.prototype.bulkCreateRelatedUserStories=function(t,e,r){var n,i,o;if(this.validateNewUserstoryForm())return this.loading=!0,i=function(t){return function(e){return t.loading=!1,t.confirm.notify("error"),t.setNewUserstoryFormErrors(e)}}(this),o=function(t){return function(){return t.analytics.trackEvent("epic related user story","create","create related user story on epic",1),t.loading=!1,r&&r(),t.loadRelatedUserstories()}}(this),n=this.epic.get("id"),this.rs.epics.bulkCreateRelatedUserStories(n,t,e).then(o,i)},t}(),e.controller("RelatedUserstoriesCreateCtrl",t)}.call(this),function(){var t,e,r;r=angular.module("taigaEpics"),e=this.taiga.debounceLeading,t=function(t){var r;return this.lightboxService=t,r=function(t,r,n,i){var o,s;return s=r.find(".new-user-story-form").checksley(),o=r.find(".existing-user-story-form").checksley(),i.validateNewUserstoryForm=function(t){return function(){return s.validate()}}(this),i.setNewUserstoryFormErrors=function(t){return function(t){return s.setErrors(t)}}(this),i.validateExistingUserstoryForm=function(t){return function(){return o.validate()}}(this),i.setExistingUserstoryFormErrors=function(t){return function(t){return o.setErrors(t)}}(this),t.showLightbox=function(e){return i.loadProjects(),t.selectProject(e).then(function(t){return function(){return lightboxService.open(r.find(".lightbox-create-related-user-stories"))}}(this))},t.closeLightbox=function(){return t.selectedUserstory=null,t.searchUserstory="",t.relatedUserstoriesText="",lightboxService.close(r.find(".lightbox-create-related-user-stories"))},t.$watch("vm.project",function(e){if(null!=e)return t.selectedProject=e.get("id")}),t.selectProject=function(e){return t.selectedUserstory=null,t.searchUserstory="",i.filterUss(e,t.searchUserstory)},t.onUpdateSearchUserstory=e(300,function(){return t.selectedUserstory=null,i.filterUss(t.selectedProject,t.searchUserstory)})},{link:r,templateUrl:"epics/related-userstories/related-userstories-create/related-userstories-create.html",controller:"RelatedUserstoriesCreateCtrl",controllerAs:"vm",bindToController:!0,scope:{showCreateRelatedUserstoriesLightbox:"=",project:"=",epic:"=",epicUserstories:"=",loadRelatedUserstories:"&"}}},t.$inject=["lightboxService"],r.directive("tgRelatedUserstoriesCreate",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(t,e){var r;return r=function(r,n,i){var o,s,a;if(e.hasPermission("modify_epic"))return o=t(i.tgRelatedUserstoriesSortable),s=dragula([n[0]],{copySortSource:!1,copy:!1,mirrorContainer:n[0],moves:function(t){return $(t).is("tg-related-userstory-row")}}),s.on("dragend",function(t){var e,n,i;return e=$(t),i=e.scope().us,n=e.index(),r.$apply(function(){return o(r,{us:i,newIndex:n})})}),a=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&s.dragging}}),r.$on("$destroy",function(){return n.off(),s.destroy()})},{link:r}},t.$inject=["$parse","tgProjectService"],e.directive("tgRelatedUserstoriesSortable",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){return{templateUrl:"epics/related-userstories/related-userstories.html",controller:"RelatedUserStoriesCtrl",controllerAs:"vm",bindToController:!0,scope:{userstories:"=",project:"=",epic:"="}}},t.$inject=[],e.directive("tgRelatedUserstories",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){function t(t,e,r,n){this.avatarService=t,this.translate=e,this.confirm=r,this.rs=n}return t.$inject=["tgAvatarService","$translate","$tgConfirm","tgResources"],t.prototype.setAvatarData=function(){var t;return t=this.userstory.get("assigned_to_extra_info"),this.avatar=this.avatarService.getAvatar(t)},t.prototype.getAssignedToFullNameDisplay=function(){return this.userstory.get("assigned_to")?this.userstory.getIn(["assigned_to_extra_info","full_name_display"]):this.translate.instant("COMMON.ASSIGNED_TO.NOT_ASSIGNED")},t.prototype.onDeleteRelatedUserstory=function(){var t,e;return e=this.translate.instant("LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.TITLE"),t=this.translate.instant("LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.MESSAGE",{epicSubject:this.epic.get("subject")}),this.confirm.ask(e,null,t).then(function(e){return function(r){var n,i,o,s;return i=function(){return t=e.translate.instant("EPIC.ERROR_UNLINK_RELATED_USERSTORY",{errorMessage:t}),e.confirm.notify("error",null,t),r.finish(!1)},o=function(){return e.loadRelatedUserstories(),r.finish()},n=e.epic.get("id"),s=e.userstory.get("id"),e.rs.epics.deleteRelatedUserstory(n,s).then(o,i)}}(this))},t}(),e.controller("RelatedUserstoryRowCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){var t;return t=function(t,e,r,n){return n.setAvatarData()},{link:t,templateUrl:"epics/related-userstories/related-userstory-row/related-userstory-row.html",controller:"RelatedUserstoryRowCtrl",controllerAs:"vm",bindToController:!0,scope:{userstory:"=",epic:"=",project:"=",loadRelatedUserstories:"&"}}},t.$inject=[],e.directive("tgRelatedUserstoryRow",t)}.call(this),function(){var t,e,r=function(t,e){return function(){return t.apply(e,arguments)}},n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;e=this.taiga,t=function(t){function i(t,n,i,o,s,a,c,u){var l,p;this.routeParams=t,this.externalAppsService=n,this.window=i,this.currentUserService=o,this.location=s,this.navUrls=a,this.xhrError=c,this.loader=u,this.createApplicationToken=r(this.createApplicationToken,this),this._getApplicationToken=r(this._getApplicationToken,this),this._redirect=r(this._redirect,this),this.loader.start(!1),this._applicationId=this.routeParams.application,this._state=this.routeParams.state,this._getApplicationToken(),this._user=this.currentUserService.getUser(),this._application=null,p=encodeURIComponent(this.location.url()),l=this.navUrls.resolve("login"),this.loginWithAnotherUserUrl=l+"?next="+p,e.defineImmutableProperty(this,"user",function(t){return function(){return t._user}}(this)),e.defineImmutableProperty(this,"application",function(t){return function(){return t._application}}(this))}return n(i,t),i.$inject=["$routeParams","tgExternalAppsService","$window","tgCurrentUserService","$location","$tgNavUrls","tgXhrErrorService","tgLoader"],i.prototype._redirect=function(t){var e;return e=t.get("next_url"),this.window.open(e,"_self")},i.prototype._getApplicationToken=function(){return this.externalAppsService.getApplicationToken(this._applicationId,this._state).then(function(t){return function(e){return t._application=e.get("application"),e.get("auth_code")?t._redirect(e):t.loader.pageLoaded()}}(this))["catch"](function(t){return function(e){return t.loader.pageLoaded(),t.xhrError.response(e)}}(this))},i.prototype.cancel=function(){return this.window.history.back()},i.prototype.createApplicationToken=function(){return this.externalAppsService.authorizeApplicationToken(this._applicationId,this._state).then(function(t){return function(e){return t._redirect(e)}}(this))["catch"](function(t){return function(e){return t.xhrError.response(e)}}(this))},i}(e.Controller),angular.module("taigaExternalApps").controller("ExternalApp",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t){this.rs=t}return e(r,t),r.$inject=["tgResources"],r.prototype.getApplicationToken=function(t,e){return this.rs.externalapps.getApplicationToken(t,e)},r.prototype.authorizeApplicationToken=function(t,e){return this.rs.externalapps.authorizeApplicationToken(t,e)},r}(taiga.Service),angular.module("taigaExternalApps").service("tgExternalAppsService",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t){this.lightboxFactory=t}return e(r,t),r.$inject=["tgLightboxFactory"],r.prototype.sendFeedback=function(){return this.lightboxFactory.create("tg-lb-feedback",{"class":"lightbox lightbox-feedback lightbox-generic-form"})},r}(taiga.Service),angular.module("taigaFeedback").service("tgFeedbackService",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,e){this.rs=t,this.xhrError=e,this._contentType=null,this._objectId=null,this.clear()}return t.$inject=["tgResources","tgXhrErrorService"],t.prototype.clear=function(){return this.page=1,this.loadingEntries=!1,this.disablePagination=!1,this.entries=Immutable.List(),this.count=null},t.prototype.fetchEntries=function(t){return null==t&&(t=!1),t&&(this.page=1),this.loadingEntries=!0,this.disablePagination=!0,this.rs.history.getHistory("activity",this._contentType,this._objectId,this.page).then(function(e){return function(r){return t?(e.clear(),e.entries=r.list):e.entries=e.entries.concat(r.list),e.loadingEntries=!1,e.disablePagination=!r.headers("x-pagination-next"),e.count=r.headers("x-pagination-count"),e.entries}}(this))["catch"](function(t){return function(e){return t.xhrError.response(t.entries)}}(this))},t.prototype.nextPage=function(t){return null==t&&(t="comment"),this.page++,this.fetchEntries()},t.prototype.init=function(t,e){return this._contentType=t,this._objectId=e,this.clear()},t}(),angular.module("taigaHistory").service("tgActivityService",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(t,e,r){this.currentUserService=t,this.permissionService=e,this.lightboxFactory=r,this.hiddenDeletedComment=!0}return t.$inject=["tgCurrentUserService","tgCheckPermissionsService","tgLightboxFactory"],t.prototype.showDeletedComment=function(){return this.hiddenDeletedComment=!1},t.prototype.hideDeletedComment=function(){return this.hiddenDeletedComment=!0},t.prototype.checkCancelComment=function(t){if(27===t.keyCode)return this.onEditMode({commentId:this.comment.id})},t.prototype.canEditDeleteComment=function(){if(this.currentUserService.getUser())return this.user=this.currentUserService.getUser(),this.user.get("id")===this.comment.user.pk||this.permissionService.check("modify_project")},t.prototype.saveComment=function(t,e){return this.onEditComment({commentId:this.comment.id,commentData:t,callback:e})},t.prototype.displayCommentHistory=function(){return this.lightboxFactory.create("tg-lb-display-historic",{"class":"lightbox lightbox-display-historic",comment:"comment",name:"name",object:"object"},{comment:this.comment,name:this.name,object:this.object})},t}(),e.controller("CommentCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){return{scope:{name:"@",object:"@",comment:"<",type:"<",loading:"<",editing:"<",deleting:"<",objectId:"<",editMode:"<",onEditMode:"&",onDeleteComment:"&",onRestoreDeletedComment:"&",onEditComment:"&"},templateUrl:"history/comments/comment.html",bindToController:!0,controller:"CommentCtrl",controllerAs:"vm"}},e.directive("tgComment",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(){}return t.$inject=[],t.prototype.initializePermissions=function(){return this.canAddCommentPermission="comment_"+this.name},t}(),e.controller("CommentsCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){var t;return t=function(t,e,r,n){return n.initializePermissions()},{scope:{type:"<",name:"@",object:"@",comments:"<",onEditMode:"&",onDeleteComment:"&",onRestoreDeletedComment:"&",onAddComment:"&",onEditComment:"&",editMode:"<",loading:"<",deleting:"<",editing:"<",projectId:"="},templateUrl:"history/comments/comments.html",bindToController:!0,controller:"CommentsCtrl",controllerAs:"vm",link:t}},e.directive("tgComments",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(t){this.rs=t}return t.$inject=["$tgResources"],t.prototype._loadHistoric=function(){var t,e,r;return r=this.name,e=this.object,t=this.comment.id,this.rs.history.getCommentHistory(r,e,t).then(function(t){return function(e){return t.commentHistoryEntries=e}}(this))},t}(),e.controller("LightboxDisplayHistoricCtrl",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n,i){return i._loadHistoric(),t.open(r)},{scope:{},bindToController:{name:"=",object:"=",comment:"="},templateUrl:"history/history-lightbox/comment-history-lightbox.html",controller:"LightboxDisplayHistoricCtrl",controllerAs:"vm",link:e}},t.$inject=["lightboxService"],angular.module("taigaHistory").directive("tgLbDisplayHistoric",t)}.call(this),function(){var t;t=function(){return{scope:{entry:"<"},templateUrl:"history/history-lightbox/history-entry.html"}},angular.module("taigaHistory").directive("tgHistoryEntry",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){return{templateUrl:"history/history-tabs/history-tabs.html",scope:{showCommentTab:"&",showActivityTab:"&",onActiveComments:"&",onActiveActivities:"&",onOrderComments:"&",activeTab:"<",commentsNum:"<",activitiesNum:"<",onReverse:"<"}}},e.directive("tgHistoryTabs",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(t,e,r,n,i){this.rs=t,this.repo=e,this.storage=r,this.projectService=n,this.activityService=i,this.editing=null,this.deleting=null,this.editMode={},this.viewComments=!0,this.reverse=this.storage.get("orderComments"),taiga.defineImmutableProperty(this,"disabledActivityPagination",function(t){return function(){return t.activityService.disablePagination}}(this)),taiga.defineImmutableProperty(this,"loadingActivity",function(t){return function(){return t.activityService.loading}}(this))}return t.$inject=["$tgResources","$tgRepo","$tgStorage","tgProjectService","tgActivityService"],t.prototype._loadHistory=function(){return this._loadComments(),this._loadActivity()},t.prototype._loadActivity=function(){return this.activityService.init(this.name,this.id),this.activityService.fetchEntries().then(function(t){return function(e){return t.activitiesNum=t.activityService.count,t.activities=e.toJS()}}(this))},t.prototype._loadComments=function(){return this.rs.history.get(this.name,this.id).then(function(t){return function(e){return t.comments=_.filter(e,function(t){return""!==t.comment}),t.reverse&&t.comments-_.reverse(t.comments),t.commentsNum=t.comments.length}}(this))},t.prototype.nextActivityPage=function(){return this.activityService.nextPage().then(function(t){return function(e){return t.activities=e.toJS()}}(this))},t.prototype.showHistorySection=function(){return this.showCommentTab()||this.showActivityTab()},t.prototype.showCommentTab=function(){return this.commentsNum>0||this.projectService.hasPermission("comment_"+this.name)},t.prototype.showActivityTab=function(){return this.activitiesNum>0},t.prototype.toggleEditMode=function(t){return this.editMode[t]=!this.editMode[t]},t.prototype.onActiveHistoryTab=function(t){return this.viewComments=t},t.prototype.deleteComment=function(t){var e,r,n;return n=this.name,r=this.id,e=t,this.deleting=t,this.rs.history.deleteComment(n,r,e).then(function(t){return function(){return t._loadComments(),t.deleting=null}}(this))},t.prototype.editComment=function(t,e){var r,n,i;return i=this.name,n=this.id,r=t,this.editing=t,this.rs.history.editComment(i,n,r,e).then(function(e){return function(){return e._loadComments(),e.toggleEditMode(t),e.editing=null}}(this))},t.prototype.restoreDeletedComment=function(t){var e,r,n;return n=this.name,r=this.id,e=t,this.editing=t,this.rs.history.undeleteComment(n,r,e).then(function(t){return function(){return t._loadComments(),t.editing=null}}(this))},t.prototype.addComment=function(){return this.editMode={},this.editing=null,this._loadComments()},t.prototype.onOrderComments=function(){return this.reverse=!this.reverse,this.storage.set("orderComments",this.reverse),this._loadComments()},t}(),e.controller("HistorySection",t)}.call(this),function(){var t,e,r;r=angular.module("taigaHistory"),e=this.taiga.bindOnce,t=function(){var t;return t=function(t,e,r,n){return t.$on("object:updated",function(){return n._loadActivity()}),t.$watch("vm.id",function(t){return n._loadHistory()})},{link:t,templateUrl:"history/history.html",controller:"HistorySection",controllerAs:"vm",bindToController:!0,scope:{type:"=",name:"@",id:"=",projectId:"="}}},t.$inject=[],r.directive("tgHistorySection",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(){}return t.$inject=[],t.prototype.diffTags=function(){if("tags"===this.type)return this.diffRemoveTags=_.difference(this.diff[0],this.diff[1]).toString(),this.diffAddTags=_.difference(this.diff[1],this.diff[0]).toString()},t}(),e.controller("ActivitiesDiffCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){var t;return t=function(t,e,r,n){return n.diffTags()},{scope:{type:"<",diff:"<"},templateUrl:"history/history/history-diff.html",controller:"ActivitiesDiffCtrl",controllerAs:"vm",bindToController:!0,link:t}},e.directive("tgHistoryDiff",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){var t;return t=function(t,e,r){},{scope:{activities:"<"},templateUrl:"history/history/history.html",link:t}},e.directive("tgHistory",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(t,r,n,i){return t.vm={},t.vm.duty=t.duty,t.vm.type=t.type,t.vm.getDutyType=function(){if(t.vm.duty){if("epics"===t.vm.duty.get("_name"))return e.instant("COMMON.EPIC");if("userstories"===t.vm.duty.get("_name"))return e.instant("COMMON.USER_STORY");if("tasks"===t.vm.duty.get("_name"))return e.instant("COMMON.TASK");if("issues"===t.vm.duty.get("_name"))return e.instant("COMMON.ISSUE")}}},{templateUrl:"home/duties/duty.html",scope:{duty:"=tgDuty",type:"@"},link:r}},t.$inject=["$tgNavUrls","$translate"],angular.module("taigaHome").directive("tgDuty",t)}.call(this),function(){var t;t=function(){function t(t,e,r){this.currentUserService=t,this.location=e,this.navUrls=r,this.currentUserService.getUser()||this.location.path(this.navUrls.resolve("discover"))}return t.$inject=["tgCurrentUserService","$location","$tgNavUrls"],t}(),angular.module("taigaHome").controller("Home",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga.groupBy,t=function(t){function n(t,e,r){this.navurls=t,this.rs=e,this.projectsService=r}return r(n,t),n.$inject=["$tgNavUrls","tgResources","tgProjectsService"],n.prototype._attachProjectInfoToWorkInProgress=function(t,e){var r,n,i,o,s;return r=function(t){return function(r,n){var i,o,s;return o=e.get(String(r.get("project"))),i={project:o.get("slug"),ref:r.get("ref")},s=t.navurls.resolve("project-"+n+"-detail",i),r=r.set("url",s),r=r.set("project",o),r=r.set("_name",n)}}(this),i=function(t,n){return t=t.filter(function(t){return e.get(String(t.get("project")))}),t=t.map(function(t){return r(t,n)})},o=t.get("assignedTo"),o.get("epics")&&(n=i(o.get("epics"),"epics"),o=o.set("epics",n)),o.get("userStories")&&(n=i(o.get("userStories"),"userstories"),o=o.set("userStories",n)),o.get("tasks")&&(n=i(o.get("tasks"),"tasks"),o=o.set("tasks",n)),o.get("issues")&&(n=i(o.get("issues"),"issues"),o=o.set("issues",n)),s=t.get("watching"),s.get("epics")&&(n=i(s.get("epics"),"epics"),s=s.set("epics",n)),s.get("userStories")&&(n=i(s.get("userStories"),"userstories"),s=s.set("userStories",n)),s.get("tasks")&&(n=i(s.get("tasks"),"tasks"),s=s.set("tasks",n)),s.get("issues")&&(n=i(s.get("issues"),"issues"),s=s.set("issues",n)),t=t.set("assignedTo",o),t=t.set("watching",s)},n.prototype.getWorkInProgress=function(t){var r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y;return p=Immutable.Map(),d=this.projectsService.getProjectsByUserId(t).then(function(t){return p=Immutable.fromJS(e(t.toJS(),function(t){return t.id}))}),o=Immutable.Map(),a={status__is_closed:!1,assigned_to:t},l={is_closed:!1,assigned_users:t},u={status__is_closed:!1,assigned_to:t},c={status__is_closed:!1,assigned_to:t},r=this.rs.epics.listInAllProjects(a).then(function(t){return o=o.set("epics",t)}),s=this.rs.userstories.listInAllProjects(l).then(function(t){return o=o.set("userStories",t)}),i=this.rs.tasks.listInAllProjects(u).then(function(t){return o=o.set("tasks",t)}),n=this.rs.issues.listInAllProjects(c).then(function(t){return o=o.set("issues",t)}),a={status__is_closed:!1,watchers:t},l={is_closed:!1,watchers:t},u={status__is_closed:!1,watchers:t},c={status__is_closed:!1,watchers:t},f=Immutable.Map(),h=this.rs.epics.listInAllProjects(a).then(function(t){return f=f.set("epics",t)}),v=this.rs.userstories.listInAllProjects(l).then(function(t){return f=f.set("userStories",t)}),m=this.rs.tasks.listInAllProjects(u).then(function(t){return f=f.set("tasks",t)}),g=this.rs.issues.listInAllProjects(c).then(function(t){return f=f.set("issues",t)}),y=Immutable.Map(),Promise.all([d,r,h,s,v,i,m,n,g]).then(function(t){return function(){return y=y.set("assignedTo",o),y=y.set("watching",f),y=t._attachProjectInfoToWorkInProgress(y,p)}}(this))},n}(taiga.Service),angular.module("taigaHome").service("tgHomeService",t)}.call(this),function(){var t;t=function(t){var e,r;return r=function(e,r,n,i){return e.vm={},taiga.defineImmutableProperty(e.vm,"projects",function(){return t.projects.get("recents")})},e={templateUrl:"home/projects/home-project-list.html",scope:{},link:r}},t.$inject=["tgCurrentUserService"],angular.module("taigaHome").directive("tgHomeProjectList",t)}.call(this),function(){var t;t=function(){function t(t){this.homeService=t,this.assignedTo=Immutable.Map(),this.watching=Immutable.Map()}return t.$inject=["tgHomeService"],t.prototype._setAssignedTo=function(t){var e,r,n,i;if(e=t.get("assignedTo").get("epics"),i=t.get("assignedTo").get("userStories"),n=t.get("assignedTo").get("tasks"),r=t.get("assignedTo").get("issues"),this.assignedTo=i.concat(n).concat(r).concat(e),this.assignedTo.size>0)return this.assignedTo=this.assignedTo.sortBy(function(t){return t.get("modified_date")}).reverse()},t.prototype._setWatching=function(t){var e,r,n,i;if(e=t.get("watching").get("epics"),i=t.get("watching").get("userStories"),n=t.get("watching").get("tasks"),r=t.get("watching").get("issues"),this.watching=i.concat(n).concat(r).concat(e),this.watching.size>0)return this.watching=this.watching.sortBy(function(t){return t.get("modified_date")}).reverse()},t.prototype.getWorkInProgress=function(t){return this.homeService.getWorkInProgress(t).then(function(t){return function(e){return t._setAssignedTo(e),t._setWatching(e)}}(this))},t}(),angular.module("taigaHome").controller("WorkingOn",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(t,r,n,i){var o,s;if(o=e.getUser())return s=o.get("id"),i.getWorkInProgress(s)},{controller:"WorkingOn",controllerAs:"vm",templateUrl:"home/working-on/working-on.html",scope:{},link:r}},t.$inject=["tgHomeService","tgCurrentUserService"],angular.module("taigaHome").directive("tgWorkingOn",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,e,r,n,i){this.projectService=t,this.rs=e,this.lightboxService=r,this.confirm=n,this.rootScope=i,this.project=this.projectService.project,this.roles=this.projectService.project.get("roles"),this.rolesValues={},this.loading=!1,this.defaultMaxInvites=4}return t.$inject=["tgProjectService","$tgResources","lightboxService","$tgConfirm","$rootScope"],t.prototype._areRolesValidated=function(){return Object.defineProperty(this,"areRolesValidated",{get:function(t){return function(){var e;return e=_.filter(Object.values(t.rolesValues),function(t){return t}),e.length===t.contactsToInvite.size+t.emailsToInvite.size}}(this)})},t.prototype._checkLimitMemberships=function(){var t;return null===this.project.get("max_memberships")?this.membersLimit=this.defaultMaxInvites:(t=Math.max(this.project.get("max_memberships")-this.project.get("total_memberships"),0),this.membersLimit=Math.min(t,this.defaultMaxInvites)),this.showWarningMessage=this.membersLimitn.total?(n.newEvent=!0,e(100,function(){return n.total=r,n.$apply()}),e(2e3,function(){return n.newEvent=!1})):n.total=r}),n.$on("notifications:loading",function(){return n.loading=!0}),n.setAllAsRead=function(){return r.setNotificationsAsRead().then(function(){return t.$emit("notifications:dismiss-all")})}},i={templateUrl:"navigation-bar/dropdown-notifications/dropdown-notifications.html",scope:{active:"="},link:o}},angular.module("taigaNavigationBar").directive("tgDropdownNotifications",["$rootScope","tgNotificationsService","tgCurrentUserService",t])}.call(this),function(){var t;t=function(t,e,r){var n,i;return i=function(n,i,o,s){var a;return n.vm={},taiga.defineImmutableProperty(n.vm,"projects",function(){return e.projects.get("recents")}),n.vm.newProject=function(){return r.newProject()},a=function(){return i.find(".dropdown-project-list ul li a").data("fullUrl","")},t.$on("dropdown-project-list:updated",a)},n={templateUrl:"navigation-bar/dropdown-project-list/dropdown-project-list.html",scope:{active:"="},link:i}},t.$inject=["$rootScope","tgCurrentUserService","tgProjectsService"],angular.module("taigaNavigationBar").directive("tgDropdownProjectList",t)}.call(this),function(){var t;t=function(t,e,r,n,i,o){var s,a;return a=function(s,a,c,u){return s.vm={},s.vm.isFeedbackEnabled=e.get("feedbackEnabled"),s.vm.customSupportUrl=e.get("supportUrl"),taiga.defineImmutableProperty(s.vm,"user",function(){return t.userData}),s.vm.logout=function(){return t.logout(),r.url(n.resolve("discover")),r.search({})},s.vm.sendFeedback=function(){return i.sendFeedback()},s.vm.userSettingsPlugins=_.filter(o.userSettingsPlugins,{userMenu:!0})},s={templateUrl:"navigation-bar/dropdown-user/dropdown-user.html",scope:{},link:a}},t.$inject=["$tgAuth","$tgConfig","$tgLocation","$tgNavUrls","tgFeedbackService","$rootScope"],angular.module("taigaNavigationBar").directive("tgDropdownUser",t)}.call(this),function(){var t;t=function(t,e,r,n,i){var o,s;return s=function(o,s,a,c){return o.vm={},taiga.defineImmutableProperty(o.vm,"projects",function(){return t.projects.get("recents")}),taiga.defineImmutableProperty(o.vm,"isAuthenticated",function(){return t.isAuthenticated()}),taiga.defineImmutableProperty(o.vm,"isEnabledHeader",function(){return e.isEnabledHeader()}),o.vm.publicRegisterEnabled=i.get("publicRegisterEnabled"),o.vm.customSupportUrl=i.get("supportUrl"),o.vm.login=function(){var t;return t=encodeURIComponent(r.url()),r.url(n.resolve("login")),r.search({next:t})},o.$on("$routeChangeSuccess",function(){switch(o.vm.active=null,r.path()){case"/":return o.vm.active="dashboard";case"/discover":return o.vm.active="discover";case"/notifications":return o.vm.active="notifications";case"/projects/":return o.vm.active="projects"}})},o={templateUrl:"navigation-bar/navigation-bar.html",scope:{},link:s}},t.$inject=["tgCurrentUserService","tgNavigationBarService","$tgLocation","$tgNavUrls","$tgConfig"],angular.module("taigaNavigationBar").directive("tgNavigationBar",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(){this.disableHeader()}return e(r,t),r.prototype.enableHeader=function(){return this.enabledHeader=!0},r.prototype.disableHeader=function(){return this.enabledHeader=!1},r.prototype.isEnabledHeader=function(){return this.enabledHeader},r}(taiga.Service),angular.module("taigaNavigationBar").service("tgNavigationBarService",t)}.call(this),function(){var t;t=function(){return{templateUrl:"notifications/notifications-list/notifications-list.html",controller:"Notifications",controllerAs:"vm",bindToController:!0,scope:{infiniteScrollContainer:"@",infiniteScrollDistance:"=",onlyUnread:"=onlyUnread"}}},angular.module("taigaNotifications").directive("tgNotificationsList",t)}.call(this),function(){var t,e,r,n,i=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;n=this.taiga,r=this.taiga.mixOf,e=this.taiga.debounceLeading,t=function(t){function e(t,e,r,n,i,o,s){this.rootScope=t,this.scope=e,this.notificationsService=r,this.currentUserService=n,this.events=i,this.location=o,this.window=s,this.total=0,this.user=this.currentUserService.getUser(),this.scrollDisabled=!1,this.initList(),this.loadNotifications(),this.rootScope.$on("notifications:dismiss",function(t){return function(e){if(t.onlyUnread)return t.reloadList()}}(this)),this.rootScope.$on("notifications:new",function(t){return function(e){return t.reloadList()}}(this)),this.rootScope.$on("notifications:dismiss-all",function(t){return function(e){return t.reloadList()}}(this))}return i(e,t),e.$inject=["$rootScope","$scope","tgNotificationsService","tgCurrentUserService","$tgEvents","$location","$window"],e.prototype.initList=function(){return this.notificationsList=Immutable.List(),this.list=this.notificationsService.getNotificationsList(this.user.get("id"),null!=this.onlyUnread),this.loading=null==this.list},e.prototype.reloadList=function(){return this.initList(),this.loadNotifications()},e.prototype.loadNotifications=function(){return this.scrollDisabled=!0,this.loading=!0,this.scope.$emit("notifications:loading"),this.list.next().then(function(t){return function(e){return t.notificationsList=t.notificationsList.concat(e.get("items")),e.get("next")&&(t.scrollDisabled=!1),t.total=e.get("total"),t.scope.$emit("notifications:loaded",t.total),t.loading=!1,t.notificationsList}}(this))},e.prototype.setAsRead=function(t,e){return this.notificationsService.setNotificationAsRead(t.get("id")).then(function(t){return function(){return t.location.$$url===e?t.window.location.reload():t.location.path(e),t.rootScope.$broadcast("notifications:dismiss")}}(this))},e.prototype.setAllAsRead=function(){return this.notificationsService.setNotificationsAsRead().then(function(t){return function(){return t.rootScope.$broadcast("notifications:dismiss-all")}}(this))},e}(r(n.Controller,n.PageMixin,n.FiltersMixin)),angular.module("taigaNotifications").controller("Notifications",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga,t=function(t){function e(t,e,r,n,i){this.rs=t,this.userTimelinePaginationSequenceService=e,this.translate=r,this.navUrls=n,this.tgSections=i}var n,i;return r(e,t),e.$inject=["tgResources","tgUserTimelinePaginationSequenceService","$translate","$tgNavUrls","$tgSections"],n=[{check:function(t){return 1===t.get("event_type")},key:"EVENTS.ASSIGNED_YOU",translate_params:["username","obj_name"]},{check:function(t){return 2===t.get("event_type")},key:"EVENTS.MENTIONED_YOU",translate_params:["username","obj_name"]},{check:function(t){return 3===t.get("event_type")},key:"EVENTS.ADDED_YOU_AS_WATCHER",translate_params:["username","obj_name"]},{check:function(t){return 4===t.get("event_type")},key:"EVENTS.ADDED_YOU_AS_MEMBER",translate_params:["username"]},{check:function(t){return 5===t.get("event_type")},key:"EVENTS.COMMENTED",translate_params:["username","obj_name"]},{check:function(t){return 6===t.get("event_type")},key:"EVENTS.MENTIONED_YOU_IN_COMMENT",translate_params:["username","obj_name"]}],i={username:function(t){var e,r,n;return n=t.getIn(["data","user"]),n.get("is_profile_visible")?(e=this.translate.instant("COMMON.SEE_USER_PROFILE",{username:n.get("username")}),r=this.navUrls.resolve("user-profile",{username:t.getIn(["data","user","username"])}),this._getLink(t,r,n.get("name"),"user-link",e)):this._getUsernameSpan(n.get("name"))},project_name:function(t){var e;return e=this.navUrls.resolve("project",{project:t.getIn(["data","project","slug"])}),this._getLink(t,e,t.getIn(["data","project","name"]),"project-link")},obj_name:function(t){var e,r,n;return e=this._getNotificationObject(t),n=this._getDetailObjUrl(t,e.get("content_type")),r="#"+e.get("ref")+" "+e.get("subject"),this._getLink(t,n,r,"object-link")}},e.prototype.getNotificationsList=function(t,e){var r,n;return n=0,r={},r.fetch=function(r){return function(n){return r.rs.users.getNotifications(t,n,e).then(function(t){return t})}}(this),r.map=function(t){return function(e){return t._addNotificationAttributes(e)}}(this),this.userTimelinePaginationSequenceService.generate(r)},e.prototype.setNotificationAsRead=function(t){return this.rs.users.setNotificationAsRead(t)},e.prototype.setNotificationsAsRead=function(){return this.rs.users.setNotificationsAsRead()},e.prototype._getNotificationObject=function(t){if(t.get("data").get("obj"))return t.get("data").get("obj")},e.prototype._getType=function(t){return _.find(n,function(e){return e.check(t)})},e.prototype._addNotificationAttributes=function(t){var e,r,n,i,o,s;return e=t.get("event_type"),s=this._getType(t),o=this._getTitle(t,e,s),t=t.set("title_html",o),n=t.getIn(["data","project","slug"]),r=this.tgSections.getPath(n),i=this.navUrls.resolve("project-"+r,{project:n}),t=t.set("projectUrl",i),t=t.set("obj",this._getNotificationObject(t))},e.prototype._translateTitleParams=function(t,e,r){return i[t].call(this,e,r)},e.prototype._getDetailObjUrl=function(t,e){var r,n;return n={issue:"project-issues-detail",task:"project-tasks-detail",userstory:"project-userstories-detail"},r=this.navUrls.resolve(n[e],{project:t.getIn(["data","project","slug"]),ref:t.getIn(["data","obj","ref"])})},e.prototype._getLink=function(t,e,r,n,i){var o;return i=i||r,o=$("").attr("ng-non-bindable",!0).text(r),$('').attr("title",i).attr("class",n).attr("ng-click",'vm.setAsRead(notification, "'+e+'")').append(o).prop("outerHTML")},e.prototype._getUsernameSpan=function(t){var e;return e=e||t,$("").addClass("username").text(t).prop("outerHTML")},e.prototype._getParams=function(t,e,r){var n;return n={},r.translate_params.forEach(function(r){return function(i){return n[i]=r._translateTitleParams(i,t,e)}}(this)),n},e.prototype._getTitle=function(t,e,r){var n,i,o;return n=this._getParams(t,e,r),i={},Object.keys(n).forEach(function(t){return i[t]="{{"+t+"}}"}),o=this.translate.instant(r.key,i),Object.keys(n).forEach(function(t){var e;return e="{{"+t+"}}",o=o.replace(new RegExp(e,"g"),n[t])}),o},e}(e.Service),angular.module("taigaNotifications").service("tgNotificationsService",t)}.call(this),function(){var t;t=function(){function t(t){this.userService=t,this.loadStats()}return t.$inject=["tgUserService"],t.prototype.loadStats=function(){return this.userService.getStats(this.user.get("id")).then(function(t){return function(e){return t.stats=e}}(this))},t}(),angular.module("taigaProfile").controller("ProfileBar",t)}.call(this),function(){var t;t=function(){return{templateUrl:"profile/profile-bar/profile-bar.html",controller:"ProfileBar",controllerAs:"vm",scope:{user:"=user",isCurrentUser:"=iscurrentuser"},bindToController:!0}},angular.module("taigaProfile").directive("tgProfileBar",t)}.call(this),function(){var t;t=function(){function t(t,e){this.userService=t,this.currentUserService=e,this.currentUser=this.currentUserService.getUser(),this.isCurrentUser=!1,this.currentUser&&this.currentUser.get("id")===this.user.get("id")&&(this.isCurrentUser=!0)}return t.$inject=["tgUserService","tgCurrentUserService"],t.prototype.loadContacts=function(){return this.userService.getContacts(this.user.get("id")).then(function(t){return function(e){return t.contacts=e}}(this))},t}(),angular.module("taigaProfile").controller("ProfileContacts",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.loadContacts()},{templateUrl:"profile/profile-contacts/profile-contacts.html",scope:{user:"="},controllerAs:"vm",controller:"ProfileContacts",link:t,bindToController:!0}},angular.module("taigaProfile").directive("tgProfileContacts",t)}.call(this),function(){var t;t=function(){var t,e;return t=function(t,e,r,n){return t.vm={item:t.item}},e=function(t,e){return"project"===e.itemType?"profile/profile-favs/items/project.html":"profile/profile-favs/items/ticket.html"},{scope:{item:"=tgFavItem"},link:t,templateUrl:e}},angular.module("taigaProfile").directive("tgFavItem",t)}.call(this),function(){var t,e,r,n,i,o=function(t,e){function r(){this.constructor=t}for(var n in e)s.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},s={}.hasOwnProperty;i=this.taiga.debounceLeading,t=function(){function t(){this._init()}return t.prototype._init=function(){return this.enableFilterByAll=!0,this.enableFilterByProjects=!0,this.enableFilterByEpics=!0,this.enableFilterByUserStories=!0,this.enableFilterByTasks=!0,this.enableFilterByIssues=!0,this.enableFilterByTextQuery=!0,this._resetList(),this.q=null,this.type=null},t.prototype._resetList=function(){return this.items=Immutable.List(),this.scrollDisabled=!1,this._page=1},t.prototype._enableLoadingSpinner=function(){return this.isLoading=!0},t.prototype._disableLoadingSpinner=function(){return this.isLoading=!1},t.prototype._enableScroll=function(){return this.scrollDisabled=!1},t.prototype._disableScroll=function(){return this.scrollDisabled=!0},t.prototype._checkIfHasMorePages=function(t){return t?(this._page+=1,this._enableScroll()):this._disableScroll()},t.prototype._checkIfHasNoResults=function(){return this.hasNoResults=0===this.items.size},t.prototype.loadItems=function(){return this._enableLoadingSpinner(),this._disableScroll(),this._getItems(this.user.get("id"),this._page,this.type,this.q).then(function(t){return function(e){return t.items=t.items.concat(e.get("data")),t._checkIfHasMorePages(e.get("next")),t._checkIfHasNoResults(),t._disableLoadingSpinner(),t.items}}(this))["catch"](function(t){return function(){return t._disableLoadingSpinner(),t.items}}(this))},t.prototype.filterByTextQuery=i(500,function(){return this._resetList(),this.loadItems()}),t.prototype.showAll=function(){if(null!==this.type)return this.type=null,this._resetList(),this.loadItems()},t.prototype.showProjectsOnly=function(){if("project"!==this.type)return this.type="project",this._resetList(),this.loadItems()},t.prototype.showEpicsOnly=function(){if("epic"!==this.type)return this.type="epic",this._resetList(),this.loadItems()},t.prototype.showUserStoriesOnly=function(){if("userstory"!==this.type)return this.type="userstory",this._resetList(),this.loadItems()},t.prototype.showTasksOnly=function(){if("task"!==this.type)return this.type="task",this._resetList(),this.loadItems()},t.prototype.showIssuesOnly=function(){if("issue"!==this.type)return this.type="issue",this._resetList(),this.loadItems()},t}(),e=function(t){function e(t){this.userService=t,e.__super__.constructor.call(this),this.tabName="likes",this.enableFilterByAll=!1,this.enableFilterByProjects=!1,this.enableFilterByEpics=!1,this.enableFilterByUserStories=!1,this.enableFilterByTasks=!1,this.enableFilterByIssues=!1,this.enableFilterByTextQuery=!0,this._getItems=this.userService.getLiked}return o(e,t),e.$inject=["tgUserService"],e}(t),angular.module("taigaProfile").controller("ProfileLiked",e),r=function(t){function e(t){this.userService=t,e.__super__.constructor.call(this),this.tabName="upvotes",this.enableFilterByAll=!0,this.enableFilterByProjects=!1,this.enableFilterByEpics=!0,this.enableFilterByUserStories=!0,this.enableFilterByTasks=!0,this.enableFilterByIssues=!0,this.enableFilterByTextQuery=!0,this._getItems=this.userService.getVoted}return o(e,t),e.$inject=["tgUserService"],e}(t),angular.module("taigaProfile").controller("ProfileVoted",r),n=function(t){function e(t){this.userService=t,e.__super__.constructor.call(this),this.tabName="watchers",this._getItems=this.userService.getWatched}return o(e,t),e.$inject=["tgUserService"],e}(t),angular.module("taigaProfile").controller("ProfileWatched",n)}.call(this),function(){var t,e,r,n;n={scope:{},bindToController:{user:"=",type:"@",q:"@",scrollDisabled:"@",isLoading:"@",hasNoResults:"@"},controller:null,controllerAs:"vm",templateUrl:"profile/profile-favs/profile-favs.html"},t=function(){return _.extend({},n,{controller:"ProfileLiked"})},angular.module("taigaProfile").directive("tgProfileLiked",t),e=function(){return _.extend({},n,{controller:"ProfileVoted"})},angular.module("taigaProfile").directive("tgProfileVoted",e),r=function(){return _.extend({},n,{controller:"ProfileWatched"})},angular.module("taigaProfile").directive("tgProfileWatched",r)}.call(this),function(){var t;t=function(){function t(t){var e;this.translate=t,e=Math.floor(Math.random()*this.HINTS.length)+1,this.hint=this.HINTS[e-1],this.hint.linkText=this.hint.linkText||"HINTS.LINK",this.hint.title=this.translate.instant("HINTS.HINT"+e+"_TITLE"),this.hint.text=this.translate.instant("HINTS.HINT"+e+"_TEXT")}return t.prototype.HINTS=[{url:"https://tree.taiga.io/support/admin/import-export-projects/"},{url:"https://tree.taiga.io/support/admin/custom-fields/"},{},{}],t}(),t.$inject=["$translate"],angular.module("taigaProfile").controller("ProfileHints",t)}.call(this),function(){var t;t=function(t){return{scope:{},controller:"ProfileHints",controllerAs:"vm",templateUrl:"profile/profile-hints/profile-hints.html"}},t.$inject=["$translate"],angular.module("taigaProfile").directive("tgProfileHints",t)}.call(this),function(){var t;t=function(){function t(t,e){this.projectsService=t,this.userService=e}return t.$inject=["tgProjectsService","tgUserService"],t.prototype.loadProjects=function(){return this.projectsService.getProjectsByUserId(this.user.get("id")).then(function(t){return function(e){return t.userService.attachUserContactsToProjects(t.user.get("id"),e)}}(this)).then(function(t){return function(e){return t.projects=e}}(this))},t}(),angular.module("taigaProfile").controller("ProfileProjects",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.loadProjects()},{templateUrl:"profile/profile-projects/profile-projects.html",scope:{user:"="},link:t,bindToController:!0,controllerAs:"vm",controller:"ProfileProjects"}},angular.module("taigaProfile").directive("tgProfileProjects",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n,i){if(t.tab={},r.$observe("tgProfileTab",function(e){return t.tab.name=e}),r.$observe("tabTitle",function(e){return t.tab.title=e}),t.tab.icon=r.tabIcon,t.tab.active=!!r.tabActive,t.$eval(r.tabDisabled)!==!0)return n.addTab(t.tab)},{templateUrl:"profile/profile-tab/profile-tab.html",scope:{},require:"^tgProfileTabs",link:t,transclude:!0}},angular.module("taigaProfile").directive("tgProfileTab",t)}.call(this),function(){var t;t=function(){function t(){this.tabs=[]}return t.prototype.addTab=function(t){return this.tabs.push(t)},t.prototype.toggleTab=function(t){return _.map(this.tabs,function(t){return t.active=!1}),t.active=!0},t}(),angular.module("taigaProfile").controller("ProfileTabs",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"ProfileTabs",controllerAs:"vm",templateUrl:"profile/profile-tabs/profile-tabs.html",transclude:!0}},angular.module("taigaProfile").directive("tgProfileTabs",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n,i,o){this.appMetaService=t,this.currentUserService=e,this.routeParams=r,this.userService=n,this.xhrError=i,this.translate=o,this.isCurrentUser=!1,this.routeParams.slug?this.userService.getUserByUserName(this.routeParams.slug).then(function(t){return function(e){return e.get("is_active")?(t.user=e,t.isCurrentUser=!1,t._setMeta(t.user),e):t.xhrError.notFound()}}(this))["catch"](function(t){return function(e){return t.xhrError.response(e)}}(this)):(this.user=this.currentUserService.getUser(),this.isCurrentUser=!0,this._setMeta(this.user))}return t.$inject=["tgAppMetaService","tgCurrentUserService","$routeParams","tgUserService","tgXhrErrorService","$translate"],t.prototype._setMeta=function(t){var e,r,n;return e={userFullName:t.get("full_name_display"),userUsername:t.get("username")},n=this.translate.instant("USER.PROFILE.PAGE_TITLE",e),r=t.get("bio"),this.appMetaService.setAll(n,r)},t}(),angular.module("taigaProfile").controller("Profile",t)}.call(this),function(){var t;t=function(){return{templateUrl:"projects/project/blocked-project-explanation.html"}},angular.module("taigaProjects").directive("tgBlockedProjectExplanation",t)}.call(this),function(){var t;t=function(){function t(t){this.lightboxFactory=t}return t.$inject=["tgLightboxFactory"],t.prototype.launchContactForm=function(){return this.lightboxFactory.create("tg-lb-contact-project",{"class":"lightbox lightbox-contact-project e2e-lightbox-contact-project",project:"project"},{project:this.project})},t}(),angular.module("taigaProjects").controller("ContactProjectButtonCtrl",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"ContactProjectButtonCtrl",bindToController:{project:"=",layout:"@"},controllerAs:"vm",templateUrl:"projects/components/contact-project-button/contact-project-button.html"}},angular.module("taigaProjects").directive("tgContactProjectButton",t)}.call(this),function(){var t;t=function(){function t(t,e,r){this.lightboxService=t,this.rs=e,this.confirm=r,this.contact={}}return t.$inject=["lightboxService","tgResources","$tgConfirm"],t.prototype.contactProject=function(){var t,e,r;return e=this.project.get("id"),t=this.contact.message,r=this.rs.projects.contactProject(e,t),this.sendingFeedback=!0,r.then(function(t){return function(){return t.lightboxService.closeAll(),t.sendingFeedback=!1,t.confirm.notify("success")}}(this))},t}(),angular.module("taigaProjects").controller("ContactProjectLbCtrl",t)}.call(this),function(){var t;t=function(t){var e;return this.inject=["lightboxService"],e=function(e,r){return t.open(r)},{controller:"ContactProjectLbCtrl",bindToController:{project:"="},controllerAs:"vm",templateUrl:"projects/components/lb-contact-project/lb-contact-project.html",link:e}},angular.module("taigaProjects").directive("tgLbContactProject",["lightboxService",t])}.call(this),function(){var t;t=function(){function t(t,e){this.confirm=t,this.likeButtonService=e,this.isMouseOver=!1,this.loading=!1}return t.$inject=["$tgConfirm","tgLikeProjectButtonService"],t.prototype.showTextWhenMouseIsOver=function(){return this.isMouseOver=!0},t.prototype.showTextWhenMouseIsLeave=function(){return this.isMouseOver=!1},t.prototype.toggleLike=function(){var t;return this.loading=!0,t=this.project.get("is_fan")?this._unlike():this._like(),t["finally"](function(t){return function(){return t.loading=!1}}(this)),t},t.prototype._like=function(){return this.likeButtonService.like(this.project.get("id")).then(function(t){return function(){return t.showTextWhenMouseIsLeave()}}(this))["catch"](function(t){return function(){return t.confirm.notify("error")}}(this))},t.prototype._unlike=function(){return this.likeButtonService.unlike(this.project.get("id"))["catch"](function(t){return function(){return t.confirm.notify("error")}}(this))},t}(),angular.module("taigaProjects").controller("LikeProjectButton",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"LikeProjectButton",bindToController:{project:"="},controllerAs:"vm",templateUrl:"projects/components/like-project-button/like-project-button.html"}},angular.module("taigaProjects").directive("tgLikeProjectButton",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga,t=function(t){function e(t,e,r){this.rs=t,this.currentUserService=e,this.projectService=r}return r(e,t),e.$inject=["tgResources","tgCurrentUserService","tgProjectService"],e.prototype._getProjectIndex=function(t){return this.currentUserService.projects.get("all").findIndex(function(e){return e.get("id")===t})},e.prototype._updateProjects=function(t,e){var r,n;if(r=this._getProjectIndex(t),r!==-1)return n=this.currentUserService.projects.get("all").update(r,function(t){var r;return r=t.get("total_fans"),e?r++:r--,t.merge({is_fan:e,total_fans:r})}),this.currentUserService.setProjects(n)},e.prototype._updateCurrentProject=function(t){var e,r;return r=this.projectService.project.get("total_fans"),t?r++:r--,e=this.projectService.project.merge({is_fan:t,total_fans:r}),this.projectService.setProject(e)},e.prototype.like=function(t){return this.rs.projects.likeProject(t).then(function(e){return function(){return e._updateProjects(t,!0),e._updateCurrentProject(!0)}}(this))},e.prototype.unlike=function(t){return this.rs.projects.unlikeProject(t).then(function(e){return function(){return e._updateProjects(t,!1),e._updateCurrentProject(!1)}}(this))},e}(e.Service),angular.module("taigaProjects").service("tgLikeProjectButtonService",t)}.call(this),function(){var t;t=function(t){var e,r;return r=function(e,r,n,i){var o,s,a;return s=null,o=dragula([r[0]],{copySortSource:!1,copy:!1,mirrorContainer:r[0],moves:function(t){return $(t).hasClass("list-itemtype-project")}}),o.on("dragend",function(r){var n,i,o,a,c,u,l;for(s=$(r),a=s.scope().project,i=s.index(),u=_.map(e.projects.toJS(),function(t){return t.id}),u=_.without(u,a.get("id")),u.splice(i,0,a.get("id")),c=[],i=n=0,o=u.length;n=s.get("max_memberships_private_projects"),i&&n?(e="private-space-members",r=s.get("max_memberships_private_projects")):i?e="private-space":n&&(e="private-members",r=s.get("max_memberships_private_projects"))):(o=!this.currentUserService.canCreatePublicProjects().valid,n=null!==s.get("max_memberships_public_projects")&&t.headers.memberships>=s.get("max_memberships_public_projects"),o&&n?(e="public-space-members",r=s.get("max_memberships_public_projects")):o?e="public-space":n&&(e="public-members",r=s.get("max_memberships_public_projects"))),!!e&&{key:e,values:{max_memberships:r,members:t.headers.memberships}})},r}(taiga.Service),angular.module("taigaProjects").service("tgImportProjectService",t)}.call(this),function(){var t;t=function(){function t(){}return t.$inject=[],t.prototype.isDisabled=function(t){return this.invitedMembers.indexOf(t)===-1},t}(),angular.module("taigaProjects").controller("InviteMembersCtrl",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{link:t,templateUrl:"projects/create/invite-members/invite-members.html",controller:"InviteMembersCtrl",controllerAs:"vm",bindToController:!0,scope:{invitedMembers:"<",members:"<",onToggleInvitedMember:"&"}}},t.$inject=[],angular.module("taigaProjects").directive("tgInviteMembers",t)}.call(this),function(){var t;t=function(){return{templateUrl:"projects/create/invite-members/single-member/single-member.html",scope:{disabled:"<",avatar:"="}}},t.$inject=[],angular.module("taigaProjects").directive("tgSingleMember",t)}.call(this),function(){var t;t=function(){function t(t){this.currentUserService=t,this.canCreatePublicProjects=this.currentUserService.canCreatePublicProjects(),this.canCreatePrivateProjects=this.currentUserService.canCreatePrivateProjects(),this.projectForm=this.project.toJS(),this.projectForm.is_private=!1,this.projectForm.keepExternalReference=!1,"agile"===this.projectForm.importer_type?this.projectForm.project_type=null:this.projectForm.project_type="scrum",this.projectForm.create_subissues=!0,!this.canCreatePublicProjects.valid&&this.canCreatePrivateProjects.valid&&(this.projectForm.is_private=!0)}return t.$inject=["tgCurrentUserService"],t.prototype.checkUsersLimit=function(){return this.limitMembersPrivateProject=this.currentUserService.canAddMembersPrivateProject(this.members.size),this.limitMembersPublicProject=this.currentUserService.canAddMembersPublicProject(this.members.size)},t.prototype.saveForm=function(){return this.onSaveProjectDetails({project:Immutable.fromJS(this.projectForm)})},t.prototype.canCreateProject=function(){return this.projectForm.is_private?this.canCreatePrivateProjects.valid:this.canCreatePublicProjects.valid},t.prototype.isDisabled=function(){return!this.canCreateProject()},t}(),angular.module("taigaProjects").controller("JiraImportProjectFormCtrl",t)}.call(this),function(){var t;t=function(){return{link:function(t,e,r,n){return t.$watch("vm.members",n.checkUsersLimit.bind(n))},templateUrl:"projects/create/jira-import/jira-import-project-form/jira-import-project-form.html",controller:"JiraImportProjectFormCtrl",controllerAs:"vm",bindToController:!0,scope:{members:"<",project:"<",onSaveProjectDetails:"&",onCancelForm:"&",fetchingUsers:"<"}}},t.$inject=[],angular.module("taigaProjects").directive("tgJiraImportProjectForm",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.jiraImportService=t,this.confirm=e,this.translate=r,this.importProjectService=n,this.step="autorization-jira",this.project=null,taiga.defineImmutableProperty(this,"projects",function(t){return function(){return t.jiraImportService.projects}}(this)),taiga.defineImmutableProperty(this,"members",function(t){return function(){return t.jiraImportService.projectUsers}}(this))}return t.$inject=["tgJiraImportService","$tgConfirm","$translate","tgImportProjectService"],t.prototype.startProjectSelector=function(){return this.step="project-select-jira",this.jiraImportService.fetchProjects()},t.prototype.onSelectProject=function(t){return this.step="project-form-jira",this.project=t,this.fetchingUsers=!0,this.jiraImportService.fetchUsers(this.project.get("id")).then(function(t){return function(){return t.fetchingUsers=!1}}(this))},t.prototype.onSaveProjectDetails=function(t){return this.project=t,this.step="project-members-jira"},t.prototype.onCancelMemberSelection=function(){return this.step="project-form-jira"},t.prototype.startImport=function(t){var e,r,n;return e=this.confirm.loader(this.translate.instant("PROJECT.IMPORT.IN_PROGRESS.TITLE"),this.translate.instant("PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION"),!0),e.start(),r=this.project.get("project_type"),"issues"===r&&this.project.get("create_subissues")&&(r="issues-with-subissues"),n=this.jiraImportService.importProject(this.project.get("name"),this.project.get("description"),this.project.get("id"),t,this.project.get("keepExternalReference"),this.project.get("is_private"),r,this.project.get("importer_type")),this.importProjectService.importPromise(n).then(function(t){return function(){return e.stop()}}(this))},t.prototype.submitUserSelection=function(t){return this.startImport(t),null},t}(),angular.module("taigaProjects").controller("JiraImportCtrl",t)}.call(this),function(){var t;t=function(){return{link:function(t,e,r,n){return n.startProjectSelector()},templateUrl:"projects/create/jira-import/jira-import.html",controller:"JiraImportCtrl",controllerAs:"vm",bindToController:!0,scope:{onCancel:"&"}}},t.$inject=[],angular.module("taigaProjects").directive("tgJiraImport",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t,e){this.resources=t,this.location=e,this.projects=Immutable.List(),this.projectUsers=Immutable.List()}return e(r,t),r.$inject=["tgResources","$location"],r.prototype.setToken=function(t,e){return this.token=t,this.url=e},r.prototype.fetchProjects=function(){return this.resources.jiraImporter.listProjects(this.url,this.token).then(function(t){ -return function(e){return t.projects=e}}(this))},r.prototype.fetchUsers=function(t){return this.resources.jiraImporter.listUsers(this.url,this.token,t).then(function(t){return function(e){return t.projectUsers=e}}(this))},r.prototype.importProject=function(t,e,r,n,i,o,s,a){return this.resources.jiraImporter.importProject(this.url,this.token,t,e,r,n,i,o,s,a)},r.prototype.getAuthUrl=function(t){return new Promise(function(e){return function(r,n){return e.resources.jiraImporter.getAuthUrl(t).then(function(t){return e.authUrl=t.data.url,r(e.authUrl)},function(t){return n(t.data._error_message)})}}(this))},r.prototype.authorize=function(t){return new Promise(function(e){return function(r,n){return e.resources.jiraImporter.authorize(t).then(function(t){return e.token=t.data.token,e.url=t.data.url,r(t.data)},function(t){return n(new Error(t.status))})}}(this))},r}(taiga.Service),angular.module("taigaProjects").service("tgJiraImportService",t)}.call(this),function(){var t;t=function(){function t(){}return t.$inject=[],t.prototype.start=function(){return this.mode="search",this.invalid=!1},t.prototype.assignUser=function(){return this.onSelectUser({user:this.user,taigaUser:this.userEmail})},t.prototype.selectUser=function(t){return this.onSelectUser({user:this.user,taigaUser:Immutable.fromJS(t)})},t}(),angular.module("taigaProjects").controller("SelectImportUserLightboxCtrl",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i,o){return r.$watch("vm.visible",function(i){return i&&!n.hasClass("open")?(o.start(),t.open(n,null,r.vm.onClose).then(function(){return n.find("input").focus(),e.init(n)})):!i&&n.hasClass("open")?t.close(n).then(function(){return o.userEmail="",o.usersSearch=""}):void 0})},{controller:"SelectImportUserLightboxCtrl",controllerAs:"vm",bindToController:!0,scope:{user:"<",visible:"<",onClose:"&",onSelectUser:"&",selectableUsers:"<",isPrivate:"<",limitMembersPrivateProject:"<",limitMembersPublicProject:"<",displayEmailSelector:"<"},templateUrl:"projects/create/select-import-user-lightbox/select-import-user-lightbox.html",link:r}},t.$inject=["lightboxService","lightboxKeyboardNavigationService"],angular.module("taigaProjects").directive("tgSelectImportUserLightbox",t)}.call(this),function(){var t;t=function(){function t(t){this.currentUserService=t,this.canCreatePublicProjects=this.currentUserService.canCreatePublicProjects(),this.canCreatePrivateProjects=this.currentUserService.canCreatePrivateProjects(),this.projectForm=this.project.toJS(),this.platformName="Trello",this.projectForm.is_private=!1,this.projectForm.keepExternalReference=!1,!this.canCreatePublicProjects.valid&&this.canCreatePrivateProjects.valid&&(this.projectForm.is_private=!0)}return t.$inject=["tgCurrentUserService"],t.prototype.checkUsersLimit=function(){return this.limitMembersPrivateProject=this.currentUserService.canAddMembersPrivateProject(this.members.size),this.limitMembersPublicProject=this.currentUserService.canAddMembersPublicProject(this.members.size)},t.prototype.saveForm=function(){return this.onSaveProjectDetails({project:Immutable.fromJS(this.projectForm)})},t.prototype.canCreateProject=function(){return this.projectForm.is_private?this.canCreatePrivateProjects.valid:this.canCreatePublicProjects.valid},t.prototype.isDisabled=function(){return!this.canCreateProject()},t}(),angular.module("taigaProjects").controller("TrelloImportProjectFormCtrl",t)}.call(this),function(){var t;t=function(){return{link:function(t,e,r,n){return t.$watch("vm.members",n.checkUsersLimit.bind(n))},templateUrl:"projects/create/trello-import/trello-import-project-form/trello-import-project-form.html",controller:"TrelloImportProjectFormCtrl",controllerAs:"vm",bindToController:!0,scope:{members:"<",project:"<",onSaveProjectDetails:"&",onCancelForm:"&",fetchingUsers:"<"}}},t.$inject=[],angular.module("taigaProjects").directive("tgTrelloImportProjectForm",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.trelloImportService=t,this.confirm=e,this.translate=r,this.importProjectService=n,this.project=null,taiga.defineImmutableProperty(this,"projects",function(t){return function(){return t.trelloImportService.projects}}(this)),taiga.defineImmutableProperty(this,"members",function(t){return function(){return t.trelloImportService.projectUsers}}(this))}return t.$inject=["tgTrelloImportService","$tgConfirm","$translate","tgImportProjectService"],t.prototype.startProjectSelector=function(){return this.trelloImportService.fetchProjects().then(function(t){return function(){return t.step="project-select-trello"}}(this))},t.prototype.onSelectProject=function(t){return this.step="project-form-trello",this.project=t,this.fetchingUsers=!0,this.trelloImportService.fetchUsers(this.project.get("id")).then(function(t){return function(){return t.fetchingUsers=!1}}(this))},t.prototype.onSaveProjectDetails=function(t){return this.project=t,this.step="project-members-trello"},t.prototype.onCancelMemberSelection=function(){return this.step="project-form-trello"},t.prototype.startImport=function(t){var e,r;return e=this.confirm.loader(this.translate.instant("PROJECT.IMPORT.IN_PROGRESS.TITLE"),this.translate.instant("PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION"),!0),e.start(),r=this.trelloImportService.importProject(this.project.get("name"),this.project.get("description"),this.project.get("id"),t,this.project.get("keepExternalReference"),this.project.get("is_private")),this.importProjectService.importPromise(r).then(function(t){return function(){return e.stop()}}(this))},t.prototype.submitUserSelection=function(t){return this.startImport(t),null},t}(),angular.module("taigaProjects").controller("TrelloImportCtrl",t)}.call(this),function(){var t;t=function(){return{link:function(t,e,r,n){return n.startProjectSelector()},templateUrl:"projects/create/trello-import/trello-import.html",controller:"TrelloImportCtrl",controllerAs:"vm",bindToController:!0,scope:{onCancel:"&"}}},t.$inject=[],angular.module("taigaProjects").directive("tgTrelloImport",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t){this.resources=t,this.projects=Immutable.List(),this.projectUsers=Immutable.List(),this.token=null}return e(r,t),r.$inject=["tgResources"],r.prototype.setToken=function(t){return this.token=t},r.prototype.fetchProjects=function(){return this.resources.trelloImporter.listProjects(this.token).then(function(t){return function(e){return t.projects=e}}(this))},r.prototype.fetchUsers=function(t){return this.resources.trelloImporter.listUsers(this.token,t).then(function(t){return function(e){return t.projectUsers=e}}(this))},r.prototype.importProject=function(t,e,r,n,i,o){return this.resources.trelloImporter.importProject(this.token,t,e,r,n,i,o)},r.prototype.getAuthUrl=function(){return new Promise(function(t){return function(e){return t.resources.trelloImporter.getAuthUrl().then(function(r){return t.authUrl=r.data.url,e(t.authUrl)})}}(this))},r.prototype.authorize=function(t){return new Promise(function(e){return function(r,n){return e.resources.trelloImporter.authorize(t).then(function(t){return e.token=t.data.token,r(e.token)},function(t){return n(new Error(t.status))})}}(this))},r}(taiga.Service),angular.module("taigaProjects").service("tgTrelloImportService",t)}.call(this),function(){var t;t=function(t,e){return{link:function(r,n,i){return r.$watch("visible",function(i){return i&&!n.hasClass("open")?t.open(n,r.onClose).then(function(){return n.find("input").focus(),e.init(n)}):!i&&n.hasClass("open")?t.close(n):void 0})},templateUrl:"projects/create/warning-user-import-lightbox/warning-user-import-lightbox.html",scope:{visible:"<",onClose:"&",onConfirm:"&"}}},t.$inject=["lightboxService","lightboxKeyboardNavigationService"],angular.module("taigaProjects").directive("tgWarningUserImportLightbox",t)}.call(this),function(){var t;t=function(){function t(t){this.currentUserService=t,taiga.defineImmutableProperty(this,"projects",function(t){return function(){return t.currentUserService.projects.get("all")}}(this))}return t.$inject=["tgCurrentUserService"],t}(),angular.module("taigaProjects").controller("ProjectsListing",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n,i){this.routeParams=t,this.location=e,this.projectService=r,this.rs=n,this.tgSections=i,this.getProjectHomepage().then(function(t){return function(e){return e?t.location.url("project/"+t.routeParams.pslug+"/"+e):t.gotoDefaultProjectHomepage()}}(this)).then(null,function(){return this.gotoDefaultProjectHomepage()})}return t.$inject=["$routeParams","$location","tgProjectService","$tgResources","$tgSections"],t.prototype.gotoDefaultProjectHomepage=function(){return this.location.url("project/"+this.routeParams.pslug+"/timeline")},t.prototype.getProjectHomepage=function(){var t;return t=this.projectService.project.toJS(),this.rs.userProjectSettings.list({project:t.id}).then(function(e){return function(r){var n;if(n=_.find(r,{project:t.id}))return e.tgSections.getPath(t.slug,n.homepage)}}(this))},t}(),angular.module("taigaProjects").controller("ProjectRouter",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n,i){this.routeParams=t,this.appMetaService=e,this.auth=r,this.translate=n,this.projectService=i,this.user=this.auth.userData,taiga.defineImmutableProperty(this,"project",function(t){return function(){return t.projectService.project}}(this)),taiga.defineImmutableProperty(this,"members",function(t){return function(){return t.projectService.activeMembers}}(this)),this.appMetaService.setfn(this._setMeta.bind(this))}return t.$inject=["$routeParams","tgAppMetaService","$tgAuth","$translate","tgProjectService"],t.prototype._setMeta=function(){var t;return this.project?(t={projectName:this.project.get("name")},{title:this.translate.instant("PROJECT.PAGE_TITLE",t),description:this.project.get("description")}):null},t}(),angular.module("taigaProjects").controller("Project",t)}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=this.taiga,e=this.taiga.groupBy,t=function(t){function e(t,e){this.rs=t,this.projectUrl=e}return n(e,t),e.$inject=["tgResources","$projectUrl"],e.prototype.create=function(t){return this.rs.projects.create(t)},e.prototype.duplicate=function(t,e){return this.rs.projects.duplicate(t,e)},e.prototype.getProjectBySlug=function(t){return this.rs.projects.getProjectBySlug(t).then(function(t){return function(e){return t._decorate(e)}}(this))},e.prototype.getProjectStats=function(t){return this.rs.projects.getProjectStats(t)},e.prototype.getProjectsByUserId=function(t,e){return this.rs.projects.getProjectsByUserId(t,e).then(function(t){return function(e){return e.map(t._decorate.bind(t))}}(this))},e.prototype._decorate=function(t){var e;return e=this.projectUrl.get(t.toJS()),t=t.set("url",e)},e.prototype.bulkUpdateProjectsOrder=function(t){return this.rs.projects.bulkUpdateOrder(t)},e.prototype.transferValidateToken=function(t,e){return this.rs.projects.transferValidateToken(t,e)},e.prototype.transferAccept=function(t,e,r){return this.rs.projects.transferAccept(t,e,r)},e.prototype.transferReject=function(t,e,r){return this.rs.projects.transferReject(t,e,r)},e}(r.Service),angular.module("taigaProjects").service("tgProjectsService",t)}.call(this),function(){var t;t=function(){return{templateUrl:"projects/transfer/cant-own-project-explanation.html"}},angular.module("taigaProjects").directive("tgCantOwnProjectExplanation",t)}.call(this),function(){var t,e;e=angular.module("taigaProjects"),t=function(){function t(t,e,r,n,i,o,s,a,c){this.routeParams=t,this.projectService=e,this.location=r,this.authService=n,this.currentUserService=i,this.navUrls=o,this.translate=s,this.confirmService=a,this.errorHandlingService=c}return t.$inject=["$routeParams","tgProjectsService","$location","$tgAuth","tgCurrentUserService","$tgNavUrls","$translate","$tgConfirm","tgErrorHandlingService"],t.prototype.initialize=function(){return this.projectId=this.project.get("id"),this.token=this.routeParams.token,this.showAddComment=!1,this._refreshUserData()},t.prototype._validateToken=function(){return this.projectService.transferValidateToken(this.projectId,this.token).then(null,function(t){return function(e,r){return t.errorHandlingService.notfound()}}(this))},t.prototype._refreshUserData=function(){return this.authService.refresh().then(function(t){return function(){return t._validateToken(),t._setProjectData(),t._checkOwnerData()}}(this))},t.prototype._setProjectData=function(){return this.canBeOwnedByUser=this.currentUserService.canOwnProject(this.project)},t.prototype._checkOwnerData=function(){var t,e;return t=this.currentUserService.getUser(),this.project.get("is_private")?(this.ownerMessage="ADMIN.PROJECT_TRANSFER.OWNER_MESSAGE.PRIVATE",this.maxProjects=t.get("max_private_projects"),null===this.maxProjects&&(this.maxProjects=this.translate.instant("ADMIN.PROJECT_TRANSFER.UNLIMITED_PROJECTS")),this.currentProjects=t.get("total_private_projects"),e=t.get("max_memberships_private_projects")):(this.ownerMessage="ADMIN.PROJECT_TRANSFER.OWNER_MESSAGE.PUBLIC",this.maxProjects=t.get("max_public_projects"),null===this.maxProjects&&(this.maxProjects=this.translate.instant("ADMIN.PROJECT_TRANSFER.UNLIMITED_PROJECTS")),this.currentProjects=t.get("total_public_projects"),e=t.get("max_memberships_public_projects")),this.validNumberOfMemberships=null===e||this.project.get("total_memberships")<=e},t.prototype.transferAccept=function(t,e){return this.loadingAccept=!0,this.projectService.transferAccept(this.project.get("id"),t,e).then(function(t){return function(){var e;e=t.navUrls.resolve("project-admin-project-profile-details",{project:t.project.get("slug")}),t.loadingAccept=!1,t.location.path(e),t.confirmService.notify("success",t.translate.instant("ADMIN.PROJECT_TRANSFER.ACCEPTED_PROJECT_OWNERNSHIP"),"",5e3)}}(this))},t.prototype.transferReject=function(t,e){return this.loadingReject=!0,this.projectService.transferReject(this.project.get("id"),t,e).then(function(t){return function(){var e;e=t.navUrls.resolve("home",{project:t.project.get("slug")}),t.loadingReject=!1,t.location.path(e),t.confirmService.notify("success",t.translate.instant("ADMIN.PROJECT_TRANSFER.REJECTED_PROJECT_OWNERNSHIP"),"",5e3)}}(this))},t.prototype.addComment=function(){return this.showAddComment=!0},t.prototype.hideComment=function(){return this.showAddComment=!1,this.reason=""},t}(),e.controller("TransferProjectController",t)}.call(this),function(){var t,e;e=angular.module("taigaProjects"),t=function(){var t;return t=function(t,e,r,n){return n.initialize()},{link:t,scope:{},bindToController:{project:"="},templateUrl:"projects/transfer/transfer-project.html",controller:"TransferProjectController",controllerAs:"vm"}},e.directive("tgTransferProject",t)}.call(this),function(){var t,e,r,n;n=this.taiga,r=this.taiga.sizeFormat,t=function(t,e,n,i,o,s){var a;return a={},a.list=function(r,n,i){var o,s,a,c;return c="attachments/"+r,s={object_id:n,project:i},o={headers:{"x-disable-pagination":"1"}},a=t.resolve(c),e.get(a,s,o).then(function(t){return Immutable.fromJS(t.data)})},a["delete"]=function(r,n){var i,o;return o="attachments/"+r,i=t.resolve(o)+("/"+n),e["delete"](i)},a.patch=function(r,n,i){var o,s;return s="attachments/"+r,o=t.resolve(s)+("/"+n),e.patch(o,i)},a.create=function(e,a,c,u,l){var p,d,f,h,g,m,v,y,_,b,S;return b="attachments/"+e,_=t.resolve(b),d=o.defer(),void 0===u?(d.reject(null),d.promise):(f=n.get("maxUploadFileSize",null),f&&u.size>f?(h={status:413,data:{_error_message:"'"+u.name+"' ("+r(u.size)+") is too heavy for our oompa loompas, try it with a smaller than ("+r(f)+")"}},d.reject(h),d.promise):(y=function(t){return function(t){return i.$apply(function(){return u.status="in-progress",u.size=r(t.total),u.progressMessage="upload "+r(t.loaded)+" of "+r(t.total),u.progressPercent=Math.round(t.loaded/t.total*100)+"%"})}}(this),m=function(t){return function(t){return i.$apply(function(){var e,r,n;u.status="done",n=t.target.status;try{e=JSON.parse(t.target.responseText)}catch(i){e={}}return n>=200&&n<400?(e=Immutable.fromJS(e),d.resolve(e)):(h={status:n,data:{_error_message:null!=(r=p.attached_file)?r[0]:void 0}},d.reject(h))})}}(this),v=function(t){return function(t){return i.$apply(function(){return u.status="error",d.reject("fail")})}}(this),p=new FormData,p.append("project",a),p.append("object_id",c),p.append("attached_file",u),p.append("from_comment",l),S=new XMLHttpRequest,S.upload.addEventListener("progress",y,!1),S.addEventListener("load",m,!1),S.addEventListener("error",v,!1),g=s.get("token"),S.open("POST",_),S.setRequestHeader("Authorization","Bearer "+g),S.setRequestHeader("Accept","application/json"),S.send(p),d.promise))},function(){return{attachments:a}}},t.$inject=["$tgUrls","$tgHttp","$tgConfig","$rootScope","$q","$tgStorage"],e=angular.module("taigaResources2"),e.factory("tgAttachmentsResource",t)}.call(this),function(){var t,e;t=function(t,e){var r;return r={},r.listInAllProjects=function(r){var n,i;return i=t.resolve("epics"),n={headers:{"x-disable-pagination":"1"}},e.get(i,r,n).then(function(t){return Immutable.fromJS(t.data)})},r.list=function(r,n){var i,o;return null==n&&(n=0),o=t.resolve("epics"),i={project:r,page:n},e.get(o,i).then(function(t){return{list:Immutable.fromJS(t.data),headers:t.headers}})},r.patch=function(r,n){var i;return i=t.resolve("epics")+("/"+r),e.patch(i,n).then(function(t){return Immutable.fromJS(t.data)})},r.post=function(r){var n;return n=t.resolve("epics"),e.post(n,r).then(function(t){return Immutable.fromJS(t.data)})},r.reorder=function(r,n,i){var o,s;return s=t.resolve("epics")+("/"+r),o={headers:{"set-orders":JSON.stringify(i)}},e.patch(s,n,null,o).then(function(t){return Immutable.fromJS(t.data)})},r.addRelatedUserstory=function(r,n){var i,o;return o=t.resolve("epic-related-userstories",r),i={user_story:n,epic:r},e.post(o,i)},r.reorderRelatedUserstory=function(r,n,i,o){var s,a;return a=t.resolve("epic-related-userstories",r)+("/"+n),s={headers:{"set-orders":JSON.stringify(o)}},e.patch(a,i,null,s)},r.bulkCreateRelatedUserStories=function(r,n,i){var o,s;return s=t.resolve("epic-related-userstories-bulk-create",r),o={bulk_userstories:i,project_id:n},e.post(s,o)},r.deleteRelatedUserstory=function(r,n){var i;return i=t.resolve("epic-related-userstories",r)+("/"+n),e["delete"](i)},function(){return{epics:r}}},t.$inject=["$tgUrls","$tgHttp"],e=angular.module("taigaResources2"),e.factory("tgEpicsResource",t)}.call(this),function(){var t,e;t=function(t,e){var r;return r={},r.getApplicationToken=function(r,n){var i;return i=t.resolve("applications"),i=i+"/"+r+"/token?state="+n,e.get(i).then(function(t){return Immutable.fromJS(t.data)})},r.authorizeApplicationToken=function(r,n){var i,o;return o=t.resolve("application-tokens"),o+="/authorize",i={state:n,application:r},e.post(o,i).then(function(t){return Immutable.fromJS(t.data)})},function(){return{externalapps:r}}},t.$inject=["$tgUrls","$tgHttp"],e=angular.module("taigaResources2"),e.factory("tgExternalAppsResource",t)}.call(this),function(){var t,e;t=function(t,e){var r;return r={},r.getHistory=function(r,n,i,o){var s;return s=t.resolve("history/"+n),e.get(s+"/"+i,{page:o,type:r}).then(function(t){return{list:Immutable.fromJS(t.data),headers:t.headers}})},function(){return{history:r}}},t.$inject=["$tgUrls","$tgHttp"],e=angular.module("taigaResources2"),e.factory("tgHistory",t)}.call(this),function(){var t,e,r,n,i,o;o=this.taiga,n=function(t,e){var r;return r={},r.getAuthUrl=function(r){return r=t.resolve("importers-trello-auth-url"),e.get(r)},r.authorize=function(r){var n;return n=t.resolve("importers-trello-authorize"),e.post(n,{code:r})},r.listProjects=function(r){var n;return n=t.resolve("importers-trello-list-projects"),e.post(n,{token:r}).then(function(t){return Immutable.fromJS(t.data)})},r.listUsers=function(r,n){var i;return i=t.resolve("importers-trello-list-users"),e.post(i,{token:r,project:n}).then(function(t){return Immutable.fromJS(t.data)})},r.importProject=function(r,n,i,o,s,a,c){var u,l;return l=t.resolve("importers-trello-import-project"),u={token:r,name:n,description:i,project:o,users_bindings:s.toJS(),keep_external_reference:a,is_private:c,template:"kanban"},e.post(l,u)},function(){return{trelloImporter:r}}},n.$inject=["$tgUrls","$tgHttp"],r=function(t,e){var r;return r={},r.getAuthUrl=function(r){var n;return n=t.resolve("importers-jira-auth-url")+"?url="+r,e.get(n)},r.authorize=function(r){var n;return n=t.resolve("importers-jira-authorize"),e.post(n,{oauth_verifier:r})},r.listProjects=function(r,n){var i;return i=t.resolve("importers-jira-list-projects"),e.post(i,{url:r,token:n}).then(function(t){return Immutable.fromJS(t.data)})},r.listUsers=function(r,n,i){var o;return o=t.resolve("importers-jira-list-users"),e.post(o,{url:r,token:n,project:i}).then(function(t){return Immutable.fromJS(t.data)})},r.importProject=function(r,n,i,o,s,a,c,u,l,p){var d,f,h;return h=t.resolve("importers-jira-import-project"),f="kanban","kanban"!==l&&(f="scrum"),d={url:r,token:n,name:i,description:o,project:s,users_bindings:a.toJS(),keep_external_reference:c,is_private:u,project_type:l,importer_type:p,template:f},e.post(h,d)},function(){return{jiraImporter:r}}},r.$inject=["$tgUrls","$tgHttp"],e=function(t,e){var r;return r={},r.getAuthUrl=function(r){var n;return n=t.resolve("importers-github-auth-url")+"?uri="+r,e.get(n)},r.authorize=function(r){var n;return n=t.resolve("importers-github-authorize"),e.post(n,{code:r})},r.listProjects=function(r){var n;return n=t.resolve("importers-github-list-projects"),e.post(n,{token:r}).then(function(t){return Immutable.fromJS(t.data)})},r.listUsers=function(r,n){var i;return i=t.resolve("importers-github-list-users"),e.post(i,{token:r,project:n}).then(function(t){return Immutable.fromJS(t.data)})},r.importProject=function(r,n,i,o,s,a,c,u){var l,p;return p=t.resolve("importers-github-import-project"),l={token:r,name:n,description:i,project:o,users_bindings:s.toJS(),keep_external_reference:a,is_private:c,template:u},e.post(p,l)},function(){return{githubImporter:r}}},e.$inject=["$tgUrls","$tgHttp"],t=function(t,e){var r;return r={},r.getAuthUrl=function(){var r;return r=t.resolve("importers-asana-auth-url"),e.get(r)},r.authorize=function(r){var n;return n=t.resolve("importers-asana-authorize"),e.post(n,{code:r})},r.listProjects=function(r){var n;return n=t.resolve("importers-asana-list-projects"),e.post(n,{token:r}).then(function(t){return Immutable.fromJS(t.data)})},r.listUsers=function(r,n){var i;return i=t.resolve("importers-asana-list-users"),e.post(i,{token:r,project:n}).then(function(t){return Immutable.fromJS(t.data)})},r.importProject=function(r,n,i,o,s,a,c,u){var l,p;return p=t.resolve("importers-asana-import-project"),l={token:r,name:n,description:i,project:o,users_bindings:s.toJS(),keep_external_reference:a,is_private:c,template:u},e.post(p,l)},function(){return{asanaImporter:r}}},t.$inject=["$tgUrls","$tgHttp"],i=angular.module("taigaResources2"),i.factory("tgTrelloImportResource",n),i.factory("tgJiraImportResource",r),i.factory("tgGithubImportResource",e),i.factory("tgAsanaImportResource",t)}.call(this),function(){var t,e;t=function(t,e){var r;return r={},r.listInAllProjects=function(r){var n,i;return i=t.resolve("issues"),n={headers:{"x-disable-pagination":"1"}},e.get(i,r,n).then(function(t){return Immutable.fromJS(t.data)})},function(){return{issues:r}}},t.$inject=["$tgUrls","$tgHttp"],e=angular.module("taigaResources2"),e.factory("tgIssuesResource",t)}.call(this),function(){var t,e,r;r=function(){},t=function(t,e,r){var n;return n={},n.create=function(r){var n;return n=t.resolve("projects"),e.post(n,JSON.stringify(r)).then(function(t){return function(t){return Immutable.fromJS(t.data)}}(this))},n.duplicate=function(r,n){var i,o,s;return s=t.resolve("projects"),s=s+"/"+r+"/duplicate",i=n.users.map(function(t){return function(t){return{id:t}}}(this)),o={name:n.name,description:n.description,is_private:n.is_private,users:i},e.post(s,o)},n.getProjects=function(r,n){var i,o;return null==r&&(r={}),null==n&&(n=!0),o=t.resolve("projects"),i={},n||(i={headers:{"x-lazy-pagination":!0}}),e.get(o,r,i)},n.getProjectBySlug=function(r){var n;return n=t.resolve("projects"),n=n+"/by_slug?slug="+r,e.get(n).then(function(t){return Immutable.fromJS(t.data)})},n.getProjectsByUserId=function(r,n){var i,o,s;return null==n&&(n=!1),s=t.resolve("projects"),i={},n||(i.headers={"x-disable-pagination":"1"}),o={member:r,order_by:"user_order"},e.get(s,o,i).then(function(t){return Immutable.fromJS(t.data)})},n.getProjectStats=function(r){var n;return n=t.resolve("projects"),n=n+"/"+r,e.get(n).then(function(t){return Immutable.fromJS(t.data)})},n.bulkUpdateOrder=function(r){var n;return n=t.resolve("bulk-update-projects-order"),e.post(n,r)},n.getTimeline=function(n,i){var o,s;return o={page:i,only_relevant:!0},s=t.resolve("timeline-project"),s=s+"/"+n,e.get(s,o,{headers:{"x-lazy-pagination":!0}}).then(function(t){return t=Immutable.fromJS(t),r(t)})},n.likeProject=function(r){var n;return n=t.resolve("project-like",r),e.post(n)},n.unlikeProject=function(r){var n;return n=t.resolve("project-unlike",r),e.post(n)},n.watchProject=function(r,n){var i,o;return i={notify_level:n,live_notify_level:n},o=t.resolve("project-watch",r),e.post(o,i)},n.unwatchProject=function(r){var n;return n=t.resolve("project-unwatch",r),e.post(n)},n.contactProject=function(r,n){var i,o;return i={project:r,comment:n},o=t.resolve("project-contact"),e.post(o,i)},n.transferValidateToken=function(r,n){var i,o;return i={token:n},o=t.resolve("project-transfer-validate-token",r),e.post(o,i)},n.transferAccept=function(r,n,i){var o,s;return o={token:n,reason:i},s=t.resolve("project-transfer-accept",r),e.post(s,o)},n.transferReject=function(r,n,i){var o,s;return o={token:n,reason:i},s=t.resolve("project-transfer-reject",r),e.post(s,o)},n.transferRequest=function(r){var n;return n=t.resolve("project-transfer-request",r),e.post(n)},n.transferStart=function(r,n,i){var o,s;return o={user:n,reason:i},s=t.resolve("project-transfer-start",r),e.post(s,o)},function(){return{projects:n}}},t.$inject=["$tgUrls","$tgHttp","tgPaginateResponseService"],e=angular.module("taigaResources2"),e.factory("tgProjectsResources",t)}.call(this),function(){var t,e;e=["tgProjectsResources","tgUserResources","tgUsersResources","tgUserstoriesResource","tgTasksResource","tgIssuesResource","tgExternalAppsResource","tgAttachmentsResource","tgStatsResource","tgHistory","tgEpicsResource","tgTrelloImportResource","tgJiraImportResource","tgGithubImportResource","tgAsanaImportResource"],t=function(t){var r,n,i,o,s,a,c,u,l;for(r=0,i=e.length;r"),$("head").append(r)),r.text(e||"")):0===t.indexOf("og:")?(r=$("head meta[property='"+t+"']"),0===r.length&&(r=$(""),$("head").append(r)),r.attr("content",e||"")):(r=$("head meta[name='"+t+"']"),0===r.length&&(r=$(""),$("head").append(r)),r.attr("content",e||""))},t.prototype.setTitle=function(t){return this._set("title",t)},t.prototype.setDescription=function(t){return this._set("description",r(t,250))},t.prototype.setTwitterMetas=function(t,e){return this._set("twitter:card","summary"),this._set("twitter:site","@taigaio"),this._set("twitter:title",t),this._set("twitter:description",r(e,300)),this._set("twitter:image",window.location.origin+"/"+window._version+"/images/logo-color.png")},t.prototype.setOpenGraphMetas=function(t,e){return this._set("og:type","object"),this._set("og:site_name","Taiga - Love your projects"),this._set("og:title",t),this._set("og:description",r(e,300)),this._set("og:image",window.location.origin+"/"+window._version+"/images/logo-color.png"),this._set("og:url",window.location.href)},t.prototype.setAll=function(t,e){return this.setTitle(t),this.setDescription(e),this.setTwitterMetas(t,e),this.setOpenGraphMetas(t,e)},t.prototype.addMobileViewport=function(){return $("head").append('')},t.prototype.removeMobileViewport=function(){return $('head meta[name="viewport"]').remove()},t.prototype.setfn=function(t){return this.listener&&this._listener(),this._listener=this.rootScope.$watchCollection(t,function(t){return function(e){if(e)return t.setAll(e.title,e.description),t._listener()}}(this))},t}(),angular.module("taigaCommon").service("tgAppMetaService",t)}.call(this),function(){var t,e;e=this.taiga.sizeFormat,t=function(){function t(t,r,n,i){this.confirm=t,this.config=r,this.translate=n,this.rs=i,this.maxFileSize=this.getMaxFileSize(),this.maxFileSize&&(this.maxFileSizeFormated=e(this.maxFileSize))}return t.$inject=["$tgConfirm","$tgConfig","$translate","tgResources"],t.prototype.sizeError=function(t){var r;return r=this.translate.instant("ATTACHMENT.ERROR_MAX_SIZE_EXCEEDED",{fileName:t.name,fileSize:e(t.size),maxFileSize:this.maxFileSizeFormated}),this.confirm.notify("error",r)},t.prototype.validate=function(t){return!(this.maxFileSize&&t.size>this.maxFileSize)||(this.sizeError(t),!1)},t.prototype.getMaxFileSize=function(){return this.config.get("maxUploadFileSize",null)},t.prototype.list=function(t,e,r){return this.rs.attachments.list(t,e,r).then(function(t){return function(t){return t.sortBy(function(t){return t.get("order")})}}(this))},t.prototype["delete"]=function(t,e){return this.rs.attachments["delete"](t,e)},t.prototype.saveError=function(t,e){var r;return r="",t&&(r=this.translate.instant("ATTACHMENT.ERROR_UPLOAD_ATTACHMENT",{fileName:t.name,errorMessage:e.data._error_message})),this.confirm.notify("error",r)},t.prototype.upload=function(t,e,r,n,i){var o;return null==i&&(i=!1),o=this.rs.attachments.create(n,r,e,t,i),o.then(null,this.saveError.bind(this,t)),o},t.prototype.patch=function(t,e,r){var n;return n=this.rs.attachments.patch(e,t,r),n.then(null,this.saveError.bind(this,null)),n},t}(),angular.module("taigaCommon").service("tgAttachmentsService",t)}.call(this),function(){var t,e=function(t,e){return(+t%(e=+e)+e)%e};t=function(){function t(t){var e,r;this.config=t,r=["/"+window._version+"/images/user-avatars/user-avatar-01.png","/"+window._version+"/images/user-avatars/user-avatar-02.png","/"+window._version+"/images/user-avatars/user-avatar-03.png","/"+window._version+"/images/user-avatars/user-avatar-04.png","/"+window._version+"/images/user-avatars/user-avatar-05.png"],e=["rgba( 178, 176, 204, 1 )","rgba( 183, 203, 131, 1 )","rgba( 210, 198, 139, 1 )","rgba( 214, 161, 212, 1 )","rgba( 247, 154, 154, 1 )"],this.logos=_.cartesianProduct(r,e)}return t.prototype.getDefault=function(t){var r,n;return r=e(murmurhash3_32_gc(t,42),this.logos.length),n=this.logos[r],{src:n[0],color:n[1]}},t.prototype.getUnnamed=function(){return{url:"/"+window._version+"/images/unnamed.png",username:""}},t.prototype.getAvatar=function(t,e){var r,n,i,o,s,a,c;return t?(r="photo","avatarBig"===e&&(r="big_photo"),s=null,t instanceof Immutable.Map?(n=t.get("gravatar_id"),s=t.get(r),c="@"+t.get("username")):(n=t.gravatar_id,s=t[r],c="@"+t.username),n?s?{url:s,username:c}:location.host.indexOf("localhost")===-1&&this.config.get("gravatar",!0)?(a=location.protocol+"//"+location.host,i=this.getDefault(n),o=encodeURIComponent(a+i.src),{url:"https://www.gravatar.com/avatar/"+n+"?s=200&d="+o,bg:i.color,username:c}):(a=location.protocol+"//"+location.host,i=this.getDefault(n),{url:a+i.src,bg:i.color,username:c}):this.getUnnamed()):this.getUnnamed()},t}(),angular.module("taigaCommon").service("tgAvatarService",["$tgConfig",t])}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t){this.projectService=t}return t.$inject=["tgProjectService"],t.prototype.check=function(t){return!!this.projectService.project&&this.projectService.project.get("my_permissions").indexOf(t)!==-1},t}(),angular.module("taigaCommon").service("tgCheckPermissionsService",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.groupBy,t=function(){function t(t,e,n){this.projectsService=t,this.storageService=e,this.rs=n,this._user=null,this._projects=Immutable.Map(),this._projectsById=Immutable.Map(),this._joyride=null,r.defineImmutableProperty(this,"projects",function(t){return function(){return t._projects}}(this)),r.defineImmutableProperty(this,"projectsById",function(t){return function(){return t._projectsById}}(this))}return t.$inject=["tgProjectsService","$tgStorage","tgResources"],t.prototype.isAuthenticated=function(){return null!==this.getUser()},t.prototype.getUser=function(){var t;return this._user||(t=this.storageService.get("userInfo"),t&&(t=Immutable.fromJS(t),this.setUser(t))),this._user},t.prototype.removeUser=function(){return this._user=null,this._projects=Immutable.Map(),this._projectsById=Immutable.Map(),this._joyride=null},t.prototype.setUser=function(t){return this._user=t,this._loadUserInfo()},t.prototype.bulkUpdateProjectsOrder=function(t){return this.projectsService.bulkUpdateProjectsOrder(t).then(function(t){return function(){return t.loadProjects()}}(this))},t.prototype.loadProjects=function(){return this.projectsService.getProjectsByUserId(this._user.get("id")).then(function(t){return function(e){return t.setProjects(e)}}(this))},t.prototype.disableJoyRide=function(t){if(this.isAuthenticated())return t?this._joyride[t]=!1:this._joyride={backlog:!1,kanban:!1,dashboard:!1},this.rs.user.setUserStorage("joyride",this._joyride)},t.prototype.loadJoyRideConfig=function(){return new Promise(function(t){return function(e){return null!==t._joyride?void e(t._joyride):t.rs.user.getUserStorage("joyride").then(function(r){return t._joyride=r,e(t._joyride)})["catch"](function(){return t._joyride={backlog:!0,kanban:!0,dashboard:!0},t.rs.user.createUserStorage("joyride",t._joyride),e(t._joyride)})}}(this))},t.prototype._loadUserInfo=function(){return Promise.all([this.loadProjects()])},t.prototype.setProjects=function(t){return this._projects=this._projects.set("all",t),this._projects=this._projects.set("recents",t.slice(0,10)),this._projects=this._projects.set("unblocked",t.filter(function(t){return null===t.toJS().blocked_code})),this._projectsById=Immutable.fromJS(e(t.toJS(),function(t){return t.id})),this.projects},t.prototype.canCreatePrivateProjects=function(){var t;return t=this.getUser(),null!==t.get("max_private_projects")&&t.get("total_private_projects")>=t.get("max_private_projects")?{valid:!1,reason:"max_private_projects",type:"private_project",current:t.get("total_private_projects"),max:t.get("max_private_projects")}:{valid:!0}},t.prototype.canCreatePublicProjects=function(){var t;return t=this.getUser(),null!==t.get("max_public_projects")&&t.get("total_public_projects")>=t.get("max_public_projects")?{valid:!1,reason:"max_public_projects",type:"public_project",current:t.get("total_public_projects"),max:t.get("max_public_projects")}:{valid:!0}},t.prototype.canAddMembersPublicProject=function(t){var e;return e=this.getUser(),null!==e.get("max_memberships_public_projects")&&t>e.get("max_memberships_public_projects")?{valid:!1,reason:"max_members_public_projects",type:"public_project",current:t,max:e.get("max_memberships_public_projects")}:{valid:!0}},t.prototype.canAddMembersPrivateProject=function(t){var e;return e=this.getUser(),null!==e.get("max_memberships_private_projects")&&t>e.get("max_memberships_private_projects")?{valid:!1,reason:"max_members_private_projects",type:"private_project",current:t,max:e.get("max_memberships_private_projects")}:{valid:!0}},t.prototype.canOwnProject=function(t){var e,r,n;if(n=this.getUser(),t.get("is_private")){if(r=this.canCreatePrivateProjects(),!r.valid)return r;if(e=this.canAddMembersPrivateProject(t.get("total_memberships")),!e.valid)return e}else{if(r=this.canCreatePublicProjects(),!r.valid)return r;if(e=this.canAddMembersPublicProject(t.get("total_memberships")),!e.valid)return e}return{valid:!0}},t}(),angular.module("taigaCommon").service("tgCurrentUserService",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t){this.rootScope=t}return t.$inject=["$rootScope"],t.prototype.init=function(){return this.rootScope.errorHandling={}},t.prototype.notfound=function(){return this.rootScope.errorHandling.showingError=!0,this.rootScope.errorHandling.notfound=!0},t.prototype.error=function(){return this.rootScope.errorHandling.showingError=!0,this.rootScope.errorHandling.error=!0},t.prototype.permissionDenied=function(){return this.rootScope.errorHandling.showingError=!0,this.rootScope.errorHandling.permissionDenied=!0},t.prototype.block=function(){return this.rootScope.errorHandling.showingError=!0,this.rootScope.errorHandling.blocked=!0},t}(),angular.module("taigaCommon").service("tgErrorHandlingService",t)}.call(this),function(){var t;t=function(){function t(t,e){this.rootScope=t,this.compile=e}return t.$inject=["$rootScope","$compile"],t.prototype.create=function(t,e,r){var n,i,o;o=this.rootScope.$new(),o=_.merge(o,r),n=$("
    ").attr(t,!0).attr("tg-bind-scope",!0),e&&n.attr(e),n.addClass("remove-on-close"),i=this.compile(n)(o),$(document.body).append(i)},t}(),angular.module("taigaCommon").service("tgLightboxFactory",t)}.call(this),function(){var t;t=function(){return function(t){var e;return e=Immutable.Map({data:t.get("data"),next:!!t.get("headers")("x-pagination-next"),prev:!!t.get("headers")("x-pagination-prev"),current:t.get("headers")("x-pagination-current"),count:t.get("headers")("x-pagination-count")})}},angular.module("taigaCommon").factory("tgPaginateResponseService",t)}.call(this),function(){var t,e=function(t,e){return(+t%(e=+e)+e)%e};t=function(){function t(){var t,e;e=["/"+window._version+"/images/project-logos/project-logo-01.png","/"+window._version+"/images/project-logos/project-logo-02.png","/"+window._version+"/images/project-logos/project-logo-03.png","/"+window._version+"/images/project-logos/project-logo-04.png","/"+window._version+"/images/project-logos/project-logo-05.png"],t=["rgba( 153, 214, 220, 1 )","rgba( 213, 156, 156, 1 )","rgba( 214, 161, 212, 1 )","rgba( 164, 162, 219, 1 )","rgba( 152, 224, 168, 1 )"],this.logos=_.cartesianProduct(e,t)}return t.prototype.getDefaultProjectLogo=function(t,r){var n,i,o;return i=t+"-"+r,n=e(murmurhash3_32_gc(i,42),this.logos.length),o=this.logos[n],{src:o[0],color:o[1]}},t}(),angular.module("taigaCommon").service("tgProjectLogoService",t)}.call(this),function(){var t,e,r=function(t,e){return function(){return t.apply(e,arguments)}};e=this.taiga,t=function(){function t(t,n,i,o,s){this.rootScope=t,this.projectsService=n,this.xhrError=i,this.userActivityService=o,this.interval=s,this.manageProjectSignal=r(this.manageProjectSignal,this),this._project=null,this._section=null,this._sectionsBreadcrumb=Immutable.List(),this._activeMembers=Immutable.List(),e.defineImmutableProperty(this,"project",function(t){return function(){return t._project}}(this)),e.defineImmutableProperty(this,"section",function(t){return function(){return t._section}}(this)),e.defineImmutableProperty(this,"sectionsBreadcrumb",function(t){return function(){return t._sectionsBreadcrumb}}(this)),e.defineImmutableProperty(this,"activeMembers",function(t){return function(){return t._activeMembers}}(this)),window.localStorage.e2e||this.autoRefresh(),this.watchSignals()}return t.$inject=["$rootScope","tgProjectsService","tgXhrErrorService","tgUserActivityService","$interval"],t.prototype.watchSignals=function(){var t,e,r,n,i;for(t=["admin:project-modules:updated","admin:project-roles:updated","admin:project-default-values:updated","admin:project-values:updated","admin:project-values:move","admin:project-custom-attributes:updated","sprintform:create:success","sprintform:edit:success","sprintform:remove:success","tags:updated"],n=[],e=0,r=t.length;e"),$("head").append(e)),e.attr("href","/"+window._version+"/styles/theme-"+t+".css")}}}),angular.module("taigaCommon").service("tgThemeService",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.groupBy,t=function(){function t(t){return this.timeout=t,window.localStorage.e2e?null:(window.addEventListener("mousemove",this.resetTimer.bind(this),!1),window.addEventListener("mousedown",this.resetTimer.bind(this),!1),window.addEventListener("keypress",this.resetTimer.bind(this),!1),window.addEventListener("mousewheel",this.resetTimer.bind(this),!1),window.addEventListener("touchmove",this.resetTimer.bind(this),!1),this.subscriptionsActive=[],this.subscriptionsInactive=[],this.isActive=!0,void this.startTimer())}return t.$inject=["$timeout"],t.prototype.idleTimeout=3e5,t.prototype.startTimer=function(){return this.timerId=this.timeout(this._fireInactive.bind(this),this.idleTimeout)},t.prototype.resetTimer=function(){return this.isActive||this._fireActive(),this.timeout.cancel(this.timerId),this.startTimer(),this.isActive=!0},t.prototype.onActive=function(t){return this.subscriptionsActive.push(t),this._unSubscriptionsActive.bind(this,t)},t.prototype.onInactive=function(t){return this.subscriptionsInactive.push(t),this._unSubscriptionsInactive.bind(this,t)},t.prototype._fireActive=function(){return this.subscriptionsActive.forEach(function(t){return t()})},t.prototype._fireInactive=function(){return this.isActive=!1,this.subscriptionsInactive.forEach(function(t){return t()})},t.prototype._unSubscriptionsActive=function(t){return this.subscriptionsActive=this.subscriptionsActive.filter(function(e){return e!==t})},t.prototype._unSubscriptionsInactive=function(t){return this.subscriptionsInactive=this.subscriptionsInactive.filter(function(e){return e!==t})},t}(),angular.module("taigaCommon").service("tgUserActivityService",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.normalizeString,t=function(){function t(t,e){this.currentUserService=t,this.projectService=e}return t.$inject=["tgCurrentUserService","tgProjectService"],t.prototype.filterUsers=function(t,r){var n;return n=r.full_name_display.toUpperCase(),n=e(n),t=t.toUpperCase(),t=e(t),_.includes(n,t)},t.prototype.searchUsers=function(t,e){var r;return this.currentUser=this.currentUserService.getUser(),r=_.clone(this.projectService.activeMembers.toJS(),!0),e&&(r=_.reject(r,{id:e.id})),r=_.sortBy(r,function(t){return function(e){var r;return e.id===(null!=(r=t.currentUser)?r.get("id"):void 0)?0:e.id}}(this)),null!=t&&(r=_.filter(r,_.partial(this.filterUsers,t))),r},t}(),angular.module("taigaCommon").service("tgUserListService",t)}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=this.taiga,e=r.bindMethods,t=function(t){function r(t){this.rs=t,e(this)}return n(r,t),r.$inject=["tgResources"],r.prototype.getUserByUserName=function(t){return this.rs.users.getUserByUsername(t)},r.prototype.getContacts=function(t,e){return this.rs.users.getContacts(t,e)},r.prototype.getLiked=function(t,e,r,n){return this.rs.users.getLiked(t,e,r,n)},r.prototype.getVoted=function(t,e,r,n){return this.rs.users.getVoted(t,e,r,n)},r.prototype.getWatched=function(t,e,r,n){return this.rs.users.getWatched(t,e,r,n)},r.prototype.getStats=function(t){return this.rs.users.getStats(t)},r.prototype.attachUserContactsToProjects=function(t,e){return this.getContacts(t).then(function(t){return e=e.map(function(e){var r;return r=t.filter(function(t){var r;return r=t.get("id"),e.get("members").indexOf(r)!==-1}),e=e.set("contacts",r)})})},r}(r.Service),angular.module("taigaCommon").service("tgUserService",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t,e){this.q=t,this.errorHandlingService=e}return e(r,t),r.$inject=["$q","tgErrorHandlingService"],r.prototype.notFound=function(){return this.errorHandlingService.notfound()},r.prototype.permissionDenied=function(){return this.errorHandlingService.permissionDenied()},r.prototype.response=function(t){return t&&(404===t.status?this.notFound():403===t.status&&this.permissionDenied()),this.q.reject(t)},r}(taiga.Service),angular.module("taigaCommon").service("tgXhrErrorService",t)}.call(this),function(){var t;t=function(t,e){var r,n,i;return i=[".jpg",".jpeg",".bmp",".gif",".png"],r=function(t){return t=t.toLowerCase(),_.some(i,function(e){return t.indexOf(e,t-e.length)!==-1})},n=function(n,i){var o,s;return o=r(n.attachment.get("url")),s=o?t.get("user-timeline/user-timeline-attachment/user-timeline-attachment-image.html"):t.get("user-timeline/user-timeline-attachment/user-timeline-attachment.html"),i.html(s),e(i.contents())(n),i.find("img").error(function(){return this.remove()})},{link:n,scope:{attachment:"=tgUserTimelineAttachment"}}},t.$inject=["$tgTemplate","$compile"],angular.module("taigaUserTimeline").directive("tgUserTimelineAttachment",t)}.call(this),function(){var t,e;e=this.taiga.unslugify,t=function(){function t(t,e){this.translate=t,this.sce=e}return t.$inject=["$translate","$sce"],t.prototype._fieldTranslationKey={status:"COMMON.FIELDS.STATUS",subject:"COMMON.FIELDS.SUBJECT",description_diff:"COMMON.FIELDS.DESCRIPTION",points:"COMMON.FIELDS.POINTS",assigned_to:"COMMON.FIELDS.ASSIGNED_TO",assigned_users:"COMMON.FIELDS.ASSIGNED_USERS",severity:"ISSUES.FIELDS.SEVERITY",priority:"ISSUES.FIELDS.PRIORITY",type:"ISSUES.FIELDS.TYPE",is_iocaine:"TASK.FIELDS.IS_IOCAINE",is_blocked:"COMMON.FIELDS.IS_BLOCKED",color:"COMMON.FIELDS.COLOR",due_date:"COMMON.FIELDS.DUE_DATE",due_date_reason:"COMMON.FIELDS.DUE_DATE_REASON",milestone:"COMMON.FIELDS.SPRINT"},t.prototype._params={username:function(t,e){var r,n,i;return i=t.getIn(["data","user"]),i.get("is_profile_visible")?(r=this.translate.instant("COMMON.SEE_USER_PROFILE",{username:i.get("username")}),n="user-profile:username=timeline.getIn(['data', 'user', 'username'])",this._getLink(n,i.get("name"),r)):this._getUsernameSpan(i.get("name"))},field_name:function(t,e){var r;return r=t.getIn(["data","value_diff","key"]),this.translate.instant(this._fieldTranslationKey[r])},project_name:function(t,e){var r;return r="project:project=timeline.getIn(['data', 'project', 'slug'])",this._getLink(r,t.getIn(["data","project","name"]))},new_value:function(t,e){var r,n,i;return _.isArray(t.getIn(["data","value_diff","value"]).toJS())?(i=t.getIn(["data","value_diff","value"]).get(1),null===i&&"assigned_to"===t.getIn(["data","value_diff","key"])&&(i=this.translate.instant("ACTIVITY.VALUES.UNASSIGNED")),null===i&&"assigned_users"===t.getIn(["data","value_diff","key"])?i=this.translate.instant("ACTIVITY.VALUES.UNASSIGNED"):"due_date"===t.getIn(["data","value_diff","key"])&&(i?(n=this.translate.instant("COMMON.PICKERDATE.FORMAT"),i=moment(i,"YYYY-MM-DD").format(n)):i=this.translate.instant("ACTIVITY.VALUES.NOT_SET")),r=i):r=t.getIn(["data","value_diff","value"]).first().get(1),$("").attr("ng-non-bindable",!0).text(r).prop("outerHTML")},sprint_name:function(t,e){var r;return r="project-taskboard:project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['data', 'milestone', 'slug'])",this._getLink(r,t.getIn(["data","milestone","name"]))},us_name:function(t,e){var r,n,i,o;return n=this._getTimelineObj(t,e).get("userstory"),r={obj:"parent_userstory"},o=this._getDetailObjUrl(r),i="#"+n.get("ref")+" "+n.get("subject"),this._getLink(o,i)},related_us_name:function(t,e){var r,n,i;return r=t.getIn(["data","userstory"]),i="project-userstories-detail:project=timeline.getIn(['data', 'userstory', 'project', 'slug']),ref=timeline.getIn(['data', 'userstory', 'ref'])",n="#"+r.get("ref")+" "+r.get("subject"),this._getLink(i,n)},epic_name:function(t,e){var r,n,i;return r=t.getIn(["data","epic"]),i="project-epics-detail:project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['data', 'epic', 'ref'])",n="#"+r.get("ref")+" "+r.get("subject"),this._getLink(i,n)},obj_name:function(t,r){var n,i,o;return n=this._getTimelineObj(t,r),o=this._getDetailObjUrl(r),i="wikipage"===r.obj?e(n.get("slug")):"milestone"===r.obj?n.get("name"):"#"+n.get("ref")+" "+n.get("subject"),this._getLink(o,i)},role_name:function(t,e){return _.escape(t.getIn(["data","value_diff","value"]).keySeq().first())}},t.prototype._translateTitleParams=function(t,e,r){return this._params[t].call(this,e,r)},t.prototype._getTimelineObj=function(t,e){return t.getIn(["data",e.obj])},t.prototype._getDetailObjUrl=function(t){var e;return e={issue:["project-issues-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])"],wikipage:["project-wiki-page",":project=timeline.getIn(['data', 'project', 'slug']),slug=timeline.getIn(['obj', 'slug'])"],task:["project-tasks-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])"],userstory:["project-userstories-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])"],parent_userstory:["project-userstories-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'userstory', 'ref'])"],milestone:["project-taskboard",":project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['obj', 'slug'])"],epic:["project-epics-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])"]},e[t.obj][0]+e[t.obj][1]},t.prototype._getLink=function(t,e,r){var n;return r=r||e,n=$("").attr("ng-non-bindable",!0).text(e),$("").attr("tg-nav",t).append(n).prop("outerHTML")},t.prototype._getUsernameSpan=function(t){var e;return e=e||t,$("").addClass("username").text(t).prop("outerHTML")},t.prototype._getParams=function(t,e,r){var n;return n={},r.translate_params.forEach(function(r){return function(i){return n[i]=r._translateTitleParams(i,t,e)}}(this)),n},t.prototype.getTitle=function(t,e,r){var n,i,o;return n=this._getParams(t,e,r),i={},Object.keys(n).forEach(function(t){return i[t]="{{"+t+"}}"}),o=this.translate.instant(r.key,i),Object.keys(n).forEach(function(t){var e;return e="{{"+t+"}}",o=o.replace(new RegExp(e,"g"),n[t])}),o},t}(),angular.module("taigaUserTimeline").service("tgUserTimelineItemTitle",t)}.call(this),function(){var t,e;e=function(t,e){var r;return r=[{check:function(t,e){return"membership"===e.obj},key:"TIMELINE.NEW_MEMBER",translate_params:["project_name"],member:function(t){return Immutable.Map({user:t.getIn(["data","user"]),role:t.getIn(["data","role"])})}},{check:function(t,e){return"project"===e.obj&&"create"===e.type},key:"TIMELINE.NEW_PROJECT",translate_params:["username","project_name"],description:function(t){return t.getIn(["data","project","description"])}},{check:function(t,e){return"change"===e.type&&t.hasIn(["data","value_diff"])&&"attachments"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.UPLOAD_ATTACHMENT",translate_params:["username","obj_name"]},{check:function(t,e){return"userstory"===e.obj&&"create"===e.type},key:"TIMELINE.US_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"issue"===e.obj&&"create"===e.type},key:"TIMELINE.ISSUE_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"wikipage"===e.obj&&"create"===e.type},key:"TIMELINE.WIKI_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"task"===e.obj&&"create"===e.type&&!t.getIn(["data","task","userstory"])},key:"TIMELINE.TASK_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"task"===e.obj&&"create"===e.type&&t.getIn(["data","task","userstory"])},key:"TIMELINE.TASK_CREATED_WITH_US",translate_params:["username","project_name","obj_name","us_name"]},{check:function(t,e){return"milestone"===e.obj&&"create"===e.type},key:"TIMELINE.MILESTONE_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"epic"===e.obj&&"create"===e.type},key:"TIMELINE.EPIC_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"relateduserstory"===e.obj&&"create"===e.type},key:"TIMELINE.EPIC_RELATED_USERSTORY_CREATED",translate_params:["username","project_name","related_us_name","epic_name"]},{check:function(t,e){return t.getIn(["data","comment"])&&"userstory"===e.obj},key:"TIMELINE.NEW_COMMENT_US",translate_params:["username","obj_name"],description:function(t){var e;return e=t.getIn(["data","comment_html"]),$($.parseHTML(e)).text()}},{check:function(t,e){return t.getIn(["data","comment"])&&"issue"===e.obj},key:"TIMELINE.NEW_COMMENT_ISSUE",translate_params:["username","obj_name"],description:function(t){var e;return e=t.getIn(["data","comment_html"]),$($.parseHTML(e)).text()}},{check:function(t,e){return t.getIn(["data","comment"])&&"task"===e.obj},key:"TIMELINE.NEW_COMMENT_TASK",translate_params:["username","obj_name"],description:function(t){var e;return e=t.getIn(["data","comment_html"]),$($.parseHTML(e)).text()}},{check:function(t,e){return t.getIn(["data","comment"])&&"epic"===e.obj},key:"TIMELINE.NEW_COMMENT_EPIC",translate_params:["username","obj_name"],description:function(t){var e;return e=t.getIn(["data","comment_html"]),$($.parseHTML(e)).text()}},{check:function(t,e){return t.hasIn(["data","value_diff"])&&"moveInBacklog"===t.getIn(["data","value_diff","key"])&&t.hasIn(["data","value_diff","value","backlog_order"])&&"change"===e.type},key:"TIMELINE.US_MOVED",translate_params:["username","obj_name"]},{check:function(t,e){return!(!t.hasIn(["data","value_diff"])||"moveInBacklog"!==t.getIn(["data","value_diff","key"])||"change"!==e.type||"userstory"!==e.obj)&&null===t.getIn(["data","value_diff","value","milestone"]).get(1)},key:"TIMELINE.US_REMOVED_FROM_MILESTONE",translate_params:["username","obj_name"]},{check:function(t,e){return t.hasIn(["data","value_diff"])&&"moveInBacklog"===t.getIn(["data","value_diff","key"])&&"change"===e.type&&"userstory"===e.obj},key:"TIMELINE.US_ADDED_MILESTONE",translate_params:["username","obj_name","sprint_name"]},{check:function(t,e){return!(!t.hasIn(["data","value_diff"])||"blocked"!==t.getIn(["data","value_diff","key"])||"change"!==e.type)&&t.getIn(["data","value_diff","value","is_blocked"]).get(1)===!0},key:"TIMELINE.BLOCKED",translate_params:["username","obj_name"],description:function(t){var e;return!!t.hasIn(["data","value_diff","value","blocked_note_html"])&&(e=t.getIn(["data","value_diff","value","blocked_note_html"]).get(1),$($.parseHTML(e)).text())}},{check:function(t,e){return!(!t.hasIn(["data","value_diff"])||"blocked"!==t.getIn(["data","value_diff","key"])||"change"!==e.type)&&t.getIn(["data","value_diff","value","is_blocked"]).get(1)===!1},key:"TIMELINE.UNBLOCKED",translate_params:["username","obj_name"]},{check:function(t,e){return"milestone"===e.obj&&"change"===e.type},key:"TIMELINE.MILESTONE_UPDATED",translate_params:["username","obj_name"]},{check:function(t,e){return"wikipage"===e.obj&&"change"===e.type},key:"TIMELINE.WIKI_UPDATED",translate_params:["username","obj_name"]},{check:function(t,e){return"userstory"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"points"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.US_UPDATED_POINTS",translate_params:["username","field_name","obj_name","new_value","role_name"]},{check:function(t,e){return"userstory"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.US_UPDATED",translate_params:["username","field_name","obj_name"]},{check:function(t,e){return"userstory"===e.obj&&"change"===e.type},key:"TIMELINE.US_UPDATED_WITH_NEW_VALUE",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"issue"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.ISSUE_UPDATED",translate_params:["username","field_name","obj_name"]},{check:function(t,e){return"issue"===e.obj&&"change"===e.type},key:"TIMELINE.ISSUE_UPDATED_WITH_NEW_VALUE",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"task"===e.obj&&"change"===e.type&&!t.getIn(["data","task","userstory"])&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"]); -},key:"TIMELINE.TASK_UPDATED",translate_params:["username","field_name","obj_name"]},{check:function(t,e){return"task"===e.obj&&"change"===e.type&&t.getIn(["data","task","userstory"])&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.TASK_UPDATED_WITH_US",translate_params:["username","field_name","obj_name","us_name"]},{check:function(t,e){return"task"===e.obj&&"change"===e.type&&!t.getIn(["data","task","userstory"])},key:"TIMELINE.TASK_UPDATED_WITH_NEW_VALUE",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"task"===e.obj&&"change"===e.type&&t.getIn(["data","task","userstory"])},key:"TIMELINE.TASK_UPDATED_WITH_US_NEW_VALUE",translate_params:["username","field_name","obj_name","us_name","new_value"]},{check:function(t,e){return"epic"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.EPIC_UPDATED",translate_params:["username","field_name","obj_name"]},{check:function(t,e){return"epic"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"color"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.EPIC_UPDATED_WITH_NEW_COLOR",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"epic"===e.obj&&"change"===e.type},key:"TIMELINE.EPIC_UPDATED_WITH_NEW_VALUE",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"user"===e.obj&&"create"===e.type},key:"TIMELINE.NEW_USER",translate_params:["username"]}],_.find(r,function(r){return r.check(t,e)})},t=function(){function t(){}return t.prototype.getType=function(t,r){return e(t,r)},t}(),angular.module("taigaUserTimeline").service("tgUserTimelineItemType",t)}.call(this),function(){var t;t=function(){return{templateUrl:"user-timeline/user-timeline-item/user-timeline-item.html",scope:{timeline:"=tgUserTimelineItem"}}},angular.module("taigaUserTimeline").directive("tgUserTimelineItem",t)}.call(this),function(){var t;t=function(){var t;return t={},t.generate=function(t){var e,r,n,i;return i=1,r=Immutable.List(),t.minItems=t.minItems||20,n=function(){return r=Immutable.List(),e()},e=function(){return t.fetch(i).then(function(n){var o,s;return i++,o=n.get("data"),t.filter&&(o=t.filter(o)),t.map&&(o=o.map(t.map)),r=r.concat(o),r.size.\n *\n * File: app.coffee\n */\n\n(function() {\n var configure, i18nInit, init, module, modules, pluginsModules, pluginsWithModule, taiga;\n\n this.taiga = taiga = {};\n\n taiga.emojis = window.emojis;\n\n this.taigaContribPlugins = this.taigaContribPlugins || window.taigaContribPlugins || [];\n\n taiga.generateHash = function(components) {\n if (components == null) {\n components = [];\n }\n components = _.map(components, function(x) {\n return JSON.stringify(x);\n });\n return hex_sha1(components.join(\":\"));\n };\n\n taiga.generateUniqueSessionIdentifier = function() {\n var date, randomNumber;\n date = (new Date()).getTime();\n randomNumber = Math.floor(Math.random() * 0x9000000);\n return taiga.generateHash([date, randomNumber]);\n };\n\n taiga.sessionId = taiga.generateUniqueSessionIdentifier();\n\n configure = function($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, $compileProvider, $translateProvider, $translatePartialLoaderProvider, $animateProvider) {\n var authHttpIntercept, blockingIntercept, decorators, defaultHeaders, loaderIntercept, originalWhen, preferedLangCode, userInfo, versionCheckHttpIntercept;\n $animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/);\n originalWhen = $routeProvider.when;\n $routeProvider.when = function(path, route) {\n route.resolve || (route.resolve = {});\n angular.extend(route.resolve, {\n languageLoad: [\n \"$q\", \"$translate\", function($q, $translate) {\n var deferred;\n deferred = $q.defer();\n $translate().then(function() {\n return deferred.resolve();\n });\n return deferred.promise;\n }\n ],\n projectLoaded: [\n \"$q\", \"tgProjectService\", \"$route\", function($q, projectService, $route) {\n var deferred, ref;\n deferred = $q.defer();\n projectService.setSection((ref = $route.current.$$route) != null ? ref.section : void 0);\n if ($route.current.params.pslug) {\n projectService.setProjectBySlug($route.current.params.pslug).then(deferred.resolve);\n } else {\n projectService.cleanProject();\n deferred.resolve();\n }\n return deferred.promise;\n }\n ]\n });\n return originalWhen.call($routeProvider, path, route);\n };\n $routeProvider.when(\"/\", {\n templateUrl: \"home/home.html\",\n controller: \"Home\",\n controllerAs: \"vm\",\n loader: true,\n title: \"HOME.PAGE_TITLE\",\n loader: true,\n description: \"HOME.PAGE_DESCRIPTION\",\n joyride: \"dashboard\"\n });\n $routeProvider.when(\"/discover\", {\n templateUrl: \"discover/discover-home/discover-home.html\",\n controller: \"DiscoverHome\",\n controllerAs: \"vm\",\n title: \"PROJECT.NAVIGATION.DISCOVER\",\n loader: true\n });\n $routeProvider.when(\"/discover/search\", {\n templateUrl: \"discover/discover-search/discover-search.html\",\n title: \"PROJECT.NAVIGATION.DISCOVER\",\n loader: true,\n controller: \"DiscoverSearch\",\n controllerAs: \"vm\",\n reloadOnSearch: false\n });\n $routeProvider.when(\"/projects/\", {\n templateUrl: \"projects/listing/projects-listing.html\",\n access: {\n requiresLogin: true\n },\n title: \"PROJECTS.PAGE_TITLE\",\n description: \"PROJECTS.PAGE_DESCRIPTION\",\n loader: true,\n controller: \"ProjectsListing\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/project/new\", {\n title: \"PROJECT.CREATE.TITLE\",\n templateUrl: \"projects/create/create-project.html\",\n loader: true,\n controller: \"CreateProjectCtrl\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/project/new/scrum\", {\n title: \"PROJECT.CREATE.TITLE\",\n template: \"\",\n loader: true\n });\n $routeProvider.when(\"/project/new/kanban\", {\n title: \"PROJECT.CREATE.TITLE\",\n template: \"\",\n loader: true\n });\n $routeProvider.when(\"/project/new/duplicate\", {\n title: \"PROJECT.CREATE.TITLE\",\n template: \"\",\n loader: true\n });\n $routeProvider.when(\"/project/new/import/:platform?\", {\n title: \"PROJECT.CREATE.TITLE\",\n template: \"\",\n loader: true\n });\n $routeProvider.when(\"/project/:pslug/\", {\n template: \"\",\n loader: true,\n controller: \"ProjectRouter\"\n });\n $routeProvider.when(\"/project/:pslug/timeline\", {\n templateUrl: \"projects/project/project.html\",\n loader: true,\n controller: \"Project\",\n controllerAs: \"vm\",\n section: \"project-timeline\"\n });\n $routeProvider.when(\"/project/:pslug/t/:ref\", {\n loader: true,\n controller: \"DetailController\",\n template: \"\"\n });\n $routeProvider.when(\"/project/:pslug/search\", {\n templateUrl: \"search/search.html\",\n reloadOnSearch: false,\n section: \"search\",\n loader: true\n });\n $routeProvider.when(\"/project/:pslug/epics\", {\n section: \"epics\",\n templateUrl: \"epics/dashboard/epics-dashboard.html\",\n loader: true,\n controller: \"EpicsDashboardCtrl\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/project/:pslug/epic/:epicref\", {\n templateUrl: \"epic/epic-detail.html\",\n loader: true,\n section: \"epics\"\n });\n $routeProvider.when(\"/project/:pslug/backlog\", {\n templateUrl: \"backlog/backlog.html\",\n loader: true,\n section: \"backlog\",\n joyride: \"backlog\"\n });\n $routeProvider.when(\"/project/:pslug/kanban\", {\n templateUrl: \"kanban/kanban.html\",\n loader: true,\n section: \"kanban\",\n joyride: \"kanban\"\n });\n $routeProvider.when(\"/project/:pslug/taskboard/:sslug\", {\n templateUrl: \"taskboard/taskboard.html\",\n loader: true,\n section: \"backlog\"\n });\n $routeProvider.when(\"/project/:pslug/us/:usref\", {\n templateUrl: \"us/us-detail.html\",\n loader: true,\n section: \"backlog-kanban\"\n });\n $routeProvider.when(\"/project/:pslug/task/:taskref\", {\n templateUrl: \"task/task-detail.html\",\n loader: true,\n section: \"backlog-kanban\"\n });\n $routeProvider.when(\"/project/:pslug/wiki\", {\n redirectTo: function(params) {\n return \"/project/\" + params.pslug + \"/wiki/home\";\n }\n });\n $routeProvider.when(\"/project/:pslug/wiki-list\", {\n templateUrl: \"wiki/wiki-list.html\",\n loader: true,\n section: \"wiki\"\n });\n $routeProvider.when(\"/project/:pslug/wiki/:slug\", {\n templateUrl: \"wiki/wiki.html\",\n loader: true,\n section: \"wiki\"\n });\n $routeProvider.when(\"/project/:pslug/team\", {\n templateUrl: \"team/team.html\",\n loader: true,\n section: \"team\"\n });\n $routeProvider.when(\"/project/:pslug/issues\", {\n templateUrl: \"issue/issues.html\",\n loader: true,\n section: \"issues\"\n });\n $routeProvider.when(\"/project/:pslug/issue/:issueref\", {\n templateUrl: \"issue/issues-detail.html\",\n loader: true,\n section: \"issues\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/details\", {\n templateUrl: \"admin/admin-project-profile.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/default-values\", {\n templateUrl: \"admin/admin-project-default-values.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/modules\", {\n templateUrl: \"admin/admin-project-modules.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/export\", {\n templateUrl: \"admin/admin-project-export.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/reports\", {\n templateUrl: \"admin/admin-project-reports.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/status\", {\n templateUrl: \"admin/admin-project-values-status.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/points\", {\n templateUrl: \"admin/admin-project-values-points.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/priorities\", {\n templateUrl: \"admin/admin-project-values-priorities.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/severities\", {\n templateUrl: \"admin/admin-project-values-severities.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/types\", {\n templateUrl: \"admin/admin-project-values-types.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/custom-fields\", {\n templateUrl: \"admin/admin-project-values-custom-fields.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/tags\", {\n templateUrl: \"admin/admin-project-values-tags.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/due-dates\", {\n templateUrl: \"admin/admin-project-values-due-dates.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/memberships\", {\n templateUrl: \"admin/admin-memberships.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/roles\", {\n templateUrl: \"admin/admin-roles.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/webhooks\", {\n templateUrl: \"admin/admin-third-parties-webhooks.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/github\", {\n templateUrl: \"admin/admin-third-parties-github.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/gitlab\", {\n templateUrl: \"admin/admin-third-parties-gitlab.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/bitbucket\", {\n templateUrl: \"admin/admin-third-parties-bitbucket.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/gogs\", {\n templateUrl: \"admin/admin-third-parties-gogs.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/contrib/:plugin\", {\n templateUrl: \"contrib/main.html\"\n });\n $routeProvider.when(\"/project/:pslug/transfer/:token\", {\n templateUrl: \"projects/transfer/transfer-page.html\",\n loader: true,\n controller: \"Project\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/user-settings/user-profile\", {\n templateUrl: \"user/user-profile.html\"\n });\n $routeProvider.when(\"/user-settings/user-change-password\", {\n templateUrl: \"user/user-change-password.html\"\n });\n $routeProvider.when(\"/user-settings/user-project-settings\", {\n templateUrl: \"user/user-project-settings.html\"\n });\n $routeProvider.when(\"/user-settings/mail-notifications\", {\n templateUrl: \"user/mail-notifications.html\"\n });\n $routeProvider.when(\"/user-settings/live-notifications\", {\n templateUrl: \"user/live-notifications.html\"\n });\n $routeProvider.when(\"/user-settings/web-notifications\", {\n templateUrl: \"user/web-notifications.html\"\n });\n $routeProvider.when(\"/change-email/:email_token\", {\n templateUrl: \"user/change-email.html\"\n });\n $routeProvider.when(\"/cancel-account/:cancel_token\", {\n templateUrl: \"user/cancel-account.html\"\n });\n $routeProvider.when(\"/user-settings/contrib/:plugin\", {\n templateUrl: \"contrib/user-settings.html\"\n });\n $routeProvider.when(\"/profile\", {\n templateUrl: \"profile/profile.html\",\n loader: true,\n access: {\n requiresLogin: true\n },\n controller: \"Profile\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/notifications\", {\n templateUrl: \"notifications/notifications.html\",\n loader: true,\n access: {\n requiresLogin: true\n },\n controller: \"Notifications\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/profile/:slug\", {\n templateUrl: \"profile/profile.html\",\n loader: true,\n controller: \"Profile\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/login\", {\n templateUrl: \"auth/login.html\",\n title: \"LOGIN.PAGE_TITLE\",\n description: \"LOGIN.PAGE_DESCRIPTION\",\n disableHeader: true,\n controller: \"LoginPage\"\n });\n $routeProvider.when(\"/register\", {\n templateUrl: \"auth/register.html\",\n title: \"REGISTER.PAGE_TITLE\",\n description: \"REGISTER.PAGE_DESCRIPTION\",\n disableHeader: true\n });\n $routeProvider.when(\"/forgot-password\", {\n templateUrl: \"auth/forgot-password.html\",\n title: \"FORGOT_PASSWORD.PAGE_TITLE\",\n description: \"FORGOT_PASSWORD.PAGE_DESCRIPTION\",\n disableHeader: true\n });\n $routeProvider.when(\"/change-password/:token\", {\n templateUrl: \"auth/change-password-from-recovery.html\",\n title: \"CHANGE_PASSWORD.PAGE_TITLE\",\n description: \"CHANGE_PASSWORD.PAGE_TITLE\",\n disableHeader: true\n });\n $routeProvider.when(\"/invitation/:token\", {\n templateUrl: \"auth/invitation.html\",\n title: \"INVITATION.PAGE_TITLE\",\n description: \"INVITATION.PAGE_DESCRIPTION\",\n disableHeader: true\n });\n $routeProvider.when(\"/external-apps\", {\n templateUrl: \"external-apps/external-app.html\",\n title: \"EXTERNAL_APP.PAGE_TITLE\",\n description: \"EXTERNAL_APP.PAGE_DESCRIPTION\",\n controller: \"ExternalApp\",\n controllerAs: \"vm\",\n disableHeader: true,\n mobileViewport: true\n });\n $routeProvider.when(\"/blocked-project/:pslug/\", {\n templateUrl: \"projects/project/blocked-project.html\",\n loader: true\n });\n $routeProvider.when(\"/error\", {\n templateUrl: \"error/error.html\"\n });\n $routeProvider.when(\"/not-found\", {\n templateUrl: \"error/not-found.html\"\n });\n $routeProvider.when(\"/permission-denied\", {\n templateUrl: \"error/permission-denied.html\"\n });\n $routeProvider.otherwise({\n templateUrl: \"error/not-found.html\"\n });\n $locationProvider.html5Mode({\n enabled: true,\n requireBase: false\n });\n defaultHeaders = {\n \"Content-Type\": \"application/json\",\n \"Accept-Language\": window.taigaConfig.defaultLanguage || \"en\",\n \"X-Session-Id\": taiga.sessionId\n };\n $httpProvider.defaults.headers[\"delete\"] = defaultHeaders;\n $httpProvider.defaults.headers.patch = defaultHeaders;\n $httpProvider.defaults.headers.post = defaultHeaders;\n $httpProvider.defaults.headers.put = defaultHeaders;\n $httpProvider.defaults.headers.get = {\n \"X-Session-Id\": taiga.sessionId\n };\n $httpProvider.useApplyAsync(true);\n $tgEventsProvider.setSessionId(taiga.sessionId);\n authHttpIntercept = function($q, $location, $navUrls, $lightboxService, errorHandlingService) {\n var httpResponseError;\n httpResponseError = function(response) {\n var nextUrl, search;\n if (response.status === 0 || (response.status === -1 && !response.config.cancelable)) {\n $lightboxService.closeAll();\n errorHandlingService.error();\n } else if (response.status === 401 && $location.url().indexOf('/login') === -1) {\n nextUrl = $location.url();\n search = $location.search();\n if (search.force_next) {\n $location.url($navUrls.resolve(\"login\")).search(\"force_next\", search.force_next);\n } else {\n $location.url($navUrls.resolve(\"login\")).search({\n \"unauthorized\": true,\n \"next\": nextUrl\n });\n }\n }\n return $q.reject(response);\n };\n return {\n responseError: httpResponseError\n };\n };\n $provide.factory(\"authHttpIntercept\", [\"$q\", \"$location\", \"$tgNavUrls\", \"lightboxService\", \"tgErrorHandlingService\", authHttpIntercept]);\n $httpProvider.interceptors.push(\"authHttpIntercept\");\n loaderIntercept = function($q, loaderService) {\n return {\n request: function(config) {\n loaderService.logRequest();\n return config;\n },\n requestError: function(rejection) {\n loaderService.logResponse();\n return $q.reject(rejection);\n },\n responseError: function(rejection) {\n loaderService.logResponse();\n return $q.reject(rejection);\n },\n response: function(response) {\n loaderService.logResponse();\n return response;\n }\n };\n };\n $provide.factory(\"loaderIntercept\", [\"$q\", \"tgLoader\", loaderIntercept]);\n $httpProvider.interceptors.push(\"loaderIntercept\");\n versionCheckHttpIntercept = function($q) {\n var httpResponseError;\n httpResponseError = function(response) {\n var $injector;\n if (response.status === 400 && response.data.version) {\n $injector = angular.element(\"body\").injector();\n $injector.invoke([\n \"$tgConfirm\", \"$translate\", (function(_this) {\n return function($confirm, $translate) {\n var versionErrorMsg;\n versionErrorMsg = $translate.instant(\"ERROR.VERSION_ERROR\");\n return $confirm.notify(\"error\", versionErrorMsg, null, 10000);\n };\n })(this)\n ]);\n }\n return $q.reject(response);\n };\n return {\n responseError: httpResponseError\n };\n };\n $provide.factory(\"versionCheckHttpIntercept\", [\"$q\", versionCheckHttpIntercept]);\n $httpProvider.interceptors.push(\"versionCheckHttpIntercept\");\n blockingIntercept = function($q, errorHandlingService) {\n var redirectToBlockedPage, responseError, responseOk;\n redirectToBlockedPage = function() {\n return errorHandlingService.block();\n };\n responseOk = function(response) {\n if (response.data.blocked_code) {\n redirectToBlockedPage();\n }\n return response;\n };\n responseError = function(response) {\n if (response.status === 451) {\n redirectToBlockedPage();\n }\n return $q.reject(response);\n };\n return {\n response: responseOk,\n responseError: responseError\n };\n };\n $provide.factory(\"blockingIntercept\", [\"$q\", \"tgErrorHandlingService\", blockingIntercept]);\n $httpProvider.interceptors.push(\"blockingIntercept\");\n $compileProvider.debugInfoEnabled(window.taigaConfig.debugInfo || false);\n if (localStorage.userInfo) {\n userInfo = JSON.parse(localStorage.userInfo);\n }\n preferedLangCode = (userInfo != null ? userInfo.lang : void 0) || window.taigaConfig.defaultLanguage || \"en\";\n $translatePartialLoaderProvider.addPart('taiga');\n $translateProvider.useLoader('$translatePartialLoader', {\n urlTemplate: '/' + window._version + '/locales/{part}/locale-{lang}.json'\n }).useSanitizeValueStrategy('escapeParameters').addInterpolation('$translateMessageFormatInterpolation').preferredLanguage(preferedLangCode);\n $translateProvider.fallbackLanguage(preferedLangCode);\n decorators = window.getDecorators();\n return _.each(decorators, function(decorator) {\n return $provide.decorator(decorator.provider, decorator.decorator);\n });\n };\n\n i18nInit = function(lang, $translate) {\n var messages;\n moment.locale(lang);\n if (lang !== 'en') {\n ljs.load((\"/\" + window._version + \"/locales/moment-locales/\") + lang + \".js\");\n }\n messages = {\n defaultMessage: $translate.instant(\"COMMON.FORM_ERRORS.DEFAULT_MESSAGE\"),\n type: {\n email: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_EMAIL\"),\n url: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_URL\"),\n urlstrict: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_URLSTRICT\"),\n number: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_NUMBER\"),\n digits: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_DIGITS\"),\n dateIso: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_DATEISO\"),\n alphanum: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_ALPHANUM\"),\n phone: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_PHONE\")\n },\n notnull: $translate.instant(\"COMMON.FORM_ERRORS.NOTNULL\"),\n notblank: $translate.instant(\"COMMON.FORM_ERRORS.NOT_BLANK\"),\n required: $translate.instant(\"COMMON.FORM_ERRORS.REQUIRED\"),\n regexp: $translate.instant(\"COMMON.FORM_ERRORS.REGEXP\"),\n min: $translate.instant(\"COMMON.FORM_ERRORS.MIN\"),\n max: $translate.instant(\"COMMON.FORM_ERRORS.MAX\"),\n range: $translate.instant(\"COMMON.FORM_ERRORS.RANGE\"),\n minlength: $translate.instant(\"COMMON.FORM_ERRORS.MIN_LENGTH\"),\n maxlength: $translate.instant(\"COMMON.FORM_ERRORS.MAX_LENGTH\"),\n rangelength: $translate.instant(\"COMMON.FORM_ERRORS.RANGE_LENGTH\"),\n mincheck: $translate.instant(\"COMMON.FORM_ERRORS.MIN_CHECK\"),\n maxcheck: $translate.instant(\"COMMON.FORM_ERRORS.MAX_CHECK\"),\n rangecheck: $translate.instant(\"COMMON.FORM_ERRORS.RANGE_CHECK\"),\n equalto: $translate.instant(\"COMMON.FORM_ERRORS.EQUAL_TO\"),\n linewidth: $translate.instant(\"COMMON.FORM_ERRORS.LINEWIDTH\"),\n pikaday: $translate.instant(\"COMMON.FORM_ERRORS.PIKADAY\")\n };\n return checksley.updateMessages('default', messages);\n };\n\n init = function($log, $rootscope, $auth, $events, $analytics, $translate, $location, $navUrls, appMetaService, loaderService, navigationBarService, errorHandlingService, lightboxService, $tgConfig, projectService) {\n var un, user, validators;\n $log.debug(\"Initialize application\");\n $rootscope.$on('$translatePartialLoaderStructureChanged', function() {\n return $translate.refresh();\n });\n validators = {\n linewidth: function(val, width) {\n var lines, valid;\n lines = taiga.nl2br(val).split(\"
    \");\n valid = _.every(lines, function(line) {\n return line.length < width;\n });\n return valid;\n },\n pikaday: function(val) {\n var prettyDate;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n return moment(val, prettyDate).isValid();\n },\n url: function(val) {\n var re_weburl;\n re_weburl = new RegExp(\"^\" + \"(?:(?:https?|ftp)://)\" + \"(?:\\\\S+(?::\\\\S*)?@)?\" + \"(?:\" + \"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" + \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" + \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\" + \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" + \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" + \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" + \"|\" + \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\" + \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\" + \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\" + \"\\\\.?\" + \")\" + \"(?::\\\\d{2,5})?\" + \"(?:[/?#]\\\\S*)?\" + \"$\", \"i\");\n return re_weburl.test(val);\n }\n };\n checksley.updateValidators(validators);\n $rootscope.contribPlugins = this.taigaContribPlugins;\n $rootscope.adminPlugins = _.filter(this.taigaContribPlugins, {\n \"type\": \"admin\"\n });\n $rootscope.userSettingsPlugins = _.filter(this.taigaContribPlugins, {\n \"type\": \"userSettings\"\n });\n $rootscope.$on(\"$translateChangeEnd\", function(e, ctx) {\n var lang, rtlLanguages;\n lang = ctx.language;\n i18nInit(lang, $translate);\n rtlLanguages = $tgConfig.get(\"rtlLanguages\", []);\n return $rootscope.isRTL = rtlLanguages.indexOf(lang) > -1;\n });\n Promise.setScheduler(function(cb) {\n return $rootscope.$evalAsync(cb);\n });\n $events.setupConnection();\n if ($auth.isAuthenticated()) {\n user = $auth.getUser();\n $auth.showTerms();\n }\n $analytics.initialize();\n $rootscope.$on('$locationChangeStart', function(event) {\n var ref;\n errorHandlingService.init();\n if ((ref = projectService.project) != null ? ref.get('blocked_code') : void 0) {\n projectService.setProject(null);\n errorHandlingService.block();\n }\n if (lightboxService.getLightboxOpen().length) {\n event.preventDefault();\n return lightboxService.closeAll();\n }\n });\n un = $rootscope.$on('$routeChangeStart', function(event, next) {\n if (next.loader) {\n loaderService.start(true);\n }\n return un();\n });\n return $rootscope.$on('$routeChangeSuccess', function(event, next) {\n var description, title;\n if (next.loader) {\n loaderService.start(true);\n }\n if (next.access && next.access.requiresLogin) {\n if (!$auth.isAuthenticated()) {\n $location.path($navUrls.resolve(\"login\"));\n }\n }\n if (next.title || next.description) {\n title = $translate.instant(next.title || \"\");\n description = $translate.instant(next.description || \"\");\n appMetaService.setAll(title, description);\n }\n if (next.mobileViewport) {\n appMetaService.addMobileViewport();\n } else {\n appMetaService.removeMobileViewport();\n }\n if (next.disableHeader) {\n return navigationBarService.disableHeader();\n } else {\n return navigationBarService.enableHeader();\n }\n });\n };\n\n angular.module('infinite-scroll').value('THROTTLE_MILLISECONDS', 500);\n\n pluginsWithModule = _.filter(this.taigaContribPlugins, function(plugin) {\n return plugin.module;\n });\n\n pluginsModules = _.map(pluginsWithModule, function(plugin) {\n return plugin.module;\n });\n\n modules = [\"taigaBase\", \"taigaCommon\", \"taigaResources\", \"taigaResources2\", \"taigaAuth\", \"taigaEvents\", \"taigaHome\", \"taigaNavigationBar\", \"taigaProjects\", \"taigaRelatedTasks\", \"taigaBacklog\", \"taigaTaskboard\", \"taigaKanban\", \"taigaIssues\", \"taigaUserStories\", \"taigaTasks\", \"taigaTeam\", \"taigaWiki\", \"taigaSearch\", \"taigaAdmin\", \"taigaProject\", \"taigaUserSettings\", \"taigaFeedback\", \"taigaPlugins\", \"taigaIntegrations\", \"taigaComponents\", \"taigaProfile\", \"taigaHome\", \"taigaUserTimeline\", \"taigaExternalApps\", \"taigaDiscover\", \"taigaHistory\", \"taigaNotifications\", \"taigaWikiHistory\", \"taigaEpics\", \"taigaUtils\", \"templates\", \"ngSanitize\", \"ngRoute\", \"ngAnimate\", \"ngAria\", \"pascalprecht.translate\", \"infinite-scroll\", \"tgRepeat\"].concat(pluginsModules);\n\n module = angular.module(\"taiga\", modules);\n\n module.config([\"$routeProvider\", \"$locationProvider\", \"$httpProvider\", \"$provide\", \"$tgEventsProvider\", \"$compileProvider\", \"$translateProvider\", \"$translatePartialLoaderProvider\", \"$animateProvider\", configure]);\n\n module.run([\"$log\", \"$rootScope\", \"$tgAuth\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"tgLoader\", \"tgNavigationBarService\", \"tgErrorHandlingService\", \"lightboxService\", \"$tgConfig\", \"tgProjectService\", init]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: classes.coffee\n */\n\n(function() {\n var TaigaBase, TaigaController, TaigaService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n TaigaBase = (function() {\n function TaigaBase() {}\n\n return TaigaBase;\n\n })();\n\n TaigaService = (function(superClass) {\n extend(TaigaService, superClass);\n\n function TaigaService() {\n return TaigaService.__super__.constructor.apply(this, arguments);\n }\n\n return TaigaService;\n\n })(TaigaBase);\n\n TaigaController = (function(superClass) {\n extend(TaigaController, superClass);\n\n function TaigaController() {\n this.onInitialDataError = bind(this.onInitialDataError, this);\n return TaigaController.__super__.constructor.apply(this, arguments);\n }\n\n TaigaController.prototype.onInitialDataError = function(xhr) {\n if (xhr) {\n if (xhr.status === 404) {\n this.errorHandlingService.notfound();\n } else if (xhr.status === 403) {\n this.errorHandlingService.permissionDenied();\n }\n }\n return this.q.reject(xhr);\n };\n\n return TaigaController;\n\n })(TaigaBase);\n\n this.taiga.Base = TaigaBase;\n\n this.taiga.Service = TaigaService;\n\n this.taiga.Controller = TaigaController;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: utils.coffee\n */\n\n(function() {\n var DEFAULT_COLOR_LIST, addClass, bindMethods, bindOnce, cancelTimeout, debounce, debounceLeading, defineImmutableProperty, getDefaulColorList, getMatches, getRandomDefaultColor, groupBy, isEmail, isImage, isPdf, joinStr, mixOf, nl2br, normalizeString, patch, randomInt, replaceTags, scopeDefer, sizeFormat, slugify, startswith, stripTags, taiga, timeout, toString, toggleText, trim, truncate, unslugify,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n slice = [].slice,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n addClass = function(el, className) {\n if (el.classList) {\n return el.classList.add(className);\n } else {\n return el.className += ' ' + className;\n }\n };\n\n nl2br = (function(_this) {\n return function(str) {\n var breakTag;\n breakTag = '
    ';\n return (str + '').replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1' + breakTag + '$2');\n };\n })(this);\n\n bindMethods = (function(_this) {\n return function(object) {\n var dependencies, methods;\n dependencies = _.keys(object);\n methods = [];\n _.forIn(object, function(value, key) {\n if (indexOf.call(dependencies, key) < 0 && _.isFunction(value)) {\n return methods.push(key);\n }\n });\n return _.bindAll(object, methods);\n };\n })(this);\n\n bindOnce = (function(_this) {\n return function(scope, attr, continuation) {\n var delBind, val;\n val = scope.$eval(attr);\n if (val !== void 0) {\n return continuation(val);\n }\n delBind = null;\n return delBind = scope.$watch(attr, function(val) {\n if (val === void 0) {\n return;\n }\n continuation(val);\n if (delBind) {\n return delBind();\n }\n });\n };\n })(this);\n\n mixOf = function() {\n var Mixed, base, i, method, mixin, mixins, name, ref;\n base = arguments[0], mixins = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n Mixed = (function(superClass) {\n extend(Mixed, superClass);\n\n function Mixed() {\n return Mixed.__super__.constructor.apply(this, arguments);\n }\n\n return Mixed;\n\n })(base);\n for (i = mixins.length - 1; i >= 0; i += -1) {\n mixin = mixins[i];\n ref = mixin.prototype;\n for (name in ref) {\n method = ref[name];\n Mixed.prototype[name] = method;\n }\n }\n return Mixed;\n };\n\n trim = function(data, char) {\n return _.trim(data, char);\n };\n\n slugify = function(data) {\n return data.toString().toLowerCase().trim().replace(/\\s+/g, '-').replace(/&/g, '-and-').replace(/[^\\w\\-]+/g, '').replace(/\\-\\-+/g, '-');\n };\n\n unslugify = function(data) {\n if (data) {\n return _.capitalize(data.replace(/-/g, ' '));\n }\n return data;\n };\n\n toggleText = function(element, texts) {\n var nextTextPosition, text;\n nextTextPosition = element.data('nextTextPosition');\n if ((nextTextPosition == null) || nextTextPosition >= texts.length) {\n nextTextPosition = 0;\n }\n text = texts[nextTextPosition];\n element.data('nextTextPosition', nextTextPosition + 1);\n return element.text(text);\n };\n\n groupBy = function(coll, pred) {\n var i, item, len, result;\n result = {};\n for (i = 0, len = coll.length; i < len; i++) {\n item = coll[i];\n result[pred(item)] = item;\n }\n return result;\n };\n\n timeout = function(wait, continuation) {\n return window.setTimeout(continuation, wait);\n };\n\n cancelTimeout = function(timeoutVar) {\n return window.clearTimeout(timeoutVar);\n };\n\n scopeDefer = function(scope, func) {\n return _.defer((function(_this) {\n return function() {\n return scope.$apply(func);\n };\n })(this));\n };\n\n toString = function(value) {\n if (_.isNumber(value)) {\n return value + \"\";\n } else if (_.isString(value)) {\n return value;\n } else if (_.isPlainObject(value)) {\n return JSON.stringify(value);\n } else if (_.isUndefined(value)) {\n return \"\";\n }\n return value.toString();\n };\n\n joinStr = function(str, coll) {\n return coll.join(str);\n };\n\n debounce = function(wait, func) {\n return _.debounce(func, wait, {\n leading: true,\n trailing: false\n });\n };\n\n debounceLeading = function(wait, func) {\n return _.debounce(func, wait, {\n leading: false,\n trailing: true\n });\n };\n\n startswith = function(str1, str2) {\n return _.startsWith(str1, str2);\n };\n\n truncate = function(str, maxLength, suffix) {\n var out;\n if (suffix == null) {\n suffix = \"...\";\n }\n if ((typeof str !== \"string\") && !(str instanceof String)) {\n return str;\n }\n out = str.slice(0);\n if (out.length > maxLength) {\n out = out.substring(0, maxLength + 1);\n out = out.substring(0, Math.min(out.length, out.lastIndexOf(\" \")));\n out = out + suffix;\n }\n return out;\n };\n\n sizeFormat = function(input, precision) {\n var number, size, units;\n if (precision == null) {\n precision = 1;\n }\n if (isNaN(parseFloat(input)) || !isFinite(input)) {\n return \"-\";\n }\n if (input === 0) {\n return \"0 bytes\";\n }\n units = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\n number = Math.floor(Math.log(input) / Math.log(1024));\n if (number > 5) {\n number = 5;\n }\n size = (input / Math.pow(1024, number)).toFixed(precision);\n return size + \" \" + units[number];\n };\n\n stripTags = function(str, exception) {\n var pattern;\n if (exception) {\n pattern = new RegExp('<(?!' + exception + '\\s*\\/?)[^>]+>', 'gi');\n return String(str).replace(pattern, '');\n } else {\n return String(str).replace(/<\\/?[^>]+>/g, '');\n }\n };\n\n replaceTags = function(str, tags, replace) {\n var pattern;\n pattern = new RegExp('<(' + tags + ')>', 'gi');\n str = str.replace(pattern, '<' + replace + '>');\n pattern = new RegExp('<\\/(' + tags + ')>', 'gi');\n str = str.replace(pattern, '');\n return str;\n };\n\n defineImmutableProperty = (function(_this) {\n return function(obj, name, fn) {\n return Object.defineProperty(obj, name, {\n get: function() {\n var fn_result;\n if (!_.isFunction(fn)) {\n throw \"defineImmutableProperty third param must be a function\";\n }\n fn_result = fn();\n if (fn_result && _.isObject(fn_result)) {\n if (fn_result.size === void 0) {\n throw \"defineImmutableProperty must return immutable data\";\n }\n }\n return fn_result;\n }\n });\n };\n })(this);\n\n _.mixin({\n removeKeys: function(obj, keys) {\n return _.chain([keys]).flatten().reduce(function(obj, key) {\n delete obj[key];\n return obj;\n }, obj).value();\n },\n cartesianProduct: function() {\n return _.reduceRight(arguments, function(a, b) {\n return _.flatten(_.map(a, function(x) {\n return _.map(b, function(y) {\n return [y].concat(x);\n });\n }), true);\n }, [[]]);\n }\n });\n\n isImage = function(name) {\n return name.match(/\\.(jpe?g|png|gif|gifv|webm|svg|psd)/i) !== null;\n };\n\n isEmail = function(name) {\n return (name != null) && name.match(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/) !== null;\n };\n\n isPdf = function(name) {\n return name.match(/\\.(pdf)/i) !== null;\n };\n\n patch = function(oldImmutable, newImmutable) {\n var pathObj;\n pathObj = {};\n newImmutable.forEach(function(newValue, key) {\n if (newValue !== oldImmutable.get(key)) {\n if (newValue.toJS) {\n return pathObj[key] = newValue.toJS();\n } else {\n return pathObj[key] = newValue;\n }\n }\n });\n return pathObj;\n };\n\n DEFAULT_COLOR_LIST = ['#fce94f', '#edd400', '#c4a000', '#8ae234', '#73d216', '#4e9a06', '#d3d7cf', '#fcaf3e', '#f57900', '#ce5c00', '#729fcf', '#3465a4', '#204a87', '#888a85', '#ad7fa8', '#75507b', '#5c3566', '#ef2929', '#cc0000', '#a40000', '#222222'];\n\n getRandomDefaultColor = function() {\n return _.sample(DEFAULT_COLOR_LIST);\n };\n\n getDefaulColorList = function() {\n return _.clone(DEFAULT_COLOR_LIST);\n };\n\n getMatches = function(string, regex, index) {\n var match, matches;\n index || (index = 1);\n matches = [];\n match = null;\n while (match = regex.exec(string)) {\n if (index === -1) {\n matches.push(match);\n } else {\n matches.push(match[index]);\n }\n }\n return matches;\n };\n\n randomInt = function(start, end) {\n var interval;\n interval = end - start;\n return start + Math.floor(Math.random() * (interval + 1));\n };\n\n normalizeString = function(string) {\n var normalizedString;\n normalizedString = string;\n normalizedString = normalizedString.replace(\"Á\", \"A\").replace(\"Ä\", \"A\").replace(\"À\", \"A\");\n normalizedString = normalizedString.replace(\"É\", \"E\").replace(\"Ë\", \"E\").replace(\"È\", \"E\");\n normalizedString = normalizedString.replace(\"Í\", \"I\").replace(\"Ï\", \"I\").replace(\"Ì\", \"I\");\n normalizedString = normalizedString.replace(\"Ó\", \"O\").replace(\"Ö\", \"O\").replace(\"Ò\", \"O\");\n normalizedString = normalizedString.replace(\"Ú\", \"U\").replace(\"Ü\", \"U\").replace(\"Ù\", \"U\");\n return normalizedString;\n };\n\n taiga = this.taiga;\n\n taiga.addClass = addClass;\n\n taiga.nl2br = nl2br;\n\n taiga.bindMethods = bindMethods;\n\n taiga.bindOnce = bindOnce;\n\n taiga.mixOf = mixOf;\n\n taiga.trim = trim;\n\n taiga.slugify = slugify;\n\n taiga.unslugify = unslugify;\n\n taiga.toggleText = toggleText;\n\n taiga.groupBy = groupBy;\n\n taiga.timeout = timeout;\n\n taiga.cancelTimeout = cancelTimeout;\n\n taiga.scopeDefer = scopeDefer;\n\n taiga.toString = toString;\n\n taiga.joinStr = joinStr;\n\n taiga.truncate = truncate;\n\n taiga.debounce = debounce;\n\n taiga.debounceLeading = debounceLeading;\n\n taiga.startswith = startswith;\n\n taiga.sizeFormat = sizeFormat;\n\n taiga.stripTags = stripTags;\n\n taiga.replaceTags = replaceTags;\n\n taiga.defineImmutableProperty = defineImmutableProperty;\n\n taiga.isImage = isImage;\n\n taiga.isEmail = isEmail;\n\n taiga.isPdf = isPdf;\n\n taiga.patch = patch;\n\n taiga.getRandomDefaultColor = getRandomDefaultColor;\n\n taiga.getDefaulColorList = getDefaulColorList;\n\n taiga.getMatches = getMatches;\n\n taiga.randomInt = randomInt;\n\n taiga.normalizeString = normalizeString;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/controllerMixins.coffee\n */\n\n(function() {\n var FiltersMixin, PageMixin, UsFiltersMixin, groupBy, joinStr, taiga, toString, trim;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n joinStr = this.taiga.joinStr;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n PageMixin = (function() {\n function PageMixin() {}\n\n PageMixin.prototype.fillUsersAndRoles = function(users, roles) {\n var activeUsers, computableRoles;\n activeUsers = _.filter(users, (function(_this) {\n return function(user) {\n return user.is_active;\n };\n })(this));\n this.scope.activeUsers = _.sortBy(activeUsers, \"full_name_display\");\n this.scope.activeUsersById = groupBy(this.scope.activeUsers, function(e) {\n return e.id;\n });\n this.scope.users = _.sortBy(users, \"full_name_display\");\n this.scope.usersById = groupBy(users, function(e) {\n return e.id;\n });\n this.scope.roles = _.sortBy(roles, \"order\");\n computableRoles = _(this.scope.project.members).map(\"role\").uniq().value();\n return this.scope.computableRoles = _(roles).filter(\"computable\").filter(function(x) {\n return _.includes(computableRoles, x.id);\n }).value();\n };\n\n PageMixin.prototype.loadUsersAndRoles = function() {\n var promise;\n promise = this.q.all([this.rs.projects.usersList(this.scope.projectId), this.rs.projects.rolesList(this.scope.projectId)]);\n return promise.then((function(_this) {\n return function(results) {\n var roles, users;\n users = results[0], roles = results[1];\n _this.fillUsersAndRoles(users, roles);\n return results;\n };\n })(this));\n };\n\n return PageMixin;\n\n })();\n\n taiga.PageMixin = PageMixin;\n\n FiltersMixin = (function() {\n function FiltersMixin() {}\n\n FiltersMixin.prototype.selectFilter = function(name, value, load) {\n var existing, location, params;\n if (load == null) {\n load = false;\n }\n params = this.location.search();\n if (params[name] !== void 0 && name !== \"page\") {\n existing = _.map(taiga.toString(params[name]).split(\",\"), function(x) {\n return trim(x);\n });\n existing.push(taiga.toString(value));\n existing = _.compact(existing);\n value = joinStr(\",\", _.uniq(existing));\n }\n if (!this.location.isInCurrentRouteParams(name, value)) {\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n }\n };\n\n FiltersMixin.prototype.replaceFilter = function(name, value, load) {\n var location;\n if (load == null) {\n load = false;\n }\n if (!this.location.isInCurrentRouteParams(name, value)) {\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n }\n };\n\n FiltersMixin.prototype.replaceAllFilters = function(filters, load) {\n var location;\n if (load == null) {\n load = false;\n }\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(filters);\n };\n\n FiltersMixin.prototype.unselectFilter = function(name, value, load) {\n var location, newValues, params, parsedValues;\n if (load == null) {\n load = false;\n }\n params = this.location.search();\n if (params[name] === void 0) {\n return;\n }\n if (value === void 0 || value === null) {\n delete params[name];\n }\n parsedValues = _.map(taiga.toString(params[name]).split(\",\"), function(x) {\n return trim(x);\n });\n newValues = _.reject(parsedValues, function(x) {\n return x === taiga.toString(value);\n });\n newValues = _.compact(newValues);\n if (_.isEmpty(newValues)) {\n value = null;\n } else {\n value = joinStr(\",\", _.uniq(newValues));\n }\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n };\n\n FiltersMixin.prototype.applyStoredFilters = function(projectSlug, key) {\n var filters;\n if (_.isEmpty(this.location.search())) {\n filters = this.getFilters(projectSlug, key);\n if (Object.keys(filters).length) {\n this.location.search(filters);\n this.location.replace();\n return true;\n }\n }\n return false;\n };\n\n FiltersMixin.prototype.storeFilters = function(projectSlug, params, filtersHashSuffix) {\n var hash, ns;\n ns = projectSlug + \":\" + filtersHashSuffix;\n hash = taiga.generateHash([projectSlug, ns]);\n return this.storage.set(hash, params);\n };\n\n FiltersMixin.prototype.getFilters = function(projectSlug, filtersHashSuffix) {\n var hash, ns;\n ns = projectSlug + \":\" + filtersHashSuffix;\n hash = taiga.generateHash([projectSlug, ns]);\n return this.storage.get(hash) || {};\n };\n\n FiltersMixin.prototype.formatSelectedFilters = function(type, list, urlIds) {\n var invalidAppliedTags, invalidTags, selectedFilters, selectedIds, validAppliedTags;\n selectedIds = urlIds.split(',');\n selectedFilters = _.filter(list, function(it) {\n return selectedIds.indexOf(_.toString(it.id)) !== -1;\n });\n invalidTags = _.filter(selectedIds, function(it) {\n return !_.find(selectedFilters, function(sit) {\n return _.toString(sit.id) === it;\n });\n });\n invalidAppliedTags = _.map(invalidTags, function(it) {\n return {\n id: it,\n key: type + \":\" + it,\n dataType: type,\n name: it\n };\n });\n validAppliedTags = _.map(selectedFilters, function(it) {\n return {\n id: it.id,\n key: type + \":\" + it.id,\n dataType: type,\n name: it.name,\n color: it.color\n };\n });\n return invalidAppliedTags.concat(validAppliedTags);\n };\n\n return FiltersMixin;\n\n })();\n\n taiga.FiltersMixin = FiltersMixin;\n\n UsFiltersMixin = (function() {\n function UsFiltersMixin() {}\n\n UsFiltersMixin.prototype.changeQ = function(q) {\n this.replaceFilter(\"q\", q);\n this.filtersReloadContent();\n return this.generateFilters();\n };\n\n UsFiltersMixin.prototype.removeFilter = function(filter) {\n this.unselectFilter(filter.dataType, filter.id);\n this.filtersReloadContent();\n return this.generateFilters();\n };\n\n UsFiltersMixin.prototype.addFilter = function(newFilter) {\n this.selectFilter(newFilter.category.dataType, newFilter.filter.id);\n this.filtersReloadContent();\n return this.generateFilters();\n };\n\n UsFiltersMixin.prototype.selectCustomFilter = function(customFilter) {\n this.replaceAllFilters(customFilter.filter);\n this.filtersReloadContent();\n return this.generateFilters();\n };\n\n UsFiltersMixin.prototype.saveCustomFilter = function(name) {\n var filters, urlfilters;\n filters = {};\n urlfilters = this.location.search();\n filters.tags = urlfilters.tags;\n filters.status = urlfilters.status;\n filters.assigned_to = urlfilters.assigned_to;\n filters.assigned_users = urlfilters.assigned_users;\n filters.owner = urlfilters.owner;\n filters.epic = urlfilters.epic;\n filters.role = urlfilters.role;\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, this.storeCustomFiltersName).then((function(_this) {\n return function(userFilters) {\n userFilters[name] = filters;\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, _this.storeCustomFiltersName).then(_this.generateFilters);\n };\n })(this));\n };\n\n UsFiltersMixin.prototype.removeCustomFilter = function(customFilter) {\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, this.storeCustomFiltersName).then((function(_this) {\n return function(userFilters) {\n delete userFilters[customFilter.id];\n _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, _this.storeCustomFiltersName).then(_this.generateFilters);\n return _this.generateFilters();\n };\n })(this));\n };\n\n UsFiltersMixin.prototype.isFilterDataTypeSelected = function(filterDataType) {\n var filter, i, len, ref;\n ref = this.selectedFilters;\n for (i = 0, len = ref.length; i < len; i++) {\n filter = ref[i];\n if (filter['dataType'] === filterDataType) {\n return true;\n }\n }\n return false;\n };\n\n UsFiltersMixin.prototype.generateFilters = function(milestone) {\n var loadFilters, urlfilters;\n this.storeFilters(this.params.pslug, this.location.search(), this.storeFiltersName);\n urlfilters = this.location.search();\n loadFilters = {};\n loadFilters.project = this.scope.projectId;\n loadFilters.tags = urlfilters.tags;\n loadFilters.status = urlfilters.status;\n loadFilters.assigned_users = urlfilters.assigned_users;\n loadFilters.assigned_to = urlfilters.assigned_to;\n loadFilters.owner = urlfilters.owner;\n loadFilters.epic = urlfilters.epic;\n loadFilters.role = urlfilters.role;\n loadFilters.q = urlfilters.q;\n if (milestone) {\n loadFilters.milestone = milestone;\n }\n return this.q.all([this.rs.userstories.filtersData(loadFilters), this.filterRemoteStorageService.getFilters(this.scope.projectId, this.storeCustomFiltersName)]).then((function(_this) {\n return function(result) {\n var assignedTo, assignedUsers, customFiltersRaw, data, epic, owner, role, selected, statuses, tags, tagsWithAtLeastOneElement;\n data = result[0];\n customFiltersRaw = result[1];\n statuses = _.map(data.statuses, function(it) {\n it.id = it.id.toString();\n return it;\n });\n tags = _.map(data.tags, function(it) {\n it.id = it.name;\n return it;\n });\n tagsWithAtLeastOneElement = _.filter(tags, function(tag) {\n return tag.count > 0;\n });\n assignedUsers = _.map(data.assigned_users, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.full_name || \"Unassigned\";\n return it;\n });\n assignedTo = _.map(data.assigned_to, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.full_name || \"Unassigned\";\n return it;\n });\n role = _.map(data.roles, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.name || \"Unassigned\";\n return it;\n });\n owner = _.map(data.owners, function(it) {\n it.id = it.id.toString();\n it.name = it.full_name;\n return it;\n });\n epic = _.map(data.epics, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n it.name = \"#\" + it.ref + \" \" + it.subject;\n } else {\n it.id = \"null\";\n it.name = \"Not in an epic\";\n }\n return it;\n });\n _this.selectedFilters = [];\n if (loadFilters.status) {\n selected = _this.formatSelectedFilters(\"status\", statuses, loadFilters.status);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.tags) {\n selected = _this.formatSelectedFilters(\"tags\", tags, loadFilters.tags);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.assigned_users) {\n selected = _this.formatSelectedFilters(\"assigned_users\", assignedUsers, loadFilters.assigned_users);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.assigned_to) {\n selected = _this.formatSelectedFilters(\"assigned_to\", assignedTo, loadFilters.assigned_to);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.owner) {\n selected = _this.formatSelectedFilters(\"owner\", owner, loadFilters.owner);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.epic) {\n selected = _this.formatSelectedFilters(\"epic\", epic, loadFilters.epic);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.role) {\n selected = _this.formatSelectedFilters(\"role\", role, loadFilters.role);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n _this.filterQ = loadFilters.q;\n _this.filters = [\n {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.STATUS\"),\n dataType: \"status\",\n content: statuses\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.TAGS\"),\n dataType: \"tags\",\n content: tags,\n hideEmpty: true,\n totalTaggedElements: tagsWithAtLeastOneElement.length\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ASSIGNED_USERS\"),\n dataType: \"assigned_users\",\n content: assignedUsers\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ROLE\"),\n dataType: \"role\",\n content: role\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.CREATED_BY\"),\n dataType: \"owner\",\n content: owner\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.EPIC\"),\n dataType: \"epic\",\n content: epic\n }\n ];\n _this.customFilters = [];\n return _.forOwn(customFiltersRaw, function(value, key) {\n return _this.customFilters.push({\n id: key,\n name: key,\n filter: value\n });\n });\n };\n })(this));\n };\n\n return UsFiltersMixin;\n\n })();\n\n taiga.UsFiltersMixin = UsFiltersMixin;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaAdmin\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/auth.coffee\n */\n\n(function() {\n var AuthService, CancelAccountDirective, ChangeEmailDirective, ChangePasswordFromRecoveryDirective, ForgotPasswordDirective, InvitationDirective, LoginDirective, LoginPage, PublicRegisterMessageDirective, RegisterDirective, debounce, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaAuth\", [\"taigaResources\"]);\n\n LoginPage = (function() {\n LoginPage.$inject = ['tgCurrentUserService', '$location', '$tgNavUrls', '$routeParams', '$tgAuth'];\n\n function LoginPage(currentUserService, $location, $navUrls, $routeParams, $auth) {\n var url;\n if (currentUserService.isAuthenticated()) {\n if (!$routeParams['force_login']) {\n url = $navUrls.resolve(\"home\");\n if ($routeParams['next']) {\n url = decodeURIComponent($routeParams['next']);\n $location.search('next', null);\n }\n if ($routeParams['unauthorized']) {\n $auth.clear();\n $auth.removeToken();\n } else {\n $location.url(url);\n }\n }\n }\n }\n\n return LoginPage;\n\n })();\n\n module.controller('LoginPage', LoginPage);\n\n AuthService = (function(superClass) {\n extend(AuthService, superClass);\n\n AuthService.$inject = [\"$rootScope\", \"$tgStorage\", \"$tgModel\", \"$tgResources\", \"$tgHttp\", \"$tgUrls\", \"$tgConfig\", \"$translate\", \"tgCurrentUserService\", \"tgThemeService\", \"$tgAnalytics\", \"tgTermsAnnouncementService\"];\n\n function AuthService(rootscope, storage, model, rs, http, urls, config1, translate, currentUserService1, themeService, analytics, termsAnnouncementService) {\n var userModel;\n this.rootscope = rootscope;\n this.storage = storage;\n this.model = model;\n this.rs = rs;\n this.http = http;\n this.urls = urls;\n this.config = config1;\n this.translate = translate;\n this.currentUserService = currentUserService1;\n this.themeService = themeService;\n this.analytics = analytics;\n this.termsAnnouncementService = termsAnnouncementService;\n AuthService.__super__.constructor.call(this);\n userModel = this.getUser();\n this._currentTheme = this._getUserTheme();\n this.setUserdata(userModel);\n }\n\n AuthService.prototype.setUserdata = function(userModel) {\n if (userModel) {\n this.userData = Immutable.fromJS(userModel.getAttrs());\n this.currentUserService.setUser(this.userData);\n } else {\n this.userData = null;\n }\n return this.analytics.setUserId();\n };\n\n AuthService.prototype._getUserTheme = function() {\n var ref;\n return ((ref = this.rootscope.user) != null ? ref.theme : void 0) || this.config.get(\"defaultTheme\") || \"taiga\";\n };\n\n AuthService.prototype._setTheme = function() {\n var newTheme;\n newTheme = this._getUserTheme();\n if (this._currentTheme !== newTheme) {\n this._currentTheme = newTheme;\n return this.themeService.use(this._currentTheme);\n }\n };\n\n AuthService.prototype._setLocales = function() {\n var lang, ref;\n lang = ((ref = this.rootscope.user) != null ? ref.lang : void 0) || this.config.get(\"defaultLanguage\") || \"en\";\n this.translate.preferredLanguage(lang);\n return this.translate.use(lang);\n };\n\n AuthService.prototype.getUser = function() {\n var user, userData;\n if (this.rootscope.user) {\n return this.rootscope.user;\n }\n userData = this.storage.get(\"userInfo\");\n if (userData) {\n user = this.model.make_model(\"users\", userData);\n this.rootscope.user = user;\n this._setLocales();\n this._setTheme();\n return user;\n } else {\n this._setTheme();\n }\n return null;\n };\n\n AuthService.prototype.setUser = function(user) {\n this.rootscope.auth = user;\n this.storage.set(\"userInfo\", user.getAttrs());\n this.rootscope.user = user;\n this.setUserdata(user);\n this._setLocales();\n return this._setTheme();\n };\n\n AuthService.prototype.clear = function() {\n this.rootscope.auth = null;\n this.rootscope.user = null;\n return this.storage.remove(\"userInfo\");\n };\n\n AuthService.prototype.setToken = function(token) {\n return this.storage.set(\"token\", token);\n };\n\n AuthService.prototype.getToken = function() {\n return this.storage.get(\"token\");\n };\n\n AuthService.prototype.removeToken = function() {\n return this.storage.remove(\"token\");\n };\n\n AuthService.prototype.isAuthenticated = function() {\n if (this.getUser() !== null) {\n return true;\n }\n return false;\n };\n\n AuthService.prototype.refresh = function() {\n var url;\n url = this.urls.resolve(\"user-me\");\n return this.http.get(url).then((function(_this) {\n return function(data, status) {\n var user;\n user = data.data;\n user.token = _this.getUser().auth_token;\n user = _this.model.make_model(\"users\", user);\n _this.setUser(user);\n _this.rootscope.$broadcast(\"auth:refresh\", user);\n return user;\n };\n })(this));\n };\n\n AuthService.prototype.login = function(data, type) {\n var url;\n url = this.urls.resolve(\"auth\");\n data = _.clone(data, false);\n data.type = type ? type : \"normal\";\n this.removeToken();\n return this.http.post(url, data).then((function(_this) {\n return function(data, status) {\n var user;\n user = _this.model.make_model(\"users\", data.data);\n _this.setToken(user.auth_token);\n _this.setUser(user);\n _this.rootscope.$broadcast(\"auth:login\", user);\n return user;\n };\n })(this));\n };\n\n AuthService.prototype.logout = function() {\n this.removeToken();\n this.clear();\n this.currentUserService.removeUser();\n this._setTheme();\n this._setLocales();\n this.rootscope.$broadcast(\"auth:logout\");\n return this.analytics.setUserId();\n };\n\n AuthService.prototype.register = function(data, type, existing) {\n var url;\n url = this.urls.resolve(\"auth-register\");\n data = _.clone(data, false);\n data.type = type ? type : \"public\";\n if (type === \"private\") {\n data.existing = existing ? existing : false;\n }\n this.removeToken();\n return this.http.post(url, data).then((function(_this) {\n return function(response) {\n var user;\n user = _this.model.make_model(\"users\", response.data);\n _this.setToken(user.auth_token);\n _this.setUser(user);\n _this.rootscope.$broadcast(\"auth:register\", user);\n return user;\n };\n })(this));\n };\n\n AuthService.prototype.getInvitation = function(token) {\n return this.rs.invitations.get(token);\n };\n\n AuthService.prototype.acceptInvitiationWithNewUser = function(data) {\n return this.register(data, \"private\", false);\n };\n\n AuthService.prototype.forgotPassword = function(data) {\n var url;\n url = this.urls.resolve(\"users-password-recovery\");\n data = _.clone(data, false);\n this.removeToken();\n return this.http.post(url, data);\n };\n\n AuthService.prototype.changePasswordFromRecovery = function(data) {\n var url;\n url = this.urls.resolve(\"users-change-password-from-recovery\");\n data = _.clone(data, false);\n this.removeToken();\n return this.http.post(url, data);\n };\n\n AuthService.prototype.changeEmail = function(data) {\n var url;\n url = this.urls.resolve(\"users-change-email\");\n data = _.clone(data, false);\n return this.http.post(url, data);\n };\n\n AuthService.prototype.cancelAccount = function(data) {\n var url;\n url = this.urls.resolve(\"users-cancel-account\");\n data = _.clone(data, false);\n return this.http.post(url, data);\n };\n\n AuthService.prototype.exportProfile = function() {\n var url;\n url = this.urls.resolve(\"users-export\");\n return this.http.post(url);\n };\n\n AuthService.prototype.showTerms = function(data) {\n var user;\n user = this.getUser();\n if (!user || user.read_new_terms) {\n return;\n }\n return this.termsAnnouncementService.show();\n };\n\n return AuthService;\n\n })(taiga.Service);\n\n module.service(\"$tgAuth\", AuthService);\n\n PublicRegisterMessageDirective = function($config, $navUrls, $routeParams, templates) {\n var template, templateFn;\n template = templates.get(\"auth/login-text.html\", true);\n templateFn = function() {\n var nextUrl, publicRegisterEnabled, url;\n publicRegisterEnabled = $config.get(\"publicRegisterEnabled\");\n if (!publicRegisterEnabled) {\n return \"\";\n }\n url = $navUrls.resolve(\"register\");\n if ($routeParams['force_next']) {\n nextUrl = encodeURIComponent($routeParams['force_next']);\n url += \"?next=\" + nextUrl;\n }\n return template({\n url: url\n });\n };\n return {\n restrict: \"AE\",\n scope: {},\n template: templateFn\n };\n };\n\n module.directive(\"tgPublicRegisterMessage\", [\"$tgConfig\", \"$tgNavUrls\", \"$routeParams\", \"$tgTemplate\", PublicRegisterMessageDirective]);\n\n LoginDirective = function($auth, $confirm, $location, $config, $routeParams, $navUrls, $events, $translate, $window, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onError, onSuccess, submit;\n form = new checksley.Form($el.find(\"form.login-form\"));\n if ($routeParams['next'] && $routeParams['next'] !== $navUrls.resolve(\"login\")) {\n $scope.nextUrl = decodeURIComponent($routeParams['next']);\n } else {\n $scope.nextUrl = $navUrls.resolve(\"home\");\n }\n if ($routeParams['force_next']) {\n $scope.nextUrl = decodeURIComponent($routeParams['force_next']);\n }\n onSuccess = function(response) {\n $events.setupConnection();\n $analytics.trackEvent(\"auth\", \"login\", \"user login\", 1);\n $auth.showTerms();\n if ($scope.nextUrl.indexOf('http') === 0) {\n return $window.location.href = $scope.nextUrl;\n } else {\n return $location.url($scope.nextUrl);\n }\n };\n onError = function(response) {\n return $confirm.notify(\"light-error\", $translate.instant(\"LOGIN_FORM.ERROR_AUTH_INCORRECT\"));\n };\n $scope.onKeyUp = function(event) {\n var target, value;\n target = angular.element(event.currentTarget);\n value = target.val();\n $scope.iscapsLockActivated = false;\n if (value !== value.toLowerCase()) {\n return $scope.iscapsLockActivated = true;\n }\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var data, loginFormType, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n data = {\n \"username\": $el.find(\"form.login-form input[name=username]\").val(),\n \"password\": $el.find(\"form.login-form input[name=password]\").val()\n };\n loginFormType = $config.get(\"loginFormType\", \"normal\");\n promise = $auth.login(data, loginFormType);\n return promise.then(onSuccess, onError);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n window.prerenderReady = true;\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLogin\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgConfig\", \"$routeParams\", \"$tgNavUrls\", \"$tgEvents\", \"$translate\", \"$window\", \"$tgAnalytics\", LoginDirective]);\n\n RegisterDirective = function($auth, $confirm, $location, $navUrls, $config, $routeParams, $analytics, $translate, $window) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n if (!$config.get(\"publicRegisterEnabled\")) {\n $location.path($navUrls.resolve(\"not-found\"));\n $location.replace();\n }\n $scope.data = {};\n form = $el.find(\"form\").checksley({\n onlyOneErrorElement: true\n });\n if ($routeParams['next'] && $routeParams['next'] !== $navUrls.resolve(\"login\")) {\n $scope.nextUrl = decodeURIComponent($routeParams['next']);\n } else {\n $scope.nextUrl = $navUrls.resolve(\"home\");\n }\n onSuccessSubmit = function(response) {\n $analytics.trackEvent(\"auth\", \"register\", \"user registration\", 1);\n if ($scope.nextUrl.indexOf('http') === 0) {\n return $window.location.href = $scope.nextUrl;\n } else {\n return $location.url($scope.nextUrl);\n }\n };\n onErrorSubmit = function(response) {\n var text;\n if (response.data._error_message) {\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {\n error: response.data._error_message\n });\n $confirm.notify(\"light-error\", text);\n }\n return form.setErrors(response.data);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.register($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return window.prerenderReady = true;\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRegister\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfig\", \"$routeParams\", \"$tgAnalytics\", \"$translate\", \"$window\", RegisterDirective]);\n\n ForgotPasswordDirective = function($auth, $confirm, $location, $navUrls, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n var message, title;\n $location.path($navUrls.resolve(\"login\"));\n title = $translate.instant(\"FORGOT_PASSWORD_FORM.SUCCESS_TITLE\");\n message = $translate.instant(\"FORGOT_PASSWORD_FORM.SUCCESS_TEXT\");\n return $confirm.success(title, message);\n };\n onErrorSubmit = function(response) {\n var text;\n text = $translate.instant(\"FORGOT_PASSWORD_FORM.ERROR\");\n return $confirm.notify(\"light-error\", text);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.forgotPassword($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return window.prerenderReady = true;\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgForgotPassword\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$translate\", ForgotPasswordDirective]);\n\n ChangePasswordFromRecoveryDirective = function($auth, $confirm, $location, $params, $navUrls, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit, text;\n $scope.data = {};\n if ($params.token != null) {\n $scope.tokenInParams = true;\n $scope.data.token = $params.token;\n } else {\n $location.path($navUrls.resolve(\"login\"));\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.ERROR\");\n $confirm.notify(\"light-error\", text);\n }\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n $location.path($navUrls.resolve(\"login\"));\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.SUCCESS\");\n return $confirm.success(text);\n };\n onErrorSubmit = function(response) {\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.ERROR\");\n return $confirm.notify(\"light-error\", text);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.changePasswordFromRecovery($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgChangePasswordFromRecovery\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", \"$translate\", ChangePasswordFromRecoveryDirective]);\n\n InvitationDirective = function($auth, $confirm, $location, $config, $params, $navUrls, $analytics, $translate, config) {\n var link;\n link = function($scope, $el, $attrs) {\n var loginForm, onErrorSubmitLogin, onErrorSubmitRegister, onSuccessSubmitLogin, onSuccessSubmitRegister, promise, registerForm, submitLogin, submitRegister, token;\n token = $params.token;\n promise = $auth.getInvitation(token);\n promise.then(function(invitation) {\n $scope.invitation = invitation;\n return $scope.publicRegisterEnabled = config.get(\"publicRegisterEnabled\");\n });\n promise.then(null, function(response) {\n var text;\n $location.path($navUrls.resolve(\"login\"));\n text = $translate.instant(\"INVITATION_LOGIN_FORM.NOT_FOUND\");\n return $confirm.notify(\"light-error\", text);\n });\n $scope.dataLogin = {\n token: token\n };\n loginForm = $el.find(\"form.login-form\").checksley({\n onlyOneErrorElement: true\n });\n onSuccessSubmitLogin = function(response) {\n var text;\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with existing user\", 1);\n $location.path($navUrls.resolve(\"project\", {\n project: $scope.invitation.project_slug\n }));\n text = $translate.instant(\"INVITATION_LOGIN_FORM.SUCCESS\", {\n \"project_name\": $scope.invitation.project_name\n });\n return $confirm.notify(\"success\", text);\n };\n onErrorSubmitLogin = function(response) {\n return $confirm.notify(\"light-error\", response.data._error_message);\n };\n submitLogin = debounce(2000, (function(_this) {\n return function(event) {\n var data, loginFormType;\n event.preventDefault();\n if (!loginForm.validate()) {\n return;\n }\n loginFormType = $config.get(\"loginFormType\", \"normal\");\n data = $scope.dataLogin;\n promise = $auth.login({\n username: data.username,\n password: data.password,\n invitation_token: data.token\n }, loginFormType);\n return promise.then(onSuccessSubmitLogin, onErrorSubmitLogin);\n };\n })(this));\n $el.on(\"submit\", \"form.login-form\", submitLogin);\n $el.on(\"click\", \".button-login\", submitLogin);\n $scope.dataRegister = {\n token: token\n };\n registerForm = $el.find(\"form.register-form\").checksley({\n onlyOneErrorElement: true\n });\n onSuccessSubmitRegister = function(response) {\n var text;\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with new user\", 1);\n $location.path($navUrls.resolve(\"project\", {\n project: $scope.invitation.project_slug\n }));\n text = $translate.instant(\"INVITATION_LOGIN_FORM.SUCCESS\", {\n \"project_name\": $scope.invitation.project_name\n });\n return $confirm.notify(\"success\", text);\n };\n onErrorSubmitRegister = function(response) {\n var text;\n if (response.data._error_message) {\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {\n error: response.data._error_message\n });\n $confirm.notify(\"light-error\", text);\n }\n return registerForm.setErrors(response.data);\n };\n submitRegister = debounce(2000, (function(_this) {\n return function(event) {\n event.preventDefault();\n if (!registerForm.validate()) {\n return;\n }\n promise = $auth.acceptInvitiationWithNewUser($scope.dataRegister);\n return promise.then(onSuccessSubmitRegister, onErrorSubmitRegister);\n };\n })(this));\n $el.on(\"submit\", \"form.register-form\", submitRegister);\n $el.on(\"click\", \".button-register\", submitRegister);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgInvitation\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgConfig\", \"$routeParams\", \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", \"$tgConfig\", InvitationDirective]);\n\n ChangeEmailDirective = function($repo, $model, $auth, $confirm, $location, $params, $navUrls, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n $scope.data.email_token = $params.email_token;\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n var text;\n if ($auth.isAuthenticated()) {\n $repo.queryOne(\"users\", $auth.getUser().id).then((function(_this) {\n return function(data) {\n $auth.setUser(data);\n $location.path($navUrls.resolve(\"home\"));\n return $location.replace();\n };\n })(this));\n } else {\n $location.path($navUrls.resolve(\"login\"));\n $location.replace();\n }\n text = $translate.instant(\"CHANGE_EMAIL_FORM.SUCCESS\");\n return $confirm.success(text);\n };\n onErrorSubmit = function(response) {\n var text;\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {\n error: response.data._error_message\n });\n return $confirm.notify(\"light-error\", text);\n };\n submit = function() {\n var promise;\n if (!form.validate()) {\n return;\n }\n promise = $auth.changeEmail($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n $el.on(\"submit\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"click\", \"a.button-change-email\", function(event) {\n event.preventDefault();\n return submit();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgChangeEmail\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", \"$translate\", ChangeEmailDirective]);\n\n CancelAccountDirective = function($repo, $model, $auth, $confirm, $location, $params, $navUrls) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n $scope.data.cancel_token = $params.cancel_token;\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n var text;\n $auth.logout();\n $location.path($navUrls.resolve(\"home\"));\n text = $translate.instant(\"CANCEL_ACCOUNT.SUCCESS\");\n return $confirm.success(text);\n };\n onErrorSubmit = function(response) {\n var text;\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {\n error: response.data._error_message\n });\n return $confirm.notify(\"error\", text);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.cancelAccount($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgCancelAccount\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", CancelAccountDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaBacklog\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base.coffee\n */\n\n(function() {\n var TaigaMainDirective, bindOnce, groupBy, init, module, taiga, urls;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaBase\", []);\n\n TaigaMainDirective = function($rootscope, $window) {\n var link;\n link = function($scope, $el, $attrs) {\n return $window.onresize = function() {\n return $rootscope.$broadcast(\"resize\");\n };\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMain\", [\"$rootScope\", \"$window\", TaigaMainDirective]);\n\n urls = {\n \"home\": \"/\",\n \"projects\": \"/projects\",\n \"error\": \"/error\",\n \"not-found\": \"/not-found\",\n \"permission-denied\": \"/permission-denied\",\n \"discover\": \"/discover\",\n \"discover-search\": \"/discover/search\",\n \"login\": \"/login\",\n \"forgot-password\": \"/forgot-password\",\n \"change-password\": \"/change-password/:token\",\n \"change-email\": \"/change-email/:token\",\n \"cancel-account\": \"/cancel-account/:token\",\n \"register\": \"/register\",\n \"invitation\": \"/invitation/:token\",\n \"create-project\": \"/project/new\",\n \"create-project-scrum\": \"/project/new/scrum\",\n \"create-project-kanban\": \"/project/new/kanban\",\n \"create-project-duplicate\": \"/project/new/duplicate\",\n \"create-project-import\": \"/project/new/import\",\n \"create-project-import-platform\": \"/project/new/import/:platform\",\n \"profile\": \"/profile\",\n \"user-profile\": \"/profile/:username\",\n \"blocked-project\": \"/blocked-project/:project\",\n \"project\": \"/project/:project\",\n \"project-detail-ref\": \"/project/:project/t/:ref\",\n \"project-backlog\": \"/project/:project/backlog\",\n \"project-taskboard\": \"/project/:project/taskboard/:sprint\",\n \"project-kanban\": \"/project/:project/kanban\",\n \"project-issues\": \"/project/:project/issues\",\n \"project-epics\": \"/project/:project/epics\",\n \"project-search\": \"/project/:project/search\",\n \"project-timeline\": \"/project/:project/timeline\",\n \"project-epics-detail\": \"/project/:project/epic/:ref\",\n \"project-userstories-detail\": \"/project/:project/us/:ref\",\n \"project-tasks-detail\": \"/project/:project/task/:ref\",\n \"project-issues-detail\": \"/project/:project/issue/:ref\",\n \"project-wiki\": \"/project/:project/wiki\",\n \"project-wiki-list\": \"/project/:project/wiki-list\",\n \"project-wiki-page\": \"/project/:project/wiki/:slug\",\n \"project-team\": \"/project/:project/team\",\n \"project-admin-home\": \"/project/:project/admin/project-profile/details\",\n \"project-admin-project-profile-details\": \"/project/:project/admin/project-profile/details\",\n \"project-admin-project-profile-default-values\": \"/project/:project/admin/project-profile/default-values\",\n \"project-admin-project-profile-modules\": \"/project/:project/admin/project-profile/modules\",\n \"project-admin-project-profile-export\": \"/project/:project/admin/project-profile/export\",\n \"project-admin-project-profile-reports\": \"/project/:project/admin/project-profile/reports\",\n \"project-admin-project-values-status\": \"/project/:project/admin/project-values/status\",\n \"project-admin-project-values-points\": \"/project/:project/admin/project-values/points\",\n \"project-admin-project-values-priorities\": \"/project/:project/admin/project-values/priorities\",\n \"project-admin-project-values-severities\": \"/project/:project/admin/project-values/severities\",\n \"project-admin-project-values-types\": \"/project/:project/admin/project-values/types\",\n \"project-admin-project-values-custom-fields\": \"/project/:project/admin/project-values/custom-fields\",\n \"project-admin-project-values-tags\": \"/project/:project/admin/project-values/tags\",\n \"project-admin-project-values-due-dates\": \"/project/:project/admin/project-values/due-dates\",\n \"project-admin-memberships\": \"/project/:project/admin/memberships\",\n \"project-admin-roles\": \"/project/:project/admin/roles\",\n \"project-admin-third-parties-webhooks\": \"/project/:project/admin/third-parties/webhooks\",\n \"project-admin-third-parties-github\": \"/project/:project/admin/third-parties/github\",\n \"project-admin-third-parties-gitlab\": \"/project/:project/admin/third-parties/gitlab\",\n \"project-admin-third-parties-bitbucket\": \"/project/:project/admin/third-parties/bitbucket\",\n \"project-admin-third-parties-gogs\": \"/project/:project/admin/third-parties/gogs\",\n \"project-admin-contrib\": \"/project/:project/admin/contrib/:plugin\",\n \"user-settings-user-profile\": \"/user-settings/user-profile\",\n \"user-settings-user-change-password\": \"/user-settings/user-change-password\",\n \"user-settings-user-avatar\": \"/user-settings/user-avatar\",\n \"user-settings-user-project-settings\": \"/user-settings/user-project-settings\",\n \"user-settings-mail-notifications\": \"/user-settings/mail-notifications\",\n \"user-settings-live-notifications\": \"/user-settings/live-notifications\",\n \"user-settings-web-notifications\": \"/user-settings/web-notifications\",\n \"user-settings-contrib\": \"/user-settings/contrib/:plugin\",\n \"notifications\": \"/notifications\"\n };\n\n init = function($log, $navurls) {\n $log.debug(\"Initialize navigation urls\");\n return $navurls.update(urls);\n };\n\n module.run([\"$log\", \"$tgNavUrls\", init]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common.coffee\n */\n\n(function() {\n var AnimationFrame, Autofocus, Capslock, CheckPermissionDirective, ClassPermissionDirective, CtrlClickDisable, DataPickerConfig, LightboxClose, ProjectUrl, Qqueue, QueueModelTransformation, SelectedText, Svg, Template, ToggleCommentDirective, module, taiga,\n slice = [].slice,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\", []);\n\n DataPickerConfig = function($translate, $config, $auth) {\n return {\n get: function() {\n var isRTL, lang, rtlLanguages, user;\n user = $auth.getUser();\n lang = (user != null ? user.lang : void 0) || $translate.preferredLanguage();\n rtlLanguages = $config.get(\"rtlLanguages\", []);\n isRTL = rtlLanguages.indexOf(lang) > -1;\n return {\n i18n: {\n previousMonth: $translate.instant(\"COMMON.PICKERDATE.PREV_MONTH\"),\n nextMonth: $translate.instant(\"COMMON.PICKERDATE.NEXT_MONTH\"),\n months: [$translate.instant(\"COMMON.PICKERDATE.MONTHS.JAN\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.FEB\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.MAR\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.APR\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.MAY\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.JUN\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.JUL\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.AUG\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.SEP\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.OCT\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.NOV\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.DEC\")],\n weekdays: [$translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.SUN\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.MON\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.TUE\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.WED\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.THU\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.FRI\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.SAT\")],\n weekdaysShort: [$translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT\")]\n },\n isRTL: isRTL,\n firstDay: parseInt($translate.instant(\"COMMON.PICKERDATE.FIRST_DAY_OF_WEEK\"), 10),\n format: $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n };\n }\n };\n };\n\n module.factory(\"tgDatePickerConfigService\", [\"$translate\", \"$tgConfig\", \"$tgAuth\", DataPickerConfig]);\n\n SelectedText = function($window, $document) {\n var get;\n get = function() {\n if ($window.getSelection) {\n return $window.getSelection().toString();\n } else if ($document.selection) {\n return $document.selection.createRange().text;\n }\n return \"\";\n };\n return {\n get: get\n };\n };\n\n module.factory(\"$selectedText\", [\"$window\", \"$document\", SelectedText]);\n\n CheckPermissionDirective = function(projectService) {\n var link, render;\n render = function($el, project, permission) {\n if (project && permission) {\n if (project.get('my_permissions').indexOf(permission) > -1) {\n return $el.removeClass('hidden');\n }\n }\n };\n link = function($scope, $el, $attrs) {\n var permission, unObserve, unwatch;\n $el.addClass('hidden');\n permission = $attrs.tgCheckPermission;\n unwatch = $scope.$watch(function() {\n return projectService.project;\n }, function() {\n if (!projectService.project) {\n return;\n }\n render($el, projectService.project, permission);\n return unwatch();\n });\n unObserve = $attrs.$observe(\"tgCheckPermission\", function(permission) {\n if (!permission) {\n return;\n }\n render($el, projectService.project, permission);\n return unObserve();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n CheckPermissionDirective.$inject = [\"tgProjectService\"];\n\n module.directive(\"tgCheckPermission\", CheckPermissionDirective);\n\n ClassPermissionDirective = function() {\n var link, name;\n name = \"tgClassPermission\";\n link = function($scope, $el, $attrs) {\n var checkPermissions, tgClassPermissionWatchAction, unbindWatcher;\n checkPermissions = function(project, className, permission) {\n var negation;\n negation = permission[0] === \"!\";\n if (negation) {\n permission = permission.slice(1);\n }\n if (negation && project.my_permissions.indexOf(permission) === -1) {\n return $el.addClass(className);\n } else if (!negation && project.my_permissions.indexOf(permission) !== -1) {\n return $el.addClass(className);\n } else {\n return $el.removeClass(className);\n }\n };\n tgClassPermissionWatchAction = function(project) {\n var className, classes, permission, results;\n if (project) {\n unbindWatcher();\n classes = $scope.$eval($attrs[name]);\n results = [];\n for (className in classes) {\n permission = classes[className];\n results.push(checkPermissions(project, className, permission));\n }\n return results;\n }\n };\n return unbindWatcher = $scope.$watch(\"project\", tgClassPermissionWatchAction);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgClassPermission\", ClassPermissionDirective);\n\n AnimationFrame = function() {\n var add, animationFrame, performAnimation, tail;\n animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n performAnimation = (function(_this) {\n return function(time) {\n var fn;\n fn = tail.shift();\n fn();\n if (tail.length) {\n return animationFrame(performAnimation);\n }\n };\n })(this);\n tail = [];\n add = function() {\n var fn, i, len, results;\n results = [];\n for (i = 0, len = arguments.length; i < len; i++) {\n fn = arguments[i];\n tail.push(fn);\n if (tail.length === 1) {\n results.push(animationFrame(performAnimation));\n } else {\n results.push(void 0);\n }\n }\n return results;\n };\n return {\n add: add\n };\n };\n\n module.factory(\"animationFrame\", AnimationFrame);\n\n ToggleCommentDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.find(\"textarea\").on(\"focus\", function() {\n return $el.addClass(\"active\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgToggleComment\", ToggleCommentDirective);\n\n ProjectUrl = function($navurls) {\n var get;\n get = function(project) {\n var ctx;\n if (project.toJS) {\n project = project.toJS();\n }\n ctx = {\n project: project.slug\n };\n if (project.is_backlog_activated && project.my_permissions.indexOf(\"view_us\") > -1) {\n return $navurls.resolve(\"project-backlog\", ctx);\n }\n if (project.is_kanban_activated && project.my_permissions.indexOf(\"view_us\") > -1) {\n return $navurls.resolve(\"project-kanban\", ctx);\n }\n if (project.is_wiki_activated && project.my_permissions.indexOf(\"view_wiki_pages\") > -1) {\n return $navurls.resolve(\"project-wiki\", ctx);\n }\n if (project.is_issues_activated && project.my_permissions.indexOf(\"view_issues\") > -1) {\n return $navurls.resolve(\"project-issues\", ctx);\n }\n return $navurls.resolve(\"project\", ctx);\n };\n return {\n get: get\n };\n };\n\n module.factory(\"$projectUrl\", [\"$tgNavUrls\", ProjectUrl]);\n\n Qqueue = function($q) {\n var deferred, lastPromise, qqueue;\n deferred = $q.defer();\n deferred.resolve();\n lastPromise = deferred.promise;\n qqueue = {\n bindAdd: (function(_this) {\n return function(fn) {\n return function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return lastPromise = lastPromise.then(function() {\n return fn.apply(_this, args);\n });\n };\n };\n })(this),\n add: (function(_this) {\n return function(fn) {\n if (!lastPromise) {\n lastPromise = fn();\n } else {\n lastPromise = lastPromise.then(fn);\n }\n return qqueue;\n };\n })(this)\n };\n return qqueue;\n };\n\n module.factory(\"$tgQqueue\", [\"$q\", Qqueue]);\n\n QueueModelTransformation = (function(superClass) {\n extend(QueueModelTransformation, superClass);\n\n QueueModelTransformation.$inject = [\"$tgQqueue\", \"$tgRepo\", \"$q\", \"$tgModel\"];\n\n function QueueModelTransformation(qqueue1, repo, q, model1) {\n this.qqueue = qqueue1;\n this.repo = repo;\n this.q = q;\n this.model = model1;\n }\n\n QueueModelTransformation.prototype.setObject = function(scope1, prop) {\n this.scope = scope1;\n this.prop = prop;\n };\n\n QueueModelTransformation.prototype.clone = function() {\n var attrs, model;\n attrs = _.cloneDeep(this.scope[this.prop]._attrs);\n model = this.model.make_model(this.scope[this.prop]._name, attrs);\n return model;\n };\n\n QueueModelTransformation.prototype.getObj = function() {\n return this.scope[this.prop];\n };\n\n QueueModelTransformation.prototype.save = function(transformation) {\n var defered;\n defered = this.q.defer();\n this.qqueue.add((function(_this) {\n return function() {\n var clone, comment, modified, obj, success;\n obj = _this.getObj();\n comment = obj.comment;\n obj.comment = '';\n clone = _this.clone();\n modified = _.omit(obj._modifiedAttrs, ['version']);\n clone = _.assign(clone, modified);\n transformation(clone);\n if (comment.length) {\n clone.comment = comment;\n }\n success = function() {\n _this.scope[_this.prop] = clone;\n return defered.resolve.apply(null, arguments);\n };\n return _this.repo.save(clone).then(success, defered.reject);\n };\n })(this));\n return defered.promise;\n };\n\n return QueueModelTransformation;\n\n })(taiga.Service);\n\n module.service(\"$tgQueueModelTransformation\", QueueModelTransformation);\n\n Template = function($templateCache) {\n return {\n get: (function(_this) {\n return function(name, lodash) {\n var tmp;\n if (lodash == null) {\n lodash = false;\n }\n tmp = $templateCache.get(name);\n if (lodash) {\n tmp = _.template(tmp);\n }\n return tmp;\n };\n })(this)\n };\n };\n\n module.factory(\"$tgTemplate\", [\"$templateCache\", Template]);\n\n Capslock = function() {\n var template;\n template = \"\";\n return {\n template: template\n };\n };\n\n module.directive(\"tgCapslock\", [Capslock]);\n\n LightboxClose = function() {\n var link, template;\n template = \"
    \\n \\n\";\n link = function(scope, elm, attrs) {};\n return {\n scope: {\n onClose: '&'\n },\n link: link,\n template: template\n };\n };\n\n module.directive(\"tgLightboxClose\", [LightboxClose]);\n\n Svg = function() {\n var template;\n template = \"\\n \\n {{svgTitle}}\\n {{svgTitleTranslate | translate: svgTitleTranslateValues}}\\n \\n\";\n return {\n scope: {\n svgIcon: \"@\",\n svgTitle: \"@\",\n svgTitleTranslate: \"@\",\n svgTitleTranslateValues: \"=\",\n svgFill: \"=\"\n },\n template: template\n };\n };\n\n module.directive(\"tgSvg\", [Svg]);\n\n Autofocus = function($timeout, $parse, animationFrame) {\n return {\n restrict: 'A',\n link: function($scope, $element, attrs) {\n var model;\n if (attrs.ngShow) {\n model = $parse(attrs.ngShow);\n return $scope.$watch(model, function(value) {\n if (value === true) {\n return $timeout(function() {\n return $element[0].focus();\n });\n }\n });\n } else {\n return $timeout(function() {\n return $element[0].focus();\n });\n }\n }\n };\n };\n\n module.directive('tgAutofocus', ['$timeout', '$parse', \"animationFrame\", Autofocus]);\n\n module.directive('tgPreloadImage', function() {\n var preload, spinner, template;\n spinner = \"loading...\";\n template = \"
    \\n \\n
    \";\n preload = function(src, onLoad) {\n var image;\n image = new Image();\n image.onload = onLoad;\n image.src = src;\n return image;\n };\n return {\n template: template,\n transclude: true,\n replace: true,\n link: function(scope, el, attrs) {\n var image, onLoad, timeout;\n image = el.find('img:last');\n timeout = null;\n onLoad = function() {\n el.find('.loading-spinner').remove();\n image.show();\n if (timeout) {\n clearTimeout(timeout);\n return timeout = null;\n }\n };\n return attrs.$observe('preloadSrc', function(src) {\n if (timeout) {\n clearTimeout(timeout);\n }\n el.find('.loading-spinner').remove();\n timeout = setTimeout(function() {\n return el.prepend(spinner);\n }, 200);\n image.hide();\n return preload(src, onLoad);\n });\n }\n };\n });\n\n CtrlClickDisable = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.on(\"click\", function($event) {\n if ($event.ctrlKey || $event.metaKey) {\n return $event.preventDefault();\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgCtrlClickDisable\", CtrlClickDisable);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/detail.coffee\n */\n\n(function() {\n var DetailController, bindMethods, bindOnce, groupBy, joinStr, mixOf, module, taiga, toString;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaCommon\");\n\n DetailController = (function() {\n DetailController.$inject = ['$routeParams', '$tgRepo', \"tgProjectService\", \"$tgNavUrls\", \"$location\"];\n\n function DetailController(params, repo, projectService, navurls, location) {\n this.params = params;\n this.repo = repo;\n this.projectService = projectService;\n this.navurls = navurls;\n this.location = location;\n this.repo.resolve({\n pslug: this.params.pslug,\n ref: this.params.ref\n }).then((function(_this) {\n return function(result) {\n var url;\n if (result.issue) {\n url = _this.navurls.resolve('project-issues-detail', {\n project: _this.projectService.project.get('slug'),\n ref: _this.params.ref\n });\n } else if (result.task) {\n url = _this.navurls.resolve('project-tasks-detail', {\n project: _this.projectService.project.get('slug'),\n ref: _this.params.ref\n });\n } else if (result.us) {\n url = _this.navurls.resolve('project-userstories-detail', {\n project: _this.projectService.project.get('slug'),\n ref: _this.params.ref\n });\n } else if (result.epic) {\n url = _this.navurls.resolve('project-epics-detail', {\n project: _this.projectService.project.get('slug'),\n ref: _this.params.ref\n });\n } else if (result.wikipage) {\n url = _this.navurls.resolve('project-wiki-page', {\n project: _this.projectService.project.get('slug'),\n slug: _this.params.ref\n });\n }\n return _this.location.path(url);\n };\n })(this));\n }\n\n return DetailController;\n\n })();\n\n module.controller(\"DetailController\", DetailController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/epics.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaEpics\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/events.coffee\n */\n\n(function() {\n var EventsProvider, EventsService, bindMethods, module, startswith, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n startswith = this.taiga.startswith;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaEvents\", []);\n\n EventsService = (function() {\n function EventsService(win, log, config, auth, liveAnnouncementService1, rootScope) {\n this.win = win;\n this.log = log;\n this.config = config;\n this.auth = auth;\n this.liveAnnouncementService = liveAnnouncementService1;\n this.rootScope = rootScope;\n this.processMessage = bind(this.processMessage, this);\n bindMethods(this);\n }\n\n EventsService.prototype.initialize = function(sessionId) {\n this.sessionId = sessionId;\n this.subscriptions = {};\n this.connected = false;\n this.error = false;\n this.pendingMessages = [];\n this.missedHeartbeats = 0;\n this.heartbeatInterval = null;\n if (this.win.WebSocket === void 0) {\n return this.log.info(\"WebSockets not supported on your browser\");\n }\n };\n\n EventsService.prototype.setupConnection = function() {\n var loc, path, scheme, url;\n this.stopExistingConnection();\n url = this.config.get(\"eventsUrl\");\n if (!url) {\n return;\n }\n if (!startswith(url, \"ws:\") && !startswith(url, \"wss:\")) {\n loc = this.win.location;\n scheme = loc.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n path = _.trimStart(url, \"/\");\n url = scheme + \"//\" + loc.host + \"/\" + path;\n }\n this.error = false;\n this.ws = new this.win.WebSocket(url);\n this.ws.addEventListener(\"open\", this.onOpen);\n this.ws.addEventListener(\"message\", this.onMessage);\n this.ws.addEventListener(\"error\", this.onError);\n return this.ws.addEventListener(\"close\", this.onClose);\n };\n\n EventsService.prototype.stopExistingConnection = function() {\n if (this.ws === void 0) {\n return;\n }\n this.ws.removeEventListener(\"open\", this.onOpen);\n this.ws.removeEventListener(\"close\", this.onClose);\n this.ws.removeEventListener(\"error\", this.onError);\n this.ws.removeEventListener(\"message\", this.onMessage);\n this.stopHeartBeatMessages();\n this.ws.close();\n return delete this.ws;\n };\n\n EventsService.prototype.notifications = function() {\n return this.subscribe(null, 'notifications', (function(_this) {\n return function(data) {\n _this.liveAnnouncementService.show(data.title, data.desc);\n return _this.rootScope.$digest();\n };\n })(this));\n };\n\n EventsService.prototype.liveNotifications = function() {\n var subscribe, userId;\n if (this.auth.userData == null) {\n return;\n }\n userId = this.auth.userData.get('id');\n subscribe = (function(_this) {\n return function() {\n return _this.subscribe(null, \"live_notifications.\" + userId, function(data) {\n var notification;\n notification = new Notification(data.title, {\n icon: \"/\" + window._version + \"/images/favicon.png\",\n body: data.body,\n tag: data.id\n });\n notification.onshow = function() {\n if (data.timeout && data.timeout > 0) {\n return setTimeout(function() {\n return notification.close();\n }, data.timeout);\n }\n };\n if (data.url) {\n return notification.onclick = function() {\n return window.open(data.url);\n };\n }\n });\n };\n })(this);\n if (!Notification) {\n return console.log(\"This browser does not support desktop notification\");\n } else if (Notification.permission === \"granted\") {\n return subscribe();\n } else if (Notification.permission !== 'denied') {\n return Notification.requestPermission((function(_this) {\n return function(permission) {\n if (permission === \"granted\") {\n return subscribe();\n }\n };\n })(this));\n }\n };\n\n EventsService.prototype.webNotifications = function() {\n var randomTimeout, routingKey, userId;\n if (this.auth.userData == null) {\n return;\n }\n userId = this.auth.userData.get('id');\n routingKey = \"web_notifications.\" + userId;\n randomTimeout = taiga.randomInt(700, 1000);\n return this.subscribe(null, routingKey, (function(_this) {\n return function(data) {\n return _this.rootScope.$broadcast(\"notifications:new\");\n };\n })(this));\n };\n\n EventsService.prototype.startHeartBeatMessages = function() {\n var heartbeatIntervalTime, maxMissedHeartbeats, reconnectTryInterval;\n if (this.heartbeatInterval) {\n return;\n }\n maxMissedHeartbeats = this.config.get(\"eventsMaxMissedHeartbeats\", 5);\n heartbeatIntervalTime = this.config.get(\"eventsHeartbeatIntervalTime\", 60000);\n reconnectTryInterval = this.config.get(\"eventsReconnectTryInterval\", 10000);\n this.missedHeartbeats = 0;\n this.heartbeatInterval = setInterval((function(_this) {\n return function() {\n var e;\n try {\n if (_this.missedHeartbeats >= maxMissedHeartbeats) {\n throw new Error(\"Too many missed heartbeats PINGs.\");\n }\n _this.missedHeartbeats++;\n _this.sendMessage({\n cmd: \"ping\"\n });\n return _this.log.debug(\"HeartBeat send PING\");\n } catch (error1) {\n e = error1;\n _this.log.error(\"HeartBeat error: \" + e.message);\n return _this.setupConnection();\n }\n };\n })(this), heartbeatIntervalTime);\n return this.log.debug(\"HeartBeat enabled\");\n };\n\n EventsService.prototype.stopHeartBeatMessages = function() {\n if (!this.heartbeatInterval) {\n return;\n }\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = null;\n return this.log.debug(\"HeartBeat disabled\");\n };\n\n EventsService.prototype.processHeartBeatPongMessage = function(data) {\n this.missedHeartbeats = 0;\n return this.log.debug(\"HeartBeat recived PONG\");\n };\n\n EventsService.prototype.serialize = function(message) {\n if (_.isObject(message)) {\n return JSON.stringify(message);\n }\n return message;\n };\n\n EventsService.prototype.sendMessage = function(message) {\n var i, len, messages, msg, results;\n this.pendingMessages.push(message);\n if (!this.connected) {\n return;\n }\n messages = _.map(this.pendingMessages, this.serialize);\n this.pendingMessages = [];\n results = [];\n for (i = 0, len = messages.length; i < len; i++) {\n msg = messages[i];\n results.push(this.ws.send(msg));\n }\n return results;\n };\n\n EventsService.prototype.processMessage = function(data) {\n var routingKey, subscription;\n routingKey = data.routing_key;\n if (this.subscriptions[routingKey] == null) {\n return;\n }\n subscription = this.subscriptions[routingKey];\n if (subscription.scope) {\n return subscription.scope.$apply(function() {\n return subscription.callback(data.data);\n });\n } else {\n return subscription.callback(data.data);\n }\n };\n\n EventsService.prototype.subscribe = function(scope, routingKey, callback) {\n var message, subscription;\n if (this.error) {\n return;\n }\n this.log.debug(\"Subscribe to: \" + routingKey);\n subscription = {\n scope: scope,\n routingKey: routingKey,\n callback: callback\n };\n message = {\n \"cmd\": \"subscribe\",\n \"routing_key\": routingKey\n };\n this.subscriptions[routingKey] = subscription;\n this.sendMessage(message);\n if (scope) {\n return scope.$on(\"$destroy\", (function(_this) {\n return function() {\n return _this.unsubscribe(routingKey);\n };\n })(this));\n }\n };\n\n EventsService.prototype.unsubscribe = function(routingKey) {\n var message;\n if (this.error) {\n return;\n }\n this.log.debug(\"Unsubscribe from: \" + routingKey);\n message = {\n \"cmd\": \"unsubscribe\",\n \"routing_key\": routingKey\n };\n return this.sendMessage(message);\n };\n\n EventsService.prototype.onOpen = function() {\n var message, token;\n this.connected = true;\n this.log.debug(\"WebSocket connection opened\");\n token = this.auth.getToken();\n message = {\n cmd: \"auth\",\n data: {\n token: token,\n sessionId: this.sessionId\n }\n };\n this.sendMessage(message);\n this.startHeartBeatMessages();\n this.notifications();\n this.liveNotifications();\n return this.webNotifications();\n };\n\n EventsService.prototype.onMessage = function(event) {\n var data;\n this.log.debug(\"WebSocket message received: \" + event.data);\n data = JSON.parse(event.data);\n if (data.cmd === \"pong\") {\n return this.processHeartBeatPongMessage(data);\n } else {\n return this.processMessage(data);\n }\n };\n\n EventsService.prototype.onError = function(error) {\n this.log.error(\"WebSocket error: \" + error);\n this.error = true;\n return setTimeout(this.setupConnection, this.reconnectTryInterval);\n };\n\n EventsService.prototype.onClose = function() {\n this.log.debug(\"WebSocket closed.\");\n this.connected = false;\n this.stopHeartBeatMessages();\n return setTimeout(this.setupConnection, this.reconnectTryInterval);\n };\n\n return EventsService;\n\n })();\n\n EventsProvider = (function() {\n function EventsProvider() {}\n\n EventsProvider.prototype.setSessionId = function(sessionId) {\n return this.sessionId = sessionId;\n };\n\n EventsProvider.prototype.$get = function($win, $log, $conf, $auth, liveAnnouncementService, $rootScope) {\n var service;\n service = new EventsService($win, $log, $conf, $auth, liveAnnouncementService, $rootScope);\n service.initialize(this.sessionId);\n return service;\n };\n\n EventsProvider.prototype.$get.$inject = [\"$window\", \"$log\", \"$tgConfig\", \"$tgAuth\", \"tgLiveAnnouncementService\", \"$rootScope\"];\n\n return EventsProvider;\n\n })();\n\n module.provider(\"$tgEvents\", EventsProvider);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/feedback.coffee\n */\n\n(function() {\n var FeedbackDirective, bindOnce, debounce, groupBy, mixOf, module, taiga, trim;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n mixOf = this.taiga.mixOf;\n\n debounce = this.taiga.debounce;\n\n trim = this.taiga.trim;\n\n module = angular.module(\"taigaFeedback\", []);\n\n FeedbackDirective = function($lightboxService, $repo, $confirm, $loading, feedbackService) {\n var directive, link;\n link = function($scope, $el, $attrs) {\n var form, openLightbox, submit, submitButton;\n form = $el.find(\"form\").checksley();\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.create(\"feedback\", $scope.feedback);\n promise.then(function(data) {\n currentLoading.finish();\n $lightboxService.close($el);\n return $confirm.notify(\"success\", \"\\\\o/ we'll be happy to read your\");\n });\n return promise.then(null, function() {\n currentLoading.finish();\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n openLightbox = function() {\n $scope.feedback = {};\n $lightboxService.open($el);\n return $el.find(\"textarea\").focus();\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return openLightbox();\n };\n directive = {\n link: link,\n templateUrl: \"common/lightbox-feedback.html\",\n scope: {}\n };\n return directive;\n };\n\n module.directive(\"tgLbFeedback\", [\"lightboxService\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"tgFeedbackService\", FeedbackDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/integrations.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaIntegrations\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaIssues\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaKanban\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/plugins.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaPlugins\", [\"ngRoute\"]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/projects.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaProject\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/related-tasks.coffee\n */\n\n(function() {\n var RelatedTaskAssignedToInlineEditionDirective, RelatedTaskCreateButtonDirective, RelatedTaskCreateFormDirective, RelatedTaskRowDirective, RelatedTasksDirective, debounce, module, taiga, trim;\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaRelatedTasks\", []);\n\n RelatedTaskRowDirective = function($repo, $compile, $confirm, $rootscope, $loading, $template, $translate, $emojis) {\n var link, templateEdit, templateView;\n templateView = $template.get(\"task/related-task-row.html\", true);\n templateEdit = $template.get(\"task/related-task-row-edit.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var renderEdit, renderView, saveTask;\n this.childScope = $scope.$new();\n saveTask = debounce(2000, function(task) {\n var currentLoading, promise;\n task.subject = $el.find('input').val();\n currentLoading = $loading().target($el.find('.task-name')).start();\n promise = $repo.save(task);\n promise.then((function(_this) {\n return function() {\n currentLoading.finish();\n return $rootscope.$broadcast(\"related-tasks:update\");\n };\n })(this));\n promise.then(null, (function(_this) {\n return function() {\n currentLoading.finish();\n $el.find('input').val(task.subject);\n return $confirm.notify(\"error\");\n };\n })(this));\n return promise;\n });\n renderEdit = function(task) {\n this.childScope.$destroy();\n this.childScope = $scope.$new();\n $el.off();\n $el.html($compile(templateEdit({\n task: task\n }))(childScope));\n $el.find(\".task-name input\").val(task.subject);\n $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return saveTask($model.$modelValue).then(function() {\n return renderView($model.$modelValue);\n });\n } else if (event.keyCode === 27) {\n return renderView($model.$modelValue);\n }\n });\n $el.on(\"click\", \".save-task\", function(event) {\n return saveTask($model.$modelValue).then(function() {\n return renderView($model.$modelValue);\n });\n });\n return $el.on(\"click\", \".cancel-edit\", function(event) {\n return renderView($model.$modelValue);\n });\n };\n renderView = function(task) {\n var perms;\n perms = {\n modify_task: $scope.project.my_permissions.indexOf(\"modify_task\") !== -1,\n delete_task: $scope.project.my_permissions.indexOf(\"delete_task\") !== -1\n };\n $el.html($compile(templateView({\n task: task,\n perms: perms,\n emojify: function(text) {\n return $emojis.replaceEmojiNameByHtmlImgs(_.escape(text));\n }\n }))($scope));\n $el.on(\"click\", \".edit-task\", function() {\n renderEdit($model.$modelValue);\n return $el.find('input').focus().select();\n });\n return $el.on(\"click\", \".delete-task\", function(event) {\n var message, title;\n title = $translate.instant(\"TASK.TITLE_DELETE_ACTION\");\n task = $model.$modelValue;\n message = task.subject;\n return $confirm.askOnDelete(title, message).then(function(askResponse) {\n var promise;\n promise = $repo.remove(task);\n promise.then(function() {\n askResponse.finish();\n return $scope.$emit(\"related-tasks:delete\");\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n });\n });\n });\n };\n $scope.$watch($attrs.ngModel, function(val) {\n if (!val) {\n return;\n }\n return renderView(val);\n });\n $scope.$on(\"related-tasks:assigned-to-changed\", function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n $scope.$on(\"related-tasks:status-changed\", function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgRelatedTaskRow\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\", \"$tgTemplate\", \"$translate\", \"$tgEmojis\", RelatedTaskRowDirective]);\n\n RelatedTaskCreateFormDirective = function($repo, $compile, $confirm, $tgmodel, $loading, $analytics) {\n var link, newTask;\n newTask = {\n subject: \"\",\n assigned_to: null\n };\n link = function($scope, $el, $attrs) {\n var close, createTask, render, reset;\n createTask = function(task) {\n var currentLoading, promise;\n task.subject = $el.find('input').val();\n task.assigned_to = $scope.newTask.assigned_to;\n task.status = $scope.newTask.status;\n $scope.newTask.status = $scope.project.default_task_status;\n $scope.newTask.assigned_to = null;\n currentLoading = $loading().target($el.find('.task-name')).start();\n promise = $repo.create(\"tasks\", task);\n promise.then(function() {\n $analytics.trackEvent(\"task\", \"create\", \"create task on userstory\", 1);\n currentLoading.finish();\n return $scope.$emit(\"related-tasks:add\");\n });\n promise.then(null, function() {\n $el.find('input').val(task.subject);\n currentLoading.finish();\n return $confirm.notify(\"error\");\n });\n return promise;\n };\n close = function() {\n $el.off();\n return $scope.openNewRelatedTask = false;\n };\n reset = function() {\n newTask = {\n subject: \"\",\n assigned_to: null\n };\n newTask[\"status\"] = $scope.project.default_task_status;\n newTask[\"project\"] = $scope.project.id;\n newTask[\"user_story\"] = $scope.us.id;\n return $scope.newTask = $tgmodel.make_model(\"tasks\", newTask);\n };\n render = function() {\n if ($scope.openNewRelatedTask) {\n return;\n }\n $scope.openNewRelatedTask = true;\n return $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return createTask(newTask).then(function() {\n reset();\n return $el.find('input').focus();\n });\n } else if (event.keyCode === 27) {\n return $scope.$apply(function() {\n return close();\n });\n }\n });\n };\n $scope.save = function() {\n return createTask(newTask).then(function() {\n return close();\n });\n };\n taiga.bindOnce($scope, \"us\", reset);\n $scope.$on(\"related-tasks:show-form\", function() {\n return $scope.$apply(render);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n scope: true,\n link: link,\n templateUrl: 'task/related-task-create-form.html'\n };\n };\n\n module.directive(\"tgRelatedTaskCreateForm\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", \"$tgLoading\", \"$tgAnalytics\", RelatedTaskCreateFormDirective]);\n\n RelatedTaskCreateButtonDirective = function($repo, $compile, $confirm, $tgmodel, $template) {\n var link, template;\n template = $template.get(\"common/components/add-button.html\", true);\n link = function($scope, $el, $attrs) {\n $scope.$watch(\"project\", function(val) {\n if (!val) {\n return;\n }\n $el.off();\n if ($scope.project.my_permissions.indexOf(\"add_task\") !== -1) {\n $el.html($compile(template())($scope));\n } else {\n $el.html(\"\");\n }\n return $el.on(\"click\", \".add-button\", function(event) {\n return $scope.$emit(\"related-tasks:add-new-clicked\");\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskCreateButton\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", \"$tgTemplate\", RelatedTaskCreateButtonDirective]);\n\n RelatedTasksDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var _isEditable, _isVisible, loadTasks;\n loadTasks = function() {\n return $rs.tasks.list($scope.projectId, null, $scope.usId).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n _isVisible = function() {\n if ($scope.project) {\n return $scope.project.my_permissions.indexOf(\"view_tasks\") !== -1;\n }\n return false;\n };\n _isEditable = function() {\n if ($scope.project) {\n return $scope.project.my_permissions.indexOf(\"modify_task\") !== -1;\n }\n return false;\n };\n $scope.reorderTask = function(task, newIndex) {\n return $rootscope.$broadcast('task:reorder', task, newIndex);\n };\n $scope.showRelatedTasks = function() {\n var ref;\n return _isVisible() && (_isEditable() || ((ref = $scope.tasks) != null ? ref.length : void 0));\n };\n $scope.$on(\"related-tasks:add\", function() {\n return loadTasks().then(function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n });\n $scope.$on(\"related-tasks:reordered\", function() {\n return loadTasks();\n });\n $scope.$on(\"related-tasks:delete\", function() {\n return loadTasks().then(function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n });\n $scope.$on(\"related-tasks:add-new-clicked\", function() {\n return $scope.$broadcast(\"related-tasks:show-form\");\n });\n taiga.bindOnce($scope, \"us\", function(val) {\n return loadTasks();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTasks\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", RelatedTasksDirective]);\n\n RelatedTaskAssignedToInlineEditionDirective = function($repo, $rootscope, $translate, avatarService) {\n var link, template;\n template = _.template(\"\\\" src=\\\"<%- imgurl %>\\\" alt=\\\"<%- name %>\\\"/>\\n
    <%- name %>
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, autoSave, notAutoSave, task, updateRelatedTask;\n updateRelatedTask = function(task) {\n var avatar, ctx, member;\n ctx = {\n name: $translate.instant(\"COMMON.ASSIGNED_TO.NOT_ASSIGNED\")\n };\n member = $scope.usersById[task.assigned_to];\n avatar = avatarService.getAvatar(member);\n ctx.imgurl = avatar.url;\n ctx.bg = avatar.bg;\n if (member) {\n ctx.name = member.full_name_display;\n }\n $el.find(\".avatar\").html(template(ctx));\n return $el.find(\".task-assignedto\").attr('title', ctx.name);\n };\n $ctrl = $el.controller();\n task = $scope.$eval($attrs.tgRelatedTaskAssignedToInlineEdition);\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n autoSave = !notAutoSave;\n $scope.$watch($attrs.tgRelatedTaskAssignedToInlineEdition, function() {\n task = $scope.$eval($attrs.tgRelatedTaskAssignedToInlineEdition);\n return updateRelatedTask(task);\n });\n updateRelatedTask(task);\n $el.on(\"click\", \".task-assignedto\", function(event) {\n return $rootscope.$broadcast(\"assigned-to:add\", task);\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_task\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"assigned-to:added\", debounce(2000, (function(_this) {\n return function(ctx, userId, updatedRelatedTask) {\n if (updatedRelatedTask.id === task.id) {\n updatedRelatedTask.assigned_to = userId;\n if (autoSave) {\n $repo.save(updatedRelatedTask).then(function() {\n return $scope.$emit(\"related-tasks:assigned-to-changed\");\n });\n }\n return updateRelatedTask(updatedRelatedTask);\n }\n };\n })(this)));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\", \"$translate\", \"tgAvatarService\", RelatedTaskAssignedToInlineEditionDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources.coffee\n */\n\n(function() {\n var ResourcesService, initResources, initUrls, module, taiga, urls,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n ResourcesService = (function(superClass) {\n extend(ResourcesService, superClass);\n\n function ResourcesService() {\n return ResourcesService.__super__.constructor.apply(this, arguments);\n }\n\n return ResourcesService;\n\n })(taiga.Service);\n\n urls = {\n \"auth\": \"/auth\",\n \"auth-register\": \"/auth/register\",\n \"invitations\": \"/invitations\",\n \"users\": \"/users\",\n \"by_username\": \"/users/by_username\",\n \"users-password-recovery\": \"/users/password_recovery\",\n \"users-change-password-from-recovery\": \"/users/change_password_from_recovery\",\n \"users-change-password\": \"/users/change_password\",\n \"users-change-email\": \"/users/change_email\",\n \"users-cancel-account\": \"/users/cancel\",\n \"users-export\": \"/users/export\",\n \"user-stats\": \"/users/%s/stats\",\n \"user-liked\": \"/users/%s/liked\",\n \"user-voted\": \"/users/%s/voted\",\n \"user-watched\": \"/users/%s/watched\",\n \"user-contacts\": \"/users/%s/contacts\",\n \"user-me\": \"/users/me\",\n \"permissions\": \"/permissions\",\n \"notify-policies\": \"/notify-policies\",\n \"notifications\": \"/web-notifications\",\n \"user-project-settings\": \"/user-project-settings\",\n \"user-storage\": \"/user-storage\",\n \"memberships\": \"/memberships\",\n \"bulk-create-memberships\": \"/memberships/bulk_create\",\n \"roles\": \"/roles\",\n \"permissions\": \"/permissions\",\n \"resolver\": \"/resolver\",\n \"projects\": \"/projects\",\n \"project-templates\": \"/project-templates\",\n \"project-modules\": \"/projects/%s/modules\",\n \"bulk-update-projects-order\": \"/projects/bulk_update_order\",\n \"project-like\": \"/projects/%s/like\",\n \"project-unlike\": \"/projects/%s/unlike\",\n \"project-watch\": \"/projects/%s/watch\",\n \"project-unwatch\": \"/projects/%s/unwatch\",\n \"project-contact\": \"contact\",\n \"project-transfer-validate-token\": \"/projects/%s/transfer_validate_token\",\n \"project-transfer-accept\": \"/projects/%s/transfer_accept\",\n \"project-transfer-reject\": \"/projects/%s/transfer_reject\",\n \"project-transfer-request\": \"/projects/%s/transfer_request\",\n \"project-transfer-start\": \"/projects/%s/transfer_start\",\n \"epic-statuses\": \"/epic-statuses\",\n \"userstory-statuses\": \"/userstory-statuses\",\n \"userstory-due-dates\": \"/userstory-due-dates\",\n \"userstory-due-dates-create-default\": \"/userstory-due-dates/create_default\",\n \"points\": \"/points\",\n \"task-statuses\": \"/task-statuses\",\n \"task-due-dates\": \"/task-due-dates\",\n \"task-due-dates-create-default\": \"/task-due-dates/create_default\",\n \"issue-statuses\": \"/issue-statuses\",\n \"issue-due-dates\": \"/issue-due-dates\",\n \"issue-due-dates-create-default\": \"/issue-due-dates/create_default\",\n \"issue-types\": \"/issue-types\",\n \"priorities\": \"/priorities\",\n \"severities\": \"/severities\",\n \"milestones\": \"/milestones\",\n \"move-userstories-to-milestone\": \"/milestones/%s/move_userstories_to_sprint\",\n \"move-tasks-to-milestone\": \"/milestones/%s/move_tasks_to_sprint\",\n \"move-issues-to-milestone\": \"/milestones/%s/move_issues_to_sprint\",\n \"epics\": \"/epics\",\n \"epic-upvote\": \"/epics/%s/upvote\",\n \"epic-downvote\": \"/epics/%s/downvote\",\n \"epic-watch\": \"/epics/%s/watch\",\n \"epic-unwatch\": \"/epics/%s/unwatch\",\n \"epic-related-userstories\": \"/epics/%s/related_userstories\",\n \"epic-related-userstories-bulk-create\": \"/epics/%s/related_userstories/bulk_create\",\n \"userstories\": \"/userstories\",\n \"bulk-create-us\": \"/userstories/bulk_create\",\n \"bulk-update-us-backlog-order\": \"/userstories/bulk_update_backlog_order\",\n \"bulk-update-us-milestone\": \"/userstories/bulk_update_milestone\",\n \"bulk-update-us-miles-order\": \"/userstories/bulk_update_sprint_order\",\n \"bulk-update-us-kanban-order\": \"/userstories/bulk_update_kanban_order\",\n \"userstories-filters\": \"/userstories/filters_data\",\n \"userstory-upvote\": \"/userstories/%s/upvote\",\n \"userstory-downvote\": \"/userstories/%s/downvote\",\n \"userstory-watch\": \"/userstories/%s/watch\",\n \"userstory-unwatch\": \"/userstories/%s/unwatch\",\n \"tasks\": \"/tasks\",\n \"bulk-create-tasks\": \"/tasks/bulk_create\",\n \"bulk-update-task-taskboard-order\": \"/tasks/bulk_update_taskboard_order\",\n \"bulk-update-task-milestone\": \"/tasks/bulk_update_milestone\",\n \"task-upvote\": \"/tasks/%s/upvote\",\n \"task-downvote\": \"/tasks/%s/downvote\",\n \"task-watch\": \"/tasks/%s/watch\",\n \"task-unwatch\": \"/tasks/%s/unwatch\",\n \"task-filters\": \"/tasks/filters_data\",\n \"issues\": \"/issues\",\n \"bulk-create-issues\": \"/issues/bulk_create\",\n \"bulk-update-issue-milestone\": \"/issues/bulk_update_milestone\",\n \"issues-filters\": \"/issues/filters_data\",\n \"issue-upvote\": \"/issues/%s/upvote\",\n \"issue-downvote\": \"/issues/%s/downvote\",\n \"issue-watch\": \"/issues/%s/watch\",\n \"issue-unwatch\": \"/issues/%s/unwatch\",\n \"wiki\": \"/wiki\",\n \"wiki-restore\": \"/wiki/%s/restore\",\n \"wiki-links\": \"/wiki-links\",\n \"history/epic\": \"/history/epic\",\n \"history/us\": \"/history/userstory\",\n \"history/issue\": \"/history/issue\",\n \"history/task\": \"/history/task\",\n \"history/wiki\": \"/history/wiki\",\n \"attachments/epic\": \"/epics/attachments\",\n \"attachments/us\": \"/userstories/attachments\",\n \"attachments/issue\": \"/issues/attachments\",\n \"attachments/task\": \"/tasks/attachments\",\n \"attachments/wiki_page\": \"/wiki/attachments\",\n \"custom-attributes/epic\": \"/epic-custom-attributes\",\n \"custom-attributes/userstory\": \"/userstory-custom-attributes\",\n \"custom-attributes/task\": \"/task-custom-attributes\",\n \"custom-attributes/issue\": \"/issue-custom-attributes\",\n \"custom-attributes-values/epic\": \"/epics/custom-attributes-values\",\n \"custom-attributes-values/userstory\": \"/userstories/custom-attributes-values\",\n \"custom-attributes-values/task\": \"/tasks/custom-attributes-values\",\n \"custom-attributes-values/issue\": \"/issues/custom-attributes-values\",\n \"webhooks\": \"/webhooks\",\n \"webhooks-test\": \"/webhooks/%s/test\",\n \"webhooklogs\": \"/webhooklogs\",\n \"webhooklogs-resend\": \"/webhooklogs/%s/resend\",\n \"epics-csv\": \"/epics/csv?uuid=%s\",\n \"userstories-csv\": \"/userstories/csv?uuid=%s\",\n \"tasks-csv\": \"/tasks/csv?uuid=%s\",\n \"issues-csv\": \"/issues/csv?uuid=%s\",\n \"timeline-profile\": \"/timeline/profile\",\n \"timeline-user\": \"/timeline/user\",\n \"timeline-project\": \"/timeline/project\",\n \"search\": \"/search\",\n \"exporter\": \"/exporter\",\n \"importer\": \"/importer/load_dump\",\n \"feedback\": \"/feedback\",\n \"locales\": \"/locales\",\n \"applications\": \"/applications\",\n \"application-tokens\": \"/application-tokens\",\n \"stats-discover\": \"/stats/discover\",\n \"importers-trello-auth-url\": \"/importers/trello/auth_url\",\n \"importers-trello-authorize\": \"/importers/trello/authorize\",\n \"importers-trello-list-projects\": \"/importers/trello/list_projects\",\n \"importers-trello-list-users\": \"/importers/trello/list_users\",\n \"importers-trello-import-project\": \"/importers/trello/import_project\",\n \"importers-jira-auth-url\": \"/importers/jira/auth_url\",\n \"importers-jira-authorize\": \"/importers/jira/authorize\",\n \"importers-jira-list-projects\": \"/importers/jira/list_projects\",\n \"importers-jira-list-users\": \"/importers/jira/list_users\",\n \"importers-jira-import-project\": \"/importers/jira/import_project\",\n \"importers-github-auth-url\": \"/importers/github/auth_url\",\n \"importers-github-authorize\": \"/importers/github/authorize\",\n \"importers-github-list-projects\": \"/importers/github/list_projects\",\n \"importers-github-list-users\": \"/importers/github/list_users\",\n \"importers-github-import-project\": \"/importers/github/import_project\",\n \"importers-asana-auth-url\": \"/importers/asana/auth_url\",\n \"importers-asana-authorize\": \"/importers/asana/authorize\",\n \"importers-asana-list-projects\": \"/importers/asana/list_projects\",\n \"importers-asana-list-users\": \"/importers/asana/list_users\",\n \"importers-asana-import-project\": \"/importers/asana/import_project\"\n };\n\n initUrls = function($log, $urls) {\n $log.debug(\"Initialize api urls\");\n return $urls.update(urls);\n };\n\n initResources = function($log, $rs) {\n var i, len, provider, providers, results;\n $log.debug(\"Initialize resources\");\n providers = _.toArray(arguments).slice(2);\n results = [];\n for (i = 0, len = providers.length; i < len; i++) {\n provider = providers[i];\n results.push(provider($rs));\n }\n return results;\n };\n\n module = angular.module(\"taigaResources\", [\"taigaBase\"]);\n\n module.service(\"$tgResources\", ResourcesService);\n\n module.run([\"$log\", \"$tgUrls\", initUrls]);\n\n module.run([\"$log\", \"$tgResources\", \"$tgProjectsResourcesProvider\", \"$tgCustomAttributesResourcesProvider\", \"$tgCustomAttributesValuesResourcesProvider\", \"$tgMembershipsResourcesProvider\", \"$tgNotifyPoliciesResourcesProvider\", \"$tgInvitationsResourcesProvider\", \"$tgRolesResourcesProvider\", \"$tgUserProjectSettingsResourcesProvider\", \"$tgUserSettingsResourcesProvider\", \"$tgSprintsResourcesProvider\", \"$tgEpicsResourcesProvider\", \"$tgUserstoriesResourcesProvider\", \"$tgTasksResourcesProvider\", \"$tgIssuesResourcesProvider\", \"$tgWikiResourcesProvider\", \"$tgSearchResourcesProvider\", \"$tgMdRenderResourcesProvider\", \"$tgHistoryResourcesProvider\", \"$tgKanbanResourcesProvider\", \"$tgModulesResourcesProvider\", \"$tgWebhooksResourcesProvider\", \"$tgWebhookLogsResourcesProvider\", \"$tgLocalesResourcesProvider\", \"$tgUsersResourcesProvider\", initResources]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/search.coffee\n */\n\n(function() {\n var SearchBoxDirective, SearchController, SearchDirective, bindOnce, debounce, debounceLeading, groupBy, mixOf, module, taiga, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n mixOf = this.taiga.mixOf;\n\n debounceLeading = this.taiga.debounceLeading;\n\n trim = this.taiga.trim;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaSearch\", []);\n\n SearchController = (function(superClass) {\n extend(SearchController, superClass);\n\n SearchController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"tgAppMetaService\", \"$tgNavUrls\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function SearchController(scope1, repo, rs, params, q, location, appMetaService, navUrls, translate, errorHandlingService, projectService1) {\n var description, loadSearchData, title;\n this.scope = scope1;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService1;\n this.scope.sectionName = \"Search\";\n this.loadInitialData();\n title = this.translate.instant(\"SEARCH.PAGE_TITLE\", {\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"SEARCH.PAGE_DESCRIPTION\", {\n projectName: this.scope.project.name,\n projectDescription: this.scope.project.description\n });\n this.appMetaService.setAll(title, description);\n this.scope.searchTerm = null;\n loadSearchData = debounceLeading(100, (function(_this) {\n return function(t) {\n return _this.loadSearchData(t);\n };\n })(this));\n bindOnce(this.scope, \"projectId\", (function(_this) {\n return function(projectId) {\n if (!_this.scope.searchResults && _this.scope.searchTerm) {\n return _this.loadSearchData();\n }\n };\n })(this));\n this.scope.$watch(\"searchTerm\", (function(_this) {\n return function(term) {\n if (term !== void 0 && _this.scope.projectId) {\n return _this.loadSearchData(term);\n }\n };\n })(this));\n }\n\n SearchController.prototype.loadFilters = function() {\n var defered;\n defered = this.q.defer();\n defered.resolve();\n return defered.promise;\n };\n\n SearchController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.epicStatusById = groupBy(project.epic_statuses, function(x) {\n return x.id;\n });\n this.scope.issueStatusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n this.scope.taskStatusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n return project;\n };\n\n SearchController.prototype.loadSearchData = function(term) {\n if (term == null) {\n term = \"\";\n }\n this.scope.loading = true;\n return this._loadSearchData(term).then((function(_this) {\n return function(data) {\n _this.scope.searchResults = data;\n return _this.scope.loading = false;\n };\n })(this));\n };\n\n SearchController.prototype._loadSearchData = function(term) {\n if (term == null) {\n term = \"\";\n }\n if (this._promise) {\n this._promise.abort();\n }\n this._promise = this.rs.search[\"do\"](this.scope.projectId, term);\n return this._promise;\n };\n\n SearchController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.scope.projectId = project.id;\n return this.fillUsersAndRoles(project.members, project.roles);\n };\n\n return SearchController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"SearchController\", SearchController);\n\n SearchBoxDirective = function(projectService, $lightboxService, $navurls, $location, $route) {\n var link;\n link = function($scope, $el, $attrs) {\n var openLightbox, project, submit;\n project = null;\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var form, text, url;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n text = $el.find(\"#search-text\").val();\n url = $navurls.resolve(\"project-search\", {\n project: project.get(\"slug\")\n });\n return $scope.$apply(function() {\n $lightboxService.close($el);\n $location.path(url);\n $location.search(\"text\", text).path(url);\n return $route.reload();\n });\n };\n })(this));\n openLightbox = function() {\n project = projectService.project;\n return $lightboxService.open($el).then(function() {\n return $el.find(\"#search-text\").focus();\n });\n };\n $el.on(\"submit\", \"form\", submit);\n return openLightbox();\n };\n return {\n templateUrl: \"search/lightbox-search.html\",\n link: link\n };\n };\n\n SearchBoxDirective.$inject = [\"tgProjectService\", \"lightboxService\", \"$tgNavUrls\", \"$tgLocation\", \"$route\"];\n\n module.directive(\"tgSearchBox\", SearchBoxDirective);\n\n SearchDirective = function($log, $compile, $templatecache, $routeparams, $location, $analytics) {\n var link, linkTable;\n linkTable = function($scope, $el, $attrs, $ctrl) {\n var activeSectionName, applyAutoTab, currentSearchResults, getActiveSection, markSectionTabActive, renderFilterTabs, renderTableContent, tabsDom, templates;\n applyAutoTab = true;\n activeSectionName = \"userstories\";\n tabsDom = $el.find(\".search-filter\");\n currentSearchResults = null;\n getActiveSection = function(data) {\n var i, len, maxVal, name, ref, selectedSection, value;\n maxVal = 0;\n selectedSection = {};\n selectedSection.name = \"userstories\";\n selectedSection.value = [];\n if (!applyAutoTab) {\n selectedSection.name = activeSectionName;\n selectedSection.value = data[activeSectionName];\n return selectedSection;\n }\n if (data) {\n ref = [\"userstories\", \"epics\", \"issues\", \"tasks\", \"wikipages\"];\n for (i = 0, len = ref.length; i < len; i++) {\n name = ref[i];\n value = data[name];\n if (value.length > maxVal) {\n maxVal = value.length;\n selectedSection.name = name;\n selectedSection.value = value;\n break;\n }\n }\n }\n if (maxVal === 0) {\n return selectedSection;\n }\n return selectedSection;\n };\n renderFilterTabs = function(data) {\n var name, results, value;\n results = [];\n for (name in data) {\n value = data[name];\n tabsDom.find(\"li.\" + name).show();\n results.push(tabsDom.find(\"li.\" + name + \" .num\").html(value.length));\n }\n return results;\n };\n markSectionTabActive = function(section) {\n tabsDom.find(\"a.active\").removeClass(\"active\");\n tabsDom.find(\"li.\" + section.name + \" a\").addClass(\"active\");\n applyAutoTab = false;\n return activeSectionName = section.name;\n };\n templates = {\n epics: $templatecache.get(\"search-epics\"),\n issues: $templatecache.get(\"search-issues\"),\n tasks: $templatecache.get(\"search-tasks\"),\n userstories: $templatecache.get(\"search-userstories\"),\n wikipages: $templatecache.get(\"search-wikipages\")\n };\n renderTableContent = function(section) {\n var element, oldElements, oldScope, scope, template;\n oldElements = $el.find(\".search-result-table\").children();\n oldScope = oldElements.scope();\n if (oldScope) {\n oldScope.$destroy();\n oldElements.remove();\n }\n scope = $scope.$new();\n scope[section.name] = section.value;\n template = angular.element.parseHTML(trim(templates[section.name]));\n element = $compile(template)(scope);\n return $el.find(\".search-result-table\").html(element);\n };\n $scope.$watch(\"searchResults\", function(data) {\n var activeSection;\n currentSearchResults = data;\n if (!currentSearchResults) {\n return;\n }\n activeSection = getActiveSection(data);\n renderFilterTabs(data);\n renderTableContent(activeSection);\n return markSectionTabActive(activeSection);\n });\n $scope.$watch(\"searchTerm\", function(searchTerm) {\n if (searchTerm !== void 0) {\n $location.search(\"text\", searchTerm);\n }\n return $analytics.trackPage($location.url(), \"Search\");\n });\n return $el.on(\"click\", \".search-filter li > a\", function(event) {\n var section, sectionData, sectionName, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n sectionName = target.parent().data(\"name\");\n sectionData = !currentSearchResults ? [] : currentSearchResults[sectionName];\n section = {\n name: sectionName,\n value: sectionData\n };\n return $scope.$apply(function() {\n renderTableContent(section);\n return markSectionTabActive(section);\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, searchText;\n $ctrl = $el.controller();\n linkTable($scope, $el, $attrs, $ctrl);\n searchText = $routeparams.text;\n return $scope.$watch(\"projectId\", function(projectId) {\n if (projectId != null) {\n return $scope.searchTerm = searchText;\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSearch\", [\"$log\", \"$compile\", \"$templateCache\", \"$routeParams\", \"$tgLocation\", \"$tgAnalytics\", SearchDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTaskboard\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/tasks.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTasks\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/team.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTeam\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaUserSettings\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/userstories.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaUserStories\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaWiki\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/analytics.coffee\n */\n\n(function() {\n var AnalyticsService, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n AnalyticsService = (function(superClass) {\n extend(AnalyticsService, superClass);\n\n AnalyticsService.$inject = [\"$rootScope\", \"$log\", \"$tgConfig\", \"$window\", \"$document\", \"$location\"];\n\n function AnalyticsService(rootscope, log, config, win, doc, location) {\n var conf;\n this.rootscope = rootscope;\n this.log = log;\n this.config = config;\n this.win = win;\n this.doc = doc;\n this.location = location;\n this.initialized = false;\n conf = this.config.get(\"analytics\", {});\n this.accountId = conf.accountId;\n this.pageEvent = conf.pageEvent || \"$routeChangeSuccess\";\n this.trackRoutes = conf.trackRoutes || true;\n this.ignoreFirstPageLoad = conf.ignoreFirstPageLoad || false;\n }\n\n AnalyticsService.prototype.initialize = function() {\n if (!this.accountId) {\n this.log.debug(\"Analytics: no acount id provided. Disabling.\");\n return;\n }\n this.injectAnalytics();\n this.win.ga(\"create\", this.accountId, \"auto\");\n this.win.ga(\"require\", \"ec\");\n this.win.ga(\"require\", \"displayfeatures\");\n if (this.trackRoutes && (!this.ignoreFirstPageLoad)) {\n this.win.ga(\"send\", \"pageview\", this.getUrl());\n }\n if (this.trackRoutes) {\n this.rootscope.$on(this.pageEvent, (function(_this) {\n return function() {\n return _this.trackPage(_this.getUrl(), \"Taiga\");\n };\n })(this));\n }\n this.initialized = true;\n return this.setUserId();\n };\n\n AnalyticsService.prototype.setUserId = function() {\n var ref, ref1;\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n return this.win.ga('set', 'userId', (ref = this.rootscope) != null ? (ref1 = ref.user) != null ? ref1.uuid : void 0 : void 0);\n };\n\n AnalyticsService.prototype.getUrl = function() {\n return this.location.path();\n };\n\n AnalyticsService.prototype.injectAnalytics = function() {\n var fn;\n fn = (function(i,s,o,g,r,a,m){i[\"GoogleAnalyticsObject\"]=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments);},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m);});\n return fn(window, document, \"script\", \"//www.google-analytics.com/analytics.js\", \"ga\");\n };\n\n AnalyticsService.prototype.trackPage = function(url, title) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n title = title || this.doc[0].title;\n return this.win.ga(\"send\", \"pageview\", {\n \"page\": url,\n \"title\": title\n });\n };\n\n AnalyticsService.prototype.trackEvent = function(category, action, label, value) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n return this.win.ga(\"send\", \"event\", category, action, label, value);\n };\n\n AnalyticsService.prototype.ecViewPlan = function(plan) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan.plan_id,\n 'name': plan.name,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'detail');\n return this.trackEvent(\"ecommerce\", \"view-product-detail\", plan.name, plan.plan_id);\n };\n\n AnalyticsService.prototype.ecClickPlan = function(plan) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan.plan_id,\n 'name': plan.name,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'click');\n return this.trackEvent(\"ecommerce\", \"click-product\", plan.name, plan.plan_id);\n };\n\n AnalyticsService.prototype.ecListPlans = function(arg, page) {\n var i, len, plan, plans, position;\n plans = arg[0];\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n position = 1;\n for (i = 0, len = plans.length; i < len; i++) {\n plan = plans[i];\n this.win.ga('ec:addImpression', {\n 'id': plan.plan_id,\n 'name': plan.name,\n 'list': page,\n 'position': position\n });\n position++;\n }\n return this.trackEvent(\"ecommerce\", \"list-plans\");\n };\n\n AnalyticsService.prototype.ecAddToCart = function(plan_id, plan_name, plan_price) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan_id,\n 'name': plan_name,\n 'price': plan_price,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'add');\n return this.trackEvent('ecommerce', 'add-to-cart', 'Collect Payment Info', null);\n };\n\n AnalyticsService.prototype.ecConfirmChange = function(plan_id, plan_name, plan_price) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan_id,\n 'name': plan_name,\n 'price': plan_price,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'checkout', {\n 'step': 1\n });\n return this.trackEvent(\"ecommerce\", \"start-checkout\", \"start\", 1);\n };\n\n AnalyticsService.prototype.ecPurchase = function(plan_id, plan_name, plan_price) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan_id,\n 'name': plan_name,\n 'price': plan_price,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'checkout', {\n 'step': 2\n });\n this.trackEvent(\"ecommerce\", \"end-checkout\", \"end\", 2);\n this.win.ga('ec:addProduct', {\n 'id': plan_id,\n 'name': plan_name,\n 'price': plan_price,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'purchase', {\n 'id': plan_id,\n 'revenue': plan_price\n });\n return this.trackEvent('ecommerce', 'checkout', 'Plan checkout', null);\n };\n\n return AnalyticsService;\n\n })(taiga.Service);\n\n module.service(\"$tgAnalytics\", AnalyticsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/bind-scope.coffee\n */\n\n(function() {\n var BindScope, module;\n\n module = angular.module(\"taigaCommon\");\n\n BindScope = function(config) {\n var link;\n if (!config.debugInfo) {\n jQuery.fn.scope = function() {\n return this.data('scope');\n };\n }\n link = function($scope, $el) {\n if (!config.debugInfo) {\n return $el.data('scope', $scope).addClass('tg-scope');\n }\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBindScope\", [\"$tgConfig\", BindScope]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/compile-html.directive.coffee\n */\n\n(function() {\n var CompileHtmlDirective;\n\n CompileHtmlDirective = function($compile) {\n var link;\n link = function(scope, element, attrs) {\n return scope.$watch(attrs.tgCompileHtml, function(newValue, oldValue) {\n element.html(newValue);\n return $compile(element.contents())(scope);\n });\n };\n return {\n link: link\n };\n };\n\n CompileHtmlDirective.$inject = [\"$compile\"];\n\n angular.module(\"taigaCommon\").directive(\"tgCompileHtml\", CompileHtmlDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/components.coffee\n */\n\n(function() {\n var BlockButtonDirective, CreatedByDisplayDirective, DateRangeDirective, DateSelectorDirective, DeleteButtonDirective, ListItemAssignedtoDirective, ListItemEpicStatusDirective, ListItemIssueStatusDirective, ListItemPriorityDirective, ListItemSeverityDirective, ListItemTaskStatusDirective, ListItemTypeDirective, ListItemUsStatusDirective, SprintProgressBarDirective, TgMainTitleDirective, TgProgressBarDirective, UserDisplayDirective, WatchersDirective, bindOnce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaCommon\");\n\n DateRangeDirective = function($translate) {\n var link, renderRange;\n renderRange = function($el, first, second) {\n var endDate, initDate, prettyDate;\n prettyDate = $translate.instant(\"BACKLOG.SPRINTS.DATE\");\n initDate = moment(first).format(prettyDate);\n endDate = moment(second).format(prettyDate);\n return $el.html(initDate + \"-\" + endDate);\n };\n link = function($scope, $el, $attrs) {\n var first, ref, second;\n ref = $attrs.tgDateRange.split(\",\"), first = ref[0], second = ref[1];\n return bindOnce($scope, first, function(valFirst) {\n return bindOnce($scope, second, function(valSecond) {\n return renderRange($el, valFirst, valSecond);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgDateRange\", [\"$translate\", DateRangeDirective]);\n\n DateSelectorDirective = function($rootscope, datePickerConfigService) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var initialize, selectedDate, unbind;\n selectedDate = null;\n initialize = function() {\n var datePickerConfig;\n datePickerConfig = datePickerConfigService.get();\n _.merge(datePickerConfig, {\n field: $el[0]\n });\n return $el.picker = new Pikaday(datePickerConfig);\n };\n unbind = $rootscope.$on(\"$translateChangeEnd\", (function(_this) {\n return function(ctx) {\n if ($el.picker) {\n $el.picker.destroy();\n }\n return initialize();\n };\n })(this));\n $attrs.$observe(\"pickerValue\", function(val) {\n $el.val(val);\n if (val != null) {\n if ($el.picker) {\n $el.picker.destroy();\n }\n initialize();\n }\n return $el.picker.setDate(val);\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n unbind();\n return $el.picker.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgDateSelector\", [\"$rootScope\", \"tgDatePickerConfigService\", DateSelectorDirective]);\n\n SprintProgressBarDirective = function() {\n var link, renderProgress;\n renderProgress = function($el, percentage, visual_percentage) {\n if ($el.hasClass(\".current-progress\")) {\n return $el.css(\"width\", percentage + \"%\");\n } else {\n $el.find(\".current-progress\").css(\"width\", visual_percentage + \"%\");\n return $el.find(\".number\").html(percentage + \" %\");\n }\n };\n link = function($scope, $el, $attrs) {\n bindOnce($scope, $attrs.tgSprintProgressbar, function(sprint) {\n var closedPoints, percentage, totalPoints, visual_percentage;\n closedPoints = sprint.closed_points;\n totalPoints = sprint.total_points;\n percentage = 0;\n if (totalPoints !== 0) {\n percentage = Math.round(100 * (closedPoints / totalPoints));\n }\n visual_percentage = 0;\n if (totalPoints !== 0) {\n visual_percentage = Math.round(98 * (closedPoints / totalPoints));\n }\n return renderProgress($el, percentage, visual_percentage);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSprintProgressbar\", SprintProgressBarDirective);\n\n CreatedByDisplayDirective = function($template, $compile, $translate, $navUrls, avatarService) {\n var link;\n link = function($scope, $el, $attrs) {\n bindOnce($scope, $attrs.ngModel, function(model) {\n var avatar, ref;\n if (model != null) {\n avatar = avatarService.getAvatar(model.owner_extra_info);\n $scope.owner = model.owner_extra_info || {\n full_name_display: $translate.instant(\"COMMON.EXTERNAL_USER\")\n };\n $scope.owner.avatar = avatar.url;\n $scope.owner.bg = avatar.bg;\n $scope.url = ((ref = $scope.owner) != null ? ref.is_active : void 0) ? $navUrls.resolve(\"user-profile\", {\n username: $scope.owner.username\n }) : \"\";\n return $scope.date = moment(model.created_date).format($translate.instant(\"COMMON.DATETIME\"));\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n scope: true,\n templateUrl: \"common/components/created-by.html\"\n };\n };\n\n module.directive(\"tgCreatedByDisplay\", [\"$tgTemplate\", \"$compile\", \"$translate\", \"$tgNavUrls\", \"tgAvatarService\", CreatedByDisplayDirective]);\n\n UserDisplayDirective = function($template, $compile, $translate, $navUrls, avatarService) {\n var link;\n link = function($scope, $el, $attrs) {\n var avatar, id;\n id = $attrs.tgUserId;\n $scope.user = $scope.usersById[id] || {\n full_name_display: $translate.instant(\"COMMON.EXTERNAL_USER\")\n };\n avatar = avatarService.getAvatar($scope.usersById[id] || null);\n $scope.user.avatar = avatar.url;\n $scope.user.bg = avatar.bg;\n $scope.url = $scope.user.is_active ? $navUrls.resolve(\"user-profile\", {\n username: $scope.user.username\n }) : \"\";\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n scope: true,\n templateUrl: \"common/components/user-display.html\"\n };\n };\n\n module.directive(\"tgUserDisplay\", [\"$tgTemplate\", \"$compile\", \"$translate\", \"$tgNavUrls\", \"tgAvatarService\", UserDisplayDirective]);\n\n WatchersDirective = function($rootscope, $confirm, $repo, $modelTransform, $template, $compile, $translate) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var deleteWatcher, isEditable, renderWatchers, save;\n isEditable = function() {\n var ref, ref1;\n return ((ref = $scope.project) != null ? (ref1 = ref.my_permissions) != null ? ref1.indexOf($attrs.requiredPerm) : void 0 : void 0) !== -1;\n };\n save = function(watchers) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.watchers = watchers;\n return item;\n });\n transform.then(function() {\n watchers = _.map(watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n renderWatchers(watchers);\n return $rootscope.$broadcast(\"object:updated\");\n });\n return transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n };\n deleteWatcher = function(watcherIds) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.watchers = watcherIds;\n return item;\n });\n transform.then(function() {\n var item, watchers;\n item = $modelTransform.getObj();\n watchers = _.map(item.watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n renderWatchers(watchers);\n return $rootscope.$broadcast(\"object:updated\");\n });\n return transform.then(null, function() {\n item.revert();\n return $confirm.notify(\"error\");\n });\n };\n renderWatchers = function(watchers) {\n $scope.watchers = watchers;\n return $scope.isEditable = isEditable();\n };\n $el.on(\"click\", \".js-delete-watcher\", function(event) {\n var message, target, title, watcherId;\n event.preventDefault();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n watcherId = target.data(\"watcher-id\");\n title = $translate.instant(\"COMMON.WATCHERS.TITLE_LIGHTBOX_DELETE_WARTCHER\");\n message = $scope.usersById[watcherId].full_name_display;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var watcherIds;\n askResponse.finish();\n watcherIds = _.clone($model.$modelValue.watchers, false);\n watcherIds = _.pull(watcherIds, watcherId);\n return deleteWatcher(watcherIds);\n };\n })(this));\n });\n $scope.$on(\"watcher:added\", function(ctx, watcherId) {\n var watchers;\n watchers = _.clone($model.$modelValue.watchers, false);\n watchers.push(watcherId);\n watchers = _.uniq(watchers);\n return save(watchers);\n });\n $scope.$watch($attrs.ngModel, function(item) {\n var watchers;\n if (item == null) {\n return;\n }\n watchers = _.map(item.watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n watchers = _.filter(watchers, function(it) {\n return !!it;\n });\n return renderWatchers(watchers);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n scope: true,\n templateUrl: \"common/components/watchers.html\",\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgWatchers\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", \"$translate\", WatchersDirective]);\n\n BlockButtonDirective = function($rootscope, $loading, $template) {\n var link, template;\n template = $template.get(\"common/components/block-button.html\");\n link = function($scope, $el, $attrs, $model) {\n var isEditable;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n $scope.$watch($attrs.ngModel, function(item) {\n if (!item) {\n return;\n }\n if (isEditable()) {\n $el.find('.item-block').addClass('editable');\n }\n if (item.is_blocked) {\n $el.find('.item-block').removeClass('is-active');\n return $el.find('.item-unblock').addClass('is-active');\n } else {\n $el.find('.item-block').addClass('is-active');\n return $el.find('.item-unblock').removeClass('is-active');\n }\n });\n $el.on(\"click\", \".item-block\", function(event) {\n event.preventDefault();\n return $rootscope.$broadcast(\"block\", $model.$modelValue);\n });\n $el.on(\"click\", \".item-unblock\", function(event) {\n var currentLoading, finish;\n event.preventDefault();\n currentLoading = $loading().target($el.find(\".item-unblock\")).start();\n finish = function() {\n return currentLoading.finish();\n };\n return $rootscope.$broadcast(\"unblock\", $model.$modelValue, finish);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgBlockButton\", [\"$rootScope\", \"$tgLoading\", \"$tgTemplate\", BlockButtonDirective]);\n\n DeleteButtonDirective = function($log, $repo, $confirm, $location, $template) {\n var link, template;\n template = $template.get(\"common/components/delete-button.html\");\n link = function($scope, $el, $attrs, $model) {\n if (!$attrs.onDeleteGoToUrl) {\n return $log.error(\"DeleteButtonDirective requires on-delete-go-to-url set in scope.\");\n }\n if (!$attrs.onDeleteTitle) {\n return $log.error(\"DeleteButtonDirective requires on-delete-title set in scope.\");\n }\n $el.on(\"click\", \".button-delete\", function(event) {\n var subtitle, title;\n title = $attrs.onDeleteTitle;\n subtitle = $model.$modelValue.subject;\n return $confirm.askOnDelete(title, subtitle).then((function(_this) {\n return function(askResponse) {\n var promise;\n promise = $repo.remove($model.$modelValue);\n promise.then(function() {\n var url;\n askResponse.finish();\n url = $scope.$eval($attrs.onDeleteGoToUrl);\n return $location.path(url);\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgDeleteButton\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgTemplate\", DeleteButtonDirective]);\n\n ListItemEpicStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var epic;\n epic = $scope.$eval($attrs.tgListitemEpicStatus);\n return bindOnce($scope, \"epicStatusById\", function(epicStatusById) {\n return $el.html(epicStatusById[epic.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemEpicStatus\", ListItemEpicStatusDirective);\n\n ListItemUsStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var us;\n us = $scope.$eval($attrs.tgListitemUsStatus);\n return bindOnce($scope, \"usStatusById\", function(usStatusById) {\n return $el.html(usStatusById[us.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemUsStatus\", ListItemUsStatusDirective);\n\n ListItemTaskStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var task;\n task = $scope.$eval($attrs.tgListitemTaskStatus);\n return bindOnce($scope, \"taskStatusById\", function(taskStatusById) {\n return $el.html(taskStatusById[task.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemTaskStatus\", ListItemTaskStatusDirective);\n\n ListItemAssignedtoDirective = function($template, $translate, avatarService) {\n var link, template;\n template = $template.get(\"common/components/list-item-assigned-to-avatar.html\", true);\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, \"usersById\", function(usersById) {\n var avatar, ctx, item, member;\n item = $scope.$eval($attrs.tgListitemAssignedto);\n ctx = {\n name: $translate.instant(\"COMMON.ASSIGNED_TO.NOT_ASSIGNED\")\n };\n member = usersById[item.assigned_to];\n avatar = avatarService.getAvatar(member);\n ctx.imgurl = avatar.url;\n ctx.bg = avatar.bg;\n if (member) {\n ctx.name = member.full_name_display;\n }\n return $el.html(template(ctx));\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemAssignedto\", [\"$tgTemplate\", \"$translate\", \"tgAvatarService\", ListItemAssignedtoDirective]);\n\n ListItemIssueStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemIssueStatus);\n return bindOnce($scope, \"issueStatusById\", function(issueStatusById) {\n return $el.html(issueStatusById[issue.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemIssueStatus\", ListItemIssueStatusDirective);\n\n ListItemTypeDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var render;\n render = function(issueTypeById, issue) {\n var domNode, type;\n type = issueTypeById[issue.type];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", type.color);\n return domNode.attr(\"title\", type.name);\n };\n bindOnce($scope, \"issueTypeById\", function(issueTypeById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemType);\n return render(issueTypeById, issue);\n });\n return $scope.$watch($attrs.tgListitemType, function(issue) {\n return render($scope.issueTypeById, issue);\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/level.html\"\n };\n };\n\n module.directive(\"tgListitemType\", ListItemTypeDirective);\n\n ListItemPriorityDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var render;\n render = function(priorityById, issue) {\n var domNode, priority;\n priority = priorityById[issue.priority];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", priority.color);\n return domNode.attr(\"title\", priority.name);\n };\n bindOnce($scope, \"priorityById\", function(priorityById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemPriority);\n return render(priorityById, issue);\n });\n return $scope.$watch($attrs.tgListitemPriority, function(issue) {\n return render($scope.priorityById, issue);\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/level.html\"\n };\n };\n\n module.directive(\"tgListitemPriority\", ListItemPriorityDirective);\n\n ListItemSeverityDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var render;\n render = function(severityById, issue) {\n var domNode, severity;\n severity = severityById[issue.severity];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", severity.color);\n return domNode.attr(\"title\", severity.name);\n };\n bindOnce($scope, \"severityById\", function(severityById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemSeverity);\n return render(severityById, issue);\n });\n return $scope.$watch($attrs.tgListitemSeverity, function(issue) {\n return render($scope.severityById, issue);\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/level.html\"\n };\n };\n\n module.directive(\"tgListitemSeverity\", ListItemSeverityDirective);\n\n TgProgressBarDirective = function($template) {\n var link, render, template;\n template = $template.get(\"common/components/progress-bar.html\", true);\n render = function(el, percentage) {\n return el.html(template({\n percentage: percentage\n }));\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch($attrs.tgProgressBar, function(percentage) {\n percentage = _.max([0, percentage]);\n percentage = _.min([100, percentage]);\n return render($el, percentage);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProgressBar\", [\"$tgTemplate\", TgProgressBarDirective]);\n\n TgMainTitleDirective = function($translate) {\n var link;\n link = function($scope, $el, $attrs) {\n $attrs.$observe(\"i18nSectionName\", function(i18nSectionName) {\n return $scope.sectionName = i18nSectionName;\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/main-title.html\",\n scope: {\n projectName: \"=projectName\"\n }\n };\n };\n\n module.directive(\"tgMainTitle\", [\"$translate\", TgMainTitleDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/confirm.coffee\n */\n\n(function() {\n var ConfirmService, NOTIFICATION_MSG, bindMethods, cancelTimeout, debounce, module, taiga, timeout,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n timeout = this.taiga.timeout;\n\n cancelTimeout = this.taiga.cancelTimeout;\n\n debounce = this.taiga.debounce;\n\n bindMethods = this.taiga.bindMethods;\n\n NOTIFICATION_MSG = {\n \"success\": {\n title: \"NOTIFICATION.OK\",\n message: \"NOTIFICATION.SAVED\"\n },\n \"error\": {\n title: \"NOTIFICATION.WARNING\",\n message: \"NOTIFICATION.WARNING_TEXT\"\n },\n \"light-error\": {\n title: \"NOTIFICATION.WARNING\",\n message: \"NOTIFICATION.WARNING_TEXT\"\n }\n };\n\n ConfirmService = (function(superClass) {\n extend(ConfirmService, superClass);\n\n ConfirmService.$inject = [\"$q\", \"lightboxService\", \"$tgLoading\", \"$translate\", \"$filter\"];\n\n function ConfirmService(q, lightboxService, loading, translate, filter) {\n this.q = q;\n this.lightboxService = lightboxService;\n this.loading = loading;\n this.translate = translate;\n this.filter = filter;\n bindMethods(this);\n }\n\n ConfirmService.prototype.hide = function(el) {\n if (el) {\n this.lightboxService.close(el);\n return el.off(\".confirm-dialog\");\n }\n };\n\n ConfirmService.prototype.ask = function(title, subtitle, message, lightboxSelector) {\n var defered, el, onEsc;\n if (lightboxSelector == null) {\n lightboxSelector = \".lightbox-generic-ask\";\n }\n defered = this.q.defer();\n el = angular.element(lightboxSelector);\n el.find(\".title\").text(title || '');\n el.find(\".subtitle\").text(subtitle || '');\n if (message) {\n message = this.filter('textToHTML')(message);\n }\n el.find(\".message\").html(message || '');\n el.on(\"click.confirm-dialog\", \".button-green\", debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n currentLoading = _this.loading().target(target).start();\n return defered.resolve({\n finish: function(ok) {\n if (ok == null) {\n ok = true;\n }\n currentLoading.finish();\n if (ok) {\n return _this.hide(el);\n }\n }\n });\n };\n })(this)));\n el.on(\"click.confirm-dialog\", \".button-red\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.reject();\n return _this.hide(el);\n };\n })(this));\n onEsc = (function(_this) {\n return function() {\n return _this.hide(el);\n };\n })(this);\n this.lightboxService.open(el, null, onEsc);\n return defered.promise;\n };\n\n ConfirmService.prototype.askOnDelete = function(title, message, subtitle) {\n if (subtitle == null) {\n subtitle = this.translate.instant(\"NOTIFICATION.ASK_DELETE\");\n }\n return this.ask(title, subtitle, message);\n };\n\n ConfirmService.prototype.askChoice = function(title, subtitle, choices, replacement, warning, lightboxSelector) {\n var choicesField, defered, el;\n if (lightboxSelector == null) {\n lightboxSelector = \".lightbox-ask-choice\";\n }\n defered = this.q.defer();\n el = angular.element(lightboxSelector);\n el.find(\".title\").text(title);\n el.find(\".subtitle\").text(subtitle);\n if (replacement) {\n el.find(\".replacement\").text(replacement);\n } else {\n el.find(\".replacement\").remove();\n }\n if (warning) {\n el.find(\".warning\").text(warning);\n } else {\n el.find(\".warning\").remove();\n }\n choicesField = el.find(\".choices\");\n choicesField.html('');\n _.each(choices, function(value, key) {\n value = _.escape(value);\n return choicesField.append(angular.element(\"\"));\n });\n el.on(\"click.confirm-dialog\", \"a.button-green\", debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n currentLoading = _this.loading().target(target).start();\n return defered.resolve({\n selected: choicesField.val(),\n finish: function(ok) {\n if (ok == null) {\n ok = true;\n }\n currentLoading.finish();\n if (ok) {\n return _this.hide(el);\n }\n }\n });\n };\n })(this)));\n el.on(\"click.confirm-dialog\", \".button-red\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.reject();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.error = function(message) {\n var defered, el;\n defered = this.q.defer();\n el = angular.element(\".lightbox-generic-error\");\n el.find(\".title\").html(message);\n el.on(\"click.confirm-dialog\", \".button-green\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n el.on(\"click.confirm-dialog\", \".close\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.success = function(title, message, icon, action) {\n var defered, detailImage, el, svgContainer, useSVG;\n defered = this.q.defer();\n el = angular.element(\".lightbox-generic-success\");\n el.find(\"img\").remove();\n el.find(\"svg\").remove();\n if (icon) {\n if (icon.type === \"img\") {\n detailImage = $('').addClass('lb-icon').attr('src', icon.name);\n } else if (icon.type === \"svg\") {\n detailImage = document.createElement(\"div\");\n taiga.addClass(detailImage, \"icon\");\n taiga.addClass(detailImage, icon.name);\n taiga.addClass(detailImage, \"lb-icon\");\n svgContainer = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n useSVG = document.createElementNS('http://www.w3.org/2000/svg', 'use');\n useSVG.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + icon.name);\n detailImage.appendChild(svgContainer).appendChild(useSVG);\n }\n if (detailImage) {\n el.find('section').prepend(detailImage);\n }\n }\n if (title) {\n el.find(\".title\").html(title);\n }\n if (message) {\n el.find(\".message\").html(message);\n }\n if (action) {\n el.find(\".button-green\").html(action);\n el.find(\".button-green\").attr('title', action);\n }\n el.on(\"click.confirm-dialog\", \".button-green\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n el.on(\"click.confirm-dialog\", \".close\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.loader = function(title, message, spin) {\n var el;\n if (spin == null) {\n spin = false;\n }\n el = angular.element(\".lightbox-generic-loading\");\n if (title) {\n el.find(\".title\").html(title);\n }\n if (message) {\n el.find(\".message\").html(message);\n }\n if (spin) {\n el.find(\".spin\").removeClass(\"hidden\");\n }\n return {\n start: (function(_this) {\n return function() {\n return _this.lightboxService.open(el);\n };\n })(this),\n stop: (function(_this) {\n return function() {\n return _this.lightboxService.close(el);\n };\n })(this),\n update: (function(_this) {\n return function(status, title, message, percent) {\n if (title) {\n el.find(\".title\").html(title);\n }\n if (message) {\n el.find(\".message\").html(message);\n }\n if (percent) {\n el.find(\".spin\").addClass(\"hidden\");\n el.find(\".progress-bar-wrapper\").removeClass(\"hidden\");\n el.find(\".progress-bar-wrapper > .bar\").width(percent + '%');\n return el.find(\".progress-bar-wrapper > span\").html(percent + '%').css('left', (percent - 9) + '%');\n } else {\n el.find(\".spin\").removeClass(\"hidden\");\n return el.find(\".progress-bar-wrapper\").addClass(\"hidden\");\n }\n };\n })(this)\n };\n };\n\n ConfirmService.prototype.notify = function(type, message, title, time) {\n var body, el, selector;\n selector = \".notification-message-\" + type;\n el = angular.element(selector);\n if (el.hasClass(\"active\")) {\n return;\n }\n if (title) {\n el.find(\"h4\").html(title);\n } else {\n el.find(\"h4\").html(this.translate.instant(NOTIFICATION_MSG[type].title));\n }\n if (message) {\n el.find(\"p\").html(message);\n } else {\n el.find(\"p\").html(this.translate.instant(NOTIFICATION_MSG[type].message));\n }\n body = angular.element(\"body\");\n body.find(\".notification-message .notification-light\").removeClass('active').addClass('inactive');\n body.find(selector).removeClass('inactive').addClass('active');\n if (this.tsem) {\n cancelTimeout(this.tsem);\n }\n if (!time) {\n time = type === 'error' || type === 'light-error' ? 3500 : 1500;\n }\n this.tsem = timeout(time, (function(_this) {\n return function() {\n body.find(selector).removeClass('active').addClass('inactive').one('animationend', function() {\n return $(this).removeClass('inactive');\n });\n return delete _this.tsem;\n };\n })(this));\n return el.on(\"click\", \".icon-close, .close\", (function(_this) {\n return function(event) {\n return body.find(selector).removeClass('active').addClass('inactive');\n };\n })(this));\n };\n\n return ConfirmService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaCommon\");\n\n module.service(\"$tgConfirm\", ConfirmService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/custom-field-values.coffee\n */\n\n(function() {\n var CHECKBOX_TYPE, CustomAttributeValueDirective, CustomAttributesValuesController, CustomAttributesValuesDirective, DATE_TYPE, DROPDOWN_TYPE, MULTILINE_TYPE, NUMBER_TYPE, RICHTEXT_TYPE, TEXT_TYPE, TYPE_CHOICES, URL_TYPE, bindMethods, bindOnce, debounce, generateHash, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n bindMethods = this.taiga.bindMethods;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n generateHash = taiga.generateHash;\n\n module = angular.module(\"taigaCommon\");\n\n TEXT_TYPE = \"text\";\n\n RICHTEXT_TYPE = \"url\";\n\n MULTILINE_TYPE = \"multiline\";\n\n DATE_TYPE = \"date\";\n\n URL_TYPE = \"url\";\n\n DROPDOWN_TYPE = \"dropdown\";\n\n CHECKBOX_TYPE = \"checkbox\";\n\n NUMBER_TYPE = \"number\";\n\n TYPE_CHOICES = [\n {\n key: TEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT\"\n }, {\n key: MULTILINE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI\"\n }, {\n key: DATE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE\"\n }, {\n key: URL_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL\"\n }, {\n key: RICHTEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT\"\n }, {\n key: DROPDOWN_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DROPDOWN\"\n }, {\n key: CHECKBOX_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_CHECKBOX\"\n }, {\n key: NUMBER_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_NUMBER\"\n }\n ];\n\n CustomAttributesValuesController = (function(superClass) {\n extend(CustomAttributesValuesController, superClass);\n\n CustomAttributesValuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$q\"];\n\n function CustomAttributesValuesController(scope1, rootscope, repo, rs, confirm, q) {\n this.scope = scope1;\n this.rootscope = rootscope;\n this.repo = repo;\n this.rs = rs;\n this.confirm = confirm;\n this.q = q;\n bindMethods(this);\n this.type = null;\n this.objectId = null;\n this.projectId = null;\n this.customAttributes = [];\n this.customAttributesValues = null;\n }\n\n CustomAttributesValuesController.prototype.initialize = function(type, objectId) {\n this.project = this.scope.project;\n this.type = type;\n this.objectId = objectId;\n return this.projectId = this.scope.projectId;\n };\n\n CustomAttributesValuesController.prototype.loadCustomAttributesValues = function() {\n if (!this.objectId) {\n return this.customAttributesValues;\n }\n return this.rs.customAttributesValues[this.type].get(this.objectId).then((function(_this) {\n return function(customAttributesValues) {\n _this.customAttributes = _this.project[_this.type + \"_custom_attributes\"];\n _this.customAttributesValues = customAttributesValues;\n return customAttributesValues;\n };\n })(this));\n };\n\n CustomAttributesValuesController.prototype.getAttributeValue = function(attribute) {\n var attributeValue;\n attributeValue = _.clone(attribute, false);\n attributeValue.value = this.customAttributesValues.attributes_values[attribute.id];\n return attributeValue;\n };\n\n CustomAttributesValuesController.prototype.updateAttributeValue = function(attributeValue) {\n var attributesValues, onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"custom-attributes-values:edit\");\n };\n })(this);\n onError = (function(_this) {\n return function(response) {\n _this.confirm.notify(\"error\");\n return _this.q.reject();\n };\n })(this);\n attributesValues = _.clone(this.customAttributesValues.attributes_values, true);\n attributesValues[attributeValue.id] = attributeValue.value;\n this.customAttributesValues.attributes_values = attributesValues;\n this.customAttributesValues.id = this.objectId;\n return this.repo.save(this.customAttributesValues).then(onSuccess, onError);\n };\n\n return CustomAttributesValuesController;\n\n })(taiga.Controller);\n\n CustomAttributesValuesDirective = function($templates, $storage) {\n var collapsedHash, link, template, templateFn;\n template = $templates.get(\"custom-attributes/custom-attributes-values.html\", true);\n collapsedHash = function(type) {\n return generateHash([\"custom-attributes-collapsed\", type]);\n };\n link = function($scope, $el, $attrs, $ctrls) {\n var $ctrl, $model, hash;\n $ctrl = $ctrls[0];\n $model = $ctrls[1];\n hash = collapsedHash($attrs.type);\n $scope.collapsed = $storage.get(hash) || false;\n bindOnce($scope, $attrs.ngModel, function(value) {\n $ctrl.initialize($attrs.type, value.id);\n return $ctrl.loadCustomAttributesValues();\n });\n $scope.toggleCollapse = function() {\n $scope.collapsed = !$scope.collapsed;\n return $storage.set(hash, $scope.collapsed);\n };\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n templateFn = function($el, $attrs) {\n return template({\n requiredEditionPerm: $attrs.requiredEditionPerm\n });\n };\n return {\n require: [\"tgCustomAttributesValues\", \"ngModel\"],\n controller: CustomAttributesValuesController,\n controllerAs: \"ctrl\",\n restrict: \"AE\",\n scope: true,\n link: link,\n template: templateFn\n };\n };\n\n module.directive(\"tgCustomAttributesValues\", [\"$tgTemplate\", \"$tgStorage\", \"$translate\", CustomAttributesValuesDirective]);\n\n CustomAttributeValueDirective = function($template, $selectedText, $compile, $translate, datePickerConfigService, wysiwygService) {\n var link, template, templateEdit;\n template = $template.get(\"custom-attributes/custom-attribute-value.html\", true);\n templateEdit = $template.get(\"custom-attributes/custom-attribute-value-edit.html\", true);\n link = function($scope, $el, $attrs, $ctrl) {\n var attributeValue, isEditable, prettyDate, render, setFocusAndSelectOnInputField, submit;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n render = function(attributeValue, edit) {\n var ctx, datePickerConfig, editable, html, scope, value;\n if (edit == null) {\n edit = false;\n }\n if (attributeValue.type === DATE_TYPE && attributeValue.value) {\n value = moment(attributeValue.value, \"YYYY-MM-DD\").format(prettyDate);\n }\n if (attributeValue.type === NUMBER_TYPE && attributeValue.value) {\n value = parseFloat(attributeValue.value);\n } else {\n value = attributeValue.value;\n }\n editable = isEditable();\n ctx = {\n id: attributeValue.id,\n name: attributeValue.name,\n description: attributeValue.description,\n value: value,\n type: attributeValue.type,\n isEditable: editable\n };\n scope = $scope.$new();\n scope.attributeHtml = wysiwygService.getHTML(value);\n scope.extra = attributeValue.extra;\n scope.model = value;\n if (editable && (edit || !value)) {\n html = templateEdit(ctx);\n html = $compile(html)(scope);\n $el.html(html);\n if (attributeValue.type === DATE_TYPE) {\n datePickerConfig = datePickerConfigService.get();\n _.merge(datePickerConfig, {\n field: $el.find(\"input[name=value]\")[0],\n onSelect: (function(_this) {\n return function(date) {\n var selectedDate;\n return selectedDate = date;\n };\n })(this),\n onOpen: (function(_this) {\n return function() {\n if (typeof selectedDate !== \"undefined\" && selectedDate !== null) {\n return $el.picker.setDate(selectedDate);\n }\n };\n })(this)\n });\n return $el.picker = new Pikaday(datePickerConfig);\n }\n } else {\n html = template(ctx);\n html = $compile(html)(scope);\n return $el.html(html);\n }\n };\n isEditable = function() {\n var permissions, requiredEditionPerm;\n permissions = $scope.project.my_permissions;\n requiredEditionPerm = $attrs.requiredEditionPerm;\n return permissions.indexOf(requiredEditionPerm) > -1;\n };\n $scope.saveCustomRichText = (function(_this) {\n return function(markdown, callback) {\n attributeValue.value = markdown;\n return $ctrl.updateAttributeValue(attributeValue).then(function() {\n callback();\n return render(attributeValue, false);\n });\n };\n })(this);\n $scope.cancelCustomRichText = (function(_this) {\n return function() {\n render(attributeValue, false);\n return null;\n };\n })(this);\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var form, formControl;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n if (attributeValue.type === DROPDOWN_TYPE) {\n formControl = $el.find(\"select[name='value']\");\n attributeValue.value = formControl.val();\n } else if (attributeValue.type === CHECKBOX_TYPE) {\n formControl = $el.find(\"input[name=value]\");\n attributeValue.value = formControl[0].checked;\n } else {\n formControl = $el.find(\"input[name=value], textarea[name='value']\");\n attributeValue.value = formControl.val();\n if (attributeValue.type === DATE_TYPE && moment(attributeValue.value, prettyDate).isValid()) {\n attributeValue.value = moment(attributeValue.value, prettyDate).format(\"YYYY-MM-DD\");\n }\n if (attributeValue.type === NUMBER_TYPE) {\n attributeValue.value = parseFloat(attributeValue.value);\n }\n }\n return $scope.$apply(function() {\n return $ctrl.updateAttributeValue(attributeValue).then(function() {\n return render(attributeValue, false);\n });\n });\n };\n })(this));\n setFocusAndSelectOnInputField = function() {\n return $el.find(\"input[name='value'], textarea[name='value']\").focus().select();\n };\n attributeValue = $scope.$eval($attrs.tgCustomAttributeValue);\n if (attributeValue.value === null || attributeValue.value === void 0) {\n attributeValue.value = \"\";\n }\n $scope.customAttributeValue = attributeValue;\n render(attributeValue);\n $el.on(\"click\", \".js-value-view-mode span a\", function(event) {\n return event.stopPropagation();\n });\n $el.on(\"click\", \".js-value-view-mode\", function() {\n if (!isEditable()) {\n return;\n }\n if ($selectedText.get().length) {\n return;\n }\n render(attributeValue, true);\n return setFocusAndSelectOnInputField();\n });\n $el.on(\"click\", \".js-edit-description\", function(event) {\n event.preventDefault();\n render(attributeValue, true);\n return setFocusAndSelectOnInputField();\n });\n $el.on(\"keyup\", \"input[name=value], textarea[name='value']\", function(event) {\n if (event.keyCode === 13 && event.currentTarget.type !== \"textarea\") {\n return submit(event);\n } else if (event.keyCode === 27) {\n return render(attributeValue, false);\n }\n });\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".js-save-description\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"^tgCustomAttributesValues\",\n restrict: \"AE\"\n };\n };\n\n module.directive(\"tgCustomAttributeValue\", [\"$tgTemplate\", \"$selectedText\", \"$compile\", \"$translate\", \"tgDatePickerConfigService\", \"tgWysiwygService\", CustomAttributeValueDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/emojis.coffee\n */\n\n(function() {\n var EmojisService, module, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n EmojisService = (function(superClass) {\n extend(EmojisService, superClass);\n\n EmojisService.$inject = [];\n\n function EmojisService() {\n this.replaceEmojiNameByHtmlImgs = bind(this.replaceEmojiNameByHtmlImgs, this);\n this.replaceEmojiNameByImgs = bind(this.replaceEmojiNameByImgs, this);\n this.replaceImgsByEmojiName = bind(this.replaceImgsByEmojiName, this);\n this.getEmojiByName = bind(this.getEmojiByName, this);\n this.getEmojiById = bind(this.getEmojiById, this);\n this.searchByName = bind(this.searchByName, this);\n this.emojis = _.map(taiga.emojis, function(it) {\n it.image = (\"/\" + window._version + \"/emojis/\") + it.image;\n return it;\n });\n this.emojisById = _.keyBy(this.emojis, 'id');\n this.emojisByName = _.keyBy(this.emojis, 'name');\n }\n\n EmojisService.prototype.searchByName = function(name) {\n return _.filter(this.emojis, function(it) {\n return it.name.indexOf(name) !== -1;\n });\n };\n\n EmojisService.prototype.getEmojiById = function(id) {\n return this.emojisById[id];\n };\n\n EmojisService.prototype.getEmojiByName = function(name) {\n return this.emojisByName[name];\n };\n\n EmojisService.prototype.replaceImgsByEmojiName = function(html) {\n var emoji, emojiId, emojiIds, i, len, regexImgs;\n emojiIds = taiga.getMatches(html, /emojis\\/([^\"]+).png\"/gi);\n for (i = 0, len = emojiIds.length; i < len; i++) {\n emojiId = emojiIds[i];\n regexImgs = new RegExp(']+\\>', 'g');\n emoji = this.getEmojiById(emojiId);\n html = html.replace(regexImgs, ':' + emoji.name + ':');\n }\n return html;\n };\n\n EmojisService.prototype.replaceEmojiNameByImgs = function(text) {\n var emoji, emojiId, emojiIds, i, len, regexImgs;\n emojiIds = taiga.getMatches(text, /:([\\w +-]*):/g);\n for (i = 0, len = emojiIds.length; i < len; i++) {\n emojiId = emojiIds[i];\n regexImgs = new RegExp(':' + emojiId + ':', 'g');\n emoji = this.getEmojiByName(emojiId);\n if (emoji) {\n text = text.replace(regexImgs, '![alt](' + emoji.image + ')');\n }\n }\n return text;\n };\n\n EmojisService.prototype.replaceEmojiNameByHtmlImgs = function(text) {\n var emoji, emojiId, emojiIds, i, len, regexImgs;\n emojiIds = taiga.getMatches(text, /:([\\w +-]*):/g);\n for (i = 0, len = emojiIds.length; i < len; i++) {\n emojiId = emojiIds[i];\n regexImgs = new RegExp(':' + _.escapeRegExp(emojiId) + ':', 'g');\n emoji = this.getEmojiByName(emojiId);\n if (emoji) {\n text = text.replace(regexImgs, '');\n }\n }\n return text;\n };\n\n return EmojisService;\n\n })(taiga.Service);\n\n module.service(\"$tgEmojis\", EmojisService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/estimation.coffee\n */\n\n(function() {\n var EstimationsService, LbUsEstimationDirective, UsEstimationDirective, groupBy, module, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n module = angular.module(\"taigaCommon\");\n\n LbUsEstimationDirective = function($tgEstimationsService, $rootScope, $repo, $template, $compile) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n $scope.$watch($attrs.ngModel, function(us) {\n var estimationProcess;\n if (us) {\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project);\n estimationProcess.onSelectedPointForRole = function(roleId, pointId, points) {\n us.points = points;\n estimationProcess.render();\n return $scope.$apply(function() {\n return $model.$setViewValue(us);\n });\n };\n estimationProcess.render = function() {\n var ctx, html, mainTemplate, template;\n ctx = {\n totalPoints: this.calculateTotalPoints(),\n roles: this.calculateRoles(),\n editable: this.isEditable,\n loading: false\n };\n mainTemplate = \"common/estimation/us-estimation-points-per-role.html\";\n template = $template.get(mainTemplate, true);\n html = template(ctx);\n html = $compile(html)($scope);\n return this.$el.html(html);\n };\n return estimationProcess.render();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgLbUsEstimation\", [\"$tgEstimationsService\", \"$rootScope\", \"$tgRepo\", \"$tgTemplate\", \"$compile\", LbUsEstimationDirective]);\n\n UsEstimationDirective = function($tgEstimationsService, $rootScope, $repo, $template, $compile, $modelTransform, $confirm) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var save;\n save = function(points) {\n var onError, transform;\n transform = $modelTransform.save((function(_this) {\n return function(us) {\n us.points = points;\n return us;\n };\n })(this));\n onError = (function(_this) {\n return function() {\n return $confirm.notify(\"error\");\n };\n })(this);\n return transform.then(null, onError);\n };\n $scope.$watchCollection(function() {\n return $model.$modelValue && $model.$modelValue.points;\n }, function() {\n var estimationProcess, us;\n us = $model.$modelValue;\n if (us) {\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project);\n estimationProcess.onSelectedPointForRole = function(roleId, pointId, points) {\n estimationProcess.loading = roleId;\n estimationProcess.render();\n return save(points).then(function() {\n estimationProcess.loading = false;\n $rootScope.$broadcast(\"object:updated\");\n return estimationProcess.render();\n });\n };\n estimationProcess.render = function() {\n var ctx, html, mainTemplate, template;\n ctx = {\n totalPoints: this.calculateTotalPoints(),\n roles: this.calculateRoles(),\n editable: this.isEditable,\n loading: estimationProcess.loading\n };\n mainTemplate = \"common/estimation/us-estimation-points-per-role.html\";\n template = $template.get(mainTemplate, true);\n html = template(ctx);\n html = $compile(html)($scope);\n return this.$el.html(html);\n };\n return estimationProcess.render();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsEstimation\", [\"$tgEstimationsService\", \"$rootScope\", \"$tgRepo\", \"$tgTemplate\", \"$compile\", \"$tgQueueModelTransformation\", \"$tgConfirm\", UsEstimationDirective]);\n\n EstimationsService = function($template, $repo, $confirm, $q, $qqueue) {\n var EstimationProcess, create, pointsTemplate;\n pointsTemplate = $template.get(\"common/estimation/us-estimation-points.html\", true);\n EstimationProcess = (function() {\n function EstimationProcess($el1, us1, project1) {\n this.$el = $el1;\n this.us = us1;\n this.project = project1;\n this.bindClickEvents = bind(this.bindClickEvents, this);\n this.isEditable = this.project.my_permissions.indexOf(\"modify_us\") !== -1;\n this.roles = this.project.roles;\n this.points = this.project.points;\n this.loading = false;\n this.pointsById = groupBy(this.points, function(x) {\n return x.id;\n });\n this.onSelectedPointForRole = function(roleId, pointId) {};\n this.render = function() {};\n }\n\n EstimationProcess.prototype.save = function(roleId, pointId) {\n var deferred;\n deferred = $q.defer();\n $qqueue.add((function(_this) {\n return function() {\n var onError, onSuccess;\n onSuccess = function() {\n deferred.resolve();\n return _this.render();\n };\n onError = function() {\n $confirm.notify(\"error\");\n _this.us.revert();\n _this.render();\n return deferred.reject();\n };\n return $repo.save(_this.us).then(onSuccess, onError);\n };\n })(this));\n return deferred.promise;\n };\n\n EstimationProcess.prototype.calculateTotalPoints = function() {\n var notNullValues, values;\n values = _.map(this.us.points, (function(_this) {\n return function(v, k) {\n var ref;\n return (ref = _this.pointsById[v]) != null ? ref.value : void 0;\n };\n })(this));\n if (values.length === 0) {\n return \"?\";\n }\n notNullValues = _.filter(values, function(v) {\n return v != null;\n });\n if (notNullValues.length === 0) {\n return \"?\";\n }\n return _.reduce(notNullValues, function(acc, num) {\n return acc + num;\n });\n };\n\n EstimationProcess.prototype.calculateRoles = function() {\n var computableRoles, roles;\n computableRoles = _.filter(this.project.roles, \"computable\");\n roles = _.map(computableRoles, (function(_this) {\n return function(role) {\n var pointId, pointObj;\n pointId = _this.us.points[role.id];\n pointObj = _this.pointsById[pointId];\n role = _.clone(role, true);\n role.points = (pointObj != null) && (pointObj.name != null) ? pointObj.name : \"?\";\n return role;\n };\n })(this));\n return roles;\n };\n\n EstimationProcess.prototype.bindClickEvents = function() {\n this.$el.on(\"click\", \".total.clickable\", (function(_this) {\n return function(event) {\n var roleId, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n roleId = target.data(\"role-id\");\n _this.renderPointsSelector(roleId, target);\n target.siblings().removeClass('active');\n return target.addClass('active');\n };\n })(this));\n return this.$el.on(\"click\", \".point\", (function(_this) {\n return function(event) {\n var pointId, points, roleId, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n roleId = target.data(\"role-id\");\n pointId = target.data(\"point-id\");\n _this.$el.find(\".popover\").popover().close();\n points = _.clone(_this.us.points, true);\n points[roleId] = pointId;\n return _this.onSelectedPointForRole(roleId, pointId, points);\n };\n })(this));\n };\n\n EstimationProcess.prototype.renderPointsSelector = function(roleId, target) {\n var horizontalList, html, maxPointLength, points, pop;\n points = _.map(this.points, (function(_this) {\n return function(point) {\n point = _.clone(point, true);\n point.selected = _this.us.points[roleId] === point.id ? false : true;\n return point;\n };\n })(this));\n maxPointLength = 5;\n horizontalList = _.some(points, (function(_this) {\n return function(point) {\n return point.name.length > maxPointLength;\n };\n })(this));\n html = pointsTemplate({\n \"points\": points,\n roleId: roleId,\n horizontal: horizontalList\n });\n this.$el.find(\".popover\").popover().close();\n this.$el.find(\".pop-points-open\").remove();\n if (target != null) {\n this.$el.find(target).append(html);\n } else {\n this.$el.append(html);\n }\n this.$el.find(\".pop-points-open\").popover().open(function() {\n return $(this).removeClass(\"active\").closest(\"li\").removeClass(\"active\");\n });\n this.$el.find(\".pop-points-open\").show();\n pop = this.$el.find(\".pop-points-open\");\n if (pop.offset().top + pop.height() > document.body.clientHeight) {\n return pop.addClass('pop-bottom');\n }\n };\n\n return EstimationProcess;\n\n })();\n create = function($el, us, project) {\n var estimationProcess;\n $el.unbind(\"click\");\n estimationProcess = new EstimationProcess($el, us, project);\n if (estimationProcess.isEditable) {\n estimationProcess.bindClickEvents();\n }\n return estimationProcess;\n };\n return {\n create: create\n };\n };\n\n module.factory(\"$tgEstimationsService\", [\"$tgTemplate\", \"$tgRepo\", \"$tgConfirm\", \"$q\", \"$tgQqueue\", EstimationsService]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/filters.coffee\n */\n\n(function() {\n var byRefFilter, darkerFilter, defaultFilter, emojify, inArray, markdownToHTML, module, momentFormat, momentFromNow, sizeFormat, taiga, textToHTML, toMutableFilter, unslugify, yesNoFilter;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n defaultFilter = function() {\n return function(value, defaultValue) {\n if (value === [null, void 0]) {\n return defaultValue;\n }\n return value;\n };\n };\n\n module.filter(\"default\", defaultFilter);\n\n yesNoFilter = function($translate) {\n return function(value) {\n if (value) {\n return $translate.instant(\"COMMON.YES\");\n }\n return $translate.instant(\"COMMON.NO\");\n };\n };\n\n module.filter(\"yesNo\", [\"$translate\", yesNoFilter]);\n\n unslugify = function() {\n return taiga.unslugify;\n };\n\n module.filter(\"unslugify\", unslugify);\n\n momentFormat = function() {\n return function(input, format) {\n if (input) {\n return moment(input).format(format);\n }\n return \"\";\n };\n };\n\n module.filter(\"momentFormat\", momentFormat);\n\n momentFromNow = function() {\n return function(input, without_suffix) {\n if (input) {\n return moment(input).fromNow(without_suffix || false);\n }\n return \"\";\n };\n };\n\n module.filter(\"momentFromNow\", momentFromNow);\n\n sizeFormat = (function(_this) {\n return function() {\n return _this.taiga.sizeFormat;\n };\n })(this);\n\n module.filter(\"sizeFormat\", sizeFormat);\n\n toMutableFilter = function() {\n var memoizedMutable, toMutable;\n toMutable = function(js) {\n return js.toJS();\n };\n memoizedMutable = _.memoize(toMutable);\n return function(input) {\n if (input instanceof Immutable.List) {\n return memoizedMutable(input);\n }\n return input;\n };\n };\n\n module.filter(\"toMutable\", toMutableFilter);\n\n byRefFilter = function($filterFilter) {\n return function(userstories, filter) {\n var cleanRef;\n if (filter != null ? filter.startsWith(\"#\") : void 0) {\n cleanRef = filter.substr(1);\n return _.filter(userstories, (function(_this) {\n return function(us) {\n return String(us.ref).startsWith(cleanRef);\n };\n })(this));\n }\n return $filterFilter(userstories, filter);\n };\n };\n\n module.filter(\"byRef\", [\"filterFilter\", byRefFilter]);\n\n darkerFilter = function() {\n return function(color, luminosity) {\n var black, c, i, j, len, newColor, ref, white;\n color = new String(color).replace(/[^0-9a-f]/gi, '');\n if (color.length < 6) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n luminosity = luminosity || 0;\n newColor = \"#\";\n c = 0;\n i = 0;\n black = 0;\n white = 255;\n ref = [0, 1, 2];\n for (j = 0, len = ref.length; j < len; j++) {\n i = ref[j];\n c = parseInt(color.substr(i * 2, 2), 16);\n c = Math.round(Math.min(Math.max(black, c + (luminosity * white)), white)).toString(16);\n newColor += (\"00\" + c).substr(c.length);\n }\n return newColor;\n };\n };\n\n module.filter(\"darker\", darkerFilter);\n\n markdownToHTML = function(wysiwigService) {\n return function(input) {\n if (input) {\n return wysiwigService.getHTML(input);\n }\n return \"\";\n };\n };\n\n module.filter(\"markdownToHTML\", [\"tgWysiwygService\", markdownToHTML]);\n\n inArray = function($filter) {\n return function(list, arrayFilter, element) {\n var filter;\n if (arrayFilter) {\n filter = $filter(\"filter\");\n return filter(list, function(listItem) {\n return arrayFilter.indexOf(listItem[element]) !== -1;\n });\n }\n };\n };\n\n module.filter(\"inArray\", [\"$filter\", inArray]);\n\n emojify = function($emojis) {\n return function(input) {\n if (input) {\n return $emojis.replaceEmojiNameByHtmlImgs(_.escape(input));\n }\n return \"\";\n };\n };\n\n module.filter(\"emojify\", [\"$tgEmojis\", emojify]);\n\n textToHTML = function($filter) {\n return function(input) {\n if (input) {\n return input.replace(/\\<(?!(\\/?)(strong|br)(\\/?)).*?\\>/g, \"\");\n }\n return \"\";\n };\n };\n\n module.filter(\"textToHTML\", [\"$filter\", textToHTML]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/lightboxes.coffee\n */\n\n(function() {\n var AssignedToLightboxDirective, AssignedUsersLightboxDirective, BlockLightboxDirective, BlockingMessageInputDirective, CreateBulkUserstoriesDirective, CreateEditDirective, LightboxDirective, LightboxKeyboardNavigationService, LightboxLeaveProjectWarningDirective, LightboxService, RelateToEpicLightboxDirective, SetDueDateDirective, WatchersLightboxDirective, bindOnce, debounce, debounceLeading, groupBy, module, normalizeString, sizeFormat, timeout, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n module = angular.module(\"taigaCommon\");\n\n bindOnce = this.taiga.bindOnce;\n\n timeout = this.taiga.timeout;\n\n debounce = this.taiga.debounce;\n\n sizeFormat = this.taiga.sizeFormat;\n\n trim = this.taiga.trim;\n\n normalizeString = this.taiga.normalizeString;\n\n LightboxService = (function(superClass) {\n extend(LightboxService, superClass);\n\n function LightboxService(animationFrame, q, rootScope) {\n this.animationFrame = animationFrame;\n this.q = q;\n this.rootScope = rootScope;\n }\n\n LightboxService.prototype.open = function($el, onClose, onEsc, ignoreEsc) {\n var defered, docEl, lightboxContent;\n this.onClose = onClose;\n if (_.isString($el)) {\n $el = $($el);\n }\n defered = this.q.defer();\n lightboxContent = $el.children().not(\".close\");\n lightboxContent.hide();\n this.animationFrame.add(function() {\n return $el.css('display', 'flex');\n });\n this.animationFrame.add(function() {\n $el.addClass(\"open\");\n return $el.one(\"transitionend\", (function(_this) {\n return function() {\n var firstField;\n firstField = $el.find('input:not(.no-focus),textarea:not(.no-focus)').first();\n if (firstField.length) {\n return firstField.focus();\n } else if (document.activeElement) {\n return $(document.activeElement).blur();\n }\n };\n })(this));\n });\n this.animationFrame.add((function(_this) {\n return function() {\n lightboxContent.show();\n return defered.resolve();\n };\n })(this));\n if (!ignoreEsc) {\n docEl = angular.element(document);\n docEl.on(\"keydown.lightbox\", (function(_this) {\n return function(e) {\n var code;\n code = e.keyCode ? e.keyCode : e.which;\n if (code === 27) {\n if (onEsc) {\n return _this.rootScope.$applyAsync(onEsc);\n } else {\n return _this.close($el);\n }\n }\n };\n })(this));\n }\n return defered.promise;\n };\n\n LightboxService.prototype.close = function($el) {\n return new Promise((function(_this) {\n return function(resolve) {\n var docEl, scope;\n if (_.isString($el)) {\n $el = $($el);\n }\n docEl = angular.element(document);\n docEl.off(\".lightbox\");\n docEl.off(\".keyboard-navigation\");\n $el.addClass('close-started');\n _this.animationFrame.add(function() {\n $el.addClass('close');\n return $el.one(\"transitionend\", function() {\n $el.removeAttr('style');\n $el.removeClass(\"open\").removeClass('close').removeClass('close-started');\n if (_this.onClose) {\n _this.rootScope.$apply(_this.onClose);\n }\n return resolve();\n });\n });\n if ($el.hasClass(\"remove-on-close\")) {\n scope = $el.data(\"scope\");\n if (scope) {\n scope.$destroy();\n }\n return $el.remove();\n }\n };\n })(this));\n };\n\n LightboxService.prototype.getLightboxOpen = function() {\n return $(\".lightbox.open:not(.close-started)\");\n };\n\n LightboxService.prototype.closeAll = function() {\n var docEl, i, len, lightboxEl, ref, results;\n docEl = angular.element(document);\n ref = docEl.find(\".lightbox.open\");\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n lightboxEl = ref[i];\n results.push(this.close($(lightboxEl)));\n }\n return results;\n };\n\n return LightboxService;\n\n })(taiga.Service);\n\n module.service(\"lightboxService\", [\"animationFrame\", \"$q\", \"$rootScope\", LightboxService]);\n\n LightboxKeyboardNavigationService = (function(superClass) {\n extend(LightboxKeyboardNavigationService, superClass);\n\n function LightboxKeyboardNavigationService() {\n return LightboxKeyboardNavigationService.__super__.constructor.apply(this, arguments);\n }\n\n LightboxKeyboardNavigationService.prototype.stop = function() {\n var docEl;\n docEl = angular.element(document);\n return docEl.off(\".keyboard-navigation\");\n };\n\n LightboxKeyboardNavigationService.prototype.dispatch = function($el, code) {\n var activeElement, next, prev;\n activeElement = $el.find(\".selected\");\n if (code === 13) {\n if ($el.find(\".user-list-single\").length === 1) {\n return $el.find('.user-list-single:first').trigger(\"click\");\n } else {\n return activeElement.trigger(\"click\");\n }\n } else if (code === 40) {\n if (!activeElement.length) {\n return $el.find('.user-list-single:not(\".is-active\"):first').addClass('selected');\n } else {\n next = activeElement.next('.user-list-single');\n if (next.length) {\n activeElement.removeClass('selected');\n return next.addClass('selected');\n }\n }\n } else if (code === 38) {\n if (!activeElement.length) {\n return $el.find('.user-list-single:last').addClass('selected');\n } else {\n prev = activeElement.prev('.user-list-single:not(\".is-active\")');\n if (prev.length) {\n activeElement.removeClass('selected');\n return prev.addClass('selected');\n }\n }\n }\n };\n\n LightboxKeyboardNavigationService.prototype.init = function($el) {\n var docEl;\n this.stop();\n docEl = angular.element(document);\n return docEl.on(\"keydown.keyboard-navigation\", (function(_this) {\n return function(event) {\n var code;\n code = event.keyCode ? event.keyCode : event.which;\n if (code === 40 || code === 38 || code === 13) {\n event.preventDefault();\n return _this.dispatch($el, code);\n }\n };\n })(this));\n };\n\n return LightboxKeyboardNavigationService;\n\n })(taiga.Service);\n\n module.service(\"lightboxKeyboardNavigationService\", LightboxKeyboardNavigationService);\n\n LightboxDirective = function(lightboxService) {\n var link;\n link = function($scope, $el, $attrs) {\n if (!$attrs.$attr.visible) {\n return $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n }\n };\n return {\n restrict: \"C\",\n link: link\n };\n };\n\n module.directive(\"lightbox\", [\"lightboxService\", LightboxDirective]);\n\n BlockLightboxDirective = function($rootscope, $tgrepo, $confirm, lightboxService, $loading, $modelTransform, $translate) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var block, title, unblock;\n title = $translate.instant($attrs.title);\n $el.find(\"h2.title\").text(title);\n unblock = (function(_this) {\n return function(finishCallback) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.is_blocked = false;\n item.blocked_note = \"\";\n return item;\n });\n transform.then(function() {\n $confirm.notify(\"success\");\n $rootscope.$broadcast(\"object:updated\");\n return finishCallback();\n });\n transform.then(null, function() {\n $confirm.notify(\"error\");\n return item.revert();\n });\n transform[\"finally\"](function() {\n return finishCallback();\n });\n return transform;\n };\n })(this);\n block = function() {\n var currentLoading, transform;\n currentLoading = $loading().target($el.find(\".button-green\")).start();\n transform = $modelTransform.save(function(item) {\n item.is_blocked = true;\n item.blocked_note = $el.find(\".reason\").val();\n return item;\n });\n transform.then(function() {\n $confirm.notify(\"success\");\n return $rootscope.$broadcast(\"object:updated\");\n });\n transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return transform[\"finally\"](function() {\n currentLoading.finish();\n return lightboxService.close($el);\n });\n };\n $scope.$on(\"block\", function() {\n $el.find(\".reason\").val($model.$modelValue.blocked_note);\n return lightboxService.open($el);\n });\n $scope.$on(\"unblock\", (function(_this) {\n return function(event, model, finishCallback) {\n return unblock(finishCallback);\n };\n })(this));\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return $el.on(\"click\", \".button-green\", function(event) {\n event.preventDefault();\n return block();\n });\n };\n return {\n templateUrl: \"common/lightbox/lightbox-block.html\",\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgLbBlock\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"lightboxService\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$translate\", BlockLightboxDirective]);\n\n BlockingMessageInputDirective = function($log, $template, $compile) {\n var link, template, templateFn;\n template = $template.get(\"common/lightbox/lightbox-blocking-message-input.html\", true);\n link = function($scope, $el, $attrs, $model) {\n if (!$attrs.watch) {\n return $log.error(\"No watch attribute on tg-blocking-message-input directive\");\n }\n return $scope.$watch($attrs.watch, function(value) {\n if (value === !void 0 && value === true) {\n return $el.find(\".blocked-note\").removeClass(\"hidden\");\n } else {\n return $el.find(\".blocked-note\").addClass(\"hidden\");\n }\n });\n };\n templateFn = function($el, $attrs) {\n return template({\n ngmodel: $attrs.ngModel\n });\n };\n return {\n template: templateFn,\n link: link,\n require: \"ngModel\",\n restrict: \"EA\"\n };\n };\n\n module.directive(\"tgBlockingMessageInput\", [\"$log\", \"$tgTemplate\", \"$compile\", BlockingMessageInputDirective]);\n\n CreateBulkUserstoriesDirective = function($repo, $rs, $rootscope, lightboxService, $loading, $model) {\n var link;\n link = function($scope, $el, attrs) {\n var form, submit, submitButton;\n form = null;\n $scope.$on(\"usform:bulk\", function(ctx, projectId, status) {\n if (form) {\n form.reset();\n }\n $scope[\"new\"] = {\n projectId: projectId,\n statusId: status,\n bulk: \"\"\n };\n return lightboxService.open($el);\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n form = $el.find(\"form\").checksley({\n onlyOneErrorElement: true\n });\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $rs.userstories.bulkCreate($scope[\"new\"].projectId, $scope[\"new\"].statusId, $scope[\"new\"].bulk);\n promise.then(function(result) {\n result = _.map(result.data, (function(_this) {\n return function(x) {\n return $model.make_model('userstories', x);\n };\n })(this));\n currentLoading.finish();\n $rootscope.$broadcast(\"usform:bulk:success\", result);\n return lightboxService.close($el);\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateBulkUserstories\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", \"$tgModel\", CreateBulkUserstoriesDirective]);\n\n AssignedToLightboxDirective = function(lightboxService, lightboxKeyboardNavigationService, $template, $compile, avatarService, $userListService) {\n var link;\n link = function($scope, $el, $attrs) {\n var closeLightbox, render, selectedItem, selectedUser, usersTemplate;\n selectedUser = null;\n selectedItem = null;\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-to-users.html\", true);\n render = function(selected, text) {\n var ctx, html, users, visibleUsers;\n users = $userListService.searchUsers(text, selected);\n visibleUsers = _.slice(users, 0, 5);\n visibleUsers = _.map(visibleUsers, function(user) {\n return user.avatar = avatarService.getAvatar(user);\n });\n if (selected) {\n if (selected) {\n selected.avatar = avatarService.getAvatar(selected);\n }\n }\n ctx = {\n selected: selected,\n users: _.slice(users, 0, 5),\n showMore: users.length > 5\n };\n html = usersTemplate(ctx);\n html = $compile(html)($scope);\n return $el.find(\".assigned-to-list\").html(html);\n };\n closeLightbox = function() {\n lightboxKeyboardNavigationService.stop();\n return lightboxService.close($el);\n };\n $scope.$on(\"assigned-to:add\", function(ctx, item) {\n var assignedToId;\n selectedItem = item;\n assignedToId = item.assigned_to;\n selectedUser = $scope.usersById[assignedToId];\n render(selectedUser);\n return lightboxService.open($el).then(function() {\n $el.find('input').focus();\n return lightboxKeyboardNavigationService.init($el);\n });\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n render(selectedUser, searchingText);\n return $el.find('input').focus();\n }\n });\n $el.on(\"click\", \".user-list-single\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n closeLightbox();\n return $scope.$apply(function() {\n $scope.$broadcast(\"assigned-to:added\", target.data(\"user-id\"), selectedItem);\n return $scope.usersSearch = null;\n });\n });\n $el.on(\"click\", \".remove-assigned-to\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n closeLightbox();\n return $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"assigned-to:added\", null, selectedItem);\n });\n });\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n closeLightbox();\n return $scope.$apply(function() {\n return $scope.usersSearch = null;\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"common/lightbox/lightbox-assigned-to.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbAssignedto\", [\"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", \"tgAvatarService\", \"tgUserListService\", AssignedToLightboxDirective]);\n\n AssignedUsersLightboxDirective = function($repo, lightboxService, lightboxKeyboardNavigationService, $template, $compile, avatarService, $userListService) {\n var link;\n link = function($scope, $el, $attrs) {\n var closeLightbox, render, selectedItem, selectedUsers, usersTemplate;\n selectedUsers = [];\n selectedItem = null;\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-users-users.html\", true);\n render = function(assignedUsersIds, text) {\n var ctx, html, selected, users, visible;\n users = $userListService.searchUsers(text);\n selected = [];\n _.map(users, function(user) {\n var ref;\n if (ref = user.id, indexOf.call(assignedUsersIds, ref) >= 0) {\n user.avatar = avatarService.getAvatar(user);\n return selected.push(user);\n }\n });\n visible = [];\n _.map(users, function(user) {\n var ref;\n if (ref = user.id, indexOf.call(assignedUsersIds, ref) < 0) {\n user.avatar = avatarService.getAvatar(user);\n return visible.push(user);\n }\n });\n ctx = {\n selected: selected,\n users: _.slice(visible, 0, 5),\n showMore: users.length > 5\n };\n html = usersTemplate(ctx);\n html = $compile(html)($scope);\n return $el.find(\".assigned-to-list\").html(html);\n };\n closeLightbox = function() {\n lightboxKeyboardNavigationService.stop();\n return lightboxService.close($el);\n };\n $scope.$on(\"assigned-user:add\", function(ctx, item) {\n selectedItem = item;\n selectedUsers = item.assigned_users;\n render(selectedUsers);\n return lightboxService.open($el).then(function() {\n $el.find(\"input\").focus();\n return lightboxKeyboardNavigationService.init($el);\n });\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n render(selectedUsers, searchingText);\n return $el.find('input').focus();\n }\n });\n $el.on(\"click\", \".user-list-single\", debounce(200, function(event) {\n var target;\n closeLightbox();\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"assigned-user:added\", target.data(\"user-id\"), selectedItem);\n });\n }));\n $el.on(\"click\", \".remove-assigned-to\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n event.stopPropagation();\n $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"assigned-user:deleted\", target.data(\"user-id\"), selectedItem);\n });\n return closeLightbox();\n });\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n return closeLightbox();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"common/lightbox/lightbox-assigned-users.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbAssignedUsers\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", \"tgAvatarService\", \"tgUserListService\", AssignedUsersLightboxDirective]);\n\n WatchersLightboxDirective = function($repo, lightboxService, lightboxKeyboardNavigationService, $template, $compile, avatarService) {\n var link;\n link = function($scope, $el, $attrs) {\n var closeLightbox, getFilteredUsers, render, selectedItem, usersTemplate;\n selectedItem = null;\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-to-users.html\", true);\n getFilteredUsers = function(text) {\n var _filterUsers, users;\n if (text == null) {\n text = \"\";\n }\n _filterUsers = function(text, user) {\n var username;\n if (selectedItem && _.find(selectedItem.watchers, function(x) {\n return x === user.id;\n })) {\n return false;\n }\n username = user.full_name_display.toUpperCase();\n text = text.toUpperCase();\n return _.includes(username, text);\n };\n users = _.clone($scope.activeUsers, true);\n users = _.filter(users, _.partial(_filterUsers, text));\n return users;\n };\n render = function(users) {\n var ctx, html, visibleUsers;\n visibleUsers = _.slice(users, 0, 5);\n visibleUsers = _.map(visibleUsers, function(user) {\n user.avatar = avatarService.getAvatar(user);\n return user;\n });\n ctx = {\n selected: false,\n users: visibleUsers,\n showMore: users.length > 5\n };\n html = usersTemplate(ctx);\n html = $compile(html)($scope);\n return $el.find(\".ticket-watchers\").html(html);\n };\n closeLightbox = function() {\n lightboxKeyboardNavigationService.stop();\n return lightboxService.close($el);\n };\n $scope.$on(\"watcher:add\", function(ctx, item) {\n var users;\n selectedItem = item;\n users = getFilteredUsers();\n render(users);\n return lightboxService.open($el).then(function() {\n $el.find(\"input\").focus();\n return lightboxKeyboardNavigationService.init($el);\n });\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n var users;\n if (searchingText == null) {\n return;\n }\n users = getFilteredUsers(searchingText);\n render(users);\n return $el.find(\"input\").focus();\n });\n $el.on(\"click\", \".user-list-single\", debounce(200, function(event) {\n var target;\n closeLightbox();\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"watcher:added\", target.data(\"user-id\"));\n });\n }));\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n closeLightbox();\n return $scope.$apply(function() {\n return $scope.usersSearch = null;\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"common/lightbox/lightbox-users.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbWatchers\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", \"tgAvatarService\", WatchersLightboxDirective]);\n\n LightboxLeaveProjectWarningDirective = function(lightboxService, $template, $compile) {\n var link;\n link = function($scope, $el, attrs) {\n return lightboxService.open($el);\n };\n return {\n templateUrl: 'common/lightbox/lightbox-leave-project-warning.html',\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgLightboxLeaveProjectWarning\", [\"lightboxService\", LightboxLeaveProjectWarningDirective]);\n\n SetDueDateDirective = function($rootscope, lightboxService, $loading, $translate, $confirm, $modelTransform) {\n var link;\n link = function($scope, $el, attrs) {\n var prettyDate, remove, save;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n lightboxService.open($el);\n if ($scope.object.due_date) {\n $scope.new_due_date = moment($scope.object.due_date).format(prettyDate);\n }\n $el.on(\"click\", \".suggestion\", function(event) {\n var quantity, target, unit, value;\n target = angular.element(event.currentTarget);\n quantity = target.data('quantity');\n unit = target.data('unit');\n value = moment().add(quantity, unit).format(prettyDate);\n return $el.find(\".due-date\").val(value);\n });\n save = function() {\n var currentLoading, new_due_date, transform;\n currentLoading = $loading().target($el.find(\".submit-button\")).start();\n if ($scope.notAutoSave) {\n new_due_date = $('.due-date').val();\n $scope.object.due_date = new_due_date ? moment(new_due_date, prettyDate).format(\"YYYY-MM-DD\") : null;\n $scope.$apply();\n currentLoading.finish();\n lightboxService.close($el);\n return;\n }\n transform = $modelTransform.save(function(object) {\n new_due_date = $('.due-date').val();\n object.due_date = new_due_date ? moment(new_due_date, prettyDate).format(\"YYYY-MM-DD\") : null;\n return object;\n });\n transform.then(function() {\n return $confirm.notify(\"success\");\n });\n transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return transform[\"finally\"](function() {\n currentLoading.finish();\n lightboxService.close($el);\n return $rootscope.$broadcast(\"object:updated\");\n });\n };\n $el.on(\"click\", \".submit-button\", function(event) {\n event.preventDefault();\n return save();\n });\n remove = function() {\n var message, subtitle, title;\n title = $translate.instant(\"LIGHTBOX.DELETE_DUE_DATE.TITLE\");\n subtitle = $translate.instant(\"LIGHTBOX.DELETE_DUE_DATE.SUBTITLE\");\n message = moment($scope.object.due_date).format(prettyDate);\n return $confirm.askOnDelete(title, message, subtitle).then(function(askResponse) {\n askResponse.finish();\n $('.due-date').val(null);\n $scope.object.due_date_reason = null;\n if ($scope.notAutoSave) {\n $scope.object.due_date = null;\n return lightboxService.close($el);\n } else {\n return save();\n }\n });\n };\n return $el.on(\"click\", \".delete-due-date\", function(event) {\n event.preventDefault();\n return remove();\n });\n };\n return {\n templateUrl: 'common/lightbox/lightbox-due-date.html',\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgLbSetDueDate\", [\"$rootScope\", \"lightboxService\", \"$tgLoading\", \"$translate\", \"$tgConfirm\", \"$tgQueueModelTransformation\", SetDueDateDirective]);\n\n groupBy = this.taiga.groupBy;\n\n CreateEditDirective = function($log, $repo, $model, $rs, $rootScope, lightboxService, $loading, $translate, $confirm, $q, attachmentsService, $template, $compile) {\n var link;\n link = function($scope, $el, attrs) {\n var addExistingToSprint, attachmentsToAdd, attachmentsToDelete, checkClose, close, createAttachments, deleteAttachments, docEl, form, getSchema, isDisabledExisting, mount, objType, render, resetAttachments, saveItem, schema, schemas, setStatus, sprintChangeConfirmAndSave, submit;\n schema = null;\n objType = null;\n form = null;\n attachmentsToAdd = Immutable.List();\n attachmentsToDelete = Immutable.List();\n schemas = {\n us: {\n objName: 'User Story',\n model: 'userstories',\n params: {\n include_attachments: true,\n include_tasks: true\n },\n data: function(project) {\n return {\n translationID: 'US',\n translationIDPlural: 'US',\n statusList: _.sortBy(project.us_statuses, \"order\")\n };\n },\n initialData: function(data) {\n return {\n project: data.project.id,\n subject: \"\",\n description: \"\",\n tags: [],\n points: {},\n status: data.statusId ? data.statusId : data.project.default_us_status,\n is_archived: false\n };\n }\n },\n task: {\n objName: 'Task',\n model: 'tasks',\n params: {\n include_attachments: true\n },\n data: function(project) {\n return {\n translationID: 'TASK',\n translationIDPlural: 'TASKS',\n statusList: _.sortBy(project.task_statuses, \"order\")\n };\n },\n initialData: function(data) {\n return {\n project: data.project.id,\n subject: \"\",\n description: \"\",\n assigned_to: null,\n tags: [],\n milestone: data.sprintId,\n status: data.project.default_task_status,\n user_story: data.usId,\n is_archived: false\n };\n }\n },\n issue: {\n objName: 'Issue',\n model: 'issues',\n params: {\n include_attachments: true\n },\n data: function(project) {\n return {\n translationID: 'ISSUE',\n translationIDPlural: 'ISSUES',\n project: project,\n statusList: _.sortBy(project.issue_statuses, \"order\"),\n typeById: groupBy(project.issue_types, function(x) {\n return x.id;\n }),\n typeList: _.sortBy(project.issue_types, \"order\"),\n severityById: groupBy(project.severities, function(x) {\n return x.id;\n }),\n severityList: _.sortBy(project.severities, \"order\"),\n priorityById: groupBy(project.priorities, function(x) {\n return x.id;\n }),\n priorityList: _.sortBy(project.priorities, \"order\"),\n milestonesById: groupBy(project.milestones, function(x) {\n return x.id;\n })\n };\n },\n initialData: function(data) {\n return {\n assigned_to: null,\n milestone: data.sprintId,\n priority: data.project.default_priority,\n project: data.project.id,\n severity: data.project.default_severity,\n status: data.project.default_issue_status,\n subject: \"\",\n tags: [],\n type: data.project.default_issue_type\n };\n }\n }\n };\n $scope.setMode = function(value) {\n return $scope.mode = value;\n };\n $scope.$on(\"genericform:new\", function(ctx, params) {\n getSchema(params);\n $scope.mode = 'new';\n $scope.getOrCreate = false;\n return mount(params);\n });\n $scope.$on(\"genericform:new-or-existing\", function(ctx, params) {\n getSchema(params);\n $scope.mode = 'add-existing';\n $scope.getOrCreate = true;\n $scope.existingFilterText = '';\n $rs[schema.model].listInAllProjects({\n project: $scope.project.id\n }, true).then(function(data) {\n return $scope.existingItems = angular.copy(data);\n });\n return mount(params);\n });\n $scope.$on(\"genericform:edit\", function(ctx, params) {\n getSchema(params);\n $scope.mode = 'edit';\n $scope.getOrCreate = false;\n return mount(params);\n });\n getSchema = function(params) {\n _.map(params, function(value, key) {\n return $scope[key] = value;\n });\n if (!$scope.objType || !schemas[$scope.objType]) {\n return $log.error(\"Invalid objType `\" + $scope.objType + \"` for `genericform` event\");\n }\n return schema = schemas[$scope.objType];\n };\n mount = function(params) {\n $scope.objName = schema.objName;\n if ($scope.mode === 'edit') {\n $scope.obj = params.obj;\n $scope.attachments = Immutable.fromJS(params.attachments);\n } else {\n $scope.obj = $model.make_model(schema.model, schema.initialData(params));\n $scope.attachments = Immutable.List();\n }\n _.map(schema.data($scope.project), function(value, key) {\n return $scope[key] = value;\n });\n if (form) {\n form.reset();\n }\n resetAttachments();\n setStatus($scope.obj.status);\n render();\n $scope.lightboxOpen = true;\n return lightboxService.open($el, null, null, true);\n };\n resetAttachments = function() {\n attachmentsToAdd = Immutable.List();\n return attachmentsToDelete = Immutable.List();\n };\n $scope.addAttachment = function(attachment) {\n return attachmentsToAdd = attachmentsToAdd.push(attachment);\n };\n $scope.deleteAttachment = function(attachment) {\n attachmentsToAdd = attachmentsToAdd.filter(function(it) {\n return it.get('name') !== attachment.get('name');\n });\n if (attachment.get(\"id\")) {\n return attachmentsToDelete = attachmentsToDelete.push(attachment);\n }\n };\n $scope.addTag = function(tag, color) {\n var inserted, itemtags, projectTags, tags, value;\n value = trim(tag.toLowerCase());\n tags = $scope.project.tags;\n projectTags = $scope.project.tags_colors;\n if (tags == null) {\n tags = [];\n }\n if (projectTags == null) {\n projectTags = {};\n }\n if (indexOf.call(tags, value) < 0) {\n tags.push(value);\n }\n projectTags[tag] = color || null;\n $scope.project.tags = tags;\n itemtags = _.clone($scope.obj.tags);\n inserted = _.find(itemtags, function(it) {\n return it[0] === value;\n });\n if (!inserted) {\n itemtags.push([value, color]);\n return $scope.obj.tags = itemtags;\n }\n };\n $scope.deleteTag = function(tag) {\n var itemtags, tags, value;\n value = trim(tag[0].toLowerCase());\n tags = $scope.project.tags;\n itemtags = _.clone($scope.obj.tags);\n _.remove(itemtags, function(tag) {\n return tag[0] === value;\n });\n $scope.obj.tags = itemtags;\n return _.pull($scope.obj.tags, value);\n };\n createAttachments = function(obj) {\n var promises;\n promises = _.map(attachmentsToAdd.toJS(), function(attachment) {\n return attachmentsService.upload(attachment.file, obj.id, $scope.obj.project, $scope.objType);\n });\n return $q.all(promises);\n };\n deleteAttachments = function(obj) {\n var promises;\n promises = _.map(attachmentsToDelete.toJS(), function(attachment) {\n return attachmentsService[\"delete\"]($scope.objType, attachment.id);\n });\n return $q.all(promises);\n };\n addExistingToSprint = function(item) {\n var currentLoading, onError, onSuccess;\n currentLoading = $loading().target($el.find(\".add-existing-button\")).start();\n if (item.milestone) {\n return sprintChangeConfirmAndSave(item);\n } else {\n onSuccess = function() {\n close();\n return $rootScope.$broadcast($scope.objType + \"form:add:success\", item);\n };\n onError = function() {\n return close();\n };\n return saveItem(item, onSuccess, onError);\n }\n };\n sprintChangeConfirmAndSave = function(item) {\n var message, newSprintName, oldSprintName, title;\n oldSprintName = $scope.milestonesById[item.milestone].name;\n newSprintName = $scope.milestonesById[$scope.relatedObjectId].name;\n title = $translate.instant(\"ISSUES.CONFIRM_CHANGE_FROM_SPRINT.TITLE\");\n message = $translate.instant(\"ISSUES.CONFIRM_CHANGE_FROM_SPRINT.MESSAGE\", {\n issue: item.subject,\n oldSprintName: oldSprintName,\n newSprintName: newSprintName\n });\n return $confirm.ask(title, null, message).then(function(askResponse) {\n var onError, onSuccess;\n onSuccess = function() {\n askResponse.finish();\n lightboxService.closeAll();\n $scope.lightboxOpen = false;\n return $rootScope.$broadcast($scope.objType + \"form:add:success\", item);\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n return saveItem(item, onSuccess, onError);\n });\n };\n saveItem = function(item, onSuccess, onError) {\n item.setAttr($scope.relatedField, $scope.relatedObjectId);\n return $repo.save(item, true).then(onSuccess, onError);\n };\n isDisabledExisting = function(item) {\n return item && item[$scope.relatedField] === $scope.relatedObjectId;\n };\n $scope.isDisabledExisting = function(selectedItem) {\n return isDisabledExisting(selectedItem);\n };\n $scope.addExistingToSprint = function(selectedItem) {\n return addExistingToSprint(selectedItem);\n };\n submit = debounce(2000, function(event) {\n var broadcastEvent, currentLoading, prettyDate, promise;\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target($el.find(\".submit-button\")).start();\n if ($scope.mode === 'new') {\n promise = $repo.create(schema.model, $scope.obj);\n broadcastEvent = $scope.objType + \"form:new:success\";\n } else {\n if ($scope.obj.due_date instanceof moment) {\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n $scope.obj.due_date = $scope.obj.due_date.format(\"YYYY-MM-DD\");\n }\n promise = $repo.save($scope.obj, true);\n broadcastEvent = $scope.objType + \"form:edit:success\";\n }\n promise.then(function(data) {\n return deleteAttachments(data).then(function() {\n return createAttachments(data).then(function() {\n currentLoading.finish();\n close();\n if (data.ref) {\n return $rs[schema.model].getByRef(data.project, data.ref, schema.params).then(function(obj) {\n return $rootScope.$broadcast(broadcastEvent, obj);\n });\n }\n });\n });\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n });\n checkClose = function() {\n if (!$scope.obj.isModified()) {\n close();\n return $scope.$apply(function() {\n return $scope.obj.revert();\n });\n } else {\n return $confirm.ask($translate.instant(\"LIGHTBOX.CREATE_EDIT.CONFIRM_CLOSE\")).then(function(result) {\n result.finish();\n return close();\n });\n }\n };\n close = function() {\n lightboxService.closeAll();\n return $scope.lightboxOpen = false;\n };\n docEl = angular.element(document);\n docEl.on(\"keydown.lightbox-create-edit\", function(event) {\n var code;\n if ($scope.lightboxOpen) {\n event.stopPropagation();\n code = event.keyCode ? event.keyCode : event.which;\n if (code === 27) {\n return checkClose();\n }\n }\n });\n $el.on(\"submit\", \"form\", submit);\n $el.find('.close').on(\"click\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return checkClose();\n });\n $el.on(\"click\", \".status-dropdown\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n setStatus(angular.element(event.currentTarget).data(\"status-id\"));\n $scope.$apply();\n $scope.$broadcast(\"status:changed\", $scope.obj.status);\n return $el.find(\".pop-status\").popover().close();\n });\n $el.on(\"click\", \".team-requirement\", function(event) {\n $scope.obj.team_requirement = !$scope.obj.team_requirement;\n return $scope.$apply();\n });\n $el.on(\"click\", \".client-requirement\", function(event) {\n $scope.obj.client_requirement = !$scope.obj.client_requirement;\n return $scope.$apply();\n });\n $el.on(\"click\", \".is-blocked\", function(event) {\n $scope.obj.is_blocked = !$scope.obj.is_blocked;\n return $scope.$apply();\n });\n $el.on(\"click\", \".iocaine\", function(event) {\n $scope.obj.is_iocaine = !$scope.obj.is_iocaine;\n return $scope.$broadcast(\"isiocaine:changed\", $scope.obj);\n });\n $scope.isTeamRequirement = function() {\n var ref;\n return (ref = $scope.obj) != null ? ref.team_requirement : void 0;\n };\n $scope.isClientRequirement = function() {\n var ref;\n return (ref = $scope.obj) != null ? ref.client_requirement : void 0;\n };\n setStatus = function(id) {\n $scope.obj.status = id;\n $scope.selectedStatus = _.find($scope.statusList, function(item) {\n return item.id === id;\n });\n return $scope.obj.is_closed = $scope.selectedStatus.is_closed;\n };\n return render = function(sprint) {\n var compiledTemplate, template, templateScope;\n template = $template.get(\"common/lightbox/lightbox-create-edit/lb-create-edit.html\");\n templateScope = $scope.$new();\n compiledTemplate = $compile(template)(templateScope);\n return $el.html(compiledTemplate);\n };\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateEdit\", [\"$log\", \"$tgRepo\", \"$tgModel\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", \"$translate\", \"$tgConfirm\", \"$q\", \"tgAttachmentsService\", \"$tgTemplate\", \"$compile\", CreateEditDirective]);\n\n debounceLeading = this.taiga.debounceLeading;\n\n RelateToEpicLightboxDirective = function($rootScope, $confirm, lightboxService, $tgCurrentUserService, tgResources, $tgResources, $epicsService, tgAnalytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var existingEpicForm, filterEpics, loadProjects, newEpicForm, selectProject, us;\n us = null;\n $scope.projects = null;\n $scope.projectEpics = Immutable.List();\n $scope.loading = false;\n $scope.selectedProject = $scope.project.id;\n newEpicForm = $el.find(\".new-epic-form\").checksley();\n existingEpicForm = $el.find(\".existing-epic-form\").checksley();\n loadProjects = function() {\n if ($scope.projects === null) {\n return $scope.projects = $tgCurrentUserService.projects.get(\"unblocked\");\n }\n };\n filterEpics = function(selectedProjectId, filterText) {\n return tgResources.epics.listInAllProjects({\n is_epics_activated: true,\n project__blocked_code: 'null',\n project: selectedProjectId,\n q: filterText\n }, true).then(function(data) {\n var excludeIds, filteredData;\n excludeIds = [];\n if (us.epics) {\n excludeIds = us.epics.map(function(epic) {\n return epic.id;\n });\n }\n filteredData = data.filter(function(epic) {\n return excludeIds.indexOf(epic.get('id')) === -1;\n });\n return $scope.projectEpics = filteredData;\n });\n };\n selectProject = function(selectedProjectId) {\n $scope.selectedEpic = null;\n $scope.searchEpic = \"\";\n return filterEpics(selectedProjectId, $scope.searchEpic);\n };\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n $scope.$on(\"relate-to-epic:add\", function(ctx, item) {\n us = item;\n $scope.selectedEpic = null;\n $scope.searchEpic = \"\";\n loadProjects();\n return filterEpics($scope.selectedProject, $scope.searchEpic).then(function() {\n return lightboxService.open($el).then(function() {\n return $el.find('input').focus;\n });\n });\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $scope.selectProject = function(selectedProjectId) {\n return selectProject(selectedProjectId);\n };\n $scope.onUpdateSearchEpic = debounceLeading(300, function() {\n $scope.selectedEpic = null;\n return filterEpics($scope.selectedProject, $scope.searchEpic);\n });\n $scope.saveRelatedEpic = function(selectedEpicId, onSavedRelatedEpic) {\n var onError, onSuccess, usId;\n if (!existingEpicForm.validate()) {\n return;\n }\n $scope.loading = true;\n onError = function(data) {\n $scope.loading = false;\n $confirm.notify(\"error\");\n return existingEpicForm.setErrors(data);\n };\n onSuccess = function(data) {\n tgAnalytics.trackEvent(\"user story related epic\", \"create\", \"create related epic on user story\", 1);\n $scope.loading = false;\n $rootScope.$broadcast(\"related-epics:changed\", us);\n return lightboxService.close($el);\n };\n usId = us.id;\n return tgResources.epics.addRelatedUserstory(selectedEpicId, usId).then(onSuccess, onError);\n };\n return $scope.createEpic = function(selectedProjectId, epicSubject) {\n var onCreateEpic, onError, onSuccess;\n if (!newEpicForm.validate()) {\n return;\n }\n this.loading = true;\n onError = function(data) {\n $scope.loading = false;\n $confirm.notify(\"error\");\n return newEpicForm.setErrors(errors);\n };\n onSuccess = function() {\n tgAnalytics.trackEvent(\"user story related epic\", \"create\", \"create related epic on user story\", 1);\n $scope.loading = false;\n $rootScope.$broadcast(\"related-epics:changed\", us);\n return lightboxService.close($el);\n };\n onCreateEpic = function(epic) {\n var epicId, usId;\n epicId = epic.get('id');\n usId = us.id;\n return tgResources.epics.addRelatedUserstory(epicId, usId).then(onSuccess, onError);\n };\n return $epicsService.createEpic({\n subject: epicSubject\n }, null, selectedProjectId).then(onCreateEpic, onError);\n };\n };\n return {\n templateUrl: \"common/lightbox/lightbox-relate-to-epic.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbRelatetoepic\", [\"$rootScope\", \"$tgConfirm\", \"lightboxService\", \"tgCurrentUserService\", \"tgResources\", \"$tgResources\", \"tgEpicsService\", \"$tgAnalytics\", RelateToEpicLightboxDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/loader.coffee\n */\n\n(function() {\n var Loader, LoaderDirective, module, sizeFormat, taiga, timeout;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaCommon\");\n\n LoaderDirective = function(tgLoader, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n tgLoader.onStart(function() {\n $(document.body).addClass(\"loader-active\");\n return $el.addClass(\"active\");\n });\n return tgLoader.onEnd(function() {\n $(document.body).removeClass(\"loader-active\");\n return $el.removeClass(\"active\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLoader\", [\"tgLoader\", \"$rootScope\", LoaderDirective]);\n\n Loader = function($rootscope) {\n var autoClose, config, lastResponseDate, open, pageLoaded, requestCount, start, startLoadTime;\n config = {\n minTime: 300\n };\n open = false;\n startLoadTime = 0;\n requestCount = 0;\n lastResponseDate = 0;\n pageLoaded = function(force) {\n var diff, endTime, timeoutValue;\n if (force == null) {\n force = false;\n }\n if (startLoadTime) {\n timeoutValue = 0;\n if (!force) {\n endTime = new Date().getTime();\n diff = endTime - startLoadTime;\n if (diff < config.minTime) {\n timeoutValue = config.minTime - diff;\n }\n }\n timeout(timeoutValue, function() {\n $rootscope.$broadcast(\"loader:end\");\n open = false;\n return window.prerenderReady = true;\n });\n }\n startLoadTime = 0;\n requestCount = 0;\n return lastResponseDate = 0;\n };\n autoClose = function() {\n var intervalAuto;\n return intervalAuto = setInterval((function() {\n if (lastResponseDate && requestCount === 0) {\n pageLoaded();\n return clearInterval(intervalAuto);\n }\n }), 50);\n };\n start = function() {\n startLoadTime = new Date().getTime();\n $rootscope.$broadcast(\"loader:start\");\n return open = true;\n };\n return {\n pageLoaded: pageLoaded,\n open: function() {\n return open;\n },\n start: function(auto) {\n if (auto == null) {\n auto = false;\n }\n if (!open) {\n start();\n if (auto) {\n return autoClose();\n }\n }\n },\n onStart: function(fn) {\n return $rootscope.$on(\"loader:start\", fn);\n },\n onEnd: function(fn) {\n return $rootscope.$on(\"loader:end\", fn);\n },\n logRequest: function() {\n return requestCount++;\n },\n logResponse: function() {\n requestCount--;\n return lastResponseDate = new Date().getTime();\n }\n };\n };\n\n Loader.$inject = [\"$rootScope\"];\n\n module.factory(\"tgLoader\", Loader);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/loading.coffee\n */\n\n(function() {\n var LoadingDirective, TgLoadingService, module,\n slice = [].slice;\n\n module = angular.module(\"taigaCommon\");\n\n TgLoadingService = function($compile) {\n var spinner;\n spinner = \"loading...\";\n return function() {\n var service;\n service = {\n settings: {\n target: null,\n scope: null,\n classes: [],\n timeout: 0,\n template: null\n },\n target: function(target) {\n service.settings.target = target;\n return service;\n },\n scope: function(scope) {\n service.settings.scope = scope;\n return service;\n },\n template: function(template) {\n service.settings.template = template;\n return service;\n },\n removeClasses: function() {\n var classess;\n classess = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n service.settings.classes = classess;\n return service;\n },\n timeout: function(timeout) {\n service.settings.timeout = timeout;\n return service;\n },\n start: function() {\n var target, timeoutId;\n target = service.settings.target;\n service.settings.classes.map(function(className) {\n return target.removeClass(className);\n });\n if (!target.hasClass('loading') && !service.settings.template) {\n service.settings.template = target.html();\n }\n timeoutId = setTimeout((function() {\n if (!target.hasClass('loading')) {\n target.addClass('loading');\n return target.html(spinner);\n }\n }), service.settings.timeout);\n service.settings.timeoutId = timeoutId;\n return service;\n },\n finish: function() {\n var removeClasses, target, timeoutId;\n target = service.settings.target;\n timeoutId = service.settings.timeoutId;\n if (timeoutId) {\n clearTimeout(timeoutId);\n removeClasses = service.settings.classes;\n removeClasses.map(function(className) {\n return service.settings.target.addClass(className);\n });\n target.html(service.settings.template);\n target.removeClass('loading');\n if (service.settings.scope) {\n $compile(target.contents())(service.settings.scope);\n }\n }\n return service;\n }\n };\n return service;\n };\n };\n\n TgLoadingService.$inject = [\"$compile\"];\n\n module.factory(\"$tgLoading\", TgLoadingService);\n\n LoadingDirective = function($loading) {\n var link;\n link = function($scope, $el, attr) {\n var currentLoading, template;\n currentLoading = null;\n template = $el.html();\n return $scope.$watch(attr.tgLoading, (function(_this) {\n return function(showLoading) {\n if (showLoading) {\n return currentLoading = $loading().target($el).timeout(100).template(template).scope($scope).start();\n } else if (currentLoading) {\n return currentLoading.finish();\n }\n };\n })(this));\n };\n return {\n priority: 99999,\n link: link\n };\n };\n\n module.directive(\"tgLoading\", [\"$tgLoading\", LoadingDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/popovers.coffee\n */\n\n(function() {\n var RelatedTaskStatusDirective, UsStatusDirective, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaCommon\");\n\n UsStatusDirective = function($repo, $template) {\n\n /*\n Print the status of a US and a popover to change it.\n - tg-us-status: The user story\n - on-update: Method call after US is updated\n \n Example:\n \n div.status(tg-us-status=\"us\" on-update=\"ctrl.loadSprintState()\")\n a.us-status(href=\"\", title=\"Status Name\")\n \n NOTE: This directive need 'usStatusById' and 'project'.\n */\n var link, template;\n template = $template.get(\"common/popover/popover-us-status.html\", true);\n link = function($scope, $el, $attrs) {\n var $ctrl, render, us;\n $ctrl = $el.controller();\n render = function(us) {\n var usStatusById, usStatusDom, usStatusDomParent;\n usStatusDomParent = $el.find(\".us-status\");\n usStatusDom = $el.find(\".us-status .us-status-bind\");\n usStatusById = $scope.usStatusById;\n if (usStatusById[us.status]) {\n usStatusDom.text(usStatusById[us.status].name);\n return usStatusDomParent.css(\"color\", usStatusById[us.status].color);\n }\n };\n $el.on(\"click\", \".us-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", debounce(2000, function(event) {\n var target, us;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n us = $scope.$eval($attrs.tgUsStatus);\n us.status = target.data(\"status-id\");\n render(us);\n $el.find(\".pop-status\").popover().close();\n return $scope.$apply(function() {\n return $repo.save(us).then(function() {\n return $scope.$eval($attrs.onUpdate);\n });\n });\n }));\n $scope.$on(\"userstories:loaded\", function() {\n return render($scope.$eval($attrs.tgUsStatus));\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n us = $scope.$eval($attrs.tgUsStatus);\n render(us);\n return bindOnce($scope, \"project\", function(project) {\n var html;\n html = template({\n \"statuses\": project.us_statuses\n });\n $el.append(html);\n if ($scope.project.my_permissions.indexOf(\"modify_us\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUsStatus\", [\"$tgRepo\", \"$tgTemplate\", UsStatusDirective]);\n\n RelatedTaskStatusDirective = function($repo, $template) {\n\n /*\n Print the status of a related task and a popover to change it.\n - tg-related-task-status: The related task\n - on-update: Method call after US is updated\n \n Example:\n \n div.status(tg-related-task-status=\"task\" on-update=\"ctrl.loadSprintState()\")\n a.task-status(href=\"\", title=\"Status Name\")\n \n NOTE: This directive need 'taskStatusById' and 'project'.\n */\n var link, selectionTemplate, updateTaskStatus;\n selectionTemplate = $template.get(\"common/popover/popover-related-task-status.html\", true);\n updateTaskStatus = function($el, task, taskStatusById) {\n var taskStatusDom, taskStatusDomParent;\n taskStatusDomParent = $el.find(\".us-status\");\n taskStatusDom = $el.find(\".task-status .task-status-bind\");\n if (taskStatusById[task.status]) {\n taskStatusDom.text(taskStatusById[task.status].name);\n return taskStatusDomParent.css('color', taskStatusById[task.status].color);\n }\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, autoSave, notAutoSave, task;\n $ctrl = $el.controller();\n task = $scope.$eval($attrs.tgRelatedTaskStatus);\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n autoSave = !notAutoSave;\n $el.on(\"click\", \".task-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n task.status = target.data(\"status-id\");\n $el.find(\".pop-status\").popover().close();\n updateTaskStatus($el, task, $scope.taskStatusById);\n if (autoSave) {\n return $scope.$apply(function() {\n return $repo.save(task).then(function() {\n $scope.$eval($attrs.onUpdate);\n return $scope.$emit(\"related-tasks:status-changed\");\n });\n });\n }\n }));\n $scope.$watch($attrs.tgRelatedTaskStatus, function() {\n task = $scope.$eval($attrs.tgRelatedTaskStatus);\n return updateTaskStatus($el, task, $scope.taskStatusById);\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n $el.append(selectionTemplate({\n 'statuses': project.task_statuses\n }));\n updateTaskStatus($el, task, $scope.taskStatusById);\n if (project.my_permissions.indexOf(\"modify_task\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskStatus\", [\"$tgRepo\", \"$tgTemplate\", RelatedTaskStatusDirective]);\n\n $.fn.popover = function() {\n var $el, close, closeAll, closePopover, isVisible, open;\n $el = this;\n isVisible = (function(_this) {\n return function() {\n var docViewBottom, docViewLeft, docViewRight, docViewTop, docViewWidth, elemBottom, elemLeft, elemRight, elemTop, elemWidth;\n $el.css({\n \"display\": \"block\",\n \"visibility\": \"hidden\"\n });\n docViewTop = $(window).scrollTop();\n docViewBottom = docViewTop + $(window).height();\n docViewWidth = $(window).width();\n docViewRight = docViewWidth;\n docViewLeft = 0;\n elemTop = $el.offset().top;\n elemBottom = elemTop + $el.height();\n elemWidth = $el.width();\n elemLeft = $el.offset().left;\n elemRight = $el.offset().left + elemWidth;\n $el.css({\n \"display\": \"none\",\n \"visibility\": \"visible\"\n });\n return (elemBottom <= docViewBottom) && (elemTop >= docViewTop) && (elemLeft >= docViewLeft) && (elemRight <= docViewRight);\n };\n })(this);\n closePopover = (function(_this) {\n return function(onClose) {\n if (onClose) {\n onClose.call($el);\n }\n $el.fadeOut(function() {\n return $el.removeClass(\"active\").removeClass(\"fix\");\n });\n return $el.off(\"popup:close\");\n };\n })(this);\n closeAll = (function(_this) {\n return function() {\n return $(\".popover.active\").each(function() {\n return $(this).trigger(\"popup:close\");\n });\n };\n })(this);\n open = (function(_this) {\n return function(onClose) {\n if ($el.hasClass(\"active\")) {\n return close();\n } else {\n closeAll();\n if (!isVisible()) {\n $el.addClass(\"fix\");\n }\n $el.fadeIn(function() {\n $el.addClass(\"active\");\n $(document.body).off(\"popover\");\n return $(document.body).one(\"click.popover\", function() {\n return closeAll();\n });\n });\n return $el.on(\"popup:close\", function(e) {\n return closePopover(onClose);\n });\n }\n };\n })(this);\n close = (function(_this) {\n return function() {\n return $el.trigger(\"popup:close\");\n };\n })(this);\n return {\n open: open,\n close: close,\n closeAll: closeAll\n };\n };\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/raven-logger.coffee\n */\n\n(function() {\n var ExceptionHandlerFactory, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n ExceptionHandlerFactory = function($log, config) {\n var ravenConfig;\n this.config = config;\n ravenConfig = this.config.get(\"ravenConfig\", null);\n if (ravenConfig) {\n $log.debug(\"Using the RavenJS exception handler.\");\n Raven.config(ravenConfig).install();\n return function(exception, cause) {\n $log.error.apply($log, arguments);\n return Raven.captureException(exception);\n };\n } else {\n $log.debug(\"Using the default logging exception handler.\");\n return function(exception, cause) {\n return $log.error.apply($log, arguments);\n };\n }\n };\n\n module.factory(\"$exceptionHandler\", [\"$log\", \"$tgConfig\", ExceptionHandlerFactory]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Andrey Antukh \n * Copyright (C) 2014-2017 Jesús Espino Garcia \n * Copyright (C) 2014-2017 David Barragán Merino \n * Copyright (C) 2014-2017 Alejandro Alonso \n * Copyright (C) 2014-2017 Juan Francisco Alcántara \n * Copyright (C) 2014-2017 Xavi Julian \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/sections.coffee\n */\n\n(function() {\n var SectionsService, module,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n module = angular.module(\"taigaCommon\");\n\n SectionsService = (function(superClass) {\n var SECTIONS;\n\n extend(SectionsService, superClass);\n\n SectionsService.$inject = [\"$translate\", \"tgCurrentUserService\"];\n\n SECTIONS = {\n 1: {\n id: 1,\n title: 'TIMELINE',\n path: 'timeline',\n enabled: ''\n },\n 2: {\n id: 2,\n title: 'EPICS',\n path: 'epics',\n enabled: 'is_epics_activated'\n },\n 3: {\n id: 3,\n title: 'BACKLOG',\n path: 'backlog',\n enabled: 'is_backlog_activated'\n },\n 4: {\n id: 4,\n title: 'KANBAN',\n path: 'kanban',\n enabled: 'is_kanban_activated'\n },\n 5: {\n id: 5,\n title: 'ISSUES',\n path: 'issues',\n enabled: 'is_issues_activated'\n },\n 6: {\n id: 6,\n title: 'WIKI',\n path: 'wiki',\n enabled: 'is_wiki_activated'\n }\n };\n\n function SectionsService(translate, currentUserService) {\n this.translate = translate;\n this.currentUserService = currentUserService;\n SectionsService.__super__.constructor.call(this);\n _.map(SECTIONS, (function(_this) {\n return function(x) {\n return x.title = _this.translate.instant(\"PROJECT.SECTION.\" + x.title);\n };\n })(this));\n }\n\n SectionsService.prototype.list = function() {\n return SECTIONS;\n };\n\n SectionsService.prototype.getPath = function(projectSlug, sectionId) {\n var defaultHomePage, project, projects, ref, section;\n defaultHomePage = \"timeline\";\n projects = (ref = this.currentUserService.projects) != null ? ref.get(\"all\") : void 0;\n if (!projects) {\n return defaultHomePage;\n }\n project = projects.find(function(p) {\n return p.get('slug') === projectSlug;\n });\n if (!project) {\n return defaultHomePage;\n }\n if (!sectionId) {\n sectionId = project.get('my_homepage');\n }\n section = _.find(SECTIONS, {\n \"id\": sectionId\n });\n if (!section || (project != null ? project.get(section.enabled) : void 0) === !true) {\n return defaultHomePage;\n }\n return section.path;\n };\n\n return SectionsService;\n\n })(taiga.Service);\n\n module.service(\"$tgSections\", SectionsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/tags.coffee\n */\n\n(function() {\n var ColorizeTagsBacklogDirective, LbTagLineDirective, TagsDirective, bindOnce, module, taiga, trim,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaCommon\");\n\n TagsDirective = function() {\n var formatter, link, parser;\n formatter = function(v) {\n if (_.isArray(v)) {\n return v.join(\", \");\n }\n return \"\";\n };\n parser = function(v) {\n var result;\n if (!v) {\n return [];\n }\n result = _(v.split(\",\")).map(function(x) {\n return _.trim(x);\n });\n return result.value();\n };\n link = function($scope, $el, $attrs, $ctrl) {\n $ctrl.$formatters.push(formatter);\n $ctrl.$parsers.push(parser);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n require: \"ngModel\",\n link: link\n };\n };\n\n module.directive(\"tgTags\", TagsDirective);\n\n ColorizeTagsBacklogDirective = function($emojis) {\n var link, template;\n template = _.template(\"<% _.each(tags, function(tag) { %>\\n <% if (tag[1] !== null) { %>\\n \\\"\\n title=\\\"<%- tag[0] %>\\\">\\n <%= emojify(tag[0]) %>\\n \\n <% } %>\\n<% }) %>\\n<% _.each(tags, function(tag) { %>\\n <% if (tag[1] === null) { %>\\n \\\">\\n <%= emojify(tag[0]) %>\\n \\n <% } %>\\n<% }) %>\");\n link = function($scope, $el, $attrs, $ctrl) {\n var render;\n render = function(tags) {\n var html;\n html = template({\n tags: tags,\n emojify: function(text) {\n return $emojis.replaceEmojiNameByHtmlImgs(_.escape(text));\n }\n });\n return $el.html(html);\n };\n $scope.$watch($attrs.tgColorizeBacklogTags, function(tags) {\n if (tags != null) {\n return render(tags);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgColorizeBacklogTags\", [\"$tgEmojis\", ColorizeTagsBacklogDirective]);\n\n LbTagLineDirective = function($rs, $template, $compile) {\n var COMMA_KEY, ENTER_KEY, autocomplete, link, templateTags;\n ENTER_KEY = 13;\n COMMA_KEY = 188;\n templateTags = $template.get(\"common/tag/lb-tag-line-tags.html\", true);\n autocomplete = null;\n link = function($scope, $el, $attrs, $model) {\n var addValue, deleteValue, hideSaveButton, renderTags, resetInput, saveInputTag, showSaveButton, withoutColors;\n withoutColors = _.has($attrs, \"withoutColors\");\n renderTags = function(tags, tagsColors) {\n var color, ctx, html;\n if (tagsColors == null) {\n tagsColors = [];\n }\n color = !withoutColors ? tagsColors[t] : null;\n ctx = {\n tags: _.map(tags, function(t) {\n return {\n name: t,\n style: color ? \"border-left: 5px solid \" + color : \"\"\n };\n })\n };\n html = $compile(templateTags(ctx))($scope);\n return $el.find(\".tags-container\").html(html);\n };\n showSaveButton = function() {\n return $el.find(\".save\").removeClass(\"hidden\");\n };\n hideSaveButton = function() {\n return $el.find(\".save\").addClass(\"hidden\");\n };\n resetInput = function() {\n $el.find(\"input\").val(\"\");\n return autocomplete.close();\n };\n addValue = function(value) {\n var tags;\n value = trim(value.toLowerCase());\n if (value.length === 0) {\n return;\n }\n tags = _.clone($model.$modelValue, false);\n if (tags == null) {\n tags = [];\n }\n if (indexOf.call(tags, value) < 0) {\n tags.push(value);\n }\n $scope.$apply(function() {\n return $model.$setViewValue(tags);\n });\n return hideSaveButton();\n };\n deleteValue = function(value) {\n var tags;\n value = trim(value.toLowerCase());\n if (value.length === 0) {\n return;\n }\n tags = _.clone($model.$modelValue, false);\n tags = _.pull(tags, value);\n return $scope.$apply(function() {\n return $model.$setViewValue(tags);\n });\n };\n saveInputTag = function() {\n var value;\n value = $el.find(\"input\").val();\n addValue(value);\n return resetInput();\n };\n $el.on(\"keypress\", \"input\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n if (event.keyCode === ENTER_KEY) {\n event.preventDefault();\n return saveInputTag();\n } else if (String.fromCharCode(event.keyCode) === ',') {\n event.preventDefault();\n return saveInputTag();\n } else {\n if (target.val().length) {\n return showSaveButton();\n } else {\n return hideSaveButton();\n }\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n event.preventDefault();\n return saveInputTag();\n });\n $el.on(\"click\", \".remove-tag\", function(event) {\n var target, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n value = target.siblings(\".tag-name\").text();\n return deleteValue(value);\n });\n bindOnce($scope, \"project\", function(project) {\n var input;\n input = $el.find(\"input\");\n autocomplete = new Awesomplete(input[0], {\n list: _.keys(project.tags_colors)\n });\n return input.on(\"awesomplete-selectcomplete\", function() {\n addValue(input.val());\n return input.val(\"\");\n });\n });\n $scope.$watch($attrs.ngModel, function(tags) {\n var ref, tagsColors;\n tagsColors = ((ref = $scope.project) != null ? ref.tags_colors : void 0) || [];\n return renderTags(tags, tagsColors);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\",\n templateUrl: \"common/tag/lb-tag-line.html\"\n };\n };\n\n module.directive(\"tgLbTagLine\", [\"$tgResources\", \"$tgTemplate\", \"$compile\", LbTagLineDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/lightboxes.coffee\n */\n\n(function() {\n var CreateEditSprint, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaBacklog\");\n\n CreateEditSprint = function($repo, $confirm, $rs, $rootscope, lightboxService, $loading, $translate) {\n var link;\n link = function($scope, $el, attrs) {\n var createSprint, form, getLastSprint, hasErrors, remove, resetSprint, submit, ussToAdd;\n hasErrors = false;\n createSprint = true;\n form = null;\n $scope.newSprint = {};\n ussToAdd = null;\n resetSprint = function() {\n if (form) {\n form.reset();\n }\n return $scope.newSprint = {\n project: null,\n name: null,\n estimated_start: null,\n estimated_finish: null\n };\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var broadcastEvent, currentLoading, estimated_end, estimated_start, newSprint, prettyDate, promise, submitButton, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n submitButton = $el.find(\".submit-button\");\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n hasErrors = true;\n $el.find(\".last-sprint-name\").addClass(\"disappear\");\n return;\n }\n hasErrors = false;\n broadcastEvent = null;\n estimated_start = $('.date-start').val();\n estimated_end = $('.date-end').val();\n if (createSprint) {\n newSprint = angular.copy($scope.newSprint);\n newSprint.estimated_start = moment(estimated_start, prettyDate).format(\"YYYY-MM-DD\");\n newSprint.estimated_finish = moment(estimated_end, prettyDate).format(\"YYYY-MM-DD\");\n promise = $repo.create(\"milestones\", newSprint);\n broadcastEvent = \"sprintform:create:success\";\n } else {\n newSprint = $scope.newSprint.realClone();\n newSprint.estimated_start = moment(estimated_start, prettyDate).format(\"YYYY-MM-DD\");\n newSprint.estimated_finish = moment(estimated_end, prettyDate).format(\"YYYY-MM-DD\");\n promise = $repo.save(newSprint);\n broadcastEvent = \"sprintform:edit:success\";\n }\n currentLoading = $loading().target(submitButton).start();\n promise.then(function(data) {\n currentLoading.finish();\n if (createSprint) {\n $scope.sprintsCounter += 1;\n }\n $scope.sprints = _.map($scope.sprints, function(it) {\n if (it.id === data.id) {\n return data;\n } else {\n return it;\n }\n });\n if (broadcastEvent === \"sprintform:create:success\" && ussToAdd) {\n $rootscope.$broadcast(broadcastEvent, data, ussToAdd);\n } else {\n $rootscope.$broadcast(broadcastEvent, data);\n }\n return lightboxService.close($el);\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"light-error\", data._error_message);\n } else if (data.__all__) {\n return $confirm.notify(\"light-error\", data.__all__[0]);\n }\n });\n };\n })(this));\n remove = function() {\n var message, title;\n title = $translate.instant(\"LIGHTBOX.DELETE_SPRINT.TITLE\");\n message = $scope.newSprint.name;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var onError, onSuccess;\n onSuccess = function() {\n askResponse.finish();\n $scope.milestonesCounter -= 1;\n lightboxService.close($el);\n return $rootscope.$broadcast(\"sprintform:remove:success\", $scope.newSprint);\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n return $repo.remove($scope.newSprint).then(onSuccess, onError);\n };\n })(this));\n };\n getLastSprint = function() {\n var openSprints, sortedSprints;\n openSprints = _.filter($scope.sprints, function(sprint) {\n return !sprint.closed;\n });\n sortedSprints = _.sortBy(openSprints, function(sprint) {\n return moment(sprint.estimated_finish, 'YYYY-MM-DD').format('X');\n });\n return sortedSprints[sortedSprints.length - 1];\n };\n $scope.$on(\"sprintform:create\", function(event, projectId, uss) {\n var estimatedFinish, estimatedStart, lastSprint, lastSprintNameDom, prettyDate, text;\n ussToAdd = uss;\n resetSprint();\n form = $el.find(\"form\").checksley();\n form.reset();\n createSprint = true;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n $scope.newSprint.project = projectId;\n $scope.newSprint.name = null;\n $scope.newSprint.slug = null;\n lastSprint = getLastSprint();\n estimatedStart = moment();\n if (lastSprint) {\n estimatedStart = moment(lastSprint.estimated_finish);\n } else if ($scope.newSprint.estimated_start) {\n estimatedStart = moment($scope.newSprint.estimated_start);\n }\n $scope.newSprint.estimated_start = estimatedStart.format(prettyDate);\n estimatedFinish = moment().add(2, \"weeks\");\n if (lastSprint) {\n estimatedFinish = moment(lastSprint.estimated_finish).add(2, \"weeks\");\n } else if ($scope.newSprint.estimated_finish) {\n estimatedFinish = moment($scope.newSprint.estimated_finish);\n }\n $scope.newSprint.estimated_finish = estimatedFinish.format(prettyDate);\n lastSprintNameDom = $el.find(\".last-sprint-name\");\n if ((lastSprint != null ? lastSprint.name : void 0) != null) {\n text = $translate.instant(\"LIGHTBOX.ADD_EDIT_SPRINT.LAST_SPRINT_NAME\", {\n lastSprint: lastSprint.name\n });\n lastSprintNameDom.html(text);\n }\n $el.find(\".delete-sprint\").addClass(\"hidden\");\n text = $translate.instant(\"LIGHTBOX.ADD_EDIT_SPRINT.TITLE\");\n $el.find(\".title\").text(text);\n text = $translate.instant(\"COMMON.CREATE\");\n $el.find(\".button-green\").text(text);\n lightboxService.open($el);\n $el.find(\".sprint-name\").focus();\n return $el.find(\".last-sprint-name\").removeClass(\"disappear\");\n });\n $scope.$on(\"sprintform:edit\", function(ctx, sprint) {\n var editSprint, prettyDate, save;\n resetSprint();\n createSprint = false;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n $scope.$apply(function() {\n $scope.newSprint = sprint.realClone();\n $scope.newSprint.estimated_start = moment($scope.newSprint.estimated_start).format(prettyDate);\n return $scope.newSprint.estimated_finish = moment($scope.newSprint.estimated_finish).format(prettyDate);\n });\n $el.find(\".delete-sprint\").removeClass(\"hidden\");\n editSprint = $translate.instant(\"BACKLOG.EDIT_SPRINT\");\n $el.find(\".title\").text(editSprint);\n save = $translate.instant(\"COMMON.SAVE\");\n $el.find(\".button-green\").text(save);\n lightboxService.open($el);\n $el.find(\".sprint-name\").focus().select();\n return $el.find(\".last-sprint-name\").addClass(\"disappear\");\n });\n $el.on(\"keyup\", \".sprint-name\", function(event) {\n if ($el.find(\".sprint-name\").val().length > 0 || hasErrors) {\n return $el.find(\".last-sprint-name\").addClass(\"disappear\");\n } else {\n return $el.find(\".last-sprint-name\").removeClass(\"disappear\");\n }\n });\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".delete-sprint\", function(event) {\n event.preventDefault();\n return remove();\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return resetSprint();\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateEditSprint\", [\"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", \"$translate\", CreateEditSprint]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/main.coffee\n */\n\n(function() {\n var BacklogController, BacklogDirective, BurndownBacklogGraphDirective, TgBacklogProgressBarDirective, ToggleBurndownVisibility, UsPointsDirective, UsRolePointsSelectorDirective, bindMethods, bindOnce, generateHash, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n generateHash = this.taiga.generateHash;\n\n module = angular.module(\"taigaBacklog\");\n\n BacklogController = (function(superClass) {\n extend(BacklogController, superClass);\n\n BacklogController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"$tgLoading\", \"tgResources\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"$tgStorage\", \"tgFilterRemoteStorageService\", \"tgProjectService\"];\n\n BacklogController.prototype.storeCustomFiltersName = 'backlog-custom-filters';\n\n BacklogController.prototype.storeFiltersName = 'backlog-filters';\n\n BacklogController.prototype.backlogOrder = {};\n\n BacklogController.prototype.milestonesOrder = {};\n\n function BacklogController(scope1, rootscope, repo, confirm, rs, params1, q, location, appMetaService, navUrls, events, analytics, translate, loading, rs2, modelTransform, errorHandlingService, storage, filterRemoteStorageService, projectService) {\n var promise;\n this.scope = scope1;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params1;\n this.q = q;\n this.location = location;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.translate = translate;\n this.loading = loading;\n this.rs2 = rs2;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.storage = storage;\n this.filterRemoteStorageService = filterRemoteStorageService;\n this.projectService = projectService;\n bindMethods(this);\n this.backlogOrder = {};\n this.milestonesOrder = {};\n this.page = 1;\n this.disablePagination = false;\n this.firstLoadComplete = false;\n this.scope.userstories = [];\n if (this.applyStoredFilters(this.params.pslug, \"backlog-filters\")) {\n return;\n }\n this.scope.sectionName = this.translate.instant(\"BACKLOG.SECTION_NAME\");\n this.showTags = false;\n this.activeFilters = false;\n this.scope.showGraphPlaceholder = null;\n this.displayVelocity = false;\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n _this.firstLoadComplete = true;\n title = _this.translate.instant(\"BACKLOG.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.translate.instant(\"BACKLOG.PAGE_DESCRIPTION\", {\n projectName: _this.scope.project.name,\n projectDescription: _this.scope.project.description\n });\n _this.appMetaService.setAll(title, description);\n if (_this.rs.userstories.getShowTags(_this.scope.projectId)) {\n _this.showTags = true;\n return _this.scope.$broadcast(\"showTags\", _this.showTags);\n }\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n BacklogController.prototype.filtersReloadContent = function() {\n return this.loadUserstories(true);\n };\n\n BacklogController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"usform:bulk:success\", (function(_this) {\n return function() {\n _this.loadUserstories(true);\n _this.loadProjectStats();\n _this.confirm.notify(\"success\");\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"sprintform:create:success\", (function(_this) {\n return function(e, data, ussToMove) {\n _this.loadSprints().then(function() {\n return _this.scope.$broadcast(\"sprintform:create:success:callback\", ussToMove);\n });\n _this.loadProjectStats();\n _this.confirm.notify(\"success\");\n return _this.analytics.trackEvent(\"sprint\", \"create\", \"create sprint on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"usform:new:success\", (function(_this) {\n return function() {\n _this.loadUserstories(true);\n _this.loadProjectStats();\n _this.rootscope.$broadcast(\"filters:update\");\n _this.confirm.notify(\"success\");\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"create userstory on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"sprintform:edit:success\", (function(_this) {\n return function() {\n return _this.loadProjectStats();\n };\n })(this));\n this.scope.$on(\"sprintform:remove:success\", (function(_this) {\n return function(event, sprint) {\n _this.loadSprints();\n _this.loadProjectStats();\n _this.loadUserstories(true);\n if (sprint.closed) {\n _this.loadClosedSprints();\n }\n return _this.rootscope.$broadcast(\"filters:update\");\n };\n })(this));\n this.scope.$on(\"usform:edit:success\", (function(_this) {\n return function(event, data) {\n var index;\n index = _.findIndex(_this.scope.userstories, function(us) {\n return us.id === data.id;\n });\n _this.scope.userstories[index] = data;\n return _this.rootscope.$broadcast(\"filters:update\");\n };\n })(this));\n this.scope.$on(\"sprint:us:move\", this.moveUs);\n this.scope.$on(\"sprint:us:moved\", (function(_this) {\n return function() {\n _this.loadSprints();\n return _this.loadProjectStats();\n };\n })(this));\n this.scope.$on(\"backlog:load-closed-sprints\", this.loadClosedSprints);\n return this.scope.$on(\"backlog:unload-closed-sprints\", this.unloadClosedSprints);\n };\n\n BacklogController.prototype.initializeSubscription = function() {\n var routingKey1, routingKey2;\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n this.events.subscribe(this.scope, routingKey1, (function(_this) {\n return function(message) {\n _this.loadAllPaginatedUserstories();\n return _this.loadSprints();\n };\n })(this));\n routingKey2 = \"changes.project.\" + this.scope.projectId + \".milestones\";\n return this.events.subscribe(this.scope, routingKey2, (function(_this) {\n return function(message) {\n return _this.loadSprints();\n };\n })(this));\n };\n\n BacklogController.prototype.toggleShowTags = function() {\n return this.scope.$apply((function(_this) {\n return function() {\n _this.showTags = !_this.showTags;\n return _this.rs.userstories.storeShowTags(_this.scope.projectId, _this.showTags);\n };\n })(this));\n };\n\n BacklogController.prototype.toggleActiveFilters = function() {\n return this.activeFilters = !this.activeFilters;\n };\n\n BacklogController.prototype.toggleVelocityForecasting = function() {\n this.displayVelocity = !this.displayVelocity;\n if (!this.displayVelocity) {\n this.scope.visibleUserStories = _.map(this.scope.userstories, function(it) {\n return it.ref;\n });\n } else {\n this.scope.visibleUserStories = _.map(this.forecastedStories, function(it) {\n return it.ref;\n });\n }\n return scopeDefer(this.scope, (function(_this) {\n return function() {\n return _this.scope.$broadcast(\"userstories:loaded\");\n };\n })(this));\n };\n\n BacklogController.prototype.loadProjectStats = function() {\n return this.rs.projects.stats(this.scope.projectId).then((function(_this) {\n return function(stats) {\n var totalPoints;\n _this.scope.stats = stats;\n totalPoints = stats.total_points ? stats.total_points : stats.defined_points;\n if (totalPoints) {\n _this.scope.stats.completedPercentage = Math.round(100 * stats.closed_points / totalPoints);\n } else {\n _this.scope.stats.completedPercentage = 0;\n }\n _this.scope.showGraphPlaceholder = !((stats.total_points != null) && (stats.total_milestones != null));\n _this.calculateForecasting();\n return stats;\n };\n })(this));\n };\n\n BacklogController.prototype.setMilestonesOrder = function(sprints) {\n var it, j, len, results, sprint;\n results = [];\n for (j = 0, len = sprints.length; j < len; j++) {\n sprint = sprints[j];\n this.milestonesOrder[sprint.id] = {};\n results.push((function() {\n var l, len1, ref1, results1;\n ref1 = sprint.user_stories;\n results1 = [];\n for (l = 0, len1 = ref1.length; l < len1; l++) {\n it = ref1[l];\n results1.push(this.milestonesOrder[sprint.id][it.id] = it.sprint_order);\n }\n return results1;\n }).call(this));\n }\n return results;\n };\n\n BacklogController.prototype.unloadClosedSprints = function() {\n return this.scope.$apply((function(_this) {\n return function() {\n _this.scope.closedSprints = [];\n return _this.rootscope.$broadcast(\"closed-sprints:reloaded\", []);\n };\n })(this));\n };\n\n BacklogController.prototype.loadClosedSprints = function() {\n var params;\n params = {\n closed: true\n };\n return this.rs.sprints.list(this.scope.projectId, params).then((function(_this) {\n return function(result) {\n var j, len, sprint, sprints;\n sprints = result.milestones;\n _this.setMilestonesOrder(sprints);\n _this.scope.totalClosedMilestones = result.closed;\n for (j = 0, len = sprints.length; j < len; j++) {\n sprint = sprints[j];\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\");\n }\n _this.scope.closedSprints = sprints;\n _this.scope.closedSprintsById = groupBy(sprints, function(x) {\n return x.id;\n });\n _this.rootscope.$broadcast(\"closed-sprints:reloaded\", sprints);\n return sprints;\n };\n })(this));\n };\n\n BacklogController.prototype.loadSprints = function() {\n var params;\n params = {\n closed: false\n };\n return this.rs.sprints.list(this.scope.projectId, params).then((function(_this) {\n return function(result) {\n var j, len, sprint, sprints;\n sprints = result.milestones;\n _this.setMilestonesOrder(sprints);\n _this.scope.totalMilestones = sprints;\n _this.scope.totalClosedMilestones = result.closed;\n _this.scope.totalOpenMilestones = result.open;\n _this.scope.totalMilestones = _this.scope.totalOpenMilestones + _this.scope.totalClosedMilestones;\n for (j = 0, len = sprints.length; j < len; j++) {\n sprint = sprints[j];\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\");\n }\n _this.scope.sprints = sprints;\n if (!_this.scope.closedSprints) {\n _this.scope.closedSprints = [];\n }\n _this.scope.sprintsCounter = sprints.length;\n _this.scope.sprintsById = groupBy(sprints, function(x) {\n return x.id;\n });\n _this.rootscope.$broadcast(\"sprints:loaded\", sprints);\n _this.scope.currentSprint = _this.findCurrentSprint();\n return sprints;\n };\n })(this));\n };\n\n BacklogController.prototype.openSprints = function() {\n return _.filter(this.scope.sprints, (function(_this) {\n return function(sprint) {\n return !sprint.closed;\n };\n })(this)).reverse();\n };\n\n BacklogController.prototype.loadAllPaginatedUserstories = function() {\n var page;\n page = this.page;\n return this.loadUserstories(true, this.scope.userstories.length).then((function(_this) {\n return function() {\n return _this.page = page;\n };\n })(this));\n };\n\n BacklogController.prototype.loadUserstories = function(resetPagination, pageSize) {\n var params, promise;\n if (resetPagination == null) {\n resetPagination = false;\n }\n if (!this.scope.projectId) {\n return null;\n }\n this.loadingUserstories = true;\n this.disablePagination = true;\n params = _.clone(this.location.search());\n this.rs.userstories.storeQueryParams(this.scope.projectId, params);\n if (resetPagination) {\n this.page = 1;\n }\n params.page = this.page;\n promise = this.rs.userstories.listUnassigned(this.scope.projectId, params, pageSize);\n return promise.then((function(_this) {\n return function(result) {\n var header, it, j, len, ref1, userstories;\n userstories = result[0];\n header = result[1];\n if (resetPagination) {\n _this.scope.userstories = [];\n }\n _this.scope.userstories = _this.scope.userstories.concat(_.sortBy(userstories, \"backlog_order\"));\n _this.scope.visibleUserStories = _.map(_this.scope.userstories, function(it) {\n return it.ref;\n });\n ref1 = _this.scope.userstories;\n for (j = 0, len = ref1.length; j < len; j++) {\n it = ref1[j];\n _this.backlogOrder[it.id] = it.backlog_order;\n }\n _this.loadingUserstories = false;\n if (header('x-pagination-next')) {\n _this.disablePagination = false;\n _this.page++;\n }\n scopeDefer(_this.scope, function() {\n return _this.scope.$broadcast(\"userstories:loaded\");\n });\n return userstories;\n };\n })(this));\n };\n\n BacklogController.prototype.loadBacklog = function() {\n return this.q.all([this.loadProjectStats(), this.loadSprints(), this.loadUserstories()]).then(this.calculateForecasting);\n };\n\n BacklogController.prototype.calculateForecasting = function() {\n var backlog_points_sum, current_sum, j, len, ref1, results, stats, total_points, us;\n stats = this.scope.stats;\n total_points = stats.total_points;\n current_sum = stats.assigned_points;\n backlog_points_sum = 0;\n this.forecastedStories = [];\n ref1 = this.scope.userstories;\n results = [];\n for (j = 0, len = ref1.length; j < len; j++) {\n us = ref1[j];\n current_sum += us.total_points;\n backlog_points_sum += us.total_points;\n this.forecastedStories.push(us);\n if (stats.speed > 0 && backlog_points_sum > stats.speed) {\n break;\n } else {\n results.push(void 0);\n }\n }\n return results;\n };\n\n BacklogController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_backlog_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.closedMilestones = !!project.total_closed_milestones;\n this.scope.$emit('project:loaded', project);\n this.scope.points = _.sortBy(project.points, \"order\");\n this.scope.pointsById = groupBy(project.points, function(x) {\n return x.id;\n });\n this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n this.scope.usStatusList = _.sortBy(project.us_statuses, \"id\");\n return project;\n };\n\n BacklogController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n this.initializeSubscription();\n return this.loadBacklog().then((function(_this) {\n return function() {\n var milestone;\n return _this.generateFilters(milestone = \"null\");\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.scope.$emit(\"backlog:loaded\");\n };\n })(this));\n };\n\n BacklogController.prototype.prepareBulkUpdateData = function(uses, field) {\n if (field == null) {\n field = \"backlog_order\";\n }\n return _.map(uses, function(x) {\n return {\n \"us_id\": x.id,\n \"order\": x[field]\n };\n });\n };\n\n BacklogController.prototype.moveUs = function(ctx, usList, newUsIndex, newSprintId) {\n var afterDestination, beforeDestination, currentSprintId, data, it, j, key, l, len, len1, len2, len3, len4, len5, len6, len7, list, m, modifiedUs, n, newSprint, o, oldSprintId, options, orderField, orderList, p, previous, previousWithTheSameOrder, project, promise, q, r, ref1, ref2, setNextOrders, setOrders, setPreviousOrders, sprint, startIndex, us;\n oldSprintId = usList[0].milestone;\n project = usList[0].project;\n if (oldSprintId) {\n sprint = this.scope.sprintsById[oldSprintId] || this.scope.closedSprintsById[oldSprintId];\n }\n if (newSprintId) {\n newSprint = this.scope.sprintsById[newSprintId] || this.scope.closedSprintsById[newSprintId];\n }\n currentSprintId = newSprintId !== oldSprintId ? newSprintId : oldSprintId;\n orderList = null;\n orderField = \"\";\n if (newSprintId !== oldSprintId) {\n if (newSprintId === null) {\n for (key = j = 0, len = usList.length; j < len; key = ++j) {\n us = usList[key];\n _.remove(sprint.user_stories, function(it) {\n return it.id === us.id;\n });\n }\n orderField = \"backlog_order\";\n orderList = this.backlogOrder;\n beforeDestination = _.slice(this.scope.userstories, 0, newUsIndex);\n afterDestination = _.slice(this.scope.userstories, newUsIndex);\n this.scope.userstories = this.scope.userstories.concat(usList);\n } else {\n for (l = 0, len1 = usList.length; l < len1; l++) {\n us = usList[l];\n _.remove(this.scope.userstories, function(it) {\n return it.id === us.id;\n });\n }\n orderField = \"sprint_order\";\n orderList = this.milestonesOrder[newSprint.id];\n beforeDestination = _.slice(newSprint.user_stories, 0, newUsIndex);\n afterDestination = _.slice(newSprint.user_stories, newUsIndex);\n newSprint.user_stories = newSprint.user_stories.concat(usList);\n }\n } else {\n if (oldSprintId === null) {\n orderField = \"backlog_order\";\n orderList = this.backlogOrder;\n list = _.filter(this.scope.userstories, function(listIt) {\n return !_.find(usList, function(moveIt) {\n return listIt.id === moveIt.id;\n });\n });\n beforeDestination = _.slice(list, 0, newUsIndex);\n afterDestination = _.slice(list, newUsIndex);\n } else {\n orderField = \"sprint_order\";\n orderList = this.milestonesOrder[sprint.id];\n list = _.filter(newSprint.user_stories, function(listIt) {\n return !_.find(usList, function(moveIt) {\n return listIt.id === moveIt.id;\n });\n });\n beforeDestination = _.slice(list, 0, newUsIndex);\n afterDestination = _.slice(list, newUsIndex);\n }\n }\n previous = beforeDestination[beforeDestination.length - 1];\n setPreviousOrders = [];\n if (!previous) {\n startIndex = 0;\n } else if (previous) {\n startIndex = orderList[previous.id] + 1;\n previousWithTheSameOrder = _.filter(beforeDestination, function(it) {\n return it[orderField] === orderList[previous.id];\n });\n if (previousWithTheSameOrder.length > 1) {\n setPreviousOrders = _.map(previousWithTheSameOrder, function(it) {\n return {\n us_id: it.id,\n order: orderList[it.id]\n };\n });\n }\n }\n modifiedUs = [];\n for (key = m = 0, len2 = usList.length; m < len2; key = ++m) {\n us = usList[key];\n us.milestone = currentSprintId;\n us[orderField] = startIndex + key;\n orderList[us.id] = us[orderField];\n modifiedUs.push({\n us_id: us.id,\n order: us[orderField]\n });\n }\n startIndex = orderList[usList[usList.length - 1].id];\n for (key = n = 0, len3 = afterDestination.length; n < len3; key = ++n) {\n it = afterDestination[key];\n orderList[it.id] = startIndex + key + 1;\n }\n setNextOrders = _.map(afterDestination, (function(_this) {\n return function(it) {\n return {\n us_id: it.id,\n order: orderList[it.id]\n };\n };\n })(this));\n this.scope.userstories = _.sortBy(this.scope.userstories, (function(_this) {\n return function(it) {\n return _this.backlogOrder[it.id];\n };\n })(this));\n this.scope.visibleUserStories = _.map(this.scope.userstories, function(it) {\n return it.ref;\n });\n ref1 = this.scope.sprints;\n for (o = 0, len4 = ref1.length; o < len4; o++) {\n sprint = ref1[o];\n sprint.user_stories = _.sortBy(sprint.user_stories, (function(_this) {\n return function(it) {\n return _this.milestonesOrder[sprint.id][it.id];\n };\n })(this));\n }\n ref2 = this.scope.closedSprints;\n for (p = 0, len5 = ref2.length; p < len5; p++) {\n sprint = ref2[p];\n sprint.user_stories = _.sortBy(sprint.user_stories, (function(_this) {\n return function(it) {\n return _this.milestonesOrder[sprint.id][it.id];\n };\n })(this));\n }\n if (usList.length > 1 && (newSprintId !== oldSprintId)) {\n data = modifiedUs.concat(setPreviousOrders, setNextOrders);\n promise = this.rs.userstories.bulkUpdateMilestone(project, newSprintId, data);\n } else if (usList.length > 1) {\n data = modifiedUs.concat(setPreviousOrders, setNextOrders);\n promise = this.rs.userstories.bulkUpdateBacklogOrder(project, data);\n } else {\n setOrders = {};\n for (q = 0, len6 = setPreviousOrders.length; q < len6; q++) {\n it = setPreviousOrders[q];\n setOrders[it.us_id] = it.order;\n }\n for (r = 0, len7 = setNextOrders.length; r < len7; r++) {\n it = setNextOrders[r];\n setOrders[it.us_id] = it.order;\n }\n options = {\n headers: {\n \"set-orders\": JSON.stringify(setOrders)\n }\n };\n promise = this.repo.save(usList[0], true, {}, options, true);\n }\n promise.then((function(_this) {\n return function() {\n _this.rootscope.$broadcast(\"sprint:us:moved\");\n if (_this.scope.closedSprintsById && _this.scope.closedSprintsById[oldSprintId]) {\n return _this.rootscope.$broadcast(\"backlog:load-closed-sprints\");\n }\n };\n })(this));\n return promise;\n };\n\n BacklogController.prototype.updateUserStoryStatus = function() {\n return this.generateFilters().then((function(_this) {\n return function() {\n _this.rootscope.$broadcast(\"filters:update\");\n _this.loadProjectStats();\n if (_this.isFilterDataTypeSelected('status')) {\n return _this.filtersReloadContent();\n }\n };\n })(this));\n };\n\n BacklogController.prototype.editUserStory = function(projectId, ref, $event) {\n var currentLoading, target;\n target = $($event.target);\n currentLoading = this.loading().target(target).removeClasses(\"edit-story\").timeout(200).start();\n return this.rs.userstories.getByRef(projectId, ref).then((function(_this) {\n return function(us) {\n return _this.rs2.attachments.list(\"us\", us.id, projectId).then(function(attachments) {\n _this.rootscope.$broadcast(\"genericform:edit\", {\n 'objType': 'us',\n 'obj': us,\n 'attachments': attachments.toJS()\n });\n return currentLoading.finish();\n });\n };\n })(this));\n };\n\n BacklogController.prototype.deleteUserStory = function(us) {\n var message, title;\n title = this.translate.instant(\"US.TITLE_DELETE_ACTION\");\n message = us.subject;\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var promise;\n _this.scope.userstories = _.without(_this.scope.userstories, us);\n promise = _this.repo.remove(us);\n promise.then(function() {\n askResponse.finish();\n return _this.q.all([_this.loadProjectStats(), _this.loadSprints()]);\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return _this.confirm.notify(\"error\");\n });\n };\n })(this));\n };\n\n BacklogController.prototype.addNewUs = function(type) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"genericform:new\", {\n 'objType': 'us',\n 'project': this.scope.project\n });\n case \"bulk\":\n return this.rootscope.$broadcast(\"usform:bulk\", this.scope.projectId, this.scope.project.default_us_status);\n }\n };\n\n BacklogController.prototype.addNewSprint = function() {\n return this.rootscope.$broadcast(\"sprintform:create\", this.scope.projectId);\n };\n\n BacklogController.prototype.findCurrentSprint = function() {\n var currentDate;\n currentDate = new Date().getTime();\n return _.find(this.scope.sprints, function(sprint) {\n var end, start;\n start = moment(sprint.estimated_start, 'YYYY-MM-DD').format('x');\n end = moment(sprint.estimated_finish, 'YYYY-MM-DD').format('x');\n return currentDate >= start && currentDate <= end;\n });\n };\n\n return BacklogController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin, taiga.UsFiltersMixin));\n\n module.controller(\"BacklogController\", BacklogController);\n\n BacklogDirective = function($repo, $rootscope, $translate, $rs) {\n var doomLineTemplate, link, linkDoomLine, linkFilters, linkToolbar, openFilterInit, showHideFilter, showHideTags;\n doomLineTemplate = _.template(\"
    <%- text %>
    \");\n linkDoomLine = function($scope, $el, $attrs, $ctrl) {\n var addDoomLineDom, getUsItems, reloadDoomLine, removeDoomlineDom;\n reloadDoomLine = function() {\n var current_sum, domElement, i, j, len, ref1, results, stats, total_points, us;\n if ($scope.displayVelocity) {\n removeDoomlineDom();\n }\n if (($scope.stats != null) && ($scope.stats.total_points != null) && $scope.stats.total_points !== 0 && ($scope.displayVelocity == null)) {\n removeDoomlineDom();\n stats = $scope.stats;\n total_points = stats.total_points;\n current_sum = stats.assigned_points;\n if (!$scope.userstories) {\n return;\n }\n ref1 = $scope.userstories;\n results = [];\n for (i = j = 0, len = ref1.length; j < len; i = ++j) {\n us = ref1[i];\n current_sum += us.total_points;\n if (current_sum > total_points) {\n domElement = $el.find('.backlog-table-body .us-item-row')[i];\n addDoomLineDom(domElement);\n break;\n } else {\n results.push(void 0);\n }\n }\n return results;\n }\n };\n removeDoomlineDom = function() {\n return $el.find(\".doom-line\").remove();\n };\n addDoomLineDom = function(element) {\n var text;\n text = $translate.instant(\"BACKLOG.DOOMLINE\");\n return $(element).before(doomLineTemplate({\n \"text\": text\n }));\n };\n getUsItems = function() {\n var rowElements;\n rowElements = $el.find('.backlog-table-body .us-item-row');\n return _.map(rowElements, function(x) {\n return angular.element(x);\n });\n };\n $scope.$on(\"userstories:loaded\", reloadDoomLine);\n $scope.$on(\"userstories:forecast\", removeDoomlineDom);\n return $scope.$watch(\"stats\", reloadDoomLine);\n };\n linkToolbar = function($scope, $el, $attrs, $ctrl) {\n var checkSelected, getUsToMove, lastChecked, moveToCurrentSprint, moveToLatestSprint, moveUssToSprint, shiftPressed;\n getUsToMove = function() {\n var ussDom;\n ussDom = $el.find(\".backlog-table-body input:checkbox:checked\");\n return _.map(ussDom, function(item) {\n var itemScope;\n item = $(item).closest('.tg-scope');\n itemScope = item.scope();\n itemScope.us.milestone = $scope.sprints[0].id;\n return itemScope.us;\n });\n };\n moveUssToSprint = function(selectedUss, sprint) {\n var data, extraPoints, totalExtraPoints, ussCurrent;\n ussCurrent = _($scope.userstories);\n $scope.userstories = ussCurrent.without.apply(ussCurrent, selectedUss).value();\n extraPoints = _.map(selectedUss, function(v, k) {\n return v.total_points;\n });\n totalExtraPoints = _.reduce(extraPoints, function(acc, num) {\n return acc + num;\n });\n sprint.user_stories = _.union(sprint.user_stories, selectedUss);\n sprint.total_points += totalExtraPoints;\n data = _.map(selectedUss, function(us) {\n return {\n us_id: us.id,\n order: us.sprint_order\n };\n });\n $rs.userstories.bulkUpdateMilestone($scope.project.id, $scope.sprints[0].id, data).then((function(_this) {\n return function() {\n $ctrl.loadSprints();\n $ctrl.loadProjectStats();\n $ctrl.toggleVelocityForecasting();\n return $ctrl.calculateForecasting();\n };\n })(this));\n return $el.find(\".move-to-sprint\").hide();\n };\n moveToCurrentSprint = function(selectedUss) {\n return moveUssToSprint(selectedUss, $scope.currentSprint);\n };\n moveToLatestSprint = function(selectedUss) {\n return moveUssToSprint(selectedUss, $scope.sprints[0]);\n };\n $scope.$on(\"sprintform:create:success:callback\", function(e, ussToMove) {\n return _.partial(moveToCurrentSprint, ussToMove)();\n });\n shiftPressed = false;\n lastChecked = null;\n checkSelected = function(target) {\n var moveToSprintDom, selectedUsDom;\n lastChecked = target.closest(\".us-item-row\");\n target.closest('.us-item-row').toggleClass('ui-multisortable-multiple');\n moveToSprintDom = $el.find(\".move-to-sprint\");\n selectedUsDom = $el.find(\".backlog-table-body input:checkbox:checked\");\n if (selectedUsDom.length > 0 && $scope.sprints.length > 0) {\n return moveToSprintDom.show();\n } else {\n return moveToSprintDom.hide();\n }\n };\n $(window).on(\"keydown.shift-pressed keyup.shift-pressed\", function(event) {\n shiftPressed = !!event.shiftKey;\n return true;\n });\n $el.on(\"change\", \".backlog-table-body input:checkbox\", function(event) {\n var current, elements, nextAll, prevAll, target;\n if (lastChecked && shiftPressed) {\n elements = [];\n current = $(event.currentTarget).closest(\".us-item-row\");\n nextAll = lastChecked.nextAll();\n prevAll = lastChecked.prevAll();\n if (_.some(nextAll, function(next) {\n return next === current[0];\n })) {\n elements = lastChecked.nextUntil(current);\n } else if (_.some(prevAll, function(prev) {\n return prev === current[0];\n })) {\n elements = lastChecked.prevUntil(current);\n }\n _.map(elements, function(elm) {\n var input;\n input = $(elm).find(\"input:checkbox\");\n input.prop('checked', true);\n return checkSelected(input);\n });\n }\n target = angular.element(event.currentTarget);\n target.closest(\".us-item-row\").toggleClass('is-checked');\n return checkSelected(target);\n });\n $el.on(\"click\", \"#move-to-latest-sprint\", (function(_this) {\n return function(event) {\n var ussToMove;\n ussToMove = getUsToMove();\n return $scope.$apply(_.partial(moveToLatestSprint, ussToMove));\n };\n })(this));\n $el.on(\"click\", \"#move-to-current-sprint\", (function(_this) {\n return function(event) {\n var ussToMove;\n ussToMove = getUsToMove();\n return $scope.$apply(_.partial(moveToCurrentSprint, ussToMove));\n };\n })(this));\n $el.on(\"click\", \"#show-tags\", function(event) {\n event.preventDefault();\n $ctrl.toggleShowTags();\n return showHideTags($ctrl);\n });\n return $el.on(\"click\", \".forecasting-add-sprint\", function(event) {\n var ussToMove, ussToMoveList;\n ussToMoveList = $ctrl.forecastedStories;\n if ($scope.currentSprint) {\n ussToMove = _.map(ussToMoveList, function(us, index) {\n us.milestone = $scope.currentSprint.id;\n us.order = index;\n return us;\n });\n return $scope.$apply(_.partial(moveToCurrentSprint, ussToMove));\n } else {\n ussToMove = _.map(ussToMoveList, function(us, index) {\n us.order = index;\n return us;\n });\n return $rootscope.$broadcast(\"sprintform:create\", $scope.projectId, ussToMove);\n }\n });\n };\n showHideTags = function($ctrl) {\n var elm, text;\n elm = angular.element(\"#show-tags\");\n if ($ctrl.showTags) {\n elm.addClass(\"active\");\n text = $translate.instant(\"BACKLOG.TAGS.HIDE\");\n return elm.text(text);\n } else {\n elm.removeClass(\"active\");\n text = $translate.instant(\"BACKLOG.TAGS.SHOW\");\n return elm.text(text);\n }\n };\n openFilterInit = function($scope, $el, $ctrl) {\n var sidebar;\n sidebar = $el.find(\"sidebar.backlog-filter\");\n sidebar.addClass(\"active\");\n return $ctrl.activeFilters = true;\n };\n showHideFilter = function($scope, $el, $ctrl) {\n var hideText, showText, sidebar, target;\n sidebar = $el.find(\"sidebar.backlog-filter\");\n sidebar.one(\"transitionend\", function() {\n return timeout(150, function() {\n $rootscope.$broadcast(\"resize\");\n return $('.burndown').css(\"visibility\", \"visible\");\n });\n });\n target = angular.element(\"#show-filters-button\");\n $('.burndown').css(\"visibility\", \"hidden\");\n sidebar.toggleClass(\"active\");\n target.toggleClass(\"active\");\n hideText = $translate.instant(\"BACKLOG.FILTERS.HIDE\");\n showText = $translate.instant(\"BACKLOG.FILTERS.SHOW\");\n toggleText(target, [hideText, showText]);\n return $ctrl.toggleActiveFilters();\n };\n linkFilters = function($scope, $el, $attrs, $ctrl) {\n $scope.filtersSearch = {};\n return $el.on(\"click\", \"#show-filters-button\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n return showHideFilter($scope, $el, $ctrl);\n });\n });\n };\n link = function($scope, $el, $attrs, $rootscope) {\n var $ctrl, filters;\n $ctrl = $el.controller();\n linkToolbar($scope, $el, $attrs, $ctrl);\n linkFilters($scope, $el, $attrs, $ctrl);\n linkDoomLine($scope, $el, $attrs, $ctrl);\n filters = $ctrl.location.search();\n if (filters.status || filters.tags || filters.q || filters.assigned_to || filters.owner) {\n openFilterInit($scope, $el, $ctrl);\n }\n $scope.$on(\"showTags\", function() {\n return showHideTags($ctrl);\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return $(window).off(\".shift-pressed\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklog\", [\"$tgRepo\", \"$rootScope\", \"$translate\", \"$tgResources\", BacklogDirective]);\n\n UsRolePointsSelectorDirective = function($rootscope, $template, $compile, $translate) {\n var link, selectionTemplate;\n selectionTemplate = $template.get(\"backlog/us-role-points-popover.html\", true);\n link = function($scope, $el, $attrs) {\n bindOnce($scope, \"project\", function(project) {\n var numberOfRoles, roles;\n roles = _.filter(project.roles, \"computable\");\n numberOfRoles = _.size(roles);\n if (numberOfRoles > 1) {\n return $el.append($compile(selectionTemplate({\n \"roles\": roles\n }))($scope));\n } else {\n $el.find(\".icon-arrow-down\").remove();\n return $el.find(\".header-points\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"uspoints:select\", function(ctx, roleId, roleName) {\n $el.find(\".popover\").popover().close();\n return $el.find(\".header-points\").html(roleName + \"/Total\");\n });\n $scope.$on(\"uspoints:clear-selection\", function(ctx, roleId) {\n var text;\n $el.find(\".popover\").popover().close();\n text = $translate.instant(\"COMMON.FIELDS.POINTS\");\n return $el.find(\".header-points\").text(text);\n });\n $el.on(\"click\", function(event) {\n var target;\n target = angular.element(event.target);\n if (target.is(\"span\") || target.is(\"div\")) {\n event.stopPropagation();\n }\n return $el.find(\".popover\").popover().open();\n });\n $el.on(\"click\", \".clear-selection\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $rootscope.$broadcast(\"uspoints:clear-selection\");\n });\n $el.on(\"click\", \".role\", function(event) {\n var rolScope, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n rolScope = target.scope();\n return $rootscope.$broadcast(\"uspoints:select\", target.data(\"role-id\"), target.text());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUsRolePointsSelector\", [\"$rootScope\", \"$tgTemplate\", \"$compile\", \"$translate\", UsRolePointsSelectorDirective]);\n\n UsPointsDirective = function($tgEstimationsService, $repo, $tgTemplate) {\n var link, rolesTemplate;\n rolesTemplate = $tgTemplate.get(\"common/estimation/us-points-roles-popover.html\", true);\n link = function($scope, $el, $attrs) {\n var $ctrl, bindClickElements, estimationProcess, filteringRoleId, renderRolesSelector, selectedRoleId, updatingSelectedRoleId;\n $ctrl = $el.controller();\n updatingSelectedRoleId = null;\n selectedRoleId = null;\n filteringRoleId = null;\n estimationProcess = null;\n $scope.$on(\"uspoints:select\", function(ctx, roleId, roleName) {\n var us;\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n selectedRoleId = roleId;\n return estimationProcess.render();\n });\n $scope.$on(\"uspoints:clear-selection\", function(ctx) {\n var us;\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n selectedRoleId = null;\n return estimationProcess.render();\n });\n $scope.$watch($attrs.tgBacklogUsPoints, function(us) {\n var roles;\n if (us) {\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project);\n roles = estimationProcess.calculateRoles();\n if (roles.length === 0) {\n $el.find(\".icon-arrow-bottom\").remove();\n $el.find(\"a.us-points\").addClass(\"not-clickable\");\n } else if (roles.length === 1) {\n selectedRoleId = _.keys(us.points)[0];\n }\n if (estimationProcess.isEditable) {\n bindClickElements();\n }\n estimationProcess.onSelectedPointForRole = function(roleId, pointId, points) {\n us.points = points;\n estimationProcess.render();\n return this.save(roleId, pointId).then(function() {\n return $ctrl.loadProjectStats();\n });\n };\n estimationProcess.render = function() {\n var ctx, html, mainTemplate, pointId, pointObj, template, text, title, totalPoints;\n totalPoints = this.calculateTotalPoints();\n if ((selectedRoleId == null) || roles.length === 1) {\n text = totalPoints;\n title = totalPoints;\n } else {\n pointId = this.us.points[selectedRoleId];\n pointObj = this.pointsById[pointId];\n text = pointObj.name + \" / \" + totalPoints + \"\";\n title = pointObj.name + \" / \" + totalPoints;\n }\n ctx = {\n totalPoints: totalPoints,\n roles: this.calculateRoles(),\n editable: this.isEditable,\n text: text,\n title: title\n };\n mainTemplate = \"common/estimation/us-estimation-total.html\";\n template = $tgTemplate.get(mainTemplate, true);\n html = template(ctx);\n return this.$el.html(html);\n };\n return estimationProcess.render();\n }\n });\n renderRolesSelector = function() {\n var html, roles;\n roles = estimationProcess.calculateRoles();\n html = rolesTemplate({\n \"roles\": roles\n });\n $el.append(html);\n return $el.find(\".pop-role\").popover().open(function() {\n return $(this).remove();\n });\n };\n bindClickElements = function() {\n $el.on(\"click\", \"a.us-points\", function(event) {\n var us;\n event.preventDefault();\n event.stopPropagation();\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n updatingSelectedRoleId = selectedRoleId;\n if (selectedRoleId != null) {\n return estimationProcess.renderPointsSelector(selectedRoleId);\n } else {\n return renderRolesSelector();\n }\n });\n return $el.on(\"click\", \".role\", function(event) {\n var popRolesDom, target, us;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n updatingSelectedRoleId = target.data(\"role-id\");\n popRolesDom = $el.find(\".pop-role\");\n popRolesDom.find(\"a\").removeClass(\"active\");\n popRolesDom.find(\"a[data-role-id='\" + updatingSelectedRoleId + \"']\").addClass(\"active\");\n return estimationProcess.renderPointsSelector(updatingSelectedRoleId);\n });\n };\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogUsPoints\", [\"$tgEstimationsService\", \"$tgRepo\", \"$tgTemplate\", UsPointsDirective]);\n\n ToggleBurndownVisibility = function($storage) {\n var hide, link, show;\n hide = function() {\n $(\".js-burndown-graph\").removeClass(\"shown\");\n $(\".js-toggle-burndown-visibility-button\").removeClass(\"active\");\n return $(\".js-burndown-graph\").removeClass(\"open\");\n };\n show = function(firstLoad) {\n $(\".js-toggle-burndown-visibility-button\").addClass(\"active\");\n if (firstLoad) {\n return $(\".js-burndown-graph\").addClass(\"shown\");\n } else {\n return $(\".js-burndown-graph\").addClass(\"open\");\n }\n };\n link = function($scope, $el, $attrs) {\n var firstLoad, hash, toggleGraph;\n firstLoad = true;\n hash = generateHash([\"is-burndown-grpahs-collapsed\"]);\n $scope.isBurndownGraphCollapsed = $storage.get(hash) || false;\n toggleGraph = function() {\n if ($scope.isBurndownGraphCollapsed) {\n hide(firstLoad);\n } else {\n show(firstLoad);\n }\n return firstLoad = false;\n };\n $scope.$watch(\"showGraphPlaceholder\", function() {\n if ($scope.showGraphPlaceholder != null) {\n $scope.isBurndownGraphCollapsed = $scope.isBurndownGraphCollapsed || $scope.showGraphPlaceholder;\n return toggleGraph();\n }\n });\n $el.on(\"click\", \".js-toggle-burndown-visibility-button\", function() {\n $scope.isBurndownGraphCollapsed = !$scope.isBurndownGraphCollapsed;\n $storage.set(hash, $scope.isBurndownGraphCollapsed);\n return toggleGraph();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgToggleBurndownVisibility\", [\"$tgStorage\", ToggleBurndownVisibility]);\n\n BurndownBacklogGraphDirective = function($translate) {\n var link, redrawChart;\n redrawChart = function(element, dataToDraw) {\n var client_increment_line, colors, data, evolution_line, j, milestonesRange, optimal_line, options, ref1, results, team_increment_line, width, zero_line;\n width = element.width();\n element.height(width / 6);\n milestonesRange = (function() {\n results = [];\n for (var j = 0, ref1 = dataToDraw.milestones.length - 1; 0 <= ref1 ? j <= ref1 : j >= ref1; 0 <= ref1 ? j++ : j--){ results.push(j); }\n return results;\n }).apply(this);\n data = [];\n zero_line = _.map(dataToDraw.milestones, function(ml) {\n return 0;\n });\n data.push({\n data: _.zip(milestonesRange, zero_line),\n lines: {\n fillColor: \"rgba(0,0,0,0)\"\n },\n points: {\n show: false\n }\n });\n optimal_line = _.map(dataToDraw.milestones, function(ml) {\n return ml.optimal;\n });\n data.push({\n data: _.zip(milestonesRange, optimal_line),\n lines: {\n fillColor: \"rgba(120,120,120,0.2)\"\n }\n });\n evolution_line = _.filter(_.map(dataToDraw.milestones, function(ml) {\n return ml.evolution;\n }), function(evolution) {\n return evolution != null;\n });\n data.push({\n data: _.zip(milestonesRange, evolution_line),\n lines: {\n fillColor: \"rgba(102,153,51,0.3)\"\n }\n });\n client_increment_line = _.map(dataToDraw.milestones, function(ml) {\n return -ml[\"team-increment\"] - ml[\"client-increment\"];\n });\n data.push({\n data: _.zip(milestonesRange, client_increment_line),\n lines: {\n fillColor: \"rgba(255,51,51,0.3)\"\n }\n });\n team_increment_line = _.map(dataToDraw.milestones, function(ml) {\n return -ml[\"team-increment\"];\n });\n data.push({\n data: _.zip(milestonesRange, team_increment_line),\n lines: {\n fillColor: \"rgba(153,51,51,0.3)\"\n }\n });\n colors = [\"rgba(0,0,0,1)\", \"rgba(120,120,120,0.2)\", \"rgba(102,153,51,1)\", \"rgba(153,51,51,1)\", \"rgba(255,51,51,1)\"];\n options = {\n grid: {\n borderWidth: {\n top: 0,\n right: 1,\n left: 0,\n bottom: 0\n },\n borderColor: \"#ccc\",\n hoverable: true\n },\n xaxis: {\n ticks: dataToDraw.milestones.length,\n axisLabel: $translate.instant(\"BACKLOG.CHART.XAXIS_LABEL\"),\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\",\n axisLabelPadding: 5,\n tickFormatter: function(val, axis) {\n return \"\";\n }\n },\n yaxis: {\n axisLabel: $translate.instant(\"BACKLOG.CHART.YAXIS_LABEL\"),\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\",\n axisLabelPadding: 5\n },\n series: {\n shadowSize: 0,\n lines: {\n show: true,\n fill: true\n },\n points: {\n show: true,\n fill: true,\n radius: 4,\n lineWidth: 2\n }\n },\n colors: colors,\n tooltip: true,\n tooltipOpts: {\n content: function(label, xval, yval, flotItem) {\n var ctx;\n if (flotItem.seriesIndex === 1) {\n ctx = {\n sprintName: dataToDraw.milestones[xval].name,\n value: Math.abs(yval)\n };\n return $translate.instant(\"BACKLOG.CHART.OPTIMAL\", ctx);\n } else if (flotItem.seriesIndex === 2) {\n ctx = {\n sprintName: dataToDraw.milestones[xval].name,\n value: Math.abs(yval)\n };\n return $translate.instant(\"BACKLOG.CHART.REAL\", ctx);\n } else if (flotItem.seriesIndex === 3) {\n ctx = {\n sprintName: dataToDraw.milestones[xval].name,\n value: Math.abs(yval)\n };\n return $translate.instant(\"BACKLOG.CHART.INCREMENT_CLIENT\", ctx);\n } else {\n ctx = {\n sprintName: dataToDraw.milestones[xval].name,\n value: Math.abs(yval)\n };\n return $translate.instant(\"BACKLOG.CHART.INCREMENT_TEAM\", ctx);\n }\n }\n }\n };\n element.empty();\n return element.plot(data, options).data(\"plot\");\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch(\"stats\", function(value) {\n if ($scope.stats != null) {\n redrawChart(element, $scope.stats);\n return $scope.$on(\"resize\", function() {\n return redrawChart(element, $scope.stats);\n });\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBurndownBacklogGraph\", [\"$translate\", BurndownBacklogGraphDirective]);\n\n TgBacklogProgressBarDirective = function($template, $compile) {\n var adjustPercentaje, link, render, template;\n template = $template.get(\"backlog/progress-bar.html\", true);\n render = function(scope, el, projectPointsPercentaje, closedPointsPercentaje) {\n var html;\n html = template({\n projectPointsPercentaje: projectPointsPercentaje,\n closedPointsPercentaje: closedPointsPercentaje\n });\n html = $compile(html)(scope);\n return el.html(html);\n };\n adjustPercentaje = function(percentage) {\n var adjusted;\n adjusted = _.max([0, percentage]);\n adjusted = _.min([100, adjusted]);\n return Math.round(adjusted);\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch($attrs.tgBacklogProgressBar, function(stats) {\n var closedPoints, closedPointsPercentaje, definedPoints, projectPointsPercentaje, totalPoints;\n if (stats != null) {\n totalPoints = stats.total_points ? stats.total_points : stats.defined_points;\n definedPoints = stats.defined_points;\n closedPoints = stats.closed_points;\n if (definedPoints > totalPoints) {\n projectPointsPercentaje = totalPoints * 100 / definedPoints;\n closedPointsPercentaje = closedPoints * 100 / definedPoints;\n } else {\n projectPointsPercentaje = 100;\n closedPointsPercentaje = closedPoints * 100 / totalPoints;\n }\n projectPointsPercentaje = adjustPercentaje(projectPointsPercentaje - 3);\n closedPointsPercentaje = adjustPercentaje(closedPointsPercentaje - 3);\n return render($scope, $el, projectPointsPercentaje, closedPointsPercentaje);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogProgressBar\", [\"$tgTemplate\", \"$compile\", TgBacklogProgressBarDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/sortable.coffee\n */\n\n(function() {\n var BacklogSortableDirective, bindOnce, deleteElement, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaBacklog\");\n\n deleteElement = function(el) {\n $(el).scope().$destroy();\n $(el).off();\n return $(el).remove();\n };\n\n BacklogSortableDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, \"project\", function(project) {\n var drake, initIsBacklog, scroll;\n if (!(project.my_permissions.indexOf(\"modify_us\") > -1)) {\n return;\n }\n initIsBacklog = false;\n drake = dragula([$el[0], $('.js-empty-backlog')[0]], {\n copySortSource: false,\n copy: false,\n isContainer: function(el) {\n return el.classList.contains('sprint-table');\n },\n moves: function(item) {\n if (!$(item).hasClass('row')) {\n return false;\n }\n return true;\n }\n });\n drake.on('drag', function(item, container) {\n var isChecked, parent;\n parent = $(item).parent();\n initIsBacklog = parent.hasClass('backlog-table-body');\n $(document.body).addClass(\"drag-active\");\n isChecked = $(item).find(\"input[type='checkbox']\").is(\":checked\");\n return window.dragMultiple.start(item, container);\n });\n drake.on('cloned', function(item) {\n return $(item).addClass('multiple-drag-mirror');\n });\n drake.on('dragend', function(item) {\n var dragMultipleItems, firstElement, index, isBacklog, parent, sameContainer, sprint, usList;\n parent = $(item).parent();\n $('.doom-line').remove();\n parent = $(item).parent();\n isBacklog = parent.hasClass('backlog-table-body') || parent.hasClass('js-empty-backlog');\n if (initIsBacklog || isBacklog) {\n sameContainer = initIsBacklog === isBacklog;\n } else {\n sameContainer = $(item).scope().sprint.id === parent.scope().sprint.id;\n }\n dragMultipleItems = window.dragMultiple.stop();\n $(document.body).removeClass(\"drag-active\");\n sprint = null;\n firstElement = dragMultipleItems.length ? dragMultipleItems[0] : item;\n if (isBacklog) {\n index = $(firstElement).index(\".backlog-table-body .row\");\n } else {\n index = $(firstElement).index();\n sprint = parent.scope().sprint.id;\n }\n if (!sameContainer) {\n if (dragMultipleItems.length) {\n usList = _.map(dragMultipleItems, function(item) {\n return item = $(item).scope().us;\n });\n } else {\n usList = [$(item).scope().us];\n }\n if (dragMultipleItems.length) {\n _.each(dragMultipleItems, function(item) {\n return deleteElement(item);\n });\n } else {\n deleteElement(item);\n }\n } else {\n if (dragMultipleItems.length) {\n usList = _.map(dragMultipleItems, function(item) {\n return item = $(item).scope().us;\n });\n } else {\n usList = [$(item).scope().us];\n }\n }\n return $scope.$emit(\"sprint:us:move\", usList, index, sprint);\n });\n scroll = autoScroll([window], {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return drake.destroy();\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogSortable\", BacklogSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/sprints.coffee\n */\n\n(function() {\n var BacklogSprintDirective, BacklogSprintHeaderDirective, ToggleExcludeClosedSprintsVisualization, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaBacklog\");\n\n BacklogSprintDirective = function($repo, $rootscope) {\n var link, slideOptions, sprintTableMinHeight, toggleSprint;\n sprintTableMinHeight = 50;\n slideOptions = {\n duration: 500,\n easing: 'linear'\n };\n toggleSprint = (function(_this) {\n return function($el) {\n var sprintArrow, sprintTable;\n sprintTable = $el.find(\".sprint-table\");\n sprintArrow = $el.find(\".compact-sprint\");\n sprintArrow.toggleClass('active');\n return sprintTable.toggleClass('open');\n };\n })(this);\n link = function($scope, $el, $attrs) {\n $scope.$watch($attrs.tgBacklogSprint, function(sprint) {\n sprint = $scope.$eval($attrs.tgBacklogSprint);\n if (sprint.closed) {\n return $el.addClass(\"sprint-closed\");\n } else {\n return toggleSprint($el);\n }\n });\n $el.on(\"click\", \".sprint-name > .compact-sprint\", function(event) {\n event.preventDefault();\n toggleSprint($el);\n return $el.find(\".sprint-table\").slideToggle(slideOptions);\n });\n $el.on(\"click\", \".edit-sprint\", function(event) {\n var sprint;\n event.preventDefault();\n sprint = $scope.$eval($attrs.tgBacklogSprint);\n return $rootscope.$broadcast(\"sprintform:edit\", sprint);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogSprint\", [\"$tgRepo\", \"$rootScope\", BacklogSprintDirective]);\n\n BacklogSprintHeaderDirective = function($navUrls, $template, $compile, $translate) {\n var link, template;\n template = $template.get(\"backlog/sprint-header.html\");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, isVisible, prettyDate, render;\n prettyDate = $translate.instant(\"BACKLOG.SPRINTS.DATE\");\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_milestone\") !== -1;\n };\n isVisible = function() {\n return $scope.project.my_permissions.indexOf(\"view_milestones\") !== -1;\n };\n render = function(sprint) {\n var compiledTemplate, ctx, estimatedDateRange, finish, start, taskboardUrl, templateScope;\n taskboardUrl = $navUrls.resolve(\"project-taskboard\", {\n project: $scope.project.slug,\n sprint: sprint.slug\n });\n start = moment(sprint.estimated_start).format(prettyDate);\n finish = moment(sprint.estimated_finish).format(prettyDate);\n estimatedDateRange = start + \"-\" + finish;\n ctx = {\n name: sprint.name,\n taskboardUrl: taskboardUrl,\n estimatedDateRange: estimatedDateRange,\n closedPoints: sprint.closed_points || 0,\n totalPoints: sprint.total_points || 0,\n isVisible: isVisible(),\n isEditable: isEditable()\n };\n templateScope = $scope.$new();\n _.assign(templateScope, ctx);\n compiledTemplate = $compile(template)(templateScope);\n return $el.html(compiledTemplate);\n };\n $scope.$watch(\"sprint\", function(sprint) {\n return render(sprint);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\"\n };\n };\n\n module.directive(\"tgBacklogSprintHeader\", [\"$tgNavUrls\", \"$tgTemplate\", \"$compile\", \"$translate\", BacklogSprintHeaderDirective]);\n\n ToggleExcludeClosedSprintsVisualization = function($rootscope, $loading, $translate) {\n var excludeClosedSprints, link;\n excludeClosedSprints = true;\n link = function($scope, $el, $attrs) {\n var currentLoading, loadingElm;\n loadingElm = $(\"
    \");\n $el.after(loadingElm);\n currentLoading = null;\n $el.on(\"click\", function(event) {\n event.preventDefault();\n excludeClosedSprints = !excludeClosedSprints;\n currentLoading = $loading().target(loadingElm).start();\n if (excludeClosedSprints) {\n return $rootscope.$broadcast(\"backlog:unload-closed-sprints\");\n } else {\n return $rootscope.$broadcast(\"backlog:load-closed-sprints\");\n }\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return $scope.$on(\"closed-sprints:reloaded\", function(ctx, sprints) {\n var key, text;\n currentLoading.finish();\n if (sprints.length > 0) {\n key = \"BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS\";\n } else {\n key = \"BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS\";\n }\n text = $translate.instant(key);\n return $el.find(\".text\").text(text);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogToggleClosedSprintsVisualization\", [\"$rootScope\", \"$tgLoading\", \"$translate\", ToggleExcludeClosedSprintsVisualization]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/charts.coffee\n */\n\n(function() {\n var SprintGraphDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaTaskboard\");\n\n SprintGraphDirective = function($translate) {\n var link, redrawChart;\n redrawChart = function(element, dataToDraw) {\n var data, days, options, width;\n width = element.width();\n element.height(240);\n days = _.map(dataToDraw, function(x) {\n return moment.utc(x.day);\n });\n data = [];\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, function(d) {\n return d.optimal_points;\n })),\n lines: {\n fillColor: \"rgba(120,120,120,0.2)\"\n }\n });\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, function(d) {\n return d.open_points;\n })),\n lines: {\n fillColor: \"rgba(102,153,51,0.3)\"\n }\n });\n options = {\n grid: {\n borderWidth: {\n top: 0,\n right: 1,\n left: 0,\n bottom: 0\n },\n borderColor: '#ccc',\n hoverable: true\n },\n xaxis: {\n tickSize: [1, \"day\"],\n min: days[0],\n max: _.last(days),\n mode: \"time\",\n daysNames: days,\n axisLabel: $translate.instant(\"TASKBOARD.CHARTS.XAXIS_LABEL\"),\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif',\n axisLabelPadding: 5\n },\n yaxis: {\n min: 0,\n axisLabel: $translate.instant(\"TASKBOARD.CHARTS.YAXIS_LABEL\"),\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif',\n axisLabelPadding: 5\n },\n series: {\n shadowSize: 0,\n lines: {\n show: true,\n fill: true\n },\n points: {\n show: true,\n fill: true,\n radius: 4,\n lineWidth: 2\n }\n },\n colors: [\"rgba(102,153,51,1)\", \"rgba(120,120,120,0.2)\"],\n tooltip: true,\n tooltipOpts: {\n content: function(label, xval, yval, flotItem) {\n var formattedDate, roundedValue;\n formattedDate = moment(xval).format($translate.instant(\"TASKBOARD.CHARTS.DATE\"));\n roundedValue = Math.round(yval);\n if (flotItem.seriesIndex === 1) {\n return $translate.instant(\"TASKBOARD.CHARTS.OPTIMAL\", {\n formattedDate: formattedDate,\n roundedValue: roundedValue\n });\n } else {\n return $translate.instant(\"TASKBOARD.CHARTS.REAL\", {\n formattedDate: formattedDate,\n roundedValue: roundedValue\n });\n }\n }\n }\n };\n element.empty();\n return element.plot(data, options).data(\"plot\");\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$on(\"resize\", function() {\n if ($scope.stats) {\n return redrawChart(element, $scope.stats.days);\n }\n });\n $scope.$on(\"taskboard:graph:toggle-visibility\", function() {\n $el.parent().toggleClass('open');\n return timeout(100, function() {\n if ($scope.stats) {\n return redrawChart(element, $scope.stats.days);\n }\n });\n });\n $scope.$watch('stats', function(value) {\n if ($scope.stats == null) {\n return;\n }\n return redrawChart(element, $scope.stats.days);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSprintGraph\", [\"$translate\", SprintGraphDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/lightboxes.coffee\n */\n\n(function() {\n var CreateBulkTasksDirective, bindOnce, debounce, module, taiga, trim;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n trim = this.taiga.trim;\n\n module = angular.module(\"taigaTaskboard\");\n\n CreateBulkTasksDirective = function($repo, $rs, $rootscope, $loading, lightboxService, $model) {\n var link;\n link = function($scope, $el, attrs) {\n var submit, submitButton;\n $scope.form = {\n data: \"\",\n usId: null\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, data, form, projectId, promise, sprintId, usId;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n data = $scope.form.data;\n projectId = $scope.projectId;\n sprintId = $scope.form.sprintId;\n usId = $scope.form.usId;\n promise = $rs.tasks.bulkCreate(projectId, sprintId, usId, data);\n promise.then(function(result) {\n result = _.map(result, (function(_this) {\n return function(x) {\n return $model.make_model('tasks', x);\n };\n })(this));\n currentLoading.finish();\n $rootscope.$broadcast(\"taskform:bulk:success\", result);\n return lightboxService.close($el);\n });\n return promise.then(null, function() {\n return currentLoading.finish();\n });\n };\n })(this));\n $scope.$on(\"taskform:bulk\", function(ctx, sprintId, usId) {\n lightboxService.open($el);\n return $scope.form = {\n data: \"\",\n sprintId: sprintId,\n usId: usId\n };\n });\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateBulkTasks\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"$tgLoading\", \"lightboxService\", \"$tgModel\", CreateBulkTasksDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/main.coffee\n */\n\n(function() {\n var TaskboardController, TaskboardDirective, TaskboardSquishColumnDirective, bindMethods, bindOnce, debounceLeading, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n toggleText = this.taiga.toggleText;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n scopeDefer = this.taiga.scopeDefer;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n debounceLeading = this.taiga.debounceLeading;\n\n module = angular.module(\"taigaTaskboard\");\n\n TaskboardController = (function(superClass) {\n extend(TaskboardController, superClass);\n\n TaskboardController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"tgResources\", \"$routeParams\", \"$q\", \"tgAppMetaService\", \"$tgLocation\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"tgErrorHandlingService\", \"tgTaskboardTasks\", \"tgTaskboardIssues\", \"$tgStorage\", \"tgFilterRemoteStorageService\"];\n\n function TaskboardController(scope, rootscope, repo, confirm, rs1, rs2, params1, q1, appMetaService, location, navUrls, events, analytics, translate, errorHandlingService, taskboardTasksService, taskboardIssuesService, storage, filterRemoteStorageService) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs1;\n this.rs2 = rs2;\n this.params = params1;\n this.q = q1;\n this.appMetaService = appMetaService;\n this.location = location;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.taskboardTasksService = taskboardTasksService;\n this.taskboardIssuesService = taskboardIssuesService;\n this.storage = storage;\n this.filterRemoteStorageService = filterRemoteStorageService;\n bindMethods(this);\n this.taskboardTasksService.reset();\n this.scope.userstories = [];\n this.openFilter = false;\n if (this.applyStoredFilters(this.params.pslug, \"tasks-filters\")) {\n return;\n }\n this.scope.sectionName = this.translate.instant(\"TASKBOARD.SECTION_NAME\");\n this.initializeEventHandlers();\n taiga.defineImmutableProperty(this.scope, \"usTasks\", (function(_this) {\n return function() {\n return _this.taskboardTasksService.usTasks;\n };\n })(this));\n taiga.defineImmutableProperty(this.scope, \"milestoneIssues\", (function(_this) {\n return function() {\n return _this.taskboardIssuesService.milestoneIssues;\n };\n })(this));\n }\n\n TaskboardController.prototype.firstLoad = function() {\n var promise;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this._setMeta();\n };\n })(this));\n return promise.then(null, this.onInitialDataError.bind(this));\n };\n\n TaskboardController.prototype.setZoom = function(zoomLevel, zoom) {\n var previousZoomLevel;\n if (this.zoomLevel === zoomLevel) {\n return null;\n }\n this.isFirstLoad = !this.zoomLevel;\n previousZoomLevel = this.zoomLevel;\n this.zoomLevel = zoomLevel;\n this.zoom = zoom;\n if (this.isFirstLoad) {\n this.firstLoad().then((function(_this) {\n return function() {\n _this.isFirstLoad = false;\n return _this.taskboardTasksService.resetFolds();\n };\n })(this));\n } else if (this.zoomLevel > 1 && previousZoomLevel <= 1) {\n this.zoomLoading = true;\n this.q.all([this.loadTasks(), this.loadIssues()]).then((function(_this) {\n return function() {\n _this.zoomLoading = false;\n return _this.taskboardTasksService.resetFolds();\n };\n })(this));\n }\n if (this.zoomLevel === '0') {\n return this.rootscope.$broadcast(\"sprint:zoom0\");\n }\n };\n\n TaskboardController.prototype.changeQ = function(q) {\n this.replaceFilter(\"q\", q);\n this.loadTasks();\n return this.generateFilters();\n };\n\n TaskboardController.prototype.removeFilter = function(filter) {\n this.unselectFilter(filter.dataType, filter.id);\n this.loadTasks();\n return this.generateFilters();\n };\n\n TaskboardController.prototype.addFilter = function(newFilter) {\n this.selectFilter(newFilter.category.dataType, newFilter.filter.id);\n this.loadTasks();\n return this.generateFilters();\n };\n\n TaskboardController.prototype.selectCustomFilter = function(customFilter) {\n this.replaceAllFilters(customFilter.filter);\n this.loadTasks();\n return this.generateFilters();\n };\n\n TaskboardController.prototype.removeCustomFilter = function(customFilter) {\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, 'tasks-custom-filters').then((function(_this) {\n return function(userFilters) {\n delete userFilters[customFilter.id];\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, 'tasks-custom-filters').then(_this.generateFilters);\n };\n })(this));\n };\n\n TaskboardController.prototype.isFilterDataTypeSelected = function(filterDataType) {\n var filter, i, len, ref;\n ref = this.selectedFilters;\n for (i = 0, len = ref.length; i < len; i++) {\n filter = ref[i];\n if (filter['dataType'] === filterDataType) {\n return true;\n }\n }\n return false;\n };\n\n TaskboardController.prototype.saveCustomFilter = function(name) {\n var filters, urlfilters;\n filters = {};\n urlfilters = this.location.search();\n filters.tags = urlfilters.tags;\n filters.status = urlfilters.status;\n filters.assigned_to = urlfilters.assigned_to;\n filters.owner = urlfilters.owner;\n filters.role = urlfilters.role;\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, 'tasks-custom-filters').then((function(_this) {\n return function(userFilters) {\n userFilters[name] = filters;\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, 'tasks-custom-filters').then(_this.generateFilters);\n };\n })(this));\n };\n\n TaskboardController.prototype.generateFilters = function() {\n var loadFilters, urlfilters;\n this.storeFilters(this.params.pslug, this.location.search(), \"tasks-filters\");\n urlfilters = this.location.search();\n loadFilters = {};\n loadFilters.project = this.scope.projectId;\n loadFilters.milestone = this.scope.sprintId;\n loadFilters.tags = urlfilters.tags;\n loadFilters.status = urlfilters.status;\n loadFilters.assigned_to = urlfilters.assigned_to;\n loadFilters.owner = urlfilters.owner;\n loadFilters.role = urlfilters.role;\n loadFilters.q = urlfilters.q;\n return this.q.all([this.rs.tasks.filtersData(loadFilters), this.filterRemoteStorageService.getFilters(this.scope.projectId, 'tasks-custom-filters')]).then((function(_this) {\n return function(result) {\n var assignedTo, customFiltersRaw, data, owner, role, selected, statuses, tags, tagsWithAtLeastOneElement;\n data = result[0];\n customFiltersRaw = result[1];\n statuses = _.map(data.statuses, function(it) {\n it.id = it.id.toString();\n return it;\n });\n tags = _.map(data.tags, function(it) {\n it.id = it.name;\n return it;\n });\n tagsWithAtLeastOneElement = _.filter(tags, function(tag) {\n return tag.count > 0;\n });\n assignedTo = _.map(data.assigned_to, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.full_name || \"Unassigned\";\n return it;\n });\n role = _.map(data.roles, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.name || \"Unassigned\";\n return it;\n });\n owner = _.map(data.owners, function(it) {\n it.id = it.id.toString();\n it.name = it.full_name;\n return it;\n });\n _this.selectedFilters = [];\n if (loadFilters.status) {\n selected = _this.formatSelectedFilters(\"status\", statuses, loadFilters.status);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.tags) {\n selected = _this.formatSelectedFilters(\"tags\", tags, loadFilters.tags);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.assigned_to) {\n selected = _this.formatSelectedFilters(\"assigned_to\", assignedTo, loadFilters.assigned_to);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.owner) {\n selected = _this.formatSelectedFilters(\"owner\", owner, loadFilters.owner);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.role) {\n selected = _this.formatSelectedFilters(\"role\", role, loadFilters.role);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n _this.filterQ = loadFilters.q;\n _this.filters = [\n {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.STATUS\"),\n dataType: \"status\",\n content: statuses\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.TAGS\"),\n dataType: \"tags\",\n content: tags,\n hideEmpty: true,\n totalTaggedElements: tagsWithAtLeastOneElement.length\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ASSIGNED_TO\"),\n dataType: \"assigned_to\",\n content: assignedTo\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ROLE\"),\n dataType: \"role\",\n content: role\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.CREATED_BY\"),\n dataType: \"owner\",\n content: owner\n }\n ];\n _this.customFilters = [];\n return _.forOwn(customFiltersRaw, function(value, key) {\n return _this.customFilters.push({\n id: key,\n name: key,\n filter: value\n });\n });\n };\n })(this));\n };\n\n TaskboardController.prototype._setMeta = function() {\n var description, prettyDate, title;\n prettyDate = this.translate.instant(\"BACKLOG.SPRINTS.DATE\");\n title = this.translate.instant(\"TASKBOARD.PAGE_TITLE\", {\n projectName: this.scope.project.name,\n sprintName: this.scope.sprint.name\n });\n description = this.translate.instant(\"TASKBOARD.PAGE_DESCRIPTION\", {\n projectName: this.scope.project.name,\n sprintName: this.scope.sprint.name,\n startDate: moment(this.scope.sprint.estimated_start).format(prettyDate),\n endDate: moment(this.scope.sprint.estimated_finish).format(prettyDate),\n completedPercentage: this.scope.stats.completedPercentage || \"0\",\n completedPoints: this.scope.stats.completedPointsSum || \"--\",\n totalPoints: this.scope.stats.totalPointsSum || \"--\",\n openTasks: this.scope.stats.openTasks || \"--\",\n totalTasks: this.scope.stats.total_tasks || \"--\"\n });\n return this.appMetaService.setAll(title, description);\n };\n\n TaskboardController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"taskform:bulk:success\", (function(_this) {\n return function(event, tasks) {\n _this.refreshTagsColors().then(function() {\n return _this.taskboardTasksService.add(tasks);\n });\n return _this.analytics.trackEvent(\"task\", \"create\", \"bulk create task on taskboard\", 1);\n };\n })(this));\n this.scope.$on(\"taskform:new:success\", (function(_this) {\n return function(event, task) {\n _this.refreshTagsColors().then(function() {\n return _this.taskboardTasksService.add(task);\n });\n return _this.analytics.trackEvent(\"task\", \"create\", \"create task on taskboard\", 1);\n };\n })(this));\n this.scope.$on(\"taskform:edit:success\", (function(_this) {\n return function(event, task) {\n return _this.refreshTagsColors().then(function() {\n return _this.taskboardTasksService.replaceModel(task);\n });\n };\n })(this));\n this.scope.$on(\"issueform:new:success\", (function(_this) {\n return function(event, issue) {\n _this.refreshTagsColors().then(function() {\n return _this.taskboardIssuesService.add(issue);\n });\n return _this.analytics.trackEvent(\"issue\", \"create\", \"create issue on taskboard\", 1);\n };\n })(this));\n this.scope.$on(\"issueform:add:success\", (function(_this) {\n return function(event, issue) {\n return _this.refreshTagsColors().then(function() {\n return _this.taskboardIssuesService.add(issue);\n });\n };\n })(this));\n this.scope.$on(\"issueform:edit:success\", (function(_this) {\n return function(event, issue) {\n return _this.refreshTagsColors().then(function() {\n return _this.taskboardIssuesService.replaceModel(issue);\n });\n };\n })(this));\n this.scope.$on(\"taskboard:task:deleted\", (function(_this) {\n return function(event, task) {\n return _this.loadTasks();\n };\n })(this));\n this.scope.$on(\"taskboard:issue:deleted\", (function(_this) {\n return function(event, issue) {\n return _this.loadIssues();\n };\n })(this));\n this.scope.$on(\"taskboard:task:move\", this.taskMove);\n this.scope.$on(\"assigned-to:added\", this.onAssignedToChanged);\n return this.scope.$on(\"taskboard:items:move\", (function(_this) {\n return function(event, itemsMoved) {\n if (itemsMoved.uss) {\n return _this.firstLoad();\n } else {\n if (itemsMoved.tasks) {\n _this.loadTasks();\n }\n if (itemsMoved.issues) {\n return _this.loadIssues();\n }\n }\n };\n })(this));\n };\n\n TaskboardController.prototype.onAssignedToChanged = function(ctx, userid, model) {\n if (model.getName() === 'tasks') {\n model.assigned_to = userid;\n this.taskboardTasksService.replaceModel(model);\n this.repo.save(model).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_to') || _this.isFilterDataTypeSelected('role')) {\n return _this.loadTasks();\n }\n };\n })(this));\n }\n if (model.getName() === 'issues') {\n model.assigned_to = userid;\n this.taskboardIssuesService.replaceModel(model);\n return this.repo.save(model).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_to') || _this.isFilterDataTypeSelected('role')) {\n return _this.loadIssues();\n }\n };\n })(this));\n }\n };\n\n TaskboardController.prototype.initializeSubscription = function() {\n var routingKey, routingKey1;\n routingKey = \"changes.project.\" + this.scope.projectId + \".tasks\";\n this.events.subscribe(this.scope, routingKey, debounceLeading(500, (function(_this) {\n return function(message) {\n return _this.loadTaskboard();\n };\n })(this)));\n routingKey = \"changes.project.\" + this.scope.projectId + \".issues\";\n this.events.subscribe(this.scope, routingKey, debounceLeading(500, (function(_this) {\n return function(message) {\n return _this.loadIssues();\n };\n })(this)));\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n return this.events.subscribe(this.scope, routingKey1, (function(_this) {\n return function(message) {\n _this.refreshTagsColors();\n _this.loadSprintStats();\n return _this.loadSprint();\n };\n })(this));\n };\n\n TaskboardController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n if (!project.is_backlog_activated) {\n _this.errorHandlingService.permissionDenied();\n }\n _this.scope.project = project;\n _this.scope.pointsList = _.sortBy(project.points, \"order\");\n _this.scope.pointsById = groupBy(project.points, function(e) {\n return e.id;\n });\n _this.scope.roleById = groupBy(project.roles, function(e) {\n return e.id;\n });\n _this.scope.taskStatusList = _.sortBy(project.task_statuses, \"order\");\n _this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n _this.scope.usStatusById = groupBy(project.us_statuses, function(e) {\n return e.id;\n });\n _this.scope.issueStatusById = groupBy(project.issue_statuses, function(e) {\n return e.id;\n });\n _this.scope.$emit('project:loaded', project);\n _this.fillUsersAndRoles(project.members, project.roles);\n return project;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadSprintStats = function() {\n return this.rs.sprints.stats(this.scope.projectId, this.scope.sprintId).then((function(_this) {\n return function(stats) {\n var completedPointsSum, remainingPointsSum, remainingTasks, totalPointsSum;\n totalPointsSum = _.reduce(_.values(stats.total_points), (function(res, n) {\n return res + n;\n }), 0);\n completedPointsSum = _.reduce(_.values(stats.completed_points), (function(res, n) {\n return res + n;\n }), 0);\n remainingPointsSum = totalPointsSum - completedPointsSum;\n remainingTasks = stats.total_tasks - stats.completed_tasks;\n _this.scope.stats = stats;\n _this.scope.stats.totalPointsSum = totalPointsSum;\n _this.scope.stats.completedPointsSum = completedPointsSum;\n _this.scope.stats.remainingPointsSum = remainingPointsSum;\n _this.scope.stats.remainingTasks = remainingTasks;\n if (stats.totalPointsSum) {\n _this.scope.stats.completedPercentage = Math.round(100 * stats.completedPointsSum / stats.totalPointsSum);\n } else {\n _this.scope.stats.completedPercentage = 0;\n }\n _this.scope.stats.openTasks = stats.total_tasks - stats.completed_tasks;\n return stats;\n };\n })(this));\n };\n\n TaskboardController.prototype.refreshTagsColors = function() {\n return this.rs.projects.tagsColors(this.scope.projectId).then((function(_this) {\n return function(tags_colors) {\n return _this.scope.project.tags_colors = tags_colors._attrs;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadSprint = function() {\n return this.rs.sprints.get(this.scope.projectId, this.scope.sprintId).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n _this.scope.userstories = _.sortBy(sprint.user_stories, \"sprint_order\");\n _this.taskboardTasksService.setUserstories(_this.scope.userstories);\n return sprint;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadIssues = function() {\n var params;\n params = {};\n if (this.zoomLevel > 1) {\n params.include_attachments = 1;\n }\n params = _.merge(params, this.location.search());\n return this.rs.issues.listInProject(this.scope.projectId, this.scope.sprintId, params).then((function(_this) {\n return function(issues) {\n _this.taskboardIssuesService.init(_this.scope.project, _this.scope.usersById, _this.scope.issueStatusById);\n _this.taskboardIssuesService.set(issues);\n return _this.scope.taskBoardLoading = false;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadTasks = function() {\n var params;\n params = {};\n if (this.zoomLevel > 1) {\n params.include_attachments = 1;\n }\n params = _.merge(params, this.location.search());\n return this.rs.tasks.list(this.scope.projectId, this.scope.sprintId, null, params).then((function(_this) {\n return function(tasks) {\n _this.taskboardTasksService.init(_this.scope.project, _this.scope.usersById);\n return _this.taskboardTasksService.set(tasks);\n };\n })(this));\n };\n\n TaskboardController.prototype.loadTaskboard = function() {\n return this.q.all([\n this.refreshTagsColors(), this.loadSprintStats(), this.loadSprint().then((function(_this) {\n return function() {\n _this.loadTasks();\n return _this.loadIssues();\n };\n })(this))\n ]);\n };\n\n TaskboardController.prototype.loadInitialData = function() {\n var params, promise;\n params = {\n pslug: this.params.pslug,\n sslug: this.params.sslug\n };\n promise = this.repo.resolve(params).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n _this.scope.sprintId = data.milestone;\n _this.initializeSubscription();\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n _this.generateFilters();\n return _this.loadTaskboard().then(function() {\n return _this.setRolePoints();\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.showPlaceHolder = function(statusId, usId) {\n if (!this.taskboardTasksService.tasksRaw.length) {\n if (this.scope.taskStatusList[0].id === statusId && (!this.scope.userstories.length || this.scope.userstories[0].id === usId)) {\n return true;\n }\n }\n return false;\n };\n\n TaskboardController.prototype.editTask = function(id) {\n var task;\n task = this.taskboardTasksService.getTask(id);\n task = task.set('loading-edit', true);\n this.taskboardTasksService.replace(task);\n return this.rs.tasks.getByRef(task.getIn(['model', 'project']), task.getIn(['model', 'ref'])).then((function(_this) {\n return function(editingTask) {\n return _this.rs2.attachments.list(\"task\", task.get('id'), task.getIn(['model', 'project'])).then(function(attachments) {\n _this.rootscope.$broadcast(\"genericform:edit\", {\n 'objType': 'task',\n 'obj': editingTask,\n 'project': _this.scope.project,\n 'sprintId': _this.scope.sprintId,\n 'attachments': attachments.toJS()\n });\n task = task.set('loading-edit', false);\n return _this.taskboardTasksService.replace(task);\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.editIssue = function(id) {\n var issue;\n issue = this.taskboardIssuesService.getIssue(id);\n issue = issue.set('loading-edit', true);\n return this.rs.issues.getByRef(issue.getIn(['model', 'project']), issue.getIn(['model', 'ref'])).then((function(_this) {\n return function(editingIssue) {\n return _this.rs2.attachments.list(\"issue\", issue.get('id'), issue.getIn(['model', 'project'])).then(function(attachments) {\n _this.rootscope.$broadcast(\"genericform:edit\", {\n 'objType': 'issue',\n 'obj': editingIssue,\n 'project': _this.scope.project,\n 'sprintId': _this.scope.sprintId,\n 'attachments': attachments.toJS()\n });\n return issue = issue.set('loading-edit', false);\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.deleteTask = function(id) {\n var task;\n task = this.taskboardTasksService.getTask(id);\n task = task.set('loading-delete', true);\n return this.rs.tasks.getByRef(task.getIn(['model', 'project']), task.getIn(['model', 'ref'])).then((function(_this) {\n return function(deletingTask) {\n var message, title;\n task = task.set('loading-delete', false);\n title = _this.translate.instant(\"TASK.TITLE_DELETE_ACTION\");\n message = deletingTask.subject;\n return _this.confirm.askOnDelete(title, message).then(function(askResponse) {\n var promise;\n promise = _this.repo.remove(deletingTask);\n promise.then(function() {\n _this.scope.$broadcast(\"taskboard:task:deleted\");\n return askResponse.finish();\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return this.confirm.notify(\"error\");\n });\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.deleteIssue = function(id) {\n var issue;\n issue = this.taskboardIssuesService.getIssue(id);\n issue = issue.set('loading-delete', true);\n return this.rs.issues.getByRef(issue.getIn(['model', 'project']), issue.getIn(['model', 'ref'])).then((function(_this) {\n return function(deletingIssue) {\n var message, title;\n issue = issue.set('loading-delete', false);\n title = _this.translate.instant(\"ISSUES.ACTION_DELETE\");\n message = deletingIssue.subject;\n return _this.confirm.askOnDelete(title, message).then(function(askResponse) {\n var promise;\n promise = _this.repo.remove(deletingIssue);\n promise.then(function() {\n _this.scope.$broadcast(\"taskboard:issue:deleted\");\n return askResponse.finish();\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return this.confirm.notify(\"error\");\n });\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.removeIssueFromSprint = function(id) {\n var issue;\n issue = this.taskboardIssuesService.getIssue(id);\n issue = issue.set('loading-delete', true);\n return this.rs.issues.getByRef(issue.getIn(['model', 'project']), issue.getIn(['model', 'ref'])).then((function(_this) {\n return function(removingIssue) {\n var message, title;\n issue = issue.set('loading-delete', false);\n title = _this.translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.TITLE\");\n message = _this.translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE\");\n message = _this.translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE\", {\n sprintName: _this.scope.sprint.name\n });\n return _this.confirm.ask(title, null, message).then(function(askResponse) {\n var promise;\n removingIssue.milestone = null;\n promise = _this.repo.save(removingIssue);\n promise.then(function() {\n _this.taskboardIssuesService.remove(removingIssue);\n return askResponse.finish();\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return this.confirm.notify(\"error\");\n });\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.taskMove = function(ctx, task, oldStatusId, usId, statusId, order) {\n var moveUpdateData, options, params, promise;\n this.scope.movingTask = true;\n task = this.taskboardTasksService.getTaskModel(task.get('id'));\n moveUpdateData = this.taskboardTasksService.move(task.id, usId, statusId, order);\n params = {\n status__is_archived: false,\n include_attachments: true\n };\n options = {\n headers: {\n \"set-orders\": JSON.stringify(moveUpdateData.set_orders)\n }\n };\n return promise = this.repo.save(task, true, params, options, true).then((function(_this) {\n return function(result) {\n var headers;\n if (result[0].user_story) {\n _this.reloadUserStory(result[0].user_story);\n }\n _this.scope.movingTask = false;\n headers = result[1];\n if (headers && headers['taiga-info-order-updated']) {\n order = JSON.parse(headers['taiga-info-order-updated']);\n _this.taskboardTasksService.assignOrders(order);\n }\n _this.loadSprintStats();\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('status')) {\n return _this.loadTasks();\n }\n };\n })(this));\n };\n\n TaskboardController.prototype.reloadUserStory = function(userStoryId) {\n return this.rs.userstories.get(this.scope.project.id, userStoryId).then((function(_this) {\n return function(us) {\n return _this.scope.userstories = _.map(_this.scope.userstories, function(x) {\n if (x.id === us.id) {\n return us;\n } else {\n return x;\n }\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.addNewTask = function(type, us) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"genericform:new\", {\n 'objType': 'task',\n 'project': this.scope.project,\n 'sprintId': this.scope.sprintId,\n 'usId': us != null ? us.id : void 0\n });\n case \"bulk\":\n return this.rootscope.$broadcast(\"taskform:bulk\", this.scope.sprintId, us != null ? us.id : void 0);\n }\n };\n\n TaskboardController.prototype.addNewIssue = function(type, us) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"genericform:new-or-existing\", {\n objType: 'issue',\n project: this.scope.project,\n sprintId: this.scope.sprintId,\n relatedField: 'milestone',\n relatedObjectId: this.scope.sprintId,\n targetName: this.scope.sprint.name\n });\n case \"standard\":\n return this.rootscope.$broadcast(\"taskform:new\", this.scope.sprintId, us != null ? us.id : void 0);\n case \"bulk\":\n return this.rootscope.$broadcast(\"issueform:bulk\", this.scope.projectId, this.scope.sprintId);\n }\n };\n\n TaskboardController.prototype.toggleFold = function(id, modelName) {\n if (modelName === 'issues') {\n return this.taskboardIssuesService.toggleFold(id);\n } else if (modelName === 'tasks') {\n return this.taskboardTasksService.toggleFold(id);\n }\n };\n\n TaskboardController.prototype.changeTaskAssignedTo = function(id) {\n var task;\n task = this.taskboardTasksService.getTaskModel(id);\n return this.rootscope.$broadcast(\"assigned-to:add\", task);\n };\n\n TaskboardController.prototype.changeIssueAssignedTo = function(id) {\n var issue;\n issue = this.taskboardIssuesService.getIssueModel(id);\n return this.rootscope.$broadcast(\"assigned-to:add\", issue);\n };\n\n TaskboardController.prototype.setRolePoints = function() {\n var computableRoles, getPoint, getRole, pointsByRole;\n computableRoles = _.filter(this.scope.project.roles, \"computable\");\n getRole = (function(_this) {\n return function(roleId) {\n roleId = parseInt(roleId, 10);\n return _.find(computableRoles, function(role) {\n return role.id === roleId;\n });\n };\n })(this);\n getPoint = (function(_this) {\n return function(pointId) {\n var poitnId;\n poitnId = parseInt(pointId, 10);\n return _.find(_this.scope.project.points, function(point) {\n return point.id === pointId;\n });\n };\n })(this);\n pointsByRole = _.reduce(this.scope.userstories, (function(_this) {\n return function(result, us, key) {\n _.forOwn(us.points, function(pointId, roleId) {\n var point, role;\n role = getRole(roleId);\n point = getPoint(pointId);\n if (!result[role.id]) {\n result[role.id] = role;\n result[role.id].points = 0;\n }\n return result[role.id].points += point.value;\n });\n return result;\n };\n })(this), {});\n return this.scope.pointsByRole = Object.keys(pointsByRole).map(function(key) {\n return pointsByRole[key];\n });\n };\n\n return TaskboardController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"TaskboardController\", TaskboardController);\n\n TaskboardDirective = function($rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, tableBodyDom;\n $ctrl = $el.controller();\n $el.on(\"click\", \".toggle-analytics-visibility\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n target.toggleClass('active');\n return $rootscope.$broadcast(\"taskboard:graph:toggle-visibility\");\n });\n tableBodyDom = $el.find(\".taskboard-table-body\");\n tableBodyDom.on(\"scroll\", function(event) {\n var tableHeaderDom, target;\n target = angular.element(event.currentTarget);\n tableHeaderDom = $el.find(\".taskboard-table-header .taskboard-table-inner\");\n return tableHeaderDom.css(\"left\", -1 * target.scrollLeft());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboard\", [\"$rootScope\", TaskboardDirective]);\n\n TaskboardSquishColumnDirective = function(rs) {\n var avatarWidth, link, maxColumnWidth;\n avatarWidth = 40;\n maxColumnWidth = 300;\n link = function($scope, $el, $attrs) {\n var getCeilWidth, recalculateStatusColumnWidth, recalculateTaskboardWidth, refreshTaskboardTableWidth, setStatusColumnWidth;\n $scope.$on(\"sprint:zoom0\", (function(_this) {\n return function() {\n return recalculateTaskboardWidth();\n };\n })(this));\n $scope.$on(\"sprint:task:moved\", (function(_this) {\n return function() {\n return recalculateTaskboardWidth();\n };\n })(this));\n $scope.$watch(\"usTasks\", function() {\n if ($scope.project) {\n $scope.statusesFolded = rs.tasks.getStatusColumnModes($scope.project.id);\n $scope.usFolded = rs.tasks.getUsRowModes($scope.project.id, $scope.sprintId);\n return recalculateTaskboardWidth();\n }\n });\n $scope.foldStatus = function(status) {\n $scope.statusesFolded[status.id] = !!!$scope.statusesFolded[status.id];\n rs.tasks.storeStatusColumnModes($scope.projectId, $scope.statusesFolded);\n return recalculateTaskboardWidth();\n };\n $scope.foldUs = function(rowId) {\n $scope.usFolded[rowId] = !!!$scope.usFolded[rowId];\n rs.tasks.storeUsRowModes($scope.projectId, $scope.sprintId, $scope.usFolded);\n return recalculateTaskboardWidth();\n };\n getCeilWidth = (function(_this) {\n return function(usId, statusId) {\n var tasks, tasksMatrixSize, width;\n if (usId) {\n tasks = $scope.usTasks.getIn([usId.toString(), statusId.toString()]).size;\n } else {\n tasks = $scope.usTasks.getIn(['null', statusId.toString()]).size;\n }\n if ($scope.statusesFolded[statusId]) {\n if (tasks && $scope.usFolded[usId]) {\n tasksMatrixSize = Math.round(Math.sqrt(tasks));\n width = avatarWidth * tasksMatrixSize;\n } else {\n width = avatarWidth;\n }\n return width;\n }\n return 0;\n };\n })(this);\n setStatusColumnWidth = (function(_this) {\n return function(statusId, width) {\n var column;\n column = $el.find(\".squish-status-\" + statusId);\n if (width) {\n return column.css('max-width', width);\n } else {\n if ($scope.ctrl.zoomLevel === '0') {\n return column.css(\"max-width\", 148);\n } else {\n return column.css(\"max-width\", maxColumnWidth);\n }\n }\n };\n })(this);\n refreshTaskboardTableWidth = (function(_this) {\n return function() {\n var columnWidths, columns, issueCardMaxWidth, issuesBoxWidth, totalWidth;\n columnWidths = [];\n columns = $el.find(\".task-colum-name\");\n columnWidths = _.map(columns, function(column) {\n return $(column).outerWidth(true);\n });\n totalWidth = _.reduce(columnWidths, function(total, width) {\n return total + width;\n });\n $el.find('.taskboard-table-inner').css(\"width\", totalWidth);\n issuesBoxWidth = $el.find('.issues-row .taskboard-row-title-box').outerWidth(true);\n $el.find('.issues-row').css(\"width\", totalWidth - columnWidths.pop());\n issueCardMaxWidth = $scope.ctrl.zoomLevel === '0' ? 128 : 280;\n return $el.find('.issues-row .taskboard-cards-box .card').css(\"max-width\", issueCardMaxWidth);\n };\n })(this);\n recalculateStatusColumnWidth = (function(_this) {\n return function(statusId) {\n var statusFoldedWidth;\n statusFoldedWidth = getCeilWidth(null, statusId);\n _.forEach($scope.userstories, function(us) {\n var width;\n width = getCeilWidth(us.id, statusId);\n if (width > statusFoldedWidth) {\n return statusFoldedWidth = width;\n }\n });\n return setStatusColumnWidth(statusId, statusFoldedWidth);\n };\n })(this);\n return recalculateTaskboardWidth = (function(_this) {\n return function() {\n _.forEach($scope.taskStatusList, function(status) {\n return recalculateStatusColumnWidth(status.id);\n });\n refreshTaskboardTableWidth();\n };\n })(this);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboardSquishColumn\", [\"$tgResources\", TaskboardSquishColumnDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/sortable.coffee\n */\n\n(function() {\n var TaskboardSortableDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n module = angular.module(\"taigaBacklog\");\n\n TaskboardSortableDirective = function($repo, $rs, $rootscope, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var unwatch;\n return unwatch = $scope.$watch(\"usTasks\", function(usTasks) {\n var containers, deleteElement, drake, filterError, itemEl, newParentScope, oldParentScope, scroll, tdom;\n if (!usTasks || !usTasks.size) {\n return;\n }\n unwatch();\n if (!($scope.project.my_permissions.indexOf(\"modify_task\") > -1)) {\n return;\n }\n oldParentScope = null;\n newParentScope = null;\n itemEl = null;\n tdom = $el;\n filterError = function() {\n var text;\n text = $translate.instant(\"BACKLOG.SORTABLE_FILTER_ERROR\");\n return $tgConfirm.notify(\"error\", text);\n };\n deleteElement = function(itemEl) {\n itemEl.scope().$destroy();\n itemEl.off();\n return itemEl.remove();\n };\n containers = _.map($el.find('.taskboard-column'), function(item) {\n return item;\n });\n drake = dragula(containers, {\n copySortSource: false,\n copy: false,\n accepts: function(el, target) {\n return !$(target).hasClass('taskboard-row-title-box');\n },\n moves: function(item) {\n return $(item).is('tg-card');\n }\n });\n drake.on('drag', function(item) {\n oldParentScope = $(item).parent().scope();\n if ($el.hasClass(\"active-filters\")) {\n filterError();\n setTimeout((function() {\n return drake.cancel(true);\n }), 0);\n return false;\n }\n });\n drake.on('dragend', function(item) {\n var itemIndex, itemTask, newStatusId, newUsId, oldStatusId, oldUsId, parentEl;\n parentEl = $(item).parent();\n itemEl = $(item);\n itemTask = itemEl.scope().task;\n itemIndex = itemEl.index();\n newParentScope = parentEl.scope();\n oldUsId = oldParentScope.us ? oldParentScope.us.id : null;\n oldStatusId = oldParentScope.st.id;\n newUsId = newParentScope.us ? newParentScope.us.id : null;\n newStatusId = newParentScope.st.id;\n if (newStatusId !== oldStatusId || newUsId !== oldUsId) {\n deleteElement(itemEl);\n }\n return $scope.$apply(function() {\n return $rootscope.$broadcast(\"taskboard:task:move\", itemTask, itemTask.getIn(['model', 'status']), newUsId, newStatusId, itemIndex);\n });\n });\n scroll = autoScroll([$('.taskboard-table-body')[0]], {\n margin: 100,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return drake.destroy();\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboardSortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"$translate\", TaskboardSortableDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/taskboard-issues.coffee\n */\n\n(function() {\n var TaskboardIssuesService, groupBy,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n groupBy = this.taiga.groupBy;\n\n TaskboardIssuesService = (function(superClass) {\n extend(TaskboardIssuesService, superClass);\n\n TaskboardIssuesService.$inject = [];\n\n function TaskboardIssuesService() {\n this.reset();\n }\n\n TaskboardIssuesService.prototype.reset = function() {\n this.foldStatusChanged = {};\n return this.issuesRaw = [];\n };\n\n TaskboardIssuesService.prototype.init = function(project, usersById, issueStatusById) {\n this.issueStatusById = issueStatusById;\n this.project = project;\n return this.usersById = usersById;\n };\n\n TaskboardIssuesService.prototype.resetFolds = function() {\n this.foldStatusChanged = {};\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.toggleFold = function(issueId) {\n this.foldStatusChanged[issueId] = !this.foldStatusChanged[issueId];\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.add = function(issue) {\n this.issuesRaw = this.issuesRaw.concat(issue);\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.remove = function(issue) {\n var item, key, ref;\n ref = this.issuesRaw;\n for (key in ref) {\n item = ref[key];\n if (issue.id === item.id) {\n this.issuesRaw.splice(key, 1);\n this.refresh();\n return;\n }\n }\n };\n\n TaskboardIssuesService.prototype.set = function(issues) {\n this.issuesRaw = issues;\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.getIssue = function(id) {\n return this.milestoneIssues.find(function(issue) {\n return issue.get('id') === id;\n });\n };\n\n TaskboardIssuesService.prototype.getIssueModel = function(id) {\n return _.find(this.issuesRaw, function(issue) {\n return issue.id === id;\n });\n };\n\n TaskboardIssuesService.prototype.replaceModel = function(issue) {\n this.issuesRaw = _.map(this.issuesRaw, function(item) {\n if (issue.id === item.id) {\n return issue;\n } else {\n return item;\n }\n });\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.refresh = function() {\n var i, issue, issueModel, issues, len, ref;\n issues = [];\n ref = this.issuesRaw;\n for (i = 0, len = ref.length; i < len; i++) {\n issueModel = ref[i];\n issue = {};\n issue.foldStatusChanged = this.foldStatusChanged[issueModel.id];\n issue.model = issueModel.getAttrs();\n issue.modelName = issueModel.getName();\n issue.id = issueModel.id;\n issue.status = this.issueStatusById[issueModel.status];\n issue.images = _.filter(issue.model.attachments, function(it) {\n return !!it.thumbnail_card_url;\n });\n issue.assigned_to = this.usersById[issueModel.assigned_to];\n issue.colorized_tags = _.map(issue.model.tags, function(tag) {\n return {\n name: tag[0],\n color: tag[1]\n };\n });\n issues.push(issue);\n }\n return this.milestoneIssues = Immutable.fromJS(issues);\n };\n\n return TaskboardIssuesService;\n\n })(taiga.Service);\n\n angular.module(\"taigaKanban\").service(\"tgTaskboardIssues\", TaskboardIssuesService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/taskboard-tasks.coffee\n */\n\n(function() {\n var TaskboardTasksService, groupBy,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n groupBy = this.taiga.groupBy;\n\n TaskboardTasksService = (function(superClass) {\n extend(TaskboardTasksService, superClass);\n\n TaskboardTasksService.$inject = [];\n\n function TaskboardTasksService() {\n this.reset();\n }\n\n TaskboardTasksService.prototype.reset = function() {\n this.tasksRaw = [];\n this.foldStatusChanged = {};\n return this.usTasks = Immutable.Map();\n };\n\n TaskboardTasksService.prototype.init = function(project, usersById) {\n this.project = project;\n return this.usersById = usersById;\n };\n\n TaskboardTasksService.prototype.resetFolds = function() {\n this.foldStatusChanged = {};\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.toggleFold = function(taskId) {\n this.foldStatusChanged[taskId] = !this.foldStatusChanged[taskId];\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.add = function(task) {\n this.tasksRaw = this.tasksRaw.concat(task);\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.set = function(tasks) {\n this.tasksRaw = tasks;\n this.refreshRawOrder();\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.setUserstories = function(userstories) {\n return this.userstories = userstories;\n };\n\n TaskboardTasksService.prototype.refreshRawOrder = function() {\n var i, len, ref, results, task;\n this.order = {};\n ref = this.tasksRaw;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n task = ref[i];\n results.push(this.order[task.id] = task.taskboard_order);\n }\n return results;\n };\n\n TaskboardTasksService.prototype.assignOrders = function(order) {\n order = _.invert(order);\n this.order = _.assign(this.order, order);\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.getTask = function(id) {\n var findedTask;\n findedTask = null;\n this.usTasks.forEach(function(us) {\n us.forEach(function(status) {\n findedTask = status.find(function(task) {\n return task.get('id') === id;\n });\n if (findedTask) {\n return false;\n }\n });\n if (findedTask) {\n return false;\n }\n });\n return findedTask;\n };\n\n TaskboardTasksService.prototype.replace = function(task) {\n return this.usTasks = this.usTasks.map(function(us) {\n return us.map(function(status) {\n var findedIndex;\n findedIndex = status.findIndex(function(usItem) {\n return usItem.get('id') === us.get('id');\n });\n if (findedIndex !== -1) {\n status = status.set(findedIndex, task);\n }\n return status;\n });\n });\n };\n\n TaskboardTasksService.prototype.getTaskModel = function(id) {\n return _.find(this.tasksRaw, function(task) {\n return task.id === id;\n });\n };\n\n TaskboardTasksService.prototype.replaceModel = function(task) {\n this.tasksRaw = _.map(this.tasksRaw, function(it) {\n if (task.id === it.id) {\n return task;\n } else {\n return it;\n }\n });\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.move = function(id, usId, statusId, index) {\n var afterDestination, beforeDestination, i, it, j, key, len, len1, previous, previousWithTheSameOrder, setOrders, taksWithoutMoved, task, taskByUsStatus;\n task = this.getTaskModel(id);\n taskByUsStatus = _.filter(this.tasksRaw, (function(_this) {\n return function(task) {\n return task.status === statusId && task.user_story === usId;\n };\n })(this));\n taskByUsStatus = _.sortBy(taskByUsStatus, (function(_this) {\n return function(it) {\n return _this.order[it.id];\n };\n })(this));\n taksWithoutMoved = _.filter(taskByUsStatus, (function(_this) {\n return function(it) {\n return it.id !== id;\n };\n })(this));\n beforeDestination = _.slice(taksWithoutMoved, 0, index);\n afterDestination = _.slice(taksWithoutMoved, index);\n setOrders = {};\n previous = beforeDestination[beforeDestination.length - 1];\n previousWithTheSameOrder = _.filter(beforeDestination, (function(_this) {\n return function(it) {\n return _this.order[it.id] === _this.order[previous.id];\n };\n })(this));\n if (previousWithTheSameOrder.length > 1) {\n for (i = 0, len = previousWithTheSameOrder.length; i < len; i++) {\n it = previousWithTheSameOrder[i];\n setOrders[it.id] = this.order[it.id];\n }\n }\n if (!previous) {\n this.order[task.id] = 0;\n } else if (previous) {\n this.order[task.id] = this.order[previous.id] + 1;\n }\n for (key = j = 0, len1 = afterDestination.length; j < len1; key = ++j) {\n it = afterDestination[key];\n this.order[it.id] = this.order[task.id] + key + 1;\n }\n task.status = statusId;\n task.user_story = usId;\n task.taskboard_order = this.order[task.id];\n this.refresh();\n return {\n \"task_id\": task.id,\n \"order\": this.order[task.id],\n \"set_orders\": setOrders\n };\n };\n\n TaskboardTasksService.prototype.refresh = function() {\n var i, j, k, len, len1, len2, model, ref, status, task, taskModel, taskStatusList, tasks, us, usTasks;\n if (!this.project) {\n return;\n }\n this.tasksRaw = _.sortBy(this.tasksRaw, (function(_this) {\n return function(it) {\n return _this.order[it.id];\n };\n })(this));\n tasks = this.tasksRaw;\n taskStatusList = _.sortBy(this.project.task_statuses, \"order\");\n usTasks = {};\n ref = _.union(this.userstories, [\n {\n id: null\n }\n ]);\n for (i = 0, len = ref.length; i < len; i++) {\n us = ref[i];\n usTasks[us.id] = {};\n for (j = 0, len1 = taskStatusList.length; j < len1; j++) {\n status = taskStatusList[j];\n usTasks[us.id][status.id] = [];\n }\n }\n for (k = 0, len2 = tasks.length; k < len2; k++) {\n taskModel = tasks[k];\n if ((usTasks[taskModel.user_story] != null) && (usTasks[taskModel.user_story][taskModel.status] != null)) {\n task = {};\n model = taskModel.getAttrs();\n task.foldStatusChanged = this.foldStatusChanged[taskModel.id];\n task.model = model;\n task.images = _.filter(model.attachments, function(it) {\n return !!it.thumbnail_card_url;\n });\n task.id = taskModel.id;\n task.assigned_to = this.usersById[taskModel.assigned_to];\n task.colorized_tags = _.map(task.model.tags, (function(_this) {\n return function(tag) {\n return {\n name: tag[0],\n color: tag[1]\n };\n };\n })(this));\n usTasks[taskModel.user_story][taskModel.status].push(task);\n }\n }\n return this.usTasks = Immutable.fromJS(usTasks);\n };\n\n return TaskboardTasksService;\n\n })(taiga.Service);\n\n angular.module(\"taigaKanban\").service(\"tgTaskboardTasks\", TaskboardTasksService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban/kanban-usertories.coffee\n */\n\n(function() {\n var KanbanUserstoriesService, groupBy,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n groupBy = this.taiga.groupBy;\n\n KanbanUserstoriesService = (function(superClass) {\n extend(KanbanUserstoriesService, superClass);\n\n KanbanUserstoriesService.$inject = [];\n\n function KanbanUserstoriesService() {\n this.reset();\n }\n\n KanbanUserstoriesService.prototype.reset = function() {\n this.userstoriesRaw = [];\n this.archivedStatus = [];\n this.statusHide = [];\n this.foldStatusChanged = {};\n return this.usByStatus = Immutable.Map();\n };\n\n KanbanUserstoriesService.prototype.init = function(project, usersById) {\n this.project = project;\n return this.usersById = usersById;\n };\n\n KanbanUserstoriesService.prototype.resetFolds = function() {\n this.foldStatusChanged = {};\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.toggleFold = function(usId) {\n this.foldStatusChanged[usId] = !this.foldStatusChanged[usId];\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.set = function(userstories) {\n this.userstoriesRaw = userstories;\n this.refreshRawOrder();\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.add = function(us) {\n this.userstoriesRaw = this.userstoriesRaw.concat(us);\n this.refreshRawOrder();\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.addArchivedStatus = function(statusId) {\n return this.archivedStatus.push(statusId);\n };\n\n KanbanUserstoriesService.prototype.isUsInArchivedHiddenStatus = function(usId) {\n var us;\n us = this.getUsModel(usId);\n return this.archivedStatus.indexOf(us.status) !== -1 && this.statusHide.indexOf(us.status) !== -1;\n };\n\n KanbanUserstoriesService.prototype.hideStatus = function(statusId) {\n this.deleteStatus(statusId);\n return this.statusHide.push(statusId);\n };\n\n KanbanUserstoriesService.prototype.showStatus = function(statusId) {\n return _.remove(this.statusHide, function(it) {\n return it === statusId;\n });\n };\n\n KanbanUserstoriesService.prototype.getStatus = function(statusId) {\n return _.filter(this.userstoriesRaw, function(us) {\n return us.status === statusId;\n });\n };\n\n KanbanUserstoriesService.prototype.deleteStatus = function(statusId) {\n var toDelete;\n toDelete = _.filter(this.userstoriesRaw, function(us) {\n return us.status === statusId;\n });\n toDelete = _.map(function(it) {\n return it.id;\n });\n this.archived = _.difference(this.archived, toDelete);\n this.userstoriesRaw = _.filter(this.userstoriesRaw, function(us) {\n return us.status !== statusId;\n });\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.refreshRawOrder = function() {\n var i, it, len, ref, results;\n this.order = {};\n ref = this.userstoriesRaw;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n it = ref[i];\n results.push(this.order[it.id] = it.kanban_order);\n }\n return results;\n };\n\n KanbanUserstoriesService.prototype.assignOrders = function(order) {\n this.order = _.assign(this.order, order);\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.move = function(usList, statusId, index) {\n var afterDestination, beforeDestination, i, initialLength, isArchivedHiddenStatus, it, j, k, key, l, len, len1, len2, len3, modifiedUs, previous, previousWithTheSameOrder, setNextOrders, setOrders, setPreviousOrders, startIndex, us, usByStatus, usByStatusWithoutMoved;\n initialLength = usList.length;\n usByStatus = _.filter(this.userstoriesRaw, (function(_this) {\n return function(it) {\n return it.status === statusId;\n };\n })(this));\n usByStatus = _.sortBy(usByStatus, (function(_this) {\n return function(it) {\n return _this.order[it.id];\n };\n })(this));\n usByStatusWithoutMoved = _.filter(usByStatus, function(listIt) {\n return !_.find(usList, function(moveIt) {\n return listIt.id === moveIt.id;\n });\n });\n beforeDestination = _.slice(usByStatusWithoutMoved, 0, index);\n afterDestination = _.slice(usByStatusWithoutMoved, index);\n setOrders = {};\n previous = beforeDestination[beforeDestination.length - 1];\n previousWithTheSameOrder = _.filter(beforeDestination, (function(_this) {\n return function(it) {\n return _this.order[it.id] === _this.order[previous.id];\n };\n })(this));\n if (previousWithTheSameOrder.length > 1) {\n for (i = 0, len = previousWithTheSameOrder.length; i < len; i++) {\n it = previousWithTheSameOrder[i];\n setOrders[it.id] = this.order[it.id];\n }\n }\n modifiedUs = [];\n setPreviousOrders = [];\n setNextOrders = [];\n isArchivedHiddenStatus = this.archivedStatus.indexOf(statusId) !== -1 && this.statusHide.indexOf(statusId) !== -1;\n if (isArchivedHiddenStatus) {\n startIndex = new Date().getTime();\n } else if (!previous) {\n startIndex = 0;\n for (key = j = 0, len1 = afterDestination.length; j < len1; key = ++j) {\n it = afterDestination[key];\n this.order[it.id] = key + initialLength + 1;\n it.kanban_order = this.order[it.id];\n }\n setNextOrders = _.map(afterDestination, (function(_this) {\n return function(it) {\n return {\n us_id: it.id,\n order: _this.order[it.id]\n };\n };\n })(this));\n } else if (previous) {\n startIndex = this.order[previous.id] + 1;\n previousWithTheSameOrder = _.filter(beforeDestination, (function(_this) {\n return function(it) {\n return it.kanban_order === _this.order[previous.id];\n };\n })(this));\n for (key = k = 0, len2 = afterDestination.length; k < len2; key = ++k) {\n it = afterDestination[key];\n this.order[it.id] = this.order[previous.id] + key + initialLength + 1;\n it.kanban_order = this.order[it.id];\n }\n setNextOrders = _.map(afterDestination, (function(_this) {\n return function(it) {\n return {\n us_id: it.id,\n order: _this.order[it.id]\n };\n };\n })(this));\n if (previousWithTheSameOrder.length > 1) {\n setPreviousOrders = _.map(previousWithTheSameOrder, (function(_this) {\n return function(it) {\n return {\n us_id: it.id,\n order: _this.order[it.id]\n };\n };\n })(this));\n }\n }\n for (key = l = 0, len3 = usList.length; l < len3; key = ++l) {\n us = usList[key];\n us.status = statusId;\n us.kanban_order = startIndex + key;\n this.order[us.id] = us.kanban_order;\n modifiedUs.push({\n us_id: us.id,\n order: us.kanban_order\n });\n }\n this.refresh();\n return {\n bulkOrders: modifiedUs.concat(setPreviousOrders, setNextOrders),\n usList: modifiedUs,\n set_orders: setOrders\n };\n };\n\n KanbanUserstoriesService.prototype.moveToEnd = function(id, statusId) {\n var us;\n us = this.getUsModel(id);\n this.order[us.id] = -1;\n us.status = statusId;\n us.kanban_order = this.order[us.id];\n this.refresh();\n return {\n \"us_id\": us.id,\n \"order\": -1\n };\n };\n\n KanbanUserstoriesService.prototype.replace = function(us) {\n return this.usByStatus = this.usByStatus.map(function(status) {\n var findedIndex;\n findedIndex = status.findIndex(function(usItem) {\n return usItem.get('id') === us.get('id');\n });\n if (findedIndex !== -1) {\n status = status.set(findedIndex, us);\n }\n return status;\n });\n };\n\n KanbanUserstoriesService.prototype.replaceModel = function(us) {\n this.userstoriesRaw = _.map(this.userstoriesRaw, function(usItem) {\n if (us.id === usItem.id) {\n return us;\n } else {\n return usItem;\n }\n });\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.getUs = function(id) {\n var findedUs;\n findedUs = null;\n this.usByStatus.forEach(function(status) {\n findedUs = status.find(function(us) {\n return us.get('id') === id;\n });\n if (findedUs) {\n return false;\n }\n });\n return findedUs;\n };\n\n KanbanUserstoriesService.prototype.getUsModel = function(id) {\n return _.find(this.userstoriesRaw, function(us) {\n return us.id === id;\n });\n };\n\n KanbanUserstoriesService.prototype.refresh = function() {\n var usByStatus, userstories;\n this.userstoriesRaw = _.sortBy(this.userstoriesRaw, (function(_this) {\n return function(it) {\n return _this.order[it.id];\n };\n })(this));\n userstories = this.userstoriesRaw;\n userstories = _.map(userstories, (function(_this) {\n return function(usModel) {\n var model, us;\n us = {};\n model = usModel.getAttrs();\n us.foldStatusChanged = _this.foldStatusChanged[usModel.id];\n us.model = model;\n us.images = _.filter(model.attachments, function(it) {\n return !!it.thumbnail_card_url;\n });\n us.id = usModel.id;\n us.assigned_to = _this.usersById[usModel.assigned_to];\n us.assigned_users = [];\n usModel.assigned_users.forEach(function(assignedUserId) {\n var assignedUserData;\n assignedUserData = _this.usersById[assignedUserId];\n return us.assigned_users.push(assignedUserData);\n });\n us.colorized_tags = _.map(us.model.tags, function(tag) {\n return {\n name: tag[0],\n color: tag[1]\n };\n });\n return us;\n };\n })(this));\n usByStatus = _.groupBy(userstories, function(us) {\n return us.model.status;\n });\n return this.usByStatus = Immutable.fromJS(usByStatus);\n };\n\n return KanbanUserstoriesService;\n\n })(taiga.Service);\n\n angular.module(\"taigaKanban\").service(\"tgKanbanUserstories\", KanbanUserstoriesService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban/main.coffee\n */\n\n(function() {\n var KanbanArchivedStatusHeaderDirective, KanbanArchivedStatusIntroDirective, KanbanController, KanbanDirective, KanbanSquishColumnDirective, KanbanWipLimitDirective, bindMethods, bindOnce, debounceLeading, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n debounceLeading = this.taiga.debounceLeading;\n\n module = angular.module(\"taigaKanban\");\n\n KanbanController = (function(superClass) {\n extend(KanbanController, superClass);\n\n KanbanController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"tgErrorHandlingService\", \"$tgModel\", \"tgKanbanUserstories\", \"$tgStorage\", \"tgFilterRemoteStorageService\", \"tgProjectService\"];\n\n KanbanController.prototype.storeCustomFiltersName = 'kanban-custom-filters';\n\n KanbanController.prototype.storeFiltersName = 'kanban-filters';\n\n function KanbanController(scope, rootscope, repo, confirm, rs1, rs2, params1, q, location, appMetaService, navUrls, events, analytics, translate, errorHandlingService, model, kanbanUserstoriesService1, storage, filterRemoteStorageService, projectService1) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs1;\n this.rs2 = rs2;\n this.params = params1;\n this.q = q;\n this.location = location;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.model = model;\n this.kanbanUserstoriesService = kanbanUserstoriesService1;\n this.storage = storage;\n this.filterRemoteStorageService = filterRemoteStorageService;\n this.projectService = projectService1;\n bindMethods(this);\n this.kanbanUserstoriesService.reset();\n this.openFilter = false;\n this.selectedUss = {};\n if (this.applyStoredFilters(this.params.pslug, \"kanban-filters\")) {\n return;\n }\n this.scope.sectionName = this.translate.instant(\"KANBAN.SECTION_NAME\");\n this.initializeEventHandlers();\n taiga.defineImmutableProperty(this.scope, \"usByStatus\", (function(_this) {\n return function() {\n return _this.kanbanUserstoriesService.usByStatus;\n };\n })(this));\n }\n\n KanbanController.prototype.cleanSelectedUss = function() {\n var key, results;\n results = [];\n for (key in this.selectedUss) {\n results.push(this.selectedUss[key] = false);\n }\n return results;\n };\n\n KanbanController.prototype.toggleSelectedUs = function(usId) {\n return this.selectedUss[usId] = !this.selectedUss[usId];\n };\n\n KanbanController.prototype.firstLoad = function() {\n var promise;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"KANBAN.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.translate.instant(\"KANBAN.PAGE_DESCRIPTION\", {\n projectName: _this.scope.project.name,\n projectDescription: _this.scope.project.description\n });\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n return promise.then(null, this.onInitialDataError.bind(this));\n };\n\n KanbanController.prototype.setZoom = function(zoomLevel, zoom) {\n var previousZoomLevel;\n if (this.zoomLevel === zoomLevel) {\n return null;\n }\n this.isFirstLoad = !this.zoomLevel;\n previousZoomLevel = this.zoomLevel;\n this.zoomLevel = zoomLevel;\n this.zoom = zoom;\n if (this.isFirstLoad) {\n return this.firstLoad().then((function(_this) {\n return function() {\n _this.isFirstLoad = false;\n return _this.kanbanUserstoriesService.resetFolds();\n };\n })(this));\n } else if (this.zoomLevel > 1 && previousZoomLevel <= 1) {\n this.zoomLoading = true;\n return this.loadUserstories().then((function(_this) {\n return function() {\n _this.zoomLoading = false;\n return _this.kanbanUserstoriesService.resetFolds();\n };\n })(this));\n }\n };\n\n KanbanController.prototype.filtersReloadContent = function() {\n return this.loadUserstories().then((function(_this) {\n return function() {\n var i, len, openArchived, results, statusId;\n openArchived = _.difference(_this.kanbanUserstoriesService.archivedStatus, _this.kanbanUserstoriesService.statusHide);\n if (openArchived.length) {\n results = [];\n for (i = 0, len = openArchived.length; i < len; i++) {\n statusId = openArchived[i];\n results.push(_this.loadUserStoriesForStatus({}, statusId));\n }\n return results;\n }\n };\n })(this));\n };\n\n KanbanController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"usform:new:success\", (function(_this) {\n return function(event, us) {\n _this.refreshTagsColors().then(function() {\n return _this.kanbanUserstoriesService.add(us);\n });\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"create userstory on kanban\", 1);\n };\n })(this));\n this.scope.$on(\"usform:bulk:success\", (function(_this) {\n return function(event, uss) {\n _this.refreshTagsColors().then(function() {\n return _this.kanbanUserstoriesService.add(uss);\n });\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on kanban\", 1);\n };\n })(this));\n this.scope.$on(\"usform:edit:success\", (function(_this) {\n return function(event, us) {\n return _this.refreshTagsColors().then(function() {\n return _this.kanbanUserstoriesService.replaceModel(us);\n });\n };\n })(this));\n this.scope.$on(\"kanban:us:deleted\", (function(_this) {\n return function(event, us) {\n return _this.filtersReloadContent();\n };\n })(this));\n this.scope.$on(\"assigned-to:added\", this.onAssignedToChanged);\n this.scope.$on(\"assigned-user:added\", this.onAssignedUsersChanged);\n this.scope.$on(\"assigned-user:deleted\", this.onAssignedUsersDeleted);\n this.scope.$on(\"kanban:us:move\", this.moveUs);\n this.scope.$on(\"kanban:show-userstories-for-status\", this.loadUserStoriesForStatus);\n return this.scope.$on(\"kanban:hide-userstories-for-status\", this.hideUserStoriesForStatus);\n };\n\n KanbanController.prototype.addNewUs = function(type, statusId) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"genericform:new\", {\n 'objType': 'us',\n 'project': this.scope.project,\n 'statusId': statusId\n });\n case \"bulk\":\n return this.rootscope.$broadcast(\"usform:bulk\", this.scope.projectId, statusId);\n }\n };\n\n KanbanController.prototype.editUs = function(id) {\n var us;\n us = this.kanbanUserstoriesService.getUs(id);\n us = us.set('loading-edit', true);\n this.kanbanUserstoriesService.replace(us);\n return this.rs.userstories.getByRef(us.getIn(['model', 'project']), us.getIn(['model', 'ref'])).then((function(_this) {\n return function(editingUserStory) {\n _this.rs2.attachments.list(\"us\", us.get('id'), us.getIn(['model', 'project'])).then(function(attachments) {\n return _this.rootscope.$broadcast(\"genericform:edit\", {\n 'objType': 'us',\n 'obj': editingUserStory,\n 'statusList': _this.scope.usStatusList,\n 'attachments': attachments.toJS()\n });\n });\n us = us.set('loading-edit', false);\n return _this.kanbanUserstoriesService.replace(us);\n };\n })(this));\n };\n\n KanbanController.prototype.deleteUs = function(id) {\n var us;\n us = this.kanbanUserstoriesService.getUs(id);\n us = us.set('loading-delete', true);\n return this.rs.userstories.getByRef(us.getIn(['model', 'project']), us.getIn(['model', 'ref'])).then((function(_this) {\n return function(deletingUserStory) {\n var message, title;\n us = us.set('loading-delete', false);\n title = _this.translate.instant(\"US.TITLE_DELETE_ACTION\");\n message = deletingUserStory.subject;\n return _this.confirm.askOnDelete(title, message).then(function(askResponse) {\n var promise;\n promise = _this.repo.remove(deletingUserStory);\n promise.then(function() {\n _this.scope.$broadcast(\"kanban:us:deleted\");\n return askResponse.finish();\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return this.confirm.notify(\"error\");\n });\n });\n };\n })(this));\n };\n\n KanbanController.prototype.showPlaceHolder = function(statusId) {\n if (this.scope.usStatusList[0].id === statusId && !this.kanbanUserstoriesService.userstoriesRaw.length) {\n return true;\n }\n return false;\n };\n\n KanbanController.prototype.toggleFold = function(id) {\n return this.kanbanUserstoriesService.toggleFold(id);\n };\n\n KanbanController.prototype.isUsInArchivedHiddenStatus = function(usId) {\n return this.kanbanUserstoriesService.isUsInArchivedHiddenStatus(usId);\n };\n\n KanbanController.prototype.changeUsAssignedTo = function(id) {\n var us;\n us = this.kanbanUserstoriesService.getUsModel(id);\n return this.rootscope.$broadcast(\"assigned-to:add\", us);\n };\n\n KanbanController.prototype.changeUsAssignedUsers = function(id) {\n var us;\n us = this.kanbanUserstoriesService.getUsModel(id);\n return this.rootscope.$broadcast(\"assigned-user:add\", us);\n };\n\n KanbanController.prototype.onAssignedToChanged = function(ctx, userid, usModel) {\n usModel.assigned_to = userid;\n this.kanbanUserstoriesService.replaceModel(usModel);\n return this.repo.save(usModel).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_to') || _this.isFilterDataTypeSelected('role')) {\n return _this.filtersReloadContent();\n }\n };\n })(this));\n };\n\n KanbanController.prototype.onAssignedUsersChanged = function(ctx, userid, usModel) {\n var assignedUsers;\n assignedUsers = _.clone(usModel.assigned_users, false);\n assignedUsers.push(userid);\n assignedUsers = _.uniq(assignedUsers);\n usModel.assigned_users = assignedUsers;\n if (!usModel.assigned_to) {\n usModel.assigned_to = userid;\n }\n this.kanbanUserstoriesService.replaceModel(usModel);\n return this.repo.save(usModel).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_users') || _this.isFilterDataTypeSelected('role')) {\n return _this.filtersReloadContent();\n }\n };\n })(this));\n };\n\n KanbanController.prototype.onAssignedUsersDeleted = function(ctx, userid, usModel) {\n var assignedUsersIds, ref;\n assignedUsersIds = _.clone(usModel.assigned_users, false);\n assignedUsersIds = _.pull(assignedUsersIds, userid);\n assignedUsersIds = _.uniq(assignedUsersIds);\n usModel.assigned_users = assignedUsersIds;\n if ((ref = usModel.assigned_to, indexOf.call(assignedUsersIds, ref) < 0) && assignedUsersIds.length > 0) {\n usModel.assigned_to = assignedUsersIds[0];\n }\n if (assignedUsersIds.length === 0) {\n usModel.assigned_to = null;\n }\n this.kanbanUserstoriesService.replaceModel(usModel);\n return this.repo.save(usModel).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_users') || _this.isFilterDataTypeSelected('role')) {\n return _this.filtersReloadContent();\n }\n };\n })(this));\n };\n\n KanbanController.prototype.refreshTagsColors = function() {\n return this.rs.projects.tagsColors(this.scope.projectId).then((function(_this) {\n return function(tags_colors) {\n return _this.scope.project.tags_colors = tags_colors._attrs;\n };\n })(this));\n };\n\n KanbanController.prototype.loadUserstories = function() {\n var params, promise;\n params = {\n status__is_archived: false\n };\n if (this.zoomLevel > 1) {\n params.include_attachments = 1;\n params.include_tasks = 1;\n }\n params = _.merge(params, this.location.search());\n promise = this.rs.userstories.listAll(this.scope.projectId, params).then((function(_this) {\n return function(userstories) {\n _this.kanbanUserstoriesService.init(_this.scope.project, _this.scope.usersById);\n _this.kanbanUserstoriesService.set(userstories);\n scopeDefer(_this.scope, function() {\n return _this.scope.$broadcast(\"userstories:loaded\", userstories);\n });\n return userstories;\n };\n })(this));\n promise.then((function(_this) {\n return function() {\n return _this.scope.$broadcast(\"redraw:wip\");\n };\n })(this));\n return promise;\n };\n\n KanbanController.prototype.loadUserStoriesForStatus = function(ctx, statusId) {\n var filteredStatus, params;\n filteredStatus = this.location.search().status;\n if (filteredStatus) {\n filteredStatus = filteredStatus.split(\",\").map(function(it) {\n return parseInt(it, 10);\n });\n if (filteredStatus.indexOf(statusId) === -1) {\n return;\n }\n }\n params = {\n status: statusId,\n include_attachments: true,\n include_tasks: true\n };\n params = _.merge(params, this.location.search());\n return this.rs.userstories.listAll(this.scope.projectId, params).then((function(_this) {\n return function(userstories) {\n _this.scope.$broadcast(\"kanban:shown-userstories-for-status\", statusId, userstories);\n return userstories;\n };\n })(this));\n };\n\n KanbanController.prototype.hideUserStoriesForStatus = function(ctx, statusId) {\n return this.scope.$broadcast(\"kanban:hidden-userstories-for-status\", statusId);\n };\n\n KanbanController.prototype.loadKanban = function() {\n return this.q.all([this.refreshTagsColors(), this.loadUserstories()]);\n };\n\n KanbanController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_kanban_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.projectId = project.id;\n this.scope.points = _.sortBy(project.points, \"order\");\n this.scope.pointsById = groupBy(project.points, function(x) {\n return x.id;\n });\n this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n this.scope.$emit(\"project:loaded\", project);\n return project;\n };\n\n KanbanController.prototype.initializeSubscription = function() {\n var randomTimeout, routingKey1;\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n randomTimeout = taiga.randomInt(700, 1000);\n return this.events.subscribe(this.scope, routingKey1, debounceLeading(randomTimeout, (function(_this) {\n return function(message) {\n return _this.loadUserstories();\n };\n })(this)));\n };\n\n KanbanController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n this.initializeSubscription();\n this.loadKanban();\n return this.generateFilters();\n };\n\n KanbanController.prototype.prepareBulkUpdateData = function(uses, field) {\n if (field == null) {\n field = \"kanban_order\";\n }\n return _.map(uses, function(x) {\n return {\n \"us_id\": x.id,\n \"order\": x[field]\n };\n });\n };\n\n KanbanController.prototype.moveUs = function(ctx, usList, newStatusId, index) {\n var data, promise;\n this.cleanSelectedUss();\n usList = _.map(usList, (function(_this) {\n return function(us) {\n return _this.kanbanUserstoriesService.getUsModel(us.id);\n };\n })(this));\n data = this.kanbanUserstoriesService.move(usList, newStatusId, index);\n promise = this.rs.userstories.bulkUpdateKanbanOrder(this.scope.projectId, newStatusId, data.bulkOrders);\n return promise.then((function(_this) {\n return function() {\n var options, params, promises;\n options = {\n headers: {\n \"set-orders\": JSON.stringify(data.setOrders)\n }\n };\n params = {\n include_attachments: true,\n include_tasks: true\n };\n promises = _.map(usList, function(us) {\n return _this.repo.save(us, true, params, options, true);\n });\n promise = _this.q.all(promises);\n return promise.then(function(result) {\n var headers, order;\n headers = result[1];\n if (headers && headers['taiga-info-order-updated']) {\n order = JSON.parse(headers['taiga-info-order-updated']);\n _this.kanbanUserstoriesService.assignOrders(order);\n }\n _this.scope.$broadcast(\"redraw:wip\");\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('status')) {\n _this.filtersReloadContent();\n }\n return promise;\n });\n };\n })(this));\n };\n\n return KanbanController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin, taiga.UsFiltersMixin));\n\n module.controller(\"KanbanController\", KanbanController);\n\n KanbanDirective = function($repo, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var tableBodyDom;\n tableBodyDom = $el.find(\".kanban-table-body\");\n tableBodyDom.on(\"scroll\", function(event) {\n var tableHeaderDom, target;\n target = angular.element(event.currentTarget);\n tableHeaderDom = $el.find(\".kanban-table-header .kanban-table-inner\");\n return tableHeaderDom.css(\"left\", -1 * target.scrollLeft());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanban\", [\"$tgRepo\", \"$rootScope\", KanbanDirective]);\n\n KanbanArchivedStatusHeaderDirective = function($rootscope, $translate, kanbanUserstoriesService) {\n var hideArchivedText, link, showArchivedText;\n showArchivedText = $translate.instant(\"KANBAN.ACTION_SHOW_ARCHIVED\");\n hideArchivedText = $translate.instant(\"KANBAN.ACTION_HIDE_ARCHIVED\");\n link = function($scope, $el, $attrs) {\n var hidden, status;\n status = $scope.$eval($attrs.tgKanbanArchivedStatusHeader);\n hidden = true;\n kanbanUserstoriesService.addArchivedStatus(status.id);\n kanbanUserstoriesService.hideStatus(status.id);\n $scope[\"class\"] = \"icon-watch\";\n $scope.title = showArchivedText;\n $el.on(\"click\", function(event) {\n hidden = !hidden;\n return $scope.$apply(function() {\n if (hidden) {\n $scope[\"class\"] = \"icon-watch\";\n $scope.title = showArchivedText;\n $rootscope.$broadcast(\"kanban:hide-userstories-for-status\", status.id);\n return kanbanUserstoriesService.hideStatus(status.id);\n } else {\n $scope[\"class\"] = \"icon-unwatch\";\n $scope.title = hideArchivedText;\n $rootscope.$broadcast(\"kanban:show-userstories-for-status\", status.id);\n return kanbanUserstoriesService.showStatus(status.id);\n }\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanArchivedStatusHeader\", [\"$rootScope\", \"$translate\", \"tgKanbanUserstories\", KanbanArchivedStatusHeaderDirective]);\n\n KanbanArchivedStatusIntroDirective = function($translate, kanbanUserstoriesService) {\n var link, userStories;\n userStories = [];\n link = function($scope, $el, $attrs) {\n var hiddenUserStoriexText, status, updateIntroText;\n hiddenUserStoriexText = $translate.instant(\"KANBAN.HIDDEN_USER_STORIES\");\n status = $scope.$eval($attrs.tgKanbanArchivedStatusIntro);\n $el.text(hiddenUserStoriexText);\n updateIntroText = function(hasArchived) {\n if (hasArchived) {\n return $el.text(\"\");\n } else {\n return $el.text(hiddenUserStoriexText);\n }\n };\n $scope.$on(\"kanban:us:move\", function(ctx, itemUs, oldStatusId, newStatusId, itemIndex) {\n var hasArchived;\n hasArchived = !!kanbanUserstoriesService.getStatus(newStatusId).length;\n return updateIntroText(hasArchived);\n });\n $scope.$on(\"kanban:shown-userstories-for-status\", function(ctx, statusId, userStoriesLoaded) {\n var hasArchived;\n if (statusId === status.id) {\n kanbanUserstoriesService.deleteStatus(statusId);\n kanbanUserstoriesService.add(userStoriesLoaded);\n hasArchived = !!kanbanUserstoriesService.getStatus(statusId).length;\n return updateIntroText(hasArchived);\n }\n });\n $scope.$on(\"kanban:hidden-userstories-for-status\", function(ctx, statusId) {\n if (statusId === status.id) {\n return updateIntroText(false);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanArchivedStatusIntro\", [\"$translate\", \"tgKanbanUserstories\", KanbanArchivedStatusIntroDirective]);\n\n KanbanSquishColumnDirective = function(rs, projectService) {\n var link;\n link = function($scope, $el, $attrs) {\n var unwatch, updateTableWidth;\n $scope.foldStatus = function(status) {\n $scope.folds[status.id] = !!!$scope.folds[status.id];\n rs.kanban.storeStatusColumnModes($scope.projectId, $scope.folds);\n updateTableWidth();\n };\n updateTableWidth = function() {\n var columnWidths, totalWidth;\n columnWidths = _.map($scope.usStatusList, function(status) {\n if ($scope.folds[status.id]) {\n return 40;\n } else {\n return 310;\n }\n });\n totalWidth = _.reduce(columnWidths, function(total, width) {\n return total + width;\n });\n return $el.find('.kanban-table-inner').css(\"width\", totalWidth);\n };\n return unwatch = $scope.$watch('usByStatus', function(usByStatus) {\n if (usByStatus.size) {\n $scope.folds = rs.kanban.getStatusColumnModes(projectService.project.get('id'));\n updateTableWidth();\n return unwatch();\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanSquishColumn\", [\"$tgResources\", \"tgProjectService\", KanbanSquishColumnDirective]);\n\n KanbanWipLimitDirective = function($timeout) {\n var link;\n link = function($scope, $el, $attrs) {\n var redrawWipLimit, status;\n status = $scope.$eval($attrs.tgKanbanWipLimit);\n redrawWipLimit = (function(_this) {\n return function() {\n $el.find(\".kanban-wip-limit\").remove();\n return $timeout(function() {\n var element;\n element = $el.find(\"tg-card\")[status.wip_limit];\n if (element) {\n return angular.element(element).before(\"
    \");\n }\n });\n };\n })(this);\n if (status && !status.is_archived) {\n $scope.$on(\"redraw:wip\", redrawWipLimit);\n $scope.$on(\"kanban:us:move\", redrawWipLimit);\n $scope.$on(\"usform:new:success\", redrawWipLimit);\n $scope.$on(\"usform:bulk:success\", redrawWipLimit);\n }\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanWipLimit\", [\"$timeout\", KanbanWipLimitDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban/sortable.coffee\n */\n\n(function() {\n var KanbanSortableDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaKanban\");\n\n KanbanSortableDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var unwatch;\n return unwatch = $scope.$watch(\"usByStatus\", function(usByStatus) {\n var containers, deleteElement, drake, itemEl, newParentScope, scroll, tdom;\n if (!usByStatus || !usByStatus.size) {\n return;\n }\n unwatch();\n if (!($scope.project.my_permissions.indexOf(\"modify_us\") > -1)) {\n return;\n }\n newParentScope = null;\n itemEl = null;\n tdom = $el;\n deleteElement = function(itemEl) {\n itemEl.scope().$destroy();\n itemEl.off();\n return itemEl.remove();\n };\n containers = _.map($el.find('.taskboard-column'), function(item) {\n return item;\n });\n drake = dragula(containers, {\n copySortSource: false,\n copy: false,\n moves: function(item) {\n return $(item).is('tg-card');\n }\n });\n drake.on('drag', function(item) {\n return window.dragMultiple.start(item, containers);\n });\n drake.on('cloned', function(item, dropTarget) {\n return $(item).addClass('multiple-drag-mirror');\n });\n drake.on('dragend', function(item) {\n var dragMultipleItems, finalUsList, firstElement, index, newStatus, newStatusId, parentEl, usList;\n parentEl = $(item).parent();\n newParentScope = parentEl.scope();\n newStatusId = newParentScope.s.id;\n dragMultipleItems = window.dragMultiple.stop();\n if (!dragMultipleItems.length) {\n dragMultipleItems = [item];\n }\n firstElement = dragMultipleItems[0];\n index = $(parentEl).find('tg-card').index(firstElement);\n newStatus = newParentScope.s.id;\n usList = _.map(dragMultipleItems, function(item) {\n return $(item).scope().us;\n });\n finalUsList = _.map(usList, function(item) {\n return {\n id: item.get('id'),\n oldStatusId: item.getIn(['model', 'status'])\n };\n });\n return $scope.$apply(function() {\n _.each(usList, (function(_this) {\n return function(item, key) {\n var oldStatus, sameContainer;\n oldStatus = item.getIn(['model', 'status']);\n sameContainer = newStatus === oldStatus;\n if (!sameContainer) {\n itemEl = $(dragMultipleItems[key]);\n return deleteElement(itemEl);\n }\n };\n })(this));\n return $rootscope.$broadcast(\"kanban:us:move\", finalUsList, newStatus, index);\n });\n });\n scroll = autoScroll(containers, {\n margin: 100,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return drake.destroy();\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanSortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", KanbanSortableDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/epics/detail.coffee\n */\n\n(function() {\n var EpicDetailController, EpicStatusButtonDirective, EpicStatusDisplayDirective, bindMethods, bindOnce, groupBy, joinStr, mixOf, module, taiga, toString,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaEpics\");\n\n EpicDetailController = (function(superClass) {\n extend(EpicDetailController, superClass);\n\n EpicDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"tgAppMetaService\", \"$tgAnalytics\", \"$tgNavUrls\", \"$translate\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function EpicDetailController(scope, rootscope, repo, confirm, rs, rs2, params, q, location, log, appMetaService, analytics, navUrls, translate, modelTransform, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.rs2 = rs2;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appMetaService = appMetaService;\n this.analytics = analytics;\n this.navUrls = navUrls;\n this.translate = translate;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.epicRef = this.params.epicref;\n this.scope.sectionName = this.translate.instant(\"EPIC.SECTION_NAME\");\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this._setMeta();\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n EpicDetailController.prototype._setMeta = function() {\n var description, ref, title;\n title = this.translate.instant(\"EPIC.PAGE_TITLE\", {\n epicRef: \"#\" + this.scope.epic.ref,\n epicSubject: this.scope.epic.subject,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"EPIC.PAGE_DESCRIPTION\", {\n epicStatus: ((ref = this.scope.statusById[this.scope.epic.status]) != null ? ref.name : void 0) || \"--\",\n epicDescription: angular.element(this.scope.epic.description_html || \"\").text()\n });\n return this.appMetaService.setAll(title, description);\n };\n\n EpicDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on epic\", 1);\n };\n })(this));\n this.scope.$on(\"comment:new\", (function(_this) {\n return function() {\n return _this.loadEpic();\n };\n })(this));\n return this.scope.$on(\"custom-attributes-values:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n };\n\n EpicDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-epics\", ctx);\n };\n\n EpicDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.immutableProject = this.projectService.project;\n this.scope.$emit('project:loaded', project);\n this.scope.statusList = project.epic_statuses;\n this.scope.statusById = groupBy(project.epic_statuses, function(x) {\n return x.id;\n });\n return project;\n };\n\n EpicDetailController.prototype.loadEpic = function() {\n return this.rs.epics.getByRef(this.scope.projectId, this.params.epicref).then((function(_this) {\n return function(epic) {\n var ctx, ref, ref1;\n _this.scope.epic = epic;\n _this.scope.immutableEpic = Immutable.fromJS(epic._attrs);\n _this.scope.epicId = epic.id;\n _this.scope.commentModel = epic;\n _this.modelTransform.setObject(_this.scope, 'epic');\n if (((ref = _this.scope.epic.neighbors.previous) != null ? ref.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.epic.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-epics-detail\", ctx);\n }\n if (((ref1 = _this.scope.epic.neighbors.next) != null ? ref1.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.epic.neighbors.next.ref\n };\n return _this.scope.nextUrl = _this.navUrls.resolve(\"project-epics-detail\", ctx);\n }\n };\n })(this));\n };\n\n EpicDetailController.prototype.loadUserstories = function() {\n return this.rs2.userstories.listInEpic(this.scope.epicId).then((function(_this) {\n return function(data) {\n return _this.scope.userstories = data;\n };\n })(this));\n };\n\n EpicDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.loadEpic().then((function(_this) {\n return function() {\n return _this.loadUserstories();\n };\n })(this));\n };\n\n\n /*\n * Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n * See app/modules/components/vote-button for more info\n */\n\n EpicDetailController.prototype.onUpvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadEpic();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.epics.upvote(this.scope.epicId).then(onSuccess, onError);\n };\n\n EpicDetailController.prototype.onDownvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadEpic();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.epics.downvote(this.scope.epicId).then(onSuccess, onError);\n };\n\n\n /*\n * Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n * See app/modules/components/watch-button for more info\n */\n\n EpicDetailController.prototype.onWatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadEpic();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.epics.watch(this.scope.epicId).then(onSuccess, onError);\n };\n\n EpicDetailController.prototype.onUnwatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadEpic();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.epics.unwatch(this.scope.epicId).then(onSuccess, onError);\n };\n\n EpicDetailController.prototype.onSelectColor = function(color) {\n var onSelectColorError, onSelectColorSuccess, transform;\n onSelectColorSuccess = (function(_this) {\n return function() {\n _this.rootscope.$broadcast(\"object:updated\");\n return _this.confirm.notify('success');\n };\n })(this);\n onSelectColorError = (function(_this) {\n return function() {\n return _this.confirm.notify('error');\n };\n })(this);\n transform = this.modelTransform.save(function(epic) {\n epic.color = color;\n return epic;\n });\n return transform.then(onSelectColorSuccess, onSelectColorError);\n };\n\n return EpicDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"EpicDetailController\", EpicDetailController);\n\n EpicStatusDisplayDirective = function($template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-display.html\", true);\n link = function($scope, $el, $attrs) {\n var render;\n render = function(epic) {\n var html, status;\n status = $scope.statusById[epic.status];\n html = template({\n is_closed: status.is_closed,\n status: status\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(epic) {\n if (epic != null) {\n return render(epic);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgEpicStatusDisplay\", [\"$tgTemplate\", \"$compile\", EpicStatusDisplayDirective]);\n\n EpicStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $compile, $translate, $template) {\n var link, template;\n template = $template.get(\"common/components/status-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_epic\") !== -1;\n };\n render = (function(_this) {\n return function(epic) {\n var html, status;\n status = $scope.statusById[epic.status];\n html = $compile(template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n }))($scope);\n return $el.html(html);\n };\n })(this);\n save = function(status) {\n var currentLoading, onError, onSuccess, transform;\n currentLoading = $loading().target($el).start();\n transform = $modelTransform.save(function(epic) {\n epic.status = status;\n return epic;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".js-edit-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n $.fn.popover().closeAll();\n return save(target.data(\"status-id\"));\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.status : void 0;\n }, function() {\n var epic;\n epic = $model.$modelValue;\n if (epic) {\n return render(epic);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgEpicStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$compile\", \"$translate\", \"$tgTemplate\", EpicStatusButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/detail.coffee\n */\n\n(function() {\n var AssignSprintToIssueButtonDirective, IssueDetailController, IssuePriorityButtonDirective, IssueSeverityButtonDirective, IssueStatusButtonDirective, IssueStatusDisplayDirective, IssueTypeButtonDirective, PromoteIssueToUsButtonDirective, bindMethods, bindOnce, groupBy, joinStr, mixOf, module, normalizeString, taiga, toString,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n normalizeString = this.taiga.normalizeString;\n\n module = angular.module(\"taigaIssues\");\n\n IssueDetailController = (function(superClass) {\n extend(IssueDetailController, superClass);\n\n IssueDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"tgAppMetaService\", \"$tgAnalytics\", \"$tgNavUrls\", \"$translate\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function IssueDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appMetaService, analytics, navUrls, translate, modelTransform, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appMetaService = appMetaService;\n this.analytics = analytics;\n this.navUrls = navUrls;\n this.translate = translate;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.issueRef = this.params.issueref;\n this.scope.sectionName = this.translate.instant(\"ISSUES.SECTION_NAME\");\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this._setMeta();\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n IssueDetailController.prototype._setMeta = function() {\n var description, ref, ref1, ref2, ref3, title;\n title = this.translate.instant(\"ISSUE.PAGE_TITLE\", {\n issueRef: \"#\" + this.scope.issue.ref,\n issueSubject: this.scope.issue.subject,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"ISSUE.PAGE_DESCRIPTION\", {\n issueStatus: ((ref = this.scope.statusById[this.scope.issue.status]) != null ? ref.name : void 0) || \"--\",\n issueType: ((ref1 = this.scope.typeById[this.scope.issue.type]) != null ? ref1.name : void 0) || \"--\",\n issueSeverity: ((ref2 = this.scope.severityById[this.scope.issue.severity]) != null ? ref2.name : void 0) || \"--\",\n issuePriority: ((ref3 = this.scope.priorityById[this.scope.issue.priority]) != null ? ref3.name : void 0) || \"--\",\n issueDescription: angular.element(this.scope.issue.description_html || \"\").text()\n });\n return this.appMetaService.setAll(title, description);\n };\n\n IssueDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on issue\", 1);\n };\n })(this));\n this.scope.$on(\"promote-issue-to-us:success\", (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"issue\", \"promoteToUserstory\", \"promote issue to userstory\", 1);\n _this.rootscope.$broadcast(\"object:updated\");\n return _this.loadIssue();\n };\n })(this));\n this.scope.$on(\"comment:new\", (function(_this) {\n return function() {\n return _this.loadIssue();\n };\n })(this));\n this.scope.$on(\"custom-attributes-values:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n return this.scope.$on(\"assign-sprint-to-issue:success\", (function(_this) {\n return function(ctx, milestoneId) {\n _this.scope.issue.milestone = milestoneId;\n _this.rootscope.$broadcast(\"object:updated\");\n if (milestoneId) {\n return _this.loadSprint();\n } else {\n return _this.scope.sprint = null;\n }\n };\n })(this));\n };\n\n IssueDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n if (this.scope.project.is_issues_activated) {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-issues\", ctx);\n } else {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n }\n };\n\n IssueDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.statusList = project.issue_statuses;\n this.scope.statusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n this.scope.typeById = groupBy(project.issue_types, function(x) {\n return x.id;\n });\n this.scope.typeList = _.sortBy(project.issue_types, \"order\");\n this.scope.severityList = project.severities;\n this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n this.scope.priorityList = project.priorities;\n this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n return project;\n };\n\n IssueDetailController.prototype.loadIssue = function() {\n return this.rs.issues.getByRef(this.scope.projectId, this.params.issueref).then((function(_this) {\n return function(issue) {\n var ctx, ref, ref1;\n _this.scope.issue = issue;\n _this.scope.issueId = issue.id;\n _this.scope.commentModel = issue;\n _this.modelTransform.setObject(_this.scope, 'issue');\n if (((ref = _this.scope.issue.neighbors.previous) != null ? ref.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.issue.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-issues-detail\", ctx);\n }\n if (((ref1 = _this.scope.issue.neighbors.next) != null ? ref1.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.issue.neighbors.next.ref\n };\n return _this.scope.nextUrl = _this.navUrls.resolve(\"project-issues-detail\", ctx);\n }\n };\n })(this));\n };\n\n IssueDetailController.prototype.loadSprint = function() {\n if (this.scope.issue.milestone) {\n return this.rs.sprints.get(this.scope.issue.project, this.scope.issue.milestone).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n return sprint;\n };\n })(this));\n }\n };\n\n IssueDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.loadIssue().then((function(_this) {\n return function() {\n return _this.loadSprint();\n };\n })(this));\n };\n\n\n /*\n * Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n * See app/modules/components/vote-button for more info\n */\n\n IssueDetailController.prototype.onUpvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssue();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.issues.upvote(this.scope.issueId).then(onSuccess, onError);\n };\n\n IssueDetailController.prototype.onDownvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssue();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.issues.downvote(this.scope.issueId).then(onSuccess, onError);\n };\n\n\n /*\n * Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n * See app/modules/components/watch-button for more info\n */\n\n IssueDetailController.prototype.onWatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssue();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.issues.watch(this.scope.issueId).then(onSuccess, onError);\n };\n\n IssueDetailController.prototype.onUnwatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssue();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.issues.unwatch(this.scope.issueId).then(onSuccess, onError);\n };\n\n return IssueDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"IssueDetailController\", IssueDetailController);\n\n IssueStatusDisplayDirective = function($template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-display.html\", true);\n link = function($scope, $el, $attrs) {\n var render;\n render = function(issue) {\n var html, status;\n status = $scope.statusById[issue.status];\n html = template({\n is_closed: status.is_closed,\n status: status\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(issue) {\n if (issue != null) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueStatusDisplay\", [\"$tgTemplate\", \"$compile\", IssueStatusDisplayDirective]);\n\n IssueStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = (function(_this) {\n return function(issue) {\n var html, status;\n status = $scope.statusById[issue.status];\n html = template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n })(this);\n save = function(statusId) {\n var currentLoading, onError, onSuccess, transform;\n $.fn.popover().closeAll();\n currentLoading = $loading().target($el).start();\n transform = $modelTransform.save(function(issue) {\n issue.status = statusId;\n return issue;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".js-edit-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n return save(target.data(\"status-id\"));\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.status : void 0;\n }, function() {\n var issue;\n issue = $model.$modelValue;\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", IssueStatusButtonDirective]);\n\n IssueTypeButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"issue/issue-type-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, notAutoSave, render, save;\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = function(issue) {\n var html, type;\n type = $scope.typeById[issue.type];\n html = template({\n type: type,\n typees: $scope.typeList,\n editable: isEditable()\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n save = function(type) {\n var currentLoading, onError, onSuccess, transform;\n $.fn.popover().closeAll();\n if (notAutoSave) {\n $model.$modelValue.type = type;\n $scope.$apply();\n return;\n }\n currentLoading = $loading().target($el.find(\".level-name\")).start();\n transform = $modelTransform.save(function(issue) {\n issue.type = type;\n return issue;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".type-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-type\").popover().open();\n });\n $el.on(\"click\", \".type\", function(event) {\n var target, type;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n type = target.data(\"type-id\");\n return save(type);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.type : void 0;\n }, function() {\n var issue;\n issue = $model.$modelValue;\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueTypeButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", IssueTypeButtonDirective]);\n\n IssueSeverityButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"issue/issue-severity-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, notAutoSave, render, save;\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = function(issue) {\n var html, severity;\n severity = $scope.severityById[issue.severity];\n html = template({\n severity: severity,\n severityes: $scope.severityList,\n editable: isEditable()\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n save = function(severity) {\n var currentLoading, onError, onSuccess, transform;\n $.fn.popover().closeAll();\n if (notAutoSave) {\n $model.$modelValue.severity = severity;\n $scope.$apply();\n return;\n }\n currentLoading = $loading().target($el.find(\".level-name\")).start();\n transform = $modelTransform.save(function(issue) {\n issue.severity = severity;\n return issue;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".severity-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-severity\").popover().open();\n });\n $el.on(\"click\", \".severity\", function(event) {\n var severity, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n severity = target.data(\"severity-id\");\n return save(severity);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.severity : void 0;\n }, function() {\n var issue;\n issue = $model.$modelValue;\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueSeverityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", IssueSeverityButtonDirective]);\n\n IssuePriorityButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"issue/issue-priority-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, notAutoSave, render, save;\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = function(issue) {\n var html, priority;\n priority = $scope.priorityById[issue.priority];\n html = template({\n priority: priority,\n priorityes: $scope.priorityList,\n editable: isEditable()\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n save = function(priority) {\n var currentLoading, onError, onSuccess, transform;\n $.fn.popover().closeAll();\n if (notAutoSave) {\n $model.$modelValue.priority = priority;\n $scope.$apply();\n return;\n }\n currentLoading = $loading().target($el.find(\".level-name\")).start();\n transform = $modelTransform.save(function(issue) {\n issue.priority = priority;\n return issue;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".priority-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-priority\").popover().open();\n });\n $el.on(\"click\", \".priority\", function(event) {\n var priority, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n priority = target.data(\"priority-id\");\n return save(priority);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.priority : void 0;\n }, function() {\n var issue;\n issue = $model.$modelValue;\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssuePriorityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", IssuePriorityButtonDirective]);\n\n PromoteIssueToUsButtonDirective = function($rootScope, $repo, $confirm, $translate) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var save;\n save = (function(_this) {\n return function(issue, askResponse) {\n var data, onError, onSuccess;\n data = {\n generated_from_issue: issue.id,\n project: issue.project,\n subject: issue.subject,\n description: issue.description,\n tags: issue.tags,\n is_blocked: issue.is_blocked,\n blocked_note: issue.blocked_note,\n due_date: issue.due_date\n };\n onSuccess = function() {\n askResponse.finish();\n $confirm.notify(\"success\");\n return $rootScope.$broadcast(\"promote-issue-to-us:success\");\n };\n onError = function() {\n askResponse.finish();\n return $confirm.notify(\"error\");\n };\n return $repo.create(\"userstories\", data).then(onSuccess, onError);\n };\n })(this);\n $el.on(\"click\", \"a\", function(event) {\n var issue, message, subtitle, title;\n event.preventDefault();\n issue = $model.$modelValue;\n title = $translate.instant(\"ISSUES.CONFIRM_PROMOTE.TITLE\");\n message = $translate.instant(\"ISSUES.CONFIRM_PROMOTE.MESSAGE\");\n subtitle = issue.subject;\n return $confirm.ask(title, subtitle, message).then((function(_this) {\n return function(response) {\n return save(issue, response);\n };\n })(this));\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n restrict: \"AE\",\n require: \"ngModel\",\n templateUrl: \"issue/promote-issue-to-us-button.html\",\n link: link\n };\n };\n\n module.directive(\"tgPromoteIssueToUsButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$translate\", PromoteIssueToUsButtonDirective]);\n\n AssignSprintToIssueButtonDirective = function($rootscope, $rs, $repo, $loading, $translate, lightboxService, $modelTransform, $confirm) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var avaliableMilestones, existsMilestone, issue;\n avaliableMilestones = [];\n issue = null;\n $scope.$watch($attrs.ngModel, function(item) {\n if (!item) {\n return;\n }\n if (item.milestone) {\n $el.find('.assign-issue-button.button-unset').removeClass('is-active');\n return $el.find('.assign-issue-button.button-set').addClass('is-active');\n } else {\n $el.find('.assign-issue-button.button-set').removeClass('is-active');\n return $el.find('.assign-issue-button.button-unset').addClass('is-active');\n }\n });\n $el.on(\"click\", \".assign-issue-button.button-unset\", function(event) {\n var title;\n event.preventDefault();\n event.stopPropagation();\n title = $translate.instant(\"ISSUES.ACTION_ATTACH_SPRINT\");\n issue = $model.$modelValue;\n return $rs.sprints.list($scope.projectId, null).then(function(data) {\n $scope.milestones = data.milestones;\n $scope.selectedSprint = issue.milestone;\n avaliableMilestones = angular.copy($scope.milestones);\n return lightboxService.open($el.find(\".lightbox-assign-sprint-to-issue\"));\n });\n });\n $el.on(\"click\", \".assign-issue-button.button-set\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n issue = $model.$modelValue;\n return $rs.sprints.list($scope.projectId, null).then(function(data) {\n var currentSprint, message, title;\n currentSprint = _.find(data.milestones, {\n \"id\": issue.milestone\n });\n title = $translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.TITLE\");\n message = $translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE\", {\n sprintName: currentSprint.name\n });\n return $confirm.ask(title, null, message).then(function(askResponse) {\n var onError, onSuccess, transform;\n onSuccess = function() {\n $rootscope.$broadcast(\"assign-sprint-to-issue:success\", null);\n askResponse.finish();\n return lightboxService.close($el);\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n transform = $modelTransform.save(function(issue) {\n issue.setAttr('milestone', null);\n return issue;\n });\n return transform.then(onSuccess, onError);\n });\n });\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n existsMilestone = function(needle, haystack) {\n haystack = normalizeString(haystack.toUpperCase());\n needle = normalizeString(needle.toUpperCase());\n return _.includes(haystack, needle);\n };\n $scope.filterMilestones = function(filterText) {\n return $scope.milestones = avaliableMilestones.filter(function(milestone) {\n return existsMilestone(filterText, milestone.name);\n });\n };\n return $scope.saveIssueToSprint = function(selectedSprint, event) {\n var currentLoading, transform;\n currentLoading = $loading().target($(event.currentTarget)).start();\n issue.setAttr('milestone', selectedSprint.id);\n transform = $modelTransform.save(function(item) {\n issue.setAttr('milestone', selectedSprint.id);\n return item;\n });\n return transform.then(function() {\n currentLoading.finish();\n lightboxService.close($el.find(\".lightbox-assign-sprint-to-issue\"));\n return $rootscope.$broadcast(\"assign-sprint-to-issue:success\", selectedSprint.id);\n });\n };\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n templateUrl: \"issue/assign-sprint-to-issue-button.html\"\n };\n };\n\n module.directive(\"tgAssignSprintToIssueButton\", [\"$rootScope\", \"$tgResources\", \"$tgRepo\", \"$tgLoading\", \"$translate\", \"lightboxService\", \"$tgQueueModelTransformation\", \"$tgConfirm\", AssignSprintToIssueButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/lightboxes.coffee\n */\n\n(function() {\n var CreateBulkIssuesDirective, bindOnce, debounce, module, taiga, trim;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n trim = this.taiga.trim;\n\n module = angular.module(\"taigaIssues\");\n\n CreateBulkIssuesDirective = function($repo, $rs, $confirm, $rootscope, $loading, lightboxService, $model) {\n var link;\n link = function($scope, $el, attrs) {\n var form, submit, submitButton;\n form = null;\n $scope.$on(\"issueform:bulk\", function(ctx, projectId, milestoneId, status) {\n if (form) {\n form.reset();\n }\n lightboxService.open($el);\n return $scope[\"new\"] = {\n projectId: projectId,\n milestoneId: milestoneId,\n bulk: \"\"\n };\n });\n submit = debounce(2000, function(event) {\n var currentLoading, data, milestoneId, projectId, promise;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n data = $scope[\"new\"].bulk;\n projectId = $scope[\"new\"].projectId;\n milestoneId = $scope[\"new\"].milestoneId;\n promise = $rs.issues.bulkCreate(projectId, milestoneId, data);\n promise.then(function(result) {\n result = _.map(result.data, function(x) {\n return $model.make_model('issues', x);\n });\n currentLoading.finish();\n $rootscope.$broadcast(\"issueform:new:success\", result);\n lightboxService.close($el);\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function() {\n currentLoading.finish();\n return $confirm.notify(\"error\");\n });\n });\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateBulkIssues\", [\"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\", \"lightboxService\", \"$tgModel\", CreateBulkIssuesDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/list.coffee\n */\n\n(function() {\n var IssueAssignedToInlineEditionDirective, IssueStatusInlineEditionDirective, IssuesController, IssuesDirective, bindMethods, bindOnce, debounceLeading, groupBy, joinStr, mixOf, module, startswith, taiga, toString, trim,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounceLeading = this.taiga.debounceLeading;\n\n startswith = this.taiga.startswith;\n\n bindMethods = this.taiga.bindMethods;\n\n debounceLeading = this.taiga.debounceLeading;\n\n module = angular.module(\"taigaIssues\");\n\n IssuesController = (function(superClass) {\n extend(IssuesController, superClass);\n\n IssuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$tgUrls\", \"$routeParams\", \"$q\", \"$tgLocation\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"tgErrorHandlingService\", \"$tgStorage\", \"tgFilterRemoteStorageService\", \"tgProjectService\", \"tgUserActivityService\"];\n\n IssuesController.prototype.filtersHashSuffix = \"issues-filters\";\n\n IssuesController.prototype.myFiltersHashSuffix = \"issues-my-filters\";\n\n function IssuesController(scope, rootscope, repo, confirm, rs, urls, params1, q1, location, appMetaService, navUrls, events, analytics, translate, errorHandlingService, storage, filterRemoteStorageService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.urls = urls;\n this.params = params1;\n this.q = q1;\n this.location = location;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.storage = storage;\n this.filterRemoteStorageService = filterRemoteStorageService;\n this.projectService = projectService;\n this.loadIssues = bind(this.loadIssues, this);\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"PROJECT.SECTION.ISSUES\");\n this.voting = false;\n if (this.applyStoredFilters(this.params.pslug, this.filtersHashSuffix)) {\n return;\n }\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ISSUES.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.translate.instant(\"ISSUES.PAGE_DESCRIPTION\", {\n projectName: _this.scope.project.name,\n projectDescription: _this.scope.project.description\n });\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"issueform:new:success\", (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"issue\", \"create\", \"create issue on issues list\", 1);\n return _this.loadIssues();\n };\n })(this));\n this.scope.$on(\"assigned-to:changed\", (function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_to') || _this.isFilterDataTypeSelected('role') || _this.isOrderedBy('assigned_to') || _this.isOrderedBy('modified')) {\n return _this.loadIssues();\n }\n };\n })(this));\n this.scope.$on(\"status:changed\", (function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('status') || _this.isOrderedBy('status') || _this.isOrderedBy('modified')) {\n return _this.loadIssues();\n }\n };\n })(this));\n }\n\n IssuesController.prototype.isOrderedBy = function(fieldName) {\n var pattern;\n pattern = new RegExp(\"-*\" + fieldName);\n return pattern.test(this.location.search().order_by);\n };\n\n IssuesController.prototype.changeQ = function(q) {\n this.unselectFilter(\"page\");\n this.replaceFilter(\"q\", q);\n this.loadIssues();\n return this.generateFilters();\n };\n\n IssuesController.prototype.removeFilter = function(filter) {\n this.unselectFilter(\"page\");\n this.unselectFilter(filter.dataType, filter.id);\n this.loadIssues();\n return this.generateFilters();\n };\n\n IssuesController.prototype.addFilter = function(newFilter) {\n this.unselectFilter(\"page\");\n this.selectFilter(newFilter.category.dataType, newFilter.filter.id);\n this.loadIssues();\n return this.generateFilters();\n };\n\n IssuesController.prototype.selectCustomFilter = function(customFilter) {\n var orderBy;\n orderBy = this.location.search().order_by;\n if (orderBy) {\n customFilter.filter.order_by = orderBy;\n }\n this.unselectFilter(\"page\");\n this.replaceAllFilters(customFilter.filter);\n this.loadIssues();\n return this.generateFilters();\n };\n\n IssuesController.prototype.removeCustomFilter = function(customFilter) {\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, this.myFiltersHashSuffix).then((function(_this) {\n return function(userFilters) {\n delete userFilters[customFilter.id];\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, _this.myFiltersHashSuffix).then(_this.generateFilters);\n };\n })(this));\n };\n\n IssuesController.prototype.isFilterDataTypeSelected = function(filterDataType) {\n var filter, j, len, ref;\n ref = this.selectedFilters;\n for (j = 0, len = ref.length; j < len; j++) {\n filter = ref[j];\n if (filter['dataType'] === filterDataType) {\n return true;\n }\n }\n return false;\n };\n\n IssuesController.prototype.saveCustomFilter = function(name) {\n var filters, urlfilters;\n filters = {};\n urlfilters = this.location.search();\n filters.tags = urlfilters.tags;\n filters.status = urlfilters.status;\n filters.type = urlfilters.type;\n filters.severity = urlfilters.severity;\n filters.priority = urlfilters.priority;\n filters.assigned_to = urlfilters.assigned_to;\n filters.owner = urlfilters.owner;\n filters.role = urlfilters.role;\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, this.myFiltersHashSuffix).then((function(_this) {\n return function(userFilters) {\n userFilters[name] = filters;\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, _this.myFiltersHashSuffix).then(_this.generateFilters);\n };\n })(this));\n };\n\n IssuesController.prototype.generateFilters = function() {\n var loadFilters, urlfilters;\n this.storeFilters(this.params.pslug, this.location.search(), this.filtersHashSuffix);\n urlfilters = this.location.search();\n loadFilters = {};\n loadFilters.project = this.scope.projectId;\n loadFilters.tags = urlfilters.tags;\n loadFilters.status = urlfilters.status;\n loadFilters.type = urlfilters.type;\n loadFilters.severity = urlfilters.severity;\n loadFilters.priority = urlfilters.priority;\n loadFilters.assigned_to = urlfilters.assigned_to;\n loadFilters.owner = urlfilters.owner;\n loadFilters.role = urlfilters.role;\n loadFilters.q = urlfilters.q;\n return this.q.all([this.rs.issues.filtersData(loadFilters), this.filterRemoteStorageService.getFilters(this.scope.projectId, this.myFiltersHashSuffix)]).then((function(_this) {\n return function(result) {\n var assignedTo, customFiltersRaw, data, owner, priority, role, selected, severity, statuses, tags, tagsWithAtLeastOneElement, type;\n data = result[0];\n customFiltersRaw = result[1];\n statuses = _.map(data.statuses, function(it) {\n it.id = it.id.toString();\n return it;\n });\n type = _.map(data.types, function(it) {\n it.id = it.id.toString();\n return it;\n });\n severity = _.map(data.severities, function(it) {\n it.id = it.id.toString();\n return it;\n });\n priority = _.map(data.priorities, function(it) {\n it.id = it.id.toString();\n return it;\n });\n tags = _.map(data.tags, function(it) {\n it.id = it.name;\n return it;\n });\n tagsWithAtLeastOneElement = _.filter(tags, function(tag) {\n return tag.count > 0;\n });\n assignedTo = _.map(data.assigned_to, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.full_name || \"Unassigned\";\n return it;\n });\n owner = _.map(data.owners, function(it) {\n it.id = it.id.toString();\n it.name = it.full_name;\n return it;\n });\n role = _.map(data.roles, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.name || \"Unassigned\";\n return it;\n });\n _this.selectedFilters = [];\n if (loadFilters.status) {\n selected = _this.formatSelectedFilters(\"status\", statuses, loadFilters.status);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.tags) {\n selected = _this.formatSelectedFilters(\"tags\", tags, loadFilters.tags);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.assigned_to) {\n selected = _this.formatSelectedFilters(\"assigned_to\", assignedTo, loadFilters.assigned_to);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.owner) {\n selected = _this.formatSelectedFilters(\"owner\", owner, loadFilters.owner);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.type) {\n selected = _this.formatSelectedFilters(\"type\", type, loadFilters.type);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.severity) {\n selected = _this.formatSelectedFilters(\"severity\", severity, loadFilters.severity);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.priority) {\n selected = _this.formatSelectedFilters(\"priority\", priority, loadFilters.priority);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters.role) {\n selected = _this.formatSelectedFilters(\"role\", role, loadFilters.role);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n _this.filterQ = loadFilters.q;\n _this.filters = [\n {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.TYPE\"),\n dataType: \"type\",\n content: type\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.SEVERITY\"),\n dataType: \"severity\",\n content: severity\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.PRIORITIES\"),\n dataType: \"priority\",\n content: priority\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.STATUS\"),\n dataType: \"status\",\n content: statuses\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.TAGS\"),\n dataType: \"tags\",\n content: tags,\n hideEmpty: true,\n totalTaggedElements: tagsWithAtLeastOneElement.length\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ASSIGNED_TO\"),\n dataType: \"assigned_to\",\n content: assignedTo\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ROLE\"),\n dataType: \"role\",\n content: role\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.CREATED_BY\"),\n dataType: \"owner\",\n content: owner\n }\n ];\n _this.customFilters = [];\n return _.forOwn(customFiltersRaw, function(value, key) {\n return _this.customFilters.push({\n id: key,\n name: key,\n filter: value\n });\n });\n };\n })(this));\n };\n\n IssuesController.prototype.initializeSubscription = function() {\n var routingKey;\n routingKey = \"changes.project.\" + this.scope.projectId + \".issues\";\n return this.events.subscribe(this.scope, routingKey, debounceLeading(500, (function(_this) {\n return function(message) {\n return _this.loadIssues();\n };\n })(this)));\n };\n\n IssuesController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_issues_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.issueStatusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n this.scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\");\n this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n this.scope.severityList = _.sortBy(project.severities, \"order\");\n this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n this.scope.priorityList = _.sortBy(project.priorities, \"order\");\n this.scope.issueTypes = _.sortBy(project.issue_types, \"order\");\n this.scope.issueTypeById = groupBy(project.issue_types, function(x) {\n return x.id;\n });\n return project;\n };\n\n IssuesController.prototype.loadIssuesRequests = 0;\n\n IssuesController.prototype.loadIssues = function() {\n var params, promise;\n params = this.location.search();\n promise = this.rs.issues.list(this.scope.projectId, params);\n this.loadIssuesRequests += 1;\n promise.index = this.loadIssuesRequests;\n promise.then((function(_this) {\n return function(data) {\n if (promise.index === _this.loadIssuesRequests) {\n _this.scope.issues = data.models;\n _this.scope.page = data.current;\n _this.scope.count = data.count;\n _this.scope.paginatedBy = data.paginatedBy;\n }\n return data;\n };\n })(this));\n return promise;\n };\n\n IssuesController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n this.initializeSubscription();\n this.generateFilters();\n return this.loadIssues();\n };\n\n IssuesController.prototype.addNewIssue = function() {\n var project;\n project = this.projectService.project.toJS();\n return this.rootscope.$broadcast(\"genericform:new\", {\n 'objType': 'issue',\n 'project': project\n });\n };\n\n IssuesController.prototype.addIssuesInBulk = function() {\n return this.rootscope.$broadcast(\"issueform:bulk\", this.scope.projectId);\n };\n\n IssuesController.prototype.upVoteIssue = function(issueId) {\n var onError, onSuccess;\n this.voting = issueId;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssues();\n return _this.voting = null;\n };\n })(this);\n onError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.voting = null;\n };\n })(this);\n return this.rs.issues.upvote(issueId).then(onSuccess, onError);\n };\n\n IssuesController.prototype.downVoteIssue = function(issueId) {\n var onError, onSuccess;\n this.voting = issueId;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssues();\n return _this.voting = null;\n };\n })(this);\n onError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.voting = null;\n };\n })(this);\n return this.rs.issues.downvote(issueId).then(onSuccess, onError);\n };\n\n IssuesController.prototype.getOrderBy = function() {\n if (_.isString(this.location.search().order_by)) {\n return this.location.search().order_by;\n } else {\n return \"created_date\";\n }\n };\n\n return IssuesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"IssuesController\", IssuesController);\n\n IssuesDirective = function($log, $location, $template, $compile) {\n var link, linkOrdering, linkPagination, template;\n template = $template.get(\"issue/issue-paginator.html\", true);\n linkPagination = function($scope, $el, $attrs, $ctrl) {\n var $pagEl, afterCurrent, atBegin, atEnd, beforeCurrent, getNumPages, renderPagination;\n afterCurrent = 2;\n beforeCurrent = 4;\n atBegin = 2;\n atEnd = 2;\n $pagEl = $el.find(\".issues-paginator\");\n getNumPages = function() {\n var numPages;\n numPages = $scope.count / $scope.paginatedBy;\n if (parseInt(numPages, 10) < numPages) {\n numPages = parseInt(numPages, 10) + 1;\n } else {\n numPages = parseInt(numPages, 10);\n }\n return numPages;\n };\n renderPagination = function() {\n var cpage, html, i, j, numPages, options, pages, ref;\n numPages = getNumPages();\n if (numPages <= 1) {\n $pagEl.hide();\n return;\n }\n $pagEl.show();\n pages = [];\n options = {};\n options.pages = pages;\n options.showPrevious = $scope.page > 1;\n options.showNext = !($scope.page === numPages);\n cpage = $scope.page;\n for (i = j = 1, ref = numPages; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (i === (cpage + afterCurrent) && numPages > (cpage + afterCurrent + atEnd)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i === (cpage - beforeCurrent) && cpage > (atBegin + beforeCurrent)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i > (cpage + afterCurrent) && i <= (numPages - atEnd)) {\n\n } else if (i < (cpage - beforeCurrent) && i > atBegin) {\n\n } else if (i === cpage) {\n pages.push({\n classes: \"active\",\n num: i,\n type: \"page-active\"\n });\n } else {\n pages.push({\n classes: \"page\",\n num: i,\n type: \"page\"\n });\n }\n }\n html = template(options);\n html = $compile(html)($scope);\n return $pagEl.html(html);\n };\n $scope.$watch(\"issues\", function(value) {\n if (!value) {\n return;\n }\n return renderPagination();\n });\n $el.on(\"click\", \".issues-paginator a.next\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page + 1);\n return $ctrl.loadIssues();\n });\n });\n $el.on(\"click\", \".issues-paginator a.previous\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page - 1);\n return $ctrl.loadIssues();\n });\n });\n return $el.on(\"click\", \".issues-paginator li.page > a\", function(event) {\n var pagenum, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n pagenum = target.data(\"pagenum\");\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", pagenum);\n return $ctrl.loadIssues();\n });\n });\n };\n linkOrdering = function($scope, $el, $attrs, $ctrl) {\n var colHeadElement, currentOrder, icon, svg;\n currentOrder = $ctrl.getOrderBy();\n if (currentOrder) {\n icon = startswith(currentOrder, \"-\") ? \"icon-arrow-up\" : \"icon-arrow-down\";\n colHeadElement = $el.find(\".row.title > div[data-fieldname='\" + (trim(currentOrder, \"-\")) + \"']\");\n svg = $(\"\").attr(\"svg-icon\", icon);\n colHeadElement.append(svg);\n $compile(colHeadElement.contents())($scope);\n }\n return $el.on(\"click\", \".row.title > div\", function(event) {\n var finalOrder, newOrder, target;\n target = angular.element(event.currentTarget);\n currentOrder = $ctrl.getOrderBy();\n newOrder = target.data(\"fieldname\");\n if (newOrder === 'total_voters' && currentOrder !== \"-total_voters\") {\n currentOrder = \"total_voters\";\n }\n finalOrder = currentOrder === newOrder ? \"-\" + newOrder : newOrder;\n return $scope.$apply(function() {\n $ctrl.replaceFilter(\"order_by\", finalOrder);\n $ctrl.storeFilters($ctrl.params.pslug, $location.search(), $ctrl.filtersHashSuffix);\n return $ctrl.loadIssues().then(function() {\n $el.find(\".row.title > div > tg-svg\").remove();\n icon = startswith(finalOrder, \"-\") ? \"icon-arrow-up\" : \"icon-arrow-down\";\n svg = $(\"\").attr(\"svg-icon\", icon);\n target.append(svg);\n return $compile(target.contents())($scope);\n });\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n linkOrdering($scope, $el, $attrs, $ctrl);\n linkPagination($scope, $el, $attrs, $ctrl);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssues\", [\"$log\", \"$tgLocation\", \"$tgTemplate\", \"$compile\", IssuesDirective]);\n\n IssueStatusInlineEditionDirective = function($repo, $template, $rootscope) {\n\n /*\n Print the status of an Issue and a popover to change it.\n - tg-issue-status-inline-edition: The issue\n \n Example:\n \n div.status(tg-issue-status-inline-edition=\"issue\")\n a.issue-status(href=\"\")\n \n NOTE: This directive need 'issueStatusById' and 'project'.\n */\n var link, selectionTemplate, updateIssueStatus;\n selectionTemplate = $template.get(\"issue/issue-status-inline-edition-selection.html\", true);\n updateIssueStatus = function($el, issue, issueStatusById) {\n var issueStatusDom, issueStatusDomParent, status;\n issueStatusDomParent = $el.find(\".issue-status\");\n issueStatusDom = $el.find(\".issue-status .issue-status-bind\");\n status = issueStatusById[issue.status];\n if (status) {\n issueStatusDom.text(status.name);\n issueStatusDom.prop(\"title\", status.name);\n return issueStatusDomParent.css('color', status.color);\n }\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, issue;\n $ctrl = $el.controller();\n issue = $scope.$eval($attrs.tgIssueStatusInlineEdition);\n $el.on(\"click\", \".issue-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n issue.status = target.data(\"status-id\");\n $el.find(\".pop-status\").popover().close();\n updateIssueStatus($el, issue, $scope.issueStatusById);\n return $scope.$apply(function() {\n return $repo.save(issue).then(function(response) {\n return $rootscope.$broadcast(\"status:changed\", response);\n });\n });\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n $el.append(selectionTemplate({\n 'statuses': project.issue_statuses\n }));\n updateIssueStatus($el, issue, $scope.issueStatusById);\n if (project.my_permissions.indexOf(\"modify_issue\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$watch($attrs.tgIssueStatusInlineEdition, (function(_this) {\n return function(val) {\n return updateIssueStatus($el, val, $scope.issueStatusById);\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssueStatusInlineEdition\", [\"$tgRepo\", \"$tgTemplate\", \"$rootScope\", IssueStatusInlineEditionDirective]);\n\n IssueAssignedToInlineEditionDirective = function($repo, $rootscope, $translate, avatarService) {\n var link, template;\n template = _.template(\"\\\" src=\\\"<%- imgurl %>\\\" alt=\\\"<%- name %>\\\"/>\\n
    <%- name %>
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, issue, updateIssue;\n updateIssue = function(issue) {\n var avatar, ctx, member;\n ctx = {\n name: $translate.instant(\"COMMON.ASSIGNED_TO.NOT_ASSIGNED\"),\n imgurl: \"/\" + window._version + \"/images/unnamed.png\"\n };\n member = $scope.usersById[issue.assigned_to];\n avatar = avatarService.getAvatar(member);\n ctx.imgurl = avatar.url;\n ctx.bg = null;\n if (member) {\n ctx.name = member.full_name_display;\n ctx.bg = avatar.bg;\n }\n $el.find(\".avatar\").html(template(ctx));\n return $el.find(\".issue-assignedto\").attr('title', ctx.name);\n };\n $ctrl = $el.controller();\n issue = $scope.$eval($attrs.tgIssueAssignedToInlineEdition);\n updateIssue(issue);\n $el.on(\"click\", \".issue-assignedto\", function(event) {\n return $rootscope.$broadcast(\"assigned-to:add\", issue);\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_issue\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"assigned-to:added\", function(ctx, userId, updatedIssue) {\n if (updatedIssue.id === issue.id) {\n updatedIssue.assigned_to = userId;\n return $repo.save(issue).then(function() {\n updateIssue(updatedIssue);\n return $rootscope.$broadcast(\"assigned-to:changed\", updatedIssue);\n });\n }\n });\n $scope.$watch($attrs.tgIssueAssignedToInlineEdition, function(val) {\n return updateIssue(val);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssueAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\", \"$translate\", \"tgAvatarService\", IssueAssignedToInlineEditionDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/userstories/detail.coffee\n */\n\n(function() {\n var UsClientRequirementButtonDirective, UsStatusButtonDirective, UsStatusDisplayDirective, UsTeamRequirementButtonDirective, UserStoryDetailController, bindMethods, bindOnce, groupBy, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaUserStories\");\n\n UserStoryDetailController = (function(superClass) {\n extend(UserStoryDetailController, superClass);\n\n UserStoryDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"$tgConfig\", \"tgProjectService\", \"tgWysiwygService\"];\n\n function UserStoryDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appMetaService, navUrls, analytics, translate, modelTransform, errorHandlingService, configService, projectService, wysiwigService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.translate = translate;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.configService = configService;\n this.projectService = projectService;\n this.wysiwigService = wysiwigService;\n bindMethods(this);\n this.scope.usRef = this.params.usref;\n this.scope.sectionName = this.translate.instant(\"US.SECTION_NAME\");\n this.scope.tribeEnabled = this.configService.config.tribeHost;\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this._setMeta();\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserStoryDetailController.prototype._setMeta = function() {\n var closedTasks, description, progressPercentage, ref, title, totalTasks;\n totalTasks = this.scope.tasks.length;\n closedTasks = _.filter(this.scope.tasks, (function(_this) {\n return function(t) {\n return _this.scope.taskStatusById[t.status].is_closed;\n };\n })(this)).length;\n progressPercentage = totalTasks > 0 ? Math.round(100 * closedTasks / totalTasks) : 0;\n title = this.translate.instant(\"US.PAGE_TITLE\", {\n userStoryRef: \"#\" + this.scope.us.ref,\n userStorySubject: this.scope.us.subject,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"US.PAGE_DESCRIPTION\", {\n userStoryStatus: ((ref = this.scope.statusById[this.scope.us.status]) != null ? ref.name : void 0) || \"--\",\n userStoryPoints: this.scope.us.total_points,\n userStoryDescription: angular.element(this.wysiwigService.getHTML(this.scope.us.description) || \"\").text(),\n userStoryClosedTasks: closedTasks,\n userStoryTotalTasks: totalTasks,\n userStoryProgressPercentage: progressPercentage\n });\n return this.appMetaService.setAll(title, description);\n };\n\n UserStoryDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"related-tasks:update\", (function(_this) {\n return function() {\n var allClosed;\n _this.loadTasks();\n _this.scope.tasks = _.clone(_this.scope.tasks, false);\n allClosed = _.every(_this.scope.tasks, function(task) {\n return task.is_closed;\n });\n if (_this.scope.us.is_closed !== allClosed) {\n return _this.loadUs();\n }\n };\n })(this));\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on userstory\", 1);\n };\n })(this));\n this.scope.$on(\"task:reorder\", (function(_this) {\n return function(event, task, newIndex) {\n return _this.reorderTask(task, newIndex);\n };\n })(this));\n return this.scope.$on(\"comment:new\", (function(_this) {\n return function() {\n return _this.loadUs();\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n if (this.scope.project.is_backlog_activated) {\n if (this.scope.us.milestone) {\n ctx.sprint = this.scope.sprint.slug;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-taskboard\", ctx);\n } else {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-backlog\", ctx);\n }\n } else if (this.scope.project.is_kanban_activated) {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-kanban\", ctx);\n }\n };\n\n UserStoryDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.statusList = project.us_statuses;\n this.scope.statusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n this.scope.taskStatusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n this.scope.pointsList = _.sortBy(project.points, \"order\");\n this.scope.pointsById = groupBy(this.scope.pointsList, function(e) {\n return e.id;\n });\n return project;\n };\n\n UserStoryDetailController.prototype.loadUs = function() {\n var httpParams, kanbanStaus, milestone, noMilestone;\n httpParams = _.pick(this.location.search(), \"milestone\", \"no-milestone\", \"kanban-status\");\n milestone = httpParams.milestone;\n if (milestone) {\n this.rs.userstories.storeQueryParams(this.scope.projectId, {\n milestone: milestone,\n order_by: \"sprint_order\"\n });\n }\n noMilestone = httpParams[\"no-milestone\"];\n if (noMilestone) {\n this.rs.userstories.storeQueryParams(this.scope.projectId, {\n milestone: \"null\",\n order_by: \"backlog_order\"\n });\n }\n kanbanStaus = httpParams[\"kanban-status\"];\n if (kanbanStaus) {\n this.rs.userstories.storeQueryParams(this.scope.projectId, {\n status: kanbanStaus,\n order_by: \"kanban_order\"\n });\n }\n return this.rs.userstories.getByRef(this.scope.projectId, this.params.usref).then((function(_this) {\n return function(us) {\n _this.scope.us = us;\n _this.scope.usId = us.id;\n _this.scope.commentModel = us;\n _this.modelTransform.setObject(_this.scope, 'us');\n return us;\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.loadSprint = function() {\n if (this.scope.us.milestone) {\n return this.rs.sprints.get(this.scope.us.project, this.scope.us.milestone).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n return sprint;\n };\n })(this));\n }\n };\n\n UserStoryDetailController.prototype.loadTasks = function() {\n return this.rs.tasks.list(this.scope.projectId, null, this.scope.usId).then((function(_this) {\n return function(tasks) {\n _this.scope.tasks = tasks;\n return tasks;\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.loadUs().then((function(_this) {\n return function() {\n return _this.q.all([_this.loadSprint(), _this.loadTasks()]);\n };\n })(this));\n };\n\n\n /*\n * Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n * See app/modules/components/vote-button for more info\n */\n\n UserStoryDetailController.prototype.onUpvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadUs();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.userstories.upvote(this.scope.usId).then(onSuccess, onError);\n };\n\n UserStoryDetailController.prototype.onDownvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadUs();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.userstories.downvote(this.scope.usId).then(onSuccess, onError);\n };\n\n\n /*\n * Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n * See app/modules/components/watch-button for more info\n */\n\n UserStoryDetailController.prototype.onWatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadUs();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.userstories.watch(this.scope.usId).then(onSuccess, onError);\n };\n\n UserStoryDetailController.prototype.onUnwatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadUs();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.userstories.unwatch(this.scope.usId).then(onSuccess, onError);\n };\n\n UserStoryDetailController.prototype.onTribeInfo = function() {\n var image, publishDesc, publishTitle, text;\n publishTitle = this.translate.instant(\"US.TRIBE.PUBLISH_MORE_INFO_TITLE\");\n image = $('').attr({\n 'src': \"/\" + window._version + \"/images/monster-fight.png\",\n 'alt': this.translate.instant(\"US.TRIBE.PUBLISH_MORE_INFO_TITLE\")\n });\n text = this.translate.instant(\"US.TRIBE.PUBLISH_MORE_INFO_TEXT\");\n publishDesc = $('
    ').append(image).append(text);\n return this.confirm.success(publishTitle, publishDesc);\n };\n\n UserStoryDetailController.prototype.reorderTask = function(task, newIndex) {\n var afterDestination, beforeDestination, data, newOrder, orderList, previous, previousWithTheSameOrder, setOrders, withoutMoved;\n orderList = {};\n this.scope.tasks.forEach(function(it) {\n return orderList[it.id] = it.us_order;\n });\n withoutMoved = this.scope.tasks.filter(function(it) {\n return it.id !== task.id;\n });\n beforeDestination = withoutMoved.slice(0, newIndex);\n afterDestination = withoutMoved.slice(newIndex);\n previous = beforeDestination[beforeDestination.length - 1];\n newOrder = !previous ? 0 : previous.us_order + 1;\n orderList[task.id] = newOrder;\n previousWithTheSameOrder = beforeDestination.filter(function(it) {\n return it.us_order === previous.us_order;\n });\n setOrders = _.fromPairs(previousWithTheSameOrder.map(function(it) {\n return [it.id, it.us_order];\n }));\n afterDestination.forEach(function(it) {\n return orderList[it.id] = it.us_order + 1;\n });\n this.scope.tasks = _.map(this.scope.tasks, function(it) {\n it.us_order = orderList[it.id];\n return it;\n });\n this.scope.tasks = _.sortBy(this.scope.tasks, \"us_order\");\n data = {\n us_order: newOrder,\n version: task.version\n };\n return this.rs.tasks.reorder(task.id, data, setOrders).then((function(_this) {\n return function(newTask) {\n _this.scope.tasks = _.map(_this.scope.tasks, function(it) {\n if (it.id === newTask.id) {\n return newTask;\n } else {\n return it;\n }\n });\n return _this.rootscope.$broadcast(\"related-tasks:reordered\");\n };\n })(this));\n };\n\n return UserStoryDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserStoryDetailController\", UserStoryDetailController);\n\n UsStatusDisplayDirective = function($template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-display.html\", true);\n link = function($scope, $el, $attrs) {\n var render;\n render = function(us) {\n var html, status;\n status = $scope.statusById[us.status];\n html = template({\n is_closed: us.is_closed,\n status: status\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(us) {\n if (us != null) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsStatusDisplay\", [\"$tgTemplate\", \"$compile\", UsStatusDisplayDirective]);\n\n UsStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = (function(_this) {\n return function(us) {\n var html, status;\n status = $scope.statusById[us.status];\n html = template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n });\n $el.html(html);\n return $compile($el.contents())($scope);\n };\n })(this);\n save = (function(_this) {\n return function(status) {\n var currentLoading, onError, onSuccess, transform;\n $el.find(\".pop-status\").popover().close();\n currentLoading = $loading().target($el.find('.js-edit-status')).start();\n transform = $modelTransform.save(function(us) {\n us.status = status;\n return us;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n })(this);\n $el.on(\"click\", \".js-edit-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var status, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n status = target.data(\"status-id\");\n return save(status);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.status : void 0;\n }, function() {\n var us;\n us = $model.$modelValue;\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", UsStatusButtonDirective]);\n\n UsTeamRequirementButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"us/us-team-requirement-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var canEdit, render, save;\n canEdit = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = function(us) {\n var ctx, html;\n ctx = {\n canEdit: canEdit(),\n isRequired: us.team_requirement\n };\n html = template(ctx);\n html = $compile(html)($scope);\n return $el.html(html);\n };\n save = function(team_requirement) {\n var currentLoading, transform;\n currentLoading = $loading().target($el.find(\"label\")).start();\n transform = $modelTransform.save(function(us) {\n us.team_requirement = team_requirement;\n return us;\n });\n transform.then((function(_this) {\n return function() {\n currentLoading.finish();\n return $rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n return transform.then(null, function() {\n currentLoading.finish();\n return $confirm.notify(\"error\");\n });\n };\n $el.on(\"click\", \".team-requirement\", function(event) {\n var team_requirement;\n if (!canEdit()) {\n return;\n }\n team_requirement = !$model.$modelValue.team_requirement;\n return save(team_requirement);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.team_requirement : void 0;\n }, function() {\n var us;\n us = $model.$modelValue;\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsTeamRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", UsTeamRequirementButtonDirective]);\n\n UsClientRequirementButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"us/us-client-requirement-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var canEdit, render, save;\n canEdit = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = function(us) {\n var ctx, html;\n ctx = {\n canEdit: canEdit(),\n isRequired: us.client_requirement\n };\n html = $compile(template(ctx))($scope);\n return $el.html(html);\n };\n save = function(client_requirement) {\n var currentLoading, transform;\n currentLoading = $loading().target($el.find(\"label\")).start();\n transform = $modelTransform.save(function(us) {\n us.client_requirement = client_requirement;\n return us;\n });\n transform.then((function(_this) {\n return function() {\n currentLoading.finish();\n return $rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n return transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n };\n $el.on(\"click\", \".client-requirement\", function(event) {\n var client_requirement;\n if (!canEdit()) {\n return;\n }\n client_requirement = !$model.$modelValue.client_requirement;\n return save(client_requirement);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.client_requirement : void 0;\n }, function() {\n var us;\n us = $model.$modelValue;\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsClientRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", UsClientRequirementButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/tasks/detail.coffee\n */\n\n(function() {\n var TaskDetailController, TaskIsIocaineButtonDirective, TaskStatusButtonDirective, TaskStatusDisplayDirective, bindMethods, groupBy, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaTasks\");\n\n TaskDetailController = (function(superClass) {\n extend(TaskDetailController, superClass);\n\n TaskDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function TaskDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appMetaService, navUrls, analytics, translate, modelTransform, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.translate = translate;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.taskRef = this.params.taskref;\n this.scope.sectionName = this.translate.instant(\"TASK.SECTION_NAME\");\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this._setMeta();\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n TaskDetailController.prototype._setMeta = function() {\n var description, ref, title;\n title = this.translate.instant(\"TASK.PAGE_TITLE\", {\n taskRef: \"#\" + this.scope.task.ref,\n taskSubject: this.scope.task.subject,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"TASK.PAGE_DESCRIPTION\", {\n taskStatus: ((ref = this.scope.statusById[this.scope.task.status]) != null ? ref.name : void 0) || \"--\",\n taskDescription: angular.element(this.scope.task.description_html || \"\").text()\n });\n return this.appMetaService.setAll(title, description);\n };\n\n TaskDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on task\", 1);\n };\n })(this));\n this.scope.$on(\"custom-attributes-values:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n return this.scope.$on(\"comment:new\", (function(_this) {\n return function() {\n return _this.loadTask();\n };\n })(this));\n };\n\n TaskDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n if (this.scope.project.is_backlog_activated) {\n if (this.scope.task.milestone) {\n ctx.sprint = this.scope.sprint.slug;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-taskboard\", ctx);\n } else if (this.scope.task.us) {\n ctx.ref = this.scope.us.ref;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-userstories-detail\", ctx);\n }\n } else if (this.scope.project.is_kanban_activated) {\n if (this.scope.us) {\n ctx.ref = this.scope.us.ref;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-userstories-detail\", ctx);\n }\n }\n };\n\n TaskDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.statusList = project.task_statuses;\n this.scope.statusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n return project;\n };\n\n TaskDetailController.prototype.loadTask = function() {\n return this.rs.tasks.getByRef(this.scope.projectId, this.params.taskref).then((function(_this) {\n return function(task) {\n var ctx, ref, ref1;\n _this.scope.task = task;\n _this.scope.taskId = task.id;\n _this.scope.commentModel = task;\n _this.modelTransform.setObject(_this.scope, 'task');\n if (((ref = _this.scope.task.neighbors.previous) != null ? ref.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.task.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-tasks-detail\", ctx);\n }\n if (((ref1 = _this.scope.task.neighbors.next) != null ? ref1.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.task.neighbors.next.ref\n };\n _this.scope.nextUrl = _this.navUrls.resolve(\"project-tasks-detail\", ctx);\n }\n return task;\n };\n })(this));\n };\n\n TaskDetailController.prototype.loadSprint = function() {\n if (this.scope.task.milestone) {\n return this.rs.sprints.get(this.scope.task.project, this.scope.task.milestone).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n return sprint;\n };\n })(this));\n }\n };\n\n TaskDetailController.prototype.loadUserStory = function() {\n if (this.scope.task.user_story) {\n return this.rs.userstories.get(this.scope.task.project, this.scope.task.user_story).then((function(_this) {\n return function(us) {\n _this.scope.us = us;\n return us;\n };\n })(this));\n }\n };\n\n TaskDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.loadTask().then((function(_this) {\n return function() {\n return _this.q.all([_this.loadSprint(), _this.loadUserStory()]);\n };\n })(this));\n };\n\n\n /*\n * Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n * See app/modules/components/vote-button for more info\n */\n\n TaskDetailController.prototype.onUpvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadTask();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.tasks.upvote(this.scope.taskId).then(onSuccess, onError);\n };\n\n TaskDetailController.prototype.onDownvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadTask();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.tasks.downvote(this.scope.taskId).then(onSuccess, onError);\n };\n\n\n /*\n * Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n * See app/modules/components/watch-button for more info\n */\n\n TaskDetailController.prototype.onWatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadTask();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.tasks.watch(this.scope.taskId).then(onSuccess, onError);\n };\n\n TaskDetailController.prototype.onUnwatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadTask();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.tasks.unwatch(this.scope.taskId).then(onSuccess, onError);\n };\n\n return TaskDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"TaskDetailController\", TaskDetailController);\n\n TaskStatusDisplayDirective = function($template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-display.html\", true);\n link = function($scope, $el, $attrs) {\n var render;\n render = function(task) {\n var html, status;\n status = $scope.statusById[task.status];\n html = template({\n is_closed: status.is_closed,\n status: status\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(task) {\n if (task != null) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskStatusDisplay\", [\"$tgTemplate\", \"$compile\", TaskStatusDisplayDirective]);\n\n TaskStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $compile, $translate, $template) {\n var link, template;\n template = $template.get(\"common/components/status-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_task\") !== -1;\n };\n render = (function(_this) {\n return function(task) {\n var html, status;\n status = $scope.statusById[task.status];\n html = $compile(template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n }))($scope);\n return $el.html(html);\n };\n })(this);\n save = function(status) {\n var currentLoading, onError, onSuccess, transform;\n currentLoading = $loading().target($el).start();\n transform = $modelTransform.save(function(task) {\n task.status = status;\n return task;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".js-edit-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n $.fn.popover().closeAll();\n return save(target.data(\"status-id\"));\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.status : void 0;\n }, function() {\n var task;\n task = $model.$modelValue;\n if (task) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$compile\", \"$translate\", \"$tgTemplate\", TaskStatusButtonDirective]);\n\n TaskIsIocaineButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $modelTransform, $compile, $template) {\n var link, template;\n template = $template.get(\"issue/iocaine-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_task\") !== -1;\n };\n render = function(task) {\n var ctx, html;\n if (!isEditable() && !task.is_iocaine) {\n $el.html(\"\");\n return;\n }\n ctx = {\n isIocaine: task.is_iocaine,\n isEditable: isEditable()\n };\n html = $compile(template(ctx))($scope);\n return $el.html(html);\n };\n save = function(is_iocaine) {\n var currentLoading, transform;\n currentLoading = $loading().target($el.find('label')).start();\n transform = $modelTransform.save(function(task) {\n task.is_iocaine = is_iocaine;\n return task;\n });\n transform.then(function() {\n return $rootscope.$broadcast(\"object:updated\");\n });\n transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return transform[\"finally\"](function() {\n return currentLoading.finish();\n });\n };\n $el.on(\"click\", \".is-iocaine\", function(event) {\n var is_iocaine;\n if (!isEditable()) {\n return;\n }\n is_iocaine = !$model.$modelValue.is_iocaine;\n return save(is_iocaine);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.is_iocaine : void 0;\n }, function() {\n var task;\n task = $model.$modelValue;\n if (task) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskIsIocaineButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$compile\", \"$tgTemplate\", TaskIsIocaineButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/team/main.coffee\n */\n\n(function() {\n var LeaveProjectDirective, TeamController, TeamFiltersDirective, TeamMemberCurrentUserDirective, TeamMemberStatsDirective, TeamMembersDirective, membersFilter, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n module = angular.module(\"taigaTeam\");\n\n TeamController = (function(superClass) {\n extend(TeamController, superClass);\n\n TeamController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$q\", \"$location\", \"$tgNavUrls\", \"tgAppMetaService\", \"$tgAuth\", \"$translate\", \"tgProjectService\", \"tgErrorHandlingService\"];\n\n function TeamController(scope, rootscope, repo, rs, params, q, location, navUrls, appMetaService, auth, translate, projectService, errorHandlingService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.auth = auth;\n this.translate = translate;\n this.projectService = projectService;\n this.errorHandlingService = errorHandlingService;\n this.scope.sectionName = \"TEAM.SECTION_NAME\";\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"TEAM.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.translate.instant(\"TEAM.PAGE_DESCRIPTION\", {\n projectName: _this.scope.project.name,\n projectDescription: _this.scope.project.description\n });\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n TeamController.prototype.setRole = function(role) {\n if (role) {\n return this.scope.filtersRole = role;\n } else {\n return this.scope.filtersRole = null;\n }\n };\n\n TeamController.prototype.loadMembers = function() {\n var i, len, member, ref, user;\n user = this.auth.getUser();\n this.scope.totals = {};\n ref = this.scope.activeUsers;\n for (i = 0, len = ref.length; i < len; i++) {\n member = ref[i];\n this.scope.totals[member.id] = 0;\n }\n this.scope.currentUser = _.find(this.scope.activeUsers, {\n id: user != null ? user.id : void 0\n });\n return this.scope.memberships = _.reject(this.scope.activeUsers, {\n id: user != null ? user.id : void 0\n });\n };\n\n TeamController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.issuesEnabled = project.is_issues_activated;\n this.scope.tasksEnabled = project.is_kanban_activated || project.is_backlog_activated;\n this.scope.wikiEnabled = project.is_wiki_activated;\n this.scope.owner = project.owner.id;\n return project;\n };\n\n TeamController.prototype.loadMemberStats = function() {\n return this.rs.projects.memberStats(this.scope.projectId).then((function(_this) {\n return function(stats) {\n var totals;\n totals = {};\n _.forEach(_this.scope.totals, function(total, userId) {\n var vals;\n vals = _.map(stats, function(memberStats, statsKey) {\n return memberStats[userId];\n });\n total = _.reduce(vals, function(sum, el) {\n return sum + el;\n });\n return _this.scope.totals[userId] = total;\n });\n _this.scope.stats = _this._processStats(stats);\n return _this.scope.stats.totals = _this.scope.totals;\n };\n })(this));\n };\n\n TeamController.prototype._processStat = function(stat) {\n var key, max, min, singleStat, value;\n max = _.max(_.toArray(stat));\n min = _.min(_.toArray(stat));\n singleStat = Object();\n for (key in stat) {\n if (!hasProp.call(stat, key)) continue;\n value = stat[key];\n if (value === min) {\n singleStat[key] = 0.1;\n } else if (value === max) {\n singleStat[key] = 1;\n } else {\n singleStat[key] = (value * 0.5) / max;\n }\n }\n return singleStat;\n };\n\n TeamController.prototype._processStats = function(stats) {\n var key, value;\n for (key in stats) {\n value = stats[key];\n stats[key] = this._processStat(value);\n }\n return stats;\n };\n\n TeamController.prototype.loadInitialData = function() {\n var project, userRoles;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n this.loadMembers();\n userRoles = _.map(this.scope.users, function(user) {\n return user.role;\n });\n this.scope.roles = _.filter(this.scope.roles, function(role) {\n return userRoles.indexOf(role.id) !== -1;\n });\n return this.loadMemberStats();\n };\n\n return TeamController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"TeamController\", TeamController);\n\n TeamFiltersDirective = function() {\n return {\n templateUrl: \"team/team-filter.html\"\n };\n };\n\n module.directive(\"tgTeamFilters\", [TeamFiltersDirective]);\n\n TeamMemberStatsDirective = function() {\n return {\n templateUrl: \"team/team-member-stats.html\",\n scope: {\n stats: \"=\",\n userId: \"=user\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\"\n }\n };\n };\n\n module.directive(\"tgTeamMemberStats\", TeamMemberStatsDirective);\n\n TeamMemberCurrentUserDirective = function() {\n return {\n templateUrl: \"team/team-member-current-user.html\",\n scope: {\n project: \"=project\",\n currentUser: \"=currentuser\",\n stats: \"=\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\",\n owner: \"=owner\"\n }\n };\n };\n\n module.directive(\"tgTeamCurrentUser\", TeamMemberCurrentUserDirective);\n\n TeamMembersDirective = function() {\n var template;\n template = \"team/team-members.html\";\n return {\n templateUrl: template,\n scope: {\n memberships: \"=\",\n filtersQ: \"=filtersq\",\n filtersRole: \"=filtersrole\",\n stats: \"=\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\",\n owner: \"=owner\"\n }\n };\n };\n\n module.directive(\"tgTeamMembers\", TeamMembersDirective);\n\n LeaveProjectDirective = function($repo, $confirm, $location, $rs, $navurls, $translate, lightboxFactory, currentUserService) {\n var link;\n link = function($scope, $el, $attrs) {\n var leaveConfirm;\n leaveConfirm = function() {\n var confirm_leave_project_text, leave_project_text;\n leave_project_text = $translate.instant(\"TEAM.ACTION_LEAVE_PROJECT\");\n confirm_leave_project_text = $translate.instant(\"TEAM.CONFIRM_LEAVE_PROJECT\");\n return $confirm.ask(leave_project_text, confirm_leave_project_text).then((function(_this) {\n return function(response) {\n var promise;\n promise = $rs.projects.leave($scope.project.id);\n promise.then(function() {\n return currentUserService.loadProjects().then(function() {\n response.finish();\n $confirm.notify(\"success\");\n return $location.path($navurls.resolve(\"home\"));\n });\n });\n return promise.then(null, function(response) {\n response.finish();\n return $confirm.notify('error', response.data._error_message);\n });\n };\n })(this));\n };\n return $scope.leave = function() {\n if ($scope.project.owner.id === $scope.user.id) {\n return lightboxFactory.create(\"tg-lightbox-leave-project-warning\", {\n \"class\": \"lightbox lightbox-leave-project-warning\"\n }, {\n isCurrentUser: true,\n project: $scope.project\n });\n } else {\n return leaveConfirm();\n }\n };\n };\n return {\n scope: {\n user: \"=\",\n project: \"=\"\n },\n templateUrl: \"team/leave-project.html\",\n link: link\n };\n };\n\n module.directive(\"tgLeaveProject\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgResources\", \"$tgNavUrls\", \"$translate\", \"tgLightboxFactory\", \"tgCurrentUserService\", LeaveProjectDirective]);\n\n membersFilter = function() {\n return function(members, filtersQ, filtersRole) {\n return _.filter(members, function(m) {\n return (!filtersRole || m.role === filtersRole.id) && (!filtersQ || m.full_name.search(new RegExp(filtersQ, \"i\")) >= 0);\n });\n };\n };\n\n module.filter('membersFilter', membersFilter);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki/main.coffee\n */\n\n(function() {\n var WikiDetailController, WikiSummaryDirective, WikiWysiwyg, bindOnce, debounce, groupBy, mixOf, module, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaWiki\");\n\n WikiDetailController = (function(superClass) {\n extend(WikiDetailController, superClass);\n\n WikiDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgModel\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$filter\", \"$log\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function WikiDetailController(scope, rootscope, repo, model, confirm, rs, params, q, location, filter, log, appMetaService, navUrls, analytics, translate, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.model = model;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.filter = filter;\n this.log = log;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n this.moveLink = bind(this.moveLink, this);\n this.loadWiki = bind(this.loadWiki, this);\n this.scope.$on(\"wiki:links:move\", this.moveLink);\n this.scope.$on(\"wikipage:add\", this.loadWiki);\n this.scope.projectSlug = this.params.pslug;\n this.scope.wikiSlug = this.params.slug;\n this.scope.sectionName = \"Wiki\";\n this.scope.linksVisible = false;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this._setMeta();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n WikiDetailController.prototype._setMeta = function() {\n var description, ref, ref1, ref2, title;\n title = this.translate.instant(\"WIKI.PAGE_TITLE\", {\n wikiPageName: this.scope.wikiSlug,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"WIKI.PAGE_DESCRIPTION\", {\n wikiPageContent: angular.element(((ref = this.scope.wiki) != null ? ref.html : void 0) || \"\").text(),\n totalEditions: ((ref1 = this.scope.wiki) != null ? ref1.editions : void 0) || 0,\n lastModifiedDate: moment((ref2 = this.scope.wiki) != null ? ref2.modified_date : void 0).format(this.translate.instant(\"WIKI.DATETIME\"))\n });\n return this.appMetaService.setAll(title, description);\n };\n\n WikiDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_wiki_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n WikiDetailController.prototype.loadWiki = function() {\n var promise;\n promise = this.rs.wiki.getBySlug(this.scope.projectId, this.params.slug);\n promise.then((function(_this) {\n return function(wiki) {\n _this.scope.wiki = wiki;\n _this.scope.wikiId = wiki.id;\n return _this.scope.wiki;\n };\n })(this));\n return promise.then(null, (function(_this) {\n return function(xhr) {\n var data;\n _this.scope.wikiId = null;\n if (_this.scope.project.my_permissions.indexOf(\"add_wiki_page\") === -1) {\n return null;\n }\n data = {\n project: _this.scope.projectId,\n slug: _this.scope.wikiSlug,\n content: \"\"\n };\n _this.scope.wiki = _this.model.make_model(\"wiki\", data);\n return _this.scope.wiki;\n };\n })(this));\n };\n\n WikiDetailController.prototype.loadWikiLinks = function() {\n return this.rs.wiki.listLinks(this.scope.projectId).then((function(_this) {\n return function(wikiLinks) {\n var i, len, link, ref, selectedWikiLink;\n _this.scope.wikiLinks = wikiLinks;\n ref = _this.scope.wikiLinks;\n for (i = 0, len = ref.length; i < len; i++) {\n link = ref[i];\n link.url = _this.navUrls.resolve(\"project-wiki-page\", {\n project: _this.scope.projectSlug,\n slug: link.href\n });\n }\n return selectedWikiLink = _.find(wikiLinks, {\n href: _this.scope.wikiSlug\n });\n };\n })(this));\n };\n\n WikiDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.q.all([this.loadWikiLinks(), this.loadWiki()]).then(this.checkLinksPerms.bind(this));\n };\n\n WikiDetailController.prototype.checkLinksPerms = function() {\n if (this.scope.project.my_permissions.indexOf(\"add_wiki_link\") !== -1 || (this.scope.project.my_permissions.indexOf(\"view_wiki_links\") !== -1 && this.scope.wikiLinks.length)) {\n return this.scope.linksVisible = true;\n }\n };\n\n WikiDetailController.prototype[\"delete\"] = function() {\n var message, title;\n title = this.translate.instant(\"WIKI.DELETE_LIGHTBOX_TITLE\");\n message = this.scope.wikiSlug;\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var onError, onSuccess;\n onSuccess = function() {\n var ctx;\n askResponse.finish();\n ctx = {\n project: _this.scope.projectSlug\n };\n _this.location.path(_this.navUrls.resolve(\"project-wiki\", ctx));\n _this.confirm.notify(\"success\");\n return _this.loadWiki();\n };\n onError = function() {\n askResponse.finish(false);\n return _this.confirm.notify(\"error\");\n };\n return _this.repo.remove(_this.scope.wiki).then(onSuccess, onError);\n };\n })(this));\n };\n\n WikiDetailController.prototype.moveLink = function(ctx, item, itemIndex) {\n var r, values;\n values = this.scope.wikiLinks;\n r = values.indexOf(item);\n values.splice(r, 1);\n values.splice(itemIndex, 0, item);\n _.each(values, function(value, index) {\n return value.order = index;\n });\n return this.repo.saveAll(values);\n };\n\n return WikiDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"WikiDetailController\", WikiDetailController);\n\n WikiSummaryDirective = function($log, $template, $compile, $translate, avatarService) {\n var link, template;\n template = $template.get(\"wiki/wiki-summary.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var render;\n render = function(wiki) {\n var avatar, ctx, html, user;\n if ($scope.usersById == null) {\n $log.error(\"WikiSummaryDirective requires userById set in scope.\");\n } else {\n user = $scope.usersById[wiki.last_modifier];\n }\n avatar = avatarService.getAvatar(user);\n if (user === void 0) {\n user = {\n name: \"unknown\",\n avatar: avatar\n };\n } else {\n user = {\n name: user.full_name_display,\n avatar: avatar\n };\n }\n ctx = {\n totalEditions: wiki.editions,\n lastModifiedDate: moment(wiki.modified_date).format($translate.instant(\"WIKI.DATETIME\")),\n user: user\n };\n html = template(ctx);\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(wikiPage) {\n if (!wikiPage) {\n return;\n }\n return render(wikiPage);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgWikiSummary\", [\"$log\", \"$tgTemplate\", \"$compile\", \"$translate\", \"tgAvatarService\", WikiSummaryDirective]);\n\n WikiWysiwyg = function($modelTransform, $rootscope, $confirm, attachmentsFullService, $qqueue, $repo, $analytics, activityService) {\n var link;\n link = function($scope, $el, $attrs) {\n var uploadFile;\n $scope.editableDescription = false;\n $scope.saveDescription = $qqueue.bindAdd(function(description, cb) {\n var onError, onSuccess, promise;\n onSuccess = function(wikiPage) {\n if ($scope.item.id == null) {\n $analytics.trackEvent(\"wikipage\", \"create\", \"create wiki page\", 1);\n $scope.$emit(\"wikipage:add\");\n }\n activityService.fetchEntries(true);\n return $confirm.notify(\"success\");\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n $scope.item.content = description;\n if ($scope.item.id != null) {\n promise = $repo.save($scope.item).then(onSuccess, onError);\n } else {\n promise = $repo.create(\"wiki\", $scope.item).then(onSuccess, onError);\n }\n return promise[\"finally\"](cb);\n });\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.project.id, $scope.item.id, 'wiki_page', file).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n $scope.$watch($attrs.model, function(value) {\n if (!value) {\n return;\n }\n $scope.item = value;\n $scope.version = value.version;\n return $scope.storageKey = $scope.project.id + \"-\" + value.id + \"-wiki\";\n });\n return $scope.$watch('project', function(project) {\n if (!project) {\n return;\n }\n return $scope.editableDescription = project.my_permissions.indexOf(\"modify_wiki_page\") !== -1;\n });\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n\\n
    \\n\\n \\n {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}}\\n
    \\n
    \"\n };\n };\n\n module.directive(\"tgWikiWysiwyg\", [\"$tgQueueModelTransformation\", \"$rootScope\", \"$tgConfirm\", \"tgAttachmentsFullService\", \"$tgQqueue\", \"$tgRepo\", \"$tgAnalytics\", \"tgActivityService\", WikiWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki/nav.coffee\n */\n\n(function() {\n var WikiNavDirective, bindOnce, groupBy, mixOf, module, taiga;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaWiki\");\n\n WikiNavDirective = function($tgrepo, $log, $location, $confirm, $analytics, $loading, $template, $compile, $translate) {\n var link, linkWikiLinks, template;\n template = $template.get(\"wiki/wiki-nav.html\", true);\n linkWikiLinks = function($scope, $el, $attrs) {\n var $ctrl, addWikiLinkPermission, drake, render;\n $ctrl = $el.controller();\n if ($attrs.ngModel == null) {\n return $log.error(\"WikiNavDirective: no ng-model attr is defined\");\n }\n addWikiLinkPermission = $scope.project.my_permissions.indexOf(\"add_wiki_link\") > -1;\n drake = null;\n render = function(wikiLinks) {\n var deleteWikiLinkPermission, html, itemEl, scroll, tdom;\n addWikiLinkPermission = $scope.project.my_permissions.indexOf(\"add_wiki_link\") > -1;\n deleteWikiLinkPermission = $scope.project.my_permissions.indexOf(\"delete_wiki_link\") > -1;\n html = template({\n wikiLinks: wikiLinks,\n projectSlug: $scope.projectSlug,\n addWikiLinkPermission: addWikiLinkPermission,\n deleteWikiLinkPermission: deleteWikiLinkPermission\n });\n html = $compile(html)($scope);\n $el.off();\n if (addWikiLinkPermission && drake) {\n drake.destroy();\n }\n $el.html(html);\n if (addWikiLinkPermission) {\n itemEl = null;\n tdom = $el.find(\".sortable\");\n drake = dragula([tdom[0]], {\n direction: 'vertical',\n copySortSource: false,\n copy: false,\n mirrorContainer: tdom[0],\n moves: function(item) {\n return $(item).is('li');\n }\n });\n drake.on('dragend', function(item) {\n var itemIndex;\n itemEl = $(item);\n item = itemEl.scope().link;\n itemIndex = itemEl.index();\n return $scope.$emit(\"wiki:links:move\", item, itemIndex);\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n }\n $el.on(\"click\", \".add-button\", function(event) {\n event.preventDefault();\n $el.find(\".new\").removeClass(\"hidden\");\n $el.find(\".new input\").focus();\n return $el.find(\".add-button\").hide();\n });\n $el.on(\"click\", \".js-delete-link\", function(event) {\n var linkId, message, target, title;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n linkId = target.parents('.wiki-link').data('id');\n title = $translate.instant(\"WIKI.DELETE_LINK_TITLE\");\n message = $scope.wikiLinks[linkId].title;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var promise;\n promise = $tgrepo.remove($scope.wikiLinks[linkId]);\n promise.then(function() {\n promise = $ctrl.loadWikiLinks();\n promise.then(function() {\n askResponse.finish();\n return render($scope.wikiLinks);\n });\n return promise.then(null, function() {\n return askResponse.finish();\n });\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n });\n return $el.on(\"keyup\", \".new input\", function(event) {\n var currentLoading, newLink, promise, target;\n event.preventDefault();\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n newLink = target.val();\n currentLoading = $loading().target($el.find(\".new\")).start();\n promise = $tgrepo.create(\"wiki-links\", {\n project: $scope.projectId,\n title: newLink\n });\n promise.then(function() {\n var loadPromise;\n $analytics.trackEvent(\"wikilink\", \"create\", \"create wiki link\", 1);\n loadPromise = $ctrl.loadWikiLinks();\n loadPromise.then(function() {\n currentLoading.finish();\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n $el.find(\".add-button\").show();\n return render($scope.wikiLinks);\n });\n return loadPromise.then(null, function() {\n currentLoading.finish();\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n $el.find(\".add-button\").show();\n return $confirm.notify(\"error\", \"Error loading wiki links\");\n });\n });\n return promise.then(null, function(error) {\n var ref;\n currentLoading.finish();\n $el.find(\".new input\").val(newLink);\n $el.find(\".new input\").focus().select();\n if ((error != null ? (ref = error.__all__) != null ? ref[0] : void 0 : void 0) != null) {\n return $confirm.notify(\"error\", \"The link already exists\");\n } else {\n return $confirm.notify(\"error\");\n }\n });\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n return $el.find(\".add-button\").show();\n }\n });\n };\n return bindOnce($scope, $attrs.ngModel, render);\n };\n link = function($scope, $el, $attrs) {\n linkWikiLinks($scope, $el, $attrs);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgWikiNav\", [\"$tgRepo\", \"$log\", \"$tgLocation\", \"$tgConfirm\", \"$tgAnalytics\", \"$tgLoading\", \"$tgTemplate\", \"$compile\", \"$translate\", WikiNavDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki/pages-list.coffee\n */\n\n(function() {\n var WikiPagesListController, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n module = angular.module(\"taigaWiki\");\n\n WikiPagesListController = (function(superClass) {\n extend(WikiPagesListController, superClass);\n\n WikiPagesListController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgModel\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgNavUrls\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function WikiPagesListController(scope, rootscope, repo, model, confirm, rs, params, q, navUrls, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.model = model;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.navUrls = navUrls;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n this.scope.projectSlug = this.params.pslug;\n this.scope.wikiSlug = this.params.slug;\n this.scope.sectionName = \"Wiki\";\n this.scope.linksVisible = false;\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n WikiPagesListController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_wiki_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n WikiPagesListController.prototype.loadWikiPages = function() {\n var promise;\n return promise = this.rs.wiki.list(this.scope.projectId).then((function(_this) {\n return function(wikipages) {\n return _this.scope.wikipages = wikipages;\n };\n })(this));\n };\n\n WikiPagesListController.prototype.loadWikiLinks = function() {\n return this.rs.wiki.listLinks(this.scope.projectId).then((function(_this) {\n return function(wikiLinks) {\n var i, len, link, ref, selectedWikiLink;\n _this.scope.wikiLinks = wikiLinks;\n ref = _this.scope.wikiLinks;\n for (i = 0, len = ref.length; i < len; i++) {\n link = ref[i];\n link.url = _this.navUrls.resolve(\"project-wiki-page\", {\n project: _this.scope.projectSlug,\n slug: link.href\n });\n }\n return selectedWikiLink = _.find(wikiLinks, {\n href: _this.scope.wikiSlug\n });\n };\n })(this));\n };\n\n WikiPagesListController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.q.all([this.loadWikiLinks(), this.loadWikiPages()]).then(this.checkLinksPerms.bind(this));\n };\n\n WikiPagesListController.prototype.checkLinksPerms = function() {\n if (this.scope.project.my_permissions.indexOf(\"add_wiki_link\") !== -1 || (this.scope.project.my_permissions.indexOf(\"view_wiki_links\") !== -1 && this.scope.wikiLinks.length)) {\n return this.scope.linksVisible = true;\n }\n };\n\n return WikiPagesListController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"WikiPagesListController\", WikiPagesListController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/lightboxes.coffee\n */\n\n(function() {\n var ChangeOwnerLightboxController, ChangeOwnerLightboxDirective, LbRequestOwnershipDirective, LightboxAddMembersWarningMessageDirective, TransferProjectStartSuccessDirective, debounce, module, taiga;\n\n taiga = this.taiga;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaKanban\");\n\n LightboxAddMembersWarningMessageDirective = function() {\n return {\n templateUrl: \"admin/memberships-warning-message.html\",\n scope: {\n project: \"=\"\n }\n };\n };\n\n module.directive(\"tgLightboxAddMembersWarningMessage\", [LightboxAddMembersWarningMessageDirective]);\n\n LbRequestOwnershipDirective = function(lightboxService, rs, confirmService, $translate) {\n return {\n link: function(scope, el) {\n lightboxService.open(el);\n return scope.request = function() {\n scope.loading = true;\n return rs.projects.transferRequest(scope.projectId).then(function() {\n scope.loading = false;\n lightboxService.close(el);\n return confirmService.notify(\"success\", $translate.instant(\"ADMIN.PROJECT_PROFILE.REQUEST_OWNERSHIP_SUCCESS\"));\n });\n };\n },\n templateUrl: \"common/lightbox/lightbox-request-ownership.html\"\n };\n };\n\n module.directive('tgLbRequestOwnership', [\"lightboxService\", \"tgResources\", \"$tgConfirm\", \"$translate\", LbRequestOwnershipDirective]);\n\n ChangeOwnerLightboxController = (function() {\n function ChangeOwnerLightboxController(rs1, lightboxService1, confirm, translate) {\n this.rs = rs1;\n this.lightboxService = lightboxService1;\n this.confirm = confirm;\n this.translate = translate;\n this.users = [];\n this.q = \"\";\n this.commentOpen = false;\n }\n\n ChangeOwnerLightboxController.prototype.limit = 3;\n\n ChangeOwnerLightboxController.prototype.normalizeString = function(normalizedString) {\n normalizedString = normalizedString.replace(\"Á\", \"A\").replace(\"Ä\", \"A\").replace(\"À\", \"A\");\n normalizedString = normalizedString.replace(\"É\", \"E\").replace(\"Ë\", \"E\").replace(\"È\", \"E\");\n normalizedString = normalizedString.replace(\"Í\", \"I\").replace(\"Ï\", \"I\").replace(\"Ì\", \"I\");\n normalizedString = normalizedString.replace(\"Ó\", \"O\").replace(\"Ö\", \"O\").replace(\"Ò\", \"O\");\n normalizedString = normalizedString.replace(\"Ú\", \"U\").replace(\"Ü\", \"U\").replace(\"Ù\", \"U\");\n return normalizedString;\n };\n\n ChangeOwnerLightboxController.prototype.filterUsers = function(user) {\n var text, username;\n username = user.full_name_display.toUpperCase();\n username = this.normalizeString(username);\n text = this.q.toUpperCase();\n text = this.normalizeString(text);\n return _.includes(username, text);\n };\n\n ChangeOwnerLightboxController.prototype.getUsers = function() {\n var users;\n if (!this.users.length && !this.q.length) {\n users = this.activeUsers;\n } else {\n users = this.users;\n }\n users = users.slice(0, this.limit);\n users = _.reject(users, {\n \"selected\": true\n });\n return _.reject(users, {\n \"id\": this.currentOwnerId\n });\n };\n\n ChangeOwnerLightboxController.prototype.userSearch = function() {\n this.users = this.activeUsers;\n this.selected = _.find(this.users, {\n \"selected\": true\n });\n if (this.q) {\n return this.users = _.filter(this.users, this.filterUsers.bind(this));\n }\n };\n\n ChangeOwnerLightboxController.prototype.selectUser = function(user) {\n this.activeUsers = _.map(this.activeUsers, function(user) {\n user.selected = false;\n return user;\n });\n user.selected = true;\n return this.userSearch();\n };\n\n ChangeOwnerLightboxController.prototype.submit = function() {\n this.loading = true;\n return this.rs.projects.transferStart(this.projectId, this.selected.id, this.comment).then((function(_this) {\n return function() {\n var desc, title;\n _this.loading = false;\n _this.lightboxService.closeAll();\n title = _this.translate.instant(\"ADMIN.PROJECT_PROFILE.CHANGE_OWNER_SUCCESS_TITLE\");\n desc = _this.translate.instant(\"ADMIN.PROJECT_PROFILE.CHANGE_OWNER_SUCCESS_DESC\");\n return _this.confirm.success(title, desc, {\n type: \"svg\",\n name: \"icon-speak-up\"\n });\n };\n })(this));\n };\n\n return ChangeOwnerLightboxController;\n\n })();\n\n ChangeOwnerLightboxController.$inject = [\"tgResources\", \"lightboxService\", \"$tgConfirm\", \"$translate\"];\n\n module.controller('ChangeOwnerLightbox', ChangeOwnerLightboxController);\n\n ChangeOwnerLightboxDirective = function(lightboxService, lightboxKeyboardNavigationService, $template, $compile) {\n var link;\n link = function(scope, el) {\n return lightboxService.open(el);\n };\n return {\n scope: true,\n controller: \"ChangeOwnerLightbox\",\n controllerAs: \"vm\",\n bindToController: {\n currentOwnerId: \"=\",\n projectId: \"=\",\n activeUsers: \"=\"\n },\n templateUrl: \"common/lightbox/lightbox-change-owner.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbChangeOwner\", [\"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", ChangeOwnerLightboxDirective]);\n\n TransferProjectStartSuccessDirective = function(lightboxService) {\n var link;\n link = function(scope, el) {\n scope.close = function() {\n return lightboxService.close(el);\n };\n return lightboxService.open(el);\n };\n return {\n templateUrl: \"common/lightbox/lightbox-transfer-project-start-success.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbTransferProjectStartSuccess\", [\"lightboxService\", TransferProjectStartSuccessDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/memberships.coffee\n */\n\n(function() {\n var MembershipsController, MembershipsDirective, MembershipsRowActionsDirective, MembershipsRowAdminCheckboxDirective, MembershipsRowAvatarDirective, MembershipsRowRoleSelectorDirective, NoMoreMembershipsExplanationDirective, bindMethods, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaAdmin\");\n\n MembershipsController = (function(superClass) {\n extend(MembershipsController, superClass);\n\n MembershipsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAnalytics\", \"tgAppMetaService\", \"$translate\", \"$tgAuth\", \"tgLightboxFactory\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function MembershipsController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, analytics, appMetaService, translate, auth, lightboxFactory1, errorHandlingService, projectService1) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.auth = auth;\n this.lightboxFactory = lightboxFactory1;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService1;\n bindMethods(this);\n this.scope.project = {};\n this.scope.filters = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.MEMBERSHIPS.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"membersform:new:success\", (function(_this) {\n return function() {\n _this.loadInitialData();\n return _this.analytics.trackEvent(\"membership\", \"create\", \"create memberships on admin\", 1);\n };\n })(this));\n }\n\n MembershipsController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.canAddUsers = project.max_memberships === null || project.max_memberships > project.total_memberships;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n MembershipsController.prototype.loadMembers = function() {\n var httpFilters;\n httpFilters = this.getUrlFilters();\n return this.rs.memberships.list(this.scope.projectId, httpFilters).then((function(_this) {\n return function(data) {\n _this.scope.memberships = _.filter(data.models, function(membership) {\n return membership.user === null || membership.is_user_active;\n });\n _.map(_this.scope.memberships, function(member) {\n if (member.is_owner) {\n return _this.scope.projectOwnerEmail = member.user_email;\n }\n });\n _this.scope.page = data.current;\n _this.scope.count = data.count;\n _this.scope.paginatedBy = data.paginatedBy;\n return data;\n };\n })(this));\n };\n\n MembershipsController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.q.all([this.loadMembers(), this.auth.refresh()]);\n };\n\n MembershipsController.prototype.getUrlFilters = function() {\n var filters;\n filters = _.pick(this.location.search(), \"page\");\n if (!filters.page) {\n filters.page = 1;\n }\n return filters;\n };\n\n MembershipsController.prototype.addNewMembers = function() {\n return this.lightboxFactory.create('tg-lb-add-members', {\n \"class\": \"lightbox lightbox-add-member\",\n \"project\": \"project\"\n }, {\n \"project\": this.scope.project\n });\n };\n\n MembershipsController.prototype.showLimitUsersWarningMessage = function() {\n var icon, message, title;\n title = this.translate.instant(\"ADMIN.MEMBERSHIPS.LIMIT_USERS_WARNING\");\n message = this.translate.instant(\"ADMIN.MEMBERSHIPS.LIMIT_USERS_WARNING_MESSAGE\", {\n members: this.scope.project.max_memberships\n });\n icon = \"/\" + window._version + \"/svg/icons/team-question.svg\";\n return this.confirm.success(title, message, {\n name: icon,\n type: \"img\"\n });\n };\n\n return MembershipsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"MembershipsController\", MembershipsController);\n\n MembershipsDirective = function($template, $compile) {\n var link, linkPagination, template;\n template = $template.get(\"admin/admin-membership-paginator.html\", true);\n linkPagination = function($scope, $el, $attrs, $ctrl) {\n var $pagEl, afterCurrent, atBegin, atEnd, beforeCurrent, getNumPages, renderPagination;\n afterCurrent = 2;\n beforeCurrent = 4;\n atBegin = 2;\n atEnd = 2;\n $pagEl = $el.find(\".memberships-paginator\");\n getNumPages = function() {\n var numPages;\n numPages = $scope.count / $scope.paginatedBy;\n if (parseInt(numPages, 10) < numPages) {\n numPages = parseInt(numPages, 10) + 1;\n } else {\n numPages = parseInt(numPages, 10);\n }\n return numPages;\n };\n renderPagination = function() {\n var cpage, html, i, j, numPages, options, pages, ref;\n numPages = getNumPages();\n if (numPages <= 1) {\n $pagEl.hide();\n return;\n }\n pages = [];\n options = {};\n options.pages = pages;\n options.showPrevious = $scope.page > 1;\n options.showNext = !($scope.page === numPages);\n cpage = $scope.page;\n for (i = j = 1, ref = numPages; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (i === (cpage + afterCurrent) && numPages > (cpage + afterCurrent + atEnd)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i === (cpage - beforeCurrent) && cpage > (atBegin + beforeCurrent)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i > (cpage + afterCurrent) && i <= (numPages - atEnd)) {\n\n } else if (i < (cpage - beforeCurrent) && i > atBegin) {\n\n } else if (i === cpage) {\n pages.push({\n classes: \"active\",\n num: i,\n type: \"page-active\"\n });\n } else {\n pages.push({\n classes: \"page\",\n num: i,\n type: \"page\"\n });\n }\n }\n html = template(options);\n html = $compile(html)($scope);\n $pagEl.html(html);\n return $pagEl.show();\n };\n $scope.$watch(\"memberships\", function(value) {\n if (!value) {\n return;\n }\n return renderPagination();\n });\n $el.on(\"click\", \".memberships-paginator a.next\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page + 1);\n return $ctrl.loadMembers();\n });\n });\n $el.on(\"click\", \".memberships-paginator a.previous\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page - 1);\n return $ctrl.loadMembers();\n });\n });\n return $el.on(\"click\", \".memberships-paginator li.page > a\", function(event) {\n var pagenum, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n pagenum = target.data(\"pagenum\");\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", pagenum);\n return $ctrl.loadMembers();\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n linkPagination($scope, $el, $attrs, $ctrl);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMemberships\", [\"$tgTemplate\", \"$compile\", MembershipsDirective]);\n\n MembershipsRowAvatarDirective = function($log, $template, $translate, $compile, avatarService) {\n var link, template;\n template = $template.get(\"admin/memberships-row-avatar.html\", true);\n link = function($scope, $el, $attrs) {\n var member, pending, render;\n pending = $translate.instant(\"ADMIN.MEMBERSHIP.STATUS_PENDING\");\n render = function(member) {\n var avatar, ctx, html;\n avatar = avatarService.getAvatar(member);\n ctx = {\n full_name: member.full_name ? member.full_name : \"\",\n email: member.user_email ? member.user_email : member.email,\n imgurl: avatar.url,\n bg: avatar.bg,\n pending: !member.is_user_active ? pending : \"\",\n isOwner: member.is_owner\n };\n html = template(ctx);\n html = $compile(html)($scope);\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowAvatar == null) {\n return $log.error(\"MembershipsRowAvatarDirective: the directive need a member\");\n }\n member = $scope.$eval($attrs.tgMembershipsRowAvatar);\n render(member);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowAvatar\", [\"$log\", \"$tgTemplate\", '$translate', \"$compile\", \"tgAvatarService\", MembershipsRowAvatarDirective]);\n\n MembershipsRowAdminCheckboxDirective = function($log, $repo, $confirm, $template, $compile) {\n var link, template;\n template = $template.get(\"admin/admin-memberships-row-checkbox.html\", true);\n link = function($scope, $el, $attrs) {\n var html, member, render;\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n if ($attrs.tgMembershipsRowAdminCheckbox == null) {\n return $log.error(\"MembershipsRowAdminCheckboxDirective: the directive need a member\");\n }\n member = $scope.$eval($attrs.tgMembershipsRowAdminCheckbox);\n if (member.is_owner) {\n $el.find(\".js-check\").remove();\n return;\n }\n render = function(member) {\n var ctx, html;\n ctx = {\n inputId: \"is-admin-\" + member.id\n };\n html = template(ctx);\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $el.on(\"click\", \":checkbox\", (function(_this) {\n return function(event) {\n var onError, onSuccess, target;\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function(data) {\n member.revert();\n $el.find(\":checkbox\").prop(\"checked\", member.is_admin);\n return $confirm.notify(\"error\", data.is_admin[0]);\n };\n target = angular.element(event.currentTarget);\n member.is_admin = target.prop(\"checked\");\n return $repo.save(member).then(onSuccess, onError);\n };\n })(this));\n html = render(member);\n if (member.is_admin) {\n return $el.find(\":checkbox\").prop(\"checked\", true);\n }\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowAdminCheckbox\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgTemplate\", \"$compile\", MembershipsRowAdminCheckboxDirective]);\n\n MembershipsRowRoleSelectorDirective = function($log, $repo, $confirm) {\n var link, template;\n template = _.template(\"\");\n link = function($scope, $el, $attrs) {\n var $ctrl, html, member, render;\n render = function(member) {\n var ctx, html;\n ctx = {\n roleList: $scope.project.roles,\n selectedRole: member.role\n };\n html = template(ctx);\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowRoleSelector == null) {\n return $log.error(\"MembershipsRowRoleSelectorDirective: the directive need a member\");\n }\n $ctrl = $el.controller();\n member = $scope.$eval($attrs.tgMembershipsRowRoleSelector);\n html = render(member);\n $el.on(\"change\", \"select\", (function(_this) {\n return function(event) {\n var newRole, onError, onSuccess, target;\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n target = angular.element(event.currentTarget);\n newRole = parseInt(target.val(), 10);\n if (member.role !== newRole) {\n member.role = newRole;\n return $repo.save(member).then(onSuccess, onError);\n }\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowRoleSelector\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", MembershipsRowRoleSelectorDirective]);\n\n MembershipsRowActionsDirective = function($log, $repo, $rs, $confirm, $compile, $translate, $location, $navUrls, lightboxFactory, projectService) {\n var activedTemplate, link, pendingTemplate;\n activedTemplate = \"
    \\n
    \\n\\n \\n\";\n pendingTemplate = \"\\n\\n\\n \\n\";\n link = function($scope, $el, $attrs) {\n var $ctrl, leaveConfirm, member, render;\n render = function(member) {\n var html;\n if (member.user) {\n html = $compile(activedTemplate)($scope);\n } else {\n html = $compile(pendingTemplate)($scope);\n }\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowActions == null) {\n return $log.error(\"MembershipsRowActionsDirective: the directive need a member\");\n }\n $ctrl = $el.controller();\n member = $scope.$eval($attrs.tgMembershipsRowActions);\n render(member);\n $el.on(\"click\", \".js-resend\", function(event) {\n var onError, onSuccess;\n event.preventDefault();\n onSuccess = function() {\n var text;\n text = $translate.instant(\"ADMIN.MEMBERSHIP.SUCCESS_SEND_INVITATION\", {\n email: $scope.member.email\n });\n return $confirm.notify(\"success\", text);\n };\n onError = function() {\n var text;\n text = $translate.instant(\"ADMIM.MEMBERSHIP.ERROR_SEND_INVITATION\");\n return $confirm.notify(\"error\", text);\n };\n return $rs.memberships.resendInvitation($scope.member.id).then(onSuccess, onError);\n });\n leaveConfirm = function() {\n var defaultMsg, message, title;\n title = $translate.instant(\"ADMIN.MEMBERSHIP.DELETE_MEMBER\");\n defaultMsg = $translate.instant(\"ADMIN.MEMBERSHIP.DEFAULT_DELETE_MESSAGE\", {\n email: member.email\n });\n message = member.user ? member.full_name : defaultMsg;\n return $confirm.askOnDelete(title, message).then(function(askResponse) {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n var text;\n askResponse.finish();\n if (member.user !== $scope.user.id) {\n if ($scope.page > 1 && ($scope.count - 1) <= $scope.paginatedBy) {\n $ctrl.selectFilter(\"page\", $scope.page - 1);\n }\n projectService.fetchProject().then(function() {\n return $ctrl.loadInitialData();\n });\n } else {\n $location.path($navUrls.resolve(\"home\"));\n }\n text = $translate.instant(\"ADMIN.MEMBERSHIP.SUCCESS_DELETE\", {\n message: message\n });\n return $confirm.notify(\"success\", text, null, 5000);\n };\n })(this);\n onError = (function(_this) {\n return function() {\n var text;\n askResponse.finish(false);\n text = $translate.instant(\"ADMIN.MEMBERSHIP.ERROR_DELETE\", {\n message: message\n });\n return $confirm.notify(\"error\", text);\n };\n })(this);\n return $repo.remove(member).then(onSuccess, onError);\n });\n };\n $el.on(\"click\", \".delete\", function(event) {\n var isCurrentUser;\n event.preventDefault();\n if ($scope.project.owner.id === member.user) {\n isCurrentUser = $scope.user.id === member.user;\n return lightboxFactory.create(\"tg-lightbox-leave-project-warning\", {\n \"class\": \"lightbox lightbox-leave-project-warning\"\n }, {\n isCurrentUser: isCurrentUser,\n project: $scope.project\n });\n } else {\n return leaveConfirm();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowActions\", [\"$log\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$compile\", \"$translate\", \"$tgLocation\", \"$tgNavUrls\", \"tgLightboxFactory\", \"tgProjectService\", MembershipsRowActionsDirective]);\n\n NoMoreMembershipsExplanationDirective = function() {\n return {\n templateUrl: \"admin/no-more-memberships-explanation.html\",\n scope: {\n project: \"=\",\n ownerEmail: \"=\"\n }\n };\n };\n\n module.directive(\"tgNoMoreMembershipsExplanation\", [NoMoreMembershipsExplanationDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/nav.coffee\n */\n\n(function() {\n var AdminNavigationDirective, module;\n\n AdminNavigationDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var section;\n section = $attrs.tgAdminNavigation;\n $el.find(\".active\").removeClass(\"active\");\n $el.find(\"#adminmenu-\" + section + \" a\").addClass(\"active\");\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaAdmin\");\n\n module.directive(\"tgAdminNavigation\", AdminNavigationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/project-profile.coffee\n */\n\n(function() {\n var AdminProjectChangeOwnerDirective, AdminProjectRequestOwnershipDirective, AdminProjectRestrictionsDirective, CsvEpicDirective, CsvExporterController, CsvExporterEpicsController, CsvExporterIssuesController, CsvExporterTasksController, CsvExporterUserstoriesController, CsvIssueDirective, CsvTaskDirective, CsvUsDirective, ProjectDefaultValuesDirective, ProjectExportDirective, ProjectLogoDirective, ProjectLogoModelDirective, ProjectModulesDirective, ProjectProfileController, ProjectProfileDirective, bindOnce, debounce, groupBy, joinStr, mixOf, module, scopeDefer, taiga, toString, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n scopeDefer = this.taiga.scopeDefer;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaAdmin\");\n\n ProjectProfileController = (function(superClass) {\n extend(ProjectProfileController, superClass);\n\n ProjectProfileController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"$translate\", \"$tgAuth\", \"tgCurrentUserService\", \"tgErrorHandlingService\", \"tgProjectService\", \"$tgModel\"];\n\n function ProjectProfileController(scope1, rootscope, repo, confirm, rs, params, q, location, navUrls, appMetaService, translate, tgAuth, currentUserService1, errorHandlingService, projectService1, model1) {\n var promise;\n this.scope = scope1;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.tgAuth = tgAuth;\n this.currentUserService = currentUserService1;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService1;\n this.model = model1;\n this.scope.project = {};\n this.scope.projectTags = [];\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, sectionName, title;\n sectionName = _this.translate.instant(_this.scope.sectionName);\n title = _this.translate.instant(\"ADMIN.PROJECT_PROFILE.PAGE_TITLE\", {\n sectionName: sectionName,\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n _this.appMetaService.setAll(title, description);\n return _this.fillUsersAndRoles(_this.scope.project.members, _this.scope.project.roles);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:loaded\", (function(_this) {\n return function() {\n var description, sectionName, title;\n sectionName = _this.translate.instant(_this.scope.sectionName);\n title = _this.translate.instant(\"ADMIN.PROJECT_PROFILE.PAGE_TITLE\", {\n sectionName: sectionName,\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n }\n\n ProjectProfileController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n project = this.model.make_model(\"projects\", project);\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.epicStatusList = _.sortBy(project.epic_statuses, \"order\");\n this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n this.scope.pointsList = _.sortBy(project.points, \"order\");\n this.scope.taskStatusList = _.sortBy(project.task_statuses, \"order\");\n this.scope.issueTypesList = _.sortBy(project.issue_types, \"order\");\n this.scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\");\n this.scope.prioritiesList = _.sortBy(project.priorities, \"order\");\n this.scope.severitiesList = _.sortBy(project.severities, \"order\");\n scopeDefer(this.scope, (function(_this) {\n return function() {\n return _this.scope.$emit('project:loaded', project);\n };\n })(this));\n this.scope.projectTags = _.map(this.scope.project.tags, (function(_this) {\n return function(it) {\n return [it, _this.scope.project.tags_colors[it]];\n };\n })(this));\n return project;\n };\n\n ProjectProfileController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.tgAuth.refresh();\n };\n\n ProjectProfileController.prototype.openDeleteLightbox = function() {\n return this.rootscope.$broadcast(\"deletelightbox:new\", this.scope.project);\n };\n\n ProjectProfileController.prototype.addTag = function(name, color) {\n var tags;\n tags = _.clone(this.scope.project.tags);\n tags.push(name);\n this.scope.projectTags.push([name, null]);\n return this.scope.project.tags = tags;\n };\n\n ProjectProfileController.prototype.deleteTag = function(tag) {\n var tags;\n tags = _.clone(this.scope.project.tags);\n _.pull(tags, tag[0]);\n _.remove(this.scope.projectTags, (function(_this) {\n return function(it) {\n return it[0] === tag[0];\n };\n })(this));\n return this.scope.project.tags = tags;\n };\n\n return ProjectProfileController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"ProjectProfileController\", ProjectProfileController);\n\n ProjectProfileDirective = function($repo, $confirm, $loading, $navurls, $location, projectService, currentUserService, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, form, submit, submitButton;\n $ctrl = $el.controller();\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, privacyChanged, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n privacyChanged = $scope.project.isAttributeModified(\"is_private\");\n promise = $repo.save($scope.project);\n promise.then(function() {\n var newUrl;\n currentLoading.finish();\n if (privacyChanged && $scope.project.is_private) {\n $analytics.trackEvent(\"project-privacy-changed\", \"from-public-to-private\", \"Change project privacy from public to private\", 1);\n } else if (privacyChanged && !$scope.project.is_private) {\n $analytics.trackEvent(\"project-privacy-changed\", \"from-private-to-public\", \"Change project privacy from private to public\", 1);\n }\n $confirm.notify(\"success\");\n newUrl = $navurls.resolve(\"project-admin-project-profile-details\", {\n project: $scope.project.slug\n });\n $location.path(newUrl);\n projectService.fetchProject().then((function(_this) {\n return function() {\n return $ctrl.loadInitialData();\n };\n })(this));\n return currentUserService.loadProjects();\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n return $el.on(\"submit\", \"form\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectProfile\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgNavUrls\", \"$tgLocation\", \"tgProjectService\", \"tgCurrentUserService\", \"$tgAnalytics\", ProjectProfileDirective]);\n\n ProjectDefaultValuesDirective = function($rootScope, $repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.save($scope.project);\n promise.then(function() {\n currentLoading.finish();\n $confirm.notify(\"success\");\n return $rootScope.$broadcast(\"admin:project-default-values:updated\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectDefaultValues\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", ProjectDefaultValuesDirective]);\n\n ProjectModulesDirective = function($rootScope, $repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit;\n submit = (function(_this) {\n return function() {\n var form, promise;\n form = $el.find(\"form\").checksley();\n form.initializeFields();\n form.reset();\n if (!form.validate()) {\n return;\n }\n promise = $repo.save($scope.project);\n promise.then(function() {\n $scope.$emit(\"project:loaded\", $scope.project);\n $rootScope.$broadcast(\"admin:project-modules:updated\");\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function(data) {\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this);\n $el.on(\"change\", \".module-activation.module-direct-active input\", function(event) {\n event.preventDefault();\n return $scope.$applyAsync(submit);\n });\n $el.on(\"submit\", \"form\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"click\", \".save\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"keydown\", \".videoconference-attributes input\", function(e) {\n return e.which !== 32;\n });\n $scope.$watch(\"project.videoconferences\", function(newVal, oldVal) {\n if ((newVal != null) && (oldVal != null) && newVal !== oldVal) {\n return $scope.project.videoconferences_extra_data = \"\";\n }\n });\n $scope.$watch(\"isVideoconferenceActivated\", function(newValue, oldValue) {\n if (newValue === false) {\n $scope.project.videoconferences = null;\n $scope.project.videoconferences_extra_data = \"\";\n if (oldValue === true) {\n return submit();\n }\n }\n });\n return $scope.$watch(\"project\", function(project) {\n if (project.videoconferences != null) {\n return $scope.isVideoconferenceActivated = true;\n } else {\n return $scope.isVideoconferenceActivated = false;\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectModules\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", ProjectModulesDirective]);\n\n ProjectExportDirective = function($window, $rs, $confirm, $translate, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var asyn_message, buttonsEl, dump_ready_text, hideButtons, hideResult, hideSpinner, loading_msg, loading_title, resultEl, resultMessageEl, resultTitleEl, setAsyncMessage, setAsyncTitle, setLoadingMessage, setLoadingTitle, setSyncMessage, setSyncTitle, showButtons, showErrorMode, showExportResultAsyncMode, showExportResultSyncMode, showLoadingMode, showResult, showSpinner, spinnerEl, syn_message;\n buttonsEl = $el.find(\".admin-project-export-buttons\");\n showButtons = function() {\n return buttonsEl.removeClass(\"hidden\");\n };\n hideButtons = function() {\n return buttonsEl.addClass(\"hidden\");\n };\n resultEl = $el.find(\".admin-project-export-result\");\n showResult = function() {\n return resultEl.removeClass(\"hidden\");\n };\n hideResult = function() {\n return resultEl.addClass(\"hidden\");\n };\n spinnerEl = $el.find(\".spin\");\n showSpinner = function() {\n return spinnerEl.removeClass(\"hidden\");\n };\n hideSpinner = function() {\n return spinnerEl.addClass(\"hidden\");\n };\n resultTitleEl = $el.find(\".result-title\");\n loading_title = $translate.instant(\"ADMIN.PROJECT_EXPORT.LOADING_TITLE\");\n loading_msg = $translate.instant(\"ADMIN.PROJECT_EXPORT.LOADING_MESSAGE\");\n dump_ready_text = function() {\n return resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.DUMP_READY\"));\n };\n asyn_message = function() {\n return resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.ASYNC_MESSAGE\"));\n };\n syn_message = function(url) {\n return resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.SYNC_MESSAGE\", {\n url: url\n }));\n };\n setLoadingTitle = function() {\n return resultTitleEl.html(loading_title);\n };\n setAsyncTitle = function() {\n return resultTitleEl.html(loading_msg);\n };\n setSyncTitle = function() {\n return resultTitleEl.html(dump_ready_text);\n };\n resultMessageEl = $el.find(\".result-message \");\n setLoadingMessage = function() {\n return resultMessageEl.html(loading_msg);\n };\n setAsyncMessage = function() {\n return resultMessageEl.html(asyn_message);\n };\n setSyncMessage = function(url) {\n return resultMessageEl.html(syn_message(url));\n };\n showLoadingMode = function() {\n showSpinner();\n setLoadingTitle();\n setLoadingMessage();\n hideButtons();\n return showResult();\n };\n showExportResultAsyncMode = function() {\n hideSpinner();\n setAsyncTitle();\n return setAsyncMessage();\n };\n showExportResultSyncMode = function(url) {\n hideSpinner();\n setSyncTitle();\n return setSyncMessage(url);\n };\n showErrorMode = function() {\n hideSpinner();\n hideResult();\n return showButtons();\n };\n return $el.on(\"click\", \"a.button-export\", debounce(2000, (function(_this) {\n return function(event) {\n var onError, onSuccess;\n event.preventDefault();\n onSuccess = function(result) {\n var dumpUrl;\n $analytics.trackEvent(\"exporter\", \"export-project\", \"Exported project\", 1);\n if (result.status === 202) {\n return showExportResultAsyncMode();\n } else {\n dumpUrl = result.data.url;\n showExportResultSyncMode(dumpUrl);\n return $window.open(dumpUrl, \"_blank\");\n }\n };\n onError = function(result) {\n var errorMsg, ref;\n showErrorMode();\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR\");\n if (result.status === 429) {\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR_BUSY\");\n } else if ((ref = result.data) != null ? ref._error_message : void 0) {\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR_BUSY\", {\n message: result.data._error_message\n });\n }\n return $confirm.notify(\"error\", errorMsg);\n };\n showLoadingMode();\n return $rs.projects[\"export\"]($scope.projectId).then(onSuccess, onError);\n };\n })(this)));\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectExport\", [\"$window\", \"$tgResources\", \"$tgConfirm\", \"$translate\", \"$tgAnalytics\", ProjectExportDirective]);\n\n CsvExporterController = (function(superClass) {\n extend(CsvExporterController, superClass);\n\n CsvExporterController.$inject = [\"$scope\", \"$rootScope\", \"$tgUrls\", \"$tgConfirm\", \"$tgResources\", \"$translate\"];\n\n function CsvExporterController(scope1, rootscope, urls, confirm, rs, translate) {\n this.scope = scope1;\n this.rootscope = rootscope;\n this.urls = urls;\n this.confirm = confirm;\n this.rs = rs;\n this.translate = translate;\n this._deleteUuid = bind(this._deleteUuid, this);\n this._generateUuid = bind(this._generateUuid, this);\n this.setCsvUuid = bind(this.setCsvUuid, this);\n this.rootscope.$on(\"project:loaded\", this.setCsvUuid);\n this.scope.$watch(\"csvUuid\", (function(_this) {\n return function(value) {\n if (value) {\n return _this.scope.csvUrl = _this.urls.resolveAbsolute(_this.type + \"-csv\", value);\n } else {\n return _this.scope.csvUrl = \"\";\n }\n };\n })(this));\n }\n\n CsvExporterController.prototype.setCsvUuid = function() {\n return this.scope.csvUuid = this.scope.project[this.type + \"_csv_uuid\"];\n };\n\n CsvExporterController.prototype._generateUuid = function(response) {\n var promise;\n if (response == null) {\n response = null;\n }\n promise = this.rs.projects[\"regenerate_\" + this.type + \"_csv_uuid\"](this.scope.projectId);\n promise.then((function(_this) {\n return function(data) {\n var ref;\n return _this.scope.csvUuid = (ref = data.data) != null ? ref.uuid : void 0;\n };\n })(this));\n promise.then(null, (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n promise[\"finally\"](function() {\n if (response) {\n return response.finish();\n }\n });\n return promise;\n };\n\n CsvExporterController.prototype._deleteUuid = function(response) {\n var promise;\n if (response == null) {\n response = null;\n }\n promise = this.rs.projects[\"delete_\" + this.type + \"_csv_uuid\"](this.scope.projectId);\n promise.then((function(_this) {\n return function(data) {\n var ref;\n return _this.scope.csvUuid = (ref = data.data) != null ? ref.uuid : void 0;\n };\n })(this));\n promise.then(null, (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n promise[\"finally\"](function() {\n if (response) {\n return response.finish();\n }\n });\n return promise;\n };\n\n CsvExporterController.prototype.regenerateUuid = function() {\n var subtitle, title;\n if (this.scope.csvUuid) {\n title = this.translate.instant(\"ADMIN.REPORTS.REGENERATE_TITLE\");\n subtitle = this.translate.instant(\"ADMIN.REPORTS.REGENERATE_SUBTITLE\");\n return this.confirm.ask(title, subtitle).then(this._generateUuid);\n } else {\n return this._generateUuid();\n }\n };\n\n CsvExporterController.prototype.deleteUuid = function() {\n var subtitle, title;\n if (this.scope.csvUuid) {\n title = this.translate.instant(\"ADMIN.REPORTS.DELETE_TITLE\");\n subtitle = this.translate.instant(\"ADMIN.REPORTS.DELETE_SUBTITLE\");\n return this.confirm.ask(title, subtitle).then(this._deleteUuid);\n } else {\n return this._deleteUuid();\n }\n };\n\n return CsvExporterController;\n\n })(taiga.Controller);\n\n CsvExporterEpicsController = (function(superClass) {\n extend(CsvExporterEpicsController, superClass);\n\n function CsvExporterEpicsController() {\n return CsvExporterEpicsController.__super__.constructor.apply(this, arguments);\n }\n\n CsvExporterEpicsController.prototype.type = \"epics\";\n\n return CsvExporterEpicsController;\n\n })(CsvExporterController);\n\n CsvExporterUserstoriesController = (function(superClass) {\n extend(CsvExporterUserstoriesController, superClass);\n\n function CsvExporterUserstoriesController() {\n return CsvExporterUserstoriesController.__super__.constructor.apply(this, arguments);\n }\n\n CsvExporterUserstoriesController.prototype.type = \"userstories\";\n\n return CsvExporterUserstoriesController;\n\n })(CsvExporterController);\n\n CsvExporterTasksController = (function(superClass) {\n extend(CsvExporterTasksController, superClass);\n\n function CsvExporterTasksController() {\n return CsvExporterTasksController.__super__.constructor.apply(this, arguments);\n }\n\n CsvExporterTasksController.prototype.type = \"tasks\";\n\n return CsvExporterTasksController;\n\n })(CsvExporterController);\n\n CsvExporterIssuesController = (function(superClass) {\n extend(CsvExporterIssuesController, superClass);\n\n function CsvExporterIssuesController() {\n return CsvExporterIssuesController.__super__.constructor.apply(this, arguments);\n }\n\n CsvExporterIssuesController.prototype.type = \"issues\";\n\n return CsvExporterIssuesController;\n\n })(CsvExporterController);\n\n module.controller(\"CsvExporterEpicsController\", CsvExporterEpicsController);\n\n module.controller(\"CsvExporterUserstoriesController\", CsvExporterUserstoriesController);\n\n module.controller(\"CsvExporterTasksController\", CsvExporterTasksController);\n\n module.controller(\"CsvExporterIssuesController\", CsvExporterIssuesController);\n\n CsvEpicDirective = function($translate) {\n var link;\n link = function($scope) {\n return $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_EPIC\";\n };\n return {\n controller: \"CsvExporterEpicsController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgCsvEpic\", [\"$translate\", CsvEpicDirective]);\n\n CsvUsDirective = function($translate) {\n var link;\n link = function($scope) {\n return $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_US\";\n };\n return {\n controller: \"CsvExporterUserstoriesController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgCsvUs\", [\"$translate\", CsvUsDirective]);\n\n CsvTaskDirective = function($translate) {\n var link;\n link = function($scope) {\n return $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_TASK\";\n };\n return {\n controller: \"CsvExporterTasksController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgCsvTask\", [\"$translate\", CsvTaskDirective]);\n\n CsvIssueDirective = function($translate) {\n var link;\n link = function($scope) {\n return $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_ISSUE\";\n };\n return {\n controller: \"CsvExporterIssuesController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgCsvIssue\", [\"$translate\", CsvIssueDirective]);\n\n ProjectLogoDirective = function($auth, $model, $rs, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n var onError, onSuccess, showSizeInfo;\n showSizeInfo = function() {\n return $el.find(\".size-info\").addClass(\"active\");\n };\n onSuccess = function(response) {\n var project;\n project = $model.make_model(\"projects\", response.data);\n $scope.project = project;\n $el.find('.loading-overlay').removeClass('active');\n return $confirm.notify('success');\n };\n onError = function(response) {\n if (response.status === 413) {\n showSizeInfo();\n }\n $el.find('.loading-overlay').removeClass('active');\n return $confirm.notify('error', response.data._error_message);\n };\n $el.on(\"click\", \".js-change-logo\", function() {\n return $el.find(\"#logo-field\").click();\n });\n $el.on(\"change\", \"#logo-field\", function(event) {\n if ($scope.logoAttachment) {\n $el.find('.loading-overlay').addClass(\"active\");\n return $rs.projects.changeLogo($scope.project.id, $scope.logoAttachment).then(onSuccess, onError);\n }\n });\n $el.on(\"click\", \"a.js-use-default-logo\", function(event) {\n $el.find('.loading-overlay').addClass(\"active\");\n return $rs.projects.removeLogo($scope.project.id).then(onSuccess, onError);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectLogo\", [\"$tgAuth\", \"$tgModel\", \"$tgResources\", \"$tgConfirm\", ProjectLogoDirective]);\n\n ProjectLogoModelDirective = function($parse) {\n var link;\n link = function($scope, $el, $attrs) {\n var model, modelSetter;\n model = $parse($attrs.tgProjectLogoModel);\n modelSetter = model.assign;\n return $el.bind('change', function() {\n return $scope.$apply(function() {\n return modelSetter($scope, $el[0].files[0]);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive('tgProjectLogoModel', ['$parse', ProjectLogoModelDirective]);\n\n AdminProjectRestrictionsDirective = function() {\n return {\n scope: {\n \"project\": \"=\"\n },\n templateUrl: \"admin/admin-project-restrictions.html\"\n };\n };\n\n module.directive('tgAdminProjectRestrictions', [AdminProjectRestrictionsDirective]);\n\n AdminProjectRequestOwnershipDirective = function(lightboxFactory) {\n return {\n link: function(scope) {\n return scope.requestOwnership = function() {\n return lightboxFactory.create(\"tg-lb-request-ownership\", {\n \"class\": \"lightbox lightbox-request-ownership\"\n }, {\n projectId: scope.projectId\n });\n };\n },\n scope: {\n \"projectId\": \"=\",\n \"owner\": \"=\"\n },\n templateUrl: \"admin/admin-project-request-ownership.html\"\n };\n };\n\n module.directive('tgAdminProjectRequestOwnership', [\"tgLightboxFactory\", AdminProjectRequestOwnershipDirective]);\n\n AdminProjectChangeOwnerDirective = function(lightboxFactory) {\n return {\n link: function(scope) {\n return scope.changeOwner = function() {\n return lightboxFactory.create(\"tg-lb-change-owner\", {\n \"class\": \"lightbox lightbox-select-user\",\n \"project-id\": \"projectId\",\n \"active-users\": \"activeUsers\",\n \"current-owner-id\": \"currentOwnerId\"\n }, {\n projectId: scope.projectId,\n activeUsers: scope.activeUsers,\n currentOwnerId: scope.owner.id,\n members: scope.members\n });\n };\n },\n scope: {\n \"activeUsers\": \"=\",\n \"projectId\": \"=\",\n \"owner\": \"=\",\n \"members\": \"=\"\n },\n templateUrl: \"admin/admin-project-change-owner.html\"\n };\n };\n\n module.directive('tgAdminProjectChangeOwner', [\"tgLightboxFactory\", AdminProjectChangeOwnerDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/project-values.coffee\n */\n\n(function() {\n var CHECKBOX_TYPE, ColorSelectionDirective, DATE_TYPE, DROPDOWN_TYPE, MULTILINE_TYPE, NUMBER_TYPE, ProjectCustomAttributesController, ProjectCustomAttributesDirective, ProjectDueDatesValues, ProjectDueDatesValuesController, ProjectTagsController, ProjectTagsDirective, ProjectValuesController, ProjectValuesDirective, ProjectValuesSectionController, RICHTEXT_TYPE, TEXT_TYPE, TYPE_CHOICES, URL_TYPE, bindOnce, debounce, getDefaulColorList, groupBy, joinStr, mixOf, module, taiga, toString, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n getDefaulColorList = this.taiga.getDefaulColorList;\n\n module = angular.module(\"taigaAdmin\");\n\n ProjectValuesSectionController = (function(superClass) {\n extend(ProjectValuesSectionController, superClass);\n\n ProjectValuesSectionController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function ProjectValuesSectionController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, appMetaService, translate, errorHandlingService, projectService1) {\n var description, sectionName, title;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService1;\n this.scope.project = {};\n this.loadInitialData();\n sectionName = this.translate.instant(this.scope.sectionName);\n title = this.translate.instant(\"ADMIN.PROJECT_VALUES.PAGE_TITLE\", {\n \"sectionName\": sectionName,\n \"projectName\": this.scope.project.name\n });\n description = this.scope.project.description;\n this.appMetaService.setAll(title, description);\n }\n\n ProjectValuesSectionController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n ProjectValuesSectionController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise;\n };\n\n return ProjectValuesSectionController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"ProjectValuesSectionController\", ProjectValuesSectionController);\n\n ProjectValuesController = (function(superClass) {\n extend(ProjectValuesController, superClass);\n\n ProjectValuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\"];\n\n function ProjectValuesController(scope, rootscope, repo, confirm, rs) {\n var unwatch;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.moveValue = bind(this.moveValue, this);\n this.loadValues = bind(this.loadValues, this);\n this.scope.$on(\"admin:project-values:move\", this.moveValue);\n unwatch = this.scope.$watch(\"resource\", (function(_this) {\n return function(resource) {\n if (resource) {\n _this.loadValues();\n return unwatch();\n }\n };\n })(this));\n }\n\n ProjectValuesController.prototype.loadValues = function() {\n return this.rs[this.scope.resource].listValues(this.scope.projectId, this.scope.type).then((function(_this) {\n return function(values) {\n if (values.length) {\n _this.scope.values = values;\n _this.scope.maxValueOrder = _.maxBy(values, \"order\").order;\n }\n return values;\n };\n })(this));\n };\n\n ProjectValuesController.prototype.moveValue = function(ctx, itemValue, itemIndex) {\n var r, values;\n values = this.scope.values;\n r = values.indexOf(itemValue);\n values.splice(r, 1);\n values.splice(itemIndex, 0, itemValue);\n _.each(values, function(value, index) {\n return value.order = index;\n });\n return this.repo.saveAll(values).then((function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"admin:project-values:updated\");\n };\n })(this));\n };\n\n return ProjectValuesController;\n\n })(taiga.Controller);\n\n module.controller(\"ProjectValuesController\", ProjectValuesController);\n\n ProjectDueDatesValuesController = (function(superClass) {\n extend(ProjectDueDatesValuesController, superClass);\n\n function ProjectDueDatesValuesController() {\n this.displayValues = bind(this.displayValues, this);\n this.createDefaultValues = bind(this.createDefaultValues, this);\n this.loadValues = bind(this.loadValues, this);\n return ProjectDueDatesValuesController.__super__.constructor.apply(this, arguments);\n }\n\n ProjectDueDatesValuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\"];\n\n ProjectDueDatesValuesController.prototype.loadValues = function() {\n return this.rs[this.scope.resource].listValues(this.scope.projectId, this.scope.type).then((function(_this) {\n return function(values) {\n if (values.length) {\n _this.scope.maxValueOrder = _.maxBy(values, \"order\").order;\n _this.displayValues(values);\n } else {\n _this.createDefaultValues();\n }\n return values;\n };\n })(this));\n };\n\n ProjectDueDatesValuesController.prototype.createDefaultValues = function() {\n if (this.rs[this.scope.resource].createDefaultValues == null) {\n return;\n }\n return this.rs[this.scope.resource].createDefaultValues(this.scope.projectId, this.scope.type).then((function(_this) {\n return function(response) {\n var values;\n _this.rootscope.$broadcast(\"admin:project-values:updated\");\n values = response.data;\n if (values.length) {\n _this.scope.maxValueOrder = _.maxBy(values, \"order\").order;\n _this.displayValues(values);\n }\n return values;\n };\n })(this));\n };\n\n ProjectDueDatesValuesController.prototype.displayValues = function(values) {\n _.each(values, function(value, index) {\n value.days_to_due_abs = value.days_to_due !== null ? Math.abs(value.days_to_due) : null;\n return value.sign = value.days_to_due >= 0 ? 1 : -1;\n });\n return this.scope.values = values;\n };\n\n return ProjectDueDatesValuesController;\n\n })(ProjectValuesController);\n\n module.controller(\"ProjectDueDatesValuesController\", ProjectDueDatesValuesController);\n\n ProjectValuesDirective = function($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope, projectService) {\n var link, linkDragAndDrop, linkValue;\n linkDragAndDrop = function($scope, $el, $attrs) {\n var drake, itemEl, newParentScope, oldParentScope, scroll, tdom;\n oldParentScope = null;\n newParentScope = null;\n itemEl = null;\n tdom = $el.find(\".sortable\");\n drake = dragula([tdom[0]], {\n direction: 'vertical',\n copySortSource: false,\n copy: false,\n mirrorContainer: tdom[0],\n moves: function(item) {\n return $(item).is('div[tg-bind-scope]');\n }\n });\n drake.on('dragend', function(item) {\n var itemIndex, itemValue;\n itemEl = $(item);\n itemValue = itemEl.scope().value;\n itemIndex = itemEl.index();\n return $scope.$broadcast(\"admin:project-values:move\", itemValue, itemIndex);\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return drake.destroy();\n });\n };\n linkValue = function($scope, $el, $attrs) {\n var $ctrl, cancel, goToBottomList, initializeNewValue, initializeTextTranslations, objName, saveNewValue, saveValue, valueType;\n $ctrl = $el.controller();\n valueType = $attrs.type;\n objName = $attrs.objname;\n initializeNewValue = function() {\n return $scope.newValue = {\n \"name\": \"\",\n \"is_closed\": false,\n \"is_archived\": false\n };\n };\n initializeTextTranslations = function() {\n return $scope.addNewElementText = $translate.instant(\"ADMIN.PROJECT_VALUES_\" + (objName.toUpperCase()) + \".ACTION_ADD\");\n };\n initializeNewValue();\n initializeTextTranslations();\n $rootscope.$on(\"$translateChangeEnd\", function() {\n return $scope.$evalAsync(initializeTextTranslations);\n });\n goToBottomList = (function(_this) {\n return function(focus) {\n var table;\n if (focus == null) {\n focus = false;\n }\n table = $el.find(\".table-main\");\n $(document.body).scrollTop(table.offset().top + table.height());\n if (focus) {\n return $el.find(\".new-value input:visible\").first().focus();\n }\n };\n })(this);\n saveValue = function(target) {\n var form, formEl, promise, value;\n formEl = target.parents(\"form\");\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n value = formEl.scope().value;\n promise = $repo.save(value);\n promise.then(function() {\n var row;\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n row.siblings(\".visualization\").removeClass('hidden');\n $rootscope.$broadcast(\"admin:project-values:updated\");\n return projectService.fetchProject();\n });\n return promise.then(null, function(data) {\n return form.setErrors(data);\n });\n };\n saveNewValue = function(target) {\n var form, formEl, promise;\n formEl = target.parents(\"form\");\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n $scope.newValue.project = $scope.project.id;\n $scope.newValue.order = $scope.maxValueOrder ? $scope.maxValueOrder + 1 : 1;\n promise = $repo.create(valueType, $scope.newValue);\n promise.then(function(data) {\n target.addClass(\"hidden\");\n $scope.values.push(data);\n $scope.maxValueOrder = data.order;\n initializeNewValue();\n return $rootscope.$broadcast(\"admin:project-values:updated\");\n });\n return promise.then(null, function(data) {\n return form.setErrors(data);\n });\n };\n cancel = function(target) {\n var formEl, row, value;\n row = target.parents(\".row.table-main\");\n formEl = target.parents(\"form\");\n value = formEl.scope().value;\n return $scope.$apply(function() {\n row.addClass(\"hidden\");\n value.revert();\n return row.siblings(\".visualization\").removeClass('hidden');\n });\n };\n $el.on(\"click\", \".show-add-new\", function(event) {\n event.preventDefault();\n $el.find(\".new-value\").removeClass('hidden');\n return goToBottomList(true);\n });\n $el.on(\"click\", \".add-new\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n }));\n $el.on(\"click\", \".delete-new\", function(event) {\n event.preventDefault();\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n });\n $el.on(\"click\", \".edit-value\", function(event) {\n var editionRow, row, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n editionRow = row.siblings(\".edition\");\n editionRow.removeClass('hidden');\n return editionRow.find('input:visible').first().focus().select();\n });\n $el.on(\"keyup\", \".new-value input\", function(event) {\n var target;\n if (event.keyCode === 13) {\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n } else if (event.keyCode === 27) {\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return saveValue(target);\n });\n $el.on(\"click\", \".cancel\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return cancel(target);\n });\n return $el.on(\"click\", \".delete-value\", function(event) {\n var choices, formEl, subtitle, target, text, title, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n formEl = target.parents(\"form\");\n value = formEl.scope().value;\n choices = {};\n _.each($scope.values, function(option) {\n if (value.id !== option.id) {\n return choices[option.id] = option.name;\n }\n });\n subtitle = value.name;\n if (_.keys(choices).length === 0) {\n return $confirm.error($translate.instant(\"ADMIN.PROJECT_VALUES.ERROR_DELETE_ALL\"));\n }\n title = $translate.instant(\"ADMIN.COMMON.TITLE_ACTION_DELETE_VALUE\");\n text = $translate.instant(\"ADMIN.PROJECT_VALUES.REPLACEMENT\");\n return $confirm.askChoice(title, subtitle, choices, text).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadValues()[\"finally\"](function() {\n $rootscope.$broadcast(\"admin:project-values:updated\");\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $repo.remove(value, {\n \"moveTo\": response.selected\n }).then(onSucces, onError);\n });\n });\n };\n link = function($scope, $el, $attrs) {\n linkDragAndDrop($scope, $el, $attrs);\n linkValue($scope, $el, $attrs);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectValues\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", \"$translate\", \"$rootScope\", \"tgProjectService\", ProjectValuesDirective]);\n\n ProjectDueDatesValues = function($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope, projectService) {\n var linkDueDateStatusValue, parentDirective;\n parentDirective = ProjectValuesDirective($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope, projectService);\n linkDueDateStatusValue = function($scope, $el, $attrs, $ctrl) {\n var _setDaysToDue, _valueFromEventTarget, initializeNewValue, saveNewValue, valueType;\n $ctrl = $el.controller();\n valueType = $attrs.type;\n initializeNewValue = function() {\n return $scope.newValue = {\n \"name\": \"\",\n \"days_to_due\": 0,\n \"sign\": 1\n };\n };\n initializeNewValue();\n _setDaysToDue = function(value) {\n return value.days_to_due = value.days_to_due_abs * value.sign;\n };\n _valueFromEventTarget = function(event) {\n var formEl, row, target;\n target = angular.element(event.currentTarget);\n row = target.parents(\".row.table-main\");\n formEl = target.parents(\"form\");\n if (!formEl.scope().value) {\n return formEl.scope().newValue;\n } else {\n return formEl.scope().value;\n }\n };\n saveNewValue = function(target) {\n var form, formEl, promise;\n formEl = target.parents(\"form\");\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n $scope.newValue.project = $scope.project.id;\n $scope.newValue.order = $scope.maxValueOrder ? $scope.maxValueOrder + 1 : 1;\n promise = $repo.create(valueType, $scope.newValue);\n promise.then(function(data) {\n target.addClass(\"hidden\");\n data.sign = $scope.newValue.sign;\n data.days_to_due_abs = $scope.newValue.days_to_due_abs;\n $scope.values.push(data);\n $rootscope.$broadcast(\"admin:project-values:updated\");\n return initializeNewValue();\n });\n return promise.then(null, function(data) {\n return form.setErrors(data);\n });\n };\n $el.on(\"input\", \".days-to-due-abs\", function(event) {\n var value;\n event.preventDefault();\n value = _valueFromEventTarget(event);\n return $scope.$apply(function() {\n return _setDaysToDue(value);\n });\n });\n $el.on(\"click\", \".days-to-due-sign\", function(event) {\n var value;\n event.preventDefault();\n value = _valueFromEventTarget(event);\n return $scope.$apply(function() {\n value.sign = value.sign * -1;\n return _setDaysToDue(value);\n });\n });\n $el.on(\"click\", \".add-new-due-date\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n }));\n return $el.on(\"click\", \".delete-due-date\", function(event) {\n var formEl, subtitle, target, title, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n formEl = target.parents(\"form\");\n value = formEl.scope().value;\n title = $translate.instant(\"LIGHTBOX.ADMIN_DUE_DATES.TITLE_ACTION_DELETE_DUE_DATE\");\n subtitle = $translate.instant(\"LIGHTBOX.ADMIN_DUE_DATES.SUBTITLE_ACTION_DELETE_DUE_DATE\", {\n due_date_status_name: value.name\n });\n return $confirm.ask(title, subtitle).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadValues()[\"finally\"](function() {\n $rootscope.$broadcast(\"admin:project-values:updated\");\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $repo.remove(value).then(onSucces, onError);\n });\n });\n };\n return {\n link: function($scope, $el, $attrs) {\n parentDirective.link($scope, $el, $attrs);\n return linkDueDateStatusValue($scope, $el, $attrs);\n }\n };\n };\n\n module.directive(\"tgProjectDueDatesValues\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", \"$translate\", \"$rootScope\", \"tgProjectService\", ProjectDueDatesValues]);\n\n ColorSelectionDirective = function() {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var $ctrl;\n $scope.colorList = getDefaulColorList();\n $scope.allowEmpty = false;\n if ($attrs.tgAllowEmpty) {\n $scope.allowEmpty = true;\n }\n $ctrl = $el.controller();\n $scope.$watch($attrs.ngModel, function(element) {\n return $scope.color = element.color;\n });\n $el.on(\"click\", \".current-color\", function(event) {\n var body, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n $(\".select-color\").hide();\n target.siblings(\".select-color\").show();\n body = angular.element(\"body\");\n return body.on(\"click\", (function(_this) {\n return function(event) {\n if (angular.element(event.target).parent(\".select-color\").length === 0) {\n $el.find(\".select-color\").hide();\n return body.unbind(\"click\");\n }\n };\n })(this));\n });\n $el.on(\"click\", \".select-color .color\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n $scope.$apply(function() {\n return $model.$modelValue.color = target.data(\"color\");\n });\n return $el.find(\".select-color\").hide();\n });\n $el.on(\"click\", \".select-color .selected-color\", function(event) {\n event.preventDefault();\n $scope.$apply(function() {\n return $model.$modelValue.color = $scope.color;\n });\n return $el.find(\".select-color\").hide();\n });\n $el.on(\"keyup\", \"input\", function(event) {\n event.stopPropagation();\n if (event.keyCode === 13) {\n $scope.$apply(function() {\n return $model.$modelValue.color = $scope.color;\n });\n return $el.find(\".select-color\").hide();\n } else if (event.keyCode === 27) {\n return $el.find(\".select-color\").hide();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgColorSelection\", ColorSelectionDirective);\n\n TEXT_TYPE = \"text\";\n\n MULTILINE_TYPE = \"multiline\";\n\n RICHTEXT_TYPE = \"richtext\";\n\n DATE_TYPE = \"date\";\n\n URL_TYPE = \"url\";\n\n DROPDOWN_TYPE = \"dropdown\";\n\n CHECKBOX_TYPE = \"checkbox\";\n\n NUMBER_TYPE = \"number\";\n\n TYPE_CHOICES = [\n {\n key: TEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT\"\n }, {\n key: MULTILINE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI\"\n }, {\n key: RICHTEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT\"\n }, {\n key: DATE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE\"\n }, {\n key: URL_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL\"\n }, {\n key: DROPDOWN_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DROPDOWN\"\n }, {\n key: CHECKBOX_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_CHECKBOX\"\n }, {\n key: NUMBER_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_NUMBER\"\n }\n ];\n\n ProjectCustomAttributesController = (function(superClass) {\n extend(ProjectCustomAttributesController, superClass);\n\n ProjectCustomAttributesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function ProjectCustomAttributesController(scope, rootscope, repo, rs, params, q, location, navUrls, appMetaService, translate, projectService1) {\n var description, sectionName, title;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService1;\n this.moveCustomAttributes = bind(this.moveCustomAttributes, this);\n this.deleteCustomAttribute = bind(this.deleteCustomAttribute, this);\n this.saveCustomAttribute = bind(this.saveCustomAttribute, this);\n this.createCustomAttribute = bind(this.createCustomAttribute, this);\n this.loadCustomAttributes = bind(this.loadCustomAttributes, this);\n this._onCustomAttributesModified = bind(this._onCustomAttributesModified, this);\n this.scope.TYPE_CHOICES = TYPE_CHOICES;\n this.scope.project = this.projectService.project.toJS();\n this.scope.projectId = this.scope.project.id;\n sectionName = this.translate.instant(this.scope.sectionName);\n title = this.translate.instant(\"ADMIN.CUSTOM_ATTRIBUTES.PAGE_TITLE\", {\n \"sectionName\": sectionName,\n \"projectName\": this.scope.project.name\n });\n description = this.scope.project.description;\n this.appMetaService.setAll(title, description);\n this.scope.init = (function(_this) {\n return function(type) {\n _this.scope.type = type;\n return _this.loadCustomAttributes();\n };\n })(this);\n }\n\n ProjectCustomAttributesController.prototype._parseAttributesExtra = function() {\n return this.scope.customAttributes = _.map(this.scope.customAttributes, (function(_this) {\n return function(x) {\n return _this._parseAttributeExtra(x);\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype._parseAttributeExtra = function(attr) {\n if (attr.type === 'dropdown' && !attr.extra) {\n attr.extra = [''];\n }\n return attr;\n };\n\n ProjectCustomAttributesController.prototype._onCustomAttributesModified = function() {\n return this.rootscope.$broadcast(\"admin:project-custom-attributes:updated\");\n };\n\n ProjectCustomAttributesController.prototype.loadCustomAttributes = function() {\n return this.rs.customAttributes[this.scope.type].list(this.scope.projectId).then((function(_this) {\n return function(customAttributes) {\n var ref;\n _this.scope.customAttributes = customAttributes;\n _this.scope.maxOrder = (ref = _.maxBy(customAttributes, \"order\")) != null ? ref.order : void 0;\n _this._parseAttributesExtra();\n return customAttributes;\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype.createCustomAttribute = function(attrValues) {\n return this.repo.create(\"custom-attributes/\" + this.scope.type, attrValues).then((function(_this) {\n return function() {\n return _this._onCustomAttributesModified();\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype.saveCustomAttribute = function(attrModel) {\n return this.repo.save(attrModel).then((function(_this) {\n return function() {\n return _this._onCustomAttributesModified();\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype.deleteCustomAttribute = function(attrModel) {\n return this.repo.remove(attrModel).then((function(_this) {\n return function() {\n return _this._onCustomAttributesModified();\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype.moveCustomAttributes = function(attrModel, newIndex) {\n var customAttributes, r;\n customAttributes = this.scope.customAttributes;\n r = customAttributes.indexOf(attrModel);\n customAttributes.splice(r, 1);\n customAttributes.splice(newIndex, 0, attrModel);\n _.each(customAttributes, function(val, idx) {\n return val.order = idx;\n });\n return this.repo.saveAll(customAttributes).then((function(_this) {\n return function() {\n return _this._onCustomAttributesModified();\n };\n })(this));\n };\n\n return ProjectCustomAttributesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"ProjectCustomAttributesController\", ProjectCustomAttributesController);\n\n ProjectCustomAttributesDirective = function($log, $confirm, animationFrame, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, _manageExtraFormEvent, _manageFormEvent, addExtraOption, cancelCreate, cancelUpdate, create, deleteCustomAttribute, hideAddButton, hideCancelButton, hideCreateForm, hideEditForm, hideExtra, initAttrType, initDraggable, removeExtraOption, resetNewAttr, revertChangesInCustomAttribute, showAddButton, showCancelButton, showCreateForm, showEditForm, showExtra, update;\n $ctrl = $el.controller();\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $scope.isExtraVisible = {};\n _manageFormEvent = function(event, callback) {\n var formEl;\n event.preventDefault();\n formEl = angular.element(event.currentTarget).closest(\"form\");\n return callback(formEl);\n };\n initDraggable = function() {\n var drake, el, i, len, results, sortableChildren, sortableEl;\n sortableEl = $el.find(\".js-sortable\");\n drake = dragula([sortableEl[0]], {\n direction: 'vertical',\n copySortSource: false,\n copy: false,\n mirrorContainer: sortableEl[0],\n moves: function(item, source, handle) {\n var childItem;\n childItem = $(handle).closest('.js-child-sortable');\n if (childItem[0]) {\n return false;\n }\n return $(item).is('div[tg-bind-scope]');\n }\n });\n drake.on('dragend', function(item) {\n var itemAttr, itemEl, itemIndex;\n itemEl = $(item);\n itemAttr = itemEl.scope().attr;\n itemIndex = itemEl.index();\n return $ctrl.moveCustomAttributes(itemAttr, itemIndex);\n });\n sortableChildren = $el.find(\".js-child-sortable\");\n results = [];\n for (i = 0, len = sortableChildren.length; i < len; i++) {\n el = sortableChildren[i];\n drake[el] = dragula([el], {\n direction: 'vertical',\n copySortSource: false,\n copy: false,\n mirrorContainer: el,\n moves: function(item) {\n return $(item).is('div[tg-bind-scope]');\n }\n });\n results.push(drake[el].on('dragend', function(item) {\n var attrExtra, itemEl, sourceIndex, targetIndex, value;\n itemEl = $(item);\n attrExtra = itemEl.scope().attr.extra;\n sourceIndex = itemEl.scope().$index;\n targetIndex = itemEl.index();\n value = attrExtra[sourceIndex];\n attrExtra.splice(sourceIndex, 1);\n attrExtra.splice(targetIndex, 0, value);\n itemEl.scope().attr.setAttr('extra', attrExtra);\n return $ctrl.saveCustomAttribute(itemEl.scope().attr).then(function() {\n return $confirm.notify(\"success\");\n });\n }));\n }\n return results;\n };\n showCreateForm = function() {\n $el.find(\".js-new-custom-field\").removeClass(\"hidden\");\n return $el.find(\".js-new-custom-field input:visible\").first().focus();\n };\n hideCreateForm = function() {\n return $el.find(\".js-new-custom-field\").addClass(\"hidden\");\n };\n showAddButton = function() {\n return $el.find(\".js-add-custom-field-button\").removeClass(\"hidden\");\n };\n hideAddButton = function() {\n return $el.find(\".js-add-custom-field-button\").addClass(\"hidden\");\n };\n showCancelButton = function() {\n return $el.find(\".js-cancel-new-custom-field-button\").removeClass(\"hidden\");\n };\n hideCancelButton = function() {\n return $el.find(\".js-cancel-new-custom-field-button\").addClass(\"hidden\");\n };\n resetNewAttr = function() {\n return $scope.newAttr = {};\n };\n create = function(formEl) {\n var attr, form, onError, onSucces;\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n onSucces = function() {\n $ctrl.loadCustomAttributes();\n hideCreateForm();\n resetNewAttr();\n return $confirm.notify(\"success\");\n };\n onError = function(data) {\n return form.setErrors(data);\n };\n attr = $scope.newAttr;\n attr.project = $scope.projectId;\n attr.order = $scope.maxOrder ? $scope.maxOrder + 1 : 1;\n return $ctrl.createCustomAttribute(attr).then(onSucces, onError);\n };\n cancelCreate = function() {\n hideCreateForm();\n return resetNewAttr();\n };\n initAttrType = function(formEl) {\n var attr, ref;\n attr = formEl.scope().newAttr ? formEl.scope().newAttr : formEl.scope().attr;\n if (attr.type !== \"dropdown\") {\n return;\n }\n if ((ref = attr.extra) != null ? ref.length : void 0) {\n return;\n }\n attr.extra = [''];\n if (attr.id) {\n return showEditForm(formEl);\n } else {\n showExtra(-1);\n return formEl.scope().$apply();\n }\n };\n $scope.$watch(\"customAttributes\", function(customAttributes) {\n if (!customAttributes) {\n return;\n }\n if (customAttributes.length === 0) {\n hideCancelButton();\n hideAddButton();\n return showCreateForm();\n } else {\n hideCreateForm();\n showAddButton();\n showCancelButton();\n return initDraggable();\n }\n });\n $el.on(\"change\", \".custom-field-type select\", function(event) {\n return _manageFormEvent(event, initAttrType);\n });\n $el.on(\"click\", \".js-add-custom-field-button\", function(event) {\n return _manageFormEvent(event, showCreateForm);\n });\n $el.on(\"click\", \".js-create-custom-field-button\", debounce(2000, function(event) {\n return _manageFormEvent(event, create);\n }));\n $el.on(\"click\", \".js-cancel-new-custom-field-button\", function(event) {\n event.preventDefault();\n return cancelCreate();\n });\n $el.on(\"keyup\", \".js-new-custom-field input\", function(event) {\n if (event.keyCode === 13) {\n return _manageFormEvent(event, create);\n } else if (event.keyCode === 27) {\n return cancelCreate();\n }\n });\n showEditForm = function(formEl) {\n formEl.find(\".js-view-custom-field\").addClass(\"hidden\");\n formEl.find(\".js-edit-custom-field\").removeClass(\"hidden\");\n formEl.find(\".js-edit-custom-field input:visible\").first().focus().select();\n formEl.find(\".js-view-custom-field-extra\").addClass(\"hidden\");\n formEl.find(\".js-edit-custom-field-extra\").removeClass(\"hidden\");\n formEl.find(\".custom-extra-actions\").removeClass(\"hidden\");\n showExtra(formEl.scope().attr.id);\n return $scope.$apply();\n };\n update = function(formEl) {\n var attr, form, onError, onSucces;\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n onSucces = function() {\n $ctrl.loadCustomAttributes();\n hideEditForm(formEl);\n return $confirm.notify(\"success\");\n };\n onError = function(data) {\n return form.setErrors(data);\n };\n attr = formEl.scope().attr;\n attr.setAttr('extra', attr.extra);\n return $ctrl.saveCustomAttribute(attr).then(onSucces, onError);\n };\n cancelUpdate = function(formEl) {\n hideEditForm(formEl);\n return revertChangesInCustomAttribute(formEl);\n };\n hideEditForm = function(formEl) {\n formEl.find(\".js-edit-custom-field\").addClass(\"hidden\");\n formEl.find(\".js-view-custom-field\").removeClass(\"hidden\");\n formEl.find(\".js-edit-custom-field-extra\").addClass(\"hidden\");\n formEl.find(\".js-view-custom-field-extra\").removeClass(\"hidden\");\n return formEl.find(\".custom-extra-actions\").addClass(\"hidden\");\n };\n revertChangesInCustomAttribute = function(formEl) {\n return $scope.$apply(function() {\n return formEl.scope().attr.revert();\n });\n };\n $el.on(\"click\", \".js-edit-custom-field-button\", function(event) {\n return _manageFormEvent(event, showEditForm);\n });\n $el.on(\"click\", \".js-update-custom-field-button\", debounce(1000, function(event) {\n return _manageFormEvent(event, update);\n }));\n $el.on(\"click\", \".js-cancel-edit-custom-field-button\", function(event) {\n return _manageFormEvent(event, cancelUpdate);\n });\n $el.on(\"keyup\", \".js-edit-custom-field input\", function(event) {\n if (event.keyCode === 13) {\n return _manageFormEvent(event, update);\n } else if (event.keyCode === 27) {\n return _manageFormEvent(event, cancelUpdate);\n }\n });\n deleteCustomAttribute = function(formEl) {\n var attr, message, text, title;\n attr = formEl.scope().attr;\n message = attr.name;\n title = $translate.instant(\"COMMON.CUSTOM_ATTRIBUTES.DELETE\");\n text = $translate.instant(\"COMMON.CUSTOM_ATTRIBUTES.CONFIRM_DELETE\");\n return $confirm.ask(title, text, message).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadCustomAttributes()[\"finally\"](function() {\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\", null, \"We have not been able to delete '\" + message + \"'.\");\n };\n return $ctrl.deleteCustomAttribute(attr).then(onSucces, onError);\n });\n };\n $el.on(\"click\", \".js-delete-custom-field-button\", debounce(2000, function(event) {\n return _manageFormEvent(event, deleteCustomAttribute);\n }));\n $scope.toggleExtraVisible = function(index) {\n if (!$scope.isExtraVisible[index]) {\n return showExtra(index);\n } else {\n return hideExtra(index);\n }\n };\n showExtra = function(index) {\n return $scope.isExtraVisible[index] = true;\n };\n hideExtra = function(index) {\n return $scope.isExtraVisible[index] = false;\n };\n _manageExtraFormEvent = function(event, callback) {\n var formEl, formExtraEl;\n event.preventDefault();\n formEl = angular.element(event.currentTarget).closest(\"form\");\n formExtraEl = angular.element(event.currentTarget).closest(\".js-form\");\n return callback(formEl, formExtraEl);\n };\n addExtraOption = function(formEl, formExtraEl) {\n var attrExtra, formScope, ref;\n formScope = formEl.scope();\n attrExtra = ((ref = formScope.newAttr) != null ? ref.extra : void 0) ? formScope.newAttr.extra : formScope.attr.extra;\n attrExtra.push(\"\");\n formScope.$apply();\n formEl.find(\".js-edit-custom-field-extra\").last().removeClass(\"hidden\");\n formEl.find(\".js-view-custom-field-extra\").last().addClass(\"hidden\");\n return formEl.find(\".js-edit-custom-field-extra input\").last().focus();\n };\n removeExtraOption = function(formEl, formExtraEl) {\n var attrExtra;\n attrExtra = formEl.scope().attr.extra;\n attrExtra.splice(formExtraEl.scope().$index, 1);\n return formExtraEl.scope().$apply();\n };\n $el.on(\"keyup\", \".js-edit-custom-field-extra input\", function(event) {\n if (event.keyCode === 13) {\n return _manageFormEvent(event, update);\n } else if (event.keyCode === 27) {\n return _manageFormEvent(event, cancelUpdate);\n }\n });\n $el.on(\"keyup\", \".js-new-custom-field-extra input\", function(event) {\n if (event.keyCode === 13) {\n return _manageFormEvent(event, create);\n } else if (event.keyCode === 27) {\n return cancelCreate();\n }\n });\n $el.on(\"click\", \".js-add-option-custom-field-extra-button\", debounce(500, function(event) {\n return _manageExtraFormEvent(event, addExtraOption);\n }));\n return $el.on(\"click\", \".js-delete-custom-field-extra-button\", debounce(500, function(event) {\n return _manageExtraFormEvent(event, removeExtraOption);\n }));\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectCustomAttributes\", [\"$log\", \"$tgConfirm\", \"animationFrame\", \"$translate\", ProjectCustomAttributesDirective]);\n\n ProjectTagsController = (function(superClass) {\n extend(ProjectTagsController, superClass);\n\n ProjectTagsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$tgModel\", \"tgProjectService\"];\n\n function ProjectTagsController(scope, rootscope, repo, confirm, rs, model, projectService1) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.model = model;\n this.projectService = projectService1;\n this.mixingClass = bind(this.mixingClass, this);\n this.cancelMixingTags = bind(this.cancelMixingTags, this);\n this.confirmMixingTags = bind(this.confirmMixingTags, this);\n this.toggleMixingFromTags = bind(this.toggleMixingFromTags, this);\n this.startMixingTags = bind(this.startMixingTags, this);\n this.deleteTag = bind(this.deleteTag, this);\n this.editTag = bind(this.editTag, this);\n this.createTag = bind(this.createTag, this);\n this.filterAndSortTags = bind(this.filterAndSortTags, this);\n this.loadTags = bind(this.loadTags, this);\n this.loading = true;\n this.loadTags();\n }\n\n ProjectTagsController.prototype.loadTags = function() {\n var project;\n project = this.projectService.project.toJS();\n return this.rs.projects.tagsColors(project.id).then((function(_this) {\n return function(tags) {\n _this.scope.projectTagsAll = _.map(tags.getAttrs(), function(color, name) {\n return _this.model.make_model('tag', {\n name: name,\n color: color\n });\n });\n _this.filterAndSortTags();\n return _this.loading = false;\n };\n })(this));\n };\n\n ProjectTagsController.prototype.filterAndSortTags = function() {\n this.scope.projectTags = _.sortBy(this.scope.projectTagsAll, function(it) {\n return it.name.toLowerCase();\n });\n return this.scope.projectTags = _.filter(this.scope.projectTags, (function(_this) {\n return function(tag) {\n return tag.name.indexOf(_this.scope.tagsFilter.name) !== -1;\n };\n })(this));\n };\n\n ProjectTagsController.prototype.createTag = function(tag, color) {\n return this.rs.projects.createTag(this.scope.projectId, tag, color);\n };\n\n ProjectTagsController.prototype.editTag = function(from_tag, to_tag, color) {\n if (from_tag === to_tag) {\n to_tag = null;\n }\n return this.rs.projects.editTag(this.scope.projectId, from_tag, to_tag, color);\n };\n\n ProjectTagsController.prototype.deleteTag = function(tag) {\n this.scope.loadingDelete = true;\n return this.rs.projects.deleteTag(this.scope.projectId, tag)[\"finally\"]((function(_this) {\n return function() {\n return _this.scope.loadingDelete = false;\n };\n })(this));\n };\n\n ProjectTagsController.prototype.startMixingTags = function(tag) {\n return this.scope.mixingTags.toTag = tag.name;\n };\n\n ProjectTagsController.prototype.toggleMixingFromTags = function(tag) {\n var index;\n if (tag.name !== this.scope.mixingTags.toTag) {\n index = this.scope.mixingTags.fromTags.indexOf(tag.name);\n if (index === -1) {\n return this.scope.mixingTags.fromTags.push(tag.name);\n } else {\n return this.scope.mixingTags.fromTags.splice(index, 1);\n }\n }\n };\n\n ProjectTagsController.prototype.confirmMixingTags = function() {\n var fromTags, toTag;\n toTag = this.scope.mixingTags.toTag;\n fromTags = this.scope.mixingTags.fromTags;\n this.scope.loadingMixing = true;\n return this.rs.projects.mixTags(this.scope.projectId, toTag, fromTags).then((function(_this) {\n return function() {\n _this.cancelMixingTags();\n return _this.loadTags();\n };\n })(this))[\"finally\"]((function(_this) {\n return function() {\n return _this.scope.loadingMixing = false;\n };\n })(this));\n };\n\n ProjectTagsController.prototype.cancelMixingTags = function() {\n this.scope.mixingTags.toTag = null;\n return this.scope.mixingTags.fromTags = [];\n };\n\n ProjectTagsController.prototype.mixingClass = function(tag) {\n if (this.scope.mixingTags.toTag !== null) {\n if (tag.name === this.scope.mixingTags.toTag) {\n return \"mixing-tags-to\";\n } else if (this.scope.mixingTags.fromTags.indexOf(tag.name) !== -1) {\n return \"mixing-tags-from\";\n }\n }\n };\n\n return ProjectTagsController;\n\n })(taiga.Controller);\n\n module.controller(\"ProjectTagsController\", ProjectTagsController);\n\n ProjectTagsDirective = function($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, $window, cancel, goToBottomList, initializeMixingTags, initializeNewValue, initializeTagsFilter, initializeTextTranslations, objName, saveNewValue, saveValue, valueType;\n $window = $(window);\n $ctrl = $el.controller();\n valueType = $attrs.type;\n objName = $attrs.objname;\n initializeNewValue = function() {\n return $scope.newValue = {\n \"tag\": \"\",\n \"color\": \"\"\n };\n };\n initializeTagsFilter = function() {\n return $scope.tagsFilter = {\n \"name\": \"\"\n };\n };\n initializeMixingTags = function() {\n return $scope.mixingTags = {\n \"toTag\": null,\n \"fromTags\": []\n };\n };\n initializeTextTranslations = function() {\n return $scope.addNewElementText = $translate.instant(\"ADMIN.PROJECT_VALUES_TAGS.ACTION_ADD\");\n };\n initializeNewValue();\n initializeTagsFilter();\n initializeMixingTags();\n initializeTextTranslations();\n $rootscope.$on(\"$translateChangeEnd\", function() {\n return $scope.$evalAsync(initializeTextTranslations);\n });\n goToBottomList = (function(_this) {\n return function(focus) {\n var table;\n if (focus == null) {\n focus = false;\n }\n table = $el.find(\".table-main\");\n $(document.body).scrollTop(table.offset().top + table.height());\n if (focus) {\n return $el.find(\".new-value input:visible\").first().focus();\n }\n };\n })(this);\n saveValue = function(target) {\n var form, formEl, originalTag, promise, tag;\n formEl = target.parents(\"form\");\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n tag = formEl.scope().tag;\n originalTag = tag.clone();\n originalTag.revert();\n $scope.loadingEdit = true;\n promise = $ctrl.editTag(originalTag.name, tag.name, tag.color);\n promise.then(function() {\n return $ctrl.loadTags().then(function() {\n var row;\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n $scope.loadingEdit = false;\n $rootscope.$broadcast('tags:updated');\n return row.siblings(\".visualization\").removeClass('hidden');\n });\n });\n return promise.then(null, function(response) {\n $scope.loadingEdit = false;\n return form.setErrors(response.data);\n });\n };\n saveNewValue = function(target) {\n var form, formEl, promise;\n formEl = target.parents(\"form\");\n formEl = target;\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n $scope.loadingCreate = true;\n promise = $ctrl.createTag($scope.newValue.tag, $scope.newValue.color);\n promise.then(function(data) {\n return $ctrl.loadTags().then(function() {\n $scope.loadingCreate = false;\n target.addClass(\"hidden\");\n $rootscope.$broadcast('tags:updated');\n return initializeNewValue();\n });\n });\n return promise.then(null, function(response) {\n $scope.loadingCreate = false;\n return form.setErrors(response.data);\n });\n };\n cancel = function(target) {\n var formEl, row, tag;\n row = target.parents(\".row.table-main\");\n formEl = target.parents(\"form\");\n tag = formEl.scope().tag;\n return $scope.$apply(function() {\n row.addClass(\"hidden\");\n tag.revert();\n return row.siblings(\".visualization\").removeClass('hidden');\n });\n };\n $scope.$watch(\"tagsFilter.name\", function(tagsFilter) {\n return $ctrl.filterAndSortTags();\n });\n $window.on(\"keyup\", function(event) {\n if (event.keyCode === 27) {\n return $scope.$apply(function() {\n return initializeMixingTags();\n });\n }\n });\n $el.on(\"click\", \".show-add-new\", function(event) {\n event.preventDefault();\n return $el.find(\".new-value\").removeClass('hidden');\n });\n $el.on(\"click\", \".add-new\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n }));\n $el.on(\"click\", \".delete-new\", function(event) {\n event.preventDefault();\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n });\n $el.on(\"click\", \".mix-tags\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n return $ctrl.startMixingTags(target.parents('form').scope().tag);\n });\n });\n $el.on(\"click\", \".mixing-row\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n return $ctrl.toggleMixingFromTags(target.parents('form').scope().tag);\n });\n });\n $el.on(\"click\", \".mixing-confirm\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $scope.$apply(function() {\n return $ctrl.confirmMixingTags();\n });\n });\n $el.on(\"click\", \".mixing-cancel\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $scope.$apply(function() {\n return $ctrl.cancelMixingTags();\n });\n });\n $el.on(\"click\", \".edit-value\", function(event) {\n var editionRow, row, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n editionRow = row.siblings(\".edition\");\n editionRow.removeClass('hidden');\n return editionRow.find('input:visible').first().focus().select();\n });\n $el.on(\"keyup\", \".new-value input\", function(event) {\n var target;\n if (event.keyCode === 13) {\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n } else if (event.keyCode === 27) {\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n }\n });\n $el.on(\"keyup\", \".status-name input\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n if (event.keyCode === 13) {\n return saveValue(target);\n } else if (event.keyCode === 27) {\n return cancel(target);\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return saveValue(target);\n });\n $el.on(\"click\", \".cancel\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return cancel(target);\n });\n $el.on(\"click\", \".delete-tag\", function(event) {\n var formEl, tag, target, title;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n formEl = target.parents(\"form\");\n tag = formEl.scope().tag;\n title = $translate.instant(\"ADMIN.COMMON.TITLE_ACTION_DELETE_TAG\");\n return $confirm.askOnDelete(title, tag.name).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadTags()[\"finally\"](function() {\n $rootscope.$broadcast('tags:updated');\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $ctrl.deleteTag(tag.name).then(onSucces, onError);\n });\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return $window.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectTags\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", \"$translate\", \"$rootScope\", ProjectTagsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/roles.coffee\n */\n\n(function() {\n var EditRoleDirective, NewRoleDirective, RolePermissionsDirective, RolesController, RolesDirective, bindMethods, bindOnce, debounce, mixOf, module, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaAdmin\");\n\n RolesController = (function(superClass) {\n extend(RolesController, superClass);\n\n RolesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgModel\", \"tgAppMetaService\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function RolesController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, model, appMetaService, translate, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.model = model;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n this._disableComputable = bind(this._disableComputable, this);\n this._enableComputable = bind(this._enableComputable, this);\n bindMethods(this);\n this.scope.sectionName = \"ADMIN.MENU.PERMISSIONS\";\n this.scope.project = {};\n this.scope.anyComputableRole = true;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.ROLES.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n RolesController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n project = this.model.make_model(\"projects\", project);\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.anyComputableRole = _.some(_.map(project.roles, function(point) {\n return point.computable;\n }));\n return project;\n };\n\n RolesController.prototype.loadRoles = function() {\n return this.rs.roles.list(this.scope.projectId).then((function(_this) {\n return function(roles) {\n var public_permission;\n roles = roles.map(function(role) {\n role.external_user = false;\n return role;\n });\n public_permission = {\n \"name\": _this.translate.instant(\"ADMIN.ROLES.EXTERNAL_USER\"),\n \"permissions\": _this.scope.project.public_permissions,\n \"external_user\": true\n };\n roles.push(public_permission);\n _this.scope.roles = roles;\n _this.scope.role = _this.scope.roles[0];\n return roles;\n };\n })(this));\n };\n\n RolesController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadRoles();\n };\n\n RolesController.prototype.forceLoadProject = function() {\n return this.rootscope.$broadcast(\"admin:project-roles:updated\");\n };\n\n RolesController.prototype.setRole = function(role) {\n this.scope.role = role;\n return this.scope.$broadcast(\"role:changed\", this.scope.role);\n };\n\n RolesController.prototype[\"delete\"] = function() {\n var choices, i, len, ref, replacement, role, subtitle, title, warning;\n choices = {};\n ref = this.scope.roles;\n for (i = 0, len = ref.length; i < len; i++) {\n role = ref[i];\n if (role.id !== this.scope.role.id) {\n choices[role.id] = role.name;\n }\n }\n if (_.keys(choices).length === 0) {\n return this.confirm.error(this.translate.instant(\"ADMIN.ROLES.ERROR_DELETE_ALL\"));\n }\n title = this.translate.instant(\"ADMIN.ROLES.TITLE_DELETE_ROLE\");\n subtitle = this.scope.role.name;\n replacement = this.translate.instant(\"ADMIN.ROLES.REPLACEMENT_ROLE\");\n warning = this.translate.instant(\"ADMIN.ROLES.WARNING_DELETE_ROLE\");\n return this.confirm.askChoice(title, subtitle, choices, replacement, warning).then((function(_this) {\n return function(response) {\n var onError, onSuccess;\n onSuccess = function() {\n _this.forceLoadProject();\n return _this.loadRoles()[\"finally\"](function() {\n return response.finish();\n });\n };\n onError = function() {\n return _this.confirm.notify('error');\n };\n return _this.repo.remove(_this.scope.role, {\n moveTo: response.selected\n }).then(onSuccess, onError);\n };\n })(this));\n };\n\n RolesController.prototype._enableComputable = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.confirm.notify(\"success\");\n return _this.forceLoadProject();\n };\n })(this);\n onError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.scope.role.revert();\n };\n })(this);\n return this.repo.save(this.scope.role).then(onSuccess, onError);\n };\n\n RolesController.prototype._disableComputable = function() {\n var askOnError, askOnSuccess, subtitle, title;\n askOnSuccess = (function(_this) {\n return function(response) {\n var onError, onSuccess;\n onSuccess = function() {\n response.finish();\n _this.confirm.notify(\"success\");\n return _this.forceLoadProject();\n };\n onError = function() {\n response.finish();\n _this.confirm.notify(\"error\");\n return _this.scope.role.revert();\n };\n return _this.repo.save(_this.scope.role).then(onSuccess, onError);\n };\n })(this);\n askOnError = (function(_this) {\n return function(response) {\n return _this.scope.role.revert();\n };\n })(this);\n title = this.translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_TITLE\");\n subtitle = this.translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_SUBTITLE\", {\n roleName: this.scope.role.name\n });\n return this.confirm.ask(title, subtitle, \"\").then(askOnSuccess, askOnError);\n };\n\n RolesController.prototype.toggleComputable = debounce(2000, function() {\n if (!this.scope.role.computable) {\n return this._disableComputable();\n } else {\n return this._enableComputable();\n }\n });\n\n return RolesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"RolesController\", RolesController);\n\n EditRoleDirective = function($repo, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit, toggleView;\n toggleView = function() {\n $el.find('.total').toggle();\n return $el.find('.edit-role').toggle();\n };\n submit = function() {\n var promise;\n $scope.role.name = $el.find(\"input\").val();\n promise = $repo.save($scope.role);\n promise.then(function() {\n return $confirm.notify(\"success\");\n });\n promise.then(null, function(data) {\n return $confirm.notify(\"error\");\n });\n return toggleView();\n };\n $el.on(\"click\", \".edit-value\", function() {\n toggleView();\n $el.find(\"input\").focus();\n return $el.find(\"input\").val($scope.role.name);\n });\n $el.on(\"click\", \"a.save\", submit);\n $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return submit();\n } else if (event.keyCode === 27) {\n return toggleView();\n }\n });\n $scope.$on(\"role:changed\", function() {\n if ($el.find('.edit-role').is(\":visible\")) {\n return toggleView();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgEditRole\", [\"$tgRepo\", \"$tgConfirm\", EditRoleDirective]);\n\n RolesDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRoles\", RolesDirective);\n\n NewRoleDirective = function($tgrepo, $confirm) {\n var DEFAULT_PERMISSIONS, link;\n DEFAULT_PERMISSIONS = [\"view_project\", \"view_milestones\", \"view_us\", \"view_tasks\", \"view_issues\"];\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $el.on(\"click\", \"a.add-button\", function(event) {\n event.preventDefault();\n $el.find(\".new\").removeClass(\"hidden\");\n $el.find(\".new\").focus();\n return $el.find(\".add-button\").hide();\n });\n return $el.on(\"keyup\", \".new\", function(event) {\n var newRole, onError, onSuccess, target;\n event.preventDefault();\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n newRole = {\n project: $scope.projectId,\n name: target.val(),\n permissions: DEFAULT_PERMISSIONS,\n order: _.maxBy($scope.roles, function(r) {\n return r.order;\n }).order + 1,\n computable: false\n };\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new\").val('');\n onSuccess = function(role) {\n var insertPosition;\n insertPosition = $scope.roles.length - 1;\n $scope.roles.splice(insertPosition, 0, role);\n $ctrl.setRole(role);\n $el.find(\".add-button\").show();\n return $ctrl.forceLoadProject();\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $tgrepo.create(\"roles\", newRole).then(onSuccess, onError);\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new\").val('');\n return $el.find(\".add-button\").show();\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgNewRole\", [\"$tgRepo\", \"$tgConfirm\", NewRoleDirective]);\n\n RolePermissionsDirective = function($rootscope, $repo, $confirm, $compile) {\n var baseTemplate, categoryTemplate, link, resumeTemplate;\n resumeTemplate = _.template(\"
    \\\">
    \\n
    \\n
    <%- category.activePermissions %>/<%- category.permissions.length %>
    \\n <% _.each(category.permissions, function(permission) { %>\\n
    active<% } %>\\\"\\n title=\\\"{{ '<%- permission.name %>' | translate }}\\\">
    \\n <% }) %>\\n
    \\n\");\n categoryTemplate = _.template(\"
    \\\">\\n
    \\n
    \\n
    \\n
    \\n <% _.each(category.permissions, function(permission) { %>\\n
    \\\">\\n \\\">\\n
    \\n disabled=\\\"disabled\\\" <% } %>\\n <% if(permission.active) { %> checked=\\\"checked\\\" <% } %>/>\\n
    \\n \\n \\n
    \\n
    \\n <% }) %>\\n
    \\n
    \\n
    \");\n baseTemplate = _.template(\"
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, generateCategoriesFromRole, renderCategory, renderPermissions, renderResume;\n $ctrl = $el.controller();\n generateCategoriesFromRole = function(role) {\n var categories, epicPermissions, isPermissionEditable, issuePermissions, milestonePermissions, setActivePermissions, setActivePermissionsPerCategory, taskPermissions, userStoryPermissions, wikiPermissions;\n setActivePermissions = function(permissions) {\n return _.map(permissions, function(x) {\n var ref;\n return _.extend({}, x, {\n active: (ref = x[\"key\"], indexOf.call(role.permissions, ref) >= 0)\n });\n });\n };\n isPermissionEditable = function(permission, role, project) {\n if (role.external_user && !project.is_private && permission.key.indexOf(\"view_\") === 0) {\n return false;\n } else {\n return true;\n }\n };\n setActivePermissionsPerCategory = function(category) {\n return _.map(category, function(cat) {\n cat.permissions = cat.permissions.map(function(permission) {\n permission.editable = isPermissionEditable(permission, role, $scope.project);\n return permission;\n });\n return _.extend({}, cat, {\n activePermissions: _.filter(cat[\"permissions\"], \"active\").length\n });\n });\n };\n categories = [];\n epicPermissions = [\n {\n key: \"view_epics\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.VIEW_EPICS\"\n }, {\n key: \"add_epic\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.ADD_EPICS\"\n }, {\n key: \"modify_epic\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.MODIFY_EPICS\"\n }, {\n key: \"comment_epic\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.COMMENT_EPICS\"\n }, {\n key: \"delete_epic\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.DELETE_EPICS\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.NAME\",\n permissions: setActivePermissions(epicPermissions)\n });\n milestonePermissions = [\n {\n key: \"view_milestones\",\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.VIEW_SPRINTS\"\n }, {\n key: \"add_milestone\",\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.ADD_SPRINTS\"\n }, {\n key: \"modify_milestone\",\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.MODIFY_SPRINTS\"\n }, {\n key: \"delete_milestone\",\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.DELETE_SPRINTS\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.NAME\",\n permissions: setActivePermissions(milestonePermissions)\n });\n userStoryPermissions = [\n {\n key: \"view_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.VIEW_USER_STORIES\"\n }, {\n key: \"add_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.ADD_USER_STORIES\"\n }, {\n key: \"modify_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.MODIFY_USER_STORIES\"\n }, {\n key: \"comment_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.COMMENT_USER_STORIES\"\n }, {\n key: \"delete_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.DELETE_USER_STORIES\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.NAME\",\n permissions: setActivePermissions(userStoryPermissions)\n });\n taskPermissions = [\n {\n key: \"view_tasks\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.VIEW_TASKS\"\n }, {\n key: \"add_task\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.ADD_TASKS\"\n }, {\n key: \"modify_task\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.MODIFY_TASKS\"\n }, {\n key: \"comment_task\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.COMMENT_TASKS\"\n }, {\n key: \"delete_task\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.DELETE_TASKS\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.NAME\",\n permissions: setActivePermissions(taskPermissions)\n });\n issuePermissions = [\n {\n key: \"view_issues\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.VIEW_ISSUES\"\n }, {\n key: \"add_issue\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.ADD_ISSUES\"\n }, {\n key: \"modify_issue\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.MODIFY_ISSUES\"\n }, {\n key: \"comment_issue\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.COMMENT_ISSUES\"\n }, {\n key: \"delete_issue\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.DELETE_ISSUES\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.NAME\",\n permissions: setActivePermissions(issuePermissions)\n });\n wikiPermissions = [\n {\n key: \"view_wiki_pages\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_PAGES\"\n }, {\n key: \"add_wiki_page\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_PAGES\"\n }, {\n key: \"modify_wiki_page\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.MODIFY_WIKI_PAGES\"\n }, {\n key: \"delete_wiki_page\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_PAGES\"\n }, {\n key: \"view_wiki_links\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_LINKS\"\n }, {\n key: \"add_wiki_link\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_LINKS\"\n }, {\n key: \"delete_wiki_link\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_LINKS\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.NAME\",\n permissions: setActivePermissions(wikiPermissions)\n });\n return setActivePermissionsPerCategory(categories);\n };\n renderResume = function(element, category) {\n return element.find(\".resume\").html($compile(resumeTemplate({\n category: category\n }))($scope));\n };\n renderCategory = function(category, index) {\n var html;\n html = categoryTemplate({\n category: category,\n index: index\n });\n html = angular.element(html);\n renderResume(html, category);\n return $compile(html)($scope);\n };\n renderPermissions = function() {\n var html;\n $el.off();\n html = baseTemplate();\n _.each(generateCategoriesFromRole($scope.role), function(category, index) {\n return html = angular.element(html).append(renderCategory(category, index));\n });\n $el.html(html);\n $el.on(\"click\", \".resume\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n target.toggleClass(\"open-drawer\");\n return target.next().toggleClass(\"open\");\n });\n return $el.on(\"change\", \".category-item input\", function(event) {\n var getActivePermissions, onError, onSuccess, target;\n getActivePermissions = function() {\n var activePermissions;\n activePermissions = _.filter($el.find(\".category-item input\"), function(t) {\n return angular.element(t).is(\":checked\");\n });\n activePermissions = _.sortBy(_.map(activePermissions, function(t) {\n var permission;\n return permission = angular.element(t).parents(\".category-item\").data(\"id\");\n }));\n if (activePermissions.length) {\n activePermissions.push(\"view_project\");\n }\n return activePermissions;\n };\n target = angular.element(event.currentTarget);\n $scope.role.permissions = getActivePermissions();\n onSuccess = function() {\n var categories, categoryId;\n categories = generateCategoriesFromRole($scope.role);\n categoryId = target.parents(\".category-config\").data(\"id\");\n renderResume(target.parents(\".category-config\"), categories[categoryId]);\n $rootscope.$broadcast(\"projects:reload\");\n $confirm.notify(\"success\");\n return $ctrl.forceLoadProject();\n };\n onError = function() {\n $confirm.notify(\"error\");\n target.prop(\"checked\", !target.prop(\"checked\"));\n return $scope.role.permissions = getActivePermissions();\n };\n if ($scope.role.external_user) {\n $scope.project.public_permissions = $scope.role.permissions;\n $scope.project.anon_permissions = $scope.role.permissions.filter(function(permission) {\n return permission.indexOf(\"view_\") === 0;\n });\n return $repo.save($scope.project).then(onSuccess, onError);\n } else {\n return $repo.save($scope.role).then(onSuccess, onError);\n }\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $scope.$on(\"role:changed\", function() {\n return renderPermissions();\n });\n return bindOnce($scope, $attrs.ngModel, renderPermissions);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRolePermissions\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$compile\", RolePermissionsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/third-parties.coffee\n */\n\n(function() {\n var BitbucketController, BitbucketWebhooksDirective, GithubController, GithubWebhooksDirective, GitlabController, GitlabWebhooksDirective, GogsController, GogsWebhooksDirective, NewWebhookDirective, SelectInputText, ValidOriginIpsDirective, WebhookDirective, WebhooksController, bindMethods, debounce, mixOf, module, taiga, timeout,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindMethods = this.taiga.bindMethods;\n\n debounce = this.taiga.debounce;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaAdmin\");\n\n WebhooksController = (function(superClass) {\n extend(WebhooksController, superClass);\n\n WebhooksController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function WebhooksController(scope, repo, rs, params, location, navUrls, appMetaService, translate, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = \"ADMIN.WEBHOOKS.SECTION_NAME\";\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.WEBHOOKS.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"webhooks:reload\", this.loadWebhooks);\n }\n\n WebhooksController.prototype.loadWebhooks = function() {\n return this.rs.webhooks.list(this.scope.projectId).then((function(_this) {\n return function(webhooks) {\n return _this.scope.webhooks = webhooks;\n };\n })(this));\n };\n\n WebhooksController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n WebhooksController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadWebhooks();\n };\n\n return WebhooksController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"WebhooksController\", WebhooksController);\n\n WebhookDirective = function($rs, $repo, $confirm, $loading, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var cancel, openHistory, save, showEditMode, showVisualizationMode, updateLogs, updateShowHideHistoryText, webhook;\n webhook = $scope.$eval($attrs.tgWebhook);\n updateLogs = function() {\n var prettyDate;\n prettyDate = $translate.instant(\"ADMIN.WEBHOOKS.DATE\");\n return $rs.webhooklogs.list(webhook.id).then((function(_this) {\n return function(webhooklogs) {\n var i, len, log, ref;\n for (i = 0, len = webhooklogs.length; i < len; i++) {\n log = webhooklogs[i];\n log.validStatus = (200 <= (ref = log.status) && ref < 300);\n log.prettySentHeaders = _.map(_.toPairs(log.request_headers), function(arg) {\n var header, value;\n header = arg[0], value = arg[1];\n return header + \": \" + value;\n }).join(\"\\n\");\n log.prettySentData = JSON.stringify(log.request_data);\n log.prettyDate = moment(log.created).format(prettyDate);\n }\n webhook.logs_counter = webhooklogs.length;\n webhook.logs = webhooklogs;\n return updateShowHideHistoryText();\n };\n })(this));\n };\n updateShowHideHistoryText = function() {\n var historyElement, text, textElement, title;\n textElement = $el.find(\".toggle-history\");\n historyElement = textElement.parents(\".single-webhook-wrapper\").find(\".webhooks-history\");\n if (historyElement.hasClass(\"open\")) {\n text = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_HIDE_HISTORY\");\n title = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_HIDE_HISTORY_TITLE\");\n } else {\n text = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_SHOW_HISTORY\");\n title = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_SHOW_HISTORY_TITLE\");\n }\n textElement.text(text);\n return textElement.prop(\"title\", title);\n };\n showVisualizationMode = function() {\n $el.find(\".edition-mode\").addClass(\"hidden\");\n return $el.find(\".visualization-mode\").removeClass(\"hidden\");\n };\n showEditMode = function() {\n $el.find(\".visualization-mode\").addClass(\"hidden\");\n return $el.find(\".edition-mode\").removeClass(\"hidden\");\n };\n openHistory = function() {\n return $el.find(\".webhooks-history\").addClass(\"open\");\n };\n cancel = function() {\n showVisualizationMode();\n return $scope.$apply(function() {\n return webhook.revert();\n });\n };\n save = debounce(2000, function(target) {\n var form, promise;\n form = target.parents(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n promise = $repo.save(webhook);\n promise.then((function(_this) {\n return function() {\n return showVisualizationMode();\n };\n })(this));\n return promise.then(null, function(data) {\n $confirm.notify(\"error\");\n return form.setErrors(data);\n });\n });\n $el.on(\"click\", \".test-webhook\", function() {\n openHistory();\n return $rs.webhooks.test(webhook.id).then((function(_this) {\n return function() {\n return updateLogs();\n };\n })(this));\n });\n $el.on(\"click\", \".edit-webhook\", function() {\n return showEditMode();\n });\n $el.on(\"click\", \".cancel-existing\", function() {\n return cancel();\n });\n $el.on(\"click\", \".edit-existing\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return save(target);\n });\n $el.on(\"keyup\", \".edition-mode input\", function(event) {\n var target;\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n return save(target);\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n return cancel(target);\n }\n });\n $el.on(\"click\", \".delete-webhook\", function() {\n var message, title;\n title = $translate.instant(\"ADMIN.WEBHOOKS.DELETE\");\n message = $translate.instant(\"ADMIN.WEBHOOKS.WEBHOOK_NAME\", {\n name: webhook.name\n });\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var onError, onSucces;\n onSucces = function() {\n askResponse.finish();\n return $scope.$emit(\"webhooks:reload\");\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n return $repo.remove(webhook).then(onSucces, onError);\n };\n })(this));\n });\n $el.on(\"click\", \".toggle-history\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n if ((webhook.logs == null) || webhook.logs.length === 0) {\n return updateLogs().then(function() {\n return timeout(0, function() {\n $el.find(\".webhooks-history\").toggleClass(\"open\").slideToggle();\n return updateShowHideHistoryText();\n });\n });\n } else {\n $el.find(\".webhooks-history\").toggleClass(\"open\").slideToggle();\n return $scope.$apply(function() {\n return updateShowHideHistoryText();\n });\n }\n });\n $el.on(\"click\", \".history-single\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n target.toggleClass(\"history-single-open\");\n return target.siblings(\".history-single-response\").toggleClass(\"open\");\n });\n return $el.on(\"click\", \".resend-request\", function(event) {\n var log, target;\n target = angular.element(event.currentTarget);\n log = target.data(\"log\");\n return $rs.webhooklogs.resend(log).then((function(_this) {\n return function() {\n return updateLogs();\n };\n })(this));\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgWebhook\", [\"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$translate\", WebhookDirective]);\n\n NewWebhookDirective = function($rs, $repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var addWebhookDOMNode, formDOMNode, initializeNewValue, save, webhook;\n webhook = $scope.$eval($attrs.tgWebhook);\n formDOMNode = $el.find(\".new-webhook-form\");\n addWebhookDOMNode = $el.find(\".add-webhook\");\n initializeNewValue = function() {\n return $scope.newValue = {\n \"name\": \"\",\n \"url\": \"\",\n \"key\": \"\"\n };\n };\n initializeNewValue();\n $scope.$watch(\"webhooks\", function(webhooks) {\n if (webhooks != null) {\n if (webhooks.length === 0) {\n formDOMNode.removeClass(\"hidden\");\n addWebhookDOMNode.addClass(\"hidden\");\n return formDOMNode.find(\"input\")[0].focus();\n } else {\n formDOMNode.addClass(\"hidden\");\n return addWebhookDOMNode.removeClass(\"hidden\");\n }\n }\n });\n save = debounce(2000, function() {\n var form, promise;\n form = formDOMNode.checksley();\n if (!form.validate()) {\n return;\n }\n $scope.newValue.project = $scope.project.id;\n promise = $repo.create(\"webhooks\", $scope.newValue);\n promise.then((function(_this) {\n return function() {\n $analytics.trackEvent(\"webhooks\", \"create\", \"Create new webhook\", 1);\n $scope.$emit(\"webhooks:reload\");\n return initializeNewValue();\n };\n })(this));\n return promise.then(null, function(data) {\n $confirm.notify(\"error\");\n return form.setErrors(data);\n });\n });\n formDOMNode.on(\"click\", \".add-new\", function(event) {\n event.preventDefault();\n return save();\n });\n formDOMNode.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return save();\n }\n });\n formDOMNode.on(\"click\", \".cancel-new\", function(event) {\n return $scope.$apply(function() {\n initializeNewValue();\n if ($scope.webhooks.length >= 1) {\n return formDOMNode.addClass(\"hidden\");\n }\n });\n });\n return addWebhookDOMNode.on(\"click\", function(event) {\n formDOMNode.removeClass(\"hidden\");\n return formDOMNode.find(\"input\")[0].focus();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgNewWebhook\", [\"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", NewWebhookDirective]);\n\n GithubController = (function(superClass) {\n extend(GithubController, superClass);\n\n GithubController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function GithubController(scope, repo, rs, params, appMetaService, translate, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"ADMIN.GITHUB.SECTION_NAME\");\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.GITHUB.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n GithubController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"github\").then((function(_this) {\n return function(github) {\n return _this.scope.github = github;\n };\n })(this));\n };\n\n GithubController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n GithubController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return this.loadModules();\n };\n\n return GithubController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"GithubController\", GithubController);\n\n GitlabController = (function(superClass) {\n extend(GitlabController, superClass);\n\n GitlabController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function GitlabController(scope, repo, rs, params, appMetaService, translate, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"ADMIN.GITLAB.SECTION_NAME\");\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.GITLAB.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:modules:reload\", (function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n }\n\n GitlabController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"gitlab\").then((function(_this) {\n return function(gitlab) {\n return _this.scope.gitlab = gitlab;\n };\n })(this));\n };\n\n GitlabController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n GitlabController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadModules();\n };\n\n return GitlabController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"GitlabController\", GitlabController);\n\n BitbucketController = (function(superClass) {\n extend(BitbucketController, superClass);\n\n BitbucketController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function BitbucketController(scope, repo, rs, params, appMetaService, translate, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"ADMIN.BITBUCKET.SECTION_NAME\");\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.BITBUCKET.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:modules:reload\", (function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n }\n\n BitbucketController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"bitbucket\").then((function(_this) {\n return function(bitbucket) {\n return _this.scope.bitbucket = bitbucket;\n };\n })(this));\n };\n\n BitbucketController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n BitbucketController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadModules();\n };\n\n return BitbucketController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"BitbucketController\", BitbucketController);\n\n SelectInputText = function($translate, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.on(\"click\", \".select-input-content\", function() {\n var source;\n source = $el.find(\"input\");\n if (!source.val()) {\n return;\n }\n source.select();\n document.execCommand('copy');\n return $confirm.notify(\"success\", $translate.instant(\"COMMON.COPIED_TO_CLIPBOARD\"));\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSelectInputText\", [\"$translate\", \"$tgConfirm\", SelectInputText]);\n\n GithubWebhooksDirective = function($repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.saveAttribute($scope.github, \"github\");\n promise.then(function() {\n $analytics.trackEvent(\"github-webhook\", \"created-or-changed\", \"Create or changed github webhook\", 1);\n currentLoading.finish();\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n return $el.on(\"submit\", \"form\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgGithubWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", GithubWebhooksDirective]);\n\n GitlabWebhooksDirective = function($repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.saveAttribute($scope.gitlab, \"gitlab\");\n promise.then(function() {\n $analytics.trackEvent(\"gitlab-webhook\", \"created-or-changed\", \"Create or changed gitlab webhook\", 1);\n currentLoading.finish();\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:modules:reload\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n return $el.on(\"submit\", \"form\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgGitlabWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", GitlabWebhooksDirective]);\n\n BitbucketWebhooksDirective = function($repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.saveAttribute($scope.bitbucket, \"bitbucket\");\n promise.then(function() {\n $analytics.trackEvent(\"bitbucket-webhook\", \"created-or-changed\", \"Create or changed bitbucket webhook\", 1);\n currentLoading.finish();\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:modules:reload\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n return $el.on(\"submit\", \"form\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBitbucketWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", BitbucketWebhooksDirective]);\n\n ValidOriginIpsDirective = function() {\n var link;\n link = function($scope, $el, $attrs, $ngModel) {\n return $ngModel.$parsers.push(function(value) {\n value = $.trim(value);\n if (value === \"\") {\n return [];\n }\n return value.split(\",\");\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgValidOriginIps\", ValidOriginIpsDirective);\n\n GogsController = (function(superClass) {\n extend(GogsController, superClass);\n\n GogsController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function GogsController(scope, repo, rs, params, appMetaService, translate, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"ADMIN.GOGS.SECTION_NAME\");\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.GOGS.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n GogsController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"gogs\").then((function(_this) {\n return function(gogs) {\n return _this.scope.gogs = gogs;\n };\n })(this));\n };\n\n GogsController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n GogsController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadModules();\n };\n\n return GogsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n GogsWebhooksDirective = function($repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.saveAttribute($scope.gogs, \"gogs\");\n promise.then(function() {\n $analytics.trackEvent(\"gogs-webhook\", \"create-or-change\", \"Create or change gogs webhook\", 1);\n currentLoading.finish();\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:modules:reload\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.controller(\"GogsController\", GogsController);\n\n module.directive(\"tgGogsWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", GogsWebhooksDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/projects/lightboxes.coffee\n */\n\n(function() {\n var DeleteProjectDirective, bindOnce, debounce, module, taiga, timeout;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n timeout = this.taiga.timeout;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaProject\");\n\n DeleteProjectDirective = function($repo, $rootscope, $auth, $location, $navUrls, $confirm, lightboxService, tgLoader, currentUserService, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var projectToDelete, submit;\n projectToDelete = null;\n $scope.$on(\"deletelightbox:new\", function(ctx, project) {\n lightboxService.open($el);\n return projectToDelete = project;\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n submit = function() {\n var promise;\n tgLoader.start();\n lightboxService.close($el);\n promise = $repo.remove(projectToDelete);\n promise.then(function(data) {\n $analytics.trackEvent(\"projects\", \"delete\", \"Delete project\", 1);\n tgLoader.pageLoaded();\n $rootscope.$broadcast(\"projects:reload\");\n $location.path($navUrls.resolve(\"home\"));\n $confirm.notify(\"success\");\n return currentUserService.loadProjects();\n });\n return promise.then(null, function() {\n $confirm.notify(\"error\");\n return lightboxService.close($el);\n });\n };\n $el.on(\"click\", \".button-red\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n return $el.on(\"click\", \".button-green\", function(event) {\n event.preventDefault();\n return submit();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbDeleteProject\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfirm\", \"lightboxService\", \"tgLoader\", \"tgCurrentUserService\", \"$tgAnalytics\", DeleteProjectDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/bind.coffee\n */\n\n(function() {\n var BindHtmlDirective, BindOnceAltDirective, BindOnceBindDirective, BindOnceHrefDirective, BindOnceHtmlDirective, BindOnceRefDirective, BindOnceSrcDirective, BindOnceTitleDirective, BindTitleDirective, bindOnce, module;\n\n bindOnce = this.taiga.bindOnce;\n\n BindOnceBindDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoBind, function(val) {\n return $el.text(val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceHtmlDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoHtml, function(val) {\n return $el.html(val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceRefDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoRef, function(val) {\n return $el.html(\"#\" + val + \" \");\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceSrcDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoSrc, function(val) {\n return $el.attr(\"src\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceHrefDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoHref, function(val) {\n return $el.attr(\"href\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceAltDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoAlt, function(val) {\n return $el.attr(\"alt\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceTitleDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoTitle, function(val) {\n return $el.attr(\"title\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindTitleDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$watch($attrs.tgTitleHtml, function(val) {\n if (val != null) {\n return $el.attr(\"title\", val);\n }\n });\n };\n return {\n link: link\n };\n };\n\n BindHtmlDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$watch($attrs.tgBindHtml, function(val) {\n if (val != null) {\n return $el.html(val);\n }\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaBase\");\n\n module.directive(\"tgBoBind\", BindOnceBindDirective);\n\n module.directive(\"tgBoHtml\", BindOnceHtmlDirective);\n\n module.directive(\"tgBoRef\", BindOnceRefDirective);\n\n module.directive(\"tgBoSrc\", BindOnceSrcDirective);\n\n module.directive(\"tgBoHref\", BindOnceHrefDirective);\n\n module.directive(\"tgBoAlt\", BindOnceAltDirective);\n\n module.directive(\"tgBoTitle\", BindOnceTitleDirective);\n\n module.directive(\"tgBindTitle\", BindTitleDirective);\n\n module.directive(\"tgBindHtml\", BindHtmlDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/conf.coffee\n */\n\n(function() {\n var ConfigurationService, module;\n\n ConfigurationService = (function() {\n function ConfigurationService() {\n this.config = window.taigaConfig;\n }\n\n ConfigurationService.prototype.get = function(key, defaultValue) {\n if (defaultValue == null) {\n defaultValue = null;\n }\n if (_.has(this.config, key)) {\n return this.config[key];\n }\n return defaultValue;\n };\n\n return ConfigurationService;\n\n })();\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgConfig\", ConfigurationService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/contrib.coffee\n */\n\n(function() {\n var ContribController, ContribUserSettingsController, module,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n module = angular.module(\"taigaBase\");\n\n ContribController = (function(superClass) {\n extend(ContribController, superClass);\n\n ContribController.$inject = [\"$rootScope\", \"$scope\", \"$routeParams\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"tgProjectService\"];\n\n function ContribController(rootScope, scope, params, repo, rs, confirm, projectService) {\n this.rootScope = rootScope;\n this.scope = scope;\n this.params = params;\n this.repo = repo;\n this.rs = rs;\n this.confirm = confirm;\n this.projectService = projectService;\n this.scope.currentPlugin = _.head(_.filter(this.rootScope.adminPlugins, {\n \"slug\": this.params.plugin\n }));\n this.scope.projectSlug = this.params.pslug;\n this.loadInitialData();\n }\n\n ContribController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.$broadcast('project:loaded', project);\n return project;\n };\n\n ContribController.prototype.loadInitialData = function() {\n return this.loadProject();\n };\n\n return ContribController;\n\n })(taiga.Controller);\n\n module.controller(\"ContribController\", ContribController);\n\n ContribUserSettingsController = (function(superClass) {\n extend(ContribUserSettingsController, superClass);\n\n ContribUserSettingsController.$inject = [\"$rootScope\", \"$scope\", \"$routeParams\"];\n\n function ContribUserSettingsController(rootScope, scope, params) {\n this.rootScope = rootScope;\n this.scope = scope;\n this.params = params;\n this.scope.currentPlugin = _.head(_.filter(this.rootScope.userSettingsPlugins, {\n \"slug\": this.params.plugin\n }));\n }\n\n return ContribUserSettingsController;\n\n })(taiga.Controller);\n\n module.controller(\"ContribUserSettingsController\", ContribUserSettingsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/filters.coffee\n */\n\n(function() {\n var FiltersStorageService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n FiltersStorageService = (function(superClass) {\n extend(FiltersStorageService, superClass);\n\n FiltersStorageService.$inject = [\"$tgStorage\", \"$routeParams\"];\n\n function FiltersStorageService(storage, params) {\n this.storage = storage;\n this.params = params;\n }\n\n FiltersStorageService.prototype.generateHash = function(components) {\n if (components == null) {\n components = [];\n }\n components = _.map(components, function(x) {\n return JSON.stringify(x);\n });\n return hex_sha1(components.join(\":\"));\n };\n\n return FiltersStorageService;\n\n })(taiga.Service);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/http.coffee\n */\n\n(function() {\n var HttpService, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n HttpService = (function(superClass) {\n extend(HttpService, superClass);\n\n HttpService.$inject = [\"$http\", \"$q\", \"$tgStorage\", \"$rootScope\", \"$cacheFactory\", \"$translate\"];\n\n function HttpService(http, q, storage, rootScope, cacheFactory, translate) {\n this.http = http;\n this.q = q;\n this.storage = storage;\n this.rootScope = rootScope;\n this.cacheFactory = cacheFactory;\n this.translate = translate;\n HttpService.__super__.constructor.call(this);\n this.cache = this.cacheFactory(\"httpget\");\n }\n\n HttpService.prototype.headers = function() {\n var headers, lang, token;\n headers = {};\n token = this.storage.get('token');\n if (token) {\n headers[\"Authorization\"] = \"Bearer \" + token;\n }\n lang = this.translate.preferredLanguage();\n if (lang) {\n headers[\"Accept-Language\"] = lang;\n }\n return headers;\n };\n\n HttpService.prototype.request = function(options) {\n options.headers = _.assign({}, options.headers || {}, this.headers());\n return this.http(options);\n };\n\n HttpService.prototype.get = function(url, params, options) {\n options = _.assign({\n method: \"GET\",\n url: url\n }, options);\n if (params) {\n options.params = params;\n }\n options.cache = this.cache;\n return this.request(options)[\"finally\"]((function(_this) {\n return function(data) {\n return _this.cache.removeAll();\n };\n })(this));\n };\n\n HttpService.prototype.post = function(url, data, params, options) {\n options = _.assign({\n method: \"POST\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype.put = function(url, data, params, options) {\n options = _.assign({\n method: \"PUT\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype.patch = function(url, data, params, options) {\n options = _.assign({\n method: \"PATCH\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype[\"delete\"] = function(url, data, params, options) {\n options = _.assign({\n method: \"DELETE\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n return HttpService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgHttp\", HttpService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/location.coffee\n */\n\n(function() {\n var locationFactory, module;\n\n locationFactory = function($location, $route, $rootscope) {\n $location.noreload = function(scope) {\n var lastRoute, un;\n lastRoute = $route.current;\n un = scope.$on(\"$locationChangeSuccess\", function() {\n $route.current = lastRoute;\n return un();\n });\n return $location;\n };\n $location.isInCurrentRouteParams = function(name, value) {\n var params;\n params = $location.search() || {};\n return params[name] === value;\n };\n return $location;\n };\n\n module = angular.module(\"taigaBase\");\n\n module.factory(\"$tgLocation\", [\"$location\", \"$route\", \"$rootScope\", locationFactory]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/model.coffee\n */\n\n(function() {\n var Model, ModelService, module, provider, taiga,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n Model = (function() {\n function Model(name, data, dataTypes) {\n this._attrs = data;\n this._name = name;\n this._dataTypes = dataTypes;\n this.setAttrs(data);\n this.initialize();\n }\n\n Model.prototype.realClone = function() {\n var attrs, instance;\n attrs = _.cloneDeep(this._attrs);\n instance = new Model(this._name, attrs, this._dataTypes);\n instance._modifiedAttrs = _.cloneDeep(this._modifiedAttrs);\n instance._isModified = _.cloneDeep(this._isModified);\n return instance;\n };\n\n Model.prototype.clone = function() {\n var instance;\n instance = new Model(this._name, this._attrs, this._dataTypes);\n instance._modifiedAttrs = this._modifiedAttrs;\n instance._isModified = this._isModified;\n return instance;\n };\n\n Model.prototype.applyCasts = function() {\n var attrName, castMethod, castName, ref, results;\n ref = this._dataTypes;\n results = [];\n for (attrName in ref) {\n castName = ref[attrName];\n castMethod = service.casts[castName];\n if (!castMethod) {\n continue;\n }\n results.push(this._attrs[attrName] = castMethod(this._attrs[attrName]));\n }\n return results;\n };\n\n Model.prototype.getIdAttrName = function() {\n return \"id\";\n };\n\n Model.prototype.getName = function() {\n return this._name;\n };\n\n Model.prototype.getAttrs = function(patch) {\n if (patch == null) {\n patch = false;\n }\n if (this._attrs.version != null) {\n this._modifiedAttrs.version = this._attrs.version;\n }\n if (patch) {\n return _.extend({}, this._modifiedAttrs);\n }\n return _.extend({}, this._attrs, this._modifiedAttrs);\n };\n\n Model.prototype.setAttrs = function(attrs) {\n this._attrs = attrs;\n this._modifiedAttrs = {};\n this.applyCasts();\n return this._isModified = false;\n };\n\n Model.prototype.setAttr = function(name, value) {\n this._modifiedAttrs[name] = value;\n return this._isModified = true;\n };\n\n Model.prototype.initialize = function() {\n var getter, self, setter;\n self = this;\n getter = function(name) {\n return function() {\n if (typeof name === 'string' && name.substr(0, 2) === \"__\") {\n return self[name];\n }\n if (indexOf.call(_.keys(self._modifiedAttrs), name) < 0) {\n return self._attrs[name];\n }\n return self._modifiedAttrs[name];\n };\n };\n setter = function(name) {\n return function(value) {\n if (typeof name === 'string' && name.substr(0, 2) === \"__\") {\n self[name] = value;\n return;\n }\n if (self._attrs[name] !== value) {\n self._modifiedAttrs[name] = value;\n self._isModified = true;\n } else {\n delete self._modifiedAttrs[name];\n }\n };\n };\n return _.each(this._attrs, function(value, name) {\n var options;\n options = {\n get: getter(name),\n set: setter(name),\n enumerable: true,\n configurable: true\n };\n return Object.defineProperty(self, name, options);\n });\n };\n\n Model.prototype.serialize = function() {\n var data;\n data = {\n \"data\": _.clone(this._attrs),\n \"name\": this._name\n };\n return JSON.stringify(data);\n };\n\n Model.prototype.isModified = function() {\n return this._isModified;\n };\n\n Model.prototype.isAttributeModified = function(attribute) {\n return this._modifiedAttrs[attribute] != null;\n };\n\n Model.prototype.markSaved = function() {\n this._isModified = false;\n this._attrs = this.getAttrs();\n return this._modifiedAttrs = {};\n };\n\n Model.prototype.revert = function() {\n this._modifiedAttrs = {};\n return this._isModified = false;\n };\n\n Model.desSerialize = function(sdata) {\n var ddata, model;\n ddata = JSON.parse(sdata);\n model = new Model(ddata.url, ddata.data);\n return model;\n };\n\n return Model;\n\n })();\n\n taiga = this.taiga;\n\n ModelService = (function(superClass) {\n extend(ModelService, superClass);\n\n ModelService.$inject = [\"$q\", \"$tgUrls\", \"$tgStorage\", \"$tgHttp\"];\n\n function ModelService(q, urls, storage, http) {\n this.q = q;\n this.urls = urls;\n this.storage = storage;\n this.http = http;\n ModelService.__super__.constructor.call(this);\n }\n\n return ModelService;\n\n })(taiga.Service);\n\n provider = function($q, $http, $gmUrls, $gmStorage) {\n var service;\n service = {};\n service.make_model = function(name, data, cls, dataTypes) {\n if (cls == null) {\n cls = Model;\n }\n if (dataTypes == null) {\n dataTypes = {};\n }\n return new cls(name, data, dataTypes);\n };\n service.cls = Model;\n service.casts = {\n int: function(value) {\n return parseInt(value, 10);\n },\n float: function(value) {\n return parseFloat(value, 10);\n }\n };\n return service;\n };\n\n module = angular.module(\"taigaBase\");\n\n module.factory(\"$tgModel\", [\"$q\", \"$http\", \"$tgUrls\", \"$tgStorage\", provider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/navurls.coffee\n */\n\n(function() {\n var NavigationUrlsDirective, NavigationUrlsService, bindOnce, module, taiga, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaBase\");\n\n NavigationUrlsService = (function(superClass) {\n extend(NavigationUrlsService, superClass);\n\n function NavigationUrlsService() {\n this.urls = {};\n }\n\n NavigationUrlsService.prototype.update = function(urls) {\n return this.urls = _.merge({}, this.urls, urls || {});\n };\n\n NavigationUrlsService.prototype.formatUrl = function(url, ctx) {\n var replacer;\n if (ctx == null) {\n ctx = {};\n }\n replacer = function(match) {\n match = trim(match, \":\");\n return ctx[match] || \"undefined\";\n };\n return url.replace(/(:\\w+)/g, replacer);\n };\n\n NavigationUrlsService.prototype.resolve = function(name, ctx) {\n var url;\n url = this.urls[name];\n if (!url) {\n return \"\";\n }\n if (ctx) {\n return this.formatUrl(url, ctx);\n }\n return url;\n };\n\n return NavigationUrlsService;\n\n })(taiga.Service);\n\n module.service(\"$tgNavUrls\", NavigationUrlsService);\n\n NavigationUrlsDirective = function($navurls, $auth, $q, $location, lightboxService, tgSections) {\n var bindOnceP, link, parseNav;\n bindOnceP = function($scope, attr) {\n var defered;\n defered = $q.defer();\n bindOnce($scope, attr, function(v) {\n return defered.resolve(v);\n });\n return defered.promise;\n };\n parseNav = function(data, $scope) {\n var index, name, obj, params, promises, ref, result, values;\n ref = _.map(data.split(\":\"), trim), name = ref[0], params = ref[1];\n if (params) {\n result = params.split(/(\\w+)=/);\n result = _.filter(result, function(str) {\n return str.length;\n });\n result = _.map(result, function(str) {\n return trim(str.replace(/,$/g, ''));\n });\n params = [];\n index = 0;\n while (index < result.length) {\n obj = {};\n obj[result[index]] = result[index + 1];\n params.push(obj);\n index = index + 2;\n }\n } else {\n params = [];\n }\n values = _.map(params, function(param) {\n return _.values(param)[0];\n });\n promises = _.map(values, function(x) {\n return bindOnceP($scope, x);\n });\n return $q.all(promises).then(function() {\n var i, key, len, options, param, value;\n options = {};\n for (i = 0, len = params.length; i < len; i++) {\n param = params[i];\n key = Object.keys(param)[0];\n value = param[key];\n options[key] = $scope.$eval(value);\n }\n return [name, options];\n });\n };\n link = function($scope, $el, $attrs) {\n if ($el.is(\"a\")) {\n $el.attr(\"href\", \"#\");\n }\n $el.on(\"mouseenter\", function(event) {\n var target;\n target = $(event.currentTarget);\n if (!target.data(\"fullUrl\") || $attrs.tgNavGetParams !== target.data(\"params\")) {\n return parseNav($attrs.tgNav, $scope).then(function(result) {\n var fullUrl, getURLParams, getURLParamsStr, name, options, path, url, user;\n name = result[0], options = result[1];\n user = $auth.getUser();\n if (user) {\n options.user = user.username;\n }\n if (name === 'project') {\n path = tgSections.getPath(options['project'], options['section']);\n name = name + \"-\" + path;\n }\n url = $navurls.resolve(name);\n fullUrl = $navurls.formatUrl(url, options);\n if ($attrs.tgNavGetParams) {\n getURLParams = JSON.parse($attrs.tgNavGetParams);\n getURLParamsStr = $.param(getURLParams);\n fullUrl = fullUrl + \"?\" + getURLParamsStr;\n target.data(\"params\", $attrs.tgNavGetParams);\n }\n target.data(\"fullUrl\", fullUrl);\n if (target.is(\"a\")) {\n target.attr(\"href\", fullUrl);\n }\n return $el.on(\"click\", function(event) {\n if (event.metaKey || event.ctrlKey) {\n return;\n }\n event.preventDefault();\n target = $(event.currentTarget);\n if (target.hasClass('noclick')) {\n return;\n }\n fullUrl = target.data(\"fullUrl\");\n switch (event.which) {\n case 1:\n $location.url(fullUrl);\n $scope.$apply();\n break;\n case 2:\n window.open(fullUrl);\n }\n return lightboxService.closeAll();\n });\n });\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgNav\", [\"$tgNavUrls\", \"$tgAuth\", \"$q\", \"$tgLocation\", \"lightboxService\", \"$tgSections\", NavigationUrlsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/repository.coffee\n */\n\n(function() {\n var RepositoryService, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n RepositoryService = (function(superClass) {\n extend(RepositoryService, superClass);\n\n RepositoryService.$inject = [\"$q\", \"$tgModel\", \"$tgStorage\", \"$tgHttp\", \"$tgUrls\"];\n\n function RepositoryService(q, model1, storage, http, urls) {\n this.q = q;\n this.model = model1;\n this.storage = storage;\n this.http = http;\n this.urls = urls;\n RepositoryService.__super__.constructor.call(this);\n }\n\n RepositoryService.prototype.resolveUrlForModel = function(model) {\n var idAttrName;\n idAttrName = model.getIdAttrName();\n return (this.urls.resolve(model.getName())) + \"/\" + model[idAttrName];\n };\n\n RepositoryService.prototype.resolveUrlForAttributeModel = function(model) {\n return this.urls.resolve(model.getName(), model.parent);\n };\n\n RepositoryService.prototype.create = function(name, data, dataTypes, extraParams) {\n var defered, promise, url;\n if (dataTypes == null) {\n dataTypes = {};\n }\n if (extraParams == null) {\n extraParams = {};\n }\n defered = this.q.defer();\n url = this.urls.resolve(name);\n promise = this.http.post(url, JSON.stringify(data), extraParams);\n promise.success((function(_this) {\n return function(_data, _status) {\n return defered.resolve(_this.model.make_model(name, _data, null, dataTypes));\n };\n })(this));\n promise.error((function(_this) {\n return function(data, status) {\n return defered.reject(data);\n };\n })(this));\n return defered.promise;\n };\n\n RepositoryService.prototype.remove = function(model, params) {\n var defered, promise, url;\n if (params == null) {\n params = {};\n }\n defered = this.q.defer();\n url = this.resolveUrlForModel(model);\n promise = this.http[\"delete\"](url, {}, params);\n promise.success(function(data, status) {\n return defered.resolve(model);\n });\n promise.error(function(data, status) {\n return defered.reject(model);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.saveAll = function(models, patch) {\n var promises;\n if (patch == null) {\n patch = true;\n }\n promises = _.map(models, (function(_this) {\n return function(x) {\n return _this.save(x, true);\n };\n })(this));\n return this.q.all(promises);\n };\n\n RepositoryService.prototype.save = function(model, patch, params, options, returnHeaders) {\n var data, defered, promise, url;\n if (patch == null) {\n patch = true;\n }\n if (params == null) {\n params = {};\n }\n if (returnHeaders == null) {\n returnHeaders = false;\n }\n defered = this.q.defer();\n if (!model.isModified() && patch) {\n defered.resolve(model);\n return defered.promise;\n }\n url = this.resolveUrlForModel(model);\n data = JSON.stringify(model.getAttrs(patch));\n if (patch) {\n promise = this.http.patch(url, data, params, options);\n } else {\n promise = this.http.put(url, data, params, options);\n }\n promise.success((function(_this) {\n return function(data, status, headers, response) {\n model._isModified = false;\n model._attrs = _.extend(model.getAttrs(), data);\n model._modifiedAttrs = {};\n model.applyCasts();\n if (returnHeaders) {\n return defered.resolve([model, headers()]);\n } else {\n return defered.resolve(model);\n }\n };\n })(this));\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.saveAttribute = function(model, attribute, patch) {\n var data, defered, promise, url;\n if (patch == null) {\n patch = true;\n }\n defered = this.q.defer();\n if (!model.isModified() && patch) {\n defered.resolve(model);\n return defered.promise;\n }\n url = this.resolveUrlForAttributeModel(model);\n data = {};\n data[attribute] = model.getAttrs();\n if (patch) {\n promise = this.http.patch(url, data);\n } else {\n promise = this.http.put(url, data);\n }\n promise.success((function(_this) {\n return function(data, status) {\n model._isModified = false;\n model._attrs = _.extend(model.getAttrs(), data);\n model._modifiedAttrs = {};\n model.applyCasts();\n return defered.resolve(model);\n };\n })(this));\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.refresh = function(model) {\n var defered, promise, url;\n defered = this.q.defer();\n url = this.resolveUrlForModel(model);\n promise = this.http.get(url);\n promise.success(function(data, status) {\n model._modifiedAttrs = {};\n model._attrs = data;\n model._isModified = false;\n model.applyCasts();\n return defered.resolve(model);\n });\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.queryMany = function(name, params, options, headers) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n if (headers == null) {\n headers = false;\n }\n url = this.urls.resolve(name);\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var result;\n result = _.map(data.data, function(x) {\n return _this.model.make_model(name, x);\n });\n if (headers) {\n return [result, data.headers];\n }\n return result;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOneAttribute = function(name, id, attribute, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name, id);\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var model;\n model = _this.model.make_model(name, data.data[attribute]);\n model.parent = id;\n return model;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOne = function(name, id, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n if (id) {\n url = url + \"/\" + id;\n }\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n return _this.model.make_model(name, data.data);\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOneRaw = function(name, id, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n if (id) {\n url = url + \"/\" + id;\n }\n httpOptions = _.merge({\n headers: {}\n }, options);\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryPaginated = function(name, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n httpOptions = _.merge({\n headers: {}\n }, options);\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var headers, result;\n headers = data.headers();\n result = {};\n result.models = _.map(data.data, function(x) {\n return _this.model.make_model(name, x);\n });\n result.count = parseInt(headers[\"x-pagination-count\"], 10);\n result.current = parseInt(headers[\"x-pagination-current\"] || 1, 10);\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10);\n return result;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOnePaginatedRaw = function(name, id, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n if (id) {\n url = url + \"/\" + id;\n }\n httpOptions = _.merge({\n headers: {}\n }, options);\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var headers, result;\n headers = data.headers();\n result = {};\n result.data = data.data;\n result.count = parseInt(headers[\"x-pagination-count\"], 10);\n result.current = parseInt(headers[\"x-pagination-current\"] || 1, 10);\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10);\n return result;\n };\n })(this));\n };\n\n RepositoryService.prototype.resolve = function(options) {\n var cache, params;\n params = {};\n if (options.pslug != null) {\n params.project = options.pslug;\n }\n if (options.usref != null) {\n params.us = options.usref;\n }\n if (options.taskref != null) {\n params.task = options.taskref;\n }\n if (options.issueref != null) {\n params.issue = options.issueref;\n }\n if (options.sslug != null) {\n params.milestone = options.sslug;\n }\n if (options.wikipage != null) {\n params.wikipage = options.wikipage;\n }\n if (options.ref != null) {\n params.ref = options.ref;\n }\n cache = !(options.wikipage || options.sslug);\n return this.queryOneRaw(\"resolver\", null, params, {\n cache: cache\n });\n };\n\n return RepositoryService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgRepo\", RepositoryService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/storage.coffee\n */\n\n(function() {\n var StorageService, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n StorageService = (function(superClass) {\n extend(StorageService, superClass);\n\n StorageService.$inject = [\"$rootScope\"];\n\n function StorageService($rootScope) {\n StorageService.__super__.constructor.call(this);\n }\n\n StorageService.prototype.get = function(key, _default) {\n var serializedValue;\n serializedValue = localStorage.getItem(key);\n if (serializedValue === null) {\n return _default || null;\n }\n return JSON.parse(serializedValue);\n };\n\n StorageService.prototype.set = function(key, val) {\n if (_.isObject(key)) {\n return _.each(key, (function(_this) {\n return function(val, key) {\n return _this.set(key, val);\n };\n })(this));\n } else {\n return localStorage.setItem(key, JSON.stringify(val));\n }\n };\n\n StorageService.prototype.contains = function(key) {\n var value;\n value = this.get(key);\n return value !== null;\n };\n\n StorageService.prototype.remove = function(key) {\n return localStorage.removeItem(key);\n };\n\n StorageService.prototype.clear = function() {\n return localStorage.clear();\n };\n\n return StorageService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgStorage\", StorageService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/urls.coffee\n */\n\n(function() {\n var UrlsService, format, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n format = function(fmt, obj) {\n obj = _.clone(obj);\n return fmt.replace(/%s/g, function(match) {\n return String(obj.shift());\n });\n };\n\n taiga = this.taiga;\n\n UrlsService = (function(superClass) {\n extend(UrlsService, superClass);\n\n UrlsService.$inject = [\"$tgConfig\"];\n\n function UrlsService(config) {\n this.config = config;\n this.urls = {};\n this.mainUrl = this.config.get(\"api\");\n }\n\n UrlsService.prototype.update = function(urls) {\n return this.urls = _.merge(this.urls, urls);\n };\n\n UrlsService.prototype.resolve = function() {\n var args, name, url;\n args = _.toArray(arguments);\n if (args.length === 0) {\n throw Error(\"wrong arguments to setUrls\");\n }\n name = args.slice(0, 1)[0];\n url = format(this.urls[name], args.slice(1));\n return format(\"%s/%s\", [_.trimEnd(this.mainUrl, \"/\"), _.trimStart(url, \"/\")]);\n };\n\n UrlsService.prototype.resolveAbsolute = function() {\n var url;\n url = this.resolve.apply(this, arguments);\n if (/^https?:\\/\\//i.test(url)) {\n return url;\n }\n if (/^\\//.test(url)) {\n return window.location.protocol + \"//\" + window.location.host + url;\n }\n return window.location.protocol + \"//\" + window.location.host + \"/\" + url;\n };\n\n return UrlsService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service('$tgUrls', UrlsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/custom-attributes-values.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo) {\n var _get, service;\n _get = function(objectId, resource) {\n return $repo.queryOne(resource, objectId);\n };\n service = {\n epic: {\n get: function(objectId) {\n return _get(objectId, \"custom-attributes-values/epic\");\n }\n },\n userstory: {\n get: function(objectId) {\n return _get(objectId, \"custom-attributes-values/userstory\");\n }\n },\n task: {\n get: function(objectId) {\n return _get(objectId, \"custom-attributes-values/task\");\n }\n },\n issue: {\n get: function(objectId) {\n return _get(objectId, \"custom-attributes-values/issue\");\n }\n }\n };\n return function(instance) {\n return instance.customAttributesValues = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgCustomAttributesValuesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/custom-attributes.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($repo) {\n var _list, service;\n _list = function(projectId, resource) {\n return $repo.queryMany(resource, {\n project: projectId\n });\n };\n service = {\n epic: {\n list: function(projectId) {\n return _list(projectId, \"custom-attributes/epic\");\n }\n },\n userstory: {\n list: function(projectId) {\n return _list(projectId, \"custom-attributes/userstory\");\n }\n },\n task: {\n list: function(projectId) {\n return _list(projectId, \"custom-attributes/task\");\n }\n },\n issue: {\n list: function(projectId) {\n return _list(projectId, \"custom-attributes/issue\");\n }\n }\n };\n return function(instance) {\n return instance.customAttributes = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgCustomAttributesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/epics.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage) {\n var hashSuffix, service;\n service = {};\n hashSuffix = \"epics-queryparams\";\n service.getByRef = function(projectId, ref) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params.ref = ref;\n return $repo.queryOne(\"epics\", \"by_ref\", params);\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(type, params);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.upvote = function(epicId) {\n var url;\n url = $urls.resolve(\"epic-upvote\", epicId);\n return $http.post(url);\n };\n service.downvote = function(epicId) {\n var url;\n url = $urls.resolve(\"epic-downvote\", epicId);\n return $http.post(url);\n };\n service.watch = function(epicId) {\n var url;\n url = $urls.resolve(\"epic-watch\", epicId);\n return $http.post(url);\n };\n service.unwatch = function(epicId) {\n var url;\n url = $urls.resolve(\"epic-unwatch\", epicId);\n return $http.post(url);\n };\n return function(instance) {\n return instance.epics = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgEpicsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/history.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(type, objectId) {\n return $repo.queryOneRaw(\"history/\" + type, objectId);\n };\n service.editComment = function(type, objectId, activityId, comment) {\n var commentData, params, url;\n url = $urls.resolve(\"history/\" + type);\n url = url + \"/\" + objectId + \"/edit_comment\";\n params = {\n id: activityId\n };\n commentData = {\n comment: comment\n };\n return $http.post(url, commentData, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n service.getCommentHistory = function(type, objectId, activityId) {\n var params, url;\n url = $urls.resolve(\"history/\" + type);\n url = url + \"/\" + objectId + \"/comment_versions\";\n params = {\n id: activityId\n };\n return $http.get(url, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n service.deleteComment = function(type, objectId, activityId) {\n var params, url;\n url = $urls.resolve(\"history/\" + type);\n url = url + \"/\" + objectId + \"/delete_comment\";\n params = {\n id: activityId\n };\n return $http.post(url, null, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n service.undeleteComment = function(type, objectId, activityId) {\n var params, url;\n url = $urls.resolve(\"history/\" + type);\n url = url + \"/\" + objectId + \"/undelete_comment\";\n params = {\n id: activityId\n };\n return $http.post(url, null, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n return function(instance) {\n return instance.history = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgHistoryResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/invitations.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo) {\n var service;\n service = {};\n service.get = function(token) {\n return $repo.queryOne(\"invitations\", token);\n };\n return function(instance) {\n return instance.invitations = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgInvitationsResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/issues.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage, $q) {\n var hashSuffix, service;\n service = {};\n hashSuffix = \"issues-queryparams\";\n service.get = function(projectId, issueId) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n return $repo.queryOne(\"issues\", issueId, params);\n };\n service.getByRef = function(projectId, ref) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params.ref = ref;\n return $repo.queryOne(\"issues\", \"by_ref\", params);\n };\n service.listInAllProjects = function(filters) {\n return $repo.queryMany(\"issues\", filters);\n };\n service.list = function(projectId, filters, options) {\n var params;\n params = {\n project: projectId\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryPaginated(\"issues\", params, options);\n };\n service.listInProject = function(projectId, sprintId, params) {\n if (sprintId == null) {\n sprintId = null;\n }\n params = _.merge(params, {\n project: projectId\n });\n if (sprintId) {\n params.milestone = sprintId;\n }\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"issues\", params);\n };\n service.bulkCreate = function(projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-create-issues\");\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_issues: data\n };\n return $http.post(url, params);\n };\n service.upvote = function(issueId) {\n var url;\n url = $urls.resolve(\"issue-upvote\", issueId);\n return $http.post(url);\n };\n service.downvote = function(issueId) {\n var url;\n url = $urls.resolve(\"issue-downvote\", issueId);\n return $http.post(url);\n };\n service.watch = function(issueId) {\n var url;\n url = $urls.resolve(\"issue-watch\", issueId);\n return $http.post(url);\n };\n service.unwatch = function(issueId) {\n var url;\n url = $urls.resolve(\"issue-unwatch\", issueId);\n return $http.post(url);\n };\n service.stats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", projectId + \"/issues_stats\");\n };\n service.filtersData = function(params) {\n return $repo.queryOneRaw(\"issues-filters\", null, params);\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(type, params);\n };\n service.createDefaultValues = function(projectId, type) {\n var data, url;\n data = {\n \"project_id\": projectId\n };\n url = $urls.resolve(type + \"-create-default\");\n return $http.post(url, data);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.bulkUpdateMilestone = function(projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-issue-milestone\");\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_issues: data\n };\n return $http.post(url, params);\n };\n return function(instance) {\n return instance.issues = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgIssuesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/kanban.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($storage) {\n var hashSuffixStatusColumnModes, hashSuffixStatusViewModes, service;\n service = {};\n hashSuffixStatusViewModes = \"kanban-statusviewmodels\";\n hashSuffixStatusColumnModes = \"kanban-statuscolumnmodels\";\n service.storeStatusColumnModes = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getStatusColumnModes = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n return function(instance) {\n return instance.kanban = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgKanbanResourcesProvider\", [\"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/locales.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($repo) {\n var service;\n service = {\n list: function() {\n return $repo.queryMany(\"locales\");\n }\n };\n return function(instance) {\n return instance.locales = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgLocalesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/mdrender.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $urls, $http) {\n var service;\n service = {};\n service.render = function(projectId, content) {\n var params, url;\n if ((content == null) || content === \"\") {\n content = ' ';\n }\n params = {\n project_id: projectId,\n content: content\n };\n url = $urls.resolve(\"wiki\");\n return $http.post(url + \"/render\", params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n return function(instance) {\n return instance.mdrender = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgMdRenderResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/memberships.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"memberships\", id);\n };\n service.list = function(projectId, filters, enablePagination) {\n var options, params;\n if (enablePagination == null) {\n enablePagination = true;\n }\n params = {\n project: projectId\n };\n params = _.extend({}, params, filters || {});\n if (enablePagination) {\n return $repo.queryPaginated(\"memberships\", params);\n }\n return $repo.queryMany(\"memberships\", params, options = {\n enablePagination: enablePagination\n });\n };\n service.listByUser = function(userId, filters) {\n var params;\n params = {\n user: userId\n };\n params = _.extend({}, params, filters || {});\n return $repo.queryPaginated(\"memberships\", params);\n };\n service.resendInvitation = function(id) {\n var url;\n url = $urls.resolve(\"memberships\");\n return $http.post(url + \"/\" + id + \"/resend_invitation\", {});\n };\n service.bulkCreateMemberships = function(projectId, data, invitation_extra_text) {\n var params, url;\n url = $urls.resolve(\"bulk-create-memberships\");\n params = {\n project_id: projectId,\n bulk_memberships: data,\n invitation_extra_text: invitation_extra_text\n };\n return $http.post(url, params);\n };\n return function(instance) {\n return instance.memberships = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgMembershipsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/modules.coffee\n */\n\n(function() {\n var module, resourceProvider;\n\n resourceProvider = function($repo) {\n var service;\n service = {};\n service.list = function(projectId, module) {\n return $repo.queryOneAttribute(\"project-modules\", projectId, module);\n };\n return function(instance) {\n return instance.modules = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgModulesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/notify-policies.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"notify-policies\", id);\n };\n service.list = function(filters) {\n var params;\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"notify-policies\", params);\n };\n return function(instance) {\n return instance.notifyPolicies = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgNotifyPoliciesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/projects.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($config, $repo, $http, $urls, $auth, $q, $translate) {\n var service;\n service = {};\n service.get = function(projectId) {\n return $repo.queryOne(\"projects\", projectId);\n };\n service.getBySlug = function(projectSlug) {\n return $repo.queryOne(\"projects\", \"by_slug?slug=\" + projectSlug);\n };\n service.list = function(filters) {\n var params;\n params = {\n \"order_by\": \"user_order\"\n };\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"projects\", params);\n };\n service.listByMember = function(memberId) {\n var params;\n params = {\n \"member\": memberId,\n \"order_by\": \"user_order\"\n };\n return $repo.queryMany(\"projects\", params);\n };\n service.templates = function() {\n return $repo.queryMany(\"project-templates\");\n };\n service.usersList = function(projectId) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(\"users\", params);\n };\n service.rolesList = function(projectId) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(\"roles\", params);\n };\n service.stats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", projectId + \"/stats\");\n };\n service.bulkUpdateOrder = function(bulkData) {\n var url;\n url = $urls.resolve(\"bulk-update-projects-order\");\n return $http.post(url, bulkData);\n };\n service.regenerate_epics_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/regenerate_epics_csv_uuid\";\n return $http.post(url);\n };\n service.regenerate_userstories_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/regenerate_userstories_csv_uuid\";\n return $http.post(url);\n };\n service.regenerate_tasks_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/regenerate_tasks_csv_uuid\";\n return $http.post(url);\n };\n service.regenerate_issues_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/regenerate_issues_csv_uuid\";\n return $http.post(url);\n };\n service.delete_epics_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_epics_csv_uuid\";\n return $http.post(url);\n };\n service.delete_userstories_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_userstories_csv_uuid\";\n return $http.post(url);\n };\n service.delete_tasks_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_tasks_csv_uuid\";\n return $http.post(url);\n };\n service.delete_issues_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_issues_csv_uuid\";\n return $http.post(url);\n };\n service.leave = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/leave\";\n return $http.post(url);\n };\n service.memberStats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", projectId + \"/member_stats\");\n };\n service.tagsColors = function(projectId) {\n return $repo.queryOne(\"projects\", projectId + \"/tags_colors\");\n };\n service.deleteTag = function(projectId, tag) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_tag\";\n return $http.post(url, {\n tag: tag\n });\n };\n service.createTag = function(projectId, tag, color) {\n var data, url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/create_tag\";\n data = {};\n data.tag = tag;\n data.color = null;\n if (color) {\n data.color = color;\n }\n return $http.post(url, data);\n };\n service.editTag = function(projectId, from_tag, to_tag, color) {\n var data, url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/edit_tag\";\n data = {};\n data.from_tag = from_tag;\n if (to_tag) {\n data.to_tag = to_tag;\n }\n data.color = null;\n if (color) {\n data.color = color;\n }\n return $http.post(url, data);\n };\n service.mixTags = function(projectId, to_tag, from_tags) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/mix_tags\";\n return $http.post(url, {\n to_tag: to_tag,\n from_tags: from_tags\n });\n };\n service[\"export\"] = function(projectId) {\n var url;\n url = ($urls.resolve(\"exporter\")) + \"/\" + projectId;\n return $http.get(url);\n };\n service[\"import\"] = function(file, statusUpdater) {\n var complete, data, defered, errorMsg, failed, maxFileSize, response, uploadComplete, uploadFailed, uploadProgress, xhr;\n defered = $q.defer();\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR_MAX_SIZE_EXCEEDED\", {\n fileName: file.name,\n fileSize: sizeFormat(file.size),\n maxFileSize: sizeFormat(maxFileSize)\n });\n response = {\n status: 413,\n data: {\n _error_message: errorMsg\n }\n };\n defered.reject(response);\n return defered.promise;\n }\n uploadProgress = (function(_this) {\n return function(evt) {\n var message, percent;\n percent = Math.round((evt.loaded / evt.total) * 100);\n message = $translate.instant(\"PROJECT.IMPORT.UPLOAD_IN_PROGRESS_MESSAGE\", {\n uploadedSize: sizeFormat(evt.loaded),\n totalSize: sizeFormat(evt.total)\n });\n return statusUpdater(\"in-progress\", null, message, percent);\n };\n })(this);\n uploadComplete = (function(_this) {\n return function(evt) {\n return statusUpdater(\"done\", $translate.instant(\"PROJECT.IMPORT.TITLE\"), $translate.instant(\"PROJECT.IMPORT.DESCRIPTION\"));\n };\n })(this);\n uploadFailed = (function(_this) {\n return function(evt) {\n return statusUpdater(\"error\");\n };\n })(this);\n complete = (function(_this) {\n return function(evt) {\n var ref;\n response = {};\n try {\n response.data = JSON.parse(evt.target.responseText);\n } catch (error) {\n response.data = {};\n }\n response.status = evt.target.status;\n if (evt.target.getResponseHeader('Taiga-Info-Project-Is-Private')) {\n response.headers = {\n isPrivate: evt.target.getResponseHeader('Taiga-Info-Project-Is-Private') === 'True',\n memberships: parseInt(evt.target.getResponseHeader('Taiga-Info-Project-Memberships'))\n };\n }\n if ((ref = response.status) === 201 || ref === 202) {\n defered.resolve(response);\n }\n return defered.reject(response);\n };\n })(this);\n failed = (function(_this) {\n return function(evt) {\n return defered.reject(\"fail\");\n };\n })(this);\n data = new FormData();\n data.append('dump', file);\n xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", uploadProgress, false);\n xhr.upload.addEventListener(\"load\", uploadComplete, false);\n xhr.upload.addEventListener(\"error\", uploadFailed, false);\n xhr.upload.addEventListener(\"abort\", uploadFailed, false);\n xhr.addEventListener(\"load\", complete, false);\n xhr.addEventListener(\"error\", failed, false);\n xhr.open(\"POST\", $urls.resolve(\"importer\"));\n xhr.setRequestHeader(\"Authorization\", \"Bearer \" + ($auth.getToken()));\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send(data);\n return defered.promise;\n };\n service.changeLogo = function(projectId, file) {\n var data, defered, maxFileSize, options, response, url;\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n response = {\n status: 413,\n data: {\n _error_message: \"'\" + file.name + \"' (\" + (sizeFormat(file.size)) + \") is too heavy for our oompa loompas, try it with a smaller than (\" + (sizeFormat(maxFileSize)) + \")\"\n }\n };\n defered = $q.defer();\n defered.reject(response);\n return defered.promise;\n }\n data = new FormData();\n data.append('logo', file);\n options = {\n transformRequest: angular.identity,\n headers: {\n 'Content-Type': void 0\n }\n };\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/change_logo\";\n return $http.post(url, data, {}, options);\n };\n service.removeLogo = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/remove_logo\";\n return $http.post(url);\n };\n return function(instance) {\n return instance.projects = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgProjectsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgAuth\", \"$q\", \"$translate\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/roles.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"roles\", id);\n };\n service.list = function(projectId) {\n return $repo.queryMany(\"roles\", {\n project: projectId\n });\n };\n return function(instance) {\n return instance.roles = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgRolesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/search.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $urls, $http, $q) {\n var service;\n service = {};\n service[\"do\"] = function(projectId, term) {\n var deferredAbort, params, request, url;\n deferredAbort = $q.defer();\n url = $urls.resolve(\"search\");\n params = {\n url: url,\n method: \"GET\",\n timeout: deferredAbort.promise,\n cancelable: true,\n params: {\n project: projectId,\n text: term,\n get_all: false\n }\n };\n request = $http.request(params).then(function(data) {\n return data.data;\n });\n request.abort = function() {\n return deferredAbort.resolve();\n };\n request[\"finally\"] = function() {\n request.abort = angular.noop;\n return deferredAbort = request = null;\n };\n return request;\n };\n return function(instance) {\n return instance.search = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgSearchResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/sprints.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $model, $storage, $http, $urls) {\n var service;\n service = {};\n service.get = function(projectId, sprintId) {\n return $repo.queryOne(\"milestones\", sprintId).then(function(sprint) {\n var uses;\n uses = sprint.user_stories;\n uses = _.map(uses, function(u) {\n return $model.make_model(\"userstories\", u);\n });\n sprint._attrs.user_stories = uses;\n return sprint;\n });\n };\n service.stats = function(projectId, sprintId) {\n return $repo.queryOneRaw(\"milestones\", sprintId + \"/stats\");\n };\n service.list = function(projectId, filters) {\n var params;\n params = {\n \"project\": projectId\n };\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"milestones\", params, {}, true).then((function(_this) {\n return function(result) {\n var headers, i, len, m, milestones, uses;\n milestones = result[0];\n headers = result[1];\n for (i = 0, len = milestones.length; i < len; i++) {\n m = milestones[i];\n uses = m.user_stories;\n uses = _.map(uses, function(u) {\n return $model.make_model(\"userstories\", u);\n });\n m._attrs.user_stories = uses;\n }\n return {\n milestones: milestones,\n closed: parseInt(headers(\"Taiga-Info-Total-Closed-Milestones\"), 10),\n open: parseInt(headers(\"Taiga-Info-Total-Opened-Milestones\"), 10)\n };\n };\n })(this));\n };\n service.moveUserStoriesMilestone = function(currentMilestoneId, projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"move-userstories-to-milestone\", currentMilestoneId);\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.moveTasksMilestone = function(currentMilestoneId, projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"move-tasks-to-milestone\", currentMilestoneId);\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_tasks: data\n };\n return $http.post(url, params);\n };\n service.moveIssuesMilestone = function(currentMilestoneId, projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"move-issues-to-milestone\", currentMilestoneId);\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_issues: data\n };\n return $http.post(url, params);\n };\n return function(instance) {\n return instance.sprints = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgSprintsResourcesProvider\", [\"$tgRepo\", \"$tgModel\", \"$tgStorage\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/tasks.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage) {\n var hashSuffix, hashSuffixStatusColumnModes, hashSuffixUsRowModes, service;\n service = {};\n hashSuffix = \"tasks-queryparams\";\n hashSuffixStatusColumnModes = \"tasks-statuscolumnmodels\";\n hashSuffixUsRowModes = \"tasks-usrowmodels\";\n service.get = function(projectId, taskId, extraParams) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params = _.extend({}, params, extraParams);\n return $repo.queryOne(\"tasks\", taskId, params);\n };\n service.getByRef = function(projectId, ref, extraParams) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params.ref = ref;\n params = _.extend({}, params, extraParams);\n return $repo.queryOne(\"tasks\", \"by_ref\", params);\n };\n service.listInAllProjects = function(filters) {\n return $repo.queryMany(\"tasks\", filters);\n };\n service.filtersData = function(params) {\n return $repo.queryOneRaw(\"task-filters\", null, params);\n };\n service.list = function(projectId, sprintId, userStoryId, params) {\n if (sprintId == null) {\n sprintId = null;\n }\n if (userStoryId == null) {\n userStoryId = null;\n }\n params = _.merge(params, {\n project: projectId,\n order_by: 'us_order'\n });\n if (sprintId) {\n params.milestone = sprintId;\n }\n if (userStoryId) {\n params.user_story = userStoryId;\n }\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"tasks\", params);\n };\n service.bulkCreate = function(projectId, sprintId, usId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-create-tasks\");\n params = {\n project_id: projectId,\n milestone_id: sprintId,\n us_id: usId,\n bulk_tasks: data\n };\n return $http.post(url, params).then(function(result) {\n return result.data;\n });\n };\n service.upvote = function(taskId) {\n var url;\n url = $urls.resolve(\"task-upvote\", taskId);\n return $http.post(url);\n };\n service.downvote = function(taskId) {\n var url;\n url = $urls.resolve(\"task-downvote\", taskId);\n return $http.post(url);\n };\n service.watch = function(taskId) {\n var url;\n url = $urls.resolve(\"task-watch\", taskId);\n return $http.post(url);\n };\n service.unwatch = function(taskId) {\n var url;\n url = $urls.resolve(\"task-unwatch\", taskId);\n return $http.post(url);\n };\n service.bulkUpdateTaskTaskboardOrder = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-task-taskboard-order\");\n params = {\n project_id: projectId,\n bulk_tasks: data\n };\n return $http.post(url, params);\n };\n service.bulkUpdateMilestone = function(projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-task-milestone\");\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_tasks: data\n };\n return $http.post(url, params);\n };\n service.reorder = function(id, data, setOrders) {\n var options, url;\n url = $urls.resolve(\"tasks\") + (\"/\" + id);\n options = {\n \"headers\": {\n \"set-orders\": JSON.stringify(setOrders)\n }\n };\n return $http.patch(url, data, null, options).then(function(result) {\n return result.data;\n });\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(type, params);\n };\n service.createDefaultValues = function(projectId, type) {\n var data, url;\n data = {\n \"project_id\": projectId\n };\n url = $urls.resolve(type + \"-create-default\");\n return $http.post(url, data);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeStatusColumnModes = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getStatusColumnModes = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeUsRowModes = function(projectId, sprintId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixUsRowModes;\n hash = generateHash([projectId, sprintId, ns]);\n return $storage.set(hash, params);\n };\n service.getUsRowModes = function(projectId, sprintId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixUsRowModes;\n hash = generateHash([projectId, sprintId, ns]);\n return $storage.get(hash) || {};\n };\n return function(instance) {\n return instance.tasks = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgTasksResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/user-project-settings.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"user-project-settings\", id);\n };\n service.list = function(filters) {\n var params;\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"user-project-settings\", params);\n };\n return function(instance) {\n return instance.userProjectSettings = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUserProjectSettingsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/user-settings.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($config, $repo, $http, $urls, $q) {\n var service;\n service = {};\n service.changeAvatar = function(file) {\n var data, defered, maxFileSize, options, response, url;\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n response = {\n status: 413,\n data: {\n _error_message: \"'\" + file.name + \"' (\" + (sizeFormat(file.size)) + \") is too heavy for our oompa loompas, try it with a smaller than (\" + (sizeFormat(maxFileSize)) + \")\"\n }\n };\n defered = $q.defer();\n defered.reject(response);\n return defered.promise;\n }\n data = new FormData();\n data.append('avatar', file);\n options = {\n transformRequest: angular.identity,\n headers: {\n 'Content-Type': void 0\n }\n };\n url = ($urls.resolve(\"users\")) + \"/change_avatar\";\n return $http.post(url, data, {}, options);\n };\n service.removeAvatar = function() {\n var url;\n url = ($urls.resolve(\"users\")) + \"/remove_avatar\";\n return $http.post(url);\n };\n service.changePassword = function(currentPassword, newPassword) {\n var data, url;\n url = ($urls.resolve(\"users\")) + \"/change_password\";\n data = {\n current_password: currentPassword,\n password: newPassword\n };\n return $http.post(url, data);\n };\n return function(instance) {\n return instance.userSettings = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUserSettingsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/users.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($http, $urls) {\n var service;\n service = {};\n service.contacts = function(userId, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = $urls.resolve(\"user-contacts\", userId);\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return $http.get(url, {}, httpOptions).then(function(result) {\n return result.data;\n });\n };\n return function(instance) {\n return instance.users = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUsersResourcesProvider\", [\"$tgHttp\", \"$tgUrls\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/userstories.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage, $q) {\n var hashSuffix, service;\n service = {};\n hashSuffix = \"userstories-queryparams\";\n service.get = function(projectId, usId, extraParams) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params = _.extend({}, params, extraParams);\n return $repo.queryOne(\"userstories\", usId, params);\n };\n service.getByRef = function(projectId, ref, extraParams) {\n var params;\n if (extraParams == null) {\n extraParams = {};\n }\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params.ref = ref;\n params = _.extend({}, params, extraParams);\n return $repo.queryOne(\"userstories\", \"by_ref\", params);\n };\n service.listInAllProjects = function(filters) {\n return $repo.queryMany(\"userstories\", filters);\n };\n service.filtersData = function(params) {\n return $repo.queryOneRaw(\"userstories-filters\", null, params);\n };\n service.listUnassigned = function(projectId, filters, pageSize) {\n var params;\n params = {\n \"project\": projectId,\n \"milestone\": \"null\"\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"userstories\", _.extend(params, {\n page_size: pageSize\n }), {\n enablePagination: true\n }, true);\n };\n service.listAll = function(projectId, filters) {\n var params;\n params = {\n \"project\": projectId\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"userstories\", params);\n };\n service.bulkCreate = function(projectId, status, bulk) {\n var data, url;\n data = {\n project_id: projectId,\n status_id: status,\n bulk_stories: bulk\n };\n url = $urls.resolve(\"bulk-create-us\");\n return $http.post(url, data);\n };\n service.upvote = function(userStoryId) {\n var url;\n url = $urls.resolve(\"userstory-upvote\", userStoryId);\n return $http.post(url);\n };\n service.downvote = function(userStoryId) {\n var url;\n url = $urls.resolve(\"userstory-downvote\", userStoryId);\n return $http.post(url);\n };\n service.watch = function(userStoryId) {\n var url;\n url = $urls.resolve(\"userstory-watch\", userStoryId);\n return $http.post(url);\n };\n service.unwatch = function(userStoryId) {\n var url;\n url = $urls.resolve(\"userstory-unwatch\", userStoryId);\n return $http.post(url);\n };\n service.bulkUpdateBacklogOrder = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-backlog-order\");\n params = {\n project_id: projectId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.bulkUpdateMilestone = function(projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-milestone\");\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.bulkUpdateKanbanOrder = function(projectId, statusId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-kanban-order\");\n params = {\n project_id: projectId,\n status_id: statusId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(type, params);\n };\n service.createDefaultValues = function(projectId, type) {\n var data, url;\n data = {\n \"project_id\": projectId\n };\n url = $urls.resolve(type + \"-create-default\");\n return $http.post(url, data);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeShowTags = function(projectId, showTags) {\n var hash;\n hash = generateHash([projectId, 'showTags']);\n return $storage.set(hash, showTags);\n };\n service.getShowTags = function(projectId) {\n var hash;\n hash = generateHash([projectId, 'showTags']);\n return $storage.get(hash) || null;\n };\n return function(instance) {\n return instance.userstories = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUserstoriesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/webhooklogs.coffee\n */\n\n(function() {\n var module, resourceProvider;\n\n resourceProvider = function($repo, $urls, $http) {\n var service;\n service = {};\n service.list = function(webhookId) {\n var params;\n params = {\n webhook: webhookId\n };\n return $repo.queryMany(\"webhooklogs\", params);\n };\n service.resend = function(webhooklogId) {\n var url;\n url = $urls.resolve(\"webhooklogs-resend\", webhooklogId);\n return $http.post(url);\n };\n return function(instance) {\n return instance.webhooklogs = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgWebhookLogsResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/webhooks.coffee\n */\n\n(function() {\n var module, resourceProvider;\n\n resourceProvider = function($repo, $urls, $http) {\n var service;\n service = {};\n service.list = function(projectId) {\n var params;\n params = {\n project: projectId\n };\n return $repo.queryMany(\"webhooks\", params);\n };\n service.test = function(webhookId) {\n var url;\n url = $urls.resolve(\"webhooks-test\", webhookId);\n return $http.post(url);\n };\n return function(instance) {\n return instance.webhooks = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgWebhooksResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/wiki.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(wikiId) {\n return $repo.queryOne(\"wiki\", wikiId);\n };\n service.getBySlug = function(projectId, slug) {\n return $repo.queryOne(\"wiki\", \"by_slug?project=\" + projectId + \"&slug=\" + slug);\n };\n service.list = function(projectId) {\n return $repo.queryMany(\"wiki\", {\n project: projectId\n });\n };\n service.listLinks = function(projectId) {\n return $repo.queryMany(\"wiki-links\", {\n project: projectId\n });\n };\n return function(instance) {\n return instance.wiki = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgWikiResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/change-password.coffee\n */\n\n(function() {\n var UserChangePasswordController, UserChangePasswordDirective, debounce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserChangePasswordController = (function(superClass) {\n extend(UserChangePasswordController, superClass);\n\n UserChangePasswordController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\", \"$translate\"];\n\n function UserChangePasswordController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, auth, translate) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.translate = translate;\n this.scope.sectionName = this.translate.instant(\"CHANGE_PASSWORD.SECTION_NAME\");\n this.scope.user = this.auth.getUser();\n }\n\n return UserChangePasswordController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserChangePasswordController\", UserChangePasswordController);\n\n UserChangePasswordDirective = function($rs, $confirm, $loading, $translate) {\n var link;\n link = function($scope, $el, $attrs, ctrl) {\n var form, submit, submitButton;\n form = new checksley.Form($el.find(\"form\"));\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n if ($scope.newPassword1 !== $scope.newPassword2) {\n $confirm.notify('error', $translate.instant(\"CHANGE_PASSWORD.ERROR_PASSWORD_MATCH\"));\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $rs.userSettings.changePassword($scope.currentPassword, $scope.newPassword1);\n promise.then(function() {\n currentLoading.finish();\n return $confirm.notify('success');\n });\n return promise.then(null, function(response) {\n currentLoading.finish();\n return $confirm.notify('error', response.data._error_message);\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserChangePassword\", [\"$tgResources\", \"$tgConfirm\", \"$tgLoading\", \"$translate\", UserChangePasswordDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/lightboxes.coffee\n */\n\n(function() {\n var DeleteUserDirective, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaUserSettings\");\n\n DeleteUserDirective = function($repo, $rootscope, $auth, $location, $navUrls, lightboxService, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit, submitButton;\n $scope.$on(\"deletelightbox:new\", function(ctx, user) {\n return lightboxService.open($el);\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n submit = function() {\n var currentLoading, promise;\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.remove($scope.user);\n promise.then(function(data) {\n currentLoading.finish();\n lightboxService.close($el);\n $auth.logout();\n return $location.path($navUrls.resolve(\"login\"));\n });\n return promise.then(null, function() {\n currentLoading.finish();\n return console.log(\"FAIL\");\n });\n };\n $el.on(\"click\", \".button-green\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n $el.on(\"click\", \".button-red\", debounce(2000, function(event) {\n event.preventDefault();\n return submit();\n }));\n return submitButton = $el.find(\".button-red\");\n };\n return {\n link: link,\n templateUrl: \"user/lightbox/lightbox-delete-account.html\"\n };\n };\n\n module.directive(\"tgLbDeleteUser\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\", \"lightboxService\", \"$tgLoading\", DeleteUserDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/live-notifications.coffee\n */\n\n(function() {\n var UserLiveNotificationsController, UserLiveNotificationsDirective, UserLiveNotificationsListDirective, bindOnce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserLiveNotificationsController = (function(superClass) {\n extend(UserLiveNotificationsController, superClass);\n\n UserLiveNotificationsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\", \"tgErrorHandlingService\"];\n\n function UserLiveNotificationsController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, auth, errorHandlingService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.errorHandlingService = errorHandlingService;\n this.scope.sectionName = \"USER_SETTINGS.EVENTS.LIVE_SECTION_NAME\";\n this.scope.user = this.auth.getUser();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserLiveNotificationsController.prototype.loadInitialData = function() {\n return this.rs.notifyPolicies.list().then((function(_this) {\n return function(notifyPolicies) {\n _this.scope.notifyPolicies = notifyPolicies;\n return notifyPolicies;\n };\n })(this));\n };\n\n return UserLiveNotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserLiveNotificationsController\", UserLiveNotificationsController);\n\n UserLiveNotificationsDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserLiveNotifications\", UserLiveNotificationsDirective);\n\n UserLiveNotificationsListDirective = function($repo, $confirm, $compile) {\n var link, template;\n template = _.template(\"<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\\n
    \\\">\\n
    <%- notifyPolicy.project_name %>
    \\n
    \\n
    \\n \\\" id=\\\"policy-all-<%- notifyPolicy.id %>\\\"\\n value=\\\"2\\\" <% if (notifyPolicy.live_notify_level == 2) { %>checked=\\\"checked\\\"<% } %>/>\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-involved-<%- notifyPolicy.id %>\\\"\\n value=\\\"1\\\" <% if (notifyPolicy.live_notify_level == 1) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-none-<%- notifyPolicy.id %>\\\"\\n value=\\\"3\\\" <% if (notifyPolicy.live_notify_level == 3) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function() {\n var ctx, html;\n $el.off();\n ctx = {\n notifyPolicies: $scope.notifyPolicies\n };\n html = template(ctx);\n $el.html($compile(html)($scope));\n return $el.on(\"change\", \"input[type=radio]\", function(event) {\n var onError, onSuccess, policy, policyIndex, prev_level, target;\n target = angular.element(event.currentTarget);\n policyIndex = target.parents(\".policy-table-row\").data('index');\n policy = $scope.notifyPolicies[policyIndex];\n prev_level = policy.live_notify_level;\n policy.live_notify_level = parseInt(target.val(), 10);\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function() {\n $confirm.notify(\"error\");\n return target.parents(\".policy-table-row\").find(\"input[value=\" + prev_level + \"]\").prop(\"checked\", true);\n };\n return $repo.save(policy).then(onSuccess, onError);\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return bindOnce($scope, $attrs.ngModel, render);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserLiveNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", \"$compile\", UserLiveNotificationsListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/main.coffee\n */\n\n(function() {\n var TaigaAvatarModelDirective, UserAvatarDirective, UserProfileDirective, UserSettingsController, debounce, mixOf, module, sizeFormat, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n sizeFormat = this.taiga.sizeFormat;\n\n module = angular.module(\"taigaUserSettings\");\n\n debounce = this.taiga.debounce;\n\n UserSettingsController = (function(superClass) {\n extend(UserSettingsController, superClass);\n\n UserSettingsController.$inject = [\"$scope\", \"$rootScope\", \"$tgConfig\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\", \"$translate\", \"tgErrorHandlingService\", \"$window\"];\n\n function UserSettingsController(scope, rootscope, config, repo, confirm, rs, params, q, location, navUrls, auth, translate, errorHandlingService, window) {\n var maxFileSize, promise, text;\n this.scope = scope;\n this.rootscope = rootscope;\n this.config = config;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.window = window;\n this.scope.sectionName = \"USER_SETTINGS.MENU.SECTION_TITLE\";\n this.scope.project = {};\n this.scope.user = this.auth.getUser();\n if (!this.scope.user) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.lang = this.getLan();\n this.scope.theme = this.getTheme();\n maxFileSize = this.config.get(\"maxUploadFileSize\", null);\n if (maxFileSize) {\n text = this.translate.instant(\"USER_SETTINGS.AVATAR_MAX_SIZE\", {\n \"maxFileSize\": sizeFormat(maxFileSize)\n });\n this.scope.maxFileSizeMsg = text;\n }\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserSettingsController.prototype.loadInitialData = function() {\n this.scope.availableThemes = this.config.get(\"themes\", []);\n return this.rs.locales.list().then((function(_this) {\n return function(locales) {\n _this.scope.locales = locales;\n return locales;\n };\n })(this));\n };\n\n UserSettingsController.prototype.openDeleteLightbox = function() {\n return this.rootscope.$broadcast(\"deletelightbox:new\", this.scope.user);\n };\n\n UserSettingsController.prototype.getLan = function() {\n return this.scope.user.lang || this.translate.preferredLanguage();\n };\n\n UserSettingsController.prototype.getTheme = function() {\n return this.scope.user.theme || this.config.get(\"defaultTheme\") || \"taiga\";\n };\n\n UserSettingsController.prototype.exportProfile = function() {\n var onError, onSuccess;\n onSuccess = function(result) {\n var dumpUrl;\n dumpUrl = result.data.url;\n return this.window.open(dumpUrl, \"_blank\");\n };\n onError = (function(_this) {\n return function(response) {\n var ref;\n if ((ref = response.data) != null ? ref._error_message : void 0) {\n return _this.confirm.notify(\"error\", response.data._error_message);\n }\n };\n })(this);\n return this.auth.exportProfile().then(onSuccess, onError);\n };\n\n return UserSettingsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserSettingsController\", UserSettingsController);\n\n UserProfileDirective = function($confirm, $auth, $repo, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit;\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var changeEmail, form, onError, onSuccess;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n changeEmail = $scope.user.isAttributeModified(\"email\");\n $scope.user.lang = $scope.lang;\n $scope.user.theme = $scope.theme;\n onSuccess = function(data) {\n var text;\n $auth.setUser(data);\n if (changeEmail) {\n text = $translate.instant(\"USER_PROFILE.CHANGE_EMAIL_SUCCESS\");\n return $confirm.success(text);\n } else {\n return $confirm.notify('success');\n }\n };\n onError = function(data) {\n form.setErrors(data);\n return $confirm.notify('error', data._error_message);\n };\n return $repo.save($scope.user).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserProfile\", [\"$tgConfirm\", \"$tgAuth\", \"$tgRepo\", \"$translate\", UserProfileDirective]);\n\n UserAvatarDirective = function($auth, $model, $rs, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n var onError, onSuccess, showSizeInfo;\n showSizeInfo = function() {\n return $el.find(\".size-info\").removeClass(\"hidden\");\n };\n onSuccess = function(response) {\n var user;\n user = $model.make_model(\"users\", response.data);\n $auth.setUser(user);\n $scope.user = user;\n $el.find('.loading-overlay').removeClass('active');\n return $confirm.notify('success');\n };\n onError = function(response) {\n if (response.status === 413) {\n showSizeInfo();\n }\n $el.find('.loading-overlay').removeClass('active');\n return $confirm.notify('error', response.data._error_message);\n };\n $el.on(\"click\", \".js-change-avatar\", function() {\n return $el.find(\"#avatar-field\").click();\n });\n $el.on(\"change\", \"#avatar-field\", function(event) {\n if ($scope.avatarAttachment) {\n $el.find('.loading-overlay').addClass(\"active\");\n return $rs.userSettings.changeAvatar($scope.avatarAttachment).then(onSuccess, onError);\n }\n });\n $el.on(\"click\", \"a.js-use-gravatar\", function(event) {\n $el.find('.loading-overlay').addClass(\"active\");\n return $rs.userSettings.removeAvatar().then(onSuccess, onError);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserAvatar\", [\"$tgAuth\", \"$tgModel\", \"$tgResources\", \"$tgConfirm\", UserAvatarDirective]);\n\n TaigaAvatarModelDirective = function($parse) {\n var link;\n link = function($scope, $el, $attrs) {\n var model, modelSetter;\n model = $parse($attrs.tgAvatarModel);\n modelSetter = model.assign;\n return $el.bind('change', function() {\n return $scope.$apply(function() {\n return modelSetter($scope, $el[0].files[0]);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive('tgAvatarModel', ['$parse', TaigaAvatarModelDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/nav.coffee\n */\n\n(function() {\n var UserSettingsNavigationDirective, module;\n\n UserSettingsNavigationDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var section;\n section = $attrs.tgUserSettingsNavigation;\n $el.find(\".active\").removeClass(\"active\");\n $el.find(\"#usersettingsmenu-\" + section + \" a\").addClass(\"active\");\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaUserSettings\");\n\n module.directive(\"tgUserSettingsNavigation\", UserSettingsNavigationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/notifications.coffee\n */\n\n(function() {\n var UserNotificationsController, UserNotificationsDirective, UserNotificationsListDirective, bindOnce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserNotificationsController = (function(superClass) {\n extend(UserNotificationsController, superClass);\n\n UserNotificationsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\", \"tgErrorHandlingService\"];\n\n function UserNotificationsController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, auth, errorHandlingService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.errorHandlingService = errorHandlingService;\n this.scope.sectionName = \"USER_SETTINGS.NOTIFICATIONS.SECTION_NAME\";\n this.scope.user = this.auth.getUser();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserNotificationsController.prototype.loadInitialData = function() {\n return this.rs.notifyPolicies.list().then((function(_this) {\n return function(notifyPolicies) {\n _this.scope.notifyPolicies = notifyPolicies;\n return notifyPolicies;\n };\n })(this));\n };\n\n return UserNotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserNotificationsController\", UserNotificationsController);\n\n UserNotificationsDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserNotifications\", UserNotificationsDirective);\n\n UserNotificationsListDirective = function($repo, $confirm, $compile) {\n var link, template;\n template = _.template(\"<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\\n
    \\\">\\n
    <%- notifyPolicy.project_name %>
    \\n
    \\n
    \\n \\\" id=\\\"policy-all-<%- notifyPolicy.id %>\\\"\\n value=\\\"2\\\" <% if (notifyPolicy.notify_level == 2) { %>checked=\\\"checked\\\"<% } %>/>\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-involved-<%- notifyPolicy.id %>\\\"\\n value=\\\"1\\\" <% if (notifyPolicy.notify_level == 1) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-none-<%- notifyPolicy.id %>\\\"\\n value=\\\"3\\\" <% if (notifyPolicy.notify_level == 3) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function() {\n var ctx, html;\n $el.off();\n ctx = {\n notifyPolicies: $scope.notifyPolicies\n };\n html = template(ctx);\n $el.html($compile(html)($scope));\n return $el.on(\"change\", \"input[type=radio]\", function(event) {\n var onError, onSuccess, policy, policyIndex, prev_level, target;\n target = angular.element(event.currentTarget);\n policyIndex = target.parents(\".policy-table-row\").data('index');\n policy = $scope.notifyPolicies[policyIndex];\n prev_level = policy.notify_level;\n policy.notify_level = parseInt(target.val(), 10);\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function() {\n $confirm.notify(\"error\");\n return target.parents(\".policy-table-row\").find(\"input[value=\" + prev_level + \"]\").prop(\"checked\", true);\n };\n return $repo.save(policy).then(onSuccess, onError);\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return bindOnce($scope, $attrs.ngModel, render);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", \"$compile\", UserNotificationsListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Andrey Antukh \n * Copyright (C) 2014-2017 Jesús Espino Garcia \n * Copyright (C) 2014-2017 David Barragán Merino \n * Copyright (C) 2014-2017 Alejandro Alonso \n * Copyright (C) 2014-2017 Juan Francisco Alcántara \n * Copyright (C) 2014-2017 Xavi Julian \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/user-project-settings.coffee\n */\n\n(function() {\n var UserProjectSettingsController, bindOnce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserProjectSettingsController = (function(superClass) {\n extend(UserProjectSettingsController, superClass);\n\n UserProjectSettingsController.$inject = [\"$rootScope\", \"$scope\", \"$tgSections\", \"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"tgCurrentUserService\"];\n\n function UserProjectSettingsController(rootScope, scope, tgSections, rs, repo, confirm, currentUserService) {\n var promise;\n this.rootScope = rootScope;\n this.scope = scope;\n this.tgSections = tgSections;\n this.rs = rs;\n this.repo = repo;\n this.confirm = confirm;\n this.currentUserService = currentUserService;\n this.scope.sections = this.tgSections.list();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserProjectSettingsController.prototype.loadInitialData = function() {\n return this.rs.userProjectSettings.list().then((function(_this) {\n return function(userProjectSettings) {\n return _this.scope.userProjectSettings = userProjectSettings;\n };\n })(this));\n };\n\n UserProjectSettingsController.prototype.updateCustomHomePage = function(projectSettings) {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.currentUserService.loadProjects();\n _this.rootScope.$broadcast(\"dropdown-project-list:updated\");\n return _this.confirm.notify(\"success\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.repo.save(projectSettings).then(onSuccess, onError);\n };\n\n UserProjectSettingsController.prototype.filteredSections = function(projectSettings) {\n return _.filter(this.scope.sections, function(section) {\n var ref;\n return ref = section.id, indexOf.call(projectSettings.allowed_sections, ref) >= 0;\n });\n };\n\n return UserProjectSettingsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserProjectSettingsController\", UserProjectSettingsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/live-notifications.coffee\n */\n\n(function() {\n var UserWebNotificationsController, UserWebNotificationsDirective, UserWebNotificationsListDirective, bindOnce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserWebNotificationsController = (function(superClass) {\n extend(UserWebNotificationsController, superClass);\n\n UserWebNotificationsController.$inject = [\"$scope\", \"$tgResources\", \"$tgAuth\"];\n\n function UserWebNotificationsController(scope, rs, auth) {\n var promise;\n this.scope = scope;\n this.rs = rs;\n this.auth = auth;\n this.scope.sectionName = \"USER_SETTINGS.EVENTS.SECTION_NAME\";\n this.scope.user = this.auth.getUser();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserWebNotificationsController.prototype.loadInitialData = function() {\n return this.rs.notifyPolicies.list().then((function(_this) {\n return function(notifyPolicies) {\n _this.scope.notifyPolicies = notifyPolicies;\n return notifyPolicies;\n };\n })(this));\n };\n\n return UserWebNotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserWebNotificationsController\", UserWebNotificationsController);\n\n UserWebNotificationsDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserWebNotifications\", UserWebNotificationsDirective);\n\n UserWebNotificationsListDirective = function($repo, $confirm, $compile) {\n var link, template;\n template = _.template(\"<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\\n
    \\n
    <%- notifyPolicy.project_name %>
    \\n
    \\n
    \\\">\\n checked=\\\"checked\\\" <% } %>\\n name=\\\"policy-<%- notifyPolicy.id %>\\\" id=\\\"policy-<%- notifyPolicy.id %>\\\"/>\\n
    \\n \\n \\n
    \\n
    \\n
    \\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function() {\n var ctx, html;\n $el.off();\n ctx = {\n notifyPolicies: $scope.notifyPolicies\n };\n html = template(ctx);\n $el.html($compile(html)($scope));\n return $el.on(\"click\", \".check\", function(event) {\n var onError, onSuccess, policy, policyIndex, target;\n target = angular.element(event.currentTarget);\n policyIndex = target.data('index');\n policy = $scope.notifyPolicies[policyIndex];\n policy.web_notify_level = !policy.web_notify_level;\n onSuccess = function() {\n $confirm.notify(\"success\");\n return target.find(\"input\").prop(\"checked\", policy.web_notify_level);\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $repo.save(policy).then(onSuccess, onError);\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return bindOnce($scope, $attrs.ngModel, render);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserWebNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", \"$compile\", UserWebNotificationsListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/components.module.coffee\n */\n\n(function() {\n angular.module(\"taigaComponents\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/discover.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaDiscover\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: external-apps/external-apps.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaExternalApps\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history.module.coffee\n */\n\n(function() {\n angular.module(\"taigaHistory\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/home.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaHome\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/navigation-bar.module.coffee\n */\n\n(function() {\n angular.module(\"taigaNavigationBar\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/projects.module.coffee\n */\n\n(function() {\n angular.module(\"taigaNotifications\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaProfile\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/projects.module.coffee\n */\n\n(function() {\n angular.module(\"taigaProjects\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/resources.module.coffee\n */\n\n(function() {\n angular.module(\"taigaResources2\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline.module.coffee\n */\n\n(function() {\n angular.module(\"taigaUserTimeline\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: utils/utils.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaUtils\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history.module.coffee\n */\n\n(function() {\n angular.module(\"taigaWikiHistory\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-item/assigned-item.directive.coffee\n */\n\n(function() {\n var AssignedItemDirective;\n\n AssignedItemDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n templateUrl: \"components/assigned-to/assigned-item/assigned-item.html\",\n scope: {\n member: \"=\"\n },\n link: link\n };\n };\n\n AssignedItemDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAssignedItem\", AssignedItemDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-to-selector/assigned-to-selector.controller.coffee\n */\n\n(function() {\n var AssignedToSelectorController;\n\n AssignedToSelectorController = (function() {\n AssignedToSelectorController.$inject = [];\n\n function AssignedToSelectorController() {\n if (this.assigned) {\n this._getAssignedMember();\n }\n this._filterAssignedMember();\n }\n\n AssignedToSelectorController.prototype._getAssignedMember = function() {\n return this.assignedMember = _.filter(this.project.members, (function(_this) {\n return function(member) {\n return member.id === _this.assigned.get('id');\n };\n })(this));\n };\n\n AssignedToSelectorController.prototype._filterAssignedMember = function() {\n if (this.assigned) {\n return this.nonAssignedMembers = _.filter(this.project.members, (function(_this) {\n return function(member) {\n return member.id !== _this.assigned.get('id');\n };\n })(this));\n } else {\n return this.nonAssignedMembers = this.project.members;\n }\n };\n\n return AssignedToSelectorController;\n\n })();\n\n angular.module('taigaComponents').controller('AssignedToSelectorCtrl', AssignedToSelectorController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-to-selector/assigned-to-selector.directive.coffee\n */\n\n(function() {\n var AssignedToSelectorDirective;\n\n AssignedToSelectorDirective = function() {\n return {\n controller: \"AssignedToSelectorCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"components/assigned-to/assigned-to-selector/assigned-to-selector.html\",\n scope: {\n assigned: \"=\",\n project: \"=\",\n onRemoveAssigned: \"&\",\n onAssignTo: \"&\"\n }\n };\n };\n\n AssignedToSelectorDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAssignedToSelector\", AssignedToSelectorDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-to.controller.coffee\n */\n\n(function() {\n var AssignedToController;\n\n AssignedToController = (function() {\n AssignedToController.$inject = [\"tgLightboxFactory\", \"lightboxService\"];\n\n function AssignedToController(lightboxFactory, lightboxService) {\n this.lightboxFactory = lightboxFactory;\n this.lightboxService = lightboxService;\n this.has_permissions = _.includes(this.project.my_permissions, 'modify_epic');\n }\n\n AssignedToController.prototype._closeAndRemoveAssigned = function() {\n this.lightboxService.closeAll();\n return this.onRemoveAssigned();\n };\n\n AssignedToController.prototype._closeAndAssign = function(member) {\n this.lightboxService.closeAll();\n return this.onAssignTo({\n 'member': member\n });\n };\n\n AssignedToController.prototype.onSelectAssignedTo = function(assigned, project) {\n return this.lightboxFactory.create('tg-assigned-to-selector', {\n \"class\": \"lightbox lightbox-assigned-to-selector open\",\n \"assigned\": \"assigned\",\n \"project\": \"project\",\n \"on-remove-assigned\": \"onRemoveAssigned()\",\n \"on-assign-to\": \"assignTo(member)\"\n }, {\n \"assigned\": this.assignedTo,\n \"project\": this.project,\n \"onRemoveAssigned\": this._closeAndRemoveAssigned.bind(this),\n \"assignTo\": this._closeAndAssign.bind(this)\n });\n };\n\n return AssignedToController;\n\n })();\n\n angular.module('taigaComponents').controller('AssignedToCtrl', AssignedToController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-to.directive.coffee\n */\n\n(function() {\n var AssignedToDirective;\n\n AssignedToDirective = function() {\n return {\n controller: \"AssignedToCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"components/assigned-to/assigned-to.html\",\n scope: {\n assignedTo: \"=\",\n project: \"=\",\n onRemoveAssigned: \"&\",\n onAssignTo: \"&\"\n }\n };\n };\n\n AssignedToDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAssignedToComponent\", AssignedToDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned/assigned-to-inline.directive.coffee\n */\n\n(function() {\n var AssignedToInlineDirective;\n\n AssignedToInlineDirective = function($rootscope, $confirm, $repo, $loading, $modelTransform, $template, $translate, $compile, $currentUserService, avatarService, $userListService) {\n var link;\n link = function($scope, $el, $attr, $model) {\n var isEditable, renderUser, renderUserList;\n isEditable = function() {\n var ref, ref1;\n return ((ref = $scope.project) != null ? (ref1 = ref.my_permissions) != null ? ref1.indexOf($attr.requiredPerm) : void 0 : void 0) !== -1;\n };\n renderUserList = function(text) {\n var selectedId, users, visibleUsers;\n selectedId = $model.$modelValue.assigned_to;\n users = $userListService.searchUsers(text);\n if (selectedId) {\n users = _.reject(users, {\n \"id\": selectedId\n });\n }\n visibleUsers = _.slice(users, 0, 5);\n visibleUsers = _.map(visibleUsers, function(user) {\n return user.avatar = avatarService.getAvatar(user);\n });\n $scope.users = _.slice(users, 0, 5);\n return $scope.showMore = users.length > 5;\n };\n renderUser = function(assignedObject) {\n var assigned_to_extra_info;\n if (assignedObject != null ? assignedObject.assigned_to : void 0) {\n $scope.selected = assignedObject.assigned_to;\n assigned_to_extra_info = $scope.usersById[$scope.selected];\n $scope.fullName = assigned_to_extra_info != null ? assigned_to_extra_info.full_name_display : void 0;\n $scope.isUnassigned = false;\n $scope.avatar = avatarService.getAvatar(assigned_to_extra_info);\n $scope.bg = $scope.avatar.bg;\n $scope.isIocaine = assignedObject != null ? assignedObject.is_iocaine : void 0;\n } else {\n $scope.fullName = $translate.instant(\"COMMON.ASSIGNED_TO.ASSIGN\");\n $scope.isUnassigned = true;\n $scope.avatar = avatarService.getAvatar(null);\n $scope.bg = null;\n $scope.isIocaine = false;\n }\n $scope.fullNameVisible = !($scope.isUnassigned && !$currentUserService.isAuthenticated());\n return $scope.isEditable = isEditable();\n };\n $el.on(\"click\", \".users-search\", function(event) {\n return event.stopPropagation();\n });\n $el.on(\"click\", \".users-dropdown\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n $scope.usersSearch = \"\";\n renderUserList();\n $scope.$apply();\n return $el.find(\".pop-users\").popover().open();\n });\n $scope.selfAssign = function() {\n $model.$modelValue.assigned_to = $currentUserService.getUser().get('id');\n return renderUser($model.$modelValue);\n };\n $scope.unassign = function() {\n $model.$modelValue.assigned_to = null;\n return renderUser();\n };\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n renderUserList(searchingText);\n return $el.find('input').focus();\n }\n });\n $el.on(\"click\", \".user-list-single\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n $model.$modelValue.assigned_to = target.data(\"user-id\");\n renderUser($model.$modelValue);\n return $scope.$apply();\n });\n $scope.$watch($attr.ngModel, function(instance) {\n return renderUser(instance);\n });\n $scope.$on(\"isiocaine:changed\", function(ctx, instance) {\n return renderUser(instance);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/assigned-to-inline.html\",\n require: \"ngModel\"\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAssignedToInline\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$translate\", \"$compile\", \"tgCurrentUserService\", \"tgAvatarService\", \"tgUserListService\", AssignedToInlineDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned/assigned-to.directive.coffee\n */\n\n(function() {\n var AssignedToDirective;\n\n AssignedToDirective = function($rootscope, $confirm, $repo, $loading, $modelTransform, $template, $translate, $compile, $currentUserService, avatarService) {\n var link, template;\n template = $template.get(\"common/components/assigned-to.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n var ref, ref1;\n return ((ref = $scope.project) != null ? (ref1 = ref.my_permissions) != null ? ref1.indexOf($attrs.requiredPerm) : void 0 : void 0) !== -1;\n };\n save = function(userId) {\n var currentLoading, item, transform;\n item = $model.$modelValue.clone();\n item.assigned_to = userId;\n currentLoading = $loading().target($el).start();\n transform = $modelTransform.save(function(item) {\n item.assigned_to = userId;\n return item;\n });\n transform.then(function(item) {\n currentLoading.finish();\n return $rootscope.$broadcast(\"object:updated\");\n });\n transform.then(null, function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n });\n return transform;\n };\n render = function() {\n var compiledTemplate, templateScope;\n template = $template.get(\"common/components/assigned-to.html\");\n templateScope = $scope.$new();\n compiledTemplate = $compile(template)(templateScope);\n return $el.html(compiledTemplate);\n };\n $scope.assign = function() {\n return $rootscope.$broadcast(\"assigned-to:add\", $model.$modelValue);\n };\n $scope.unassign = function() {\n var title;\n title = $translate.instant(\"COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED\");\n return $confirm.ask(title).then(function(response) {\n response.finish();\n return save(null);\n });\n };\n $scope.selfAssign = function() {\n var userId;\n userId = $currentUserService.getUser().get('id');\n return save(userId);\n };\n $scope.$on(\"assigned-to:added\", function(ctx, userId, item) {\n if (item.id !== $model.$modelValue.id) {\n return;\n }\n return save(userId);\n });\n $scope.$watch($attrs.ngModel, function(instance) {\n var assigned_to_extra_info;\n if (instance != null ? instance.assigned_to : void 0) {\n $scope.selected = instance.assigned_to;\n assigned_to_extra_info = $scope.usersById[$scope.selected];\n $scope.fullName = assigned_to_extra_info != null ? assigned_to_extra_info.full_name_display : void 0;\n $scope.isUnassigned = false;\n $scope.avatar = avatarService.getAvatar(assigned_to_extra_info);\n $scope.bg = $scope.avatar.bg;\n $scope.isIocaine = instance != null ? instance.is_iocaine : void 0;\n } else {\n $scope.fullName = $translate.instant(\"COMMON.ASSIGNED_TO.ASSIGN\");\n $scope.isUnassigned = true;\n $scope.avatar = avatarService.getAvatar(null);\n $scope.bg = null;\n $scope.isIocaine = false;\n }\n $scope.fullNameVisible = !($scope.isUnassigned && !$currentUserService.isAuthenticated());\n $scope.isEditable = isEditable();\n return render();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAssignedTo\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$translate\", \"$compile\", \"tgCurrentUserService\", \"tgAvatarService\", AssignedToDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned/assigned-users-inline.directive.coffee\n */\n\n(function() {\n var AssignedUsersInlineDirective,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n AssignedUsersInlineDirective = function($rootscope, $confirm, $repo, $loading, $modelTransform, $template, $translate, $compile, $currentUserService, avatarService, $userListService) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var applyToModel, currentAssignedIds, currentAssignedTo, isAssigned, renderUsers, renderUsersList;\n currentAssignedIds = [];\n currentAssignedTo = null;\n isAssigned = function() {\n return currentAssignedIds.length > 0;\n };\n renderUsersList = function(text) {\n var selected, users, visible;\n users = $userListService.searchUsers(text);\n selected = [];\n _.map(users, function(user) {\n var ref;\n if (ref = user.id, indexOf.call(currentAssignedIds, ref) >= 0) {\n user.avatar = avatarService.getAvatar(user);\n return selected.push(user);\n }\n });\n visible = [];\n _.map(users, function(user) {\n var ref;\n if (ref = user.id, indexOf.call(currentAssignedIds, ref) < 0) {\n user.avatar = avatarService.getAvatar(user);\n return visible.push(user);\n }\n });\n $scope.selected = _.slice(selected, 0, 5);\n if ($scope.selected.length < 5) {\n $scope.users = _.slice(visible, 0, 5 - $scope.selected.length);\n } else {\n $scope.users = [];\n }\n return $scope.showMore = users.length > 5;\n };\n renderUsers = function() {\n var assignedUsers;\n assignedUsers = _.map(currentAssignedIds, function(assignedUserId) {\n return $scope.usersById[assignedUserId];\n });\n assignedUsers = _.filter(assignedUsers, function(it) {\n return !!it;\n });\n $scope.hiddenUsers = currentAssignedIds.length > 3 ? currentAssignedIds.length - 3 : 0;\n $scope.assignedUsers = _.slice(assignedUsers, 0, 3);\n return $scope.isAssigned = isAssigned();\n };\n applyToModel = function() {\n _.map(currentAssignedIds, function(userId) {\n if (!$scope.usersById[userId]) {\n return currentAssignedIds.splice(currentAssignedIds.indexOf(userId), 1);\n }\n });\n if (currentAssignedIds.length === 0) {\n currentAssignedTo = null;\n } else if (currentAssignedIds.indexOf(currentAssignedTo) === -1 || !currentAssignedTo) {\n currentAssignedTo = currentAssignedIds[0];\n }\n $model.$modelValue.setAttr('assigned_users', currentAssignedIds);\n return $model.$modelValue.assigned_to = currentAssignedTo;\n };\n $el.on(\"click\", \".users-dropdown\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n $scope.usersSearch = null;\n renderUsersList();\n $scope.$apply();\n return $el.find(\".pop-users\").popover().open();\n });\n $scope.assign = function(user) {\n currentAssignedIds.push(user.id);\n renderUsers();\n return applyToModel();\n };\n $scope.selfAssign = function() {\n currentAssignedIds.push($currentUserService.getUser().get('id'));\n renderUsers();\n return applyToModel();\n };\n $scope.unassign = function(user) {\n var index;\n index = currentAssignedIds.indexOf(user.id);\n currentAssignedIds.splice(index, 1);\n renderUsers();\n return applyToModel();\n };\n $el.on(\"click\", \".users-search\", function(event) {\n return event.stopPropagation();\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n renderUsersList(searchingText);\n return $el.find('input').focus();\n }\n });\n $scope.$watch($attrs.ngModel, function(item) {\n var assigned_to;\n if (item == null) {\n return;\n }\n currentAssignedIds = [];\n assigned_to = null;\n if (item.assigned_users != null) {\n currentAssignedIds = item.assigned_users;\n }\n assigned_to = item.assigned_to;\n return renderUsers();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n scope: true,\n link: link,\n templateUrl: \"common/components/assigned-users-inline.html\",\n require: \"ngModel\"\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAssignedUsersInline\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$translate\", \"$compile\", \"tgCurrentUserService\", \"tgAvatarService\", \"tgUserListService\", AssignedUsersInlineDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned/assigned-users.directive.coffee\n */\n\n(function() {\n var AssignedUsersDirective,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n AssignedUsersDirective = function($rootscope, $confirm, $repo, $modelTransform, $template, $compile, $translate, $currentUserService) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var deleteAssignedUser, isAssigned, isEditable, openAssignedUsers, renderAssignedUsers, save;\n isEditable = function() {\n var ref, ref1;\n return ((ref = $scope.project) != null ? (ref1 = ref.my_permissions) != null ? ref1.indexOf($attrs.requiredPerm) : void 0 : void 0) !== -1;\n };\n isAssigned = function() {\n return $scope.assignedUsers.length > 0;\n };\n save = function(assignedUsers, assignedToUser) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.assigned_users = assignedUsers;\n if (!item.assigned_to) {\n item.assigned_to = assignedToUser;\n }\n return item;\n });\n transform.then(function() {\n var result;\n assignedUsers = _.map(assignedUsers, function(assignedUserId) {\n return $scope.usersById[assignedUserId];\n });\n renderAssignedUsers(assignedUsers);\n return result = $rootscope.$broadcast(\"object:updated\");\n });\n return transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n };\n openAssignedUsers = function() {\n var item;\n item = _.clone($model.$modelValue, false);\n return $rootscope.$broadcast(\"assigned-user:add\", item);\n };\n $scope.selfAssign = function() {\n var assignedUsers, currentUserId;\n if (!isEditable()) {\n return;\n }\n currentUserId = $currentUserService.getUser().get('id');\n assignedUsers = _.clone($model.$modelValue.assigned_users, false);\n assignedUsers.push(currentUserId);\n assignedUsers = _.uniq(assignedUsers);\n return save(assignedUsers, currentUserId);\n };\n $scope.unassign = function(user) {\n var assignedUserId, message, title;\n if (!isEditable()) {\n return;\n }\n assignedUserId = user.id;\n title = $translate.instant(\"COMMON.ASSIGNED_USERS.TITLE_LIGHTBOX_DELETE_ASSIGNED\");\n message = $scope.usersById[assignedUserId].full_name_display;\n return $confirm.askOnDelete(title, message).then(function(askResponse) {\n var assignedUserIds;\n askResponse.finish();\n assignedUserIds = _.clone($model.$modelValue.assigned_users, false);\n assignedUserIds = _.pull(assignedUserIds, assignedUserId);\n return deleteAssignedUser(assignedUserIds);\n });\n };\n deleteAssignedUser = function(assignedUserIds) {\n var transform;\n transform = $modelTransform.save(function(item) {\n var ref;\n item.assigned_users = assignedUserIds;\n if ((ref = item.assigned_to, indexOf.call(assignedUserIds, ref) < 0) && assignedUserIds.length > 0) {\n item.assigned_to = assignedUserIds[0];\n }\n if (assignedUserIds.length === 0) {\n item.assigned_to = null;\n }\n return item;\n });\n transform.then(function() {\n var assignedUsers, item;\n item = $modelTransform.getObj();\n assignedUsers = _.map(item.assignedUsers, function(assignedUserId) {\n return $scope.usersById[assignedUserId];\n });\n renderAssignedUsers(assignedUsers);\n return $rootscope.$broadcast(\"object:updated\");\n });\n return transform.then(null, function() {\n item.revert();\n return $confirm.notify(\"error\");\n });\n };\n renderAssignedUsers = function(assignedUsers) {\n $scope.assignedUsers = assignedUsers;\n $scope.isEditable = isEditable();\n $scope.isAssigned = isAssigned();\n return $scope.openAssignedUsers = openAssignedUsers;\n };\n $scope.$on(\"assigned-user:deleted\", function(ctx, assignedUserId) {\n var assignedUsersIds;\n assignedUsersIds = _.clone($model.$modelValue.assigned_users, false);\n assignedUsersIds = _.pull(assignedUsersIds, assignedUserId);\n assignedUsersIds = _.uniq(assignedUsersIds);\n return deleteAssignedUser(assignedUsersIds);\n });\n $scope.$on(\"assigned-user:added\", function(ctx, assignedUserId) {\n var assignedUsers;\n assignedUsers = _.clone($model.$modelValue.assigned_users, false);\n assignedUsers.push(assignedUserId);\n assignedUsers = _.uniq(assignedUsers);\n return save(assignedUsers, assignedUserId);\n });\n $scope.$watch($attrs.ngModel, function(item) {\n var assignedUsers;\n if (item == null) {\n return;\n }\n assignedUsers = _.map(item.assigned_users, function(assignedUserId) {\n return $scope.usersById[assignedUserId];\n });\n assignedUsers = _.filter(assignedUsers, function(it) {\n return !!it;\n });\n return renderAssignedUsers(assignedUsers);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n scope: true,\n templateUrl: \"common/components/assigned-users.html\",\n link: link,\n require: \"ngModel\"\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAssignedUsers\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", \"$translate\", \"tgCurrentUserService\", AssignedUsersDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachment-link/attachment-link.directive.coffee\n */\n\n(function() {\n var AttachmentLinkDirective;\n\n AttachmentLinkDirective = function($parse, attachmentsPreviewService, lightboxService) {\n var link;\n link = function(scope, el, attrs) {\n var attachment;\n attachment = $parse(attrs.tgAttachmentLink)(scope);\n el.on(\"click\", function(event) {\n if (taiga.isImage(attachment.getIn(['file', 'name']))) {\n event.preventDefault();\n return scope.$apply(function() {\n lightboxService.open($('tg-attachments-preview'));\n return attachmentsPreviewService.fileId = attachment.getIn(['file', 'id']);\n });\n } else if (taiga.isPdf(attachment.getIn(['file', 'name']))) {\n event.preventDefault();\n return window.open(attachment.getIn(['file', 'url']));\n }\n });\n return scope.$on(\"$destroy\", function() {\n return el.off();\n });\n };\n return {\n link: link\n };\n };\n\n AttachmentLinkDirective.$inject = [\"$parse\", \"tgAttachmentsPreviewService\", \"lightboxService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentLink\", AttachmentLinkDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachment/attachment-gallery.directive.coffee\n */\n\n(function() {\n var AttachmentGalleryDirective;\n\n AttachmentGalleryDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {};\n return {\n scope: {},\n bindToController: {\n attachment: \"=\",\n onDelete: \"&\",\n onUpdate: \"&\",\n type: \"=\"\n },\n controller: \"Attachment\",\n controllerAs: \"vm\",\n templateUrl: \"components/attachment/attachment-gallery.html\",\n link: link\n };\n };\n\n AttachmentGalleryDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentGallery\", AttachmentGalleryDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachment/attachment.controller.coffee\n */\n\n(function() {\n var AttachmentController;\n\n AttachmentController = (function() {\n AttachmentController.$inject = ['tgAttachmentsService', '$translate'];\n\n function AttachmentController(attachmentsService, translate) {\n this.attachmentsService = attachmentsService;\n this.translate = translate;\n this.form = {};\n this.form.description = this.attachment.getIn(['file', 'description']);\n this.form.is_deprecated = this.attachment.get(['file', 'is_deprecated']);\n this.title = this.translate.instant(\"ATTACHMENT.TITLE\", {\n fileName: this.attachment.get('name'),\n date: moment(this.attachment.get('created_date')).format(this.translate.instant(\"ATTACHMENT.DATE\"))\n });\n }\n\n AttachmentController.prototype.editMode = function(mode) {\n var attachment;\n attachment = this.attachment.set('editable', mode);\n return this.onUpdate({\n attachment: attachment\n });\n };\n\n AttachmentController.prototype[\"delete\"] = function() {\n return this.onDelete({\n attachment: this.attachment\n });\n };\n\n AttachmentController.prototype.save = function() {\n var attachment;\n attachment = this.attachment.set('loading', true);\n this.onUpdate({\n attachment: attachment\n });\n attachment = this.attachment.merge({\n editable: false,\n loading: false\n });\n attachment = attachment.mergeIn(['file'], {\n description: this.form.description,\n is_deprecated: !!this.form.is_deprecated\n });\n return this.onUpdate({\n attachment: attachment\n });\n };\n\n return AttachmentController;\n\n })();\n\n angular.module('taigaComponents').controller('Attachment', AttachmentController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachment/attachment.directive.coffee\n */\n\n(function() {\n var AttachmentDirective;\n\n AttachmentDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {};\n return {\n scope: {},\n bindToController: {\n attachment: \"=\",\n onDelete: \"&\",\n onUpdate: \"&\",\n type: \"=\"\n },\n controller: \"Attachment\",\n controllerAs: \"vm\",\n templateUrl: \"components/attachment/attachment.html\",\n link: link\n };\n };\n\n AttachmentDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachment\", AttachmentDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-drop/attachments-drop.directive.coffee\n */\n\n(function() {\n var AttachmentsDropDirective;\n\n AttachmentsDropDirective = function($parse) {\n var link;\n link = function(scope, el, attrs) {\n var eventAttr;\n eventAttr = $parse(attrs.tgAttachmentsDrop);\n el.on('dragover', function(e) {\n e.preventDefault();\n return false;\n });\n el.on('drop', function(e) {\n var dataTransfer;\n e.stopPropagation();\n e.preventDefault();\n dataTransfer = e.dataTransfer || (e.originalEvent && e.originalEvent.dataTransfer);\n return scope.$apply(function() {\n return eventAttr(scope, {\n files: dataTransfer.files\n });\n });\n });\n return scope.$on(\"$destroy\", function() {\n return el.off();\n });\n };\n return {\n link: link\n };\n };\n\n AttachmentsDropDirective.$inject = [\"$parse\"];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentsDrop\", AttachmentsDropDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-full/attachments-full.controller.coffee\n */\n\n(function() {\n var AttachmentsFullController, sizeFormat;\n\n sizeFormat = this.taiga.sizeFormat;\n\n AttachmentsFullController = (function() {\n AttachmentsFullController.$inject = [\"$translate\", \"$tgConfirm\", \"$tgConfig\", \"$tgStorage\", \"tgAttachmentsFullService\", \"tgProjectService\", \"tgAttachmentsPreviewService\"];\n\n function AttachmentsFullController(translate, confirm, config, storage, attachmentsFullService, projectService, attachmentsPreviewService) {\n this.translate = translate;\n this.confirm = confirm;\n this.config = config;\n this.storage = storage;\n this.attachmentsFullService = attachmentsFullService;\n this.projectService = projectService;\n this.attachmentsPreviewService = attachmentsPreviewService;\n this.mode = this.storage.get('attachment-mode', 'list');\n this.maxFileSize = this.config.get(\"maxUploadFileSize\", null);\n if (this.maxFileSize) {\n this.maxFileSize = sizeFormat(this.maxFileSize);\n }\n this.maxFileSizeMsg = this.maxFileSize ? this.translate.instant(\"ATTACHMENT.MAX_UPLOAD_SIZE\", {\n maxFileSize: this.maxFileSize\n }) : \"\";\n taiga.defineImmutableProperty(this, 'attachments', (function(_this) {\n return function() {\n return _this.attachmentsFullService.attachments;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'deprecatedsCount', (function(_this) {\n return function() {\n return _this.attachmentsFullService.deprecatedsCount;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'attachmentsVisible', (function(_this) {\n return function() {\n return _this.attachmentsFullService.attachmentsVisible;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'deprecatedsVisible', (function(_this) {\n return function() {\n return _this.attachmentsFullService.deprecatedsVisible;\n };\n })(this));\n }\n\n AttachmentsFullController.prototype.uploadingAttachments = function() {\n return this.attachmentsFullService.uploadingAttachments;\n };\n\n AttachmentsFullController.prototype.addAttachment = function(file) {\n var editable;\n editable = this.mode === 'list';\n return this.attachmentsFullService.addAttachment(this.projectId, this.objId, this.type, file, editable);\n };\n\n AttachmentsFullController.prototype.setMode = function(mode) {\n this.mode = mode;\n return this.storage.set('attachment-mode', mode);\n };\n\n AttachmentsFullController.prototype.toggleDeprecatedsVisible = function() {\n return this.attachmentsFullService.toggleDeprecatedsVisible();\n };\n\n AttachmentsFullController.prototype.addAttachments = function(files) {\n return _.forEach(files, (function(_this) {\n return function(file) {\n return _this.addAttachment(file);\n };\n })(this));\n };\n\n AttachmentsFullController.prototype.loadAttachments = function() {\n return this.attachmentsFullService.loadAttachments(this.type, this.objId, this.projectId);\n };\n\n AttachmentsFullController.prototype.deleteAttachment = function(toDeleteAttachment) {\n var message, title;\n this.attachmentsPreviewService.fileId = null;\n title = this.translate.instant(\"ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT\");\n message = this.translate.instant(\"ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT\", {\n fileName: toDeleteAttachment.getIn(['file', 'name'])\n });\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var onError, onSuccess;\n onError = function() {\n message = _this.translate.instant(\"ATTACHMENT.ERROR_DELETE_ATTACHMENT\", {\n errorMessage: message\n });\n _this.confirm.notify(\"error\", null, message);\n return askResponse.finish(false);\n };\n onSuccess = function() {\n return askResponse.finish();\n };\n return _this.attachmentsFullService.deleteAttachment(toDeleteAttachment, _this.type).then(onSuccess, onError);\n };\n })(this));\n };\n\n AttachmentsFullController.prototype.reorderAttachment = function(attachment, newIndex) {\n return this.attachmentsFullService.reorderAttachment(this.type, attachment, newIndex);\n };\n\n AttachmentsFullController.prototype.updateAttachment = function(toUpdateAttachment) {\n return this.attachmentsFullService.updateAttachment(toUpdateAttachment, this.type);\n };\n\n AttachmentsFullController.prototype._isEditable = function() {\n if (this.projectService.project) {\n return this.projectService.hasPermission(this.editPermission);\n }\n return false;\n };\n\n AttachmentsFullController.prototype.showAttachments = function() {\n return this._isEditable() || this.attachmentsFullService.attachments.size;\n };\n\n return AttachmentsFullController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"AttachmentsFull\", AttachmentsFullController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-full/attachments-full.directive.coffee\n */\n\n(function() {\n var AttachmentsFullDirective, bindOnce;\n\n bindOnce = this.taiga.bindOnce;\n\n AttachmentsFullDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return bindOnce(scope, 'vm.objId', function(value) {\n return ctrl.loadAttachments();\n });\n };\n return {\n scope: {},\n bindToController: {\n type: \"@\",\n objId: \"=\",\n projectId: \"=\",\n editPermission: \"@\"\n },\n controller: \"AttachmentsFull\",\n controllerAs: \"vm\",\n templateUrl: \"components/attachments-full/attachments-full.html\",\n link: link\n };\n };\n\n AttachmentsFullDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentsFull\", AttachmentsFullDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-full/attachments-full.service.coffee\n */\n\n(function() {\n var AttachmentsFullService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n AttachmentsFullService = (function(superClass) {\n extend(AttachmentsFullService, superClass);\n\n AttachmentsFullService.$inject = [\"tgAttachmentsService\", \"$rootScope\"];\n\n function AttachmentsFullService(attachmentsService, rootScope) {\n this.attachmentsService = attachmentsService;\n this.rootScope = rootScope;\n this._attachments = Immutable.List();\n this._deprecatedsCount = 0;\n this._attachmentsVisible = Immutable.List();\n this._deprecatedsVisible = false;\n this.uploadingAttachments = [];\n taiga.defineImmutableProperty(this, 'attachments', (function(_this) {\n return function() {\n return _this._attachments;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'deprecatedsCount', (function(_this) {\n return function() {\n return _this._deprecatedsCount;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'attachmentsVisible', (function(_this) {\n return function() {\n return _this._attachmentsVisible;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'deprecatedsVisible', (function(_this) {\n return function() {\n return _this._deprecatedsVisible;\n };\n })(this));\n }\n\n AttachmentsFullService.prototype.toggleDeprecatedsVisible = function() {\n this._deprecatedsVisible = !this._deprecatedsVisible;\n return this.regenerate();\n };\n\n AttachmentsFullService.prototype.regenerate = function() {\n this._deprecatedsCount = this._attachments.count(function(it) {\n return it.getIn(['file', 'is_deprecated']);\n });\n if (this._deprecatedsVisible) {\n return this._attachmentsVisible = this._attachments;\n } else {\n return this._attachmentsVisible = this._attachments.filter(function(it) {\n return !it.getIn(['file', 'is_deprecated']);\n });\n }\n };\n\n AttachmentsFullService.prototype.addAttachment = function(projectId, objId, type, file, editable, comment) {\n if (editable == null) {\n editable = true;\n }\n if (comment == null) {\n comment = false;\n }\n return new Promise((function(_this) {\n return function(resolve, reject) {\n var promise;\n if (_this.attachmentsService.validate(file)) {\n _this.uploadingAttachments.push(file);\n promise = _this.attachmentsService.upload(file, objId, projectId, type, comment);\n return promise.then(function(file) {\n var attachment;\n _this.uploadingAttachments = _this.uploadingAttachments.filter(function(uploading) {\n return uploading.name !== file.get('name');\n });\n attachment = Immutable.Map();\n attachment = attachment.merge({\n file: file,\n editable: editable,\n loading: false,\n from_comment: comment\n });\n _this._attachments = _this._attachments.push(attachment);\n _this.regenerate();\n _this.rootScope.$broadcast(\"attachment:create\");\n return resolve(attachment);\n });\n } else {\n return reject(new Error(file));\n }\n };\n })(this));\n };\n\n AttachmentsFullService.prototype.loadAttachments = function(type, objId, projectId) {\n return this.attachmentsService.list(type, objId, projectId).then((function(_this) {\n return function(files) {\n _this._attachments = files.map(function(file) {\n var attachment;\n attachment = Immutable.Map();\n return attachment.merge({\n loading: false,\n editable: false,\n file: file\n });\n });\n return _this.regenerate();\n };\n })(this));\n };\n\n AttachmentsFullService.prototype.deleteAttachment = function(toDeleteAttachment, type) {\n var onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this._attachments = _this._attachments.filter(function(attachment) {\n return attachment !== toDeleteAttachment;\n });\n return _this.regenerate();\n };\n })(this);\n return this.attachmentsService[\"delete\"](type, toDeleteAttachment.getIn(['file', 'id'])).then(onSuccess);\n };\n\n AttachmentsFullService.prototype.reorderAttachment = function(type, attachment, newIndex) {\n var attachments, oldIndex, promises;\n oldIndex = this.attachments.findIndex(function(it) {\n return it === attachment;\n });\n if (oldIndex === newIndex) {\n return;\n }\n attachments = this.attachments.remove(oldIndex);\n attachments = attachments.splice(newIndex, 0, attachment);\n attachments = attachments.map(function(x, i) {\n return x.setIn(['file', 'order'], i + 1);\n });\n promises = [];\n attachments.forEach((function(_this) {\n return function(attachment) {\n var patch;\n patch = {\n order: attachment.getIn(['file', 'order'])\n };\n return promises.push(_this.attachmentsService.patch(attachment.getIn(['file', 'id']), type, patch));\n };\n })(this));\n return Promise.all(promises).then((function(_this) {\n return function() {\n _this._attachments = attachments;\n return _this.regenerate();\n };\n })(this));\n };\n\n AttachmentsFullService.prototype.updateAttachment = function(toUpdateAttachment, type) {\n var index, oldAttachment, patch;\n index = this._attachments.findIndex(function(attachment) {\n return attachment.getIn(['file', 'id']) === toUpdateAttachment.getIn(['file', 'id']);\n });\n oldAttachment = this._attachments.get(index);\n patch = taiga.patch(oldAttachment.get('file'), toUpdateAttachment.get('file'));\n if (toUpdateAttachment.get('loading')) {\n this._attachments = this._attachments.set(index, toUpdateAttachment);\n return this.regenerate();\n } else {\n return this.attachmentsService.patch(toUpdateAttachment.getIn(['file', 'id']), type, patch).then((function(_this) {\n return function() {\n _this._attachments = _this._attachments.set(index, toUpdateAttachment);\n return _this.regenerate();\n };\n })(this));\n }\n };\n\n return AttachmentsFullService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgAttachmentsFullService\", AttachmentsFullService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-preview/attachments-preview.controller.coffee\n */\n\n(function() {\n var AttachmentsPreviewController;\n\n AttachmentsPreviewController = (function() {\n AttachmentsPreviewController.$inject = [\"tgAttachmentsPreviewService\"];\n\n function AttachmentsPreviewController(attachmentsPreviewService) {\n this.attachmentsPreviewService = attachmentsPreviewService;\n taiga.defineImmutableProperty(this, \"current\", (function(_this) {\n return function() {\n if (!_this.attachmentsPreviewService.fileId) {\n return null;\n }\n return _this.getCurrent();\n };\n })(this));\n }\n\n AttachmentsPreviewController.prototype.hasPagination = function() {\n var images;\n images = this.attachments.filter((function(_this) {\n return function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n };\n })(this));\n return images.size > 1;\n };\n\n AttachmentsPreviewController.prototype.getCurrent = function() {\n var attachment, file;\n attachment = this.attachments.find((function(_this) {\n return function(attachment) {\n return _this.attachmentsPreviewService.fileId === attachment.getIn(['file', 'id']);\n };\n })(this));\n file = attachment.get('file');\n return file;\n };\n\n AttachmentsPreviewController.prototype.getIndex = function() {\n return this.attachments.findIndex((function(_this) {\n return function(attachment) {\n return _this.attachmentsPreviewService.fileId === attachment.getIn(['file', 'id']);\n };\n })(this));\n };\n\n AttachmentsPreviewController.prototype.next = function() {\n var attachmentIndex, image;\n attachmentIndex = this.getIndex();\n image = this.attachments.slice(attachmentIndex + 1).find(function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n });\n if (!image) {\n image = this.attachments.find(function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n });\n }\n return this.attachmentsPreviewService.fileId = image.getIn(['file', 'id']);\n };\n\n AttachmentsPreviewController.prototype.previous = function() {\n var attachmentIndex, image;\n attachmentIndex = this.getIndex();\n image = this.attachments.slice(0, attachmentIndex).findLast(function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n });\n if (!image) {\n image = this.attachments.findLast(function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n });\n }\n return this.attachmentsPreviewService.fileId = image.getIn(['file', 'id']);\n };\n\n return AttachmentsPreviewController;\n\n })();\n\n angular.module('taigaComponents').controller('AttachmentsPreview', AttachmentsPreviewController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-preview/attachments-preview.directive.coffee\n */\n\n(function() {\n var AttachmentPreviewLightboxDirective;\n\n AttachmentPreviewLightboxDirective = function(lightboxService, attachmentsPreviewService) {\n var link;\n link = function($scope, el, attrs, ctrl) {\n $(document.body).on(\"keydown.image-preview\", function(e) {\n if (attachmentsPreviewService.fileId) {\n if (e.keyCode === 39) {\n ctrl.next();\n } else if (e.keyCode === 37) {\n ctrl.previous();\n }\n }\n return $scope.$digest();\n });\n return $scope.$on('$destroy', function() {\n return $(document.body).off('.image-preview');\n });\n };\n return {\n scope: {},\n controller: 'AttachmentsPreview',\n templateUrl: 'components/attachments-preview/attachments-preview.html',\n link: link,\n controllerAs: \"vm\",\n bindToController: {\n attachments: \"=\"\n }\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAttachmentsPreview\", [\"lightboxService\", \"tgAttachmentsPreviewService\", AttachmentPreviewLightboxDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-preview/attachments-preview.service.coffee\n */\n\n(function() {\n var AttachmentsPreviewService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n AttachmentsPreviewService = (function(superClass) {\n extend(AttachmentsPreviewService, superClass);\n\n AttachmentsPreviewService.$inject = [];\n\n function AttachmentsPreviewService() {}\n\n return AttachmentsPreviewService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgAttachmentsPreviewService\", AttachmentsPreviewService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-simple/attachments-simple.controller.coffee\n */\n\n(function() {\n var AttachmentsSimpleController;\n\n AttachmentsSimpleController = (function() {\n AttachmentsSimpleController.$inject = [\"tgAttachmentsService\"];\n\n function AttachmentsSimpleController(attachmentsService) {\n this.attachmentsService = attachmentsService;\n }\n\n AttachmentsSimpleController.prototype.addAttachment = function(file) {\n var attachment;\n attachment = Immutable.fromJS({\n file: file,\n name: file.name,\n size: file.size\n });\n if (this.attachmentsService.validate(file)) {\n this.attachments = this.attachments.push(attachment);\n if (this.onAdd) {\n return this.onAdd({\n attachment: attachment\n });\n }\n }\n };\n\n AttachmentsSimpleController.prototype.addAttachments = function(files) {\n return _.forEach(files, this.addAttachment.bind(this));\n };\n\n AttachmentsSimpleController.prototype.deleteAttachment = function(toDeleteAttachment) {\n this.attachments = this.attachments.filter(function(attachment) {\n return attachment !== toDeleteAttachment;\n });\n if (this.onDelete) {\n return this.onDelete({\n attachment: toDeleteAttachment\n });\n }\n };\n\n return AttachmentsSimpleController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"AttachmentsSimple\", AttachmentsSimpleController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-simple/attachments-simple.directive.coffee\n */\n\n(function() {\n var AttachmentsSimpleDirective;\n\n AttachmentsSimpleDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {};\n return {\n scope: {},\n bindToController: {\n attachments: \"=\",\n onAdd: \"&\",\n onDelete: \"&\"\n },\n controller: \"AttachmentsSimple\",\n controllerAs: \"vm\",\n templateUrl: \"components/attachments-simple/attachments-simple.html\",\n link: link\n };\n };\n\n AttachmentsSimpleDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentsSimple\", AttachmentsSimpleDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-sortable/attachments-sortable.directive.coffee\n */\n\n(function() {\n var AttachmentSortableDirective;\n\n AttachmentSortableDirective = function($parse) {\n var link;\n link = function(scope, el, attrs) {\n var callback, drake, scroll;\n callback = $parse(attrs.tgAttachmentsSortable);\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).is('div[tg-bind-scope]');\n }\n });\n drake.on('dragend', function(item) {\n var attachment, newIndex;\n item = $(item);\n attachment = item.scope().attachment;\n newIndex = item.index();\n return scope.$apply(function() {\n return callback(scope, {\n attachment: attachment,\n index: newIndex\n });\n });\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n AttachmentSortableDirective.$inject = [\"$parse\"];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentsSortable\", AttachmentSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/auto-select/auto-select.directive.coffee\n */\n\n(function() {\n var AutoSelectDirective;\n\n AutoSelectDirective = function($timeout) {\n return {\n link: function(scope, elm) {\n return $timeout(function() {\n return elm[0].select();\n });\n }\n };\n };\n\n AutoSelectDirective.$inject = ['$timeout'];\n\n angular.module(\"taigaComponents\").directive(\"tgAutoSelect\", AutoSelectDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/avatar/avatar.directive.coffee\n */\n\n(function() {\n var AvatarDirective;\n\n AvatarDirective = function(avatarService) {\n var link;\n link = function(scope, el, attrs) {\n var attributeName;\n if (attrs.tgAvatarBig) {\n attributeName = 'avatarBig';\n } else {\n attributeName = 'avatar';\n }\n return scope.$watch(attributeName, function(user) {\n var avatar;\n avatar = avatarService.getAvatar(user, attributeName);\n el.attr('src', avatar.url);\n el.attr('title', \"\" + avatar.username);\n el.attr('alt', \"\" + avatar.username);\n return el.css('background', avatar.bg || \"\");\n });\n };\n return {\n link: link,\n scope: {\n avatar: \"=tgAvatar\",\n avatarBig: \"=tgAvatarBig\"\n }\n };\n };\n\n AvatarDirective.$inject = ['tgAvatarService'];\n\n angular.module(\"taigaComponents\").directive(\"tgAvatar\", AvatarDirective);\n\n angular.module(\"taigaComponents\").directive(\"tgAvatarBig\", AvatarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/belong-to-epics/belong-to-epics.directive.coffee\n */\n\n(function() {\n var BelongToEpicsDirective, module;\n\n module = angular.module('taigaEpics');\n\n BelongToEpicsDirective = function($translate, $confirm, $rs, $rs2, lightboxService) {\n var link, templateUrl;\n link = function(scope, el, attrs) {\n var updateEpics;\n scope.$watch('epics', function(epics) {\n return updateEpics(epics);\n });\n scope.$on(\"related-epics:changed\", function(ctx, userStory) {\n return $rs.userstories.getByRef(userStory.project, userStory.ref, {}).then(function(us) {\n scope.item.epics = us.epics;\n return updateEpics(us.epics);\n });\n });\n scope.removeEpicRelationship = function(epic) {\n var message, title;\n title = $translate.instant(\"LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.TITLE\");\n message = $translate.instant(\"LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.MESSAGE\", {\n epicSubject: epic.get('subject')\n });\n return $confirm.ask(title, null, message).then(function(askResponse) {\n var epicId, onError, onSuccess, usId;\n onSuccess = function() {\n askResponse.finish();\n return scope.$broadcast(\"related-epics:changed\", scope.item);\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n epicId = epic.get('id');\n usId = scope.item.id;\n return $rs2.epics.deleteRelatedUserstory(epicId, usId).then(onSuccess, onError);\n });\n };\n return updateEpics = function(epics) {\n scope.epicsLength = 0;\n scope.immutable_epics = [];\n if (epics && !epics.isIterable) {\n scope.epicsLength = epics.length;\n return scope.immutable_epics = Immutable.fromJS(epics);\n }\n };\n };\n templateUrl = function(el, attrs) {\n if (attrs.format) {\n return \"components/belong-to-epics/belong-to-epics-\" + attrs.format + \".html\";\n }\n return \"components/belong-to-epics/belong-to-epics-pill.html\";\n };\n return {\n link: link,\n scope: {\n epics: '=',\n item: \"=\"\n },\n templateUrl: templateUrl\n };\n };\n\n module.directive(\"tgBelongToEpics\", [\"$translate\", \"$tgConfirm\", \"$tgResources\", \"tgResources\", \"lightboxService\", BelongToEpicsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/bind-code.directive.coffee\n */\n\n(function() {\n var BindCode;\n\n BindCode = function($sce, $parse, $compile, wysiwygService, wysiwygCodeHightlighterService) {\n return {\n restrict: 'A',\n compile: function(tElement, tAttrs) {\n var tgBindCodeGetter, tgBindCodeWatch;\n tgBindCodeGetter = $parse(tAttrs.tgBindCode);\n tgBindCodeWatch = $parse(tAttrs.tgBindCode, function(value) {\n return (value || '').toString();\n });\n $compile.$$addBindingClass(tElement);\n return function(scope, element, attr) {\n $compile.$$addBindingInfo(element, attr.tgBindCode);\n return scope.$watch(tgBindCodeWatch, function() {\n var html;\n html = wysiwygService.getHTML(tgBindCodeGetter(scope));\n element.html($sce.getTrustedHtml(html) || '');\n return wysiwygCodeHightlighterService.addHightlighter(element);\n });\n };\n }\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgBindCode\", [\"$sce\", \"$parse\", \"$compile\", \"tgWysiwygService\", \"tgWysiwygCodeHightlighterService\", BindCode]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/board-zoom/board-zoom.directive.coffee\n */\n\n(function() {\n var BoardZoomDirective;\n\n BoardZoomDirective = function() {\n return {\n scope: {\n levels: \"=\",\n value: \"=\"\n },\n templateUrl: 'components/board-zoom/board-zoom.html'\n };\n };\n\n angular.module('taigaComponents').directive(\"tgBoardZoom\", [BoardZoomDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/card-slideshow/card-slideshow.controller.coffee\n */\n\n(function() {\n var CardSlideshowController;\n\n CardSlideshowController = (function() {\n CardSlideshowController.$inject = [];\n\n function CardSlideshowController() {\n this.index = 0;\n }\n\n CardSlideshowController.prototype.next = function() {\n this.index++;\n if (this.index >= this.images.size) {\n return this.index = 0;\n }\n };\n\n CardSlideshowController.prototype.previous = function() {\n this.index--;\n if (this.index < 0) {\n return this.index = this.images.size - 1;\n }\n };\n\n return CardSlideshowController;\n\n })();\n\n angular.module('taigaComponents').controller('CardSlideshow', CardSlideshowController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/card-slideshow/card-slideshow.directive.coffee\n */\n\n(function() {\n var cardSlideshowDirective, module;\n\n module = angular.module(\"taigaComponents\");\n\n cardSlideshowDirective = function() {\n return {\n controller: \"CardSlideshow\",\n templateUrl: \"components/card-slideshow/card-slideshow.html\",\n bindToController: true,\n controllerAs: \"vm\",\n scope: {\n images: \"=\"\n }\n };\n };\n\n module.directive('tgCardSlideshow', cardSlideshowDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/card/card.controller.coffee\n */\n\n(function() {\n var CardController;\n\n CardController = (function() {\n function CardController() {}\n\n CardController.$inject = [];\n\n CardController.prototype.visible = function(name) {\n return this.zoom.indexOf(name) !== -1;\n };\n\n CardController.prototype.hasTasks = function() {\n var tasks;\n tasks = this.item.getIn(['model', 'tasks']);\n return tasks && tasks.size > 0;\n };\n\n CardController.prototype.hasMultipleAssignedUsers = function() {\n var assignedUsers;\n assignedUsers = this.item.getIn(['model', 'assigned_users']);\n return assignedUsers && assignedUsers.size > 1;\n };\n\n CardController.prototype.hasVisibleAttachments = function() {\n return this.item.get('images').size > 0;\n };\n\n CardController.prototype.toggleFold = function() {\n return this.onToggleFold({\n id: this.item.get('id')\n });\n };\n\n CardController.prototype.getClosedTasks = function() {\n return this.item.getIn(['model', 'tasks']).filter(function(task) {\n return task.get('is_closed');\n });\n };\n\n CardController.prototype.closedTasksPercent = function() {\n return this.getClosedTasks().size * 100 / this.item.getIn(['model', 'tasks']).size;\n };\n\n CardController.prototype.getModifyPermisionKey = function() {\n if (this.type === 'task') {\n return 'modify_task';\n } else {\n return 'modify_us';\n }\n };\n\n CardController.prototype.getDeletePermisionKey = function() {\n if (this.type === 'task') {\n return 'delete_task';\n } else {\n return 'delete_us';\n }\n };\n\n CardController.prototype._setVisibility = function() {\n var visibility;\n visibility = {\n related: this.visible('related_tasks'),\n slides: this.visible('attachments')\n };\n if (!_.isUndefined(this.item.get('foldStatusChanged'))) {\n if (this.visible('related_tasks') && this.visible('attachments')) {\n visibility.related = !this.item.get('foldStatusChanged');\n visibility.slides = !this.item.get('foldStatusChanged');\n } else if (this.visible('attachments')) {\n visibility.related = this.item.get('foldStatusChanged');\n visibility.slides = this.item.get('foldStatusChanged');\n } else if (!this.visible('related_tasks') && !this.visible('attachments')) {\n visibility.related = this.item.get('foldStatusChanged');\n visibility.slides = this.item.get('foldStatusChanged');\n }\n }\n if (!this.item.getIn(['model', 'tasks']) || !this.item.getIn(['model', 'tasks']).size) {\n visibility.related = false;\n }\n if (!this.item.get('images') || !this.item.get('images').size) {\n visibility.slides = false;\n }\n return visibility;\n };\n\n CardController.prototype.isRelatedTasksVisible = function() {\n var visibility;\n visibility = this._setVisibility();\n return visibility.related;\n };\n\n CardController.prototype.isSlideshowVisible = function() {\n var visibility;\n visibility = this._setVisibility();\n return visibility.slides;\n };\n\n CardController.prototype.getNavKey = function() {\n if (this.type === 'task') {\n return 'project-tasks-detail';\n } else if (this.type === 'issue') {\n return 'project-issues-detail';\n } else {\n return 'project-userstories-detail';\n }\n };\n\n return CardController;\n\n })();\n\n angular.module('taigaComponents').controller('Card', CardController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/card/card.directive.coffee\n */\n\n(function() {\n var cardDirective, module;\n\n module = angular.module(\"taigaComponents\");\n\n cardDirective = function() {\n return {\n link: function(scope) {},\n controller: \"Card\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"components/card/card.html\",\n scope: {\n onToggleFold: \"&\",\n onClickAssignedTo: \"&\",\n onClickEdit: \"&\",\n onClickRemove: \"&\",\n onClickDelete: \"&\",\n project: \"=\",\n item: \"=\",\n zoom: \"=\",\n zoomLevel: \"=\",\n archived: \"=\",\n type: \"@\"\n }\n };\n };\n\n module.directive('tgCard', cardDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/click-input-file.directive.coffee\n */\n\n(function() {\n var ClickInputFile;\n\n ClickInputFile = function() {\n return {\n link: function(scope, el) {\n el.on('click', function(e) {\n var inputFile;\n if (!$(e.target).is('input')) {\n e.preventDefault();\n inputFile = el.find('input[type=\"file\"]');\n inputFile.val('');\n return inputFile.trigger('click');\n }\n });\n return scope.$on(\"$destroy\", function() {\n return el.off();\n });\n }\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgClickInputFile\", [ClickInputFile]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/color-selector/color-selector.controller.coffee\n */\n\n(function() {\n var ColorSelectorController, getDefaulColorList, taiga;\n\n taiga = this.taiga;\n\n getDefaulColorList = taiga.getDefaulColorList;\n\n ColorSelectorController = (function() {\n ColorSelectorController.$inject = [\"tgProjectService\"];\n\n function ColorSelectorController(projectService) {\n this.projectService = projectService;\n this.colorList = getDefaulColorList();\n this.checkIsColorRequired();\n this.displayColorList = false;\n }\n\n ColorSelectorController.prototype.userCanChangeColor = function() {\n if (!this.requiredPerm) {\n return true;\n }\n return this.projectService.hasPermission(this.requiredPerm);\n };\n\n ColorSelectorController.prototype.checkIsColorRequired = function() {\n if (!this.isColorRequired) {\n return this.colorList = _.dropRight(this.colorList);\n }\n };\n\n ColorSelectorController.prototype.setColor = function(color) {\n this.color = color;\n return this.customColor = color;\n };\n\n ColorSelectorController.prototype.resetColor = function() {\n if (this.isColorRequired && !this.color) {\n return this.color = this.initColor;\n }\n };\n\n ColorSelectorController.prototype.toggleColorList = function() {\n this.displayColorList = !this.displayColorList;\n this.customColor = this.color;\n return this.resetColor();\n };\n\n ColorSelectorController.prototype.onSelectDropdownColor = function(color) {\n this.color = color;\n this.onSelectColor({\n color: color\n });\n return this.toggleColorList();\n };\n\n ColorSelectorController.prototype.onKeyDown = function(event) {\n if (event.which === 13) {\n if (this.customColor || !this.isColorRequired) {\n this.onSelectDropdownColor(this.customColor);\n }\n return event.preventDefault();\n }\n };\n\n return ColorSelectorController;\n\n })();\n\n angular.module('taigaComponents').controller(\"ColorSelectorCtrl\", ColorSelectorController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/color-selector/color-selector.directive.coffee\n */\n\n(function() {\n var ColorSelectorDirective, bindOnce;\n\n bindOnce = this.taiga.bindOnce;\n\n ColorSelectorDirective = function($timeout) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var _timeout, cancel, close;\n _timeout = null;\n cancel = function() {\n $timeout.cancel(_timeout);\n return _timeout = null;\n };\n close = function() {\n if (_timeout) {\n return;\n }\n return _timeout = $timeout((function() {\n ctrl.displayColorList = false;\n return ctrl.resetColor();\n }), 400);\n };\n el.find('.color-selector').mouseenter(cancel).mouseleave(close);\n el.find('.color-selector-dropdown').mouseenter(cancel).mouseleave(close);\n return scope.$watch('vm.initColor', function(color) {\n return ctrl.setColor(color);\n });\n };\n return {\n link: link,\n templateUrl: \"components/color-selector/color-selector.html\",\n controller: \"ColorSelectorCtrl\",\n controllerAs: \"vm\",\n bindToController: {\n isColorRequired: \"=\",\n onSelectColor: \"&\",\n initColor: \"=\",\n requiredPerm: \"@\"\n },\n scope: {}\n };\n };\n\n ColorSelectorDirective.$inject = [\"$timeout\"];\n\n angular.module('taigaComponents').directive(\"tgColorSelector\", ColorSelectorDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/detail/header/detail-header.controller.coffee\n */\n\n(function() {\n var StoryHeaderController, module;\n\n module = angular.module(\"taigaUserStories\");\n\n StoryHeaderController = (function() {\n StoryHeaderController.$inject = [\"$rootScope\", \"$tgConfirm\", \"$tgQueueModelTransformation\", \"$tgNavUrls\", \"$window\"];\n\n function StoryHeaderController(rootScope, confirm, modelTransform, navUrls, window) {\n this.rootScope = rootScope;\n this.confirm = confirm;\n this.modelTransform = modelTransform;\n this.navUrls = navUrls;\n this.window = window;\n this.editMode = false;\n this.loadingSubject = false;\n this.originalSubject = this.item.subject;\n this.objType = {\n 'tasks': 'task',\n 'issues': 'issue',\n 'userstories': 'us'\n }[this.item._name];\n }\n\n StoryHeaderController.prototype._checkNav = function() {\n var ctx, ref, ref1;\n if (((ref = this.item.neighbors.previous) != null ? ref.ref : void 0) != null) {\n ctx = {\n project: this.project.slug,\n ref: this.item.neighbors.previous.ref\n };\n this.previousUrl = this.navUrls.resolve(\"project-\" + this.item._name + \"-detail\", ctx);\n }\n if (((ref1 = this.item.neighbors.next) != null ? ref1.ref : void 0) != null) {\n ctx = {\n project: this.project.slug,\n ref: this.item.neighbors.next.ref\n };\n return this.nextUrl = this.navUrls.resolve(\"project-\" + this.item._name + \"-detail\", ctx);\n }\n };\n\n StoryHeaderController.prototype._checkPermissions = function() {\n return this.permissions = {\n canEdit: _.includes(this.project.my_permissions, this.requiredPerm)\n };\n };\n\n StoryHeaderController.prototype.cancelEdit = function() {\n this.editMode = false;\n return this.item.subject = this.originalSubject;\n };\n\n StoryHeaderController.prototype.editSubject = function(value) {\n var selection;\n selection = this.window.getSelection();\n if (selection.type !== \"Range\") {\n if (value) {\n this.editMode = true;\n }\n if (!value) {\n return this.editMode = false;\n }\n }\n };\n\n StoryHeaderController.prototype.onKeyDown = function(event) {\n if (event.which === 13) {\n this.saveSubject();\n }\n if (event.which === 27) {\n this.item.subject = this.originalSubject;\n return this.editSubject(false);\n }\n };\n\n StoryHeaderController.prototype.saveSubject = function() {\n var item, onEditSubjectError, onEditSubjectSuccess, transform;\n onEditSubjectSuccess = (function(_this) {\n return function() {\n _this.loadingSubject = false;\n _this.rootScope.$broadcast(\"object:updated\");\n _this.confirm.notify('success');\n return _this.originalSubject = _this.item.subject;\n };\n })(this);\n onEditSubjectError = (function(_this) {\n return function() {\n _this.loadingSubject = false;\n return _this.confirm.notify('error');\n };\n })(this);\n this.editMode = false;\n this.loadingSubject = true;\n item = this.item;\n transform = this.modelTransform.save(function(item) {\n return item;\n });\n return transform.then(onEditSubjectSuccess, onEditSubjectError);\n };\n\n StoryHeaderController.prototype.relateToEpic = function(us) {\n return this.rootScope.$broadcast(\"relate-to-epic:add\", us);\n };\n\n return StoryHeaderController;\n\n })();\n\n module.controller(\"StoryHeaderCtrl\", StoryHeaderController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/detail/header/detail-header.directive.coffee\n */\n\n(function() {\n var DetailHeaderDirective, module;\n\n module = angular.module('taigaUserStories');\n\n DetailHeaderDirective = function() {\n var link;\n this.$inject = [];\n link = function(scope, el, attrs, ctrl) {\n ctrl._checkPermissions();\n return ctrl._checkNav();\n };\n return {\n link: link,\n controller: \"StoryHeaderCtrl\",\n bindToController: true,\n scope: {\n item: \"=\",\n project: \"=\",\n requiredPerm: \"@\"\n },\n controllerAs: \"vm\",\n templateUrl: \"components/detail/header/detail-header.html\"\n };\n };\n\n module.directive(\"tgDetailHeader\", DetailHeaderDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/due-date/due-date-controller.coffee\n */\n\n(function() {\n var DueDateController;\n\n DueDateController = (function() {\n DueDateController.$inject = [\"$translate\", \"tgLightboxFactory\", \"tgProjectService\", \"$rootScope\"];\n\n function DueDateController(translate, tgLightboxFactory, projectService, rootscope) {\n this.translate = translate;\n this.tgLightboxFactory = tgLightboxFactory;\n this.projectService = projectService;\n this.rootscope = rootscope;\n this.defaultConfig = [\n {\n \"color\": \"#9dce0a\",\n \"name\": \"normal due\",\n \"days_to_due\": null,\n \"by_default\": true\n }, {\n \"color\": \"#ff9900\",\n \"name\": \"due soon\",\n \"days_to_due\": 14,\n \"by_default\": false\n }, {\n \"color\": \"#ff8a84\",\n \"name\": \"past due\",\n \"days_to_due\": 0,\n \"by_default\": false\n }\n ];\n }\n\n DueDateController.prototype.visible = function() {\n return this.format === 'button' || (this.dueDate != null);\n };\n\n DueDateController.prototype.disabled = function() {\n return this.isClosed;\n };\n\n DueDateController.prototype.color = function() {\n var ref;\n return ((ref = this.getStatus()) != null ? ref.color : void 0) || null;\n };\n\n DueDateController.prototype.title = function() {\n if (this.dueDate) {\n return this._formatTitle();\n } else if (this.format === 'button') {\n return this.translate.instant('COMMON.DUE_DATE.TITLE_ACTION_SET_DUE_DATE');\n }\n return '';\n };\n\n DueDateController.prototype.getStatus = function(options) {\n var project;\n if (!this.dueDate) {\n return null;\n }\n project = this.projectService.project.toJS();\n options = project[this.objType + \"_duedates\"];\n if (!options) {\n options = this.defaultConfig;\n }\n return this._getAppearance(options);\n };\n\n DueDateController.prototype._getDefaultAppearance = function(options) {\n var defaultAppearance;\n defaultAppearance = null;\n _.map(options, function(option) {\n if (option.by_default === true) {\n return defaultAppearance = option;\n }\n });\n return defaultAppearance;\n };\n\n DueDateController.prototype._getAppearance = function(options) {\n var currentAppearance, dueDate, now;\n currentAppearance = this._getDefaultAppearance(options);\n options = _.sortBy(options, function(o) {\n return -o.days_to_due;\n });\n dueDate = moment(this.dueDate);\n now = moment();\n _.map(options, function(appearance) {\n var limitDate;\n if (appearance.days_to_due === null) {\n return;\n }\n limitDate = moment(dueDate - moment.duration(appearance.days_to_due, \"days\"));\n if (now >= limitDate) {\n return currentAppearance = appearance;\n }\n });\n return currentAppearance;\n };\n\n DueDateController.prototype._formatTitle = function() {\n var formatedDate, prettyDate, status;\n prettyDate = this.translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n formatedDate = moment(this.dueDate).format(prettyDate);\n status = this.getStatus();\n if (status != null ? status.name : void 0) {\n return formatedDate + \" (\" + status.name + \")\";\n }\n return formatedDate;\n };\n\n DueDateController.prototype.setDueDate = function() {\n if (this.disabled()) {\n return;\n }\n return this.tgLightboxFactory.create(\"tg-lb-set-due-date\", {\n \"class\": \"lightbox lightbox-set-due-date\"\n }, {\n \"object\": this.item,\n \"notAutoSave\": this.notAutoSave\n });\n };\n\n return DueDateController;\n\n })();\n\n angular.module('taigaComponents').controller('DueDateCtrl', DueDateController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/due-date/due-date-popover.directive.coffee\n */\n\n(function() {\n var dueDatePopoverDirective, module;\n\n module = angular.module(\"taigaComponents\");\n\n dueDatePopoverDirective = function($translate, datePickerConfigService) {\n return {\n link: function(scope, el, attrs, ctrl) {\n var datePickerConfig;\n scope.open = false;\n datePickerConfig = datePickerConfigService.get();\n _.merge(datePickerConfig, {\n field: el.find('.due-date-button')[0],\n container: el.find('.date-picker-container')[0],\n bound: true,\n onClose: function() {\n scope.open = false;\n return scope.$apply();\n },\n onSelect: function() {\n return ctrl.dueDate = this.getMoment().format('YYYY-MM-DD');\n }\n });\n el.picker = new Pikaday(datePickerConfig);\n el.on(\"click\", \".due-date-button\", function(event) {\n if (scope.open) {\n el.picker.hide();\n return;\n }\n if (!el.picker.getDate() && ctrl.dueDate) {\n el.picker.setDate(moment(ctrl.dueDate).format('YYYY-MM-DD'));\n }\n el.picker.show();\n scope.open = true;\n return scope.$apply();\n });\n el.on(\"click\", \".date-picker-clean\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n ctrl.dueDate = null;\n el.picker.setDate(ctrl.dueDate);\n scope.open = false;\n el.picker.hide();\n return scope.$apply();\n });\n return scope.$on(\"status:changed\", function(ctx, status) {\n return ctrl.isClosed = ctrl.item.is_closed;\n });\n },\n controller: \"DueDateCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"components/due-date/due-date-popover.html\",\n scope: {\n dueDate: '=',\n isClosed: '=',\n item: '=',\n objType: '@',\n format: '@',\n notAutoSave: '='\n }\n };\n };\n\n module.directive('tgDueDatePopover', ['$translate', 'tgDatePickerConfigService', dueDatePopoverDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/due-date/due-date.directive.coffee\n */\n\n(function() {\n var dueDateDirective, module;\n\n module = angular.module(\"taigaComponents\");\n\n dueDateDirective = function($translate, datePickerConfigService) {\n var templateUrl;\n templateUrl = function(el, attrs) {\n if (attrs.format) {\n return \"components/due-date/due-date-\" + attrs.format + \".html\";\n }\n return \"components/due-date/due-date-icon.html\";\n };\n return {\n link: function(scope, el, attrs, ctrl) {\n var renderDatePicker;\n renderDatePicker = function() {\n var datePickerConfig, prettyDate;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n if (ctrl.dueDate) {\n ctrl.dueDate = moment(ctrl.dueDate, prettyDate);\n }\n el.on(\"click\", \".date-picker-popover-trigger\", function(event) {\n if (ctrl.disabled()) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n return el.find(\".date-picker-popover\").popover().open();\n });\n el.on(\"click\", \".date-picker-clean\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n ctrl.dueDate = null;\n scope.$apply();\n return el.find(\".date-picker-popover\").popover().close();\n });\n datePickerConfig = datePickerConfigService.get();\n _.merge(datePickerConfig, {\n field: el.find('input.due-date')[0],\n container: el.find('.date-picker-container')[0],\n bound: false,\n onSelect: function() {\n ctrl.dueDate = this.getMoment().format('YYYY-MM-DD');\n el.find(\".date-picker-popover\").popover().close();\n return scope.$apply();\n }\n });\n return el.picker = new Pikaday(datePickerConfig);\n };\n if (attrs.format === 'button-popover') {\n return renderDatePicker();\n }\n },\n controller: \"DueDateCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: templateUrl,\n scope: {\n dueDate: '=',\n isClosed: '=',\n item: '=',\n objType: '@',\n format: '@',\n notAutoSave: '='\n }\n };\n };\n\n module.directive('tgDueDate', ['$translate', 'tgDatePickerConfigService', dueDateDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/file-change/file-change.directive.coffee\n */\n\n(function() {\n var FileChangeDirective;\n\n FileChangeDirective = function($parse) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var eventAttr;\n eventAttr = $parse(attrs.tgFileChange);\n el.on('change', function(event) {\n return scope.$apply(function() {\n return eventAttr(scope, {\n files: event.currentTarget.files\n });\n });\n });\n return scope.$on(\"$destroy\", function() {\n return el.off();\n });\n };\n return {\n restrict: \"A\",\n link: link\n };\n };\n\n FileChangeDirective.$inject = [\"$parse\"];\n\n angular.module(\"taigaComponents\").directive(\"tgFileChange\", FileChangeDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/filter/filter-remote.service.coffee\n */\n\n(function() {\n var FilterRemoteStorageService, generateHash,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n generateHash = taiga.generateHash;\n\n FilterRemoteStorageService = (function(superClass) {\n extend(FilterRemoteStorageService, superClass);\n\n FilterRemoteStorageService.$inject = [\"$q\", \"$tgUrls\", \"$tgHttp\"];\n\n function FilterRemoteStorageService(q, urls, http) {\n this.q = q;\n this.urls = urls;\n this.http = http;\n }\n\n FilterRemoteStorageService.prototype.storeFilters = function(projectId, myFilters, filtersHashSuffix) {\n var deferred, hash, ns, promise, url;\n deferred = this.q.defer();\n url = this.urls.resolve(\"user-storage\");\n ns = projectId + \":\" + filtersHashSuffix;\n hash = generateHash([projectId, ns]);\n if (_.isEmpty(myFilters)) {\n promise = this.http[\"delete\"](url + \"/\" + hash, {\n key: hash,\n value: myFilters\n });\n promise.then(function() {\n return deferred.resolve();\n });\n promise.then(null, function() {\n return deferred.reject();\n });\n } else {\n promise = this.http.put(url + \"/\" + hash, {\n key: hash,\n value: myFilters\n });\n promise.then(function(data) {\n return deferred.resolve();\n });\n promise.then(null, (function(_this) {\n return function(data) {\n var innerPromise;\n innerPromise = _this.http.post(\"\" + url, {\n key: hash,\n value: myFilters\n });\n innerPromise.then(function() {\n return deferred.resolve();\n });\n return innerPromise.then(null, function() {\n return deferred.reject();\n });\n };\n })(this));\n }\n return deferred.promise;\n };\n\n FilterRemoteStorageService.prototype.getFilters = function(projectId, filtersHashSuffix) {\n var deferred, hash, ns, promise, url;\n deferred = this.q.defer();\n url = this.urls.resolve(\"user-storage\");\n ns = projectId + \":\" + filtersHashSuffix;\n hash = generateHash([projectId, ns]);\n promise = this.http.get(url + \"/\" + hash);\n promise.then(function(data) {\n return deferred.resolve(data.data.value);\n });\n promise.then(null, function(data) {\n return deferred.resolve({});\n });\n return deferred.promise;\n };\n\n return FilterRemoteStorageService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgFilterRemoteStorageService\", FilterRemoteStorageService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/filter/filter-slide-down.directive.coffee\n */\n\n(function() {\n var FilterSlideDownDirective;\n\n FilterSlideDownDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var filter;\n filter = $('tg-filter');\n return scope.$watch(attrs.ngIf, function(value) {\n var contentHeight, wrapperHeight;\n if (value) {\n filter.find('.filter-list').hide();\n wrapperHeight = filter.height();\n contentHeight = 0;\n filter.children().each(function() {\n return contentHeight += $(this).outerHeight(true);\n });\n return $(el.context.nextSibling).css({\n \"max-height\": wrapperHeight - contentHeight,\n \"display\": \"block\"\n });\n }\n });\n };\n return {\n priority: 900,\n link: link\n };\n };\n\n angular.module('taigaComponents').directive(\"tgFilterSlideDown\", [FilterSlideDownDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/filter/filter.controller.coffee\n */\n\n(function() {\n var FilterController;\n\n FilterController = (function() {\n FilterController.$inject = [];\n\n function FilterController() {\n this.opened = null;\n this.customFilterForm = false;\n this.customFilterName = '';\n }\n\n FilterController.prototype.toggleFilterCategory = function(filterName) {\n if (this.opened === filterName) {\n return this.opened = null;\n } else {\n return this.opened = filterName;\n }\n };\n\n FilterController.prototype.isOpen = function(filterName) {\n return this.opened === filterName;\n };\n\n FilterController.prototype.saveCustomFilter = function() {\n this.onSaveCustomFilter({\n name: this.customFilterName\n });\n this.customFilterForm = false;\n this.opened = 'custom-filter';\n return this.customFilterName = '';\n };\n\n FilterController.prototype.changeQ = function() {\n return this.onChangeQ({\n q: this.q\n });\n };\n\n FilterController.prototype.unselectFilter = function(filter) {\n return this.onRemoveFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.unselectFilter = function(filter) {\n return this.onRemoveFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.selectFilter = function(filterCategory, filter) {\n filter = {\n category: filterCategory,\n filter: filter\n };\n return this.onAddFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.removeCustomFilter = function(filter) {\n return this.onRemoveCustomFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.selectCustomFilter = function(filter) {\n return this.onSelectCustomFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.isFilterSelected = function(filterCategory, filter) {\n return !!_.find(this.selectedFilters, function(it) {\n return filter.id === it.id && filterCategory.dataType === it.dataType;\n });\n };\n\n return FilterController;\n\n })();\n\n angular.module('taigaComponents').controller('Filter', FilterController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/filter/filter.directive.coffee\n */\n\n(function() {\n var FilterDirective;\n\n FilterDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var unwatch;\n unwatch = scope.$watch(\"vm.defaultQ\", function(q) {\n if (q && !scope.vm.filtersForm.$dirty) {\n scope.vm.q = q;\n return unwatch();\n } else if (scope.vm.filtersForm.$dirty) {\n return unwatch();\n }\n });\n return attrs.$observe(\"open\", function(open) {\n open = scope.$eval(open);\n if (open) {\n return el.addClass('open');\n } else {\n return el.removeClass('open');\n }\n });\n };\n return {\n scope: {\n onChangeQ: \"&\",\n onAddFilter: \"&\",\n onSelectCustomFilter: \"&\",\n onRemoveFilter: \"&\",\n onRemoveCustomFilter: \"&\",\n onSaveCustomFilter: \"&\",\n customFilters: \"<\",\n defaultQ: \"=q\",\n filters: \"<\",\n customFilters: \"<\",\n selectedFilters: \"<\"\n },\n bindToController: true,\n controller: \"Filter\",\n controllerAs: \"vm\",\n templateUrl: 'components/filter/filter.html',\n link: link\n };\n };\n\n angular.module('taigaComponents').directive(\"tgFilter\", [FilterDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/joy-ride/joy-ride.directive.coffee\n */\n\n(function() {\n var JoyRideDirective, taiga;\n\n taiga = this.taiga;\n\n JoyRideDirective = function($rootScope, currentUserService, joyRideService, $location, $translate) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var initJoyrRide, intro, unsuscribe;\n unsuscribe = null;\n intro = introJs();\n intro.oncomplete(function() {\n return $('html,body').scrollTop(0);\n });\n intro.onexit(function() {\n return currentUserService.disableJoyRide();\n });\n initJoyrRide = function(next, config) {\n if (!config[next.joyride]) {\n return;\n }\n intro.setOptions({\n exitOnEsc: false,\n exitOnOverlayClick: false,\n showStepNumbers: false,\n nextLabel: $translate.instant('JOYRIDE.NAV.NEXT') + ' →',\n prevLabel: '← ' + $translate.instant('JOYRIDE.NAV.BACK'),\n skipLabel: $translate.instant('JOYRIDE.NAV.SKIP'),\n doneLabel: $translate.instant('JOYRIDE.NAV.DONE'),\n disableInteraction: true\n });\n intro.setOption('steps', joyRideService.get(next.joyride));\n return intro.start();\n };\n return $rootScope.$on('$routeChangeSuccess', function(event, next) {\n if (!next.joyride || !currentUserService.isAuthenticated()) {\n intro.exit();\n if (unsuscribe) {\n unsuscribe();\n }\n return;\n }\n intro.oncomplete(function() {\n return currentUserService.disableJoyRide(next.joyride);\n });\n if (next.loader) {\n return unsuscribe = $rootScope.$on('loader:end', function() {\n currentUserService.loadJoyRideConfig().then(function(config) {\n return initJoyrRide(next, config);\n });\n return unsuscribe();\n });\n } else {\n return currentUserService.loadJoyRideConfig().then(function(config) {\n return initJoyrRide(next, config);\n });\n }\n });\n };\n return {\n scope: {},\n link: link\n };\n };\n\n JoyRideDirective.$inject = [\"$rootScope\", \"tgCurrentUserService\", \"tgJoyRideService\", \"$location\", \"$translate\"];\n\n angular.module(\"taigaComponents\").directive(\"tgJoyRide\", JoyRideDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/joy-ride/joy-ride.service.coffee\n */\n\n(function() {\n var JoyRideService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n JoyRideService = (function(superClass) {\n extend(JoyRideService, superClass);\n\n JoyRideService.$inject = ['$translate', 'tgCheckPermissionsService'];\n\n function JoyRideService(translate, checkPermissionsService) {\n this.translate = translate;\n this.checkPermissionsService = checkPermissionsService;\n }\n\n JoyRideService.prototype.getConfig = function() {\n return {\n dashboard: (function(_this) {\n return function() {\n var steps;\n steps = [\n {\n element: '.project-list > section:not(.ng-hide)',\n position: 'left',\n joyride: {\n title: _this.translate.instant('JOYRIDE.DASHBOARD.STEP1.TITLE'),\n text: _this.translate.instant('JOYRIDE.DASHBOARD.STEP1.TEXT')\n }\n }, {\n element: '.working-on-container',\n position: 'right',\n joyride: {\n title: _this.translate.instant('JOYRIDE.DASHBOARD.STEP2.TITLE'),\n text: _this.translate.instant('JOYRIDE.DASHBOARD.STEP2.TEXT')\n }\n }, {\n element: '.watching-container',\n position: 'right',\n joyride: {\n title: _this.translate.instant('JOYRIDE.DASHBOARD.STEP3.TITLE'),\n text: [_this.translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT1'), _this.translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT2')]\n }\n }\n ];\n if (!$('.project-list .create-project-button').is(':hidden')) {\n steps.push({\n element: '.project-list .create-project-button',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.DASHBOARD.STEP4.TITLE'),\n text: [_this.translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT1'), _this.translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT2')]\n }\n });\n }\n return steps;\n };\n })(this),\n backlog: (function(_this) {\n return function() {\n var steps;\n steps = [\n {\n element: '.summary',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.BACKLOG.STEP1.TITLE'),\n text: [_this.translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT1'), _this.translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT2')]\n }\n }, {\n element: '.backlog-table-empty',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.BACKLOG.STEP2.TITLE'),\n text: _this.translate.instant('JOYRIDE.BACKLOG.STEP2.TEXT')\n }\n }, {\n element: '.sprints',\n position: 'left',\n joyride: {\n title: _this.translate.instant('JOYRIDE.BACKLOG.STEP3.TITLE'),\n text: _this.translate.instant('JOYRIDE.BACKLOG.STEP3.TEXT')\n }\n }\n ];\n if (_this.checkPermissionsService.check('add_us')) {\n steps.push({\n element: '.new-us',\n position: 'rigth',\n joyride: {\n title: _this.translate.instant('JOYRIDE.BACKLOG.STEP4.TITLE'),\n text: _this.translate.instant('JOYRIDE.BACKLOG.STEP4.TEXT')\n }\n });\n }\n return steps;\n };\n })(this),\n kanban: (function(_this) {\n return function() {\n var steps;\n steps = [\n {\n element: '.kanban-table-inner',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.KANBAN.STEP1.TITLE'),\n text: _this.translate.instant('JOYRIDE.KANBAN.STEP1.TEXT')\n }\n }, {\n element: '.card-placeholder',\n position: 'right',\n joyride: {\n title: _this.translate.instant('JOYRIDE.KANBAN.STEP2.TITLE'),\n text: _this.translate.instant('JOYRIDE.KANBAN.STEP2.TEXT')\n }\n }\n ];\n if (_this.checkPermissionsService.check('add_us')) {\n steps.push({\n element: '.add-action',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.KANBAN.STEP3.TITLE'),\n text: [_this.translate.instant('JOYRIDE.KANBAN.STEP3.TEXT1'), _this.translate.instant('JOYRIDE.KANBAN.STEP3.TEXT2')]\n }\n });\n }\n return steps;\n };\n })(this)\n };\n };\n\n JoyRideService.prototype.get = function(name) {\n var joyRide, joyRides;\n joyRides = this.getConfig();\n joyRide = joyRides[name].call(this);\n return _.map(joyRide, function(item) {\n var html;\n html = \"\";\n if (item.joyride.title) {\n html += \"

    \" + item.joyride.title + \"

    \";\n }\n if (_.isArray(item.joyride.text)) {\n _.forEach(item.joyride.text, function(text) {\n return html += \"

    \" + text + \"

    \";\n });\n } else {\n html += \"

    \" + item.joyride.text + \"

    \";\n }\n item.intro = html;\n return item;\n });\n };\n\n return JoyRideService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgJoyRideService\", JoyRideService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/kanban-board-zoom/kanban-board-zoom.directive.coffee\n */\n\n(function() {\n var KanbanBoardZoomDirective;\n\n KanbanBoardZoomDirective = function(storage, projectService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var getZoomView, unwatch, zooms;\n scope.zoomIndex = storage.get(\"kanban_zoom\") || 2;\n scope.levels = 5;\n zooms = [[\"ref\"], [\"subject\"], [\"owner\", \"tags\", \"extra_info\", \"unfold\"], [\"attachments\"], [\"related_tasks\", \"empty_extra_info\"]];\n getZoomView = function(zoomIndex) {\n if (zoomIndex == null) {\n zoomIndex = 0;\n }\n if (storage.get(\"kanban_zoom\") !== zoomIndex) {\n storage.set(\"kanban_zoom\", zoomIndex);\n }\n return _.reduce(zooms, function(result, value, key) {\n if (key <= zoomIndex) {\n result = result.concat(value);\n }\n return result;\n });\n };\n scope.$watch('zoomIndex', function(zoomLevel) {\n var zoom;\n zoom = getZoomView(zoomLevel);\n return scope.onZoomChange({\n zoomLevel: zoomLevel,\n zoom: zoom\n });\n });\n return unwatch = scope.$watch(function() {\n return projectService.project;\n }, function(project) {\n if (project) {\n if (project.get('my_permissions').indexOf(\"view_tasks\") === -1) {\n scope.levels = 4;\n }\n return unwatch();\n }\n });\n };\n return {\n scope: {\n onZoomChange: \"&\"\n },\n template: \"\",\n link: link\n };\n };\n\n angular.module('taigaComponents').directive(\"tgKanbanBoardZoom\", [\"$tgStorage\", \"tgProjectService\", KanbanBoardZoomDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/live-announcement/live-announcement.directive.coffee\n */\n\n(function() {\n var LiveAnnouncementDirective;\n\n LiveAnnouncementDirective = function(liveAnnouncementService) {\n var link;\n link = function(scope, el, attrs) {};\n return {\n restrict: \"AE\",\n scope: {},\n controllerAs: 'vm',\n controller: function() {\n this.close = function() {\n return liveAnnouncementService.open = false;\n };\n return Object.defineProperties(this, {\n open: {\n get: function() {\n return liveAnnouncementService.open;\n }\n },\n title: {\n get: function() {\n return liveAnnouncementService.title;\n }\n },\n desc: {\n get: function() {\n return liveAnnouncementService.desc;\n }\n }\n });\n },\n link: link,\n templateUrl: \"components/live-announcement/live-announcement.html\"\n };\n };\n\n LiveAnnouncementDirective.$inject = [\"tgLiveAnnouncementService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgLiveAnnouncement\", LiveAnnouncementDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/live-announcement/live-announcement.service.coffee\n */\n\n(function() {\n var LiveAnnouncementService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n LiveAnnouncementService = (function(superClass) {\n extend(LiveAnnouncementService, superClass);\n\n function LiveAnnouncementService() {\n this.open = false;\n this.title = \"\";\n this.desc = \"\";\n }\n\n LiveAnnouncementService.prototype.show = function(title, desc) {\n this.open = true;\n this.title = title;\n return this.desc = desc;\n };\n\n return LiveAnnouncementService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgLiveAnnouncementService\", LiveAnnouncementService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.controller.coffee\n */\n\n(function() {\n var MoveToSprintLightboxController, module;\n\n module = angular.module(\"taigaComponents\");\n\n MoveToSprintLightboxController = (function() {\n MoveToSprintLightboxController.$inject = ['$rootScope', '$scope', '$tgResources', 'tgProjectService', '$translate', 'lightboxService', '$tgConfirm'];\n\n function MoveToSprintLightboxController(rootScope, scope, rs, projectService, translate, lightboxService, confirm) {\n this.rootScope = rootScope;\n this.scope = scope;\n this.rs = rs;\n this.projectService = projectService;\n this.translate = translate;\n this.lightboxService = lightboxService;\n this.confirm = confirm;\n this.projectId = this.projectService.project.get('id');\n this.loading = false;\n this.someSelected = false;\n this.selectedSprintId = null;\n this.typesSelected = {\n uss: false,\n tasks: false,\n issues: false\n };\n this.itemsToMove = {};\n this._loadSprints();\n this.scope.$watch(\"vm.openItems\", (function(_this) {\n return function(openItems) {\n if (!openItems) {\n return;\n }\n return _this._init(openItems);\n };\n })(this));\n }\n\n MoveToSprintLightboxController.prototype._init = function(openItems) {\n var ref, ref1, ref2;\n this.hasManyItemTypes = _.size(this.openItems) > 1;\n this.ussCount = parseInt((ref = openItems.uss) != null ? ref.length : void 0);\n this.updateSelected('uss', this.ussCount > 0);\n this.tasksCount = parseInt((ref1 = openItems.tasks) != null ? ref1.length : void 0);\n this.updateSelected('tasks', this.tasksCount > 0);\n this.issuesCount = parseInt((ref2 = openItems.issues) != null ? ref2.length : void 0);\n return this.updateSelected('issues', this.issuesCount > 0);\n };\n\n MoveToSprintLightboxController.prototype._loadSprints = function() {\n return this.rs.sprints.list(this.projectId, {\n closed: false\n }).then((function(_this) {\n return function(data) {\n return _this.sprints = _.filter(data.milestones, function(x) {\n return x.id !== _this.sprint.id;\n });\n };\n })(this));\n };\n\n MoveToSprintLightboxController.prototype.updateSelected = function(itemType, value) {\n this.typesSelected[itemType] = value;\n this.someSelected = _.some(this.typesSelected);\n if (value === true) {\n return this.itemsToMove[itemType] = this.openItems[itemType];\n } else if (this.itemsToMove[itemType]) {\n return delete this.itemsToMove[itemType];\n }\n };\n\n MoveToSprintLightboxController.prototype.submit = function() {\n var itemsNotMoved;\n itemsNotMoved = {};\n _.map(this.openItems, (function(_this) {\n return function(itemsList, itemsType) {\n if (!_this.itemsToMove[itemsType]) {\n return itemsNotMoved[itemsType] = true;\n }\n };\n })(this));\n this.loading = true;\n return this.moveItems().then((function(_this) {\n return function() {\n _this.rootScope.$broadcast(\"taskboard:items:move\", _this.typesSelected);\n _this.lightboxService.closeAll();\n _this.loading = false;\n if (_.size(itemsNotMoved) > 0) {\n return _this.displayWarning(itemsNotMoved);\n }\n };\n })(this));\n };\n\n MoveToSprintLightboxController.prototype.moveItems = function() {\n var promises;\n promises = [];\n if (this.itemsToMove.uss) {\n promises.push(this.rs.sprints.moveUserStoriesMilestone(this.sprint.id, this.projectId, this.selectedSprintId, this.itemsToMove.uss));\n }\n if (this.itemsToMove.tasks) {\n promises.push(this.rs.sprints.moveTasksMilestone(this.sprint.id, this.projectId, this.selectedSprintId, this.itemsToMove.tasks));\n }\n if (this.itemsToMove.issues) {\n promises.push(this.rs.sprints.moveIssuesMilestone(this.sprint.id, this.projectId, this.selectedSprintId, this.itemsToMove.issues));\n }\n return Promise.all(promises);\n };\n\n MoveToSprintLightboxController.prototype.displayWarning = function(itemsNotMoved) {\n var action, desc, ref, title, totalItemsMoved;\n action = this.translate.instant('COMMON.I_GET_IT');\n if (_.size(itemsNotMoved) === 1 && itemsNotMoved.issues === true) {\n title = this.translate.instant('TASKBOARD.MOVE_TO_SPRINT.WARNING_ISSUES_NOT_MOVED_TITLE');\n desc = this.translate.instant('TASKBOARD.MOVE_TO_SPRINT.WARNING_ISSUES_NOT_MOVED');\n } else {\n totalItemsMoved = 0;\n _.map(this.itemsToMove, function(itemsList, itemsType) {\n return totalItemsMoved += itemsList.length;\n });\n title = this.translate.instant('TASKBOARD.MOVE_TO_SPRINT.WARNING_SPRINT_STILL_OPEN_TITLE', {\n total: totalItemsMoved\n }, 'messageformat');\n desc = this.translate.instant('TASKBOARD.MOVE_TO_SPRINT.WARNING_SPRINT_STILL_OPEN', {\n sprintName: (ref = this.sprint) != null ? ref.name : void 0\n });\n }\n return this.confirm.success(title, desc, null, action);\n };\n\n return MoveToSprintLightboxController;\n\n })();\n\n module.controller(\"MoveToSprintLbCtrl\", MoveToSprintLightboxController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.directive.coffee\n */\n\n(function() {\n var module, moveToSprintLightboxDirective;\n\n module = angular.module(\"taigaComponents\");\n\n moveToSprintLightboxDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return lightboxService.open(el);\n };\n return {\n scope: {},\n bindToController: {\n openItems: \"=\",\n sprint: \"=\"\n },\n templateUrl: \"components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.html\",\n controller: \"MoveToSprintLbCtrl\",\n controllerAs: \"vm\",\n link: link\n };\n };\n\n moveToSprintLightboxDirective.$inject = [\"lightboxService\"];\n\n module.directive(\"tgLbMoveToSprint\", moveToSprintLightboxDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/move-to-sprint/move-to-sprint-controller.coffee\n */\n\n(function() {\n var MoveToSprintController, taiga;\n\n taiga = this.taiga;\n\n MoveToSprintController = (function() {\n MoveToSprintController.$inject = ['$scope', 'tgLightboxFactory', 'tgProjectService'];\n\n function MoveToSprintController(scope, lightboxFactory, projectService) {\n this.scope = scope;\n this.lightboxFactory = lightboxFactory;\n this.projectService = projectService;\n this.permissions = this.projectService.project.get('my_permissions');\n this.hasOpenItems = false;\n this.disabled = false;\n this.openItems = {\n uss: [],\n tasks: [],\n issues: []\n };\n this.scope.$watch(\"vm.uss\", (function(_this) {\n return function() {\n return _this.getOpenUss();\n };\n })(this));\n this.scope.$watch(\"vm.unnasignedTasks\", (function(_this) {\n return function() {\n return _this.getOpenStorylessTasks();\n };\n })(this));\n this.scope.$watch(\"vm.issues\", (function(_this) {\n return function() {\n return _this.getOpenIssues();\n };\n })(this));\n }\n\n MoveToSprintController.prototype.checkOpenItems = function() {\n return _.some(Object.keys(this.openItems), (function(_this) {\n return function(x) {\n return _this.openItems[x].length > 0;\n };\n })(this));\n };\n\n MoveToSprintController.prototype.openLightbox = function() {\n var openItems;\n if (this.disabled === !true && this.hasOpenItems) {\n openItems = {};\n _.map(this.openItems, function(itemsList, itemsType) {\n if (itemsList.length) {\n return openItems[itemsType] = itemsList;\n }\n });\n return this.lightboxFactory.create('tg-lb-move-to-sprint', {\n \"class\": \"lightbox lightbox-move-to-sprint\",\n \"sprint\": \"sprint\",\n \"open-items\": \"openItems\"\n }, {\n sprint: this.sprint,\n openItems: openItems\n });\n }\n };\n\n MoveToSprintController.prototype.getOpenUss = function() {\n if (!this.uss || this.permissions.indexOf(\"modify_us\") === -1) {\n return;\n }\n this.openItems.uss = [];\n this.uss.map((function(_this) {\n return function(us) {\n if (us.is_closed === false) {\n return _this.openItems.uss.push({\n us_id: us.id,\n order: us.sprint_order\n });\n }\n };\n })(this));\n return this.hasOpenItems = this.checkOpenItems();\n };\n\n MoveToSprintController.prototype.getOpenStorylessTasks = function() {\n if (!this.unnasignedTasks || this.permissions.indexOf(\"modify_task\") === -1) {\n return;\n }\n this.openItems.tasks = [];\n this.unnasignedTasks.map((function(_this) {\n return function(column) {\n return column.map(function(task) {\n if (task.get('model').get('is_closed') === false) {\n return _this.openItems.tasks.push({\n task_id: task.get('model').get('id'),\n order: task.get('model').get('taskboard_order')\n });\n }\n });\n };\n })(this));\n return this.hasOpenItems = this.checkOpenItems();\n };\n\n MoveToSprintController.prototype.getOpenIssues = function() {\n if (!this.issues || this.permissions.indexOf(\"modify_issue\") === -1) {\n return;\n }\n this.openItems.issues = [];\n this.issues.map((function(_this) {\n return function(issue) {\n if (issue.get('status').get('is_closed') === false) {\n return _this.openItems.issues.push({\n issue_id: issue.get('id')\n });\n }\n };\n })(this));\n return this.hasOpenItems = this.checkOpenItems();\n };\n\n return MoveToSprintController;\n\n })();\n\n angular.module('taigaComponents').controller('MoveToSprintCtrl', MoveToSprintController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/move-to-sprint/move-to-sprint.directive.coffee\n */\n\n(function() {\n var module, moveToSprintDirective;\n\n module = angular.module(\"taigaComponents\");\n\n moveToSprintDirective = function(taskboardTasksService) {\n return {\n controller: \"MoveToSprintCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: 'components/move-to-sprint/move-to-sprint.html',\n scope: {\n sprint: '=',\n uss: '=',\n unnasignedTasks: '=',\n issues: '=',\n disabled: '='\n }\n };\n };\n\n moveToSprintDirective.$inject = ['tgTaskboardTasks'];\n\n module.directive('tgMoveToSprint', [moveToSprintDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/project-logo-big-src/project-logo-big-src.directive.coffee\n */\n\n(function() {\n var ProjectLogoBigSrcDirective;\n\n ProjectLogoBigSrcDirective = function(projectLogoService) {\n var link;\n link = function(scope, el, attrs) {\n return scope.$watch('project', function(project) {\n var logo, projectLogo;\n project = Immutable.fromJS(project);\n if (!project) {\n return;\n }\n projectLogo = project.get('logo_big_url');\n if (projectLogo) {\n el.attr('src', projectLogo);\n return el.css('background', \"\");\n } else {\n logo = projectLogoService.getDefaultProjectLogo(project.get('slug'), project.get('id'));\n el.attr('src', logo.src);\n return el.css('background', logo.color);\n }\n });\n };\n return {\n link: link,\n scope: {\n project: \"=tgProjectLogoBigSrc\"\n }\n };\n };\n\n ProjectLogoBigSrcDirective.$inject = [\"tgProjectLogoService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgProjectLogoBigSrc\", ProjectLogoBigSrcDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/project-logo-small-src/project-logo-small-src.directive.coffee\n */\n\n(function() {\n var ProjectLogoSmallSrcDirective;\n\n ProjectLogoSmallSrcDirective = function(projectLogoService) {\n var link;\n link = function(scope, el, attrs) {\n return scope.$watch('project', function(project) {\n var logo, projectLogo;\n project = Immutable.fromJS(project);\n if (!project) {\n return;\n }\n projectLogo = project.get('logo_small_url');\n if (projectLogo) {\n el.attr('src', projectLogo);\n return el.css('background', \"\");\n } else {\n logo = projectLogoService.getDefaultProjectLogo(project.get('slug'), project.get('id'));\n el.attr('src', logo.src);\n return el.css('background', logo.color);\n }\n });\n };\n return {\n link: link,\n scope: {\n project: \"=tgProjectLogoSmallSrc\"\n }\n };\n };\n\n ProjectLogoSmallSrcDirective.$inject = [\"tgProjectLogoService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgProjectLogoSmallSrc\", ProjectLogoSmallSrcDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/project-menu/project-menu.controller.coffee\n */\n\n(function() {\n var ProjectMenuController;\n\n ProjectMenuController = (function() {\n ProjectMenuController.$inject = [\"tgProjectService\", \"tgLightboxFactory\"];\n\n function ProjectMenuController(projectService, lightboxFactory) {\n this.projectService = projectService;\n this.lightboxFactory = lightboxFactory;\n this.project = null;\n this.menu = Immutable.Map();\n }\n\n ProjectMenuController.prototype.show = function() {\n var ref;\n this.project = this.projectService.project;\n this.sprints = (ref = this.project.get('milestones')) != null ? ref.toJS() : void 0;\n this.active = this._getActiveSection();\n this._setVideoConference();\n return this._setMenuPermissions();\n };\n\n ProjectMenuController.prototype.hide = function() {\n this.project = null;\n return this.menu = {};\n };\n\n ProjectMenuController.prototype.search = function() {\n return this.lightboxFactory.create(\"tg-search-box\", {\n \"class\": \"lightbox lightbox-search\"\n });\n };\n\n ProjectMenuController.prototype._setVideoConference = function() {\n var videoconferenceUrl;\n videoconferenceUrl = this._videoConferenceUrl();\n if (videoconferenceUrl) {\n return this.project = this.project.set(\"videoconferenceUrl\", videoconferenceUrl);\n }\n };\n\n ProjectMenuController.prototype._setMenuPermissions = function() {\n this.menu = Immutable.Map({\n epics: false,\n backlog: false,\n kanban: false,\n issues: false,\n wiki: false\n });\n if (this.project.get(\"is_epics_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_epics\") !== -1) {\n this.menu = this.menu.set(\"epics\", true);\n }\n if (this.project.get(\"is_backlog_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_us\") !== -1) {\n this.menu = this.menu.set(\"backlog\", true);\n }\n if (this.project.get(\"is_kanban_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_us\") !== -1) {\n this.menu = this.menu.set(\"kanban\", true);\n }\n if (this.project.get(\"is_issues_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_issues\") !== -1) {\n this.menu = this.menu.set(\"issues\", true);\n }\n if (this.project.get(\"is_wiki_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_wiki_pages\") !== -1) {\n return this.menu = this.menu.set(\"wiki\", true);\n }\n };\n\n ProjectMenuController.prototype._getActiveSection = function() {\n var indexBacklog, indexKanban, oldSectionName, sectionName, sectionsBreadcrumb;\n sectionName = this.projectService.section;\n sectionsBreadcrumb = this.projectService.sectionsBreadcrumb;\n indexBacklog = sectionsBreadcrumb.lastIndexOf(\"backlog\");\n indexKanban = sectionsBreadcrumb.lastIndexOf(\"kanban\");\n if (indexBacklog !== -1 || indexKanban !== -1) {\n if (indexKanban === -1 || indexBacklog > indexKanban) {\n oldSectionName = \"backlog\";\n } else {\n oldSectionName = \"kanban\";\n }\n }\n if (sectionName === \"backlog-kanban\") {\n if (oldSectionName === \"backlog\" || oldSectionName === \"kanban\") {\n sectionName = oldSectionName;\n } else if (this.project.get(\"is_backlog_activated\") && !this.project.get(\"is_kanban_activated\")) {\n sectionName = \"backlog\";\n } else if (!this.project.get(\"is_backlog_activated\") && this.project.get(\"is_kanban_activated\")) {\n sectionName = \"kanban\";\n }\n }\n return sectionName;\n };\n\n ProjectMenuController.prototype._videoConferenceUrl = function() {\n var baseUrl, url;\n if (this.project.get(\"videoconferences\") === \"appear-in\") {\n baseUrl = \"https://appear.in/\";\n } else if (this.project.get(\"videoconferences\") === \"talky\") {\n baseUrl = \"https://talky.io/\";\n } else if (this.project.get(\"videoconferences\") === \"jitsi\") {\n baseUrl = \"https://meet.jit.si/\";\n } else if (this.project.get(\"videoconferences\") === \"custom\") {\n return this.project.get(\"videoconferences_extra_data\");\n } else {\n return \"\";\n }\n if (this.project.get(\"videoconferences_extra_data\")) {\n url = this.project.get(\"slug\") + \"-\" + taiga.slugify(this.project.get(\"videoconferences_extra_data\"));\n } else {\n url = this.project.get(\"slug\");\n }\n if (this.project.get(\"videoconferences\") === \"jitsi\") {\n url = url.replace(/-/g, \"\");\n }\n return baseUrl + url;\n };\n\n return ProjectMenuController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"ProjectMenu\", ProjectMenuController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/project-menu/project-menu.directive.coffee\n */\n\n(function() {\n var ProjectMenuDirective, taiga;\n\n taiga = this.taiga;\n\n ProjectMenuDirective = function(projectService, lightboxFactory) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var projectChange;\n projectChange = function() {\n if (projectService.project) {\n return ctrl.show();\n } else {\n return ctrl.hide();\n }\n };\n scope.$watch((function() {\n return projectService.project;\n }), projectChange);\n scope.vm.fixed = false;\n return $(window).on(\"scroll\", function() {\n var position;\n position = $(window).scrollTop();\n if (position > 100 && scope.vm.fixed === false) {\n scope.vm.fixed = true;\n return scope.$digest();\n } else if (position < 100 && scope.vm.fixed === true) {\n scope.vm.fixed = false;\n return scope.$digest();\n }\n });\n };\n return {\n scope: {},\n controller: \"ProjectMenu\",\n controllerAs: \"vm\",\n templateUrl: \"components/project-menu/project-menu.html\",\n link: link\n };\n };\n\n ProjectMenuDirective.$inject = [\"tgProjectService\", \"tgLightboxFactory\"];\n\n angular.module(\"taigaComponents\").directive(\"tgProjectMenu\", ProjectMenuDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/search-list/search-list.directive.coffee\n */\n\n(function() {\n var groupBy, module, normalizeString, searchListDirective;\n\n module = angular.module(\"taigaComponents\");\n\n normalizeString = this.taiga.normalizeString;\n\n groupBy = this.taiga.groupBy;\n\n searchListDirective = function($translate) {\n var link;\n link = function(scope, el, attrs, model) {\n var avaliableItems, filtering, isContainedIn, itemsById, parseString, resetAll, resetSelected;\n scope.templateUrl = \"components/search-list/search-list-\" + scope.itemType + \"-choice.html\";\n scope.currentSelected = null;\n filtering = false;\n avaliableItems = [];\n itemsById = {};\n if (scope.itemType === 'issue') {\n scope.milestonesById = groupBy(scope.project.milestones, function(e) {\n return e.id;\n });\n }\n if (scope.filterClosed) {\n scope.showClosed = false;\n if (scope.itemType === 'sprint') {\n scope.textShowClosed = $translate.instant(\"BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS\");\n scope.textHideClosed = $translate.instant(\"BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS\");\n }\n }\n el.on(\"click\", \".choice\", function(event) {\n var choiceId, ref, value;\n choiceId = parseInt($(event.currentTarget).data(\"choice-id\"));\n value = ((ref = attrs.ngModel) != null ? ref.id : void 0) !== choiceId ? itemsById[choiceId] : null;\n model.$setViewValue(value);\n scope.currentSelected = value;\n return scope.$apply();\n });\n isContainedIn = function(needle, haystack) {\n return _.includes(parseString(haystack), parseString(needle));\n };\n parseString = function(value) {\n if (typeof value !== 'string') {\n value = value.toString();\n }\n return normalizeString(value.toUpperCase());\n };\n resetSelected = function() {\n scope.currentSelected = null;\n return model.$setViewValue(null);\n };\n resetAll = function() {\n resetSelected();\n scope.searchText = '';\n avaliableItems = angular.copy(scope.items);\n return itemsById = groupBy(avaliableItems, function(x) {\n return x.id;\n });\n };\n scope.isVisible = function(item) {\n var ref;\n if (!scope.filterClosed || scope.showClosed) {\n return true;\n }\n if (scope.itemType === 'sprint' && (item.closed || item.is_closed)) {\n if (((ref = scope.currentSelected) != null ? ref.id : void 0) === item.id) {\n resetSelected();\n }\n return false;\n }\n return true;\n };\n scope.toggleShowClosed = function(item) {\n return scope.showClosed = !scope.showClosed;\n };\n scope.filterItems = function(searchText) {\n scope.filtering = true;\n scope.items = _.filter(avaliableItems, function(item) {\n var itemAttrs;\n itemAttrs = item.getAttrs();\n if (Array.isArray(scope.filterBy)) {\n return _.some(scope.filterBy, function(attr) {\n return isContainedIn(searchText, itemAttrs[attr]);\n });\n } else {\n return isContainedIn(searchText, itemAttrs[scope.filterBy]);\n }\n });\n if (!_.find(scope.items, scope.currentSelected)) {\n return resetSelected();\n }\n };\n return scope.$watch('items', function(items) {\n if (!scope.filtering && items) {\n return resetAll();\n }\n });\n };\n return {\n link: link,\n templateUrl: \"components/search-list/search-list.html\",\n require: \"ngModel\",\n scope: {\n label: '@',\n placeholder: '@',\n project: '=',\n filterBy: '=',\n items: '=',\n itemType: '@',\n filterClosed: '=',\n itemDisabled: '='\n }\n };\n };\n\n module.directive('tgSearchList', ['$translate', searchListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.directive.coffee\n */\n\n(function() {\n var TagOptionDirective, module;\n\n module = angular.module('taigaCommon');\n\n TagOptionDirective = function() {\n var dispatch, link, select, stop;\n select = function(selected) {\n var containerHeight, diff, selectedPosition;\n selected.addClass('selected');\n selectedPosition = selected.position().top + selected.outerHeight();\n containerHeight = selected.parent().outerHeight();\n if (selectedPosition > containerHeight) {\n diff = selectedPosition - containerHeight;\n return selected.parent().scrollTop(selected.parent().scrollTop() + diff);\n } else if (selected.position().top < 0) {\n return selected.parent().scrollTop(selected.parent().scrollTop() + selected.position().top);\n }\n };\n dispatch = function(el, code, scope) {\n var activeElement, next, prev;\n activeElement = el.find(\".selected\");\n if (code === 40) {\n if (!activeElement.length) {\n return select(el.find('li:first'));\n } else {\n next = activeElement.next('li');\n if (next.length) {\n activeElement.removeClass('selected');\n return select(next);\n }\n }\n } else if (code === 38) {\n if (!activeElement.length) {\n return select(el.find('li:last'));\n } else {\n prev = activeElement.prev('li');\n if (prev.length) {\n activeElement.removeClass('selected');\n return select(prev);\n }\n }\n }\n };\n stop = function() {\n return $(document).off(\".tags-keyboard-navigation\");\n };\n link = function(scope, el) {\n stop();\n $(el).parent().on(\"keydown.tags-keyboard-navigation\", (function(_this) {\n return function(event) {\n var code;\n code = event.keyCode ? event.keyCode : event.which;\n if (code === 40 || code === 38) {\n event.preventDefault();\n return dispatch(el, code, scope);\n }\n };\n })(this));\n return scope.$on(\"$destroy\", stop);\n };\n return {\n link: link,\n templateUrl: \"components/tags/tag-dropdown/tag-dropdown.html\",\n scope: {\n onSelectTag: \"&\",\n colorArray: \"=\",\n tag: \"=\"\n }\n };\n };\n\n module.directive(\"tgTagsDropdown\", TagOptionDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.controller.coffee\n */\n\n(function() {\n var TagLineCommonController, module, trim;\n\n trim = this.taiga.trim;\n\n module = angular.module('taigaCommon');\n\n TagLineCommonController = (function() {\n TagLineCommonController.$inject = [\"tgTagLineService\"];\n\n function TagLineCommonController(tagLineService) {\n this.tagLineService = tagLineService;\n this.disableColorSelection = false;\n this.newTag = {\n name: \"\",\n color: null\n };\n this.colorArray = [];\n this.addTag = false;\n }\n\n TagLineCommonController.prototype.checkPermissions = function() {\n return this.tagLineService.checkPermissions(this.project.my_permissions, this.permissions);\n };\n\n TagLineCommonController.prototype._createColorsArray = function(projectTagColors) {\n return this.colorArray = this.tagLineService.createColorsArray(projectTagColors);\n };\n\n TagLineCommonController.prototype.displayTagInput = function() {\n return this.addTag = true;\n };\n\n TagLineCommonController.prototype.addNewTag = function(name, color) {\n this.newTag.name = \"\";\n this.newTag.color = null;\n if (!name.length) {\n return;\n }\n if (this.disableColorSelection) {\n if (name.length) {\n return this.onAddTag({\n name: name,\n color: color\n });\n }\n } else {\n if (this.project.tags_colors[name]) {\n color = this.project.tags_colors[name];\n }\n return this.onAddTag({\n name: name,\n color: color\n });\n }\n };\n\n TagLineCommonController.prototype.selectColor = function(color) {\n return this.newTag.color = color;\n };\n\n return TagLineCommonController;\n\n })();\n\n module.controller(\"TagLineCommonCtrl\", TagLineCommonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.directive.coffee\n */\n\n(function() {\n var TagLineCommonDirective, module;\n\n module = angular.module('taigaCommon');\n\n TagLineCommonDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {\n var unwatch;\n if (!_.isUndefined(attr.disableColorSelection)) {\n ctrl.disableColorSelection = true;\n }\n unwatch = scope.$watch(\"vm.project\", function(project) {\n if (!project || !Object.keys(project).length) {\n return;\n }\n unwatch();\n if (!ctrl.disableColorSelection) {\n return ctrl.colorArray = ctrl._createColorsArray(ctrl.project.tags_colors);\n }\n });\n return el.on(\"keydown\", \".tag-input\", function(event) {\n var tagName;\n if (event.keyCode === 27) {\n ctrl.addTag = false;\n ctrl.newTag.name = \"\";\n ctrl.newTag.color = \"\";\n event.stopPropagation();\n } else if (event.keyCode === 13) {\n event.preventDefault();\n if (el.find('.tags-dropdown .selected').length) {\n tagName = $('.tags-dropdown .selected .tags-dropdown-name').text();\n ctrl.addNewTag(tagName, null);\n } else {\n ctrl.addNewTag(ctrl.newTag.name, ctrl.newTag.color);\n }\n }\n return scope.$apply();\n });\n };\n return {\n link: link,\n scope: {\n permissions: \"@\",\n loadingAddTag: \"=\",\n loadingRemoveTag: \"=\",\n tags: \"=\",\n project: \"=\",\n onAddTag: \"&\",\n onDeleteTag: \"&\"\n },\n templateUrl: \"components/tags/tag-line-common/tag-line-common.html\",\n controller: \"TagLineCommonCtrl\",\n controllerAs: \"vm\",\n bindToController: true\n };\n };\n\n module.directive(\"tgTagLineCommon\", TagLineCommonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.controller.coffee\n */\n\n(function() {\n var TagLineController, module, trim;\n\n trim = this.taiga.trim;\n\n module = angular.module('taigaCommon');\n\n TagLineController = (function() {\n TagLineController.$inject = [\"$rootScope\", \"$tgConfirm\", \"$tgQueueModelTransformation\"];\n\n function TagLineController(rootScope, confirm, modelTransform) {\n this.rootScope = rootScope;\n this.confirm = confirm;\n this.modelTransform = modelTransform;\n this.loadingAddTag = false;\n }\n\n TagLineController.prototype.onDeleteTag = function(tag) {\n var onDeleteTagError, onDeleteTagSuccess, tagName, transform;\n this.loadingRemoveTag = tag[0];\n onDeleteTagSuccess = (function(_this) {\n return function(item) {\n _this.rootScope.$broadcast(\"object:updated\");\n _this.loadingRemoveTag = false;\n return item;\n };\n })(this);\n onDeleteTagError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.loadingRemoveTag = false;\n };\n })(this);\n tagName = trim(tag[0].toLowerCase());\n transform = this.modelTransform.save(function(item) {\n var itemtags;\n itemtags = _.clone(item.tags);\n _.remove(itemtags, function(tag) {\n return tag[0] === tagName;\n });\n item.tags = itemtags;\n return item;\n });\n return transform.then(onDeleteTagSuccess, onDeleteTagError);\n };\n\n TagLineController.prototype.onAddTag = function(tag, color) {\n var onAddTagError, onAddTagSuccess, transform;\n this.loadingAddTag = true;\n onAddTagSuccess = (function(_this) {\n return function(item) {\n _this.rootScope.$broadcast(\"object:updated\");\n _this.rootScope.$broadcast(\"tags:updated\");\n _this.addTag = false;\n _this.loadingAddTag = false;\n return item;\n };\n })(this);\n onAddTagError = (function(_this) {\n return function() {\n _this.loadingAddTag = false;\n return _this.confirm.notify(\"error\");\n };\n })(this);\n transform = this.modelTransform.save((function(_this) {\n return function(item) {\n var itemtags, value;\n value = trim(tag.toLowerCase());\n itemtags = _.clone(item.tags);\n itemtags.push([tag, color]);\n item.tags = itemtags;\n return item;\n };\n })(this));\n return transform.then(onAddTagSuccess, onAddTagError);\n };\n\n return TagLineController;\n\n })();\n\n module.controller(\"TagLineCtrl\", TagLineController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.directive.coffee\n */\n\n(function() {\n var TagLineDirective, module;\n\n module = angular.module('taigaCommon');\n\n TagLineDirective = function() {\n return {\n scope: {\n item: \"=\",\n permissions: \"@\",\n project: \"=\"\n },\n templateUrl: \"components/tags/tag-line-detail/tag-line-detail.html\",\n controller: \"TagLineCtrl\",\n controllerAs: \"vm\",\n bindToController: true\n };\n };\n\n module.directive(\"tgTagLine\", TagLineDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.service.coffee\n */\n\n(function() {\n var TagLineService, module,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n module = angular.module('taigaCommon');\n\n TagLineService = (function(superClass) {\n extend(TagLineService, superClass);\n\n TagLineService.$inject = [];\n\n function TagLineService() {}\n\n TagLineService.prototype.checkPermissions = function(myPermissions, projectPermissions) {\n return _.includes(myPermissions, projectPermissions);\n };\n\n TagLineService.prototype.createColorsArray = function(projectTagColors) {\n return _.map(projectTagColors, function(index, value) {\n return [value, index];\n });\n };\n\n return TagLineService;\n\n })(taiga.Service);\n\n module.service(\"tgTagLineService\", TagLineService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.directive.coffee\n */\n\n(function() {\n var TagDirective, module;\n\n module = angular.module('taigaCommon');\n\n TagDirective = function() {\n return {\n templateUrl: \"components/tags/tag/tag.html\",\n scope: {\n tag: \"<\",\n loadingRemoveTag: \"<\",\n onDeleteTag: \"&\",\n hasPermissions: \"@\"\n }\n };\n };\n\n module.directive(\"tgTag\", TagDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/taskboard-zoom/taskboard-zoom.directive.coffee\n */\n\n(function() {\n var TaskboardZoomDirective;\n\n TaskboardZoomDirective = function(storage) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var getZoomView, zooms;\n scope.zoomIndex = storage.get(\"taskboard_zoom\") || 2;\n scope.levels = 4;\n zooms = [[\"ref\"], [\"subject\"], [\"owner\", \"tags\", \"extra_info\", \"unfold\"], [\"attachments\", \"empty_extra_info\"], [\"related_tasks\"]];\n getZoomView = function(zoomIndex) {\n if (zoomIndex == null) {\n zoomIndex = 0;\n }\n if (storage.get(\"taskboard_zoom\") !== zoomIndex) {\n storage.set(\"taskboard_zoom\", zoomIndex);\n }\n return _.reduce(zooms, function(result, value, key) {\n if (key <= zoomIndex) {\n result = result.concat(value);\n }\n return result;\n });\n };\n return scope.$watch('zoomIndex', function(zoomLevel) {\n var zoom;\n zoom = getZoomView(zoomLevel);\n return scope.onZoomChange({\n zoomLevel: zoomLevel,\n zoom: zoom\n });\n });\n };\n return {\n scope: {\n onZoomChange: \"&\"\n },\n template: \"\",\n link: link\n };\n };\n\n angular.module('taigaComponents').directive(\"tgTaskboardZoom\", [\"$tgStorage\", TaskboardZoomDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tasks-sortable.directive.coffee\n */\n\n(function() {\n var TasksSortableDirective;\n\n TasksSortableDirective = function($parse, projectService) {\n var link;\n link = function(scope, el, attrs) {\n var callback, drake, scroll;\n if (!projectService.hasPermission(\"modify_task\")) {\n return;\n }\n callback = $parse(attrs.tgTasksSortable);\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).is('div.single-related-task.js-related-task');\n }\n });\n drake.on('dragend', function(item) {\n var itemEl, newIndex, task;\n itemEl = $(item);\n task = itemEl.scope().task;\n newIndex = itemEl.index();\n return scope.$apply(function() {\n return callback(scope, {\n task: task,\n newIndex: newIndex\n });\n });\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n TasksSortableDirective.$inject = [\"$parse\", \"tgProjectService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgTasksSortable\", TasksSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/terms-announcement/terms-announcement.directive.coffee\n */\n\n(function() {\n var TermsAnnouncementDirective;\n\n TermsAnnouncementDirective = function(TermsAnnouncementService, $repo, $auth, $config, $model) {\n var link;\n link = function(scope, el, attrs) {\n scope.privacyPolicyUrl = $config.get(\"privacyPolicyUrl\");\n scope.termsOfServiceUrl = $config.get(\"termsOfServiceUrl\");\n return scope.GDPRUrl = $config.get(\"GDPRUrl\");\n };\n return {\n restrict: \"AE\",\n scope: {},\n controllerAs: 'vm',\n controller: function() {\n this.close = function() {\n var onSuccess, user, userData;\n TermsAnnouncementService.open = false;\n user = $auth.getUser();\n if (user.read_new_terms === void 0) {\n userData = user.getAttrs();\n userData.read_new_terms = false;\n user = $model.make_model(\"users\", userData);\n }\n user.read_new_terms = true;\n onSuccess = function(data) {\n return $auth.setUser(data);\n };\n return $repo.save(user).then(onSuccess);\n };\n return Object.defineProperties(this, {\n open: {\n get: function() {\n return TermsAnnouncementService.open;\n }\n }\n });\n },\n link: link,\n templateUrl: \"components/terms-announcement/terms-announcement.html\"\n };\n };\n\n TermsAnnouncementDirective.$inject = [\"tgTermsAnnouncementService\", \"$tgRepo\", \"$tgAuth\", \"$tgConfig\", \"$tgModel\"];\n\n angular.module(\"taigaComponents\").directive(\"tgTermsAnnouncement\", TermsAnnouncementDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/terms-announcement/terms-announcement.service.coffee\n */\n\n(function() {\n var TermsAnnouncementService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n TermsAnnouncementService = (function(superClass) {\n extend(TermsAnnouncementService, superClass);\n\n function TermsAnnouncementService() {\n this.open = false;\n }\n\n TermsAnnouncementService.prototype.show = function() {\n return this.open = true;\n };\n\n return TermsAnnouncementService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgTermsAnnouncementService\", TermsAnnouncementService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee\n */\n\n(function() {\n var TermsOfServiceAndPrivacyPolicyNoticeDirective;\n\n TermsOfServiceAndPrivacyPolicyNoticeDirective = function($config) {\n var link;\n link = function(scope, el, attrs) {\n scope.privacyPolicyUrl = $config.get(\"privacyPolicyUrl\");\n scope.termsOfServiceUrl = $config.get(\"termsOfServiceUrl\");\n scope.target = false;\n if (!scope.privacyPolicyUrl || !scope.termsOfServiceUrl) {\n scope.target = true;\n }\n return el.on(\"change\", \"input[name='accepted_terms']\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n scope.target = target.is(\":checked\");\n return scope.$apply();\n });\n };\n return {\n restrict: \"AE\",\n link: link,\n scope: {\n target: \"=\"\n },\n templateUrl: \"components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html\"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgTermsOfServiceAndPrivacyPolicyNotice\", [\"$tgConfig\", TermsOfServiceAndPrivacyPolicyNoticeDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/tips/tips.directive.coffee\n */\n\n(function() {\n var module, timeout, tipsDirective;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaComponents\");\n\n tipsDirective = function(tgLoader, $translate) {\n var link, randomInt, tips;\n tips = [\n {\n contentType: \"icon\",\n icon: \"icon-project\",\n message: \"PROJECTS_ORDER\"\n }, {\n contentType: \"icon\",\n icon: \"icon-upvote\",\n message: \"VOTING\"\n }, {\n contentType: \"icon\",\n icon: \"icon-attach\",\n message: \"ISSUES_TO_SPRINT\"\n }, {\n contentType: \"icon\",\n icon: \"icon-clock\",\n message: \"DUE_DATE\"\n }, {\n contentType: \"icon\",\n icon: \"icon-iocaine\",\n message: \"IOCAIN\"\n }, {\n contentType: \"icon\",\n icon: \"icon-blocked-project\",\n message: \"BLOCKED\"\n }, {\n contentType: \"icon\",\n icon: \"icon-promote\",\n message: \"PROMOTE\"\n }, {\n contentType: \"icon\",\n icon: \"icon-bulk\",\n message: \"BULK\"\n }, {\n contentType: \"range\",\n message: \"ZOOM\"\n }, {\n contentType: \"icon\",\n icon: \"icon-settings\",\n message: \"CUSTOM_FIELDS\"\n }, {\n contentType: \"arrows\",\n message: \"SLIDE_ARROWS\"\n }\n ];\n randomInt = function(size) {\n return Math.floor(Math.random() * size) + 1;\n };\n link = function(scope, el, attrs) {\n var loadTip, waitingTimeout;\n scope.tipLoaded = false;\n waitingTimeout = null;\n tgLoader.onStart(function() {\n return waitingTimeout = timeout(1000, function() {\n return loadTip();\n });\n });\n tgLoader.onEnd(function() {\n clearTimeout(waitingTimeout);\n return scope.tipLoaded = false;\n });\n return loadTip = function() {\n var tip;\n scope.tipLoaded = true;\n tip = tips[randomInt(tips.length - 1)];\n return scope.tip = {\n contentType: tip.contentType,\n message: \"TIPS.TIP_\" + tip.message,\n icon: tip.icon,\n color: \"tip-color-\" + (randomInt(5))\n };\n };\n };\n return {\n link: link,\n scope: true,\n templateUrl: \"components/tips/tip.html\"\n };\n };\n\n module.directive('tgTips', ['tgLoader', '$translate', tipsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/tribe-button/tribe-button.directive.coffee\n */\n\n(function() {\n var TribeButtonDirective;\n\n TribeButtonDirective = function(configService, locationService) {\n var link;\n link = function(scope, el, attrs) {\n scope.vm = {};\n scope.vm.tribeHost = configService.config.tribeHost;\n scope.vm.url = (locationService.protocol()) + \"://\" + (locationService.host());\n if (locationService.protocol() === \"http\" && locationService.port() !== 80) {\n return scope.vm.url = scope.vm.url + \":\" + (locationService.port());\n } else if (locationService.protocol() === \"https\" && locationService.port() !== 443) {\n return scope.vm.url = scope.vm.url + \":\" + (locationService.port());\n }\n };\n return {\n scope: {\n usId: \"=\",\n projectSlug: \"=\"\n },\n controllerAs: \"vm\",\n templateUrl: \"components/tribe-button/tribe-button.html\",\n link: link\n };\n };\n\n TribeButtonDirective.$inject = [\"$tgConfig\", \"$tgLocation\"];\n\n angular.module(\"taigaComponents\").directive(\"tgTribeButton\", TribeButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/tribe-button/tribe-linked.directive.coffee\n */\n\n(function() {\n var TribeLinkedDirective;\n\n TribeLinkedDirective = function(configService) {\n var directive, link;\n link = function(scope, el, attrs) {\n scope.vm = {};\n scope.vm.tribeHost = configService.config.tribeHost;\n scope.vm.show = function() {\n return scope.vm.open = true;\n };\n return scope.vm.hide = function(event) {\n return scope.vm.open = false;\n };\n };\n directive = {\n templateUrl: \"components/tribe-button/tribe-linked.html\",\n scope: {\n gigTitle: \"=\",\n gigId: \"=\"\n },\n link: link\n };\n return directive;\n };\n\n TribeLinkedDirective.$inject = [\"$tgConfig\"];\n\n angular.module(\"taigaComponents\").directive(\"tgTribeLinked\", TribeLinkedDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/vote-button/vote-button.controller.coffee\n */\n\n(function() {\n var VoteButtonController;\n\n VoteButtonController = (function() {\n VoteButtonController.$inject = [\"tgCurrentUserService\"];\n\n function VoteButtonController(currentUserService) {\n this.currentUserService = currentUserService;\n this.user = this.currentUserService.getUser();\n this.isMouseOver = false;\n this.loading = false;\n }\n\n VoteButtonController.prototype.showTextWhenMouseIsOver = function() {\n return this.isMouseOver = true;\n };\n\n VoteButtonController.prototype.showTextWhenMouseIsLeave = function() {\n return this.isMouseOver = false;\n };\n\n VoteButtonController.prototype.toggleVote = function() {\n var promise;\n this.loading = true;\n if (!this.item.is_voter) {\n promise = this._upvote();\n } else {\n promise = this._downvote();\n }\n promise[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n return promise;\n };\n\n VoteButtonController.prototype._upvote = function() {\n return this.onUpvote().then((function(_this) {\n return function() {\n return _this.showTextWhenMouseIsLeave();\n };\n })(this));\n };\n\n VoteButtonController.prototype._downvote = function() {\n return this.onDownvote();\n };\n\n return VoteButtonController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"VoteButton\", VoteButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/vote-button/vote-button.directive.coffee\n */\n\n(function() {\n var VoteButtonDirective;\n\n VoteButtonDirective = function() {\n return {\n scope: {},\n controller: \"VoteButton\",\n bindToController: {\n item: \"=\",\n onUpvote: \"=\",\n onDownvote: \"=\"\n },\n controllerAs: \"vm\",\n templateUrl: \"components/vote-button/vote-button.html\"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgVoteButton\", VoteButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/watch-button/watch-button.controller.coffee\n */\n\n(function() {\n var WatchButtonController;\n\n WatchButtonController = (function() {\n WatchButtonController.$inject = [\"tgCurrentUserService\", \"$rootScope\"];\n\n function WatchButtonController(currentUserService, rootScope) {\n this.currentUserService = currentUserService;\n this.rootScope = rootScope;\n this.user = this.currentUserService.getUser();\n this.isMouseOver = false;\n this.loading = false;\n }\n\n WatchButtonController.prototype.showTextWhenMouseIsOver = function() {\n return this.isMouseOver = true;\n };\n\n WatchButtonController.prototype.showTextWhenMouseIsLeave = function() {\n return this.isMouseOver = false;\n };\n\n WatchButtonController.prototype.openWatchers = function() {\n return this.rootScope.$broadcast(\"watcher:add\", this.item);\n };\n\n WatchButtonController.prototype.getPerms = function() {\n var name, perms;\n if (!this.item) {\n return \"\";\n }\n name = this.item._name;\n perms = {\n userstories: 'modify_us',\n issues: 'modify_issue',\n tasks: 'modify_task',\n epics: 'modify_epic'\n };\n return perms[name];\n };\n\n WatchButtonController.prototype.toggleWatch = function() {\n var promise;\n this.loading = true;\n if (!this.item.is_watcher) {\n promise = this._watch();\n } else {\n promise = this._unwatch();\n }\n promise[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n return promise;\n };\n\n WatchButtonController.prototype._watch = function() {\n return this.onWatch().then((function(_this) {\n return function() {\n return _this.showTextWhenMouseIsLeave();\n };\n })(this));\n };\n\n WatchButtonController.prototype._unwatch = function() {\n return this.onUnwatch();\n };\n\n return WatchButtonController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"WatchButton\", WatchButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/watch-button/watch-button.directive.coffee\n */\n\n(function() {\n var WatchButtonDirective;\n\n WatchButtonDirective = function() {\n return {\n scope: {},\n controller: \"WatchButton\",\n bindToController: {\n item: \"=\",\n onWatch: \"=\",\n onUnwatch: \"=\"\n },\n controllerAs: \"vm\",\n templateUrl: function(item, attributes) {\n return \"components/watch-button/watch-button-\" + attributes.environment + \".html\";\n }\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgWatchButton\", WatchButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/comment-edit-wysiwyg.directive.coffee\n */\n\n(function() {\n var CommentEditWysiwyg;\n\n CommentEditWysiwyg = function(attachmentsFullService) {\n var link;\n link = function($scope, $el, $attrs) {\n var types, uploadFile;\n types = {\n epics: \"epic\",\n userstories: \"us\",\n issues: \"issue\",\n tasks: \"task\"\n };\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.comment.comment.id, types[$scope.vm.comment.comment._name], file, true, true).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n return $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n
    \"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgCommentEditWysiwyg\", [\"tgAttachmentsFullService\", CommentEditWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/comment-wysiwyg.directive.coffee\n */\n\n(function() {\n var CommentWysiwyg;\n\n CommentWysiwyg = function($modelTransform, $rootscope, attachmentsFullService) {\n var link;\n link = function($scope, $el, $attrs) {\n var types, uploadFile;\n $scope.editableDescription = false;\n $scope.saveComment = function(description, cb) {\n var transform;\n $scope.content = '';\n $scope.vm.type.comment = description;\n transform = $modelTransform.save(function(item) {});\n transform.then(function() {\n if ($scope.vm.onAddComment) {\n $scope.vm.onAddComment();\n }\n return $rootscope.$broadcast(\"object:updated\");\n });\n return transform[\"finally\"](cb);\n };\n types = {\n epics: \"epic\",\n userstories: \"us\",\n issues: \"issue\",\n tasks: \"task\"\n };\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.type.id, types[$scope.vm.type._name], file, true, true).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n $scope.onChange = function(markdown) {\n return $scope.vm.type.comment = markdown;\n };\n $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n $scope.content = '';\n return $scope.$watch(\"vm.type\", function(value) {\n if (!value) {\n return;\n }\n return $scope.storageKey = \"comment-\" + value.project + \"-\" + value.id + \"-\" + value._name;\n });\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n
    \"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgCommentWysiwyg\", [\"$tgQueueModelTransformation\", \"$rootScope\", \"tgAttachmentsFullService\", CommentWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee\n */\n\n(function() {\n var CustomFieldEditWysiwyg;\n\n CustomFieldEditWysiwyg = function(attachmentsFullService) {\n var link;\n link = function($scope, $el, $attrs) {\n var types, uploadFile;\n types = {\n userstories: \"us\",\n issues: \"issue\",\n tasks: \"task\"\n };\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.comment.comment.id, types[$scope.vm.comment.comment._name], file).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n return $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n
    \"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgCustomFieldEditWysiwyg\", [\"tgAttachmentsFullService\", CustomFieldEditWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/item-wysiwyg.directive.coffee\n */\n\n(function() {\n var ItemWysiwyg;\n\n ItemWysiwyg = function($modelTransform, $rootscope, $confirm, attachmentsFullService, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var uploadFile;\n $scope.editableDescription = false;\n $scope.saveDescription = function(description, cb) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.description = description;\n return item;\n });\n transform.then(function() {\n $confirm.notify(\"success\");\n return $rootscope.$broadcast(\"object:updated\");\n });\n transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return transform[\"finally\"](cb);\n };\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.project.id, $scope.item.id, $attrs.type, file).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n $scope.$watch($attrs.model, function(value) {\n if (!value) {\n return;\n }\n $scope.item = value;\n $scope.version = value.version;\n return $scope.storageKey = $scope.project.id + \"-\" + value.id + \"-\" + $attrs.type;\n });\n return $scope.$watch('project', function(project) {\n if (!project) {\n return;\n }\n return $scope.editableDescription = project.my_permissions.indexOf($attrs.requiredPerm) !== -1;\n });\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n\\n
    \\n\\n \\n {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}}\\n
    \\n\"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgItemWysiwyg\", [\"$tgQueueModelTransformation\", \"$rootScope\", \"$tgConfirm\", \"tgAttachmentsFullService\", \"$translate\", ItemWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg-code-hightlighter.service.coffee\n */\n\n(function() {\n var WysiwygCodeHightlighterService;\n\n WysiwygCodeHightlighterService = (function() {\n function WysiwygCodeHightlighterService() {\n Prism.plugins.customClass.prefix('prism-');\n Prism.plugins.customClass.map({});\n }\n\n WysiwygCodeHightlighterService.prototype.getLanguages = function() {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n if (_this.languages) {\n return resolve(_this.languages);\n } else if (_this.loadPromise) {\n return _this.loadPromise.then(function() {\n return resolve(_this.languages);\n });\n } else {\n return _this.loadPromise = $.getJSON(\"/\" + window._version + \"/prism/prism-languages.json\").then(function(_languages_) {\n _this.loadPromise = null;\n _this.languages = _.map(_languages_, function(it) {\n it.url = (\"/\" + window._version + \"/prism/\") + it.file;\n return it;\n });\n return resolve(_this.languages);\n });\n }\n };\n })(this));\n };\n\n WysiwygCodeHightlighterService.prototype.getLanguageInClassList = function(classes) {\n var lan;\n lan = _.find(this.languages, function(it) {\n return !!_.find(classes, function(className) {\n return 'language-' + it.name === className;\n });\n });\n if (lan) {\n return lan.name;\n } else {\n return null;\n }\n };\n\n WysiwygCodeHightlighterService.prototype.loadLanguage = function(lan) {\n return new Promise(function(resolve) {\n if (!Prism.languages[lan]) {\n return ljs.load(\"/\" + window._version + \"/prism/prism-\" + lan + \".min.js\", resolve);\n } else {\n return resolve();\n }\n });\n };\n\n WysiwygCodeHightlighterService.prototype.replaceCodeBrToNl = function(code) {\n return $(code).find('br').replaceWith('\\n');\n };\n\n WysiwygCodeHightlighterService.prototype.hightlightCode = function(code) {\n var lan;\n this.replaceCodeBrToNl(code);\n lan = this.getLanguageInClassList(code.classList);\n if (lan) {\n return this.loadLanguage(lan).then(function() {\n return Prism.highlightElement(code);\n });\n }\n };\n\n WysiwygCodeHightlighterService.prototype.addHightlighter = function(element) {\n var codes;\n codes = $(element).find('code');\n return codes.each((function(_this) {\n return function(index, code) {\n return _this.hightlightCode(code);\n };\n })(this));\n };\n\n return WysiwygCodeHightlighterService;\n\n })();\n\n angular.module(\"taigaComponents\").service(\"tgWysiwygCodeHightlighterService\", WysiwygCodeHightlighterService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.directive.coffee\n */\n\n(function() {\n var WysiwygCodeLightbox;\n\n WysiwygCodeLightbox = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return scope.$watch('visible', function(visible) {\n if (visible && !el.hasClass('open')) {\n scope.open = true;\n lightboxService.open(el, null, scope.onClose);\n return scope.$applyAsync(function() {\n var textarea;\n textarea = el[0].querySelector('textarea');\n if (textarea) {\n return textarea.select();\n }\n });\n } else if (!visible && el.hasClass('open')) {\n scope.open = false;\n return lightboxService.close(el);\n }\n });\n };\n return {\n scope: {\n languages: '<',\n codeLanguage: '<',\n code: '<',\n visible: '<',\n onClose: '&',\n onSave: '&'\n },\n link: link,\n templateUrl: \"components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.html\"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgWysiwygCodeLightbox\", [\"lightboxService\", WysiwygCodeLightbox]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg-mention.service.coffee\n */\n\n(function() {\n var WysiwygMentionService;\n\n WysiwygMentionService = (function() {\n WysiwygMentionService.$inject = [\"tgProjectService\", \"tgWysiwygService\", \"$tgNavUrls\", \"$tgResources\"];\n\n function WysiwygMentionService(projectService, wysiwygService, navurls, rs) {\n this.projectService = projectService;\n this.wysiwygService = wysiwygService;\n this.navurls = navurls;\n this.rs = rs;\n this.cancelablePromise = null;\n this.projectSlug = this.projectService.project.get('slug');\n }\n\n WysiwygMentionService.prototype.search = function(mention) {\n return new Promise((function(_this) {\n return function(resolve) {\n if ('#'.indexOf(mention[0]) !== -1) {\n return _this.searchItem(mention.replace('#', '')).then(resolve);\n } else if ('@'.indexOf(mention[0]) !== -1) {\n return _this.searchUser(mention.replace('@', ''), resolve);\n } else if (':'.indexOf(mention[0]) !== -1) {\n return _this.searchEmoji(mention.replace(':', ''), resolve);\n }\n };\n })(this));\n };\n\n WysiwygMentionService.prototype.searchItem = function(term) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n var filter;\n term = taiga.slugify(term);\n filter = function(item) {\n return ['subject', 'ref'].some(function(attr) {\n return taiga.slugify(item[attr]).indexOf(term) >= 0;\n });\n };\n return _this.rs.search[\"do\"](_this.projectService.project.get('id'), term).then(function(res) {\n var i, items, len, ref, result, type, typeURLs;\n result = [];\n if (!res.count || res.count === res.wikipages.length) {\n return resolve(result);\n } else {\n typeURLs = {\n issues: 'project-issues-detail',\n userstories: 'project-userstories-detail',\n tasks: 'project-tasks-detail'\n };\n ref = ['issues', 'tasks', 'userstories'];\n for (i = 0, len = ref.length; i < len; i++) {\n type = ref[i];\n if (!res[type]) {\n continue;\n }\n items = res[type].filter(filter).map(function(item) {\n item.url = _this.navurls.resolve(typeURLs[type], {\n project: _this.projectSlug,\n ref: item.ref\n });\n return item;\n });\n result = result.concat(items);\n }\n return resolve(_.sortBy(result, [\"ref\"]).slice(0, 10));\n }\n });\n };\n })(this));\n };\n\n WysiwygMentionService.prototype.searchUser = function(term, callback) {\n var users;\n users = this.projectService.project.toJS().members.filter(function(user) {\n return ['username', 'full_name', 'full_name_display'].some(function(attr) {\n return taiga.slugify(user[attr]).indexOf(term) >= 0 || user[attr].indexOf(term) >= 0;\n });\n });\n users = users.slice(0, 10).map((function(_this) {\n return function(item) {\n item.url = _this.navurls.resolve('user-profile', {\n project: _this.projectSlug,\n username: item.username\n });\n return item;\n };\n })(this));\n return callback(users);\n };\n\n WysiwygMentionService.prototype.searchEmoji = function(name, callback) {\n var filteredEmojis;\n filteredEmojis = this.wysiwygService.searchEmojiByName(name);\n filteredEmojis = filteredEmojis.slice(0, 10);\n return callback(filteredEmojis);\n };\n\n return WysiwygMentionService;\n\n })();\n\n angular.module(\"taigaComponents\").service(\"tgWysiwygMentionService\", WysiwygMentionService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg.directive.coffee\n */\n\n(function() {\n var Medium, bindOnce, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n Medium = function($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoader, wysiwygCodeHightlighterService, wysiwygMentionService, analytics, $location) {\n var AlignRightButton, CodeButton, CustomPasteHandler, addCodeBlockAndHightlight, getIcon, getRangeCodeBlock, isCodeBlockSelected, link, oldIsBlockContainer, refreshCodeBlocks, removeCodeBlockAndHightlight, removeSelections;\n removeSelections = function() {\n if (window.getSelection) {\n if (window.getSelection().empty) {\n return window.getSelection().empty();\n }\n } else if (window.getSelection().removeAllRanges) {\n return window.getSelection().removeAllRanges();\n } else if (document.selection) {\n return document.selection.empty();\n }\n };\n getRangeCodeBlock = function(range) {\n return $(range.endContainer).parentsUntil('.editor', 'code');\n };\n isCodeBlockSelected = function(range) {\n return !!getRangeCodeBlock(range).length;\n };\n removeCodeBlockAndHightlight = function(selection, mediumInstance) {\n var code, p, pre;\n if ($(selection).is('code')) {\n code = selection;\n } else {\n code = $(selection).closest('code')[0];\n }\n pre = code.parentNode;\n p = document.createElement('p');\n p.innerText = code.innerText;\n pre.parentNode.replaceChild(p, pre);\n return mediumInstance.checkContentChanged(mediumInstance.elements[0]);\n };\n addCodeBlockAndHightlight = function(range, mediumInstance) {\n var code, extract, pre, start;\n pre = document.createElement('pre');\n code = document.createElement('code');\n if (!range.startContainer.parentNode.nextSibling) {\n $('
    ').insertAfter(range.startContainer.parentNode);\n }\n start = range.endContainer.parentNode.nextSibling;\n extract = range.extractContents();\n code.appendChild(extract);\n pre.appendChild(code);\n start.parentNode.insertBefore(pre, start);\n refreshCodeBlocks(mediumInstance);\n return mediumInstance.checkContentChanged(mediumInstance.elements[0]);\n };\n refreshCodeBlocks = function(mediumInstance) {\n var i, j, len, len1, mainChildren, p, pre, preList, ref, results;\n if (!mediumInstance) {\n return;\n }\n ref = mediumInstance.elements[0].children;\n for (i = 0, len = ref.length; i < len; i++) {\n mainChildren = ref[i];\n if (mainChildren && mainChildren.tagName.toLowerCase() === 'p' && !mainChildren.innerHTML.trim().length) {\n mainChildren.parentNode.removeChild(mainChildren);\n }\n }\n preList = mediumInstance.elements[0].querySelectorAll('pre');\n results = [];\n for (j = 0, len1 = preList.length; j < len1; j++) {\n pre = preList[j];\n pre.setAttribute('contenteditable', false);\n pre.setAttribute('title', $translate.instant(\"COMMON.WYSIWYG.DB_CLICK\"));\n pre.addEventListener('mousedown', function(e) {\n return e.preventDefault();\n });\n if (pre.nextElementSibling && pre.nextElementSibling.nodeName.toLowerCase() === 'p' && !pre.nextElementSibling.children.length) {\n results.push(pre.nextElementSibling.appendChild(document.createElement('br')));\n } else if (!pre.nextElementSibling || ['p', 'ul', 'h1', 'h2', 'h3'].indexOf(pre.nextElementSibling.nodeName.toLowerCase()) === -1) {\n p = document.createElement('p');\n p.appendChild(document.createElement('br'));\n results.push(pre.parentNode.insertBefore(p, pre.nextSibling));\n } else {\n results.push(void 0);\n }\n }\n return results;\n };\n AlignRightButton = MediumEditor.extensions.button.extend({\n name: 'rtl',\n init: function() {\n var option;\n option = _.find(this.base.options.toolbar.buttons, function(it) {\n return it.name === 'rtl';\n });\n this.button = this.document.createElement('button');\n this.button.classList.add('medium-editor-action');\n this.button.innerHTML = option.contentDefault || 'RTL';\n this.button.title = 'RTL';\n return this.on(this.button, 'click', this.handleClick.bind(this));\n },\n getButton: function() {\n return this.button;\n },\n handleClick: function(event) {\n var range;\n range = MediumEditor.selection.getSelectionRange(document);\n if (range.commonAncestorContainer.parentNode.style.textAlign === 'right') {\n return document.execCommand('justifyLeft', false);\n } else {\n return document.execCommand('justifyRight', false);\n }\n }\n });\n getIcon = function(icon) {\n return \"\\n \\n\";\n };\n CodeButton = MediumEditor.extensions.button.extend({\n name: 'code',\n init: function() {\n var option;\n option = _.find(this.base.options.toolbar.buttons, function(it) {\n return it.name === 'code';\n });\n this.button = this.document.createElement('button');\n this.button.classList.add('medium-editor-action');\n this.button.innerHTML = option.contentDefault || 'Code';\n this.button.title = 'Code';\n return this.on(this.button, 'click', this.handleClick.bind(this));\n },\n getButton: function() {\n return this.button;\n },\n tagNames: ['code'],\n handleClick: function(event) {\n var range, toolbar;\n range = MediumEditor.selection.getSelectionRange(self.document);\n if (isCodeBlockSelected(range, this.base)) {\n removeCodeBlockAndHightlight(range.endContainer, this.base);\n } else {\n addCodeBlockAndHightlight(range, this.base);\n removeSelections();\n }\n toolbar = this.base.getExtensionByName('toolbar');\n if (toolbar) {\n return toolbar.hideToolbar();\n }\n }\n });\n CustomPasteHandler = MediumEditor.extensions.paste.extend({\n doPaste: function(pastedHTML, pastedPlain, editable) {\n var html;\n html = MediumEditor.util.htmlEntities(pastedPlain);\n return MediumEditor.util.insertHTMLCommand(this.document, html);\n }\n });\n oldIsBlockContainer = MediumEditor.util.isBlockContainer;\n MediumEditor.util.isBlockContainer = function(element) {\n var tagName;\n if (!element) {\n return oldIsBlockContainer(element);\n }\n if (element.tagName) {\n tagName = element.tagName;\n } else {\n tagName = element.parentNode.tagName;\n }\n if (tagName.toLowerCase() === 'code') {\n return true;\n }\n return oldIsBlockContainer(element);\n };\n link = function($scope, $el, $attrs) {\n var change, clean, codeBlockSelected, create, discardLocalStorage, editorMarkdown, editorMedium, getCurrentContent, isDraft, isEditOnly, isOutdated, localSave, mediumInstance, notPersist, replaceCodeBrToNl, saveEnd, setEditMode, setHtmlMedium, throttleChange, unwatch, updateMarkdownWithCurrentHtml, uploadEnd;\n mediumInstance = null;\n editorMedium = $el.find('.medium');\n editorMarkdown = $el.find('.markdown');\n codeBlockSelected = null;\n isEditOnly = !!$attrs.$attr.editonly;\n notPersist = !!$attrs.$attr.notPersist;\n $scope.required = !!$attrs.$attr.required;\n $scope.editMode = isEditOnly || false;\n $scope.mode = $storage.get('editor-mode', 'html');\n $scope.markdown = '';\n $scope.codeEditorVisible = false;\n $scope.codeLans = [];\n wysiwygCodeHightlighterService.getLanguages().then(function(codeLans) {\n return $scope.codeLans = codeLans;\n });\n setEditMode = function(editMode) {\n return $scope.editMode = editMode;\n };\n setHtmlMedium = function(markdown) {\n var html;\n html = wysiwygService.getHTML(markdown);\n editorMedium.html(html);\n wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]);\n if ($scope.editMode) {\n return refreshCodeBlocks(mediumInstance);\n }\n };\n $scope.saveSnippet = function(lan, code) {\n var codePre;\n $scope.codeEditorVisible = false;\n codeBlockSelected.innerText = code;\n codePre = codeBlockSelected.parentNode;\n if (lan === 'remove-formating') {\n codeBlockSelected.className = '';\n codePre.className = '';\n removeCodeBlockAndHightlight(codeBlockSelected, mediumInstance);\n } else if (_.trim(code).length) {\n if (lan) {\n codeBlockSelected.className = 'language-' + lan;\n codePre.className = 'language-' + lan;\n } else {\n codeBlockSelected.className = '';\n codePre.className = '';\n }\n wysiwygCodeHightlighterService.hightlightCode(codeBlockSelected);\n mediumInstance.checkContentChanged(mediumInstance.elements[0]);\n } else {\n codeBlockSelected.parentNode.parentNode.removeChild(codeBlockSelected.parentNode);\n mediumInstance.checkContentChanged(mediumInstance.elements[0]);\n }\n throttleChange();\n return null;\n };\n $scope.setMode = function(mode) {\n $storage.set('editor-mode', mode);\n if (mode === 'markdown') {\n updateMarkdownWithCurrentHtml();\n } else {\n setHtmlMedium($scope.markdown);\n }\n $scope.mode = mode;\n return mediumInstance.trigger('editableBlur', {}, editorMedium[0]);\n };\n $scope.save = function(e) {\n if (e) {\n e.preventDefault();\n }\n if ($scope.mode === 'html') {\n updateMarkdownWithCurrentHtml();\n }\n setHtmlMedium($scope.markdown);\n if ($scope.required && !$scope.markdown.length) {\n return;\n }\n $scope.saving = true;\n $scope.outdated = false;\n $scope.onSave({\n text: $scope.markdown,\n cb: saveEnd\n });\n };\n $scope.cancel = function(e) {\n if (e) {\n e.preventDefault();\n }\n if (!isEditOnly) {\n setEditMode(false);\n }\n if (notPersist) {\n clean();\n } else if ($scope.mode === 'html') {\n setHtmlMedium($scope.content || null);\n }\n $scope.markdown = $scope.content;\n discardLocalStorage();\n mediumInstance.trigger('blur', {}, editorMedium[0]);\n $scope.outdated = false;\n refreshCodeBlocks(mediumInstance);\n $scope.onCancel();\n };\n clean = function() {\n $scope.markdown = '';\n return editorMedium.html('');\n };\n saveEnd = function() {\n $scope.saving = false;\n if (!isEditOnly) {\n setEditMode(false);\n }\n if (notPersist) {\n clean();\n }\n discardLocalStorage();\n mediumInstance.trigger('blur', {}, editorMedium[0]);\n return analytics.trackEvent('develop', 'save wysiwyg', $scope.mode, 1);\n };\n uploadEnd = function(name, url) {\n if (taiga.isImage(name)) {\n return mediumInstance.pasteHTML(\"
    \");\n } else {\n name = $('
    ').text(name).html();\n return mediumInstance.pasteHTML(\"\" + name + \"
    \");\n }\n };\n isOutdated = function() {\n var store;\n store = $storage.get($scope.storageKey);\n if (store && store.version && store.version !== $scope.version) {\n return true;\n }\n return false;\n };\n isDraft = function() {\n var store;\n store = $storage.get($scope.storageKey);\n if (store) {\n return true;\n }\n return false;\n };\n getCurrentContent = function() {\n var store;\n store = $storage.get($scope.storageKey);\n if (store) {\n return store.text;\n }\n return $scope.content;\n };\n discardLocalStorage = function() {\n return $storage.remove($scope.storageKey);\n };\n $scope.cancelWithConfirmation = function() {\n var message, title;\n if ($scope.content === $scope.markdown) {\n $scope.cancel();\n document.activeElement.blur();\n document.body.click();\n return null;\n }\n title = $translate.instant(\"COMMON.CONFIRM_CLOSE_EDIT_MODE_TITLE\");\n message = $translate.instant(\"COMMON.CONFIRM_CLOSE_EDIT_MODE_MESSAGE\");\n return $confirm.ask(title, null, message).then(function(askResponse) {\n $scope.cancel();\n return askResponse.finish();\n });\n };\n replaceCodeBrToNl = function() {\n var html;\n html = $('
    ').html(editorMedium.html());\n html.find('code br').replaceWith('\\n');\n return html.html();\n };\n updateMarkdownWithCurrentHtml = function() {\n var html;\n html = replaceCodeBrToNl();\n return $scope.markdown = wysiwygService.getMarkdown(html);\n };\n localSave = function(markdown) {\n var store;\n if ($scope.storageKey) {\n store = {};\n store.version = $scope.version || 0;\n store.text = markdown;\n return $storage.set($scope.storageKey, store);\n }\n };\n change = function() {\n if ($scope.mode === 'html') {\n updateMarkdownWithCurrentHtml();\n }\n localSave($scope.markdown);\n return $scope.onChange({\n markdown: $scope.markdown\n });\n };\n throttleChange = _.throttle(change, 200);\n create = function(text, editMode) {\n var html;\n if (editMode == null) {\n editMode = false;\n }\n if (text.length) {\n html = wysiwygService.getHTML(text);\n editorMedium.html(html);\n }\n mediumInstance = new MediumEditor(editorMedium[0], {\n imageDragging: false,\n placeholder: {\n text: $scope.placeholder\n },\n toolbar: {\n buttons: [\n {\n name: 'bold',\n contentDefault: getIcon('editor-bold')\n }, {\n name: 'italic',\n contentDefault: getIcon('editor-italic')\n }, {\n name: 'strikethrough',\n contentDefault: getIcon('editor-cross-out')\n }, {\n name: 'anchor',\n contentDefault: getIcon('editor-link')\n }, {\n name: 'image',\n contentDefault: getIcon('editor-image')\n }, {\n name: 'orderedlist',\n contentDefault: getIcon('editor-list-n')\n }, {\n name: 'unorderedlist',\n contentDefault: getIcon('editor-list-o')\n }, {\n name: 'h1',\n contentDefault: getIcon('editor-h1')\n }, {\n name: 'h2',\n contentDefault: getIcon('editor-h2')\n }, {\n name: 'h3',\n contentDefault: getIcon('editor-h3')\n }, {\n name: 'quote',\n contentDefault: getIcon('editor-quote')\n }, {\n name: 'removeFormat',\n contentDefault: getIcon('editor-no-format')\n }, {\n name: 'rtl',\n contentDefault: getIcon('editor-rtl')\n }, {\n name: 'code',\n contentDefault: getIcon('editor-code')\n }\n ]\n },\n extensions: {\n paste: new CustomPasteHandler(),\n code: new CodeButton(),\n autolist: new AutoList(),\n alignright: new AlignRightButton(),\n mediumMention: new MentionExtension({\n getItems: function(mention, mentionCb) {\n return wysiwygMentionService.search(mention).then(mentionCb);\n }\n })\n }\n });\n $scope.changeMarkdown = throttleChange;\n mediumInstance.subscribe('editableInput', function(e) {\n return $scope.$applyAsync(throttleChange);\n });\n mediumInstance.subscribe(\"editableClick\", function(e) {\n var r;\n r = new RegExp('^(?:[a-z]+:)?//', 'i');\n if (e.target.href) {\n if (r.test(e.target.getAttribute('href')) || e.target.getAttribute('target') === '_blank') {\n e.stopPropagation();\n return window.open(e.target.href);\n } else {\n return $location.url(e.target.href);\n }\n }\n });\n mediumInstance.subscribe('editableDrop', function(event) {\n return $scope.onUploadFile({\n files: event.dataTransfer.files,\n cb: uploadEnd\n });\n });\n mediumInstance.subscribe('editableKeydown', function(e) {\n var code, mention;\n code = e.keyCode ? e.keyCode : e.which;\n mention = $('.medium-mention');\n if ((code === 40 || code === 38) && mention.length) {\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n if ($scope.editMode && code === 27) {\n e.stopPropagation();\n return $scope.$applyAsync($scope.cancelWithConfirmation);\n } else if (code === 27) {\n return editorMedium.blur();\n }\n });\n setEditMode(editMode);\n return $scope.$applyAsync(function() {\n wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]);\n return refreshCodeBlocks(mediumInstance);\n });\n };\n $(editorMedium[0]).on('mousedown', function(e) {\n if (e.target.href) {\n e.preventDefault();\n return e.stopPropagation();\n } else {\n return $scope.$applyAsync(function() {\n if (!$scope.editMode) {\n setEditMode(true);\n return refreshCodeBlocks(mediumInstance);\n }\n });\n }\n });\n $(editorMedium[0]).on('dblclick', 'pre', function(e) {\n return $scope.$applyAsync(function() {\n $scope.codeEditorVisible = true;\n codeBlockSelected = e.currentTarget.querySelector('code');\n $scope.currentCodeLanguage = wysiwygCodeHightlighterService.getLanguageInClassList(codeBlockSelected.classList);\n return $scope.code = codeBlockSelected.innerText;\n });\n });\n unwatch = $scope.$watch('content', function(content) {\n var unwatchLoader;\n if (!_.isUndefined(content)) {\n $scope.outdated = isOutdated();\n if (!mediumInstance && isDraft()) {\n setEditMode(true);\n }\n if (($scope.markdown.length || content.length) && $scope.markdown === content) {\n return;\n }\n content = getCurrentContent();\n $scope.markdown = content;\n if (mediumInstance) {\n mediumInstance.destroy();\n }\n if (tgLoader.open()) {\n unwatchLoader = tgLoader.onEnd(function() {\n create(content, $scope.editMode);\n return unwatchLoader();\n });\n } else {\n create(content, $scope.editMode);\n }\n return unwatch();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n if (mediumInstance) {\n if (editorMedium.length) {\n $(editorMedium[0]).off();\n }\n return mediumInstance.destroy();\n }\n });\n };\n return {\n templateUrl: \"common/components/wysiwyg-toolbar.html\",\n scope: {\n placeholder: '@',\n version: '<',\n storageKey: '<',\n content: '<',\n onCancel: '&',\n onSave: '&',\n onUploadFile: '&',\n onChange: '&'\n },\n link: link\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgWysiwyg\", [\"$translate\", \"$tgConfirm\", \"$tgStorage\", \"tgWysiwygService\", \"animationFrame\", \"tgLoader\", \"tgWysiwygCodeHightlighterService\", \"tgWysiwygMentionService\", \"$tgAnalytics\", \"$location\", Medium]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg.service.coffee\n */\n\n(function() {\n var WysiwygService;\n\n WysiwygService = (function() {\n WysiwygService.$inject = [\"tgWysiwygCodeHightlighterService\", \"tgProjectService\", \"$tgNavUrls\", \"$tgEmojis\"];\n\n function WysiwygService(wysiwygCodeHightlighterService, projectService, navurls, emojis) {\n this.wysiwygCodeHightlighterService = wysiwygCodeHightlighterService;\n this.projectService = projectService;\n this.navurls = navurls;\n this.emojis = emojis;\n }\n\n WysiwygService.prototype.searchEmojiByName = function(name) {\n return this.emojis.searchByName(name);\n };\n\n WysiwygService.prototype.pipeLinks = function(text) {\n return text.replace(/\\[\\[(.*?)\\]\\]/g, function(match, p1, offset, str) {\n var link, linkParams, title;\n linkParams = p1.split('|');\n link = linkParams[0];\n title = linkParams[1] || linkParams[0];\n return '[' + title + '](' + link + ')';\n });\n };\n\n WysiwygService.prototype.replaceUrls = function(html) {\n var el, i, len, link, links;\n el = document.createElement('html');\n el.innerHTML = html;\n links = el.querySelectorAll('a');\n for (i = 0, len = links.length; i < len; i++) {\n link = links[i];\n if (link.getAttribute('href').indexOf('/profile/') !== -1) {\n link.parentNode.replaceChild(document.createTextNode(link.innerText), link);\n } else if (link.getAttribute('href').indexOf('/t/') !== -1) {\n link.parentNode.replaceChild(document.createTextNode(link.innerText), link);\n }\n }\n return el.innerHTML;\n };\n\n WysiwygService.prototype.searchWikiLinks = function(html) {\n var el, i, len, link, links, url;\n el = document.createElement('html');\n el.innerHTML = html;\n links = el.querySelectorAll('a');\n for (i = 0, len = links.length; i < len; i++) {\n link = links[i];\n if (link.getAttribute('href').indexOf('/') === -1) {\n url = this.navurls.resolve('project-wiki-page', {\n project: this.projectService.project.get('slug'),\n slug: link.getAttribute('href')\n });\n link.setAttribute('href', url);\n }\n }\n return el.innerHTML;\n };\n\n WysiwygService.prototype.removeTrailingListBr = function(text) {\n return text.replace(/
  • (.*?)
    <\\/li>/g, '
  • $1
  • ');\n };\n\n WysiwygService.prototype.getMarkdown = function(html) {\n var cleanIssueConverter, codeLanguageConverter, markdown;\n cleanIssueConverter = {\n filter: ['html', 'body', 'span', 'div'],\n replacement: function(innerHTML) {\n return innerHTML;\n }\n };\n codeLanguageConverter = {\n filter: (function(_this) {\n return function(node) {\n return node.nodeName === 'PRE' && node.firstChild && node.firstChild.nodeName === 'CODE';\n };\n })(this),\n replacement: (function(_this) {\n return function(content, node) {\n var lan;\n lan = _this.wysiwygCodeHightlighterService.getLanguageInClassList(node.firstChild.classList);\n if (!lan) {\n lan = '';\n }\n return '\\n\\n```' + lan + '\\n' + _.trim(node.firstChild.textContent) + '\\n```\\n\\n';\n };\n })(this)\n };\n html = html.replace(/ (<\\/.*>)/g, \"$1\");\n html = this.emojis.replaceImgsByEmojiName(html);\n html = this.replaceUrls(html);\n html = this.removeTrailingListBr(html);\n markdown = toMarkdown(html, {\n gfm: true,\n converters: [cleanIssueConverter, codeLanguageConverter]\n });\n return markdown;\n };\n\n WysiwygService.prototype.parseMentionMatches = function(text) {\n var m, matches, offset, prevChar, regex, serviceName, tagBuilder;\n serviceName = 'twitter';\n tagBuilder = this.tagBuilder;\n matches = [];\n regex = /@[^\\s]{1,50}[^.\\s]/g;\n m = regex.exec(text);\n while (m !== null) {\n offset = m.index;\n prevChar = text.charAt(offset - 1);\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n m.forEach(function(match, groupIndex) {\n return matches.push(new Autolinker.match.Mention({\n tagBuilder: tagBuilder,\n matchedText: match,\n offset: offset,\n serviceName: serviceName,\n mention: match.slice(1)\n }));\n });\n m = regex.exec(text);\n }\n return matches;\n };\n\n WysiwygService.prototype.autoLinkHTML = function(html) {\n var autolinker, matchRegexStr;\n matchRegexStr = String(Autolinker.matcher.Mention.prototype.matcherRegexes.twitter);\n if (matchRegexStr.indexOf('.') === -1) {\n matchRegexStr = '@[^\\s]{1,50}[^.\\s]';\n }\n autolinker = new Autolinker({\n mention: 'twitter',\n hashtag: 'twitter',\n replaceFn: (function(_this) {\n return function(match) {\n var profileUrl, url;\n if (match.getType() === 'mention') {\n profileUrl = _this.navurls.resolve('user-profile', {\n project: _this.projectService.project.get('slug'),\n username: match.getMention()\n });\n return '@' + match.getMention() + '';\n } else if (match.getType() === 'hashtag') {\n url = _this.navurls.resolve('project-detail-ref', {\n project: _this.projectService.project.get('slug'),\n ref: match.getHashtag()\n });\n return '#' + match.getHashtag() + '';\n }\n };\n })(this)\n });\n Autolinker.matcher.Mention.prototype.parseMatches = this.parseMentionMatches.bind(autolinker);\n return autolinker.link(html);\n };\n\n WysiwygService.prototype.getHTML = function(text) {\n var md, options, result;\n if (!text || !text.length) {\n return \"\";\n }\n options = {\n breaks: true\n };\n text = this.emojis.replaceEmojiNameByImgs(text);\n text = this.pipeLinks(text);\n md = window.markdownit({\n breaks: true\n });\n md.use(window.markdownitLazyHeaders);\n result = md.render(text);\n result = this.searchWikiLinks(result);\n result = this.autoLinkHTML(result);\n return result;\n };\n\n return WysiwygService;\n\n })();\n\n angular.module(\"taigaComponents\").service(\"tgWysiwygService\", WysiwygService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-home-order-by/discover-home-order-by.controller.coffee\n */\n\n(function() {\n var DiscoverHomeOrderByController;\n\n DiscoverHomeOrderByController = (function() {\n DiscoverHomeOrderByController.$inject = ['$translate'];\n\n function DiscoverHomeOrderByController(translate) {\n this.translate = translate;\n this.is_open = false;\n this.texts = {\n week: this.translate.instant('DISCOVER.FILTERS.WEEK'),\n month: this.translate.instant('DISCOVER.FILTERS.MONTH'),\n year: this.translate.instant('DISCOVER.FILTERS.YEAR'),\n all: this.translate.instant('DISCOVER.FILTERS.ALL_TIME')\n };\n }\n\n DiscoverHomeOrderByController.prototype.currentText = function() {\n return this.texts[this.currentOrderBy];\n };\n\n DiscoverHomeOrderByController.prototype.open = function() {\n return this.is_open = true;\n };\n\n DiscoverHomeOrderByController.prototype.close = function() {\n return this.is_open = false;\n };\n\n DiscoverHomeOrderByController.prototype.orderBy = function(type) {\n this.currentOrderBy = type;\n this.is_open = false;\n return this.onChange({\n orderBy: this.currentOrderBy\n });\n };\n\n return DiscoverHomeOrderByController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverHomeOrderBy\", DiscoverHomeOrderByController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-home-order-by/discover-home-order-by.directive.coffee\n */\n\n(function() {\n var DiscoverHomeOrderByDirective;\n\n DiscoverHomeOrderByDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n controller: \"DiscoverHomeOrderBy\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"discover/components/discover-home-order-by/discover-home-order-by.html\",\n scope: {\n currentOrderBy: \"=orderBy\",\n onChange: \"&\"\n },\n link: link\n };\n };\n\n DiscoverHomeOrderByDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgDiscoverHomeOrderBy\", DiscoverHomeOrderByDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-search-bar/discover-search-bar.controller.coffee\n */\n\n(function() {\n var DiscoverSearchBarController;\n\n DiscoverSearchBarController = (function() {\n DiscoverSearchBarController.$inject = ['tgDiscoverProjectsService'];\n\n function DiscoverSearchBarController(discoverProjectsService) {\n this.discoverProjectsService = discoverProjectsService;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.discoverProjectsService.projectsCount;\n };\n })(this));\n this.discoverProjectsService.fetchStats();\n }\n\n DiscoverSearchBarController.prototype.selectFilter = function(filter) {\n return this.onChange({\n filter: filter,\n q: this.q\n });\n };\n\n DiscoverSearchBarController.prototype.submitFilter = function() {\n return this.onChange({\n filter: this.filter,\n q: this.q\n });\n };\n\n return DiscoverSearchBarController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverSearchBar\", DiscoverSearchBarController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-search-bar/discover-search-bar.directive.coffee\n */\n\n(function() {\n var DiscoverSearchBarDirective;\n\n DiscoverSearchBarDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {};\n return {\n controller: \"DiscoverSearchBar\",\n controllerAs: \"vm\",\n templateUrl: 'discover/components/discover-search-bar/discover-search-bar.html',\n bindToController: true,\n scope: {\n q: \"=\",\n filter: \"=\",\n onChange: \"&\"\n },\n compile: function(element, attrs) {\n if (!attrs.q) {\n return attrs.q = '';\n }\n },\n link: link\n };\n };\n\n DiscoverSearchBarDirective.$inject = [];\n\n angular.module('taigaDiscover').directive('tgDiscoverSearchBar', DiscoverSearchBarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-search-list-header/discover-search-list-header.controller.coffee\n */\n\n(function() {\n var DiscoverSearchListHeaderController;\n\n DiscoverSearchListHeaderController = (function() {\n DiscoverSearchListHeaderController.$inject = [];\n\n function DiscoverSearchListHeaderController() {\n this.like_is_open = this.orderBy.indexOf('-total_fans') === 0;\n this.activity_is_open = this.orderBy.indexOf('-total_activity') === 0;\n }\n\n DiscoverSearchListHeaderController.prototype.openLike = function() {\n this.like_is_open = true;\n this.activity_is_open = false;\n return this.setOrderBy('-total_fans_last_week');\n };\n\n DiscoverSearchListHeaderController.prototype.openActivity = function() {\n this.activity_is_open = true;\n this.like_is_open = false;\n return this.setOrderBy('-total_activity_last_week');\n };\n\n DiscoverSearchListHeaderController.prototype.setOrderBy = function(type) {\n if (type == null) {\n type = '';\n }\n if (!type) {\n this.like_is_open = false;\n this.activity_is_open = false;\n }\n return this.onChange({\n orderBy: type\n });\n };\n\n return DiscoverSearchListHeaderController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverSearchListHeader\", DiscoverSearchListHeaderController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-search-list-header/discover-search-list-header.directive.coffee\n */\n\n(function() {\n var DiscoverSearchListHeaderDirective;\n\n DiscoverSearchListHeaderDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n controller: \"DiscoverSearchListHeader\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"discover/components/discover-search-list-header/discover-search-list-header.html\",\n scope: {\n onChange: \"&\",\n orderBy: \"=\"\n },\n link: link\n };\n };\n\n DiscoverSearchListHeaderDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgDiscoverSearchListHeader\", DiscoverSearchListHeaderDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/featured-projects/featured-projects.controller.coffee\n */\n\n(function() {\n var FeaturedProjectsController;\n\n FeaturedProjectsController = (function() {\n FeaturedProjectsController.$inject = [\"tgDiscoverProjectsService\"];\n\n function FeaturedProjectsController(discoverProjectsService) {\n this.discoverProjectsService = discoverProjectsService;\n taiga.defineImmutableProperty(this, \"featured\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.featured;\n };\n })(this));\n this.discoverProjectsService.fetchFeatured();\n }\n\n return FeaturedProjectsController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"FeaturedProjects\", FeaturedProjectsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/featured-projects/featured-projects.directive.coffee\n */\n\n(function() {\n var FeaturedProjectsDirective;\n\n FeaturedProjectsDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n controller: \"FeaturedProjects\",\n controllerAs: \"vm\",\n templateUrl: \"discover/components/featured-projects/featured-projects.html\",\n scope: {},\n link: link\n };\n };\n\n FeaturedProjectsDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgFeaturedProjects\", FeaturedProjectsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/highlighted/highlighted.directive.coffee\n */\n\n(function() {\n var HighlightedDirective;\n\n HighlightedDirective = function() {\n return {\n templateUrl: \"discover/components/highlighted/highlighted.html\",\n scope: {\n loading: \"=\",\n highlighted: \"=\",\n orderBy: \"=\"\n }\n };\n };\n\n HighlightedDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgHighlighted\", HighlightedDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/most-active/most-active.controller.coffee\n */\n\n(function() {\n var MostActiveController;\n\n MostActiveController = (function() {\n MostActiveController.$inject = [\"tgDiscoverProjectsService\"];\n\n function MostActiveController(discoverProjectsService) {\n this.discoverProjectsService = discoverProjectsService;\n taiga.defineImmutableProperty(this, \"highlighted\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.mostActive;\n };\n })(this));\n this.currentOrderBy = 'week';\n this.order_by = this.getOrderBy();\n }\n\n MostActiveController.prototype.fetch = function() {\n this.loading = true;\n this.order_by = this.getOrderBy();\n return this.discoverProjectsService.fetchMostActive({\n order_by: this.order_by\n }).then((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n };\n\n MostActiveController.prototype.orderBy = function(type) {\n this.currentOrderBy = type;\n return this.fetch();\n };\n\n MostActiveController.prototype.getOrderBy = function(type) {\n if (this.currentOrderBy === 'all') {\n return '-total_activity';\n } else {\n return '-total_activity_last_' + this.currentOrderBy;\n }\n };\n\n return MostActiveController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"MostActive\", MostActiveController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/most-active/most-active.directive.coffee\n */\n\n(function() {\n var MostActiveDirective;\n\n MostActiveDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.fetch();\n };\n return {\n controller: \"MostActive\",\n controllerAs: \"vm\",\n templateUrl: \"discover/components/most-active/most-active.html\",\n scope: {},\n link: link\n };\n };\n\n MostActiveDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgMostActive\", MostActiveDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/most-liked/most-liked.controller.coffee\n */\n\n(function() {\n var MostLikedController;\n\n MostLikedController = (function() {\n MostLikedController.$inject = [\"tgDiscoverProjectsService\"];\n\n function MostLikedController(discoverProjectsService) {\n this.discoverProjectsService = discoverProjectsService;\n taiga.defineImmutableProperty(this, \"highlighted\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.mostLiked;\n };\n })(this));\n this.currentOrderBy = 'week';\n this.order_by = this.getOrderBy();\n }\n\n MostLikedController.prototype.fetch = function() {\n this.loading = true;\n this.order_by = this.getOrderBy();\n return this.discoverProjectsService.fetchMostLiked({\n order_by: this.order_by\n }).then((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n };\n\n MostLikedController.prototype.orderBy = function(type) {\n this.currentOrderBy = type;\n return this.fetch();\n };\n\n MostLikedController.prototype.getOrderBy = function() {\n if (this.currentOrderBy === 'all') {\n return '-total_fans';\n } else {\n return '-total_fans_last_' + this.currentOrderBy;\n }\n };\n\n return MostLikedController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"MostLiked\", MostLikedController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/most-liked/most-liked.directive.coffee\n */\n\n(function() {\n var MostLikedDirective;\n\n MostLikedDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.fetch();\n };\n return {\n controller: \"MostLiked\",\n controllerAs: \"vm\",\n templateUrl: \"discover/components/most-liked/most-liked.html\",\n scope: {},\n link: link\n };\n };\n\n MostLikedDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgMostLiked\", MostLikedDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/discover-home/discover-home.controller.coffee\n */\n\n(function() {\n var DiscoverHomeController;\n\n DiscoverHomeController = (function() {\n DiscoverHomeController.$inject = ['$tgLocation', '$tgNavUrls', 'tgAppMetaService', '$translate'];\n\n function DiscoverHomeController(location, navUrls, appMetaService, translate) {\n var description, title;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n title = this.translate.instant(\"DISCOVER.PAGE_TITLE\");\n description = this.translate.instant(\"DISCOVER.PAGE_DESCRIPTION\");\n this.appMetaService.setAll(title, description);\n }\n\n DiscoverHomeController.prototype.onSubmit = function(q) {\n var url;\n url = this.navUrls.resolve('discover-search');\n return this.location.search('text', q).path(url);\n };\n\n return DiscoverHomeController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverHome\", DiscoverHomeController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/discover-search/discover-search.controller.coffee\n */\n\n(function() {\n var DiscoverSearchController;\n\n DiscoverSearchController = (function() {\n DiscoverSearchController.$inject = ['$routeParams', 'tgDiscoverProjectsService', '$route', '$tgLocation', '$tgAnalytics', 'tgAppMetaService', '$translate'];\n\n function DiscoverSearchController(routeParams, discoverProjectsService, route, location, analytics, appMetaService, translate) {\n var description, title;\n this.routeParams = routeParams;\n this.discoverProjectsService = discoverProjectsService;\n this.route = route;\n this.location = location;\n this.analytics = analytics;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.page = 1;\n taiga.defineImmutableProperty(this, \"searchResult\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.searchResult;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"nextSearchPage\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.nextSearchPage;\n };\n })(this));\n this.q = this.routeParams.text;\n this.filter = this.routeParams.filter || 'all';\n this.orderBy = this.routeParams['order_by'] || '';\n this.loadingGlobal = false;\n this.loadingList = false;\n this.loadingPagination = false;\n title = this.translate.instant(\"DISCOVER.SEARCH.PAGE_TITLE\");\n description = this.translate.instant(\"DISCOVER.SEARCH.PAGE_DESCRIPTION\");\n this.appMetaService.setAll(title, description);\n this.analytics.trackPage(this.location.url(), \"Discover Search\");\n }\n\n DiscoverSearchController.prototype.fetch = function() {\n this.page = 1;\n this.discoverProjectsService.resetSearchList();\n return this.search();\n };\n\n DiscoverSearchController.prototype.fetchByGlobalSearch = function() {\n if (this.loadingGlobal) {\n return;\n }\n this.loadingGlobal = true;\n return this.fetch().then((function(_this) {\n return function() {\n return _this.loadingGlobal = false;\n };\n })(this));\n };\n\n DiscoverSearchController.prototype.fetchByOrderBy = function() {\n if (this.loadingList) {\n return;\n }\n this.loadingList = true;\n return this.fetch().then((function(_this) {\n return function() {\n return _this.loadingList = false;\n };\n })(this));\n };\n\n DiscoverSearchController.prototype.showMore = function() {\n if (this.loadingPagination) {\n return;\n }\n this.loadingPagination = true;\n this.page++;\n return this.search().then((function(_this) {\n return function() {\n return _this.loadingPagination = false;\n };\n })(this));\n };\n\n DiscoverSearchController.prototype.search = function() {\n var filter, params;\n filter = this.getFilter();\n params = {\n page: this.page,\n q: this.q,\n order_by: this.orderBy\n };\n _.assign(params, filter);\n return this.discoverProjectsService.fetchSearch(params);\n };\n\n DiscoverSearchController.prototype.getFilter = function() {\n if (this.filter === 'people') {\n return {\n is_looking_for_people: true\n };\n } else if (this.filter === 'scrum') {\n return {\n is_backlog_activated: true\n };\n } else if (this.filter === 'kanban') {\n return {\n is_kanban_activated: true\n };\n }\n return {};\n };\n\n DiscoverSearchController.prototype.onChangeFilter = function(filter, q) {\n this.filter = filter;\n this.q = q;\n this.route.updateParams({\n filter: this.filter,\n text: this.q\n });\n this.analytics.trackPage(this.location.url(), \"Discover Search\");\n return this.fetchByGlobalSearch();\n };\n\n DiscoverSearchController.prototype.onChangeOrder = function(orderBy) {\n this.orderBy = orderBy;\n this.route.updateParams({\n order_by: orderBy\n });\n this.analytics.trackPage(this.location.url(), \"Discover Search\");\n return this.fetchByOrderBy();\n };\n\n return DiscoverSearchController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverSearch\", DiscoverSearchController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/discover-search/discover-search.directive.coffee\n */\n\n(function() {\n var DiscoverSearchDirective;\n\n DiscoverSearchDirective = function() {\n var link;\n link = function(scope, element, attrs, ctrl) {\n return ctrl.fetch();\n };\n return {\n controller: \"DiscoverSearch\",\n controllerAs: \"vm\",\n link: link\n };\n };\n\n DiscoverSearchDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgDiscoverSearch\", DiscoverSearchDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/services/discover-projects.service.coffee\n */\n\n(function() {\n var DiscoverProjectsService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n DiscoverProjectsService = (function(superClass) {\n var _discoverParams;\n\n extend(DiscoverProjectsService, superClass);\n\n DiscoverProjectsService.$inject = [\"tgResources\", \"tgProjectsService\"];\n\n _discoverParams = {\n discover_mode: true\n };\n\n function DiscoverProjectsService(rs, projectsService) {\n this.rs = rs;\n this.projectsService = projectsService;\n this._mostLiked = Immutable.List();\n this._mostActive = Immutable.List();\n this._featured = Immutable.List();\n this._searchResult = Immutable.List();\n this._projectsCount = 0;\n this.decorate = this.projectsService._decorate.bind(this.projectsService);\n taiga.defineImmutableProperty(this, \"mostLiked\", (function(_this) {\n return function() {\n return _this._mostLiked;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"mostActive\", (function(_this) {\n return function() {\n return _this._mostActive;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"featured\", (function(_this) {\n return function() {\n return _this._featured;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"searchResult\", (function(_this) {\n return function() {\n return _this._searchResult;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"nextSearchPage\", (function(_this) {\n return function() {\n return _this._nextSearchPage;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"projectsCount\", (function(_this) {\n return function() {\n return _this._projectsCount;\n };\n })(this));\n }\n\n DiscoverProjectsService.prototype.fetchMostLiked = function(params) {\n var _params;\n _params = _.extend({}, _discoverParams, params);\n return this.rs.projects.getProjects(_params, false).then((function(_this) {\n return function(result) {\n var data, projects;\n data = result.data.slice(0, 5);\n projects = Immutable.fromJS(data);\n projects = projects.map(_this.decorate);\n return _this._mostLiked = projects;\n };\n })(this));\n };\n\n DiscoverProjectsService.prototype.fetchMostActive = function(params) {\n var _params;\n _params = _.extend({}, _discoverParams, params);\n return this.rs.projects.getProjects(_params, false).then((function(_this) {\n return function(result) {\n var data, projects;\n data = result.data.slice(0, 5);\n projects = Immutable.fromJS(data);\n projects = projects.map(_this.decorate);\n return _this._mostActive = projects;\n };\n })(this));\n };\n\n DiscoverProjectsService.prototype.fetchFeatured = function() {\n var _params;\n _params = _.extend({}, _discoverParams);\n _params.is_featured = true;\n return this.rs.projects.getProjects(_params, false).then((function(_this) {\n return function(result) {\n var data, projects;\n data = result.data.slice(0, 4);\n projects = Immutable.fromJS(data);\n projects = projects.map(_this.decorate);\n return _this._featured = projects;\n };\n })(this));\n };\n\n DiscoverProjectsService.prototype.resetSearchList = function() {\n return this._searchResult = Immutable.List();\n };\n\n DiscoverProjectsService.prototype.fetchStats = function() {\n return this.rs.stats.discover().then((function(_this) {\n return function(discover) {\n return _this._projectsCount = discover.getIn(['projects', 'total']);\n };\n })(this));\n };\n\n DiscoverProjectsService.prototype.fetchSearch = function(params) {\n var _params;\n _params = _.extend({}, _discoverParams, params);\n return this.rs.projects.getProjects(_params).then((function(_this) {\n return function(result) {\n var projects;\n _this._nextSearchPage = !!result.headers('X-Pagination-Next');\n projects = Immutable.fromJS(result.data);\n projects = projects.map(_this.decorate);\n return _this._searchResult = _this._searchResult.concat(projects);\n };\n })(this));\n };\n\n return DiscoverProjectsService;\n\n })(taiga.Service);\n\n angular.module(\"taigaDiscover\").service(\"tgDiscoverProjectsService\", DiscoverProjectsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/create-epic/create-epic.controller.coffee\n */\n\n(function() {\n var CreateEpicController, getRandomDefaultColor, taiga, trim;\n\n taiga = this.taiga;\n\n trim = taiga.trim;\n\n getRandomDefaultColor = taiga.getRandomDefaultColor;\n\n CreateEpicController = (function() {\n CreateEpicController.$inject = [\"$tgConfirm\", \"tgProjectService\", \"tgEpicsService\", \"$tgAnalytics\"];\n\n function CreateEpicController(confirm, projectService, epicsService, analytics) {\n this.confirm = confirm;\n this.projectService = projectService;\n this.epicsService = epicsService;\n this.analytics = analytics;\n this.project = this.projectService.project.toJS();\n this.newEpic = {\n color: getRandomDefaultColor(),\n status: this.project.default_epic_status,\n tags: []\n };\n this.attachments = Immutable.List();\n this.loading = false;\n }\n\n CreateEpicController.prototype.createEpic = function() {\n if (!this.validateForm()) {\n return;\n }\n this.loading = true;\n return this.epicsService.createEpic(this.newEpic, this.attachments).then((function(_this) {\n return function(response) {\n _this.analytics.trackEvent(\"epic\", \"create\", \"create epic\", 1);\n _this.onCreateEpic();\n return _this.loading = false;\n };\n })(this))[\"catch\"]((function(_this) {\n return function(response) {\n _this.loading = false;\n _this.setFormErrors(response.data);\n if (response.data._error_message) {\n return _this.confirm.notify(\"error\", response.data._error_message);\n }\n };\n })(this));\n };\n\n CreateEpicController.prototype.selectColor = function(color) {\n return this.newEpic.color = color;\n };\n\n CreateEpicController.prototype.addTag = function(name, color) {\n name = trim(name.toLowerCase());\n if (!_.find(this.newEpic.tags, function(it) {\n return it[0] === name;\n })) {\n return this.newEpic.tags.push([name, color]);\n }\n };\n\n CreateEpicController.prototype.deleteTag = function(tag) {\n return _.remove(this.newEpic.tags, function(it) {\n return it[0] === tag[0];\n });\n };\n\n CreateEpicController.prototype.addAttachment = function(attachment) {\n return this.attachments.push(attachment);\n };\n\n return CreateEpicController;\n\n })();\n\n angular.module(\"taigaEpics\").controller(\"CreateEpicCtrl\", CreateEpicController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/create-epic/create-epic.directive.coffee\n */\n\n(function() {\n var CreateEpicDirective;\n\n CreateEpicDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var form;\n form = el.find(\"form\").checksley();\n ctrl.validateForm = (function(_this) {\n return function() {\n return form.validate();\n };\n })(this);\n return ctrl.setFormErrors = (function(_this) {\n return function(errors) {\n return form.setErrors(errors);\n };\n })(this);\n };\n return {\n link: link,\n templateUrl: \"epics/create-epic/create-epic.html\",\n controller: \"CreateEpicCtrl\",\n controllerAs: \"vm\",\n bindToController: {\n onCreateEpic: '&'\n },\n scope: {}\n };\n };\n\n angular.module('taigaEpics').directive(\"tgCreateEpic\", CreateEpicDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epic-row/epic-row.controller.coffee\n */\n\n(function() {\n var EpicRowController;\n\n EpicRowController = (function() {\n EpicRowController.$inject = [\"$tgConfirm\", \"tgProjectService\", \"tgEpicsService\"];\n\n function EpicRowController(confirm, projectService, epicsService) {\n this.confirm = confirm;\n this.projectService = projectService;\n this.epicsService = epicsService;\n this.displayUserStories = false;\n this.displayAssignedTo = false;\n this.displayStatusList = false;\n this.loadingStatus = false;\n this.project = this.projectService.project.toJS();\n this._calculateProgressBar();\n }\n\n EpicRowController.prototype._calculateProgressBar = function() {\n var progress, total;\n if (this.epic.getIn(['status_extra_info', 'is_closed']) === true) {\n return this.percentage = \"100%\";\n } else {\n progress = this.epic.getIn(['user_stories_counts', 'progress']);\n total = this.epic.getIn(['user_stories_counts', 'total']);\n if (total === 0) {\n return this.percentage = \"0%\";\n } else {\n return this.percentage = (progress * 100 / total) + \"%\";\n }\n }\n };\n\n EpicRowController.prototype.canEditEpics = function() {\n return this.projectService.hasPermission(\"modify_epic\");\n };\n\n EpicRowController.prototype.toggleUserStoryList = function() {\n if (!this.displayUserStories) {\n return this.epicsService.listRelatedUserStories(this.epic).then((function(_this) {\n return function(userStories) {\n _this.epicStories = userStories;\n return _this.displayUserStories = true;\n };\n })(this))[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify('error');\n };\n })(this));\n } else {\n return this.displayUserStories = false;\n }\n };\n\n EpicRowController.prototype.updateStatus = function(statusId) {\n this.displayStatusList = false;\n this.loadingStatus = true;\n return this.epicsService.updateEpicStatus(this.epic, statusId)[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify('error');\n };\n })(this))[\"finally\"]((function(_this) {\n return function() {\n return _this.loadingStatus = false;\n };\n })(this));\n };\n\n EpicRowController.prototype.updateAssignedTo = function(member) {\n this.assignLoader = true;\n return this.epicsService.updateEpicAssignedTo(this.epic, (member != null ? member.id : void 0) || null)[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify('error');\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.assignLoader = false;\n };\n })(this));\n };\n\n return EpicRowController;\n\n })();\n\n angular.module(\"taigaEpics\").controller(\"EpicRowCtrl\", EpicRowController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epic-row/epic-row.directive.coffee\n */\n\n(function() {\n var EpicRowDirective;\n\n EpicRowDirective = function() {\n return {\n templateUrl: \"epics/dashboard/epic-row/epic-row.html\",\n controller: \"EpicRowCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n epic: '=',\n column: '='\n }\n };\n };\n\n angular.module('taigaEpics').directive(\"tgEpicRow\", EpicRowDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epics-dashboard.controller.coffee\n */\n\n(function() {\n var EpicsDashboardController, taiga;\n\n taiga = this.taiga;\n\n EpicsDashboardController = (function() {\n EpicsDashboardController.$inject = [\"$routeParams\", \"tgErrorHandlingService\", \"tgLightboxFactory\", \"lightboxService\", \"$tgConfirm\", \"tgProjectService\", \"tgEpicsService\", \"tgAppMetaService\", \"$translate\"];\n\n function EpicsDashboardController(params, errorHandlingService, lightboxFactory, lightboxService, confirm, projectService, epicsService, appMetaService, translate) {\n this.params = params;\n this.errorHandlingService = errorHandlingService;\n this.lightboxFactory = lightboxFactory;\n this.lightboxService = lightboxService;\n this.confirm = confirm;\n this.projectService = projectService;\n this.epicsService = epicsService;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.sectionName = \"EPICS.SECTION_NAME\";\n taiga.defineImmutableProperty(this, 'project', (function(_this) {\n return function() {\n return _this.projectService.project;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'epics', (function(_this) {\n return function() {\n return _this.epicsService.epics;\n };\n })(this));\n this.appMetaService.setfn(this._setMeta.bind(this));\n }\n\n EpicsDashboardController.prototype._setMeta = function() {\n var ctx;\n if (!this.project) {\n return null;\n }\n ctx = {\n projectName: this.project.get(\"name\"),\n projectDescription: this.project.get(\"description\")\n };\n return {\n title: this.translate.instant(\"EPICS.PAGE_TITLE\", ctx),\n description: this.translate.instant(\"EPICS.PAGE_DESCRIPTION\", ctx)\n };\n };\n\n EpicsDashboardController.prototype.loadInitialData = function() {\n this.epicsService.clear();\n return this.projectService.setProjectBySlug(this.params.pslug).then((function(_this) {\n return function() {\n if (!_this.projectService.isEpicsDashboardEnabled()) {\n return _this.errorHandlingService.notFound();\n }\n if (!_this.projectService.hasPermission(\"view_epics\")) {\n return _this.errorHandlingService.permissionDenied();\n }\n return _this.epicsService.fetchEpics();\n };\n })(this));\n };\n\n EpicsDashboardController.prototype.canCreateEpics = function() {\n return this.projectService.hasPermission(\"add_epic\");\n };\n\n EpicsDashboardController.prototype.onCreateEpic = function() {\n var onCreateEpic;\n onCreateEpic = (function(_this) {\n return function() {\n _this.lightboxService.closeAll();\n _this.confirm.notify(\"success\");\n };\n })(this);\n return this.lightboxFactory.create('tg-create-epic', {\n \"class\": \"lightbox lightbox-create-epic open\",\n \"on-create-epic\": \"onCreateEpic()\"\n }, {\n \"onCreateEpic\": onCreateEpic.bind(this)\n });\n };\n\n return EpicsDashboardController;\n\n })();\n\n angular.module(\"taigaEpics\").controller(\"EpicsDashboardCtrl\", EpicsDashboardController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epics-sortable/epics-sortable.directive.coffee\n */\n\n(function() {\n var EpicsSortableDirective;\n\n EpicsSortableDirective = function($parse, projectService) {\n var link;\n link = function(scope, el, attrs) {\n var callback, drake, scroll;\n if (!projectService.hasPermission(\"modify_epic\")) {\n return;\n }\n callback = $parse(attrs.tgEpicsSortable);\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).is('div.epics-table-body-row');\n }\n });\n drake.on('dragend', function(item) {\n var epic, itemEl, newIndex;\n itemEl = $(item);\n epic = itemEl.scope().epic;\n newIndex = itemEl.index();\n return scope.$apply(function() {\n return callback(scope, {\n epic: epic,\n newIndex: newIndex\n });\n });\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n EpicsSortableDirective.$inject = [\"$parse\", \"tgProjectService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgEpicsSortable\", EpicsSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epics-table/epics-table.controller.coffee\n */\n\n(function() {\n var EpicsTableController, generateHash, taiga;\n\n taiga = this.taiga;\n\n generateHash = this.taiga.generateHash;\n\n EpicsTableController = (function() {\n EpicsTableController.$inject = [\"$tgConfirm\", \"tgEpicsService\", \"$timeout\", \"$tgStorage\", \"tgProjectService\"];\n\n function EpicsTableController(confirm, epicsService, timeout, storage, projectService) {\n this.confirm = confirm;\n this.epicsService = epicsService;\n this.timeout = timeout;\n this.storage = storage;\n this.projectService = projectService;\n this.hash = generateHash([this.projectService.project.get('id'), 'epics']);\n this.displayOptions = false;\n this.displayVotes = true;\n this.column = this.storage.get(this.hash, {\n votes: true,\n name: true,\n project: true,\n sprint: true,\n assigned: true,\n status: true,\n progress: true\n });\n taiga.defineImmutableProperty(this, 'epics', (function(_this) {\n return function() {\n return _this.epicsService.epics;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'disabledEpicsPagination', (function(_this) {\n return function() {\n return _this.epicsService._disablePagination;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'loadingEpics', (function(_this) {\n return function() {\n return _this.epicsService._loadingEpics;\n };\n })(this));\n }\n\n EpicsTableController.prototype.toggleEpicTableOptions = function() {\n return this.displayOptions = !this.displayOptions;\n };\n\n EpicsTableController.prototype.reorderEpic = function(epic, newIndex) {\n if (epic.get('epics_order') === newIndex) {\n return null;\n }\n return this.epicsService.reorderEpic(epic, newIndex).then(null, (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n };\n\n EpicsTableController.prototype.nextPage = function() {\n return this.epicsService.nextPage();\n };\n\n EpicsTableController.prototype.hoverEpicTableOption = function() {\n if (this.timer) {\n return this.timeout.cancel(this.timer);\n }\n };\n\n EpicsTableController.prototype.hideEpicTableOption = function() {\n return this.timer = this.timeout(((function(_this) {\n return function() {\n return _this.displayOptions = false;\n };\n })(this)), 400);\n };\n\n EpicsTableController.prototype.updateViewOptions = function() {\n return this.storage.set(this.hash, this.column);\n };\n\n return EpicsTableController;\n\n })();\n\n angular.module(\"taigaEpics\").controller(\"EpicsTableCtrl\", EpicsTableController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epics-table/epics-table.directive.coffee\n */\n\n(function() {\n var EpicsTableDirective;\n\n EpicsTableDirective = function() {\n return {\n templateUrl: \"epics/dashboard/epics-table/epics-table.html\",\n controller: \"EpicsTableCtrl\",\n controllerAs: \"vm\",\n scope: {}\n };\n };\n\n angular.module('taigaEpics').directive(\"tgEpicsTable\", EpicsTableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/story-row/story-row.controller.coffee\n */\n\n(function() {\n var StoryRowController, module;\n\n module = angular.module(\"taigaEpics\");\n\n StoryRowController = (function() {\n StoryRowController.$inject = [];\n\n function StoryRowController() {\n this._calculateProgressBar();\n }\n\n StoryRowController.prototype._calculateProgressBar = function() {\n var totalTasks, totalTasksCompleted;\n if (this.story.get('is_closed') === true) {\n return this.percentage = \"100%\";\n } else {\n totalTasks = this.story.get('tasks').size;\n totalTasksCompleted = this.story.get('tasks').filter(function(it) {\n return it.get(\"is_closed\");\n }).size;\n if (totalTasks === 0) {\n return this.percentage = \"0%\";\n } else {\n return this.percentage = (totalTasksCompleted * 100 / totalTasks) + \"%\";\n }\n }\n };\n\n return StoryRowController;\n\n })();\n\n module.controller(\"StoryRowCtrl\", StoryRowController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/story-row/story-row.directive.coffee\n */\n\n(function() {\n var StoryRowDirective, module;\n\n module = angular.module('taigaEpics');\n\n StoryRowDirective = function() {\n return {\n templateUrl: \"epics/dashboard/story-row/story-row.html\",\n controller: \"StoryRowCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n story: '=',\n column: '='\n }\n };\n };\n\n module.directive(\"tgStoryRow\", StoryRowDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/epics.service.coffee\n */\n\n(function() {\n var EpicsService, taiga;\n\n taiga = this.taiga;\n\n EpicsService = (function() {\n EpicsService.$inject = ['tgProjectService', 'tgAttachmentsService', 'tgResources', 'tgXhrErrorService'];\n\n function EpicsService(projectService, attachmentsService, resources, xhrError) {\n this.projectService = projectService;\n this.attachmentsService = attachmentsService;\n this.resources = resources;\n this.xhrError = xhrError;\n this.clear();\n taiga.defineImmutableProperty(this, 'epics', (function(_this) {\n return function() {\n return _this._epics;\n };\n })(this));\n }\n\n EpicsService.prototype.clear = function() {\n this._loadingEpics = false;\n this._disablePagination = false;\n this._page = 1;\n return this._epics = Immutable.List();\n };\n\n EpicsService.prototype.fetchEpics = function(reset) {\n if (reset == null) {\n reset = false;\n }\n this._loadingEpics = true;\n this._disablePagination = true;\n return this.resources.epics.list(this.projectService.project.get('id'), this._page).then((function(_this) {\n return function(result) {\n if (reset) {\n _this.clear();\n _this._epics = result.list;\n } else {\n _this._epics = _this._epics.concat(result.list);\n }\n _this._loadingEpics = false;\n return _this._disablePagination = !result.headers('x-pagination-next');\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n return _this.xhrError.response(xhr);\n };\n })(this));\n };\n\n EpicsService.prototype.nextPage = function() {\n this._page++;\n return this.fetchEpics();\n };\n\n EpicsService.prototype.listRelatedUserStories = function(epic) {\n return this.resources.userstories.listInEpic(epic.get('id'));\n };\n\n EpicsService.prototype.createEpic = function(epicData, attachments, projectId) {\n if (projectId) {\n epicData.project = projectId;\n } else {\n epicData.project = this.projectService.project.get('id');\n }\n return this.resources.epics.post(epicData).then((function(_this) {\n return function(epic) {\n var promises;\n if (!attachments) {\n return epic;\n } else {\n promises = _.map(attachments.toJS(), function(attachment) {\n return _this.attachmentsService.upload(attachment.file, epic.get('id'), epic.get('project'), 'epic');\n });\n return Promise.all(promises).then(_this.fetchEpics.bind(_this, true));\n }\n };\n })(this));\n };\n\n EpicsService.prototype.reorderEpic = function(epic, newIndex) {\n var afterDestination, beforeDestination, data, newOrder, orderList, previous, previousWithTheSameOrder, setOrders, withoutMoved;\n orderList = {};\n this._epics.forEach(function(it) {\n return orderList[it.get('id')] = it.get('epics_order');\n });\n withoutMoved = this.epics.filter((function(_this) {\n return function(it) {\n return it.get('id') !== epic.get('id');\n };\n })(this));\n beforeDestination = withoutMoved.slice(0, newIndex);\n afterDestination = withoutMoved.slice(newIndex);\n previous = beforeDestination.last();\n newOrder = !previous ? 0 : previous.get('epics_order') + 1;\n orderList[epic.get('id')] = newOrder;\n previousWithTheSameOrder = beforeDestination.filter((function(_this) {\n return function(it) {\n return it.get('epics_order') === previous.get('epics_order');\n };\n })(this));\n setOrders = _.fromPairs(previousWithTheSameOrder.map((function(_this) {\n return function(it) {\n return [it.get('id'), it.get('epics_order')];\n };\n })(this)).toJS());\n afterDestination.forEach(function(it) {\n return orderList[it.get('id')] = it.get('epics_order') + 1;\n });\n this._epics = this._epics.map(function(it) {\n return it.set('epics_order', orderList[it.get('id')]);\n });\n this._epics = this._epics.sortBy(function(it) {\n return it.get('epics_order');\n });\n data = {\n epics_order: newOrder,\n version: epic.get('version')\n };\n return this.resources.epics.reorder(epic.get('id'), data, setOrders).then((function(_this) {\n return function(newEpic) {\n return _this._epics = _this._epics.map(function(it) {\n if (it.get('id') === newEpic.get('id')) {\n return newEpic;\n }\n return it;\n });\n };\n })(this));\n };\n\n EpicsService.prototype.reorderRelatedUserstory = function(epic, epicUserstories, userstory, newIndex) {\n var beforeDestination, data, epicId, newOrder, previous, previousWithTheSameOrder, setOrders, userstoryId, withoutMoved;\n withoutMoved = epicUserstories.filter((function(_this) {\n return function(it) {\n return it.get('id') !== userstory.get('id');\n };\n })(this));\n beforeDestination = withoutMoved.slice(0, newIndex);\n previous = beforeDestination.last();\n newOrder = !previous ? 0 : previous.get('epic_order') + 1;\n previousWithTheSameOrder = beforeDestination.filter((function(_this) {\n return function(it) {\n return it.get('epic_order') === previous.get('epic_order');\n };\n })(this));\n setOrders = _.fromPairs(previousWithTheSameOrder.map((function(_this) {\n return function(it) {\n return [it.get('id'), it.get('epic_order')];\n };\n })(this)).toJS());\n data = {\n order: newOrder\n };\n epicId = epic.get('id');\n userstoryId = userstory.get('id');\n return this.resources.epics.reorderRelatedUserstory(epicId, userstoryId, data, setOrders).then((function(_this) {\n return function() {\n return _this.listRelatedUserStories(epic);\n };\n })(this));\n };\n\n EpicsService.prototype.replaceEpic = function(epic) {\n return this._epics = this._epics.map(function(it) {\n if (it.get('id') === epic.get('id')) {\n return epic;\n }\n return it;\n });\n };\n\n EpicsService.prototype.updateEpicStatus = function(epic, statusId) {\n var data;\n data = {\n status: statusId,\n version: epic.get('version')\n };\n return this.resources.epics.patch(epic.get('id'), data).then(this.replaceEpic.bind(this));\n };\n\n EpicsService.prototype.updateEpicAssignedTo = function(epic, userId) {\n var data;\n data = {\n assigned_to: userId,\n version: epic.get('version')\n };\n return this.resources.epics.patch(epic.get('id'), data).then(this.replaceEpic.bind(this));\n };\n\n return EpicsService;\n\n })();\n\n angular.module('taigaEpics').service('tgEpicsService', EpicsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories-controller.coffee\n */\n\n(function() {\n var RelatedUserStoriesController, module;\n\n module = angular.module(\"taigaEpics\");\n\n RelatedUserStoriesController = (function() {\n RelatedUserStoriesController.$inject = [\"tgProjectService\", \"tgEpicsService\"];\n\n function RelatedUserStoriesController(projectService, epicsService) {\n this.projectService = projectService;\n this.epicsService = epicsService;\n this.sectionName = \"Epics\";\n this.showCreateRelatedUserstoriesLightbox = false;\n }\n\n RelatedUserStoriesController.prototype.showRelatedUserStoriesSection = function() {\n var ref;\n return this.projectService.hasPermission(\"view_epics\") || ((ref = this.userstories) != null ? ref.length : void 0) > 0;\n };\n\n RelatedUserStoriesController.prototype.userCanSort = function() {\n return this.projectService.hasPermission(\"modify_epic\");\n };\n\n RelatedUserStoriesController.prototype.loadRelatedUserstories = function() {\n return this.epicsService.listRelatedUserStories(this.epic).then((function(_this) {\n return function(userstories) {\n return _this.userstories = userstories;\n };\n })(this));\n };\n\n RelatedUserStoriesController.prototype.reorderRelatedUserstory = function(us, newIndex) {\n return this.epicsService.reorderRelatedUserstory(this.epic, this.userstories, us, newIndex).then((function(_this) {\n return function(userstories) {\n return _this.userstories = userstories;\n };\n })(this));\n };\n\n return RelatedUserStoriesController;\n\n })();\n\n module.controller(\"RelatedUserStoriesCtrl\", RelatedUserStoriesController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories-create/related-userstories-create.controller.coffee\n */\n\n(function() {\n var RelatedUserstoriesCreateController, module;\n\n module = angular.module(\"taigaEpics\");\n\n RelatedUserstoriesCreateController = (function() {\n RelatedUserstoriesCreateController.$inject = [\"tgCurrentUserService\", \"tgResources\", \"$tgConfirm\", \"$tgAnalytics\"];\n\n function RelatedUserstoriesCreateController(currentUserService, rs, confirm, analytics) {\n this.currentUserService = currentUserService;\n this.rs = rs;\n this.confirm = confirm;\n this.analytics = analytics;\n this.projects = null;\n this.projectUserstories = Immutable.List();\n this.loading = false;\n }\n\n RelatedUserstoriesCreateController.prototype.loadProjects = function() {\n if (this.projects === null) {\n return this.projects = this.currentUserService.projects.get(\"unblocked\");\n }\n };\n\n RelatedUserstoriesCreateController.prototype.filterUss = function(selectedProjectId, filterText) {\n var promise;\n promise = this.rs.userstories.listInAllProjects({\n project: selectedProjectId,\n q: filterText\n }, true).then((function(_this) {\n return function(data) {\n var excludeIds, filteredData;\n excludeIds = _this.epicUserstories.map(function(us) {\n return us.get('id');\n });\n filteredData = data.filter(function(us) {\n return excludeIds.indexOf(us.get('id')) === -1;\n });\n return _this.projectUserstories = filteredData;\n };\n })(this));\n return promise;\n };\n\n RelatedUserstoriesCreateController.prototype.saveRelatedUserStory = function(selectedUserstoryId, onSavedRelatedUserstory) {\n var epicId, onError, onSuccess;\n if (!this.validateExistingUserstoryForm()) {\n return;\n }\n this.loading = true;\n onError = (function(_this) {\n return function(data) {\n _this.loading = false;\n _this.confirm.notify(\"error\");\n return _this.setExistingUserstoryFormErrors(data);\n };\n })(this);\n onSuccess = (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"epic related user story\", \"create\", \"create related user story on epic\", 1);\n _this.loading = false;\n if (onSavedRelatedUserstory) {\n onSavedRelatedUserstory();\n }\n return _this.loadRelatedUserstories();\n };\n })(this);\n epicId = this.epic.get('id');\n return this.rs.epics.addRelatedUserstory(epicId, selectedUserstoryId).then(onSuccess, onError);\n };\n\n RelatedUserstoriesCreateController.prototype.bulkCreateRelatedUserStories = function(selectedProjectId, userstoriesText, onCreatedRelatedUserstory) {\n var epicId, onError, onSuccess;\n if (!this.validateNewUserstoryForm()) {\n return;\n }\n this.loading = true;\n onError = (function(_this) {\n return function(data) {\n _this.loading = false;\n _this.confirm.notify(\"error\");\n return _this.setNewUserstoryFormErrors(data);\n };\n })(this);\n onSuccess = (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"epic related user story\", \"create\", \"create related user story on epic\", 1);\n _this.loading = false;\n if (onCreatedRelatedUserstory) {\n onCreatedRelatedUserstory();\n }\n return _this.loadRelatedUserstories();\n };\n })(this);\n epicId = this.epic.get('id');\n return this.rs.epics.bulkCreateRelatedUserStories(epicId, selectedProjectId, userstoriesText).then(onSuccess, onError);\n };\n\n return RelatedUserstoriesCreateController;\n\n })();\n\n module.controller(\"RelatedUserstoriesCreateCtrl\", RelatedUserstoriesCreateController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories-create/related-userstories-create.directive.coffee\n */\n\n(function() {\n var RelatedUserstoriesCreateDirective, debounceLeading, module;\n\n module = angular.module('taigaEpics');\n\n debounceLeading = this.taiga.debounceLeading;\n\n RelatedUserstoriesCreateDirective = function(lightboxService1) {\n var link;\n this.lightboxService = lightboxService1;\n link = function(scope, el, attrs, ctrl) {\n var existingUserstoryForm, newUserstoryForm;\n newUserstoryForm = el.find(\".new-user-story-form\").checksley();\n existingUserstoryForm = el.find(\".existing-user-story-form\").checksley();\n ctrl.validateNewUserstoryForm = (function(_this) {\n return function() {\n return newUserstoryForm.validate();\n };\n })(this);\n ctrl.setNewUserstoryFormErrors = (function(_this) {\n return function(errors) {\n return newUserstoryForm.setErrors(errors);\n };\n })(this);\n ctrl.validateExistingUserstoryForm = (function(_this) {\n return function() {\n return existingUserstoryForm.validate();\n };\n })(this);\n ctrl.setExistingUserstoryFormErrors = (function(_this) {\n return function(errors) {\n return existingUserstoryForm.setErrors(errors);\n };\n })(this);\n scope.showLightbox = function(selectedProjectId) {\n ctrl.loadProjects();\n return scope.selectProject(selectedProjectId).then((function(_this) {\n return function() {\n return lightboxService.open(el.find(\".lightbox-create-related-user-stories\"));\n };\n })(this));\n };\n scope.closeLightbox = function() {\n scope.selectedUserstory = null;\n scope.searchUserstory = \"\";\n scope.relatedUserstoriesText = \"\";\n return lightboxService.close(el.find(\".lightbox-create-related-user-stories\"));\n };\n scope.$watch('vm.project', function(project) {\n if (project != null) {\n return scope.selectedProject = project.get('id');\n }\n });\n scope.selectProject = function(selectedProjectId) {\n scope.selectedUserstory = null;\n scope.searchUserstory = \"\";\n return ctrl.filterUss(selectedProjectId, scope.searchUserstory);\n };\n return scope.onUpdateSearchUserstory = debounceLeading(300, function() {\n scope.selectedUserstory = null;\n return ctrl.filterUss(scope.selectedProject, scope.searchUserstory);\n });\n };\n return {\n link: link,\n templateUrl: \"epics/related-userstories/related-userstories-create/related-userstories-create.html\",\n controller: \"RelatedUserstoriesCreateCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n showCreateRelatedUserstoriesLightbox: \"=\",\n project: \"=\",\n epic: \"=\",\n epicUserstories: \"=\",\n loadRelatedUserstories: \"&\"\n }\n };\n };\n\n RelatedUserstoriesCreateDirective.$inject = [\"lightboxService\"];\n\n module.directive(\"tgRelatedUserstoriesCreate\", RelatedUserstoriesCreateDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories-sortable/related-userstories-sortable.directive.coffee\n */\n\n(function() {\n var RelatedUserstoriesSortableDirective, module;\n\n module = angular.module('taigaEpics');\n\n RelatedUserstoriesSortableDirective = function($parse, projectService) {\n var link;\n link = function(scope, el, attrs) {\n var callback, drake, scroll;\n if (!projectService.hasPermission(\"modify_epic\")) {\n return;\n }\n callback = $parse(attrs.tgRelatedUserstoriesSortable);\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).is('tg-related-userstory-row');\n }\n });\n drake.on('dragend', function(item) {\n var itemEl, newIndex, us;\n itemEl = $(item);\n us = itemEl.scope().us;\n newIndex = itemEl.index();\n return scope.$apply(function() {\n return callback(scope, {\n us: us,\n newIndex: newIndex\n });\n });\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n RelatedUserstoriesSortableDirective.$inject = [\"$parse\", \"tgProjectService\"];\n\n module.directive(\"tgRelatedUserstoriesSortable\", RelatedUserstoriesSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories.directive.coffee\n */\n\n(function() {\n var RelatedUserStoriesDirective, module;\n\n module = angular.module('taigaEpics');\n\n RelatedUserStoriesDirective = function() {\n return {\n templateUrl: \"epics/related-userstories/related-userstories.html\",\n controller: \"RelatedUserStoriesCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n userstories: '=',\n project: '=',\n epic: '='\n }\n };\n };\n\n RelatedUserStoriesDirective.$inject = [];\n\n module.directive(\"tgRelatedUserstories\", RelatedUserStoriesDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstory-row/related-userstory-row.controller.coffee\n */\n\n(function() {\n var RelatedUserstoryRowController, module;\n\n module = angular.module(\"taigaEpics\");\n\n RelatedUserstoryRowController = (function() {\n RelatedUserstoryRowController.$inject = [\"tgAvatarService\", \"$translate\", \"$tgConfirm\", \"tgResources\"];\n\n function RelatedUserstoryRowController(avatarService, translate, confirm, rs) {\n this.avatarService = avatarService;\n this.translate = translate;\n this.confirm = confirm;\n this.rs = rs;\n }\n\n RelatedUserstoryRowController.prototype.setAvatarData = function() {\n var member;\n member = this.userstory.get('assigned_to_extra_info');\n return this.avatar = this.avatarService.getAvatar(member);\n };\n\n RelatedUserstoryRowController.prototype.getAssignedToFullNameDisplay = function() {\n if (this.userstory.get('assigned_to')) {\n return this.userstory.getIn(['assigned_to_extra_info', 'full_name_display']);\n }\n return this.translate.instant(\"COMMON.ASSIGNED_TO.NOT_ASSIGNED\");\n };\n\n RelatedUserstoryRowController.prototype.onDeleteRelatedUserstory = function() {\n var message, title;\n title = this.translate.instant(\"LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.TITLE\");\n message = this.translate.instant(\"LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.MESSAGE\", {\n epicSubject: this.epic.get('subject')\n });\n return this.confirm.ask(title, null, message).then((function(_this) {\n return function(askResponse) {\n var epicId, onError, onSuccess, userstoryId;\n onError = function() {\n message = _this.translate.instant('EPIC.ERROR_UNLINK_RELATED_USERSTORY', {\n errorMessage: message\n });\n _this.confirm.notify(\"error\", null, message);\n return askResponse.finish(false);\n };\n onSuccess = function() {\n _this.loadRelatedUserstories();\n return askResponse.finish();\n };\n epicId = _this.epic.get('id');\n userstoryId = _this.userstory.get('id');\n return _this.rs.epics.deleteRelatedUserstory(epicId, userstoryId).then(onSuccess, onError);\n };\n })(this));\n };\n\n return RelatedUserstoryRowController;\n\n })();\n\n module.controller(\"RelatedUserstoryRowCtrl\", RelatedUserstoryRowController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstory-row/related-userstory-row.directive.coffee\n */\n\n(function() {\n var RelatedUserstoryRowDirective, module;\n\n module = angular.module('taigaEpics');\n\n RelatedUserstoryRowDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.setAvatarData();\n };\n return {\n link: link,\n templateUrl: \"epics/related-userstories/related-userstory-row/related-userstory-row.html\",\n controller: \"RelatedUserstoryRowCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n userstory: '=',\n epic: '=',\n project: '=',\n loadRelatedUserstories: \"&\"\n }\n };\n };\n\n RelatedUserstoryRowDirective.$inject = [];\n\n module.directive(\"tgRelatedUserstoryRow\", RelatedUserstoryRowDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: external-apps/external-app.controller.coffee\n */\n\n(function() {\n var ExternalAppController, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n ExternalAppController = (function(superClass) {\n extend(ExternalAppController, superClass);\n\n ExternalAppController.$inject = [\"$routeParams\", \"tgExternalAppsService\", \"$window\", \"tgCurrentUserService\", \"$location\", \"$tgNavUrls\", \"tgXhrErrorService\", \"tgLoader\"];\n\n function ExternalAppController(routeParams, externalAppsService, window, currentUserService, location, navUrls, xhrError, loader) {\n var loginUrl, nextUrl;\n this.routeParams = routeParams;\n this.externalAppsService = externalAppsService;\n this.window = window;\n this.currentUserService = currentUserService;\n this.location = location;\n this.navUrls = navUrls;\n this.xhrError = xhrError;\n this.loader = loader;\n this.createApplicationToken = bind(this.createApplicationToken, this);\n this._getApplicationToken = bind(this._getApplicationToken, this);\n this._redirect = bind(this._redirect, this);\n this.loader.start(false);\n this._applicationId = this.routeParams.application;\n this._state = this.routeParams.state;\n this._getApplicationToken();\n this._user = this.currentUserService.getUser();\n this._application = null;\n nextUrl = encodeURIComponent(this.location.url());\n loginUrl = this.navUrls.resolve(\"login\");\n this.loginWithAnotherUserUrl = loginUrl + \"?next=\" + nextUrl;\n taiga.defineImmutableProperty(this, \"user\", (function(_this) {\n return function() {\n return _this._user;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"application\", (function(_this) {\n return function() {\n return _this._application;\n };\n })(this));\n }\n\n ExternalAppController.prototype._redirect = function(applicationToken) {\n var nextUrl;\n nextUrl = applicationToken.get(\"next_url\");\n return this.window.open(nextUrl, \"_self\");\n };\n\n ExternalAppController.prototype._getApplicationToken = function() {\n return this.externalAppsService.getApplicationToken(this._applicationId, this._state).then((function(_this) {\n return function(data) {\n _this._application = data.get(\"application\");\n if (data.get(\"auth_code\")) {\n return _this._redirect(data);\n } else {\n return _this.loader.pageLoaded();\n }\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n _this.loader.pageLoaded();\n return _this.xhrError.response(xhr);\n };\n })(this));\n };\n\n ExternalAppController.prototype.cancel = function() {\n return this.window.history.back();\n };\n\n ExternalAppController.prototype.createApplicationToken = function() {\n return this.externalAppsService.authorizeApplicationToken(this._applicationId, this._state).then((function(_this) {\n return function(data) {\n return _this._redirect(data);\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n return _this.xhrError.response(xhr);\n };\n })(this));\n };\n\n return ExternalAppController;\n\n })(taiga.Controller);\n\n angular.module(\"taigaExternalApps\").controller(\"ExternalApp\", ExternalAppController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: external-apps/external-app.service.coffee\n */\n\n(function() {\n var ExternalAppsService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n ExternalAppsService = (function(superClass) {\n extend(ExternalAppsService, superClass);\n\n ExternalAppsService.$inject = [\"tgResources\"];\n\n function ExternalAppsService(rs) {\n this.rs = rs;\n }\n\n ExternalAppsService.prototype.getApplicationToken = function(applicationId, state) {\n return this.rs.externalapps.getApplicationToken(applicationId, state);\n };\n\n ExternalAppsService.prototype.authorizeApplicationToken = function(applicationId, state) {\n return this.rs.externalapps.authorizeApplicationToken(applicationId, state);\n };\n\n return ExternalAppsService;\n\n })(taiga.Service);\n\n angular.module(\"taigaExternalApps\").service(\"tgExternalAppsService\", ExternalAppsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: feedback/feedback.service.coffee\n */\n\n(function() {\n var FeedbackService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n FeedbackService = (function(superClass) {\n extend(FeedbackService, superClass);\n\n FeedbackService.$inject = [\"tgLightboxFactory\"];\n\n function FeedbackService(lightboxFactory) {\n this.lightboxFactory = lightboxFactory;\n }\n\n FeedbackService.prototype.sendFeedback = function() {\n return this.lightboxFactory.create(\"tg-lb-feedback\", {\n \"class\": \"lightbox lightbox-feedback lightbox-generic-form\"\n });\n };\n\n return FeedbackService;\n\n })(taiga.Service);\n\n angular.module(\"taigaFeedback\").service(\"tgFeedbackService\", FeedbackService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/activity/activity.service.coffee\n */\n\n(function() {\n var ActivityService, taiga;\n\n taiga = this.taiga;\n\n ActivityService = (function() {\n ActivityService.$inject = ['tgResources', 'tgXhrErrorService'];\n\n function ActivityService(rs, xhrError) {\n this.rs = rs;\n this.xhrError = xhrError;\n this._contentType = null;\n this._objectId = null;\n this.clear();\n }\n\n ActivityService.prototype.clear = function() {\n this.page = 1;\n this.loadingEntries = false;\n this.disablePagination = false;\n this.entries = Immutable.List();\n return this.count = null;\n };\n\n ActivityService.prototype.fetchEntries = function(reset) {\n if (reset == null) {\n reset = false;\n }\n if (reset) {\n this.page = 1;\n }\n this.loadingEntries = true;\n this.disablePagination = true;\n return this.rs.history.getHistory('activity', this._contentType, this._objectId, this.page).then((function(_this) {\n return function(result) {\n if (reset) {\n _this.clear();\n _this.entries = result.list;\n } else {\n _this.entries = _this.entries.concat(result.list);\n }\n _this.loadingEntries = false;\n _this.disablePagination = !result.headers('x-pagination-next');\n _this.count = result.headers('x-pagination-count');\n return _this.entries;\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n return _this.xhrError.response(_this.entries);\n };\n })(this));\n };\n\n ActivityService.prototype.nextPage = function(historyType) {\n if (historyType == null) {\n historyType = 'comment';\n }\n this.page++;\n return this.fetchEntries();\n };\n\n ActivityService.prototype.init = function(contentType, objectId) {\n this._contentType = contentType;\n this._objectId = objectId;\n return this.clear();\n };\n\n return ActivityService;\n\n })();\n\n angular.module('taigaHistory').service('tgActivityService', ActivityService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/comments/comment.controller.coffee\n */\n\n(function() {\n var CommentController, module;\n\n module = angular.module(\"taigaHistory\");\n\n CommentController = (function() {\n CommentController.$inject = [\"tgCurrentUserService\", \"tgCheckPermissionsService\", \"tgLightboxFactory\"];\n\n function CommentController(currentUserService, permissionService, lightboxFactory) {\n this.currentUserService = currentUserService;\n this.permissionService = permissionService;\n this.lightboxFactory = lightboxFactory;\n this.hiddenDeletedComment = true;\n }\n\n CommentController.prototype.showDeletedComment = function() {\n return this.hiddenDeletedComment = false;\n };\n\n CommentController.prototype.hideDeletedComment = function() {\n return this.hiddenDeletedComment = true;\n };\n\n CommentController.prototype.checkCancelComment = function(event) {\n if (event.keyCode === 27) {\n return this.onEditMode({\n commentId: this.comment.id\n });\n }\n };\n\n CommentController.prototype.canEditDeleteComment = function() {\n if (this.currentUserService.getUser()) {\n this.user = this.currentUserService.getUser();\n return this.user.get('id') === this.comment.user.pk || this.permissionService.check('modify_project');\n }\n };\n\n CommentController.prototype.saveComment = function(text, cb) {\n return this.onEditComment({\n commentId: this.comment.id,\n commentData: text,\n callback: cb\n });\n };\n\n CommentController.prototype.displayCommentHistory = function() {\n return this.lightboxFactory.create('tg-lb-display-historic', {\n \"class\": \"lightbox lightbox-display-historic\",\n \"comment\": \"comment\",\n \"name\": \"name\",\n \"object\": \"object\"\n }, {\n \"comment\": this.comment,\n \"name\": this.name,\n \"object\": this.object\n });\n };\n\n return CommentController;\n\n })();\n\n module.controller(\"CommentCtrl\", CommentController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/comments/comment.directive.coffee\n */\n\n(function() {\n var CommentDirective, module;\n\n module = angular.module('taigaHistory');\n\n CommentDirective = function() {\n return {\n scope: {\n name: \"@\",\n object: \"@\",\n comment: \"<\",\n type: \"<\",\n loading: \"<\",\n editing: \"<\",\n deleting: \"<\",\n objectId: \"<\",\n editMode: \"<\",\n onEditMode: \"&\",\n onDeleteComment: \"&\",\n onRestoreDeletedComment: \"&\",\n onEditComment: \"&\"\n },\n templateUrl: \"history/comments/comment.html\",\n bindToController: true,\n controller: 'CommentCtrl',\n controllerAs: \"vm\"\n };\n };\n\n module.directive(\"tgComment\", CommentDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/comments/comments.controller.coffee\n */\n\n(function() {\n var CommentsController, module;\n\n module = angular.module(\"taigaHistory\");\n\n CommentsController = (function() {\n CommentsController.$inject = [];\n\n function CommentsController() {}\n\n CommentsController.prototype.initializePermissions = function() {\n return this.canAddCommentPermission = 'comment_' + this.name;\n };\n\n return CommentsController;\n\n })();\n\n module.controller(\"CommentsCtrl\", CommentsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/comments/comments.directive.coffee\n */\n\n(function() {\n var CommentsDirective, module;\n\n module = angular.module('taigaHistory');\n\n CommentsDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.initializePermissions();\n };\n return {\n scope: {\n type: \"<\",\n name: \"@\",\n object: \"@\",\n comments: \"<\",\n onEditMode: \"&\",\n onDeleteComment: \"&\",\n onRestoreDeletedComment: \"&\",\n onAddComment: \"&\",\n onEditComment: \"&\",\n editMode: \"<\",\n loading: \"<\",\n deleting: \"<\",\n editing: \"<\",\n projectId: \"=\"\n },\n templateUrl: \"history/comments/comments.html\",\n bindToController: true,\n controller: 'CommentsCtrl',\n controllerAs: \"vm\",\n link: link\n };\n };\n\n module.directive(\"tgComments\", CommentsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history-lightbox/comment-history-lightbox.controller.coffee\n */\n\n(function() {\n var LightboxDisplayHistoricController, module;\n\n module = angular.module(\"taigaHistory\");\n\n LightboxDisplayHistoricController = (function() {\n LightboxDisplayHistoricController.$inject = [\"$tgResources\"];\n\n function LightboxDisplayHistoricController(rs) {\n this.rs = rs;\n }\n\n LightboxDisplayHistoricController.prototype._loadHistoric = function() {\n var activityId, objectId, type;\n type = this.name;\n objectId = this.object;\n activityId = this.comment.id;\n return this.rs.history.getCommentHistory(type, objectId, activityId).then((function(_this) {\n return function(data) {\n return _this.commentHistoryEntries = data;\n };\n })(this));\n };\n\n return LightboxDisplayHistoricController;\n\n })();\n\n module.controller(\"LightboxDisplayHistoricCtrl\", LightboxDisplayHistoricController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history-lightbox/comment-history-lightbox.directive.coffee\n */\n\n(function() {\n var LightboxDisplayHistoricDirective;\n\n LightboxDisplayHistoricDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n ctrl._loadHistoric();\n return lightboxService.open(el);\n };\n return {\n scope: {},\n bindToController: {\n name: '=',\n object: '=',\n comment: '='\n },\n templateUrl: \"history/history-lightbox/comment-history-lightbox.html\",\n controller: \"LightboxDisplayHistoricCtrl\",\n controllerAs: \"vm\",\n link: link\n };\n };\n\n LightboxDisplayHistoricDirective.$inject = [\"lightboxService\"];\n\n angular.module('taigaHistory').directive(\"tgLbDisplayHistoric\", LightboxDisplayHistoricDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history-lightbox/history-entry.directive.coffee\n */\n\n(function() {\n var HistoryEntryDirective;\n\n HistoryEntryDirective = function() {\n return {\n scope: {\n entry: \"<\"\n },\n templateUrl: \"history/history-lightbox/history-entry.html\"\n };\n };\n\n angular.module('taigaHistory').directive(\"tgHistoryEntry\", HistoryEntryDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history-tabs/history-tabs.directive.coffee\n */\n\n(function() {\n var HistoryTabsDirective, module;\n\n module = angular.module('taigaHistory');\n\n HistoryTabsDirective = function() {\n return {\n templateUrl: \"history/history-tabs/history-tabs.html\",\n scope: {\n showCommentTab: \"&\",\n showActivityTab: \"&\",\n onActiveComments: \"&\",\n onActiveActivities: \"&\",\n onOrderComments: \"&\",\n activeTab: \"<\",\n commentsNum: \"<\",\n activitiesNum: \"<\",\n onReverse: \"<\"\n }\n };\n };\n\n module.directive(\"tgHistoryTabs\", HistoryTabsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history.controller.coffee\n */\n\n(function() {\n var HistorySectionController, module;\n\n module = angular.module(\"taigaHistory\");\n\n HistorySectionController = (function() {\n HistorySectionController.$inject = [\"$tgResources\", \"$tgRepo\", \"$tgStorage\", \"tgProjectService\", \"tgActivityService\"];\n\n function HistorySectionController(rs, repo, storage, projectService, activityService) {\n this.rs = rs;\n this.repo = repo;\n this.storage = storage;\n this.projectService = projectService;\n this.activityService = activityService;\n this.editing = null;\n this.deleting = null;\n this.editMode = {};\n this.viewComments = true;\n this.reverse = this.storage.get(\"orderComments\");\n taiga.defineImmutableProperty(this, 'disabledActivityPagination', (function(_this) {\n return function() {\n return _this.activityService.disablePagination;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'loadingActivity', (function(_this) {\n return function() {\n return _this.activityService.loading;\n };\n })(this));\n }\n\n HistorySectionController.prototype._loadHistory = function() {\n this._loadComments();\n return this._loadActivity();\n };\n\n HistorySectionController.prototype._loadActivity = function() {\n this.activityService.init(this.name, this.id);\n return this.activityService.fetchEntries().then((function(_this) {\n return function(response) {\n _this.activitiesNum = _this.activityService.count;\n return _this.activities = response.toJS();\n };\n })(this));\n };\n\n HistorySectionController.prototype._loadComments = function() {\n return this.rs.history.get(this.name, this.id).then((function(_this) {\n return function(comments) {\n _this.comments = _.filter(comments, function(item) {\n return item.comment !== \"\";\n });\n if (_this.reverse) {\n _this.comments - _.reverse(_this.comments);\n }\n return _this.commentsNum = _this.comments.length;\n };\n })(this));\n };\n\n HistorySectionController.prototype.nextActivityPage = function() {\n return this.activityService.nextPage().then((function(_this) {\n return function(response) {\n return _this.activities = response.toJS();\n };\n })(this));\n };\n\n HistorySectionController.prototype.showHistorySection = function() {\n return this.showCommentTab() || this.showActivityTab();\n };\n\n HistorySectionController.prototype.showCommentTab = function() {\n return this.commentsNum > 0 || this.projectService.hasPermission(\"comment_\" + this.name);\n };\n\n HistorySectionController.prototype.showActivityTab = function() {\n return this.activitiesNum > 0;\n };\n\n HistorySectionController.prototype.toggleEditMode = function(commentId) {\n return this.editMode[commentId] = !this.editMode[commentId];\n };\n\n HistorySectionController.prototype.onActiveHistoryTab = function(active) {\n return this.viewComments = active;\n };\n\n HistorySectionController.prototype.deleteComment = function(commentId) {\n var activityId, objectId, type;\n type = this.name;\n objectId = this.id;\n activityId = commentId;\n this.deleting = commentId;\n return this.rs.history.deleteComment(type, objectId, activityId).then((function(_this) {\n return function() {\n _this._loadComments();\n return _this.deleting = null;\n };\n })(this));\n };\n\n HistorySectionController.prototype.editComment = function(commentId, comment) {\n var activityId, objectId, type;\n type = this.name;\n objectId = this.id;\n activityId = commentId;\n this.editing = commentId;\n return this.rs.history.editComment(type, objectId, activityId, comment).then((function(_this) {\n return function() {\n _this._loadComments();\n _this.toggleEditMode(commentId);\n return _this.editing = null;\n };\n })(this));\n };\n\n HistorySectionController.prototype.restoreDeletedComment = function(commentId) {\n var activityId, objectId, type;\n type = this.name;\n objectId = this.id;\n activityId = commentId;\n this.editing = commentId;\n return this.rs.history.undeleteComment(type, objectId, activityId).then((function(_this) {\n return function() {\n _this._loadComments();\n return _this.editing = null;\n };\n })(this));\n };\n\n HistorySectionController.prototype.addComment = function() {\n this.editMode = {};\n this.editing = null;\n return this._loadComments();\n };\n\n HistorySectionController.prototype.onOrderComments = function() {\n this.reverse = !this.reverse;\n this.storage.set(\"orderComments\", this.reverse);\n return this._loadComments();\n };\n\n return HistorySectionController;\n\n })();\n\n module.controller(\"HistorySection\", HistorySectionController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history.directive.coffee\n */\n\n(function() {\n var HistorySectionDirective, bindOnce, module;\n\n module = angular.module('taigaHistory');\n\n bindOnce = this.taiga.bindOnce;\n\n HistorySectionDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {\n scope.$on(\"object:updated\", function() {\n return ctrl._loadActivity();\n });\n return scope.$watch('vm.id', function(value) {\n return ctrl._loadHistory();\n });\n };\n return {\n link: link,\n templateUrl: \"history/history.html\",\n controller: \"HistorySection\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n type: \"=\",\n name: \"@\",\n id: \"=\",\n projectId: \"=\"\n }\n };\n };\n\n HistorySectionDirective.$inject = [];\n\n module.directive(\"tgHistorySection\", HistorySectionDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history/history-diff.controller.coffee\n */\n\n(function() {\n var ActivitiesDiffController, module;\n\n module = angular.module(\"taigaHistory\");\n\n ActivitiesDiffController = (function() {\n ActivitiesDiffController.$inject = [];\n\n function ActivitiesDiffController() {}\n\n ActivitiesDiffController.prototype.diffTags = function() {\n if (this.type === 'tags') {\n this.diffRemoveTags = _.difference(this.diff[0], this.diff[1]).toString();\n return this.diffAddTags = _.difference(this.diff[1], this.diff[0]).toString();\n }\n };\n\n return ActivitiesDiffController;\n\n })();\n\n module.controller(\"ActivitiesDiffCtrl\", ActivitiesDiffController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history/history-diff.directive.coffee\n */\n\n(function() {\n var HistoryDiffDirective, module;\n\n module = angular.module('taigaHistory');\n\n HistoryDiffDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.diffTags();\n };\n return {\n scope: {\n type: \"<\",\n diff: \"<\"\n },\n templateUrl: \"history/history/history-diff.html\",\n controller: \"ActivitiesDiffCtrl\",\n controllerAs: 'vm',\n bindToController: true,\n link: link\n };\n };\n\n module.directive(\"tgHistoryDiff\", HistoryDiffDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history/history.directive.coffee\n */\n\n(function() {\n var HistoryDirective, module;\n\n module = angular.module('taigaHistory');\n\n HistoryDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n scope: {\n activities: \"<\"\n },\n templateUrl: \"history/history/history.html\",\n link: link\n };\n };\n\n module.directive(\"tgHistory\", HistoryDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/duties/duty.directive.coffee\n */\n\n(function() {\n var DutyDirective;\n\n DutyDirective = function(navurls, $translate) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n scope.vm = {};\n scope.vm.duty = scope.duty;\n scope.vm.type = scope.type;\n return scope.vm.getDutyType = function() {\n if (scope.vm.duty) {\n if (scope.vm.duty.get('_name') === \"epics\") {\n return $translate.instant(\"COMMON.EPIC\");\n }\n if (scope.vm.duty.get('_name') === \"userstories\") {\n return $translate.instant(\"COMMON.USER_STORY\");\n }\n if (scope.vm.duty.get('_name') === \"tasks\") {\n return $translate.instant(\"COMMON.TASK\");\n }\n if (scope.vm.duty.get('_name') === \"issues\") {\n return $translate.instant(\"COMMON.ISSUE\");\n }\n }\n };\n };\n return {\n templateUrl: \"home/duties/duty.html\",\n scope: {\n \"duty\": \"=tgDuty\",\n \"type\": \"@\"\n },\n link: link\n };\n };\n\n DutyDirective.$inject = [\"$tgNavUrls\", \"$translate\"];\n\n angular.module(\"taigaHome\").directive(\"tgDuty\", DutyDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/home.controller.coffee\n */\n\n(function() {\n var HomeController;\n\n HomeController = (function() {\n HomeController.$inject = [\"tgCurrentUserService\", \"$location\", \"$tgNavUrls\"];\n\n function HomeController(currentUserService, location, navUrls) {\n this.currentUserService = currentUserService;\n this.location = location;\n this.navUrls = navUrls;\n if (!this.currentUserService.getUser()) {\n this.location.path(this.navUrls.resolve(\"discover\"));\n }\n }\n\n return HomeController;\n\n })();\n\n angular.module(\"taigaHome\").controller(\"Home\", HomeController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/home.service.coffee\n */\n\n(function() {\n var HomeService, groupBy,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n groupBy = this.taiga.groupBy;\n\n HomeService = (function(superClass) {\n extend(HomeService, superClass);\n\n HomeService.$inject = [\"$tgNavUrls\", \"tgResources\", \"tgProjectsService\"];\n\n function HomeService(navurls, rs, projectsService) {\n this.navurls = navurls;\n this.rs = rs;\n this.projectsService = projectsService;\n }\n\n HomeService.prototype._attachProjectInfoToWorkInProgress = function(workInProgress, projectsById) {\n var _attachProjectInfoToDuty, _duties, _getValidDutiesAndAttachProjectInfo, assignedTo, watching;\n _attachProjectInfoToDuty = (function(_this) {\n return function(duty, objType) {\n var ctx, project, url;\n project = projectsById.get(String(duty.get('project')));\n ctx = {\n project: project.get('slug'),\n ref: duty.get('ref')\n };\n url = _this.navurls.resolve(\"project-\" + objType + \"-detail\", ctx);\n duty = duty.set('url', url);\n duty = duty.set('project', project);\n duty = duty.set(\"_name\", objType);\n return duty;\n };\n })(this);\n _getValidDutiesAndAttachProjectInfo = function(duties, dutyType) {\n duties = duties.filter(function(duty) {\n return projectsById.get(String(duty.get('project')));\n });\n duties = duties.map(function(duty) {\n return _attachProjectInfoToDuty(duty, dutyType);\n });\n return duties;\n };\n assignedTo = workInProgress.get(\"assignedTo\");\n if (assignedTo.get(\"epics\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(assignedTo.get(\"epics\"), \"epics\");\n assignedTo = assignedTo.set(\"epics\", _duties);\n }\n if (assignedTo.get(\"userStories\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(assignedTo.get(\"userStories\"), \"userstories\");\n assignedTo = assignedTo.set(\"userStories\", _duties);\n }\n if (assignedTo.get(\"tasks\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(assignedTo.get(\"tasks\"), \"tasks\");\n assignedTo = assignedTo.set(\"tasks\", _duties);\n }\n if (assignedTo.get(\"issues\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(assignedTo.get(\"issues\"), \"issues\");\n assignedTo = assignedTo.set(\"issues\", _duties);\n }\n watching = workInProgress.get(\"watching\");\n if (watching.get(\"epics\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(watching.get(\"epics\"), \"epics\");\n watching = watching.set(\"epics\", _duties);\n }\n if (watching.get(\"userStories\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(watching.get(\"userStories\"), \"userstories\");\n watching = watching.set(\"userStories\", _duties);\n }\n if (watching.get(\"tasks\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(watching.get(\"tasks\"), \"tasks\");\n watching = watching.set(\"tasks\", _duties);\n }\n if (watching.get(\"issues\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(watching.get(\"issues\"), \"issues\");\n watching = watching.set(\"issues\", _duties);\n }\n workInProgress = workInProgress.set(\"assignedTo\", assignedTo);\n return workInProgress = workInProgress.set(\"watching\", watching);\n };\n\n HomeService.prototype.getWorkInProgress = function(userId) {\n var assignedEpicsPromise, assignedIssuesPromise, assignedTasksPromise, assignedTo, assignedUserStoriesPromise, params_epics, params_issues, params_tasks, params_uss, projectsById, projectsPromise, watching, watchingEpicsPromise, watchingIssuesPromise, watchingTasksPromise, watchingUserStoriesPromise, workInProgress;\n projectsById = Immutable.Map();\n projectsPromise = this.projectsService.getProjectsByUserId(userId).then(function(projects) {\n return projectsById = Immutable.fromJS(groupBy(projects.toJS(), function(p) {\n return p.id;\n }));\n });\n assignedTo = Immutable.Map();\n params_epics = {\n status__is_closed: false,\n assigned_to: userId\n };\n params_uss = {\n is_closed: false,\n assigned_users: userId\n };\n params_tasks = {\n status__is_closed: false,\n assigned_to: userId\n };\n params_issues = {\n status__is_closed: false,\n assigned_to: userId\n };\n assignedEpicsPromise = this.rs.epics.listInAllProjects(params_epics).then(function(epics) {\n return assignedTo = assignedTo.set(\"epics\", epics);\n });\n assignedUserStoriesPromise = this.rs.userstories.listInAllProjects(params_uss).then(function(userstories) {\n return assignedTo = assignedTo.set(\"userStories\", userstories);\n });\n assignedTasksPromise = this.rs.tasks.listInAllProjects(params_tasks).then(function(tasks) {\n return assignedTo = assignedTo.set(\"tasks\", tasks);\n });\n assignedIssuesPromise = this.rs.issues.listInAllProjects(params_issues).then(function(issues) {\n return assignedTo = assignedTo.set(\"issues\", issues);\n });\n params_epics = {\n status__is_closed: false,\n watchers: userId\n };\n params_uss = {\n is_closed: false,\n watchers: userId\n };\n params_tasks = {\n status__is_closed: false,\n watchers: userId\n };\n params_issues = {\n status__is_closed: false,\n watchers: userId\n };\n watching = Immutable.Map();\n watchingEpicsPromise = this.rs.epics.listInAllProjects(params_epics).then(function(epics) {\n return watching = watching.set(\"epics\", epics);\n });\n watchingUserStoriesPromise = this.rs.userstories.listInAllProjects(params_uss).then(function(userstories) {\n return watching = watching.set(\"userStories\", userstories);\n });\n watchingTasksPromise = this.rs.tasks.listInAllProjects(params_tasks).then(function(tasks) {\n return watching = watching.set(\"tasks\", tasks);\n });\n watchingIssuesPromise = this.rs.issues.listInAllProjects(params_issues).then(function(issues) {\n return watching = watching.set(\"issues\", issues);\n });\n workInProgress = Immutable.Map();\n return Promise.all([projectsPromise, assignedEpicsPromise, watchingEpicsPromise, assignedUserStoriesPromise, watchingUserStoriesPromise, assignedTasksPromise, watchingTasksPromise, assignedIssuesPromise, watchingIssuesPromise]).then((function(_this) {\n return function() {\n workInProgress = workInProgress.set(\"assignedTo\", assignedTo);\n workInProgress = workInProgress.set(\"watching\", watching);\n workInProgress = _this._attachProjectInfoToWorkInProgress(workInProgress, projectsById);\n return workInProgress;\n };\n })(this));\n };\n\n return HomeService;\n\n })(taiga.Service);\n\n angular.module(\"taigaHome\").service(\"tgHomeService\", HomeService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/projects/home-project-list.directive.coffee\n */\n\n(function() {\n var HomeProjectListDirective;\n\n HomeProjectListDirective = function(currentUserService) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n scope.vm = {};\n return taiga.defineImmutableProperty(scope.vm, \"projects\", function() {\n return currentUserService.projects.get(\"recents\");\n });\n };\n directive = {\n templateUrl: \"home/projects/home-project-list.html\",\n scope: {},\n link: link\n };\n return directive;\n };\n\n HomeProjectListDirective.$inject = [\"tgCurrentUserService\"];\n\n angular.module(\"taigaHome\").directive(\"tgHomeProjectList\", HomeProjectListDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/working-on/working-on.controller.coffee\n */\n\n(function() {\n var WorkingOnController;\n\n WorkingOnController = (function() {\n WorkingOnController.$inject = [\"tgHomeService\"];\n\n function WorkingOnController(homeService) {\n this.homeService = homeService;\n this.assignedTo = Immutable.Map();\n this.watching = Immutable.Map();\n }\n\n WorkingOnController.prototype._setAssignedTo = function(workInProgress) {\n var epics, issues, tasks, userStories;\n epics = workInProgress.get(\"assignedTo\").get(\"epics\");\n userStories = workInProgress.get(\"assignedTo\").get(\"userStories\");\n tasks = workInProgress.get(\"assignedTo\").get(\"tasks\");\n issues = workInProgress.get(\"assignedTo\").get(\"issues\");\n this.assignedTo = userStories.concat(tasks).concat(issues).concat(epics);\n if (this.assignedTo.size > 0) {\n return this.assignedTo = this.assignedTo.sortBy(function(elem) {\n return elem.get(\"modified_date\");\n }).reverse();\n }\n };\n\n WorkingOnController.prototype._setWatching = function(workInProgress) {\n var epics, issues, tasks, userStories;\n epics = workInProgress.get(\"watching\").get(\"epics\");\n userStories = workInProgress.get(\"watching\").get(\"userStories\");\n tasks = workInProgress.get(\"watching\").get(\"tasks\");\n issues = workInProgress.get(\"watching\").get(\"issues\");\n this.watching = userStories.concat(tasks).concat(issues).concat(epics);\n if (this.watching.size > 0) {\n return this.watching = this.watching.sortBy(function(elem) {\n return elem.get(\"modified_date\");\n }).reverse();\n }\n };\n\n WorkingOnController.prototype.getWorkInProgress = function(userId) {\n return this.homeService.getWorkInProgress(userId).then((function(_this) {\n return function(workInProgress) {\n _this._setAssignedTo(workInProgress);\n return _this._setWatching(workInProgress);\n };\n })(this));\n };\n\n return WorkingOnController;\n\n })();\n\n angular.module(\"taigaHome\").controller(\"WorkingOn\", WorkingOnController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/working-on/working-on.directive.coffee\n */\n\n(function() {\n var WorkingOnDirective;\n\n WorkingOnDirective = function(homeService, currentUserService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var user, userId;\n user = currentUserService.getUser();\n if (user) {\n userId = user.get(\"id\");\n return ctrl.getWorkInProgress(userId);\n }\n };\n return {\n controller: \"WorkingOn\",\n controllerAs: \"vm\",\n templateUrl: \"home/working-on/working-on.html\",\n scope: {},\n link: link\n };\n };\n\n WorkingOnDirective.$inject = [\"tgHomeService\", \"tgCurrentUserService\"];\n\n angular.module(\"taigaHome\").directive(\"tgWorkingOn\", WorkingOnDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/invite-members-form/invite-members-form.controller.coffee\n */\n\n(function() {\n var InviteMembersFormController, taiga;\n\n taiga = this.taiga;\n\n InviteMembersFormController = (function() {\n InviteMembersFormController.$inject = [\"tgProjectService\", \"$tgResources\", \"lightboxService\", \"$tgConfirm\", \"$rootScope\"];\n\n function InviteMembersFormController(projectService, rs, lightboxService, confirm, rootScope) {\n this.projectService = projectService;\n this.rs = rs;\n this.lightboxService = lightboxService;\n this.confirm = confirm;\n this.rootScope = rootScope;\n this.project = this.projectService.project;\n this.roles = this.projectService.project.get('roles');\n this.rolesValues = {};\n this.loading = false;\n this.defaultMaxInvites = 4;\n }\n\n InviteMembersFormController.prototype._areRolesValidated = function() {\n return Object.defineProperty(this, 'areRolesValidated', {\n get: (function(_this) {\n return function() {\n var roleIds;\n roleIds = _.filter(Object.values(_this.rolesValues), function(it) {\n return it;\n });\n return roleIds.length === _this.contactsToInvite.size + _this.emailsToInvite.size;\n };\n })(this)\n });\n };\n\n InviteMembersFormController.prototype._checkLimitMemberships = function() {\n var pendingMembersCount;\n if (this.project.get('max_memberships') === null) {\n this.membersLimit = this.defaultMaxInvites;\n } else {\n pendingMembersCount = Math.max(this.project.get('max_memberships') - this.project.get('total_memberships'), 0);\n this.membersLimit = Math.min(pendingMembersCount, this.defaultMaxInvites);\n }\n return this.showWarningMessage = this.membersLimit < this.defaultMaxInvites;\n };\n\n InviteMembersFormController.prototype.sendInvites = function() {\n this.setInvitedContacts = [];\n _.forEach(this.rolesValues, (function(_this) {\n return function(key, value) {\n return _this.setInvitedContacts.push({\n 'role_id': key,\n 'username': value\n });\n };\n })(this));\n this.loading = true;\n return this.rs.memberships.bulkCreateMemberships(this.project.get('id'), this.setInvitedContacts, this.inviteContactsMessage).then((function(_this) {\n return function(response) {\n return _this.projectService.fetchProject().then(function() {\n _this.loading = false;\n _this.lightboxService.closeAll();\n _this.rootScope.$broadcast(\"membersform:new:success\");\n return _this.confirm.notify('success');\n });\n };\n })(this))[\"catch\"]((function(_this) {\n return function(response) {\n _this.loading = false;\n if (response.data._error_message) {\n return _this.confirm.notify(\"error\", response.data._error_message);\n }\n };\n })(this));\n };\n\n return InviteMembersFormController;\n\n })();\n\n angular.module(\"taigaAdmin\").controller(\"InviteMembersFormCtrl\", InviteMembersFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/invite-members-form/invite-members-form.directive.coffee\n */\n\n(function() {\n var InviteMembersFormDirective;\n\n InviteMembersFormDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n ctrl._areRolesValidated();\n return ctrl._checkLimitMemberships();\n };\n return {\n scope: {},\n templateUrl: \"invite-members/invite-members-form/invite-members-form.html\",\n controller: \"InviteMembersFormCtrl\",\n controllerAs: \"vm\",\n bindToController: {\n contactsToInvite: '<',\n emailsToInvite: '=',\n onDisplayContactList: '&',\n onRemoveInvitedContact: '&',\n onRemoveInvitedEmail: '&',\n onSendInvites: '&'\n },\n link: link\n };\n };\n\n angular.module(\"taigaAdmin\").directive(\"tgInviteMembersForm\", InviteMembersFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/lightbox-add-members.controller.coffee\n */\n\n(function() {\n var AddMembersController, taiga;\n\n taiga = this.taiga;\n\n AddMembersController = (function() {\n AddMembersController.$inject = [\"tgUserService\", \"tgCurrentUserService\", \"tgProjectService\"];\n\n function AddMembersController(userService, currentUserService, projectService) {\n this.userService = userService;\n this.currentUserService = currentUserService;\n this.projectService = projectService;\n this.contactsToInvite = Immutable.List();\n this.emailsToInvite = Immutable.List();\n this.displayContactList = false;\n }\n\n AddMembersController.prototype._getContacts = function() {\n var excludeProjectId, userId;\n userId = this.currentUserService.getUser().get(\"id\");\n excludeProjectId = this.projectService.project.get(\"id\");\n return this.userService.getContacts(userId, excludeProjectId).then((function(_this) {\n return function(contacts) {\n return _this.contacts = contacts;\n };\n })(this));\n };\n\n AddMembersController.prototype._filterContacts = function(invited) {\n return this.contacts = this.contacts.filter((function(_this) {\n return function(contact) {\n return contact.get('id') !== invited.get('id');\n };\n })(this));\n };\n\n AddMembersController.prototype.inviteSuggested = function(contact) {\n this.contactsToInvite = this.contactsToInvite.push(contact);\n this._filterContacts(contact);\n return this.displayContactList = true;\n };\n\n AddMembersController.prototype.removeContact = function(invited) {\n this.contactsToInvite = this.contactsToInvite.filter((function(_this) {\n return function(contact) {\n return contact.get('id') !== invited.id;\n };\n })(this));\n invited = Immutable.fromJS(invited);\n this.contacts = this.contacts.push(invited);\n return this.testEmptyContacts();\n };\n\n AddMembersController.prototype.inviteEmail = function(email) {\n var emailData;\n emailData = Immutable.Map({\n 'email': email\n });\n this.emailsToInvite = this.emailsToInvite.push(emailData);\n return this.displayContactList = true;\n };\n\n AddMembersController.prototype.removeEmail = function(invited) {\n this.emailsToInvite = this.emailsToInvite.filter((function(_this) {\n return function(email) {\n return email.get('email') !== invited.email;\n };\n })(this));\n return this.testEmptyContacts();\n };\n\n AddMembersController.prototype.testEmptyContacts = function() {\n if (this.emailsToInvite.size + this.contactsToInvite.size === 0) {\n return this.displayContactList = false;\n }\n };\n\n return AddMembersController;\n\n })();\n\n angular.module(\"taigaAdmin\").controller(\"AddMembersCtrl\", AddMembersController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/lightbox-add-members.directive.coffee\n */\n\n(function() {\n var LightboxAddMembersDirective;\n\n LightboxAddMembersDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n lightboxService.open(el);\n return ctrl._getContacts();\n };\n return {\n scope: {},\n templateUrl: \"invite-members/lightbox-add-members.html\",\n controller: \"AddMembersCtrl\",\n controllerAs: \"vm\",\n link: link\n };\n };\n\n angular.module(\"taigaAdmin\").directive(\"tgLbAddMembers\", [\"lightboxService\", LightboxAddMembersDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/suggest-add-members/suggest-add-members.controller.coffee\n */\n\n(function() {\n var SuggestAddMembersController, taiga;\n\n taiga = this.taiga;\n\n SuggestAddMembersController = (function() {\n SuggestAddMembersController.$inject = [];\n\n function SuggestAddMembersController() {\n this.contactQuery = \"\";\n }\n\n SuggestAddMembersController.prototype.isEmail = function() {\n return taiga.isEmail(this.contactQuery);\n };\n\n SuggestAddMembersController.prototype.filterContacts = function() {\n return this.filteredContacts = this.contacts.filter((function(_this) {\n return function(contact) {\n return contact.get('full_name_display').toLowerCase().includes(_this.contactQuery.toLowerCase()) || contact.get('username').toLowerCase().includes(_this.contactQuery.toLowerCase());\n };\n })(this)).slice(0, 12);\n };\n\n SuggestAddMembersController.prototype.setInvited = function(contact) {\n return this.onInviteSuggested({\n 'contact': contact\n });\n };\n\n return SuggestAddMembersController;\n\n })();\n\n angular.module(\"taigaAdmin\").controller(\"SuggestAddMembersCtrl\", SuggestAddMembersController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/suggest-add-members/suggest-add-members.directive.coffee\n */\n\n(function() {\n var SuggestAddMembersDirective;\n\n SuggestAddMembersDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return scope.$watch(\"vm.contacts\", (function(_this) {\n return function(contacts) {\n if (contacts) {\n return ctrl.filterContacts();\n }\n };\n })(this));\n };\n return {\n scope: {},\n templateUrl: \"invite-members/suggest-add-members/suggest-add-members.html\",\n controller: \"SuggestAddMembersCtrl\",\n controllerAs: \"vm\",\n bindToController: {\n contacts: '=',\n onInviteSuggested: '&',\n onInviteEmail: '&'\n },\n link: link\n };\n };\n\n angular.module(\"taigaAdmin\").directive(\"tgSuggestAddMembers\", [\"lightboxService\", SuggestAddMembersDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/dropdown-notifications/dropdown-notifications.directive.coffee\n */\n\n(function() {\n var DropdownNotificationsDirective, timeout;\n\n timeout = this.taiga.timeout;\n\n DropdownNotificationsDirective = function($rootScope, notificationsService, currentUserService) {\n var directive, link;\n link = function($scope, $el, $attrs, $ctrl) {\n $scope.notificationsList = [];\n $scope.loading = false;\n $scope.$on(\"notifications:loaded\", function(event, total) {\n $scope.loading = false;\n if ($scope.total !== void 0 && total > $scope.total) {\n $scope.newEvent = true;\n timeout(100, function() {\n $scope.total = total;\n return $scope.$apply();\n });\n return timeout(2000, function() {\n return $scope.newEvent = false;\n });\n } else {\n return $scope.total = total;\n }\n });\n $scope.$on(\"notifications:loading\", function() {\n return $scope.loading = true;\n });\n return $scope.setAllAsRead = function() {\n return notificationsService.setNotificationsAsRead().then(function() {\n return $rootScope.$emit(\"notifications:dismiss-all\");\n });\n };\n };\n directive = {\n templateUrl: \"navigation-bar/dropdown-notifications/dropdown-notifications.html\",\n scope: {\n active: \"=\"\n },\n link: link\n };\n return directive;\n };\n\n angular.module(\"taigaNavigationBar\").directive(\"tgDropdownNotifications\", [\"$rootScope\", \"tgNotificationsService\", \"tgCurrentUserService\", DropdownNotificationsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee\n */\n\n(function() {\n var DropdownProjectListDirective;\n\n DropdownProjectListDirective = function(rootScope, currentUserService, projectsService) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n var updateLinks;\n scope.vm = {};\n taiga.defineImmutableProperty(scope.vm, \"projects\", function() {\n return currentUserService.projects.get(\"recents\");\n });\n scope.vm.newProject = function() {\n return projectsService.newProject();\n };\n updateLinks = function() {\n return el.find(\".dropdown-project-list ul li a\").data(\"fullUrl\", \"\");\n };\n return rootScope.$on(\"dropdown-project-list:updated\", updateLinks);\n };\n directive = {\n templateUrl: \"navigation-bar/dropdown-project-list/dropdown-project-list.html\",\n scope: {\n active: \"=\"\n },\n link: link\n };\n return directive;\n };\n\n DropdownProjectListDirective.$inject = [\"$rootScope\", \"tgCurrentUserService\", \"tgProjectsService\"];\n\n angular.module(\"taigaNavigationBar\").directive(\"tgDropdownProjectList\", DropdownProjectListDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/dropdown-user/dropdown-user.directive.coffee\n */\n\n(function() {\n var DropdownUserDirective;\n\n DropdownUserDirective = function(authService, configService, locationService, navUrlsService, feedbackService, $rootScope) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n scope.vm = {};\n scope.vm.isFeedbackEnabled = configService.get(\"feedbackEnabled\");\n scope.vm.customSupportUrl = configService.get(\"supportUrl\");\n taiga.defineImmutableProperty(scope.vm, \"user\", function() {\n return authService.userData;\n });\n scope.vm.logout = function() {\n authService.logout();\n locationService.url(navUrlsService.resolve(\"discover\"));\n return locationService.search({});\n };\n scope.vm.sendFeedback = function() {\n return feedbackService.sendFeedback();\n };\n return scope.vm.userSettingsPlugins = _.filter($rootScope.userSettingsPlugins, {\n userMenu: true\n });\n };\n directive = {\n templateUrl: \"navigation-bar/dropdown-user/dropdown-user.html\",\n scope: {},\n link: link\n };\n return directive;\n };\n\n DropdownUserDirective.$inject = [\"$tgAuth\", \"$tgConfig\", \"$tgLocation\", \"$tgNavUrls\", \"tgFeedbackService\", \"$rootScope\"];\n\n angular.module(\"taigaNavigationBar\").directive(\"tgDropdownUser\", DropdownUserDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/navigation-bar.directive.coffee\n */\n\n(function() {\n var NavigationBarDirective;\n\n NavigationBarDirective = function(currentUserService, navigationBarService, locationService, navUrlsService, config) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n scope.vm = {};\n taiga.defineImmutableProperty(scope.vm, \"projects\", function() {\n return currentUserService.projects.get(\"recents\");\n });\n taiga.defineImmutableProperty(scope.vm, \"isAuthenticated\", function() {\n return currentUserService.isAuthenticated();\n });\n taiga.defineImmutableProperty(scope.vm, \"isEnabledHeader\", function() {\n return navigationBarService.isEnabledHeader();\n });\n scope.vm.publicRegisterEnabled = config.get(\"publicRegisterEnabled\");\n scope.vm.customSupportUrl = config.get(\"supportUrl\");\n scope.vm.login = function() {\n var nextUrl;\n nextUrl = encodeURIComponent(locationService.url());\n locationService.url(navUrlsService.resolve(\"login\"));\n return locationService.search({\n next: nextUrl\n });\n };\n return scope.$on(\"$routeChangeSuccess\", function() {\n scope.vm.active = null;\n switch (locationService.path()) {\n case \"/\":\n return scope.vm.active = 'dashboard';\n case \"/discover\":\n return scope.vm.active = 'discover';\n case \"/notifications\":\n return scope.vm.active = 'notifications';\n case \"/projects/\":\n return scope.vm.active = 'projects';\n }\n });\n };\n directive = {\n templateUrl: \"navigation-bar/navigation-bar.html\",\n scope: {},\n link: link\n };\n return directive;\n };\n\n NavigationBarDirective.$inject = [\"tgCurrentUserService\", \"tgNavigationBarService\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfig\"];\n\n angular.module(\"taigaNavigationBar\").directive(\"tgNavigationBar\", NavigationBarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/navigation-bar.service.coffee\n */\n\n(function() {\n var NavigationBarService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NavigationBarService = (function(superClass) {\n extend(NavigationBarService, superClass);\n\n function NavigationBarService() {\n this.disableHeader();\n }\n\n NavigationBarService.prototype.enableHeader = function() {\n return this.enabledHeader = true;\n };\n\n NavigationBarService.prototype.disableHeader = function() {\n return this.enabledHeader = false;\n };\n\n NavigationBarService.prototype.isEnabledHeader = function() {\n return this.enabledHeader;\n };\n\n return NavigationBarService;\n\n })(taiga.Service);\n\n angular.module(\"taigaNavigationBar\").service(\"tgNavigationBarService\", NavigationBarService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: notifications/notifications-list/notifications-list.directive.coffee\n */\n\n(function() {\n var NotificationsListDirective;\n\n NotificationsListDirective = function() {\n return {\n templateUrl: \"notifications/notifications-list/notifications-list.html\",\n controller: \"Notifications\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n infiniteScrollContainer: \"@\",\n infiniteScrollDistance: \"=\",\n onlyUnread: \"=onlyUnread\"\n }\n };\n };\n\n angular.module(\"taigaNotifications\").directive(\"tgNotificationsList\", NotificationsListDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: notifications/notifications.controller.coffee\n */\n\n(function() {\n var NotificationsController, debounceLeading, mixOf, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n debounceLeading = this.taiga.debounceLeading;\n\n NotificationsController = (function(superClass) {\n extend(NotificationsController, superClass);\n\n NotificationsController.$inject = [\"$rootScope\", \"$scope\", \"tgNotificationsService\", \"tgCurrentUserService\", \"$tgEvents\", \"$location\", \"$window\"];\n\n function NotificationsController(rootScope, scope, notificationsService, currentUserService, events, location, window) {\n this.rootScope = rootScope;\n this.scope = scope;\n this.notificationsService = notificationsService;\n this.currentUserService = currentUserService;\n this.events = events;\n this.location = location;\n this.window = window;\n this.total = 0;\n this.user = this.currentUserService.getUser();\n this.scrollDisabled = false;\n this.initList();\n this.loadNotifications();\n this.rootScope.$on(\"notifications:dismiss\", (function(_this) {\n return function(event) {\n if (_this.onlyUnread) {\n return _this.reloadList();\n }\n };\n })(this));\n this.rootScope.$on(\"notifications:new\", (function(_this) {\n return function(event) {\n return _this.reloadList();\n };\n })(this));\n this.rootScope.$on(\"notifications:dismiss-all\", (function(_this) {\n return function(event) {\n return _this.reloadList();\n };\n })(this));\n }\n\n NotificationsController.prototype.initList = function() {\n this.notificationsList = Immutable.List();\n this.list = this.notificationsService.getNotificationsList(this.user.get(\"id\"), this.onlyUnread != null);\n return this.loading = this.list == null;\n };\n\n NotificationsController.prototype.reloadList = function() {\n this.initList();\n return this.loadNotifications();\n };\n\n NotificationsController.prototype.loadNotifications = function() {\n this.scrollDisabled = true;\n this.loading = true;\n this.scope.$emit(\"notifications:loading\");\n return this.list.next().then((function(_this) {\n return function(response) {\n _this.notificationsList = _this.notificationsList.concat(response.get(\"items\"));\n if (response.get(\"next\")) {\n _this.scrollDisabled = false;\n }\n _this.total = response.get(\"total\");\n _this.scope.$emit(\"notifications:loaded\", _this.total);\n _this.loading = false;\n return _this.notificationsList;\n };\n })(this));\n };\n\n NotificationsController.prototype.setAsRead = function(notification, url) {\n return this.notificationsService.setNotificationAsRead(notification.get(\"id\")).then((function(_this) {\n return function() {\n if (_this.location.$$url === url) {\n _this.window.location.reload();\n } else {\n _this.location.path(url);\n }\n return _this.rootScope.$broadcast(\"notifications:dismiss\");\n };\n })(this));\n };\n\n NotificationsController.prototype.setAllAsRead = function() {\n return this.notificationsService.setNotificationsAsRead().then((function(_this) {\n return function() {\n return _this.rootScope.$broadcast(\"notifications:dismiss-all\");\n };\n })(this));\n };\n\n return NotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n angular.module(\"taigaNotifications\").controller(\"Notifications\", NotificationsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-notification/user-notification/user-notification.service.coffee\n */\n\n(function() {\n var NotificationsService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n NotificationsService = (function(superClass) {\n var _notificationTypes, _params;\n\n extend(NotificationsService, superClass);\n\n NotificationsService.$inject = [\"tgResources\", \"tgUserTimelinePaginationSequenceService\", \"$translate\", \"$tgNavUrls\", \"$tgSections\"];\n\n _notificationTypes = [\n {\n check: function(notification) {\n return notification.get('event_type') === 1;\n },\n key: 'EVENTS.ASSIGNED_YOU',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 2;\n },\n key: 'EVENTS.MENTIONED_YOU',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 3;\n },\n key: 'EVENTS.ADDED_YOU_AS_WATCHER',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 4;\n },\n key: 'EVENTS.ADDED_YOU_AS_MEMBER',\n translate_params: ['username']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 5;\n },\n key: 'EVENTS.COMMENTED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 6;\n },\n key: 'EVENTS.MENTIONED_YOU_IN_COMMENT',\n translate_params: ['username', 'obj_name']\n }\n ];\n\n _params = {\n username: function(notification) {\n var title_attr, url, user;\n user = notification.getIn(['data', 'user']);\n if (user.get('is_profile_visible')) {\n title_attr = this.translate.instant('COMMON.SEE_USER_PROFILE', {\n username: user.get('username')\n });\n url = this.navUrls.resolve('user-profile', {\n username: notification.getIn(['data', 'user', 'username'])\n });\n return this._getLink(notification, url, user.get('name'), 'user-link', title_attr);\n } else {\n return this._getUsernameSpan(user.get('name'));\n }\n },\n project_name: function(notification) {\n var url;\n url = this.navUrls.resolve('project', {\n project: notification.getIn(['data', 'project', 'slug'])\n });\n return this._getLink(notification, url, notification.getIn([\"data\", \"project\", \"name\"]), 'project-link');\n },\n obj_name: function(notification) {\n var obj, text, url;\n obj = this._getNotificationObject(notification);\n url = this._getDetailObjUrl(notification, obj.get('content_type'));\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n return this._getLink(notification, url, text, 'object-link');\n }\n };\n\n function NotificationsService(rs, userTimelinePaginationSequenceService, translate, navUrls, tgSections) {\n this.rs = rs;\n this.userTimelinePaginationSequenceService = userTimelinePaginationSequenceService;\n this.translate = translate;\n this.navUrls = navUrls;\n this.tgSections = tgSections;\n }\n\n NotificationsService.prototype.getNotificationsList = function(userId, onlyUnread) {\n var config, total;\n total = 0;\n config = {};\n config.fetch = (function(_this) {\n return function(page) {\n return _this.rs.users.getNotifications(userId, page, onlyUnread).then(function(response) {\n return response;\n });\n };\n })(this);\n config.map = (function(_this) {\n return function(obj) {\n return _this._addNotificationAttributes(obj);\n };\n })(this);\n return this.userTimelinePaginationSequenceService.generate(config);\n };\n\n NotificationsService.prototype.setNotificationAsRead = function(notificationId) {\n return this.rs.users.setNotificationAsRead(notificationId);\n };\n\n NotificationsService.prototype.setNotificationsAsRead = function() {\n return this.rs.users.setNotificationsAsRead();\n };\n\n NotificationsService.prototype._getNotificationObject = function(notification) {\n if (notification.get('data').get('obj')) {\n return notification.get('data').get('obj');\n }\n };\n\n NotificationsService.prototype._getType = function(notification) {\n return _.find(_notificationTypes, function(obj) {\n return obj.check(notification);\n });\n };\n\n NotificationsService.prototype._addNotificationAttributes = function(notification) {\n var event_type, projectSectionPath, projectSlug, projectUrl, title, type;\n event_type = notification.get('event_type');\n type = this._getType(notification);\n title = this._getTitle(notification, event_type, type);\n notification = notification.set('title_html', title);\n projectSlug = notification.getIn(['data', 'project', 'slug']);\n projectSectionPath = this.tgSections.getPath(projectSlug);\n projectUrl = this.navUrls.resolve(\"project-\" + projectSectionPath, {\n project: projectSlug\n });\n notification = notification.set('projectUrl', projectUrl);\n notification = notification.set('obj', this._getNotificationObject(notification));\n return notification;\n };\n\n NotificationsService.prototype._translateTitleParams = function(param, notification, event) {\n return _params[param].call(this, notification, event);\n };\n\n NotificationsService.prototype._getDetailObjUrl = function(notification, contentType) {\n var url, urlMapping;\n urlMapping = {\n \"issue\": \"project-issues-detail\",\n \"task\": \"project-tasks-detail\",\n \"userstory\": \"project-userstories-detail\"\n };\n url = this.navUrls.resolve(urlMapping[contentType], {\n project: notification.getIn(['data', 'project', 'slug']),\n ref: notification.getIn(['data', 'obj', 'ref'])\n });\n return url;\n };\n\n NotificationsService.prototype._getLink = function(notification, url, text, css, title) {\n var span;\n title = title || text;\n span = $('').attr('ng-non-bindable', true).text(text);\n return $('').attr('title', title).attr('class', css).attr('ng-click', \"vm.setAsRead(notification, \\\"\" + url + \"\\\")\").append(span).prop('outerHTML');\n };\n\n NotificationsService.prototype._getUsernameSpan = function(text) {\n var title;\n title = title || text;\n return $('').addClass('username').text(text).prop('outerHTML');\n };\n\n NotificationsService.prototype._getParams = function(notification, event_type, notification_type) {\n var params;\n params = {};\n notification_type.translate_params.forEach((function(_this) {\n return function(param) {\n return params[param] = _this._translateTitleParams(param, notification, event_type);\n };\n })(this));\n return params;\n };\n\n NotificationsService.prototype._getTitle = function(notification, event_type, notification_type) {\n var params, paramsKeys, translation;\n params = this._getParams(notification, event_type, notification_type);\n paramsKeys = {};\n Object.keys(params).forEach(function(key) {\n return paramsKeys[key] = '{{' + key + '}}';\n });\n translation = this.translate.instant(notification_type.key, paramsKeys);\n Object.keys(params).forEach(function(key) {\n var find;\n find = '{{' + key + '}}';\n return translation = translation.replace(new RegExp(find, 'g'), params[key]);\n });\n return translation;\n };\n\n return NotificationsService;\n\n })(taiga.Service);\n\n angular.module(\"taigaNotifications\").service(\"tgNotificationsService\", NotificationsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-bar/profile-bar.controller.coffee\n */\n\n(function() {\n var ProfileBarController;\n\n ProfileBarController = (function() {\n ProfileBarController.$inject = [\"tgUserService\"];\n\n function ProfileBarController(userService) {\n this.userService = userService;\n this.loadStats();\n }\n\n ProfileBarController.prototype.loadStats = function() {\n return this.userService.getStats(this.user.get(\"id\")).then((function(_this) {\n return function(stats) {\n return _this.stats = stats;\n };\n })(this));\n };\n\n return ProfileBarController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"ProfileBar\", ProfileBarController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-bar/profile-bar.directive.coffee\n */\n\n(function() {\n var ProfileBarDirective;\n\n ProfileBarDirective = function() {\n return {\n templateUrl: \"profile/profile-bar/profile-bar.html\",\n controller: \"ProfileBar\",\n controllerAs: \"vm\",\n scope: {\n user: \"=user\",\n isCurrentUser: \"=iscurrentuser\"\n },\n bindToController: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileBar\", ProfileBarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-contacts/profile-contacts.controller.coffee\n */\n\n(function() {\n var ProfileContactsController;\n\n ProfileContactsController = (function() {\n ProfileContactsController.$inject = [\"tgUserService\", \"tgCurrentUserService\"];\n\n function ProfileContactsController(userService, currentUserService) {\n this.userService = userService;\n this.currentUserService = currentUserService;\n this.currentUser = this.currentUserService.getUser();\n this.isCurrentUser = false;\n if (this.currentUser && this.currentUser.get(\"id\") === this.user.get(\"id\")) {\n this.isCurrentUser = true;\n }\n }\n\n ProfileContactsController.prototype.loadContacts = function() {\n return this.userService.getContacts(this.user.get(\"id\")).then((function(_this) {\n return function(contacts) {\n return _this.contacts = contacts;\n };\n })(this));\n };\n\n return ProfileContactsController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"ProfileContacts\", ProfileContactsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-contacts/profile-contacts.directive.coffee\n */\n\n(function() {\n var ProfileContactsDirective;\n\n ProfileContactsDirective = function() {\n var link;\n link = function(scope, elm, attrs, ctrl) {\n return ctrl.loadContacts();\n };\n return {\n templateUrl: \"profile/profile-contacts/profile-contacts.html\",\n scope: {\n user: \"=\"\n },\n controllerAs: \"vm\",\n controller: \"ProfileContacts\",\n link: link,\n bindToController: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileContacts\", ProfileContactsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-favs/items/items.directive.coffee\n */\n\n(function() {\n var FavItemDirective;\n\n FavItemDirective = function() {\n var link, templateUrl;\n link = function(scope, el, attrs, ctrl) {\n return scope.vm = {\n item: scope.item\n };\n };\n templateUrl = function(el, attrs) {\n if (attrs.itemType === \"project\") {\n return \"profile/profile-favs/items/project.html\";\n } else {\n return \"profile/profile-favs/items/ticket.html\";\n }\n };\n return {\n scope: {\n \"item\": \"=tgFavItem\"\n },\n link: link,\n templateUrl: templateUrl\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgFavItem\", FavItemDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-favs/profile-favs.controller.coffee\n */\n\n(function() {\n var FavsBaseController, ProfileLikedController, ProfileVotedController, ProfileWatchedController, debounceLeading,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n debounceLeading = this.taiga.debounceLeading;\n\n FavsBaseController = (function() {\n function FavsBaseController() {\n this._init();\n }\n\n FavsBaseController.prototype._init = function() {\n this.enableFilterByAll = true;\n this.enableFilterByProjects = true;\n this.enableFilterByEpics = true;\n this.enableFilterByUserStories = true;\n this.enableFilterByTasks = true;\n this.enableFilterByIssues = true;\n this.enableFilterByTextQuery = true;\n this._resetList();\n this.q = null;\n return this.type = null;\n };\n\n FavsBaseController.prototype._resetList = function() {\n this.items = Immutable.List();\n this.scrollDisabled = false;\n return this._page = 1;\n };\n\n FavsBaseController.prototype._enableLoadingSpinner = function() {\n return this.isLoading = true;\n };\n\n FavsBaseController.prototype._disableLoadingSpinner = function() {\n return this.isLoading = false;\n };\n\n FavsBaseController.prototype._enableScroll = function() {\n return this.scrollDisabled = false;\n };\n\n FavsBaseController.prototype._disableScroll = function() {\n return this.scrollDisabled = true;\n };\n\n FavsBaseController.prototype._checkIfHasMorePages = function(hasNext) {\n if (hasNext) {\n this._page += 1;\n return this._enableScroll();\n } else {\n return this._disableScroll();\n }\n };\n\n FavsBaseController.prototype._checkIfHasNoResults = function() {\n return this.hasNoResults = this.items.size === 0;\n };\n\n FavsBaseController.prototype.loadItems = function() {\n this._enableLoadingSpinner();\n this._disableScroll();\n return this._getItems(this.user.get(\"id\"), this._page, this.type, this.q).then((function(_this) {\n return function(response) {\n _this.items = _this.items.concat(response.get(\"data\"));\n _this._checkIfHasMorePages(response.get(\"next\"));\n _this._checkIfHasNoResults();\n _this._disableLoadingSpinner();\n return _this.items;\n };\n })(this))[\"catch\"]((function(_this) {\n return function() {\n _this._disableLoadingSpinner();\n return _this.items;\n };\n })(this));\n };\n\n FavsBaseController.prototype.filterByTextQuery = debounceLeading(500, function() {\n this._resetList();\n return this.loadItems();\n });\n\n FavsBaseController.prototype.showAll = function() {\n if (this.type !== null) {\n this.type = null;\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showProjectsOnly = function() {\n if (this.type !== \"project\") {\n this.type = \"project\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showEpicsOnly = function() {\n if (this.type !== \"epic\") {\n this.type = \"epic\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showUserStoriesOnly = function() {\n if (this.type !== \"userstory\") {\n this.type = \"userstory\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showTasksOnly = function() {\n if (this.type !== \"task\") {\n this.type = \"task\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showIssuesOnly = function() {\n if (this.type !== \"issue\") {\n this.type = \"issue\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n return FavsBaseController;\n\n })();\n\n ProfileLikedController = (function(superClass) {\n extend(ProfileLikedController, superClass);\n\n ProfileLikedController.$inject = [\"tgUserService\"];\n\n function ProfileLikedController(userService) {\n this.userService = userService;\n ProfileLikedController.__super__.constructor.call(this);\n this.tabName = 'likes';\n this.enableFilterByAll = false;\n this.enableFilterByProjects = false;\n this.enableFilterByEpics = false;\n this.enableFilterByUserStories = false;\n this.enableFilterByTasks = false;\n this.enableFilterByIssues = false;\n this.enableFilterByTextQuery = true;\n this._getItems = this.userService.getLiked;\n }\n\n return ProfileLikedController;\n\n })(FavsBaseController);\n\n angular.module(\"taigaProfile\").controller(\"ProfileLiked\", ProfileLikedController);\n\n ProfileVotedController = (function(superClass) {\n extend(ProfileVotedController, superClass);\n\n ProfileVotedController.$inject = [\"tgUserService\"];\n\n function ProfileVotedController(userService) {\n this.userService = userService;\n ProfileVotedController.__super__.constructor.call(this);\n this.tabName = 'upvotes';\n this.enableFilterByAll = true;\n this.enableFilterByProjects = false;\n this.enableFilterByEpics = true;\n this.enableFilterByUserStories = true;\n this.enableFilterByTasks = true;\n this.enableFilterByIssues = true;\n this.enableFilterByTextQuery = true;\n this._getItems = this.userService.getVoted;\n }\n\n return ProfileVotedController;\n\n })(FavsBaseController);\n\n angular.module(\"taigaProfile\").controller(\"ProfileVoted\", ProfileVotedController);\n\n ProfileWatchedController = (function(superClass) {\n extend(ProfileWatchedController, superClass);\n\n ProfileWatchedController.$inject = [\"tgUserService\"];\n\n function ProfileWatchedController(userService) {\n this.userService = userService;\n ProfileWatchedController.__super__.constructor.call(this);\n this.tabName = 'watchers';\n this._getItems = this.userService.getWatched;\n }\n\n return ProfileWatchedController;\n\n })(FavsBaseController);\n\n angular.module(\"taigaProfile\").controller(\"ProfileWatched\", ProfileWatchedController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-favs/profile-favs.directive.coffee\n */\n\n(function() {\n var ProfileLikedDirective, ProfileVotedDirective, ProfileWatchedDirective, base;\n\n base = {\n scope: {},\n bindToController: {\n user: \"=\",\n type: \"@\",\n q: \"@\",\n scrollDisabled: \"@\",\n isLoading: \"@\",\n hasNoResults: \"@\"\n },\n controller: null,\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-favs/profile-favs.html\"\n };\n\n ProfileLikedDirective = function() {\n return _.extend({}, base, {\n controller: \"ProfileLiked\"\n });\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileLiked\", ProfileLikedDirective);\n\n ProfileVotedDirective = function() {\n return _.extend({}, base, {\n controller: \"ProfileVoted\"\n });\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileVoted\", ProfileVotedDirective);\n\n ProfileWatchedDirective = function() {\n return _.extend({}, base, {\n controller: \"ProfileWatched\"\n });\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileWatched\", ProfileWatchedDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-hints/profile-hints.controller.coffee\n */\n\n(function() {\n var ProfileHints;\n\n ProfileHints = (function() {\n ProfileHints.prototype.HINTS = [\n {\n url: \"https://tree.taiga.io/support/admin/import-export-projects/\"\n }, {\n url: \"https://tree.taiga.io/support/admin/custom-fields/\"\n }, {}, {}\n ];\n\n function ProfileHints(translate) {\n var hintKey;\n this.translate = translate;\n hintKey = Math.floor(Math.random() * this.HINTS.length) + 1;\n this.hint = this.HINTS[hintKey - 1];\n this.hint.linkText = this.hint.linkText || 'HINTS.LINK';\n this.hint.title = this.translate.instant(\"HINTS.HINT\" + hintKey + \"_TITLE\");\n this.hint.text = this.translate.instant(\"HINTS.HINT\" + hintKey + \"_TEXT\");\n }\n\n return ProfileHints;\n\n })();\n\n ProfileHints.$inject = [\"$translate\"];\n\n angular.module(\"taigaProfile\").controller(\"ProfileHints\", ProfileHints);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-hints/profile-hints.directive.coffee\n */\n\n(function() {\n var ProfileHints;\n\n ProfileHints = function($translate) {\n return {\n scope: {},\n controller: \"ProfileHints\",\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-hints/profile-hints.html\"\n };\n };\n\n ProfileHints.$inject = [\"$translate\"];\n\n angular.module(\"taigaProfile\").directive(\"tgProfileHints\", ProfileHints);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-projects/profile-projects.controller.coffee\n */\n\n(function() {\n var ProfileProjectsController;\n\n ProfileProjectsController = (function() {\n ProfileProjectsController.$inject = [\"tgProjectsService\", \"tgUserService\"];\n\n function ProfileProjectsController(projectsService, userService) {\n this.projectsService = projectsService;\n this.userService = userService;\n }\n\n ProfileProjectsController.prototype.loadProjects = function() {\n return this.projectsService.getProjectsByUserId(this.user.get(\"id\")).then((function(_this) {\n return function(projects) {\n return _this.userService.attachUserContactsToProjects(_this.user.get(\"id\"), projects);\n };\n })(this)).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n return ProfileProjectsController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"ProfileProjects\", ProfileProjectsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-projects/profile-projects.directive.coffee\n */\n\n(function() {\n var ProfileProjectsDirective;\n\n ProfileProjectsDirective = function() {\n var link;\n link = function(scope, elm, attr, ctrl) {\n return ctrl.loadProjects();\n };\n return {\n templateUrl: \"profile/profile-projects/profile-projects.html\",\n scope: {\n user: \"=\"\n },\n link: link,\n bindToController: true,\n controllerAs: \"vm\",\n controller: \"ProfileProjects\"\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileProjects\", ProfileProjectsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-tab/profile-tab.directive.coffee\n */\n\n(function() {\n var ProfileTabDirective;\n\n ProfileTabDirective = function() {\n var link;\n link = function(scope, element, attrs, ctrl, transclude) {\n scope.tab = {};\n attrs.$observe(\"tgProfileTab\", function(name) {\n return scope.tab.name = name;\n });\n attrs.$observe(\"tabTitle\", function(title) {\n return scope.tab.title = title;\n });\n scope.tab.icon = attrs.tabIcon;\n scope.tab.active = !!attrs.tabActive;\n if (scope.$eval(attrs.tabDisabled) !== true) {\n return ctrl.addTab(scope.tab);\n }\n };\n return {\n templateUrl: \"profile/profile-tab/profile-tab.html\",\n scope: {},\n require: \"^tgProfileTabs\",\n link: link,\n transclude: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileTab\", ProfileTabDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-tabs/profile-tabs.controller.coffee\n */\n\n(function() {\n var ProfileTabsController;\n\n ProfileTabsController = (function() {\n function ProfileTabsController() {\n this.tabs = [];\n }\n\n ProfileTabsController.prototype.addTab = function(tab) {\n return this.tabs.push(tab);\n };\n\n ProfileTabsController.prototype.toggleTab = function(tab) {\n _.map(this.tabs, function(tab) {\n return tab.active = false;\n });\n return tab.active = true;\n };\n\n return ProfileTabsController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"ProfileTabs\", ProfileTabsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-tabs/profile-tabs.directive.coffee\n */\n\n(function() {\n var ProfileTabsDirective;\n\n ProfileTabsDirective = function() {\n return {\n scope: {},\n controller: \"ProfileTabs\",\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-tabs/profile-tabs.html\",\n transclude: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileTabs\", ProfileTabsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile.controller.coffee\n */\n\n(function() {\n var ProfileController;\n\n ProfileController = (function() {\n ProfileController.$inject = [\"tgAppMetaService\", \"tgCurrentUserService\", \"$routeParams\", \"tgUserService\", \"tgXhrErrorService\", \"$translate\"];\n\n function ProfileController(appMetaService, currentUserService, routeParams, userService, xhrError, translate) {\n this.appMetaService = appMetaService;\n this.currentUserService = currentUserService;\n this.routeParams = routeParams;\n this.userService = userService;\n this.xhrError = xhrError;\n this.translate = translate;\n this.isCurrentUser = false;\n if (this.routeParams.slug) {\n this.userService.getUserByUserName(this.routeParams.slug).then((function(_this) {\n return function(user) {\n if (!user.get('is_active')) {\n return _this.xhrError.notFound();\n } else {\n _this.user = user;\n _this.isCurrentUser = false;\n _this._setMeta(_this.user);\n return user;\n }\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n return _this.xhrError.response(xhr);\n };\n })(this));\n } else {\n this.user = this.currentUserService.getUser();\n this.isCurrentUser = true;\n this._setMeta(this.user);\n }\n }\n\n ProfileController.prototype._setMeta = function(user) {\n var ctx, description, title;\n ctx = {\n userFullName: user.get(\"full_name_display\"),\n userUsername: user.get(\"username\")\n };\n title = this.translate.instant(\"USER.PROFILE.PAGE_TITLE\", ctx);\n description = user.get(\"bio\");\n return this.appMetaService.setAll(title, description);\n };\n\n return ProfileController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"Profile\", ProfileController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/blocked-project-explanation.directive.coffee\n */\n\n(function() {\n var BlockedProjectExplanationDirective;\n\n BlockedProjectExplanationDirective = function() {\n return {\n templateUrl: \"projects/project/blocked-project-explanation.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgBlockedProjectExplanation\", BlockedProjectExplanationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/contact-project-button/contact-project-button.controller.coffee\n */\n\n(function() {\n var ContactProjectButtonController;\n\n ContactProjectButtonController = (function() {\n ContactProjectButtonController.$inject = ['tgLightboxFactory'];\n\n function ContactProjectButtonController(lightboxFactory) {\n this.lightboxFactory = lightboxFactory;\n }\n\n ContactProjectButtonController.prototype.launchContactForm = function() {\n return this.lightboxFactory.create('tg-lb-contact-project', {\n \"class\": \"lightbox lightbox-contact-project e2e-lightbox-contact-project\",\n \"project\": \"project\"\n }, {\n \"project\": this.project\n });\n };\n\n return ContactProjectButtonController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ContactProjectButtonCtrl\", ContactProjectButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/contact-project-button/contact-project-button.directive.coffee\n */\n\n(function() {\n var ContactProjectButtonDirective;\n\n ContactProjectButtonDirective = function() {\n return {\n scope: {},\n controller: \"ContactProjectButtonCtrl\",\n bindToController: {\n project: '=',\n layout: '@'\n },\n controllerAs: \"vm\",\n templateUrl: \"projects/components/contact-project-button/contact-project-button.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgContactProjectButton\", ContactProjectButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/lb-contact-project/lb-contact-project.controller.coffee\n */\n\n(function() {\n var ContactProjectLbController;\n\n ContactProjectLbController = (function() {\n ContactProjectLbController.$inject = [\"lightboxService\", \"tgResources\", \"$tgConfirm\"];\n\n function ContactProjectLbController(lightboxService, rs, confirm) {\n this.lightboxService = lightboxService;\n this.rs = rs;\n this.confirm = confirm;\n this.contact = {};\n }\n\n ContactProjectLbController.prototype.contactProject = function() {\n var message, project, promise;\n project = this.project.get('id');\n message = this.contact.message;\n promise = this.rs.projects.contactProject(project, message);\n this.sendingFeedback = true;\n return promise.then((function(_this) {\n return function() {\n _this.lightboxService.closeAll();\n _this.sendingFeedback = false;\n return _this.confirm.notify(\"success\");\n };\n })(this));\n };\n\n return ContactProjectLbController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ContactProjectLbCtrl\", ContactProjectLbController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/lb-contact-project/lb-contact-project.directive.coffee\n */\n\n(function() {\n var ContactProjectLbDirective;\n\n ContactProjectLbDirective = function(lightboxService) {\n var link;\n this.inject = ['lightboxService'];\n link = function(scope, el) {\n return lightboxService.open(el);\n };\n return {\n controller: \"ContactProjectLbCtrl\",\n bindToController: {\n project: '='\n },\n controllerAs: \"vm\",\n templateUrl: \"projects/components/lb-contact-project/lb-contact-project.html\",\n link: link\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgLbContactProject\", [\"lightboxService\", ContactProjectLbDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/like-project-button/like-project-button.controller.coffee\n */\n\n(function() {\n var LikeProjectButtonController;\n\n LikeProjectButtonController = (function() {\n LikeProjectButtonController.$inject = [\"$tgConfirm\", \"tgLikeProjectButtonService\"];\n\n function LikeProjectButtonController(confirm, likeButtonService) {\n this.confirm = confirm;\n this.likeButtonService = likeButtonService;\n this.isMouseOver = false;\n this.loading = false;\n }\n\n LikeProjectButtonController.prototype.showTextWhenMouseIsOver = function() {\n return this.isMouseOver = true;\n };\n\n LikeProjectButtonController.prototype.showTextWhenMouseIsLeave = function() {\n return this.isMouseOver = false;\n };\n\n LikeProjectButtonController.prototype.toggleLike = function() {\n var promise;\n this.loading = true;\n if (!this.project.get(\"is_fan\")) {\n promise = this._like();\n } else {\n promise = this._unlike();\n }\n promise[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n return promise;\n };\n\n LikeProjectButtonController.prototype._like = function() {\n return this.likeButtonService.like(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.showTextWhenMouseIsLeave();\n };\n })(this))[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n };\n\n LikeProjectButtonController.prototype._unlike = function() {\n return this.likeButtonService.unlike(this.project.get('id'))[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n };\n\n return LikeProjectButtonController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"LikeProjectButton\", LikeProjectButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/like-project-button/like-project-button.directive.coffee\n */\n\n(function() {\n var LikeProjectButtonDirective;\n\n LikeProjectButtonDirective = function() {\n return {\n scope: {},\n controller: \"LikeProjectButton\",\n bindToController: {\n project: '='\n },\n controllerAs: \"vm\",\n templateUrl: \"projects/components/like-project-button/like-project-button.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgLikeProjectButton\", LikeProjectButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/like-project-button/like-project-button.service.coffee\n */\n\n(function() {\n var LikeProjectButtonService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n LikeProjectButtonService = (function(superClass) {\n extend(LikeProjectButtonService, superClass);\n\n LikeProjectButtonService.$inject = [\"tgResources\", \"tgCurrentUserService\", \"tgProjectService\"];\n\n function LikeProjectButtonService(rs, currentUserService, projectService) {\n this.rs = rs;\n this.currentUserService = currentUserService;\n this.projectService = projectService;\n }\n\n LikeProjectButtonService.prototype._getProjectIndex = function(projectId) {\n return this.currentUserService.projects.get('all').findIndex(function(project) {\n return project.get('id') === projectId;\n });\n };\n\n LikeProjectButtonService.prototype._updateProjects = function(projectId, isFan) {\n var projectIndex, projects;\n projectIndex = this._getProjectIndex(projectId);\n if (projectIndex === -1) {\n return;\n }\n projects = this.currentUserService.projects.get('all').update(projectIndex, function(project) {\n var totalFans;\n totalFans = project.get(\"total_fans\");\n if (isFan) {\n totalFans++;\n } else {\n totalFans--;\n }\n return project.merge({\n is_fan: isFan,\n total_fans: totalFans\n });\n });\n return this.currentUserService.setProjects(projects);\n };\n\n LikeProjectButtonService.prototype._updateCurrentProject = function(isFan) {\n var project, totalFans;\n totalFans = this.projectService.project.get(\"total_fans\");\n if (isFan) {\n totalFans++;\n } else {\n totalFans--;\n }\n project = this.projectService.project.merge({\n is_fan: isFan,\n total_fans: totalFans\n });\n return this.projectService.setProject(project);\n };\n\n LikeProjectButtonService.prototype.like = function(projectId) {\n return this.rs.projects.likeProject(projectId).then((function(_this) {\n return function() {\n _this._updateProjects(projectId, true);\n return _this._updateCurrentProject(true);\n };\n })(this));\n };\n\n LikeProjectButtonService.prototype.unlike = function(projectId) {\n return this.rs.projects.unlikeProject(projectId).then((function(_this) {\n return function() {\n _this._updateProjects(projectId, false);\n return _this._updateCurrentProject(false);\n };\n })(this));\n };\n\n return LikeProjectButtonService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgLikeProjectButtonService\", LikeProjectButtonService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/sort-projects.directive.coffee\n */\n\n(function() {\n var SortProjectsDirective;\n\n SortProjectsDirective = function(currentUserService) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n var drake, itemEl, scroll;\n itemEl = null;\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).hasClass('list-itemtype-project');\n }\n });\n drake.on('dragend', function(item) {\n var i, index, len, project, sortData, sorted_project_ids, value;\n itemEl = $(item);\n project = itemEl.scope().project;\n index = itemEl.index();\n sorted_project_ids = _.map(scope.projects.toJS(), function(p) {\n return p.id;\n });\n sorted_project_ids = _.without(sorted_project_ids, project.get(\"id\"));\n sorted_project_ids.splice(index, 0, project.get('id'));\n sortData = [];\n for (index = i = 0, len = sorted_project_ids.length; i < len; index = ++i) {\n value = sorted_project_ids[index];\n sortData.push({\n \"project_id\": value,\n \"order\": index\n });\n }\n return currentUserService.bulkUpdateProjectsOrder(sortData);\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n directive = {\n scope: {\n projects: \"=tgSortProjects\"\n },\n link: link\n };\n return directive;\n };\n\n angular.module(\"taigaProjects\").directive(\"tgSortProjects\", [\"tgCurrentUserService\", SortProjectsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/watch-project-button/watch-project-button.controller.coffee\n */\n\n(function() {\n var WatchProjectButtonController;\n\n WatchProjectButtonController = (function() {\n WatchProjectButtonController.$inject = [\"$tgConfirm\", \"tgWatchProjectButtonService\"];\n\n function WatchProjectButtonController(confirm, watchButtonService) {\n this.confirm = confirm;\n this.watchButtonService = watchButtonService;\n this.showWatchOptions = false;\n this.loading = false;\n }\n\n WatchProjectButtonController.prototype.toggleWatcherOptions = function() {\n return this.showWatchOptions = !this.showWatchOptions;\n };\n\n WatchProjectButtonController.prototype.closeWatcherOptions = function() {\n return this.showWatchOptions = false;\n };\n\n WatchProjectButtonController.prototype.watch = function(notifyLevel) {\n if (notifyLevel === this.project.get('notify_level')) {\n return;\n }\n this.loading = true;\n this.closeWatcherOptions();\n return this.watchButtonService.watch(this.project.get('id'), notifyLevel)[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this))[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n };\n\n WatchProjectButtonController.prototype.unwatch = function() {\n this.loading = true;\n this.closeWatcherOptions();\n return this.watchButtonService.unwatch(this.project.get('id'))[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this))[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n };\n\n return WatchProjectButtonController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"WatchProjectButton\", WatchProjectButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/watch-project-button/watch-project-button.directive.coffee\n */\n\n(function() {\n var WatchProjectButtonDirective;\n\n WatchProjectButtonDirective = function() {\n return {\n scope: {},\n controller: \"WatchProjectButton\",\n bindToController: {\n project: \"=\"\n },\n controllerAs: \"vm\",\n templateUrl: \"projects/components/watch-project-button/watch-project-button.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgWatchProjectButton\", WatchProjectButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/watch-project-button/watch-project-button.service.coffee\n */\n\n(function() {\n var WatchProjectButtonService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n WatchProjectButtonService = (function(superClass) {\n extend(WatchProjectButtonService, superClass);\n\n WatchProjectButtonService.$inject = [\"tgResources\", \"tgCurrentUserService\", \"tgProjectService\"];\n\n function WatchProjectButtonService(rs, currentUserService, projectService) {\n this.rs = rs;\n this.currentUserService = currentUserService;\n this.projectService = projectService;\n }\n\n WatchProjectButtonService.prototype._getProjectIndex = function(projectId) {\n return this.currentUserService.projects.get('all').findIndex(function(project) {\n return project.get('id') === projectId;\n });\n };\n\n WatchProjectButtonService.prototype._updateProjects = function(projectId, notifyLevel, isWatcher) {\n var projectIndex, projects;\n projectIndex = this._getProjectIndex(projectId);\n if (projectIndex === -1) {\n return;\n }\n projects = this.currentUserService.projects.get('all').update(projectIndex, (function(_this) {\n return function(project) {\n var totalWatchers;\n totalWatchers = project.get('total_watchers');\n if (!_this.projectService.project.get('is_watcher') && isWatcher) {\n totalWatchers++;\n } else if (_this.projectService.project.get('is_watcher') && !isWatcher) {\n totalWatchers--;\n }\n return project.merge({\n is_watcher: isWatcher,\n total_watchers: totalWatchers,\n notify_level: notifyLevel\n });\n };\n })(this));\n return this.currentUserService.setProjects(projects);\n };\n\n WatchProjectButtonService.prototype._updateCurrentProject = function(notifyLevel, isWatcher) {\n var project, totalWatchers;\n totalWatchers = this.projectService.project.get(\"total_watchers\");\n if (!this.projectService.project.get('is_watcher') && isWatcher) {\n totalWatchers++;\n } else if (this.projectService.project.get('is_watcher') && !isWatcher) {\n totalWatchers--;\n }\n project = this.projectService.project.merge({\n is_watcher: isWatcher,\n notify_level: notifyLevel,\n total_watchers: totalWatchers\n });\n return this.projectService.setProject(project);\n };\n\n WatchProjectButtonService.prototype.watch = function(projectId, notifyLevel) {\n return this.rs.projects.watchProject(projectId, notifyLevel).then((function(_this) {\n return function() {\n _this._updateProjects(projectId, notifyLevel, true);\n return _this._updateCurrentProject(notifyLevel, true);\n };\n })(this));\n };\n\n WatchProjectButtonService.prototype.unwatch = function(projectId) {\n return this.rs.projects.unwatchProject(projectId).then((function(_this) {\n return function() {\n _this._updateProjects(projectId, null, false);\n return _this._updateCurrentProject(null, false);\n };\n })(this));\n };\n\n return WatchProjectButtonService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgWatchProjectButtonService\", WatchProjectButtonService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee\n */\n\n(function() {\n var AsanaImportProjectFormController;\n\n AsanaImportProjectFormController = (function() {\n AsanaImportProjectFormController.$inject = [\"tgCurrentUserService\"];\n\n function AsanaImportProjectFormController(currentUserService) {\n this.currentUserService = currentUserService;\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n this.projectForm = this.project.toJS();\n this.platformName = \"Asana\";\n this.projectForm.is_private = false;\n this.projectForm.keepExternalReference = false;\n this.projectForm.project_type = \"scrum\";\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n AsanaImportProjectFormController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size);\n };\n\n AsanaImportProjectFormController.prototype.saveForm = function() {\n return this.onSaveProjectDetails({\n project: Immutable.fromJS(this.projectForm)\n });\n };\n\n AsanaImportProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n AsanaImportProjectFormController.prototype.isDisabled = function() {\n return !this.canCreateProject();\n };\n\n return AsanaImportProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('AsanaImportProjectFormCtrl', AsanaImportProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee\n */\n\n(function() {\n var AsanaImportProjectFormDirective;\n\n AsanaImportProjectFormDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/asana-import/asana-import-project-form/asana-import-project-form.html\",\n controller: \"AsanaImportProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSaveProjectDetails: '&',\n onCancelForm: '&',\n fetchingUsers: '<'\n }\n };\n };\n\n AsanaImportProjectFormDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgAsanaImportProjectForm\", AsanaImportProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import.controller.coffee\n */\n\n(function() {\n var AsanaImportController;\n\n AsanaImportController = (function() {\n AsanaImportController.$inject = ['tgAsanaImportService', '$tgConfirm', '$translate', 'tgImportProjectService'];\n\n function AsanaImportController(asanaImportService, confirm, translate, importProjectService) {\n this.asanaImportService = asanaImportService;\n this.confirm = confirm;\n this.translate = translate;\n this.importProjectService = importProjectService;\n this.step = 'autorization-asana';\n this.project = null;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.asanaImportService.projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'members', (function(_this) {\n return function() {\n return _this.asanaImportService.projectUsers;\n };\n })(this));\n }\n\n AsanaImportController.prototype.startProjectSelector = function() {\n this.step = 'project-select-asana';\n return this.asanaImportService.fetchProjects();\n };\n\n AsanaImportController.prototype.onSelectProject = function(project) {\n this.step = 'project-form-asana';\n this.project = project;\n this.fetchingUsers = true;\n return this.asanaImportService.fetchUsers(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.fetchingUsers = false;\n };\n })(this));\n };\n\n AsanaImportController.prototype.onSaveProjectDetails = function(project) {\n this.project = project;\n return this.step = 'project-members-asana';\n };\n\n AsanaImportController.prototype.onCancelMemberSelection = function() {\n return this.step = 'project-form-asana';\n };\n\n AsanaImportController.prototype.startImport = function(users) {\n var loader, promise;\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n promise = this.asanaImportService.importProject(this.project.get('name'), this.project.get('description'), this.project.get('id'), users, this.project.get('keepExternalReference'), this.project.get('is_private'), this.project.get('project_type'));\n return this.importProjectService.importPromise(promise).then((function(_this) {\n return function() {\n return loader.stop();\n };\n })(this));\n };\n\n AsanaImportController.prototype.submitUserSelection = function(users) {\n this.startImport(users);\n return null;\n };\n\n return AsanaImportController;\n\n })();\n\n angular.module('taigaProjects').controller('AsanaImportCtrl', AsanaImportController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import.directive.coffee\n */\n\n(function() {\n var AsanaImportDirective;\n\n AsanaImportDirective = function() {\n return {\n link: function(scope, elm, attrs, ctrl) {\n return ctrl.startProjectSelector();\n },\n templateUrl: \"projects/create/asana-import/asana-import.html\",\n controller: \"AsanaImportCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancel: '&'\n }\n };\n };\n\n AsanaImportDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgAsanaImport\", AsanaImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import.service.coffee\n */\n\n(function() {\n var AsanaImportService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n AsanaImportService = (function(superClass) {\n extend(AsanaImportService, superClass);\n\n AsanaImportService.$inject = ['tgResources', '$location'];\n\n function AsanaImportService(resources, location) {\n this.resources = resources;\n this.location = location;\n this.projects = Immutable.List();\n this.projectUsers = Immutable.List();\n this.token = null;\n }\n\n AsanaImportService.prototype.setToken = function(token) {\n return this.token = token;\n };\n\n AsanaImportService.prototype.fetchProjects = function() {\n return this.resources.asanaImporter.listProjects(this.token).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n AsanaImportService.prototype.fetchUsers = function(projectId) {\n return this.resources.asanaImporter.listUsers(this.token, projectId).then((function(_this) {\n return function(users) {\n return _this.projectUsers = users;\n };\n })(this));\n };\n\n AsanaImportService.prototype.importProject = function(name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) {\n return this.resources.asanaImporter.importProject(this.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType);\n };\n\n AsanaImportService.prototype.getAuthUrl = function() {\n return new Promise((function(_this) {\n return function(resolve) {\n return _this.resources.asanaImporter.getAuthUrl().then(function(response) {\n _this.authUrl = response.data.url;\n return resolve(_this.authUrl);\n });\n };\n })(this));\n };\n\n AsanaImportService.prototype.authorize = function(code) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.asanaImporter.authorize(code).then((function(response) {\n _this.token = response.data.token;\n return resolve(_this.token);\n }), function(error) {\n return reject(new Error(error.status));\n });\n };\n })(this));\n };\n\n return AsanaImportService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgAsanaImportService\", AsanaImportService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project-form/create-project-form.controller.coffee\n */\n\n(function() {\n var CreatetProjectFormController;\n\n CreatetProjectFormController = (function() {\n CreatetProjectFormController.$inject = [\"tgCurrentUserService\", \"tgProjectsService\", \"$projectUrl\", \"$location\", \"$tgNavUrls\", \"$tgAnalytics\"];\n\n function CreatetProjectFormController(currentUserService, projectsService, projectUrl, location, navUrls, analytics) {\n this.currentUserService = currentUserService;\n this.projectsService = projectsService;\n this.projectUrl = projectUrl;\n this.location = location;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.projectForm = {\n is_private: false\n };\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n if (this.type === 'scrum') {\n this.projectForm.creation_template = 1;\n } else {\n this.projectForm.creation_template = 2;\n }\n }\n\n CreatetProjectFormController.prototype.submit = function() {\n this.formSubmitLoading = true;\n return this.projectsService.create(this.projectForm).then((function(_this) {\n return function(project) {\n _this.analytics.trackEvent(\"project\", \"create\", \"project creation\", {\n slug: project.get('slug'),\n id: project.get('id')\n });\n _this.location.url(_this.projectUrl.get(project));\n return _this.currentUserService.loadProjects();\n };\n })(this));\n };\n\n CreatetProjectFormController.prototype.onCancelForm = function() {\n return this.location.path(this.navUrls.resolve(\"create-project\"));\n };\n\n CreatetProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n CreatetProjectFormController.prototype.isDisabled = function() {\n return this.formSubmitLoading || !this.canCreateProject();\n };\n\n return CreatetProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('CreateProjectFormCtrl', CreatetProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project-form/create-project-form.directive.coffee\n */\n\n(function() {\n var CreateProjectFormDirective;\n\n CreateProjectFormDirective = function() {\n return {\n templateUrl: \"projects/create/create-project-form/create-project-form.html\",\n controller: \"CreateProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n type: '@'\n }\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgCreateProjectForm\", CreateProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project-members-restrictions/create-project-members-restrictions.directive.coffee\n */\n\n(function() {\n var createProjectMembersRestrictionsDirective, module;\n\n module = angular.module(\"taigaProject\");\n\n createProjectMembersRestrictionsDirective = function() {\n return {\n scope: {\n isPrivate: '=',\n limitMembersPrivateProject: '=',\n limitMembersPublicProject: '='\n },\n templateUrl: \"projects/create/create-project-members-restrictions/create-project-members-restrictions.html\"\n };\n };\n\n module.directive('tgCreateProjectMembersRestrictions', [createProjectMembersRestrictionsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project-restrictions/create-project-restrictions.directive.coffee\n */\n\n(function() {\n var createProjectRestrictionsDirective, module;\n\n module = angular.module(\"taigaProject\");\n\n createProjectRestrictionsDirective = function() {\n return {\n scope: {\n isPrivate: '=',\n canCreatePrivateProjects: '=',\n canCreatePublicProjects: '='\n },\n templateUrl: \"projects/create/create-project-restrictions/create-project-restrictions.html\"\n };\n };\n\n module.directive('tgCreateProjectRestrictions', [createProjectRestrictionsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project.controller.coffee\n */\n\n(function() {\n var CreateProjectController;\n\n CreateProjectController = (function() {\n CreateProjectController.$inject = [\"tgAppMetaService\", \"$translate\", \"tgProjectService\", \"$location\", \"$tgAuth\"];\n\n function CreateProjectController(appMetaService, translate, projectService, location, authService) {\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n this.location = location;\n this.authService = authService;\n taiga.defineImmutableProperty(this, \"project\", (function(_this) {\n return function() {\n return _this.projectService.project;\n };\n })(this));\n this.appMetaService.setfn(this._setMeta.bind(this));\n this.authService.refresh();\n this.displayScrumDesc = false;\n this.displayKanbanDesc = false;\n }\n\n CreateProjectController.prototype._setMeta = function() {\n var ctx;\n if (!this.project) {\n return null;\n }\n ctx = {\n projectName: this.project.get(\"name\")\n };\n return {\n title: this.translate.instant(\"PROJECT.PAGE_TITLE\", ctx),\n description: this.project.get(\"description\")\n };\n };\n\n CreateProjectController.prototype.displayHelp = function(type, $event) {\n $event.stopPropagation();\n $event.preventDefault();\n if (type === 'scrum') {\n this.displayScrumDesc = !this.displayScrumDesc;\n }\n if (type === 'kanban') {\n return this.displayKanbanDesc = !this.displayKanbanDesc;\n }\n };\n\n return CreateProjectController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"CreateProjectCtrl\", CreateProjectController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/duplicate/duplicate-project.controller.coffee\n */\n\n(function() {\n var DuplicateProjectController;\n\n DuplicateProjectController = (function() {\n DuplicateProjectController.$inject = [\"tgCurrentUserService\", \"tgProjectsService\", \"$tgLocation\", \"$tgNavUrls\"];\n\n function DuplicateProjectController(currentUserService, projectsService, location, navUrls) {\n this.currentUserService = currentUserService;\n this.projectsService = projectsService;\n this.location = location;\n this.navUrls = navUrls;\n this.user = this.currentUserService.getUser();\n this.members = Immutable.List();\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.currentUserService.projects.get(\"all\");\n };\n })(this));\n this.projectForm = {\n is_private: false\n };\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n DuplicateProjectController.prototype.refreshReferenceProject = function(slug) {\n return this.projectsService.getProjectBySlug(slug).then((function(_this) {\n return function(project) {\n _this.referenceProject = project;\n _this.members = project.get('members').filter(function(it) {\n return it.get('id') !== _this.user.get('id');\n });\n _this.invitedMembers = _this.members.map(function(it) {\n return it.get('id');\n });\n return _this.checkUsersLimit();\n };\n })(this));\n };\n\n DuplicateProjectController.prototype.toggleInvitedMember = function(member) {\n if (this.invitedMembers.includes(member)) {\n this.invitedMembers = this.invitedMembers.filter(function(it) {\n return it !== member;\n });\n } else {\n this.invitedMembers = this.invitedMembers.push(member);\n }\n return this.checkUsersLimit();\n };\n\n DuplicateProjectController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.invitedMembers.size + 1);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.invitedMembers.size + 1);\n };\n\n DuplicateProjectController.prototype.submit = function() {\n var data, projectId;\n projectId = this.referenceProject.get('id');\n data = this.projectForm;\n data.users = this.invitedMembers;\n this.formSubmitLoading = true;\n return this.projectsService.duplicate(projectId, data).then((function(_this) {\n return function(newProject) {\n _this.formSubmitLoading = false;\n _this.location.path(_this.navUrls.resolve(\"project\", {\n project: newProject.data.slug\n }));\n return _this.currentUserService.loadProjects();\n };\n })(this));\n };\n\n DuplicateProjectController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid && this.limitMembersPrivateProject.valid;\n } else {\n return this.canCreatePublicProjects.valid && this.limitMembersPublicProject.valid;\n }\n };\n\n DuplicateProjectController.prototype.isDisabled = function() {\n return this.formSubmitLoading || !this.canCreateProject();\n };\n\n DuplicateProjectController.prototype.onCancelForm = function() {\n return this.location.path(this.navUrls.resolve(\"create-project\"));\n };\n\n return DuplicateProjectController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"DuplicateProjectCtrl\", DuplicateProjectController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/duplicate/duplicate-project.directive.coffee\n */\n\n(function() {\n var DuplicateProjectDirective;\n\n DuplicateProjectDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {};\n return {\n link: link,\n templateUrl: \"projects/create/duplicate/duplicate-project.html\",\n controller: \"DuplicateProjectCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {}\n };\n };\n\n DuplicateProjectDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgDuplicateProject\", DuplicateProjectDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee\n */\n\n(function() {\n var GithubImportProjectFormController;\n\n GithubImportProjectFormController = (function() {\n GithubImportProjectFormController.$inject = [\"tgCurrentUserService\"];\n\n function GithubImportProjectFormController(currentUserService) {\n this.currentUserService = currentUserService;\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n this.projectForm = this.project.toJS();\n this.platformName = \"Github\";\n this.projectForm.is_private = false;\n this.projectForm.keepExternalReference = false;\n this.projectForm.project_type = \"kanban\";\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n GithubImportProjectFormController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size);\n };\n\n GithubImportProjectFormController.prototype.saveForm = function() {\n return this.onSaveProjectDetails({\n project: Immutable.fromJS(this.projectForm)\n });\n };\n\n GithubImportProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n GithubImportProjectFormController.prototype.isDisabled = function() {\n return !this.canCreateProject();\n };\n\n return GithubImportProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('GithubImportProjectFormCtrl', GithubImportProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee\n */\n\n(function() {\n var GithubImportProjectFormDirective;\n\n GithubImportProjectFormDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/github-import/github-import-project-form/github-import-project-form.html\",\n controller: \"GithubImportProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSaveProjectDetails: '&',\n onCancelForm: '&',\n fetchingUsers: '<'\n }\n };\n };\n\n GithubImportProjectFormDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgGithubImportProjectForm\", GithubImportProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import.controller.coffee\n */\n\n(function() {\n var GithubImportController;\n\n GithubImportController = (function() {\n GithubImportController.$inject = ['tgGithubImportService', '$tgConfirm', '$translate', 'tgImportProjectService'];\n\n function GithubImportController(githubImportService, confirm, translate, importProjectService) {\n this.githubImportService = githubImportService;\n this.confirm = confirm;\n this.translate = translate;\n this.importProjectService = importProjectService;\n this.step = 'autorization-github';\n this.project = null;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.githubImportService.projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'members', (function(_this) {\n return function() {\n return _this.githubImportService.projectUsers;\n };\n })(this));\n }\n\n GithubImportController.prototype.startProjectSelector = function() {\n this.step = 'project-select-github';\n return this.githubImportService.fetchProjects();\n };\n\n GithubImportController.prototype.onSelectProject = function(project) {\n this.step = 'project-form-github';\n this.project = project;\n this.fetchingUsers = true;\n return this.githubImportService.fetchUsers(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.fetchingUsers = false;\n };\n })(this));\n };\n\n GithubImportController.prototype.onSaveProjectDetails = function(project) {\n this.project = project;\n return this.step = 'project-members-github';\n };\n\n GithubImportController.prototype.onCancelMemberSelection = function() {\n return this.step = 'project-form-github';\n };\n\n GithubImportController.prototype.startImport = function(users) {\n var loader, promise;\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n promise = this.githubImportService.importProject(this.project.get('name'), this.project.get('description'), this.project.get('id'), users, this.project.get('keepExternalReference'), this.project.get('is_private'), this.project.get('project_type'));\n return this.importProjectService.importPromise(promise).then((function(_this) {\n return function() {\n return loader.stop();\n };\n })(this));\n };\n\n GithubImportController.prototype.submitUserSelection = function(users) {\n this.startImport(users);\n return null;\n };\n\n return GithubImportController;\n\n })();\n\n angular.module('taigaProjects').controller('GithubImportCtrl', GithubImportController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import.directive.coffee\n */\n\n(function() {\n var GithubImportDirective;\n\n GithubImportDirective = function() {\n return {\n link: function(scope, elm, attrs, ctrl) {\n return ctrl.startProjectSelector();\n },\n templateUrl: \"projects/create/github-import/github-import.html\",\n controller: \"GithubImportCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancel: '&'\n }\n };\n };\n\n GithubImportDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgGithubImport\", GithubImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import.service.coffee\n */\n\n(function() {\n var GithubImportService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n GithubImportService = (function(superClass) {\n extend(GithubImportService, superClass);\n\n GithubImportService.$inject = ['tgResources'];\n\n function GithubImportService(resources, location) {\n this.resources = resources;\n this.location = location;\n this.projects = Immutable.List();\n this.projectUsers = Immutable.List();\n }\n\n GithubImportService.prototype.setToken = function(token) {\n return this.token = token;\n };\n\n GithubImportService.prototype.fetchProjects = function() {\n return this.resources.githubImporter.listProjects(this.token).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n GithubImportService.prototype.fetchUsers = function(projectId) {\n return this.resources.githubImporter.listUsers(this.token, projectId).then((function(_this) {\n return function(users) {\n return _this.projectUsers = users;\n };\n })(this));\n };\n\n GithubImportService.prototype.importProject = function(name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) {\n return this.resources.githubImporter.importProject(this.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType);\n };\n\n GithubImportService.prototype.getAuthUrl = function(callbackUri) {\n return new Promise((function(_this) {\n return function(resolve) {\n return _this.resources.githubImporter.getAuthUrl(callbackUri).then(function(response) {\n _this.authUrl = response.data.url;\n return resolve(_this.authUrl);\n });\n };\n })(this));\n };\n\n GithubImportService.prototype.authorize = function(code) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.githubImporter.authorize(code).then((function(response) {\n _this.token = response.data.token;\n return resolve(_this.token);\n }), function(error) {\n return reject(new Error(error.status));\n });\n };\n })(this));\n };\n\n return GithubImportService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgGithubImportService\", GithubImportService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-project-members/import-project-members.controller.coffee\n */\n\n(function() {\n var ImportProjectMembersController;\n\n ImportProjectMembersController = (function() {\n ImportProjectMembersController.$inject = ['tgCurrentUserService', 'tgUserService'];\n\n function ImportProjectMembersController(currentUserService, userService) {\n this.currentUserService = currentUserService;\n this.userService = userService;\n this.selectImportUserLightbox = false;\n this.warningImportUsers = false;\n this.displayEmailSelector = true;\n this.cancelledUsers = Immutable.List();\n this.selectedUsers = Immutable.List();\n this.selectableUsers = Immutable.List();\n this.userContacts = Immutable.List();\n }\n\n ImportProjectMembersController.prototype.fetchUser = function() {\n this.currentUser = this.currentUserService.getUser();\n return this.userService.getContacts(this.currentUser.get('id')).then((function(_this) {\n return function(userContacts) {\n _this.userContacts = userContacts;\n return _this.refreshSelectableUsers();\n };\n })(this));\n };\n\n ImportProjectMembersController.prototype.searchUser = function(user) {\n this.selectImportUserLightbox = true;\n return this.searchingUser = user;\n };\n\n ImportProjectMembersController.prototype.beforeSubmitUsers = function() {\n if (this.selectedUsers.size !== this.members.size) {\n return this.warningImportUsers = true;\n } else {\n return this.submit();\n }\n };\n\n ImportProjectMembersController.prototype.confirmUser = function(externalUser, taigaUser) {\n var user;\n this.selectImportUserLightbox = false;\n user = Immutable.Map();\n user = user.set('user', externalUser);\n user = user.set('taigaUser', taigaUser);\n this.selectedUsers = this.selectedUsers.push(user);\n this.discardSuggestedUser(externalUser);\n return this.refreshSelectableUsers();\n };\n\n ImportProjectMembersController.prototype.unselectUser = function(user) {\n var index;\n index = this.selectedUsers.findIndex(function(it) {\n return it.getIn(['user', 'id']) === user.get('id');\n });\n this.selectedUsers = this.selectedUsers[\"delete\"](index);\n return this.refreshSelectableUsers();\n };\n\n ImportProjectMembersController.prototype.discardSuggestedUser = function(member) {\n return this.cancelledUsers = this.cancelledUsers.push(member.get('id'));\n };\n\n ImportProjectMembersController.prototype.getSelectedMember = function(member) {\n return this.selectedUsers.find(function(it) {\n return it.getIn(['user', 'id']) === member.get('id');\n });\n };\n\n ImportProjectMembersController.prototype.isMemberSelected = function(member) {\n return !!this.getSelectedMember(member);\n };\n\n ImportProjectMembersController.prototype.getUser = function(user) {\n var userSelected;\n userSelected = this.getSelectedMember(user);\n if (userSelected) {\n return userSelected.get('taigaUser');\n } else {\n return null;\n }\n };\n\n ImportProjectMembersController.prototype.submit = function() {\n var users;\n this.warningImportUsers = false;\n users = Immutable.Map();\n this.selectedUsers.map(function(it) {\n var id;\n id = '';\n if (_.isString(it.get('taigaUser'))) {\n id = it.get('taigaUser');\n } else {\n id = it.getIn(['taigaUser', 'id']);\n }\n return users = users.set(it.getIn(['user', 'id']), id);\n });\n return this.onSubmit({\n users: users\n });\n };\n\n ImportProjectMembersController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size + 1);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size + 1);\n };\n\n ImportProjectMembersController.prototype.showSuggestedMatch = function(member) {\n return member.get('user') && this.cancelledUsers.indexOf(member.get('id')) === -1 && !this.isMemberSelected(member);\n };\n\n ImportProjectMembersController.prototype.getDistinctSelectedTaigaUsers = function() {\n var ids, users;\n ids = [];\n users = this.selectedUsers.filter(function(it) {\n var id;\n id = it.getIn(['taigaUser', 'id']);\n if (ids.indexOf(id) === -1) {\n ids.push(id);\n return true;\n }\n return false;\n });\n return users.filter((function(_this) {\n return function(it) {\n return it.getIn(['taigaUser', 'id']) !== _this.currentUser.get('id');\n };\n })(this));\n };\n\n ImportProjectMembersController.prototype.refreshSelectableUsers = function() {\n var users;\n this.importMoreUsersDisabled = this.isImportMoreUsersDisabled();\n if (this.importMoreUsersDisabled) {\n users = this.getDistinctSelectedTaigaUsers();\n this.selectableUsers = users.map(function(it) {\n return it.get('taigaUser');\n });\n this.displayEmailSelector = false;\n } else {\n this.selectableUsers = this.userContacts;\n this.displayEmailSelector = true;\n }\n return this.selectableUsers = this.selectableUsers.push(this.currentUser);\n };\n\n ImportProjectMembersController.prototype.isImportMoreUsersDisabled = function() {\n var total, users;\n users = this.getDistinctSelectedTaigaUsers();\n total = users.size + 2;\n if (this.project.get('is_private')) {\n return !this.currentUserService.canAddMembersPrivateProject(total).valid;\n } else {\n return !this.currentUserService.canAddMembersPublicProject(total).valid;\n }\n };\n\n return ImportProjectMembersController;\n\n })();\n\n angular.module('taigaProjects').controller('ImportProjectMembersCtrl', ImportProjectMembersController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-project-members/import-project-members.directive.coffee\n */\n\n(function() {\n var ImportProjectMembersDirective;\n\n ImportProjectMembersDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n ctrl.fetchUser();\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/import-project-members/import-project-members.html\",\n controller: \"ImportProjectMembersCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSubmit: '&',\n platform: '@',\n logo: '@',\n onCancel: '&'\n }\n };\n };\n\n ImportProjectMembersDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgImportProjectMembers\", ImportProjectMembersDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-project-selector/import-project-selector.controller.coffee\n */\n\n(function() {\n var ImportProjectSelectorController;\n\n ImportProjectSelectorController = (function() {\n function ImportProjectSelectorController() {}\n\n ImportProjectSelectorController.prototype.selectProject = function(project) {\n return this.onSelectProject({\n project: Immutable.fromJS(project)\n });\n };\n\n return ImportProjectSelectorController;\n\n })();\n\n angular.module('taigaProjects').controller('ImportProjectSelectorCtrl', ImportProjectSelectorController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-project-selector/import-project-selector.directive.coffee\n */\n\n(function() {\n var ImportProjectSelectorDirective;\n\n ImportProjectSelectorDirective = function() {\n return {\n templateUrl: \"projects/create/import-project-selector/import-project-selector.html\",\n controller: \"ImportProjectSelectorCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n projects: '<',\n onCancel: '&',\n onSelectProject: '&',\n logo: '@',\n noProjectsMsg: '@',\n search: '@'\n }\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgImportProjectSelector\", ImportProjectSelectorDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-taiga/import-taiga.controller.coffee\n */\n\n(function() {\n var ImportTaigaController;\n\n ImportTaigaController = (function() {\n ImportTaigaController.$inject = ['$tgConfirm', '$tgResources', 'tgImportProjectService', '$translate', '$tgAnalytics'];\n\n function ImportTaigaController(confirm, rs, importProjectService, translate, analytics) {\n this.confirm = confirm;\n this.rs = rs;\n this.importProjectService = importProjectService;\n this.translate = translate;\n this.analytics = analytics;\n }\n\n ImportTaigaController.prototype.importTaiga = function(files) {\n var file, loader, promise;\n this.analytics.trackEvent(\"import\", \"taiga\", \"Start import from taiga\", 1);\n file = files[0];\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n promise = this.rs.projects[\"import\"](file, loader.update);\n this.importProjectService.importPromise(promise)[\"finally\"](function() {\n return loader.stop();\n });\n };\n\n return ImportTaigaController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ImportTaigaCtrl\", ImportTaigaController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-taiga/import-taiga.directive.coffee\n */\n\n(function() {\n var ImportTaigaDirective;\n\n ImportTaigaDirective = function() {\n return {\n templateUrl: \"projects/create/import-taiga/import-taiga.html\",\n controller: \"ImportTaigaCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {}\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgImportTaiga\", ImportTaigaDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import/import-project-error-lb.directive.coffee\n */\n\n(function() {\n var LbImportErrorDirective;\n\n LbImportErrorDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs) {\n lightboxService.open(el);\n return scope.close = function() {\n lightboxService.close(el);\n };\n };\n return {\n templateUrl: \"projects/create/import/import-project-error-lb.html\",\n link: link\n };\n };\n\n LbImportErrorDirective.$inject = [\"lightboxService\"];\n\n angular.module(\"taigaProjects\").directive(\"tgLbImportError\", LbImportErrorDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import/import-project.controller.coffee\n */\n\n(function() {\n var ImportProjectController;\n\n ImportProjectController = (function() {\n ImportProjectController.$inject = ['tgTrelloImportService', 'tgJiraImportService', 'tgGithubImportService', 'tgAsanaImportService', '$location', '$window', '$routeParams', '$tgNavUrls', '$tgConfig', '$tgConfirm', '$tgAnalytics'];\n\n function ImportProjectController(trelloService, jiraService, githubService, asanaService, location, window, routeParams, tgNavUrls, config, confirm, analytics) {\n this.trelloService = trelloService;\n this.jiraService = jiraService;\n this.githubService = githubService;\n this.asanaService = asanaService;\n this.location = location;\n this.window = window;\n this.routeParams = routeParams;\n this.tgNavUrls = tgNavUrls;\n this.config = config;\n this.confirm = confirm;\n this.analytics = analytics;\n }\n\n ImportProjectController.prototype.start = function() {\n var asanaOauthToken, githubOauthToken, jiraOauthToken, jiraOauthVerifier, locationSearch, trelloOauthToken;\n this.token = null;\n this.from = this.routeParams.platform;\n locationSearch = this.location.search();\n if (this.from) {\n this.analytics.trackEvent(\"import\", this.from, \"Start import from \" + this.from, 1);\n }\n if (this.from === \"asana\") {\n asanaOauthToken = locationSearch.code;\n if (locationSearch.code) {\n asanaOauthToken = locationSearch.code;\n return this.asanaService.authorize(asanaOauthToken).then(((function(_this) {\n return function(token) {\n return _this.location.search({\n token: encodeURIComponent(JSON.stringify(token))\n });\n };\n })(this)), this.cancelCurrentImport.bind(this));\n } else {\n this.token = JSON.parse(decodeURIComponent(locationSearch.token));\n this.asanaService.setToken(this.token);\n }\n }\n if (this.from === 'trello') {\n if (locationSearch.oauth_verifier) {\n trelloOauthToken = locationSearch.oauth_verifier;\n return this.trelloService.authorize(trelloOauthToken).then(((function(_this) {\n return function(token) {\n return _this.location.search({\n token: token\n });\n };\n })(this)), this.cancelCurrentImport.bind(this));\n } else if (locationSearch.token) {\n this.token = locationSearch.token;\n this.trelloService.setToken(locationSearch.token);\n }\n }\n if (this.from === \"github\") {\n if (locationSearch.code) {\n githubOauthToken = locationSearch.code;\n return this.githubService.authorize(githubOauthToken).then(((function(_this) {\n return function(token) {\n return _this.location.search({\n token: token\n });\n };\n })(this)), this.cancelCurrentImport.bind(this));\n } else if (locationSearch.token) {\n this.token = locationSearch.token;\n this.githubService.setToken(locationSearch.token);\n }\n }\n if (this.from === \"jira\") {\n jiraOauthToken = locationSearch.oauth_token;\n if (jiraOauthToken) {\n jiraOauthVerifier = locationSearch.oauth_verifier;\n return this.jiraService.authorize(jiraOauthVerifier).then(((function(_this) {\n return function(data) {\n return _this.location.search({\n token: data.token,\n url: data.url\n });\n };\n })(this)), this.cancelCurrentImport.bind(this));\n } else {\n this.token = locationSearch.token;\n return this.jiraService.setToken(locationSearch.token, locationSearch.url);\n }\n }\n };\n\n ImportProjectController.prototype.select = function(from) {\n var callbackUri;\n if (from === \"trello\") {\n return this.trelloService.getAuthUrl().then((function(_this) {\n return function(url) {\n return _this.window.open(url, \"_self\");\n };\n })(this));\n } else if (from === \"jira\") {\n return this.jiraService.getAuthUrl(this.jiraUrl).then((function(_this) {\n return function(url) {\n return _this.window.open(url, \"_self\");\n };\n })(this), (function(_this) {\n return function(err) {\n return _this.confirm.notify('error', err);\n };\n })(this));\n } else if (from === \"github\") {\n callbackUri = this.location.absUrl() + \"/github\";\n return this.githubService.getAuthUrl(callbackUri).then((function(_this) {\n return function(url) {\n return _this.window.open(url, \"_self\");\n };\n })(this));\n } else if (from === \"asana\") {\n return this.asanaService.getAuthUrl().then((function(_this) {\n return function(url) {\n return _this.window.open(url, \"_self\");\n };\n })(this));\n } else {\n return this.from = from;\n }\n };\n\n ImportProjectController.prototype.unfoldOptions = function(options) {\n return this.unfoldedOptions = options;\n };\n\n ImportProjectController.prototype.isActiveImporter = function(importer) {\n if (this.config.get('importers').indexOf(importer) === -1) {\n return false;\n }\n return true;\n };\n\n ImportProjectController.prototype.cancelCurrentImport = function() {\n return this.location.url(this.tgNavUrls.resolve('create-project-import'));\n };\n\n ImportProjectController.prototype.backToCreate = function() {\n return this.location.url(this.tgNavUrls.resolve('create-project'));\n };\n\n return ImportProjectController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ImportProjectCtrl\", ImportProjectController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import/import-project.directive.coffee\n */\n\n(function() {\n var ImportProjectDirective;\n\n ImportProjectDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {\n return ctrl.start();\n };\n return {\n link: link,\n templateUrl: \"projects/create/import/import-project.html\",\n controller: \"ImportProjectCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancelImport: '&'\n }\n };\n };\n\n ImportProjectDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgImportProject\", ImportProjectDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import/import-project.service.coffee\n */\n\n(function() {\n var ImportProjectService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n ImportProjectService = (function(superClass) {\n extend(ImportProjectService, superClass);\n\n ImportProjectService.$inject = ['tgCurrentUserService', '$tgAuth', 'tgLightboxFactory', '$translate', '$tgConfirm', '$location', '$tgNavUrls'];\n\n function ImportProjectService(currentUserService, tgAuth, lightboxFactory, translate, confirm, location, tgNavUrls) {\n this.currentUserService = currentUserService;\n this.tgAuth = tgAuth;\n this.lightboxFactory = lightboxFactory;\n this.translate = translate;\n this.confirm = confirm;\n this.location = location;\n this.tgNavUrls = tgNavUrls;\n }\n\n ImportProjectService.prototype.importPromise = function(promise) {\n return promise.then(this.importSuccess.bind(this), this.importError.bind(this));\n };\n\n ImportProjectService.prototype.importSuccess = function(result) {\n var promise;\n promise = this.currentUserService.loadProjects();\n promise.then((function(_this) {\n return function() {\n var ctx, message, msg, title;\n if (result.status === 202) {\n title = _this.translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE');\n message = _this.translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE');\n _this.location.path(_this.tgNavUrls.resolve('home'));\n return _this.confirm.success(title, message);\n } else {\n ctx = {\n project: result.data.slug\n };\n _this.location.path(_this.tgNavUrls.resolve('project-admin-project-profile-details', ctx));\n msg = _this.translate.instant('PROJECT.IMPORT.SYNC_SUCCESS');\n return _this.confirm.notify('success', msg);\n }\n };\n })(this));\n return promise;\n };\n\n ImportProjectService.prototype.importError = function(result) {\n var promise;\n promise = this.tgAuth.refresh();\n promise.then((function(_this) {\n return function() {\n var errorMsg, ref, restrictionError;\n restrictionError = _this.getRestrictionError(result);\n if (restrictionError) {\n return _this.lightboxFactory.create('tg-lb-import-error', {\n \"class\": 'lightbox lightbox-import-error'\n }, restrictionError);\n } else {\n errorMsg = _this.translate.instant(\"PROJECT.IMPORT.ERROR\");\n if (result.status === 429) {\n errorMsg = _this.translate.instant(\"PROJECT.IMPORT.ERROR_TOO_MANY_REQUEST\");\n } else if ((ref = result.data) != null ? ref._error_message : void 0) {\n errorMsg = _this.translate.instant(\"PROJECT.IMPORT.ERROR_MESSAGE\", {\n error_message: result.data._error_message\n });\n }\n return _this.confirm.notify(\"error\", errorMsg);\n }\n };\n })(this));\n return promise;\n };\n\n ImportProjectService.prototype.getRestrictionError = function(result) {\n var errorKey, maxMemberships, membersError, privateError, publicError, user;\n if (result.headers) {\n errorKey = '';\n user = this.currentUserService.getUser();\n maxMemberships = null;\n if (result.headers.isPrivate) {\n privateError = !this.currentUserService.canCreatePrivateProjects().valid;\n if (user.get('max_memberships_private_projects') !== null && result.headers.memberships >= user.get('max_memberships_private_projects')) {\n membersError = true;\n } else {\n membersError = false;\n }\n if (privateError && membersError) {\n errorKey = 'private-space-members';\n maxMemberships = user.get('max_memberships_private_projects');\n } else if (privateError) {\n errorKey = 'private-space';\n } else if (membersError) {\n errorKey = 'private-members';\n maxMemberships = user.get('max_memberships_private_projects');\n }\n } else {\n publicError = !this.currentUserService.canCreatePublicProjects().valid;\n if (user.get('max_memberships_public_projects') !== null && result.headers.memberships >= user.get('max_memberships_public_projects')) {\n membersError = true;\n } else {\n membersError = false;\n }\n if (publicError && membersError) {\n errorKey = 'public-space-members';\n maxMemberships = user.get('max_memberships_public_projects');\n } else if (publicError) {\n errorKey = 'public-space';\n } else if (membersError) {\n errorKey = 'public-members';\n maxMemberships = user.get('max_memberships_public_projects');\n }\n }\n if (!errorKey) {\n return false;\n }\n return {\n key: errorKey,\n values: {\n max_memberships: maxMemberships,\n members: result.headers.memberships\n }\n };\n } else {\n return false;\n }\n };\n\n return ImportProjectService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgImportProjectService\", ImportProjectService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/invite-members/invite-members.controller.coffee\n */\n\n(function() {\n var InviteMembersController;\n\n InviteMembersController = (function() {\n function InviteMembersController() {}\n\n InviteMembersController.$inject = [];\n\n InviteMembersController.prototype.isDisabled = function(id) {\n return this.invitedMembers.indexOf(id) === -1;\n };\n\n return InviteMembersController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"InviteMembersCtrl\", InviteMembersController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/invite-members/invite-members.directive.coffee\n */\n\n(function() {\n var InviteMembersDirective;\n\n InviteMembersDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {};\n return {\n link: link,\n templateUrl: \"projects/create/invite-members/invite-members.html\",\n controller: \"InviteMembersCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n invitedMembers: '<',\n members: '<',\n onToggleInvitedMember: '&'\n }\n };\n };\n\n InviteMembersDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgInviteMembers\", InviteMembersDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/invite-members/single-member/single-member.directive.coffee\n */\n\n(function() {\n var SingleMemberDirective;\n\n SingleMemberDirective = function() {\n return {\n templateUrl: \"projects/create/invite-members/single-member/single-member.html\",\n scope: {\n disabled: \"<\",\n avatar: \"=\"\n }\n };\n };\n\n SingleMemberDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgSingleMember\", SingleMemberDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee\n */\n\n(function() {\n var JiraImportProjectFormController;\n\n JiraImportProjectFormController = (function() {\n JiraImportProjectFormController.$inject = [\"tgCurrentUserService\"];\n\n function JiraImportProjectFormController(currentUserService) {\n this.currentUserService = currentUserService;\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n this.projectForm = this.project.toJS();\n this.projectForm.is_private = false;\n this.projectForm.keepExternalReference = false;\n if (this.projectForm.importer_type === \"agile\") {\n this.projectForm.project_type = null;\n } else {\n this.projectForm.project_type = \"scrum\";\n }\n this.projectForm.create_subissues = true;\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n JiraImportProjectFormController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size);\n };\n\n JiraImportProjectFormController.prototype.saveForm = function() {\n return this.onSaveProjectDetails({\n project: Immutable.fromJS(this.projectForm)\n });\n };\n\n JiraImportProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n JiraImportProjectFormController.prototype.isDisabled = function() {\n return !this.canCreateProject();\n };\n\n return JiraImportProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('JiraImportProjectFormCtrl', JiraImportProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee\n */\n\n(function() {\n var JiraImportProjectFormDirective;\n\n JiraImportProjectFormDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/jira-import/jira-import-project-form/jira-import-project-form.html\",\n controller: \"JiraImportProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSaveProjectDetails: '&',\n onCancelForm: '&',\n fetchingUsers: '<'\n }\n };\n };\n\n JiraImportProjectFormDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgJiraImportProjectForm\", JiraImportProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import.controller.coffee\n */\n\n(function() {\n var JiraImportController;\n\n JiraImportController = (function() {\n JiraImportController.$inject = ['tgJiraImportService', '$tgConfirm', '$translate', 'tgImportProjectService'];\n\n function JiraImportController(jiraImportService, confirm, translate, importProjectService) {\n this.jiraImportService = jiraImportService;\n this.confirm = confirm;\n this.translate = translate;\n this.importProjectService = importProjectService;\n this.step = 'autorization-jira';\n this.project = null;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.jiraImportService.projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'members', (function(_this) {\n return function() {\n return _this.jiraImportService.projectUsers;\n };\n })(this));\n }\n\n JiraImportController.prototype.startProjectSelector = function() {\n this.step = 'project-select-jira';\n return this.jiraImportService.fetchProjects();\n };\n\n JiraImportController.prototype.onSelectProject = function(project) {\n this.step = 'project-form-jira';\n this.project = project;\n this.fetchingUsers = true;\n return this.jiraImportService.fetchUsers(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.fetchingUsers = false;\n };\n })(this));\n };\n\n JiraImportController.prototype.onSaveProjectDetails = function(project) {\n this.project = project;\n return this.step = 'project-members-jira';\n };\n\n JiraImportController.prototype.onCancelMemberSelection = function() {\n return this.step = 'project-form-jira';\n };\n\n JiraImportController.prototype.startImport = function(users) {\n var loader, projectType, promise;\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n projectType = this.project.get('project_type');\n if (projectType === \"issues\" && this.project.get('create_subissues')) {\n projectType = \"issues-with-subissues\";\n }\n promise = this.jiraImportService.importProject(this.project.get('name'), this.project.get('description'), this.project.get('id'), users, this.project.get('keepExternalReference'), this.project.get('is_private'), projectType, this.project.get('importer_type'));\n return this.importProjectService.importPromise(promise).then((function(_this) {\n return function() {\n return loader.stop();\n };\n })(this));\n };\n\n JiraImportController.prototype.submitUserSelection = function(users) {\n this.startImport(users);\n return null;\n };\n\n return JiraImportController;\n\n })();\n\n angular.module('taigaProjects').controller('JiraImportCtrl', JiraImportController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import.directive.coffee\n */\n\n(function() {\n var JiraImportDirective;\n\n JiraImportDirective = function() {\n return {\n link: function(scope, elm, attrs, ctrl) {\n return ctrl.startProjectSelector();\n },\n templateUrl: \"projects/create/jira-import/jira-import.html\",\n controller: \"JiraImportCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancel: '&'\n }\n };\n };\n\n JiraImportDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgJiraImport\", JiraImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import.service.coffee\n */\n\n(function() {\n var JiraImportService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n JiraImportService = (function(superClass) {\n extend(JiraImportService, superClass);\n\n JiraImportService.$inject = ['tgResources', '$location'];\n\n function JiraImportService(resources, location) {\n this.resources = resources;\n this.location = location;\n this.projects = Immutable.List();\n this.projectUsers = Immutable.List();\n }\n\n JiraImportService.prototype.setToken = function(token, url) {\n this.token = token;\n return this.url = url;\n };\n\n JiraImportService.prototype.fetchProjects = function() {\n return this.resources.jiraImporter.listProjects(this.url, this.token).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n JiraImportService.prototype.fetchUsers = function(projectId) {\n return this.resources.jiraImporter.listUsers(this.url, this.token, projectId).then((function(_this) {\n return function(users) {\n return _this.projectUsers = users;\n };\n })(this));\n };\n\n JiraImportService.prototype.importProject = function(name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType) {\n return this.resources.jiraImporter.importProject(this.url, this.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType);\n };\n\n JiraImportService.prototype.getAuthUrl = function(url) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.jiraImporter.getAuthUrl(url).then(function(response) {\n _this.authUrl = response.data.url;\n return resolve(_this.authUrl);\n }, function(err) {\n return reject(err.data._error_message);\n });\n };\n })(this));\n };\n\n JiraImportService.prototype.authorize = function(oauth_verifier) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.jiraImporter.authorize(oauth_verifier).then((function(response) {\n _this.token = response.data.token;\n _this.url = response.data.url;\n return resolve(response.data);\n }), function(error) {\n return reject(new Error(error.status));\n });\n };\n })(this));\n };\n\n return JiraImportService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgJiraImportService\", JiraImportService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee\n */\n\n(function() {\n var SelectImportUserLightboxCtrl;\n\n SelectImportUserLightboxCtrl = (function() {\n SelectImportUserLightboxCtrl.$inject = [];\n\n function SelectImportUserLightboxCtrl() {}\n\n SelectImportUserLightboxCtrl.prototype.start = function() {\n this.mode = 'search';\n return this.invalid = false;\n };\n\n SelectImportUserLightboxCtrl.prototype.assignUser = function() {\n return this.onSelectUser({\n user: this.user,\n taigaUser: this.userEmail\n });\n };\n\n SelectImportUserLightboxCtrl.prototype.selectUser = function(taigaUser) {\n return this.onSelectUser({\n user: this.user,\n taigaUser: Immutable.fromJS(taigaUser)\n });\n };\n\n return SelectImportUserLightboxCtrl;\n\n })();\n\n angular.module('taigaProjects').controller('SelectImportUserLightboxCtrl', SelectImportUserLightboxCtrl);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee\n */\n\n(function() {\n var SelectImportUserLightboxDirective;\n\n SelectImportUserLightboxDirective = function(lightboxService, lightboxKeyboardNavigationService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return scope.$watch('vm.visible', function(visible) {\n if (visible && !el.hasClass('open')) {\n ctrl.start();\n return lightboxService.open(el, null, scope.vm.onClose).then(function() {\n el.find('input').focus();\n return lightboxKeyboardNavigationService.init(el);\n });\n } else if (!visible && el.hasClass('open')) {\n return lightboxService.close(el).then(function() {\n ctrl.userEmail = '';\n return ctrl.usersSearch = '';\n });\n }\n });\n };\n return {\n controller: \"SelectImportUserLightboxCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n user: '<',\n visible: '<',\n onClose: '&',\n onSelectUser: '&',\n selectableUsers: '<',\n isPrivate: '<',\n limitMembersPrivateProject: '<',\n limitMembersPublicProject: '<',\n displayEmailSelector: '<'\n },\n templateUrl: 'projects/create/select-import-user-lightbox/select-import-user-lightbox.html',\n link: link\n };\n };\n\n SelectImportUserLightboxDirective.$inject = ['lightboxService', 'lightboxKeyboardNavigationService'];\n\n angular.module(\"taigaProjects\").directive(\"tgSelectImportUserLightbox\", SelectImportUserLightboxDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee\n */\n\n(function() {\n var TrelloImportProjectFormController;\n\n TrelloImportProjectFormController = (function() {\n TrelloImportProjectFormController.$inject = [\"tgCurrentUserService\"];\n\n function TrelloImportProjectFormController(currentUserService) {\n this.currentUserService = currentUserService;\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n this.projectForm = this.project.toJS();\n this.platformName = \"Trello\";\n this.projectForm.is_private = false;\n this.projectForm.keepExternalReference = false;\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n TrelloImportProjectFormController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size);\n };\n\n TrelloImportProjectFormController.prototype.saveForm = function() {\n return this.onSaveProjectDetails({\n project: Immutable.fromJS(this.projectForm)\n });\n };\n\n TrelloImportProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n TrelloImportProjectFormController.prototype.isDisabled = function() {\n return !this.canCreateProject();\n };\n\n return TrelloImportProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('TrelloImportProjectFormCtrl', TrelloImportProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee\n */\n\n(function() {\n var TrelloImportProjectFormDirective;\n\n TrelloImportProjectFormDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/trello-import/trello-import-project-form/trello-import-project-form.html\",\n controller: \"TrelloImportProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSaveProjectDetails: '&',\n onCancelForm: '&',\n fetchingUsers: '<'\n }\n };\n };\n\n TrelloImportProjectFormDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgTrelloImportProjectForm\", TrelloImportProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import.controller.coffee\n */\n\n(function() {\n var TrelloImportController;\n\n TrelloImportController = (function() {\n TrelloImportController.$inject = ['tgTrelloImportService', '$tgConfirm', '$translate', 'tgImportProjectService'];\n\n function TrelloImportController(trelloImportService, confirm, translate, importProjectService) {\n this.trelloImportService = trelloImportService;\n this.confirm = confirm;\n this.translate = translate;\n this.importProjectService = importProjectService;\n this.project = null;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.trelloImportService.projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'members', (function(_this) {\n return function() {\n return _this.trelloImportService.projectUsers;\n };\n })(this));\n }\n\n TrelloImportController.prototype.startProjectSelector = function() {\n return this.trelloImportService.fetchProjects().then((function(_this) {\n return function() {\n return _this.step = 'project-select-trello';\n };\n })(this));\n };\n\n TrelloImportController.prototype.onSelectProject = function(project) {\n this.step = 'project-form-trello';\n this.project = project;\n this.fetchingUsers = true;\n return this.trelloImportService.fetchUsers(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.fetchingUsers = false;\n };\n })(this));\n };\n\n TrelloImportController.prototype.onSaveProjectDetails = function(project) {\n this.project = project;\n return this.step = 'project-members-trello';\n };\n\n TrelloImportController.prototype.onCancelMemberSelection = function() {\n return this.step = 'project-form-trello';\n };\n\n TrelloImportController.prototype.startImport = function(users) {\n var loader, promise;\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n promise = this.trelloImportService.importProject(this.project.get('name'), this.project.get('description'), this.project.get('id'), users, this.project.get('keepExternalReference'), this.project.get('is_private'));\n return this.importProjectService.importPromise(promise).then((function(_this) {\n return function() {\n return loader.stop();\n };\n })(this));\n };\n\n TrelloImportController.prototype.submitUserSelection = function(users) {\n this.startImport(users);\n return null;\n };\n\n return TrelloImportController;\n\n })();\n\n angular.module('taigaProjects').controller('TrelloImportCtrl', TrelloImportController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import.directive.coffee\n */\n\n(function() {\n var TrelloImportDirective;\n\n TrelloImportDirective = function() {\n return {\n link: function(scope, elm, attrs, ctrl) {\n return ctrl.startProjectSelector();\n },\n templateUrl: \"projects/create/trello-import/trello-import.html\",\n controller: \"TrelloImportCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancel: '&'\n }\n };\n };\n\n TrelloImportDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgTrelloImport\", TrelloImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import.service.coffee\n */\n\n(function() {\n var TrelloImportService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n TrelloImportService = (function(superClass) {\n extend(TrelloImportService, superClass);\n\n TrelloImportService.$inject = ['tgResources'];\n\n function TrelloImportService(resources) {\n this.resources = resources;\n this.projects = Immutable.List();\n this.projectUsers = Immutable.List();\n this.token = null;\n }\n\n TrelloImportService.prototype.setToken = function(token) {\n return this.token = token;\n };\n\n TrelloImportService.prototype.fetchProjects = function() {\n return this.resources.trelloImporter.listProjects(this.token).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n TrelloImportService.prototype.fetchUsers = function(projectId) {\n return this.resources.trelloImporter.listUsers(this.token, projectId).then((function(_this) {\n return function(users) {\n return _this.projectUsers = users;\n };\n })(this));\n };\n\n TrelloImportService.prototype.importProject = function(name, description, projectId, userBindings, keepExternalReference, isPrivate) {\n return this.resources.trelloImporter.importProject(this.token, name, description, projectId, userBindings, keepExternalReference, isPrivate);\n };\n\n TrelloImportService.prototype.getAuthUrl = function() {\n return new Promise((function(_this) {\n return function(resolve) {\n return _this.resources.trelloImporter.getAuthUrl().then(function(response) {\n _this.authUrl = response.data.url;\n return resolve(_this.authUrl);\n });\n };\n })(this));\n };\n\n TrelloImportService.prototype.authorize = function(verifyCode) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.trelloImporter.authorize(verifyCode).then((function(response) {\n _this.token = response.data.token;\n return resolve(_this.token);\n }), function(error) {\n return reject(new Error(error.status));\n });\n };\n })(this));\n };\n\n return TrelloImportService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgTrelloImportService\", TrelloImportService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee\n */\n\n(function() {\n var WarningUserImportDirective;\n\n WarningUserImportDirective = function(lightboxService, lightboxKeyboardNavigationService) {\n return {\n link: function(scope, el, attr) {\n return scope.$watch('visible', function(visible) {\n if (visible && !el.hasClass('open')) {\n return lightboxService.open(el, scope.onClose).then(function() {\n el.find('input').focus();\n return lightboxKeyboardNavigationService.init(el);\n });\n } else if (!visible && el.hasClass('open')) {\n return lightboxService.close(el);\n }\n });\n },\n templateUrl: \"projects/create/warning-user-import-lightbox/warning-user-import-lightbox.html\",\n scope: {\n visible: '<',\n onClose: '&',\n onConfirm: '&'\n }\n };\n };\n\n WarningUserImportDirective.$inject = ['lightboxService', 'lightboxKeyboardNavigationService'];\n\n angular.module(\"taigaProjects\").directive(\"tgWarningUserImportLightbox\", WarningUserImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/listing/projects-listing.controller.coffee\n */\n\n(function() {\n var ProjectsListingController;\n\n ProjectsListingController = (function() {\n ProjectsListingController.$inject = [\"tgCurrentUserService\"];\n\n function ProjectsListingController(currentUserService) {\n this.currentUserService = currentUserService;\n taiga.defineImmutableProperty(this, \"projects\", (function(_this) {\n return function() {\n return _this.currentUserService.projects.get(\"all\");\n };\n })(this));\n }\n\n return ProjectsListingController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ProjectsListing\", ProjectsListingController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: project-router.controller.coffee\n */\n\n(function() {\n var ProjectRouterController;\n\n ProjectRouterController = (function() {\n ProjectRouterController.$inject = [\"$routeParams\", \"$location\", \"tgProjectService\", \"$tgResources\", \"$tgSections\"];\n\n function ProjectRouterController(routeParams, location, projectService, rs, tgSections) {\n this.routeParams = routeParams;\n this.location = location;\n this.projectService = projectService;\n this.rs = rs;\n this.tgSections = tgSections;\n this.getProjectHomepage().then((function(_this) {\n return function(section) {\n if (section) {\n return _this.location.url(\"project/\" + _this.routeParams.pslug + \"/\" + section);\n } else {\n return _this.gotoDefaultProjectHomepage();\n }\n };\n })(this)).then(null, function() {\n return this.gotoDefaultProjectHomepage();\n });\n }\n\n ProjectRouterController.prototype.gotoDefaultProjectHomepage = function() {\n return this.location.url(\"project/\" + this.routeParams.pslug + \"/timeline\");\n };\n\n ProjectRouterController.prototype.getProjectHomepage = function() {\n var project;\n project = this.projectService.project.toJS();\n return this.rs.userProjectSettings.list({\n project: project.id\n }).then((function(_this) {\n return function(userProjectSettings) {\n var settings;\n settings = _.find(userProjectSettings, {\n \"project\": project.id\n });\n if (!settings) {\n return;\n }\n return _this.tgSections.getPath(project.slug, settings.homepage);\n };\n })(this));\n };\n\n return ProjectRouterController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ProjectRouter\", ProjectRouterController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/project/project.controller.coffee\n */\n\n(function() {\n var ProjectController;\n\n ProjectController = (function() {\n ProjectController.$inject = [\"$routeParams\", \"tgAppMetaService\", \"$tgAuth\", \"$translate\", \"tgProjectService\"];\n\n function ProjectController(routeParams, appMetaService, auth, translate, projectService) {\n this.routeParams = routeParams;\n this.appMetaService = appMetaService;\n this.auth = auth;\n this.translate = translate;\n this.projectService = projectService;\n this.user = this.auth.userData;\n taiga.defineImmutableProperty(this, \"project\", (function(_this) {\n return function() {\n return _this.projectService.project;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"members\", (function(_this) {\n return function() {\n return _this.projectService.activeMembers;\n };\n })(this));\n this.appMetaService.setfn(this._setMeta.bind(this));\n }\n\n ProjectController.prototype._setMeta = function() {\n var ctx;\n if (!this.project) {\n return null;\n }\n ctx = {\n projectName: this.project.get(\"name\")\n };\n return {\n title: this.translate.instant(\"PROJECT.PAGE_TITLE\", ctx),\n description: this.project.get(\"description\")\n };\n };\n\n return ProjectController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"Project\", ProjectController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/projects.service.coffee\n */\n\n(function() {\n var ProjectsService, groupBy, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n ProjectsService = (function(superClass) {\n extend(ProjectsService, superClass);\n\n ProjectsService.$inject = [\"tgResources\", \"$projectUrl\"];\n\n function ProjectsService(rs, projectUrl) {\n this.rs = rs;\n this.projectUrl = projectUrl;\n }\n\n ProjectsService.prototype.create = function(data) {\n return this.rs.projects.create(data);\n };\n\n ProjectsService.prototype.duplicate = function(projectId, data) {\n return this.rs.projects.duplicate(projectId, data);\n };\n\n ProjectsService.prototype.getProjectBySlug = function(projectSlug) {\n return this.rs.projects.getProjectBySlug(projectSlug).then((function(_this) {\n return function(project) {\n return _this._decorate(project);\n };\n })(this));\n };\n\n ProjectsService.prototype.getProjectStats = function(projectId) {\n return this.rs.projects.getProjectStats(projectId);\n };\n\n ProjectsService.prototype.getProjectsByUserId = function(userId, paginate) {\n return this.rs.projects.getProjectsByUserId(userId, paginate).then((function(_this) {\n return function(projects) {\n return projects.map(_this._decorate.bind(_this));\n };\n })(this));\n };\n\n ProjectsService.prototype._decorate = function(project) {\n var url;\n url = this.projectUrl.get(project.toJS());\n project = project.set(\"url\", url);\n return project;\n };\n\n ProjectsService.prototype.bulkUpdateProjectsOrder = function(sortData) {\n return this.rs.projects.bulkUpdateOrder(sortData);\n };\n\n ProjectsService.prototype.transferValidateToken = function(projectId, token) {\n return this.rs.projects.transferValidateToken(projectId, token);\n };\n\n ProjectsService.prototype.transferAccept = function(projectId, token, reason) {\n return this.rs.projects.transferAccept(projectId, token, reason);\n };\n\n ProjectsService.prototype.transferReject = function(projectId, token, reason) {\n return this.rs.projects.transferReject(projectId, token, reason);\n };\n\n return ProjectsService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgProjectsService\", ProjectsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/transfer/cant-own-project-explanation.directive.coffee\n */\n\n(function() {\n var CantOwnProjectExplanationDirective;\n\n CantOwnProjectExplanationDirective = function() {\n return {\n templateUrl: \"projects/transfer/cant-own-project-explanation.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgCantOwnProjectExplanation\", CantOwnProjectExplanationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/transfer/transfer-project.controller.coffee\n */\n\n(function() {\n var TransferProject, module;\n\n module = angular.module('taigaProjects');\n\n TransferProject = (function() {\n TransferProject.$inject = [\"$routeParams\", \"tgProjectsService\", \"$location\", \"$tgAuth\", \"tgCurrentUserService\", \"$tgNavUrls\", \"$translate\", \"$tgConfirm\", \"tgErrorHandlingService\"];\n\n function TransferProject(routeParams, projectService, location, authService, currentUserService, navUrls, translate, confirmService, errorHandlingService) {\n this.routeParams = routeParams;\n this.projectService = projectService;\n this.location = location;\n this.authService = authService;\n this.currentUserService = currentUserService;\n this.navUrls = navUrls;\n this.translate = translate;\n this.confirmService = confirmService;\n this.errorHandlingService = errorHandlingService;\n }\n\n TransferProject.prototype.initialize = function() {\n this.projectId = this.project.get(\"id\");\n this.token = this.routeParams.token;\n this.showAddComment = false;\n return this._refreshUserData();\n };\n\n TransferProject.prototype._validateToken = function() {\n return this.projectService.transferValidateToken(this.projectId, this.token).then(null, (function(_this) {\n return function(data, status) {\n return _this.errorHandlingService.notfound();\n };\n })(this));\n };\n\n TransferProject.prototype._refreshUserData = function() {\n return this.authService.refresh().then((function(_this) {\n return function() {\n _this._validateToken();\n _this._setProjectData();\n return _this._checkOwnerData();\n };\n })(this));\n };\n\n TransferProject.prototype._setProjectData = function() {\n return this.canBeOwnedByUser = this.currentUserService.canOwnProject(this.project);\n };\n\n TransferProject.prototype._checkOwnerData = function() {\n var currentUser, maxMemberships;\n currentUser = this.currentUserService.getUser();\n if (this.project.get('is_private')) {\n this.ownerMessage = 'ADMIN.PROJECT_TRANSFER.OWNER_MESSAGE.PRIVATE';\n this.maxProjects = currentUser.get('max_private_projects');\n if (this.maxProjects === null) {\n this.maxProjects = this.translate.instant('ADMIN.PROJECT_TRANSFER.UNLIMITED_PROJECTS');\n }\n this.currentProjects = currentUser.get('total_private_projects');\n maxMemberships = currentUser.get('max_memberships_private_projects');\n } else {\n this.ownerMessage = 'ADMIN.PROJECT_TRANSFER.OWNER_MESSAGE.PUBLIC';\n this.maxProjects = currentUser.get('max_public_projects');\n if (this.maxProjects === null) {\n this.maxProjects = this.translate.instant('ADMIN.PROJECT_TRANSFER.UNLIMITED_PROJECTS');\n }\n this.currentProjects = currentUser.get('total_public_projects');\n maxMemberships = currentUser.get('max_memberships_public_projects');\n }\n return this.validNumberOfMemberships = maxMemberships === null || this.project.get('total_memberships') <= maxMemberships;\n };\n\n TransferProject.prototype.transferAccept = function(token, reason) {\n this.loadingAccept = true;\n return this.projectService.transferAccept(this.project.get(\"id\"), token, reason).then((function(_this) {\n return function() {\n var newUrl;\n newUrl = _this.navUrls.resolve(\"project-admin-project-profile-details\", {\n project: _this.project.get(\"slug\")\n });\n _this.loadingAccept = false;\n _this.location.path(newUrl);\n _this.confirmService.notify(\"success\", _this.translate.instant(\"ADMIN.PROJECT_TRANSFER.ACCEPTED_PROJECT_OWNERNSHIP\"), '', 5000);\n };\n })(this));\n };\n\n TransferProject.prototype.transferReject = function(token, reason) {\n this.loadingReject = true;\n return this.projectService.transferReject(this.project.get(\"id\"), token, reason).then((function(_this) {\n return function() {\n var newUrl;\n newUrl = _this.navUrls.resolve(\"home\", {\n project: _this.project.get(\"slug\")\n });\n _this.loadingReject = false;\n _this.location.path(newUrl);\n _this.confirmService.notify(\"success\", _this.translate.instant(\"ADMIN.PROJECT_TRANSFER.REJECTED_PROJECT_OWNERNSHIP\"), '', 5000);\n };\n })(this));\n };\n\n TransferProject.prototype.addComment = function() {\n return this.showAddComment = true;\n };\n\n TransferProject.prototype.hideComment = function() {\n this.showAddComment = false;\n return this.reason = '';\n };\n\n return TransferProject;\n\n })();\n\n module.controller(\"TransferProjectController\", TransferProject);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/transfer/transfer-project.directive.coffee\n */\n\n(function() {\n var TransferProjectDirective, module;\n\n module = angular.module('taigaProjects');\n\n TransferProjectDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.initialize();\n };\n return {\n link: link,\n scope: {},\n bindToController: {\n project: \"=\"\n },\n templateUrl: \"projects/transfer/transfer-project.html\",\n controller: 'TransferProjectController',\n controllerAs: 'vm'\n };\n };\n\n module.directive('tgTransferProject', TransferProjectDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/attachments-resource.service.coffee\n */\n\n(function() {\n var Resource, module, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n Resource = function(urlsService, http, config, $rootScope, $q, storage) {\n var service;\n service = {};\n service.list = function(type, objectId, projectId) {\n var httpOptions, params, url, urlname;\n urlname = \"attachments/\" + type;\n params = {\n object_id: objectId,\n project: projectId\n };\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n url = urlsService.resolve(urlname);\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service[\"delete\"] = function(type, id) {\n var url, urlname;\n urlname = \"attachments/\" + type;\n url = urlsService.resolve(urlname) + (\"/\" + id);\n return http[\"delete\"](url);\n };\n service.patch = function(type, id, patch) {\n var url, urlname;\n urlname = \"attachments/\" + type;\n url = urlsService.resolve(urlname) + (\"/\" + id);\n return http.patch(url, patch);\n };\n service.create = function(type, projectId, objectId, file, from_comment) {\n var data, defered, maxFileSize, response, token, uploadComplete, uploadFailed, uploadProgress, url, urlname, xhr;\n urlname = \"attachments/\" + type;\n url = urlsService.resolve(urlname);\n defered = $q.defer();\n if (file === void 0) {\n defered.reject(null);\n return defered.promise;\n }\n maxFileSize = config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n response = {\n status: 413,\n data: {\n _error_message: \"'\" + file.name + \"' (\" + (sizeFormat(file.size)) + \") is too heavy for our oompa loompas, try it with a smaller than (\" + (sizeFormat(maxFileSize)) + \")\"\n }\n };\n defered.reject(response);\n return defered.promise;\n }\n uploadProgress = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n file.status = \"in-progress\";\n file.size = sizeFormat(evt.total);\n file.progressMessage = \"upload \" + (sizeFormat(evt.loaded)) + \" of \" + (sizeFormat(evt.total));\n return file.progressPercent = (Math.round((evt.loaded / evt.total) * 100)) + \"%\";\n });\n };\n })(this);\n uploadComplete = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n var attachment, ref, status;\n file.status = \"done\";\n status = evt.target.status;\n try {\n attachment = JSON.parse(evt.target.responseText);\n } catch (error) {\n attachment = {};\n }\n if (status >= 200 && status < 400) {\n attachment = Immutable.fromJS(attachment);\n return defered.resolve(attachment);\n } else {\n response = {\n status: status,\n data: {\n _error_message: (ref = data['attached_file']) != null ? ref[0] : void 0\n }\n };\n return defered.reject(response);\n }\n });\n };\n })(this);\n uploadFailed = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n file.status = \"error\";\n return defered.reject(\"fail\");\n });\n };\n })(this);\n data = new FormData();\n data.append(\"project\", projectId);\n data.append(\"object_id\", objectId);\n data.append(\"attached_file\", file);\n data.append(\"from_comment\", from_comment);\n xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", uploadProgress, false);\n xhr.addEventListener(\"load\", uploadComplete, false);\n xhr.addEventListener(\"error\", uploadFailed, false);\n token = storage.get('token');\n xhr.open(\"POST\", url);\n xhr.setRequestHeader(\"Authorization\", \"Bearer \" + token);\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send(data);\n return defered.promise;\n };\n return function() {\n return {\n \"attachments\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\", \"$tgConfig\", \"$rootScope\", \"$q\", \"$tgStorage\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgAttachmentsResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/epics-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.listInAllProjects = function(params) {\n var httpOptions, url;\n url = urlsService.resolve(\"epics\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.list = function(projectId, page) {\n var params, url;\n if (page == null) {\n page = 0;\n }\n url = urlsService.resolve(\"epics\");\n params = {\n project: projectId,\n page: page\n };\n return http.get(url, params).then(function(result) {\n return {\n list: Immutable.fromJS(result.data),\n headers: result.headers\n };\n });\n };\n service.patch = function(id, patch) {\n var url;\n url = urlsService.resolve(\"epics\") + (\"/\" + id);\n return http.patch(url, patch).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.post = function(params) {\n var url;\n url = urlsService.resolve(\"epics\");\n return http.post(url, params).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.reorder = function(id, data, setOrders) {\n var options, url;\n url = urlsService.resolve(\"epics\") + (\"/\" + id);\n options = {\n \"headers\": {\n \"set-orders\": JSON.stringify(setOrders)\n }\n };\n return http.patch(url, data, null, options).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.addRelatedUserstory = function(epicId, userstoryId) {\n var params, url;\n url = urlsService.resolve(\"epic-related-userstories\", epicId);\n params = {\n user_story: userstoryId,\n epic: epicId\n };\n return http.post(url, params);\n };\n service.reorderRelatedUserstory = function(epicId, userstoryId, data, setOrders) {\n var options, url;\n url = urlsService.resolve(\"epic-related-userstories\", epicId) + (\"/\" + userstoryId);\n options = {\n \"headers\": {\n \"set-orders\": JSON.stringify(setOrders)\n }\n };\n return http.patch(url, data, null, options);\n };\n service.bulkCreateRelatedUserStories = function(epicId, projectId, bulk_userstories) {\n var params, url;\n url = urlsService.resolve(\"epic-related-userstories-bulk-create\", epicId);\n params = {\n bulk_userstories: bulk_userstories,\n project_id: projectId\n };\n return http.post(url, params);\n };\n service.deleteRelatedUserstory = function(epicId, userstoryId) {\n var url;\n url = urlsService.resolve(\"epic-related-userstories\", epicId) + (\"/\" + userstoryId);\n return http[\"delete\"](url);\n };\n return function() {\n return {\n \"epics\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgEpicsResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/external-apps-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.getApplicationToken = function(applicationId, state) {\n var url;\n url = urlsService.resolve(\"applications\");\n url = url + \"/\" + applicationId + \"/token?state=\" + state;\n return http.get(url).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.authorizeApplicationToken = function(applicationId, state) {\n var data, url;\n url = urlsService.resolve(\"application-tokens\");\n url = url + \"/authorize\";\n data = {\n \"state\": state,\n \"application\": applicationId\n };\n return http.post(url, data).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"externalapps\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgExternalAppsResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/history-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.getHistory = function(historyType, contentType, objectId, page) {\n var url;\n url = urlsService.resolve(\"history/\" + contentType);\n return http.get(url + \"/\" + objectId, {\n page: page,\n type: historyType\n }).then(function(result) {\n return {\n list: Immutable.fromJS(result.data),\n headers: result.headers\n };\n });\n };\n return function() {\n return {\n \"history\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgHistory\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/importers-resource.service.coffee\n */\n\n(function() {\n var AsanaResource, GithubResource, JiraResource, TrelloResource, module, taiga;\n\n taiga = this.taiga;\n\n TrelloResource = function(urlsService, http) {\n var service;\n service = {};\n service.getAuthUrl = function(url) {\n url = urlsService.resolve(\"importers-trello-auth-url\");\n return http.get(url);\n };\n service.authorize = function(verifyCode) {\n var url;\n url = urlsService.resolve(\"importers-trello-authorize\");\n return http.post(url, {\n code: verifyCode\n });\n };\n service.listProjects = function(token) {\n var url;\n url = urlsService.resolve(\"importers-trello-list-projects\");\n return http.post(url, {\n token: token\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.listUsers = function(token, projectId) {\n var url;\n url = urlsService.resolve(\"importers-trello-list-users\");\n return http.post(url, {\n token: token,\n project: projectId\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.importProject = function(token, name, description, projectId, userBindings, keepExternalReference, isPrivate) {\n var data, url;\n url = urlsService.resolve(\"importers-trello-import-project\");\n data = {\n token: token,\n name: name,\n description: description,\n project: projectId,\n users_bindings: userBindings.toJS(),\n keep_external_reference: keepExternalReference,\n is_private: isPrivate,\n template: \"kanban\"\n };\n return http.post(url, data);\n };\n return function() {\n return {\n \"trelloImporter\": service\n };\n };\n };\n\n TrelloResource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n JiraResource = function(urlsService, http) {\n var service;\n service = {};\n service.getAuthUrl = function(jira_url) {\n var url;\n url = urlsService.resolve(\"importers-jira-auth-url\") + \"?url=\" + jira_url;\n return http.get(url);\n };\n service.authorize = function(oauth_verifier) {\n var url;\n url = urlsService.resolve(\"importers-jira-authorize\");\n return http.post(url, {\n oauth_verifier: oauth_verifier\n });\n };\n service.listProjects = function(jira_url, token) {\n var url;\n url = urlsService.resolve(\"importers-jira-list-projects\");\n return http.post(url, {\n url: jira_url,\n token: token\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.listUsers = function(jira_url, token, projectId) {\n var url;\n url = urlsService.resolve(\"importers-jira-list-users\");\n return http.post(url, {\n url: jira_url,\n token: token,\n project: projectId\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.importProject = function(jira_url, token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType) {\n var data, projectTemplate, url;\n url = urlsService.resolve(\"importers-jira-import-project\");\n projectTemplate = \"kanban\";\n if (projectType !== \"kanban\") {\n projectTemplate = \"scrum\";\n }\n data = {\n url: jira_url,\n token: token,\n name: name,\n description: description,\n project: projectId,\n users_bindings: userBindings.toJS(),\n keep_external_reference: keepExternalReference,\n is_private: isPrivate,\n project_type: projectType,\n importer_type: importerType,\n template: projectTemplate\n };\n return http.post(url, data);\n };\n return function() {\n return {\n \"jiraImporter\": service\n };\n };\n };\n\n JiraResource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n GithubResource = function(urlsService, http) {\n var service;\n service = {};\n service.getAuthUrl = function(callbackUri) {\n var url;\n url = urlsService.resolve(\"importers-github-auth-url\") + \"?uri=\" + callbackUri;\n return http.get(url);\n };\n service.authorize = function(code) {\n var url;\n url = urlsService.resolve(\"importers-github-authorize\");\n return http.post(url, {\n code: code\n });\n };\n service.listProjects = function(token) {\n var url;\n url = urlsService.resolve(\"importers-github-list-projects\");\n return http.post(url, {\n token: token\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.listUsers = function(token, projectId) {\n var url;\n url = urlsService.resolve(\"importers-github-list-users\");\n return http.post(url, {\n token: token,\n project: projectId\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.importProject = function(token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) {\n var data, url;\n url = urlsService.resolve(\"importers-github-import-project\");\n data = {\n token: token,\n name: name,\n description: description,\n project: projectId,\n users_bindings: userBindings.toJS(),\n keep_external_reference: keepExternalReference,\n is_private: isPrivate,\n template: projectType\n };\n return http.post(url, data);\n };\n return function() {\n return {\n \"githubImporter\": service\n };\n };\n };\n\n GithubResource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n AsanaResource = function(urlsService, http) {\n var service;\n service = {};\n service.getAuthUrl = function() {\n var url;\n url = urlsService.resolve(\"importers-asana-auth-url\");\n return http.get(url);\n };\n service.authorize = function(code) {\n var url;\n url = urlsService.resolve(\"importers-asana-authorize\");\n return http.post(url, {\n code: code\n });\n };\n service.listProjects = function(token) {\n var url;\n url = urlsService.resolve(\"importers-asana-list-projects\");\n return http.post(url, {\n token: token\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.listUsers = function(token, projectId) {\n var url;\n url = urlsService.resolve(\"importers-asana-list-users\");\n return http.post(url, {\n token: token,\n project: projectId\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.importProject = function(token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) {\n var data, url;\n url = urlsService.resolve(\"importers-asana-import-project\");\n data = {\n token: token,\n name: name,\n description: description,\n project: projectId,\n users_bindings: userBindings.toJS(),\n keep_external_reference: keepExternalReference,\n is_private: isPrivate,\n template: projectType\n };\n return http.post(url, data);\n };\n return function() {\n return {\n \"asanaImporter\": service\n };\n };\n };\n\n AsanaResource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgTrelloImportResource\", TrelloResource);\n\n module.factory(\"tgJiraImportResource\", JiraResource);\n\n module.factory(\"tgGithubImportResource\", GithubResource);\n\n module.factory(\"tgAsanaImportResource\", AsanaResource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/issues-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.listInAllProjects = function(params) {\n var httpOptions, url;\n url = urlsService.resolve(\"issues\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"issues\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgIssuesResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/projects-resource.service.coffee\n */\n\n(function() {\n var Resource, module, pagination;\n\n pagination = function() {};\n\n Resource = function(urlsService, http, paginateResponseService) {\n var service;\n service = {};\n service.create = function(data) {\n var url;\n url = urlsService.resolve('projects');\n return http.post(url, JSON.stringify(data)).then((function(_this) {\n return function(result) {\n return Immutable.fromJS(result.data);\n };\n })(this));\n };\n service.duplicate = function(projectId, data) {\n var members, params, url;\n url = urlsService.resolve(\"projects\");\n url = url + \"/\" + projectId + \"/duplicate\";\n members = data.users.map((function(_this) {\n return function(member) {\n return {\n \"id\": member\n };\n };\n })(this));\n params = {\n \"name\": data.name,\n \"description\": data.description,\n \"is_private\": data.is_private,\n \"users\": members\n };\n return http.post(url, params);\n };\n service.getProjects = function(params, pagination) {\n var httpOptions, url;\n if (params == null) {\n params = {};\n }\n if (pagination == null) {\n pagination = true;\n }\n url = urlsService.resolve(\"projects\");\n httpOptions = {};\n if (!pagination) {\n httpOptions = {\n headers: {\n \"x-lazy-pagination\": true\n }\n };\n }\n return http.get(url, params, httpOptions);\n };\n service.getProjectBySlug = function(projectSlug) {\n var url;\n url = urlsService.resolve(\"projects\");\n url = url + \"/by_slug?slug=\" + projectSlug;\n return http.get(url).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getProjectsByUserId = function(userId, paginate) {\n var httpOptions, params, url;\n if (paginate == null) {\n paginate = false;\n }\n url = urlsService.resolve(\"projects\");\n httpOptions = {};\n if (!paginate) {\n httpOptions.headers = {\n \"x-disable-pagination\": \"1\"\n };\n }\n params = {\n \"member\": userId,\n \"order_by\": \"user_order\"\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getProjectStats = function(projectId) {\n var url;\n url = urlsService.resolve(\"projects\");\n url = url + \"/\" + projectId;\n return http.get(url).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.bulkUpdateOrder = function(bulkData) {\n var url;\n url = urlsService.resolve(\"bulk-update-projects-order\");\n return http.post(url, bulkData);\n };\n service.getTimeline = function(projectId, page) {\n var params, url;\n params = {\n page: page,\n only_relevant: true\n };\n url = urlsService.resolve(\"timeline-project\");\n url = url + \"/\" + projectId;\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.likeProject = function(projectId) {\n var url;\n url = urlsService.resolve(\"project-like\", projectId);\n return http.post(url);\n };\n service.unlikeProject = function(projectId) {\n var url;\n url = urlsService.resolve(\"project-unlike\", projectId);\n return http.post(url);\n };\n service.watchProject = function(projectId, notifyLevel) {\n var data, url;\n data = {\n notify_level: notifyLevel,\n live_notify_level: notifyLevel\n };\n url = urlsService.resolve(\"project-watch\", projectId);\n return http.post(url, data);\n };\n service.unwatchProject = function(projectId) {\n var url;\n url = urlsService.resolve(\"project-unwatch\", projectId);\n return http.post(url);\n };\n service.contactProject = function(projectId, message) {\n var params, url;\n params = {\n project: projectId,\n comment: message\n };\n url = urlsService.resolve(\"project-contact\");\n return http.post(url, params);\n };\n service.transferValidateToken = function(projectId, token) {\n var data, url;\n data = {\n token: token\n };\n url = urlsService.resolve(\"project-transfer-validate-token\", projectId);\n return http.post(url, data);\n };\n service.transferAccept = function(projectId, token, reason) {\n var data, url;\n data = {\n token: token,\n reason: reason\n };\n url = urlsService.resolve(\"project-transfer-accept\", projectId);\n return http.post(url, data);\n };\n service.transferReject = function(projectId, token, reason) {\n var data, url;\n data = {\n token: token,\n reason: reason\n };\n url = urlsService.resolve(\"project-transfer-reject\", projectId);\n return http.post(url, data);\n };\n service.transferRequest = function(projectId) {\n var url;\n url = urlsService.resolve(\"project-transfer-request\", projectId);\n return http.post(url);\n };\n service.transferStart = function(projectId, userId, reason) {\n var data, url;\n data = {\n user: userId,\n reason: reason\n };\n url = urlsService.resolve(\"project-transfer-start\", projectId);\n return http.post(url, data);\n };\n return function() {\n return {\n \"projects\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\", \"tgPaginateResponseService\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgProjectsResources\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/resources.coffee\n */\n\n(function() {\n var Resources, services;\n\n services = [\"tgProjectsResources\", \"tgUserResources\", \"tgUsersResources\", \"tgUserstoriesResource\", \"tgTasksResource\", \"tgIssuesResource\", \"tgExternalAppsResource\", \"tgAttachmentsResource\", \"tgStatsResource\", \"tgHistory\", \"tgEpicsResource\", \"tgTrelloImportResource\", \"tgJiraImportResource\", \"tgGithubImportResource\", \"tgAsanaImportResource\"];\n\n Resources = function($injector) {\n var i, j, len, len1, ref, service, serviceFn, serviceName, serviceProperty;\n for (i = 0, len = services.length; i < len; i++) {\n serviceName = services[i];\n serviceFn = $injector.get(serviceName);\n service = $injector.invoke(serviceFn);\n ref = Object.keys(service);\n for (j = 0, len1 = ref.length; j < len1; j++) {\n serviceProperty = ref[j];\n if (this[serviceProperty]) {\n console.warn(\"repeated resource \" + serviceProperty);\n }\n this[serviceProperty] = service[serviceProperty];\n }\n }\n return this;\n };\n\n Resources.$inject = [\"$injector\"];\n\n angular.module(\"taigaResources2\").service(\"tgResources\", Resources);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/stats-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.discover = function(applicationId, state) {\n var url;\n url = urlsService.resolve(\"stats-discover\");\n return http.get(url).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"stats\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgStatsResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/tasks-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.listInAllProjects = function(params) {\n var httpOptions, url;\n url = urlsService.resolve(\"tasks\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"tasks\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgTasksResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/user-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http, paginateResponseService) {\n var service;\n service = {};\n service.getUserStorage = function(key) {\n var httpOptions, url;\n url = urlsService.resolve(\"user-storage\");\n if (key) {\n url += '/' + key;\n }\n httpOptions = {};\n return http.get(url, {}).then(function(response) {\n return response.data.value;\n });\n };\n service.setUserStorage = function(key, value) {\n var params, url;\n url = urlsService.resolve(\"user-storage\") + '/' + key;\n params = {\n key: key,\n value: value\n };\n return http.put(url, params);\n };\n service.createUserStorage = function(key, value) {\n var params, url;\n url = urlsService.resolve(\"user-storage\");\n params = {\n key: key,\n value: value\n };\n return http.post(url, params);\n };\n return function() {\n return {\n \"user\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgUserResources\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/users-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http, paginateResponseService) {\n var service;\n service = {};\n service.getUserByUsername = function(username) {\n var httpOptions, params, url;\n url = urlsService.resolve(\"by_username\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n params = {\n username: username\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getStats = function(userId) {\n var httpOptions, url;\n url = urlsService.resolve(\"user-stats\", userId);\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, {}, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getContacts = function(userId, excludeProjectId) {\n var httpOptions, params, url;\n url = urlsService.resolve(\"user-contacts\", userId);\n params = {};\n if (excludeProjectId != null) {\n params.exclude_project = excludeProjectId;\n }\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getLiked = function(userId, page, type, q) {\n var params, url;\n url = urlsService.resolve(\"user-liked\", userId);\n params = {};\n if (page != null) {\n params.page = page;\n }\n if (type != null) {\n params.type = type;\n }\n if (q != null) {\n params.q = q;\n }\n params.only_relevant = true;\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getVoted = function(userId, page, type, q) {\n var params, url;\n url = urlsService.resolve(\"user-voted\", userId);\n params = {};\n if (page != null) {\n params.page = page;\n }\n if (type != null) {\n params.type = type;\n }\n if (q != null) {\n params.q = q;\n }\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getWatched = function(userId, page, type, q) {\n var params, url;\n url = urlsService.resolve(\"user-watched\", userId);\n params = {};\n if (page != null) {\n params.page = page;\n }\n if (type != null) {\n params.type = type;\n }\n if (q != null) {\n params.q = q;\n }\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getProfileTimeline = function(userId, page) {\n var params, url;\n params = {\n page: page\n };\n url = urlsService.resolve(\"timeline-profile\");\n url = url + \"/\" + userId;\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getUserTimeline = function(userId, page) {\n var params, url;\n params = {\n page: page,\n only_relevant: true\n };\n url = urlsService.resolve(\"timeline-user\");\n url = url + \"/\" + userId;\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getNotifications = function(userId, page, onlyUnread) {\n var params, url;\n params = {\n page: page\n };\n if (onlyUnread) {\n params['only_unread'] = true;\n }\n url = urlsService.resolve(\"notifications\");\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n var paginateResponse;\n result = Immutable.fromJS(result);\n paginateResponse = Immutable.Map({\n \"data\": result.get(\"data\").get(\"objects\"),\n \"next\": !!result.get(\"headers\")(\"x-pagination-next\"),\n \"prev\": !!result.get(\"headers\")(\"x-pagination-prev\"),\n \"current\": result.get(\"headers\")(\"x-pagination-current\"),\n \"count\": result.get(\"headers\")(\"x-pagination-count\"),\n \"total\": result.get(\"data\").get(\"total\")\n });\n return paginateResponse;\n });\n };\n service.setNotificationAsRead = function(notificationId) {\n var url;\n url = (urlsService.resolve(\"notifications\")) + \"/\" + notificationId + \"/set-as-read\";\n return http.patch(url).then(function(result) {\n return result;\n });\n };\n service.setNotificationsAsRead = function() {\n var url;\n url = (urlsService.resolve(\"notifications\")) + \"/set-as-read\";\n return http.post(url).then(function(result) {\n return result;\n });\n };\n return function() {\n return {\n \"users\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\", \"tgPaginateResponseService\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgUsersResources\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/userstories-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.listInAllProjects = function(params, pagination) {\n var httpOptions, url;\n if (pagination == null) {\n pagination = false;\n }\n url = urlsService.resolve(\"userstories\");\n if (!pagination) {\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n }\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.listAllInProject = function(projectId) {\n var httpOptions, params, url;\n url = urlsService.resolve(\"userstories\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n params = {\n project: projectId\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.listInEpic = function(epicIid) {\n var httpOptions, params, url;\n url = urlsService.resolve(\"userstories\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n params = {\n epic: epicIid,\n order_by: 'epic_order',\n include_tasks: true\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"userstories\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgUserstoriesResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/app-meta.service.coffee\n */\n\n(function() {\n var AppMetaService, taiga, truncate;\n\n taiga = this.taiga;\n\n truncate = taiga.truncate;\n\n AppMetaService = (function() {\n AppMetaService.$inject = [\"$rootScope\"];\n\n function AppMetaService(rootScope) {\n this.rootScope = rootScope;\n }\n\n AppMetaService.prototype._set = function(key, value) {\n var meta;\n if (!key) {\n return;\n }\n if (key === \"title\") {\n meta = $(\"head title\");\n if (meta.length === 0) {\n meta = $(\"\");\n $(\"head\").append(meta);\n }\n return meta.text(value || \"\");\n } else if (key.indexOf(\"og:\") === 0) {\n meta = $(\"head meta[property='\" + key + \"']\");\n if (meta.length === 0) {\n meta = $(\"\");\n $(\"head\").append(meta);\n }\n return meta.attr(\"content\", value || \"\");\n } else {\n meta = $(\"head meta[name='\" + key + \"']\");\n if (meta.length === 0) {\n meta = $(\"\");\n $(\"head\").append(meta);\n }\n return meta.attr(\"content\", value || \"\");\n }\n };\n\n AppMetaService.prototype.setTitle = function(title) {\n return this._set('title', title);\n };\n\n AppMetaService.prototype.setDescription = function(description) {\n return this._set(\"description\", truncate(description, 250));\n };\n\n AppMetaService.prototype.setTwitterMetas = function(title, description) {\n this._set(\"twitter:card\", \"summary\");\n this._set(\"twitter:site\", \"@taigaio\");\n this._set(\"twitter:title\", title);\n this._set(\"twitter:description\", truncate(description, 300));\n return this._set(\"twitter:image\", window.location.origin + \"/\" + window._version + \"/images/logo-color.png\");\n };\n\n AppMetaService.prototype.setOpenGraphMetas = function(title, description) {\n this._set(\"og:type\", \"object\");\n this._set(\"og:site_name\", \"Taiga - Love your projects\");\n this._set(\"og:title\", title);\n this._set(\"og:description\", truncate(description, 300));\n this._set(\"og:image\", window.location.origin + \"/\" + window._version + \"/images/logo-color.png\");\n return this._set(\"og:url\", window.location.href);\n };\n\n AppMetaService.prototype.setAll = function(title, description) {\n this.setTitle(title);\n this.setDescription(description);\n this.setTwitterMetas(title, description);\n return this.setOpenGraphMetas(title, description);\n };\n\n AppMetaService.prototype.addMobileViewport = function() {\n return $(\"head\").append(\"\");\n };\n\n AppMetaService.prototype.removeMobileViewport = function() {\n return $(\"head meta[name=\\\"viewport\\\"]\").remove();\n };\n\n AppMetaService.prototype.setfn = function(fn) {\n if (this.listener) {\n this._listener();\n }\n return this._listener = this.rootScope.$watchCollection(fn, (function(_this) {\n return function(metas) {\n if (metas) {\n _this.setAll(metas.title, metas.description);\n return _this._listener();\n }\n };\n })(this));\n };\n\n return AppMetaService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgAppMetaService\", AppMetaService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/attachments.service.coffee\n */\n\n(function() {\n var AttachmentsService, sizeFormat;\n\n sizeFormat = this.taiga.sizeFormat;\n\n AttachmentsService = (function() {\n AttachmentsService.$inject = [\"$tgConfirm\", \"$tgConfig\", \"$translate\", \"tgResources\"];\n\n function AttachmentsService(confirm, config, translate, rs) {\n this.confirm = confirm;\n this.config = config;\n this.translate = translate;\n this.rs = rs;\n this.maxFileSize = this.getMaxFileSize();\n if (this.maxFileSize) {\n this.maxFileSizeFormated = sizeFormat(this.maxFileSize);\n }\n }\n\n AttachmentsService.prototype.sizeError = function(file) {\n var message;\n message = this.translate.instant(\"ATTACHMENT.ERROR_MAX_SIZE_EXCEEDED\", {\n fileName: file.name,\n fileSize: sizeFormat(file.size),\n maxFileSize: this.maxFileSizeFormated\n });\n return this.confirm.notify(\"error\", message);\n };\n\n AttachmentsService.prototype.validate = function(file) {\n if (this.maxFileSize && file.size > this.maxFileSize) {\n this.sizeError(file);\n return false;\n }\n return true;\n };\n\n AttachmentsService.prototype.getMaxFileSize = function() {\n return this.config.get(\"maxUploadFileSize\", null);\n };\n\n AttachmentsService.prototype.list = function(type, objId, projectId) {\n return this.rs.attachments.list(type, objId, projectId).then((function(_this) {\n return function(attachments) {\n return attachments.sortBy(function(attachment) {\n return attachment.get('order');\n });\n };\n })(this));\n };\n\n AttachmentsService.prototype[\"delete\"] = function(type, id) {\n return this.rs.attachments[\"delete\"](type, id);\n };\n\n AttachmentsService.prototype.saveError = function(file, data) {\n var message;\n message = \"\";\n if (file) {\n message = this.translate.instant(\"ATTACHMENT.ERROR_UPLOAD_ATTACHMENT\", {\n fileName: file.name,\n errorMessage: data.data._error_message\n });\n }\n return this.confirm.notify(\"error\", message);\n };\n\n AttachmentsService.prototype.upload = function(file, objId, projectId, type, from_comment) {\n var promise;\n if (from_comment == null) {\n from_comment = false;\n }\n promise = this.rs.attachments.create(type, projectId, objId, file, from_comment);\n promise.then(null, this.saveError.bind(this, file));\n return promise;\n };\n\n AttachmentsService.prototype.patch = function(id, type, patch) {\n var promise;\n promise = this.rs.attachments.patch(type, id, patch);\n promise.then(null, this.saveError.bind(this, null));\n return promise;\n };\n\n return AttachmentsService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgAttachmentsService\", AttachmentsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/avatar.service.coffee\n */\n\n(function() {\n var AvatarService,\n modulo = function(a, b) { return (+a % (b = +b) + b) % b; };\n\n AvatarService = (function() {\n function AvatarService(config) {\n var COLORS, IMAGES;\n this.config = config;\n IMAGES = [\"/\" + window._version + \"/images/user-avatars/user-avatar-01.png\", \"/\" + window._version + \"/images/user-avatars/user-avatar-02.png\", \"/\" + window._version + \"/images/user-avatars/user-avatar-03.png\", \"/\" + window._version + \"/images/user-avatars/user-avatar-04.png\", \"/\" + window._version + \"/images/user-avatars/user-avatar-05.png\"];\n COLORS = [\"rgba( 178, 176, 204, 1 )\", \"rgba( 183, 203, 131, 1 )\", \"rgba( 210, 198, 139, 1 )\", \"rgba( 214, 161, 212, 1 )\", \"rgba( 247, 154, 154, 1 )\"];\n this.logos = _.cartesianProduct(IMAGES, COLORS);\n }\n\n AvatarService.prototype.getDefault = function(key) {\n var idx, logo;\n idx = modulo(murmurhash3_32_gc(key, 42), this.logos.length);\n logo = this.logos[idx];\n return {\n src: logo[0],\n color: logo[1]\n };\n };\n\n AvatarService.prototype.getUnnamed = function() {\n return {\n url: \"/\" + window._version + \"/images/unnamed.png\",\n username: ''\n };\n };\n\n AvatarService.prototype.getAvatar = function(user, type) {\n var avatarParamName, gravatar, logo, logoUrl, photo, root, username;\n if (!user) {\n return this.getUnnamed();\n }\n avatarParamName = 'photo';\n if (type === 'avatarBig') {\n avatarParamName = 'big_photo';\n }\n photo = null;\n if (user instanceof Immutable.Map) {\n gravatar = user.get('gravatar_id');\n photo = user.get(avatarParamName);\n username = \"@\" + (user.get('username'));\n } else {\n gravatar = user.gravatar_id;\n photo = user[avatarParamName];\n username = \"@\" + user.username;\n }\n if (!gravatar) {\n return this.getUnnamed();\n }\n if (photo) {\n return {\n url: photo,\n username: username\n };\n } else if (location.host.indexOf('localhost') !== -1 || !this.config.get(\"gravatar\", true)) {\n root = location.protocol + '//' + location.host;\n logo = this.getDefault(gravatar);\n return {\n url: root + logo.src,\n bg: logo.color,\n username: username\n };\n } else {\n root = location.protocol + '//' + location.host;\n logo = this.getDefault(gravatar);\n logoUrl = encodeURIComponent(root + logo.src);\n return {\n url: 'https://www.gravatar.com/avatar/' + gravatar + \"?s=200&d=\" + logoUrl,\n bg: logo.color,\n username: username\n };\n }\n };\n\n return AvatarService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgAvatarService\", [\"$tgConfig\", AvatarService]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/check-permissions.service.coffee\n */\n\n(function() {\n var CheckPermissionsService, taiga;\n\n taiga = this.taiga;\n\n CheckPermissionsService = (function() {\n CheckPermissionsService.$inject = [\"tgProjectService\"];\n\n function CheckPermissionsService(projectService) {\n this.projectService = projectService;\n }\n\n CheckPermissionsService.prototype.check = function(permission) {\n if (!this.projectService.project) {\n return false;\n }\n return this.projectService.project.get('my_permissions').indexOf(permission) !== -1;\n };\n\n return CheckPermissionsService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgCheckPermissionsService\", CheckPermissionsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/current-user.service.coffee\n */\n\n(function() {\n var CurrentUserService, groupBy, taiga;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n CurrentUserService = (function() {\n CurrentUserService.$inject = [\"tgProjectsService\", \"$tgStorage\", \"tgResources\"];\n\n function CurrentUserService(projectsService, storageService, rs) {\n this.projectsService = projectsService;\n this.storageService = storageService;\n this.rs = rs;\n this._user = null;\n this._projects = Immutable.Map();\n this._projectsById = Immutable.Map();\n this._joyride = null;\n taiga.defineImmutableProperty(this, \"projects\", (function(_this) {\n return function() {\n return _this._projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"projectsById\", (function(_this) {\n return function() {\n return _this._projectsById;\n };\n })(this));\n }\n\n CurrentUserService.prototype.isAuthenticated = function() {\n if (this.getUser() !== null) {\n return true;\n }\n return false;\n };\n\n CurrentUserService.prototype.getUser = function() {\n var userData;\n if (!this._user) {\n userData = this.storageService.get(\"userInfo\");\n if (userData) {\n userData = Immutable.fromJS(userData);\n this.setUser(userData);\n }\n }\n return this._user;\n };\n\n CurrentUserService.prototype.removeUser = function() {\n this._user = null;\n this._projects = Immutable.Map();\n this._projectsById = Immutable.Map();\n return this._joyride = null;\n };\n\n CurrentUserService.prototype.setUser = function(user) {\n this._user = user;\n return this._loadUserInfo();\n };\n\n CurrentUserService.prototype.bulkUpdateProjectsOrder = function(sortData) {\n return this.projectsService.bulkUpdateProjectsOrder(sortData).then((function(_this) {\n return function() {\n return _this.loadProjects();\n };\n })(this));\n };\n\n CurrentUserService.prototype.loadProjects = function() {\n return this.projectsService.getProjectsByUserId(this._user.get(\"id\")).then((function(_this) {\n return function(projects) {\n return _this.setProjects(projects);\n };\n })(this));\n };\n\n CurrentUserService.prototype.disableJoyRide = function(section) {\n if (!this.isAuthenticated()) {\n return;\n }\n if (section) {\n this._joyride[section] = false;\n } else {\n this._joyride = {\n backlog: false,\n kanban: false,\n dashboard: false\n };\n }\n return this.rs.user.setUserStorage('joyride', this._joyride);\n };\n\n CurrentUserService.prototype.loadJoyRideConfig = function() {\n return new Promise((function(_this) {\n return function(resolve) {\n if (_this._joyride !== null) {\n resolve(_this._joyride);\n return;\n }\n return _this.rs.user.getUserStorage('joyride').then(function(config) {\n _this._joyride = config;\n return resolve(_this._joyride);\n })[\"catch\"](function() {\n _this._joyride = {\n backlog: true,\n kanban: true,\n dashboard: true\n };\n _this.rs.user.createUserStorage('joyride', _this._joyride);\n return resolve(_this._joyride);\n });\n };\n })(this));\n };\n\n CurrentUserService.prototype._loadUserInfo = function() {\n return Promise.all([this.loadProjects()]);\n };\n\n CurrentUserService.prototype.setProjects = function(projects) {\n this._projects = this._projects.set(\"all\", projects);\n this._projects = this._projects.set(\"recents\", projects.slice(0, 10));\n this._projects = this._projects.set(\"unblocked\", projects.filter(function(project) {\n return project.toJS().blocked_code === null;\n }));\n this._projectsById = Immutable.fromJS(groupBy(projects.toJS(), function(p) {\n return p.id;\n }));\n return this.projects;\n };\n\n CurrentUserService.prototype.canCreatePrivateProjects = function() {\n var user;\n user = this.getUser();\n if (user.get('max_private_projects') !== null && user.get('total_private_projects') >= user.get('max_private_projects')) {\n return {\n valid: false,\n reason: 'max_private_projects',\n type: 'private_project',\n current: user.get('total_private_projects'),\n max: user.get('max_private_projects')\n };\n }\n return {\n valid: true\n };\n };\n\n CurrentUserService.prototype.canCreatePublicProjects = function() {\n var user;\n user = this.getUser();\n if (user.get('max_public_projects') !== null && user.get('total_public_projects') >= user.get('max_public_projects')) {\n return {\n valid: false,\n reason: 'max_public_projects',\n type: 'public_project',\n current: user.get('total_public_projects'),\n max: user.get('max_public_projects')\n };\n }\n return {\n valid: true\n };\n };\n\n CurrentUserService.prototype.canAddMembersPublicProject = function(totalMembers) {\n var user;\n user = this.getUser();\n if (user.get('max_memberships_public_projects') !== null && totalMembers > user.get('max_memberships_public_projects')) {\n return {\n valid: false,\n reason: 'max_members_public_projects',\n type: 'public_project',\n current: totalMembers,\n max: user.get('max_memberships_public_projects')\n };\n }\n return {\n valid: true\n };\n };\n\n CurrentUserService.prototype.canAddMembersPrivateProject = function(totalMembers) {\n var user;\n user = this.getUser();\n if (user.get('max_memberships_private_projects') !== null && totalMembers > user.get('max_memberships_private_projects')) {\n return {\n valid: false,\n reason: 'max_members_private_projects',\n type: 'private_project',\n current: totalMembers,\n max: user.get('max_memberships_private_projects')\n };\n }\n return {\n valid: true\n };\n };\n\n CurrentUserService.prototype.canOwnProject = function(project) {\n var membersResult, result, user;\n user = this.getUser();\n if (project.get('is_private')) {\n result = this.canCreatePrivateProjects();\n if (!result.valid) {\n return result;\n }\n membersResult = this.canAddMembersPrivateProject(project.get('total_memberships'));\n if (!membersResult.valid) {\n return membersResult;\n }\n } else {\n result = this.canCreatePublicProjects();\n if (!result.valid) {\n return result;\n }\n membersResult = this.canAddMembersPublicProject(project.get('total_memberships'));\n if (!membersResult.valid) {\n return membersResult;\n }\n }\n return {\n valid: true\n };\n };\n\n return CurrentUserService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgCurrentUserService\", CurrentUserService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/error-handling.service.coffee\n */\n\n(function() {\n var ErrorHandlingService, taiga;\n\n taiga = this.taiga;\n\n ErrorHandlingService = (function() {\n ErrorHandlingService.$inject = [\"$rootScope\"];\n\n function ErrorHandlingService(rootScope) {\n this.rootScope = rootScope;\n }\n\n ErrorHandlingService.prototype.init = function() {\n return this.rootScope.errorHandling = {};\n };\n\n ErrorHandlingService.prototype.notfound = function() {\n this.rootScope.errorHandling.showingError = true;\n return this.rootScope.errorHandling.notfound = true;\n };\n\n ErrorHandlingService.prototype.error = function() {\n this.rootScope.errorHandling.showingError = true;\n return this.rootScope.errorHandling.error = true;\n };\n\n ErrorHandlingService.prototype.permissionDenied = function() {\n this.rootScope.errorHandling.showingError = true;\n return this.rootScope.errorHandling.permissionDenied = true;\n };\n\n ErrorHandlingService.prototype.block = function() {\n this.rootScope.errorHandling.showingError = true;\n return this.rootScope.errorHandling.blocked = true;\n };\n\n return ErrorHandlingService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgErrorHandlingService\", ErrorHandlingService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/lightbox-factory.service.coffee\n */\n\n(function() {\n var LightboxFactory;\n\n LightboxFactory = (function() {\n LightboxFactory.$inject = [\"$rootScope\", \"$compile\"];\n\n function LightboxFactory(rootScope, compile) {\n this.rootScope = rootScope;\n this.compile = compile;\n }\n\n LightboxFactory.prototype.create = function(name, attrs, scopeAttrs) {\n var elm, html, scope;\n scope = this.rootScope.$new();\n scope = _.merge(scope, scopeAttrs);\n elm = $(\"
    \").attr(name, true).attr(\"tg-bind-scope\", true);\n if (attrs) {\n elm.attr(attrs);\n }\n elm.addClass(\"remove-on-close\");\n html = this.compile(elm)(scope);\n $(document.body).append(html);\n };\n\n return LightboxFactory;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgLightboxFactory\", LightboxFactory);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/paginate-response.service.coffee\n */\n\n(function() {\n var PaginateResponse;\n\n PaginateResponse = function() {\n return function(result) {\n var paginateResponse;\n paginateResponse = Immutable.Map({\n \"data\": result.get(\"data\"),\n \"next\": !!result.get(\"headers\")(\"x-pagination-next\"),\n \"prev\": !!result.get(\"headers\")(\"x-pagination-prev\"),\n \"current\": result.get(\"headers\")(\"x-pagination-current\"),\n \"count\": result.get(\"headers\")(\"x-pagination-count\")\n });\n return paginateResponse;\n };\n };\n\n angular.module(\"taigaCommon\").factory(\"tgPaginateResponseService\", PaginateResponse);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/project-logo.service.coffee\n */\n\n(function() {\n var ProjectLogoService,\n modulo = function(a, b) { return (+a % (b = +b) + b) % b; };\n\n ProjectLogoService = (function() {\n function ProjectLogoService() {\n var COLORS, IMAGES;\n IMAGES = [\"/\" + window._version + \"/images/project-logos/project-logo-01.png\", \"/\" + window._version + \"/images/project-logos/project-logo-02.png\", \"/\" + window._version + \"/images/project-logos/project-logo-03.png\", \"/\" + window._version + \"/images/project-logos/project-logo-04.png\", \"/\" + window._version + \"/images/project-logos/project-logo-05.png\"];\n COLORS = [\"rgba( 153, 214, 220, 1 )\", \"rgba( 213, 156, 156, 1 )\", \"rgba( 214, 161, 212, 1 )\", \"rgba( 164, 162, 219, 1 )\", \"rgba( 152, 224, 168, 1 )\"];\n this.logos = _.cartesianProduct(IMAGES, COLORS);\n }\n\n ProjectLogoService.prototype.getDefaultProjectLogo = function(slug, id) {\n var idx, key, logo;\n key = slug + \"-\" + id;\n idx = modulo(murmurhash3_32_gc(key, 42), this.logos.length);\n logo = this.logos[idx];\n return {\n src: logo[0],\n color: logo[1]\n };\n };\n\n return ProjectLogoService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgProjectLogoService\", ProjectLogoService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/project.service.coffee\n */\n\n(function() {\n var ProjectService, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n ProjectService = (function() {\n ProjectService.$inject = [\"$rootScope\", \"tgProjectsService\", \"tgXhrErrorService\", \"tgUserActivityService\", \"$interval\"];\n\n function ProjectService(rootScope, projectsService, xhrError, userActivityService, interval) {\n this.rootScope = rootScope;\n this.projectsService = projectsService;\n this.xhrError = xhrError;\n this.userActivityService = userActivityService;\n this.interval = interval;\n this.manageProjectSignal = bind(this.manageProjectSignal, this);\n this._project = null;\n this._section = null;\n this._sectionsBreadcrumb = Immutable.List();\n this._activeMembers = Immutable.List();\n taiga.defineImmutableProperty(this, \"project\", (function(_this) {\n return function() {\n return _this._project;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"section\", (function(_this) {\n return function() {\n return _this._section;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"sectionsBreadcrumb\", (function(_this) {\n return function() {\n return _this._sectionsBreadcrumb;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"activeMembers\", (function(_this) {\n return function() {\n return _this._activeMembers;\n };\n })(this));\n if (!window.localStorage.e2e) {\n this.autoRefresh();\n }\n this.watchSignals();\n }\n\n ProjectService.prototype.watchSignals = function() {\n var fetchRequiredSignals, i, len, results, signal;\n fetchRequiredSignals = [\"admin:project-modules:updated\", \"admin:project-roles:updated\", \"admin:project-default-values:updated\", \"admin:project-values:updated\", \"admin:project-values:move\", \"admin:project-custom-attributes:updated\", \"sprintform:create:success\", \"sprintform:edit:success\", \"sprintform:remove:success\", \"tags:updated\"];\n results = [];\n for (i = 0, len = fetchRequiredSignals.length; i < len; i++) {\n signal = fetchRequiredSignals[i];\n results.push(this.rootScope.$on(signal, this.manageProjectSignal));\n }\n return results;\n };\n\n ProjectService.prototype.manageProjectSignal = function(ctx) {\n return this.fetchProject();\n };\n\n ProjectService.prototype.cleanProject = function() {\n this._project = null;\n this._activeMembers = Immutable.List();\n this._section = null;\n return this._sectionsBreadcrumb = Immutable.List();\n };\n\n ProjectService.prototype.autoRefresh = function() {\n var intervalId;\n intervalId = this.interval((function(_this) {\n return function() {\n return _this.fetchProject();\n };\n })(this), 60 * 10 * 1000);\n this.userActivityService.onInactive((function(_this) {\n return function() {\n return _this.interval.cancel(intervalId);\n };\n })(this));\n return this.userActivityService.onActive((function(_this) {\n return function() {\n _this.fetchProject();\n return _this.autoRefresh();\n };\n })(this));\n };\n\n ProjectService.prototype.setSection = function(section) {\n this._section = section;\n if (section) {\n return this._sectionsBreadcrumb = this._sectionsBreadcrumb.push(this._section);\n } else {\n return this._sectionsBreadcrumb = Immutable.List();\n }\n };\n\n ProjectService.prototype.setProject = function(project) {\n this._project = project;\n return this._activeMembers = this._project.get('members').filter(function(member) {\n return member.get('is_active');\n });\n };\n\n ProjectService.prototype.setProjectBySlug = function(pslug) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n if (!_this.project || _this.project.get('slug') !== pslug) {\n return _this.projectsService.getProjectBySlug(pslug).then(function(project) {\n _this.setProject(project);\n return resolve();\n })[\"catch\"](function(xhr) {\n return _this.xhrError.response(xhr);\n });\n } else {\n return resolve();\n }\n };\n })(this));\n };\n\n ProjectService.prototype.fetchProject = function() {\n var pslug;\n if (!this.project) {\n return;\n }\n pslug = this.project.get('slug');\n return this.projectsService.getProjectBySlug(pslug).then((function(_this) {\n return function(project) {\n return _this.setProject(project);\n };\n })(this));\n };\n\n ProjectService.prototype.hasPermission = function(permission) {\n return this._project.get('my_permissions').indexOf(permission) !== -1;\n };\n\n ProjectService.prototype.isEpicsDashboardEnabled = function() {\n return this._project.get(\"is_epics_activated\");\n };\n\n return ProjectService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgProjectService\", ProjectService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/theme.service.coffee\n */\n\n(function() {\n var ThemeService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n ThemeService = (function(superClass) {\n extend(ThemeService, superClass);\n\n function ThemeService() {\n return ThemeService.__super__.constructor.apply(this, arguments);\n }\n\n return ThemeService;\n\n })(taiga.Service = function() {\n return {\n use: function(themeName) {\n var stylesheetEl;\n stylesheetEl = $(\"link[rel='stylesheet']:first\");\n if (stylesheetEl.length === 0) {\n stylesheetEl = $(\"\");\n $(\"head\").append(stylesheetEl);\n }\n return stylesheetEl.attr(\"href\", \"/\" + window._version + \"/styles/theme-\" + themeName + \".css\");\n }\n };\n });\n\n angular.module(\"taigaCommon\").service(\"tgThemeService\", ThemeService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/user-activity.service.coffee\n */\n\n(function() {\n var UserActivityService, groupBy, taiga;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n UserActivityService = (function() {\n UserActivityService.$inject = ['$timeout'];\n\n UserActivityService.prototype.idleTimeout = 60 * 5 * 1000;\n\n function UserActivityService(timeout) {\n this.timeout = timeout;\n if (window.localStorage.e2e) {\n return null;\n }\n window.addEventListener('mousemove', this.resetTimer.bind(this), false);\n window.addEventListener('mousedown', this.resetTimer.bind(this), false);\n window.addEventListener('keypress', this.resetTimer.bind(this), false);\n window.addEventListener('mousewheel', this.resetTimer.bind(this), false);\n window.addEventListener('touchmove', this.resetTimer.bind(this), false);\n this.subscriptionsActive = [];\n this.subscriptionsInactive = [];\n this.isActive = true;\n this.startTimer();\n }\n\n UserActivityService.prototype.startTimer = function() {\n return this.timerId = this.timeout(this._fireInactive.bind(this), this.idleTimeout);\n };\n\n UserActivityService.prototype.resetTimer = function() {\n if (!this.isActive) {\n this._fireActive();\n }\n this.timeout.cancel(this.timerId);\n this.startTimer();\n return this.isActive = true;\n };\n\n UserActivityService.prototype.onActive = function(cb) {\n this.subscriptionsActive.push(cb);\n return this._unSubscriptionsActive.bind(this, cb);\n };\n\n UserActivityService.prototype.onInactive = function(cb) {\n this.subscriptionsInactive.push(cb);\n return this._unSubscriptionsInactive.bind(this, cb);\n };\n\n UserActivityService.prototype._fireActive = function() {\n return this.subscriptionsActive.forEach(function(it) {\n return it();\n });\n };\n\n UserActivityService.prototype._fireInactive = function() {\n this.isActive = false;\n return this.subscriptionsInactive.forEach(function(it) {\n return it();\n });\n };\n\n UserActivityService.prototype._unSubscriptionsActive = function(cb) {\n return this.subscriptionsActive = this.subscriptionsActive.filter(function(fn) {\n return fn !== cb;\n });\n };\n\n UserActivityService.prototype._unSubscriptionsInactive = function(cb) {\n return this.subscriptionsInactive = this.subscriptionsInactive.filter(function(fn) {\n return fn !== cb;\n });\n };\n\n return UserActivityService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgUserActivityService\", UserActivityService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/user-list.service.coffee\n */\n\n(function() {\n var UserListService, normalizeString, taiga;\n\n taiga = this.taiga;\n\n normalizeString = this.taiga.normalizeString;\n\n UserListService = (function() {\n UserListService.$inject = [\"tgCurrentUserService\", \"tgProjectService\"];\n\n function UserListService(currentUserService, projectService) {\n this.currentUserService = currentUserService;\n this.projectService = projectService;\n }\n\n UserListService.prototype.filterUsers = function(text, user) {\n var username;\n username = user.full_name_display.toUpperCase();\n username = normalizeString(username);\n text = text.toUpperCase();\n text = normalizeString(text);\n return _.includes(username, text);\n };\n\n UserListService.prototype.searchUsers = function(text, excludedUser) {\n var users;\n this.currentUser = this.currentUserService.getUser();\n users = _.clone(this.projectService.activeMembers.toJS(), true);\n if (excludedUser) {\n users = _.reject(users, {\n \"id\": excludedUser.id\n });\n }\n users = _.sortBy(users, (function(_this) {\n return function(o) {\n var ref;\n if (o.id === ((ref = _this.currentUser) != null ? ref.get('id') : void 0)) {\n return 0;\n } else {\n return o.id;\n }\n };\n })(this));\n if (text != null) {\n users = _.filter(users, _.partial(this.filterUsers, text));\n }\n return users;\n };\n\n return UserListService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgUserListService\", UserListService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/user.service.coffee\n */\n\n(function() {\n var UserService, bindMethods, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n bindMethods = taiga.bindMethods;\n\n UserService = (function(superClass) {\n extend(UserService, superClass);\n\n UserService.$inject = [\"tgResources\"];\n\n function UserService(rs) {\n this.rs = rs;\n bindMethods(this);\n }\n\n UserService.prototype.getUserByUserName = function(username) {\n return this.rs.users.getUserByUsername(username);\n };\n\n UserService.prototype.getContacts = function(userId, excludeProjectId) {\n return this.rs.users.getContacts(userId, excludeProjectId);\n };\n\n UserService.prototype.getLiked = function(userId, pageNumber, objectType, textQuery) {\n return this.rs.users.getLiked(userId, pageNumber, objectType, textQuery);\n };\n\n UserService.prototype.getVoted = function(userId, pageNumber, objectType, textQuery) {\n return this.rs.users.getVoted(userId, pageNumber, objectType, textQuery);\n };\n\n UserService.prototype.getWatched = function(userId, pageNumber, objectType, textQuery) {\n return this.rs.users.getWatched(userId, pageNumber, objectType, textQuery);\n };\n\n UserService.prototype.getStats = function(userId) {\n return this.rs.users.getStats(userId);\n };\n\n UserService.prototype.attachUserContactsToProjects = function(userId, projects) {\n return this.getContacts(userId).then(function(contacts) {\n projects = projects.map(function(project) {\n var contactsFiltered;\n contactsFiltered = contacts.filter(function(contact) {\n var contactId;\n contactId = contact.get(\"id\");\n return project.get('members').indexOf(contactId) !== -1;\n });\n project = project.set(\"contacts\", contactsFiltered);\n return project;\n });\n return projects;\n });\n };\n\n return UserService;\n\n })(taiga.Service);\n\n angular.module(\"taigaCommon\").service(\"tgUserService\", UserService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/xhrError.service.coffee\n */\n\n(function() {\n var xhrError,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n xhrError = (function(superClass) {\n extend(xhrError, superClass);\n\n xhrError.$inject = [\"$q\", \"tgErrorHandlingService\"];\n\n function xhrError(q, errorHandlingService) {\n this.q = q;\n this.errorHandlingService = errorHandlingService;\n }\n\n xhrError.prototype.notFound = function() {\n return this.errorHandlingService.notfound();\n };\n\n xhrError.prototype.permissionDenied = function() {\n return this.errorHandlingService.permissionDenied();\n };\n\n xhrError.prototype.response = function(xhr) {\n if (xhr) {\n if (xhr.status === 404) {\n this.notFound();\n } else if (xhr.status === 403) {\n this.permissionDenied();\n }\n }\n return this.q.reject(xhr);\n };\n\n return xhrError;\n\n })(taiga.Service);\n\n angular.module(\"taigaCommon\").service(\"tgXhrErrorService\", xhrError);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee\n */\n\n(function() {\n var UserTimelineAttachmentDirective;\n\n UserTimelineAttachmentDirective = function(template, $compile) {\n var isImage, link, validFileExtensions;\n validFileExtensions = [\".jpg\", \".jpeg\", \".bmp\", \".gif\", \".png\"];\n isImage = function(url) {\n url = url.toLowerCase();\n return _.some(validFileExtensions, function(extension) {\n return url.indexOf(extension, url - extension.length) !== -1;\n });\n };\n link = function(scope, el) {\n var is_image, templateHtml;\n is_image = isImage(scope.attachment.get('url'));\n if (is_image) {\n templateHtml = template.get(\"user-timeline/user-timeline-attachment/user-timeline-attachment-image.html\");\n } else {\n templateHtml = template.get(\"user-timeline/user-timeline-attachment/user-timeline-attachment.html\");\n }\n el.html(templateHtml);\n $compile(el.contents())(scope);\n return el.find(\"img\").error(function() {\n return this.remove();\n });\n };\n return {\n link: link,\n scope: {\n attachment: \"=tgUserTimelineAttachment\"\n }\n };\n };\n\n UserTimelineAttachmentDirective.$inject = [\"$tgTemplate\", \"$compile\"];\n\n angular.module(\"taigaUserTimeline\").directive(\"tgUserTimelineAttachment\", UserTimelineAttachmentDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-item/user-timeline-item-title.service.coffee\n */\n\n(function() {\n var UserTimelineItemTitle, unslugify;\n\n unslugify = this.taiga.unslugify;\n\n UserTimelineItemTitle = (function() {\n UserTimelineItemTitle.$inject = [\"$translate\", \"$sce\"];\n\n UserTimelineItemTitle.prototype._fieldTranslationKey = {\n 'status': 'COMMON.FIELDS.STATUS',\n 'subject': 'COMMON.FIELDS.SUBJECT',\n 'description_diff': 'COMMON.FIELDS.DESCRIPTION',\n 'points': 'COMMON.FIELDS.POINTS',\n 'assigned_to': 'COMMON.FIELDS.ASSIGNED_TO',\n 'assigned_users': 'COMMON.FIELDS.ASSIGNED_USERS',\n 'severity': 'ISSUES.FIELDS.SEVERITY',\n 'priority': 'ISSUES.FIELDS.PRIORITY',\n 'type': 'ISSUES.FIELDS.TYPE',\n 'is_iocaine': 'TASK.FIELDS.IS_IOCAINE',\n 'is_blocked': 'COMMON.FIELDS.IS_BLOCKED',\n 'color': 'COMMON.FIELDS.COLOR',\n 'due_date': 'COMMON.FIELDS.DUE_DATE',\n 'due_date_reason': 'COMMON.FIELDS.DUE_DATE_REASON',\n 'milestone': 'COMMON.FIELDS.SPRINT'\n };\n\n UserTimelineItemTitle.prototype._params = {\n username: function(timeline, event) {\n var title_attr, url, user;\n user = timeline.getIn(['data', 'user']);\n if (user.get('is_profile_visible')) {\n title_attr = this.translate.instant('COMMON.SEE_USER_PROFILE', {\n username: user.get('username')\n });\n url = \"user-profile:username=timeline.getIn(['data', 'user', 'username'])\";\n return this._getLink(url, user.get('name'), title_attr);\n } else {\n return this._getUsernameSpan(user.get('name'));\n }\n },\n field_name: function(timeline, event) {\n var field_name;\n field_name = timeline.getIn(['data', 'value_diff', 'key']);\n return this.translate.instant(this._fieldTranslationKey[field_name]);\n },\n project_name: function(timeline, event) {\n var url;\n url = \"project:project=timeline.getIn(['data', 'project', 'slug'])\";\n return this._getLink(url, timeline.getIn([\"data\", \"project\", \"name\"]));\n },\n new_value: function(timeline, event) {\n var new_value, prettyDate, value;\n if (_.isArray(timeline.getIn([\"data\", \"value_diff\", \"value\"]).toJS())) {\n value = timeline.getIn([\"data\", \"value_diff\", \"value\"]).get(1);\n if (value === null && timeline.getIn([\"data\", \"value_diff\", \"key\"]) === 'assigned_to') {\n value = this.translate.instant('ACTIVITY.VALUES.UNASSIGNED');\n }\n if (value === null && timeline.getIn([\"data\", \"value_diff\", \"key\"]) === 'assigned_users') {\n value = this.translate.instant('ACTIVITY.VALUES.UNASSIGNED');\n } else if (timeline.getIn([\"data\", \"value_diff\", \"key\"]) === 'due_date') {\n if (value) {\n prettyDate = this.translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n value = moment(value, \"YYYY-MM-DD\").format(prettyDate);\n } else {\n value = this.translate.instant('ACTIVITY.VALUES.NOT_SET');\n }\n }\n new_value = value;\n } else {\n new_value = timeline.getIn([\"data\", \"value_diff\", \"value\"]).first().get(1);\n }\n return $('').attr('ng-non-bindable', true).text(new_value).prop('outerHTML');\n },\n sprint_name: function(timeline, event) {\n var url;\n url = \"project-taskboard:project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['data', 'milestone', 'slug'])\";\n return this._getLink(url, timeline.getIn(['data', 'milestone', 'name']));\n },\n us_name: function(timeline, event) {\n var event_us, obj, text, url;\n obj = this._getTimelineObj(timeline, event).get('userstory');\n event_us = {\n obj: 'parent_userstory'\n };\n url = this._getDetailObjUrl(event_us);\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n return this._getLink(url, text);\n },\n related_us_name: function(timeline, event) {\n var obj, text, url;\n obj = timeline.getIn([\"data\", \"userstory\"]);\n url = \"project-userstories-detail:project=timeline.getIn(['data', 'userstory', 'project', 'slug']),ref=timeline.getIn(['data', 'userstory', 'ref'])\";\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n return this._getLink(url, text);\n },\n epic_name: function(timeline, event) {\n var obj, text, url;\n obj = timeline.getIn([\"data\", \"epic\"]);\n url = \"project-epics-detail:project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['data', 'epic', 'ref'])\";\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n return this._getLink(url, text);\n },\n obj_name: function(timeline, event) {\n var obj, text, url;\n obj = this._getTimelineObj(timeline, event);\n url = this._getDetailObjUrl(event);\n if (event.obj === 'wikipage') {\n text = unslugify(obj.get('slug'));\n } else if (event.obj === 'milestone') {\n text = obj.get('name');\n } else {\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n }\n return this._getLink(url, text);\n },\n role_name: function(timeline, event) {\n return _.escape(timeline.getIn(['data', 'value_diff', 'value']).keySeq().first());\n }\n };\n\n function UserTimelineItemTitle(translate, sce) {\n this.translate = translate;\n this.sce = sce;\n }\n\n UserTimelineItemTitle.prototype._translateTitleParams = function(param, timeline, event) {\n return this._params[param].call(this, timeline, event);\n };\n\n UserTimelineItemTitle.prototype._getTimelineObj = function(timeline, event) {\n return timeline.getIn(['data', event.obj]);\n };\n\n UserTimelineItemTitle.prototype._getDetailObjUrl = function(event) {\n var url;\n url = {\n \"issue\": [\"project-issues-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"wikipage\": [\"project-wiki-page\", \":project=timeline.getIn(['data', 'project', 'slug']),slug=timeline.getIn(['obj', 'slug'])\"],\n \"task\": [\"project-tasks-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"userstory\": [\"project-userstories-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"parent_userstory\": [\"project-userstories-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'userstory', 'ref'])\"],\n \"milestone\": [\"project-taskboard\", \":project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['obj', 'slug'])\"],\n \"epic\": [\"project-epics-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"]\n };\n return url[event.obj][0] + url[event.obj][1];\n };\n\n UserTimelineItemTitle.prototype._getLink = function(url, text, title) {\n var span;\n title = title || text;\n span = $('').attr('ng-non-bindable', true).text(text);\n return $('').attr('tg-nav', url).append(span).prop('outerHTML');\n };\n\n UserTimelineItemTitle.prototype._getUsernameSpan = function(text) {\n var title;\n title = title || text;\n return $('').addClass('username').text(text).prop('outerHTML');\n };\n\n UserTimelineItemTitle.prototype._getParams = function(timeline, event, timeline_type) {\n var params;\n params = {};\n timeline_type.translate_params.forEach((function(_this) {\n return function(param) {\n return params[param] = _this._translateTitleParams(param, timeline, event);\n };\n })(this));\n return params;\n };\n\n UserTimelineItemTitle.prototype.getTitle = function(timeline, event, type) {\n var params, paramsKeys, translation;\n params = this._getParams(timeline, event, type);\n paramsKeys = {};\n Object.keys(params).forEach(function(key) {\n return paramsKeys[key] = '{{' + key + '}}';\n });\n translation = this.translate.instant(type.key, paramsKeys);\n Object.keys(params).forEach(function(key) {\n var find;\n find = '{{' + key + '}}';\n return translation = translation.replace(new RegExp(find, 'g'), params[key]);\n });\n return translation;\n };\n\n return UserTimelineItemTitle;\n\n })();\n\n angular.module(\"taigaUserTimeline\").service(\"tgUserTimelineItemTitle\", UserTimelineItemTitle);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-item/user-timeline-item-type.service.coffee\n */\n\n(function() {\n var UserTimelineType, timelineType;\n\n timelineType = function(timeline, event) {\n var types;\n types = [\n {\n check: function(timeline, event) {\n return event.obj === 'membership';\n },\n key: 'TIMELINE.NEW_MEMBER',\n translate_params: ['project_name'],\n member: function(timeline) {\n return Immutable.Map({\n user: timeline.getIn(['data', 'user']),\n role: timeline.getIn(['data', 'role'])\n });\n }\n }, {\n check: function(timeline, event) {\n return event.obj === 'project' && event.type === 'create';\n },\n key: 'TIMELINE.NEW_PROJECT',\n translate_params: ['username', 'project_name'],\n description: function(timeline) {\n return timeline.getIn(['data', 'project', 'description']);\n }\n }, {\n check: function(timeline, event) {\n return event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'attachments';\n },\n key: 'TIMELINE.UPLOAD_ATTACHMENT',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'userstory' && event.type === 'create';\n },\n key: 'TIMELINE.US_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'issue' && event.type === 'create';\n },\n key: 'TIMELINE.ISSUE_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'wikipage' && event.type === 'create';\n },\n key: 'TIMELINE.WIKI_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'create' && !timeline.getIn(['data', 'task', 'userstory']);\n },\n key: 'TIMELINE.TASK_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'create' && timeline.getIn(['data', 'task', 'userstory']);\n },\n key: 'TIMELINE.TASK_CREATED_WITH_US',\n translate_params: ['username', 'project_name', 'obj_name', 'us_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'milestone' && event.type === 'create';\n },\n key: 'TIMELINE.MILESTONE_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'epic' && event.type === 'create';\n },\n key: 'TIMELINE.EPIC_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'relateduserstory' && event.type === 'create';\n },\n key: 'TIMELINE.EPIC_RELATED_USERSTORY_CREATED',\n translate_params: ['username', 'project_name', 'related_us_name', 'epic_name']\n }, {\n check: function(timeline, event) {\n return timeline.getIn(['data', 'comment']) && event.obj === 'userstory';\n },\n key: 'TIMELINE.NEW_COMMENT_US',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n text = timeline.getIn(['data', 'comment_html']);\n return $($.parseHTML(text)).text();\n }\n }, {\n check: function(timeline, event) {\n return timeline.getIn(['data', 'comment']) && event.obj === 'issue';\n },\n key: 'TIMELINE.NEW_COMMENT_ISSUE',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n text = timeline.getIn(['data', 'comment_html']);\n return $($.parseHTML(text)).text();\n }\n }, {\n check: function(timeline, event) {\n return timeline.getIn(['data', 'comment']) && event.obj === 'task';\n },\n key: 'TIMELINE.NEW_COMMENT_TASK',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n text = timeline.getIn(['data', 'comment_html']);\n return $($.parseHTML(text)).text();\n }\n }, {\n check: function(timeline, event) {\n return timeline.getIn(['data', 'comment']) && event.obj === 'epic';\n },\n key: 'TIMELINE.NEW_COMMENT_EPIC',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n text = timeline.getIn(['data', 'comment_html']);\n return $($.parseHTML(text)).text();\n }\n }, {\n check: function(timeline, event) {\n return timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'moveInBacklog' && timeline.hasIn(['data', 'value_diff', 'value', 'backlog_order']) && event.type === 'change';\n },\n key: 'TIMELINE.US_MOVED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n if (timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'moveInBacklog' && event.type === 'change' && event.obj === 'userstory') {\n return timeline.getIn(['data', 'value_diff', 'value', 'milestone']).get(1) === null;\n }\n return false;\n },\n key: 'TIMELINE.US_REMOVED_FROM_MILESTONE',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'moveInBacklog' && event.type === 'change' && event.obj === 'userstory';\n },\n key: 'TIMELINE.US_ADDED_MILESTONE',\n translate_params: ['username', 'obj_name', 'sprint_name']\n }, {\n check: function(timeline, event) {\n if (timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'blocked' && event.type === 'change') {\n return timeline.getIn(['data', 'value_diff', 'value', 'is_blocked']).get(1) === true;\n }\n return false;\n },\n key: 'TIMELINE.BLOCKED',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n if (timeline.hasIn(['data', 'value_diff', 'value', 'blocked_note_html'])) {\n text = timeline.getIn(['data', 'value_diff', 'value', 'blocked_note_html']).get(1);\n return $($.parseHTML(text)).text();\n } else {\n return false;\n }\n }\n }, {\n check: function(timeline, event) {\n if (timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'blocked' && event.type === 'change') {\n return timeline.getIn(['data', 'value_diff', 'value', 'is_blocked']).get(1) === false;\n }\n return false;\n },\n key: 'TIMELINE.UNBLOCKED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'milestone' && event.type === 'change';\n },\n key: 'TIMELINE.MILESTONE_UPDATED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'wikipage' && event.type === 'change';\n },\n key: 'TIMELINE.WIKI_UPDATED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'userstory' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'points';\n },\n key: 'TIMELINE.US_UPDATED_POINTS',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value', 'role_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'userstory' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.US_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'userstory' && event.type === 'change';\n },\n key: 'TIMELINE.US_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'issue' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.ISSUE_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'issue' && event.type === 'change';\n },\n key: 'TIMELINE.ISSUE_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'change' && !timeline.getIn(['data', 'task', 'userstory']) && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.TASK_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'change' && timeline.getIn(['data', 'task', 'userstory']) && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.TASK_UPDATED_WITH_US',\n translate_params: ['username', 'field_name', 'obj_name', 'us_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'change' && !timeline.getIn(['data', 'task', 'userstory']);\n },\n key: 'TIMELINE.TASK_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'change' && timeline.getIn(['data', 'task', 'userstory']);\n },\n key: 'TIMELINE.TASK_UPDATED_WITH_US_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'us_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'epic' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.EPIC_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'epic' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'color';\n },\n key: 'TIMELINE.EPIC_UPDATED_WITH_NEW_COLOR',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'epic' && event.type === 'change';\n },\n key: 'TIMELINE.EPIC_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'user' && event.type === 'create';\n },\n key: 'TIMELINE.NEW_USER',\n translate_params: ['username']\n }\n ];\n return _.find(types, function(obj) {\n return obj.check(timeline, event);\n });\n };\n\n UserTimelineType = (function() {\n function UserTimelineType() {}\n\n UserTimelineType.prototype.getType = function(timeline, event) {\n return timelineType(timeline, event);\n };\n\n return UserTimelineType;\n\n })();\n\n angular.module(\"taigaUserTimeline\").service(\"tgUserTimelineItemType\", UserTimelineType);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-item/user-timeline-item.directive.coffee\n */\n\n(function() {\n var UserTimelineItemDirective;\n\n UserTimelineItemDirective = function() {\n return {\n templateUrl: \"user-timeline/user-timeline-item/user-timeline-item.html\",\n scope: {\n timeline: \"=tgUserTimelineItem\"\n }\n };\n };\n\n angular.module(\"taigaUserTimeline\").directive(\"tgUserTimelineItem\", UserTimelineItemDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee\n */\n\n(function() {\n var UserTimelinePaginationSequence;\n\n UserTimelinePaginationSequence = function() {\n var obj;\n obj = {};\n obj.generate = function(config) {\n var getContent, items, next, page;\n page = 1;\n items = Immutable.List();\n config.minItems = config.minItems || 20;\n next = function() {\n items = Immutable.List();\n return getContent();\n };\n getContent = function() {\n return config.fetch(page).then(function(response) {\n var data, pagination;\n page++;\n data = response.get(\"data\");\n if (config.filter) {\n data = config.filter(data);\n }\n if (config.map) {\n data = data.map(config.map);\n }\n items = items.concat(data);\n if (items.size < config.minItems && response.get(\"next\")) {\n return getContent();\n }\n pagination = Immutable.Map({\n items: items,\n total: response.get(\"total\"),\n next: response.get(\"next\")\n });\n return pagination;\n });\n };\n return {\n next: function() {\n return next();\n }\n };\n };\n return obj;\n };\n\n angular.module(\"taigaUserTimeline\").factory(\"tgUserTimelinePaginationSequenceService\", UserTimelinePaginationSequence);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline/user-timeline.controller.coffee\n */\n\n(function() {\n var UserTimelineController, mixOf, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n UserTimelineController = (function(superClass) {\n extend(UserTimelineController, superClass);\n\n UserTimelineController.$inject = [\"tgUserTimelineService\"];\n\n function UserTimelineController(userTimelineService) {\n this.userTimelineService = userTimelineService;\n this.timelineList = Immutable.List();\n this.scrollDisabled = false;\n this.timeline = null;\n if (this.projectId) {\n this.timeline = this.userTimelineService.getProjectTimeline(this.projectId);\n } else if (this.currentUser) {\n this.timeline = this.userTimelineService.getProfileTimeline(this.user.get(\"id\"));\n } else {\n this.timeline = this.userTimelineService.getUserTimeline(this.user.get(\"id\"));\n }\n this.loadTimeline();\n }\n\n UserTimelineController.prototype.loadTimeline = function() {\n this.scrollDisabled = true;\n return this.timeline.next().then((function(_this) {\n return function(response) {\n _this.timelineList = _this.timelineList.concat(response.get(\"items\"));\n if (response.get(\"next\")) {\n _this.scrollDisabled = false;\n }\n return _this.timelineList;\n };\n })(this));\n };\n\n return UserTimelineController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n angular.module(\"taigaUserTimeline\").controller(\"UserTimeline\", UserTimelineController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline/user-timeline.directive.coffee\n */\n\n(function() {\n var UserTimelineDirective;\n\n UserTimelineDirective = function() {\n return {\n templateUrl: \"user-timeline/user-timeline/user-timeline.html\",\n controller: \"UserTimeline\",\n controllerAs: \"vm\",\n scope: {\n projectId: \"=projectid\",\n user: \"=\",\n currentUser: \"=\"\n },\n bindToController: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgUserTimeline\", UserTimelineDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline/user-timeline.service.coffee\n */\n\n(function() {\n var UserTimelineService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n UserTimelineService = (function(superClass) {\n extend(UserTimelineService, superClass);\n\n UserTimelineService.$inject = [\"tgResources\", \"tgUserTimelinePaginationSequenceService\", \"tgUserTimelineItemType\", \"tgUserTimelineItemTitle\"];\n\n function UserTimelineService(rs, userTimelinePaginationSequenceService, userTimelineItemType, userTimelineItemTitle) {\n this.rs = rs;\n this.userTimelinePaginationSequenceService = userTimelinePaginationSequenceService;\n this.userTimelineItemType = userTimelineItemType;\n this.userTimelineItemTitle = userTimelineItemTitle;\n }\n\n UserTimelineService.prototype._valid_fields = ['status', 'subject', 'description_diff', 'assigned_users', 'assigned_to', 'points', 'severity', 'priority', 'type', 'attachments', 'is_iocaine', 'content_diff', 'name', 'estimated_finish', 'estimated_start', 'blocked', 'moveInBacklog', 'milestone', 'color', 'due_date', 'due_date_reason'];\n\n UserTimelineService.prototype._invalid = [\n {\n check: function(timeline) {\n var fieldKey, value_diff;\n value_diff = timeline.get(\"data\").get(\"value_diff\");\n if (value_diff) {\n fieldKey = value_diff.get('key');\n if (this._valid_fields.indexOf(fieldKey) === -1) {\n return true;\n } else if (fieldKey === 'attachments' && value_diff.get('value').get('new').size === 0) {\n return true;\n }\n }\n return false;\n }\n }, {\n check: function(timeline) {\n var event, value_diff;\n event = timeline.get('event_type').split(\".\");\n value_diff = timeline.get(\"data\").get(\"value_diff\");\n return event[2] === 'change' && value_diff === void 0;\n }\n }, {\n check: function(timeline) {\n var event;\n event = timeline.get('event_type').split(\".\");\n return event[2] === 'delete';\n }\n }, {\n check: function(timeline) {\n var event;\n event = timeline.get('event_type').split(\".\");\n return event[1] === 'project' && event[2] === 'change';\n }\n }, {\n check: function(timeline) {\n return !!timeline.get(\"data\").get(\"comment_deleted\");\n }\n }, {\n check: function(timeline) {\n var event, value_diff;\n event = timeline.get('event_type').split(\".\");\n value_diff = timeline.get(\"data\").get(\"value_diff\");\n if (value_diff && event[1] === \"task\" && event[2] === \"change\" && value_diff.get(\"key\") === \"milestone\") {\n return timeline.get(\"data\").get(\"value_diff\").get(\"value\");\n }\n return false;\n }\n }\n ];\n\n UserTimelineService.prototype._isInValidTimeline = function(timeline) {\n return _.some(this._invalid, (function(_this) {\n return function(invalid) {\n return invalid.check.call(_this, timeline);\n };\n })(this));\n };\n\n UserTimelineService.prototype._parseEventType = function(event_type) {\n event_type = event_type.split(\".\");\n return {\n section: event_type[0],\n obj: event_type[1],\n type: event_type[2]\n };\n };\n\n UserTimelineService.prototype._getTimelineObject = function(timeline, event) {\n if (timeline.get('data').get(event.obj)) {\n return timeline.get('data').get(event.obj);\n }\n };\n\n UserTimelineService.prototype._attachExtraInfoToTimelineEntry = function(timeline, event, type) {\n var title;\n title = this.userTimelineItemTitle.getTitle(timeline, event, type);\n timeline = timeline.set('title_html', title);\n timeline = timeline.set('obj', this._getTimelineObject(timeline, event));\n if (type.description) {\n timeline = timeline.set('description', type.description(timeline));\n }\n if (type.member) {\n timeline = timeline.set('member', type.member(timeline));\n }\n if (timeline.getIn(['data', 'value_diff', 'key']) === 'attachments' && timeline.hasIn(['data', 'value_diff', 'value', 'new'])) {\n timeline = timeline.set('attachments', timeline.getIn(['data', 'value_diff', 'value', 'new']));\n }\n return timeline;\n };\n\n UserTimelineService.prototype._parseTimeline = function(response) {\n var newdata;\n newdata = Immutable.List();\n response.get('data').forEach((function(_this) {\n return function(item) {\n var data, event, newItem, values_diff;\n event = _this._parseEventType(item.get('event_type'));\n data = item.get('data');\n values_diff = data.get('values_diff');\n if (values_diff && values_diff.count()) {\n if (values_diff.has('is_blocked')) {\n values_diff = Immutable.Map({\n 'blocked': values_diff\n });\n }\n if (values_diff.has('milestone')) {\n if (event.obj === 'userstory') {\n values_diff = Immutable.Map({\n 'moveInBacklog': values_diff\n });\n } else {\n values_diff = values_diff.deleteIn(['values_diff', 'milestone']);\n }\n } else if (event.obj === 'milestone') {\n values_diff = Immutable.Map({\n 'milestone': values_diff\n });\n }\n return values_diff.forEach(function(value, key) {\n var newItem, obj;\n obj = Immutable.Map({\n key: key,\n value: value\n });\n newItem = item.setIn(['data', 'value_diff'], obj);\n newItem = newItem.deleteIn(['data', 'values_diff']);\n return newdata = newdata.push(newItem);\n });\n } else {\n newItem = item.deleteIn(['data', 'values_diff']);\n return newdata = newdata.push(newItem);\n }\n };\n })(this));\n return response.set('data', newdata);\n };\n\n UserTimelineService.prototype._addEntyAttributes = function(item) {\n var event, type;\n event = this._parseEventType(item.get('event_type'));\n type = this.userTimelineItemType.getType(item, event);\n return this._attachExtraInfoToTimelineEntry(item, event, type);\n };\n\n UserTimelineService.prototype.getProfileTimeline = function(userId) {\n var config;\n config = {};\n config.fetch = (function(_this) {\n return function(page) {\n return _this.rs.users.getProfileTimeline(userId, page).then(function(response) {\n return _this._parseTimeline(response);\n });\n };\n })(this);\n config.map = (function(_this) {\n return function(obj) {\n return _this._addEntyAttributes(obj);\n };\n })(this);\n config.filter = (function(_this) {\n return function(items) {\n return items.filterNot(function(item) {\n return _this._isInValidTimeline(item);\n });\n };\n })(this);\n return this.userTimelinePaginationSequenceService.generate(config);\n };\n\n UserTimelineService.prototype.getUserTimeline = function(userId) {\n var config;\n config = {};\n config.fetch = (function(_this) {\n return function(page) {\n return _this.rs.users.getUserTimeline(userId, page).then(function(response) {\n return _this._parseTimeline(response);\n });\n };\n })(this);\n config.map = (function(_this) {\n return function(obj) {\n return _this._addEntyAttributes(obj);\n };\n })(this);\n config.filter = (function(_this) {\n return function(items) {\n return items.filterNot(function(item) {\n return _this._isInValidTimeline(item);\n });\n };\n })(this);\n return this.userTimelinePaginationSequenceService.generate(config);\n };\n\n UserTimelineService.prototype.getProjectTimeline = function(projectId) {\n var config;\n config = {};\n config.fetch = (function(_this) {\n return function(page) {\n return _this.rs.projects.getTimeline(projectId, page).then(function(response) {\n return _this._parseTimeline(response);\n });\n };\n })(this);\n config.map = (function(_this) {\n return function(obj) {\n return _this._addEntyAttributes(obj);\n };\n })(this);\n config.filter = (function(_this) {\n return function(items) {\n return items.filterNot(function(item) {\n return _this._isInValidTimeline(item);\n });\n };\n })(this);\n return this.userTimelinePaginationSequenceService.generate(config);\n };\n\n return UserTimelineService;\n\n })(taiga.Service);\n\n angular.module(\"taigaUserTimeline\").service(\"tgUserTimelineService\", UserTimelineService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: utils/isolate-click.directive.coffee\n */\n\n(function() {\n var IsolateClickDirective;\n\n IsolateClickDirective = function() {\n var link;\n link = function(scope, el, attrs) {\n return el.on('click', (function(_this) {\n return function(e) {\n return e.stopPropagation();\n };\n })(this));\n };\n return {\n link: link\n };\n };\n\n angular.module(\"taigaUtils\").directive(\"tgIsolateClick\", IsolateClickDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history-diff.directive.coffee\n */\n\n(function() {\n var WikiHistoryDiffDirective, module;\n\n module = angular.module('taigaWikiHistory');\n\n WikiHistoryDiffDirective = function() {\n return {\n templateUrl: \"wiki/history/wiki-history-diff.html\",\n scope: {\n key: \"<\",\n diff: \"<\"\n }\n };\n };\n\n module.directive(\"tgWikiHistoryDiff\", WikiHistoryDiffDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history-entry.directive.coffee\n */\n\n(function() {\n var WikiHistoryEntryDirective, module;\n\n module = angular.module('taigaWikiHistory');\n\n WikiHistoryEntryDirective = function() {\n var link;\n link = function(scope, el, attr) {\n return scope.singleHistoryEntry = scope.historyEntry.toJS();\n };\n return {\n link: link,\n templateUrl: \"wiki/history/wiki-history-entry.html\",\n scope: {\n historyEntry: \"<\"\n }\n };\n };\n\n module.directive(\"tgWikiHistoryEntry\", WikiHistoryEntryDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history.controller.coffee\n */\n\n(function() {\n var WikiHistoryController, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaWikiHistory\");\n\n WikiHistoryController = (function() {\n WikiHistoryController.$inject = [\"tgActivityService\"];\n\n function WikiHistoryController(activityService) {\n this.activityService = activityService;\n taiga.defineImmutableProperty(this, 'historyEntries', (function(_this) {\n return function() {\n return _this.activityService.entries;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'disablePagination', (function(_this) {\n return function() {\n return _this.activityService.disablePagination;\n };\n })(this));\n this.toggle = false;\n }\n\n WikiHistoryController.prototype.initializeHistory = function(wikiId) {\n if (wikiId) {\n this.activityService.init('wiki', wikiId);\n }\n return this.loadHistory();\n };\n\n WikiHistoryController.prototype.loadHistory = function() {\n return this.activityService.fetchEntries();\n };\n\n WikiHistoryController.prototype.nextPage = function() {\n return this.activityService.nextPage();\n };\n\n return WikiHistoryController;\n\n })();\n\n module.controller(\"WikiHistoryCtrl\", WikiHistoryController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history.directive.coffee\n */\n\n(function() {\n var WikiHistoryDirective, bindOnce, module;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module('taigaWikiHistory');\n\n WikiHistoryDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return bindOnce(scope, 'vm.wikiId', function(value) {\n return ctrl.initializeHistory(value);\n });\n };\n return {\n scope: {},\n bindToController: {\n wikiId: \"<\"\n },\n controller: \"WikiHistoryCtrl\",\n controllerAs: \"vm\",\n templateUrl: \"wiki/history/wiki-history.html\",\n link: link\n };\n };\n\n module.directive(\"tgWikiHistory\", WikiHistoryDirective);\n\n}).call(this);\n\n//# sourceMappingURL=maps/app.js.map\n"]} \ No newline at end of file diff --git a/dist/v-1547534999795/js/templates.js b/dist/v-1547534999795/js/templates.js deleted file mode 100644 index 2a121fb..0000000 --- a/dist/v-1547534999795/js/templates.js +++ /dev/null @@ -1,18 +0,0 @@ -angular.module("templates",[]).run(["$templateCache",function(t){t.put("auth/change-password-from-recovery.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n
    \n


    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("auth/forgot-password.html",'\n
    '),t.put("auth/invitation.html",'\n
    \n
    \n
    \n

    \n

    \n
    \n \n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("auth/login-text.html",'\n'),t.put("auth/login.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n

    \n \n
    \n
    \n
    '),t.put("auth/register.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-membership-paginator.html",'\n
      <% if (showPrevious) { %>\n <% } %>\n <% _.each(pages, function(item) { %>\n
    • <% if (item.type === "page") { %><%- item.num %><% } else if (item.type === "page-active") { %><%- item.num %><% } else { %>...<% } %>
    • <% }); %>\n <% if (showNext) { %>\n <% } %>\n
    '),t.put("admin/admin-memberships-row-checkbox.html",'\n
    \n \n
    \n
    '),t.put("admin/admin-memberships.html",'\n
    \n \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-change-owner.html",'\n
    {{::owner.full_name_display}}
    \n
    \n
    {{ \'ADMIN.PROJECT_PROFILE.PROJECT_OWNER\' | translate }}
    \n
    {{::owner.full_name_display}}
    \n
    {{ \'ADMIN.PROJECT_PROFILE.CHANGE_OWNER\' | translate }}'),t.put("admin/admin-project-default-values.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-export.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n \n \n
    \n
    '),t.put("admin/admin-project-modules.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n

    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    '), -t.put("admin/admin-project-profile.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    {{ \'ADMIN.PROJECT_PROFILE.RECRUITING\' | translate }}\n \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    {{ \'ADMIN.PROJECT_PROFILE.FEEDBACK\' | translate }}\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n {{\'ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC\' | translate }}\n
    \n {{ \'ADMIN.PROJECT_PROFILE.DELETE\' | translate }}\n
    \n
    \n
    \n
    \n'),t.put("admin/admin-project-reports.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n
    \n \n
    \n
    '),t.put("admin/admin-project-request-ownership.html",'\n
    {{::owner.full_name_display}}
    \n
    \n
    {{ \'ADMIN.PROJECT_PROFILE.PROJECT_OWNER\' | translate }}
    \n
    {{::owner.full_name_display}}
    \n
    {{ \'ADMIN.PROJECT_PROFILE.REQUEST_OWNERSHIP\' | translate }}'),t.put("admin/admin-project-restrictions.html",'\n
    {{ \'ADMIN.PROJECT_PROFILE.MAX_PRIVATE_PROJECTS\' | translate }}{{ \'ADMIN.PROJECT_PROFILE.MAX_PRIVATE_PROJECTS_MEMBERS\' | translate }}{{ \'ADMIN.PROJECT_PROFILE.MAX_PUBLIC_PROJECTS\' | translate }}{{ \'ADMIN.PROJECT_PROFILE.MAX_PUBLIC_PROJECTS_MEMBERS\' | translate }}
    '),t.put("admin/admin-project-values-custom-fields.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ customFieldSectionTitle | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ attr.name }}\n \n
    \n
    {{ attr.description }}
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    {{ option }}
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ customFieldSectionTitle | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ attr.name }}\n \n
    \n
    {{ attr.description }}
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    {{ option }}
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ customFieldSectionTitle | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ attr.name }}\n \n
    \n
    {{ attr.description }}
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    {{ option }}
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ customFieldSectionTitle | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ attr.name }}\n \n
    \n
    {{ attr.description }}
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    {{ option }}
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    '), -t.put("admin/admin-project-values-due-dates.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.days_to_due_abs }}
    \n
    {{ \'ADMIN.PROJECT_DUE_DATE_STATUS.BEFORE\' | translate }}{{ \'ADMIN.PROJECT_DUE_DATE_STATUS.AFTER\' | translate }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.days_to_due_abs }}
    \n
    {{ \'ADMIN.PROJECT_DUE_DATE_STATUS.BEFORE\' | translate }}{{ \'ADMIN.PROJECT_DUE_DATE_STATUS.AFTER\' | translate }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.days_to_due_abs }}
    \n
    {{ \'ADMIN.PROJECT_DUE_DATE_STATUS.BEFORE\' | translate }}{{ \'ADMIN.PROJECT_DUE_DATE_STATUS.AFTER\' | translate }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-values-points.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{sectionName | translate}}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ value.name }}
    \n
    {{ value.value }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '), -t.put("admin/admin-project-values-priorities.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-values-severities.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-values-status.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.slug }}
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.slug }}
    \n
    \n \n
    \n
    \n \n
    \n
    {{ value.wip_limit }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.slug }}
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.slug }}
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '), -t.put("admin/admin-project-values-tags.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{\'BACKLOG.EMPTY\' | translate}}\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    {{\'BACKLOG.EMPTY\' | translate}}\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-values-types.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-roles.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n \n \n
    \n

    {{ role.name }}\n

    \n
    \n
    \n

    {{ role.name }}

    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-third-parties-bitbucket.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n
    '),t.put("admin/admin-third-parties-github.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    '), -t.put("admin/admin-third-parties-gitlab.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n
    '),t.put("admin/admin-third-parties-gogs.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    '),t.put("admin/admin-third-parties-webhooks.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("admin/lightbox-add-members.html",'\n\n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n

    \n
    '),t.put("admin/memberships-row-avatar.html",'\n
    <%- full_name %>\n
    \n
    <%- full_name %><% if (isOwner) { %>\n <% } %>\n
    \n
    <% if (pending) { %><%- pending %><% } %>
    \n
    \n
    '),t.put("admin/memberships-warning-message.html",'\n

    \n

    '),t.put("admin/no-more-memberships-explanation.html",'\n

    \n

    '),t.put("admin/project-csv.html",'\n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n \n \n
    \n
    '),t.put("backlog/backlog.html",'\n
    \n \n \n \n \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    --
    \n
    --
    \n
    --
    \n
    --
    \n
    \n \n
    \n
    \n
    \n \n
    \n

    \n

    {{\'BACKLOG.CUSTOMIZE_GRAPH_TEXT\' | translate}} {{\'BACKLOG.CUSTOMIZE_GRAPH_ADMIN\' | translate}}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{ ::us.total_voters }}\n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    {{\'BACKLOG.EMPTY\' | translate}}\n

    \n
    \n
    \n \n
    \n
    \n

    \n \n
    \n
    {{\'BACKLOG.SPRINTS.EMPTY\' | translate}}\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ \'BACKLOG.SPRINTS.WARNING_EMPTY_SPRINT_ANONYMOUS\' | translate }}{{ \'BACKLOG.SPRINTS.WARNING_EMPTY_SPRINT\' | translate }}
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ \'BACKLOG.SPRINTS.WARNING_EMPTY_SPRINT_ANONYMOUS\' | translate }}{{ \'BACKLOG.SPRINTS.WARNING_EMPTY_SPRINT\' | translate }}
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    '), -t.put("backlog/progress-bar.html",'\n
    \n
    \n
    '),t.put("backlog/sprint-header.html",'\n\n
    \n
    {{::estimatedDateRange}}
    \n
      \n
    • {{::closedPoints | number}}
    • \n
    • {{::totalPoints | number}}
    • \n
    \n
    '),t.put("backlog/us-role-points-popover.html",'\n'),t.put("contrib/main.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    '),t.put("contrib/user-settings.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    '),t.put("common/lightbox-feedback.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("custom-attributes/custom-attribute-value-edit.html",'\n
    \n
    \n <% if (description){ %><%- description %><% } %>\n
    \n
    <% if (type=="text") { %>\n <% } else if (type=="multiline") { %>\n <% } else if (type=="richtext") { %>\n <% } else if (type=="date") { %>\n <% } else if (type=="url") { %>\n <% } else if (type=="dropdown") { %>\n <% } else if (type=="number") { %>\n <% } else if (type=="checkbox") { %>\n
    \n \n
    \n
    <% } else { %>\n <% } %>\n
    <% if (type != "richtext") { %>\n <% } %>\n
    '),t.put("custom-attributes/custom-attribute-value.html",'\n
    \n
    <%- name %><% if (description){ %><%- description %><% } %>
    <% if (type=="url") { %>\n <% } else if (type=="richtext") { %>\n
    \n
    \n
    <% } else if (type=="checkbox") { %>\n
    <% if (value) { %>{{ \'COMMON.YES\' | translate }}<% } else { %>{{ \'COMMON.NO\' | translate }}<% } %>
    <% } else { %>\n
    <%- value %>
    <% } %>\n <% if (isEditable) { %>\n <% } %>\n
    '),t.put("custom-attributes/custom-attributes-values.html",'\n
    \n \n
    \n
    \n
    \n
    '),t.put("epic/epic-detail.html",'\n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n \n \n \n
    '),t.put("error/error.html",'\n
    \n
    TAIGA\n

    Taiga

    \n

    \n
    \n
    '),t.put("error/not-found.html",'\n
    \n
    TAIGA\n

    \n

    \n
    \n
    '),t.put("error/permission-denied.html",'\n
    \n
    TAIGA\n

    \n

    \n
    \n
    '),t.put("issue/assign-sprint-to-issue-button.html",'\n \n \n \n'),t.put("issue/iocaine-button.html",'\n
    \n \n \n
    '),t.put("issue/issue-paginator.html",'\n
      <% if (showPrevious) { %>\n <% } %>\n <% _.each(pages, function(item) { %>\n
    • <% if (item.type === "page") { %><%- item.num %><% } else if (item.type === "page-active") { %><%- item.num %><% } else { %>...<% } %>
    • <% }); %>\n <% if (showNext) { %>\n <% } %>\n
    '),t.put("issue/issue-priority-button.html",'\n
    <%- priority.name %><% if(editable){ %>\n <% }%>\n \n
    '),t.put("issue/issue-severity-button.html",'\n
    <%- severity.name %><% if(editable){ %>\n <% }%>\n \n
    '),t.put("issue/issue-status-inline-edition-selection.html",'\n'),t.put("issue/issue-type-button.html",'\n
    <%- type.name %><% if(editable){ %>\n <% }%>\n \n
    '),t.put("issue/issues-detail.html",'\n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n
    '),t.put("issue/issues.html",'\n'),t.put("issue/promote-issue-to-us-button.html",'\n '),t.put("kanban/kanban.html",'\n
    \n \n
    \n \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    {{ usByStatus.get(s.id.toString()).size }}0
    \n
    \n \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    '), -t.put("search/lightbox-search.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("search/search.html",'\n
    \n \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n \n
    \n \n \n \n \n \n
    \n
    '),t.put("task/related-task-create-form.html",'\n'),t.put("task/related-task-row-edit.html",'\n
    \n \n
    \n
    \n \n
    \n\n\n
    \n
    \n
    \n \n
    \n
    '),t.put("task/related-task-row.html",'\n
    <% if(perms.modify_task) { %>\n <% } %>\n
    \n\n
    <% if(perms.modify_task) { %>\n <% } %>\n <% if(perms.delete_task) { %>\n <% } %>\n
    \n\n
    \n
    \n
    <% if(perms.modify_task) { %>\n <% } %>\n
    \n
    '),t.put("task/task-detail.html",'\n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n \n \n \n
    '),t.put("taskboard/taskboard-user.html",'\n
    \n'),t.put("taskboard/taskboard.html",'\n
    \n \n
    \n \n
    \n

    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    {{rolePoint.points}}{{rolePoint.name}}
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n

    \n \n \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n

    \n

    \n
    \n

    \n \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n

    \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    '), -t.put("team/leave-project.html",'\n {{ \'TEAM.ACTION_LEAVE_PROJECT\' | translate }}'),t.put("team/team-filter.html",'\n'),t.put("team/team-member-current-user.html",'\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("team/team-member-stats.html",'\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("team/team-members.html",'\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    '),t.put("team/team.html",'\n
    \n \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{filtersRole.name || ("TEAM.SECTION_FILTER_ALL" | translate)}}

    \n
    \n
    \n
    '),t.put("us/us-client-requirement-button.html",'\n\n'),t.put("us/us-detail.html",'\n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n {{\'US.TRIBE.PUBLISH_INFO\' | translate}}\n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    '),t.put("us/us-team-requirement-button.html",'\n\n'),t.put("user/cancel-account.html",'\n'),t.put("user/change-email.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n
    \n

    \n

    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("user/live-notifications.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{sectionName | translate}}

    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("user/mail-notifications.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{sectionName | translate}}

    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("user/user-change-password.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{sectionName | translate}}

    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    '),t.put("user/user-profile.html",'\n
    \n \n
    \n \n
    \n
    \n \n
    \n'), -t.put("user/user-project-settings.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{ \'USER_SETTINGS.PROJECT_SETTINGS.SET_START_PAGES\' | translate }}

    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ projectSettings.project_name }}
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("user/web-notifications.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{sectionName | translate}}\n

    \n
    \n

     

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("wiki/wiki-list.html",'\n
    \n \n \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{wikipage.editions}}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("wiki/wiki-nav.html",'\n
    \n

    \n
    \n\n\n<% if (addWikiLinkPermission) { %>\n <% } %>\n'),t.put("wiki/wiki-summary.html",'\n
    \n
    <%- user.name %>
    \n
    <%- user.name %>
    \n
    \n
    <%- lastModifiedDate %>
    \n
    <%- totalEditions %>
    \n'),t.put("wiki/wiki.html",'\n
    \n \n \n
    \n
    \n

    \n
    \n \n
    \n \n \n
    \n
    '),t.put("common/estimation/us-estimation-points-per-role.html",'\n
      <% _.each(roles, function(role) { %>\n
    • <%- role.points %>\n <%- role.name %>
    • <% }); %>\n
    • <%- totalPoints %>
    • \n
    '),t.put("common/estimation/us-estimation-points.html",'\n'),t.put("common/estimation/us-estimation-total.html",'<%= text %><% if (editable) { %>\n <% } %>'),t.put("common/estimation/us-points-roles-popover.html",'\n'),t.put("common/components/add-button.html",'\n '),t.put("common/components/assigned-to-inline.html",'\n
    {{ fullName }}\n
    \n \n
    \n
    \n
    \n \n \n
    '),t.put("common/components/assigned-to.html",'\n
    {{ fullName }}\n
    \n \n
    \n
    \n
    \n \n
    {{ "COMMON.ASSIGNED_TO.NOT_ASSIGNED" | translate }}
    \n \n
    '),t.put("common/components/assigned-users-inline.html",'\n
    \n
    \n
    {{assignedUser.full_name_display}}
    \n
    +{{ hiddenUsers }}
    \n
    \n
    \n
    {{assignedUsers[0].full_name_display}}
    \n
    \n
    {{ assignedUsers[0].full_name_display }}
    \n \n
    \n
    \n \n
    \n\n'),t.put("common/components/assigned-users.html",'\n
    {{ "COMMON.FIELDS.ASSIGNED_TO" | translate }}
    \n
    \n
    \n
    {{ \'COMMON.ASSIGNED_TO.ASSIGN\' | translate }}\n
    \n
    \n \n
    {{ "COMMON.ASSIGNED_TO.NOT_ASSIGNED" | translate }}
    \n
    \n
    \n \n
    \n
    \n {{ "COMMON.ASSIGNED_USERS.ADD_ASSIGNED" | translate }}\n
    '),t.put("common/components/block-button.html",'\n \n '),t.put("common/components/created-by.html",'\n
    \n
    {{date}}
    \n
    \n
    {{owner.full_name_display}}
    '),t.put("common/components/delete-button.html",'\n '),t.put("common/components/editable-description-msg-edit-mode.html",'\n

    '),t.put("common/components/editable-description-msg-read-mode.html",'\n

    '),t.put("common/components/editable-subject.html",'\n
    {{ item.subject }}\n \n
    \n
    \n \n \n
    '),t.put("common/components/kanban-placeholder.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{\'KANBAN.PLACEHOLDER_CARD_TITLE\' | translate}}

    \n

    {{\'KANBAN.PLACEHOLDER_CARD_TEXT\' | translate}}

    '),t.put("common/components/level.html",'\n
    '),t.put("common/components/list-item-assigned-to-avatar.html",'\n
    <%- name %><%- name %>
    '),t.put("common/components/main-title.html",'{{ projectName }}{{ sectionName | translate }}'),t.put("common/components/progress-bar.html",'\n
    '),t.put("common/components/status-button.html",'<%- status.name %><% if(editable){ %>\n <% }%>\n'),t.put("common/components/status-display.html",'<% if (is_closed) { %><% } else { %><% } %>'),t.put("common/components/taskboard-placeholder.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{\'TASKBOARD.PLACEHOLDER_CARD_TITLE\' | translate}}

    \n

    {{\'TASKBOARD.PLACEHOLDER_CARD_TEXT\' | translate}}

    '),t.put("common/components/user-display.html",'\n
    {{user.full_name_display}}
    {{user.full_name_display}}\n
    {{user.full_name_display}}
    {{user.full_name_display}}'),t.put("common/components/watchers.html",'\n
    \n
    {{watcher.full_name_display}}
    \n
    {{watcher.full_name_display}}\n \n
    \n
    '),t.put("common/components/wysiwyg-toolbar.html",'\n
    \n
    \n

    {{\'COMMON.WYSIWYG.OUTDATED\' | translate}}

    \n
    \n
    \n \n
    Markdown ModeHTML Mode\n
    \n
    \n\n'),t.put("common/lightbox/lightbox-assigned-to-users.html",'<% if (selected) { %>\n<% } %>\n<% _.each(users, function(user) { %>\n<% }) %>\n<% if (showMore) { %>\n
    <% } %>'),t.put("common/lightbox/lightbox-assigned-to.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n
    '),t.put("common/lightbox/lightbox-assigned-users-users.html",'<% _.each(selected, function(user) { %>\n<% }) %>\n<% _.each(users, function(user) { %>\n<% }) %>\n<% if (showMore) { %>\n
    <% } %>'), -t.put("common/lightbox/lightbox-assigned-users.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n
    \n
    '),t.put("common/lightbox/lightbox-block.html",'\n\n
    \n

    \n
    \n \n
    \n
    '),t.put("common/lightbox/lightbox-blocking-message-input.html",'\n'),t.put("common/lightbox/lightbox-change-owner.html",'\n\n
    \n

    \n
    \n \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n \n
    '),t.put("common/lightbox/lightbox-due-date.html",'\n\n
    \n

    \n
    \n \n
      \n
    • {{ \'LIGHTBOX.SET_DUE_DATE.SUGGESTIONS.IN_ONE_WEEK\' | translate }}
    • \n
    • {{ \'LIGHTBOX.SET_DUE_DATE.SUGGESTIONS.IN_TWO_WEEKS\' | translate }}
    • \n
    • {{ \'LIGHTBOX.SET_DUE_DATE.SUGGESTIONS.IN_ONE_MONTH\' | translate }}
    • \n
    • {{ \'LIGHTBOX.SET_DUE_DATE.SUGGESTIONS.IN_THREE_MONTHS\' | translate }}
    • \n
    \n
    \n
    {{ \'LIGHTBOX.SET_DUE_DATE.REASON_FOR_DUE_DATE\' | translate }}\n \n
    \n \n \n
    '),t.put("common/lightbox/lightbox-leave-project-warning.html",'\n\n
    \n \n

    {{\'LIGHTBOX.LEAVE_PROJECT_WARNING.TITLE\' | translate}}

    \n
    \n

    {{\'LIGHTBOX.LEAVE_PROJECT_WARNING.CURRENT_USER_OWNER.DESC\' | translate}}

    \n
    \n
    \n

    {{\'LIGHTBOX.LEAVE_PROJECT_WARNING.OTHER_USER_OWNER.DESC\' | translate}}

    \n
    \n
    '),t.put("common/lightbox/lightbox-relate-to-epic.html",'\n\n'),t.put("common/lightbox/lightbox-request-ownership.html",'\n\n
    \n

    \n

    \n
    '),t.put("common/lightbox/lightbox-users.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n
    \n
    '),t.put("common/popover/popover-related-task-status.html",'\n'),t.put("common/popover/popover-us-status.html",'\n'),t.put("common/tag/lb-tag-line-tags.html",'<% _.each(tags, function(tag) { %><%- tag.name %>\n <% }); %>'),t.put("common/tag/lb-tag-line.html",'\n
    \n'),t.put("common/tag/tag-line.html",'\n
    \n '),t.put("common/tag/tags-line-tags.html",'\n<% _.each(tags, function(tag) { %>\n<% if (tag.name == deleteTagLoading) { %>\n
    <% } else { %><%- tag.name %><% if (isEditable) { %>\n <% } %><% } %>\n<% }); %>\n
    '),t.put("common/wysiwyg/wysiwyg-markitup-preview.html",'\n
    \n
    \n \n
    <%= data %>
    \n
    \n
    '),t.put("user/lightbox/lightbox-delete-account.html",'\n\n
    \n

    \n

    \n
    \n
    '),t.put("common/lightbox/lightbox-create-edit/lb-create-edit-issue.html",'\n
    \n
    \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    '),t.put("common/lightbox/lightbox-create-edit/lb-create-edit-task.html",'\n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    '),t.put("common/lightbox/lightbox-create-edit/lb-create-edit-us.html",'\n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("common/lightbox/lightbox-create-edit/lb-create-edit.html",'\n\n
    \n

    {{ \'LIGHTBOX.CREATE_EDIT.NEW_\' + translationID | translate }}{{ \'LIGHTBOX.CREATE_EDIT.EDIT_\' + translationID | translate }}{{ \'LIGHTBOX.CREATE_EDIT.ADD_EXISTING_\' + translationID | translate: { targetName: targetName } }}

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    {{ selectedStatus.name }}\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    '),t.put("projects/create/asana-import/asana-import-project-form/asana-import-project-form.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n

    \n

    \n
    \n \n \n
    \n
    \n
    \n
    '),t.put("projects/create/github-import/github-import-project-form/github-import-project-form.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    '),t.put("projects/create/invite-members/single-member/single-member.html",'\n'),t.put("projects/create/jira-import/jira-import-project-form/jira-import-project-form.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n

    \n

    \n
    \n

    \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    '), -t.put("projects/create/trello-import/trello-import-project-form/trello-import-project-form.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    '),t.put("external-apps/external-app.html",'\n
    \n \n

    Taiga

    \n

    \n
    \n
    \n
    {{::vm.user.get(\'full_name_display\')}}
    \n
    \n

    {{ ::vm.user.get("full_name_display") }}

    \n

    {{ ::vm.user.get("email") }}

    \n
    \n
    \n
    \n
    \n
    \n
    {{::vm.application.get(\'name\')}}
    \n
    \n

    {{ ::vm.application.get("name") }}

    {{ ::vm.application.get(\'web\') }}\n

    {{ ::vm.application.get("description") }}

    \n
    \n
    \n
    \n
    '),t.put("history/history.html",'\n
    \n \n \n
    \n \n
    \n
    '),t.put("home/home.html",'\n
    \n
    \n

    {{"HOME.DASHBOARD" | translate}}

    \n \n
    \n \n
    '),t.put("invite-members/lightbox-add-members.html",'\n\n
    \n

    \n \n \n
    '),t.put("notifications/notifications.html",'\n
    \n
    \n
    \n

    {{ \'EVENTS.MY_EVENTS\' | translate }}

    {{ \'EVENTS.DISMISS_ALL\' | translate }}{{ \'EVENTS.DISMISS_ALL\' | translate }}\n
    \n \n
    \n
    '),t.put("navigation-bar/navigation-bar.html",'\n'),t.put("profile/profile.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    '),t.put("components/assigned-to/assigned-to.html",'{{vm.assignedTo.get(\'full_name_display\')}}{{vm.assignedTo.get(\'full_name_display\')}}{{\'EPICS.DASHBOARD.UNASSIGNED\' | translate}}{{\'EPICS.DASHBOARD.UNASSIGNED\' | translate}}'),t.put("components/attachment/attachment-gallery.html","\n"),t.put("components/attachment/attachment.html",'\n
    \n \n
    {{\'ATTACHMENT.DEPRECATED\' | translate}}{{vm.attachment.getIn([\'file\', \'description\'])}}
    \n
    {{::vm.attachment.getIn([\'file\', \'size\']) | sizeFormat}}
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n
    '),t.put("components/attachments-full/attachments-full.html",'\n
    \n
    \n

    {{vm.attachments.size}}

    \n
    \n \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    {{\'ATTACHMENT.DROP\' | translate}}
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n {{file.name}}\n
    \n
    {{file.size | sizeFormat}}
    \n
    {{file.progressMessage}}\n
    \n
    \n
    \n
    \n
    \n \n
    \n'),t.put("components/attachments-preview/attachments-preview.html",'\n
    \n \n \n
    '),t.put("components/attachments-simple/attachments-simple.html",'\n
    \n
    \n

    {{vm.attachments.size}}

    \n
    \n \n \n
    \n
    \n
    \n
    {{\'ATTACHMENT.DROP\' | translate}}
    \n
    \n
    \n
    \n
    \n {{attachment.get(\'name\')}}\n
    \n
    {{attachment.get(\'size\') | sizeFormat}}
    \n \n
    \n
    \n
    '),t.put("components/belong-to-epics/belong-to-epics-pill.html","\n
    "),t.put("components/belong-to-epics/belong-to-epics-text.html",':\n'),t.put("components/board-zoom/board-zoom.html",'\n'),t.put("components/card/card.html","\n
    \n
    \n
    \n
    \n
    {{vm.item.getIn(['assigned_to', 'full_name'])}}\n \n
    \n \n \n \n
    \n \n
    {{ vm.item.getIn(['status', 'name']) }}{{\"COMMON.FIELDS.POINTS\" | translate}} {{vm.item.getIn(['model', 'total_points'])}}\n
    \n \n
    \n \n
    \n
    \n {{vm.item.getIn(['model', 'total_voters'])}}\n
    \n
    \n {{vm.item.getIn(['model', 'watchers']).size}}\n
    \n
    \n {{vm.item.getIn(['model', 'total_comments'])}}\n
    \n
    \n {{vm.item.getIn(['model', 'attachments']).size}}\n
    \n
    \n
    \n
    \n
    \n
    tasks {{vm.getClosedTasks().size}}/{{vm.item.getIn(['model', 'tasks']).size}}\n
    \n
      \n
    • \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    "), -t.put("components/card-slideshow/card-slideshow.html",'\n
    \n \n \n
    \n \n
    \n
    '),t.put("components/color-selector/color-selector.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
      \n
    • \n
    • \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    '),t.put("components/due-date/due-date-button.html",'\n'),t.put("components/due-date/due-date-icon.html",'\n'),t.put("components/due-date/due-date-popover.html",'\n
    \n \n \n
    \n
    \n \n
    \n
    '),t.put("components/filter/filter.html",'\n

    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    {{it.name}}\n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    '),t.put("components/live-announcement/live-announcement.html",'\n
    \n
    Loading...\n
    \n

    {{vm.title}}

    \n

    \n \n
    \n
    \n
    '),t.put("components/move-to-sprint/move-to-sprint.html",'\n '),t.put("components/project-menu/project-menu.html",'\n'),t.put("components/search-list/search-list-issue-choice.html",'\n
    #{{ item.ref }} {{ item.subject }}
    \n
    {{ milestonesById[item.milestone].name }}
    '),t.put("components/search-list/search-list-sprint-choice.html",'\n
    {{ item.name }}
    \n
    {{ item.estimated_start }} - {{ item.estimated_finish }}
    '),t.put("components/search-list/search-list.html",'\n
    \n \n {{ textShowClosed }} \n {{ textHideClosed }}\n \n
      \n
    • \n \n
    • \n
    \n

    {{ noItemsText }}

    \n
    '),t.put("components/terms-announcement/terms-announcement.html",'\n
    \n
    Loading...\n
    \n

    {{\'LEGAL.GDPR_ANNOUNCEMENT_TITLE\' | translate}}

    \n

    {{ \'LEGAL.GDPR_ANNOUNCEMENT_DESCRIPTION\' | translate }}

    {{\'LEGAL.GDPR_ANNOUNCEMENT_INFOLINK\' | translate}}\n \n
    \n
    \n
    '),t.put("components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html",'\n

    \n \n

    '),t.put("components/tips/tip.html",'\n
    \n

    \n

    \n
    \n

    \n 5\n

    \n \n

    \n \n \n

    \n
    \n
    \n
    \n

    \n
    '),t.put("components/tribe-button/tribe-button.html",'{{ \'US.TRIBE.PUBLISH\' | translate }}'),t.put("components/tribe-button/tribe-linked.html",'\n'),t.put("components/vote-button/vote-button.html",'\n {{ vm.item.total_voters }}\n {{ ::vm.item.total_voters }}'),t.put("components/watch-button/watch-button-ticket.html",'\n
    {{ \'COMMON.WATCH_BUTTON.COUNTER_TITLE\'|translate:{total:vm.item.watchers.length||0}:\'messageformat\' }}
    \n'),t.put("components/watch-button/watch-button.html",'\n {{ \'COMMON.WATCH_BUTTON.COUNTER_TITLE\'|translate:{total:vm.item.watchers.length||0}:\'messageformat\' }}\n {{ \'COMMON.WATCH_BUTTON.COUNTER_TITLE\'|translate:{total:vm.item.watchers.length||0}:\'messageformat\' }}'),t.put("discover/discover-home/discover-home.html",'\n
    \n
    \n \n
    \n
    \n \n \n
    \n \n
    '),t.put("discover/discover-search/discover-search.html",'\n
    \n \n
    {{ DISCOVER.EMPTY | translate }}\n

    \n
    \n
    \n
    \n
    \n \n
    \n
      \n
    • \n
      {{::project.get(\'name\')}}\n
      \n

      {{project.get(\'name\')}}\n \n

      \n

      {{ ::project.get(\'description\') | limitTo:300 }}...

      \n
      \n
      \n
      \n {{::project.get(\'total_fans\')}}\n {{::project.get(\'total_watchers\')}}\n {{ ::project.get(\'members\').size }}
      \n
    • \n
    {{ \'DISCOVER.VIEW_MORE\' | translate }}\n
    \n
    \n
    '),t.put("epics/create-epic/create-epic.html",'\n\n
    \n

    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    '),t.put("epics/dashboard/epics-dashboard.html",'\n
    \n \n
    \n
    \n

    \n
    \n \n
    \n
    \n \n
    \n

    \n

    \n \n
    \n
    \n
    '),t.put("epics/related-userstories/related-userstories.html",'\n'),t.put("history/history/history-diff.html",'\n
    \n
    {{diff[0]}}\n {{diff[1]}}\n
    \n
    \n
    \n
    {{newAttachment.filename}}
    \n
    {{editAttachment.changes.description[0]}}...\n {{editAttachment.changes.description[1]}}
    \n
    {{deletedAttachment.filename}}
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    \n

    \n

    \n

    \n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0] | momentFormat:\'DD MMM YYYY\'}}\n {{vm.diff[1] | momentFormat:\'DD MMM YYYY\'}}\n
    \n
    \n
    \n
    \n

    {{vm.diffRemoveTags}}

    \n

    {{vm.diffAddTags}}

    \n
    \n
    \n
    \n
    ({{newCustom.name}})\n

    {{newCustom.value}}
    \n
    ({{changeCustom.name}})\n

    {{changeCustom.changes.value[0]}}\n {{changeCustom.changes.value[1]}}
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    '), -t.put("history/history/history.html",'\n
    \n
    \n
    \n
    \n
    {{activity.user.name}}{{activity.created_at | momentFormat:\'DD MMM YYYY HH:mm\'}}
    \n
    \n
    \n
    \n
    \n
    '),t.put("history/comments/comment.html",'\n
    \n
    \n
    {{vm.comment.user.name}}{{vm.comment.created_at | momentFormat:\'DD MMM YYYY HH:mm\'}}\n
    {{vm.comment.edit_comment_date | momentFormat:\'DD MMM YYYY HH:mm\'}}-\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    - {{vm.comment.delete_comment_date | momentFormat:\'DD MMM YYYY HH:mm\'}}\n \n \n
    \n

    \n
    '),t.put("history/comments/comments.html",'\n
    \n
    \n \n
    \n \n
    '),t.put("history/history-lightbox/comment-history-lightbox.html",'\n\n
    \n

    \n
    \n \n
    \n
    '),t.put("history/history-lightbox/history-entry.html",'\n
    \n
    \n
    {{entry.user.full_name_display}}\n \n
    \n
    \n
    \n
    '),t.put("history/history-tabs/history-tabs.html",'\n'),t.put("home/duties/duty.html","\n
    \n
    \n
    \n

    {{ ::vm.duty.getIn(['project', 'name']) }}{{ ::vm.getDutyType() }}{{ ::vm.duty.get('status_extra_info').get('name') }}\n \n

    \n

    {{ 'COMMON.BLOCKED' | translate }}

    \n
    "),t.put("home/projects/home-project-list.html",'\n
    \n
    \n
    \n
    \n

    {{::project.get(\'name\')}}\n \n \n \n

    \n
    \n

    {{::project.get(\'description\')| limitTo:100 }}...

    \n
    \n {{::project.get(\'total_fans\')}}\n {{::project.get(\'total_watchers\')}}\n {{ ::project.get(\'members\').size }}\n
    \n
    \n
    \n
    \n
    \n \n

    \n
    '),t.put("home/working-on/empty.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("home/working-on/working-on.html",'\n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("invite-members/invite-members-form/invite-members-form.html",'\n
    \n
      \n
    • \n
      {{contact.full_name}}{{contact.full_name}}
      \n \n
    • \n
    • \n
      {{userMail.email}}
      \n \n
    • \n
    \n
    \n \n
    \n \n \n \n

    \n
    '),t.put("notifications/notifications-list/notifications-list.html",'\n
    \n
    \n
    Loading...
    \n
    \n
    \n
    {{ \'EVENTS.NO_EVENTS_YET\' | translate }}
    \n
    \n
    \n
    \n \n
    {{::notification.getIn([\'data\', \'user\', \'name\'])}}
    \n \n
    {{::notification.getIn([\'data\', \'user\', \'name\'])}}
    \n
    \n
    \n

    \n

    {{::notification.getIn([\'data\', \'project\', \'name\'])}}

    \n
    \n \n
    \n
    \n
    \n
    '),t.put("navigation-bar/dropdown-notifications/dropdown-notifications.html",'\n \n
    {{ total }}
    \n'),t.put("invite-members/suggest-add-members/suggest-add-members.html",'\n
    \n
    \n \n \n
    \n
      \n
    • {{contact.get(\'full_name_display\')}}{{contact.get(\'full_name_display\')}}
    • \n
    \n
    '),t.put("navigation-bar/dropdown-project-list/dropdown-project-list.html",'\n \n'),t.put("navigation-bar/dropdown-user/dropdown-user.html",'{{ vm.user.get(\'full_name_display\') }}{{ vm.user.get(\'full_name_display\') }}\n'),t.put("profile/profile-bar/profile-bar.html",'\n
    \n
    {{::vm.user.get(\'full_name\')}}
    \n
    \n

    {{::vm.user.get("full_name_display")}}

    \n
    @{{::vm.user.get("username")}}
    \n

    {{::vm.stats.get(\'roles\').join(", ")}}

    \n
    \n
    \n
    {{::vm.stats.get(\'total_num_projects\')}}
    \n
    {{::vm.stats.get(\'total_num_closed_userstories\')}}
    \n
    {{::vm.stats.get(\'total_num_contacts\')}}
    \n
    \n
    {{::vm.user.get("bio") | limitTo:210 }}{{vm.user.get("bio").length < 210 ? \'\' : \'...\'}}
    \n
    '),t.put("profile/profile-contacts/profile-contacts.html",'\n
    \n
    \n
    Loading...
    \n
    \n
    {{ \'USER.PROFILE.CONTACTS_EMPTY\' | translate }}\n
    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n
    {{::contact.get(\'full_name\')}}\n
    \n

    {{::contact.get(\'full_name_display\')}}

    \n

    {{::contact.get(\'roles\').join(", ")}}

    \n

    {{::contact.get(\'bio\')}}

    \n
    \n
    \n
    '),t.put("profile/profile-favs/profile-favs.html",'\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ \'COMMON.LOADING\'|translate }}
    \n
    \n
    {{ \'USER.PROFILE_FAVS.EMPTY_TITLE\' | translate }}{{ \'USER.PROFILE_FAVS.EMPTY_TITLE\' | translate }}{{ \'USER.PROFILE_FAVS.EMPTY_TITLE\' | translate }}\n

    {{ \'USER.PROFILE_FAVS.EMPTY_TITLE\' | translate }}

    \n
    \n
    '),t.put("profile/profile-hints/profile-hints.html",'\n

    \n \n

    \n

    {{::vm.hint.title}}

    \n

    \n {{::vm.hint.text}}\n  \n

    '),t.put("profile/profile-projects/profile-projects.html",'\n
    \n
    \n
    Loading...
    \n
    \n
    \n \n

    \n
    \n
    \n
    \n
    {{::project.get(\'name\')}}\n
    \n

    {{::project.get(\'name\')}}\n \n

    \n

    {{ ::project.get(\'description\') | limitTo:300 }}

    \n
    \n
    \n
    \n
    \n
    \n {{ ::project.get(\'total_fans\') }}\n {{ ::project.get(\'total_watchers\') }}
    \n
    {{::contact.get(\'full_name\')}}
    \n
    \n
    \n
    '), -t.put("profile/profile-tab/profile-tab.html",'\n
    \n \n
    '),t.put("profile/profile-tabs/profile-tabs.html",'\n'),t.put("projects/create/create-project.html",'\n'),t.put("projects/project/blocked-project-explanation.html","\n
    \n
    {{'PROJECT.BLOCKED_PROJECT.THIS_PROJECT_IS_BLOCKED' | translate}}
    \n
    \n
    \n
    {{'PROJECT.BLOCKED_PROJECT.TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF' | translate}}
    \n
    "),t.put("projects/project/blocked-project.html",'\n
    \n
    \n
    \n
    {{::vm.project.get(\'name\')}}\n \n
    {{::vm.project.get("name")}}\n
    \n
    \n

    {{\'PROJECT.BLOCKED_PROJECT.BLOCKED\' | translate}}

    \n \n
    \n
    \n
    '),t.put("projects/project/project.html",'\n
    \n \n
    \n
    \n \n
    \n
    \n
    \n

    {{::vm.project.get("name")}}

    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n {{ ::vm.project.get(\'total_fans\') }}\n {{ ::vm.project.get(\'total_watchers\') }}
    \n
    \n
    \n

    {{vm.project.get(\'description\')}}

    \n
    \n
    \n
    {{::tag}}
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{\'PROJECT.LOOKING_FOR_PEOPLE\' | translate}}

    \n

    {{::vm.project.get(\'looking_for_people_note\')}}

    \n \n
    \n

    {{"PROJECT.SECTION.TEAM" | translate}}

    \n \n
    \n
    \n
    \n
    '),t.put("projects/transfer/cant-own-project-explanation.html",'\n

    '),t.put("projects/transfer/transfer-page.html",'\n'),t.put("projects/transfer/transfer-project.html",'\n
    \n

    \n
    {{vm.project.get(\'name\')}}\n
    \n

    {{::vm.project.get("name")}}

    \n
    \n \n {{::vm.project.get("total_memberships")}}
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    '),t.put("user-timeline/user-timeline/user-timeline.html",'\n
    \n
    \n
    Loading...
    \n
    \n
    \n
    \n
    \n
    '),t.put("user-timeline/user-timeline-attachment/user-timeline-attachment-image.html",'\n\n
    \n
    {{::attachment.get(\'filename\')}}
    \n
    '),t.put("user-timeline/user-timeline-attachment/user-timeline-attachment.html",'\n'),t.put("user-timeline/user-timeline-item/user-timeline-item.html","\n
    {{::timeline.get('created') | momentFromNow}}\n
    \n
    \n \n
    \"{{::timeline.getIn(['data',
    \n \n
    \"{{::timeline.getIn(['data',
    \n

    \n
    \n
    {{::timeline.get('description') | limitTo:300}}
    \n
    \"{{::timeline.getIn(['member','user',\n
    {{::timeline.getIn(['member','user', 'name'])}}\n

    {{::timeline.getIn(['member','role', 'name'])}}

    \n
    \n
    \n
    \n
    \n
    \n
    "),t.put("wiki/history/wiki-history-diff.html",'\n
    \n
    {{newAttachment.filename}}
    \n
    {{editAttachment.changes.description[0]}}...\n {{editAttachment.changes.description[1]}}
    \n
    {{deletedAttachment.filename}}
    \n
    \n
    \n

    \n

    \n
    '),t.put("wiki/history/wiki-history-entry.html",'\n
    \n
    \n
    {{singleHistoryEntry.user.name}}{{singleHistoryEntry.created_at | momentFormat:\'DD MMM YYYY HH:mm\'}}
    \n
    \n
    \n
    '),t.put("wiki/history/wiki-history.html",'\n\n

    {{ disablePagination }}

    \n
    \n \n
    '),t.put("projects/listing/projects-listing.html",'\n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
      \n
    • \n
      \n
      {{::project.get(\'name\')}}\n
      \n

      {{project.get(\'name\')}}\n \n \n \n

      \n

      {{ ::project.get(\'description\') | limitTo:300 }}...

      \n
      \n
      \n
      \n \n
    • \n
    \n
    \n \n
    \n
    '),t.put("components/assigned-to/assigned-item/assigned-item.html",'\n
    \n
    {{member.full_name}}
    \n
    '),t.put("components/assigned-to/assigned-to-selector/assigned-to-selector.html",'\n\n
    \n

    \n \n
      \n
    • \n \n \n
    • \n
    • \n \n
    • \n
    \n
    '),t.put("components/card/card-templates/card-completion.html","\n
    \n
    \n
    tasks {{vm.getClosedTasks().size}}/{{vm.item.getIn(['model', 'tasks']).size}}\n
    "),t.put("components/card/card-templates/card-data.html","\n
    {{ vm.item.getIn(['status', 'name']) }}{{\"COMMON.FIELDS.POINTS\" | translate}} {{vm.item.getIn(['model', 'total_points'])}}\n
    \n \n
    \n \n
    \n
    \n {{vm.item.getIn(['model', 'total_voters'])}}\n
    \n
    \n {{vm.item.getIn(['model', 'watchers']).size}}\n
    \n
    \n {{vm.item.getIn(['model', 'total_comments'])}}\n
    \n
    \n {{vm.item.getIn(['model', 'attachments']).size}}\n
    \n
    \n
    "),t.put("components/card/card-templates/card-owner.html",'\n
    \n
    \n
    {{vm.item.getIn([\'assigned_to\', \'full_name\'])}}\n \n
    \n \n \n \n
    '),t.put("components/card/card-templates/card-tags.html",'\n
    '),t.put("components/card/card-templates/card-tasks.html","\n
      \n
    • \n
    "),t.put("components/card/card-templates/card-title.html","\n

    {{::\"#\" + vm.item.getIn(['model', 'ref'])}}\n

    "),t.put("components/card/card-templates/card-unfold.html",'\n
    \n \n
    \n
    '),t.put("components/detail/header/detail-header.html",'\n
    \n

    {{\'#\' + vm.item.ref}}\n \n \n

    \n
    \n \n \n \n
    \n
    \n
    \n \n \n
    \n\n
    \n\n\n
    {{vm.item.blocked_note}}
    \n'), -t.put("components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.html",'\n\n
    \n
    \n

    {{ \'TASKBOARD.MOVE_TO_SPRINT.TITLE_ACTION_MOVE_UNFINISHED\'|translate }}

    \n
      \n
    • \n
      \n \n
      \n
      \n
    • \n
    • \n
      \n \n
      \n
      \n
    • \n
    • \n
      \n \n
      \n
      \n
    • \n
    \n
    \n
    \n

    {{ \'TASKBOARD.MOVE_TO_SPRINT.NO_OPEN_SPRINTS\'|translate }}

    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    '),t.put("components/tags/components/add-tag-button.html",'\n '),t.put("components/tags/components/add-tag-input.html",'\n
    \n \n \n \n \n
    '),t.put("components/tags/tag/tag.html",'\n'),t.put("components/tags/tag-dropdown/tag-dropdown.html",'\n
      \n
    • \n
      {{tag[0]}}
      \n
    • \n
    '),t.put("components/tags/tag-line-common/tag-line-common.html",'\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n \n \n \n
    '),t.put("components/tags/tag-line-detail/tag-line-detail.html",'\n'),t.put("components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("discover/components/discover-home-order-by/discover-home-order-by.html",'\n
    {{vm.currentText()}}\n \n
      \n
    • {{ \'DISCOVER.FILTERS.WEEK\' | translate }}
    • \n
    • {{ \'DISCOVER.FILTERS.MONTH\' | translate }}
    • \n
    • {{ \'DISCOVER.FILTERS.YEAR\' | translate }}
    • \n
    • {{ \'DISCOVER.FILTERS.ALL_TIME\' | translate }}
    • \n
    \n
    '),t.put("discover/components/discover-search-bar/discover-search-bar.html",'\n
    \n
    \n

    {{ \'DISCOVER.DISCOVER_TITLE\' | translate }}

    \n

    \n
    \n \n
    \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    '),t.put("discover/components/discover-search-list-header/discover-search-list-header.html",'\n'),t.put("discover/components/featured-projects/featured-projects.html",'\n'),t.put("discover/components/highlighted/highlighted.html",'\n
    \n
    \n
    \n
    \n
    \n

    {{::project.get(\'name\')}}\n \n

    \n
    \n {{::project.get(\'total_fans\')}}\n {{::project.get(\'total_watchers\')}}\n {{ ::project.get(\'members\').size }}
    \n
    \n

    {{ ::project.get(\'description\') | limitTo:150 }}{{ ::project.get(\'description\').length < 150 ? \'\' : \'...\'}}

    \n
    \n
    \n \n
    '),t.put("discover/components/most-active/most-active.html",'\n
    \n
    \n
    \n \n

    {{ \'DISCOVER.MOST_ACTIVE\' | translate }}

    \n
    \n \n
    \n \n
    \n
    \n {{ \'DISCOVER.MOST_ACTIVE_EMPTY\' | translate }}\n
    '),t.put("discover/components/most-liked/most-liked.html",'\n
    \n
    \n
    \n \n

    {{ \'DISCOVER.MOST_LIKED\' | translate }}

    \n
    \n \n
    \n \n
    \n
    \n {{ \'DISCOVER.MOST_LIKED_EMPTY\' | translate }}\n
    '),t.put("epics/dashboard/epic-row/epic-row.html",'\n
    \n \n
    \n {{::vm.epic.get(\'total_voters\')}}\n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    {{vm.epic.getIn([\'status_extra_info\', \'name\'])}}
    \n
    \n \n
      \n
    • {{status.name}}
    • \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    '),t.put("epics/dashboard/epics-table/epics-table.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    '),t.put("epics/dashboard/story-row/story-row.html",'\n
    \n
    \n {{::vm.story.get(\'total_voters\')}}\n
    \n
    \n \n
    \n
    {{::vm.story.getIn([\'project_extra_info\', \'name\'])}}
    \n
    {{::vm.story.get(\'milestone_name\')}}
    \n
    {{::vm.story.getIn([\'assigned_to_extra_info\', \'full_name_display\'])}}
    \n
    {{EPICS.DASHBOARD.UNASSIGNED | translate}}
    \n
    {{vm.story.getIn([\'status_extra_info\', \'name\'])}}
    \n
    \n
    \n
    \n
    \n
    '),t.put("epics/related-userstories/related-userstories-create/related-userstories-create.html",'\n \n'), -t.put("epics/related-userstories/related-userstory-row/related-userstory-row.html",'\n\n
    \n \n
    \n\n
    {{::vm.userstory.getIn([\'project_extra_info\', \'name\'])}}
    \n
    {{vm.userstory.getIn([\'status_extra_info\', \'name\'])}}
    \n
    \n
    {{ vm.avatar.full_name_display }}\n
    {{ vm.getAssignedToFullNameDisplay() }}
    \n
    \n
    \n
    '),t.put("history/history/history-templates/blocked.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/client-requirement.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-assigned-users.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-assigned.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-attachments.html",'\n
    {{newAttachment.filename}}
    \n
    {{editAttachment.changes.description[0]}}...\n {{editAttachment.changes.description[1]}}
    \n
    {{deletedAttachment.filename}}
    '),t.put("history/history/history-templates/history-color.html",'\n
    \n \n
    '),t.put("history/history/history-templates/history-custom-attributes.html",'\n
    ({{newCustom.name}})\n

    {{newCustom.value}}
    \n
    ({{changeCustom.name}})\n

    {{changeCustom.changes.value[0]}}\n {{changeCustom.changes.value[1]}}
    '),t.put("history/history/history-templates/history-description.html",'\n
    \n

    \n

    \n

    \n
    '),t.put("history/history/history-templates/history-due-date.html",'\n
    {{vm.diff[0] | momentFormat:\'DD MMM YYYY\'}}\n {{vm.diff[1] | momentFormat:\'DD MMM YYYY\'}}\n
    '),t.put("history/history/history-templates/history-milestone.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-points.html",'\n
    {{diff[0]}}\n {{diff[1]}}\n
    '),t.put("history/history/history-templates/history-priority.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-severity.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-status.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-subject.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-tags.html",'\n
    \n

    {{vm.diffRemoveTags}}

    \n

    {{vm.diffAddTags}}

    \n
    '),t.put("history/history/history-templates/history-type.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/team-requirement.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("profile/profile-favs/items/project.html",'\n
    \n
    \n
    \n
    \n

    {{ ::vm.item.get(\'name\') }}\n \n \n

    \n

    {{ ::vm.item.get(\'description\') }}

    \n
    \n
    \n
    \n
    \n {{ ::vm.item.get(\'total_fans\') }}\n {{ ::vm.item.get(\'total_watchers\') }}
    \n
    '),t.put("profile/profile-favs/items/ticket.html",'\n
    {{ ::vm.item.getIn([\'assigned_to_extra_info\', \'full_name_display\']) }}{{ \'COMMON.ASSIGNED_TO.NOT_ASSIGNED\'|translate }}\n
    \n

    {{:: vm.item.get(\'project_name\') }}{{:: vm.item.get(\'status\') }}\n \n

    \n

    \n
    \n
    \n {{ ::vm.item.get(\'total_voters\') }}\n {{ ::vm.item.get(\'total_watchers\') }}
    \n
    '),t.put("projects/components/contact-project-button/contact-project-button.html",'\n'),t.put("projects/components/lb-contact-project/lb-contact-project.html",'\n\n'),t.put("projects/components/like-project-button/like-project-button.html",'\n'),t.put("projects/components/watch-project-button/watch-project-button.html",'\n\n'),t.put("projects/create/asana-import/asana-import.html",'\n
    \n

    autorization...

    \n
    \n\n\n'),t.put("projects/create/create-project-form/create-project-form.html",'\n
    \n
    \n \n

    \n
    \n

    \n
    \n \n

    \n
    \n

    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    '),t.put("projects/create/create-project-members-restrictions/create-project-members-restrictions.html",'\n
    \n \n
    \n
    \n \n
    '),t.put("projects/create/create-project-restrictions/create-project-restrictions.html",'\n
    \n {{ \'PROJECT.CREATE.MAX_PRIVATE_PROJECTS\' | translate }}\n
    \n
    \n {{ \'PROJECT.CREATE.MAX_PUBLIC_PROJECTS\' | translate }}\n
    '),t.put("projects/create/duplicate/duplicate-project.html",'\n
    \n

    \n

    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    '),t.put("projects/create/github-import/github-import.html",'\n
    \n

    autorization...

    \n
    \n\n\n'),t.put("projects/create/import/import-header.html",'\n
    \n

    \n

    \n
    '),t.put("projects/create/import/import-project-error-lb.html",'\n\n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n
    '),t.put("projects/create/import/import-project.html",'\n
    \n
    \n
      \n
    • \n
    • \n \n
      Jira\n

      \n
      \n \n \n \n
      \n
      \n
    • \n
    • \n \n
      Github\n

      \n
      \n
    • \n
    • \n \n
      Trello\n

      \n
      \n
    • \n
    • \n \n
      Asana\n

      \n
      \n
    • \n
    \n
    \n \n
    \n
    \n\n\n\n'), -t.put("projects/create/import-project-form-common/actions.html",'\n
    \n \n \n
    '),t.put("projects/create/import-project-form-common/description.html",'\n
    \n \n
    '),t.put("projects/create/import-project-form-common/links.html",'\n
    \n \n
    \n \n
    \n
    \n
    '),t.put("projects/create/import-project-form-common/name.html",'\n
    \n \n \n
    '),t.put("projects/create/import-project-form-common/project-privacy.html",'\n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    '),t.put("projects/create/import-project-members/import-project-members.html",'\n
    \n
    \n

    \n

    \n \n
    \n \n \n
    \n
      \n
    • \n
      \n
      {{member.get(\'full_name\')[0].toUpperCase()}}
      \n
      {{member.get(\'full_name\') || member.get(\'username\') }}\n
      \n
      \n
      \n \n \n
      \n
      \n {{vm.getUser(member).get(\'full_name\') || vm.getUser(member)}}\n
      \n \n
      \n
    • \n
    \n
    \n \n \n
    \n \n \n
    '),t.put("projects/create/import-project-selector/import-project-selector.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
      \n
    • {{project.name}}
    • \n
    \n
    \n

    {{ vm.noProjectsMsg }}

    \n
    \n
    \n

    \n
    \n
    \n \n
    \n
    \n
    \n
    '),t.put("projects/create/import-taiga/import-taiga.html",'\n\n\n
    Taiga\n

    \n
    '),t.put("projects/create/invite-members/invite-members.html",'\n
    \n
    \n \n
    \n
    '),t.put("projects/create/jira-import/jira-import.html",'\n
    \n

    autorization...

    \n
    \n\n\n'),t.put("projects/create/select-import-user-lightbox/select-import-user-lightbox.html",'\n\n
    \n
    \n
    {{vm.user.get(\'full_name\')[0].toUpperCase() || vm.user.get(\'username\')[0].toUpperCase()}}
    \n
    {{vm.user.get(\'full_name\') || vm.user.get(\'username\')}}\n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    '),t.put("projects/create/warning-user-import-lightbox/warning-user-import-lightbox.html",'\n\n
    \n

    \n

    \n
    \n \n \n
    \n
    '),t.put("projects/create/trello-import/trello-import.html",'\n\n\n'),t.put("wiki/history/history-templates/history-attachments.html",'\n
    {{newAttachment.filename}}
    \n
    {{editAttachment.changes.description[0]}}...\n {{editAttachment.changes.description[1]}}
    \n
    {{deletedAttachment.filename}}
    ')}]); \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-ca.json b/dist/v-1547534999795/locales/taiga/locale-ca.json deleted file mode 100644 index a144ac1..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-ca.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Si","NO":"No","OR":"o","I_GET_IT":"OK, I get it","LOADING":"Carregant...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Desa","CANCEL":"Següent","ACCEPT":"Acceptar","DELETE":"Esborrar","UNLINK":"Unlink","CREATE":"Crear","ADD":"Afegir","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"edita","DRAG":"Moure","TAG_LINE":"La teua eïna de gestió de projectes àgil, gratuita i de codi obert ","TAG_LINE_2":"ESTIMA EL TEU PROJECTE","BLOCK":"Bloquejar","BLOCK_TITLE":"Bloqueja aquest element si té una dependència que no pot ser satisfeta","BLOCKED":"Bloquejat","UNBLOCK":"Desbloquejar","UNBLOCK_TITLE":"Desbloquejar aquest element","BLOCKED_NOTE":"Per qué està bloquejat?","BLOCKED_REASON":"Per favor, explica la raó","CREATED_BY":"Creat per {{fullDisplayName}}","CLOSE":"Tancar","GO_HOME":"Porta'm a l'inici ","PLUGINS":"Plugins","ONE_ITEM_LINE":"In item per línia","NEW_BULK":"Nova inserció en grup","SUBTASKS":"Subtasks","PREVIOUS":"Previous","NEXT":"Següent","LOGOUT":"Surt","EXTERNAL_USER":"un usuari extern","GENERIC_ERROR":"Un Oompa Loompas diu {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Project Owner","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Esborrar incidència","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Aquest valor pareix invàlid.","TYPE_EMAIL":"Deu ser un correu vàlid.","TYPE_URL":"Deu ser una URL vàlida.","TYPE_URLSTRICT":"Deu ser una URL vàlida.","TYPE_NUMBER":"Deu ser un nombre vàlid.","TYPE_DIGITS":"Aquest valor ha de ser numèric","TYPE_DATEISO":"Aquest valor ha de ser una data vàlida (YYYY-MM-DD)","TYPE_ALPHANUM":"Aquest valor ha de ser alfanumèric.","TYPE_PHONE":"Aquest valor ha de ser un número de telèfon vàlid.","NOTNULL":"Aquest valor no pot ser nul.","NOT_BLANK":"Aquest valor no pot estar buit","REQUIRED":"Aquest valor és necessari.","REGEXP":"Aquest valor pareix invàlid.","MIN":"This value should be greater than or equal to %s.","MAX":"This value should be lower than or equal to %s.","RANGE":"This value should be between %s and %s.","MIN_LENGTH":"This value is too short. It should have %s characters or more.","MAX_LENGTH":"This value is too long. It should have %s characters or less.","RANGE_LENGTH":"This value length is invalid. It should be between %s and %s characters long.","MIN_CHECK":"You must select at least %s choices.","MAX_CHECK":"Heu de seleccionar la opció %s o inferior.","RANGE_CHECK":"Heu de seleccionar entre les opcions %s i %s.","EQUAL_TO":"Aquest valor hauria de ser el mateix.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mes anterior","NEXT_MONTH":"Mes que ve","MONTHS":{"JAN":"Gener","FEB":"Febrer","MAR":"Març","APR":"Abril","MAY":"Maig","JUN":"Juny","JUL":"Juliol","AUG":"Agost","SEP":"Setembre","OCT":"Octubre","NOV":"Novembre","DEC":"Desembre"},"WEEK_DAYS":{"SUN":"Diumenge","MON":"Dilluns","TUE":"Dimarts","WED":"Dimecres","THU":"Dijous","FRI":"Divendres","SAT":"Dissabte"},"WEEK_DAYS_SHORT":{"SUN":"Dg","MON":"Dl","TUE":"Dt","WED":"Dc","THU":"Dj","FRI":"Dv","SAT":"Ds"}},"SEE_USER_PROFILE":"Veure el perfil de {{usuari}}","USER_STORY":"Història d'usuari","TASK":"Tasca","ISSUE":"incidència","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Elimina l'etiqueta","ADD":"Afegeix l'etiqueta"},"DESCRIPTION":{"EMPTY":"Els espai buit es molt aburrit. Sé descriptiu!","NO_DESCRIPTION":"Sense descripció"},"FIELDS":{"SUBJECT":"Descripció","NAME":"Nom","URL":"URL","DESCRIPTION":"Descripció","VALUE":"Valor","SLUG":"Slug","COLOR":"Color","IS_CLOSED":"Està tancat?","STATUS":"Estats","TYPE":"Tipus","SEVERITY":"Severitat","PRIORITY":"Prioritat","ASSIGNED_TO":"Assignat a","ASSIGNED_USERS":"Assigned users","POINTS":"Punts","IS_BLOCKED":"està bloquejat","REF":"Ref","VOTES":"Vots","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Tot"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Sense assignar","ASSIGN":"Assign","DELETE_ASSIGNMENT":"Esborrar assignament","REMOVE_ASSIGNED":"Esborra assignat","TOO_MANY":".. massa usuaris, segueix filtrant","CONFIRM_UNASSIGNED":"Segut que vols deixar-ho sense assignar?","TITLE_ACTION_EDIT_ASSIGNMENT":"Editar assignament","SELF":"Assign to me"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Tancat","OPEN":"Obert"},"WATCHERS":{"WATCHERS":"Watchers","ADD":"Add watchers","TITLE_ADD":"Add a project member to the watchers list","DELETE":"Esborrar seguidor","TITLE_LIGHTBOX_DELETE_WARTCHER":"Esborrar seguidor..."},"WATCH_BUTTON":{"WATCH":"Segueix","WATCHING":"Observant","UNWATCH":"Unwatch","WATCHERS":"Watchers","BUTTON_TITLE":"Watch/Unwatch this item","COUNTER_TITLE":"{total, plural, one{un seguidor} other{# seguidors}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Camps personalitzats","SAVE":"Salva camp personalitzat","EDIT":"Edita el camp personalitzat","DELETE":"Esborrar atribut personalitzat","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Descripció o referència","TITLE_ACTION_FILTER_BUTTON":"cerca","TITLE":"Filtres","TITLE_ACTION_SEARCH":"Cerca","ACTION_SAVE_CUSTOM_FILTER":"Guarda com a filtre","PLACEHOLDER_FILTER_NAME":"Escriu el filtre i pressiona Intro","APPLIED_FILTERS_NUM":"filters applied","CATEGORIES":{"TYPE":"Tipus","STATUS":"Estats","SEVERITY":"Severitat","PRIORITIES":"Prioritats","TAGS":"Etiquetes","ASSIGNED_TO":"Assignat a","ASSIGNED_USERS":"Assigned users","ROLE":"Rol","CREATED_BY":"Creat per","CUSTOM_FILTERS":"Filtres personalitzats","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Ajuda de Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Vore sprints","ADD_SPRINTS":"Afegir sprint","MODIFY_SPRINTS":"Editar sprint","DELETE_SPRINTS":"Esborrar sprints"},"USER_STORIES":{"NAME":"Històries d'usuari","VIEW_USER_STORIES":"Vore istòries d'usuari","ADD_USER_STORIES":"Afegir històries d'usuari","MODIFY_USER_STORIES":"Editar història d'usuari","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Esborrar històries d'usuari"},"TASKS":{"NAME":"Tasques","VIEW_TASKS":"Vore tasca","ADD_TASKS":"Afegit tasques","MODIFY_TASKS":"Modificar tasques","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Esborrar tasques"},"ISSUES":{"NAME":"Incidències","VIEW_ISSUES":"Vore incidències","ADD_ISSUES":"Afegeix incidències","MODIFY_ISSUES":"Modifica incidències","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Elimina incidències"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Vore pàgines de Wiki","ADD_WIKI_PAGES":"Afegir pàgines de Wiki","MODIFY_WIKI_PAGES":"Modificar pàgina del Wiki","DELETE_WIKI_PAGES":"Esborrar pàgines de Wiki","VIEW_WIKI_LINKS":"Vore enllaços de Wiki","ADD_WIKI_LINKS":"Afegir link de wiki","DELETE_WIKI_LINKS":"Esborrar enllaços de wiki"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Entra a Taiga, una plataforma de gestió de projectes per a empreses àgils que necessiten una eïna sencilla i elegant que et permet gaudir del teu treball"},"AUTH":{"INVITED_YOU":"T'ha convidat a participar en el projecte","NOT_REGISTERED_YET":"No t'has registrat encara?","REGISTER":"Registrat","CREATE_ACCOUNT":"crea el teu compte gratuït ací"},"LOGIN_COMMON":{"HEADER":"Ja tinc un compte de Taiga","PLACEHOLDER_AUTH_NAME":"Nom d'usuari i correu electrònic (sensible a majúscules i minúscules)","LINK_FORGOT_PASSWORD":"L'has oblidat?","TITLE_LINK_FORGOT_PASSWORD":"Has oblidat la contrasenya?","ACTION_ENTER":"Entrar","ACTION_SIGN_IN":"Entrar","PLACEHOLDER_AUTH_PASSWORD":"Contrasenya (sensible a majúscules i minúscules)","ALT_LOGIN":"Or login with"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Segons els Oompa Loompas, el vostre nom d'usuari/correu electrònic o contrasenya són incorrectes.","SUCCESS":"Our Oompa Loompas están contents, benvinguts a Taiga."},"REGISTER":{"PAGE_TITLE":"Registre - Taiga","PAGE_DESCRIPTION":"Crea un nou compte de Taiga, una plataforma de gestió de projectes per a empreses àgils que necessiten una eïna sencilla i elegant que et permet gaudir del teu treball"},"REGISTER_FORM":{"TITLE":"Registra un nou compte de Taiga (gratuït)","PLACEHOLDER_NAME":"Trieu un nom d'usuari (sensible a majúscules i minúscules)","PLACEHOLDER_FULL_NAME":"Escriu el teu nom complet","PLACEHOLDER_EMAIL":"El teu correu","PLACEHOLDER_PASSWORD":"Defineix una contrasenya (sensible a majúscules i minúscules)","ACTION_SIGN_UP":"Registrar-se","TITLE_LINK_LOGIN":"Entrar","LINK_LOGIN":"Ja estàs registrat? Entra"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Recuperar contrasenya","PAGE_DESCRIPTION":"Escriviu el vostre nom d'usuari o correu electrònic per a conseguir-ne un de nou"},"FORGOT_PASSWORD_FORM":{"TITLE":"Oops, has oblidat la teva contrasenya?","SUBTITLE":"Escriviu el vostre nom d'usuari o correu electrònic per a conseguir-ne un de nou","PLACEHOLDER_FIELD":"Nom d'usuari o correu electrònic","ACTION_RESET_PASSWORD":"Resetejar contrasenya","LINK_CANCEL":"No, porta'm enrere, crec que ja ho recordo.","SUCCESS_TITLE":"Check your inbox!","SUCCESS_TEXT":"We sent you an email with the instructions to set a new password","ERROR":"Segons els nostres Oompa Loompas, no estàs registrat encara."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Canvi de contrasenya - Taiga","SECTION_NAME":"Canvi de contrasenya","FIELD_CURRENT_PASSWORD":"Contrasenya actual","PLACEHOLDER_CURRENT_PASSWORD":"La teua contrasenya actua (buit si no tens contrasenya encara)","FIELD_NEW_PASSWORD":"Nova contrasenya","PLACEHOLDER_NEW_PASSWORD":"Escriu una nova contrasenya","FIELD_RETYPE_PASSWORD":"Reescriu contrasenya","PLACEHOLDER_RETYPE_PASSWORD":"Reescriu contrasenya","ERROR_PASSWORD_MATCH":"Les contrasenyes no coincideixen"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Crea una nova contrasenya","SUBTITLE":"Menja més aliments rics en ferro, es bo pel cervell :P ","PLACEHOLDER_NEW_PASSWORD":"nova contrasenya","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Reescriu la nova contrasenya","ACTION_RESET_PASSWORD":"Resetejar contrasenya","ERROR":"Els Oompa Loompas no troben el teu password. Per favor intenta-ho de nou.","SUCCESS":"Els Oompa Loompas han salvat la teua contrasenya
    Prova a entrar amb ella."},"INVITATION":{"PAGE_TITLE":"Acceptar invitació - Taiga","PAGE_DESCRIPTION":"Accepta la invitació a un projecte en Taiga, una plataforma de gestió de projectes per a empreses àgils que necessiten una eïna sencilla i elegant que et permet gaudir del teu treball"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Els Oompa Loompas no troben la teua invitació.","SUCCESS":"T'has incorporat a este projecte. Vos donem la benvinguda a {{project_name}}"},"HOME":{"PAGE_TITLE":"Home - Taiga","PAGE_DESCRIPTION":"La home de Taiga amb els teus projectes principals, totes les històries d'usuari, tasques i incidències que tens assignades i aquelles que estàs Watching","EMPTY_WORKING_ON":"It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.","EMPTY_WATCHING":"Segueix históries, tasques e incidéncies en els teus project i rep notificacions quan canvien :)","EMPTY_PROJECT_LIST":"No tens cap projecte encara","WORKING_ON_SECTION":"En Progrés","WATCHING_SECTION":"Observant","DASHBOARD":"Panell principal"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADD EPIC","UNASSIGNED":"Sense assignar"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Vots","NAME":"Nom","PROJECT":"Projecte","SPRINT":"Sprint","ASSIGNED_TO":"Assigned","STATUS":"Estats","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Bloquejat","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Els meus projectes - Taiga","PAGE_DESCRIPTION":"Una llista de tots els teus projects, que pots reordenar o crear nous.","MY_PROJECTS":"Els meus projectes."},"ATTACHMENT":{"SECTION_NAME":"Adjunts","TITLE":"{{ fileName }} pujat el {{ date }}","LIST_VIEW_MODE":"Vista de llista","GALLERY_VIEW_MODE":"Galeria","DESCRIPTION":"Escriu una descripció curta","DEPRECATED":"(obsolet)","DEPRECATED_FILE":"Obsolet?","ADD":"Afegeix un nou adjunt. {{maxFileSizeMsg}}","DROP":"Deixa els adjunts ací","SHOW_DEPRECATED":"+ mostra els adjunts obsolets","HIDE_DEPRECATED":"- amagar els adjunts obsolets","COUNT_DEPRECATED":"({{ counter }} obsolet)","MAX_UPLOAD_SIZE":"El tamany màxim de pujada es ","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"No hem pogut pujar '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Esborrar adjunt...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"l'adjunt '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"No hem pogut esborrar: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Abans","NEXT":"Següent"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Editar valor","TITLE_ACTION_DELETE_VALUE":"Borrar valor","TITLE_ACTION_DELETE_TAG":"Elimina l'etiqueta"},"HELP":"Necessites ajuda? Mira la nosta pàgina de suport!","PROJECT_DEFAULT_VALUES":{"TITLE":"Valors per defecte","SUBTITLE":"Selecciona els valors per defecte per a tots els selectors"},"MEMBERSHIPS":{"TITLE":"Gestió de Membres","PAGE_TITLE":"Afiliacions - {{projectName}}","ADD_BUTTON":"+ Nou membre","ADD_BUTTON_TITLE":"Afegir nou membre","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Exportar","SUBTITLE":"Exporta el teu projecte per a fer una còpia de seguretat o crear un nou basat en aquest","EXPORT_BUTTON":"Exportar","EXPORT_BUTTON_TITLE":"Exporta el teu projecte","LOADING_TITLE":"Estem generant el teu fitxer","DUMP_READY":"El fitxer de daes està llest!","LOADING_MESSAGE":"Per favor no tanquest aquest pàgina","ASYNC_MESSAGE":"T'enviarem un correu quan estiga llest.","SYNC_MESSAGE":"Si la descàrrega no baixa directament clica ací.","ERROR":"Els Oompa Loompas tenen problemes generant el teu arxiu de dades. Per favor intenta-ho de nou.","ERROR_BUSY":"Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments."},"MODULES":{"TITLE":"Mòdules","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Organitza les històries d'usuari per a mantindre una vista organitzada i prioritzada del treball.","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organitza els projectes de un mode sencill amb aquest tauler","ISSUES":"Incidències","ISSUES_DESCRIPTION":"Gestiona els bugs, questions i milores del teu projecte. No te pergues res!","WIKI":"Wiki","WIKI_DESCRIPTION":"Afegix, modifica o borra contingut en col3laboració amb altres. Aquest es el lloc correcte per a la teua documentació.","MEETUP":"Trobar-se","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Selecciona un sistema de videconferència","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personalitzat","URL_CHAT_ROOM":"Adreça web del teu xat"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Perfil de projecte - {{projectName}}","PROJECT_DETAILS":"Detalls de projecte","PROJECT_NAME":"Nom del projecte","TAGS":"Etiquetes","DESCRIPTION":"Descripció","RECRUITING":"Este projecte busca col·laboracions?","RECRUITING_MESSAGE":"A qui estàs buscant?","RECRUITING_PLACEHOLDER":"Defineix els perfils que estàs buscant","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Projecte públic","PRIVATE_PROJECT":"Projecte privat","PRIVATE_OR_PUBLIC":"What's the difference between public and private projects?","DELETE":"Esborra aquest projecte","CHANGE_LOGO":"Change logo","ACTION_USE_DEFAULT_LOGO":"Utilitza la imatge per defecte","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Petició","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Change owner","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Informes","SUBTITLE":"Exporta les dades del teu projecte en CSV i fes els teus propis informes.","DESCRIPTION":"Descarrega un arxiu CSV o copia la URL generada i obrila en el teu editor de text o fulla de cálcul per a poder crear els teus propi informes. Podrás vore i analitzar totes les teues dades fàcilment.","HELP":"Com utilitzar açó a la meu fulla de càlcul?","REGENERATE_TITLE":"Canviar URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"informes d'històries d'usuari","SECTION_TITLE_TASK":"infome de tasques","SECTION_TITLE_ISSUE":"informe d'incidències","DOWNLOAD":"Descarrega el CSV","URL_FIELD_PLACEHOLDER":"Per favor regenera la url del CSV","TITLE_REGENERATE_URL":"Regenera l'Url del CSV","ACTION_GENERATE_URL":"Genera URL","ACTION_REGENERATE":"Regenerar","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Esborrar"},"CUSTOM_FIELDS":{"TITLE":"Camps personalitzats","SUBTITLE":"Especifiqueu els camps personalitzats del les vostres històries d'usuari, tasques i incidències","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"Camps personalitzats d'històries d'usuari","US_ADD":"Afegeix camps personalitzats en històries d'usuari","TASK_DESCRIPTION":"Camps personalitzats de tasques","TASK_ADD":"Afegix camps personalitzats en tasques","ISSUE_DESCRIPTION":"Camps personalitzats d'incidències","ISSUE_ADD":"Afegix camps personalitzats en incidències","FIELD_TYPE_TEXT":"Text","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Múltiples línies","FIELD_TYPE_DATE":"Data","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valors de projecte - {{projectName}}","REPLACEMENT":"Tots els elements amb aquest valor seràn canviats a","ERROR_DELETE_ALL":"No pots esborrar tots els valors."},"PROJECT_VALUES_POINTS":{"TITLE":"Punts","SUBTITLE":"Especifica els punts en els que poden ser estimades les històries d'usuari","US_TITLE":"Punts d'història d'usuari","ACTION_ADD":"Afegir punts nous"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioritats","SUBTITLE":"Especifica les prioritats que tindran les teues tasques","ISSUE_TITLE":"Prioritats d'incidències","ACTION_ADD":"Afegir nova prioritat"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Severitats","SUBTITLE":"Especifiqueu les severitats que tindran les vostres incidències","ISSUE_TITLE":"Severitats d'incidències","ACTION_ADD":"Afegir nova severitat"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"Especifica els estats de les vostres històries d'usuari, tasques i incidències","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Estats de tasques","ISSUE_TITLE":"Estats d'incidències"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipus","SUBTITLE":"Especifica quin tipus d'incidència podria ser.","ISSUE_TITLE":"Tipus d'incidències","ACTION_ADD":"Afegir now {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiquetes","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Afegeix l'etiqueta","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Afegeix un estat nou","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Rols - {{projectName}}","WARNING_NO_ROLE":"Ves amb compte, cap rol en el teu projecte pot estimar punts per a les històries d'usuari","HELP_ROLE_ENABLED":"Si està activat, els membres assignats a aquest rol podràn estimar els punts d'històries d'usuaris","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} membres amb aquest rol","TITLE_DELETE_ROLE":"Esborrar rol","REPLACEMENT_ROLE":"Tots els usuaris amb aquest rol es canviaran a","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"No pots esborrar tots els valors","EXTERNAL_USER":"Usuari extern","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Clau secreta","PAYLOAD_URL":"Payload URL","VALID_IPS":"IPs amb orige vàlid separades per ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Les peticions a Bitbuket no estan signades. El millor mode de verificar l'oritge es per IP. Si el camp està buit no hi haurà verificació per IP."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Les peticions a Bitbuket no estan signades. El millor mode de verificar l'oritge es per IP. Si el camp està buit no hi haurà verificació per IP."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Afegir un nou Webhook","TYPE_NAME":"Escriu el nom del servei","TYPE_PAYLOAD_URL":"Escriu el service payload url","TYPE_SERVICE_SECRET":"Escriu la clau secreta del servei","SAVE":"Salvar Webhook","CANCEL":"Cancel·la Webhook","SHOW_HISTORY":"(Mostra històric)","TEST":"Testar Webhook","EDIT":"Editar Webhooks","DELETE":"Esborrar Webhooks","REQUEST":"Petició","RESEND_REQUEST":"Reenviar petició","HEADERS":"Capçaleres","PAYLOAD":"Payload","RESPONSE":"Resposta","DATE":"DD MMM YYYY [at] hh:mm","ACTION_HIDE_HISTORY":"(Amaga històric)","ACTION_HIDE_HISTORY_TITLE":"Amaga detalls d'històric","ACTION_SHOW_HISTORY":"(Mostra històric)","ACTION_SHOW_HISTORY_TITLE":"Mostra detall d'històric","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Atributs personalitzats - {{projectName}}","ADD":"Afegix camp personalitzat","EDIT":"Edita el camp personalitzat","DELETE":"Esborrar camp personalitzat","SAVE_TITLE":"Salva camp personalitzat","CANCEL_TITLE":"Cancel·la la creació","SET_FIELD_NAME":"Escriu el nom del camp personalitzat","SET_FIELD_DESCRIPTION":"Escriu la descripció del camp personalitzat","FIELD_TYPE_DEFAULT":"-- select one --","ACTION_UPDATE":"Actualitza el camp personalitzat","ACTION_CANCEL_EDITION":"Cancel·la la edició"},"MEMBERSHIP":{"COLUMN_MEMBER":"Membre","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rol","COLUMN_STATUS":"Estatus","STATUS_ACTIVE":"Actiu","STATUS_PENDING":"Pendent","DELETE_MEMBER":"Esborrar membre","RESEND":"Resend","SUCCESS_SEND_INVITATION":"Hem tornat a enviar la invitació a '{{email}}'.","SUCCESS_DELETE":"Hem esborrat {{message}}.","ERROR_DELETE":"No hem pogut esborrar ","DEFAULT_DELETE_MESSAGE":"la invitació a '{{email}}'."},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Valor per defecte per a selector de punts","LABEL_TASK_STATUS":"Valor per defecte per a selector d'estats de tasques","LABEL_ISSUE_TYPE":"Valor per defecte per a selector de tipus","LABEL_ISSUE_STATUS":"Valor per defecte per a selector de estats","LABEL_PRIORITY":"Valor per defecte per a selector de prioritat","LABEL_SEVERITY":"Valor per defecte per a selector de severitat"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Escriu un nom per a nou estat","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Escriu un nom per a nou element"},"US_STATUS":{"ACTION_ADD_STATUS":"Afegeix un estat nou","IS_ARCHIVED_COLUMN":"Archived","IS_CLOSED_COLUMN":"Tancat","WIP_LIMIT_COLUMN":"Limit WIP","PLACEHOLDER_WRITE_NAME":"Escriviu un nom per al nou estat"},"MENU":{"PROJECT":"Projecte","ATTRIBUTES":"Atributs","MEMBERS":"Membres","PERMISSIONS":"Permisos","INTEGRATIONS":"Integracions"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Estats","POINTS":"Punts","PRIORITIES":"Prioritats","SEVERITIES":"severitats","TYPES":"Tipus","CUSTOM_FIELDS":"Camps personalitzats","TAGS":"Etiquetes","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Rols","ACTION_NEW_ROLE":"+ Nou rol","TITLE_ACTION_NEW_ROLE":"Afegir nou rol"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Acceptar","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Edita el perfil","CLOSED_US":"HU tancada","PROJECTS":"Projectes","PROJECTS_EMPTY":"{{username}} encara no te cap projecte","CONTACTS":"Contactes","CONTACTS_EMPTY":"{{Usuari}} no té contactes encara","CURRENT_USER_CONTACTS_EMPTY":"No tens contactes encara","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Les persones amb les que treballa a Taiga seran els seus contactes de forma automàtica","TABS":{"ACTIVITY_TAB":"Timeline","ACTIVITY_TAB_TITLE":"Mostra tota la activitat d'aquest usuari","PROJECTS_TAB":"Projectes","PROJECTS_TAB_TITLE":"Mostra tots els projects del que el usuari es administrador","LIKES_TAB":"Favorits","LIKES_TAB_TITLE":"Mostra tots els favorits del usuari","VOTES_TAB":"Vots","VOTES_TAB_TITLE":"List all votes made by this user","WATCHED_TAB":"Watched","WATCHED_TAB_TITLE":"List all item watched by this user","CONTACTS_TAB":"Contactes","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"El teu perfil","DESCRIPTION":"La gent pot vore tot el que fas i en qué estàs treballant. Afegix una bio interessant per a donar una millor versió de la teua informació.","ADD_INFO":"Edita la bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Escriu algo...","FILTER_TYPE_ALL":"Tot","FILTER_TYPE_ALL_TITLE":"Mostrar tot","FILTER_TYPE_PROJECTS":"Projectes","FILTER_TYPE_PROJECTS_TITLE":"Mostra només projectes","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Históries","FILTER_TYPE_USER_STORIES_TITLE":"Veure només històries d'usuari","FILTER_TYPE_TASKS":"Tasques","FILTER_TYPE_TASKS_TITLE":"Mostra només tasquest","FILTER_TYPE_ISSUES":"Incidències","FILTER_TYPE_ISSUES_TITLE":"Mostra només incidències","EMPTY_TITLE":"Sembla que no hi ha res que mostrar"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reordena els teus projectes per a establir els més utilitzats en les primeres posicions.
    Els 10 millors projectes apareixeran en la llista de projectes de la barra de navegació superior","PRIVATE":"Projecte privat","LOOKING_FOR_PEOPLE":"Este projecte busca col·laboracions","FANS_COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{un seguidor} other{# seguidors}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{un membre} other{# membres}}","BLOCKED_PROJECT":{"BLOCKED":"Blocked project","THIS_PROJECT_IS_BLOCKED":"This project is temporarily blocked","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"In order to unblock your projects, contact the administrator."},"SECTION":{"SEARCH":"Cerca","TIMELINE":"Timeline","EPICS":"Epics","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Incidències","WIKI":"Wiki","TEAM":"Equip","MEETUP":"Trobar-se","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Crear projecte","MANAGE_PROJECTS":"Gestiona els projectes","TITLE_CREATE_PROJECT":"Crear projecte","HELP_TITLE":"Pàgina d'ajuda de Taiga","HELP":"Ajuda","HOMEPAGE":"Homepage","FEEDBACK_TITLE":"Enviar suggerències","FEEDBACK":"Suggerències","NOTIFICATIONS_TITLE":"Edita la configuració de les teves notificacions","NOTIFICATIONS":"Notificacions","VIEW_PROFILE_TITLE":"Visualitza el perfil","VIEW_PROFILE":"Visualitza el perfil","EDIT_PROFILE_TITLE":"Editeu el vostre perfil","EDIT_PROFILE":"Edita el perfil","CHANGE_PASSWORD_TITLE":"Canvi de contrasenya","CHANGE_PASSWORD":"Canvi de contrasenya","DASHBOARD_TITLE":"Tauler","DISCOVER_TITLE":"Discover trending projects","DISCOVER":"Descobreix"},"LIKE_BUTTON":{"LIKE":"M'agrada","LIKED":"T'agrada","UNLIKE":"No t'agrada","BUTTON_TITLE":"Favoriteja o desfavoriteja aquest projecte","COUNTER_TITLE":"{total, plural, un{un fan} altres{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Segueix este projecte i edita les notificacions","WATCH":"Segueix","WATCHING":"Observant","COUNTER_TITLE":"{total, plural, one{un seguidor} other{# seguidors}}","OPTIONS":{"NOTIFY_ALL":"Receive all notifications","NOTIFY_ALL_TITLE":"Receive all notifications for this project","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Recive notificacions only when you are involved","UNWATCH":"Unwatch","UNWATCH_TITLE":"Unwatch this project"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Crear projecte","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Importar projecte","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Private Project"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Els Oompa Loompas estàn important el teu projecte","ASYNC_IN_PROGRESS_MESSAGE":"Aquest procés pot durar uns moments
    T'enviarem un correo quan estiga llest.","UPLOAD_IN_PROGRESS_MESSAGE":"Pujat {{uploadedSize}} de {{totalSize}}","ERROR":"Els Oompa Loompas han tingut problemes pujan les teues dades. Per favor intenta-ho de nou.","ERROR_TOO_MANY_REQUEST":"Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments.","ERROR_MESSAGE":"Els Oompa Loompas tenen problemes important les teues dades: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})","SYNC_SUCCESS":"El teu projecte s'ha importat correctament","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Assign","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"cerca","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Important Projecte","DESCRIPTION":"Aquest procés pot durar una mica, pero favor mantinga la finestra oberta"},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Incidències","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Segur que vols borrar el teu compte de Taiga? ","CANCEL":"Back to settings","ACCEPT":"Delete account","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Esborrar projecte","QUESTION":"Estàs segur que vols borrar este projecte?","SUBTITLE":"Totes les dades del projecte (històries d'usuari, tasques, incidències, wikis) es perdràn :-(","CONFIRM":"Si, estic segur"},"ASSIGNED_TO":{"SELECT":"Selecciona assignació","SEARCH":"Cerca usuaris"},"ADD_MEMBER":{"TITLE":"Nou membre","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Add email","REMOVE":"Remove","INVITE":"Invite","CHOOSE_ROLE":"Choose a role","PLACEHOLDER_INVITATION_TEXT":"(Opcional) Afegix un text personalizat a la invitació. Dis-li algo divertit als nous membres. ;-)","HELP_TEXT":"Si els usuaris ja estàn registrats en Taiga seràn afegits automàticament. Si no, rebran una invitació."},"FEEDBACK":{"TITLE":"Contans...","COMMENT":"...un bug, una sugerència, algo bonic... inclús el teu pitjor malson amb Taiga.","ACTION_SEND":"Enviar suggerències"},"SEARCH":{"TITLE":"Cerca","PLACEHOLDER_SEARCH":"Què estàs buscant?"},"ADD_EDIT_SPRINT":{"TITLE":"Nou sprint","PLACEHOLDER_SPRINT_NAME":"Nom de Sprint","PLACEHOLDER_SPRINT_START":"Data d'inici","PLACEHOLDER_SPRINT_END":"Data de finalització","ACTION_DELETE_SPRINT":"Vols esborrar aquest sprint?","TITLE_ACTION_DELETE_SPRINT":"Esborra sprint","LAST_SPRINT_NAME":"L'ultim sprint ès {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Afegir incidència","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Esborrar sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opcional) Afegix un text personalizat a la invitació. Dis-li algo divertit als nous membres. ;-)","PLACEHOLDER_TYPE_EMAIL":"Escriu un correu","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Add comment","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"What's the project?","CHOOSE_PROJECT_FROM":"What's the project?","SUBJECT":"Descripció","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"Nova història d'usuari","EXISTING_USERSTORY":"Existing user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Descripció","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Història d'Usuari {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estat: {{userStoryStatus }}. Completat {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} de {{userStoryTotalTasks}} tasques tancades). Punts: {{userStoryPoints}}. Descripció: {{userStoryDescription}}","SECTION_NAME":"Història d'usuari","LINK_TASKBOARD":"Panell de tasques","TITLE_LINK_TASKBOARD":"Anar a panell de tasques","TOTAL_POINTS":"punts totals","ADD":"+ Afegeix una nova història d'usuari","ADD_BULK":"Afegeix noves històries d'usuari en grup","PROMOTED":"Aquesta US ha sigut promocionada desde:","TITLE_LINK_GO_TO_ISSUE":"Anar a la incidència","TITLE_DELETE_ACTION":"Esborra història d'usuari","LIGHTBOX_TITLE_BLOKING_US":"Bloquejant US","NOT_ESTIMATED":"Sense estimar","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Close","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Comment deleted by {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Older first","RECENT_FIRST":"Recent first","COMMENT":"Comentar","EDITED_COMMENT":"Edited:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Escriu un nou comentari ací","SHOW_DELETED":"Mostra el comentari esborrat.","HIDE_DELETED":"Amaga el comentari esborrat","DELETE":"Esborrar comentari","RESTORE":"Resturar comentari.","HISTORY":{"TITLE":"Activitat"}},"ACTIVITY":{"TITLE":"Activitat","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"tags added:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"new attachment:","DELETED_ATTACHMENT":"deleted attachment:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Requeriment d'equip","CLIENT_REQUIREMENT":"Requeriment de client","BLOCKED":"Bloquejat","VALUES":{"NOT_SET":"not set","UNASSIGNED":"Sense assignar"},"FIELDS":{"SUBJECT":"descripció","DESCRIPTION":"descripció","PRIORITY":"prioritat","SEVERITY":"severitat","STATUS":"Estats","TYPE":"tipus","ASSIGNED_TO":"Assignat a","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"color"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"El panell Backlog, amb històries d'usuari i esprints del projecte {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Edita el teu gràfic de backlog","CUSTOMIZE_GRAPH_TEXT":"Per a tindre un gràfic que t'ajude a seguir la evolució del projecte deus de editar els punts i els sprints per mig del","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Estableix els punts i els sprints al Admin","MOVE_US_TO_CURRENT_SPRINT":"Envia al Sprint","MOVE_US_TO_LATEST_SPRINT":"Posar a l'ultim sprint","EMPTY":"El backlog està buit!","CREATE_NEW_US":"Crea una nova US","CREATE_NEW_US_EMPTY_HELP":"Potser vols crear una nova història d'usuari","EXCESS_OF_POINTS":"Excés de punts","PENDING_POINTS":"Punts pendents","CLOSED_POINTS":"tancat","COMPACT_SPRINT":"Compacta Sprint","GO_TO_TASKBOARD":"Anar al panell de {{::name}}","EDIT_SPRINT":"Editar sprint","TOTAL_POINTS":"total","STATUS_NAME":"Nom d'estats","SORTABLE_FILTER_ERROR":"No pots portar al backlog si els filtres estàn oberts","DOOMLINE":"Extensió de projecte [Doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Punts","OPTIMAL":"Els punts pendents òptims per l'esprint \"{{sprintName}}\" haurien de ser {{value}}","REAL":"Real pending points for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"Alterna la visibilitat d'etiquetes","SHOW":"Mostra etiquetes","HIDE":"Amaga etiquetes"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Històries d'usuari","TITLE_COLUMN_POINTS":"Selecciona vista per rol"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"punts
    totals","COMPLETED_POINTS":"punts
    completats","OPEN_TASKS":"tasques
    obertes","CLOSED_TASKS":"tasques
    tancades","IOCAINE_DOSES":"dosis
    iocaína","SHOW_STATISTICS_TITLE":"Mostrar estadístiques","TOGGLE_BAKLOG_GRAPH":"Show/Hide burndown graph","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"punts
    projecte","DEFINED_POINTS":"punts
    definits","CLOSED_POINTS":"punts
    tancats","POINTS_PER_SPRINT":"punts
    sprint"},"FILTERS":{"TOGGLE":"Alterna la visibilitat dels filtres","HIDE":"Amaga filtres","SHOW":"Mostra filtres"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Anar al panell de sprint","TITLE_LINK_TASKBOARD":"Anar al panell de {{::name}}","EMPTY":"There are no sprints yet","WARNING_EMPTY_SPRINT_ANONYMOUS":"This sprint has no User Stories","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"Add new sprint","TEXT_ACTION_NEW_SPRINT":"You may want to create a new sprint in your project","ACTION_SHOW_CLOSED_SPRINTS":"Mostra sprints tancats","ACTION_HIDE_CLOSED_SPRINTS":"Amaga sprints tancats"}},"ERROR":{"TEXT1":"Ha passat algo i els nostres Oompa Loompas estàn arreglant-ho.","NOT_FOUND":"No trobat","NOT_FOUND_TEXT":"Error 404. La pàgina que busques no existeix. Pots tornar a la página principal de taiga i provar desde allí.","PERMISSION_DENIED":"Permis denegat","PERMISSION_DENIED_TEXT":"No tens permissos per a accedir a esta pàgina.","VERSION_ERROR":"Algú dins de Taiga ha canviat aȯ abans i els Oompa Loompas no pode aplicar els teus canvis. Per favor recarrega i aplica els teus canvis (es perdràn)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Panell de tasques del esprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} to {{endDate}}) de {{projectName}}. Completat {{completedPercentage}}% ({{completedPoints}} de {{totalPoints}} points). {{openTasks}} tasques obertes de {{totalTasks}}.","SECTION_NAME":"Panell de tasques","TITLE_ACTION_ADD":"Afegir nova tasca","TITLE_ACTION_ADD_BULK":"Afegeix noves històries d'usuari en grup","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Assignar tasca","PLACEHOLDER_CARD_TITLE":"Açó podría ser una tasca","PLACEHOLDER_CARD_TEXT":"Divideix les históries per a poder gertionar-les separadament","TABLE":{"COLUMN":"Història d'usuari","TITLE_ACTION_FOLD":"Plegar columna","TITLE_ACTION_UNFOLD":"Desplegar columna","TITLE_ACTION_FOLD_ROW":"Plegar fila","TITLE_ACTION_UNFOLD_ROW":"Desplegar fila","FIELD_POINTS":"punts","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Díes","YAXIS_LABEL":"Punts","OPTIMAL":"Punts pendents òptims per dia {{formattedDate}} deu ser {{roundedValue}}","REAL":"Punts pendents el dia {{formattedDate}} son {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tasca {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estat: {{taskStatus }}. Descripció: {{taskDescription}}","SECTION_NAME":"Tasca","LINK_TASKBOARD":"Panell de tasques","TITLE_LINK_TASKBOARD":"Anar a panell de tasques","PLACEHOLDER_SUBJECT":"Afegix la descripció de la tasca","TITLE_SELECT_STATUS":"Nom de l'estat","OWNER_US":"Aquesta tasca pertany a","TITLE_LINK_GO_OWNER":"Anar a història d'usuari","TITLE_DELETE_ACTION":"Esborrar tasca","LIGHTBOX_TITLE_BLOKING_TASK":"Bloquejant tasca","FIELDS":{"IS_IOCAINE":"Es iocaina"},"TITLE_ACTION_IOCAINE":"Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!"},"NOTIFICATION":{"OK":"Tot està bé","WARNING":"Oops, ha passat algo...","WARNING_TEXT":"Els teus canvis no s'han salvat!","SAVED":"Els Oompa Loompas han salvat els teus canvis!","CLOSE":"Tancar notificació","MAIL":"Notificaciones per correo","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Segur que vols borrar?"},"CANCEL_ACCOUNT":{"TITLE":"Cancel·la el teu conter ací","SUBTITLE":"Sentim molt que deixes Taiga, esperem que hages disfrutat la teua estància :)","PLACEHOLDER_INPUT_TOKEN":"Cancela token de conter","ACTION_LEAVING":"Sí, m'hen vaig!","SUCCESS":"Els Oompa Loompas han esborrat el teu conter"},"CHANGE_EMAIL_FORM":{"TITLE":"Canvia el teu correu","SUBTITLE":"Un click més i el teu correu estarà actualitzat!","PLACEHOLDER_INPUT_TOKEN":"Canvia el token de correu","ACTION_CHANGE_EMAIL":"Canviar correu","SUCCESS":"Els Oompa Loompas han actualitzat el teu correu"},"ISSUES":{"PAGE_TITLE":"Incidències - {{projectName}}","PAGE_DESCRIPTION":"El panell d'incidències de {{projectName}}: {{projectDescription}}","SECTION_NAME":"incidència","ACTION_NEW_ISSUE":"+ NOVA INCIDÈNCIA","ACTION_PROMOTE_TO_US":"Promocionar història d'usuari","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Esta incidència ha sigut promcionada a US:","EXTERNAL_REFERENCE":"Esta incidència ha sigut creada desde","GO_TO_EXTERNAL_REFERENCE":"Anar a l'orige","ACTION_DELETE":"Esborrar incidència","LIGHTBOX_TITLE_BLOKING_ISSUE":"Bloquejant incidència","LINK_TASKBOARD":"Panell de tasques","TITLE_LINK_TASKBOARD":"Anar a panell de tasques","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioritat","SEVERITY":"Severitat","TYPE":"Tipus"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promociona aquesta incidència a història d'usuari","MESSAGE":"Segur que vols crear una nova US desde aquesta incidència"},"TABLE":{"COLUMNS":{"TYPE":"Tipus","SEVERITY":"Severitat","PRIORITY":"Prioritat","SUBJECT":"Descripció","VOTES":"Vots","STATUS":"Estats","MODIFIED":"Modified","ASSIGNED_TO":"Assignat a"},"TITLE_ACTION_CHANGE_STATUS":"Canvia l'estat","TITLE_ACTION_ASSIGNED_TO":"Assignat a","BLOCKED":"Bloquejat","EMPTY":{"TITLE":"No hi ha incidències a reportar :-)","SUBTITLE":"Has trobat una incidència?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - incidència {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estat: {{issueStatus }}. Tipus: {{issueType}}, Prioritat: {{issuePriority}}. Severitat: {{issueSeverity}}. Descripció: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"El panell Kanban, amb històries d'usuari del projecte {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Plegar columna","TITLE_ACTION_UNFOLD":"Desplegar columna","TITLE_ACTION_ADD_US":"Afegeix una nova història d'usuari","TITLE_ACTION_ADD_BULK":"Afegir en grup","ACTION_SHOW_ARCHIVED":"Mostrar arxivats","ACTION_HIDE_ARCHIVED":"Amagar arxivats","HIDDEN_USER_STORIES":"Les històries d'usuari en aquest estats estan amagades","PLACEHOLDER_CARD_TITLE":"These are your User Stories","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Cerca - {{projectName}}","PAGE_DESCRIPTION":"Busca qualsevol cosa al projecte {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"Històries d'usuari","FILTER_ISSUES":"Incidències","FILTER_TASKS":"Tasca","FILTER_WIKI":"Pàgines de Wiki","PLACEHOLDER_SEARCH":"Cerca en...","TITLE_ACTION_SEARCH":"cerca","EMPTY_TITLE":"Pareix que no hem trobat res amb este criteri de recerca","EMPTY_DESCRIPTION":"Prova amb una de les pestanyes o busca de nou"},"TEAM":{"PAGE_TITLE":"Equip - {{projectName}}","PAGE_DESCRIPTION":"El panell d'equip mostra tots els membres del projecte {{projectName}}: {{projectDescription}}","SECTION_NAME":"Equip","PLACEHOLDER_INPUT_SEARCH":"Busca per nom complet...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Incidències tancades","COLUMN_IOCAINE":"Beguedor de iocaína","EXPLANATION_COLUMN_IOCAINE":"Dosis de iocaina ingerides","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Pàgines de Wiki editades","COLUMN_BUG_HUNTER":"Caçador de bug","EXPLANATION_COLUMN_BUG_HUNTER":"Incidència reportada","COLUMN_NIGHT_SHIFT":"Torn de nit","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tasques tancades","COLUMN_TOTAL_POWER":"Punts totals","EXPLANATION_COLUMN_TOTAL_POWER":"Punts totals","SECTION_TITLE_TEAM":"Equip >","SECTION_FILTER_ALL":"Tot","CONFIRM_LEAVE_PROJECT":"Segur que vols deixar el projecte?","ACTION_LEAVE_PROJECT":"Abandonar aquest projecte"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. grandària: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Configuració d'usuari","USER_PROFILE":"Perfil d'usuari","CHANGE_PASSWORD":"Canvi de contrasenya","EMAIL_NOTIFICATIONS":"Notificacions de correu","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Notificacions de correu","COLUMN_PROJECT":"Projecte","COLUMN_RECEIVE_ALL":"Recibir tot","COLUMN_ONLY_INVOLVED":"Només relevants","COLUMN_NO_NOTIFICATIONS":"Sense notificacions","OPTION_ALL":"Tot","OPTION_INVOLVED":"Implicat","OPTION_NONE":"Sense notificacions"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projecte","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projecte"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Utilitza la imatge per defecte","ACTION_DELETE_ACCOUNT":"Esborrar compte de Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Mira el teu correu!
    Hem enviat un correu al teu conter
    amb les instrucciones per a escriure una nova adreça de correu","CHANGE_PHOTO":"Canviar foto","FIELD":{"USERNAME":"Nom d'usuari","EMAIL":"Correu electrònic","FULL_NAME":"Nom complet","PLACEHOLDER_FULL_NAME":"Esciur el teu nom complet (ex. Íñigo Montoya)","BIO":"Bio (max. 210 caràcters)","PLACEHOLDER_BIO":"Contans algo sobre tu mateix","LANGUAGE":"Idioma","LANGUAGE_DEFAULT":"-- utiliza l'idioma per defecte --","THEME":"Tema","THEME_DEFAULT":"-- utilitza el tema per defecte --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Esborrar pàgina de Wiki","DELETE_LIGHTBOX_TITLE":"Esborrar pàgina de Wiki","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"voltes
    editat","LAST_EDIT":"última
    edició","LAST_MODIFICATION":"última modificació"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"Creat","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Hint","LINK":"If you want to know how to use it visit our support page","LINK_TITLE":"Visita la nostra pàgina d'ajuda","HINT1_TITLE":"Saps que pots importar i exportar projectes?","HINT1_TEXT":"Això li permet extreure totes les dades d'un Taiga i moure'l a un altre.","HINT2_TITLE":"Saps que pots crear camps personalitzats?","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 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":{"UPLOAD_ATTACHMENT":"{{username}} has uploaded a new attachment in {{obj_name}}","US_CREATED":"{{username}} ha creat una nova història d'usuari {{obj_name}} a {{project_name}}","ISSUE_CREATED":"{{username}} ha creat una nova incidència {{obj_name}} a {{project_name}}","TASK_CREATED":"{{username}} ha creat una nova tasca {{obj_name}} a {{project_name}}","TASK_CREATED_WITH_US":"{{username}} ha creat una nova tasca {{obj_name}} a {{project_name}} provinent de US {{us_name}}","WIKI_CREATED":"{{username}} has created a new wiki page {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} has created a new sprint {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} ha creat el projecte {{project_name}}","MILESTONE_UPDATED":"{{username}} has updated the sprint {{obj_name}}","US_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}} to {{new_value}}","US_UPDATED_POINTS":"{{username}} has updated '{{role_name}}' points of the US {{obj_name}} to {{new_value}}","ISSUE_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}} to {{new_value}}","TASK_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} ha actualitzat l'atribut \"{{field_name}}\" de la tasca {{obj_name}} de la història d'usuari {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} ha actualitzat l'atribut \"{{field_name}}\" de la tasca {{obj_name}} de la història d'usuari {{us_name}} amb el valor {{new_value}}","WIKI_UPDATED":"{{username}} ha actualitzat la pàgina wiki {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} ha comentat la història d'usuari {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} ha comentat la incidència {{obj_name}}","NEW_COMMENT_TASK":"{{username}} ha comentat la tasca {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} te un nou membre","US_ADDED_MILESTONE":"{{username}} ha afegit la història d'usuari {{obj_name}} a {{sprint_name}}","US_MOVED":"{{username}} ha mogut la història d'usuari {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} ha afegit la història d'usuari {{obj_name}} al backlog","BLOCKED":"{{username}} ha bloquejat {{obj_name}}","UNBLOCKED":"{{username}} ha desbloquejat {{obj_name}}","NEW_USER":"{{username}} s'ha unit a Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"incidència","TASK":"Tasca"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"Una aplicació externa requereix autenticació","PAGE_DESCRIPTION":"Una aplicació externa requereix autenticació","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Identifica't amb un altre nom d'usuari","AUTHORIZE_APP":"Autoritza l'aplicació","CANCEL":"Següent"},"JOYRIDE":{"NAV":{"NEXT":"Següent","BACK":"Back","SKIP":"Skip","DONE":"Done"},"DASHBOARD":{"STEP1":{"TITLE":"El teu projecte","TEXT":"Welcome! Here you will find the projects you are involved on."},"STEP2":{"TITLE":"En Progrés","TEXT":"Here you will find the User Stories, Tasks and Issues in which you are working on."},"STEP3":{"TITLE":"Observant","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"You are already working with Taiga ;)"},"STEP4":{"TITLE":"Let’s start","TEXT1":"You can start by creating your first Taiga project.","TEXT2":"Good luck!"}},"BACKLOG":{"STEP1":{"TITLE":"Project summary","TEXT1":"Here you will see the state of your project.","TEXT2":"You can change every kind of project settings through the admin."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"Històries d'usuari","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"User Stories & Tasks","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Good luck!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Discover projects","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Most liked","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"View more","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Tot","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Looking for people","WEEK":"Last week","MONTH":"Last month","YEAR":"Last year","ALL_TIME":"All time","CLEAR":"Clear filters"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Escriu algo...","ACTION_TITLE":"Cerca","RESULTS":"Search results"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-de.json b/dist/v-1547534999795/locales/taiga/locale-de.json deleted file mode 100644 index cce5f42..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-de.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Ja","NO":"Nein","OR":"oder","I_GET_IT":"OK, I get it","LOADING":"Wird geladen...","DATE":"DD. MMM YYYY","DATETIME":"DD. MMM YYYY HH:mm","SAVE":"Speichern","CANCEL":"Abbrechen","ACCEPT":"Akzeptieren","DELETE":"Löschen","UNLINK":"Verknüpfung auflösen","CREATE":"Erzeugen","ADD":"Hinzufügen","COPY_TO_CLIPBOARD":"In die Zwischenablage kopieren","COPIED_TO_CLIPBOARD":"Der Text wurde in die Zwischenablage kopiert","EDIT":"Bearbeiten","DRAG":"Ziehen","TAG_LINE":"Ihr agiles, freies und quelloffenes Projekt-Management Tool","TAG_LINE_2":"LIEBEN SIE IHR PROJEKT","BLOCK":"Blockieren","BLOCK_TITLE":"Blockiere dieses Item, zum Beispiel wenn es Abhängigkeiten besitzt, die noch nicht erfüllt sind","BLOCKED":"Blockiert","UNBLOCK":"Blockierung aufheben","UNBLOCK_TITLE":"Dieses Item freigeben","BLOCKED_NOTE":"Wieso ist es blockiert?","BLOCKED_REASON":"Bitte erklären Sie den Grund","CREATED_BY":"Erstellt durch {{fullDisplayName}}","CLOSE":"schließen","GO_HOME":"Führe mich heim","PLUGINS":"Plugins","ONE_ITEM_LINE":"Ein Eintrag pro Zeile...","NEW_BULK":"Neue Massenerstellung","SUBTASKS":"Subtasks","PREVIOUS":"Zurück","NEXT":"Weiter","LOGOUT":"Ausloggen","EXTERNAL_USER":"ein externer Benutzer","GENERIC_ERROR":"Eins unserer Helferlein sagt {{error}}.","IOCAINE_TEXT":"Dieses Mitglied fühlt sich ein bisschen überfordert mit dieser Aufgabe. Mit der Zeit und Ihrer Hilfe wird er gegen das Iocaine Pulver immun werden. Aber jetzt braucht er eine Umarmung.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Projekteigentümer","CAPSLOCK_WARNING":"Achtung! Sie verwenden Großbuchstaben in einem Eingabefeld, dass Groß- und Kleinschreibung berücksichtigt.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Sind Sie sicher, dass Sie den Bearbeitungsmodus beenden möchten?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Beachten Sie, dass alle Änderungen verloren gehen, wenn Sie den Bearbeitungsmodus schließen, ohne vorher zu speichern.","RELATED_USERSTORIES":"Verwandte User Stories","CARD":{"ASSIGN_TO":"Zuweisen an","EDIT":"Karte bearbeiten","DELETE":"Karte Löschen","DELETE_ISSUE":"Ticket löschen","DETACH_ISSUE_FROM_SPRINT":"Ticket vom Sprint lösen"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Dieser Wert scheint ungültig zu sein.","TYPE_EMAIL":"Dieser Wert sollte eine gültige E-Mail Adresse enthalten.","TYPE_URL":"Dieser Wert sollte eine gültige URL enthalten.","TYPE_URLSTRICT":"Dieser Wert sollte eine gültige URL enthalten.","TYPE_NUMBER":"Dieser Wert sollte eine gültige Nummer enthalten.","TYPE_DIGITS":"Dieser Wert sollte Ziffern enthalten.","TYPE_DATEISO":"Dieser Wert sollte ein gültiges Datum sein (YYYY-MM-DD)","TYPE_ALPHANUM":"Dieser Wert sollte alphanumersich sein.","TYPE_PHONE":"Dieser Wert sollte eine gültige Telefonnummer enthalten.","NOTNULL":"Dieser Wert darf nicht leer sein.","NOT_BLANK":"Dieser Wert darf nicht leer bleiben.","REQUIRED":"Diese Angabe ist erforderlich","REGEXP":"Dieser Wert scheint ungültig zu sein.","MIN":"Dieser Wert sollte größer oder gleich %s sein.","MAX":"Dieser Wert sollte niedriger oder gleich %s sein.","RANGE":"Der Wert sollte zwischen %s und %s liegen.","MIN_LENGTH":"Diese Angabe ist zu kurz. Sie sollte mindestens %s Zeichen haben oder mehr.","MAX_LENGTH":"Diese Angabe ist zu lang. Sie sollte %s Zeichen haben oder weniger.","RANGE_LENGTH":"Die Länge des Wertes ist ungültig. Sie sollte zwischen %s und %s Zeichen liegen.","MIN_CHECK":"Sie müssen mindestens %s auswählen.","MAX_CHECK":"Wählen Sie %s oder weniger.","RANGE_CHECK":"Wählen Sie zwischen %s und %s","EQUAL_TO":"Dieser Wert sollte der gleiche sein.","LINEWIDTH":"Eine oder mehrere Zeilen sind vielleicht zu lang. Versuchen Sie unter %s Zeichen zu bleiben.","PIKADAY":"Ungültiges Datumsformat. Bitte nutzen Sie DD MMM YYYY (z. B. 23 März 1984)"},"PICKERDATE":{"FORMAT":"DD. MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Vorheriger Monat","NEXT_MONTH":"Nächster Monat","MONTHS":{"JAN":"Januar","FEB":"Februar","MAR":"März","APR":"April","MAY":"Mai","JUN":"Juni","JUL":"Juli","AUG":"August","SEP":"September","OCT":"Oktober","NOV":"November","DEC":"Dezember"},"WEEK_DAYS":{"SUN":"Sonntag","MON":"Montag","TUE":"Dienstag","WED":"Mittwoch","THU":"Donnerstag","FRI":"Freitag","SAT":"Samstag"},"WEEK_DAYS_SHORT":{"SUN":"So","MON":"Mo","TUE":"Di","WED":"Mi","THU":"Do","FRI":"Fr","SAT":"Sa"}},"SEE_USER_PROFILE":"Profil von {{username }} ansehen","USER_STORY":"User-Story","TASK":"Aufgabe","ISSUE":"Ticket","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Gib einen Tag ein","DELETE":"Schlagwort löschen","ADD":"Schlagwort hinzufügen"},"DESCRIPTION":{"EMPTY":"Bitte geben Sie eine Beschreibung ein...","NO_DESCRIPTION":"Noch keine Beschreibung"},"FIELDS":{"SUBJECT":"Thema","NAME":"Name","URL":"URL","DESCRIPTION":"Beschreibung","VALUE":"Wert","SLUG":"Slug","COLOR":"Farbe","IS_CLOSED":"ist geschlossen?","STATUS":"Status","TYPE":"Typen","SEVERITY":"Gewichtung","PRIORITY":"Priorität","ASSIGNED_TO":"Zugewiesen an","ASSIGNED_USERS":"Zugewiesene Benutzer","POINTS":"Punkte","IS_BLOCKED":"wird blockiert","REF":"Ref","VOTES":"Stimmen","SPRINT":"Sprint","DUE_DATE":"Fälligkeitsdatum","DUE_DATE_REASON":"Grund des Fälligkeitsdatum"},"ROLES":{"ALL":"Alle"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Nicht zugeordnet","ASSIGN":"Zuweisen","DELETE_ASSIGNMENT":"Zuordnung löschen","REMOVE_ASSIGNED":"Zugewiesene entfernen","TOO_MANY":"...zu viele Benutzer. Filtern Sie!","CONFIRM_UNASSIGNED":"Möchten dies wirklich ohne eine Zuordnung verlassen?","TITLE_ACTION_EDIT_ASSIGNMENT":"Zuordnungen bearbeiten","SELF":"An mich zuweisen"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Fälligkeitsdatum setzen"},"ASSIGNED_USERS":{"ADD":"Zugewiesenen Benutzer wählen","ADD_ASSIGNED":"Zugewiesenen hinzufügen","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Zugewiesenen löschen..."},"STATUS":{"CLOSED":"Geschlossen","OPEN":"Geöffnet"},"WATCHERS":{"WATCHERS":"Beobachter","ADD":"Beobachter hinzufügen","TITLE_ADD":"Füge ein neues Projektmitglied der Beobachterliste hinzu","DELETE":"Beobachter löschen","TITLE_LIGHTBOX_DELETE_WARTCHER":"Beobachter löschen..."},"WATCH_BUTTON":{"WATCH":"Beobachten","WATCHING":"Beobachtet","UNWATCH":"Nicht beobachten","WATCHERS":"Beobachter","BUTTON_TITLE":"Beobachte/Beobachte dieses Objekt (nicht mehr)","COUNTER_TITLE":"{total, plural, one{ein Beobachter} other{# Beobachter}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote diesen Eintrag","COUNTER_TITLE":"{total, plural, one{eine Stimme} other{# Stimmen}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Benutzerdefinierte Felder","SAVE":"Benutzerdefiniertes Feld speichern","EDIT":"Benutzerdefiniertes Feld bearbeiten","DELETE":"benutzerdefiniertes Attribut löschen","CONFIRM_DELETE":"Alle Werte in benutzerdefinierten Feldern werden gelöscht.\n Sind Sie sicher, dass Sie fortfahren wollen?"},"FILTERS":{"INPUT_PLACEHOLDER":"Betreff oder Verweis","TITLE_ACTION_FILTER_BUTTON":"suche","TITLE":"Filter","TITLE_ACTION_SEARCH":"Suche","ACTION_SAVE_CUSTOM_FILTER":"Als Benutzerfilter speichern","PLACEHOLDER_FILTER_NAME":"Benennen Sie den Filter und drücken Sie die Eingabetaste","APPLIED_FILTERS_NUM":"Filter wurden angewandt","CATEGORIES":{"TYPE":"Arten","STATUS":"Status","SEVERITY":"Gewichtung","PRIORITIES":"Prioritäten","TAGS":"Schlagwörter","ASSIGNED_TO":"Zugeordnet zu","ASSIGNED_USERS":"Zugewiesene Benutzer","ROLE":"Rolle","CREATED_BY":"Erstellt durch","CUSTOM_FILTERS":"Benutzerfilter","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Codeschnipsel","DB_CLICK":"Doppelklick zum Bearbeiten","SELECT_LANGUAGE_PLACEHOLDER":"Sprache wählen","SELECT_LANGUAGE_REMOVE_FORMATING":"Lösche Formatierung","OUTDATED":"Eine andere Person hat während Ihrer Bearbeitung ebenfalls Änderungen vorgenommen. Überprüfen Sie die neue Version bei den Aktivitäten, bevor Sie Ihre Änderungen speichern","MARKDOWN_HELP":"Markdown syntax Hilfe"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"Epics anzeigen","ADD_EPICS":"Epics hinzufügen","MODIFY_EPICS":"Epics verändern","COMMENT_EPICS":"Epics kommentieren","DELETE_EPICS":"Epics löschen"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Sprints ansehen","ADD_SPRINTS":"Sprints hinzufügen","MODIFY_SPRINTS":"Sprints modifizieren","DELETE_SPRINTS":"Sprints löschen"},"USER_STORIES":{"NAME":"User-Stories","VIEW_USER_STORIES":"User-Stories ansehen","ADD_USER_STORIES":"User-Stories hinzufügen","MODIFY_USER_STORIES":"User-Stories modifizieren","COMMENT_USER_STORIES":"User-Stories kommentieren","DELETE_USER_STORIES":"User-Stories löschen"},"TASKS":{"NAME":"Aufgaben","VIEW_TASKS":"Aufgaben ansehen","ADD_TASKS":"Aufgaben hinzufügen","MODIFY_TASKS":"Aufgaben ändern","COMMENT_TASKS":"Aufgaben kommentieren","DELETE_TASKS":"Aufgaben löschen"},"ISSUES":{"NAME":"Tickets","VIEW_ISSUES":"Tickets ansehen","ADD_ISSUES":"Tickets hinzufügen","MODIFY_ISSUES":"Tickets ändern","COMMENT_ISSUES":"Tickets kommentieren","DELETE_ISSUES":"Tickets löschen"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Wiki Seiten ansehen","ADD_WIKI_PAGES":"Wiki Seiten hinzufügen","MODIFY_WIKI_PAGES":"Wiki Seiten ändern","DELETE_WIKI_PAGES":"Wiki Seiten löschen","VIEW_WIKI_LINKS":"Wiki Links ansehen","ADD_WIKI_LINKS":"Wiki Links hinzufügen","DELETE_WIKI_LINKS":"Wiki Links löschen"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Melden Sie sich bei Taiga an, einer Projekt-Management Plattform für Neugründer und agile Entwickler und Designer, die ein unkompliziertes und ansprechendes Tool möchten, das die Arbeit wirklich angenehm macht."},"AUTH":{"INVITED_YOU":"hat Sie zum Projekt eingeladen","NOT_REGISTERED_YET":"Noch nicht registiert?","REGISTER":"Registrieren","CREATE_ACCOUNT":"Ein kostenloses Benutzerkonto anlegen"},"LOGIN_COMMON":{"HEADER":"Ich bin bereits bei Taiga registriert","PLACEHOLDER_AUTH_NAME":"Benutzername oder E-Mail-Adresse","LINK_FORGOT_PASSWORD":"Haben Sie es vergessen?","TITLE_LINK_FORGOT_PASSWORD":"Haben Sie Ihr Passwort vergessen?","ACTION_ENTER":"Eingabe","ACTION_SIGN_IN":"Login","PLACEHOLDER_AUTH_PASSWORD":"Passwort","ALT_LOGIN":"Oder einloggen mit"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Laut unserem Helferlein ist ihr Benutzername/ihre E-Mail-Adresse oder ihr Passwort nicht korrekt. (Bitte achten Sie auf die Groß- und Kleinschreibung.)","SUCCESS":"Herzlich willkommen bei Taiga, unsere Helferlein freuen sich."},"REGISTER":{"PAGE_TITLE":"Registrieren - Taiga","PAGE_DESCRIPTION":"Erstellen Sie ihr Benutzerkonto in Taiga, einer Projekt-Management Plattform für Neugründer und agile Entwickler und Designer, die ein unkompliziertes und ansprechendes Tool möchten, das die Arbeit wirklich angenehm macht."},"REGISTER_FORM":{"TITLE":"Ein neues Taiga Benutzerkonto registrieren (kostenlos)","PLACEHOLDER_NAME":"Wählen Sie einen Benutzernamen (Groß- und Kleinschreibung beachten)","PLACEHOLDER_FULL_NAME":"Wählen Sie Ihren Anzeigenamen","PLACEHOLDER_EMAIL":"Ihre E-Mail","PLACEHOLDER_PASSWORD":"Setzen Sie ein Passwort (Groß- und Kleinschreibung beachten)","ACTION_SIGN_UP":"Anmelden","TITLE_LINK_LOGIN":"Anmelden","LINK_LOGIN":"Sind Sie bereits registriert? Loggen Sie sich ein"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Passwort vergessen - Taiga","PAGE_DESCRIPTION":"Geben Sie Ihren Benutzernamen oder Ihre E-Mail Adresse ein, um ein neues Passwort zu erhalten."},"FORGOT_PASSWORD_FORM":{"TITLE":"Huch, haben Sie Ihr Passwort vergessen?","SUBTITLE":"Geben Sie Ihren Benutzernamen oder Ihre E-Mail-Adresse ein, um einen neues zu erhalten.","PLACEHOLDER_FIELD":"Benutzername oder E-Mail-Adresse","ACTION_RESET_PASSWORD":"Passwort zurücksetzen","LINK_CANCEL":"Nein, bring mich zurück. Ich denke, ich erinnere mich daran.","SUCCESS_TITLE":"Prüfen Sie bitte Ihre Emails!","SUCCESS_TEXT":"Wir haben Ihnen eine Email mit den Anweisungen zum ändern Ihres Passworts geschickt","ERROR":"Laut unseren Helferlein sind Sie bislang noch nicht registriert."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Änderen Sie Ihr Passwort - Taiga","SECTION_NAME":"Passwort ändern","FIELD_CURRENT_PASSWORD":"Aktuelles Passwort","PLACEHOLDER_CURRENT_PASSWORD":"Ihr aktuelles Passwort (oder leer, wenn Sie noch kein Passwort haben)","FIELD_NEW_PASSWORD":"Neues Passwort","PLACEHOLDER_NEW_PASSWORD":"Geben Sie ein neues Passwort ein","FIELD_RETYPE_PASSWORD":"Neues Passwort wiederholen","PLACEHOLDER_RETYPE_PASSWORD":"Wiederholen Sie das neue Passwort","ERROR_PASSWORD_MATCH":"Die Passwörter stimmen nicht überein"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Erstellen Sie einen neues Passwort","SUBTITLE":"Und hey, es empfiehlt sich, mehr eisenreiche Nahrung zu sich zu nehmen - die ist gut für's Gehirn :P","PLACEHOLDER_NEW_PASSWORD":"Neues Passwort","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Wiederholen Sie die Eingabe des neuen Passworts","ACTION_RESET_PASSWORD":"Passwort zurücksetzen","ERROR":"Unsere Heinzelmännchen haben Probleme Ihre Anfrage zum Zurücksetzen des Passworts zu finden. Probieren Sie es einfach nochmal.","SUCCESS":"Unsere Helferlein haben das neue Passwort gespeichert.
    Hier gehts zum login."},"INVITATION":{"PAGE_TITLE":"Annahme der Einladung - Taiga","PAGE_DESCRIPTION":"Nehmen Sie die Einladung an und treten Sie einem Projekt in Taiga bei, einer Projekt-Management Plattform für Neugründer und agile Entwickler und Designer, die ein unkompliziertes und ansprechendes Tool möchten, das die Arbeit wirklich angenehm macht."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Unsere Helferlein können Ihre Einladung nicht finden.","SUCCESS":"Sie sind diesem Projekt erfolgreich beigetreten. Herzlich willkommen bei {{project_name}}"},"HOME":{"PAGE_TITLE":"Home - Taiga","PAGE_DESCRIPTION":"Die Taiga Homepage mit Ihren wichtigsten Projekten und all Ihren zugeordneten und beobachteten User-Stories, Aufgaben und Tickets.","EMPTY_WORKING_ON":"Es sieht hier noch leer aus! Beginnen Sie mit Taiga zu arbeiten und hier werden die User-Storys, Aufgaben und Tickets angezeigt, an denen Sie arbeiten.","EMPTY_WATCHING":"Folgen Sie User Stories, Aufgaben, Tickets in Ihrem Projekt und erhalte Benachrichtigungen, wenn sich etwas ändert.","EMPTY_PROJECT_LIST":"Sie haben noch keine Projekte","WORKING_ON_SECTION":"In Arbeit","WATCHING_SECTION":"Beobachtet","DASHBOARD":"Projekt Dashboard"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"Die Liste der Epics dieses Projekts {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ EPIC HINZUFÜGEN","UNASSIGNED":"Nicht zugeordnet"},"EMPTY":{"TITLE":"Es sind noch keine Epics vorhanden","EXPLANATION":"Epics sind Elemente, die User-Stories umfassen.
    Sie stehen dabei an oberster Stelle in der Hierarchie und können dazu verwendet werden, User-Stories zu gruppieren.","HELP":"Erfahren Sie mehr über Epics"},"TABLE":{"VOTES":"Stimmen","NAME":"Name","PROJECT":"Projekt","SPRINT":"Sprint","ASSIGNED_TO":"Zugewiesen","STATUS":"Status","PROGRESS":"Fortschritt","VIEW_OPTIONS":"Zeige Optionen"},"CREATE":{"TITLE":"Neues Epic","PLACEHOLDER_DESCRIPTION":"Bitte beschreiben Sie dieses Epic zum leichteren Verständnis","TEAM_REQUIREMENT":"Team-Anforderung","CLIENT_REQUIREMENT":"Kunden-Anforderung","BLOCKED":"Blockiert","BLOCKED_NOTE_PLACEHOLDER":"Warum ist dieses Epic geblockt?","CREATE_EPIC":"Epic erzeugen"}},"PROJECTS":{"PAGE_TITLE":"Meine Projekte - Taiga","PAGE_DESCRIPTION":"Eine Liste mit all Ihren Projekten. Sie können sie ordnen oder ein Neues anlegen.","MY_PROJECTS":"Meine Projekte"},"ATTACHMENT":{"SECTION_NAME":"Anhänge","TITLE":"{{ fileName }} hochgeladen am {{ date }}","LIST_VIEW_MODE":"List view mode","GALLERY_VIEW_MODE":"Gallery view mode","DESCRIPTION":"Geben Sie eine kurze Beschreibung ein","DEPRECATED":"verworfen","DEPRECATED_FILE":"Verwerfen?","ADD":"Neuen Anhang hinzufügen. {{maxFileSizeMsg}}","DROP":"Ziehe Anhänge hierher!","SHOW_DEPRECATED":"+ verworfene Anhänge zeigen","HIDE_DEPRECATED":"- verworfene Anhänge verbergen","COUNT_DEPRECATED":"({{ counter }} verworfen)","MAX_UPLOAD_SIZE":"Die maximale Dateigröße beträgt {{maxFileSize}}","DATE":"DD. MMM YYYY [um] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Das Hochladen war uns nicht möglich '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Anhang löschen...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"der Anhang '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Es war uns nicht möglich, zu löschen: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Zurück","NEXT":"Weiter"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Wert bearbeiten","TITLE_ACTION_DELETE_VALUE":"Wert löschen","TITLE_ACTION_DELETE_TAG":"Schlagwort löschen"},"HELP":"Wenn Sie Hilfe benötigen, besuchen Sie unsere Support-Seite!","PROJECT_DEFAULT_VALUES":{"TITLE":"Vorgabewerte","SUBTITLE":"Standardwerte für alle ausgewählten Eingaben setzen."},"MEMBERSHIPS":{"TITLE":"Mitglieder verwalten","PAGE_TITLE":"Mitgliedschaften - {{projectName}}","ADD_BUTTON":"+ Neues Mitglied","ADD_BUTTON_TITLE":"Neues Mitglied hinzufügen","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Dieses Projekt hat seine Grenze von ({{members}}) erlaubten Mitgliedern erreicht. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie den Administrator."},"PROJECT_EXPORT":{"TITLE":"Exportieren","SUBTITLE":"Exportieren Sie Ihr Projekt, um ein Backup durchzuführen, oder ein neues, darauf basierendes, zu erstellen.","EXPORT_BUTTON":"Exportieren","EXPORT_BUTTON_TITLE":"Exportieren Sie Ihr Projekt","LOADING_TITLE":"Wir erzeugen die Exportdatei","DUMP_READY":"Ihre Export-Datei ist fertig!","LOADING_MESSAGE":"Bitte lassen Sie diese Seite geöffnet!","ASYNC_MESSAGE":"Wir werden nach Fertigstellung eine E-Mail senden.","SYNC_MESSAGE":"Wenn der Download nicht automatisch startet, klicken Sie hier.","ERROR":"Unsere Helferlein haben Probleme, Ihre Export-Datei zu erzeugen. Bitte versuchen Sie es erneut.","ERROR_BUSY":"Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut."},"MODULES":{"TITLE":"Module","EPICS":"Epics","EPICS_DESCRIPTION":"Visualisieren und verwalten Sie den strategischsten Teil Ihres Projektes","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Verwalten Sie Ihre User-Stories, um einen organisierten Überblick der anstehenden und priorisierten Aufgaben zu erhalten.","NUMBER_SPRINTS":"Erwartete Anzahl an Sprints","NUMBER_SPRINTS_HELP":"0 für eine unbestimmte Anzahl","NUMBER_US_POINTS":"Erwartete Gesamt-Story-Punkte","NUMBER_US_POINTS_HELP":"0 für eine unbestimmte Anzahl","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organisieren Sie Ihr Projekt auf übersichtliche Art.","ISSUES":"Tickets","ISSUES_DESCRIPTION":"Verfolgen Sie Fehler, Fragen und Verbesserungen, die mit Ihrem Projekt verbunden sind. Verpassen Sie nichts!","WIKI":"Wiki","WIKI_DESCRIPTION":"Fügen Sie Inhalte hinzu, ändern oder löschen Sie sie in Zusammenarbeit mit anderen. Dies ist der richtige Ort für Ihre Projektdokumentation.","MEETUP":"Zusammentreffen","MEETUP_DESCRIPTION":"Wähle Sie Ihr Videokonferenzsystem.","SELECT_VIDEOCONFERENCE":"Wählen Sie ein Videokonferenzsystem","SALT_CHAT_ROOM":"Fügen Sie ein Präfix für den Chatraum-Namen hinzu","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"Appear.in","TALKY_CHAT_ROOM":"Talky.io","CUSTOM_CHAT_ROOM":"Benutzerdefiniert","URL_CHAT_ROOM":"URL Ihres Chatrooms"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Projekt Profil - {{projectName}}","PROJECT_DETAILS":"Projekt Details","PROJECT_NAME":"Projektname","TAGS":"Schlagwörter","DESCRIPTION":"Beschreibung","RECRUITING":"Auf der Suche nach Mitgliedern?","RECRUITING_MESSAGE":"Wen suchen Sie denn?","RECRUITING_PLACEHOLDER":"Define the profiles you are looking for","FEEDBACK":"Feedback von Taiga-Nutzern erhalten?","PUBLIC_PROJECT":"Öffentliches Projekt","PRIVATE_PROJECT":"Privates Projekt","PRIVATE_OR_PUBLIC":"Was ist der Unterschied zwischen öffentlichen und privaten Projekten?","DELETE":"Dieses Projekt löschen","CHANGE_LOGO":"Logo ändern","ACTION_USE_DEFAULT_LOGO":"Nutze Standardbild","MAX_PRIVATE_PROJECTS":"Sie haben die maximale Anzahl privater Projekte erreicht, die in Ihrem derzeitigen Plan erlaubt sind","MAX_PRIVATE_PROJECTS_MEMBERS":"Die maximale Anzahl von Mitgliedern für privater Projekte sind erreicht","MAX_PUBLIC_PROJECTS":"Leider haben Sie die maximale Anzahl öffentlicher Projekte erreicht, die in Ihrem derzeitigen Plan erlaubt sind","MAX_PUBLIC_PROJECTS_MEMBERS":"Die maximale Anzahl von Mitgliedern für öffentliche Projekte sind erreicht","PROJECT_OWNER":"Projekteigentümer","REQUEST_OWNERSHIP":"Besitz beantragen","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Möchten Sie der neue Projektleiter werden?","REQUEST_OWNERSHIP_DESC":"Anfrage vom derzeitigen Projektleiter {{name}}, die Leitung für dieses Projekt zu übernehmen.","REQUEST_OWNERSHIP_BUTTON":"Anfrage","REQUEST_OWNERSHIP_SUCCESS":"Wir werden den Projektleiter benachrichtigen","CHANGE_OWNER":"Ändere Besitzer","CHANGE_OWNER_SUCCESS_TITLE":"OK, Ihre Anfrage wurde versendet!","CHANGE_OWNER_SUCCESS_DESC":"Wir informieren Sie via Email, ob sie als neuer Projektleiter akzeptiert wurden oder ob die Anfrage zurückgewiesen wurde."},"REPORTS":{"TITLE":"Berichte","SUBTITLE":"Exportieren Sie Ihre Projektdaten in CSV Format und erstellen Sie Ihre eigenen Berichte.","DESCRIPTION":"Laden Sie eine CSV-Datei herunter oder kopieren Sie die generierte URL und öffnen Sie sie in Ihrem Lieblingstexteditor oder Tabellenkalkulationsprogramm um Ihre eigenen Projektdaten Berichte zu erstellen. So können Sie Ihre Daten einfach visualisieren und analysieren.","HELP":"Wie kann ich dies in meiner eigenen Tabellenkalkulation nutzen?","REGENERATE_TITLE":"Die URL ändern","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"URL löschen","DELETE_SUBTITLE":"Sie sind dabei, die aktuelle URL für den CSV Daten Zugriff, zu löschen. Sind Sie sicher?"},"CSV":{"SECTION_TITLE_EPIC":"Epics Berichte","SECTION_TITLE_US":"User-Stories Berichte","SECTION_TITLE_TASK":"Aufgabenberichte","SECTION_TITLE_ISSUE":"Ticket Berichte","DOWNLOAD":"CSV herunterladen","URL_FIELD_PLACEHOLDER":"Bitte erstellen Sie die CSV URL neu","TITLE_REGENERATE_URL":"Erstellen Sie die CSV URL neu","ACTION_GENERATE_URL":"URL erzeugen","ACTION_REGENERATE":"Neu erstellen","TITLE_DELETE_URL":"CSV URL löschen","ACTION_DELETE_URL":"Löschen"},"CUSTOM_FIELDS":{"TITLE":"Benutzerfelder","SUBTITLE":"Spezifizieren Sie die Benutzerfelder für Ihre User-Stories, Aufgaben und Tickets.","EPIC_DESCRIPTION":"Benutzerdefinierte Felder der Epics","EPIC_ADD":"Benutzerdefiniertes Feld bei Epics hinzufügen","US_DESCRIPTION":"Benutzerdefinierte Felder der User-Story","US_ADD":"Benutzerdefiniertes Feld bei User-Stories hinzufügen","TASK_DESCRIPTION":"Aufgaben benutzerdefinierte Felder","TASK_ADD":"Fügen Sie ein benutzerdefiniertes Feld bei Aufgaben hinzu","ISSUE_DESCRIPTION":"Tickets benutzerdefinierte Felder","ISSUE_ADD":"Fügen Sie den Tickets ein benutzerdefiniertes Feld hinzu","FIELD_TYPE_TEXT":"Text","FIELD_TYPE_RICHTEXT":"Rich Text","FIELD_TYPE_MULTI":"Mehrzeilig","FIELD_TYPE_DATE":"Datum","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Projekt Werte - {{projectName}}","REPLACEMENT":"Alle Einträge mit diesem Wert werden geändert zu","ERROR_DELETE_ALL":"Sie dürfen nicht alle Werte löschen!"},"PROJECT_VALUES_POINTS":{"TITLE":"Punkte","SUBTITLE":"Bitte schätzen Sie die Punktzahl für Ihre User-Stories","US_TITLE":"User-Story Punkte","ACTION_ADD":"Neuen Punkt hinzufügen"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioritäten","SUBTITLE":"Legen Sie die Prioritäten Ihrer Tickets fest","ISSUE_TITLE":"Ticket Prioritäten","ACTION_ADD":"Neue Priorität hinzufügen"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Schweregrade","SUBTITLE":"Legen Sie die Gewichtung Ihrer Tickets fest","ISSUE_TITLE":"Ticket Gewichtung","ACTION_ADD":"Neue Gewichtung hinzufügen"},"PROJECT_VALUES_STATUS":{"TITLE":"Status","SUBTITLE":"Spezifizieren Sie die Status, die Ihre User-Stories, Aufgaben und Tickets durchlaufen werden.","EPIC_TITLE":"Epic Status","US_TITLE":"User-Story Status","TASK_TITLE":"Aufgaben-Status","ISSUE_TITLE":"Ticket-Status"},"PROJECT_VALUES_TYPES":{"TITLE":"Typen","SUBTITLE":"Spezifizieren Sie, welche Arten Ihre Tickets haben können","ISSUE_TITLE":"Ticketarten","ACTION_ADD":"Neu hinzufügen {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Schlagwörter","SUBTITLE":"Farben der Tags anzeigen und verändern","EMPTY":"Zur Zeit sind keine Tags vorhanden","EMPTY_SEARCH":"Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden.","ACTION_ADD":"Schlagwort hinzufügen","NEW_TAG":"Neuer Tag","MIXING_HELP_TEXT":"Wähle die Tags aus, die zu zusammenführen willst","MIXING_MERGE":"Tags zusammenführen","SELECTED":"Ausgewählt"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Fällikeitstermine","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"Status der User Story Fälligkeit","ACTION_ADD_STATUS":"Neuen Status hinzufügen","TASK_TITLE":"Status der Aufgabenfälligkeit","ISSUE_TITLE":"Status der Ticket Fälligkeit","DAYS_TO_DUE_DATE":"Tage bis zur Fällikeit","BEFORE_AFTER":"Früher/später","BEFORE":"Früher","AFTER":"Nach"},"ROLES":{"PAGE_TITLE":"Rollen - {{projectName}}","WARNING_NO_ROLE":"Beachten Sie, keine Rolle in Ihrem Projekt wird in der Lage sein, die Punktevergabe für User-Stories einzuschätzen.","HELP_ROLE_ENABLED":"Wenn Sie dies freischalten, werden Mitglieder, denen diese Rolle zugewiesen ist, in der Lage sein, die Punktevergabe für User-Stories vorzunehmen.","DISABLE_COMPUTABLE_ALERT_TITLE":"Sind Sie sicher, dass in dieser Rolle Estimatepoints deaktivieren möchtest?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Wenn Sie die Estimatepoints für die Rolle {{roleName}} deaktivieren, werden alle bisherigen gelöscht","COUNT_MEMBERS":"{{ role.members_count }} Mitglieder mit dieser Rolle","TITLE_DELETE_ROLE":"Rolle löschen","REPLACEMENT_ROLE":"Alle Benutzer mit dieser Rolle werden verschoben nach","WARNING_DELETE_ROLE":"Achtung! Alle Rollenverteilungen werden entfernt.","ERROR_DELETE_ALL":"Sie können nicht alle Werte löschen","EXTERNAL_USER":"Externer Benutzer","NOTE_EXTERNAL_USERS":"Beachte:Mit Externen Benutzern meinen wir anonyme Benutzer, die nicht zur Taiga Plattform gehören, einschließlich Suchmaschinen. Bitte benutzen Sie diese Rolle mit Vorsicht."},"THIRD_PARTIES":{"SECRET_KEY":"Geheimschlüssel","PAYLOAD_URL":"Payload URL","VALID_IPS":"Gültige Quell-IPs (getrennt von ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket Anfragen sind nicht signiert, daher ist der beste Weg die Quelle anhand der IP zu prüfen. Wenn das Feld leer bleibt, wird keine Prüfung der IP vorgenommen."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab rAnfragen sind nicht signiert, daher ist der beste Weg die Quelle anhand der IP zu prüfen. Wenn das Feld leer bleibt, wird keine Prüfung der IP vorgenommen."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Fügen Sie ein neues Webhook hinzu","TYPE_NAME":"Servicename...","TYPE_PAYLOAD_URL":"Geben Sie die Service Payload URL ein","TYPE_SERVICE_SECRET":"Sicherheitsschlüssel...","SAVE":"Webhook sichern","CANCEL":"Webhook beenden","SHOW_HISTORY":"(Chronik anzeigen)","TEST":"Webhook Test","EDIT":"Webhook bearbeiten","DELETE":"Webhook löschen","REQUEST":"Anfrage","RESEND_REQUEST":"Anfrage erneut senden","HEADERS":"Überschriften","PAYLOAD":"Payload","RESPONSE":"Rückmeldung","DATE":"DD. MMM YYYY [um] hh:mm:ss","ACTION_HIDE_HISTORY":"(Chronik verbergen)","ACTION_HIDE_HISTORY_TITLE":"Chronik Details verbergen","ACTION_SHOW_HISTORY":"(Chronik anzeigen)","ACTION_SHOW_HISTORY_TITLE":"Chronik Details anzeigen","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Kunden Attribute - {{projectName}}","ADD":"Benutzerdefiniertes Feld hinzufügen","EDIT":"Benutzerdefiniertes Feld bearbeiten","DELETE":"Benutzerdefiniertes Feld löschen","SAVE_TITLE":"Benutzerdefiniertes Feld speichern","CANCEL_TITLE":"Erstellung abbrechen","SET_FIELD_NAME":"Legen Sie den Namen Ihres benutzerdefinierten Feldes fest","SET_FIELD_DESCRIPTION":"Legen Sie Ihre Beschreibung für das benutzerdefinierte Feld fest","FIELD_TYPE_DEFAULT":"-- Bitte auswählen --","ACTION_UPDATE":"Benutzerdefiniertes Feld aktualisieren","ACTION_CANCEL_EDITION":"Bearbeitung abbrechen"},"MEMBERSHIP":{"COLUMN_MEMBER":"Mitglied","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rolle","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Aktiv","STATUS_PENDING":"Ausstehend","DELETE_MEMBER":"Mitglied löschen","RESEND":"Neu senden","SUCCESS_SEND_INVITATION":"Wir haben die Einladung erneut versandt an '{{email}}'.","SUCCESS_DELETE":"Gelöscht {{message}}.","ERROR_DELETE":"Das Löschen ist fehlgeschlagen {{message}}.","DEFAULT_DELETE_MESSAGE":"die Einladung an {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Standardwert für Epic Status","LABEL_US_STATUS":"Standardwert für Userstory Status","LABEL_POINTS":"Vorgegebener Wert für Punkteauswahl","LABEL_TASK_STATUS":"Vorgegebene Auswahl für den Aufgaben-Status","LABEL_ISSUE_TYPE":"Vorgegebener Wert für Ticketartauswahl","LABEL_ISSUE_STATUS":"Vorgegebene Auswahl für den Ticket-Status","LABEL_PRIORITY":"Vorgegebener Wert für Prioritätsauswahl","LABEL_SEVERITY":"Vorgegebener Wert für Gewichtungsauswahl"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Benennen Sie den neuen Status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Zahl der Tage bis zur Fälligkeit"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Geben Sie dem neuen Element einen Namen"},"US_STATUS":{"ACTION_ADD_STATUS":"Neuen Status hinzufügen","IS_ARCHIVED_COLUMN":"Archiviert","IS_CLOSED_COLUMN":"Geschlossen","WIP_LIMIT_COLUMN":"WIP Limit","PLACEHOLDER_WRITE_NAME":"Benennen Sie den neuen Status"},"MENU":{"PROJECT":"Projekt","ATTRIBUTES":"Attribute","MEMBERS":"Mitglieder","PERMISSIONS":"Berechtigungen","INTEGRATIONS":"Integrationen"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Punkte","PRIORITIES":"Prioritäten","SEVERITIES":"Schweregrade","TYPES":"Typen","CUSTOM_FIELDS":"Benutzerdefinierte Felder","TAGS":"Schlagwörter","DUE_DATES":"Fälligkeiten"},"SUBMENU_ROLES":{"TITLE":"Rollen","ACTION_NEW_ROLE":"+ Neue Rolle","TITLE_ACTION_NEW_ROLE":"Neue Rolle hinzufügen"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Möchten Sie der neue Projektleiter werden?","PRIVATE":"Privat","ACCEPTED_PROJECT_OWNERNSHIP":"Herzlichen Glückwunsch. Sie sind der neue Projektleiter.","REJECTED_PROJECT_OWNERNSHIP":"Ok, wir kontaktieren den aktuellen Projektleiter","ACCEPT":"Akzeptieren","REJECT":"Zurückweisen","PROPOSE_OWNERSHIP":"{{owner}}, der derzeitige Leiter des Projekts {{project}} hat Sie gefragt, ob Sie der neue Projektleiter werden möchten.","ADD_COMMENT":"Möchten Sie einen Kommentar für den Projektleiter hinzufügen?","UNLIMITED_PROJECTS":"Unbegrenzt","OWNER_MESSAGE":{"PRIVATE":"Bitte denken Sie daran, dass Sie bis zu {{maxProjects}} private Projekte besitzen können. Dezeit besitzen Sie {{currentProjects}} private Projekte","PUBLIC":"Bitte denken Sie daran, dass Sie bis zu {{maxProjects}} öffentliche Projekte besitzen können. Dezeit besitzen Sie {{currentProjects}} öffentliche Projekte"},"CANT_BE_OWNED":"Zur Zeit können Sie kein Projektleiter für diesen Projekt-Typ werden werden. Wenn Sie Projektleiter für dieses Projekt werden möchten, kontaktieren Sie bitte den Administrator, damit er Ihre Benutzerkonto-Einstellungen anpassen kann, um Projektleiter werden zu können."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Profil ändern","CLOSED_US":"Geschlossene User-Story","PROJECTS":"Projekte","PROJECTS_EMPTY":"{{username}} besitzt noch keine Projekte","CONTACTS":"Kontakte","CONTACTS_EMPTY":"{{username}} hat noch keine Kontakte","CURRENT_USER_CONTACTS_EMPTY":"Sie haben noch keine Kontakte","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Die Leute, mit denen Sie auf Taiga zusammenarbeiten, werden automatisch zu Ihren Kontakten","TABS":{"ACTIVITY_TAB":"Aktivität","ACTIVITY_TAB_TITLE":"Alle Aktivitäten dieses Benutzers anzeigen","PROJECTS_TAB":"Projekte","PROJECTS_TAB_TITLE":"Liste alle Projekte auf, bei denen der Benutzer Mitglied ist","LIKES_TAB":"Likes","LIKES_TAB_TITLE":"Zeige alle Likes von diesem Benutzer","VOTES_TAB":"Stimmen","VOTES_TAB_TITLE":"Zeige alle Votes von diesem Nutzer","WATCHED_TAB":"Beobachtet","WATCHED_TAB_TITLE":"Zeige alle von diesem Nutzer beobachteten Items an","CONTACTS_TAB":"Kontakte","CONTACTS_TAB_TITLE":"Alle Kontakte dieses Buntzers anzeigen"}},"PROFILE_SIDEBAR":{"TITLE":"Ihr Profil","DESCRIPTION":"Da andere Mitglieder sehen, dass sie ebenfalls an einem Projekt arbeiten wäre es schön, wenn Sie ein paar Informationen zu Ihrer Person angeben.","ADD_INFO":"Biographie bearbeiten"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Geben sie etwas ein...","FILTER_TYPE_ALL":"Alle","FILTER_TYPE_ALL_TITLE":"Alle anzeigen","FILTER_TYPE_PROJECTS":"Projekte","FILTER_TYPE_PROJECTS_TITLE":"Nur Projekte anzeigen","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Nur Epics anzeigen","FILTER_TYPE_USER_STORIES":"Stories","FILTER_TYPE_USER_STORIES_TITLE":"Nur User-Stories anzeigen","FILTER_TYPE_TASKS":"Aufgaben","FILTER_TYPE_TASKS_TITLE":"Zeige nur Aufgaben","FILTER_TYPE_ISSUES":"Tickets","FILTER_TYPE_ISSUES_TITLE":"Nur Fehler anzeigen","EMPTY_TITLE":"Es sieht so aus, als wäre hier nichts."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Sortieren Sie Ihre Projekte nach Wichtigkeit.
    Die ersten 10 Projekte erscheinen prominent in der Projektliste der Navigationsleiste.","PRIVATE":"Privates Projekt","LOOKING_FOR_PEOPLE":"Dieses Projekt sucht nach Mitarbeitern","FANS_COUNTER_TITLE":"{total, plural, one{ein Fan} other{# Fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{ein Beobachter} other{# Beobachter}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Blockiertes Projekt","THIS_PROJECT_IS_BLOCKED":"Dieses Projekt ist vorrübergehend blockiert","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Um Ihr Projekt zu entsperren kontaktiere Sie bitte einen Administrator."},"SECTION":{"SEARCH":"Suche","TIMELINE":"Aktivität","EPICS":"Epics","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Tickets","WIKI":"Wiki","TEAM":"Team","MEETUP":"Zusammentreffen","ADMIN":"Administrator"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Projekt anlegen","MANAGE_PROJECTS":"Projekte verwalten","TITLE_CREATE_PROJECT":"Projekt anlegen","HELP_TITLE":"Taiga Support Seite","HELP":"Hilfe","HOMEPAGE":"Homepage","FEEDBACK_TITLE":"Feedback senden","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Benachrichtigungseinstellungen bearbeiten","NOTIFICATIONS":"Benachrichtigungen","VIEW_PROFILE_TITLE":"Profil ansehen","VIEW_PROFILE":"Profil ansehen","EDIT_PROFILE_TITLE":"Bearbeiten Sie Ihr Profil","EDIT_PROFILE":"Profil bearbeiten","CHANGE_PASSWORD_TITLE":"Passwort ändern","CHANGE_PASSWORD":"Passwort ändern","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Entdecke aktuelle Projekte","DISCOVER":"Entdecken"},"LIKE_BUTTON":{"LIKE":"Gefällt mir","LIKED":"Gefällt mir","UNLIKE":"Gefällt mir nicht mehr","BUTTON_TITLE":"Like oder Unlike dieses Projekt","COUNTER_TITLE":"{total, plural, one{ein Fan} other{# Fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Beobachte dieses Projekt und setze Benachrichtigungsregeln","WATCH":"Beobachten","WATCHING":"Beobachtet","COUNTER_TITLE":"{total, plural, one{ein Beobachter} other{# Beobachter}}","OPTIONS":{"NOTIFY_ALL":"Alle Benachrichtigungen empfangen","NOTIFY_ALL_TITLE":"Alle Benachrichtigungen für dieses Projekt anzeigen","NOTIFY_INVOLVED":"Nur Beteiligte","NOTIFY_INVOLVED_TITLE":"Benachrichtigungen nur erhalten, wenn Sie involviert sind","UNWATCH":"Nicht beobachten","UNWATCH_TITLE":"Nicht beobachten"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Kontaktiere das Projekt-Team","CONTACT_BUTTON":"Kontaktiere das Projekt"},"CREATE":{"TITLE":"Projekt erstellen","CHOOSE_TEMPLATE":"Welches Template passt am besten zu Ihrem Projekt?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Priorisieren und lösen Sie Ihre Aufgaben in kurzen Zeitintervallen","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Halte einen konstanten Workflow bei unabhängigen Aufgaben","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Projekt duplizieren","DUPLICATE_DESC":"Starten Sie neu und behalten Sie Ihre Konfiguration","IMPORT":"Projekt importieren","IMPORT_DESC":"Importieren Sie Ihr Projekt von verschiedenen Plattformen zu Taiga","INVITE":"Lade jemanden in dieses Projekt ein","SOLO_PROJECT":"Sie sind alleine in diesem Projekt","INVITE_LATER":"(Später können Sie weitere Mitglieder einladen)","BACK":"Zurück","MAX_PRIVATE_PROJECTS":"Leider haben Sie die maximale Anzahl privater Projekte erreicht.\nBitte wenden Sie sich an den Administrator um diese Limite zu erhöhen.","MAX_PUBLIC_PROJECTS":"Leider haben Sie die maximale Anzahl öffentlicher Projekte erreicht.\nBitte wenden Sie sich an den Administrator um diese Limite zu erhöhen.","PUBLIC_PROJECT":"Öffentliches Projekt","PRIVATE_PROJECT":"Privates Projekt"},"COMMON":{"DETAILS":"Projekt Details","PROJECT_TITLE":"Projektname","PROJECT_DESCRIPTION":"Projekt-Beschreibung"},"DUPLICATE":{"TITLE":"Projekt duplizieren","DESCRIPTION":"Starten Sie neu, aber behalte Sie die Konfiguration","SELECT_PLACEHOLDER":"Wähle ein bestehendes Projekt zum Duplizieren aus"},"IMPORT":{"TITLE":"Projekt importieren","DESCRIPTION":"Importieren Sie Ihr Projekt von verschiedenen Plattformen zu Taiga","ASYNC_IN_PROGRESS_TITLE":"Unsere Helferlein importieren Ihr Projekt","ASYNC_IN_PROGRESS_MESSAGE":"Dieser Vorgang könnte ein paar Minuten benötigen
    Nach Fertigstellung benachrichtigen wir Sie per E-Mail.","UPLOAD_IN_PROGRESS_MESSAGE":"Hochgeladen {{uploadedSize}} von {{totalSize}}","ERROR":"Unsere Helferlein haben Probleme beim Importieren Ihrer Daten. Bitte versuchen Sie es erneut.","ERROR_TOO_MANY_REQUEST":"Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut.","ERROR_MESSAGE":"Unsere Helferlein haben Probleme beim Importieren Ihrer Datei: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})","SYNC_SUCCESS":"Ihr Projekt wurde erfolgreich importiert","IMPORT":"Importieren","WHO_IS":"Ihre Aufgaben werden zugewiesen an ...","WRITE_EMAIL":"Oder geben Sie die E-Mail Adresse eines Benutzers an","SEARCH_CONTACT":"Oder suchen Sie in Ihren Kontakten","WRITE_EMAIL_LABEL":"Schreibe eine Email, das dieser User Taiga benützt","ACCEEDE":"Erledigt","PROJECT_MEMBERS":"Projektmitglieder","PROCESS_DESCRIPTION":"Sagen Sie uns, wem aus Taiga die {{platform}} Aufgaben zugewiesen werden sollen","MATCH":"Ist {{user_external}} die selbe Person als {{user_internal}}?","CHOOSE":"Wähle User","LINKS":"Links mit {{platform}}","LINKS_DESCRIPTION":"Möchten Sie den Link von jedem Eintrag mit der originalen {{platform}} Informationen behalten?","WARNING_MAIL_USER":"Wenn der User keinen Taiga Account besitzt, können ihm keine Aufgaben zugewiesen werden","ASSIGN":"Zuweisen","PROJECT_SELECTOR":{"NO_RESULTS":"Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden.","ACTION_SEARCH":"suche","ACTION_BACK":"Zurück"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"Das Projekt, dass Sie importieren möchten, hat {{members}} Mitglieder. Leider erlaubt ihr derzeitiger Plan nicht mehr als {{max_memberships}} Mitglieder pro öffentlichen Projekt. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie bitte den Administrator.","ACCOUNT_ALLOW_MEMBERS":"Dieser Account erlaubt nur {{members}} Mitglieder","PRIVATE_PROJECTS_SPACE":{"TITLE":"Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen.","DESC":"Das Projekt, das Sie versuchen zu importieren, ist privat. Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte hinzuzufügen."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte anzulegen.","DESC":"Das Projekt, das Sie versuchen zu importieren, ist öffentlich. Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte hinzuzufügen."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Ihr derzeitiger Plan erlaubt maximal {{max_memberships}} Mitglieder pro privatem Projekt"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Ihr derzeitiger Plan erlaubt maximal {{max_memberships}} Mitglieder pro öffentlichem Projekt"},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen oder eine Erhöhung von mehr als {{max_memberships}} Mitglieder pro privatem Projekt","DESC":"Das Projekt, dass Sie importieren möchten, ist privat und hat {{members}} Mitglieder."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte anzulegen oder eine Erhöhung von mehr als {{max_memberships}} Mitglieder pro öffentlichem Projekt","DESC":"Das Projekt, dass Sie importieren möchten, ist öffentlich und hat mehr als {{members}} Mitglieder."}},"IN_PROGRESS":{"TITLE":"Projekt importieren","DESCRIPTION":"Dieser Vorgang kann etwas dauern. Bitte schliessen Sie das Fenster nicht!"},"WARNING":{"TITLE":"Einige Tasks werden noch nicht zugewiesen","DESCRIPTION":"Es gibt immer noch nicht identifizierte Personen. Die Objekte, die diesen Personen zugewiesen sind, werden in Taiga nicht ohne Zuweisung erstellt. Überprüfe alle Kontakte, um Informationsverlust zu vermeiden","CHECK":"Überprüfe Kontakte"},"TAIGA":{"SELECTOR":"Importieren Sie Ihr Taiga Projekt"},"TRELLO":{"SELECTOR":"Importiere Trello Projekt in Taiga","CHOOSE_PROJECT":"Wähle Board welches importiert werden soll","NO_PROJECTS":"Es scheint, als hätten Sie keine Boards in Trello"},"GITHUB":{"SELECTOR":"Importiere Github Projekt Issues","CHOOSE_PROJECT":"Finde das Projekt, welches Sie importieren möchten","NO_PROJECTS":"Es scheint, als hätten Sie keinen Projekte in Github","HOW_DO_YOU_WANT_TO_IMPORT":"Wie wollen Sie Ihre Tickets in Taiga importieren?","KANBAN_PROJECT":"Als Userstories in einem Kanban Projekt","KANBAN_PROJECT_DESCRIPTION":"Danach können Sie Scrum mit Backlog aktivieren.","SCRUM_PROJECT":"Als Userstory in einem Scrum Projekt","SCRUM_PROJECT_DESCRIPTION":"Danach ist der Kanban Modus aktivierbar.","ISSUES_PROJECT":"Als Ticket","ISSUES_PROJECT_DESCRIPTION":"Diese Tickets sind im Kanban oder Scrum Modus nicht verfügbar. Wenn neue Userstories angelegt werden, ist der Kanban oder Scrum Modus verfügbar "},"ASANA":{"SELECTOR":"Importieren Sie Ihr Asana Projekt und entscheiden Sie, wie es verwalten werden soll","CHOOSE_PROJECT":"Wähle das Projekt, welches importiert werden soll","NO_PROJECTS":"Es scheint, als hätten Sie keine Projekte in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Die Aufgaben und Teilaufgaben Ihres Projekts werden als Taiga User Stories und Aufgaben erzeugt","CREATE_AS_KANBAN_DESCRIPTION":"Die Aufgaben und Teilaufgaben von Ihrem Projekt werden als Taiga User Stories und Aufgaben erzeugt"},"JIRA":{"SELECTOR":"Importieren Sie Ihr Jira Projekt und entscheiden Sie, wie es verwaltet werden soll","HOW_TO_CONFIGURE":"(Konfigurationshilfe)","CHOOSE_PROJECT":"Wähle Projekt oder Board welches importiert werden soll","NO_PROJECTS":"Es scheint, dass keine Projekte oder Boards in Jira bestehen","URL":"Ihre Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Tickets","CREATE_AS_SCRUM_DESCRIPTION":"Die Tickets und Untertickets Ihres Projekts werden als Taiga User Stories und Aufgaben erstellt","CREATE_AS_KANBAN_DESCRIPTION":"Die Tickets und Untertickets Ihres Projekts werden als Taiga User Stories und Aufgaben erstellt","CREATE_AS_ISSUES_DESCRIPTION":"Was möchten Sie mit Untertickets aus dem Jira Projekt tun? (In Taiga gibt es keine Untertickets) ","CREATE_NEW_ISSUES":" Konvertiere Sub-Tickets zu neuen Taiga Tickets","NOT_CREATE_NEW_ISSUES":"Importiere keine Sub-Tickets"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Sind Sie sicher, dass Sie Ihr Taiga Benutzerkonto löschen wollen?","CANCEL":"Zurück zu den Einstellungen","ACCEPT":"Benutzerkonto löschen","BLOCK_PROJECT":"Beachten Sie, dass alle Projekte die Sie besitzen, gesperrt werden, nachdem Sie Ihr Konto gelöscht haben. Wenn Sie möchten, dass Ihre Projekte nicht gesperrt werden, ernennen Sie ein anderes Mitglied zum Projektleiter für jedes Projekt, bevor Sie Ihr Konto löschen."},"DELETE_PROJECT":{"TITLE":"Projekt löschen","QUESTION":"Sind Sie sicher, dass Sie das Projekt löschen möchten?","SUBTITLE":"Sämtliche Projektdaten (User-Stories, Aufgaben, Tickets, Sprints und Wiki Seiten) werden verloren gehen! :-(","CONFIRM":"Ja, ich bin mir sicher"},"ASSIGNED_TO":{"SELECT":"Zuweisung auswählen","SEARCH":"Nach Benutzern suchen"},"ADD_MEMBER":{"TITLE":"Neues Mitglied","PLACEHOLDER":"Nach Nutzern suchen oder per E-Mail einladen","ADD_EMAIL":"E-Mail hinzufügen","REMOVE":"Entfernen","INVITE":"Einladen","CHOOSE_ROLE":"Rolle auswählen","PLACEHOLDER_INVITATION_TEXT":"(Optional) Fügen Sie einen persönlichen Text zur Einladung hinzu. Erzählen Sie Ihren neuen Mitgliedern etwas Schönes. ;-)","HELP_TEXT":"Wenn Benutzer schon bei Taiga registriert sind, werden diese automatisch hinzugefügt. Ansonsten erhalten sie eine Einladung."},"FEEDBACK":{"TITLE":"Erzählen Sie uns etwas...","COMMENT":"...einen Fehler, Anregungen, etwas Tolles... oder Ihren schlimmsten Alptraum mit Taiga.","ACTION_SEND":"Feedback senden"},"SEARCH":{"TITLE":"Suche","PLACEHOLDER_SEARCH":"Wonach suchen Sie?"},"ADD_EDIT_SPRINT":{"TITLE":"Neuer Sprint","PLACEHOLDER_SPRINT_NAME":"Sprint Bezeichnung","PLACEHOLDER_SPRINT_START":"Geschätzter Beginn","PLACEHOLDER_SPRINT_END":"Geschätztes Ende","ACTION_DELETE_SPRINT":"Möchten Sie diesen Sprint löschen?","TITLE_ACTION_DELETE_SPRINT":"Sprint löschen","LAST_SPRINT_NAME":"letzter Sprint ist {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Bitte beschreiben Sie diese Aufgabe ausreichend, damit Beteiligte den Vorgang besser verstehen.","ISSUE_PLACEHOLDER_DESCRIPTION":"Bitte beschreiben Sie dieses Ticket ausreichend, damit Beteiligte den Vorgang besser verstehen.","US_PLACEHOLDER_DESCRIPTION":"Bitte beschreiben Sie diese User Story ausreichend, damit Beteiligte den Vorgang besser verstehen.","NEW_TASK":"Neue Aufgabe","NEW_ISSUE":"Neues Ticket","NEW_US":"Neue User Story","EDIT_TASK":"Aufgabe bearbeiten","EDIT_ISSUE":"Ticket bearbeiten","EDIT_US":"User Story bearbeiten","ADD_EXISTING_ISSUE":"Ticket zu {{ targetName }} hinzufügen","CONFIRM_CLOSE":"Sie haben Ihre Änderungen noch nicht gespeichert.\nSind Sie sicher, dass Sie dieses Formular schließen möchten?","EXISTING_ISSUE":"Existierendes Ticket","CHOOSE_EXISTING_ISSUE":"Welches Ticket?","ADD_ISSUE":"Ticket hinzufügen","FILTER_ISSUES":"Tickets Filtern"},"DELETE_DUE_DATE":{"TITLE":"Fälligkeitsdatum löschen","SUBTITLE":"Sind Sie sicher, dass Sie dieses Fälligkeitsdatum löschen wollen?"},"DELETE_SPRINT":{"TITLE":"Sprint löschen"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Verbindung zum Epic entfernen","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optional) Fügen Sie einen persönlichen Text zur Einladung hinzu. Erzählen Sie Ihren neuen Mitgliedern etwas Schönes. ;-)","PLACEHOLDER_TYPE_EMAIL":"Geben Sie eine E-Mail ein","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Dieses Projekt erreicht bald die maximale Anzahl von {{maxMembers}} Mitgliedern. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie bitte den Administrator.","LIMIT_USERS_WARNING_MESSAGE":"Dieses Projekt erreicht bald die maximale Anzahl von {{maxMembers}} Mitgliedern."},"LEAVE_PROJECT_WARNING":{"TITLE":"Das Projekt kann nicht ohne einen Projektleiter existieren.","CURRENT_USER_OWNER":{"DESC":"Sie sind der aktuelle Besitzer dieses Projektes. Bitte übertragen Sie den Besitzerstatus an jemand anderes bevor Sie das Projekt verlassen.","BUTTON":"Projektleiter wechseln"},"OTHER_USER_OWNER":{"DESC":"Leider können Sie das Mitglied nicht löschen, da es der derzeitige Projektleiter ist. Bitte ordnen Sie dem Projekt zuerst einen neuen Projektleiter zu.","BUTTON":"Antrag Projektleiter-Wechsel "}},"CHANGE_OWNER":{"TITLE":"Wen möchten Sie zum neuen Projektleiter ernennen?","ADD_COMMENT":"Kommentar hinzufügen","BUTTON":"Fragen Sie dieses Projektmitglied, um Projektleiter zu werden"},"CONTACT_PROJECT":{"TITLE":"Sende eine E-Mail an","WARNING":"Die E-Mail wird von den Projekt-Administratoren empfangen","PLACEHOLDER":"Schreiben Sie Ihre Nachricht","SEND":"Senden"},"SET_DUE_DATE":{"TITLE":"Fälligkeitsdatum setzen","PLACEHOLDER_DUE_DATE":"Fälligkeitsdatum wählen","REASON_FOR_DUE_DATE":"Grund des Fälligkeitsdatums","PLACEHOLDER_REASON_FOR_DUE_DATE":"Wieso benötigt diese User Story ein Fälligkeitsdatum?","SUGGESTIONS":{"IN_ONE_WEEK":"In einer Woche","IN_TWO_WEEKS":"In zwei Wochen","IN_ONE_MONTH":"In einem Monat","IN_THREE_MONTHS":"In drei Monaten"},"TITLE_ACTION_DELETE_DUE_DATE":"Fälligkeitsdatum löschen"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Fälligkeitsdatum löschen","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Mit Epic verbinden","EXISTING_EPIC":"Existierendes Epic","NEW_EPIC":"Neues Epic","CHOOSE_PROJECT_FOR_CREATION":"Welches Projekt?","CHOOSE_PROJECT_FROM":"Welches Projekt?","SUBJECT":"Thema","CHOOSE_EPIC":"Beschreibe das Epic","FILTER_EPICS":"Epics Filtern","NO_EPICS_FOUND":"Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Beschreibung: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"Die Verknüpfung konnte nicht gelöscht werden: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Erstelle eine Verbindung mit","NEW_USERSTORY":"Neue User-Story","EXISTING_USERSTORY":"Bestehende User-Story","CHOOSE_PROJECT_FOR_CREATION":"Welches Projekt?","SUBJECT":"Thema","SUBJECT_BULK_MODE":"Thema (Mehrfacheingaben möglich)","CHOOSE_PROJECT_FROM":"Welches Projekt?","CHOOSE_USERSTORY":"Beschreibung der User Story","NO_USERSTORIES":"Dieses Projekt hat zurzeit keine User Stories. Bitte wähle ein anderes Projekt.","NO_USERSTORIES_FOUND":"Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden.","FILTER_USERSTORIES":"User-Stories filter","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocke Epic","ACTION_DELETE":"Epic löschen"},"US":{"PAGE_TITLE":"{{userStorySubject}} - User-Story {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Abgeschlossen {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} von {{userStoryTotalTasks}} Aufgaben geschlossen). Punkte: {{userStoryPoints}}. Beschreibung: {{userStoryDescription}}","SECTION_NAME":"User-Story","LINK_TASKBOARD":"Aufgabenübersicht","TITLE_LINK_TASKBOARD":"Zur Aufgabenübersicht","TOTAL_POINTS":"Gesamtpunkte","ADD":"+ Neue User-Story anlegen","ADD_BULK":"Mehrere neue User-Stories hinzufügen","PROMOTED":"Diese User-Story entstand aus Ticket:","TITLE_LINK_GO_TO_ISSUE":"Zum Ticket wechseln","TITLE_DELETE_ACTION":"User-Story löschen","LIGHTBOX_TITLE_BLOKING_US":"Blockiert uns","NOT_ESTIMATED":"Unbewertet","OWNER_US":"Userstory gehört","RELATE_TO_EPIC":"Mit Epic verbinden","REMOVE_RELATIONSHIP_WITH_EPIC":"Verbindung mit Epic entfernen","TRIBE":{"PUBLISH":"Als Gig in Taiga Tribe veröffentlichen","PUBLISH_INFO":"Weitere Infos","PUBLISH_TITLE":"Mehr Infos zum Veröffentlichen in Taiga Tribe","PUBLISHED_AS_GIG":"Story veröffentlicht als Gig in Taiga Tribe","EDIT_LINK":"Link bearbeiten","CLOSE":"Schließen","SYNCHRONIZE_LINK":"mit Taiga Tribe synchronisieren","PUBLISH_MORE_INFO_TITLE":"Brauchen Sie jemanden für diese Aufgabe?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Kommentar von {{user}} gelöscht","COMMENTS_COUNT":"{{comments}} Kommentare","OLDER_FIRST":"Ältere zuerst","RECENT_FIRST":"Letzte zuerst","COMMENT":"Kommentieren","EDITED_COMMENT":"Bearbeitet:","SHOW_HISTORY":"Verlauf anzeigen","TYPE_NEW_COMMENT":"Geben Sie hier einen neuen Kommentar ein","SHOW_DELETED":"Gelöschten Kommentar anzeigen","HIDE_DELETED":"Gelöschten Kommentar ausblenden","DELETE":"Kommentar löschen","RESTORE":"Kommentar wiederherstellen","HISTORY":{"TITLE":"Aktivität"}},"ACTIVITY":{"TITLE":"Aktivität","ACTIVITIES_COUNT":"{{activities}} Aktivitäten","TAGS_ADDED":"Tags hinzugefügt:","TAGS_REMOVED":"Tags entfernt:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"neuer Anhang:","DELETED_ATTACHMENT":"gelöschter Anhang:","UPDATED_ATTACHMENT":"Anhang aktualisiert ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"benutzerdefiniertes Attribut erstellt","UPDATED_CUSTOM_ATTRIBUTE":"benutzerdefiniertes Attribut aktualisiert","BECAME_DEPRECATED":"wurde verworfen","BECAME_UNDEPRECATED":"ist wieder aktuell","TEAM_REQUIREMENT":"Team Anforderung","CLIENT_REQUIREMENT":"Kundenanforderung","BLOCKED":"Blockiert","VALUES":{"NOT_SET":"nicht gesetzt","UNASSIGNED":"nicht zugeordnet"},"FIELDS":{"SUBJECT":"Thema","DESCRIPTION":"Beschreibung","PRIORITY":"Priorität","SEVERITY":"Gewichtung","STATUS":"Status","TYPE":"Typen","ASSIGNED_TO":"zugewiesen an","ASSIGNED_USERS":"Zugewiesener Benutzer","DUE_DATE":"Fälligkeitsdatum","MILESTONE":"Sprint","COLOR":"Farbe"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Das Backlog-Panel mit User-Stories und Sprints des Projekts. {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Personalisieren Sie Ihren Backloggraphen","CUSTOMIZE_GRAPH_TEXT":"Um schöne Graphen, die Ihnen bei der Entwicklung Ihres Projekts helfen, zu sehen, müssen Sie Einschätzungs-Punkte und Sprints einstellen","CUSTOMIZE_GRAPH_ADMIN":"Administrator","CUSTOMIZE_GRAPH_TITLE":"Stelle Points und Sprints über das Adminpanel ein","MOVE_US_TO_CURRENT_SPRINT":"Zum aktuellen Sprint wechseln","MOVE_US_TO_LATEST_SPRINT":"Zum aktuellen Sprint wechseln.","EMPTY":"Das Backlog ist leer!","CREATE_NEW_US":"Eine neue User-Story anlegen","CREATE_NEW_US_EMPTY_HELP":"Sie sollten eine User-Story anlegen","EXCESS_OF_POINTS":"Punkte Überschuss","PENDING_POINTS":"Unerledigte Punkte","CLOSED_POINTS":"geschlossen","COMPACT_SPRINT":"Kompakt Sprint","GO_TO_TASKBOARD":"Gehen Sie zum Taskboard von {{::name}}","EDIT_SPRINT":"Sprint bearbeiten","TOTAL_POINTS":"insgesamt","STATUS_NAME":"Status Bezeichnung","SORTABLE_FILTER_ERROR":"Es ist kein Drag & Drop über dem Backlog möglich, wenn Filter geöffnet sind.","DOOMLINE":"Projekt Umfang [Doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Punkte","OPTIMAL":"Optimale unerledigte Punkte für Sprint \"{{sprintName}}\" sollten sein {{value}}","REAL":"Tatsächliche Anzahl unerledigter Punkte für Sprint \"{{sprintName}}\" ist {{value}}","INCREMENT_TEAM":"Erhöhte Punktezahl von Teamanfragen für Sprint \"{{sprintName}}\" ist {{value}}","INCREMENT_CLIENT":"Erhöhte Punkteanzahl von Kundenanfragen für Sprint \"{{sprintName}}\" ist {{value}}"},"TAGS":{"TOGGLE":"Sichtbarkeit des Schlagwortes umschalten","SHOW":"Schlagwörter anzeigen","HIDE":"Schlagwörter ausblenden"},"FORECASTING":{"TITLE":"Velocity Vorhersage","BACKLOG":"Backlog anzeigen","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"User-Stories","TITLE_COLUMN_POINTS":"Ansicht mittels Rolle auswählen"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"gesamte
    Punkte","COMPLETED_POINTS":"vollständige
    Punkte","OPEN_TASKS":"offene
    Aufgaben","CLOSED_TASKS":"geschlossene
    Aufgaben","IOCAINE_DOSES":"Iocaine
    Dosen","SHOW_STATISTICS_TITLE":"Statistik anzeigen","TOGGLE_BAKLOG_GRAPH":"Zeige/Verstecke Burndowngraph","POINTS_PER_ROLE":"Points pro Rolle"},"SUMMARY":{"PROJECT_POINTS":"Projekt
    Punkte","DEFINED_POINTS":"definierte
    Punkte","CLOSED_POINTS":"geschlossene
    Punkte","POINTS_PER_SPRINT":"Punkte /
    Sprint"},"FILTERS":{"TOGGLE":"Filter sichtbar schalten","HIDE":"Filter verbergen","SHOW":"Filter anzeigen"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD. MMM YYYY","LINK_TASKBOARD":"Sprint Taskboard","TITLE_LINK_TASKBOARD":"Gehe zu Taskboard von \"{{name}}\"","EMPTY":"Derzeit sind keine Sprints vorhanden","WARNING_EMPTY_SPRINT_ANONYMOUS":"Dieser Sprint enthält keiner User Stories","WARNING_EMPTY_SPRINT":"Ziehen Sie User Stories aus Ihrem Backlog hierher, um einen neuen Sprint zu starten","TITLE_ACTION_NEW_SPRINT":"Neuen Sprint hinzufügen","TEXT_ACTION_NEW_SPRINT":"Sie sollten vielleicht einen neuen Sprint in Ihrem Projekt erstellen","ACTION_SHOW_CLOSED_SPRINTS":"Geschlossene Sprints anzeigen","ACTION_HIDE_CLOSED_SPRINTS":"Geschlossene Sprints ausblenden"}},"ERROR":{"TEXT1":"Es gibt ein Problem und unsere Helferlein arbeiten schon daran!","NOT_FOUND":"Nicht gefunden","NOT_FOUND_TEXT":"Fehler 404. Die angeforderte Seite existiert nicht mehr. Möglicherweise finden Sie das Gesuchte, wenn Sie zur TAIGA Homepage zurückkehren.","PERMISSION_DENIED":"Berechtigung verweigert","PERMISSION_DENIED_TEXT":"Sie haben nicht die Berechtigung um auf diese Seite zuzugreifen","VERSION_ERROR":"Jemand anderes hat dies schon geändert und unsere Helferlein können Ihre Änderungen deshalb nicht übernehmen. Bitte laden Sie die Seite neu und machen Sie die Änderungen erneut (die aktuelle Eingabe geht dabei verloren)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint Taskboard - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (von {{startDate}} zu {{endDate}}) von {{projectName}}. Abgeschlossen {{completedPercentage}}% ({{completedPoints}} von {{totalPoints}} points). {{openTasks}} offene Aufgaben von {{totalTasks}}.","SECTION_NAME":"Aufgabenübersicht","TITLE_ACTION_ADD":"Neue Aufgabe hinzufügen","TITLE_ACTION_ADD_BULK":"Mehrere Aufgaben hinzufügen","TITLE_ACTION_ADD_ISSUE":"Ein neues Ticket hinzufügen","TITLE_ACTION_ADD_ISSUE_BULK":"Stapel von neuen Tickets anlegen","TITLE_ACTION_ASSIGN":"Aufgabe zuweisen","PLACEHOLDER_CARD_TITLE":"Das könnte eine \"Aufgabe\" sein","PLACEHOLDER_CARD_TEXT":"Teile Stories in Tasks auf um sie einzeln zu verfolgen","TABLE":{"COLUMN":"User-Story","TITLE_ACTION_FOLD":"Spalte einklappen","TITLE_ACTION_UNFOLD":"Spalte aufklappen","TITLE_ACTION_FOLD_ROW":"Reihe einklappen","TITLE_ACTION_UNFOLD_ROW":"Reihe aufklappen","FIELD_POINTS":"Punkte","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Tickets"},"CHARTS":{"XAXIS_LABEL":"Tage","YAXIS_LABEL":"Punkte","OPTIMAL":"Optimale unerledigte Punkte für Tag {{formattedDate}} sollten sein {{roundedValue}}","REAL":"Tatsächliche Anzahl unerledigter Punkte für Tag {{formattedDate}} ist {{roundedValue}}","DATE":"DD. MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Aufgabe {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Beschreibung: {{taskDescription}}","SECTION_NAME":"Aufgabe","LINK_TASKBOARD":"Aufgabenübersicht","TITLE_LINK_TASKBOARD":"Zur Aufgabenübersicht","PLACEHOLDER_SUBJECT":"Betreff...","TITLE_SELECT_STATUS":"Status Bezeichnung","OWNER_US":"Diese Aufgabe gehört zu","TITLE_LINK_GO_OWNER":"Zur User-Story wechseln","TITLE_DELETE_ACTION":"Aufgabe löschen","LIGHTBOX_TITLE_BLOKING_TASK":"Blockierende Aufgabe","FIELDS":{"IS_IOCAINE":"Ist Iocaine"},"TITLE_ACTION_IOCAINE":"Fühlen Sie sich von einer Aufgabe etwas erdrückt? Stellen Sie sicher, dass andere davon erfahren, indem Sie auf Locaine klicken, wenn Sie eine Aufgabe ändern. Es ist möglich, gegen dieses (fiktive) tödliche Gift immun zu werden, indem man kleine Mengen über einen Zeitraum hinweg einnimmt. Genauso, wie es möglich ist, besser in dem zu werden, was man tut, indem man gelegentlich zusätzliche Herausforderungen annimmt!"},"NOTIFICATION":{"OK":"Alles in Ordnung","WARNING":"Huch, es gibt ein Problem...","WARNING_TEXT":"Unsere Helferlein bedauern, Ihre Änderungen wurden nicht gespeichert!","SAVED":"Die Helferlein haben Ihre Änderungen gespeichert!","CLOSE":"Benachrichtigung schließen","MAIL":"Benachrichtigungen per Mail","DESKTOP":"Desktop Benachrichtigungen durch den Webbrowser","ASK_DELETE":"Möchten Sie wirklich löschen?"},"CANCEL_ACCOUNT":{"TITLE":"Ihr Benutzerkonto löschen","SUBTITLE":"Wir bedauern, dass Sie die Taiga verlassen. Wir hoffen, Sie hatten einen angenehmen Aufenthalt. :)","PLACEHOLDER_INPUT_TOKEN":"Benutzerkonto Token ungültig machen","ACTION_LEAVING":"Ja, ich gehe!","SUCCESS":"Unsere Helferlein haben Ihr Benutzerkonto entfernt."},"CHANGE_EMAIL_FORM":{"TITLE":"Ändern Sie Ihre E-Mail","SUBTITLE":"Noch ein Klick und Ihre E-Mail wird aktualisiert!","PLACEHOLDER_INPUT_TOKEN":"E-Mail-Token ändern","ACTION_CHANGE_EMAIL":"E-Mail ändern","SUCCESS":"Unsere Helferlein haben Ihre E-Mail-Adresse aktualisiert"},"ISSUES":{"PAGE_TITLE":"Tickets - {{projectName}}","PAGE_DESCRIPTION":"Das Ticket-Listen Panel des Projekts {{projectName}}: {{projectDescription}}","SECTION_NAME":"Ticket","ACTION_NEW_ISSUE":"+ NEUES TICKET","ACTION_PROMOTE_TO_US":"Zur User-Story aufwerten","ACTION_ATTACH_SPRINT":"Ticket an Sprint anhängen","ACTION_DETACH_SPRINT":"Ticket vom Sprint lösen","PROMOTED":"Dieses Ticket wurde aufgewertet zu User-Story:","EXTERNAL_REFERENCE":"Dieses Ticket wurde erstellt durch","GO_TO_EXTERNAL_REFERENCE":"Zur Quelle wechseln","ACTION_DELETE":"Ticket löschen","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blockierendes Ticket","LINK_TASKBOARD":"Taskboard","TITLE_LINK_TASKBOARD":"Zu Taskboard wechseln","FILTER_SPRINTS":"Sprints filtern","CHOOSE_SPRINT":"Welcher Sprint?","FIELDS":{"PRIORITY":"Priorität","SEVERITY":"Gewichtung","TYPE":"Arten"},"FILTER_ISSUES":"Tickets Filtern","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Ticket vom Sprint lösen","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Ticket an Sprint anhängen","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Dieses Problem zur User-Story aufwerten","MESSAGE":"Sind Sie sicher, dass Sie aus diesem Ticket eine neue User-Story erstellen möchten?"},"TABLE":{"COLUMNS":{"TYPE":"Arten","SEVERITY":"Gewichtung","PRIORITY":"Priorität","SUBJECT":"Thema","VOTES":"Stimmen","STATUS":"Status","MODIFIED":"Geändert","ASSIGNED_TO":"Zugeordnet"},"TITLE_ACTION_CHANGE_STATUS":"Status wechseln","TITLE_ACTION_ASSIGNED_TO":"Zugeordnet zu","BLOCKED":"Blockiert","EMPTY":{"TITLE":"Es gibt keine Probleme zu berichten :-)","SUBTITLE":"Haben Sie ein Problem gefunden?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Ticket {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Typ: {{issueType}}, Priorität: {{issuePriority}}. Gewichtung: {{issueSeverity}}. Beschreibung: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Das Kanban Panel, mit User-Stories des Projekts {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Seite einklappen","TITLE_ACTION_UNFOLD":"Spalte aufklappen","TITLE_ACTION_ADD_US":"Neue User-Story hinzufügen","TITLE_ACTION_ADD_BULK":"Neue Menge hinzufügen","ACTION_SHOW_ARCHIVED":"Archivierte anzeigen","ACTION_HIDE_ARCHIVED":"Archivierte verbergen","HIDDEN_USER_STORIES":"Die User-Stories in diesem Status werden automatisch verborgen","PLACEHOLDER_CARD_TITLE":"Dies sind Ihre User Stories","PLACEHOLDER_CARD_TEXT":"Stories können Unteraufgaben für weitere Anforderungen haben"},"SEARCH":{"PAGE_TITLE":"Suche - {{projectName}}","PAGE_DESCRIPTION":"Suchen Sie User-Stories, Tickets, Aufgaben oder Wiki Seiten im Projekt {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"User-Stories","FILTER_ISSUES":"Tickets","FILTER_TASKS":"Aufgaben","FILTER_WIKI":"Wiki Seiten","PLACEHOLDER_SEARCH":"Suchen in...","TITLE_ACTION_SEARCH":"suchen","EMPTY_TITLE":"Es sieht so aus, als könnte unter Ihren Suchkriterien nichts gefunden werden.","EMPTY_DESCRIPTION":"Vielleicht versuchen Sie es mit einem der oberen Reiter, oder Sie suchen erneut"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Das Team Panel, um alle Mitglieder des Projekts anzuzeigen {{projectName}}: {{projectDescription}}","SECTION_NAME":"Team","PLACEHOLDER_INPUT_SEARCH":"Unter Anzeigenamen suchen...","COLUMN_MR_WOLF":"Herr Wolf","EXPLANATION_COLUMN_MR_WOLF":"Geschlossene Tickets","COLUMN_IOCAINE":"Locaine Trinker","EXPLANATION_COLUMN_IOCAINE":"Locaine Dosen eingenommen","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki Seiten geändert","COLUMN_BUG_HUNTER":"Bug-Jäger","EXPLANATION_COLUMN_BUG_HUNTER":"Gemeldete Tickets","COLUMN_NIGHT_SHIFT":"Nachtschicht","EXPLANATION_COLUMN_NIGHT_SHIFT":"Aufgaben geschlossen","COLUMN_TOTAL_POWER":"Gesamtleistung","EXPLANATION_COLUMN_TOTAL_POWER":"Punktesumme","SECTION_TITLE_TEAM":"Team >","SECTION_FILTER_ALL":"Alle","CONFIRM_LEAVE_PROJECT":"Sind Sie sicher, dass Sie das Projekt verlassen möchten?","ACTION_LEAVE_PROJECT":"Das Projekt verlassen"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. Größe: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Benutzereinstellungen","USER_PROFILE":"Benutzerprofil","CHANGE_PASSWORD":"Passwort ändern","EMAIL_NOTIFICATIONS":"E-Mail Benachrichtigungen","DESKTOP_NOTIFICATIONS":"Desktop Benachrichtigungen","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Benachrichtigungen","SECTION_NAME":"E-Mail-Benachrichtigungen","COLUMN_PROJECT":"Projekt","COLUMN_RECEIVE_ALL":"Alle erhalten","COLUMN_ONLY_INVOLVED":"Bei Beteiligung","COLUMN_NO_NOTIFICATIONS":"Keine Benachrichtigungen","OPTION_ALL":"Alle","OPTION_INVOLVED":"Beteiligt","OPTION_NONE":"Keine"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projekt","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projekt"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Standardbild verwenden","ACTION_DELETE_ACCOUNT":"Ihr Taiga Benutzerkonto löschen","ACTION_DOWNLOAD_PROFILE":"Taiga Profil herunterladen","CHANGE_EMAIL_SUCCESS":"Sehen Sie in Ihren Posteingang!
    Wir haben eine E-Mail an Ihr Konto gesendet
    mit der Anleitung, wie Sie Ihre neue Adresse anlegen","CHANGE_PHOTO":"Foto ändern","FIELD":{"USERNAME":"Benutzername","EMAIL":"E-Mail","FULL_NAME":"Anzeigename","PLACEHOLDER_FULL_NAME":"Geben Sie Ihren Anzeigenamen an (z.B. Vorname Nachname)","BIO":"Bio (max. 210 Zeichen)","PLACEHOLDER_BIO":"Erzählen Sie etwas über sich","LANGUAGE":"Sprache","LANGUAGE_DEFAULT":"-- benutzen Sie eine vorgegebene Sprache --","THEME":"Theme","THEME_DEFAULT":"-- Standard-Theme benutzen --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Letzte Bearbeitung am {{lastModifiedDate}} ({{totalEditions}} Gesamtzahl der Bearbeitungen) Inhalt: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Diese Wiki Seite entfernen","DELETE_LIGHTBOX_TITLE":"Wiki Seite löschen","DELETE_LINK_TITLE":"Entferne Wiki Link","NAVIGATION":{"HOME":"Hauptseite","SECTION_NAME":"LESEZEICHEN","ACTION_ADD_LINK":"Lesezeichen hinzufügen","ALL_PAGES":"Alle Wiki-Seiten"},"SUMMARY":{"TIMES_EDITED":"mal
    bearbeitet","LAST_EDIT":"letzte
    Bearbeitung","LAST_MODIFICATION":"letzte Änderung"},"SECTION_PAGES_LIST":"Alle Seiten","PAGES_LIST_COLUMNS":{"TITLE":"Titel","EDITIONS":"Ausgaben","CREATED":"Erstellt","MODIFIED":"Geändert","CREATOR":"Ersteller","LAST_MODIFIER":"Letzter Bearbeiter"}},"HINTS":{"SECTION_NAME":"Hinweis","LINK":"Mehr dazu auf unserer Support Seite","LINK_TITLE":"Besuchen Sie unsere Support Seite","HINT1_TITLE":"Wussten Sie, dass Sie Projekte importieren und exportieren?","HINT1_TEXT":"Dies erlaubt Ihnen, alle Ihre Daten zu extrahieren und sie von einer Taiga zur nächsten zu transportieren","HINT2_TITLE":"Wussten Sie, dass Sie benutzerdefinierte Felder erstellen können?","HINT2_TEXT":"Teams können nun benutzerdefinierte Felder anlegen, um Werte einzugeben, die für Ihren Workflow wichtig sind.","HINT3_TITLE":"Sortiere Sie Ihre Projekte, um relevante zuerst anzuzeigen.","HINT3_TEXT":"Die 10 Projekt sind in der Zugriffsleiste am oberen Bildschirmrand aufgelistet.","HINT4_TITLE":"Did you forget what were you working on?","HINT4_TEXT":"Machen Sie sich keine Sorgen, im Dashboard finden Sie Aufgaben, Tickets und User-Stories in der Reihenfolge in der Sie diese bearbeitet haben."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} fügte {{obj_name}} einen neuen Anhang zu","US_CREATED":"{{username}} erstellte die neue User-Story {{obj_name}} in {{project_name}}","ISSUE_CREATED":"{{username}} erstellte das neue Ticket {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} erstellte die neue Aufgabe {{obj_name}} in {{project_name}}","TASK_CREATED_WITH_US":"{{username}} erstellte die neue Aufgabe {{obj_name}} in {{project_name}}, die zur User-Story {{us_name}} gehört","WIKI_CREATED":"{{username}} erstellte die neue Wiki Seite {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} erstellte den neuen Sprint {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} hat einen neuen Epic {{obj_name}} in {{project_name}} erstellt","EPIC_RELATED_USERSTORY_CREATED":"{{username}} hat die Userstory {{related_us_name}} mit der Epic {{epic_name}} im Projekt {{project_name}} verbunden","NEW_PROJECT":"{{username}} erstellte das Projekt {{project_name}}","MILESTONE_UPDATED":"{{username}} aktualisierte den Sprint {{obj_name}}","US_UPDATED":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der User-Story {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der User-Story {{obj_name}} zu {{new_value}}","US_UPDATED_POINTS":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Story {{obj_name}} zu {{new_value}}","ISSUE_UPDATED":"{{username}} aktualisierte das Attribut \"{{field_name}}\" des Tickets {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} aktualisierte das Attribut \"{{field_name}}\" des Tickets {{obj_name}} zu {{new_value}}","TASK_UPDATED":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Aufgabe {{obj_name}} zu {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Aufgabe {{obj_name}} zu {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Aufgabe {{obj_name}} von User-Story {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Aufgabe {{obj_name}} die zu der User-Story gehört {{us_name}} zu {{new_value}}","WIKI_UPDATED":"{{username}} aktualisierte die WIKI Seite {{obj_name}}","EPIC_UPDATED":"Attribut \"{{field_name}}\" des Epics {{obj_name}} wurde von {{username}} aktualisiert","EPIC_UPDATED_WITH_NEW_VALUE":"Attribut \"{{field_name}}\" des Epics {{obj_name}} wurde von {{username}} zu aktualisiert","EPIC_UPDATED_WITH_NEW_COLOR":"Feld \"{{field_name}}\" des Epics {{obj_name}} wurde von {{username}} zu aktualisiert","NEW_COMMENT_US":"{{username}} schrieb einen Kommentar in der User-Story {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} schrieb einen Kommentar im Ticket {{obj_name}}","NEW_COMMENT_TASK":"{{username}} schrieb einen Kommentar in der Aufgabe {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} hat das Epic {{obj_name}} kommentiert","NEW_MEMBER":"{{project_name}} hat ein neues Mitglied","US_ADDED_MILESTONE":"{{username}} fügte dem Sprint {{sprint_name}} die User-Story {{obj_name}} hinzu","US_MOVED":"{{username}} wurde in die Story {{obj_name}} verschoben","US_REMOVED_FROM_MILESTONE":"{{username}} fügte dem Backlog die User-Story {{obj_name}} hinzu","BLOCKED":"{{username}} vermerkte die Blockierung von {{obj_name}}","UNBLOCKED":"{{username}} hob die Blockierung von {{obj_name}} auf","NEW_USER":"{{username}} ist Taiga beigetreten","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Ticket","TASK":"Aufgabe"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"Beim Erstellen eines neuen Accounts, stimmen Sie unserenNutzungsbedingungenundDatenschutzbestimmungenzu.","GDPR_ANNOUNCEMENT_TITLE":"Datenschutz-Grundverordnung (DSGVO)","GDPR_ANNOUNCEMENT_DESCRIPTION":"Das haben Sie kommen sehen, oder? Aktualisierungen zu unseren Nutzungsbedingungen","GDPR_ANNOUNCEMENT_INFOLINK":"Bitte lies unsere Ankündigung "},"EXTERNAL_APP":{"PAGE_TITLE":"Eine externe Anwendung benötigt eine Genehmigung","PAGE_DESCRIPTION":"Eine externe Anwendung benötigt eine Genehmigung","AUTHORIZATION_REQUEST":"{{application}} erlauben ihren Taiga Account zu benutzen?","LOGIN_WITH_ANOTHER_USER":"Mit einem anderen Benutzer einloggen.","AUTHORIZE_APP":"Anwendung autorisieren","CANCEL":"Abbrechen"},"JOYRIDE":{"NAV":{"NEXT":"Weiter","BACK":"Zurück","SKIP":"Überspringen","DONE":"Erledigt"},"DASHBOARD":{"STEP1":{"TITLE":"Ihr Projekt","TEXT":"Willkommen! Hier werden Sie Ihre Projekte sehen."},"STEP2":{"TITLE":"In Arbeit","TEXT":"Hier werden Sie die User Stories, Aufgaben und Tickets sehen, an denen Sie arbeiten."},"STEP3":{"TITLE":"Beobachtet","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"Sie arbeiten bereits mit Taiga"},"STEP4":{"TITLE":"Los geht’s","TEXT1":"Sie können anfangen, indem Sie Ihr erstes Taiga-Projekt starten","TEXT2":"Viel Glück!"}},"BACKLOG":{"STEP1":{"TITLE":"Projektzusammenfassung","TEXT1":"Hier werden Sie den Status Ihres Projektes sehen.","TEXT2":"Sie können Ihr Projekt im Administrations Panel verwalten."},"STEP2":{"TITLE":"Produkt Backlog","TEXT":"Das Backlog zeigt Ihnen alle Anforderungen (User Stories) für das Projekt an. Hier können ggf. auch Ihre Sprints geplant werden."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints sind kurze Zeiträume (üblicherweise 2 Wochen) in welchem eine bestimmte Arbeit erledigt und geliefert wird."},"STEP4":{"TITLE":"User-Stories","TEXT":"Dies sind die Anforderungen. Sie können diese dem Backlog hinzufügen und sie ggf. zu einem Sprint hinzufügen."}},"KANBAN":{"STEP1":{"TITLE":"Personalisieren Sie Ihren Workflow","TEXT":"Stellen Sie die Spalten für Ihren Workflow im Administrations-Panel ein."},"STEP2":{"TITLE":"User-Stories und Tasks","TEXT":"User Stories sind die Anforderungen an Ihr Projekt. Sie können diese zwischen den verschiedenen Spalten hin- und herziehen."},"STEP3":{"TITLE":"User-Stories hinzufügen","TEXT1":"Sie können eine einzelne User Story (Story Icon) oder mehrere (Mehrfach Icon) hinzufügen","TEXT2":"Viel Glück!"}}},"DISCOVER":{"PAGE_TITLE":"Entdecke Projekte - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Entdecke Projekte","DISCOVER_SUBTITLE":"{projects, plural, one{Ein öffentliches Projekt verfügbar} other{# öffentliche Projekte verfügbar}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Most liked","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"Zeige mehr","FEATURED":"Empfohlene Projekte","EMPTY":"Es existieren keine Projekte mit den angegebenen Kriterien
    Versuche es nochmal!","FILTERS":{"ALL":"Alle","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Auf der Suche nach Mitgliedern?","WEEK":"Letzte Woche","MONTH":"Letzter Monat","YEAR":"Letztes Jahr","ALL_TIME":"All time","CLEAR":"Filter zurücksetzen"},"SEARCH":{"PAGE_TITLE":"Suche - Entdecke Projekte - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Geben sie etwas ein...","ACTION_TITLE":"Suche","RESULTS":"Suchergebnisse"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-en.json b/dist/v-1547534999795/locales/taiga/locale-en.json deleted file mode 100644 index 4aa140e..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-en.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Yes","NO":"No","OR":"or","I_GET_IT":"OK, I get it","LOADING":"Loading...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Save","CANCEL":"Cancel","ACCEPT":"Accept","DELETE":"Delete","UNLINK":"Unlink","CREATE":"Create","ADD":"Add","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Edit","DRAG":"Drag","TAG_LINE":"Your agile, free, and open source project management tool","TAG_LINE_2":"LOVE YOUR PROJECT","BLOCK":"Block","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"Blocked","UNBLOCK":"Unblock","UNBLOCK_TITLE":"Unblock this item","BLOCKED_NOTE":"Why is this blocked?","BLOCKED_REASON":"Please explain the reason","CREATED_BY":"Created by {{fullDisplayName}}","CLOSE":"close","GO_HOME":"Take me home","PLUGINS":"Plugins","ONE_ITEM_LINE":"One item per line...","NEW_BULK":"New bulk insert","SUBTASKS":"Subtasks","PREVIOUS":"Previous","NEXT":"Next","LOGOUT":"Logout","EXTERNAL_USER":"an external user","GENERIC_ERROR":"One of our Oompa Loompas says {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Project Owner","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Delete issue","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"This value seems to be invalid.","TYPE_EMAIL":"This value should be a valid email.","TYPE_URL":"This value should be a valid url.","TYPE_URLSTRICT":"This value should be a valid url.","TYPE_NUMBER":"This value should be a valid number.","TYPE_DIGITS":"This value should be digits.","TYPE_DATEISO":"This value should be a valid date (YYYY-MM-DD).","TYPE_ALPHANUM":"This value should be alphanumeric.","TYPE_PHONE":"This value should be a valid phone number.","NOTNULL":"This value should not be null.","NOT_BLANK":"This value should not be blank.","REQUIRED":"This value is required.","REGEXP":"This value seems to be invalid.","MIN":"This value should be greater than or equal to %s.","MAX":"This value should be lower than or equal to %s.","RANGE":"This value should be between %s and %s.","MIN_LENGTH":"This value is too short. It should have %s characters or more.","MAX_LENGTH":"This value is too long. It should have %s characters or less.","RANGE_LENGTH":"This value length is invalid. It should be between %s and %s characters long.","MIN_CHECK":"You must select at least %s choices.","MAX_CHECK":"You must select %s choices or less.","RANGE_CHECK":"You must select between %s and %s choices.","EQUAL_TO":"This value should be the same.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Previous Month","NEXT_MONTH":"Next Month","MONTHS":{"JAN":"January","FEB":"February","MAR":"March","APR":"April","MAY":"May","JUN":"June","JUL":"July","AUG":"August","SEP":"September","OCT":"October","NOV":"November","DEC":"December"},"WEEK_DAYS":{"SUN":"Sunday","MON":"Monday","TUE":"Tuesday","WED":"Wednesday","THU":"Thursday","FRI":"Friday","SAT":"Saturday"},"WEEK_DAYS_SHORT":{"SUN":"Sun","MON":"Mon","TUE":"Tue","WED":"Wed","THU":"Thu","FRI":"Fri","SAT":"Sat"}},"SEE_USER_PROFILE":"See {{username }} profile","USER_STORY":"User story","TASK":"Task","ISSUE":"Issue","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Delete tag","ADD":"Add tag"},"DESCRIPTION":{"EMPTY":"Empty space is so boring... go on be descriptive...","NO_DESCRIPTION":"No description yet"},"FIELDS":{"SUBJECT":"Subject","NAME":"Name","URL":"URL","DESCRIPTION":"Description","VALUE":"Value","SLUG":"Slug","COLOR":"Color","IS_CLOSED":"Is closed?","STATUS":"Status","TYPE":"Type","SEVERITY":"Severity","PRIORITY":"Priority","ASSIGNED_TO":"Assigned to","ASSIGNED_USERS":"Assigned users","POINTS":"Points","IS_BLOCKED":"is blocked","REF":"Ref","VOTES":"Votes","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"All"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Not assigned","ASSIGN":"Assign","DELETE_ASSIGNMENT":"Delete assignment","REMOVE_ASSIGNED":"Remove assigned","TOO_MANY":"...too many users, keep filtering","CONFIRM_UNASSIGNED":"Are you sure you want to leave it unassigned?","TITLE_ACTION_EDIT_ASSIGNMENT":"Edit assignment","SELF":"Assign to me"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Closed","OPEN":"Open"},"WATCHERS":{"WATCHERS":"Watchers","ADD":"Add watchers","TITLE_ADD":"Add a project member to the watchers list","DELETE":"Delete watcher","TITLE_LIGHTBOX_DELETE_WARTCHER":"Delete watcher..."},"WATCH_BUTTON":{"WATCH":"Watch","WATCHING":"Watching","UNWATCH":"Unwatch","WATCHERS":"Watchers","BUTTON_TITLE":"Watch/Unwatch this item","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Custom Fields","SAVE":"Save Custom Field","EDIT":"Edit Custom Field","DELETE":"Delete custom attribute","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Subject or reference","TITLE_ACTION_FILTER_BUTTON":"search","TITLE":"Filters","TITLE_ACTION_SEARCH":"Search","ACTION_SAVE_CUSTOM_FILTER":"save as custom filter","PLACEHOLDER_FILTER_NAME":"Write the filter name and press enter","APPLIED_FILTERS_NUM":"filters applied","CATEGORIES":{"TYPE":"Type","STATUS":"Status","SEVERITY":"Severity","PRIORITIES":"Priorities","TAGS":"Tags","ASSIGNED_TO":"Assigned to","ASSIGNED_USERS":"Assigned users","ROLE":"Role","CREATED_BY":"Created by","CUSTOM_FILTERS":"Custom filters","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown syntax help"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"View sprints","ADD_SPRINTS":"Add sprints","MODIFY_SPRINTS":"Modify sprints","DELETE_SPRINTS":"Delete sprints"},"USER_STORIES":{"NAME":"User Stories","VIEW_USER_STORIES":"View user stories","ADD_USER_STORIES":"Add user stories","MODIFY_USER_STORIES":"Modify user stories","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Delete user stories"},"TASKS":{"NAME":"Tasks","VIEW_TASKS":"View tasks","ADD_TASKS":"Add tasks","MODIFY_TASKS":"Modify tasks","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Delete tasks"},"ISSUES":{"NAME":"Issues","VIEW_ISSUES":"View issues","ADD_ISSUES":"Add issues","MODIFY_ISSUES":"Modify issues","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Delete issues"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"View wiki pages","ADD_WIKI_PAGES":"Add wiki pages","MODIFY_WIKI_PAGES":"Modify wiki pages","DELETE_WIKI_PAGES":"Delete wiki pages","VIEW_WIKI_LINKS":"View wiki links","ADD_WIKI_LINKS":"Add wiki links","DELETE_WIKI_LINKS":"Delete wiki links"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Logging in to Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"AUTH":{"INVITED_YOU":"has invited you to join the project","NOT_REGISTERED_YET":"Not registered yet?","REGISTER":"Register","CREATE_ACCOUNT":"create your free account here"},"LOGIN_COMMON":{"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 forget your password?","ACTION_ENTER":"Enter","ACTION_SIGN_IN":"Login","PLACEHOLDER_AUTH_PASSWORD":"Password (case sensitive)","ALT_LOGIN":"Or login with"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"According to our Oompa Loompas, your username/email or password are incorrect.","SUCCESS":"Our Oompa Loompas are happy, welcome to Taiga."},"REGISTER":{"PAGE_TITLE":"Register - Taiga","PAGE_DESCRIPTION":"Create your account in Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"REGISTER_FORM":{"TITLE":"Register a new Taiga account (free)","PLACEHOLDER_NAME":"Pick a username (case sensitive)","PLACEHOLDER_FULL_NAME":"Pick your full name","PLACEHOLDER_EMAIL":"Your email","PLACEHOLDER_PASSWORD":"Set a password (case sensitive)","ACTION_SIGN_UP":"Sign up","TITLE_LINK_LOGIN":"Log in","LINK_LOGIN":"Are you already registered? Log in"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Forgot password - Taiga","PAGE_DESCRIPTION":"Enter your username or email to get a new password and you can access to Taiga again."},"FORGOT_PASSWORD_FORM":{"TITLE":"Oops, did you forget your password?","SUBTITLE":"Enter your username or email to get a new one","PLACEHOLDER_FIELD":"Username or email","ACTION_RESET_PASSWORD":"Reset Password","LINK_CANCEL":"Nah, take me back. I think I remember it.","SUCCESS_TITLE":"Check your inbox!","SUCCESS_TEXT":"We sent you an email with the instructions to set a new password","ERROR":"According to our Oompa Loompas, your are not registered yet."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Change you password - Taiga","SECTION_NAME":"Change password","FIELD_CURRENT_PASSWORD":"Current password","PLACEHOLDER_CURRENT_PASSWORD":"Your current password (or empty if you have no password yet)","FIELD_NEW_PASSWORD":"New password","PLACEHOLDER_NEW_PASSWORD":"Type a new password","FIELD_RETYPE_PASSWORD":"Retype new password","PLACEHOLDER_RETYPE_PASSWORD":"Retype the new password","ERROR_PASSWORD_MATCH":"The passwords doesn't match"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Create a new Taiga pass","SUBTITLE":"And hey, you may want to eat some more iron-rich food, it's good for your brain :P","PLACEHOLDER_NEW_PASSWORD":"New password","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Re-type new password","ACTION_RESET_PASSWORD":"Reset Password","ERROR":"Our Oompa Loompas can't find your request to recover your password. Try to ask for it again.","SUCCESS":"Our Oompa Loompas saved your new password.
    Try to sign in with it."},"INVITATION":{"PAGE_TITLE":"Invitation acceptance - Taiga","PAGE_DESCRIPTION":"Accept the invitation to join a project in Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Our Oompa Loompas can't find your invitation.","SUCCESS":"You've successfully joined this project, Welcome to {{project_name}}"},"HOME":{"PAGE_TITLE":"Home - Taiga","PAGE_DESCRIPTION":"The Taiga home page with your main projects and all your assigned and watched user stories, tasks and issues","EMPTY_WORKING_ON":"It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.","EMPTY_WATCHING":"Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)","EMPTY_PROJECT_LIST":"You don't have any projects yet","WORKING_ON_SECTION":"Working on","WATCHING_SECTION":"Watching","DASHBOARD":"Projects Dashboard"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADD EPIC","UNASSIGNED":"Unassigned"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Votes","NAME":"Name","PROJECT":"Project","SPRINT":"Sprint","ASSIGNED_TO":"Assigned","STATUS":"Status","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Blocked","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"My projects - Taiga","PAGE_DESCRIPTION":"A list with all your projects, you can reorder or create a new one.","MY_PROJECTS":"My projects"},"ATTACHMENT":{"SECTION_NAME":"attachments","TITLE":"{{ fileName }} uploaded on {{ date }}","LIST_VIEW_MODE":"List view mode","GALLERY_VIEW_MODE":"Gallery view mode","DESCRIPTION":"Type a short description","DEPRECATED":"(deprecated)","DEPRECATED_FILE":"Deprecated?","ADD":"Add new attachment. {{maxFileSizeMsg}}","DROP":"Drop attachments here!","SHOW_DEPRECATED":"+ show deprecated attachments","HIDE_DEPRECATED":"- hide deprecated attachments","COUNT_DEPRECATED":"({{ counter }} deprecated)","MAX_UPLOAD_SIZE":"Maximum upload size is {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"We have not been able to upload '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Delete attachment...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"the attachment '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"We have not been able to delete: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Prev","NEXT":"Next"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Edit value","TITLE_ACTION_DELETE_VALUE":"Delete value","TITLE_ACTION_DELETE_TAG":"Delete tag"},"HELP":"Do you need help? Check out our support page!","PROJECT_DEFAULT_VALUES":{"TITLE":"Default Values","SUBTITLE":"Set default values for all selector inputs."},"MEMBERSHIPS":{"TITLE":"Manage members","PAGE_TITLE":"Memberships - {{projectName}}","ADD_BUTTON":"+ New member","ADD_BUTTON_TITLE":"Add new member","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Export","SUBTITLE":"Export your project to save a backup or to create a new one based on this.","EXPORT_BUTTON":"Export","EXPORT_BUTTON_TITLE":"Export your project","LOADING_TITLE":"We are generating your dump file","DUMP_READY":"Your dump file is ready!","LOADING_MESSAGE":"Please don't close this page.","ASYNC_MESSAGE":"We will send you an email when ready.","SYNC_MESSAGE":"If the download doesn't start automatically click here.","ERROR":"Our Oompa Loompas have some problems generating your dump. Please try it again.","ERROR_BUSY":"Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes."},"MODULES":{"TITLE":"Modules","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Manage your user stories to maintain an organized view of upcoming and prioritized work.","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organize your project in a lean way with this board.","ISSUES":"Issues","ISSUES_DESCRIPTION":"Track the bugs, questions and enhancements related to your project. Don't miss anything!","WIKI":"Wiki","WIKI_DESCRIPTION":"Add, modify, or delete content in collaboration with others. This is the right place for your project documentation.","MEETUP":"Meet Up","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Select a videoconference system","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Custom","URL_CHAT_ROOM":"URL of your chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Project profile - {{projectName}}","PROJECT_DETAILS":"Project details","PROJECT_NAME":"Project name","TAGS":"Tags","DESCRIPTION":"Description","RECRUITING":"Is this project looking for people?","RECRUITING_MESSAGE":"Who are you looking for?","RECRUITING_PLACEHOLDER":"Define the profiles you are looking for","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Public project","PRIVATE_PROJECT":"Private project","PRIVATE_OR_PUBLIC":"What's the difference between public and private projects?","DELETE":"Delete this project","CHANGE_LOGO":"Change logo","ACTION_USE_DEFAULT_LOGO":"Use default image","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Request","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Change owner","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Reports","SUBTITLE":"Export your project data in CSV format and make your own reports.","DESCRIPTION":"Download a CSV file or copy the generated URL and open it in your favourite text editor or spreadsheet to make your own project data reports. You will be able to visualize and analyze all your data easily.","HELP":"How to use this on my own spreadsheet?","REGENERATE_TITLE":"Change URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"user stories reports","SECTION_TITLE_TASK":"tasks reports","SECTION_TITLE_ISSUE":"issues reports","DOWNLOAD":"Download CSV","URL_FIELD_PLACEHOLDER":"Please regenerate CSV url","TITLE_REGENERATE_URL":"Regenerate CSV url","ACTION_GENERATE_URL":"Generate Url","ACTION_REGENERATE":"Regenerate","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Delete"},"CUSTOM_FIELDS":{"TITLE":"Custom Fields","SUBTITLE":"Specify the custom fields for your user stories, tasks and issues","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"User stories custom fields","US_ADD":"Add a custom field in user stories","TASK_DESCRIPTION":"Tasks custom fields","TASK_ADD":"Add a custom field in tasks","ISSUE_DESCRIPTION":"Issues custom fields","ISSUE_ADD":"Add a custom field in issues","FIELD_TYPE_TEXT":"Text","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Multi-line","FIELD_TYPE_DATE":"Date","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Project values - {{projectName}}","REPLACEMENT":"All items with this value will be changed to","ERROR_DELETE_ALL":"You can't delete all values."},"PROJECT_VALUES_POINTS":{"TITLE":"Points","SUBTITLE":"Specify the points your user stories could be estimated to","US_TITLE":"US points","ACTION_ADD":"Add new point"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Priorities","SUBTITLE":"Specify the priorities your issues will have","ISSUE_TITLE":"Issue priorities","ACTION_ADD":"Add new priority"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Severities","SUBTITLE":"Specify the severities your issues will have","ISSUE_TITLE":"Issue severities","ACTION_ADD":"Add new severity"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"Specify the statuses your user stories, tasks and issues will go through","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Task Statuses","ISSUE_TITLE":"Issue Statuses"},"PROJECT_VALUES_TYPES":{"TITLE":"Types","SUBTITLE":"Specify the types your issues could be","ISSUE_TITLE":"Issues types","ACTION_ADD":"Add new {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Tags","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Add tag","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Add new status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roles - {{projectName}}","WARNING_NO_ROLE":"Be careful, no role in your project will be able to estimate the point value for user stories","HELP_ROLE_ENABLED":"When enabled, members assigned to this role will be able to estimate the point value for user stories","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} members with this role","TITLE_DELETE_ROLE":"Delete Role","REPLACEMENT_ROLE":"All the users with this role will be moved to","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"You can't delete all values","EXTERNAL_USER":"External user","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Secret key","PAYLOAD_URL":"Payload URL","VALID_IPS":"Valid origin IPs (separated by ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Add a New Webhook","TYPE_NAME":"Type the service name","TYPE_PAYLOAD_URL":"Type the service payload url","TYPE_SERVICE_SECRET":"Type the service secret key","SAVE":"Save Webhook","CANCEL":"Cancel Webhook","SHOW_HISTORY":"(Show history)","TEST":"Test Webhook","EDIT":"Edit Webhook","DELETE":"Delete Webhook","REQUEST":"Request","RESEND_REQUEST":"Resend request","HEADERS":"Headers","PAYLOAD":"Payload","RESPONSE":"Response","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Hide history)","ACTION_HIDE_HISTORY_TITLE":"Hide history details","ACTION_SHOW_HISTORY":"(Show history)","ACTION_SHOW_HISTORY_TITLE":"Show history details","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Custom Attributes - {{projectName}}","ADD":"Add custom field","EDIT":"Edit Custom Field","DELETE":"Delete Custom Field","SAVE_TITLE":"Save Custom Field","CANCEL_TITLE":"Cancel creation","SET_FIELD_NAME":"Set your custom field name","SET_FIELD_DESCRIPTION":"Set your custom field description","FIELD_TYPE_DEFAULT":"-- select one --","ACTION_UPDATE":"Update Custom Field","ACTION_CANCEL_EDITION":"Cancel edition"},"MEMBERSHIP":{"COLUMN_MEMBER":"Member","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Role","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Active","STATUS_PENDING":"Pending","DELETE_MEMBER":"Delete member","RESEND":"Resend","SUCCESS_SEND_INVITATION":"We've sent the invitation again to '{{email}}'.","SUCCESS_DELETE":"We've deleted {{message}}.","ERROR_DELETE":"We have not been able to delete {{message}}.","DEFAULT_DELETE_MESSAGE":"the invitation to {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Default value for points selector","LABEL_TASK_STATUS":"Default value for task status selector","LABEL_ISSUE_TYPE":"Default value for issue type selector","LABEL_ISSUE_STATUS":"Default value for issue status selector","LABEL_PRIORITY":"Default value for priority selector","LABEL_SEVERITY":"Default value for severity selector"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Write a name for the new status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Write a name for the new element"},"US_STATUS":{"ACTION_ADD_STATUS":"Add new status","IS_ARCHIVED_COLUMN":"Archived","IS_CLOSED_COLUMN":"Closed","WIP_LIMIT_COLUMN":"WIP Limit","PLACEHOLDER_WRITE_NAME":"Write a name for the new status"},"MENU":{"PROJECT":"Project","ATTRIBUTES":"Attributes","MEMBERS":"Members","PERMISSIONS":"Permissions","INTEGRATIONS":"Integrations"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Points","PRIORITIES":"Priorities","SEVERITIES":"Severities","TYPES":"Types","CUSTOM_FIELDS":"Custom fields","TAGS":"Tags","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roles","ACTION_NEW_ROLE":"+ New role","TITLE_ACTION_NEW_ROLE":"Add new role"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Accept","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Edit profile","CLOSED_US":"Closed US","PROJECTS":"Projects","PROJECTS_EMPTY":"{{username}} doesn't' have projects yet","CONTACTS":"Contacts","CONTACTS_EMPTY":"{{username}} doesn't have contacts yet","CURRENT_USER_CONTACTS_EMPTY":"You don't have contacts yet","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"The people with whom you work at Taiga will be your contacts automatically","TABS":{"ACTIVITY_TAB":"Timeline","ACTIVITY_TAB_TITLE":"Show all the activity of this user","PROJECTS_TAB":"Projects","PROJECTS_TAB_TITLE":"List of all projects in which the user is a member","LIKES_TAB":"Likes","LIKES_TAB_TITLE":"List all likes made by this user","VOTES_TAB":"Votes","VOTES_TAB_TITLE":"List all votes made by this user","WATCHED_TAB":"Watched","WATCHED_TAB_TITLE":"List all item watched by this user","CONTACTS_TAB":"Contacts","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"Your profile","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"Edit bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Type something...","FILTER_TYPE_ALL":"All","FILTER_TYPE_ALL_TITLE":"Show all","FILTER_TYPE_PROJECTS":"Projects","FILTER_TYPE_PROJECTS_TITLE":"Show only projects","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Stories","FILTER_TYPE_USER_STORIES_TITLE":"Show only user stories","FILTER_TYPE_TASKS":"Tasks","FILTER_TYPE_TASKS_TITLE":"Show only tasks","FILTER_TYPE_ISSUES":"Issues","FILTER_TYPE_ISSUES_TITLE":"Show only issues","EMPTY_TITLE":"It looks like there's nothing to show here."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reorder your projects to set in the top the most used ones.
    The top 10 projects will appear in the top navigation bar project list","PRIVATE":"Private project","LOOKING_FOR_PEOPLE":"This project is looking for people","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Blocked project","THIS_PROJECT_IS_BLOCKED":"This project is temporarily blocked","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"In order to unblock your projects, contact the administrator."},"SECTION":{"SEARCH":"Search","TIMELINE":"Timeline","EPICS":"Epics","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Issues","WIKI":"Wiki","TEAM":"Team","MEETUP":"Meet Up","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Create project","MANAGE_PROJECTS":"Manage projects","TITLE_CREATE_PROJECT":"Create project","HELP_TITLE":"Taiga Support Page","HELP":"Help","HOMEPAGE":"Homepage","FEEDBACK_TITLE":"Send feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Edit your notification settings","NOTIFICATIONS":"Notifications","VIEW_PROFILE_TITLE":"View Profile","VIEW_PROFILE":"View Profile","EDIT_PROFILE_TITLE":"Edit your profile","EDIT_PROFILE":"Edit Profile","CHANGE_PASSWORD_TITLE":"Change password","CHANGE_PASSWORD":"Change password","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Discover trending projects","DISCOVER":"Discover"},"LIKE_BUTTON":{"LIKE":"Like","LIKED":"Liked","UNLIKE":"Unlike","BUTTON_TITLE":"Like or unlike this project","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Watch this project and set notification policy","WATCH":"Watch","WATCHING":"Watching","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Receive all notifications","NOTIFY_ALL_TITLE":"Receive all notifications for this project","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Recive notificacions only when you are involved","UNWATCH":"Unwatch","UNWATCH_TITLE":"Unwatch this project"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Create Project","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Import project","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Private Project"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Our Oompa Loompas are importing your project","ASYNC_IN_PROGRESS_MESSAGE":"This process could take a few minutes
    We will send you an email when ready","UPLOAD_IN_PROGRESS_MESSAGE":"Uploaded {{uploadedSize}} of {{totalSize}}","ERROR":"Our Oompa Loompas have some problems importing your dump data. Please try again.","ERROR_TOO_MANY_REQUEST":"Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes.","ERROR_MESSAGE":"Our Oompa Loompas have some problems importing your dump data: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})","SYNC_SUCCESS":"Your project has been imported successfuly","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Assign","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"search","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Importing Project","DESCRIPTION":"This process can take a while, please keep the window open."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Issues","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Are you sure you want to delete your Taiga account?","CANCEL":"Back to settings","ACCEPT":"Delete account","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account. "},"DELETE_PROJECT":{"TITLE":"Delete project","QUESTION":"Are you sure you want to delete this project?","SUBTITLE":"All project data (user stories, tasks, issues, sprints and wiki pages) will be lost! :-(","CONFIRM":"Yes, I'm really sure"},"ASSIGNED_TO":{"SELECT":"Select assigned to","SEARCH":"Search for users"},"ADD_MEMBER":{"TITLE":"New Member","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Add email","REMOVE":"Remove","INVITE":"Invite","CHOOSE_ROLE":"Choose a role","PLACEHOLDER_INVITATION_TEXT":"(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)","HELP_TEXT":"If users are already registered on Taiga, they will be added automatically. Otherwise they will receive an invitation."},"FEEDBACK":{"TITLE":"Tell us something...","COMMENT":"...a bug, some suggestions, something cool... or even your worst nightmare with Taiga","ACTION_SEND":"Send feedback"},"SEARCH":{"TITLE":"Search","PLACEHOLDER_SEARCH":"What are you looking for?"},"ADD_EDIT_SPRINT":{"TITLE":"New sprint","PLACEHOLDER_SPRINT_NAME":"sprint name","PLACEHOLDER_SPRINT_START":"Estimated Start","PLACEHOLDER_SPRINT_END":"Estimated End","ACTION_DELETE_SPRINT":"Do you want to delete this sprint?","TITLE_ACTION_DELETE_SPRINT":"delete sprint","LAST_SPRINT_NAME":"last sprint is {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Add Issue","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Delete sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)","PLACEHOLDER_TYPE_EMAIL":"Type an Email","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Add comment","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"What's the project?","CHOOSE_PROJECT_FROM":"What's the project?","SUBJECT":"Subject","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"New user story","EXISTING_USERSTORY":"Existing user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Subject","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - User Story {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Completed {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} of {{userStoryTotalTasks}} tasks closed). Points: {{userStoryPoints}}. Description: {{userStoryDescription}}","SECTION_NAME":"User story","LINK_TASKBOARD":"Taskboard","TITLE_LINK_TASKBOARD":"Go to the taskboard","TOTAL_POINTS":"total points","ADD":"+ Add a new User Story","ADD_BULK":"Add some new User Stories in bulk","PROMOTED":"This US has been promoted from Issue:","TITLE_LINK_GO_TO_ISSUE":"Go to issue","TITLE_DELETE_ACTION":"Delete User Story","LIGHTBOX_TITLE_BLOKING_US":"Blocking us","NOT_ESTIMATED":"Not estimated","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Close","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Comment deleted by {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Older first","RECENT_FIRST":"Recent first","COMMENT":"Comment","EDITED_COMMENT":"Edited:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Type a new comment here","SHOW_DELETED":"Show deleted comment","HIDE_DELETED":"Hide deleted comment","DELETE":"Delete comment","RESTORE":"Restore comment","HISTORY":{"TITLE":"Activity"}},"ACTIVITY":{"TITLE":"Activity","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"tags added:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"new attachment:","DELETED_ATTACHMENT":"deleted attachment:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Team Requirement","CLIENT_REQUIREMENT":"Client Requirement","BLOCKED":"Blocked","VALUES":{"NOT_SET":"not set","UNASSIGNED":"unassigned"},"FIELDS":{"SUBJECT":"subject","DESCRIPTION":"description","PRIORITY":"priority","SEVERITY":"severity","STATUS":"status","TYPE":"type","ASSIGNED_TO":"assigned to","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"color"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"The backlog panel, with user stories and sprints of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Customize your backlog graph","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Move to Current Sprint","MOVE_US_TO_LATEST_SPRINT":"Move to latest Sprint","EMPTY":"The backlog is empty!","CREATE_NEW_US":"Create a new US","CREATE_NEW_US_EMPTY_HELP":"You may want to create a new user story","EXCESS_OF_POINTS":"Excess of points","PENDING_POINTS":"Pending Points","CLOSED_POINTS":"closed","COMPACT_SPRINT":"Compact Sprint","GO_TO_TASKBOARD":"Go to the taskboard of {{::name}}","EDIT_SPRINT":"Edit Sprint","TOTAL_POINTS":"total","STATUS_NAME":"Status Name","SORTABLE_FILTER_ERROR":"You can't drop on backlog when filters are open","DOOMLINE":"Project Scope [Doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Points","OPTIMAL":"Optimal pending points for sprint \"{{sprintName}}\" should be {{value}}","REAL":"Real pending points for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"Toggle tags visibility","SHOW":"Show tags","HIDE":"Hide tags"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"User Stories","TITLE_COLUMN_POINTS":"Select view per Role"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"total
    points","COMPLETED_POINTS":"completed
    points","OPEN_TASKS":"open
    tasks","CLOSED_TASKS":"closed
    tasks","IOCAINE_DOSES":"iocaine
    doses","SHOW_STATISTICS_TITLE":"Show statistics","TOGGLE_BAKLOG_GRAPH":"Show/Hide burndown graph","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"project
    points","DEFINED_POINTS":"defined
    points","CLOSED_POINTS":"closed
    points","POINTS_PER_SPRINT":"points /
    sprint"},"FILTERS":{"TOGGLE":"Toggle filters visibility","HIDE":"Hide Filters","SHOW":"Show Filters"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Sprint Taskboard","TITLE_LINK_TASKBOARD":"Go to Taskboard of \"{{name}}\"","EMPTY":"There are no sprints yet","WARNING_EMPTY_SPRINT_ANONYMOUS":"This sprint has no User Stories","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"Add new sprint","TEXT_ACTION_NEW_SPRINT":"You may want to create a new sprint in your project","ACTION_SHOW_CLOSED_SPRINTS":"Show closed sprints","ACTION_HIDE_CLOSED_SPRINTS":"Hide closed sprints"}},"ERROR":{"TEXT1":"Something happened and our Oompa Loompas are working on it.","NOT_FOUND":"Not found","NOT_FOUND_TEXT":"Error 404. The page you are looking for no longer exists. Perhaps you can return back to TAIGA homepage and see if you can find what you are looking for.","PERMISSION_DENIED":"Permission denied","PERMISSION_DENIED_TEXT":"You don't have permission to access this page.","VERSION_ERROR":"Someone inside Taiga has changed this before and our Oompa Loompas cannot apply your changes. Please reload and apply your changes again (they will be lost)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint taskboard - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} to {{endDate}}) of {{projectName}}. Completed {{completedPercentage}}% ({{completedPoints}} of {{totalPoints}} points). {{openTasks}} opened tasks of {{totalTasks}}.","SECTION_NAME":"Taskboard","TITLE_ACTION_ADD":"Add a new Task","TITLE_ACTION_ADD_BULK":"Add some new Tasks in bulk","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Assign task","PLACEHOLDER_CARD_TITLE":"This could be a task","PLACEHOLDER_CARD_TEXT":"Split Stories into tasks to track them separately","TABLE":{"COLUMN":"User story","TITLE_ACTION_FOLD":"Fold column","TITLE_ACTION_UNFOLD":"Unfold column","TITLE_ACTION_FOLD_ROW":"Fold Row","TITLE_ACTION_UNFOLD_ROW":"Unfold Row","FIELD_POINTS":"points","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Days","YAXIS_LABEL":"Points","OPTIMAL":"Optimal pending points for day {{formattedDate}} should be {{roundedValue}}","REAL":"Real pending points for day {{formattedDate}} is {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Task {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Description: {{taskDescription}}","SECTION_NAME":"Task","LINK_TASKBOARD":"Taskboard","TITLE_LINK_TASKBOARD":"Go to the taskboard","PLACEHOLDER_SUBJECT":"Type the new task subject","TITLE_SELECT_STATUS":"Status Name","OWNER_US":"This task belongs to","TITLE_LINK_GO_OWNER":"Go to user story","TITLE_DELETE_ACTION":"Delete Task","LIGHTBOX_TITLE_BLOKING_TASK":"Blocking task","FIELDS":{"IS_IOCAINE":"Is iocaine"},"TITLE_ACTION_IOCAINE":"Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!"},"NOTIFICATION":{"OK":"Everything is ok","WARNING":"Oops, something happened...","WARNING_TEXT":"Our Oompa Loompas are sad, your changes were not saved!","SAVED":"Our Oompa Loompas saved all your changes!","CLOSE":"Close notification","MAIL":"Notifications By Mail","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Are you sure you want to delete?"},"CANCEL_ACCOUNT":{"TITLE":"Cancel your account","SUBTITLE":"We're sorry you are leaving the taiga, we hope you enjoyed your stay :)","PLACEHOLDER_INPUT_TOKEN":"cancel account token","ACTION_LEAVING":"Yes, I'm leaving!","SUCCESS":"Our Oompa Loompas removed your account"},"CHANGE_EMAIL_FORM":{"TITLE":"Change your email","SUBTITLE":"One click more and your email will be updated!","PLACEHOLDER_INPUT_TOKEN":"change email token","ACTION_CHANGE_EMAIL":"Change email","SUCCESS":"Our Oompa Loompas updated your email"},"ISSUES":{"PAGE_TITLE":"Issues - {{projectName}}","PAGE_DESCRIPTION":"The issues list panel of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Issue","ACTION_NEW_ISSUE":"+ NEW ISSUE","ACTION_PROMOTE_TO_US":"Promote to User Story","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"This issue has been promoted to US:","EXTERNAL_REFERENCE":"This issue has been created from","GO_TO_EXTERNAL_REFERENCE":"Go to origin","ACTION_DELETE":"Delete issue","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blocking issue","LINK_TASKBOARD":"Taskboard","TITLE_LINK_TASKBOARD":"Go to the taskboard","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Priority","SEVERITY":"Severity","TYPE":"Type"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promote this issue to a new user story","MESSAGE":"Are you sure you want to create a new US from this Issue?"},"TABLE":{"COLUMNS":{"TYPE":"Type","SEVERITY":"Severity","PRIORITY":"Priority","SUBJECT":"Subject","VOTES":"Votes","STATUS":"Status","MODIFIED":"Modified","ASSIGNED_TO":"Assigned to"},"TITLE_ACTION_CHANGE_STATUS":"Change status","TITLE_ACTION_ASSIGNED_TO":"Assigned to","BLOCKED":"Blocked","EMPTY":{"TITLE":"There are no issues to report :-)","SUBTITLE":"Did you find an issue?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Issue {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Type: {{issueType}}, Priority: {{issuePriority}}. Severity: {{issueSeverity}}. Description: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"The kanban panel, with user stories of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Fold column","TITLE_ACTION_UNFOLD":"Unfold column","TITLE_ACTION_ADD_US":"Add New User Story","TITLE_ACTION_ADD_BULK":"Add New bulk","ACTION_SHOW_ARCHIVED":"Show archived","ACTION_HIDE_ARCHIVED":"Hide archived","HIDDEN_USER_STORIES":"The user stories in this status are hidden by default","PLACEHOLDER_CARD_TITLE":"These are your User Stories","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Search - {{projectName}}","PAGE_DESCRIPTION":"Search anything, user stories, issues, tasks or wiki pages, in the project {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"User Stories","FILTER_ISSUES":"Issues","FILTER_TASKS":"Tasks","FILTER_WIKI":"Wiki Pages","PLACEHOLDER_SEARCH":"Search in...","TITLE_ACTION_SEARCH":"search","EMPTY_TITLE":"It looks like nothing was found with your search criteria.","EMPTY_DESCRIPTION":"Maybe try one of the tabs above or search again"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"The team panel to show all the members of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Team","PLACEHOLDER_INPUT_SEARCH":"Search by full name...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Closed issues","COLUMN_IOCAINE":"Iocaine Drinker","EXPLANATION_COLUMN_IOCAINE":"Iocaine doses ingested","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki pages edited","COLUMN_BUG_HUNTER":"Bug Hunter","EXPLANATION_COLUMN_BUG_HUNTER":"Issues reported","COLUMN_NIGHT_SHIFT":"Night Shift","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tasks closed","COLUMN_TOTAL_POWER":"Total Power","EXPLANATION_COLUMN_TOTAL_POWER":"Total Points","SECTION_TITLE_TEAM":"Team >","SECTION_FILTER_ALL":"All","CONFIRM_LEAVE_PROJECT":"Are you sure you want to leave the project?","ACTION_LEAVE_PROJECT":"Leave this project"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. size: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"User Settings","USER_PROFILE":"User profile","CHANGE_PASSWORD":"Change password","EMAIL_NOTIFICATIONS":"Email notifications","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Email Notifications","COLUMN_PROJECT":"Project","COLUMN_RECEIVE_ALL":"Receive All","COLUMN_ONLY_INVOLVED":"Only Involved","COLUMN_NO_NOTIFICATIONS":"No notifications","OPTION_ALL":"All","OPTION_INVOLVED":"Involved","OPTION_NONE":"None"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Project","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Project"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Use default image","ACTION_DELETE_ACCOUNT":"Delete Taiga account","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Check your inbox!
    We have sent a mail to your account
    with the instructions to set your new address","CHANGE_PHOTO":"Change photo","FIELD":{"USERNAME":"Username","EMAIL":"Email","FULL_NAME":"Full name","PLACEHOLDER_FULL_NAME":"Set your full name (ex. Íñigo Montoya)","BIO":"Bio (max. 210 chars)","PLACEHOLDER_BIO":"Tell us something about you","LANGUAGE":"Language","LANGUAGE_DEFAULT":"-- use default language --","THEME":"Theme","THEME_DEFAULT":"-- use default theme --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Remove this wiki page","DELETE_LIGHTBOX_TITLE":"Delete Wiki Page","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"times
    edited","LAST_EDIT":"last
    edit","LAST_MODIFICATION":"last modification"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"Created","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Hint","LINK":"If you want to know how to use it visit our support page","LINK_TITLE":"Visit our support page","HINT1_TITLE":"Did you know you can import and export projects?","HINT1_TEXT":"This allow you to extract all your data from one Taiga and move it to another one.","HINT2_TITLE":"Did you know you can create custom fields?","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 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":{"UPLOAD_ATTACHMENT":"{{username}} has uploaded a new attachment in {{obj_name}}","US_CREATED":"{{username}} has created a new US {{obj_name}} in {{project_name}}","ISSUE_CREATED":"{{username}} has created a new issue {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} has created a new task {{obj_name}} in {{project_name}}","TASK_CREATED_WITH_US":"{{username}} has created a new task {{obj_name}} in {{project_name}} which belongs to the US {{us_name}}","WIKI_CREATED":"{{username}} has created a new wiki page {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} has created a new sprint {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} created the project {{project_name}}","MILESTONE_UPDATED":"{{username}} has updated the sprint {{obj_name}}","US_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}} to {{new_value}}","US_UPDATED_POINTS":"{{username}} has updated '{{role_name}}' points of the US {{obj_name}} to {{new_value}}","ISSUE_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}} to {{new_value}}","TASK_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} which belongs to the US {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} which belongs to the US {{us_name}} to {{new_value}}","WIKI_UPDATED":"{{username}} has updated the wiki page {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} has commented in the US {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} has commented in the issue {{obj_name}}","NEW_COMMENT_TASK":"{{username}} has commented in the task {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} has a new member","US_ADDED_MILESTONE":"{{username}} has added the US {{obj_name}} to {{sprint_name}}","US_MOVED":"{{username}} has moved the US {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} has added the US {{obj_name}} to the backlog","BLOCKED":"{{username}} has blocked {{obj_name}}","UNBLOCKED":"{{username}} has unblocked {{obj_name}}","NEW_USER":"{{username}} has joined Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Issue","TASK":"Task"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Login with another user","AUTHORIZE_APP":"Authorize app","CANCEL":"Cancel"},"JOYRIDE":{"NAV":{"NEXT":"Next","BACK":"Back","SKIP":"Skip","DONE":"Done"},"DASHBOARD":{"STEP1":{"TITLE":"Your project","TEXT":"Welcome! Here you will find the projects you are involved on."},"STEP2":{"TITLE":"Working on","TEXT":"Here you will find the User Stories, Tasks and Issues in which you are working on."},"STEP3":{"TITLE":"Watching","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"You are already working with Taiga ;)"},"STEP4":{"TITLE":"Let’s start","TEXT1":"You can start by creating your first Taiga project.","TEXT2":"Good luck!"}},"BACKLOG":{"STEP1":{"TITLE":"Project summary","TEXT1":"Here you will see the state of your project.","TEXT2":"You can change every kind of project settings through the admin."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"User Stories","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"User Stories & Tasks","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Good luck!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Discover projects","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Most liked","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"View more","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"All","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Looking for people","WEEK":"Last week","MONTH":"Last month","YEAR":"Last year","ALL_TIME":"All time","CLEAR":"Clear filters"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Type something...","ACTION_TITLE":"Search","RESULTS":"Search results"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-es.json b/dist/v-1547534999795/locales/taiga/locale-es.json deleted file mode 100644 index ba34338..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-es.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Sí","NO":"No","OR":"o","I_GET_IT":"OK, I get it","LOADING":"Cargando...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Guardar","CANCEL":"Cancelar","ACCEPT":"Aceptar","DELETE":"Borrar","UNLINK":"Desvincular","CREATE":"Crear","ADD":"Añadir","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Editar","DRAG":"Arrastra","TAG_LINE":"Tu herramienta de gestión de proyecto ágil, gratuíta y de código abierto","TAG_LINE_2":"AMA TU PROYECTO","BLOCK":"Bloquear","BLOCK_TITLE":"Bloquea este elemento por ejemplo si tiene una dependencia que no ha sido satisfecha","BLOCKED":"Bloqueada","UNBLOCK":"Desbloquear","UNBLOCK_TITLE":"Desbloquea este elemento","BLOCKED_NOTE":"¿Por qué está bloqueada?","BLOCKED_REASON":"Por favor, explica la razón","CREATED_BY":"Creada por {{fullDisplayName}}","CLOSE":"cerrar","GO_HOME":"Llévame a casa","PLUGINS":"Plugins","ONE_ITEM_LINE":"Un elemento por línea...","NEW_BULK":"Nueva inserción en bloque","SUBTASKS":"Subtasks","PREVIOUS":"Anterior","NEXT":"Siguiente","LOGOUT":"Cerrar sesión","EXTERNAL_USER":"un usuario externo","GENERIC_ERROR":"Uno de nuestros Oompa Loompas dice {{error}}.","IOCAINE_TEXT":"Este miembro se siente un poco abrumado por esta tarea. Será inmune al veneno de la iocaína con el tiempo con tu ayuda, Ahora, puede necesitar un abrazo ;-).","CLIENT_REQUIREMENT":"Requerimiento de cliente es un nuevo requisito que no se esperaba y es necesario que forme parte del proyecto.","TEAM_REQUIREMENT":"Requerimiento del equipo es un nuevo requisito que debe existir en el proyecto pero que no conllevará ningún coste para el cliente.","OWNER":"Dueño del proyecto","CAPSLOCK_WARNING":"¡Cuidado!. Esta usando mayusculas en un campo sensible a mayusculas","CONFIRM_CLOSE_EDIT_MODE_TITLE":"¿Seguro que desea cerrar el modo de edición?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Recuerde que si cierra el modo de edicion sin guardar todos los cambios se perderán","RELATED_USERSTORIES":"Historias de usuario relacionadas","CARD":{"ASSIGN_TO":"Asignado a","EDIT":"Editar tarjeta","DELETE":"Elimina tarjeta","DELETE_ISSUE":"Borrar petición","DETACH_ISSUE_FROM_SPRINT":"Quitar petición de sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Este valor parece inválido.","TYPE_EMAIL":"El valor debe ser un email.","TYPE_URL":"El valor debe ser una url.","TYPE_URLSTRICT":"El valor debe ser una url.","TYPE_NUMBER":"El valor debe ser un número.","TYPE_DIGITS":"El valor deben ser digitos.","TYPE_DATEISO":"El valor debe ser una fecha válida (DD-MM-YYY)","TYPE_ALPHANUM":"El valor debe ser alfanumérico.","TYPE_PHONE":"El valor debe ser un teléfono válido.","NOTNULL":"No puede ser un valor nulo.","NOT_BLANK":"El valor no puede quedar en blanco.","REQUIRED":"Valor requerido.","REGEXP":"Este valor parece inválido.","MIN":"El valor debe ser mayor o igual que %s.","MAX":"El valor debe ser menor o igual que %s.","RANGE":"El valor debe estar entre %s y %s.","MIN_LENGTH":"El valor es demasiado corto. Debe contener al menos %s caracteres.","MAX_LENGTH":"El valor es demasiado corto. Debe contener %s caracteres como máximo.","RANGE_LENGTH":"Longitud erronea. Debe estar entre %s y %s caracteres.","MIN_CHECK":"Debes seleccionar al menos %s.","MAX_CHECK":"Debes seleccionar %s o menos.","RANGE_CHECK":"Debes seleccionar de %s a %s.","EQUAL_TO":"Este valor debe ser el mismo.","LINEWIDTH":"Una o más líneas es tal vez demasiado tiempo. Trate de mantener bajo %s caracteres.","PIKADAY":"Formato de fecha no válida, por favor utilice DD MMM AAAA (como 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mes Anterior","NEXT_MONTH":"Mes Siguiente","MONTHS":{"JAN":"Enero","FEB":"Febrero","MAR":"Marzo","APR":"Abril","MAY":"Mayo","JUN":"Junio","JUL":"Julio","AUG":"Agosto","SEP":"Septiembre","OCT":"Octubre","NOV":"Noviembre","DEC":"Diciembre"},"WEEK_DAYS":{"SUN":"Domingo","MON":"Lunes","TUE":"Martes","WED":"Miércoles","THU":"Jueves","FRI":"Viernes","SAT":"Sábado"},"WEEK_DAYS_SHORT":{"SUN":"Dom","MON":"Lun","TUE":"Mar","WED":"Mie","THU":"Jue","FRI":"Vie","SAT":"Sáb"}},"SEE_USER_PROFILE":"Ver el perfil de {{username }}","USER_STORY":"Historia de usuario","TASK":"Tarea","ISSUE":"Petición","EPIC":"Épica","TAGS":{"PLACEHOLDER":"Introducir etiqueta","DELETE":"Borrar etiqueta","ADD":"Añadir etiqueta"},"DESCRIPTION":{"EMPTY":"El espacio vacío es tan aburrido... trata de ser descriptivo... ","NO_DESCRIPTION":"Sin descripción todavía"},"FIELDS":{"SUBJECT":"Asunto","NAME":"Nombre","URL":"URL","DESCRIPTION":"Descripción","VALUE":"Valor","SLUG":"Slug","COLOR":"Color","IS_CLOSED":"¿Está Cerrado?","STATUS":"Estado","TYPE":"Tipo","SEVERITY":"Gravedad","PRIORITY":"Prioridad","ASSIGNED_TO":"Asignado a","ASSIGNED_USERS":"Usuarios asignados","POINTS":"Puntos","IS_BLOCKED":"está bloqueada","REF":"Ref","VOTES":"Votos","SPRINT":"Sprint","DUE_DATE":"Fecha de vencimiento","DUE_DATE_REASON":"Motivo fecha de vencimiento"},"ROLES":{"ALL":"Todos"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Sin asignar","ASSIGN":"Asignar","DELETE_ASSIGNMENT":"Eliminar asignaciones","REMOVE_ASSIGNED":"Eliminar asignación","TOO_MANY":"...Demasiados usuarios, continué filtrando","CONFIRM_UNASSIGNED":"¿Está seguro de que desea dejarla sin asignar?","TITLE_ACTION_EDIT_ASSIGNMENT":"Editar asignación","SELF":"Asignármela"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Fijar fecha de vencimiento"},"ASSIGNED_USERS":{"ADD":"Selecciona usuario asignado","ADD_ASSIGNED":"Añadir asignación","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Borra asignación..."},"STATUS":{"CLOSED":"Cerrada","OPEN":"Abierto"},"WATCHERS":{"WATCHERS":"Observadores","ADD":"Añadir observadores","TITLE_ADD":"Añade un miembro del proyecto a la lista de observadores","DELETE":"Eliminar el observador","TITLE_LIGHTBOX_DELETE_WARTCHER":"Eliminar el observador..."},"WATCH_BUTTON":{"WATCH":"Observar","WATCHING":"Observando","UNWATCH":"No observar","WATCHERS":"Observadores","BUTTON_TITLE":"Observar o no observar este elemento","COUNTER_TITLE":"{total, plural, one{un observador} other{# observadores}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Votar o no este elemento","COUNTER_TITLE":"{total, plural, one{un voto} other{# votos}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Atributo Personalizados","SAVE":"Guardar atributo personalizado","EDIT":"Editar Atributo Personalizado","DELETE":"Borrar atributos personalizados","CONFIRM_DELETE":"Se borrarán todos los valores de este atributo personalizado. \n¿Estás seguro de que quieres continuar?"},"FILTERS":{"INPUT_PLACEHOLDER":"Asunto o referencia","TITLE_ACTION_FILTER_BUTTON":"busqueda","TITLE":"Filtros","TITLE_ACTION_SEARCH":"Buscar","ACTION_SAVE_CUSTOM_FILTER":"guardar como filtro personalizado","PLACEHOLDER_FILTER_NAME":"Escribe un nombre para el filtro y pulsa enter","APPLIED_FILTERS_NUM":"filtros usados","CATEGORIES":{"TYPE":"Tipo","STATUS":"Estado","SEVERITY":"Gravedad","PRIORITIES":"Prioridades","TAGS":"Etiquetas","ASSIGNED_TO":"Asignado a","ASSIGNED_USERS":"Usuarios asignados","ROLE":"Rol","CREATED_BY":"Creada por","CUSTOM_FILTERS":"Filtros personalizados","EPIC":"Épica"}},"WYSIWYG":{"CODE_SNIPPET":"Fragmento de código","DB_CLICK":"doble click para editar","SELECT_LANGUAGE_PLACEHOLDER":"Selecciona un lenguaje","SELECT_LANGUAGE_REMOVE_FORMATING":"Eliminar formato","OUTDATED":"Otra persona ha realizado cambios mientras tu estabas editando. Revisa la nueva versión en la pestaña de actividad antes de guardar tus cambios.","MARKDOWN_HELP":"Ayuda de sintaxis Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Épicas","VIEW_EPICS":"Ver épica","ADD_EPICS":"Añadir épica","MODIFY_EPICS":"Modificar épica","COMMENT_EPICS":"Comentar épica","DELETE_EPICS":"Borrar épica"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Ver sprints","ADD_SPRINTS":"Crear sprints","MODIFY_SPRINTS":"Editar sprints","DELETE_SPRINTS":"Borrar sprints"},"USER_STORIES":{"NAME":"Historias de Usuario","VIEW_USER_STORIES":"Ver historias de usuario","ADD_USER_STORIES":"Crear historias de usuario","MODIFY_USER_STORIES":"Editar historias de usuario","COMMENT_USER_STORIES":"Comentar historias de usuario","DELETE_USER_STORIES":"Borrar historias de usuario"},"TASKS":{"NAME":"Tareas","VIEW_TASKS":"Ver tareas","ADD_TASKS":"Crear tareas","MODIFY_TASKS":"Editar tareas","COMMENT_TASKS":"Comentar tareas","DELETE_TASKS":"Borrar tareas"},"ISSUES":{"NAME":"Peticiones","VIEW_ISSUES":"Ver peticiones","ADD_ISSUES":"Crear peticiones","MODIFY_ISSUES":"Editar peticiones","COMMENT_ISSUES":"Comentar problemas","DELETE_ISSUES":"Borrar peticiones"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Ver páginas","ADD_WIKI_PAGES":"Crear páginas","MODIFY_WIKI_PAGES":"Editar páginas","DELETE_WIKI_PAGES":"Borrar páginas","VIEW_WIKI_LINKS":"Ver enlaces","ADD_WIKI_LINKS":"Crear enlaces","DELETE_WIKI_LINKS":"Borrar enlaces"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Inicia sesión en Taiga, una plataforma de gestión de proyectos orientada a startups y equipos ágiles que buscan una herramienta sencilla, elegante y que les haga disfrutar trabajando."},"AUTH":{"INVITED_YOU":"te ha invitado a unirte al proyecto","NOT_REGISTERED_YET":"¿Aún no está registrado?","REGISTER":"Registro","CREATE_ACCOUNT":"crea tu cuenta gratis aquí"},"LOGIN_COMMON":{"HEADER":"Ya tengo una cuenta en Taiga","PLACEHOLDER_AUTH_NAME":"Nombre de usuario o email (distingue mayúsculas y minúsculas)","LINK_FORGOT_PASSWORD":"¿La olvidaste?","TITLE_LINK_FORGOT_PASSWORD":"¿Olvidó su contraseña?","ACTION_ENTER":"Entrar","ACTION_SIGN_IN":"Iniciar sesión","PLACEHOLDER_AUTH_PASSWORD":"Contraseña (distingue mayúsculas y minúsculas)","ALT_LOGIN":"O haz login con"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Nuestros Oompa Loompas indican que tu nombre de usuario/correo o contraseña son incorrectos","SUCCESS":"Nuestros Oompa Loompas están felices, bienvenido a Taiga."},"REGISTER":{"PAGE_TITLE":"Registro - Taiga","PAGE_DESCRIPTION":"Crea tu cuenta en Taiga, una plataforma de gestión de proyectos orientada a startups y equipos ágiles que buscan una herramienta sencilla, elegante y que les haga disfrutar trabajando."},"REGISTER_FORM":{"TITLE":"Crea tu nueva cuenta en Taiga, ¡es gratis!","PLACEHOLDER_NAME":"Escribe un nombre de usuario (distingue mayúsculas y minúsculas)","PLACEHOLDER_FULL_NAME":"Escribe tu nombre completo","PLACEHOLDER_EMAIL":"Tu email","PLACEHOLDER_PASSWORD":"Establece una contraseña (distingue mayúsculas y minúsculas)","ACTION_SIGN_UP":"Registrarme","TITLE_LINK_LOGIN":"Iniciar sesión","LINK_LOGIN":"¿Ya te has registrado? Inicia sesión"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Has olvidado tu contraseña - Taiga","PAGE_DESCRIPTION":"A partir de tu nombre de usuario o email obtendrás una nueva contraseña para acceder a Taiga nuevamente."},"FORGOT_PASSWORD_FORM":{"TITLE":"Vaya, ¿has olvidado tu contraseña?","SUBTITLE":"Escribe tu nombre de usuario o email para obtener una nueva","PLACEHOLDER_FIELD":"Nombre de usuario o email","ACTION_RESET_PASSWORD":"Restablecer Contraseña","LINK_CANCEL":"Nah, llévame de vuelta, creo que lo recordé.","SUCCESS_TITLE":"¡Revisa tu bandeja de entrada!","SUCCESS_TEXT":"Te hemos enviado un correo con las instrucciones para restablecer tu contraseña","ERROR":"Según nuestros Oompa Loompas tú no estás registrado"},"CHANGE_PASSWORD":{"PAGE_TITLE":"Cambia tu contraseña - Taiga","SECTION_NAME":"Cambiar contraseña","FIELD_CURRENT_PASSWORD":"Contraseña actual","PLACEHOLDER_CURRENT_PASSWORD":"Tu contraseña actual (o déjalo vacío si todavía no tienes contraseña)","FIELD_NEW_PASSWORD":"Nueva contraseña","PLACEHOLDER_NEW_PASSWORD":"Escribe una contraseña nueva","FIELD_RETYPE_PASSWORD":"Reescribe la nueva contraseña","PLACEHOLDER_RETYPE_PASSWORD":"Reescribe la nueva contraseña","ERROR_PASSWORD_MATCH":"Las contraseñas no coinciden"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Crear una nueva contraseña de Taiga","SUBTITLE":"Y bueno, es posible que necesites comer más alimentos ricos en hierro, son buenos para tu cerebro :P","PLACEHOLDER_NEW_PASSWORD":"Nueva contraseña","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Reescriba la nueva contraseña","ACTION_RESET_PASSWORD":"Restablecer contraseña","ERROR":"Nuestros Oompa Loompas no encuentran tu petición de recuperación de contraseña. Prueba a pedirla de nuevo.","SUCCESS":"Nuestro Oompa Loopas guardaron tu nueva contraseña.
    Intenta registrarte con ella"},"INVITATION":{"PAGE_TITLE":"Acepta la invitación - Taiga","PAGE_DESCRIPTION":"Acepta la invitación para unirte a un proyecto en Taiga, una plataforma de gestión de proyectos orientada a startups y equipos ágiles que buscan una herramienta sencilla, elegante y que les haga disfrutar trabajando."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Nuestros Oompa Loompas no pueden encontrar su invitación.","SUCCESS":"¡Acabas de unirte al proyecto! Bienvenido a {{project_name}}"},"HOME":{"PAGE_TITLE":"Inicio - Taiga","PAGE_DESCRIPTION":"Página de inicio de Taiga, con tus proyectos principales y tus historias de usuario, tareas y peticiones en progreso asignadas y las que observas.","EMPTY_WORKING_ON":"Parece vacío, ¿no? Empieza a trabajar con Taiga y verás aquí las historias, tareas e incidentes en los que estás trabajando.","EMPTY_WATCHING":"Sigue Historias de Usuario, Tareas y Peticiones en tus proyectos y se te notificará sobre sus cambios :)","EMPTY_PROJECT_LIST":"Todavía no tienes ningún proyecto","WORKING_ON_SECTION":"Trabajando en","WATCHING_SECTION":"Observando","DASHBOARD":"Dashboard de proyecto"},"EPICS":{"TITLE":"ÉPICAS","SECTION_NAME":"Épicas","EPIC":"Épica","PAGE_TITLE":"Épicas - {{projectName}}","PAGE_DESCRIPTION":"El listado de épicas del proyecto {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ AÑADIR ÉPICA","UNASSIGNED":"No asignado"},"EMPTY":{"TITLE":"Parece que todavía no hay épicas.","EXPLANATION":"Las épicas son ítems a un nivel mas elevado que engloban historias de usuario.
    Las épicas estan al tope de la jerarquia y pueden ser usadas para agrupar historias de usuario.","HELP":"Aprende más sobre Épicas"},"TABLE":{"VOTES":"Votos","NAME":"Nombre","PROJECT":"Proyecto","SPRINT":"Sprint","ASSIGNED_TO":"Asignado","STATUS":"Estado","PROGRESS":"En curso","VIEW_OPTIONS":"Ver opciones"},"CREATE":{"TITLE":"Nueva Épica","PLACEHOLDER_DESCRIPTION":"Por favor añade un texto descriptivo para ayudar a otros usuarios a entender mejor esta historia.","TEAM_REQUIREMENT":"Requerido por el equipo","CLIENT_REQUIREMENT":"Requerido por el Cliente","BLOCKED":"Bloqueada","BLOCKED_NOTE_PLACEHOLDER":"Porque esta esta épica bloqueada?","CREATE_EPIC":"Crear épica"}},"PROJECTS":{"PAGE_TITLE":"Mis proyectos - Taiga","PAGE_DESCRIPTION":"Una lista con todos tus proyectos, puedes reordenarla o crear un proyecto nuevo.","MY_PROJECTS":"Mis proyectos"},"ATTACHMENT":{"SECTION_NAME":"adjuntos","TITLE":"{{ fileName }} subido el {{ date }}","LIST_VIEW_MODE":"Vista en modo Lista","GALLERY_VIEW_MODE":"Vista en modo Galería","DESCRIPTION":"Escribe una pequeña descripción","DEPRECATED":"(obsoleto)","DEPRECATED_FILE":"¿Desactualizado?","ADD":"Agrega nuevos adjunto. {{maxFileSizeMsg}}","DROP":"¡Arrastre los archivos adjuntos aquí!","SHOW_DEPRECATED":"+ mostrar adjuntos obsoletos","HIDE_DEPRECATED":"- ocultar adjuntos obsoletos","COUNT_DEPRECATED":"({{ counter }} obsoletos)\n","MAX_UPLOAD_SIZE":"El tamaño máximo de subida es de {{maxFileSize}}","DATE":"DD MMM YYYY [a las] hh:mm\n","ERROR_UPLOAD_ATTACHMENT":"No hemos podido subir el fichero '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Borrar adjunto...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"el adjunto '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"No hemos podido borrarlo: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"El fichero '{{fileName}}' ({{fileSize}}) es demasiado pesado para nuestros Oompa Loompas, prueba con uno de menos de ({{maxFileSize}})."},"PAGINATION":{"PREVIOUS":"Anterior","NEXT":"Siguiente"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Editar valor","TITLE_ACTION_DELETE_VALUE":"Eliminar valor","TITLE_ACTION_DELETE_TAG":"Borrar etiqueta"},"HELP":"¿Necesitas ayuda? ¡Revisa nuestra pagina de soporte! ","PROJECT_DEFAULT_VALUES":{"TITLE":"Valores por defecto","SUBTITLE":"Define los valores por defecto para todos los selectores."},"MEMBERSHIPS":{"TITLE":"Administrar miembros","PAGE_TITLE":"Miembros - {{projectName}}","ADD_BUTTON":"+ Nuevo miembro","ADD_BUTTON_TITLE":"Añadir un nuevo miembro","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Este proyecto ha llegado a su límite de ({{members}}) miembros permitidos. Si se desea aumentar ese límite póngase en contacto con el administrador."},"PROJECT_EXPORT":{"TITLE":"Exportar","SUBTITLE":"Exportar tu proyecto para guardar una copia de seguridad o para crear uno nuevo basado en este.","EXPORT_BUTTON":"Exportar","EXPORT_BUTTON_TITLE":"Exportar tus proyecto","LOADING_TITLE":"Estamos generando tu fichero con el volcado de datos","DUMP_READY":"¡Tu fichero con el volcado de datos está listo!","LOADING_MESSAGE":"Por favor no cierres la ventana.","ASYNC_MESSAGE":"Te enviaremos un email cuando esté listo.","SYNC_MESSAGE":"Si la descarga no comienza automáticamente haz click aquí.","ERROR":"Nuestros Oompa Loompas tienen algunos problemas generando el volcado de tus datos. Por favor inténtalo de nuevo.","ERROR_BUSY":"Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos."},"MODULES":{"TITLE":"Módulos","EPICS":"Épicas","EPICS_DESCRIPTION":"Visualizar y administrar la parte mas estrategica del proyecto.","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Gestiona tus historias de usuario para mantener una vista organizada y priorizada de los próximos trabajos que deberás afrontar. ","NUMBER_SPRINTS":"Numero esperado de sprints","NUMBER_SPRINTS_HELP":"0 para un numero indeterminado","NUMBER_US_POINTS":"Total esperado de puntos historicos","NUMBER_US_POINTS_HELP":"0 para un numero indeterminado","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organiza tus proyectos de una manera flexible con este panel.","ISSUES":"Peticiones","ISSUES_DESCRIPTION":"Haz seguimiento de los bugs, preguntas y peticiones de mejoras relacionadas con tu proyecto. ¡No te pierdas nada!","WIKI":"Wiki","WIKI_DESCRIPTION":"Añade, modifica o borra contenido en colaboración con otros miembros. Este es el lugar adecuado para la documentación de tu proyecto.","MEETUP":"Meet Up","MEETUP_DESCRIPTION":"Elegir su sistema de videoconferencia.","SELECT_VIDEOCONFERENCE":"Elige un sistema de videoconferencia","SALT_CHAT_ROOM":"Agregar prefijo al nombre de la sala de chat","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personalizado","URL_CHAT_ROOM":"URL de tu chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Perfil de Proyecto - {{projectName}}\n","PROJECT_DETAILS":"Info del proyecto","PROJECT_NAME":"Nombre del proyecto","TAGS":"Etiquetas","DESCRIPTION":"Descripción","RECRUITING":"¿Este proyecto está buscando a gente?","RECRUITING_MESSAGE":"¿Qué estás buscando?","RECRUITING_PLACEHOLDER":"Define el perfil de lo que estás buscando","FEEDBACK":"¿Recibir feedback de los usuarios de Taiga?","PUBLIC_PROJECT":"Proyecto público","PRIVATE_PROJECT":"Proyecto privado","PRIVATE_OR_PUBLIC":"¿Cuál es la diferencia entre proyecto público y privado?","DELETE":"Eliminar este proyecto","CHANGE_LOGO":"Cambia el logo","ACTION_USE_DEFAULT_LOGO":"Usar imagen por defecto","MAX_PRIVATE_PROJECTS":"Has alcanzado el número máximo de proyectos privados permitidos por su actual plan","MAX_PRIVATE_PROJECTS_MEMBERS":"El numero máximo de miembros para proyectos privados se ha excedido","MAX_PUBLIC_PROJECTS":"Desafortunadamente, usted ha alcanzado el número máximo de proyectos públicos permitidos por su plan actual","MAX_PUBLIC_PROJECTS_MEMBERS":"El proyecto excede el numero maximo de usuarios para proyectos publicos","PROJECT_OWNER":"Dueño del proyecto","REQUEST_OWNERSHIP":"Solicitar de dueño","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"¿Desea convertirse en el nuevo dueño del proyecto?","REQUEST_OWNERSHIP_DESC":"Solicitar que el actual project owner {{name}} te transfiera la propiedad de este proyecto a ti.","REQUEST_OWNERSHIP_BUTTON":"Solicitud","REQUEST_OWNERSHIP_SUCCESS":"Notificaremos al dueño del proyecto","CHANGE_OWNER":"Cambiar dueño","CHANGE_OWNER_SUCCESS_TITLE":"Ok, su solicitud ha sido enviado!","CHANGE_OWNER_SUCCESS_DESC":"Le notificaremos por correo si la solicitud para ser dueño del proyecto fue aceptada o rechazada"},"REPORTS":{"TITLE":"Informes","SUBTITLE":"Exporta los datos de tu proyecto en formato CSV y crea tus propios informes.","DESCRIPTION":"Descarga el fichero CSV o copia la URL generada y abre tu editor de textos o hoja de cálculo favorito para realizar tus propios informes. Podrás visualizar y analizar todos los datos fácilmente.","HELP":"¿Cómo puedo usar esto en mi hoja de cálculo?","REGENERATE_TITLE":"Cambiar URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"Reportes de épicas.","SECTION_TITLE_US":"informes de historias de usuario","SECTION_TITLE_TASK":"Informes de tareas","SECTION_TITLE_ISSUE":"informes de peticiones","DOWNLOAD":"Descargar el CSV","URL_FIELD_PLACEHOLDER":"Por favor regenera la url del origen CSV","TITLE_REGENERATE_URL":"Regenerar url de origen CSV","ACTION_GENERATE_URL":"Generar Url","ACTION_REGENERATE":"Regenerar","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Borrar"},"CUSTOM_FIELDS":{"TITLE":"Atributos personalizados","SUBTITLE":"Especifica los atributos personalizados para las historias de usuario, tareas y peticiones","EPIC_DESCRIPTION":"Campos personalizados para épicas","EPIC_ADD":"Añadir campos personalizados en épicas","US_DESCRIPTION":"Atributos personalizados de historias de usuario","US_ADD":"Añadir un atributo personalizado en las historias de usuario","TASK_DESCRIPTION":"Atributos personalizados de tareas","TASK_ADD":"Añadir un atributo personalizado en las tareas","ISSUE_DESCRIPTION":"Atributos personalizados de peticiones","ISSUE_ADD":"Añadir un atributo personalizado en las peticiones","FIELD_TYPE_TEXT":"Texto","FIELD_TYPE_RICHTEXT":"Texto enriquecido","FIELD_TYPE_MULTI":"Multilínea","FIELD_TYPE_DATE":"Fecha","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valores del Proyectos - {{projectName}}","REPLACEMENT":"Todos los elementos con este valor cambiarán a","ERROR_DELETE_ALL":"No puedes eliminar todos los valores."},"PROJECT_VALUES_POINTS":{"TITLE":"Puntos","SUBTITLE":"Especifica los puntos a los que se podrían estimar tus historias de usuario","US_TITLE":"Puntos de historia de usuario","ACTION_ADD":"Añadir nuevo punto"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioridades","SUBTITLE":"Especifica las prioridades que podrán tener tus peticiones","ISSUE_TITLE":"Prioridades de peticion","ACTION_ADD":"Añadir nueva prioridad"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Gravedades","SUBTITLE":"Especifica la gravedad que tendrán tus peticiones","ISSUE_TITLE":"Gravedades de petición","ACTION_ADD":"Añadir nueva gravedad"},"PROJECT_VALUES_STATUS":{"TITLE":"Estados","SUBTITLE":"Especifica los estado que atravesarán tus historias de usuario, tareas y peticiones","EPIC_TITLE":"Estados de Epicas","US_TITLE":"Estados de historias de usuario","TASK_TITLE":"Estados de Tarea","ISSUE_TITLE":"Estados de la petición"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipos","SUBTITLE":"Especifica los deferentes tipos posibles de peticiones que pueden existir.","ISSUE_TITLE":"Tipos de la petición","ACTION_ADD":"Añadir nuevo {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiquetas","SUBTITLE":"Ver y editar el color de sus etiquetas.","EMPTY":"Actualmente no hay etiquetas","EMPTY_SEARCH":"Parece que no se encontro nada con este criterio de busqueda","ACTION_ADD":"Añadir etiqueta","NEW_TAG":"Nueva etiqueta","MIXING_HELP_TEXT":"Seleccione las etiquetas que quiere agrupar","MIXING_MERGE":"Agrupar Etiquetas","SELECTED":"Seleccionado"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Fechas de Vencimiento","SUBTITLE":"Especificar fechas de vencimiento de tu historia de usuario, tareas y peticiones serán afectados si están seleccionadas","US_TITLE":"Vencimiento de historia de usuario","ACTION_ADD_STATUS":"Añadir nuevo estado","TASK_TITLE":"Estado de vencimiento de tarea","ISSUE_TITLE":"Vencimiento de petición","DAYS_TO_DUE_DATE":"Días para vencimiento","BEFORE_AFTER":"Antes/Después","BEFORE":"Antes","AFTER":"Pasado"},"ROLES":{"PAGE_TITLE":"Roles - {{projectName}}","WARNING_NO_ROLE":"Ojo, ningún rol en tu proyecto podrá estimar historias de usuario","HELP_ROLE_ENABLED":"Si lo activas, los miembros que posean este rol serán capaces de estimar las histórias de usuario","DISABLE_COMPUTABLE_ALERT_TITLE":"¿Seguro de que deseas deshabilitar las estimaciones para este rol?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Si desactivas los permisos de estimación para el rol {{roleName}} todas las estimaciones previas hechas por ese rol se eliminarán","COUNT_MEMBERS":"{{ role.members_count }} miembros con este rol","TITLE_DELETE_ROLE":"Borrar Rol","REPLACEMENT_ROLE":"Todos los usuarios con este rol serán movidos a","WARNING_DELETE_ROLE":"¡Ten cuidado! Todas las estimaciones de roles serán eliminados","ERROR_DELETE_ALL":"No puedes eliminar todos los valores","EXTERNAL_USER":"Usuario externo","NOTE_EXTERNAL_USERS":"Nota: por Usuario Externo entendemos cualquier usuario anónimo no perteneciente a la plataforma Taiga, incluyendo motores de búsqueda. Por favor, usa este rol con cuidado."},"THIRD_PARTIES":{"SECRET_KEY":"Secret key","PAYLOAD_URL":"Payload URL","VALID_IPS":"IPs de origen válidas (separadas por ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Las peticiones de Bitbucket no van firmadas, con la IP de origen verificamos su procedencia. Déjalo vacío y no se verificarán."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Las peticiones de Gitlab no van firmadas, con la IP de origen verificamos su procedencia. Déjalo vacío y no se verificarán."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Añadir un Nuevo Webhook","TYPE_NAME":"Escribe el nombre del servicio","TYPE_PAYLOAD_URL":"Escribe la 'payload URL' del servicio","TYPE_SERVICE_SECRET":"Escribe la \"secret key\" del servicio","SAVE":"Guardar Webhook","CANCEL":"Cancelar Webhook","SHOW_HISTORY":"(Mostrar histórico)","TEST":"Testea el Webhook","EDIT":"Editar Webhook","DELETE":"Eliminar Webhook","REQUEST":"Solicitud","RESEND_REQUEST":"Reenviar solicitud","HEADERS":"Cabeceras","PAYLOAD":"Payload","RESPONSE":"Respuesta","DATE":"DD MMM YYYY [a las] hh:mm:ss","ACTION_HIDE_HISTORY":"(Ocultar historial)","ACTION_HIDE_HISTORY_TITLE":"+ info","ACTION_SHOW_HISTORY":"(Mostrar historial)","ACTION_SHOW_HISTORY_TITLE":"- info","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Atributos Personalizados - {{projectName}}","ADD":"Añadir atributo personalizado","EDIT":"Editar atributo personalizado","DELETE":"Eliminar atributo personalizado","SAVE_TITLE":"Guardar atributo personalizado","CANCEL_TITLE":"Cancelar la creación","SET_FIELD_NAME":"Escribe el nombre del atributo personalizado","SET_FIELD_DESCRIPTION":"Escribe una descripción para el atributo personalizado","FIELD_TYPE_DEFAULT":"-- elige uno --","ACTION_UPDATE":"Actualizar Atributo Personalizado","ACTION_CANCEL_EDITION":"Cancelar edición"},"MEMBERSHIP":{"COLUMN_MEMBER":"Miembro","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rol","COLUMN_STATUS":"Estado","STATUS_ACTIVE":"Activado","STATUS_PENDING":"Pendiente","DELETE_MEMBER":"Borrar miembro","RESEND":"Enviar de nuevo","SUCCESS_SEND_INVITATION":"Hemos enviado nuevamente la invitación a '{{email}}'.","SUCCESS_DELETE":"Hemos eliminado {{message}}.","ERROR_DELETE":"No se ha podido eliminar {{message}}. ","DEFAULT_DELETE_MESSAGE":"la invitación enviada a"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Valor por defecto para el selector de estado de épicas.","LABEL_US_STATUS":"Valor por defecto para el selector de estado de historias de usuario.","LABEL_POINTS":"Valor por defecto para el selector de puntos","LABEL_TASK_STATUS":"Valor por defecto para el selector de estado de tarea","LABEL_ISSUE_TYPE":"Valor por defecto para el selector de tipo de la petición","LABEL_ISSUE_STATUS":"Valor por defecto para el selector de estado de petición","LABEL_PRIORITY":"Valor por defecto para el selector de prioridad","LABEL_SEVERITY":"Valor por defecto para el selector de gravedad"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Escribe un nombre para el nuevo estado","PLACEHOLDER_DAYS_TO_DUE_DATE":"Escribe numero de días para vencimiento"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Escribe un nombre para el nuevo elemento"},"US_STATUS":{"ACTION_ADD_STATUS":"Añadir nuevo estado","IS_ARCHIVED_COLUMN":"Archivada","IS_CLOSED_COLUMN":"Cerrada","WIP_LIMIT_COLUMN":"Límite WIP","PLACEHOLDER_WRITE_NAME":"Escribe un nombre para el nuevo estado"},"MENU":{"PROJECT":"Proyecto","ATTRIBUTES":"Atributos","MEMBERS":"Miembros","PERMISSIONS":"Permisos","INTEGRATIONS":"Integraciones"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Estados","POINTS":"Puntos","PRIORITIES":"Prioridades","SEVERITIES":"Gravedades","TYPES":"Tipos","CUSTOM_FIELDS":"Atributos personalizados","TAGS":"Etiquetas","DUE_DATES":"Vencimiento"},"SUBMENU_ROLES":{"TITLE":"Roles","ACTION_NEW_ROLE":"+ Nuevo Rol","TITLE_ACTION_NEW_ROLE":"Añadir nuevo rol"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"¿Te gustaría ser el nuevo project owner?","PRIVATE":"Privado","ACCEPTED_PROJECT_OWNERNSHIP":"¡Felicitaciones! Usted es ahora el nuevo propietario del proyecto.","REJECTED_PROJECT_OWNERNSHIP":"Ok. Nos pondremos en contacto con el propietario actual del proyecto","ACCEPT":"Aceptar","REJECT":"Rechazar","PROPOSE_OWNERSHIP":"{{owner}}, el dueño del proyecto {{project}} pregunta si es el nuevo dueño del proyecto.","ADD_COMMENT":"¿Te gustaría añadir un comentario para el project owner?","UNLIMITED_PROJECTS":"Sin límite","OWNER_MESSAGE":{"PRIVATE":"Por favor recuerde que puede ser dueño de maximo {{maxProjects}} proyectos privados. Usted tiene actualmente {{currentProjects}} proyectos privados bajo su poder","PUBLIC":"Pro favor recuerde que solo puede ser dueño de maximo {{maxProjects}} proyectos publicos. Actualmente tiene {{currentProjects}} proyectos publicos bajo su poder"},"CANT_BE_OWNED":"en el momento no puede ser el dueño de un proyecto de este tipo. Si desea ser el dueño de este proyecto, por favor contacte al administrador para cambiar la configuracion que le permita ser dueño del proyecto"}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Editar perfil","CLOSED_US":"Historias cerradas","PROJECTS":"Proyectos","PROJECTS_EMPTY":"{{username}} no tiene proyectos todavía","CONTACTS":"Contactos","CONTACTS_EMPTY":"{{username}} no tiene contactos todavía","CURRENT_USER_CONTACTS_EMPTY":"No tienes contactos todavía","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Las personas con las que trabajas en Taiga serán tus contactos automáticamente","TABS":{"ACTIVITY_TAB":"Timeline","ACTIVITY_TAB_TITLE":"Muestra toda la actividad de este usuario","PROJECTS_TAB":"Proyectos","PROJECTS_TAB_TITLE":"Lista todo los proyectos en los que este usuario es miembro","LIKES_TAB":"Likes","LIKES_TAB_TITLE":"Lista todo lo que le gusta a este usuario","VOTES_TAB":"Votos","VOTES_TAB_TITLE":"Lista todos los votos de este usuario","WATCHED_TAB":"Observado","WATCHED_TAB_TITLE":"Lista todos los elementos observados por este usuario","CONTACTS_TAB":"Contactos","CONTACTS_TAB_TITLE":"Lista todos los contactos hechos por este usuario"}},"PROFILE_SIDEBAR":{"TITLE":"Tu perfil","DESCRIPTION":"La gente puede ver aquello que haces y en qué estás trabajando. Añade una buena bio para que puedan ver la mejor versión de tu perfil.","ADD_INFO":"Editar bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Escribe algo...","FILTER_TYPE_ALL":"Todas","FILTER_TYPE_ALL_TITLE":"Mostrar todos","FILTER_TYPE_PROJECTS":"Proyectos","FILTER_TYPE_PROJECTS_TITLE":"Mostrar sólo proyectos","FILTER_TYPE_EPICS":"Épicas","FILTER_TYPE_EPICS_TITLE":"Mostrar sólo épicas","FILTER_TYPE_USER_STORIES":"Historias","FILTER_TYPE_USER_STORIES_TITLE":"Mostrar sólo historias de usuario","FILTER_TYPE_TASKS":"Tareas","FILTER_TYPE_TASKS_TITLE":"Mostrar sólo tareas","FILTER_TYPE_ISSUES":"Peticiones","FILTER_TYPE_ISSUES_TITLE":"Mostrar sólo peticiones","EMPTY_TITLE":"Parece que no se ha encontrado nada."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reordena tus proyectos para ver arriba los que más utilizas.
    Los 10 primeros aparecerán en la lista de proyectos de la barra de navegación de arriba.","PRIVATE":"Proyecto privado","LOOKING_FOR_PEOPLE":"Este proyecto está buscando a gente","FANS_COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{un observador} other{# observadores}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{un miembro} other{# miembros}}","BLOCKED_PROJECT":{"BLOCKED":"Proyecto bloqueado","THIS_PROJECT_IS_BLOCKED":"Este proyecto esta temporalmente bloqueado","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Para desbloquear sus proyectos, contacte al administrador."},"SECTION":{"SEARCH":"Buscar","TIMELINE":"Timeline","EPICS":"Épicas","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Peticiones","WIKI":"Wiki","TEAM":"Equipo","MEETUP":"Meet Up","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Crear proyecto","MANAGE_PROJECTS":"Administrar proyectos","TITLE_CREATE_PROJECT":"Crear proyecto","HELP_TITLE":"Página de Soporte de Taiga","HELP":"Ayuda","HOMEPAGE":"Página de inicio","FEEDBACK_TITLE":"Envíanos tu feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Edita la configuración de tus notificaciones","NOTIFICATIONS":"Notificaciones","VIEW_PROFILE_TITLE":"Ver perfil","VIEW_PROFILE":"Ver perfil","EDIT_PROFILE_TITLE":"Editar tu perfil","EDIT_PROFILE":"Editar Perfil","CHANGE_PASSWORD_TITLE":"Cambiar contraseña","CHANGE_PASSWORD":"Cambiar contraseña","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Descubre los proyectos más relevantes","DISCOVER":"Descubrir"},"LIKE_BUTTON":{"LIKE":"Me gusta","LIKED":"Me gusta","UNLIKE":"Ya no!","BUTTON_TITLE":"Marca o desmarcar como favorito este proyecto","COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Observa este proyecto y define la política de notificación","WATCH":"Observar","WATCHING":"Observando","COUNTER_TITLE":"{total, plural, one{un observador} other{# observadores}}","OPTIONS":{"NOTIFY_ALL":"Recibir todas las notificaciones","NOTIFY_ALL_TITLE":"Recibir todas las notificaciones de este proyecto","NOTIFY_INVOLVED":"Estoy involucrado","NOTIFY_INVOLVED_TITLE":"Recibe notificaciones sólo cuando tú estéß involucrado","UNWATCH":"No observar","UNWATCH_TITLE":"Dejar de observar este proyecto"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contacta con el equipo de proyecto","CONTACT_BUTTON":"Contacta con el proyecto"},"CREATE":{"TITLE":"Crear Proyecto","CHOOSE_TEMPLATE":"¿Que plantilla se ajusta mejor con tu proyecto?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioriza y soluciona tus tareas en ciclos cortos de tiempo.","TEMPLATE_SCRUM_LONGDESC":"Scrum es una metodología ágil, iterativa e incremental, de desarrollo de software para la gestión del desarrollo de productos.\nEl backlog de producto es lo que finalmente será entregado, ordenado en el orden que debe ser entregado. El product backlog se divide en trozos manejables y ejecutables llamados sprints. Cada cierto tiempo el equipo inicia un nuevo sprint y se compromete a entregar un número de user stories del backlog, de acuerdo a la capacidad, habilidades y recursos. El proyecto avanza hasta que el backlog se vacía.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Mantén un flujo constante de tareas independientes","TEMPLATE_KANBAN_LONGDESC":"La metodología Kanban se usa para dividir el proceso de desarrollo (o cualquier tipo de proyecto) en etapas. Una tarjeta de Kanban es como una ficha o un post-it que detalla cada tarea (o user story) en un proyecto para ser completada. El tablero de Kanban se usa para mover cada tarjeta de un estado de progreso al siguiente, y de este modo ayuda a trazar el progreso.","DUPLICATE":"Duplicar proyecto","DUPLICATE_DESC":"Empieza un nuevo proyecto manteniendo tu configuración","IMPORT":"Importar proyecto","IMPORT_DESC":"Importa tu proyecto desde múltiples plataformas a Taiga","INVITE":"Invitar al proyecto","SOLO_PROJECT":"Estarás solo en este proyecto","INVITE_LATER":"(Podrás invitar otros miembros más adelante)","BACK":"Back","MAX_PRIVATE_PROJECTS":"l","MAX_PUBLIC_PROJECTS":"Desafortunadamente, has alcanzado el número máximo de proyectos públicos.\nSi desea aumentar este limite, por favor contacte al administrador.","PUBLIC_PROJECT":"Proyecto público","PRIVATE_PROJECT":"Proyecto privado"},"COMMON":{"DETAILS":"Nuevos detalles del proyecto","PROJECT_TITLE":"Nombre del proyecto","PROJECT_DESCRIPTION":"Descripción del proyecto"},"DUPLICATE":{"TITLE":"Duplicar Proyecto","DESCRIPTION":"Empieza un nuevo proyecto manteniendo tu configuración","SELECT_PLACEHOLDER":"Elije uno de tus proyectos para duplicar"},"IMPORT":{"TITLE":"Importar Proyecto","DESCRIPTION":"Importa tu proyecto desde múltiples plataformas a Taiga","ASYNC_IN_PROGRESS_TITLE":"Nuestros Oompa Loompa están importando tu proyecto","ASYNC_IN_PROGRESS_MESSAGE":"Este proceso puede llevarnos algún tiempo
    Te enviaremos un email cuando esté listo","UPLOAD_IN_PROGRESS_MESSAGE":"Subidos {{uploadedSize}} de {{totalSize}}","ERROR":"Nuestros Oompa Loompas tienen problemas para importar tus datos. Por favor inténtalo nuevamente.","ERROR_TOO_MANY_REQUEST":"Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos.","ERROR_MESSAGE":"Nuestros Oompa Loompas tienen algunos problemas importando tus datos: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"El fichero '{{fileName}}' ({{fileSize}}) es demasiado pesado para nuestros Oompa Loompas, prueba con uno de menos de ({{maxFileSize}}).","SYNC_SUCCESS":"Tu proyecto se ha importado con éxito.","IMPORT":"Importar","WHO_IS":"Sus tareas serán asignadas a...","WRITE_EMAIL":"O si tu quieres, escribe el email que este usuario usa en Taiga","SEARCH_CONTACT":"O si quieres, busca en tus contactos","WRITE_EMAIL_LABEL":"Escribe el email que este usuario usa en Taiga","ACCEEDE":"Acceder","PROJECT_MEMBERS":"Miembros del proyecto","PROCESS_DESCRIPTION":"Dinos a que usuario de Taiga le quieres asignar las tareas de {{platform}}","MATCH":"¿{{user_external}} y {{user_internal}} son la misma persona?","CHOOSE":"Selecciona un usuario","LINKS":"Enlaces con {{platform}}","LINKS_DESCRIPTION":"¿Quieres mantener el enlace de cada elemento con la tarjeta original en {{platform}}?","WARNING_MAIL_USER":"Tenga en cuenta que si el usuario no tienen cuenta en Taiga no podremos asignarle las tareas.","ASSIGN":"Asignar","PROJECT_SELECTOR":{"NO_RESULTS":"Parece que no se encontro nada con este criterio de busqueda","ACTION_SEARCH":"buscar","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"El proyecto que estas tratando de importar tiene {{members}} miembros incluyéndote a ti, desafortunadamente tu plan actual permite como máximo {{max_memberships}} miembros por proyecto privado. Si quieres aumentar este limite, por favor contacta al administrador.","PROJECT_MEMBERS_DESC_PUBLIC":"El proyecto que estas tratando de importar tiene {{members}} miembros incluyéndote a ti, desafortunadamente tu plan actual permite como máximo {{max_memberships}} miembros por proyecto público. Si quieres aumentar este limite, por favor contacta al administrador.","ACCOUNT_ALLOW_MEMBERS":"Tu cuenta sólo permite {{members}} miembros","PRIVATE_PROJECTS_SPACE":{"TITLE":"Desafortunadamente, su plan actual no permite a los proyectos privados adicionales","DESC":"El proyecto que trata de importar es privado. Desafortunadamente, su plan actual no le permite adicionar mas proyectos privados"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Desafortunadamente, su plan actual no permite adicionar mas proyectos publicos","DESC":"El proyecto que estás intento importar es público. Desafortunadamente, tu plan actual no permite proyectos públicos adicionales."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Su plan actual solo permite un numero maximo de {{max_memberships}} miembros por proyecto privado"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Su plan actual solo permite un maximo de {{max_memberships}} miembros por proyecto publico."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Desafortunadamente tu plan actual no permite proyectos privados adicionales o un incremento de más de {{max_memberships}} miembros por proyecto privado","DESC":"El proyecto que estás intentando importar es privado y tiene {{members}} miembros."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Desafortunadamente su plan actual no le permite adicionar proyectos publicos o un aumento de {{max_memberships}} miembros por proyecto publico","DESC":"El proyecto que estás intentando importar es público y tiene más de {{members}} miembros."}},"IN_PROGRESS":{"TITLE":"Importando Proyecto","DESCRIPTION":"Este proceso puede tardar un ratito, por favor mantén la ventana abierta."},"WARNING":{"TITLE":"Algunas tareas estarán sin asignar","DESCRIPTION":"Todavía hay gente sin identificar. Las tarjetas asignadas a estas personas se quedarán sin asignar. Revisa todos los contactos para que no se pierda esta información.","CHECK":"Verificar contactos"},"TAIGA":{"SELECTOR":"Importa tu proyecto de Taiga"},"TRELLO":{"SELECTOR":"Importa tus tableros de Trello en Taiga","CHOOSE_PROJECT":"Elige el tablero que quieres importar","NO_PROJECTS":"Parece que no tienes tableros en Trello"},"GITHUB":{"SELECTOR":"Importa tus peticiones de proyecto de GitHub","CHOOSE_PROJECT":"Encuentra el proyecto que quieres importar","NO_PROJECTS":"Parece que no tienes proyectos en GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"¿Cómo quieres importar las peticiones en Taiga?","KANBAN_PROJECT":"Como historias de usuario en un proyecto kanban","KANBAN_PROJECT_DESCRIPTION":"ll","SCRUM_PROJECT":"Como historias de usuario en un proyecto scrum","SCRUM_PROJECT_DESCRIPTION":"Después de esto podrás activar el modo kanban","ISSUES_PROJECT":"Como petición ","ISSUES_PROJECT_DESCRIPTION":"No podrás usar tus peticiones en el modo kanban o scrum. Podrás activar el kanban o scrum para las nuevas historias de usuario"},"ASANA":{"SELECTOR":"Importa tu proyecto de Asana y elije cómo gestionarlo","CHOOSE_PROJECT":"Elige el proyecto que quieres importar","NO_PROJECTS":"Parece que no tienes proyectos en Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Las tareas y sub-tareas de tu proyecto se crearán como historias de usuario y tareas en Taiga.","CREATE_AS_KANBAN_DESCRIPTION":"Las tareas y sub-tareas de tu proyecto se crearán como historias de usuario y tareas en Taiga."},"JIRA":{"SELECTOR":"Importa tu proyecto de Jira y elije cómo gestionarlo","HOW_TO_CONFIGURE":"(ayuda de configuración)","CHOOSE_PROJECT":"Elige el proyecto o panel que quieres importar","NO_PROJECTS":"Parece que no tienes proyectos o paneles en Jira","URL":"Tu URL de Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Peticiones","CREATE_AS_SCRUM_DESCRIPTION":"Las peticiones y sub-peticiones de tu proyecto se crearán como historias de usuario y tareas en Taiga.","CREATE_AS_KANBAN_DESCRIPTION":"Las peticiones y sub-peticiones de tu proyecto se crearán como historias de usuario y tareas en Taiga.","CREATE_AS_ISSUES_DESCRIPTION":"¿Qué quieres hacer con las sub-peticiones del proyecto de Jira? (Taiga no posee sub-peticiones)","CREATE_NEW_ISSUES":"Convertir sub-peticiones como nuevas peticiones de Taiga","NOT_CREATE_NEW_ISSUES":"No importar sub-peticiones"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"¿Está seguro que deseas eliminar tu cuenta de Taiga?","CANCEL":"Volver a los ajustes","ACCEPT":"Eliminar cuenta","BLOCK_PROJECT":"Recuerde que todos los proyectos de los cuales usted es dueño serán bloqueados después de eliminar su cuenta. Si no desea que un proyecto sea bloqueado, transfiera la propiedad de cada proyecto a otro usuario antes de eliminar la cuenta."},"DELETE_PROJECT":{"TITLE":"Borrar proyecto","QUESTION":"¿Esta seguro que decea eliminar este proyecto?","SUBTITLE":"Todos los datos del proyecto (historias de usuario, tareas, peticiones, sprints y páginas del wiki) se perderán :-(","CONFIRM":"Si, Estoy realmente seguro"},"ASSIGNED_TO":{"SELECT":"Asignar a...","SEARCH":"Buscar usuarios"},"ADD_MEMBER":{"TITLE":"Nuevo miembro","PLACEHOLDER":"Filtra los usuarios o escribe un email para enviar la invitación","ADD_EMAIL":"Añade un email","REMOVE":"Borrar","INVITE":"Invitar","CHOOSE_ROLE":"Elije un rol","PLACEHOLDER_INVITATION_TEXT":"(Opcional) Añade un texto personalizado a la invitación. Dile algo encantador a tus nuevos miembros ;-)","HELP_TEXT":"Si los usuarios ya están registrado en Taiga, se añadirán automáticamente. De lo contrario recibirán una invitación."},"FEEDBACK":{"TITLE":"Dinos algo...","COMMENT":"...un error, algunas sugerencias, algo cool... o incluso tus peores pesadillas con Taiga","ACTION_SEND":"Envíanos tu feedback"},"SEARCH":{"TITLE":"Busqueda","PLACEHOLDER_SEARCH":"¿Qué es lo que estás buscando?"},"ADD_EDIT_SPRINT":{"TITLE":"Nuevo sprint","PLACEHOLDER_SPRINT_NAME":"nombre del sprint","PLACEHOLDER_SPRINT_START":"Comienzo estimado","PLACEHOLDER_SPRINT_END":"Final Estimado","ACTION_DELETE_SPRINT":"¿Quiéres borrar este sprint?","TITLE_ACTION_DELETE_SPRINT":"borrar sprint","LAST_SPRINT_NAME":"el último sprint es {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"Los cambios no están gurdados. ¿Seguro que quieres cerrar el formulario?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Añadir petición","FILTER_ISSUES":"Filtrar peticiones"},"DELETE_DUE_DATE":{"TITLE":"Borrar fecha de vencimiento","SUBTITLE":"¿Seguro que quieres borrar la fecha de vencimiento?"},"DELETE_SPRINT":{"TITLE":"Borrar sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Quitar relación con Épica","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opcional) Añade un texto personalizado a la invitación. Dile algo encantador a tus nuevos miembros ;-)","PLACEHOLDER_TYPE_EMAIL":"Escribe un email","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Usted esta a punto de alcanzar el maximo numero de miembros permitidos para este proyecto, {{maxMembers}} miembros. Si desea aumentar el limite actual, por favor contacte al administrador.","LIMIT_USERS_WARNING_MESSAGE":"Usted esta a punto de alcanzar el maximo numero de miembros permitidos para este proyecto, {{maxMembers}} miembros."},"LEAVE_PROJECT_WARNING":{"TITLE":"Por desgracia, este proyecto no puede ser dejado sin dueño","CURRENT_USER_OWNER":{"DESC":"Usted es el dueño actual de este proyecto. Antes de salir, tranfiera el dominio de su proyecto a alguien mas.","BUTTON":"Cambiar el dueño del proyecto"},"OTHER_USER_OWNER":{"DESC":"Desafortunadamente, usted no puede eliminar un miembro que es a su vez el dueño actual del proyecto. Primero, por favor asigne un nuevo dueño del proyecto.","BUTTON":"Solicitud del cambio del dueño del proyecto"}},"CHANGE_OWNER":{"TITLE":"¿A quién quiere ser el nuevo dueño del proyecto?","ADD_COMMENT":"Añadir comentario","BUTTON":"Pregunte a este usuario para convertirlo en el nuero dueño del proyecto"},"CONTACT_PROJECT":{"TITLE":"Enviar email a","WARNING":"Los administradores del proyecto recibirán el email","PLACEHOLDER":"Escribe tu mensaje","SEND":"Enviar"},"SET_DUE_DATE":{"TITLE":"Fijar fecha de vencimiento","PLACEHOLDER_DUE_DATE":"Seleccionar fecha de vencimiento","REASON_FOR_DUE_DATE":"Motivo para fijar fecha de vencimiento","PLACEHOLDER_REASON_FOR_DUE_DATE":"¿Por qué esta historia de usuario necesita una fecha de vencimiento?","SUGGESTIONS":{"IN_ONE_WEEK":"En una semana","IN_TWO_WEEKS":"En dos semanas","IN_ONE_MONTH":"En un mes","IN_THREE_MONTHS":"En tres meses"},"TITLE_ACTION_DELETE_DUE_DATE":"Borrar fecha de vencimiento"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Borrar fecha de vencimiento","SUBTITLE_ACTION_DELETE_DUE_DATE":"¿Estás seguro que quieres eliminar fecha de vencimiento de estado {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Enlace a Épica","EXISTING_EPIC":"Épica existente","NEW_EPIC":"Nueva Épica","CHOOSE_PROJECT_FOR_CREATION":"¿Qué es el proyecto?","CHOOSE_PROJECT_FROM":"¿Qué es el proyecto?","SUBJECT":"Asunto","CHOOSE_EPIC":"¿Cuál es la Épica?","FILTER_EPICS":"Filtrar épicas","NO_EPICS_FOUND":"Parece que no se encontro nada con este criterio de busqueda"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Épica {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{taskStatus}}. Descripción: {{taskDescription}}","SECTION_NAME":"Épica","ERROR_UNLINK_RELATED_USERSTORY":"No se ha podido desvincular: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Crear relación con","NEW_USERSTORY":"Nueva historia de usuario","EXISTING_USERSTORY":"Historia de usuario existente","CHOOSE_PROJECT_FOR_CREATION":"Cuál proyecto?","SUBJECT":"Asunto","SUBJECT_BULK_MODE":"Tema (inserción masiva)","CHOOSE_PROJECT_FROM":"¿Cuál proyecto?","CHOOSE_USERSTORY":"¿Cuál historia de usuario?","NO_USERSTORIES":"Este proyecto no tiene historias de usuario todavia. Por favor, seleccione otro proyecto.","NO_USERSTORIES_FOUND":"Parece que no se encontro nada con este criterio de busqueda","FILTER_USERSTORIES":"Filtrar historias de usuario","LIGHTBOX_TITLE_BLOKING_EPIC":"Bloqueo de épica","ACTION_DELETE":"Borrar epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Historia de Usuario {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{userStoryStatus }}. Completado el {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} de {{userStoryTotalTasks}} tareas cerradas). Puntos: {{userStoryPoints}}. Descripción: {{userStoryDescription}}","SECTION_NAME":"Historia de usuario","LINK_TASKBOARD":"Panel de tareas","TITLE_LINK_TASKBOARD":"Ir al panel de tareas","TOTAL_POINTS":"puntos totales","ADD":"+ Añadir una Historia de Usuario","ADD_BULK":"Añadir nuevas Historias de Usuario en bloque","PROMOTED":"Esta historia ha sido promovida desde la petición:","TITLE_LINK_GO_TO_ISSUE":"Ir a petición","TITLE_DELETE_ACTION":"Borrar Historia de Usuario","LIGHTBOX_TITLE_BLOKING_US":"Historia bloqueada","NOT_ESTIMATED":"No estimada","OWNER_US":"Esta Historia de Usuario pertenece a","RELATE_TO_EPIC":"Enlace a Épica","REMOVE_RELATIONSHIP_WITH_EPIC":"Quitar relación a Épica","TRIBE":{"PUBLISH":"Publicar como Gig en la Tribu Taiga","PUBLISH_INFO":"Mas información","PUBLISH_TITLE":"Mas informacion para publicar en la Tribu Taiga","PUBLISHED_AS_GIG":"Historia publicada como Gig en la Tribu Taiga","EDIT_LINK":"Editar link","CLOSE":"Cerrar","SYNCHRONIZE_LINK":"sincronizar con la Tribu Taiga","PUBLISH_MORE_INFO_TITLE":"Necesita a alguien para esta tarea?","PUBLISH_MORE_INFO_TEXT":"

    Si necesitas ayuda con una tarea en particular, puedes crear 'gigs' en Taiga Tribe y recibir ayuda de todo el mundo. Podrás controlar y gestionar el 'gig' disfrutando de una gran comunidad deseosa de contribuir.

    TaigaTribe es el hermano ideal de Taiga. Ambas plataformas pueden vivir separadamente pero creemos que hay mucho poder en usarlas combinadas, por lo que estamos asegurándonos de que la integración entre ambas funcione como un tiro.

    "}},"COMMENTS":{"DELETED_INFO":"Comentario borrado por {{user}}","COMMENTS_COUNT":"{{comments}} Comentarios","OLDER_FIRST":"Mas antiguo primero","RECENT_FIRST":"Mas reciente primero","COMMENT":"Comentar","EDITED_COMMENT":"Editado:","SHOW_HISTORY":"Ver histórico","TYPE_NEW_COMMENT":"Escribe un nuevo comentario aquí","SHOW_DELETED":"Mostrar comentarios eliminados","HIDE_DELETED":"Ocultar comentarios eliminados","DELETE":"Borrar comentario","RESTORE":"Restaurar comentario","HISTORY":{"TITLE":"Actividad"}},"ACTIVITY":{"TITLE":"Actividad","ACTIVITIES_COUNT":"{{activities}} Actividades","TAGS_ADDED":"etiquetas añadidas","TAGS_REMOVED":"Etiquetas borradas:","US_POINTS":"{{role}} puntos","NEW_ATTACHMENT":"nuevo adjunto","DELETED_ATTACHMENT":"adjunto borrado","UPDATED_ATTACHMENT":"actualizar adjunto ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"atributo personalizado creado","UPDATED_CUSTOM_ATTRIBUTE":"atributo personalizado actualizado","BECAME_DEPRECATED":"esta obsoleto","BECAME_UNDEPRECATED":"no esta obsoleto","TEAM_REQUIREMENT":"Requerido por el Equipo","CLIENT_REQUIREMENT":"Requerido por el Cliente","BLOCKED":"Bloqueada","VALUES":{"NOT_SET":"Sin fijar","UNASSIGNED":"sin asignar"},"FIELDS":{"SUBJECT":"asunto","DESCRIPTION":"descripción","PRIORITY":"prioridad","SEVERITY":"gravedad","STATUS":"estado","TYPE":"tipo","ASSIGNED_TO":"asignado a","ASSIGNED_USERS":"usuarios asignados","DUE_DATE":"fecha de vencimiento","MILESTONE":"sprint","COLOR":"color"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"El panel del backlog, con las historias de usuario y sprints del proyecto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Customiza la gráfica de tu backlog","CUSTOMIZE_GRAPH_TEXT":"Para tener una gráfica bonita que te ayude a seguir la evolución del proyecto tienes que fijar los puntos y sprints en la","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Modifica los puntos y sprints a través de la zona de Administración","MOVE_US_TO_CURRENT_SPRINT":"Mover al Sprint en curso","MOVE_US_TO_LATEST_SPRINT":"Mover al Sprint más reciente","EMPTY":"¡El backlog está vacío!","CREATE_NEW_US":"Crear una nueva historia","CREATE_NEW_US_EMPTY_HELP":"Es posible que desees crear una nueva historia de usuario","EXCESS_OF_POINTS":"Exceso de puntos","PENDING_POINTS":"Puntos pendientes","CLOSED_POINTS":"cerrada","COMPACT_SPRINT":"Compactar Sprint","GO_TO_TASKBOARD":"Ir al panel de tareas de {{::name}}","EDIT_SPRINT":"Editar Sprint","TOTAL_POINTS":"total","STATUS_NAME":"Nombre del Estado","SORTABLE_FILTER_ERROR":"No puedes arrastrar historias en el backlog cuando los filtros están en uso","DOOMLINE":"Alcance del proyecto (línea de la fatalidad :-P)","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Puntos","OPTIMAL":"El número de puntos óptimos pendientes para el sprint \"{{sprintName}}\" debería ser de {{value}}","REAL":"El número real de puntos pendientes para el sprint \"{{sprintName}}\" es de {{value}}","INCREMENT_TEAM":"El número de puntos incrementados por requerimientos del equipo para el sprint \"{{sprintName}}\" es de {{value}}","INCREMENT_CLIENT":"El número de puntos incrementados por requerimientos del cliente para el sprint \"{{sprintName}}\" es de {{value}}"},"TAGS":{"TOGGLE":"Cambia la visibilidad de los tags","SHOW":"Mostrar etiquetas","HIDE":"Ocultar etiquetas"},"FORECASTING":{"TITLE":"Previsión de velocidad","BACKLOG":"Mostrar el backlog","NEW_SPRINT":"Historias de Usuarios candidatas para el próximo sprint, basado en tu velocidad. Haga clic para crear un nuevo sprint.","CURRENT_SPRINT":"Historias de Usuarios candidatas para el sprint, basado en tu velocidad. Haga clic para añadirlas al sprint en curso."},"TABLE":{"COLUMN_US":"Historias de Usuario","TITLE_COLUMN_POINTS":"Seleccionar vista por Rol"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"puntos
    totales","COMPLETED_POINTS":"puntos
    completados","OPEN_TASKS":"tareas
    abiertas","CLOSED_TASKS":"tareas
    cerradas","IOCAINE_DOSES":"dosis de
    iocaína","SHOW_STATISTICS_TITLE":"Ver estadísticas","TOGGLE_BAKLOG_GRAPH":"Ver/Ocultar gráfica de burndown","POINTS_PER_ROLE":"Puntos por rol"},"SUMMARY":{"PROJECT_POINTS":"puntos
    proyecto","DEFINED_POINTS":"puntos
    definidos","CLOSED_POINTS":"puntos
    cerrados","POINTS_PER_SPRINT":"puntos /
    sprint"},"FILTERS":{"TOGGLE":"Cambia la visibilidad de los filtros","HIDE":"Ocultar filtros","SHOW":"Ver Filtros"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Panel de Tareas del Sprint","TITLE_LINK_TASKBOARD":"Ir al panel de tareas de \"{{name}}\"","EMPTY":"Todavía no hay Sprints","WARNING_EMPTY_SPRINT_ANONYMOUS":"Este sprint no tiene historias de usuario","WARNING_EMPTY_SPRINT":"Arrastra aquí las historias desde tu backlog para comenzar un nuevo sprint","TITLE_ACTION_NEW_SPRINT":"+ Nuevo sprint","TEXT_ACTION_NEW_SPRINT":"Es posible que desees crear un nuevo sprint para tu proyecto","ACTION_SHOW_CLOSED_SPRINTS":"Mostrar sprints cerrados","ACTION_HIDE_CLOSED_SPRINTS":"Ocultar sprints cerrados"}},"ERROR":{"TEXT1":"Algo no va bien y nuestros Oompa Loompas están trabajando para resolverlo.","NOT_FOUND":"No encontrado","NOT_FOUND_TEXT":"Error 404. La página que estás buscando ya no existe. Puedes volver a la página de inicio de TAIGA y ver si encuentras lo que estás buscando. ","PERMISSION_DENIED":"Permiso denegado","PERMISSION_DENIED_TEXT":"No tienes permisos para acceder a esta página.","VERSION_ERROR":"Algún compañero se te ha adelantado y ha actualizado esto, nuestros Oompa Loompas no pueden aplicar tus cambios. Por favor, recarga la página y aplícalos nuevamente (se perderán)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (desde el {{startDate}} al {{endDate}}) de {{projectName}}. Completado el {{completedPercentage}}% ({{completedPoints}} de {{totalPoints}} puntos). {{openTasks}} de {{totalTasks}} tareas abiertas.","SECTION_NAME":"Panel de Tareas","TITLE_ACTION_ADD":"Añade una nueva tarea","TITLE_ACTION_ADD_BULK":"Añadir nuevas tareas en bloque","TITLE_ACTION_ADD_ISSUE":"Agregar nueva petición","TITLE_ACTION_ADD_ISSUE_BULK":"Agrega nuevas peticiones masivas","TITLE_ACTION_ASSIGN":"Asignar tarea","PLACEHOLDER_CARD_TITLE":"Esto podría ser una tarea","PLACEHOLDER_CARD_TEXT":"Divide las historias en tareas para controlarlas de manera separada","TABLE":{"COLUMN":"Historia de usuario","TITLE_ACTION_FOLD":"Plegar columna","TITLE_ACTION_UNFOLD":"Desplegar columna","TITLE_ACTION_FOLD_ROW":"Plegar Fila","TITLE_ACTION_UNFOLD_ROW":"Desplegar Fila","FIELD_POINTS":"puntos","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Peticiones de Sprint"},"CHARTS":{"XAXIS_LABEL":"Días","YAXIS_LABEL":"Puntos","OPTIMAL":"El número de puntos óptimos pendientes para el día {{formattedDate}} debería ser de {{roundedValue}}","REAL":"El número de puntos pendientes para el día {{formattedDate}} es de {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tarea {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{taskStatus }}. Descripción: {{taskDescription}}","SECTION_NAME":"Tarea","LINK_TASKBOARD":"Panel de tareas","TITLE_LINK_TASKBOARD":"Ir al panel de tareas","PLACEHOLDER_SUBJECT":"Escribe el asunto de la nueva tarea","TITLE_SELECT_STATUS":"Nombre del estado","OWNER_US":"Esta tarea pertenece a\n","TITLE_LINK_GO_OWNER":"Ir a historia de usuario","TITLE_DELETE_ACTION":"Eliminar Tarea","LIGHTBOX_TITLE_BLOKING_TASK":"Tarea bloqueada","FIELDS":{"IS_IOCAINE":"Tiene iocaína"},"TITLE_ACTION_IOCAINE":"¿Te sientes fuera de tu zona de confort en una tarea? Asegúrate de que los demás están al tanto de ello, marca el check de la Iocaína al editar una tarea. Igual eu era posible llegar a ser inmune a este veneno mortal a base de consumir pequeñas dosis a lo largo del tiempo, es posible conseguir mejor en lo que estás haciendo si afrontas de vez en cuando esta clase de retos!"},"NOTIFICATION":{"OK":"¡Todo Ok!","WARNING":"¡Cáspitas!, algo no ha ido bien...","WARNING_TEXT":"Nuestros Oompa Loompas están tristes, ¡Tus cambios no fueron guardados!","SAVED":"¡Nuestros Oompa Loompas guardaron todos tus cambios!","CLOSE":"Cerrar notificación","MAIL":"Notificaciones Por Mail","DESKTOP":"Notificaciones de escritorio usando alertas de navegador","ASK_DELETE":"¿Esta seguro que desea eliminar?"},"CANCEL_ACCOUNT":{"TITLE":"Cancelar tu cuenta de usuario","SUBTITLE":"Sentimos mucho que abandones nuestra taiga, esperamos que hayas disfrutado de tu estancia :)","PLACEHOLDER_INPUT_TOKEN":"token de cancelación de cuenta","ACTION_LEAVING":"¡Sí, me largo!","SUCCESS":"Nuestros Oompa Loompas eliminaron tu cuenta"},"CHANGE_EMAIL_FORM":{"TITLE":"Cambiar tu email","SUBTITLE":"̀¡Un click más y tu email se actualizará!","PLACEHOLDER_INPUT_TOKEN":"token de cambio de email","ACTION_CHANGE_EMAIL":"Cambiar email","SUCCESS":"Nuestros Oompa Loompas actualizaron tu correo"},"ISSUES":{"PAGE_TITLE":"Peticiones - {{projectName}}","PAGE_DESCRIPTION":"El panel de peticiones del proyecto {{projectName}}: {{projectDescription}}\n","SECTION_NAME":"Petición","ACTION_NEW_ISSUE":"+ NUEVA PETICIÓN","ACTION_PROMOTE_TO_US":"Promover a Historia de Usuario","ACTION_ATTACH_SPRINT":"Unir petición a Sprint","ACTION_DETACH_SPRINT":"Separar petición de Sprint","PROMOTED":"Esta petición ha sido promovida a la historia:","EXTERNAL_REFERENCE":"Esta petición ha sido creada a partir de ","GO_TO_EXTERNAL_REFERENCE":"Ir al origen","ACTION_DELETE":"Borrar petición","LIGHTBOX_TITLE_BLOKING_ISSUE":"Petición bloqueada","LINK_TASKBOARD":"Panel de tareas","TITLE_LINK_TASKBOARD":"Ir al panel de tareas","FILTER_SPRINTS":"Filtrar Sprints","CHOOSE_SPRINT":"¿Cuál Sprint?","FIELDS":{"PRIORITY":"Prioridad","SEVERITY":"Gravedad","TYPE":"Tipo"},"FILTER_ISSUES":"Filtrar peticiones","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Separar petición de Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Unir petición a Sprint","MESSAGE":"Esta petición actualmente está unida al sprint {{ oldSprintName }}. Estás a punto de quitarla del sprint y unirla al sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promover esta petición a una nueva historia de usuario","MESSAGE":"¿Está seguro de que desea crear una nueva Historia de Usuario a partir de esta Petición?"},"TABLE":{"COLUMNS":{"TYPE":"Tipo","SEVERITY":"Gravedad","PRIORITY":"Prioridad","SUBJECT":"Asunto","VOTES":"Votos","STATUS":"Estado","MODIFIED":"Modificado","ASSIGNED_TO":"Asignado a"},"TITLE_ACTION_CHANGE_STATUS":"Cambio de estado","TITLE_ACTION_ASSIGNED_TO":"Asignado a","BLOCKED":"Bloqueada","EMPTY":{"TITLE":"No hay peticiones a reportar :-)","SUBTITLE":"¿Ha encontrado una petición?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Petición {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{issueStatus }}. Tipo: {{issueType}}, Prioridad: {{issuePriority}}. Gravedad: {{issueSeverity}}. Descripción: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"El panel Kanban, con las historias de usuario del proyecto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Plegar columna","TITLE_ACTION_UNFOLD":"Desplegar columna","TITLE_ACTION_ADD_US":"Añadir Nueva Historia de Usuario","TITLE_ACTION_ADD_BULK":"Añadir nuevas en bloque","ACTION_SHOW_ARCHIVED":"Ver archivados","ACTION_HIDE_ARCHIVED":"Ocultar archivados","HIDDEN_USER_STORIES":"Las historias de usuario en este estado están ocultas por defecto","PLACEHOLDER_CARD_TITLE":"Estas son tus Historias de Usuario","PLACEHOLDER_CARD_TEXT":"Las historias pueden tener tareas para separar los requerimientos"},"SEARCH":{"PAGE_TITLE":"Buscar - {{projectName}}","PAGE_DESCRIPTION":"Busca cualquier cosa: historias de usuario, peticiones, tareas o páginas del wiki en el proyecto {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Épicas","FILTER_USER_STORIES":"Historias de Usuario","FILTER_ISSUES":"Peticiones","FILTER_TASKS":"Tareas","FILTER_WIKI":"Páginas del Wiki","PLACEHOLDER_SEARCH":"Buscar...","TITLE_ACTION_SEARCH":"buscar","EMPTY_TITLE":"Parece que no se ha encontrado nada con tus criterios de búsqueda.","EMPTY_DESCRIPTION":"Prueba con otra pestaña de las de arriba o busca de nuevo"},"TEAM":{"PAGE_TITLE":"Equipo - {{projectName}}","PAGE_DESCRIPTION":"EL panel de equipo, para mostrar a todos los miembros del proyecto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Equipo","PLACEHOLDER_INPUT_SEARCH":"Buscar por nombre completo...","COLUMN_MR_WOLF":"Sr. Lobo","EXPLANATION_COLUMN_MR_WOLF":"Peticiones cerradas","COLUMN_IOCAINE":"Bebedor de Iocaína","EXPLANATION_COLUMN_IOCAINE":"Dósis de iocaína ingeridas","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Páginas del Wiki editadas","COLUMN_BUG_HUNTER":"Cazador de Bugs","EXPLANATION_COLUMN_BUG_HUNTER":"Peticiones reportadas","COLUMN_NIGHT_SHIFT":"Turno de noche","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tareas cerradas","COLUMN_TOTAL_POWER":"Potencia Total","EXPLANATION_COLUMN_TOTAL_POWER":"Puntos Totales","SECTION_TITLE_TEAM":"Equipo >","SECTION_FILTER_ALL":"Todo","CONFIRM_LEAVE_PROJECT":"¿Esta seguro que desea dejar el proyecto?","ACTION_LEAVE_PROJECT":"Abandonar este proyecto"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Tamaño Max.: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Configuración de Usuario","USER_PROFILE":"Perfil de usuario","CHANGE_PASSWORD":"Cambiar contraseña","EMAIL_NOTIFICATIONS":"Notificaciones por email","DESKTOP_NOTIFICATIONS":"Notificaciones de escritorio","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Notificaciones de escritorio","SECTION_NAME":"Notificaciones por Email","COLUMN_PROJECT":"Proyecto","COLUMN_RECEIVE_ALL":"Recibir Todo","COLUMN_ONLY_INVOLVED":"Estoy involucrado","COLUMN_NO_NOTIFICATIONS":"Sin notificaciones","OPTION_ALL":"Todas","OPTION_INVOLVED":"Involucrado","OPTION_NONE":"Ninguna"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Proyecto","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Proyecto"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Usar imagen por defecto","ACTION_DELETE_ACCOUNT":"Elimina cuenta de Taiga","ACTION_DOWNLOAD_PROFILE":"Descarga el perfil de Taiga","CHANGE_EMAIL_SUCCESS":"¡Revisa tu bandeja de entrada!
    Hemos enviado un mail a tu cuenta
    con instrucciones para establecer tu nueva dirección","CHANGE_PHOTO":"Cambiar foto","FIELD":{"USERNAME":"Nombre de usuario","EMAIL":"Correo","FULL_NAME":"Nombre completo","PLACEHOLDER_FULL_NAME":"Indica tu nombre completo (p. e. Íñigo Montoya)","BIO":"Bio (max. 210 caracteres)","PLACEHOLDER_BIO":"Dinos algo acerca de ti","LANGUAGE":"Idioma","LANGUAGE_DEFAULT":"- usar idioma por defecto -","THEME":"Tema","THEME_DEFAULT":"-- usar tema por defecto --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"última edición el {{lastModifiedDate}} ({{totalEditions}} ediciones en total) Contenido: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Eliminar esta página del wiki","DELETE_LIGHTBOX_TITLE":"Eliminar Página del Wiki","DELETE_LINK_TITLE":"Eliminar enlace de la Wiki","NAVIGATION":{"HOME":"Principal","SECTION_NAME":"MARCADORES","ACTION_ADD_LINK":"Añadir marcador","ALL_PAGES":"Todas las páginas de la wiki"},"SUMMARY":{"TIMES_EDITED":"veces
    editada","LAST_EDIT":"última
    edición","LAST_MODIFICATION":"ultima modificación"},"SECTION_PAGES_LIST":"Todas","PAGES_LIST_COLUMNS":{"TITLE":"Título","EDITIONS":"Ediciones","CREATED":"Creado","MODIFIED":"Modificado","CREATOR":"Creador","LAST_MODIFIER":"Ultimo modificador"}},"HINTS":{"SECTION_NAME":"Consejo","LINK":"Si quieres saber como funciona visita nuestra página de soporte","LINK_TITLE":"Visita nuestra página de soporte","HINT1_TITLE":"¿Sabes que puedes importar y exportar proyectos?","HINT1_TEXT":"Esto permite extraer todos tus datos para moverlos de una instancia de Taiga a otra.\n","HINT2_TITLE":"¿Sabías que puedes crear atributos personalizados?","HINT2_TEXT":"Los equipos ahora pueden crear atributos personalizados como un medio flexible para introducir datos específicos útiles para su flujo de trabajo particular","HINT3_TITLE":"Reordenar tus proyectos para facilitar el acceso a los más relevantes para ti","HINT3_TEXT":"Los 10 primeros proyectos aparecerán en el listado del acceso directo de la barra superior.","HINT4_TITLE":"¿Olvidaste lo que estabas trabajando?","HINT4_TEXT":"No te preocupes, en el dashboard encontrarás las tareas, peticiones e historias de usuario abiertas en el orden en el que trabajste en ellas."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} ha subido un nuevo adjunto en {{obj_name}}\n","US_CREATED":"{{username}} ha creado una nueva historia {{obj_name}} en {{project_name}}","ISSUE_CREATED":"{{username}} ha creado una nueva petición {{obj_name}} en {{project_name}}","TASK_CREATED":"{{username}} ha creado una nueva tarea {{obj_name}} en {{project_name}}","TASK_CREATED_WITH_US":"{{username}} ha creado una nueva tarea {{obj_name}} en {{project_name}} que proviene de la historia {{us_name}}","WIKI_CREATED":"{{username}} ha creado una nueva página de wiki {{obj_name}} en {{project_name}}\n","MILESTONE_CREATED":"{{username}} ha creado un nuevo sprint {{obj_name}} en {{project_name}}","EPIC_CREATED":"{{username}} ha creado una nueva épica {{obj_name}} en {{project_name}}.","EPIC_RELATED_USERSTORY_CREATED":"{{username}} ha relacionado la historia de usuario {{related_us_name}} con la épica {{epic_name}} en {{project_name}}.","NEW_PROJECT":"{{username}} creó el proyecto {{project_name}}","MILESTONE_UPDATED":"{{username}} ha actualizado el sprint {{obj_name}}","US_UPDATED":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la historia {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la historia {{obj_name}} a {{new_value}}","US_UPDATED_POINTS":"{{username}} ha actualizado los puntos de '{{role_name}}' de la historia {{obj_name}} a {{new_value}}","ISSUE_UPDATED":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la petición {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la petición {{obj_name}} a {{new_value}}","TASK_UPDATED":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} a {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} a {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} que proviene de la historia {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} que pertenece a la historia {{us_name}} a {{new_value}}","WIKI_UPDATED":"{{username}} ha actualizado la página del wiki {{obj_name}}","EPIC_UPDATED":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la épica {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} ha actualizado el atrubuto \"{{field_name}}\" de la épica {{obj_name}} a {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la épica {{obj_name}} a ","NEW_COMMENT_US":"{{username}} ha añadido un comentado en la historia {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} ha añadido un comentado en la petición {{obj_name}}","NEW_COMMENT_TASK":"{{username}} ha añadido un comentado en la tarea {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} ha comentado en la épica {{obj_name}}","NEW_MEMBER":"{{project_name}} tiene un nuevo miembro","US_ADDED_MILESTONE":"{{username}} ha añadido la historia {{obj_name}} a {{sprint_name}}","US_MOVED":"{{username}} ha movido la historia {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} ha añadido la historia {{obj_name}} al backlog","BLOCKED":"{{username}} ha bloqueado {{obj_name}}","UNBLOCKED":"{{username}} ha desbloqueado {{obj_name}}","NEW_USER":"{{username}} se ha unido a Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Petición","TASK":"Tarea"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"Al crear una nueva cuenta, acepta nuestras condiciones de servicio y nuestra política de privacidad.","GDPR_ANNOUNCEMENT_TITLE":"Reglamento General de Protección de Datos (RGPD)","GDPR_ANNOUNCEMENT_DESCRIPTION":"Lo viste venir, cierto? Actualiza a nuestros Términos de Servicio","GDPR_ANNOUNCEMENT_INFOLINK":"Por favor lee nuestro anuncio aquí"},"EXTERNAL_APP":{"PAGE_TITLE":"Una aplicación externa requiere autenticación","PAGE_DESCRIPTION":"Una aplicación externa requiere autenticación","AUTHORIZATION_REQUEST":"¿Autoriza {{aplicación}} para que utilice tu cuenta de Taiga?","LOGIN_WITH_ANOTHER_USER":"Ingresar con otro usuario","AUTHORIZE_APP":"Autorizar aplicación","CANCEL":"Cancelar"},"JOYRIDE":{"NAV":{"NEXT":"Siguiente","BACK":"Back","SKIP":"Saltar paso","DONE":"Hecha"},"DASHBOARD":{"STEP1":{"TITLE":"Su proyecto","TEXT":"¡Bienvenido! Aquí encontrarás los proyectos en los que participas."},"STEP2":{"TITLE":"Trabajando en","TEXT":"Aquí encontrarás las Historias de Usuario, Tareas y Peticiones en las que estás trabajando."},"STEP3":{"TITLE":"Observando","TEXT1":"Y aquí encontraras aquellas de tus proyectos sobre las que quieres estar informado.","TEXT2":"Ya estás trabajando con Taiga ;)"},"STEP4":{"TITLE":"Comencemos","TEXT1":"Puedes comenzar creando tu primer proyecto en Taiga","TEXT2":"Buena suerte!"}},"BACKLOG":{"STEP1":{"TITLE":"Resumen del proyecto","TEXT1":"Aquí verás el estado de tu proyecto.","TEXT2":"Puedes cambiar todos los ajustes del proyecto a través de la zona de administración."},"STEP2":{"TITLE":"Product backlog","TEXT":"El backlog es la lista de requerimientos (Historias de Usuario) del proyecto. Aquí es donde planificarás tus sprints"},"STEP3":{"TITLE":"Sprints","TEXT":"Los sprints son periodos cortos de tiempo (normalmente de 2 semanas) durante los cuales un trabajo específico tiene que ser completado y entregado"},"STEP4":{"TITLE":"Historias de Usuario","TEXT":"Estos son los requerimientos de alto nivel. Puedes añadirlos al backlog y arrastrarlos al sprint en el que deban ser completados"}},"KANBAN":{"STEP1":{"TITLE":"Customiza to workflow","TEXT":"Fila las columnas que necesites para asociar los estados the tu workflow en la zona de administración."},"STEP2":{"TITLE":"Historias de usuario y tareas","TEXT":"Las historias de usuario son los requerimientos de alto nivel. Puedes arrastrarlos a las diferentes columnas."},"STEP3":{"TITLE":"Añadir Historias de Usuario","TEXT1":"Puede que quieras añadir una sóla Historia de Usuario (add US icon) o un grupo de ellas (bulk icon)","TEXT2":"Buena suerte!"}}},"DISCOVER":{"PAGE_TITLE":"Descubre proyectos - Taiga","PAGE_DESCRIPTION":"Directorio de búsqueda de Proyectos Públicos en Taiga. Explora los backlogs, timelines, peticiones y equipos. Echa un vistazo a los proyectos que más gustan o más activos. Filtrar por Kanban o Scrum.","DISCOVER_TITLE":"Descubre proyectos","DISCOVER_SUBTITLE":"{projects, plural, one{Un proyecto público por descubrir} other{# proyectos público por descubrir}}\n","MOST_ACTIVE":"Más activos","MOST_ACTIVE_EMPTY":"No hay proyectos con actividad todavía","MOST_LIKED":"Favoritos","MOST_LIKED_EMPTY":"No hay proyectos marcados como FAVORITOS todavía.","VIEW_MORE":"Ver más","FEATURED":"Proyectos Destacados","EMPTY":"No hay proyectos que mostrar para estos criterios de búsqueda.
    ¡Inténtalo de nuevo!","FILTERS":{"ALL":"Todas","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Buscando a gente","WEEK":"Última semana","MONTH":"Último mes","YEAR":"Último año","ALL_TIME":"Todos","CLEAR":"Borrar filtros"},"SEARCH":{"PAGE_TITLE":"Buscar - Descubre proyectos - Taiga","PAGE_DESCRIPTION":"Directorio de búsqueda de Proyectos Públicos en Taiga. Explora los backlogs, timelines, peticiones y equipos. Echa un vistazo a los proyectos que más gustan o más activos. Filtrar por Kanban o Scrum.","INPUT_PLACEHOLDER":"Escribe algo...","ACTION_TITLE":"Buscar","RESULTS":"Resultados de búsqueda"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-fa.json b/dist/v-1547534999795/locales/taiga/locale-fa.json deleted file mode 100644 index 3fd2791..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-fa.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"بله","NO":"خیر","OR":"یا","I_GET_IT":"اوکی گرفتم","LOADING":"در حال بارگذاری ...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"ذخیره کردن","CANCEL":"لغو","ACCEPT":"پذیرفتن","DELETE":"حذف","UNLINK":"حذف پیوند","CREATE":"ایجاد","ADD":"اضافه کردن","COPY_TO_CLIPBOARD":"کپی کردن در کلیپ‌بورد","COPIED_TO_CLIPBOARD":"متن در کلیپ‌بورد کپی شد","EDIT":"ویرایش","DRAG":"درگ","TAG_LINE":"ابزار سریع، رایگان و متن‌باز مدیریت پروژه‌ی شما","TAG_LINE_2":"علاقه‌مندی به پروژه‌ی شما","BLOCK":"مسدود کردن","BLOCK_TITLE":"مسدود کردن این مورد به عنوان مثال در صورتی که وابستگی‌هایی دارد که مطلوب نیست.","BLOCKED":"مسدود شده","UNBLOCK":"حذف مسدودسازی","UNBLOCK_TITLE":"این آیتم را از حالت مسدود خارج کن","BLOCKED_NOTE":"چرا این آیتم مسدود شده است؟","BLOCKED_REASON":"لطفاً علت را توضیح دهید","CREATED_BY":"ایجاد شده توسط {{fullDisplayName}}","CLOSE":"بستن","GO_HOME":"بازگشت به خانه","PLUGINS":"پلاگین","ONE_ITEM_LINE":"در هر خط یک آیتم ...","NEW_BULK":"اضافه کردن گروهی جدید","SUBTASKS":"Subtasks","PREVIOUS":"قبلی","NEXT":"بعدی","LOGOUT":"خروج","EXTERNAL_USER":"کاربر خارجی","GENERIC_ERROR":"یکی از اومپا لومپاهای ما می‌گوید {{error}}.","IOCAINE_TEXT":"این عضو نگران تکمیل این وظیفه است. با کمک شما تدریجاً توانمندتر می‌شود و در حال حاضر به توجه بیشتری نیاز دارد","CLIENT_REQUIREMENT":"نیازمندی‌های مشتری، نیازمندی‌های جدیدی است که قبلاً موجود نبوده و قرار است بخشی از پروژه باشد","TEAM_REQUIREMENT":"لازمه‌های تیم به لازمه‌های گفته می‌شود که باید در پروژه وجود داشته باشید اما هزینه‌ای برای مشتری ندارد","OWNER":"مالکیت پروژه","CAPSLOCK_WARNING":"مراقب باشید! در حال تایپ کردن حروف بزرگ هستید و این فیلد نسبت به بزرگی و کوچکی حروف حساس است.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"آیا مطمئن هستید که می‌خواهید حالت ویرایش را ببندید؟","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"به خاطر داشته باشید که اگر حالت ویرایش را قبل از ذخیره کردن تغییرات ببندید، همه‌ی تغییرات از بین می‌رود","RELATED_USERSTORIES":"استوری‌های کاربری مرتبط","CARD":{"ASSIGN_TO":"اختصاص یافته به","EDIT":"ویرایش کارت","DELETE":"حذف کارت","DELETE_ISSUE":"حذف موضوع","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"مقدار نامعتبر است.","TYPE_EMAIL":"می‌بایست ایمیل معتبر باشد","TYPE_URL":"می‌بایست URL معتبر باشد","TYPE_URLSTRICT":"می‌بایست لینک معتبر باشد","TYPE_NUMBER":"این مقدار می‌بایست عددی معتبر باشد.","TYPE_DIGITS":"این مقدار می‌بایست عددی باشد","TYPE_DATEISO":"این مقدار می‌بایست تاریخی معتبر باشد (سال-ماه-روز).","TYPE_ALPHANUM":"این مقدار می‌بایست غیرعددی باشد","TYPE_PHONE":"این مقدار می‌بایست یک شماره تلفن معتبر باشد","NOTNULL":"این مقدار نمی‌تواند خالی باشد","NOT_BLANK":"این مقدار نمی‌تواند خالی باشد","REQUIRED":"ضروری","REGEXP":"به نظر می‌رسد که این مقدار نامعتبر است","MIN":"این مقدار می‌بایست بزرگ‌تر یا مساوی %s باشد.","MAX":"این مقدار می‌بایست کوچک‌تر یا مساوی %s باشد.","RANGE":"این مقدار می‌بایست بین %s و %s باشد.","MIN_LENGTH":"این مقدار بسیار کوتاه است. می‌بایست حداقل %s حرف داشته باشد.","MAX_LENGTH":"این مقدار بیش از حد طولانی است. می‌بایست حداکثر %s حرف داشته باشد.","RANGE_LENGTH":"طول این مقدار نامعتبر است. می‌بایست بین %s و %s حرف داشته باشد.","MIN_CHECK":"حداقل %s مورد انتخاب کنید.","MAX_CHECK":"می‌بایست %s انتخاب یا کمتر داشته باشید.","RANGE_CHECK":"می‌بایست بین %s الی %s انتخاب داشته باشید.","EQUAL_TO":"این مقدار می‌بایست یکسان باشد","LINEWIDTH":"احتمالاً یک یا چند خط بیش از حد طولانی است. سعی کنید کمتر از %s حرف داشته باشد.","PIKADAY":"فرمت تاریخ نامعتبر، لطفاً از فرمت روز ماه سال (مثل 23 مارس 1984) استفاده کنید"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"ما قبلی","NEXT_MONTH":"ماه بعدی","MONTHS":{"JAN":"ژانویه (دی)","FEB":"فوریه (بهمن)","MAR":"مارس (اسفند)","APR":"آوریل (فروردین)","MAY":"می (اردیبهشت)","JUN":"خرداد","JUL":"جولای (تیر)","AUG":"آگوست (مرداد)","SEP":"سپتامبر (شهریور)","OCT":"اکتوبر (مهر)","NOV":"نوامبر (آبان)","DEC":"دسامبر (آذر)"},"WEEK_DAYS":{"SUN":"یکشنبه","MON":"دوشنبه","TUE":"سه‌شنبه","WED":"چهارشنبه","THU":"پنج‌شنبه","FRI":"جمعه","SAT":"شنبه"},"WEEK_DAYS_SHORT":{"SUN":"یکشنبه","MON":"دوشنبه","TUE":"سه‌شنبه","WED":"چهارشنبه","THU":"پنج‌شنبه","FRI":"جمعه","SAT":"شنبه"}},"SEE_USER_PROFILE":"مشاهده کردن پروفایل {{username }}","USER_STORY":"استوری کاربر","TASK":"وظیفه","ISSUE":"موضوع","EPIC":"Epic","TAGS":{"PLACEHOLDER":"برچسبی وارد کنید","DELETE":"حذف برچسب","ADD":"اضافه کردن برچسب"},"DESCRIPTION":{"EMPTY":"فواصل خالی خسته‌کننده است ... کمی توضیح دهید ...","NO_DESCRIPTION":"بدون توضیح"},"FIELDS":{"SUBJECT":"موضوع","NAME":"ام","URL":"لینک","DESCRIPTION":"وضیحات","VALUE":"ارزش","SLUG":"نام کوتاه","COLOR":"رنگ","IS_CLOSED":"آیا بسته شده؟","STATUS":"عیت","TYPE":"نوع","SEVERITY":"اهمیت","PRIORITY":"اولویت","ASSIGNED_TO":"اختصاص یافته به","ASSIGNED_USERS":"کاربران اختصاص یافته","POINTS":"امتیاز","IS_BLOCKED":"مسدود شده است","REF":"ریفرنس","VOTES":"رأی","SPRINT":"اسپرینت","DUE_DATE":"موعد تحویل","DUE_DATE_REASON":"دلیل موعد تحویل"},"ROLES":{"ALL":"همه"},"ASSIGNED_TO":{"NOT_ASSIGNED":"محول نشده","ASSIGN":"تخصیص","DELETE_ASSIGNMENT":"حذف موارد محوله","REMOVE_ASSIGNED":"حذف امور محوله","TOO_MANY":"... تعداد کاربر زیاد است، فیلتر کنید","CONFIRM_UNASSIGNED":"آیا مطمئن هستید که می‌خواهید آن را آزاد بگذارید؟","TITLE_ACTION_EDIT_ASSIGNMENT":"ویرایش امور محوله","SELF":"اختصاص به من"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"تنظیم موعد تحویل"},"ASSIGNED_USERS":{"ADD":"انتخاب کاربر اختصاص یافته","ADD_ASSIGNED":"اضافه کردن اختصاص یافته","TITLE_LIGHTBOX_DELETE_ASSIGNED":"حذف اختصاص یافته..."},"STATUS":{"CLOSED":"بسته‌شده","OPEN":"باز کردن"},"WATCHERS":{"WATCHERS":"بررسی‌کنندگان","ADD":"اضافه کردن بررسی‌کننده","TITLE_ADD":"اضافه کردن یک عضو پروژه به لیست بررسی‌کنندگان","DELETE":"حذف بررسی‌کننده","TITLE_LIGHTBOX_DELETE_WARTCHER":"حذف بررسی‌کننده..."},"WATCH_BUTTON":{"WATCH":"نظارت","WATCHING":"در حال بررسی","UNWATCH":"خروج از نظارت","WATCHERS":"بررسی‌کنندگان","BUTTON_TITLE":"بررسی یا عدم بررسی این آیتم","COUNTER_TITLE":"{total, plural, one{یک بررسی کننده} other{#بررسی کنندگان}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"رأی مثبت یا منفی برای این آیتم","COUNTER_TITLE":"{total, plural, one{یک رای} other{# آراء}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"ویژگی‌های سفارشی","SAVE":"ذخیره کردن ویژگی سفارشی","EDIT":"ویرایش ویژگی سفارشی","DELETE":"حذف خصوصیت سفارشی","CONFIRM_DELETE":"به خاطر داشته باشید که تمام مقادیر در این ویژگی سفارشی حذف خواهند شد.\nآیا مطمئن هستید؟"},"FILTERS":{"INPUT_PLACEHOLDER":"موضوع یا ریفرنس","TITLE_ACTION_FILTER_BUTTON":"جست‌وجو","TITLE":"فیلترها","TITLE_ACTION_SEARCH":"جست‌وجو","ACTION_SAVE_CUSTOM_FILTER":"ذخیره به عنوان فیلتر سفارشی","PLACEHOLDER_FILTER_NAME":"نام فیلتر را وارد کرده و اینتر را فشار دهید","APPLIED_FILTERS_NUM":"فیلترهای اعمال‌شده","CATEGORIES":{"TYPE":"نوع","STATUS":"عیت","SEVERITY":"اهمیت","PRIORITIES":"اولویت‌ها","TAGS":"برچسب‌ها","ASSIGNED_TO":"اختصاص یافته به","ASSIGNED_USERS":"کاربران اختصاص یافته","ROLE":"قش","CREATED_BY":"ایجاد توسط","CUSTOM_FILTERS":"فیلترهای سفارشی","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"قطعه کد","DB_CLICK":"برای ویرایش دبل‌کلیک کنید","SELECT_LANGUAGE_PLACEHOLDER":"انتخاب زبان","SELECT_LANGUAGE_REMOVE_FORMATING":"حذف فرمت","OUTDATED":"شخصی دیگری زمانی که شما مشغول ویرایش بودید، تغییراتی داده است. نسخه‌ی جدید را در تب فعالیت‌ها بررسی کنید و سپس تغییرات خود را ذخیره کنید","MARKDOWN_HELP":"راهنمایی علامت‌گذاری سینتکس‌ها"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"نمایش epicها","ADD_EPICS":"اضافه کردن epicها","MODIFY_EPICS":"تصحیح epicها","COMMENT_EPICS":"دیدگاه برای epicها","DELETE_EPICS":"حذف epicها"},"SPRINTS":{"NAME":"اسپرینت‌ها","VIEW_SPRINTS":"نمایش اسپرینت‌ها","ADD_SPRINTS":"اضافه کردن اسپرینت‌ها","MODIFY_SPRINTS":"ویرایش اسپرینت‌ها","DELETE_SPRINTS":"حذف اسپرینت‌ها"},"USER_STORIES":{"NAME":"استوری‌های کاربر","VIEW_USER_STORIES":"نمایش استوری‌های کاربری","ADD_USER_STORIES":"اضافه کردن استوری کاربری","MODIFY_USER_STORIES":"ویرایش استوری کاربری","COMMENT_USER_STORIES":"دیدگاه برای استوری‌های کاربری","DELETE_USER_STORIES":"حذف استوری‌های کاربری"},"TASKS":{"NAME":"وظایف","VIEW_TASKS":" نمایش وظایف","ADD_TASKS":"اضافه کردن وظیفه","MODIFY_TASKS":"ویرایش وظایف","COMMENT_TASKS":"دیدگاه وظایف","DELETE_TASKS":"حذف وظایف"},"ISSUES":{"NAME":"موضوعات","VIEW_ISSUES":"نمایش موضوعات","ADD_ISSUES":"اضافه کردن موضوعات","MODIFY_ISSUES":"تصحیح موضوعات","COMMENT_ISSUES":"دیدگاه موضوعات","DELETE_ISSUES":"حذف موضوعات"},"WIKI":{"NAME":"ویکی","VIEW_WIKI_PAGES":"نمایش صفحات ویکی","ADD_WIKI_PAGES":"اضافه کردن صفحات ویکی","MODIFY_WIKI_PAGES":"ویرایش صفحات ویکی","DELETE_WIKI_PAGES":"حذف صفحات ویکی","VIEW_WIKI_LINKS":"نمایش لینک‌های ویکی","ADD_WIKI_LINKS":"اضافه کردن لینک‌های ویکی","DELETE_WIKI_LINKS":"حذف لینک‌های ویکی"}}},"LOGIN":{"PAGE_TITLE":"ورود - تایگا","PAGE_DESCRIPTION":"ورود به تایگا، پلتفرمی برای مدیریت پروژه برای استارت‌آپ‌ها و توسعه‌دهندگان سریع و طراحانی که به دنبال ابزاری زیبا و ساده برای لذت بردن از کارشان هستند."},"AUTH":{"INVITED_YOU":"از شما برای ملحق شدن به پروژه دعوت کرده است","NOT_REGISTERED_YET":"تاکنون ثبت نام نکرده‌اید؟","REGISTER":"ثبت نام","CREATE_ACCOUNT":"حساب کاربری رایگان بسازید"},"LOGIN_COMMON":{"HEADER":"قبلاً در تایگا ثبت نام کرده‌ام","PLACEHOLDER_AUTH_NAME":"نام کاربری یا ایمیل (حساس به بزرگی و کوچکی حروف)","LINK_FORGOT_PASSWORD":"آن را فراموش کرده‌اید؟","TITLE_LINK_FORGOT_PASSWORD":"آیا رمز عبورتان را فراموش کرده‌اید؟","ACTION_ENTER":"ورود","ACTION_SIGN_IN":"ورود","PLACEHOLDER_AUTH_PASSWORD":"رمز عبور (حساس به حروف بزرگ و کوچک)","ALT_LOGIN":"یا لاگین کنید با"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"نام کاربری یا ایمیل و یا رمز عبور اشتباه است.","SUCCESS":"به تایگا خوش آمدید."},"REGISTER":{"PAGE_TITLE":"ثبت نام - تایگا","PAGE_DESCRIPTION":"حساب کابری خود را برای استفاده از تایگا بسازید. تایگا پلتفرم مدیریت پروژه برای استارت‌آپ‌ها و توسعه‌دهندگان سریع و طراحانی است که به دنبال ابزاری زیبا و ساده برای لذت بردن از کارشان هستند."},"REGISTER_FORM":{"TITLE":"ایجاد حساب کاربری جدید در تایگا (رایگان)","PLACEHOLDER_NAME":"نام کاربری (حساس به حروف بزرگ و کوچک)","PLACEHOLDER_FULL_NAME":"نام کامل خود را وارد کنید","PLACEHOLDER_EMAIL":"ایمیل شما","PLACEHOLDER_PASSWORD":"رمز عبور جدید انتخاب کنید (حساس به حروف بزرگ و کوچک)","ACTION_SIGN_UP":"ثبت نام","TITLE_LINK_LOGIN":"ورود","LINK_LOGIN":"آیا قبلاً ثبت‌نام کرده‌اید؟ وارد شوید"},"FORGOT_PASSWORD":{"PAGE_TITLE":"پسورد خود را فراموش کرده‌اید - تایگا","PAGE_DESCRIPTION":"نام کاربری یا ایمیل خود را برای دریافت رمز عبور جدید وارد کنید تا مجدداً به تایگا دسترسی پیدا کنید."},"FORGOT_PASSWORD_FORM":{"TITLE":"اوپس!‍ آیا رمز عبور خود را فراموش کرده‌اید؟","SUBTITLE":"نام کاربری یا ایمیل خود را برای دریافت رمز جدید وارد کنید","PLACEHOLDER_FIELD":"نام کاربری یا ایمیل","ACTION_RESET_PASSWORD":"ریست کردن رمز عبور","LINK_CANCEL":"بازگشت به مرحله قبل. فکر میکنم رمز عبور خود را به خاطر آوردم.","SUCCESS_TITLE":"ایمیل خود را چک کنید!","SUCCESS_TEXT":"ایمیلی حاوی دستورالعمل تنظیم رمز عبور جدید برایتان ارسال کردیم","ERROR":"بنابر اومپا لومپای ما، شما هنوز ثبت نام نکرده‌اید."},"CHANGE_PASSWORD":{"PAGE_TITLE":"تغییر رمز عبور - تایگا","SECTION_NAME":"تغییر رمز عبور","FIELD_CURRENT_PASSWORD":"رمز عبور فعلی","PLACEHOLDER_CURRENT_PASSWORD":"رمز عبور فعلی (اگر تاکنون رمز عبوری انتخاب نکرده‌اید، خالی بگذارید)","FIELD_NEW_PASSWORD":"پسورد جدید","PLACEHOLDER_NEW_PASSWORD":"وارد کردن رمز عبور جدید","FIELD_RETYPE_PASSWORD":"رمز عبور جدید را مجدداً وارد کنید","PLACEHOLDER_RETYPE_PASSWORD":"ورود مجدد رمز عبور جدید","ERROR_PASSWORD_MATCH":"رمز عبورها یکسان نیست"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"ایجاد پسورد جدید تایگا","SUBTITLE":"و شاید دلتان بخواهد کمی غذای دارای آهن بخورید! برای مغز شما خوب است :p","PLACEHOLDER_NEW_PASSWORD":"رمز عبور جدید","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"ورود مجدد رمز عبور","ACTION_RESET_PASSWORD":"ریست کردن رمز عبور","ERROR":"اومپا لومپای ما درخواست مربوط به بازیابی رمز عبور شما را پیدا نمی‌کند. دوباره درخواست کنید.","SUCCESS":"اومپا لومپای ما رمز عبور جدید شما را ذخیره کرده است.
    تلاش برایورودبا رمز عبور جدید."},"INVITATION":{"PAGE_TITLE":"پذیرش دعوت - تایگا","PAGE_DESCRIPTION":"پذیرش دعوت برای ملحق شدن به پروژه‌ای در تایگا، پلتفرمی برای مدیریت پروژه برای استارت‌آپ‌ها، توسعه‌دهندگان و طراحان سریع که به ابزاری زیبا و ساده برای لذت بردن از کارشان علاقه دارند."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"اومپا لومپای ما دعوتنامه‌ی شما را پیدا نمی‌کند.","SUCCESS":"با موفقیت به این پروژه ملحق شدید. به {{project_name}} خوش آمدید."},"HOME":{"PAGE_TITLE":"خانه - تایگا","PAGE_DESCRIPTION":"صفحه‌ی خانه‌ی تایگا شامل پروژه‌های اصلی شما و تمام استوری‌های کاربری مربوط به شما و موارد بررسی شده، وظایف و موضوعات","EMPTY_WORKING_ON":"خلوت است، نه؟کار با تایگا را شروع کنید تا در این بخش استوری‌ها، وظایف و موضوعاتی که روی آن کار می‌کنید را مشاهده کنید.","EMPTY_WATCHING":"دنبال کردناستوری‌های کاربران، وظایف، موضوعات در پروژه‌های شما و دریافت نوتیفیکیشن در مورد تغییرات :)","EMPTY_PROJECT_LIST":"در حال حاضر پروژه‌ای ندارید","WORKING_ON_SECTION":"در حال کار روی","WATCHING_SECTION":"در حال بررسی","DASHBOARD":"داشبورد پروژه‌ها"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"لیست پروژه‌ {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ اضافه کردن EPIC","UNASSIGNED":"آزاد"},"EMPTY":{"TITLE":"به نظر می‌رسد که هنوز هیچ epicی وجود ندارد","EXPLANATION":"Epicها آیتم‌های سطح بالایی هستند که شامل استوری‌های کاربر می‌شوند.
    Epicها در صدر رده‌بندی هستند و به کمک آنها می‌توان استوری‌های کاربر را گروه‌بندی کرد.","HELP":"در مورد epicها بیشتر بدانید"},"TABLE":{"VOTES":"رأی","NAME":"ام","PROJECT":"پروژه","SPRINT":"اسپرینت","ASSIGNED_TO":"محول شده","STATUS":"عیت","PROGRESS":"پیشرفت","VIEW_OPTIONS":"تنظیمات نمایش"},"CREATE":{"TITLE":"Epic جدید","PLACEHOLDER_DESCRIPTION":"متنی توضیحی برای درک بهتر این epic توسط دیگران اضافه کنید","TEAM_REQUIREMENT":"الزامات تیم","CLIENT_REQUIREMENT":"الزامات مشتری","BLOCKED":"مسدودشده","BLOCKED_NOTE_PLACEHOLDER":"چرا این epic‌ مسدود شده؟","CREATE_EPIC":"ایجاد epic"}},"PROJECTS":{"PAGE_TITLE":"پروژه‌های من - تایگا","PAGE_DESCRIPTION":"لیستی از تمام پروژه‌های شما، می‌توانید ترتیب را تغییر دهید یا مورد جدیدی ایجاد کنید.","MY_PROJECTS":"پروژه‌های من"},"ATTACHMENT":{"SECTION_NAME":"پیوست‌ها","TITLE":"{{ fileName }} آپلودشده در تاریخ {{ date }}","LIST_VIEW_MODE":"حالت نمایش لیستی","GALLERY_VIEW_MODE":"شیوه‌ی نمایش گالری","DESCRIPTION":"توضیح کوتاهی اضافه کنید","DEPRECATED":"(منسوخ‌شده)","DEPRECATED_FILE":"منسوخ شده؟","ADD":"اضافه کردن پیوست جدید. . {{maxFileSizeMsg}}","DROP":"پیوست‌ها را اینجا رها کنید!","SHOW_DEPRECATED":"+ نمایش پیوست‌های منسوخ‌شده","HIDE_DEPRECATED":"- پیوست‌های منسوخ‌شده را مخفی کن","COUNT_DEPRECATED":"({{ counter }} منسوخ شده)","MAX_UPLOAD_SIZE":"بیشترین حجم مجاز برای آپلود فایل {{maxFileSize}} است","DATE":"روز ماه سال [at] ساعت:دقیقه","ERROR_UPLOAD_ATTACHMENT":"آپلود فایل با مشکل مواجه شد '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"حذف پیوست ...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"پیوست '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"حذف با مشکل مواجه شد: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) بیش از حد مجاز است. فایلی با حجم کمتر از ({{maxFileSize}}) انتخاب کنید"},"PAGINATION":{"PREVIOUS":"قبلی","NEXT":"بعدی"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"ویرایش مقدار","TITLE_ACTION_DELETE_VALUE":"حذف کردن مقدار","TITLE_ACTION_DELETE_TAG":"حذف برچسب"},"HELP":"نیازمند کمک هستید؟ به صفحه‌ی پشتیبانی ما مراجعه کنید!","PROJECT_DEFAULT_VALUES":{"TITLE":"حذف کردن مقدار","SUBTITLE":"مقدار پیش‌فرض برای تمام ورودی‌های انتخابی را تنظیم کنید."},"MEMBERSHIPS":{"TITLE":"مدیریت اعضا","PAGE_TITLE":"عضویت‌ها - {{projectName}}","ADD_BUTTON":"+ افزودن عضو جدید","ADD_BUTTON_TITLE":"اضافه کردن عضو جدید","UPGRADE_BUTTON":"برنامه را ارتقا بده","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"این پروژه به محدودیت ({{members}})عضو مجاز خود رسیده است. اگر می‌خواهید محدودیت را افزایش دهید، با ادمین تماس بگیرید."},"PROJECT_EXPORT":{"TITLE":"خروجی","SUBTITLE":"خروجی گرفتن از پروژه برای ذخیره کردن بکاپ یا ایجاد پروژه مبتنی بر این پروژه.","EXPORT_BUTTON":"خروجیجی","EXPORT_BUTTON_TITLE":"خروجی گرفتن از پروژه","LOADING_TITLE":"در حال ایجاد فایل عیب‌یابی","DUMP_READY":"فایل عیب‌یابی شما آماده است!","LOADING_MESSAGE":"لطفاً این صفحه را نبندید.","ASYNC_MESSAGE":"زمانی که خاتمه یافت، ایمیلی ارسال می‌کنیم.","SYNC_MESSAGE":"اگر دانلود به صورت خودکار آغاز نشده، اینجا کلیک کنید.","ERROR":"اومپا لومپای ما در ایجاد فایل عیب‌یابی با مشکل روبرو شده است. مجدداً تلاش کنید.","ERROR_BUSY":"متأسفیم، اومپا لومپای ما در حال حاضر به شدت مشغول است. پس از چند دقیقه مجدداً تلاش کنید."},"MODULES":{"TITLE":"ماژول‌ها","EPICS":"Epics","EPICS_DESCRIPTION":"مدیریت کردن و ترسیم گرافیکی مهم‌ترین بخش‌های استراتژیکی پروژه","BACKLOG":"گزارش امور ناتمام","BACKLOG_DESCRIPTION":"مدیریت کردن استوری‌های کاربری برای حفظ نظم نمایش کارهای بعدی و در اولویت.","NUMBER_SPRINTS":"پیش‌بینی تعداد اسپرینت‌ها","NUMBER_SPRINTS_HELP":"برای عدد نامشخص، 0 وارد کنید","NUMBER_US_POINTS":"مجموع امتیاز استوری‌ها به صورت تخمینی","NUMBER_US_POINTS_HELP":"برای عدد نامشخص، صفر وارد کنید","KANBAN":"Kanban","KANBAN_DESCRIPTION":"مرتب کردن پروژه‌ها به صورت جمع و جور در این بورد","ISSUES":"موضوعات","ISSUES_DESCRIPTION":"دنبال کردن باگ‌ها، سوالات و بهینه‌سازی‌های مربوط به پروژه‌ی شما. هیچ موردی را از دست ندهید!","WIKI":"ویکی","WIKI_DESCRIPTION":"اضافه کردن، ویرایش یا حذف محتوا در ارتباط با دیگران. اینجا مکان خوبی برای مستندسازی پروژه‌های شماست.","MEETUP":"ملاقات","MEETUP_DESCRIPTION":"سیستم ویدیوکنفرانس خود را انتخاب کنید","SELECT_VIDEOCONFERENCE":"انتخاب سیستم ویدیوکنفرانس","SALT_CHAT_ROOM":"پیشوندی برای نام چت‌روم انتخاب کنید","JITSI_CHAT_ROOM":"جیسی","APPEARIN_CHAT_ROOM":"نمایان‌شده در","TALKY_CHAT_ROOM":"تاکی","CUSTOM_CHAT_ROOM":"سفارشی","URL_CHAT_ROOM":"لینک چت‌روم شما"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - پروفایل پروژه - {{projectName}}","PROJECT_DETAILS":"جزئیات پروژه","PROJECT_NAME":"نام پروژه","TAGS":"برچسب‌ها","DESCRIPTION":"وضیحات","RECRUITING":"آیا این پروژه به دنبال افراد است؟","RECRUITING_MESSAGE":"به دنبال چه کسی هستید؟","RECRUITING_PLACEHOLDER":"پروفایلی که به دنبال آن هستید را تعریف کنید","FEEDBACK":"دریافت بازخورد از کاربران تایگا؟","PUBLIC_PROJECT":"پروژه‌ی عمومی","PRIVATE_PROJECT":"پروژه‌ی خصوصی","PRIVATE_OR_PUBLIC":"تفاوت بین پروژه‌ی خصوصی و عمومی چیست؟","DELETE":"حذف کردن این پروژه","CHANGE_LOGO":"تغییر لوگو","ACTION_USE_DEFAULT_LOGO":"استفاده از تصویر پیش‌فرض","MAX_PRIVATE_PROJECTS":"شما به محدودیت تعداد پروژه‌های خصوصی پلن کاربری فعلی خود رسیده‌اید","MAX_PRIVATE_PROJECTS_MEMBERS":"تجاوز از حداکثر تعداد اعضای پروژه‌‌های خصوصی","MAX_PUBLIC_PROJECTS":"متأسفانه به سقف تعداد پروژه‌های عمومی که در پلن فعلی مجاز است، رسیده‌اید","MAX_PUBLIC_PROJECTS_MEMBERS":"پروژه به حداکثر تعداد اعضای پروژه‌های عمومی رسیده است","PROJECT_OWNER":"مالکیت پروژه","REQUEST_OWNERSHIP":"درخواست مالکیت","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"آیا می‌خواهید مالک جدید پروژه شوید؟","REQUEST_OWNERSHIP_DESC":"درخواست از مالک پروژه‌ {{name}} برای انتقال مالکیت این پروژه به شما","REQUEST_OWNERSHIP_BUTTON":"درخواست","REQUEST_OWNERSHIP_SUCCESS":"ما به مالک پروژه اطلاع می‌دهیم","CHANGE_OWNER":"تغییر مالک","CHANGE_OWNER_SUCCESS_TITLE":"بسیار خب، درخواست شما ارسال شده است!","CHANGE_OWNER_SUCCESS_DESC":"ما از طریق ایمیل اطلاع می‌دهیم که درخواست مالکیت پروژه‌ تأیید شده و یا رد شده است"},"REPORTS":{"TITLE":"گزارشات","SUBTITLE":"خروجی گرفتن از اطلاعات پروژه به صورت فایل CSV و ایجاد گزارش","DESCRIPTION":"فایل CSV یا لینک ایجادشده را کپی کنید و آن را در نرم‌افزار ویرایش متن یا اکسل باز کنید تا گزارش پروژه‌ی خود را تشکیل دهید. می‌توانید تمام داده‌ها را آنالیز کنید و نمودارهای گرافیکی ترسیم کنید.","HELP":"چگونه از این در شیت خود استفاده کنم؟","REGENERATE_TITLE":"تغییر URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"گزارش epicها","SECTION_TITLE_US":"گزارشات استوری‌های کاربر","SECTION_TITLE_TASK":"گزارشات وظایف","SECTION_TITLE_ISSUE":"گزارشات موضوعات","DOWNLOAD":"دانلود CSV","URL_FIELD_PLACEHOLDER":"لطفاً لینک CSV را مجدداً ایجاد کن","TITLE_REGENERATE_URL":"بازسازی لینک CSV","ACTION_GENERATE_URL":"ایجاد URL","ACTION_REGENERATE":"بازسازی","TITLE_DELETE_URL":"حذف آدرس CSV","ACTION_DELETE_URL":"حذف"},"CUSTOM_FIELDS":{"TITLE":"ویژگی‌های سفارشی","SUBTITLE":"ویژگی‌های سفارشی برای استوری‌های کاربر، وظایف و موضوعات مشخص کنید","EPIC_DESCRIPTION":"ویژگی‌های سفارشی Epicها","EPIC_ADD":"اضافه کردن ویژگی سفارشی جدید در epicها","US_DESCRIPTION":"ویژگی‌های سفارشی استوری‌های کاربر","US_ADD":"اضافه کردن ویژگی سفارشی جدید در استوری‌های کاربر","TASK_DESCRIPTION":"ویژگی‌های سفارشی وظایف","TASK_ADD":"اضافه کردن ویژگی جدید در وظایف","ISSUE_DESCRIPTION":"ویژگی‌های سفارشی موضوعات","ISSUE_ADD":"اضافه کردن ویژگی سفارشی در موضوعات","FIELD_TYPE_TEXT":"متن","FIELD_TYPE_RICHTEXT":"متن دارای فرمت","FIELD_TYPE_MULTI":"چند خطی","FIELD_TYPE_DATE":"تاریخ","FIELD_TYPE_URL":"URL","FIELD_TYPE_DROPDOWN":"دراپ داون","FIELD_TYPE_CHECKBOX":"چک باکس","FIELD_TYPE_NUMBER":"اعداد"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - مقادیر پروژه - {{projectName}}","REPLACEMENT":"تمام آیتم‌هایی که این مقدار را دارند، تغییر می‌کنند به","ERROR_DELETE_ALL":"نمی‌توانید تمام مقادیر را حذف کنید."},"PROJECT_VALUES_POINTS":{"TITLE":"امتیاز","SUBTITLE":"امتیاز تخمینی استوری کاربری خود را مشخص کنید","US_TITLE":"امتیاز استوری‌های کاربری","ACTION_ADD":"اضافه کردن امتیاز"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"اولویت‌ها","SUBTITLE":"اولویت‌های موضوعات خود را مشخص کنید","ISSUE_TITLE":"اولویت موضوعات","ACTION_ADD":"اضافه کردن اولویت جدید"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"میزان اهمیت","SUBTITLE":"میزان اهمیت (وخامت) موضوع را مشخص کنید","ISSUE_TITLE":"اهمیت (وخامت) موضوع","ACTION_ADD":"اضافه کردن اهمیت جدید"},"PROJECT_VALUES_STATUS":{"TITLE":"وضعیت‌ها","SUBTITLE":"مشخص کردن وضعیت آینده‌ی استوری‌های کاربری، وظایف و موضوعات شما","EPIC_TITLE":"وضعیت Epicها","US_TITLE":"وضعیت‌های استوری‌های کاربر","TASK_TITLE":"وضعیت وظایف","ISSUE_TITLE":"وضعیت موضوعات"},"PROJECT_VALUES_TYPES":{"TITLE":"انواع","SUBTITLE":"نوع موضوع خود را مشخص کنید","ISSUE_TITLE":"انواع موضوعات","ACTION_ADD":"اضافه کردن {{objName}} جدید"},"PROJECT_VALUES_TAGS":{"TITLE":"برچسب‌ها","SUBTITLE":"مشاهده و ویرایش رنگ برچسب‌ها","EMPTY":"در حال حاضر برچسبی وجود ندارد","EMPTY_SEARCH":"در ارتباط با آنچه جست‌وجو کرده‌اید، چیزی پیدا نشد","ACTION_ADD":"اضافه کردن برچسب","NEW_TAG":"برچسب جدید","MIXING_HELP_TEXT":"انتخاب کردن برچسب‌ها برای ترکیب","MIXING_MERGE":"ترکیب برچسب‌ها","SELECTED":"انتخاب شده"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"موعدهای تحویل","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"اضافه کردن وضعیت جدید","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"وضعیت موعد سر رسید گزارش","DAYS_TO_DUE_DATE":"تعداد روز مانده تا موعد تحویل","BEFORE_AFTER":"قبل/بعد","BEFORE":"قبل","AFTER":"گذشته"},"ROLES":{"PAGE_TITLE":"نقش‌ها - {{projectName}}","WARNING_NO_ROLE":"مراقب باشید، هیچ نقشی در پروژه‌ی شما قادر به تخمین ارزش امتیازات استوری‌های کاربر نیست","HELP_ROLE_ENABLED":"اگر فعال شود، اعضایی با این نقش می‌توانند امتیاز استوری‌های کاربری را تخمین بزنند","DISABLE_COMPUTABLE_ALERT_TITLE":"آیا مطمئن هستید که می‌خواهید تخمین‌های این نقش را غیرفعال کنید؟","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"اگر مجوز تخمین را برای نقش {{roleName}} غیرفعال کنید، تمام تخمین‌های قبلی که توسط این نقش ایجاد شده، حذف می‌شود","COUNT_MEMBERS":"{{ role.members_count }} عضو با این نقش","TITLE_DELETE_ROLE":"حذف نقش","REPLACEMENT_ROLE":"تمام اعضای دارای این نقش منتقل می‌شوند به","WARNING_DELETE_ROLE":"مراقب باشید! تمام تخمین‌های نقش، حذف می‌شود","ERROR_DELETE_ALL":"نمی‌توانید تمام مقادیر را حذف کنید","EXTERNAL_USER":"کاربر خارجی","NOTE_EXTERNAL_USERS":"توجه: منظور از کاربر خارجی هر کاربر ناشناسی است که در پلتفرم تایگا عضویت ندارد، مثل موتورهای جست‌وجو. لطفاً در استفاده از این نقش دقت کنید."},"THIRD_PARTIES":{"SECRET_KEY":"کلید رمزی","PAYLOAD_URL":"لینک ظرفیت","VALID_IPS":"آی‌پی‌های معتبر منبع (که با کاما جدا شده است)"},"BITBUCKET":{"SECTION_NAME":"بیت‌باکت","PAGE_TITLE":"بیت‌باکت - {{projectName}}","INFO_VERIFYING_IP":"درخواست‌های بیت‌باکت ثبت نشده‌اند لذا بهترین راه تأیید منبع، استفاده از IP است. اگر فیلد خالی باشد، تأیید IP انجام نمی‌شود."},"GITLAB":{"SECTION_NAME":"گیتلب","PAGE_TITLE":"گیت‌لب - {{projectName}}","INFO_VERIFYING_IP":"درخواست‌های گیت‌لب امضا نشده‌اند لذا بهترین راه برای تأیید منبع، استفاده از IP است. اگر فیلد خالی باشد، تأییدیه‌ی IP در کار نخواهد بود."},"GITHUB":{"SECTION_NAME":"گیت‌هاب","PAGE_TITLE":"گیت‌هاب - {{projectName}}"},"GOGS":{"SECTION_NAME":"گاگ‌ها","PAGE_TITLE":"گاگ‌ها - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"وب‌هوک‌ها - {{projectName}}","SECTION_NAME":"وب‌هوک‌ها","ADD_NEW":"اضافه کردن وب‌هوک جدید","TYPE_NAME":"نام سرویس را وارد کنید","TYPE_PAYLOAD_URL":"URL ظرفیت سرویس را وارد کنید","TYPE_SERVICE_SECRET":"کلید رمزی سرویس را وارد کنید","SAVE":"ذخیره کردن وب‌هوک","CANCEL":"لغو وب‌هوک","SHOW_HISTORY":"(نمایش سوابق)","TEST":"تست وب‌هوک","EDIT":"ویرایش وب‌هوک","DELETE":"حذف وب‌هوک","REQUEST":"درخواست","RESEND_REQUEST":"ارسال دوباره‌ی درخواست","HEADERS":"هدرها","PAYLOAD":"ظرفیت","RESPONSE":"پاسخ","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(مخفی کردن سوابق)","ACTION_HIDE_HISTORY_TITLE":"مخفی کردن جزئیات سوابق","ACTION_SHOW_HISTORY":"(نمایش سوابق)","ACTION_SHOW_HISTORY_TITLE":"نمایش جزئیات سوابق","WEBHOOK_NAME":"وب‌هوک '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - خواص سفارشی - {{projectName}}","ADD":"اضافه کردن ویژگی سفارشی","EDIT":"ویرایش ویژگی سفارشی","DELETE":"حذف ویژگی‌های سفارشی","SAVE_TITLE":"ذخیره کردن ویژگی سفارشی","CANCEL_TITLE":"لغو ایجاد","SET_FIELD_NAME":"نام ویژگی سفارشی","SET_FIELD_DESCRIPTION":"توضیحات ویژگی سفارشی شما","FIELD_TYPE_DEFAULT":"-- یکی را انتخاب کنید --","ACTION_UPDATE":"بروزرسانی ویژگی سفارشی","ACTION_CANCEL_EDITION":"لغو ویرایش"},"MEMBERSHIP":{"COLUMN_MEMBER":"عضو","COLUMN_ADMIN":"ادمین","COLUMN_ROLE":"قش","COLUMN_STATUS":"عیت","STATUS_ACTIVE":"فعال","STATUS_PENDING":"در انتظار","DELETE_MEMBER":"حذف عضو","RESEND":"ارسال مجدد","SUCCESS_SEND_INVITATION":"ما مجدداً دعوتنامه‌ای به '{{email}}' ارسال کرده‌ایم.","SUCCESS_DELETE":"پیام {{message}} را حذف کرده‌ایم","ERROR_DELETE":"نمی‌توانیم حذف کنیم {{message}}.","DEFAULT_DELETE_MESSAGE":"دعوتنامه برای {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"مقدار پیش‌فرض برای سلکتور وضعیت epic","LABEL_US_STATUS":"مقدار پیش‌فرض برای سلکتور وضعیت استوری کاربر","LABEL_POINTS":"مقدار پیش‌فرض برای سلکتور امتیاز","LABEL_TASK_STATUS":"مقدار پیش‌فرض برای سلکتور انتخاب وظیفه","LABEL_ISSUE_TYPE":"مقدار پیش‌فرض برای سکتور نوع موضوع","LABEL_ISSUE_STATUS":"مقدار پیش‌فرض برای سلکتور وضعیت","LABEL_PRIORITY":"مقدار پیش‌فرض برای سلکتور اولویت","LABEL_SEVERITY":"مقدار پیش‌فرض برای سکتور میزان اهمیت"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"نامی برای وضعیت جدید وارد کنید","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"نامی برای المان جدید بنویسید"},"US_STATUS":{"ACTION_ADD_STATUS":"اضافه کردن وضعیت جدید","IS_ARCHIVED_COLUMN":"آرشیو‌شده","IS_CLOSED_COLUMN":"بسته‌شده","WIP_LIMIT_COLUMN":"محدودیت WIP","PLACEHOLDER_WRITE_NAME":"نامی برای وضعیت جدید وارد کنید"},"MENU":{"PROJECT":"پروژه","ATTRIBUTES":"خواص","MEMBERS":"اعضا","PERMISSIONS":"دسترسی‌ها","INTEGRATIONS":"مجتمع‌سازی‌ها"},"SUBMENU_PROJECT_VALUES":{"STATUS":"وضعیت","POINTS":"امتیاز","PRIORITIES":"اولویت‌ها","SEVERITIES":"میزان اهمیت","TYPES":"انواع","CUSTOM_FIELDS":"ویژگی‌های سفارشی","TAGS":"برچسب‌ها","DUE_DATES":"موعد سر رسید"},"SUBMENU_ROLES":{"TITLE":"نقش‌ها","ACTION_NEW_ROLE":"+ نقش جدید","TITLE_ACTION_NEW_ROLE":"اضافه کردن نقش جدید"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"آیا می‌خواهید مالک جدید پروژه شوید؟","PRIVATE":"خصوصی","ACCEPTED_PROJECT_OWNERNSHIP":"تبریک! اکنون مالک پروژه هستید","REJECTED_PROJECT_OWNERNSHIP":"بسیار خب. با مالک فعلی پروژه تماس می‌گیریم.","ACCEPT":"پذیرفتن","REJECT":"رد","PROPOSE_OWNERSHIP":"{{owner}}، مالک فعلی پروژه‌ی {{project}} از شما خواسته که مالک جدید پروژه باشید.","ADD_COMMENT":"آیا می‌خواهید نظری برای مالک پروژه اضافه کنید؟","UNLIMITED_PROJECTS":"نامحدود","OWNER_MESSAGE":{"PRIVATE":"به خاطر داشته باشید که شما می‌توانید مالک حداکثر {{maxProjects}} پروژه‌ی شخصی باشید. در حال حاضر {{currentProjects}} پروژه‌ی شخصی دارید","PUBLIC":"به خاطر داشته باشید که شما می‌توانید مالک حداکثر {{maxProjects}} پروژه‌ی عمومی باشید. در حال حاضر {{currentProjects}} پروژه‌ی عمومی دارید"},"CANT_BE_OWNED":"در حال حاضر نمی‌توانید مالک پروژه‌ای از این نوع شوید. اگر می‌خواهید مالک این پروژه شوید، لطفاً با ادمین تماس بگیرید تا تنظیمات حساب شما را برای فعالسازی مالکیت پروژه تغییر دهد."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"ویرایش پروفایل","CLOSED_US":"استوری کاربری بسته‌شده","PROJECTS":"پروژه‌ها","PROJECTS_EMPTY":"{{username}} تاکنون پروژه‌ای نداشته است.","CONTACTS":"مخاطبین","CONTACTS_EMPTY":"{{username}} تاکنون مخاطبی ندارد","CURRENT_USER_CONTACTS_EMPTY":"شما هنوز مخاطبی ندارید","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"افرادی که در تایگا با ایشان همکاری می‌کنید، به صورت خودکار به عنوان مخاطبین شما اضافه می‌شوند","TABS":{"ACTIVITY_TAB":"تایم‌لاین","ACTIVITY_TAB_TITLE":"نمایش تمام فعالیت‌های این کاربر","PROJECTS_TAB":"پروژه‌ها","PROJECTS_TAB_TITLE":"لیست تمام پروژه‌هایی که کاربر عضو آن است","LIKES_TAB":"لایک","LIKES_TAB_TITLE":"تمام لایک‌های این کاربر را لیست کن","VOTES_TAB":"رأی","VOTES_TAB_TITLE":"لیست کردن تمام رأی‌های این کاربر","WATCHED_TAB":"نظارت‌شده","WATCHED_TAB_TITLE":"لیست کردن تمام مواردی که توسط این کاربر بررسی شده","CONTACTS_TAB":"مخاطبین","CONTACTS_TAB_TITLE":"لیست تمام مخاطبینی که این کاربر ایجاد کرده"}},"PROFILE_SIDEBAR":{"TITLE":"پروفایل شما","DESCRIPTION":"دیگران می‌توانند اطلاعات شما و آنچه روی آن کار می‌کنید را ببینند. در مورد خودتان توضیحاتی دهید تا دیگران شناخت بهتری در مورد شما پیدا کنند.","ADD_INFO":"ویرایش بیوگرافی"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"چیزی بنویسید ...","FILTER_TYPE_ALL":"همه","FILTER_TYPE_ALL_TITLE":"نمایش همه","FILTER_TYPE_PROJECTS":"پروژه‌ها","FILTER_TYPE_PROJECTS_TITLE":"فقط پروژه‌ها را نمایش بده","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"فقط epicها را نمایش بده","FILTER_TYPE_USER_STORIES":"استوری‌ها","FILTER_TYPE_USER_STORIES_TITLE":"فقط استوری‌های کاربر را نمایش بده","FILTER_TYPE_TASKS":"وظایف","FILTER_TYPE_TASKS_TITLE":"فقط وظایف را نمایش بده","FILTER_TYPE_ISSUES":"موضوعات","FILTER_TYPE_ISSUES_TITLE":"فقط موضوعات را نمایش بده","EMPTY_TITLE":"چیزی برای نمایش وجود ندارد"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"ترتیب پروژه‌های خود را تغییر دهید تا در صدر پروژه‌های پراستفاده قرار گیرند.
    10 پروژه‌ی پراستفاده در لیست پروژه‌های نوار ناوبری بالا نمایش داده می‌شود.","PRIVATE":"پروژه‌ی خصوصی","LOOKING_FOR_PEOPLE":"این پروژه در انتظار عضو است","FANS_COUNTER_TITLE":"{total, plural, one{یک طرفدار} other{# طرفداران}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{یک بررسی کننده} other{#بررسی کنندگان}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{یک عضو} other{# اعضا}}","BLOCKED_PROJECT":{"BLOCKED":"پروژه مسدودشده","THIS_PROJECT_IS_BLOCKED":"این پروژه موقتاً مسدود شده است","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"برای آزاد کردن پروژه‌های خود، با مدیر تماس بگیرید"},"SECTION":{"SEARCH":"جست‌وجو","TIMELINE":"تایم‌لاین","EPICS":"Epics","BACKLOG":"گزارش امور ناتمام","KANBAN":"Kanban","ISSUES":"موضوعات","WIKI":"ویکی","TEAM":"تیم","MEETUP":"ملاقات","ADMIN":"ادمین"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"ایجاد پروژه","MANAGE_PROJECTS":"مدیریت پروژه‌ها","TITLE_CREATE_PROJECT":"ایجاد پروژه","HELP_TITLE":"صفحه‌ی پشتیبانی تایگا","HELP":"راهنمایی","HOMEPAGE":"صفحه‌ی خانه","FEEDBACK_TITLE":"ارسال بازخورد","FEEDBACK":"بازخورد","NOTIFICATIONS_TITLE":"ویرایش تنظیمات نوتیفیکیشن","NOTIFICATIONS":"نوتیفیکیشن‌ها","VIEW_PROFILE_TITLE":"نمایش پروفایل","VIEW_PROFILE":"نمایش پروفایل","EDIT_PROFILE_TITLE":"ویرایش پروفایل","EDIT_PROFILE":"ویرایش پروفایل","CHANGE_PASSWORD_TITLE":"تغییر رمز عبور","CHANGE_PASSWORD":"تغییر رمز عبور","DASHBOARD_TITLE":"داشبورد","DISCOVER_TITLE":"پروژه‌های ترند را کشف کنید","DISCOVER":"کشف"},"LIKE_BUTTON":{"LIKE":"لایک","LIKED":"لایک‌شده","UNLIKE":"دیسلایک","BUTTON_TITLE":"لایک یا دیسلایک کردن این پروژه","COUNTER_TITLE":"{total, plural, one{یک طرفدار} other{# طرفداران}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"نظارت بر این پروژه و تنظیم نوتیفیکیشن‌ها","WATCH":"نظارت","WATCHING":"در حال بررسی","COUNTER_TITLE":"{total, plural, one{یک بررسی کننده} other{#بررسی کنندگان}}","OPTIONS":{"NOTIFY_ALL":"دریافت تمام نوتیفیکیشن‌ها","NOTIFY_ALL_TITLE":"دریافت تمام نوتیفیکیشن‌های مربوط به این پروژه","NOTIFY_INVOLVED":"فقط مرتبط","NOTIFY_INVOLVED_TITLE":"دریافت نوتیفیکیشن تنها در زمانی که شما هم مشارکت دارید","UNWATCH":"خروج از نظارت","UNWATCH_TITLE":"خروج از حالت نظارت این پروژه"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"تماس با تیم پروژه","CONTACT_BUTTON":"تماس با پروژه"},"CREATE":{"TITLE":"ایجاد پروژه","CHOOSE_TEMPLATE":"کدام قالب برای پروژه‌ی شما مناسب‌تر است؟","TEMPLATE_SCRUM":"اسکرام","TEMPLATE_SCRUM_DESC":"وظایف خود را اولویت‌بندی کنید و در بازه‌ی زمانی کوتاه انجام دهید.","TEMPLATE_SCRUM_LONGDESC":"اسکرام روشی برای توسعه‌ی نرم‌افزار به صورت مرحله‌ای سریع و تدریجی است.\nگزارش امور ناتمام محصول چیزی است که با ترتیب مشخصی، ارایه می‌شود. گزارش امور ناتمام پروژه به بخش‌های قابل‌مدیریت و اجرایی به اسم اسپرینت‌ها تقسیم می‌شود.\nمقدار زمانی که تیم برای شروع و تکمیل پیشرفتی جدید و رسیدگی به تعدادی از استوری‌های کاربر در گزارش امور ناتمام نیاز دارد، متناسب با مهارت‌ها، توانمندی‌ها و منابع است. پروژه با خالی شدن گزارش امور ناتمام، اسپرینت می‌کند و تکمیل می‌شود.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"حفظ جریان کاری ثابت در وظایف مستقل","TEMPLATE_KANBAN_LONGDESC":"روش کانبان روشی برای تقسیم توسعه‌ی پروژه (هر نوع پروژه‌ای) به مراحل مختلف است.\nیک کارت کانبان مثل یک کارت اندیس یا یک یادداشت پستی است که جزئیات هر وظیفه (یا استوری کاربری) در پروژه که قرار است تکمیل شود را بیان می‌کند. بورد کانبان برای انتقال هر یک از کارت‌ها از یک وضعیت تکمیل شدن به وضعیت بعدی به کار می‌رود و به این ترتیب برای پیگیری پیشرفت کار مفید است.","DUPLICATE":"تکثیر پروژه","DUPLICATE_DESC":"شروع ساده با حفظ تنظیمات","IMPORT":"وارد کردن پروژه","IMPORT_DESC":"وارد کردن پروژه‌ها از پلتفرم‌های مختلف به تایگا","INVITE":"دعوت به پروژه","SOLO_PROJECT":"شما در این پروژه تنها خواهید بود","INVITE_LATER":"(شما بعداً می‌توانید اعضای جدیدی اضافه کنید)","BACK":"بازگشت","MAX_PRIVATE_PROJECTS":"متأسفانه به محدودیت حداکثر تعداد پروژه‌های شخصی رسیده‌اید.\nاگر می‌خواهید محدودیت فعلی را افزاش دهید، لطفاً با ادمین تماس بگیرید.","MAX_PUBLIC_PROJECTS":"متأسفانه شما به محدودیت تعداد پروژه‌های عمومی رسیده‌اید. اگر می‌خواهید محدودیت فعلی را افزایش دهید، با ادمین تماس بگیرید.","PUBLIC_PROJECT":"پروژه‌های عمومی","PRIVATE_PROJECT":"پروژه‌های خصوصی"},"COMMON":{"DETAILS":"جزئیات پروژه‌ی جدید","PROJECT_TITLE":"نام پروژه","PROJECT_DESCRIPTION":"توضیح پروژه"},"DUPLICATE":{"TITLE":"ایجاد کپی پروژه","DESCRIPTION":"شروع ساده با حفظ تنظیمات","SELECT_PLACEHOLDER":"یکی از پروژه‌های موجود را برای تکثیر انتخاب کنید"},"IMPORT":{"TITLE":"وارد کردن پروژه","DESCRIPTION":"وارد کردن پروژه‌ها از پلتفرم‌های مختلف به تایگا","ASYNC_IN_PROGRESS_TITLE":"اومپا لومپای ما در حال ایمپورت کردن پروژه‌ی شماست","ASYNC_IN_PROGRESS_MESSAGE":"این فرآیند ممکن است چند دقیقه طول بکشد.
    ما در پایان ایمیلی ارسال می‌کنیم","UPLOAD_IN_PROGRESS_MESSAGE":"{{uploadedSize}} از {{totalSize}} آپلود شده","ERROR":"اومپا لومپای ما در وارد کردن داده‌های عیب‌یابی با مشکل روبرو شده. مجدداً تلاش کنید.","ERROR_TOO_MANY_REQUEST":"متأسفیم، اومپا لومپای ما در حال حاضر به شدت مشغول است. پس از چند دقیقه مجدداً تلاش کنید.","ERROR_MESSAGE":"اومپا لومپای ما در وارد کردن داده‌های عیب‌یابی شما با مشکل روبرو شد: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) بیش از حد مجاز است. فایلی با حجم کمتر از ({{maxFileSize}}) انتخاب کنید","SYNC_SUCCESS":"پروژه‌ی شما با موفقیت ایمپورت شد","IMPORT":"وارد کردن","WHO_IS":"وظایف آنها محول می‌شود به...","WRITE_EMAIL":"یا در صورت نیاز ایمیل این کاربر در تایگا را وارد کنید","SEARCH_CONTACT":"و در صورت نیاز، در مخاطبین خود سرچ کنید","WRITE_EMAIL_LABEL":"ایمیل کاربر در تایگا را وارد کنید","ACCEEDE":"اعمال","PROJECT_MEMBERS":"اعضای پروژه","PROCESS_DESCRIPTION":"می‌خواهید به کدام عضو تایگا، وظایف {{platform}} را محول کنید","MATCH":"آیا {{user_external}} همان {{user_internal}} است؟","CHOOSE":"انتخاب کاربر","LINKS":"لینک‌هایی با {{platform}}","LINKS_DESCRIPTION":"آیا می‌خواهید پیوند آیتم‌ها با کارت {{platform}} را حفظ کنید؟","WARNING_MAIL_USER":"توجه کنید که اگر کاربر حساب کاربری تایگا نداشته باشد، نمی‌توانید وظایف را به وی محول کنیم.","ASSIGN":"تخصیص","PROJECT_SELECTOR":{"NO_RESULTS":"در ارتباط با آنچه جست‌وجو کرده‌اید، چیزی پیدا نشد","ACTION_SEARCH":"جست‌وجو","ACTION_BACK":"بازگشت"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"پروژه‌ای که می‌خواهید وارد کنید، {{members}} عضو با احتساب شما دارد. متأسفانه پلن فعلی شما حداکثر {{max_memberships}} عضو در هر پروژه‌ی شخصی می‌پذیرد. اگر می‌خواهید این محدودیت را افزایش دهید، با ادمین تماس بگیرید.","PROJECT_MEMBERS_DESC_PUBLIC":"پروژه‌ای که می‌خواهید وارد کنید، {{members}} عضو با احتساب خودتان دارد. متأسفانه پلن فعلی شما حداکثر {{max_memberships}} عضو در هر پروژه‌ی عمومی می‌پذیرد. اگر می‌خواهید این محدودیت را افزایش دهید، با ادمین تماس بگیرید.","ACCOUNT_ALLOW_MEMBERS":"حساب کاربری شما حداکثر {{members}} می‌پذیرد","PRIVATE_PROJECTS_SPACE":{"TITLE":"متأسفانه پلن فعلی شما امکان اضافه کردن پروژه‌های خصوصی اضافی را ندارد","DESC":"پروژه‌ای که می‌خواهید وارد کنید، شخصی است. متأسفانه پلن فعلی شما امکان اضافه کردن پروژه‌های شخصی بیشتر را ندارد."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"متأسفانه پلن فعلی شما امکان اضافه کردن پروژه‌های عمومی بیشتر را ندارد.","DESC":"پروژه‌ای که می‌خواهید وارد کنید، عمومی است. متأسفانه پلن فعالی شما امکان اضافه کردن پروژه‌های عمومی بیشتر را ندارد."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"پلن فعلی شما حداکثر {{max_memberships}} عضو در هر پروژه‌ی خصوصی می‌پذیرد"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"پلن فعلی شما حداکثر {{max_memberships}} عضو در پروژه‌های عمومی می‌پذیرد."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"متأسفانه پلن فعلی شما امکان اضافه کردن پروژه‌های خصوصی بیشتر یا اضافه کردن بیش از {{max_memberships}} عضو در هر پروژه‌ی خصوصی را ندارد","DESC":"پروژه‌ای که می‌خواهید وارد کنید خصوصی است و {{members}} عضو دارد."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"متأسفانه پلن فعلی شما امکات اضافه کردن پروژه‌های عمومی بیشتر یا افزایش بیش از {{max_memberships}} عضو در هر پروژه‌ی عمومی را ندارد","DESC":"پروژه‌ای که می‌خواهید وارد کنید عمومی است و بیش از {{members}} عضو دارد."}},"IN_PROGRESS":{"TITLE":"وارد کردن پروژه","DESCRIPTION":"این فرآیند کمی طول می‌کشد، لطفاً صفحه را نبندید"},"WARNING":{"TITLE":"برخی وظایف محول نشده‌اند","DESCRIPTION":"هنوز افراد تعریف‌نشده‌ای وجود دارند. کارت‌هایی که به این افراد تخصیص‌یافته، آزاد می‌ماند. تمام مخاطبین را بررسی کنید تا آن اطلاعات را از دست ندهید.","CHECK":"بررسی مخاطبین"},"TAIGA":{"SELECTOR":"وارد کردن پروژه‌ی تایگا"},"TRELLO":{"SELECTOR":"وارد کردن بوردهای ترلو در تایگا","CHOOSE_PROJECT":"انتخاب بوردی که می‌خواهید وارد کنید","NO_PROJECTS":"به نظر می‌رسد که هیچ بوردی در ترلو ندارید"},"GITHUB":{"SELECTOR":"موضوعات پروژه‌های گیت‌هاب خود را وارد کنید","CHOOSE_PROJECT":"پیدا کردن پروژه‌ای که می‌خواهید وارد کنید","NO_PROJECTS":"به نظر می‌رسد که پروژه‌ای در گیت‌هاب ندارید","HOW_DO_YOU_WANT_TO_IMPORT":"چگونه می‌خواهید موضوعات خود را وارد تایگا کنید؟","KANBAN_PROJECT":"مثل استوری‌های کاربری در یک پروژه‌ی کانبان","KANBAN_PROJECT_DESCRIPTION":"پس از آن می‌توانید اسکرام با لیست امور ناتمام را فعال کنید.","SCRUM_PROJECT":"مثل استوری‌های کاربری در پروژه‌ی اسکرام","SCRUM_PROJECT_DESCRIPTION":"پس از آن می‌توانید حالت کانبان را فعال کنید.","ISSUES_PROJECT":"مثل موضوعات","ISSUES_PROJECT_DESCRIPTION":"شما می‌توانید از موضوعات خود در حالت کانبان یا اسکرام استفاده کنید. می‌توانید کانبان یا اسکرام را برای استوری‌های کاربری جدید فعال کنید"},"ASANA":{"SELECTOR":"وارد کردن پروژه‌های Asana و انتخاب نحوه‌ی مدیریت آن","CHOOSE_PROJECT":"انتخاب پروژه برای وارد کردن","NO_PROJECTS":"به نظر می‌رسد که پروژه‌ای در Asana ندارید","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"اسکرام","CREATE_AS_SCRUM_DESCRIPTION":"وظایف و زیروظایف پروژه‌ی شما به صورت استوری‌های کاربری تایگاه و وظایف ایجاد می‌شود.","CREATE_AS_KANBAN_DESCRIPTION":"وظایف و زیروظایف پروژه‌ی شما به صورت استوری‌های کاربری تایگاه و وظایف ایجاد می‌شود."},"JIRA":{"SELECTOR":"وارد کردن پروژه‌ی Jira و انتخاب نحوه‌ی مدیریت کردن آن","HOW_TO_CONFIGURE":"(راهنمای تنظیمات)","CHOOSE_PROJECT":"پروژه یا بوردی که می‌خواهید وارد کنید را انتخاب کنید","NO_PROJECTS":"به نظر می‌رسد که پروژه یا بوردی در Jira ندارید","URL":"لینک Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"اسکرام","ISSUES_PROJECT":"موضوعات","CREATE_AS_SCRUM_DESCRIPTION":"این موضوع و موضوعات زیرمجموعه‌‌ی آن از پروژه‌ی شما، به صورت استوری‌های کاربری و وظایف تایگا ایجاد می‌شود","CREATE_AS_KANBAN_DESCRIPTION":"این موضوع و موضوعات زیرمجموعه‌‌ی آن از پروژه‌ی شما، به صورت استوری‌های کاربری و وظایف تایگا ایجاد می‌شود","CREATE_AS_ISSUES_DESCRIPTION":"با موضوعات زیرمجموعه از پروژه Jira چه می‌کنید؟ (تایگا موضوعات زیرمجموعه را قبول نمی‌کند)","CREATE_NEW_ISSUES":"تبدیل موضوعات زیرمجموعه به موضوعات تایگا","NOT_CREATE_NEW_ISSUES":"موضوعات زیرمجموعه را وارد نکن"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"در مورد حذف حساب کاربری تایگای خود مطمئن هستید؟","CANCEL":"بازگشت به تنظیمات","ACCEPT":"حذف حساب کاربری","BLOCK_PROJECT":"توجه کنید که تمام پروژه‌های شما پس از حذف کردن حساب کاربری، مسدود می‌شود. اگر می‌خواهید پروژه‌ای را مسدود کنید، قبل از حذف کردن حساب کاربری، مالکیت آن را به عضو دیگری از پروژه بدهید."},"DELETE_PROJECT":{"TITLE":"حذف پروژه","QUESTION":"آیا مطمئن هستید که می‌خواهید این پروژه را حذف کنید؟","SUBTITLE":"تمام اطلاعات پروژه (استوری‌های کاربر، وظایف، موضوعات، اسپرینت و صفحات ویکی) از بین خواهد رفت! :-(","CONFIRM":"بله، مطمئن هستم."},"ASSIGNED_TO":{"SELECT":"انتخاب کردن موارد واگذار شده به","SEARCH":"جست‌وجوی کاربران"},"ADD_MEMBER":{"TITLE":"عضو جدید","PLACEHOLDER":"فیلتر کردن کاربران یا نوشتن ایمیل برای دعوت","ADD_EMAIL":"اضافه کردن ایمیل","REMOVE":"حذف","INVITE":"دعوت","CHOOSE_ROLE":"نقشی را انتخاب کنید","PLACEHOLDER_INVITATION_TEXT":"(اختیاری) متنی برای دعوت‌نامه اضافه کنید و جملات جالبی برای اعضای جدید بنویسید ;-)","HELP_TEXT":"اگر کاربران قبلاً در تایگا ثبت نام کرده باشند، به صورت خودکار اضافه می‌شوند. در عین این صورت دعوت‌نامه دریافت می‌کنند."},"FEEDBACK":{"TITLE":"برای ما بنویسید ...","COMMENT":"... یک باگ، تعدادی پیشنهاد، چیزی جالب ... یا حتی بدترین کابوس شما در استفاده از تایگا","ACTION_SEND":"ارسال بازخورد"},"SEARCH":{"TITLE":"جست‌وجو","PLACEHOLDER_SEARCH":"به دنبال چه هستید؟"},"ADD_EDIT_SPRINT":{"TITLE":"اسپرینت جدید","PLACEHOLDER_SPRINT_NAME":"نام اسپرینت","PLACEHOLDER_SPRINT_START":"تخمین شروع","PLACEHOLDER_SPRINT_END":"تخمین پایان","ACTION_DELETE_SPRINT":"آیا می‌خواهید این اسپرینت را حذف کنید؟","TITLE_ACTION_DELETE_SPRINT":"حذف اسپرینت","LAST_SPRINT_NAME":"آخرین اسپرینت {{lastSprint}} ;-) است"},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"ویرایش وضیفه","EDIT_ISSUE":"ویرایش موضوع","EDIT_US":"ویرایش گزارش کاربر","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"شما تغییرات را ذخیره نکرده‌اید\nآیا از بستن این فرم اطمینان دارید؟","EXISTING_ISSUE":"گزارش موجود","CHOOSE_EXISTING_ISSUE":"کدام گزارش","ADD_ISSUE":"اضافه کردن موضوع","FILTER_ISSUES":"فیلتر کردن موضوع‌ها"},"DELETE_DUE_DATE":{"TITLE":"حذف موعد تحویل","SUBTITLE":"آیا از حذف موعد تحویل اطمینان دارید؟"},"DELETE_SPRINT":{"TITLE":"حذف اسپرینت"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"حذف ارتباط با این Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(اختیاری) متنی برای دعوت‌نامه اضافه کنید و جملات جالبی برای اعضای جدید بنویسید ;-)","PLACEHOLDER_TYPE_EMAIL":"ایمیلی تایپ کنید","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"به محدودیت تعداد اعضای این پروژه که ({{maxFileSize}}) است، نزدیک شده‌اید. برای افزایش سقف تعداد اعضا با ادمین تماس بگیرید.","LIMIT_USERS_WARNING_MESSAGE":"به محدودیت {{maxMembers}} عضو این پروژه نزدیک می‌شوید."},"LEAVE_PROJECT_WARNING":{"TITLE":"متأسفانه این پروژه نمی‌تواند بدون مالک باشد","CURRENT_USER_OWNER":{"DESC":"شما در حال حاضر مالک این پروژه هستید. قبل از خروج، لطفاً مالکیت را به شخص دیگری واگذار کنید.","BUTTON":"تغییر مالک پروژه"},"OTHER_USER_OWNER":{"DESC":"متأسفانه نمی‌توانید عضوی که مالک پروژه است را حذف کنید. لطفاً مالک جدیدی برای پروژه انتخاب کنید.","BUTTON":"درخواست تغییر مالک پروژه"}},"CHANGE_OWNER":{"TITLE":"می‌خواهید مالک جدید پروژه چه کسی باشد؟","ADD_COMMENT":"اضافه کردن دیدگاه","BUTTON":"درخواست از عضو پروژه‌ی فعلی برای دریافت مالکیت آن"},"CONTACT_PROJECT":{"TITLE":"ارسال ایمیل به","WARNING":"ایمیل از مدیران پروژه دریافت می‌شود","PLACEHOLDER":"پیام خود را بنویسید","SEND":"ارسال"},"SET_DUE_DATE":{"TITLE":"تنظیم موعد تحویل","PLACEHOLDER_DUE_DATE":"انتخاب تاریخ","REASON_FOR_DUE_DATE":"دلیل برای موعد تحویل","PLACEHOLDER_REASON_FOR_DUE_DATE":"چرا این US به تاریخ تحویل نیاز دارد؟","SUGGESTIONS":{"IN_ONE_WEEK":"در یک هفته","IN_TWO_WEEKS":"در دو هفته","IN_ONE_MONTH":"در یک ماه","IN_THREE_MONTHS":"در سه ماه"},"TITLE_ACTION_DELETE_DUE_DATE":"حذف موعد تحویل"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"حذف موعد تحویل","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"مرتبط کردن به epic","EXISTING_EPIC":"epicموجود","NEW_EPIC":"epic جدید","CHOOSE_PROJECT_FOR_CREATION":"پروژه چیست؟","CHOOSE_PROJECT_FROM":"پروژه چیست؟","SUBJECT":"موضوع","CHOOSE_EPIC":"اپیک چیست؟","FILTER_EPICS":"فیلتر کردن epicها","NO_EPICS_FOUND":"در ارتباط با آنچه جست‌وجو کرده‌اید، چیزی پیدا نشد"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"وضعیت: {{epicStatus }}. توضیحات: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"ما قادر به حذف پیوند نبوده‌ایم: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"ایجاد ارتباط با","NEW_USERSTORY":"استوری کاربری جدید","EXISTING_USERSTORY":"استوری‌های کاربری موجود","CHOOSE_PROJECT_FOR_CREATION":"کدام پروژه؟","SUBJECT":"موضوع","SUBJECT_BULK_MODE":"موضوع (اضافه کردن گروهی)","CHOOSE_PROJECT_FROM":"کدام پروژه؟","CHOOSE_USERSTORY":"کدام استوری کاربر؟","NO_USERSTORIES":"این پروژه استوری کاربری ندارد. لطفاً پروژه‌ی دیگری را انتخاب کنید.","NO_USERSTORIES_FOUND":"در ارتباط با آنچه جست‌وجو کرده‌اید، چیزی پیدا نشد","FILTER_USERSTORIES":"فیلتر کردن استوری‌های کاربر","LIGHTBOX_TITLE_BLOKING_EPIC":"مسدودسازی epicها","ACTION_DELETE":"حذف epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - استوری‌های کاربر {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"وضعیت: {{userStoryStatus }}. تکمیل شده{{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} از {{userStoryTotalTasks}} وظایف). امتیاز: {{userStoryPoints}}. توضیحات: {{userStoryDescription}}","SECTION_NAME":"استوری کاربر","LINK_TASKBOARD":"برد وظایف","TITLE_LINK_TASKBOARD":"مراجعه به برد وظایف","TOTAL_POINTS":"مجموع امتیازات","ADD":"+ اضافه کرده یک استوری کاربری جدید","ADD_BULK":"اضافه کردن گروهی استوری‌های کاربری جدید","PROMOTED":"این استوری در ارتباط با موضوعی معروف شده:","TITLE_LINK_GO_TO_ISSUE":"رفتن به موضوع","TITLE_DELETE_ACTION":"حذف استوری کاربر","LIGHTBOX_TITLE_BLOKING_US":"مسدود کردن استوری‌های کاربری","NOT_ESTIMATED":"تخمین زده نشده","OWNER_US":"این استوری کاربری متعلق است به","RELATE_TO_EPIC":"مرتبط کردن به epic","REMOVE_RELATIONSHIP_WITH_EPIC":"حذف ارتباط Epic","TRIBE":{"PUBLISH":"انتشار به عنوان Gig در قبیله‌ی تایگا","PUBLISH_INFO":"اطلاعات بیشتر","PUBLISH_TITLE":"اطلاعات بیشتر در مورد انتشار در قبیله‌ی تایگا","PUBLISHED_AS_GIG":"استوری به عنوان Gig در قبلیه‌ی تایگا منتشر شده است","EDIT_LINK":"ویرایش لینک","CLOSE":"بستن","SYNCHRONIZE_LINK":"همگام‌سازی با قبلیه‌ی تایگا","PUBLISH_MORE_INFO_TITLE":"آیا برای این وظیفه کسی را لازم دارید؟","PUBLISH_MORE_INFO_TEXT":"

    اگر در مورد بخشی از کار به راهنمایی نیاز دارید، می‌توانید در قبلیه‌ی تایگا گیگ ایجاد کنید و از سراسر جهان کمک دریافت کنید. شما می‌توانید گیگ‌ها را کنترل و مدیریت کنید و از بودن در جمع علاقه‌مند و مشتاق کاربران، لذت ببرید.

    قبیله‌ی تایگا خواهر تایگاست. هر دو پلتفرم به صورت مستقل کار می‌کنند اما ما معتقدیم که اگر این دو را ترکیب کنید، توانمندی‌های آن بسیار بیشتر می‌شود و به همین علت تلاش کردیم که مجتمع‌سازی این دو در یکدیگر، به صورت عالی انجام شده باشد.

    "}},"COMMENTS":{"DELETED_INFO":"دیدگاه توسط {{user}} حذف شده","COMMENTS_COUNT":"{{comments}} دیدگاه","OLDER_FIRST":"قدیمی‌ها در صدر","RECENT_FIRST":"قدیمی‌ترین‌ها در صدر","COMMENT":"دیدگاه","EDITED_COMMENT":"ویرایش‌شده:","SHOW_HISTORY":"نمایش تاریخچه‌ای","TYPE_NEW_COMMENT":"نظر جدیدی بنویسید","SHOW_DELETED":"نمایش دیدگاه‌های حذف شده","HIDE_DELETED":"مخفی کردن دیدگاه‌های حذف شده","DELETE":"حذف دیدگاه","RESTORE":"بازیابی دیدگاه","HISTORY":{"TITLE":"فعالیت"}},"ACTIVITY":{"TITLE":"فعالیت","ACTIVITIES_COUNT":"{{activities}} فعالیت","TAGS_ADDED":"برچسب‌های اضافه شده:","TAGS_REMOVED":"برچسب‌های حذف‌شده:","US_POINTS":"{{role}} امتیاز","NEW_ATTACHMENT":"پیوست جدید:","DELETED_ATTACHMENT":"حذف پیوست:","UPDATED_ATTACHMENT":"پیوست‌های بروز شده ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"ایجاد خصوصیت جدید","UPDATED_CUSTOM_ATTRIBUTE":"بروزرسانی خواص سفارشی","BECAME_DEPRECATED":"منسوخ می‌شود","BECAME_UNDEPRECATED":"از حالت منسوخ خارج می‌شود","TEAM_REQUIREMENT":"لازمه‌های تیم","CLIENT_REQUIREMENT":"نیازمندی‌های مشتری","BLOCKED":"مسدودشده","VALUES":{"NOT_SET":"انتخاب نشده","UNASSIGNED":"آزاد"},"FIELDS":{"SUBJECT":"موضوع","DESCRIPTION":"توضیح","PRIORITY":"اولویت","SEVERITY":"اهمیت","STATUS":"وضعیت","TYPE":"نوع","ASSIGNED_TO":"تخصیص یافته به","ASSIGNED_USERS":"کاربران اختصاص یافته","DUE_DATE":"موعد تحویل","MILESTONE":"اسپرینت","COLOR":"رنگ"}},"BACKLOG":{"PAGE_TITLE":"گزارش امور ناتمام- {{projectName}}","PAGE_DESCRIPTION":"پنل گزارش امور ناتمام به همراه استوری‌های کاربر، اسپرینت پروژه {{projectName}}: {{projectDescription}}","SECTION_NAME":"گزارش امور ناتمام","CUSTOMIZE_GRAPH":"سفارشی کردن گراف گزارشات امور ناتمام شما","CUSTOMIZE_GRAPH_TEXT":"برای ایجاد گرافی خوب که اسپرینت پروژه را نشان دهد، می‌بایست امتیازات و اسپرینت‌ها را از","CUSTOMIZE_GRAPH_ADMIN":"ادمین","CUSTOMIZE_GRAPH_TITLE":"تنظیم امتیازات و اسپرینت‌ها از طریق ادمین","MOVE_US_TO_CURRENT_SPRINT":"انتقال به اسپرینت فعلی","MOVE_US_TO_LATEST_SPRINT":"انتقال به آخرین اسپرینت","EMPTY":"امور ناتمام خالی است!","CREATE_NEW_US":"ایجاد یک استوری کاربری جدید","CREATE_NEW_US_EMPTY_HELP":"شاید بخواهید استوری کاربری جدیدی ایجاد کنید","EXCESS_OF_POINTS":"مازاد امتیازات","PENDING_POINTS":"امتیازات معلق","CLOSED_POINTS":"بسته شده","COMPACT_SPRINT":"اسپرینت‌های فشرده","GO_TO_TASKBOARD":"رفتن به بورد وظایف {{::name}}","EDIT_SPRINT":"ویرایش اسپرینت","TOTAL_POINTS":"مجموع","STATUS_NAME":"نام وضعیت","SORTABLE_FILTER_ERROR":"زمانی که فیلترها باز است، نمی‌توانید روی گزارش امور ناتمام رها کنید","DOOMLINE":"محدوده‌ی زمانی پروژه","CHART":{"XAXIS_LABEL":"اسپرینت‌ها","YAXIS_LABEL":"امتیاز","OPTIMAL":"امتیاز معلق بهینه برای اسپرینت \"{{sprintName}}\" می‌بایست {{value}} باشد","REAL":"امتیاز معلق واقعی برای اسپرینت \"{{sprintName}}\"، معادل {{value}} امتیاز است.","INCREMENT_TEAM":"امتیاز اضافی لازمه‌های تیمی برای اسپرینت \"{{sprintName}}\" معادل {{value}} است","INCREMENT_CLIENT":"امتیاز اضافی لازمه‌های مشتری برای اسپرینت \"{{sprintName}}\" معادل {{value}} است"},"TAGS":{"TOGGLE":"تغییر وضعیت نمایش برچسب‌ها","SHOW":"نمایش تگ‌ها","HIDE":"مخفی کردن برچسب‌ها"},"FORECASTING":{"TITLE":"پیش‌بینی سرعت","BACKLOG":"نمایش لیست امور ناتمام","NEW_SPRINT":"استوری‌های کاربری توصیه‌شده برای اسپرینت بعدی شما با توجه به سرعت کار. برای ایجاد اسپرینت جدید کلیک کنید","CURRENT_SPRINT":"استوری‌های کاربری توصیه شده برای اسپرینت شما بر اساس سرعت کار. برای اضافه کردن اسپرینت فعلی، کلیک کنید."},"TABLE":{"COLUMN_US":"استوری‌های کاربر","TITLE_COLUMN_POINTS":"انتخاب نما برای هر یک از نقش‌ها"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"مجموع
    امتیاز","COMPLETED_POINTS":"
    امتیاز تکمیل‌شده","OPEN_TASKS":"باز کردن
    وظایف","CLOSED_TASKS":"
    وظایف بسته‌شده","IOCAINE_DOSES":"
    دز یوکائین","SHOW_STATISTICS_TITLE":"نمایش آمار","TOGGLE_BAKLOG_GRAPH":"نمایش یا مخفی‌سازی گراف کار باقیمانده","POINTS_PER_ROLE":"امتیازات بر حسب نقش"},"SUMMARY":{"PROJECT_POINTS":"
    امتیاز پروژه","DEFINED_POINTS":"
    امتیاز تعریف شده","CLOSED_POINTS":"
    امتیاز بسته‌شده","POINTS_PER_SPRINT":"امتیاز/
    اسپرینت"},"FILTERS":{"TOGGLE":"تغییر نمایش فیلترها","HIDE":"مخفی کردن فیلترها","SHOW":"نمایش فیلترها"},"SPRINTS":{"TITLE":"اسپرینت‌ها","DATE":"DD MMM YYYY","LINK_TASKBOARD":"بورد وظایف و اسپرینت‌ها","TITLE_LINK_TASKBOARD":"رفتن به بورد وظایف \"{{name}}\"","EMPTY":"تاکنون پیشرفتی وجود نداشته","WARNING_EMPTY_SPRINT_ANONYMOUS":"این اسپرینت هیچ استوری کاربری ندارد","WARNING_EMPTY_SPRINT":"استوری‌های لیست اموم ناتمام را اینجا رها کنید تا پیشرفتی جدید را آغاز کنید","TITLE_ACTION_NEW_SPRINT":"اضافه کردن اسپرینت جدید","TEXT_ACTION_NEW_SPRINT":"ممکن است بخواهید اسپرینت جدیدی در پروژه‌ی خود اضافه کنید","ACTION_SHOW_CLOSED_SPRINTS":"نمایش اسپرینت‌های بسته‌شده","ACTION_HIDE_CLOSED_SPRINTS":"مخفی کردن اسپرینت‌های بسته‌شده"}},"ERROR":{"TEXT1":"اتفاقی افتاده است و اومپا لومپای ما در حال بررسی آن است.","NOT_FOUND":"پیدا نشد","NOT_FOUND_TEXT":"ارور ۴۰۴. صفحه‌ای که به دنبال آن هستید، اکنون وجود ندارد. بهتر است به صفحه‌ی اصلی تایگا برگردید و مجدداً برای پیدا کردن صفحه، تلاش کنید.","PERMISSION_DENIED":"دسترسی ممنوع است","PERMISSION_DENIED_TEXT":"شما اجازه دسترسی به این صفحه را ندارید","VERSION_ERROR":"یکی از اعضای تایگا قبلاً این مورد را تغییر داده و اومپا لومپای ما نمی‌تواند تغییرات شما را اعمال کند. لطفاً صفحه را از نو بارگذاری کنید و تغییرات خود را مجدداً انجام دهید (تغییرات حذف می‌شود)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - بورد اسپرینت وظایف - {{projectName}}","PAGE_DESCRIPTION":"اسپرینت {{sprintName}} (از {{startDate}} الی {{endDate}}) از {{projectName}}. درصد تکمیل:{{completedPercentage}}% ({{completedPoints}} از {{totalPoints}} امتیاز). {{openTasks}} وظایف باز {{totalTasks}}.","SECTION_NAME":"برد وظایف","TITLE_ACTION_ADD":"اضافه کردن وظیفه‌ی جدید","TITLE_ACTION_ADD_BULK":"اضافه کردن تعدادی وظیفه‌ی جدید به صورت گروهی","TITLE_ACTION_ADD_ISSUE":"اضافه کردن موضوع جدید","TITLE_ACTION_ADD_ISSUE_BULK":" اضافه کردن تعدادی موضوع جدید به صورت گروهی ","TITLE_ACTION_ASSIGN":"تخصیص وظیفه","PLACEHOLDER_CARD_TITLE":"این می‌تواند یک وظیفه باشد","PLACEHOLDER_CARD_TEXT":"تقسیم کردن استوری‌ها به وظایف برای دنبال کردن آنها به صورت جداگانه","TABLE":{"COLUMN":"استوری کاربر","TITLE_ACTION_FOLD":"جمع کردن ستون‌ها","TITLE_ACTION_UNFOLD":"گسترده کردن ستون‌ها","TITLE_ACTION_FOLD_ROW":"جمع کردن ردیف","TITLE_ACTION_UNFOLD_ROW":"گسترده کردن ردیف","FIELD_POINTS":"امتیاز","ROW_STORYLESS_TASKS_TITLE":"وظایف بدون گزارش","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"روز","YAXIS_LABEL":"امتیاز","OPTIMAL":"امتیاز معلق بهینه برای روز {{formattedDate}} می‌بایست {{roundedValue}} باشد","REAL":"امتیاز واقعی معلق برای روز {{formattedDate}} برابر است با {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"برای باز کردن سرعتی حرکت دهید","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"هدف را انتخاب کنید","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - وظیفه {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"وضعیت: {{taskStatus }}. توضیحات: {{taskDescription}}","SECTION_NAME":"وظیفه","LINK_TASKBOARD":"برد وظایف","TITLE_LINK_TASKBOARD":"بازگشت به برد وظایف","PLACEHOLDER_SUBJECT":"موضوع وظیفه‌ی جدید را وارد کنید","TITLE_SELECT_STATUS":"نام وضعیت","OWNER_US":"این وظیفه مربوط است به","TITLE_LINK_GO_OWNER":"مراجعه به استوری کاربر","TITLE_DELETE_ACTION":"حذف وظیفه","LIGHTBOX_TITLE_BLOKING_TASK":"مسدود کردن وظایف","FIELDS":{"IS_IOCAINE":"یوکائین است"},"TITLE_ACTION_IOCAINE":"در انجام یک وظیفه با مشکل مواجه شده‌اید؟ با کلیک روی یوکائین حین ویرایش وظیفه، مطمئن شوید که دیگران در مورد مشکل شما مطلع می‌شوند. با مصرف کم و تدریجی، ممکن است در ادامه به تدریج نسبت به این سم مهلک (که شاید سم نباشد!) ایمن شوید، به بیان دیگر اگر هر از گاهی با چالش‌های دشوار سروکار داشته باشید، در کار خود ماهرتر می‌شوید"},"NOTIFICATION":{"OK":"همه‌چیز خوب است","WARNING":"اوه! اتفاقی افتاده است ...","WARNING_TEXT":"اومپا لومپای ما ناراحت است! تغییرات شود ذخیره نشده است!","SAVED":"اومپا لومپا تغییرات شما را ذخیره کرد","CLOSE":"بستن نوتیفیکیشن","MAIL":"نوتیفیکیشن از طریق ایمیل","DESKTOP":"اعلانهای دسکتاپ با استفاده از هشدار مرورگر","ASK_DELETE":"آیا در مورد حذف کردن، مطمئن هستید؟"},"CANCEL_ACCOUNT":{"TITLE":"کنسل کردن حساب کاربری","SUBTITLE":"از این که تایگا را ترک می‌کنید متأسفیم، امیدواریم از کار در محیط تایگا لذت برده باشید :)","PLACEHOLDER_INPUT_TOKEN":"کنسل کردن توکن حساب کاربری","ACTION_LEAVING":"بله، خارج می‌شوم!","SUCCESS":"اومپا لومپای ما حساب کاربری شما را حذف کرد"},"CHANGE_EMAIL_FORM":{"TITLE":"تغییر ایمیل","SUBTITLE":"یک کلیک دیگر تا تغییر ایمیل شما!","PLACEHOLDER_INPUT_TOKEN":"تغییر توکن ایمیل","ACTION_CHANGE_EMAIL":"تغییر ایمیل","SUCCESS":"اومپا لومپای ما ایمیل شما را تغییر داد"},"ISSUES":{"PAGE_TITLE":"موضوعات - {{projectName}}","PAGE_DESCRIPTION":"پنل لیست موضوعات پروژه‌ی {{projectName}}: {{projectDescription}}","SECTION_NAME":"موضوع","ACTION_NEW_ISSUE":"+ موضوع جدید","ACTION_PROMOTE_TO_US":"ارتقا به استوری کاربر","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"این موضوع به استوری کاربری ارتقا داده شد:","EXTERNAL_REFERENCE":"این موضوع ایجاد شده از","GO_TO_EXTERNAL_REFERENCE":"رفتن به منبع","ACTION_DELETE":"حذف موضوع","LIGHTBOX_TITLE_BLOKING_ISSUE":"مسدودسازی موضوعات","LINK_TASKBOARD":"برد وظایف","TITLE_LINK_TASKBOARD":"مراجعه به برد وظایف","FILTER_SPRINTS":"فیلتر کردن اسپرینت‌ها","CHOOSE_SPRINT":"کدام اسپرینت؟","FIELDS":{"PRIORITY":"اولویت","SEVERITY":"اهمیت","TYPE":"نوع"},"FILTER_ISSUES":"فیلتر کردن موضوع‌ها","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"ارتقای این موضوع به یک استوری کاربری جدید","MESSAGE":"آیا مطمئن هستید که می‌خواهید از این موضوع، استوری کاربری جدید بسازید؟"},"TABLE":{"COLUMNS":{"TYPE":"نوع","SEVERITY":"اهمیت","PRIORITY":"اولویت","SUBJECT":"موضوع","VOTES":"رأی","STATUS":"عیت","MODIFIED":"تصحیح شده","ASSIGNED_TO":"اختصاص یافته به"},"TITLE_ACTION_CHANGE_STATUS":"تغییر وضعیت","TITLE_ACTION_ASSIGNED_TO":"تخصیص یافته به","BLOCKED":"مسدودشده","EMPTY":{"TITLE":"موضوعی برای گزارش وجود ندارد :-)","SUBTITLE":"آیا موضوعی پیدا کرده‌اید؟"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - موضوع {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"وضعیت: {{issueStatus }}. نوع: {{issueType}}, اولویت: {{issuePriority}}. اهمیت: {{issueSeverity}}. توضیح: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"پنل Kanban به همراه استوری‌های کاربری پروژه‌ی {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"جمع کردن ستون‌ها","TITLE_ACTION_UNFOLD":"گسترده کردن ستون‌ها","TITLE_ACTION_ADD_US":"اضافه کردن استوری کاربری جدید","TITLE_ACTION_ADD_BULK":"اضافه کردن گروهی","ACTION_SHOW_ARCHIVED":"نمایش آرشیو‌شده‌ها","ACTION_HIDE_ARCHIVED":"مخفی کردن آرشیو‌شده‌ها","HIDDEN_USER_STORIES":"استوری‌های کاربری در وضعیت فعلی، به صورت پیش‌فرض مخفی هستند","PLACEHOLDER_CARD_TITLE":"اینها استوری‌های کاربری شما هستند","PLACEHOLDER_CARD_TEXT":"استوری‌ها می‌توانند وظایف زیرمجموعه نیز داشته باشند تا نیازمندی‌ها جدا شود"},"SEARCH":{"PAGE_TITLE":"جستجو - {{projectName}}","PAGE_DESCRIPTION":"جستجو کردن در مورد همه‌چیز، استوری‌های کاربر، موضوعات، وظایف و صفحات ویکی در پروژه‌ی {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"استوری‌های کاربر","FILTER_ISSUES":"موضوعات","FILTER_TASKS":"وظایف","FILTER_WIKI":"صفحات ویکی","PLACEHOLDER_SEARCH":"جست‌وجو در...","TITLE_ACTION_SEARCH":"جست‌وجو","EMPTY_TITLE":"چیزی در مورد جست‌وجوی شما پیدا نشد.","EMPTY_DESCRIPTION":"از یکی از تب‌های فوق استفاده کنید یا مجدداً جست‌وجو کنید"},"TEAM":{"PAGE_TITLE":"تیم - {{projectName}}","PAGE_DESCRIPTION":"پنل تیم برای نمایش تمام اعضای پروژه‌ی {{projectName}}: {{projectDescription}}","SECTION_NAME":"تیم","PLACEHOLDER_INPUT_SEARCH":"جست‌وجو با استفاده از نام کامل...","COLUMN_MR_WOLF":"آقای گرگ","EXPLANATION_COLUMN_MR_WOLF":"موضوعات بسته","COLUMN_IOCAINE":"مصرف‌کننده‌ی یوکائین","EXPLANATION_COLUMN_IOCAINE":"دوز یوکائین مصرف‌شده","COLUMN_CERVANTES":"سروانتس","EXPLANATION_COLUMN_CERVANTES":"صفحات ویکی ویرایش‌شده","COLUMN_BUG_HUNTER":"شکارچی باگ","EXPLANATION_COLUMN_BUG_HUNTER":"موضوعات گزارش‌شده","COLUMN_NIGHT_SHIFT":"حالت شب","EXPLANATION_COLUMN_NIGHT_SHIFT":"وظایف بسته شده","COLUMN_TOTAL_POWER":"قدرت کلی","EXPLANATION_COLUMN_TOTAL_POWER":"مجموع امتیازات","SECTION_TITLE_TEAM":"تیم >","SECTION_FILTER_ALL":"همه","CONFIRM_LEAVE_PROJECT":"آیا مطمئن هستید که می‌خواهید از پروژه خارج شوید؟","ACTION_LEAVE_PROJECT":"خروج از پروژه"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[حداکثر حجم: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"تنظیمات کاربر","USER_PROFILE":"پروفایل کاربری","CHANGE_PASSWORD":"تغییر رمز عبور","EMAIL_NOTIFICATIONS":"نوتیفیکیشن‌های ایمیلی","DESKTOP_NOTIFICATIONS":"اعلانیه‌های دسکتاپ","EVENTS":"رویداد ها"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"اعلانیه‌های دسکتاپ","SECTION_NAME":"نوتیفیکیشن‌های ایمیلی","COLUMN_PROJECT":"پروژه","COLUMN_RECEIVE_ALL":"دریافت همه","COLUMN_ONLY_INVOLVED":"فقط مشارکت‌شده‌ها","COLUMN_NO_NOTIFICATIONS":"بدون نوتیفیکیشن","OPTION_ALL":"همه","OPTION_INVOLVED":"مشترک","OPTION_NONE":"هیچ کدام"},"PROJECT_SETTINGS":{"SET_START_PAGES":"قرار دادن صفحات شروع","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"پروژه","COLUMN_STARTPAGE":"صفحه شروع","DEFAULT_VALUE":"پیش فرض"},"EVENTS":{"SECTION_NAME":"رویداد ها","SECTION_DESCRIPTION":"رویداد های مهم در بالای صفحه تایگا.","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"فعال شده است","COLUMN_PROJECT":"پروژه"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"استفاده از تصویر پیش‌فرض","ACTION_DELETE_ACCOUNT":"حذف حساب کاربری تایگا","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"ایمیل خود را چک کنید!
    ایمیلی به حساب کاربری شما ارسال کردیم
    که در آن دستورالعمل تنظیم آدرس جدید شما ذکر شده است","CHANGE_PHOTO":"تغییر عکس","FIELD":{"USERNAME":"نام کاربری","EMAIL":"ایمیل","FULL_NAME":"نام کامل","PLACEHOLDER_FULL_NAME":"نام کامل خود را وارد کنید (مثل بیل گیتس)","BIO":"بیوگرافی (حداکثر ۲۱۰ کاراکتر)","PLACEHOLDER_BIO":"چیزی در مورد خودتان بگویید","LANGUAGE":"زبان","LANGUAGE_DEFAULT":"-- استفاده از زبان پیش‌فرض --","THEME":"قالب","THEME_DEFAULT":"-- استفاده از قالب پیش‌فرض --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - ویکی - {{projectName}}","PAGE_DESCRIPTION":"آخرین ویرایش در {{lastModifiedDate}} ({{totalEditions}} ویرایش در مجموع) محتویات: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"حذف این صفحه‌ی ویکی","DELETE_LIGHTBOX_TITLE":"حذف صفحه‌ی ویکی","DELETE_LINK_TITLE":"حذف لینک ویکی","NAVIGATION":{"HOME":"صفحه‌ی اصلی","SECTION_NAME":"بوک‌مارک‌ها","ACTION_ADD_LINK":"اضافه کردن بوک‌مارک","ALL_PAGES":"تمام صفحات ویکی"},"SUMMARY":{"TIMES_EDITED":"دفعات
    ویرایش شده","LAST_EDIT":"آخرین
    ویرایش","LAST_MODIFICATION":"آخرین تغییر"},"SECTION_PAGES_LIST":"تمام صفحات","PAGES_LIST_COLUMNS":{"TITLE":"عنوان","EDITIONS":"ویرایش‌ها","CREATED":"ایجاد شده","MODIFIED":"تصحیح شده","CREATOR":"ایجادکننده","LAST_MODIFIER":"آخرین تصحیح‌کننده"}},"HINTS":{"SECTION_NAME":"راهنما","LINK":"برای دریافت راهنمایی در مورد استفاده از این مورد، به صفحه‌ی پشتیبانی مراجعه کنید","LINK_TITLE":"به صفحه‌ی پشتیبانی ما مراجعه کنید","HINT1_TITLE":"آیا می‌‌دانید که می‌توان پروژه‌ها را ایمپورت و اکسپورت کرد؟","HINT1_TEXT":"با این قابلیت می‌توانید داده‌های خود را از یک تایگا استخراج کرده و به دیگری منتقل کنید","HINT2_TITLE":"آیا می‌دانستید که می‌توانید ویژگی سفارشی تعریف کنید؟","HINT2_TEXT":"اکنون تیم‌ها می‌توانند ویژگی‌های سفارشی برای وارد کردن داده‌های خاصی که برای جریان کارشان مفید است، ایجاد کنند.","HINT3_TITLE":"مرتب کردن پروژه‌ها برای نمایش پروژه‌های مهم‌تر برای شما.","HINT3_TEXT":"۱۰ پروژه‌ای که در ردیف دسترسی مستقیم در بالای صفحه لیست می‌شوند","HINT4_TITLE":"آیا فراموش کرده‌اید که روی چه چیز کار می‌کردید؟","HINT4_TEXT":"نگران نباشید، در داشبورد خود تمام وظایف باز، موضوعات و استوری‌های کاربری را به ترتیبی که رویشان کار کرده‌اید، مشاهده می‌کنید."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} پیوستی در {{obj_name}} آپلود کرده است","US_CREATED":"{{username}} یک استوری کاربری جدید، {{obj_name}} را در {{project_name}} ایجاد کرده است","ISSUE_CREATED":"{{username}} موضوع جدید {{obj_name}} را در {{project_name}} ایجاد کرده است","TASK_CREATED":"{{username}} وظیفه‌ی جدید {{obj_name}} را در {{project_name}} ایجاد کرده است","TASK_CREATED_WITH_US":"{{username}} وظیفه‌ی جدید {{obj_name}} را در {{project_name}} ایجاد کرده است که به استوری کاربری {{us_name}} مربوط می‌شود","WIKI_CREATED":"{{username}} صفحه‌ی ویکی جدید {{obj_name}} در {{project_name}} ایجاد کرده است","MILESTONE_CREATED":"{{username}} اسپرینت جدید {{obj_name}} در{{project_name}} ایجاد کرده است","EPIC_CREATED":"{{username}} جدید epic {{obj_name}} را در {{project_name}} ایجاد کرده است","EPIC_RELATED_USERSTORY_CREATED":"{{username}} استوری کاربری {{related_us_name}} را به epic{{epic_name}} در {{project_name}} مربوط کرده است","NEW_PROJECT":"{{username}} پروژه‌ی {{project_name}} را ایجاد کرده است","MILESTONE_UPDATED":"{{username}} اسپرینت {{obj_name}} را آپدیت کرده است","US_UPDATED":"{{username}} خصوصیت \"{{field_name}}\" از استوری کاربری {{obj_name}} را آپدیت کرده است","US_UPDATED_WITH_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از استوری کاربری {{obj_name}} را به {{new_value}} آپدیت کرد","US_UPDATED_POINTS":"{{username}} امتیازات '{{role_name}}' از استوری کاربری {{obj_name}} را به {{new_value}} تغییر داده است","ISSUE_UPDATED":"{{username}} خصوصیت \"{{field_name}}\" از موضوع {{obj_name}} را آپدیت کرده است","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از موضوع {{obj_name}} را به {new_value}} آپدیت کرده است","TASK_UPDATED":"{{username}} خصوصیت \"{{field_name}}\" از وظیفه‌ی {{obj_name}} را به {{new_value}} آپدیت کرده است.","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از وظیفه‌ی {{obj_name}} را به {{new_value}} آپدیت کرده است.","TASK_UPDATED_WITH_US":"{{username}} خصوصیت \"{{field_name}}\" از وظیفه‌ی {{obj_name}} که به استوری کاربری {{us_name}} مربوط می‌شود را آپدیت کرده است.","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از وظیفه‌ی {{obj_name}} که به استوری کاربری {{us_name}} مربوط می‌شود را به {{new_value}} تغییر داده است","WIKI_UPDATED":"{{username}} صفحه‌ی ویکی {{obj_name}} را آپدیت کرده است","EPIC_UPDATED":"{{username}} خصوصیت \"{{field_name}}\" از epci {{obj_name}} را آپدیت کرده است","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از epic {{obj_name}} را به {{new_value}} تغییر داده است","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} \"{{field_name}}\" ازepic {{obj_name}} را به آپدیت کرده است","NEW_COMMENT_US":"{{username}} دیدگاهی در استوری کاربری {{obj_name}} گذاشته است","NEW_COMMENT_ISSUE":"{{username}} دیدگاهی در موضوع {{obj_name}} اضافه کرده است","NEW_COMMENT_TASK":"{{username}} در وظیفه‌ی {{obj_name}} دیدگاهی گذاشته است","NEW_COMMENT_EPIC":"{{username}} در epic {{obj_name}} دیدگاهی گذاشته است","NEW_MEMBER":"{{project_name}} عضو جدیدی دارد","US_ADDED_MILESTONE":"{{username}} استوری کاربری {{obj_name}} را به {{sprint_name}} اضافه کرده است","US_MOVED":"{{username}} استوری کاربری {{obj_name}} را جابجا کرده است","US_REMOVED_FROM_MILESTONE":"{{username}} استوری کاربری {{obj_name}} را به لیست امور ناتمام اضافه کرده است","BLOCKED":"{{username}} {{obj_name}} را مسدود کرده است","UNBLOCKED":"{{username}} {{obj_name}} را از حالت مسدود خارج کرده است","NEW_USER":"{{username}} به تایگا پیوست","ITEM_TYPES":{"USERSTORY":"گزارش کاربر","ISSUE":"موضوع","TASK":"وظیفه"}},"EVENTS":{"TITLE":"رویداد ها","MY_EVENTS":"رویداد های من","DISMISS_ALL":"رد همه","VIEW_ALL":"بازدید همه","NO_NEW_EVENTS":"رویداد جدیدی وجود ندارد","NO_EVENTS_YET":"هنوز رویدادی وجود ندارد","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} شما را به عنوان عضو افزود","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our
    terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"یک اپلیکیشن خارجی درخواست تأیید دسترسی دارد","PAGE_DESCRIPTION":"یک اپلیکیشن خارجی درخواست تأیید دسترسی دارد","AUTHORIZATION_REQUEST":"آیا {{application}} برای استفاده از حساب کاربری تایگای شما مجاز است؟","LOGIN_WITH_ANOTHER_USER":"ورود با حساب کاربری دیگر","AUTHORIZE_APP":"تأیید دسترسی اپ","CANCEL":"لغو"},"JOYRIDE":{"NAV":{"NEXT":"بعدی","BACK":"بازگشت","SKIP":"رد شدن","DONE":"انجام شده"},"DASHBOARD":{"STEP1":{"TITLE":"پروژه‌ی شما","TEXT":"خوش آمدید! در این بخش پروژه‌هایی که در آن دخیل هستید، موجود است."},"STEP2":{"TITLE":"در حال کار روی","TEXT":"در این بخش استوری‌های کاربری، وظایف و موضوعاتی که رویشان کار می‌کنید، نمایش داده می‌شود."},"STEP3":{"TITLE":"در حال بررسی","TEXT1":"و اینجا پروژه‌هایی که می‌خواهید در موردشان اطلاعات بیشتری به دست آورید را مشاهده می‌کنید","TEXT2":"شما در حال حاضر از تایگا استفاده می‌کنید ;)"},"STEP4":{"TITLE":"بیاید شروع کنیم","TEXT1":"می‌توانید اولین پروژه‌ی تایگای خود را ایجاد کنید.","TEXT2":"خدانگهدار!"}},"BACKLOG":{"STEP1":{"TITLE":"خلاصه‌ی پروژه","TEXT1":"در این بخش وضعیت پروژه‌ی خود را مشاهده می‌کنید","TEXT2":"می‌توانید تمام تنظیمات پروژه را از طریق ادمین تغییر دهید."},"STEP2":{"TITLE":"لیست امورناتمام محصول","TEXT":"گزارش امور ناتمام لیستی از نیازها (استوری‌های کاربری) برای پروژه است. در این بخش می‌توانید اسپرینت‌های خود را برنامه‌ریزی کنید."},"STEP3":{"TITLE":"اسپرینت‌ها","TEXT":"اسپرینت‌ها به بازه‌های زمانی کوچک (معمولاً ۲ هفته) گفته می‌شود که در طول این بازه‌ی زمانی می‌بایست کاری خاص تکمیل و تحویل داده شود."},"STEP4":{"TITLE":"استوری‌های کاربر","TEXT":"آنها لازمه‌های سطح بالا هستند. می‌توانید آنها را به لیست امور ناتمام اضافه کنید و آنها را درگ کرده و به اسپرینت‌هایی که باید تحویل شود، اضافه کنید."}},"KANBAN":{"STEP1":{"TITLE":"سفارشی کردن جریان کاری شما","TEXT":"ستون‌هایی که برای نمایش وضعیت جریان کاری خود نیاز دارید را از طریق ادمین تنظیم کنید"},"STEP2":{"TITLE":"استوری‌های کاربری و وظایف","TEXT":"استوری‌های کاربری لازمه‌های سطح بالا هستند. می‌توانید آنها را درگ کرده و در ستون‌های مختلف قرار دهید."},"STEP3":{"TITLE":"اضافه کردن استوری‌های کاربری","TEXT1":"می‌توانید روی آیکون استوری کاربری کلیک کرده و یک استوری کاربر اضافه کنید و یا گروهی از استوری‌های کاربری را با کلیک روی آیکون گروهی اضافه کنید","TEXT2":"خدانگهدار!"}}},"DISCOVER":{"PAGE_TITLE":"کشف پروژه‌ها - تایگا","PAGE_DESCRIPTION":"دایرکتوری قابل‌جست‌وجو پروژه‌های عمومی در تایگا. لیست امور ناتمام، تایم‌لاین‌ها، موضوعات و تیم‌ها را پیدا کنید. پروژه‌هایی با بیشتری لایک یا پروژه‌های فعال را بررسی کنید. از فیلتر کانبان یا اسکرام استفاده کنید.","DISCOVER_TITLE":"کشف پروژه‌ها","DISCOVER_SUBTITLE":"{projects, plural, one{یک پروژه عمومی} other{# پروژه‌های عمومی}}","MOST_ACTIVE":"بیشترین فعالیت","MOST_ACTIVE_EMPTY":"در حال حاضر پروژه‌ی فعالی وجود ندارد","MOST_LIKED":"با بیشتری لایک","MOST_LIKED_EMPTY":"در حاضر حاضر پروژه‌ی دارای لایک وجود ندارد","VIEW_MORE":"نمایش بیشتر","FEATURED":"پروژه‌های ویژه","EMPTY":"پروژه‌ای در ارتباط با این جست‌وجو وجود ندارد.
    دوباره تلاش کنید!","FILTERS":{"ALL":"همه","KANBAN":"Kanban","SCRUM":"اسکرام","PEOPLE":"جست‌وجو کاربران","WEEK":"هفته‌ی پیش","MONTH":"ماه پیش","YEAR":"سال پیش","ALL_TIME":"همه‌ی زمان‌ها","CLEAR":"حذف فیلترها"},"SEARCH":{"PAGE_TITLE":"جستجو - کشف پروژه‌ها - تایگا","PAGE_DESCRIPTION":"دایرکتوری قابل‌جستجوی پروژه‌های عمومی در تایگا. لیست امور ناتمام، تایم‌لاین‌ها، موضوعات و تیم‌ها را مشاهده کنید. پروژه‌هایی با بیشتری فعالیت را ببینید. از فیلتر بر اساس کانبان یا اسکرام استفاده کنید.","INPUT_PLACEHOLDER":"چیزی بنویسید ...","ACTION_TITLE":"جست‌وجو","RESULTS":"نتایج جست‌وجو"}},"TIPS":{"TIPS_TITLE":"نکته","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-fi.json b/dist/v-1547534999795/locales/taiga/locale-fi.json deleted file mode 100644 index 5784aba..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-fi.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Kyllä","NO":"Ei","OR":"tai","I_GET_IT":"OK, I get it","LOADING":"Ladataan...","DATE":"DD.MM.YY","DATETIME":"DD.MM.YY - HH:mm","SAVE":"Tallenna","CANCEL":"Peru","ACCEPT":"Hyväksy","DELETE":"Poista","UNLINK":"Poista linkki","CREATE":"Luo uusi","ADD":"Lisää","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Muokkaa","DRAG":"Vedä","TAG_LINE":"Ketterä, ilmainne avoimen koodin projektinhallintaohjelmisto","TAG_LINE_2":"Rakasta projektiasi","BLOCK":"Estä","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"Suljettu","UNBLOCK":"Salli","UNBLOCK_TITLE":"Poista este","BLOCKED_NOTE":"Miksi tämä on estetty?","BLOCKED_REASON":"Ole hyvä ja anna syy","CREATED_BY":"Luonut {{fullDisplayName}}","CLOSE":"sulje","GO_HOME":"Vie minut kotiin","PLUGINS":"Pluginit","ONE_ITEM_LINE":"Yksi riviä kohti...","NEW_BULK":"Lisää monta","SUBTASKS":"Subtasks","PREVIOUS":"Edellinen","NEXT":"Seuraava","LOGOUT":"Kirjaudu ulos","EXTERNAL_USER":"ulkoinen käyttäjä","GENERIC_ERROR":"Oompa Loompas havaitsivat virheen {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Projektin omistaja","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Haluatko varmasti sulkea muokkaustilan?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Liittyvät käyttäjätarinat","CARD":{"ASSIGN_TO":"Valitse tekijä","EDIT":"Muokkaa korttia","DELETE":"Delete card","DELETE_ISSUE":"Poista pyyntö","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Tämä arvo vaikuttaa virheelliseltä.","TYPE_EMAIL":"Tämän pitäisi olla toimiva sähköpostiosoite.","TYPE_URL":"Tämän pitäisi olla toimiva web-osoite.","TYPE_URLSTRICT":"Tämän pitäisi olla toimiva web-osoite.","TYPE_NUMBER":"Arvon pitäisi olla numeerinen.","TYPE_DIGITS":"Arvon pitäisi olla numeroita.","TYPE_DATEISO":"Arvon pitäisi olla muotoa (vvvv-kk-pp).","TYPE_ALPHANUM":"Arvon pitäisi olla alfanumeerinen.","TYPE_PHONE":"Arvon pitäisi olla toimiva puhelinnumero.","NOTNULL":"Arvo ei saa olla tyhjä.","NOT_BLANK":"Arvon ei pitäisi olla tyhjä.","REQUIRED":"Arvo vaaditaan.","REGEXP":"Tämä arvo vaikuttaa virheelliseltä.","MIN":"Arvon pitää olla vähintään %s.","MAX":"Arvon pitää olla korkeintaan %s.","RANGE":"Arvon pitää olla välissä %s - %s.","MIN_LENGTH":"Arvo on liian lyhyt. Tarvitaan vähintään %s merkkiä.","MAX_LENGTH":"Arvo on liian pitkä. Pituus saa olla korkeintaan %s merkkiä.","RANGE_LENGTH":"Arvo on väärän mittainen. Sen pituus pitäisi olla väliltä %s - %s.","MIN_CHECK":"Sinun täytyy valita vähintään %s valintaa.","MAX_CHECK":"Valitse korkeintaan %s vaihtoehtoa.","RANGE_CHECK":"Valitse %s - %s vaihteohtoa.","EQUAL_TO":"Arvojen pitäisi olla samat.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD.MM.YY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Edellinen kuukausi","NEXT_MONTH":"Seuraava kuukausi","MONTHS":{"JAN":"Tammikuu","FEB":"Helmikuu","MAR":"Maaliskuu","APR":"Huhtikuu","MAY":"Toukokuu","JUN":"Kesäkuu","JUL":"Heinäkuu","AUG":"Elokuu","SEP":"Syyskuu","OCT":"Lokakuu","NOV":"Marraskuu","DEC":"Joulukuu"},"WEEK_DAYS":{"SUN":"Sunnuntai","MON":"Maanantai","TUE":"Tiistai","WED":"Keskiviikko","THU":"Torstai","FRI":"Perjantai","SAT":"Lauantai"},"WEEK_DAYS_SHORT":{"SUN":"Sun","MON":"Maa","TUE":"Tii","WED":"Kes","THU":"Tor","FRI":"Per","SAT":"Lau"}},"SEE_USER_PROFILE":"Näytä {{username }} profiili","USER_STORY":"Käyttäjätarina","TASK":"Tehtävä","ISSUE":"Issue","EPIC":"Eepos","TAGS":{"PLACEHOLDER":"Syötä tagi","DELETE":"Poista avainsana","ADD":"Lisää avainsana"},"DESCRIPTION":{"EMPTY":"Tyhjä tila on tylsää...kerro jotain...","NO_DESCRIPTION":"Ei vielä kuvausta lisätty"},"FIELDS":{"SUBJECT":"Aihe","NAME":"Nimi","URL":"URL","DESCRIPTION":"Kuvaus","VALUE":"Arvo","SLUG":"Hukka","COLOR":"Väri","IS_CLOSED":"Suljettu","STATUS":"Tila","TYPE":"Tyyppi","SEVERITY":"Vakavuus","PRIORITY":"Tärkeys","ASSIGNED_TO":"Tekijä","ASSIGNED_USERS":"Assigned users","POINTS":"Pisteet","IS_BLOCKED":"on estetty","REF":"Ref","VOTES":"Ääniä","SPRINT":"Kierros","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Kaikki"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Tekijää ei valittu","ASSIGN":"Valitse tekijä","DELETE_ASSIGNMENT":"Poista tekijä","REMOVE_ASSIGNED":"Poista tekijä","TOO_MANY":"...liikaa käyttäjiä, lisää suodattimia","CONFIRM_UNASSIGNED":"Haluatko varmasti jättää tämän ilman tekijää?","TITLE_ACTION_EDIT_ASSIGNMENT":"Muokkaa tekijää","SELF":"Ota tehtävä itsellesi"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Suljettu","OPEN":"Avoin"},"WATCHERS":{"WATCHERS":"Seuraajat","ADD":"Lisää seuraajia","TITLE_ADD":"Add a project member to the watchers list","DELETE":"Poista vahti","TITLE_LIGHTBOX_DELETE_WARTCHER":"Poista vahti..."},"WATCH_BUTTON":{"WATCH":"Seuraa","WATCHING":"Seuraa","UNWATCH":"Lopeta seuraaminen","WATCHERS":"Seuraajat","BUTTON_TITLE":"Seuraa/Lopeta seuraaminen","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Omat kentät","SAVE":"Tallenna oma kenttä","EDIT":"Muokkaa omaa kenttää","DELETE":"Poista oma attribuutti","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Aihe tai viittaus","TITLE_ACTION_FILTER_BUTTON":"hae","TITLE":"Suodattimet","TITLE_ACTION_SEARCH":"Hae","ACTION_SAVE_CUSTOM_FILTER":"tallenna omaksi suodattimeksi","PLACEHOLDER_FILTER_NAME":"Anna suodattimen nimi ja paina enter","APPLIED_FILTERS_NUM":"Suodattimet asetettu","CATEGORIES":{"TYPE":"Tyyppi","STATUS":"Tila","SEVERITY":"Vakavuus","PRIORITIES":"Kiireellisyydet","TAGS":"Avainsanat","ASSIGNED_TO":"Tekijä","ASSIGNED_USERS":"Assigned users","ROLE":"Rooli","CREATED_BY":"Luoja","CUSTOM_FILTERS":"Omat suodattimet","EPIC":"Eepos"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"tuplaklikkaa muokataksesi","SELECT_LANGUAGE_PLACEHOLDER":"Valitse kieli","SELECT_LANGUAGE_REMOVE_FORMATING":"Poista muotoilu","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Merkintätavan ohjeet"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Eepokset","VIEW_EPICS":"Näytä eepokset","ADD_EPICS":"Lisää eepos","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Poista eepos"},"SPRINTS":{"NAME":"Kierrokset","VIEW_SPRINTS":"Katso kierroksia","ADD_SPRINTS":"Lisää kierroksia","MODIFY_SPRINTS":"Muokkaa kieroksia","DELETE_SPRINTS":"Poista kierroksia"},"USER_STORIES":{"NAME":"Käyttäjätarinat","VIEW_USER_STORIES":"Katso käyttäjätarinoita","ADD_USER_STORIES":"Lisää käyttäjätarinoita","MODIFY_USER_STORIES":"Muokkaa käyttäjätarinoita","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Poista käyttäjätarinoita"},"TASKS":{"NAME":"Tehtävät","VIEW_TASKS":"Katsot tehtäviä","ADD_TASKS":"Lisää tehtäviä","MODIFY_TASKS":"Muokkaa tehtäviä","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Poista tehtäviä"},"ISSUES":{"NAME":"Pyynnöt","VIEW_ISSUES":"Katso pyyntöjä","ADD_ISSUES":"Lisää pyyntöjä","MODIFY_ISSUES":"Muokkaa pyyntöjä","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Poista pyyntöjä"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Katso wiki-sivuja","ADD_WIKI_PAGES":"Lisää wiki-sivuja","MODIFY_WIKI_PAGES":"Muokkaa wiki-sivuja","DELETE_WIKI_PAGES":"Poista wiki-sivuja","VIEW_WIKI_LINKS":"Katso wiki-linkkejä","ADD_WIKI_LINKS":"Lisää wiki-linkkejä","DELETE_WIKI_LINKS":"Poista wiki-linkkejä"}}},"LOGIN":{"PAGE_TITLE":"Kirjaudu - Taiga","PAGE_DESCRIPTION":"Logging in to Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"AUTH":{"INVITED_YOU":"on kutsunut sinut projektiin","NOT_REGISTERED_YET":"Etkö ole vielä rekisteröitynyt?","REGISTER":"Rekisteröidy","CREATE_ACCOUNT":"luo ilmainen tunnuksesi täällä"},"LOGIN_COMMON":{"HEADER":"Minulla on jo Taiga tunnus","PLACEHOLDER_AUTH_NAME":"Käyttäjänimi tai sähköposti (kirjainkoko merkitsevä)","LINK_FORGOT_PASSWORD":"Unohditko?","TITLE_LINK_FORGOT_PASSWORD":"Unohditko salasanasi?","ACTION_ENTER":"Sisään","ACTION_SIGN_IN":"Kirjaudu","PLACEHOLDER_AUTH_PASSWORD":"Salasana (kirjainkoko merkitsevä)","ALT_LOGIN":"Tai kirjaudu käyttäen"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Käyttäjänimesi tai sähköpostisi tai salasanasi on väärä.","SUCCESS":"Oompa Loompat ovat onnellisia, tervetuloa Taigaan."},"REGISTER":{"PAGE_TITLE":"Rekisteröidy - Taiga","PAGE_DESCRIPTION":"Create your account in Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"REGISTER_FORM":{"TITLE":"Rekisteröi uusi Taiga tunnus (ilmainen)","PLACEHOLDER_NAME":"Anna käyttäjänimi (kirjainkoko on merkitsevä)","PLACEHOLDER_FULL_NAME":"Anna koko nimesi","PLACEHOLDER_EMAIL":"Sähköpostisi","PLACEHOLDER_PASSWORD":"Anna salasana (kirjainkoko merkitsevä)","ACTION_SIGN_UP":"Kirjaudu sisään","TITLE_LINK_LOGIN":"Kirjaudu sisään","LINK_LOGIN":"Oletko jo rekisteröitynyt? Kirjaudu sisään"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Unohditko salasanasi - Taiga","PAGE_DESCRIPTION":"Enter your username or email to get a new password and you can access to Taiga again."},"FORGOT_PASSWORD_FORM":{"TITLE":"Hups, unohditko salasanasi?","SUBTITLE":"Anna käyttäjänimesi tai sähköpostisi saadaksesi uuden","PLACEHOLDER_FIELD":"Käyttäjänimi tai sähköposti","ACTION_RESET_PASSWORD":"Uusi salsanasi","LINK_CANCEL":"Vie minut takaisin, muistan sen.","SUCCESS_TITLE":"Tarkista inbox!","SUCCESS_TEXT":"Lähetimme sinulle sähköpostin, jossa ohjeet uuden salasanan asettamiseksi.","ERROR":"Oompa Loompas sanovat että käyttäjänimesi tai sähköpostisi tai salasanasi on väärä."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Vaihda salasanasi - Taiga","SECTION_NAME":"Muuta salasanaa","FIELD_CURRENT_PASSWORD":"Nykyinen salasana","PLACEHOLDER_CURRENT_PASSWORD":"Nykyinen salasanasi (tai on tyhjä jos sinulla ei vielä ole)","FIELD_NEW_PASSWORD":"Uusi salasana","PLACEHOLDER_NEW_PASSWORD":"Anna uusi salasana","FIELD_RETYPE_PASSWORD":"Anna salasana uudelleen","PLACEHOLDER_RETYPE_PASSWORD":"Anna salasana uudelleen","ERROR_PASSWORD_MATCH":"Salasanat eivät täsmää"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Luo uusi pääsy Taigaan","SUBTITLE":"Rautapitoinen ruoka on hyväksi aivoille :P","PLACEHOLDER_NEW_PASSWORD":"Uusi salasana","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Anna salasana uudelleen","ACTION_RESET_PASSWORD":"Uusi salsanasi","ERROR":"Our Oompa Loompas can't find your request to recover your password. Try to ask for it again.","SUCCESS":"Oompa Loompas tallensi uuden salasanasi.
    Yritä kirjautua sisään sillä."},"INVITATION":{"PAGE_TITLE":"Kutsun hyväksyminen - Taiga","PAGE_DESCRIPTION":"Accept the invitation to join a project in Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Kutsuasi ei löydy.","SUCCESS":"Olet onnistuneesti liittynyt projektiin {{project_name}}. Tervetuloa!"},"HOME":{"PAGE_TITLE":"Etusivu - Taiga","PAGE_DESCRIPTION":"The Taiga home page with your main projects and all your assigned and watched user stories, tasks and issues","EMPTY_WORKING_ON":"Näyttää tyhjätlä, eikövain? Aloita työskentely ja näet tässä sinua koskevat käyttäjätarinat, tehtävät ja tukipyynnöt.","EMPTY_WATCHING":"Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)","EMPTY_PROJECT_LIST":"Sinulla ei ole vielä projekteja","WORKING_ON_SECTION":"Käynnissä olevat","WATCHING_SECTION":"Seurqnnassa","DASHBOARD":"Projektit Dashboard"},"EPICS":{"TITLE":"Eepokset","SECTION_NAME":"Eepokset","EPIC":"Eepokset","PAGE_TITLE":"Eepokset - {{projectName}}","PAGE_DESCRIPTION":"Eepokset {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ Lisää Eepos","UNASSIGNED":"Tekijä puuttuu"},"EMPTY":{"TITLE":"Ei vielä lisättyjä eepoksia","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Lue lisää eepoksista"},"TABLE":{"VOTES":"Ääniä","NAME":"Nimi","PROJECT":"Projekti","SPRINT":"Kierros","ASSIGNED_TO":"Tekijä valittu","STATUS":"Tila","PROGRESS":"Edistyminen","VIEW_OPTIONS":"Näytä asetukset"},"CREATE":{"TITLE":"Uusi Eepos","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Asiakasvaatimus","BLOCKED":"Suljettu","BLOCKED_NOTE_PLACEHOLDER":"Miksi tämä eepos on estetty?","CREATE_EPIC":"Luo eepos"}},"PROJECTS":{"PAGE_TITLE":"Minun projektit - Taiga","PAGE_DESCRIPTION":"Listaus kaikista projekteistasi, voit järjestää niitä tai luoda uuden.","MY_PROJECTS":"Minun projektit"},"ATTACHMENT":{"SECTION_NAME":"liitteet","TITLE":"{{ fileName }} ladattu {{ date }}\n","LIST_VIEW_MODE":"Listanäkymä","GALLERY_VIEW_MODE":"Gallerianäkymä","DESCRIPTION":"Kirjoita lyhyt kuvaus","DEPRECATED":"(poistettu)","DEPRECATED_FILE":"Vanhentunut?","ADD":"Lisää liitetiedosto {{maxFileSizeMsg}}","DROP":"Raahaa liitetiedostot tähän!","SHOW_DEPRECATED":"+ näytä vanhentuneet liitteet","HIDE_DEPRECATED":"- piilota vanhentuneet liitteet","COUNT_DEPRECATED":"({{ counter }} vanhentunutta)","MAX_UPLOAD_SIZE":"Maksimi tiedoston koko {{maxFileSize}}","DATE":"DD.MM.YY - hh:mm","ERROR_UPLOAD_ATTACHMENT":"Emme onnistuneet lataamaan tiedostoa '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Poista liite...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"liite '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Emme pystyneet poistamaan: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Edellinen","NEXT":"Seuraava"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Muokkaa arvoa","TITLE_ACTION_DELETE_VALUE":"Poista arvo","TITLE_ACTION_DELETE_TAG":"Poista avainsana"},"HELP":"Tarvitsetko apua? Katso tukisivuilta.","PROJECT_DEFAULT_VALUES":{"TITLE":"Oletusarvot","SUBTITLE":"Aseta oletukset kaikille syötteille."},"MEMBERSHIPS":{"TITLE":"Hallinnoi jäseniä","PAGE_TITLE":"Jäsenet - {{projectName}}","ADD_BUTTON":"+ Uusi jäsen","ADD_BUTTON_TITLE":"Lisää jäsen","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Vie","SUBTITLE":"Vie projekti varmuuskopioksi tai luo uusi tämän pohjalta.","EXPORT_BUTTON":"Vie","EXPORT_BUTTON_TITLE":"Vie projekti","LOADING_TITLE":"Varmistustiedostoa muodostetaan","DUMP_READY":"Tiedostosi on valmis","LOADING_MESSAGE":"Älä sulje tätä sivua.","ASYNC_MESSAGE":"Lähetämme sähköpostia, kun on valmista.","SYNC_MESSAGE":"Jos lataus ei ala automaattisesti klikkaa tästä.","ERROR":"Oompa Loompas eivät onnistuneet tekemään tiedostoasi. Yritä uudelleen.","ERROR_BUSY":"Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan."},"MODULES":{"TITLE":"Modulit","EPICS":"Eepokset","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Odottavat","BACKLOG_DESCRIPTION":"Hallinnoi käyttäjätarinoita: järjestele ja priorisoi työtä.","NUMBER_SPRINTS":"Arvio sprinttien lukumäärästä","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Arvioitu pisteiden kokonaismäärä","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Järjestä projektisi tehokkaasti tällä taululla.","ISSUES":"Pyynnöt","ISSUES_DESCRIPTION":"Seuraa projektisi virheitä, kysymyksiä ja parannusehdotuksia. Älä jätä mitään huomiotta!","WIKI":"Wiki","WIKI_DESCRIPTION":"Lisää, muokkaa tai poista sisältöä yhteistyössä muiden kanssa. Tämä on oikea paikka projektin dokumentaatiolle.","MEETUP":"Tapaa","MEETUP_DESCRIPTION":"Valitse videoneuvottelusovellus","SELECT_VIDEOCONFERENCE":"Valitse videoconferenssi-järjestelmä","SALT_CHAT_ROOM":"Lisää vakio-osa keskusteluhuoneen nimeen","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Custom","URL_CHAT_ROOM":"Videoneuvottelun URL-osoite"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Projektin profiili - {{projectName}}","PROJECT_DETAILS":"Projektin tiedot","PROJECT_NAME":"Projektin nimi","TAGS":"Avainsanat","DESCRIPTION":"Kuvaus","RECRUITING":"Etsitäänkö tähän projektiin tekijöitä?","RECRUITING_MESSAGE":"Ketä etsit?","RECRUITING_PLACEHOLDER":"Määritä etsittävät profiilit","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Julkinen projekti","PRIVATE_PROJECT":"Yksityinen projekti","PRIVATE_OR_PUBLIC":"Mitä eroa on julkisella ja yksityisellä projektilla?","DELETE":"Poista tämä projekti","CHANGE_LOGO":"Vaihda logo","ACTION_USE_DEFAULT_LOGO":"Käytä oletuskuvaa","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Projektin omistaja","REQUEST_OWNERSHIP":"Pyydä omistusoikeutta","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Pyyntö","REQUEST_OWNERSHIP_SUCCESS":"Ilmoitamme projektin omistajalle","CHANGE_OWNER":"Vaihda omistajaa","CHANGE_OWNER_SUCCESS_TITLE":"Ok, pyyntösi lähetetty!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Raportit","SUBTITLE":"Vie projektisi CSV-tiedostoon","DESCRIPTION":"Download a CSV file or copy the generated URL and open it in your favourite text editor or spreadsheet to make your own project data reports. You will be able to visualize and analyze all your data easily.","HELP":"Kuinka tätä käytetään omassa taulukossani?","REGENERATE_TITLE":"Vaihda URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"käyttäjätarinoiden raportit","SECTION_TITLE_TASK":"tehtävien raportit","SECTION_TITLE_ISSUE":"pyyntöjen raportit","DOWNLOAD":"Lataa CSV-tiedosto","URL_FIELD_PLACEHOLDER":"Tee uusi CSV-url","TITLE_REGENERATE_URL":"Tee uusi CSV-url","ACTION_GENERATE_URL":"Luo URL","ACTION_REGENERATE":"Tee uusi","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Poista"},"CUSTOM_FIELDS":{"TITLE":"Omat kentät","SUBTITLE":"Määritele omia kenttiä käyttäjätarinoihin, tehtäviin ja pyytöihin","EPIC_DESCRIPTION":"Eeposten vapaavalintaiset kentät","EPIC_ADD":"Lisää vapaavalintainen kenttä eepoksiin","US_DESCRIPTION":"Käyttäjätarinoiden omat kentät","US_ADD":"Lisää käyttäjätarinoihin oma kenttä","TASK_DESCRIPTION":"Tehtävien omat kentät","TASK_ADD":"Lisää omia kenttiä tehtäviin","ISSUE_DESCRIPTION":"Pyyntöjen omat kentät","ISSUE_ADD":"Lisää oma kenttä pyynnöille","FIELD_TYPE_TEXT":"Teksti","FIELD_TYPE_RICHTEXT":"Muotoiltu teksti","FIELD_TYPE_MULTI":"Monirivinen","FIELD_TYPE_DATE":"PVM","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Project values - {{projectName}}","REPLACEMENT":"Kaikkii riveihin joissa on tämä arvo muutetaan ","ERROR_DELETE_ALL":"Et voi poistaa kaikkia arvoja."},"PROJECT_VALUES_POINTS":{"TITLE":"Pisteet","SUBTITLE":"Määrittele pisteet joihin käyttäjätarinat voidaan arvioida","US_TITLE":"Tarinapisteet","ACTION_ADD":"Lisää uusi piste"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioriteetit","SUBTITLE":"Määrittele tärkeydet pyynnöille","ISSUE_TITLE":"Issue prioriteetit","ACTION_ADD":"Lisää uusi tärkeys"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Vakavuudet","SUBTITLE":"Määrittele pyyntöjen vakavuudet","ISSUE_TITLE":"Issue severities","ACTION_ADD":"Lisää uusi vakavuus"},"PROJECT_VALUES_STATUS":{"TITLE":"Tilat","SUBTITLE":"Määrittele tilat joiden kautta käyttäjätarinasi, tehtäväsi ja pyyntösi kulkevat","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Tehtävien tilat","ISSUE_TITLE":"Pyyntöjen tilat"},"PROJECT_VALUES_TYPES":{"TITLE":"Tyypit","SUBTITLE":"Määrittele pyyntöjen tyypit","ISSUE_TITLE":"Pyyntöjen tyypit","ACTION_ADD":"Lisää uusi {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Avainsanat","SUBTITLE":"Näytä ja muokkaa tagien värejä","EMPTY":"Ei tageja","EMPTY_SEARCH":"Ei hakutuloksia","ACTION_ADD":"Lisää avainsana","NEW_TAG":"Uusi tagi","MIXING_HELP_TEXT":"Valitse yhdistettävät tagit","MIXING_MERGE":"Yhdistä tagit","SELECTED":"Valittu"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Lisää uusi tila","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roolit - {{projectName}}","WARNING_NO_ROLE":"Ole varovainen, yksikään rooli projektissasi ei voi arvioida käyttäjätarinoidesi kokoa","HELP_ROLE_ENABLED":"Tämän roolin omaavat jäsenet voivat arvioida käyttäjätarinoiden kokoja","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} jäsentä joilla tämä rooli","TITLE_DELETE_ROLE":"Poista rooli","REPLACEMENT_ROLE":"Kaikki käyttäjä joilla on tämä rooli siirretään","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Voit poistaa kaikki arvot","EXTERNAL_USER":"Ulkoinen käyttäjä","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Salainen avain","PAYLOAD_URL":"Yhteyden URL-osoite","VALID_IPS":"Vaadittavat lähdeIPt (pilkuilla eroteltuna)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket pyynnöt eivät ole allekirjoitettuja joten tarkista IP. Jos IP on tyhjä, ei sitä tarkisteta."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab pyynnöt eivät ole allekirjoitettuja joten tarkista IP. Jos IP on tyhjä, ei sitä tarkisteta."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhookit","ADD_NEW":"Lisää webhook","TYPE_NAME":"Anna palvelun nimi","TYPE_PAYLOAD_URL":"Anna palvelun yhteysosoite (URL)","TYPE_SERVICE_SECRET":"Anna palvelun yksityinen avain","SAVE":"Tallenna Webhook","CANCEL":"Peruuta Webhook","SHOW_HISTORY":"(Näytä historia)","TEST":"Testaa webhook","EDIT":"Muokkaa webhookkia","DELETE":"Poista Webhook","REQUEST":"Pyyntö","RESEND_REQUEST":"Lähetä pyyntö uudestaan","HEADERS":"Ylätunnisteet","PAYLOAD":"Hyötykuorma","RESPONSE":"Vastaus","DATE":"DD.MM.YY - hh:mm:ss","ACTION_HIDE_HISTORY":"(Piilota historia)","ACTION_HIDE_HISTORY_TITLE":"Piilota historian yksityiskohdat","ACTION_SHOW_HISTORY":"(Näytä historia)","ACTION_SHOW_HISTORY_TITLE":"Näytä historian yksityiskohdat","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Custom Attributes - {{projectName}}","ADD":"Anna oma kenttä","EDIT":"Muokkaa omaa kenttää","DELETE":"Poista oma kenttä","SAVE_TITLE":"Tallenna oma kenttä","CANCEL_TITLE":"Peru luonti","SET_FIELD_NAME":"Anna oman kentän nimi","SET_FIELD_DESCRIPTION":"Anna oman kenttäsi kuvaus","FIELD_TYPE_DEFAULT":"-- valitse yksi --","ACTION_UPDATE":"Päivitä oma kenttä","ACTION_CANCEL_EDITION":"Peru versio"},"MEMBERSHIP":{"COLUMN_MEMBER":"Jäsen","COLUMN_ADMIN":"Hallinnoi","COLUMN_ROLE":"Rooli","COLUMN_STATUS":"Tila","STATUS_ACTIVE":"Aktiivinen","STATUS_PENDING":"Odottaa","DELETE_MEMBER":"Poista jäsen","RESEND":"Lähetä uudelleen","SUCCESS_SEND_INVITATION":"Olemme lähettäneet kutsun uudelleen osoitteeseen '{{email}}'.","SUCCESS_DELETE":"Olemme poistaneet viestin {{message}}.","ERROR_DELETE":"Emme pystyneet poistamaan viestiä {{message}}.","DEFAULT_DELETE_MESSAGE":"kutsu sähköpostiin {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Oletukset pisteiden valintaan","LABEL_TASK_STATUS":"Oletukset tehtävien tilaksi","LABEL_ISSUE_TYPE":"Oletukset pyyntöjen tyypeiksi","LABEL_ISSUE_STATUS":"Oletukset pyyntöjen statuksiksi","LABEL_PRIORITY":"Oletus arvo tärkeyden valiintaan","LABEL_SEVERITY":"Oletukset vakavuudeksi"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Anna uuden tilan nimi","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Anna uuden elementin nimi"},"US_STATUS":{"ACTION_ADD_STATUS":"Lisää uusi tila","IS_ARCHIVED_COLUMN":"Arkistoitu","IS_CLOSED_COLUMN":"Suljettu","WIP_LIMIT_COLUMN":"WIP raja","PLACEHOLDER_WRITE_NAME":"Anna uuden tilan nimi"},"MENU":{"PROJECT":"Projekti","ATTRIBUTES":"Attribuutit","MEMBERS":"Jäsenet","PERMISSIONS":"Oikeudet","INTEGRATIONS":"Intergraatiot"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Tila","POINTS":"Pisteet","PRIORITIES":"Tärkeydet","SEVERITIES":"Vakavuudet","TYPES":"Tyypit","CUSTOM_FIELDS":"Omat kentät","TAGS":"Avainsanat","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roolit","ACTION_NEW_ROLE":"+ Uusi rooli","TITLE_ACTION_NEW_ROLE":"Lisää uusi rooli"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Haluaisitko uudeksi projektin omistajaksi?","PRIVATE":"Yksityinen","ACCEPTED_PROJECT_OWNERNSHIP":"Onnittelu! Olet nyt projektin omistaja.","REJECTED_PROJECT_OWNERNSHIP":"OK. Ilmoitamme projektin omistajalle.","ACCEPT":"Hyväksy","REJECT":"Hylkää","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Rajoittamaton","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Muokkaa profiilia","CLOSED_US":"Suljettu US","PROJECTS":"Projektit","PROJECTS_EMPTY":"{{username}} ei vielä omia projekteja","CONTACTS":"Yhteystiedot","CONTACTS_EMPTY":"{{username}} doesn't have contacts yet","CURRENT_USER_CONTACTS_EMPTY":"You don't have contacts yet","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"The people with whom you work at Taiga will be your contacts automatically","TABS":{"ACTIVITY_TAB":"Aikajana","ACTIVITY_TAB_TITLE":"Näytä tämä käyttäjän tapahtumat","PROJECTS_TAB":"Projektit","PROJECTS_TAB_TITLE":"Projektit joissa tämä käyttäjä on mukana","LIKES_TAB":"Tykkäykset","LIKES_TAB_TITLE":"Näytä tämän käyttäjän tykkäykset","VOTES_TAB":"Ääniä","VOTES_TAB_TITLE":"Näyttä kaikki tämän käyttäjän äänestykset","WATCHED_TAB":"Seurattu","WATCHED_TAB_TITLE":"Näytä kaikki tämän käyttäjän seuraamat kohteet","CONTACTS_TAB":"Yhteystiedot","CONTACTS_TAB_TITLE":"Listaa tämän käyttäjän tekemät kontaktit"}},"PROFILE_SIDEBAR":{"TITLE":"Oma profiili","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"Muokkaa bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Kirjoita tähän...","FILTER_TYPE_ALL":"Kaikki","FILTER_TYPE_ALL_TITLE":"Näytä kaikki","FILTER_TYPE_PROJECTS":"Projektit","FILTER_TYPE_PROJECTS_TITLE":"Näytä vain projektit","FILTER_TYPE_EPICS":"Eepokset","FILTER_TYPE_EPICS_TITLE":"Näytä vain eepokset","FILTER_TYPE_USER_STORIES":"Tarinat","FILTER_TYPE_USER_STORIES_TITLE":"Näytä vain käyttäjätarinat","FILTER_TYPE_TASKS":"Tehtävät","FILTER_TYPE_TASKS_TITLE":"Näytä vain tehtävät","FILTER_TYPE_ISSUES":"Pyynnöt","FILTER_TYPE_ISSUES_TITLE":"Show only issues","EMPTY_TITLE":"It looks like there's nothing to show here."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reorder your projects to set in the top the most used ones.
    The top 10 projects will appear in the top navigation bar project list","PRIVATE":"Yksityinen projekti","LOOKING_FOR_PEOPLE":"Tähän projektiin etsitään tekijöitä","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Estetty projekti","THIS_PROJECT_IS_BLOCKED":"Projekti estetty väliaikaisesti","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"In order to unblock your projects, contact the administrator."},"SECTION":{"SEARCH":"Hae","TIMELINE":"Aikajana","EPICS":"Eepokset","BACKLOG":"Odottavat","KANBAN":"Kanban","ISSUES":"Pyynnöt","WIKI":"Wiki","TEAM":"Tiimi","MEETUP":"Tapaa","ADMIN":"Hallinnoi"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Luo projekti","MANAGE_PROJECTS":"Hallitse projekteja","TITLE_CREATE_PROJECT":"Luo projekti","HELP_TITLE":"Taiga Tukisivusto","HELP":"Ohjeet","HOMEPAGE":"Etusivu","FEEDBACK_TITLE":"Lähetä palautetta","FEEDBACK":"Palaute","NOTIFICATIONS_TITLE":"Muokkaa ilmoitusasetuksiasi","NOTIFICATIONS":"Ilmoitukset","VIEW_PROFILE_TITLE":"Näytä profiili","VIEW_PROFILE":"Näytä profiili","EDIT_PROFILE_TITLE":"Muokkaa profiiliasi","EDIT_PROFILE":"Muokkaa profiilia","CHANGE_PASSWORD_TITLE":"Muuta salasanaa","CHANGE_PASSWORD":"Muuta salasanaa","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Discover trending projects","DISCOVER":"Discover"},"LIKE_BUTTON":{"LIKE":"Tykkää","LIKED":"Tykätty","UNLIKE":"Poista tykkäys","BUTTON_TITLE":"Like or unlike this project","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Seuraa tätä projektia ja aseta ilmoitukset","WATCH":"Seuraa","WATCHING":"Seuraa","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Tilaa kaikki ilmoitukset","NOTIFY_ALL_TITLE":"Vastaanota kaikki tämän projektin ilmoitukset","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Vastaanota ilmoituksia vain kun osallistut","UNWATCH":"Lopeta seuraaminen","UNWATCH_TITLE":"Lopeta seuraaminen"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Luo projekti","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Kopioi projekti","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Luo projekti tiedostosta","IMPORT_DESC":"Tuo projekti muista järjestelmistä Taigaan","INVITE":"Kutsu projektiin","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Palvelin","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Julkinen projekti","PRIVATE_PROJECT":"Yksityinen projekti"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Projektin nimi","PROJECT_DESCRIPTION":"Projektikuvaus"},"DUPLICATE":{"TITLE":"Kopioi projekti","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Valitse kopioitava projekti"},"IMPORT":{"TITLE":"Tuo projekti","DESCRIPTION":"Tuo projekti muista järjestelmistä Taigaan","ASYNC_IN_PROGRESS_TITLE":" Oompa Loompas tuovat projektia","ASYNC_IN_PROGRESS_MESSAGE":"Tämä voi kestää muutaman minuutin
    Lähetämme sähköpostin on valmista","UPLOAD_IN_PROGRESS_MESSAGE":"LAdattu {{uploadedSize}} / {{totalSize}}","ERROR":"Oompa Loompas eivät onnistuneet tuomaan tiedostoasi. Yritä uudestaan.","ERROR_TOO_MANY_REQUEST":"Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan.","ERROR_MESSAGE":"Oompa Loompas eivät pysty lukemaan tiedostoasi: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})","SYNC_SUCCESS":"Projektisi on tuotu sisään onnistuneesti","IMPORT":"Tuo","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Projektin jäsenet","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Onko {{user_external}} sama henkilö kuin {{user_internal}}?","CHOOSE":"Valitse käyttäjä","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Valitse tekijä","PROJECT_SELECTOR":{"NO_RESULTS":"Ei hakutuloksia","ACTION_SEARCH":"hae","ACTION_BACK":"Palvelin"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Tilisi sallii vain {{members}} jäsenet","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Luetaan sisään projektia","DESCRIPTION":"Tämä voi kestää hetken, pidä ikkuna auki."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Tuo Trello taulut Taigaan","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Tuo GitHub issuet","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Pyynnöt","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Haluatko varmasti poistaa Taiga-tunnuksesi?","CANCEL":"Takaisin asetuksiin","ACCEPT":"Poista tili","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Poista projekti","QUESTION":"Haluatko varmasti poistaa tämän projektin?","SUBTITLE":"Projektin kaikki tiedot poistetaan :-(","CONFIRM":"Kyllä, tiedän mitä teen"},"ASSIGNED_TO":{"SELECT":"Valitse tekijä","SEARCH":"Hae käyttäjiä"},"ADD_MEMBER":{"TITLE":"Uusi jäsen","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Lisää sähköposti","REMOVE":"Poista","INVITE":"Kutsu","CHOOSE_ROLE":"Valitse rooli","PLACEHOLDER_INVITATION_TEXT":"(Vapaaehtoinen) Lisää oma kuvaus kutsuusi uusille jäsenille ;-)","HELP_TEXT":"Taigan käyttäjät lisätään automaattisesti, muille lähetetään kutsu."},"FEEDBACK":{"TITLE":"Kerro jotain...","COMMENT":"...virhe, ehdotuksia, tai huonoin kokemuksesi Taigan kanssa","ACTION_SEND":"Lähetä palautetta"},"SEARCH":{"TITLE":"Hae","PLACEHOLDER_SEARCH":"Mitä etsit?"},"ADD_EDIT_SPRINT":{"TITLE":"Uusi kierros","PLACEHOLDER_SPRINT_NAME":"kierroksen nimi","PLACEHOLDER_SPRINT_START":"Arvioitu alku","PLACEHOLDER_SPRINT_END":"Arvioitu loppu","ACTION_DELETE_SPRINT":"Haluatko poistaa tämän kierroksen?","TITLE_ACTION_DELETE_SPRINT":"poista kierros","LAST_SPRINT_NAME":"viimeinen kierros on {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Lisää pyyntö","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Poista kierros"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Vapaaehtoinen) Lisää oma kuvaus kutsuusi uusille jäsenille ;-)","PLACEHOLDER_TYPE_EMAIL":"Anna sähköposti","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Vaihda projektin omistaja"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Pyydä projektin omistajan muutosta"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Lisää kommentti","BUTTON":"Pyydä tätä jäsentä uudeksi projektin omistajaksi"},"CONTACT_PROJECT":{"TITLE":"Lähetä sähköposti","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Kirjoita viesti","SEND":"Lähetä"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Mikä on projekti?","CHOOSE_PROJECT_FROM":"Mikä on projekti?","SUBJECT":"Aihe","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Ei hakutuloksia"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Eepos {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Eepos","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Linkitä","NEW_USERSTORY":"Uusi käyttäjätarina","EXISTING_USERSTORY":"Luodut käyttäjätarinat","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Aihe","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"Ei hakutuloksia","FILTER_USERSTORIES":"Suodata käyttäjätarinoita","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Poista eepos"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Käyttäjätarina {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Completed {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} of {{userStoryTotalTasks}} tasks closed). Points: {{userStoryPoints}}. Description: {{userStoryDescription}}","SECTION_NAME":"Käyttäjätarina","LINK_TASKBOARD":"Tehtävätaulu","TITLE_LINK_TASKBOARD":"Siirry tehtävätauluun","TOTAL_POINTS":"pisteet yhteensä","ADD":"+ Lisää uusi käyttäjätarina","ADD_BULK":"Lisää monta käyttäjätarinaa","PROMOTED":"Tämä Kt on liitetty pyyntöön:","TITLE_LINK_GO_TO_ISSUE":"Siirry pyyntöön","TITLE_DELETE_ACTION":"Poista käyttäjätarina","LIGHTBOX_TITLE_BLOKING_US":"Meitä estää","NOT_ESTIMATED":"Ei arvioitu","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Lisätietoa","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Muokkaa linkkiä","CLOSE":"Sulje","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Tarvitsetko tekijän tälle tehtävälle?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Kommentti poistettu {{user}}","COMMENTS_COUNT":"{{comments}} Kommentit","OLDER_FIRST":"Vanhin ensin","RECENT_FIRST":"Viimeisin ensin","COMMENT":"Kommentti","EDITED_COMMENT":"Muokattu:","SHOW_HISTORY":"Näytä historia","TYPE_NEW_COMMENT":"Lisää uusi kommentti tässä","SHOW_DELETED":"Näytä poistettu kommentti","HIDE_DELETED":"Piilota poistettu kommentti","DELETE":"Poista kommentti","RESTORE":"Palauta kommentti","HISTORY":{"TITLE":"Aktiivisuus"}},"ACTIVITY":{"TITLE":"Aktiivisuus","ACTIVITIES_COUNT":"{{activities}} Aktiviteetit","TAGS_ADDED":"tagit lisätty","TAGS_REMOVED":"tagit poistettu:","US_POINTS":"{{role}} pisteet","NEW_ATTACHMENT":"uusi liitetiedosto:","DELETED_ATTACHMENT":"poistettu liitetiedosto:","UPDATED_ATTACHMENT":"päivitetty liitetiedosto ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Tiimin vaatimus","CLIENT_REQUIREMENT":"Asiakkaan vaatimus","BLOCKED":"Suljettu","VALUES":{"NOT_SET":"not set","UNASSIGNED":"ilman tekijää"},"FIELDS":{"SUBJECT":"aihe","DESCRIPTION":"kuvaus","PRIORITY":"kiireellisyys","SEVERITY":"vakavuus","STATUS":"tila","TYPE":"tyyppi","ASSIGNED_TO":"tekijä on","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"kierros","COLOR":"väri"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"The backlog panel, with user stories and sprints of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Odottavat","CUSTOMIZE_GRAPH":"Muokkaa backlog-graafia","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Hallinnoi","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Siirrä nykyiseen kierrokseen","MOVE_US_TO_LATEST_SPRINT":"Move to latest Sprint","EMPTY":"The backlog is empty!","CREATE_NEW_US":"Luo uusi Kt","CREATE_NEW_US_EMPTY_HELP":"Voit haluta lisätä uuden käyttäjätarinan","EXCESS_OF_POINTS":"Pisteiden ylimäärä","PENDING_POINTS":"Odottavat pisteet","CLOSED_POINTS":"suljettu","COMPACT_SPRINT":"Kompakti kierros","GO_TO_TASKBOARD":"Siirry tehtävätauluun {{::name}}","EDIT_SPRINT":"Muokkaa kierrosta","TOTAL_POINTS":"yhteensä","STATUS_NAME":"Tilan nimi","SORTABLE_FILTER_ERROR":"Et voi viedä odottaviin, kun suodattimet ovat auki","DOOMLINE":"Projektin laajuus [Doomline]","CHART":{"XAXIS_LABEL":"Kierrokset","YAXIS_LABEL":"Pisteet","OPTIMAL":"Optimal pending points for sprint \"{{sprintName}}\" should be {{value}}","REAL":"Real pending points for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"Vaihda avainsanojen näkyvyyttä","SHOW":"Näytä avainsanat","HIDE":"Piilota avainsanat"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Käyttäjätarinat","TITLE_COLUMN_POINTS":"Valitse näkymä roolille"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"yhteensä
    pistettä","COMPLETED_POINTS":"valmiina
    pistettä","OPEN_TASKS":"avaa
    tehtävät","CLOSED_TASKS":"suljettu
    tehtävää","IOCAINE_DOSES":"myrkkye-
    annosta","SHOW_STATISTICS_TITLE":"Näytä tilastot","TOGGLE_BAKLOG_GRAPH":"Näytä/Piilota burndown-kaavio","POINTS_PER_ROLE":"Pisteitä per rooli"},"SUMMARY":{"PROJECT_POINTS":"projekti
    pistettä","DEFINED_POINTS":"määritellyt
    pisteet","CLOSED_POINTS":"suljettu
    pistettä","POINTS_PER_SPRINT":"pisettä/
    kierros"},"FILTERS":{"TOGGLE":"Vaihda suodattimien näkyvyyttä","HIDE":"Piilota suodattimet","SHOW":"Näytä suodattimet"},"SPRINTS":{"TITLE":"KIERROKSET","DATE":"DD.MM.YY","LINK_TASKBOARD":"Kierroksien tehtävätaulu","TITLE_LINK_TASKBOARD":"Siirry tehtävätauluun {{name}}","EMPTY":"Ei vielä sprinttejä","WARNING_EMPTY_SPRINT_ANONYMOUS":"Tässä sprintissä ei ole käyttäjätarinoita","WARNING_EMPTY_SPRINT":"Raahaa tähän käyttäjätarinoita aloittaaksesi uuden sprintin","TITLE_ACTION_NEW_SPRINT":"Lisää uusi sprintti","TEXT_ACTION_NEW_SPRINT":"Saatat haluta luoda uuden sprintin projektiisi","ACTION_SHOW_CLOSED_SPRINTS":"Näytä suljetut kierrokset","ACTION_HIDE_CLOSED_SPRINTS":"Piilota suljetut kierrokset"}},"ERROR":{"TEXT1":"Jotain tapahtui ja Oompa Loompas työskentelevät sen parissa.","NOT_FOUND":"Ei löytynyt","NOT_FOUND_TEXT":"Virhe 404. Sivua ei löydy. Palaa takaisin TAIGA etusivulle ja katso löydätkö haluamasi sieltä.","PERMISSION_DENIED":"Ei oikeutta","PERMISSION_DENIED_TEXT":"Pääsy estetty.","VERSION_ERROR":"Joku Taigassa on päivittänyt tätä ennen sinua. Muutoksiasi ei voida tallentaa. Lataa sivu uudestaan ja korjaa tilanne."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint tehtävätaulu - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} to {{endDate}}) of {{projectName}}. Completed {{completedPercentage}}% ({{completedPoints}} of {{totalPoints}} points). {{openTasks}} opened tasks of {{totalTasks}}.","SECTION_NAME":"Tehtävätaulu","TITLE_ACTION_ADD":"Lisää uusi tehtävä","TITLE_ACTION_ADD_BULK":"Lisää monta tehtävää","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Valitse tekijä","PLACEHOLDER_CARD_TITLE":"This could be a task","PLACEHOLDER_CARD_TEXT":"Jaa tarinat tehtäviksi, että voit seurata niitä erikseen","TABLE":{"COLUMN":"Käyttäjätarina","TITLE_ACTION_FOLD":"Kavenna sarake","TITLE_ACTION_UNFOLD":"Laajenna sarake","TITLE_ACTION_FOLD_ROW":"Kavenna rivi","TITLE_ACTION_UNFOLD_ROW":"Laajenna rivi","FIELD_POINTS":"pisteet","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Päivät","YAXIS_LABEL":"Pisteet","OPTIMAL":"Optimaaliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}","REAL":"Todelliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}","DATE":"DD.MM.YY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tehtävä {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Tilanne: {{taskStatus }}. Kuvaus: {{taskDescription}}","SECTION_NAME":"Tehtävä","LINK_TASKBOARD":"Tehtävätaulu","TITLE_LINK_TASKBOARD":"Siirry tehtävätauluun","PLACEHOLDER_SUBJECT":"Anna tehtävän aihe","TITLE_SELECT_STATUS":"Tilan nimi","OWNER_US":"Tehtävä kuuluu käyttäjälle ","TITLE_LINK_GO_OWNER":"Siirry käyttäjätarinaan","TITLE_DELETE_ACTION":"Poista tehtävä","LIGHTBOX_TITLE_BLOKING_TASK":"Estävä tehtävä","FIELDS":{"IS_IOCAINE":"Myrkyllinen"},"TITLE_ACTION_IOCAINE":"Rasittaako tehtävä? Kerro muillekin klikkaamalla myrkyn kuvaketta. Sattaa myös helpottaa jatkossa jos nautit vähitellen."},"NOTIFICATION":{"OK":"Kaikki on kunnossa","WARNING":"Oops, jotain tapahtui...","WARNING_TEXT":"Oompa Loompas eivät pystyneet tallentamaan muutoksiasi!","SAVED":"Oompa Loompas tallensivat kaikki muutoksesi!","CLOSE":"Sulje ilmoitus","MAIL":"Ilmoitukset sähköpostilla","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Oletko varma että haluat poistaa tämän?"},"CANCEL_ACCOUNT":{"TITLE":"Peru tunnuksesi","SUBTITLE":"Olemme pahoillamme että jätät Taigan. Toivottavasti nautit oleskelusta :)","PLACEHOLDER_INPUT_TOKEN":"peru tunnus tokeni","ACTION_LEAVING":"Kyllä, olen lähdössä!","SUCCESS":" Oompa Loompas poistivat tunnuksesi"},"CHANGE_EMAIL_FORM":{"TITLE":"Muuta sähköpostisi","SUBTITLE":"Vielä yksi klikki ja sähköpostisi on päivitetty!","PLACEHOLDER_INPUT_TOKEN":"muuta sähköposti-tokenia","ACTION_CHANGE_EMAIL":"Muuta sähköpostisi","SUCCESS":"Oompa Loompas päivittivät sähköpostisi"},"ISSUES":{"PAGE_TITLE":"Issues - {{projectName}}","PAGE_DESCRIPTION":"The issues list panel of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Issue","ACTION_NEW_ISSUE":"+ UUSI PYYNTÖ","ACTION_PROMOTE_TO_US":"Liitä käyttäjätarinaan","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Tämä pyyntö on liitetty Kthen:","EXTERNAL_REFERENCE":"Tämä pyyntö on luotu täältä:","GO_TO_EXTERNAL_REFERENCE":"Palaa alkuun","ACTION_DELETE":"Poista pyyntö","LIGHTBOX_TITLE_BLOKING_ISSUE":"Estävä pyyntö","LINK_TASKBOARD":"Tehtävätaulu","TITLE_LINK_TASKBOARD":"Siirry tehtävätauluun","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Tärkeys","SEVERITY":"Vakavuus","TYPE":"Tyyppi"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Liitä tämä pyyntö uuteen käyttäjätarinaan","MESSAGE":"Haluatko varmasti lisätä uuden käyttäjätarinan tästä pyynnöstä?"},"TABLE":{"COLUMNS":{"TYPE":"Tyyppi","SEVERITY":"Vakavuus","PRIORITY":"Tärkeys","SUBJECT":"Aihe","VOTES":"Ääniä","STATUS":"Tila","MODIFIED":"Muokattu","ASSIGNED_TO":"Tekijä"},"TITLE_ACTION_CHANGE_STATUS":"Muuta tilaa","TITLE_ACTION_ASSIGNED_TO":"Tekijä","BLOCKED":"Suljettu","EMPTY":{"TITLE":"Ei raportoitavia pyyntöjä:-)","SUBTITLE":"Löysitkö ongelman?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Issue {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Type: {{issueType}}, Priority: {{issuePriority}}. Severity: {{issueSeverity}}. Description: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Kanban-taulu, projektin käyttäjätarinat {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Kavenna sarake","TITLE_ACTION_UNFOLD":"Laajenna sarake","TITLE_ACTION_ADD_US":"Lisää uusi käyttäjätarina","TITLE_ACTION_ADD_BULK":"Lisää monta","ACTION_SHOW_ARCHIVED":"Näytä arkisto","ACTION_HIDE_ARCHIVED":"Piilota arkisto","HIDDEN_USER_STORIES":"Käyttäjätarinat tällä alueella ovat oletuksena piilotettuna","PLACEHOLDER_CARD_TITLE":"Nämä ovat käyttäjätarinasi","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Etsi - {{projectName}}","PAGE_DESCRIPTION":"Etsi projektisisällöstä: tarinat, tehtävät, wiki... {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Eepokset","FILTER_USER_STORIES":"Käyttäjätarinat","FILTER_ISSUES":"Pyynnöt","FILTER_TASKS":"Tehtävät","FILTER_WIKI":"Wiki-sivut","PLACEHOLDER_SEARCH":"Etsi täältä...","TITLE_ACTION_SEARCH":"hae","EMPTY_TITLE":"Mitään ei löytynyt.","EMPTY_DESCRIPTION":"Kokeile ylempiä välilehtiä ja hae uudestaan"},"TEAM":{"PAGE_TITLE":"Tiimi - {{projectName}}","PAGE_DESCRIPTION":"The team panel to show all the members of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Tiimi","PLACEHOLDER_INPUT_SEARCH":"Etsi koko nimellä...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Suljetut pyynnöt","COLUMN_IOCAINE":"Myrkyn syöjä","EXPLANATION_COLUMN_IOCAINE":"Kertyneet myrkyt","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki-sivuja muokattu","COLUMN_BUG_HUNTER":"Virheiden metsästäjä","EXPLANATION_COLUMN_BUG_HUNTER":"Pyyntöjä raportoitu","COLUMN_NIGHT_SHIFT":"Yövuoro","EXPLANATION_COLUMN_NIGHT_SHIFT":"Suljetut tehtävät","COLUMN_TOTAL_POWER":"Kokonaisvoima","EXPLANATION_COLUMN_TOTAL_POWER":"Kokonaispisteet","SECTION_TITLE_TEAM":"Tiimi >","SECTION_FILTER_ALL":"Kaikki","CONFIRM_LEAVE_PROJECT":"Oletko varma että haluat poistua projektista?","ACTION_LEAVE_PROJECT":"Poistu projektista"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"Maksimi koko {{maxFileSize}}","MENU":{"SECTION_TITLE":"Käyttäjän asetukset","USER_PROFILE":"Käyttäjän profiili","CHANGE_PASSWORD":"Muuta salasanaa","EMAIL_NOTIFICATIONS":"Sähköposti-ilmoitukset","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Sähköposti-ilmoitukset","COLUMN_PROJECT":"Projekti","COLUMN_RECEIVE_ALL":"Vastaanota kaikki","COLUMN_ONLY_INVOLVED":"Ainoa osallinen","COLUMN_NO_NOTIFICATIONS":"Ei ilmoituksia","OPTION_ALL":"Kaikki","OPTION_INVOLVED":"Osallisena","OPTION_NONE":"Ei yhtään"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projekti","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projekti"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Käytä oletuskuvaa","ACTION_DELETE_ACCOUNT":"Poista Taiga-tunnus","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Tarkista sähköpostisi!
    Lähetimme ohjeet
    {{email}}
    uuden osoitteen asettamiseen","CHANGE_PHOTO":"Muuta kuva","FIELD":{"USERNAME":"Käyttäjänimi","EMAIL":"Sähköposti","FULL_NAME":"Koko nimi","PLACEHOLDER_FULL_NAME":"Anna koko nimesi","BIO":"Bio (max. 210 merkkiä)","PLACEHOLDER_BIO":"Kerro jotain itsestäsi","LANGUAGE":"Kieli","LANGUAGE_DEFAULT":"-- käytä oletuskieltä --","THEME":"Teema","THEME_DEFAULT":"-- käytä vakioteemaa --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}","DATETIME":"DD.MM.YY - HH:mm","REMOVE":"Poista tämä wiki-sivu","DELETE_LIGHTBOX_TITLE":"Poista wiki-sivu","DELETE_LINK_TITLE":"Poista Wiki linkki","NAVIGATION":{"HOME":"Etusivu","SECTION_NAME":"Kirjanmerkit","ACTION_ADD_LINK":"Lisää kirjanmerkki","ALL_PAGES":"Kaikki wiki-sivut"},"SUMMARY":{"TIMES_EDITED":"kertaa
    muokattu","LAST_EDIT":"viimeinen
    muokkaus","LAST_MODIFICATION":"viimeinen muokkaus"},"SECTION_PAGES_LIST":"Kaikki sivut","PAGES_LIST_COLUMNS":{"TITLE":"Otsikko","EDITIONS":"Editions","CREATED":"Luotu","MODIFIED":"Muokattu","CREATOR":"Luoja","LAST_MODIFIER":"Viimeinen muokkaaja"}},"HINTS":{"SECTION_NAME":"Vihje","LINK":"If you want to know how to use it visit our support page","LINK_TITLE":"Vieraile tukisivustolla","HINT1_TITLE":"Did you know you can import and export projects?","HINT1_TEXT":"This allow you to extract all your data from one Taiga and move it to another one.","HINT2_TITLE":"Did you know you can create custom fields?","HINT2_TEXT":"Teams can now create custom fields as a flexible means to enter specific data useful for their particular workflow.","HINT3_TITLE":"Järjestä projektit itsellesi tärkeysjärjestykseen.","HINT3_TEXT":"The 10 projects are listed in the direct access bar at the top.","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":{"UPLOAD_ATTACHMENT":"{{username}} lisäsi uuden liitetiedoston {{obj_name}}","US_CREATED":"{{username}} loi uuden käyttäjätarinan {{obj_name}} {{project_name}}","ISSUE_CREATED":"{{username}} has created a new issue {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} loi uuden tehtävän {{obj_name}} -\n {{project_name}}","TASK_CREATED_WITH_US":"{{username}} has created a new task {{obj_name}} in {{project_name}} which belongs to the US {{us_name}}","WIKI_CREATED":"{{username}} has created a new wiki page {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} loi uuden sprintin {{obj_name}} - {{project_name}}","EPIC_CREATED":"{{username}} loi uuden eepoksen {{obj_name}} - {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} loi projektin {{project_name}}","MILESTONE_UPDATED":"{{username}} muokkasi sprinttiä {{obj_name}}","US_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}} to {{new_value}}","US_UPDATED_POINTS":"{{username}} has updated '{{role_name}}' points of the US {{obj_name}} to {{new_value}}","ISSUE_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}} to {{new_value}}","TASK_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} which belongs to the US {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} which belongs to the US {{us_name}} to {{new_value}}","WIKI_UPDATED":"{{username}} päivitti wikiä {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} kommentoi tarinaa {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} has commented in the issue {{obj_name}}","NEW_COMMENT_TASK":"{{username}} has commented in the task {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} uusi jäsen lisätty","US_ADDED_MILESTONE":"{{username}} has added the US {{obj_name}} to {{sprint_name}}","US_MOVED":"{{username}} has moved the US {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} has added the US {{obj_name}} to the backlog","BLOCKED":"{{username}} has blocked {{obj_name}}","UNBLOCKED":"{{username}} has unblocked {{obj_name}}","NEW_USER":"{{username}} has joined Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Issue","TASK":"Tehtävä"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Kirjaudu toisena käyttäjänä","AUTHORIZE_APP":"Authorize app","CANCEL":"Peru"},"JOYRIDE":{"NAV":{"NEXT":"Seuraava","BACK":"Palvelin","SKIP":"Ohita","DONE":"Tehty"},"DASHBOARD":{"STEP1":{"TITLE":"Projektisi","TEXT":"Tervetuloa! Tässä näet projektit, joissa olet mukana."},"STEP2":{"TITLE":"Käynnissä olevat","TEXT":"Here you will find the User Stories, Tasks and Issues in which you are working on."},"STEP3":{"TITLE":"Seuraa","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"You are already working with Taiga ;)"},"STEP4":{"TITLE":"Aloitetaan","TEXT1":"You can start by creating your first Taiga project.","TEXT2":"Onnea matkaan!"}},"BACKLOG":{"STEP1":{"TITLE":"Projektiyhteenveto","TEXT1":"Here you will see the state of your project.","TEXT2":"Voit muokata projektiin liityviä asetuksia admin-näkymässä."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Kierrokset","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"Käyttäjätarinat","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"Käyttäjätarinat & Tehtävät","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Onnea matkaan!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Discover projects","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Aktiivisin","MOST_ACTIVE_EMPTY":"Ei vielä AKTIIVISIA projekteja","MOST_LIKED":"Eniten tykätty","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"Näytä lisää","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Kaikki","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Etsitään tekijöitä","WEEK":"Viime viikko","MONTH":"Viime kuu","YEAR":"Viime vuosi","ALL_TIME":"All time","CLEAR":"Tyhjennä suodattimet"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Kirjoita tähän...","ACTION_TITLE":"Hae","RESULTS":"Hakutulokset"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-fr.json b/dist/v-1547534999795/locales/taiga/locale-fr.json deleted file mode 100644 index 37e44cb..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-fr.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Oui","NO":"Non","OR":"ou","I_GET_IT":"OK, I get it","LOADING":"Veuillez patienter...","DATE":"JJ MMM AAAA","DATETIME":"JJ MMM AAAA HH:mm","SAVE":"Enregistrer","CANCEL":"Annuler","ACCEPT":"Accepter","DELETE":"Supprimer","UNLINK":"Détacher","CREATE":"Créer","ADD":"Ajouter","COPY_TO_CLIPBOARD":"Copier dans le presse-papier","COPIED_TO_CLIPBOARD":"Le texte a été copié dans le presse-papier","EDIT":"Éditer","DRAG":"Faire glisser","TAG_LINE":"Votre outil de gestion de projet agile, libre et open source","TAG_LINE_2":"AIMEZ VOTRE PROJET","BLOCK":"Bloquer","BLOCK_TITLE":"Bloquer cet élément si, par exemple, il a une dépendance qui ne peut être satisfaite","BLOCKED":"Bloqué","UNBLOCK":"Débloquer","UNBLOCK_TITLE":"Débloquer cet élément","BLOCKED_NOTE":"Pourquoi est-ce bloqué ?","BLOCKED_REASON":"Veuillez s'il vous plait indiquer la raison","CREATED_BY":"Créé par {{fullDisplayName}}","CLOSE":"clos","GO_HOME":"Retour à l'accueil","PLUGINS":"Plugins","ONE_ITEM_LINE":"Un élément par ligne...","NEW_BULK":"Nouvel ajout en bloc","SUBTASKS":"Sous-tâches","PREVIOUS":"Précédent","NEXT":"Suivant","LOGOUT":"Déconnexion","EXTERNAL_USER":"un utilisateur externe","GENERIC_ERROR":"L'un de nos Oompa Loompas dit {{error}}.","IOCAINE_TEXT":"Ce membre se sent un peu dépassé par cette tâche. Deviendra immunisé contre le poison iocane au fil du temps avec votre aide. Pour l'instant, il peut avoir besoin d'une étreinte.","CLIENT_REQUIREMENT":"Une exigence client est une nouvelle exigence exprimée par le client, qui n'était pas prévue dans le projet initial, et qu'il est nécessaire d'intégrer","TEAM_REQUIREMENT":"Une exigence équipe est une exigence exprimée par l'équipe qui doit être rajoutée au projet, sans que cela n'ait d'impact pour le client","OWNER":"Propriétaire du Projet","CAPSLOCK_WARNING":"Attention ! Vous utilisez des majuscules dans un champ qui est sensible à la casse.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Êtes-vous sûr de vouloir fermer le mode Édition ?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Souvenez-vous que si vous fermez le mode édition sans enregistrer, toutes vos modifications seront perdues","RELATED_USERSTORIES":"Récits utilisateur liés","CARD":{"ASSIGN_TO":"Affecter à","EDIT":"Modifier la carte","DELETE":"Supprimer l’élément","DELETE_ISSUE":"Supprimer le ticket","DETACH_ISSUE_FROM_SPRINT":"Détacher le ticket du sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Cette valeur semble être invalide.","TYPE_EMAIL":"Cette valeur devrait être une adresse courriel valide.","TYPE_URL":"Cette valeur doit être une url valide.","TYPE_URLSTRICT":"Cette valeur doit être une url valide.","TYPE_NUMBER":"Cette valeur doit être un nombre valide.","TYPE_DIGITS":"Cette valeur doit être numérique.","TYPE_DATEISO":"Cette valeur n'est pas une date valide (AAAA-MM-JJ).","TYPE_ALPHANUM":"Cette valeur devrait être alphanumérique.","TYPE_PHONE":"Cette valeur devrait être un numéro de téléphone valide.","NOTNULL":"Cette valeur ne devrait pas être nulle.","NOT_BLANK":"Cette valeur ne doit pas être vide.","REQUIRED":"Cette valeur est obligatoire.","REGEXP":"Cette valeur semble être invalide.","MIN":"Cette valeur devrait être supérieure ou égale à %s.","MAX":"Cette valeur devrait être inférieure ou égale à %s.","RANGE":"Cette valeur devrait être entre %s et %s.","MIN_LENGTH":"Cette valeur est trop courte. Elle devrait avoir %s caractères ou plus.","MAX_LENGTH":"Cette valeur est trop longue. Elle devrait avoir %s caractères ou moins.","RANGE_LENGTH":"La taille de cette valeur est invalide, elle doit être comprise entre %s et %s caractères.","MIN_CHECK":"Vous devez sélectionner au moins %s options.","MAX_CHECK":"Vous devez sélectionner %s options ou moins.","RANGE_CHECK":"Vous devez sélectionner parmi les choix %s et %s.","EQUAL_TO":"Cette valeur doit être identique.","LINEWIDTH":"Une ou plusieurs lignes est peut-être trop long. Essayez de rester en dessous de %s caractères.","PIKADAY":"Format de date non valide, merci d'utiliser JJ MMM AAAA (comme 23 mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mois précédent","NEXT_MONTH":"Mois suivant","MONTHS":{"JAN":"Janvier","FEB":"Février","MAR":"Mars","APR":"Avril","MAY":"Mai","JUN":"Juin","JUL":"Juillet","AUG":"Août","SEP":"Septembre","OCT":"Octobre","NOV":"Novembre","DEC":"Décembre"},"WEEK_DAYS":{"SUN":"Dimanche","MON":"Lundi","TUE":"Mardi","WED":"Mercredi","THU":"Jeudi","FRI":"Vendredi","SAT":"Samedi"},"WEEK_DAYS_SHORT":{"SUN":"Dim","MON":"Lun","TUE":"Mar","WED":"Mer","THU":"Jeu","FRI":"Ven","SAT":"Sam"}},"SEE_USER_PROFILE":"Afficher le profil de {{username}}","USER_STORY":"Récit utilisateur","TASK":"Tâche","ISSUE":"Ticket","EPIC":"Épopée","TAGS":{"PLACEHOLDER":"Saisissez un mot-clé","DELETE":"Supprimer le mot-clé","ADD":"Ajouter un mot-clé"},"DESCRIPTION":{"EMPTY":"Un espace vide est si ennuyeux… allez-y, soyez descriptif…","NO_DESCRIPTION":"Pas encore de description"},"FIELDS":{"SUBJECT":"Objet","NAME":"Nom","URL":"URL","DESCRIPTION":"Description","VALUE":"Valeur","SLUG":"Label","COLOR":"Couleur","IS_CLOSED":"Est fermé ?","STATUS":"Statut","TYPE":"Type","SEVERITY":"Gravité","PRIORITY":"Priorité","ASSIGNED_TO":"Affecté à","ASSIGNED_USERS":"Utilisateurs assignés","POINTS":"Points","IS_BLOCKED":"est bloqué","REF":"Réf.","VOTES":"Votes","SPRINT":"Sprint","DUE_DATE":"Échéance","DUE_DATE_REASON":"Raison de l’échéance"},"ROLES":{"ALL":"Tout"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Non affecté","ASSIGN":"Affecter","DELETE_ASSIGNMENT":"Supprimer l'affectation","REMOVE_ASSIGNED":"Supprimer l'affectation","TOO_MANY":"...trop d'utilisateurs ; filtrez davantage","CONFIRM_UNASSIGNED":"Etes-vous sûr de vouloir continuer sans affectation ?","TITLE_ACTION_EDIT_ASSIGNMENT":"Modifier l'affectation","SELF":"Me l'affecter"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Définir l’échéance"},"ASSIGNED_USERS":{"ADD":"Sélectionner un utilisateur affecté","ADD_ASSIGNED":"Ajouter un utilisateur affecté","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Supprimer l'affectation"},"STATUS":{"CLOSED":"Fermé","OPEN":"Ouvert"},"WATCHERS":{"WATCHERS":"Observateurs","ADD":"Ajouter des observateurs","TITLE_ADD":"Ajoutez un membre du projet à la liste de observateurs","DELETE":"Supprimer l'observateur","TITLE_LIGHTBOX_DELETE_WARTCHER":"Supprimer l'observateur..."},"WATCH_BUTTON":{"WATCH":"Suivre","WATCHING":"Suivi","UNWATCH":"Ne plus suivre","WATCHERS":"Observateurs","BUTTON_TITLE":"Suivre/ne plus suivre cet élément","COUNTER_TITLE":"{total, plural, one{un observateur} other{# observateurs}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Vote positif/négatif pour cet élément","COUNTER_TITLE":"{total, plural, one{un vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Champs personnalisés","SAVE":"Sauver le champ personnalisé","EDIT":"Modifier un champ personnalisé","DELETE":"Supprimer un attribut personnalisé","CONFIRM_DELETE":"Souvenez-vous que toutes les valeurs de ce champ personnalisé vont être effacées.\nEtes-vous sûr de vouloir continuer ?"},"FILTERS":{"INPUT_PLACEHOLDER":"Objet ou référence","TITLE_ACTION_FILTER_BUTTON":"recherche","TITLE":"Filtres","TITLE_ACTION_SEARCH":"Rechercher","ACTION_SAVE_CUSTOM_FILTER":"sauvegarder en tant que filtre personnalisé","PLACEHOLDER_FILTER_NAME":"Écrivez le nom du filtre et appuyez sur \"Entrée\"","APPLIED_FILTERS_NUM":"filtres appliqués","CATEGORIES":{"TYPE":"Type","STATUS":"Statut","SEVERITY":"Gravité","PRIORITIES":"Priorités","TAGS":"Mots-clés","ASSIGNED_TO":"Affecté à","ASSIGNED_USERS":"Utilisateurs assignés","ROLE":"Rôle","CREATED_BY":"Créé par","CUSTOM_FILTERS":"Filtres personnalisés","EPIC":"Épopée"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double cliquer pour modifier","SELECT_LANGUAGE_PLACEHOLDER":"Sélectionnez la langue","SELECT_LANGUAGE_REMOVE_FORMATING":"Retirer la mise en forme","OUTDATED":"Quelqu'un d'autre a fait des modifications en même temps que vous. Vérifiez la nouvelle version dans l'onglet Activité avant de sauvegarder vos changements.","MARKDOWN_HELP":"Aide sur la syntaxe Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Épopées","VIEW_EPICS":"Voir les épopées","ADD_EPICS":"Ajouter des épopées","MODIFY_EPICS":"Modifier des épopées","COMMENT_EPICS":"Commenter des épopées","DELETE_EPICS":"Supprimer des épopées"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Voir les sprints","ADD_SPRINTS":"Ajouter des sprints","MODIFY_SPRINTS":"Modifier des sprints","DELETE_SPRINTS":"Supprimer des sprints"},"USER_STORIES":{"NAME":"Récits utilisateur","VIEW_USER_STORIES":"Afficher les récits utilisateur","ADD_USER_STORIES":"Ajouter des récits utilisateur","MODIFY_USER_STORIES":"Modifier les récits utilisateur","COMMENT_USER_STORIES":"Commenter les récits utilisateur","DELETE_USER_STORIES":"Supprimer des récits utilisateur"},"TASKS":{"NAME":"Tâches","VIEW_TASKS":"Voir les tâches","ADD_TASKS":"Ajouter des tâches","MODIFY_TASKS":"Modifier des tâches","COMMENT_TASKS":"Commenter les tâches","DELETE_TASKS":"Supprimer des tâches"},"ISSUES":{"NAME":"Tickets","VIEW_ISSUES":"Voir les tickets","ADD_ISSUES":"Ajouter des tickets","MODIFY_ISSUES":"Modifier des tickets","COMMENT_ISSUES":"Commenter les tickets","DELETE_ISSUES":"Supprimer les tickets"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Voir les pages wiki","ADD_WIKI_PAGES":"Ajouter des pages wiki","MODIFY_WIKI_PAGES":"Modifier des pages wiki","DELETE_WIKI_PAGES":"Supprimer des pages wiki","VIEW_WIKI_LINKS":"Voir les liens wiki","ADD_WIKI_LINKS":"Ajouter des liens wiki","DELETE_WIKI_LINKS":"Supprimer des liens wiki"}}},"LOGIN":{"PAGE_TITLE":"Connexion - Taiga","PAGE_DESCRIPTION":"Connectez-vous à Taiga, une plateforme de gestion de projets pour les startups, les développeurs et les designers agiles qui veulent un outil simple, beau et qui rend le travail vraiment agréable."},"AUTH":{"INVITED_YOU":"vous a invité à rejoindre le projet","NOT_REGISTERED_YET":"Pas encore inscrit?","REGISTER":"S'inscrire","CREATE_ACCOUNT":"créer votre compte gratuit ici"},"LOGIN_COMMON":{"HEADER":"J'ai déjà un identifiant Taiga","PLACEHOLDER_AUTH_NAME":"Nom d'utilisateur ou courriel (sensible à la casse)","LINK_FORGOT_PASSWORD":"Mot de passe oublié ?","TITLE_LINK_FORGOT_PASSWORD":"Avez-vous oublié votre mot de passe ?","ACTION_ENTER":"Entrer","ACTION_SIGN_IN":"Se connecter","PLACEHOLDER_AUTH_PASSWORD":"Mot de passe (sensible à la casse)","ALT_LOGIN":"Ou connectez vous avec"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"D'après nos Oompa Loompas, votre nom d'utilisateur / adresse courriel ou votre mot de passe sont incorrects.","SUCCESS":"Nos Oompa Loompas sont heureux, bienvenue sur Taiga."},"REGISTER":{"PAGE_TITLE":"S'inscrire - Taiga","PAGE_DESCRIPTION":"Créez votre compte sur Taiga, une plateforme de gestion de projets pour les startups, les développeurs et les designers agiles qui veulent un outil simple, beau et qui rend le travail vraiment agréable."},"REGISTER_FORM":{"TITLE":"Créer un compte Taiga (gratuit)","PLACEHOLDER_NAME":"Choisissez un nom d'utilisateur (sensible à la casse)","PLACEHOLDER_FULL_NAME":"Choisissez votre nom complet","PLACEHOLDER_EMAIL":"Votre adresse courriel","PLACEHOLDER_PASSWORD":"Saisissez un mot de passe (sensible à la casse)","ACTION_SIGN_UP":"S'enregistrer","TITLE_LINK_LOGIN":"Se connecter","LINK_LOGIN":"Êtes-vous déjà enregistré ? Connectez-vous."},"FORGOT_PASSWORD":{"PAGE_TITLE":"Mot de passe oublié - Taiga","PAGE_DESCRIPTION":"Saisissez votre nom d'utilisateur ou votre adresse courriel pour recevoir un nouveau mot de passe et accéder à nouveau à Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Oups, avez-vous oublié votre mot de passe ?","SUBTITLE":"Saisissez votre nom d'utilisateur ou votre adresse courriel pour en obtenir un nouveau","PLACEHOLDER_FIELD":"Nom d'utilisateur ou adresse courriel","ACTION_RESET_PASSWORD":"Réinitialiser le mot de passe","LINK_CANCEL":"Nan, ramenez-moi en arrière. Je crois que je m'en souviens.","SUCCESS_TITLE":"Consultez votre boîte aux lettres !","SUCCESS_TEXT":"Nous vous avons envoyé un courriel avec les instructions pour définir un nouveau mot de passe","ERROR":"D'après nos Oompa Loompas, vous n'êtes pas encore enregistré."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Modifier votre mot de passe - Taiga","SECTION_NAME":"Modifier le mot de passe","FIELD_CURRENT_PASSWORD":"Mot de passe actuel","PLACEHOLDER_CURRENT_PASSWORD":"Votre mot de passe actuel (vide si vous n'avez pas encore de mot de passe)","FIELD_NEW_PASSWORD":"Nouveau mot de passe","PLACEHOLDER_NEW_PASSWORD":"Entrez un nouveau mot de passe","FIELD_RETYPE_PASSWORD":"Confirmez le mot de passe","PLACEHOLDER_RETYPE_PASSWORD":"Confirmez le mot de passe","ERROR_PASSWORD_MATCH":"Les mots de passe ne correspondent pas"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Créez un nouveau mot de passe pour Taiga","SUBTITLE":"Et au fait, vous devriez penser à manger de la nourriture plus riche en fer, c'est bon pour le cerveau. :p","PLACEHOLDER_NEW_PASSWORD":"Nouveau mot de passe","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Confirmez votre nouveau mot de passe","ACTION_RESET_PASSWORD":"Réinitialiser le mot de passe","ERROR":"Nos Oompa Loompas n'ont pas trouvé votre requête de réinitialisation de mot de passe. Effectuez une nouvelle demande.","SUCCESS":"Nos Oompa Loompas ont sauvegardé votre nouveau mot de passe.
    Essayez de vous connecter avec."},"INVITATION":{"PAGE_TITLE":"Acceptation des invitations - Taiga","PAGE_DESCRIPTION":"Acceptez l'invitation à rejoindre un projet sur Taiga, une plateforme de gestion de projets pour les startups, les développeurs et les designers agiles qui veulent un outil simple, beau et qui rend le travail vraiment agréable."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Nos Oompa Loompas n'ont pas trouvé votre invitation.","SUCCESS":"Vous avez rejoint ce projet, Bienvenue sur {{project_name}}"},"HOME":{"PAGE_TITLE":"Accueil - Taiga","PAGE_DESCRIPTION":"La page d'accueil de Taiga sur laquelle apparaissent vos projets principaux et toutes les récits utilisateur, tâches et tickets qui vont sont assignés et surveillés.","EMPTY_WORKING_ON":"Ça fait vide, hein ?Commencez à utiliser Taiga et vous verrez apparaître ici les récits, tâches et tickets sur lesquels vous travaillez.","EMPTY_WATCHING":"Suivez des récits utilisateur, des tâches, des tickets dans vos projets et soyez prévenu des modifications :)","EMPTY_PROJECT_LIST":"Vous n'avez aucun projet pour l'instant","WORKING_ON_SECTION":"Projets en cours","WATCHING_SECTION":"Suivi","DASHBOARD":"Tableau de bord des projets"},"EPICS":{"TITLE":"ÉPOPÉES","SECTION_NAME":"Épopées","EPIC":"ÉPOPÉE","PAGE_TITLE":"Épopées - {{projectName}}","PAGE_DESCRIPTION":"Liste des épopées du projet {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ AJOUTER ÉPOPÉE","UNASSIGNED":"Non affecté"},"EMPTY":{"TITLE":"Il semble n'y avoir aucune épopée pour l'instant","EXPLANATION":"Les épopées sont des éléments à un niveau plus élevé qui englobent les récits utilisateurs.
    Les épopées sont au sommet de la hiérarchie et peuvent être utilisées pour regrouper ensemble des récits utilisateur.","HELP":"En savoir plus sur les épopées"},"TABLE":{"VOTES":"Votes","NAME":"Nom","PROJECT":"Projet","SPRINT":"Sprint","ASSIGNED_TO":"Affecté","STATUS":"Statut","PROGRESS":"Avancement","VIEW_OPTIONS":"Voir les options"},"CREATE":{"TITLE":"Nouvelle épopée","PLACEHOLDER_DESCRIPTION":"Ajoutez une description pour aider les autres utilisateurs à mieux comprendre cette épopée.","TEAM_REQUIREMENT":"Exigence équipe","CLIENT_REQUIREMENT":"Exigence client","BLOCKED":"Bloqué","BLOCKED_NOTE_PLACEHOLDER":"Pourquoi cette épopée est-elle bloquée ?","CREATE_EPIC":"Créer une épopée"}},"PROJECTS":{"PAGE_TITLE":"Mes projets - Taiga","PAGE_DESCRIPTION":"Une liste de tous vos projets, vous pouvez la trier ou en créer une nouvelle.","MY_PROJECTS":"Mes projets"},"ATTACHMENT":{"SECTION_NAME":"pièces jointes","TITLE":"{{ fileName }} déposé le {{ date }}","LIST_VIEW_MODE":"Vue sous forme de liste","GALLERY_VIEW_MODE":"Vue sous forme de galerie","DESCRIPTION":"Saisissez une courte description","DEPRECATED":"(obsolète)","DEPRECATED_FILE":"Obsolète ?","ADD":"Ajoutez une nouvelle pièce jointe. {{maxFileSizeMsg}}","DROP":"Déposer les pièces jointes ici !","SHOW_DEPRECATED":"+ montrer les pièces jointes obsolètes","HIDE_DEPRECATED":"- cacher les pièces jointes obsolètes","COUNT_DEPRECATED":"({{ counter }} obsolètes)","MAX_UPLOAD_SIZE":"La taille maximum de dépôt est {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Nous n'avons pas été capable de téléverser '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Supprimer la pièce jointe...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"la pièce jointe \"{{fileName}}\"","ERROR_DELETE_ATTACHMENT":"Nous n'avons pas été capable de supprimer {{errorMessage}}.","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Précédent","NEXT":"Suivant"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Modifier la valeur","TITLE_ACTION_DELETE_VALUE":"Supprimer","TITLE_ACTION_DELETE_TAG":"Supprimer le mot-clé"},"HELP":"Avez-vous besoin d'aide ? Consultez notre page d'assistance !","PROJECT_DEFAULT_VALUES":{"TITLE":"Valeurs par défaut","SUBTITLE":"Définir les valeurs par défaut pour toutes les listes de sélection."},"MEMBERSHIPS":{"TITLE":"Gérer les membres","PAGE_TITLE":"Membres - {{projectName}}","ADD_BUTTON":"+ Nouveau membre","ADD_BUTTON_TITLE":"Ajouter un membre","UPGRADE_BUTTON":"Améliorer votre forfait","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"Si vous souhaitez ajouter plus de membres, veuillez contacter le propriétaire du projet {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Ce projet a atteint sa limite de ({{members}}) membres autorisés. Si vous désirez augmenter cette limite, merci de contacter l'administrateur."},"PROJECT_EXPORT":{"TITLE":"Exporter","SUBTITLE":"Exportez votre projet pour le sauvegarder ou en créer un nouveau basé sur celui-ci.","EXPORT_BUTTON":"Exporter","EXPORT_BUTTON_TITLE":"Exportez votre projet","LOADING_TITLE":"Nous sommes en train de générer votre fichier de vidage.","DUMP_READY":"Votre fichier de vidage est prêt !","LOADING_MESSAGE":"Merci de ne pas fermer cette page.","ASYNC_MESSAGE":"Nous vous enverrons un courriel lorsque ce sera prêt.","SYNC_MESSAGE":"Si le téléchargement ne commence pas automatiquement, cliquez ici.","ERROR":"Nos Oompa Loompas ont des problèmes à générer le fichier de vidage. S'il vous plait, essayez de nouveau.","ERROR_BUSY":"Nous sommes désolés, nos Oompa Loompas sont très occupés en ce moment. Veuillez réessayer dans quelques minutes."},"MODULES":{"TITLE":"Modules","EPICS":"Épopées","EPICS_DESCRIPTION":"Visualiser et gérer les aspects les plus stratégiques de votre projet","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Gérez votre récits utilisateur pour garder une vue organisée des travaux à venir et priorisés.","NUMBER_SPRINTS":"Nombre prévu de sprints","NUMBER_SPRINTS_HELP":"0 pour un nombre indéterminé","NUMBER_US_POINTS":"Total prévu de points de récit","NUMBER_US_POINTS_HELP":"0 pour un nombre indéterminé","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organisez votre projet de manière agile avec ce tableau.","ISSUES":"Tickets","ISSUES_DESCRIPTION":"Suivez les bugs, questions et améliorations liés à votre projet. Ne ratez rien !","WIKI":"Wiki","WIKI_DESCRIPTION":"Ajoutez, modifiez, ou supprimez du contenu en collaboration avec d'autres. C'est le bon endroit pour la documentation de votre projet.","MEETUP":"Meet Up","MEETUP_DESCRIPTION":"Choisissez un système de vidéoconférence","SELECT_VIDEOCONFERENCE":"Choisissez un système de vidéoconférence","SALT_CHAT_ROOM":"Ajouter un préfixe au nom du salon de chat","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personnalisé","URL_CHAT_ROOM":"URL du salon de discussion"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Profil projet - {{projectName}}","PROJECT_DETAILS":"Détails du projet","PROJECT_NAME":"Nom du projet","TAGS":"Mots-clés","DESCRIPTION":"Description","RECRUITING":"Est-ce que ce projet recherche des membres ?","RECRUITING_MESSAGE":"Qui cherchez-vous ?","RECRUITING_PLACEHOLDER":"Définissez le profil que vous recherchez","FEEDBACK":"Recevoir les commentaires des utilisateurs de Taiga?","PUBLIC_PROJECT":"Projet public","PRIVATE_PROJECT":"Projet privé","PRIVATE_OR_PUBLIC":"Quelle est la différence entre les projets publics et privés ?","DELETE":"Supprimer ce projet","CHANGE_LOGO":"Changer le logo","ACTION_USE_DEFAULT_LOGO":"Utiliser l'image par défaut","MAX_PRIVATE_PROJECTS":"Vous avez atteint le nombre maximum autorisé de projets privés accordé par votre souscription actuelle.","MAX_PRIVATE_PROJECTS_MEMBERS":"Le nombre maximum de membres de projets privés a été dépassé.","MAX_PUBLIC_PROJECTS":"Désolé, vous avez atteint le nombre maximum de projets publics accordé par votre souscription actuelle.","MAX_PUBLIC_PROJECTS_MEMBERS":"Ce projet dépasse le nombre maximum de membres autorisés pour un projet public","PROJECT_OWNER":"Propriétaire du projet","REQUEST_OWNERSHIP":"Demander la propriété","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Voulez-vous devenir le nouveau propriétaire du projet ?","REQUEST_OWNERSHIP_DESC":"Demander que le propriétaire actuel du projet {{name}} vous transfert la propriété.","REQUEST_OWNERSHIP_BUTTON":"Requête","REQUEST_OWNERSHIP_SUCCESS":"Nous allons prévenir le propriétaire du projet","CHANGE_OWNER":"Changer le propriétaire","CHANGE_OWNER_SUCCESS_TITLE":"Ok, votre demande a été envoyée !","CHANGE_OWNER_SUCCESS_DESC":"Nous vous préviendrons par courriel si la demande de propriété du projet est acceptée ou refusée"},"REPORTS":{"TITLE":"Rapports","SUBTITLE":"Exportez les données de votre projet au format CSV pour créer vos propres rapports.","DESCRIPTION":"Téléchargez un fichier CSV ou copier l'URL générée puis ouvrez la dans votre éditeur de texte ou tableur préféré pour créer votre propre rapports de projet. Vous pourrez facilement visualiser et analyser toutes vos données.","HELP":"Comment utiliser ceci dans ma propre feuille de calcul?","REGENERATE_TITLE":"Changer l'URL","REGENERATE_SUBTITLE":"Vous êtes sur le point de changer l’URL d'accès aux données CSV. L'URL précédente sera désactivée. Êtes-vous sûr ?","DELETE_TITLE":"Supprimer l'URL","DELETE_SUBTITLE":"Vous êtes sur le point de changer l’URL d'accès aux données CSV. Êtes-vous sûr ?"},"CSV":{"SECTION_TITLE_EPIC":"rapports d'épopée","SECTION_TITLE_US":"rapports des récits utilisateur","SECTION_TITLE_TASK":"rapports des tâches","SECTION_TITLE_ISSUE":"Rapports des tickets","DOWNLOAD":"Télécharger au format CSV","URL_FIELD_PLACEHOLDER":"Merci de regénérer l'url de téléchargement au format CSV","TITLE_REGENERATE_URL":"Regénérer l'URL du CSV","ACTION_GENERATE_URL":"Générer l'URL","ACTION_REGENERATE":"Regénérer","TITLE_DELETE_URL":"Supprimer l'URL du CSV","ACTION_DELETE_URL":"Supprimer"},"CUSTOM_FIELDS":{"TITLE":"Champs personnalisés","SUBTITLE":"Spécifiez les champs personnalisés de vos récits utilisateur, tâches et tickets","EPIC_DESCRIPTION":"Champs personnalisés des épopées","EPIC_ADD":"Ajouter un champ personnalisé dans les épopées","US_DESCRIPTION":"Champs personnalisés des récits utilisateur","US_ADD":"Ajouter un champ personnalisé dans les récits utilisateur","TASK_DESCRIPTION":"Champs personnalisés de tâches","TASK_ADD":"Ajouter un champ personnalisé dans les tâches","ISSUE_DESCRIPTION":"Champs personnalisés des tickets","ISSUE_ADD":"Ajouter un champ personnalisé dans les tickets","FIELD_TYPE_TEXT":"Texte","FIELD_TYPE_RICHTEXT":"Texte riche","FIELD_TYPE_MULTI":"Multiligne","FIELD_TYPE_DATE":"Date","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Liste déroulante","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valeurs du projet - {{projectName}}","REPLACEMENT":"Tous les éléments avec cette valeur seront modifiés pour","ERROR_DELETE_ALL":"Vous ne pouvez pas effacer toutes les valeurs."},"PROJECT_VALUES_POINTS":{"TITLE":"Points","SUBTITLE":"Spécifiez les points auxquels vos récits utilisateur pourraient être estimés","US_TITLE":"Points de récits utilisateur","ACTION_ADD":"Ajouter un nouveau point"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Priorités","SUBTITLE":"Spécifiez les priorités qu'auront vos tickets","ISSUE_TITLE":"Priorités de tickets","ACTION_ADD":"Ajouter une priorité"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Gravité","SUBTITLE":"Spécifiez la gravité qu'auront vos tickets","ISSUE_TITLE":"Gravité des tickets","ACTION_ADD":"Ajouter un niveau de gravité"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuts","SUBTITLE":"Spécifiez les statuts que vont prendre vos récits utilisateur, tâches et tickets","EPIC_TITLE":"Statuts d'épopée","US_TITLE":"Statuts de récit utilisateur","TASK_TITLE":"Statuts des tâches","ISSUE_TITLE":"Statuts des Tickets"},"PROJECT_VALUES_TYPES":{"TITLE":"Types","SUBTITLE":"Spécifiez les types de ticket possibles","ISSUE_TITLE":"Types de tickets","ACTION_ADD":"Ajouter un nouveau {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Mots-clés","SUBTITLE":"Voir et modifier la couleur de vos mots-clés","EMPTY":"Il n'y a pas de mots-clés pour l'instant","EMPTY_SEARCH":"Il semble qu'aucun résultat ne correspond à vos critères de recherche","ACTION_ADD":"Ajouter un mot-clé","NEW_TAG":"Nouveau mot-clé","MIXING_HELP_TEXT":"Sélectionnez les mots-clés que vous voulez fusionner","MIXING_MERGE":"Fusionner des mots-clés","SELECTED":"Sélectionné"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Échéances","SUBTITLE":"Spécifiez les dates d’échéance que vont prendre vos récits utilisateur, tâches et tickets s'ils sont sélectionnés","US_TITLE":"Etat de la date d'échéance du récit utilisateur","ACTION_ADD_STATUS":"Ajouter un nouveau statut","TASK_TITLE":"Etat de la date d'échéance de la tâche","ISSUE_TITLE":"Etat de la date d'échéance du ticket","DAYS_TO_DUE_DATE":"Nombre de jours jusqu'à la date d'échéance","BEFORE_AFTER":"Avant/après","BEFORE":"Avant","AFTER":"Hors délais"},"ROLES":{"PAGE_TITLE":"Rôles - {{projectName}}","WARNING_NO_ROLE":"Attention, aucun rôle dans votre projet ne pourra estimer la valeur du point pour les récits utilisateurs","HELP_ROLE_ENABLED":"Si activé, les membres affectés à ce rôle pourront estimer la valeur du point pour les récits utilisateurs","DISABLE_COMPUTABLE_ALERT_TITLE":"Êtes-vous sûr de vouloir désactiver les estimations de ce rôle ?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Si vous désactivez les estimations pour le rôle {{roleName}} toutes les estimations précédentes faites par ce rôle seront supprimées","COUNT_MEMBERS":"{{ role.members_count }} membres avec ce rôle","TITLE_DELETE_ROLE":"Supprimer des rôles","REPLACEMENT_ROLE":"Tous les utilisateurs avec ce rôle seront déplacés dans","WARNING_DELETE_ROLE":"Attention ! Toutes les estimations du rôle vont être supprimées","ERROR_DELETE_ALL":"Vous ne pouvez pas supprimer toutes les valeurs","EXTERNAL_USER":"Utilisateur externe","NOTE_EXTERNAL_USERS":"Note : par Utilisateur Extérieur nous voulons dire n'importe qui n'appartenant pas à la plateforme Taiga, moteurs de recherche inclus. Attention à utiliser ce rôle avec prudence."},"THIRD_PARTIES":{"SECRET_KEY":"Clé secrète","PAYLOAD_URL":"URL de Payload","VALID_IPS":"IP sources valides (séparées par des virgules)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Les requêtes Bitbucket ne sont pas signées, donc le meilleur moyen de vérifier l'origine est par l'adresse IP. Si le champ est vide il n'y aura pas de validation de l'IP."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Les requêtes Gitlab ne sont pas signées, donc le meilleur moyen de vérifier l'origine est par l'adresse IP. Si le champ est vide il n'y aura pas de validation de l'IP."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":" GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Ajouter une nouvelle dérivation","TYPE_NAME":"Entrez le nom du service","TYPE_PAYLOAD_URL":"Entrez l'URL de payload du service","TYPE_SERVICE_SECRET":"Entrez la clé secrète du service","SAVE":"Enregistrer la dérivation","CANCEL":"Annuler la dérivation","SHOW_HISTORY":"(Montrer l'historique)","TEST":"Tester la dérivation","EDIT":"Éditer la dérivation","DELETE":"Supprimer la dérivation","REQUEST":"Requête","RESEND_REQUEST":"Renvoyer la requête","HEADERS":"Entêtes","PAYLOAD":"Données utiles","RESPONSE":"Réponse","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Cacher l'historique)","ACTION_HIDE_HISTORY_TITLE":"Cacher l'historique","ACTION_SHOW_HISTORY":"(Afficher l'historique)","ACTION_SHOW_HISTORY_TITLE":"Afficher l'historique","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Attributs Personnalisés - {{projectName}}","ADD":"Ajouter un champ personnalisé","EDIT":"Editer un champ personnalisé","DELETE":"Supprimer un champ personnalisé","SAVE_TITLE":"Sauvegarder le champ personnalisé","CANCEL_TITLE":"Annuler la création","SET_FIELD_NAME":"Saisissez le nom du champ personnalisé","SET_FIELD_DESCRIPTION":"Entrez la description de votre champ personnalisé","FIELD_TYPE_DEFAULT":"-- sélectionner --","ACTION_UPDATE":"Mettre à jour le champ personnalisé","ACTION_CANCEL_EDITION":"Annuler l'édition"},"MEMBERSHIP":{"COLUMN_MEMBER":"Membre","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rôle","COLUMN_STATUS":"Statut","STATUS_ACTIVE":"Actif","STATUS_PENDING":"En attente","DELETE_MEMBER":"Supprimer un membre","RESEND":"Renvoyer","SUCCESS_SEND_INVITATION":"Nous avons envoyé une autre invitation à '{{email}}'.","SUCCESS_DELETE":"Nous avons supprimé {{message}}.","ERROR_DELETE":"Nous n'avons pas été capable de supprimer {{message}}.","DEFAULT_DELETE_MESSAGE":"l'invitation à {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Valeur par défaut pour le sélecteur de statut d'épopée","LABEL_US_STATUS":"Valeur par défaut pour le sélecteur de statut de récit utilisateur","LABEL_POINTS":"Valeur par défaut pour la sélection des points","LABEL_TASK_STATUS":"Valeur par défaut pour la sélection du statut des tâches","LABEL_ISSUE_TYPE":"Valeur par défaut pour le sélecteur de type","LABEL_ISSUE_STATUS":"Valeur par défaut pour le sélecteur de statut de bug","LABEL_PRIORITY":"Valeur par défaut de la sélection des priorités","LABEL_SEVERITY":"Valeur par défaut pour le sélecteur de gravité"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Entrez le nom du nouveau statut","PLACEHOLDER_DAYS_TO_DUE_DATE":"Renseigner le nombre de jours jusqu'à la date d'échéance"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Entrez un nom pour le nouvel élément"},"US_STATUS":{"ACTION_ADD_STATUS":"Ajouter un nouveau statut","IS_ARCHIVED_COLUMN":"Archivé","IS_CLOSED_COLUMN":"Fermé","WIP_LIMIT_COLUMN":"Limite de Work In Progress","PLACEHOLDER_WRITE_NAME":"Donnez un nom au nouvel statut"},"MENU":{"PROJECT":"Projet","ATTRIBUTES":"Attributs","MEMBERS":"Membres","PERMISSIONS":"Permissions","INTEGRATIONS":"Intégrations"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Points","PRIORITIES":"Priorités","SEVERITIES":"Gravité","TYPES":"Types","CUSTOM_FIELDS":"Champs personnalisés","TAGS":"Mots-clés","DUE_DATES":"Échéances"},"SUBMENU_ROLES":{"TITLE":"Rôles","ACTION_NEW_ROLE":"+ Nouveau rôle","TITLE_ACTION_NEW_ROLE":"Ajouter un nouveau rôle"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Voudriez-vous devenir le nouveau propriétaire du projet ?","PRIVATE":"Privé","ACCEPTED_PROJECT_OWNERNSHIP":"Félicitations ! Vous êtes maintenant le nouveau propriétaire du projet.","REJECTED_PROJECT_OWNERNSHIP":"OK. Nous allons contacter le propriétaire actuel du projet","ACCEPT":"Accepter","REJECT":"Rejeter","PROPOSE_OWNERSHIP":"{{owner}}, le propriétaire actuel du projet {{project}} a demandé à ce que vous soyez le nouveau propriétaire.","ADD_COMMENT":"Voulez-vous ajouter un commentaire pour le propriétaire du projet ?","UNLIMITED_PROJECTS":"Illimité","OWNER_MESSAGE":{"PRIVATE":"Gardez en mémoire que vous pouvez posséder jusqu'à {{maxProjects}} projets privés. Vous possédez actuellement {{currentProjects}} projets privés.","PUBLIC":"Gardez en mémoire que vous pouvez posséder jusqu'à {{maxProjects}} projets publics. Vous possédez actuellement {{currentProjects}} projets publics."},"CANT_BE_OWNED":"Pour le moment, vous ne pouvez devenir propriétaire d'un projet de ce type. Si vous voulez devenir propriétaire de ce projet, merci de contacter l'administrateur afin qu'il puisse modifier les paramètres de votre compte pour autoriser la propriété de projet."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Modifier le profil","CLOSED_US":"Récit utilisateur fermé","PROJECTS":"Projets","PROJECTS_EMPTY":"{{username}} n'a aucun projet pour l'instant","CONTACTS":"Contacts","CONTACTS_EMPTY":"{{username}} n'a aucun contact pour l'instant","CURRENT_USER_CONTACTS_EMPTY":"Vous n'avez aucun contact pour l'instant","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Les personnes avec qui vous travaillez à Taiga seront vos contacts automatiquement","TABS":{"ACTIVITY_TAB":"Chronologie","ACTIVITY_TAB_TITLE":"Voir toutes les activités de cet utilisateur","PROJECTS_TAB":"Projets","PROJECTS_TAB_TITLE":"Liste de tous les projets dont l'utilisateur est membre","LIKES_TAB":"J'aime","LIKES_TAB_TITLE":"Lister tous les \"J'aime\" de cet utilisateur","VOTES_TAB":"Votes","VOTES_TAB_TITLE":"Lister tous les votes faits par cet utilisateur","WATCHED_TAB":"Suivre","WATCHED_TAB_TITLE":"Lister tous les éléments suivis par cet utilisateur","CONTACTS_TAB":"Contacts","CONTACTS_TAB_TITLE":"Lister tous les contacts pris par cet utilisateur"}},"PROFILE_SIDEBAR":{"TITLE":"Votre profil","DESCRIPTION":"Tout le monde peut voir ce que vous faites et ce sur quoi vous travaillez. Ajoutez votre bio pour donner une version améliorée de vos informations.","ADD_INFO":"Editer la biographie"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Écrivez quelque chose...","FILTER_TYPE_ALL":"Toutes","FILTER_TYPE_ALL_TITLE":"Voir tous","FILTER_TYPE_PROJECTS":"Projets","FILTER_TYPE_PROJECTS_TITLE":"Voir uniquement les projets","FILTER_TYPE_EPICS":"Épopées","FILTER_TYPE_EPICS_TITLE":"N'afficher que les épopées","FILTER_TYPE_USER_STORIES":"Récits","FILTER_TYPE_USER_STORIES_TITLE":"Voir uniquement les user stories","FILTER_TYPE_TASKS":"Tâches","FILTER_TYPE_TASKS_TITLE":"Voir uniquement les tâches","FILTER_TYPE_ISSUES":"Tickets","FILTER_TYPE_ISSUES_TITLE":"Voir uniquement les tickets","EMPTY_TITLE":"Il n'y a rien à afficher ici."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Réorganisez vos projets pour placer les plus utilisés en premier.
    Les 10 premiers projets apparaitront dans la liste des projets de la barre de navigation supérieure","PRIVATE":"Projet privé","LOOKING_FOR_PEOPLE":"Est-ce que ce projet recherche des membres ?","FANS_COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{un observateur} other{# observateurs}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{un membre} other{# membres}}","BLOCKED_PROJECT":{"BLOCKED":"Projet bloqué","THIS_PROJECT_IS_BLOCKED":"Ce projet est temporairement verrouillé","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Pour débloquer vos projets, merci de contacter l'administrateur."},"SECTION":{"SEARCH":"Rechercher","TIMELINE":"Chronologie","EPICS":"Épopées","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Tickets","WIKI":"Wiki","TEAM":"Équipe","MEETUP":"Meet up","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Créer un projet","MANAGE_PROJECTS":"Gérer les projets","TITLE_CREATE_PROJECT":"Créer un projet","HELP_TITLE":"Page d'assistance Taiga","HELP":"Aide","HOMEPAGE":"Page d'accueil","FEEDBACK_TITLE":"Envoyez vos commentaires","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Modifier vos réglages de notification","NOTIFICATIONS":"Notifications","VIEW_PROFILE_TITLE":"Afficher le profil","VIEW_PROFILE":"Afficher le profil","EDIT_PROFILE_TITLE":"Modifier votre profil","EDIT_PROFILE":"Modifier le profil","CHANGE_PASSWORD_TITLE":"Modifier le mot de passe","CHANGE_PASSWORD":"Modifier le mot de passe","DASHBOARD_TITLE":"Tableau de bord","DISCOVER_TITLE":"Découvrir les projets populaires","DISCOVER":"Découvrir"},"LIKE_BUTTON":{"LIKE":"J'aime","LIKED":"J'aime","UNLIKE":"Je n'aime plus","BUTTON_TITLE":"Aimer ou ne plus aimer ce projet","COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Suivre ce projet et définir une politique de notification","WATCH":"Suivre","WATCHING":"Suivi","COUNTER_TITLE":"{total, plural, one{un observateur} other{# observateurs}}","OPTIONS":{"NOTIFY_ALL":"Recevoir toutes les notifications","NOTIFY_ALL_TITLE":"Recevoir toutes les notifications pour ce projet","NOTIFY_INVOLVED":"Uniquement si impliqué","NOTIFY_INVOLVED_TITLE":"Recevoir des notifications uniquement si vous êtes impliqué","UNWATCH":"Ne plus suivre","UNWATCH_TITLE":"Ne plus suivre ce projet"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contactez l'équipe du projet","CONTACT_BUTTON":"Contactez le projet"},"CREATE":{"TITLE":"Créer un projet","CHOOSE_TEMPLATE":"Quel template correspond le mieux à votre projet ?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioriser et résoudre vos tâches sur de court cycles de temps","TEMPLATE_SCRUM_LONGDESC":"Scrum est une méthodologie de développement de logiciels agile, incrémentale et itérative pour la gestion du développement de produits.\n\nLe backlog du produit est ce qui sera finalement livré, organisé dans l'ordre dans lequel il doit être livré. Les besoins sont divisés en fragments manageables et exécutables nommés sprints. Chaque fois que l'équipe initie un nouveau sprint; elle s'engage à livrer un certain nombre de récits utilisateurs du backlog, en fonction de leurs compétences, capacités et ressources. Le projet avance à mesure que le backlog se vide.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Garder un flux de travail constant sur les tâches indépendantes","TEMPLATE_KANBAN_LONGDESC":"La méthodologie Kanban est utilisée pour répartir les éléments d'un projet entre différents états.\n\nUne carte Kamban est similaire à un mémo ou un post-it qui détaille chaque tâche (ou récit) qu'il faut effectuer dans le projet. Le tableau Kanban est utilisé pour déplacer chaque carte d'un état d'avancement à l'autre, d'état en état, facilitant de ce fait l'avancée des tâches.","DUPLICATE":"Dupliquer le projet","DUPLICATE_DESC":"Repartir de rien en conservant vos configurations","IMPORT":"Importer un projet","IMPORT_DESC":"Importez votre projet depuis de multiples plateformes vers Taïga","INVITE":"Inviter au sein du projet","SOLO_PROJECT":"Vous allez être seul sur ce projet","INVITE_LATER":"(Vous pourrez inviter d'autres membres plus tard)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Malheureusement vous avez atteint le nombre maximum de projets privés. Si vous voulez augmenter la limite, contactez votre administrateur.","MAX_PUBLIC_PROJECTS":"Malheureusement, vous avez atteind le nombre maximal de projets publics. Si vous souhaitez en augmenter le nombre, merci de contacter un administrateur","PUBLIC_PROJECT":"Projet public","PRIVATE_PROJECT":"Projet privé"},"COMMON":{"DETAILS":"Détails du nouveau projet","PROJECT_TITLE":"Nom du projet","PROJECT_DESCRIPTION":"Description du projet"},"DUPLICATE":{"TITLE":"Dupliquer le projet","DESCRIPTION":"Repartir de rien en conservant vos configurations","SELECT_PLACEHOLDER":"Choisissez un projet existant à dupliquer"},"IMPORT":{"TITLE":"Import un projet","DESCRIPTION":"Importez votre projet depuis de multiples plateformes vers Taïga","ASYNC_IN_PROGRESS_TITLE":"Nos Oompa Loompas sont en train d'importer votre projet","ASYNC_IN_PROGRESS_MESSAGE":"Ce processus pourrait durer plusieurs minutes
    Nous vous enverrons un courriel quand ce sera prêt","UPLOAD_IN_PROGRESS_MESSAGE":"{{uploadedSize}} de {{totalSize}} déposés","ERROR":"Nos Oompas Loompas ont rencontré des problèmes en important vos données de vidage. Merci de réessayer.","ERROR_TOO_MANY_REQUEST":"Nous sommes désolés, nos Oompa Loompas sont très occupés en ce moment. Veuillez réessayer dans quelques minutes.","ERROR_MESSAGE":"Nos Oompa Loompas ont des problèmes pour importer vos données de vidage : {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})","SYNC_SUCCESS":"Votre projet a été importé avec succès","IMPORT":"Importer","WHO_IS":"Ces tâches seront assignées à ...","WRITE_EMAIL":"Ou si vous préférez, indiquez l'adresse de courriel que cet utilisateur utilise dans Taïga","SEARCH_CONTACT":"Ou si vous préférez, recherchez dans vos contacts","WRITE_EMAIL_LABEL":"Indiquez le courriel que l'utilisateur utilise dans Taïga","ACCEEDE":"Accéder","PROJECT_MEMBERS":"Membres du projet","PROCESS_DESCRIPTION":"Indiquez nous à qui dans Taïga vous souhaitez assigner les tâches de {{platform}}","MATCH":"{{user_external}} est elle la même personne que {{user_internal}}?","CHOOSE":"Sélectionnez l'utilisateur","LINKS":"Liens avec {{platform}}","LINKS_DESCRIPTION":"Souhaitez vous conserver le lien de chaque objet avec la carte originelle de {{platform}} ?","WARNING_MAIL_USER":"Veuillez noter que si l'utilisateur n'a pas de compte Taïga, nous ne pourrons lui assigner de tâches.","ASSIGN":"Affecter","PROJECT_SELECTOR":{"NO_RESULTS":"Il semble qu'aucun résultat ne correspond à vos critères de recherche","ACTION_SEARCH":"recherche","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"Le projet que vous tentez d'importer a {{members}} membres vous compris, malheureusement votre abonnement actuel permet un maximum de {{max_memberships}} membres par projet privé. Si vous souhaitez augmenter cette limite, merci de contacter un administrateur.","PROJECT_MEMBERS_DESC_PUBLIC":"Le projet que vous tentez d'importer a {{members}} membres vous compris, malheureusement votre abonnement actuel permet un maximum de {{max_memberships}} membres par projet privé. Si vous souhaitez augmenter cette limite, merci de contacter un administrateur.","ACCOUNT_ALLOW_MEMBERS":"Votre compte autorise {{members}} membres","PRIVATE_PROJECTS_SPACE":{"TITLE":"Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire.","DESC":"Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet public supplémentaire.","DESC":"Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet public supplémentaire."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Votre souscription actuelle permet un maximum de {{max_memberships}} par projet privé."},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Votre souscription actuelle permet un maximum de {{max_memberships}} par projet public."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Désolé, votre souscription actuelle ne permet ni d'ajouter des projets privés supplémentaire, ni d'avoir plus de {{max_memberships}} membres par projet privé.","DESC":"Le projet que vous voulez importer est privé et a {{members}} membres."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Désolé, votre souscription actuelle ne permet ni d'ajouter des projets publics supplémentaire, ni d'avoir plus de {{max_memberships}} membres par projet public.","DESC":"Le projet que vous voulez importer est public et a {{members}} membres."}},"IN_PROGRESS":{"TITLE":"Importation du projet en cours","DESCRIPTION":"Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte."},"WARNING":{"TITLE":"Certaines tâches ne seront pas assignées","DESCRIPTION":"Il reste des personnes non identifiées. Les cartes assignées à ces personnes resteront non assignées. Vérifiez tous les contacts pour ne pas perdre cette information.","CHECK":"Vérfiez les contacts"},"TAIGA":{"SELECTOR":"Importez votre projet Taïga"},"TRELLO":{"SELECTOR":"Importez vos tableaux Trello dans Taïga","CHOOSE_PROJECT":"Choisissez le tableau que vous souhaitez importer","NO_PROJECTS":"Il semble que vous n'aillez aucun tableau dans Trello"},"GITHUB":{"SELECTOR":"Importez vos tickets GitHub","CHOOSE_PROJECT":"Trouvez le projet que vous souhaitez importer","NO_PROJECTS":"Il semble que vous n'aillez aucun projet dans GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Comment souhaitez-vous importer vos tickets dans Taïga ?","KANBAN_PROJECT":"Comme récits dans un projet Kanban","KANBAN_PROJECT_DESCRIPTION":"Après cela vous pourrez activer le backlog de Scrum","SCRUM_PROJECT":"Comme récit dans un projet Scrum","SCRUM_PROJECT_DESCRIPTION":"Après cela vous pourrez activer le mode Kanban","ISSUES_PROJECT":"Comme ticket","ISSUES_PROJECT_DESCRIPTION":"Vous ne pourrez utiliser vos tickets dans les modes Kanban ou Scrum. Vous pourrez activer Kanban ou Scrum pour de nouveaux récits."},"ASANA":{"SELECTOR":"Importer votre projet Asana et choisissez comment le suivre","CHOOSE_PROJECT":"Choisissez le projet que vous souhaitez importer","NO_PROJECTS":"Il semble que vous n'aillez aucun projet dans Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Les tâches et sous-tâches de votre projet seront créées comme récits et tâches dans Taïga","CREATE_AS_KANBAN_DESCRIPTION":"Les tâches et sous-tâches de votre projet seront créées comme récits et tâches dans Taïga"},"JIRA":{"SELECTOR":"Importer votre projet Jira et choisissez comment le suivre","HOW_TO_CONFIGURE":"(comment configurer)","CHOOSE_PROJECT":"Choisissez le projet ou le tableau que vous souhaitez importer","NO_PROJECTS":"Il semble que vous n'aillez ni projet ni tableau dans Jira","URL":"Votre URL Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Tickets","CREATE_AS_SCRUM_DESCRIPTION":"Les tickets et sous-tickets de votre projet seront créées en tant que récit et tâches Taïga.","CREATE_AS_KANBAN_DESCRIPTION":"Les tickets et sous-tickets de votre projet seront créées en tant que récit et tâches Taïga.","CREATE_AS_ISSUES_DESCRIPTION":"Que souhaitez vous faire avec les sous-tickets de votre projet Jira ? (Taïga n'autorise pas les sous-tickets).","CREATE_NEW_ISSUES":"Convertir les sous-tickets en nouveaux tickets Taïga","NOT_CREATE_NEW_ISSUES":"Ne pas importer les sous-tickets"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Etes-vous sûr de vouloir supprimer votre compte Taiga ?","CANCEL":"Retour aux réglages","ACCEPT":"Supprimer le compte","BLOCK_PROJECT":"Notez que tous les projets dont vous avez la propriété seront bloqués après que vous ayez supprimé votre compte. Si vous souhaitez pas qu'un projet soit bloqué, merci d'en transférer la propriété auprès d'un autre membre avant la suppression de votre compte."},"DELETE_PROJECT":{"TITLE":"Supprimer le projet","QUESTION":"Êtes-vous sûr de vouloir supprimer ce projet ?","SUBTITLE":"Toutes les données du projet (récits utilisateur, tâches, tickets, sprints et pages de wiki) seront perdues ! :-(","CONFIRM":"Oui, je suis sûr"},"ASSIGNED_TO":{"SELECT":"Affecté à","SEARCH":"Chercher des utilisateurs"},"ADD_MEMBER":{"TITLE":"Nouveau membre","PLACEHOLDER":"Filtrer les utilisateurs ou écrire un courriel pour inviter un utilisateur","ADD_EMAIL":"Ajouter une adresse courriel","REMOVE":"Supprimer","INVITE":"Inviter","CHOOSE_ROLE":"Choisissez un rôle","PLACEHOLDER_INVITATION_TEXT":"(Optionnel) Ajoutez un texte personnalisé à l'invitation. Dites quelque chose de gentil à vos nouveaux membres ;-)","HELP_TEXT":"Si vos utilisateurs sont déjà inscrits sur Taiga, ils seront automatiquement ajoutés. Sinon, ils recevront une invitation."},"FEEDBACK":{"TITLE":"Dites-nous quelque chose...","COMMENT":"...un bug, des suggestions, quelque chose de cool... ou même votre pire cauchemar avec Taiga","ACTION_SEND":"Envoyez vos commentaires"},"SEARCH":{"TITLE":"Rechercher","PLACEHOLDER_SEARCH":"Que cherchez-vous ?"},"ADD_EDIT_SPRINT":{"TITLE":"Nouveau sprint","PLACEHOLDER_SPRINT_NAME":"nom du sprint","PLACEHOLDER_SPRINT_START":"Début estimé","PLACEHOLDER_SPRINT_END":"Fin estimée","ACTION_DELETE_SPRINT":"Voulez-vous supprimer ce sprint ?","TITLE_ACTION_DELETE_SPRINT":"supprimer le sprint","LAST_SPRINT_NAME":"le dernier sprint est {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Veuillez ajouter une description pour aider les autres à mieux comprendre cette tâche","ISSUE_PLACEHOLDER_DESCRIPTION":"Veuillez ajouter une description pour aider les autres à mieux comprendre ce ticket","US_PLACEHOLDER_DESCRIPTION":"Veuillez ajouter une description pour aider les autres à mieux comprendre ce récit utilisateur","NEW_TASK":"Nouvelle tâche","NEW_ISSUE":"Nouveau ticket","NEW_US":"Ajouter un récit utilisateur","EDIT_TASK":"Modifier la tâche","EDIT_ISSUE":"Modifier le ticket","EDIT_US":"Modifier le récit utilisateur","ADD_EXISTING_ISSUE":"Ajouter un ticket à {{ targetName }}","CONFIRM_CLOSE":"Vous n’avez pas sauvegardé les modifications.\nÊtes-vous sûr de vouloir fermer le formulaire ?","EXISTING_ISSUE":"Ticket existant","CHOOSE_EXISTING_ISSUE":"Quel ticket ?","ADD_ISSUE":"Ajouter un ticket","FILTER_ISSUES":"Filtrer les tickets"},"DELETE_DUE_DATE":{"TITLE":"Supprimer l’échéance","SUBTITLE":"Êtes-vous sûr de vouloir supprimer cette échéance ?"},"DELETE_SPRINT":{"TITLE":"Supprimer le sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Retirer le lien avec l’épopée","MESSAGE":"Êtes-vous sûr de vouloir retirer le lien entre ce récit utilisateur et l’épopée {{epicSubject}} ?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optionnel) Ajoutez un texte personnalisé à l'invitation. Dites quelque chose de gentil à vos nouveaux membres ;-)","PLACEHOLDER_TYPE_EMAIL":"Saisissez une adresse courriel","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Vous êtes sur le point d'atteindre le nombre maximum de membres autorisé pour ce projet, {{maxMembers}} membres. Si vous souhaitez augmenter cette limite, merci de contacter l'administrateur.","LIMIT_USERS_WARNING_MESSAGE":"Vous êtes sur le point d'atteindre le nombre maximum de membres autorisé pour ce projet, {{maxMembers}} membres."},"LEAVE_PROJECT_WARNING":{"TITLE":"Malheureusement, ce projet ne peut pas être laissé sans propriétaire","CURRENT_USER_OWNER":{"DESC":"Vous êtes le propriétaire actuel de ce projet. Avant de partir, merci de transférer la propriété du projet à quelqu'un d'autre.","BUTTON":"Changer le propriétaire du projet"},"OTHER_USER_OWNER":{"DESC":"Malheureusement, vous ne pouvez supprimer un membre s'il est également le propriétaire actuel du projet. Merci de désigner auparavant un nouveau propriétaire.","BUTTON":"Demander le changement de propriétaire du projet"}},"CHANGE_OWNER":{"TITLE":"Qui voulez-vous désigner comme le nouveau propriétaire du projet ?","ADD_COMMENT":"Ajouter un commentaire","BUTTON":"Demander à ce membre du projet de devenir le nouveau propriétaire"},"CONTACT_PROJECT":{"TITLE":"Envoyer un email à","WARNING":"L'email sera reçu par les administrateurs du projet","PLACEHOLDER":"Ecrire votre message","SEND":"Envoyer"},"SET_DUE_DATE":{"TITLE":"Définir l’échéance","PLACEHOLDER_DUE_DATE":"Sélectionner la date","REASON_FOR_DUE_DATE":"Raison pour la date d’échéance","PLACEHOLDER_REASON_FOR_DUE_DATE":"Pourquoi ce récit utilisateur nécessite-t-il une échéance ?","SUGGESTIONS":{"IN_ONE_WEEK":"Dans une semaine","IN_TWO_WEEKS":"Dans deux semaines","IN_ONE_MONTH":"Dans un mois","IN_THREE_MONTHS":"Dans trois mois"},"TITLE_ACTION_DELETE_DUE_DATE":"Supprimer l’échéance"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Supprimer l’échéance","SUBTITLE_ACTION_DELETE_DUE_DATE":"Êtes-vous sûr de vouloir supprimer le statut de date d’échéance {{due_date_status_name}} ?"},"RELATE_TO_EPIC":{"TITLE":"Lien vers l'épopée","EXISTING_EPIC":"Épopée existante","NEW_EPIC":"Nouvelle épopée","CHOOSE_PROJECT_FOR_CREATION":"Quel est le projet ?","CHOOSE_PROJECT_FROM":"Quel est le projet ?","SUBJECT":"Objet","CHOOSE_EPIC":"Quelle est l’épopée ?","FILTER_EPICS":"Filtrer les épopées","NO_EPICS_FOUND":"Il semble qu'aucun résultat ne correspond à vos critères de recherche"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Épopée {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Statut : {{epicStatus }}. Description : {{epicDescription}}","SECTION_NAME":"Épopée","ERROR_UNLINK_RELATED_USERSTORY":"Nous n'avons pas réussi à supprimer le lien : {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Créer un lien avec","NEW_USERSTORY":"Nouveau récit utilisateur","EXISTING_USERSTORY":"Récit utilisateur existant","CHOOSE_PROJECT_FOR_CREATION":"Quel projet ?","SUBJECT":"Objet","SUBJECT_BULK_MODE":"Sujet (ajout en masse)","CHOOSE_PROJECT_FROM":"Quel projet ?","CHOOSE_USERSTORY":"Quel récit utilisateur ?","NO_USERSTORIES":"Ce projet n'a pas encore de récits utilisateur. Merci de choisir un autre projet.","NO_USERSTORIES_FOUND":"Il semble qu'aucun résultat ne correspond à vos critères de recherche","FILTER_USERSTORIES":"Filtrer les récits utilisateur","LIGHTBOX_TITLE_BLOKING_EPIC":"Bloquer l'épopée","ACTION_DELETE":"Supprimer l'épopée"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Récit utilisateur {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Statut : {{userStoryStatus }}. Achevé {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} sur {{userStoryTotalTasks}} tâches fermées). Points : {{userStoryPoints}}. Description : {{userStoryDescription}}","SECTION_NAME":"Récit utilisateur","LINK_TASKBOARD":"Tableau des tâches","TITLE_LINK_TASKBOARD":"Aller au tableau des tâches","TOTAL_POINTS":"total des points","ADD":"+ Créer un récit utilisateur","ADD_BULK":"Ajouter de nouveaux récits utilisateur en lot","PROMOTED":"Ce récit utilisateur a été promue à partir d'un ticket :","TITLE_LINK_GO_TO_ISSUE":"Aller vers ce ticket","TITLE_DELETE_ACTION":"Supprimer le récit utilisateur","LIGHTBOX_TITLE_BLOKING_US":"Bloque le RU","NOT_ESTIMATED":"Non estimé","OWNER_US":"Ce récit Utilisateur fait partie de ","RELATE_TO_EPIC":"Lien vers l'épopée","REMOVE_RELATIONSHIP_WITH_EPIC":"Retirer le lien de l'épopée","TRIBE":{"PUBLISH":"Publier en tant que Gig sur Taiga Tribe ","PUBLISH_INFO":"Plus d'informations","PUBLISH_TITLE":"Plus d'informations sur la publication dans Taiga Tribe","PUBLISHED_AS_GIG":"Récit publié comme Gig dans Taiga Tribe","EDIT_LINK":"Modifier le lien","CLOSE":"Fermer","SYNCHRONIZE_LINK":"se synchroniser avec Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Avez-vous besoin de quelqu'un pour cette tâche ?","PUBLISH_MORE_INFO_TEXT":"

    Si vous avez besoin d'un coup de main pour un élément en particulier, vous pouvez facilement créer un \"Gig\" sur Taiga Tribe et recevoir de l'aide de la terre entière. Vous serez en mesure de contrôler et manager le \"Gig\", en profitant d'une grande communauté assoiffée de contribution.

    TaigaTribe est née en jumelle de Taïga. les deux plateformes peuvent vivre séparément, mais nous croyons que leur plus grande force est dans la combinaison, et nous nous assurons donc que l'intégration fonctionne \"au poil\" !,

    "}},"COMMENTS":{"DELETED_INFO":"Commentaire supprimé par {{user}}","COMMENTS_COUNT":"{{comments}} commentaires","OLDER_FIRST":"Plus ancien d'abord","RECENT_FIRST":"Plus récent d'abord","COMMENT":"Commentaire","EDITED_COMMENT":"Modifié :","SHOW_HISTORY":"Voir l'historique","TYPE_NEW_COMMENT":"Entrez un nouveau commentaire ici","SHOW_DELETED":"Afficher le commentaire supprimé","HIDE_DELETED":"Cacher le commentaire supprimé","DELETE":"Supprimer le commentaire","RESTORE":"Restaurer le commentaire","HISTORY":{"TITLE":"Activité"}},"ACTIVITY":{"TITLE":"Activité","ACTIVITIES_COUNT":"{{activities}} activités","TAGS_ADDED":"Mots-clés ajoutés :","TAGS_REMOVED":"Mots-clés supprimés","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"Nouvelle pièce jointe","DELETED_ATTACHMENT":"Pièces jointes supprimées :","UPDATED_ATTACHMENT":"Pièces jointes mises à jour ({{filename}}) :","CREATED_CUSTOM_ATTRIBUTE":"Attribut personnalisé créé","UPDATED_CUSTOM_ATTRIBUTE":"Attribut personnalisé mis à jour","BECAME_DEPRECATED":"devenu obsolète","BECAME_UNDEPRECATED":"n'est plus obsolète","TEAM_REQUIREMENT":"Exigence équipe","CLIENT_REQUIREMENT":"Exigence client","BLOCKED":"Bloqué","VALUES":{"NOT_SET":"Non renseigné","UNASSIGNED":"non affecté"},"FIELDS":{"SUBJECT":"objet","DESCRIPTION":"description","PRIORITY":"priorité","SEVERITY":"gravité","STATUS":"statut","TYPE":"type","ASSIGNED_TO":"affecté à","ASSIGNED_USERS":"Utilisateurs assignés","DUE_DATE":"Date d'échéance","MILESTONE":"sprint","COLOR":"couleur"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Le panneau backlog avec les récits utilisateurs et sprints du projet {{projectName}} : {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Personnalisez votre backlog","CUSTOMIZE_GRAPH_TEXT":"Pour obtenir un graphique agréable qui vous aide à suivre l'évolution du projet vous devez définir les points et les sprints via","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Définissez les points et les sprints via l'admin","MOVE_US_TO_CURRENT_SPRINT":"Déplacer vers le sprint actuel","MOVE_US_TO_LATEST_SPRINT":"Déplacer vers le dernier sprint","EMPTY":"Le backlog est vide !","CREATE_NEW_US":"Créer un nouveau récit utilisateur","CREATE_NEW_US_EMPTY_HELP":"Vous pouvez envisager de créer un récit utilisateur","EXCESS_OF_POINTS":"Excès de points","PENDING_POINTS":"Points restants","CLOSED_POINTS":"fermé","COMPACT_SPRINT":"Sprint Compact","GO_TO_TASKBOARD":"Aller au tableau des tâches de {{::name}}","EDIT_SPRINT":"Modifier le Sprint","TOTAL_POINTS":"total","STATUS_NAME":"Nom du statut","SORTABLE_FILTER_ERROR":"Vous ne pouvez pas déposer sur le backlog quand les filtres sont ouverts","DOOMLINE":"Périmètre projet","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Points","OPTIMAL":"Le nombre optimal de points pour le sprint \"{{sprintName}}\" devrait être {{value}}","REAL":"Le nombre réel de points pour le sprint \"{{sprintName}}\" est {{value}}","INCREMENT_TEAM":"Le nombre de points ajoutés par les exigences équipe pour le sprint \"{{sprintName}}\" est {{value}}","INCREMENT_CLIENT":"Le nombre de points ajoutés par les exigences client pour le sprint \"{{sprintName}}\" est {{value}}"},"TAGS":{"TOGGLE":"Afficher/Cacher les mots-clés","SHOW":"Montrer les mots-clés","HIDE":"Cacher les mots-clés"},"FORECASTING":{"TITLE":"Prévision de la vitesse","BACKLOG":"Afficher le carnet de commandes","NEW_SPRINT":"Récits utilisateur candidats pour votre prochain sprint en fonction de votre vitesse. Cliquez ici pour créer un nouveau sprint.","CURRENT_SPRINT":"Récits utilisateur candidat pour votre sprint basé sur votre vitesse. Cliquez ici pour ajouter au sprint actuel."},"TABLE":{"COLUMN_US":"Récits utilisateur","TITLE_COLUMN_POINTS":"Sélectionnez la vue par rôle"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"total
    points","COMPLETED_POINTS":"points
    complétés","OPEN_TASKS":"tâches
    ouvertes","CLOSED_TASKS":"tâches
    fermées","IOCAINE_DOSES":"doses
    de iocaine","SHOW_STATISTICS_TITLE":"Afficher les statistiques","TOGGLE_BAKLOG_GRAPH":"Afficher/masquer le graphique d'avancement","POINTS_PER_ROLE":"Points par rôle"},"SUMMARY":{"PROJECT_POINTS":"projet
    points","DEFINED_POINTS":"points
    définis","CLOSED_POINTS":"points
    fermés","POINTS_PER_SPRINT":"points /
    sprint"},"FILTERS":{"TOGGLE":"Afficher/Cacher les filtres","HIDE":"Cacher les filtres","SHOW":"Afficher les filtres"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Tableau des tâches","TITLE_LINK_TASKBOARD":"Aller au tableau des tâches de \"{{name}}\"","EMPTY":"Il n'y a pas encore de sprint","WARNING_EMPTY_SPRINT_ANONYMOUS":"Ce sprint n'a pas de \"User Stories\"","WARNING_EMPTY_SPRINT":"Déposez ici les récits depuis votre backlog pour démarrer un nouveau sprint","TITLE_ACTION_NEW_SPRINT":"Ajouter un sprint","TEXT_ACTION_NEW_SPRINT":"Vous souhaitez peut être créer un nouveau sprint dans votre projet.","ACTION_SHOW_CLOSED_SPRINTS":"Afficher les sprints fermés","ACTION_HIDE_CLOSED_SPRINTS":"Cacher les sprints fermés"}},"ERROR":{"TEXT1":"Un problème s'est produit et nos Oompa Loompas y travaillent.","NOT_FOUND":"Non trouvé","NOT_FOUND_TEXT":"Erreur 404. La page que vous cherchez n'existe plus. Peut-être pouvez-vous retourner à la page d'accueil de Taiga et voir si vous trouvez ce que vous cherchez.","PERMISSION_DENIED":"Permission refusée","PERMISSION_DENIED_TEXT":"Vous n'avez pas la permission d'accéder à cette page.","VERSION_ERROR":"Quelqu'un a changé ça auparavant dans Taiga et nos Oompa Loompas ne peuvent appliquer vos modifications. Veuillez recharger la page et appliquer vos modifications de nouveaux (elles seront perdues)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Liste de tâches du sprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (du {{startDate}} au {{endDate}}) de {{projectName}}. Achevé {{completedPercentage}}% ({{completedPoints}} sur {{totalPoints}} points). {{openTasks}} tâches ouvertes sur {{totalTasks}}.","SECTION_NAME":"Tableau des tâches","TITLE_ACTION_ADD":"Ajouter une nouvelle tâche","TITLE_ACTION_ADD_BULK":"Ajouter un nouveau lot de tâches","TITLE_ACTION_ADD_ISSUE":"Ajouter un nouveau ticket","TITLE_ACTION_ADD_ISSUE_BULK":"Ajouter de nouveaux tickets en lot","TITLE_ACTION_ASSIGN":"Affecter une tâche","PLACEHOLDER_CARD_TITLE":"Cela pourrait être une tâche","PLACEHOLDER_CARD_TEXT":"Éclater les récits en tâches pour les suivre séparément","TABLE":{"COLUMN":"Récit utilisateur","TITLE_ACTION_FOLD":"Replier la colonne","TITLE_ACTION_UNFOLD":"Déplier la colonne","TITLE_ACTION_FOLD_ROW":"Replier la ligne","TITLE_ACTION_UNFOLD_ROW":"Déplier la ligne","FIELD_POINTS":"points","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Tickets du sprint"},"CHARTS":{"XAXIS_LABEL":"Jours","YAXIS_LABEL":"Points","OPTIMAL":"Le nombre optimal de points pour le jour {{formattedDate}} devrait être {{roundedValue}}","REAL":"Le nombre réel de points pour le jour {{formattedDate}} est {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tâche {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Statut : {{taskStatus }}. Description : {{taskDescription}}","SECTION_NAME":"Tâche","LINK_TASKBOARD":"Tableau des tâches","TITLE_LINK_TASKBOARD":"Aller au tableau des tâches","PLACEHOLDER_SUBJECT":"Entrez l'objet de la nouvelle tâche","TITLE_SELECT_STATUS":"Nom du statut","OWNER_US":"La tâche appartient à","TITLE_LINK_GO_OWNER":"Aller au récit utilisateur","TITLE_DELETE_ACTION":"Supprimer une tâche","LIGHTBOX_TITLE_BLOKING_TASK":"Tâche bloquante","FIELDS":{"IS_IOCAINE":"est sous iocaine"},"TITLE_ACTION_IOCAINE":"Vous vous sentez un peu dépassé(e) par une tâche ? Assurez-vous que les autres le sachent en cliquant sur locaine en éditant une tâche. Il est possible de s'immuniser contre ce poison (fictif) en en consommant de faibles doses pendant un moment tout comme il est possible de devenir meilleur à ce que vous faîtes en relevant quelques défis à l'occasion !"},"NOTIFICATION":{"OK":"Tout est ok","WARNING":"Oups, quelque chose s'est produit...","WARNING_TEXT":"Nos Oompa Loompas sont tristes, vos modifications n'ont pas été sauvegardées !","SAVED":"Nos Oompa Loompas ont sauvegardé toutes vos modifications !","CLOSE":"Fermer la notification","MAIL":"Notifications par courriel","DESKTOP":"Notifications du bureau grâce aux alertes du navigateur","ASK_DELETE":"Etes-vous sûre de vouloir supprimer ?"},"CANCEL_ACCOUNT":{"TITLE":"Annuler votre compte","SUBTITLE":"Nous sommes tristes de vous voir quitter la taïga, et nous espérons que vous avez apprécié votre séjour. :)","PLACEHOLDER_INPUT_TOKEN":"Annuler le jeton du compte","ACTION_LEAVING":"Oui, je m'en vais !","SUCCESS":"Nos Oompa Loompas ont supprimé votre compte"},"CHANGE_EMAIL_FORM":{"TITLE":"Modifier votre adresse courriel","SUBTITLE":"Plus qu'un click et votre adresse courriel sera mise à jour !","PLACEHOLDER_INPUT_TOKEN":"modifier le jeton courriel","ACTION_CHANGE_EMAIL":"Modifier le courriel","SUCCESS":"Nos Oompa Loompas ont mis à jour votre adresse courriel"},"ISSUES":{"PAGE_TITLE":"Tickets - {{projectName}}","PAGE_DESCRIPTION":"Le panneau de la liste des tickets du projet {{projectName}} : {{projectDescription}}","SECTION_NAME":"Ticket","ACTION_NEW_ISSUE":"+ NOUVEAU TICKET","ACTION_PROMOTE_TO_US":"Promouvoir en récit utilisateur","ACTION_ATTACH_SPRINT":"Attacher le ticket au sprint","ACTION_DETACH_SPRINT":"Détacher le ticket du sprint","PROMOTED":"Le ticket a été promu en récit utilisateur","EXTERNAL_REFERENCE":"Ce ticket a été créé à partir de","GO_TO_EXTERNAL_REFERENCE":"Aller à l'origine","ACTION_DELETE":"Supprimer le ticket","LIGHTBOX_TITLE_BLOKING_ISSUE":"Ticket bloquant","LINK_TASKBOARD":"Tableau des tâches","TITLE_LINK_TASKBOARD":"Aller au tableau des tâches","FILTER_SPRINTS":"Filtrer les sprints","CHOOSE_SPRINT":"Quel sprint ?","FIELDS":{"PRIORITY":"Priorité","SEVERITY":"Gravité","TYPE":"Type"},"FILTER_ISSUES":"Filtrer les tickets","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Détacher le ticket du sprint","MESSAGE":"Vous êtes sur le point de détacher le ticket du sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attacher le ticket au sprint","MESSAGE":"Ce ticket est actuellement attaché au sprint {{ oldSprintName }}. Vous êtes sur le point de le détacher de ce sprint afin de l’attacher au sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promouvoir ce ticket en nouveau récit utilisateur","MESSAGE":"Êtes-vous sure de vouloir créer un nouveau récit utilisateur à partir de ce ticket ?"},"TABLE":{"COLUMNS":{"TYPE":"Type","SEVERITY":"Gravité","PRIORITY":"Priorité","SUBJECT":"Objet","VOTES":"Votes","STATUS":"Statut","MODIFIED":"Modifié","ASSIGNED_TO":"Affecté à"},"TITLE_ACTION_CHANGE_STATUS":"Changer le statut","TITLE_ACTION_ASSIGNED_TO":"Affecté à","BLOCKED":"Bloqué","EMPTY":{"TITLE":"Il n'y a aucun ticket déclaré :-)","SUBTITLE":"Avez-vous trouvé un problème ?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Ticket {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"État : {{issueStatus }}. Type : {{issueType}}, Priorité : {{issuePriority}}. Gravité : {{issueSeverity}}. Description : {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Le panneau kanban avec les récits utilisateurs du {{projectName}} : {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Replier la colonne","TITLE_ACTION_UNFOLD":"Déplier la colonne","TITLE_ACTION_ADD_US":"Ajouter un nouveau récit utilisateur","TITLE_ACTION_ADD_BULK":"Ajout en masse","ACTION_SHOW_ARCHIVED":"Montrer les éléments archivés","ACTION_HIDE_ARCHIVED":"Cacher les éléments archivés","HIDDEN_USER_STORIES":"Les récits utilisateur avec ce statut sont masqués par défaut","PLACEHOLDER_CARD_TITLE":"Ce sont vos récits utilisateurs","PLACEHOLDER_CARD_TEXT":"Les récits peuvent avoir des sous-tâches pour séparer les exigences"},"SEARCH":{"PAGE_TITLE":"Chercher - {{projectName}}","PAGE_DESCRIPTION":"Chercher tout, récits utilisateurs, tickets, tâches ou pages de wiki, dans le projet {{projectName}} : {{projectDescription}}","FILTER_EPICS":"Épopées","FILTER_USER_STORIES":"Récits utilisateur","FILTER_ISSUES":"Tickets","FILTER_TASKS":"Tâches","FILTER_WIKI":"Pages Wiki","PLACEHOLDER_SEARCH":"Rechercher dans...","TITLE_ACTION_SEARCH":"rechercher","EMPTY_TITLE":"Il semble qu'aucun résultat ne correspond à vos critères de recherche.","EMPTY_DESCRIPTION":"Vous pouvez essayer l'un des onglets au-dessus ou relancer une recherche"},"TEAM":{"PAGE_TITLE":"ÉQUIPE - {{projectName}}","PAGE_DESCRIPTION":"Le panneau équipe montre la liste des membres du projet {{projectName}} : {{projectDescription}}","SECTION_NAME":"Équipe","PLACEHOLDER_INPUT_SEARCH":"Rechercher par nom...","COLUMN_MR_WOLF":"M. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Tickets fermés","COLUMN_IOCAINE":"Buveur de iocaine","EXPLANATION_COLUMN_IOCAINE":"Doses de iocaine ingérées","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Page Wiki éditée","COLUMN_BUG_HUNTER":"Chasseur de bug","EXPLANATION_COLUMN_BUG_HUNTER":"Tickets déclarés","COLUMN_NIGHT_SHIFT":"Equipe de nuit","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tâches fermées","COLUMN_TOTAL_POWER":"Puissance totale","EXPLANATION_COLUMN_TOTAL_POWER":"Points au total","SECTION_TITLE_TEAM":"Équipe >","SECTION_FILTER_ALL":"Tout","CONFIRM_LEAVE_PROJECT":"Êtes-vous sûr de vouloir quitter le projet ?","ACTION_LEAVE_PROJECT":"Quitter le projet"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Taille max. : {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Paramètres de l'utilisateur","USER_PROFILE":"Profil utilisateur","CHANGE_PASSWORD":"Modifier le mot de passe","EMAIL_NOTIFICATIONS":"Notifications courriel","DESKTOP_NOTIFICATIONS":"Notifications de bureau","EVENTS":"Événements"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Notifications de bureau","SECTION_NAME":"Notifications courriel","COLUMN_PROJECT":"Projet","COLUMN_RECEIVE_ALL":"Tout recevoir","COLUMN_ONLY_INVOLVED":"Uniquement si impliqué","COLUMN_NO_NOTIFICATIONS":"Aucune notification","OPTION_ALL":"Toutes","OPTION_INVOLVED":"Impliqué","OPTION_NONE":"Aucune"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projet","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Valeur par défaut"},"EVENTS":{"SECTION_NAME":"Événements","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projet"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Utiliser l'image par défaut","ACTION_DELETE_ACCOUNT":"Supprime le compte Taiga","ACTION_DOWNLOAD_PROFILE":"Télécharger le profil Taïga","CHANGE_EMAIL_SUCCESS":"Consultez votre messagerie !
    Nous vous avons envoyé un courriel
    avec les instructions à suivre pour saisir votre nouvelle adresse","CHANGE_PHOTO":"Changer la photo","FIELD":{"USERNAME":"Identifiant","EMAIL":"Adresse courriel","FULL_NAME":"Nom complet","PLACEHOLDER_FULL_NAME":"Saisissez votre nom complet (ex. Íñigo Montoya)","BIO":"Biographie (maximum 210 caractères)","PLACEHOLDER_BIO":"Dites-en nous plus sur vous","LANGUAGE":"Langue","LANGUAGE_DEFAULT":"-- utiliser la langue par défaut --","THEME":"Thème","THEME_DEFAULT":"-- utiliser le thème par défaut --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Dernière modification le {{lastModifiedDate}} ({{totalEditions}} modifications en tout) Contenu : {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Supprimer cette page wiki","DELETE_LIGHTBOX_TITLE":"Supprimer la page Wiki","DELETE_LINK_TITLE":"Supprimer un lien Wiki","NAVIGATION":{"HOME":"Page principale","SECTION_NAME":"SIGNETS","ACTION_ADD_LINK":"Ajouter un signet","ALL_PAGES":"Toutes les pages wiki"},"SUMMARY":{"TIMES_EDITED":"modifications","LAST_EDIT":"dernière
    modification","LAST_MODIFICATION":"dernière modification"},"SECTION_PAGES_LIST":"Toutes les pages","PAGES_LIST_COLUMNS":{"TITLE":"Titre","EDITIONS":"Modifications","CREATED":"Créé le","MODIFIED":"Modifié","CREATOR":"Créateur","LAST_MODIFIER":"Dernier modificateur"}},"HINTS":{"SECTION_NAME":"Indice","LINK":"Si vous voulez savoir comment l'utiliser, visitez notre page d'assistance","LINK_TITLE":"Visitez notre page d'assistance","HINT1_TITLE":"Savez-vous que vous pouvez importer et exporter les projets ?","HINT1_TEXT":"Cela vous permet d'extraire toutes vos données d'un Taiga et de le déplacer vers un autre","HINT2_TITLE":"Savez-vous que vous pouvez créer des champs personnalisés ?","HINT2_TEXT":"Les équipes peuvent désormais créer des champs personnalisés comme un moyen flexible d'entrer des données spécifiques utiles pour leur flux de travail particulier.","HINT3_TITLE":"Triez vos projets pour mettre en valeur vos projets les plus pertinents.","HINT3_TEXT":"Les 10 projets sont listés dans la barre d'accès direct en haut de la page.","HINT4_TITLE":"Vous avez oublié ce sur quoi vous travaillez ?","HINT4_TEXT":"Pas d'inquiétude, vous trouverez dans votre tableau de bord vos tâches, tickets et récits utilisateurs dans l'ordre dans lequel vous avez travaillé dessus."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} a déposé une nouvelle pièce jointe dans {{obj_name}}","US_CREATED":"{{username}} a créé un nouveau récit utilisateur {{obj_name}} dans {{project_name}}","ISSUE_CREATED":"{{username}} a créé un nouveau ticket {{obj_name}} dans {{project_name}}","TASK_CREATED":"{{username}} a créé une nouvelle Tâche {{obj_name}} dans {{project_name}}","TASK_CREATED_WITH_US":"{{username}} a créé une nouvelle tâche {{obj_name}} dans le projet {{project_name}} pour le récit utilisateur {{us_name}}","WIKI_CREATED":"{{username}} a créé une nouvelle page wiki {{obj_name}} dans {{project_name}}","MILESTONE_CREATED":"{{username}} a créé un nouveau sprint {{obj_name}} dans {{project_name}}","EPIC_CREATED":"{{username}} a créé une nouvelle épopée {{obj_name}} dans {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} a lié le récit utilisateur {{related_us_name}} à l'épopée {{epic_name}} dans {{project_name}}","NEW_PROJECT":"{{username}} a créé le projet {{project_name}}","MILESTONE_UPDATED":"{{username}} a mis à jour le sprint {{obj_name}}","US_UPDATED":"{{username}} a mis à jour l'attribut «{{field_name}}» du récit utilisateur {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour le récit utilisateur {{obj_name}}","US_UPDATED_POINTS":"{{username}} a mis à jour les points du rôle '{{role_name}}' de l'US {{obj_name}} à la valeur {{new_value}}","ISSUE_UPDATED":"{{username}} a mis à jour l'attribut «{{field_name}}» du ticket {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} a mis à jour l'attribut \"{{field_name}}\" du ticket {{obj_name}} à {{new_value}}","TASK_UPDATED":"{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour la tâche {{obj_name}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour la tâche {{obj_name}}","TASK_UPDATED_WITH_US":"{{username}} a mis à jour l'attribut «{{field_name}}» de la tâche {{obj_name}} qui appartient au récit utilisateur {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour la tâche {{obj_name}} appartenant au récit utilisateur {{us_name}}","WIKI_UPDATED":"{{username}} a mis à jour la page wiki {{obj_name}}","EPIC_UPDATED":"{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}} en {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}} en ","NEW_COMMENT_US":"{{username}} a commenté le récit utilisateur {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} a commenté le ticket {{obj_name}}","NEW_COMMENT_TASK":"{{username}} a commenté la tâche {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} a ajouté un commentaire dans l'épopée {{obj_name}}","NEW_MEMBER":"{{project_name}} a un nouveau membre","US_ADDED_MILESTONE":"{{username}} a ajouté le récit utilisateur {{obj_name}} à {{sprint_name}}","US_MOVED":"{{username}} a déplacé le RU {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} a ajouté le récit utilisateur {{obj_name}} au carnet","BLOCKED":"{{username}} a bloqué {{obj_name}}","UNBLOCKED":"{{username}} a débloqué {{obj_name}}","NEW_USER":"{{username}} a rejoint Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Ticket","TASK":"Tâche"}},"EVENTS":{"TITLE":"Événements","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"Lors de la création d'un compte, vous acceptez nos conditions d'utilisation et politique de confidentialité.","GDPR_ANNOUNCEMENT_TITLE":"Règlement Général de Protection des Données (RGPD)","GDPR_ANNOUNCEMENT_DESCRIPTION":"Vous l'avez vu venir, non ? Mises à jour de nos conditions d'utilisation","GDPR_ANNOUNCEMENT_INFOLINK":"Veuillez lire notre annonce ici"},"EXTERNAL_APP":{"PAGE_TITLE":"Une application externe requiert l'authentification","PAGE_DESCRIPTION":"Une application externe requiert l'authentification","AUTHORIZATION_REQUEST":"Autoriser {{application}} à utiliser votre compte Taiga ?","LOGIN_WITH_ANOTHER_USER":"Se connecter avec un autre utilisateur","AUTHORIZE_APP":"Autoriser l'application","CANCEL":"Annuler"},"JOYRIDE":{"NAV":{"NEXT":"Suivant","BACK":"Back","SKIP":"Passer","DONE":"Fait"},"DASHBOARD":{"STEP1":{"TITLE":"Votre projet","TEXT":"Bienvenue ! Vous trouverez ici tous les projets dont vous êtes membre."},"STEP2":{"TITLE":"Projets en cours","TEXT":"Ici vous trouverez les récits utilisateur, tâches et tickets sur lesquels vous travaillez."},"STEP3":{"TITLE":"Suivi","TEXT1":"Et ici vous trouverez ceux que vous voulez connaitre dans vos projets.","TEXT2":"Vous travaillez déjà avec Taiga ;)"},"STEP4":{"TITLE":"Commençons","TEXT1":"Vous pouvez démarrer en créant votre premier projet Taiga.","TEXT2":"Bonne chance!"}},"BACKLOG":{"STEP1":{"TITLE":"Résumé du projet","TEXT1":"Ici vous verrez l'état de votre projet.","TEXT2":"Vous pouvez modifier tous les paramètres d'un projet dans l'administration."},"STEP2":{"TITLE":"Backlog du produit","TEXT":"Le backlog est la liste des exigences (récits utilisateur) pour le projet. C'est ici que vous préparerez vos sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Les sprints sont des courtes périodes (généralement 2 semaines) pendant lesquels certaines tâches doivent êtres faites et livrées."},"STEP4":{"TITLE":"Récits utilisateur","TEXT":"Ce sont les exigences du projet de niveau élevé. Vous pouvez les ajouter au backlog et les glisser dans le sprint pour lequel elles devront être livrées."}},"KANBAN":{"STEP1":{"TITLE":"Personnalisez votre workflow","TEXT":"Configurez les colonnes de statut dont vous aurez besoin pour lier votre workflow à l'administration."},"STEP2":{"TITLE":"Récits utilisateur & Tâches","TEXT":"Les récits utilisateur sont les exigences du projet de niveau élevé. Vous pouvez les déplacer dans différentes colonnes."},"STEP3":{"TITLE":"Ajout de récits utilisateur","TEXT1":"Vous pouvez ajouter un seul récit utilisateur (icône ajouter un récit utilisateur) ou plusieurs (icône vrac)","TEXT2":"Bonne chance !"}}},"DISCOVER":{"PAGE_TITLE":"Découvrir les projets - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Découvrir les projets","DISCOVER_SUBTITLE":"{projects, plural, one{Un projet public à découvrir} other{# projets publics à découvrir}}","MOST_ACTIVE":"les plus actifs","MOST_ACTIVE_EMPTY":"Il n'y a pas de projet actif pour le moment","MOST_LIKED":"Les plus « aimés »","MOST_LIKED_EMPTY":"Il n'y a pas encore de projet « aimé »","VIEW_MORE":"Voir plus","FEATURED":"Projets mis en avant","EMPTY":"Aucun projet ne correspond à ce critère de recherche.
    Essayez encore !","FILTERS":{"ALL":"Toutes","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"En recherche de membres","WEEK":"Semaine dernière","MONTH":"Mois dernier","YEAR":"Année dernière","ALL_TIME":"Tout le temps","CLEAR":"Effacer les filtres"},"SEARCH":{"PAGE_TITLE":"Rechercher - Découvrir les projets - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Écrivez quelque chose...","ACTION_TITLE":"Rechercher","RESULTS":"Résultats de la recherche"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-it.json b/dist/v-1547534999795/locales/taiga/locale-it.json deleted file mode 100644 index 8c7ce2d..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-it.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Sì","NO":"No","OR":"o","I_GET_IT":"OK, I get it","LOADING":"Caricamento...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Salva","CANCEL":"Annulla","ACCEPT":"Accetta","DELETE":"Elimina","UNLINK":"Scollega","CREATE":"Crea","ADD":"Aggiungi","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Modifica","DRAG":"Drag","TAG_LINE":"Il tuo agile, libero e opensource strumento di project management","TAG_LINE_2":"ADORO IL VOSTRO PROGETTO","BLOCK":"Blocca","BLOCK_TITLE":"Blocca questo elemento se per esempio ha dipendenze che non possono essere soddisfatte","BLOCKED":"Bloccato","UNBLOCK":"Sblocca","UNBLOCK_TITLE":"Sblocca questo elemento","BLOCKED_NOTE":"Perché questo compito è bloccato?","BLOCKED_REASON":"Spiega il motivo","CREATED_BY":"Creato da {{fullDisplayName}}","CLOSE":"chiudi","GO_HOME":"Ritorna all'inizio","PLUGINS":"Plugin","ONE_ITEM_LINE":"Un elemento per riga...","NEW_BULK":"Nuovo inserimento nel carico","SUBTASKS":"Subtasks","PREVIOUS":"Precedente","NEXT":"Successivo","LOGOUT":"Esci","EXTERNAL_USER":"un utente esterno","GENERIC_ERROR":"C'é uno dei nostri Oompa Loompa che dice {{error}}.","IOCAINE_TEXT":"Questo membro si sente un po' sopraffatto da questo compito. In futuro diventerà immune a tutto questo, ma per ora, potrebbe sentire il bisogno di un abbraccio.","CLIENT_REQUIREMENT":"Requisito del Cliente è un nuovo requisito che non era stato previsto ed ora è stato richiesto come requisito del progetto","TEAM_REQUIREMENT":"Requisito del Team è un requisito che deve esistere nel progetto ma non deve avere costi per il cliente","OWNER":"Proprietario Progetto","CAPSLOCK_WARNING":"Attento! Stai usando lettere maiuscole in un campo che è case sensitive","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Sei sicuro di voler chiudere la modalità modifica?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Ricorda che se chiudi la modalità modifica senza salvare, tutte le modifiche saranno perse","RELATED_USERSTORIES":"Storie utente collegate","CARD":{"ASSIGN_TO":"Assegna a","EDIT":"Modifica la scheda","DELETE":"Delete card","DELETE_ISSUE":"Elimina il problema","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Questo valore non è valido.","TYPE_EMAIL":"Questo valore dovrebbe corrispondere ad una mail valida","TYPE_URL":"Questo valore dovrebbe corrispondere ad un URL valido","TYPE_URLSTRICT":"Questo valore dovrebbe corrispondere ad un URL valido","TYPE_NUMBER":"Questo valore dovrebbe corrispondere ad un numero valido","TYPE_DIGITS":"Questo valore dovrebbe essere in cifre","TYPE_DATEISO":"Questo valore dovrebbe corrispondere ad una data valida (YYYY-MM-DD).","TYPE_ALPHANUM":"Questo valore dovrebbe corrispondere ad un alfanumerico","TYPE_PHONE":"Questo valore dovrebbe corrispondere ad un numero telefonico valido","NOTNULL":"Questo valore non può essere null.","NOT_BLANK":"Questo valore non dovrebbe essere vuoto","REQUIRED":"Questo valore è richiesto","REGEXP":"Questo valore non è valido.","MIN":"Questo valore dovrebbe essere maggiore o uguale a %s.","MAX":"Questo valore dovrebbe essere minore o uguale a %s.","RANGE":"Questo valore dovrebbe essere tra %s e %s","MIN_LENGTH":"Questo valore è troppo corto. Dovrebbe corrispondere a %s o più caratteri.","MAX_LENGTH":"Questo valore è troppo lungo. Dovrebbe corrispondere a %s o meno caratteri.","RANGE_LENGTH":"La lunghezza del valore non è valida. Dovrebbe essere tra %s e %s caratteri.","MIN_CHECK":"Devi selezionare almeno %s scelte.","MAX_CHECK":"Devi selezionare la scelta %s o meno.","RANGE_CHECK":"Devi selezionare tra %s e %s scelta.","EQUAL_TO":"Il valore dovrebbe essere uguale","LINEWIDTH":"Una o più linee è forse un po' troppo. Cerca di stare sotto i %s caratteri.","PIKADAY":"Formato data invalido, per favore usa GG MMM AAAA (ad esempio 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mese precedente","NEXT_MONTH":"Prossimo mese","MONTHS":{"JAN":"Gennaio","FEB":"Febbraio","MAR":"Marzo","APR":"Aprile","MAY":"Maggio","JUN":"Giugno","JUL":"Luglio","AUG":"Agosto","SEP":"Settembre","OCT":"Ottobre","NOV":"Novembre","DEC":"Dicembre"},"WEEK_DAYS":{"SUN":"Domenica","MON":"Lunedì","TUE":"Martedì","WED":"Mercoledì","THU":"Giovedì","FRI":"Venerdì","SAT":"Sabato"},"WEEK_DAYS_SHORT":{"SUN":"Dom","MON":"Lun","TUE":"Mar","WED":"Mer","THU":"Gio","FRI":"Ven","SAT":"Sat"}},"SEE_USER_PROFILE":"Guarda il profilo di {{username }}","USER_STORY":"Storia utente","TASK":"Compito","ISSUE":"Problema","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Inserisci tag","DELETE":"Elimina tag","ADD":"Aggiungi un tag"},"DESCRIPTION":{"EMPTY":"Gli spazi vuoti sono così noiosi...dai, inserisci qualche descrizione...","NO_DESCRIPTION":"Ancora nessuna descrizione disponibile"},"FIELDS":{"SUBJECT":"Oggetto","NAME":"Nome","URL":"URL","DESCRIPTION":"Descrizione","VALUE":"Valore","SLUG":"Lumaca","COLOR":"Colore","IS_CLOSED":"È chiuso?","STATUS":"Stato","TYPE":"Tipo","SEVERITY":"Gravità","PRIORITY":"Priorità","ASSIGNED_TO":"Assegnato a","ASSIGNED_USERS":"Assigned users","POINTS":"Punti","IS_BLOCKED":"è bloccato","REF":"Riferimento","VOTES":"Voti","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Tutti"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Non assegnato","ASSIGN":"Assegna","DELETE_ASSIGNMENT":"Elimina incarico","REMOVE_ASSIGNED":"Rimuovi incaricato","TOO_MANY":"...troppi utenti, continua a filtrare","CONFIRM_UNASSIGNED":"Sei sicuro di volerlo lasciare non assegnato?","TITLE_ACTION_EDIT_ASSIGNMENT":"Modifica incarico","SELF":"Assegna a me"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Chiuso","OPEN":"Aperto"},"WATCHERS":{"WATCHERS":"Osservatori","ADD":"Aggiungi osservatori","TITLE_ADD":"Aggiungi un membro di progetto alla lista degli osservatori","DELETE":"Elimina osservatore","TITLE_LIGHTBOX_DELETE_WARTCHER":"Elimina osservatore..."},"WATCH_BUTTON":{"WATCH":"Osserva","WATCHING":"In osservazione","UNWATCH":"Non osservare","WATCHERS":"Osservatori","BUTTON_TITLE":"Osserva/Non osservare questo elemento","COUNTER_TITLE":"{total, plural, one{un osservatore} other{# osservatori}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"vota positivamente o negativamente questo elemento","COUNTER_TITLE":"{total, plural, one{un voto} other{# voti}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Campi Personalizzati","SAVE":"Salva il campo personalizzato","EDIT":"Modifica Campo Personalizzato","DELETE":"Elimina l'attributo personalizzato","CONFIRM_DELETE":"Ricorda che tutti i valori in questo campo custom andranno persi.\nSei sicuro di voler continuare?"},"FILTERS":{"INPUT_PLACEHOLDER":"Soggetto o referenza","TITLE_ACTION_FILTER_BUTTON":"cerca","TITLE":"Filtri","TITLE_ACTION_SEARCH":"Cerca","ACTION_SAVE_CUSTOM_FILTER":"salva come filtro personalizzato","PLACEHOLDER_FILTER_NAME":"Scrivi il nome del filtro e premi invio","APPLIED_FILTERS_NUM":"filtri impostati","CATEGORIES":{"TYPE":"Tipo","STATUS":"Stato","SEVERITY":"Gravità","PRIORITIES":"Priorità","TAGS":"Tag","ASSIGNED_TO":"Assegnato a","ASSIGNED_USERS":"Assigned users","ROLE":"Ruolo","CREATED_BY":"Creato da","CUSTOM_FILTERS":"Filtri personalizzati","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Frammento di Codice","DB_CLICK":"doppio click per modificare","SELECT_LANGUAGE_PLACEHOLDER":"Selezione Lingua","SELECT_LANGUAGE_REMOVE_FORMATING":"Rimuove la formattazione","OUTDATED":"Un'altra persona ha apportato dei cambiamenti mentre stavi scrivendo. Controlla la nuova versione nel registro delle attività prima di salvare le tue modifiche.","MARKDOWN_HELP":"Aiuto per la sintassi Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epici","VIEW_EPICS":"Vedi epic","ADD_EPICS":"Aggiungi epic","MODIFY_EPICS":"Modifica epici","COMMENT_EPICS":"Commenta epic","DELETE_EPICS":"Cancella epici"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Vedi gli sprint","ADD_SPRINTS":"Aggiungi gli sprints","MODIFY_SPRINTS":"Modifica gli sprint","DELETE_SPRINTS":"Elimina sprint"},"USER_STORIES":{"NAME":"Storie Utente","VIEW_USER_STORIES":"Vai alle storie utente","ADD_USER_STORIES":"Aggiungi le storie utente","MODIFY_USER_STORIES":"Modifica le storie utente","COMMENT_USER_STORIES":"Commenta storie utente","DELETE_USER_STORIES":"Elimina le storie utente"},"TASKS":{"NAME":"Compiti","VIEW_TASKS":"Guarda i compiti","ADD_TASKS":"Aggiungi i compiti","MODIFY_TASKS":"Modifica i compiti","COMMENT_TASKS":"Commenta compiti","DELETE_TASKS":"Elimina i compiti"},"ISSUES":{"NAME":"Problemi","VIEW_ISSUES":"Guarda i problemi","ADD_ISSUES":"Aggiungi un problema","MODIFY_ISSUES":"Modifica i problemi","COMMENT_ISSUES":"Commenta problemi","DELETE_ISSUES":"Elimina i problemi"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Guarda le pagine wiki","ADD_WIKI_PAGES":"Aggiungi le pagine wiki","MODIFY_WIKI_PAGES":"Modifica le pagine wiki","DELETE_WIKI_PAGES":"Elimina le pagine wiki","VIEW_WIKI_LINKS":"Vedi il link di wiki","ADD_WIKI_LINKS":"Aggiungi un wiki links","DELETE_WIKI_LINKS":"Elimina il link wiki"}}},"LOGIN":{"PAGE_TITLE":"Accesso - Taiga","PAGE_DESCRIPTION":"Accedi a Taiga, una piattaforma semplice di gestione dei progetti che rende il lavoro davvero piacevole alle start-up e a chi sviluppa e progetta con il metodo \"agile\"."},"AUTH":{"INVITED_YOU":"ti ha invitato a partecipare al progetto","NOT_REGISTERED_YET":"Non sei ancora registrato?","REGISTER":"Registrati","CREATE_ACCOUNT":"Crea il tuo account gratuito qui"},"LOGIN_COMMON":{"HEADER":"Ho già un account Taiga","PLACEHOLDER_AUTH_NAME":"nome utente o email (occhio alle maiuscole)","LINK_FORGOT_PASSWORD":"Password dimenticata?","TITLE_LINK_FORGOT_PASSWORD":"Hai dimenticato la tua password?","ACTION_ENTER":"Conferma","ACTION_SIGN_IN":"Login","PLACEHOLDER_AUTH_PASSWORD":"Password (occhio alle maiuscole)","ALT_LOGIN":"Oppure accedi con"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Secondo i nostri Oompa Loompa, i tuoi nomi utente, email o password sono errati.","SUCCESS":"I nostri Oompa Loompa sono entusiasti! Benvenuto in Taiga!"},"REGISTER":{"PAGE_TITLE":"Registrazione - Taiga","PAGE_DESCRIPTION":"Crea il tuo account su Taiga, una piattaforma semplice di project management che rende il lavoro davvero piacevole alle start-up e a chi sviluppa e progetta con il metodo \"agile\"."},"REGISTER_FORM":{"TITLE":"Registra un nuovo account Taiga (è gratis)","PLACEHOLDER_NAME":"Scegli uno nome utente (occhio alle maiuscole)","PLACEHOLDER_FULL_NAME":"Inserisci il tuo nome completo","PLACEHOLDER_EMAIL":"La tua email","PLACEHOLDER_PASSWORD":"Imposta una password (case sensitive)","ACTION_SIGN_UP":"Registrati","TITLE_LINK_LOGIN":"Log in","LINK_LOGIN":"Sei già registrato? Effettua l'accesso"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Password dimenticata - Taiga","PAGE_DESCRIPTION":"Inserisci il tuo nome utente o la tua email per ricevere una nuova password a poter accedere nuovamente a Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Oops, hai dimenticato la password?","SUBTITLE":"Inserisci il tuo nome utente o email per ricevere una nuova password","PLACEHOLDER_FIELD":"Nome utente o email","ACTION_RESET_PASSWORD":"Reimposta la password","LINK_CANCEL":"Fa niente dai, riportami indietro. Penso di ricordarmela.","SUCCESS_TITLE":"Controlla la tua inbox!","SUCCESS_TEXT":"Ti abbiamo mandato una mail con le istruzioni per impostare una nuova password","ERROR":"Secondo i nostri Oompa Loompa, non sei ancora registrato."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Cambia la tua password - Taiga","SECTION_NAME":"Cambia password","FIELD_CURRENT_PASSWORD":"Password attuale","PLACEHOLDER_CURRENT_PASSWORD":"La tua password corrente (o lascia vuoto se non hai ancora una password)","FIELD_NEW_PASSWORD":"Nuova password","PLACEHOLDER_NEW_PASSWORD":"Digita una nuova password","FIELD_RETYPE_PASSWORD":"Digita una nuova password","PLACEHOLDER_RETYPE_PASSWORD":"Ri-digita una nuova password","ERROR_PASSWORD_MATCH":"Le password non corrispondono"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Crea una nuova password su Taiga","SUBTITLE":"Ehi, e se mangiassi qualcosa ricco di ferro? fa bene all'innovazione :p","PLACEHOLDER_NEW_PASSWORD":"Nuova password","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Digita una nuova password","ACTION_RESET_PASSWORD":"Reimposta la password","ERROR":"I nostri Oompa Loompa non riescono a trovare la tua richiesta di recupero password. Prova a chiedergliela di nuovo.","SUCCESS":"I nostri Oompa Loompa hanno salvato la tua nuova password. Che bravi!
    Pova a fare login con questa."},"INVITATION":{"PAGE_TITLE":"Invito ad accedere - Taiga","PAGE_DESCRIPTION":"Accetta l'invito a partecipare ad un progetto in Taiga, una piattaforma semplice di project management che rende il lavoro davvero piacevole a start-up e a chi sviluppa e progetta con il metodo \"agile\"."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"I nostri Oompa Loompa non hanno trovato il tuo invito.","SUCCESS":"Sei ora un membro di questo progetto. Benvenuto in {{project_name}}"},"HOME":{"PAGE_TITLE":"Home - Taiga","PAGE_DESCRIPTION":"La home di Taiga con i tuoi principali progetti e tutte le storie utente, i compiti e problemi assegnati e osservati. ","EMPTY_WORKING_ON":"Sembra vuoto, vero? Inizia a lavorare con Taiga e vedrai qui le storie, task e issue su cui stai lavorando","EMPTY_WATCHING":"Osserva Storie Utente, Compiti, Criticità nel progetto e ti verranno notificate le sue modifiche :)","EMPTY_PROJECT_LIST":"Per ora non hai nessun progetto","WORKING_ON_SECTION":"Sta lavorando su","WATCHING_SECTION":"Osservando","DASHBOARD":"Dashboard Progetti"},"EPICS":{"TITLE":"EPICI","SECTION_NAME":"Epici","EPIC":"Epic","PAGE_TITLE":"Epici - {{projectName}}","PAGE_DESCRIPTION":"La lista di epici del progetto {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ AGGIUNGI EPIC","UNASSIGNED":"Non assegnato"},"EMPTY":{"TITLE":"Sembra che nn ci sia ancora nessun epic","EXPLANATION":"Gli epici sono oggetti ad un livello superiore che uniscono storie utente.
    Gli epici sono in cima alla gerarchia e possono essere usati per raggruppare insieme storie utente","HELP":"Impara di più sugli epici"},"TABLE":{"VOTES":"Voti","NAME":"Nome","PROJECT":"Progetto","SPRINT":"Sprint","ASSIGNED_TO":"Assegnato","STATUS":"Stato","PROGRESS":"Progresso","VIEW_OPTIONS":"Vedi le opzioni"},"CREATE":{"TITLE":"Nuovo epic","PLACEHOLDER_DESCRIPTION":"Per favore aggiungi una descrizione per aiutare gli altri a capire meglio questo epic","TEAM_REQUIREMENT":"Requisito del team","CLIENT_REQUIREMENT":"Requisito del cliente","BLOCKED":"Bloccato","BLOCKED_NOTE_PLACEHOLDER":"Perchè questa epic è bloccata?","CREATE_EPIC":"Crea epic"}},"PROJECTS":{"PAGE_TITLE":"I miei progetti - Taiga","PAGE_DESCRIPTION":"Una lista di tutti i tuoi progetti, la puoi riordinare o crearne una nuova.","MY_PROJECTS":"I miei progetti"},"ATTACHMENT":{"SECTION_NAME":"allegati","TITLE":"{{ fileName }} caricato il {{ date }}","LIST_VIEW_MODE":"Modalità lista","GALLERY_VIEW_MODE":"Modalità galleria","DESCRIPTION":"Inserisci una breve descrizione","DEPRECATED":"(deprecato)","DEPRECATED_FILE":"Deprecato?","ADD":"Aggiungi un nuovo allegato. {{maxFileSizeMsg}}","DROP":"Rilascia qui l'allegato!","SHOW_DEPRECATED":"+ visualizza allegati deprecati","HIDE_DEPRECATED":"- nascondi allegati deprecati","COUNT_DEPRECATED":"({{ counter }} deprecati)","MAX_UPLOAD_SIZE":"La dimensione massima di caricamento è {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Non é stato possibile caricare '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Cancella l'allegato","MSG_LIGHTBOX_DELETE_ATTACHMENT":"l'allegato '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Non siamo riusciti a cancellare: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Precedente","NEXT":"Successivo"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Modifica valore","TITLE_ACTION_DELETE_VALUE":"Elimina valore","TITLE_ACTION_DELETE_TAG":"Elimina tag"},"HELP":"Hai bisogno di aiuto? Controlla la nostra pagina di supporto!","PROJECT_DEFAULT_VALUES":{"TITLE":"Valori di default","SUBTITLE":"Imposta valori di default per tutti i selettori input."},"MEMBERSHIPS":{"TITLE":"Gestisci membri","PAGE_TITLE":"Webhooks - {{projectName}}","ADD_BUTTON":"Nuovo Membro","ADD_BUTTON_TITLE":"Aggiungi un nuovo membro","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Sfortunatamente, questo progetto ha raggiunto il suo limite di ({{members}}) membri. Se vuoi aumentare il limite per favore contatta l'amministratore."},"PROJECT_EXPORT":{"TITLE":"Esporta","SUBTITLE":"Esporta il tuo progetto e salva un backup o creane uno nuovo basato su questo","EXPORT_BUTTON":"Esporta","EXPORT_BUTTON_TITLE":"Esporta il tuo progetto","LOADING_TITLE":"Stiamo preparando il file di dump","DUMP_READY":"Il file di dump é pronto!","LOADING_MESSAGE":"Non chiudere questa pagina.","ASYNC_MESSAGE":"Ti invieremo una mail quando sarà pronto","SYNC_MESSAGE":"Se il download non parte automaticamente clicca here.","ERROR":"I nostri Oompa Loompa hanno qualche problema a generare il tuo dump. Prova di nuova.","ERROR_BUSY":"Scusali, i nostri Oompa Loompa sono occupati. Riprova di nuovo in qualche minuto."},"MODULES":{"TITLE":"Moduli","EPICS":"Epici","EPICS_DESCRIPTION":"Visulaizza e controlla la parte più strategica del tuo progetto","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Amministra le storie degli utenti per mantenere una visione organizzata dei lavori in arrivo e di quelli ad alta priorità ","NUMBER_SPRINTS":"Numero di Sprint previsto","NUMBER_SPRINTS_HELP":"0 per indeterminato","NUMBER_US_POINTS":"Numero di punti totali della storia previsto","NUMBER_US_POINTS_HELP":"0 per indeterminato","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organizza in modo semplice il tuo progetto con questa board","ISSUES":"Problemi","ISSUES_DESCRIPTION":"Traccia i bug, le domande e i miglioramenti legati al tuo progetto. Non perderti nulla!","WIKI":"Wiki","WIKI_DESCRIPTION":"Aggiungi, modifica o elimina i contenuti in collaborazione con gli altri. E' il posto giusto per la documentazione del tuo progetto","MEETUP":"Incontro","MEETUP_DESCRIPTION":"Scegli il tuo sistema di videoconferenza","SELECT_VIDEOCONFERENCE":"Seleziona un sistema di videoconferenza","SALT_CHAT_ROOM":"Aggiungi un prefisso al nome della chatroom","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personalizzato","URL_CHAT_ROOM":"URL della tua chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Profilo progetto - {{projectName}}","PROJECT_DETAILS":"Dettagli progetto","PROJECT_NAME":"Nome progetto","TAGS":"Tag","DESCRIPTION":"Descrizione","RECRUITING":"Il progetto cerca persone?","RECRUITING_MESSAGE":"Chi stai cercando?","RECRUITING_PLACEHOLDER":"Definisci il profilo che stai cercando","FEEDBACK":"RIcevere opinioni da utenti Taiga?","PUBLIC_PROJECT":"Progetto pubblico","PRIVATE_PROJECT":"Progetto privato","PRIVATE_OR_PUBLIC":"Quale è la differenza tra progetto privato e pubblico?","DELETE":"Elimina questo progetto","CHANGE_LOGO":"Cambia Logo","ACTION_USE_DEFAULT_LOGO":"Usa l'immagine di default","MAX_PRIVATE_PROJECTS":"Hai raggiunto il numero massimo di progetti privati per il tuo abbonamento","MAX_PRIVATE_PROJECTS_MEMBERS":"È stato superato il numero massimo di membri per progetti privati","MAX_PUBLIC_PROJECTS":"Sfortunatamente hai raggiunto il numero massimo di progetti pubblici per il tuo abbonamento","MAX_PUBLIC_PROJECTS_MEMBERS":"Il progetto super il tuo numero massimo di membri per progetti pubblici","PROJECT_OWNER":"Proprietario progetto","REQUEST_OWNERSHIP":"Richiedi proprietà","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Vuoi diventare il nuovo proprietario del progetto?","REQUEST_OWNERSHIP_DESC":"Richiedi che l'attuale proprietario del progetto {{name}} trasferisca ti la proprietà.","REQUEST_OWNERSHIP_BUTTON":"Richiesta","REQUEST_OWNERSHIP_SUCCESS":"Invieremo una notifica al proprietario del progetto","CHANGE_OWNER":"Cambia proprietario","CHANGE_OWNER_SUCCESS_TITLE":"Ok, la tua richiesta è stata inviata!","CHANGE_OWNER_SUCCESS_DESC":"Ti invieremo una notifica via mail se la richiesta della mproprietà del progetto è accettata o rifiutata"},"REPORTS":{"TITLE":"Rapporti","SUBTITLE":"Esporta il tuo progetto dati in formato CSV a crea il tuo report","DESCRIPTION":"Scarica il file CSV o copia l'url ed usa il tuo editor preferito o spreadsheet per realizzare i tuoi report. Sarai in grado di visualizzare ed analizzare i tuoi dati molto più facilmente vedrai. ","HELP":"Come utilizzarlo all'interno di uno spreadsheet?","REGENERATE_TITLE":"Cambia URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"Report epici","SECTION_TITLE_US":"Report delle storie utente","SECTION_TITLE_TASK":"Analisi dei compiti","SECTION_TITLE_ISSUE":"Report problemi","DOWNLOAD":"Scarica CSV","URL_FIELD_PLACEHOLDER":"Per piacere rigenera l'url del CSV","TITLE_REGENERATE_URL":"Rigenera l'url del CSV","ACTION_GENERATE_URL":"Genera Url","ACTION_REGENERATE":"Rigenera","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Eliminato"},"CUSTOM_FIELDS":{"TITLE":"Campi Personalizzati","SUBTITLE":"Specifica i campi personalizzati per le tue Storie Utente, compiti e problemi","EPIC_DESCRIPTION":"Campi personalizzati degli epici","EPIC_ADD":"Aggiungi un campo personalizzato nell'epic","US_DESCRIPTION":"Campi personalizzati delle storie utente","US_ADD":"Aggiungi un campo personalizzato nelle storie utente","TASK_DESCRIPTION":"Campi personalizzati dei Compiti","TASK_ADD":"Aggiungi campo personalizzato nei compiti","ISSUE_DESCRIPTION":"Campi personalizzati","ISSUE_ADD":"Aggiungi un campo personalizzato al problema","FIELD_TYPE_TEXT":"Testo","FIELD_TYPE_RICHTEXT":"Testo con formattazione","FIELD_TYPE_MULTI":"Multilinea","FIELD_TYPE_DATE":"Data","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valori di progetto - {{projectName}}","REPLACEMENT":"Tutti gli elementi con questo valore saranno modificati con","ERROR_DELETE_ALL":"Non puoi cancellare tutti i valori"},"PROJECT_VALUES_POINTS":{"TITLE":"Punti","SUBTITLE":"Specifica i punti vostre storie utente potrebbero essere stimati a","US_TITLE":"Punti Storie Utente ","ACTION_ADD":"Aggiungi un nuovo punto"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"priorità","SUBTITLE":"Specifica le prioritá dei problemi","ISSUE_TITLE":"Prioritá del problema","ACTION_ADD":"Aggiungi nuova priorità"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Severitá","SUBTITLE":"Specifica le severitá del problema","ISSUE_TITLE":"Severitá del problema","ACTION_ADD":"Aggiungi una nuova criticità."},"PROJECT_VALUES_STATUS":{"TITLE":"Stati","SUBTITLE":"Specifica lo stato delle storie utente, i compiti e i problemi saranno affrontati","EPIC_TITLE":"Stati dell'epic","US_TITLE":"Stati della storia utente","TASK_TITLE":"Stato dei compiti","ISSUE_TITLE":"Stato dei problemi"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipi","SUBTITLE":"Specifica di che tipo puó essere il problema","ISSUE_TITLE":"Tipi di problemi","ACTION_ADD":"Aggiungi {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Tag","SUBTITLE":"Vedi e modifica il colore dei tuoi tag","EMPTY":"Attualmente non ci sono tag","EMPTY_SEARCH":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca","ACTION_ADD":"Aggiungi un tag","NEW_TAG":"Nuovo tag","MIXING_HELP_TEXT":"Seleziona i tag che vuoi unire","MIXING_MERGE":"Unisci tag","SELECTED":"Selezionato"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Aggiungi un nuovo status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Ruoli - {{projectName}}","WARNING_NO_ROLE":"Attento, nessun ruolo, all'interno del tuo progetto, potrà stimare i punti valore per le storie utente","HELP_ROLE_ENABLED":"Una volta abilitato, chi é associato a questo ruolo sará in grado di stimare il valore dei punti per le storie utente","DISABLE_COMPUTABLE_ALERT_TITLE":"sei sicuro di voler disabilitare la stime di questo ruolo?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Se disabiliti i permessi di stime per {{roleName}} tutte le stime precedenti di questo ruolo saranno rimosse","COUNT_MEMBERS":"{{ role.members_count }} membri con questo ruolo","TITLE_DELETE_ROLE":"Elimina ruolo","REPLACEMENT_ROLE":"Tutti gli utenti con questo ruolo saranno spostati a ","WARNING_DELETE_ROLE":"Attento! Tutte le stime dei ruoli saranno eliminate","ERROR_DELETE_ALL":"Non puoi cancellare tutti i valori","EXTERNAL_USER":"Utente esterno","NOTE_EXTERNAL_USERS":"Nota Bene: Per Utente Esterno noi intendiamo qualunque utente anonimo che non prende parte alla piattaforma di Taiga, inclusi i motori di ricerca. Per favore utilizza questo ruolo con cura."},"THIRD_PARTIES":{"SECRET_KEY":"Chiave segreta","PAYLOAD_URL":"Payload URL","VALID_IPS":"Origina valida per l'IP (separato da ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Le richieste Bitbucket non sono firmate, il miglior modo di verificarne l'origine è tramite l'IP. Se il campo è vuoto non ci sarà nessuna validazione."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Le richieste Gitlab non sono firmate, quindi il miglior modo di verificarle è attraverso l'origine degli IP. Se il campo è vuoto non ci sarà validazione."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Aggiungi un nuovo Webhook","TYPE_NAME":"Digita il nome del servizio","TYPE_PAYLOAD_URL":"Digita l'URL del servizio in carico","TYPE_SERVICE_SECRET":"Inserisci la chiave segreta di servizio","SAVE":"Salva Webhook","CANCEL":"Elimina Webhook","SHOW_HISTORY":"(Mostra la storia)","TEST":"Test del Webhook","EDIT":"Modifica Webhook","DELETE":"Elimina Webhook","REQUEST":"Richiesta","RESEND_REQUEST":"Ri-inoltra la richiesta","HEADERS":"Intestazioni","PAYLOAD":"Carico","RESPONSE":"Risposta","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Nascondi la storia)","ACTION_HIDE_HISTORY_TITLE":"Nascondi i dettagli della storia","ACTION_SHOW_HISTORY":"(Mostra la storia)","ACTION_SHOW_HISTORY_TITLE":"Mostra i dettagli della storia","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Attributi personalizzati - {{projectName}}","ADD":"Aggiungi campo personalizzato","EDIT":"Modifica Campo Personalizzato","DELETE":"Elimina Campo Personalizzato","SAVE_TITLE":"Salva il campo personalizzato","CANCEL_TITLE":"Elimina la creazione","SET_FIELD_NAME":"Imposta il nome del campo predefinito","SET_FIELD_DESCRIPTION":"Imposta la descrizione del campo personalizzato ","FIELD_TYPE_DEFAULT":"-- selezionane uno --","ACTION_UPDATE":"Aggiorna il campo personalizzato","ACTION_CANCEL_EDITION":"Elimina versione"},"MEMBERSHIP":{"COLUMN_MEMBER":"Membro","COLUMN_ADMIN":"Amministratore","COLUMN_ROLE":"Ruolo","COLUMN_STATUS":"Stato","STATUS_ACTIVE":"Attivo","STATUS_PENDING":"In sospeso","DELETE_MEMBER":"Elimina membro","RESEND":"Invia di nuovo","SUCCESS_SEND_INVITATION":"Abbiamo mandato nuovamente l'invito a '{{email}}'.","SUCCESS_DELETE":"Abbiamo eliminato {{message}}.","ERROR_DELETE":"Non siamo riusciti ad eliminare {{message}}.","DEFAULT_DELETE_MESSAGE":"L'invito a {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Valore predefinito per la selezione di stati degli epic","LABEL_US_STATUS":"Valore predefinito per la selezione di stato della storia utente","LABEL_POINTS":"Valore standard per punti di selezione","LABEL_TASK_STATUS":"Valore predefinito per la selezione degli stati del compito","LABEL_ISSUE_TYPE":"Valore predefinito per il tipo di selezione del problema","LABEL_ISSUE_STATUS":"Valore predefinito per la selezione di stato del problema","LABEL_PRIORITY":"Valore predefinito per la selezione prioritaria","LABEL_SEVERITY":"Valore predefinito per la selezione di rigore"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Scrivi un nome per il nuovo status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Dai un nome al nuovo elemento"},"US_STATUS":{"ACTION_ADD_STATUS":"Aggiungi un nuovo status","IS_ARCHIVED_COLUMN":"Archiviato","IS_CLOSED_COLUMN":"Concluso","WIP_LIMIT_COLUMN":"Limite WIP","PLACEHOLDER_WRITE_NAME":"Scrivi un nome per il nuovo status"},"MENU":{"PROJECT":"Progetto","ATTRIBUTES":"Attributi","MEMBERS":"Membri","PERMISSIONS":"Permessi","INTEGRATIONS":"Integrazioni"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Stato","POINTS":"Punti","PRIORITIES":"priorità","SEVERITIES":"Severitá","TYPES":"Tipi","CUSTOM_FIELDS":"Campi personalizzati","TAGS":"Tag","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Ruoli","ACTION_NEW_ROLE":"+ Nuovo ruolo","TITLE_ACTION_NEW_ROLE":"Aggiungi nuovo ruolo"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Vorresti diventare il nuovo proprietario del progetto?","PRIVATE":"Privato","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulazioni! Sei il nuovo proprietario del progetto.","REJECTED_PROJECT_OWNERNSHIP":"Ok. Contatteremo l'attuale proprietario del progetto","ACCEPT":"Accetta","REJECT":"Rifiuta","PROPOSE_OWNERSHIP":"{{owner}}, l'attuale proprietaroi del progetto {{project}} ha chiesto che tu diventi il nuovo proprietario.","ADD_COMMENT":"Vorresti aggiungere un commento per il proprietario del progetto?","UNLIMITED_PROJECTS":"Illimitato","OWNER_MESSAGE":{"PRIVATE":"Per favore ricorda che puoi avere al massimo {{maxProjects}} progetti privati. Attualmente hai {{currentProjects}} progetti privati","PUBLIC":"Per favore ricorda che puoi avere al massimo {{maxProjects}} progetti pubblici. Attualmente hai {{currentProjects}} progetti pubblici"},"CANT_BE_OWNED":"Attualmente non puoi diventare il proprietario di un progetto di questo tipo. Se vuoi diventare proprietario di questo progetto, per favore contatta l'amministratore così può cambiare le impostazioni del tuo account per permettere la proprietà dei progetti."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Modifica profilo","CLOSED_US":"US chiusa","PROJECTS":"Progetti","PROJECTS_EMPTY":"{{username}} non ha ancora nessun progetto","CONTACTS":"Contatti","CONTACTS_EMPTY":"{{username}} non ha ancora nessun contatto","CURRENT_USER_CONTACTS_EMPTY":"Non hai ancora contatti","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Le persone con cui lavori in Taiga saranno automaticamente tra tuoi contatti","TABS":{"ACTIVITY_TAB":"Cronologia","ACTIVITY_TAB_TITLE":"Mostra tutte le attività dell'utente","PROJECTS_TAB":"Progetti","PROJECTS_TAB_TITLE":"La lista di tutti i progetti di cui l'utente è membro","LIKES_TAB":"mi piace","LIKES_TAB_TITLE":"Lista di tutte le cose che son piaciute all'utente","VOTES_TAB":"Voti","VOTES_TAB_TITLE":"Lista di tutti i voti fatti dall'utente","WATCHED_TAB":"Osservato","WATCHED_TAB_TITLE":"Mostra tutti gli elementi osservati dall'utente","CONTACTS_TAB":"Contatti","CONTACTS_TAB_TITLE":"Lista tutti i contatti fatti dall'utente"}},"PROFILE_SIDEBAR":{"TITLE":"Il tuo profilo","DESCRIPTION":"Le persone possono vedere tutto quello che fai e su cosa stai lavorando. Aggiungi una bella bio per migliorare la descrizione delle tue informazioni.","ADD_INFO":"Modifica la tua bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Inserisci testo...","FILTER_TYPE_ALL":"Tutti","FILTER_TYPE_ALL_TITLE":"Mostra tutto","FILTER_TYPE_PROJECTS":"Progetti","FILTER_TYPE_PROJECTS_TITLE":"Mostra solo i progetti","FILTER_TYPE_EPICS":"Epici","FILTER_TYPE_EPICS_TITLE":"Mostra solo gli epici","FILTER_TYPE_USER_STORIES":"Resoconti","FILTER_TYPE_USER_STORIES_TITLE":"Mostra solo resoconti utente","FILTER_TYPE_TASKS":"Compiti","FILTER_TYPE_TASKS_TITLE":"Mostra solo attività","FILTER_TYPE_ISSUES":"Problemi","FILTER_TYPE_ISSUES_TITLE":"Mostra solo i problemi","EMPTY_TITLE":"Sembra che qui non ci sia nulla"}},"PROJECT":{"PAGE_TITLE":"TEAM - {{projectName}}","HELP":"Riordina i tuoi progetti per avere in alto i più usati.
    I primi 10 progetti compariranno nella lista dei progetti della barra di navigazione, su in alto","PRIVATE":"Progetto privato","LOOKING_FOR_PEOPLE":"Il progetto cerca persone","FANS_COUNTER_TITLE":"{total, plural, one{un follower} other{# followers}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{un osservatore} other{# osservatori}} ","MEMBERS_COUNTER_TITLE":"{total, plural, one{un membro} other{# membri}}","BLOCKED_PROJECT":{"BLOCKED":"Porgetto bloccato","THIS_PROJECT_IS_BLOCKED":"Questo progetto è temporaneamente bloccato","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Per sbloccare i tuoi progetti, contatta l'amministratore"},"SECTION":{"SEARCH":"Cerca","TIMELINE":"Cronologia","EPICS":"Epici","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Problemi","WIKI":"Wiki","TEAM":"Squadra","MEETUP":"Incontro","ADMIN":"Amministratore"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Crea progetto","MANAGE_PROJECTS":"Gestisci Progetti","TITLE_CREATE_PROJECT":"Crea progetto","HELP_TITLE":"Pagina di supporto Taiga","HELP":"Aiuto","HOMEPAGE":"Homepage","FEEDBACK_TITLE":"Invia feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Modifica le impostazioni delle notifiche","NOTIFICATIONS":"Notifiche","VIEW_PROFILE_TITLE":"Mostra profilo","VIEW_PROFILE":"Mostra profilo","EDIT_PROFILE_TITLE":"Modifica il tuo profilo","EDIT_PROFILE":"Modifica profilo","CHANGE_PASSWORD_TITLE":"Cambia password","CHANGE_PASSWORD":"Cambia password","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Scopri i progetti più seguiti","DISCOVER":"Scopri"},"LIKE_BUTTON":{"LIKE":"Mi piace","LIKED":"Piaciuto","UNLIKE":"Non mi piace","BUTTON_TITLE":"Vota a favore o a sfavore di questo progetto","COUNTER_TITLE":"{total, plural, one{un follower} other{# followers}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Osserva questo progetto ed imposta la politica di notifica","WATCH":"Osserva","WATCHING":"In osservazione","COUNTER_TITLE":"{total, plural, one{un osservatore} other{# osservatori}} ","OPTIONS":{"NOTIFY_ALL":"Ricevi tutte le notifiche","NOTIFY_ALL_TITLE":"Ricevi tutte le notifiche per questo progetto","NOTIFY_INVOLVED":"Solo se conivolti","NOTIFY_INVOLVED_TITLE":"Ricevi notifiche solo quando coinvolto","UNWATCH":"Non osservare","UNWATCH_TITLE":"Non osservare il progetto"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contatta il team di progetto","CONTACT_BUTTON":"Contatta il progetto"},"CREATE":{"TITLE":"Crea Progetto","CHOOSE_TEMPLATE":"Quale template si adatta meglio al tuo progetto?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Assegna una priorità e porta a termine le cose da fare in brevi cicli temporali","TEMPLATE_SCRUM_LONGDESC":"Scrum è una metodologia di sviluppo del software iterativa e incrementale per gestire l'avanzamento del prodotto.\nIl backlog del prodotto è la lista di ciò che deve essere fatto, ordinata nella sequenza in cui deve essere consegnato il lavoro. I Backlog Prodotto vengono suddivisi in pezzi più facilmente gestibili e velocemente eseguibili chiamati sprints. Dopo un certo periodo di tempo il team inizia un nuovo sprint e si dedica alla consegna di un determinato numero di storie utente prese dal backlog, al ritmo delle loro abilità, esperienze e risorse. Il progetto viene portato a termine man mano che il backlog si compie.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Mantieni un flusso di lavoro costante su compiti indipendenti","TEMPLATE_KANBAN_LONGDESC":"La metodologia Kanban è usata per suddividere il processo di sviluppo del progetto (di qualunque tipo) in stadi consecutivi.\nUna scheda kanban è come un segnaposto oppure un post-it che descrive ogni compito (o storia utente) che necessita di essere completato. Ogni scheda viene spostata da uno stato ad un altro del processo tramite la bacheca kanban, utile strumento per tenere sott'occhio la situazione di completamento.","DUPLICATE":"Duplica progetto","DUPLICATE_DESC":"Parti da zero e mantieni la tua configurazione","IMPORT":"Importa progetto","IMPORT_DESC":"Importa in Taiga i progetti provenienti da diverse piattaforme","INVITE":"Invita a partecipare al progetto","SOLO_PROJECT":"Rimarrai da solo in questo progetto","INVITE_LATER":"(potrai invitare altri membri più tardi)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Mi dispiace, hai raggiunto il numero massimo di progetti privati.\nPer favore contatta l'amministratore se desideri aumentare questo limite.","MAX_PUBLIC_PROJECTS":"Mi dispiace, hai raggiunto il numero massimo di progetti pubblici.\nPer favore contatta l'amministratore se desideri aumentare questo limite.","PUBLIC_PROJECT":"Progetto Pubblico","PRIVATE_PROJECT":"Progetto Privato"},"COMMON":{"DETAILS":"Dettagli del nuovo progetto","PROJECT_TITLE":"Nome progetto\n","PROJECT_DESCRIPTION":"Descrizione progetto"},"DUPLICATE":{"TITLE":"Duplica progetto","DESCRIPTION":"Parti da zero e mantieni la tua configurazione","SELECT_PLACEHOLDER":"Scegli un progetto esistente da duplicare"},"IMPORT":{"TITLE":"Importa progetto","DESCRIPTION":"Importa in Taiga i progetti provenienti da diverse piattaforme","ASYNC_IN_PROGRESS_TITLE":"I nostri Oompa Loompa stanno lavorando per importare il tuo progetto!","ASYNC_IN_PROGRESS_MESSAGE":"Questo processo puó durare minuti.
    Verrá inviata una mail al suo completamento","UPLOAD_IN_PROGRESS_MESSAGE":"Caricati {{uploadedSize}} di {{totalSize}}","ERROR":"Mannaggia, i Oompa Loompa hanno qualche problema ad importare il dump. Prova di nuovo.","ERROR_TOO_MANY_REQUEST":"Scusaci, i nostri Oompa Loompa sono di nuovo occupati. Riprova di nuovo in qualche minuto.","ERROR_MESSAGE":"I nostri Oompa Loompa hanno qualche problema ad importare il dump dei tuoi dati: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})","SYNC_SUCCESS":"Il tuo progetto è stato importato con successo","IMPORT":"Importa","WHO_IS":"I loro compiti saranno assegnati a","WRITE_EMAIL":"Oppure, se preferisci, scrivi l'email che l'utente usa in Taiga","SEARCH_CONTACT":"O se preferisci, ricerca nei tuoi contatti.","WRITE_EMAIL_LABEL":"Scrivi la mail che questo utente utilizza in Taiga","ACCEEDE":"Aderisci","PROJECT_MEMBERS":"Membri del Progetto","PROCESS_DESCRIPTION":"Indicaci a chi degli utenti di Taiga vuoi assegnare il compito di {{platform}}","MATCH":"{{user_external}} e {{user_internal}} sono la stessa persona?","CHOOSE":"Seleziona un utente","LINKS":"Collega con {{platform}}","LINKS_DESCRIPTION":"Vuoi mantenere il collegamento di ogni elemento con la scheda originale {{platform}}?","WARNING_MAIL_USER":"Nota bene, se l'utente non ha un account Taiga non potremmo assegnargli il compito.","ASSIGN":"Assegna","PROJECT_SELECTOR":{"NO_RESULTS":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca","ACTION_SEARCH":"cerca","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"Il progetto che stai cercando di importare ha {{members}} membri incluso te, ma sfortunatamente il tuo piano attuale ti permette un massimo di {{max_memberships}} membri per i progetti privati. Per favore contatta l'amministratore se desideri aumentare questo limite.","PROJECT_MEMBERS_DESC_PUBLIC":"Il progetto che stai cercando di importare ha {{members}} membri incluso te, ma sfortunatamente il tuo piano attuale ti permette un massimo di {{max_memberships}} membri per i progetti pubblici. Per favore contatta l'amministratore se desideri aumentare questo limite.","ACCOUNT_ALLOW_MEMBERS":"Il tuo account permette solo {{members}} membri","PRIVATE_PROJECTS_SPACE":{"TITLE":"Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati","DESC":"Il progetto che stai tentando di importare è privato. Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Sfortunatamente, il tuo attuale abbonamento non permette altri progetti pubblici","DESC":"Il progetto che stai provando a importare è pubblico. Sfortunatamente, il tuo attuale abbonamento non consente ulteriori progetti pubblici."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Il tuo abbonamento attuale permette al massimo {{max_memberships}} membri per progetto privato"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":" abbonamento attuale permette al masismo {{max_memberships}} membri per progetto pubblico."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Sfortunatamente il tuo abbonamento attuale non permette ulteriori progetti privati o un aumento di più di {{max_memberships}} membri per progetto privato","DESC":"Il progetto che stai provando a importare è privato e ha {{members}} membri."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Sfortunatamente il tuo attuale abbonamento non permette altri progetti pubblici o un aumento dii più di {{max_memberships}} membri per progetto pubblico","DESC":"Il progetto che stai cercando di importare è pubblico e ha più di {{members}} membri."}},"IN_PROGRESS":{"TITLE":"Importazione Progetto","DESCRIPTION":"Questo processo puó durare un po', nel frattempo lasciare questa finestra aperta."},"WARNING":{"TITLE":"Qualche compito non sarà assegnato","DESCRIPTION":"Ci sono ancora persone non identificate. Le schede assegnate a queste persone rimarranno senza assegnatario. Controlla tutti i contatti per non perdere quell' informazione.","CHECK":"Controllo contatti"},"TAIGA":{"SELECTOR":"Importa il tuo progetto Taiga"},"TRELLO":{"SELECTOR":"Importa la tua bacheca Trello in Taiga","CHOOSE_PROJECT":"Scegli la bacheca che desideri importare","NO_PROJECTS":"Sembra che tu non abbia nessuna bacheca in Trello"},"GITHUB":{"SELECTOR":"Importa le segnalazioni del tuo progetto GitHub","CHOOSE_PROJECT":"Trova il progetto che desideri importare","NO_PROJECTS":"Sembra che tu non abbia progetti in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Come vuoi importare le tue segnalazioni dentro Taiga?","KANBAN_PROJECT":"Come storie utente in un progetto kanban","KANBAN_PROJECT_DESCRIPTION":"Al termine puoi abilitare scrum con backlog","SCRUM_PROJECT":"Come storie utente in un progetto scrum","SCRUM_PROJECT_DESCRIPTION":"Al termine puoi abilitare la modalità kanban","ISSUES_PROJECT":"Come segnalazioni","ISSUES_PROJECT_DESCRIPTION":"Non sarai in grado di utilizzare le tue segnalazioni nelle modalità kanban o scrum. Potrai abilitare kanban o scrum per nuove storie utente."},"ASANA":{"SELECTOR":"Importa il tuo progetto Asana e scegli come gestirlo","CHOOSE_PROJECT":"Scegli il progetto che vuoi importare","NO_PROJECTS":"Sembra che tu non abbia progetti in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"I compiti e sotto-compiti del tuo progetto saranno creati come storie utente e compiti di Taiga.","CREATE_AS_KANBAN_DESCRIPTION":"I compiti e sotto-compiti del tuo progetto saranno creati con storie utente e compiti di Taiga."},"JIRA":{"SELECTOR":"Importa il tuo progetto Jira e scegli come gestirlo","HOW_TO_CONFIGURE":"(aiuto configurazione)","CHOOSE_PROJECT":"Scegli il progetto o la bacheca che vuoi importare","NO_PROJECTS":"Sembra che tu non abbia progetti o bacheche in Jira","URL":"Il tuo URL Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Problemi","CREATE_AS_SCRUM_DESCRIPTION":"Le segnalazioni e sotto-segnalazioni del tuo progetto saranno create come storie utente e compiti di Taiga.","CREATE_AS_KANBAN_DESCRIPTION":"Le segnalazioni e sotto-segnalazioni del tuo progetto saranno create come storie utente e compiti di Taiga.","CREATE_AS_ISSUES_DESCRIPTION":"Cosa preferisci fare con le sotto-segnalazioni del tuo progetto Jira? (Taiga non permette sotto-segnalazioni)","CREATE_NEW_ISSUES":"Converti le sotto-segnalazioni in segnalazioni Taiga","NOT_CREATE_NEW_ISSUES":"Non importare le sotto-segnalazioni"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Sei sicuro di voler eliminare il tuo account Taiga?","CANCEL":"Torna alle impostazioni","ACCEPT":"Cancella account","BLOCK_PROJECT":"Ricorda che tutti i progetti che possiedi saranno bloccati quando cancellerai il tuo account. Se vuoi continuare a utilizzare un progetto bloccato, trasferisci la proprietà del progetto a un membro di ciascun progetto prima di cancellare il tuo account."},"DELETE_PROJECT":{"TITLE":"Elimina progetto","QUESTION":"Sei sicuro di voler cancellare questo progetto?","SUBTITLE":"Tutti i dati di progetto (user story, compiti, temi, sprint e pagine wiki) andranno persi :-(","CONFIRM":"Si, sono proprio sicuro"},"ASSIGNED_TO":{"SELECT":"Selezione assegnata a ","SEARCH":"Cerca per utenti"},"ADD_MEMBER":{"TITLE":"Nuovo Membro","PLACEHOLDER":"Filtra gli utenti oppure scrivi un'email di invito","ADD_EMAIL":"Aggiungi email","REMOVE":"Rimuovi","INVITE":"Invita","CHOOSE_ROLE":"Segli un ruolo","PLACEHOLDER_INVITATION_TEXT":"(facoltativo) aggiungi un testo personalizzato all'invito. Di qualcosa di simpatico ai tuoi nuovi membri ;-)","HELP_TEXT":"Se gli utenti sono già registrati su Taiga, verranno aggiunti automaticamente. In caso contrario, riceveranno un invito."},"FEEDBACK":{"TITLE":"Raccontaci qualcosa...","COMMENT":"...un bug, dei suggerimenti, qualcosa di fico... o anche il tuo peggior incubo con Taiga","ACTION_SEND":"Invia feedback"},"SEARCH":{"TITLE":"Cerca","PLACEHOLDER_SEARCH":"Cosa stai cercando?"},"ADD_EDIT_SPRINT":{"TITLE":"Nuovo sprint","PLACEHOLDER_SPRINT_NAME":"il nome dello sprint","PLACEHOLDER_SPRINT_START":"Inizio stimato","PLACEHOLDER_SPRINT_END":"Fine stimata","ACTION_DELETE_SPRINT":"Sei sicuro di voler cancellare questo sprint?","TITLE_ACTION_DELETE_SPRINT":"Elimina sprint","LAST_SPRINT_NAME":"l'ultimo sprint è {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Aggiungi problema","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Cancella sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(facoltativo) aggiungi un testo personalizzato all'invito. Di qualcosa di simpatico ai tuoi nuovi membri ;-)","PLACEHOLDER_TYPE_EMAIL":"Scrivi una mail","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Stai per raggiungere il numero massimo di membri concessi per questo progetto, {{maxMembers}} membri. Se vuoi aumentare il limite attuale, per favore contatta l'amministratore.","LIMIT_USERS_WARNING_MESSAGE":"Stai per raggiungere il numero massimo di membri concessi per questo progetto, {{maxMembers}} membri."},"LEAVE_PROJECT_WARNING":{"TITLE":"Sfortunatamente, questo progetto non può essere abbandonato senza un proprietario","CURRENT_USER_OWNER":{"DESC":"Sei l'attuale proprietario di questo progetto. Prima di lasciare, per favore trasferisci la proprietà a qualcun'altro","BUTTON":"Cambia il proprietario del progetto"},"OTHER_USER_OWNER":{"DESC":"Sfortunatamente, non puoi cancellare un membro che è anche proprietario del progetto corrente. Prima assegna il progetto ad un nuovo proprietario.","BUTTON":"Richiedi cambiamento del proprietario del progetto"}},"CHANGE_OWNER":{"TITLE":"Chi vuoi che sia il nuovo proprietario del progetto?","ADD_COMMENT":"Aggiungi commento","BUTTON":"Chiedi a questo membro di diventare il nuovo proprietario del progetto"},"CONTACT_PROJECT":{"TITLE":"Inviare un'email a","WARNING":"Questa email sarà ricevuta dagli amministratori di progetto","PLACEHOLDER":"Scrivi il tuo messaggio","SEND":"Invia"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Qual'è il progetto?","CHOOSE_PROJECT_FROM":"Qual'è il progetto?","SUBJECT":"Oggetto","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Stauts: {{epicStatus }}. Descrizione: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"Non siamo riusciti a scollegare: {{erroreMessage}}","CREATE_RELATED_USERSTORIES":"Crea una relazione con","NEW_USERSTORY":"Nuova storia utente","EXISTING_USERSTORY":"Storia utente esistente","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Oggetto","SUBJECT_BULK_MODE":"Oggetto (inserimento massivo)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"Questo progetto non ha ancora Storie Utente. Per favore selezione un altro progetto.","NO_USERSTORIES_FOUND":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca","FILTER_USERSTORIES":"Filtra le storie utente","LIGHTBOX_TITLE_BLOKING_EPIC":"Epic bloccante","ACTION_DELETE":"Cancella epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - User Story {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Completata per il {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} di {{userStoryTotalTasks}} tasks closed). Punti: {{userStoryPoints}}. Descrizione: {{userStoryDescription}}","SECTION_NAME":"Storia utente","LINK_TASKBOARD":"Pannello dei compiti","TITLE_LINK_TASKBOARD":"Vai al pannello dei compiti","TOTAL_POINTS":"totale punti","ADD":"+ Aggiungi una nuova storia utente","ADD_BULK":"Aggiungere qualche nuova User Storie al carico","PROMOTED":"Questa storia utente è stata promossa da problema:","TITLE_LINK_GO_TO_ISSUE":"Vai al problema","TITLE_DELETE_ACTION":"Elimina la storia utente","LIGHTBOX_TITLE_BLOKING_US":"Blocco la storia utente","NOT_ESTIMATED":"Non stimato","OWNER_US":"Questa storia utente appartiene a","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Pubblica come Gig in Taiga Tribe","PUBLISH_INFO":"Più info","PUBLISH_TITLE":"Più info sulla pubblicazione in Taiga Tribe","PUBLISHED_AS_GIG":"Storia pubblicata come Gig in Taiga Tribe","EDIT_LINK":"Modifica collegamento","CLOSE":"Chiudi","SYNCHRONIZE_LINK":"sincronizza con Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Hai bisogno di qualcuno per questo task?","PUBLISH_MORE_INFO_TEXT":"

    Se hai bisogno di aiuto con un particolare lavoro puoi facilmente creare una richiesta su Taiga Tribe e ricevere aiuto da tutto il mondo. Potrai controllare e gestire la richiesta sperimentando una grande comunità desiderosa di aiutare.

    In pratica

    TaigaTribe è il fratello di Taiga. Entrambe le piattaforme possono essere utilizzate separatamente ma noi crediamo che insieme possano essere uno strumento molto potente, per cui ci assicuriamo di rendere la loro integrazione estremamente funzionale.

    "}},"COMMENTS":{"DELETED_INFO":"Commento eliminato da {{user}}","COMMENTS_COUNT":"{{comments}} Commenti","OLDER_FIRST":"I più vecchi prima","RECENT_FIRST":"I più recenti prima","COMMENT":"Commento","EDITED_COMMENT":"Modificato:","SHOW_HISTORY":"Vai alla cronologia","TYPE_NEW_COMMENT":"Scrivi un nuovo commento qui","SHOW_DELETED":"Visualizza commento cancellato","HIDE_DELETED":"Nascondi commento cancellato","DELETE":"Cancella commento","RESTORE":"Ripristina commento","HISTORY":{"TITLE":"Attività"}},"ACTIVITY":{"TITLE":"Attività","ACTIVITIES_COUNT":"{{Activities}} Attività","TAGS_ADDED":"Tag aggiunti:","TAGS_REMOVED":"tag rimossi:","US_POINTS":"{{role}} punti","NEW_ATTACHMENT":"nuovo allegato:","DELETED_ATTACHMENT":"cancella allegato:","UPDATED_ATTACHMENT":"Aggiorna allegato ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"crea un attributo personalizzato","UPDATED_CUSTOM_ATTRIBUTE":"attributo personalizzato aggiornato","BECAME_DEPRECATED":"diventa deprecato","BECAME_UNDEPRECATED":"diventa accettato","TEAM_REQUIREMENT":"Requisito del team","CLIENT_REQUIREMENT":"Requisito del cliente","BLOCKED":"Bloccato","VALUES":{"NOT_SET":"not set","UNASSIGNED":"non assegnato"},"FIELDS":{"SUBJECT":"oggetto","DESCRIPTION":"descrizione","PRIORITY":"priorità","SEVERITY":"criticità","STATUS":"stato","TYPE":"tipo","ASSIGNED_TO":"assegnato a","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"colore"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Il pannello di backlog, con le storie degli utenti e gli sprint di progetto","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Personalizza il grafico del tuo backlog","CUSTOMIZE_GRAPH_TEXT":"Per avere un grafico bello e utile che ti aiuti a seguire l'evoluzione del progetto devi impostare i punti e gli sprint come","CUSTOMIZE_GRAPH_ADMIN":"Amministratore","CUSTOMIZE_GRAPH_TITLE":"Imposta i punti e gli sprint come Amministratore","MOVE_US_TO_CURRENT_SPRINT":"Spostati allo sprint attuale","MOVE_US_TO_LATEST_SPRINT":"Vai allo Sprint più recente","EMPTY":"OMG..Il backlog é vuoto!!","CREATE_NEW_US":"Crea una nuova Storia Utente","CREATE_NEW_US_EMPTY_HELP":"Potresti voler creare una nuova storia utente","EXCESS_OF_POINTS":"Eccesso di punti","PENDING_POINTS":"Punti in sospeso","CLOSED_POINTS":"chiuso","COMPACT_SPRINT":"Ripiega lo sprint","GO_TO_TASKBOARD":"Vai al pannello dei compiti di {{::name}}","EDIT_SPRINT":"Modifica lo sprint","TOTAL_POINTS":"totale","STATUS_NAME":"Nome dello status","SORTABLE_FILTER_ERROR":"Non puoi depositare in backlog quando i filtri sono aperti","DOOMLINE":"Scopo del progetto","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Punti","OPTIMAL":"I punti in sospeso ottimali per lo sprint \"{{sprintName}}\" dovrebbero essere {{value}}","REAL":"I punti in sospeso definitivi per lo sprint \"{{sprintName}}\" sono {{value}}","INCREMENT_TEAM":"I punti incrementati dai requisiti del team per lo sprint \"{{sprintName}}\" sono {{value}}","INCREMENT_CLIENT":"I punti incrementati dai requisiti del cliente per lo sprint \"{{sprintName}}\" sono {{value}}"},"TAGS":{"TOGGLE":"Commuta visibilità tag","SHOW":"Mostra tag","HIDE":"Nascondi tag"},"FORECASTING":{"TITLE":"Previsione di velocità","BACKLOG":"Mostra il backlog","NEW_SPRINT":"Candida Storie Utente per essere inserite nel tuo prossimo sprint in base alla tua velocità. Clicca per creare un nuovo sprint.","CURRENT_SPRINT":"Candida Storie Utente per essere inserite nel tuo sprint attuale in base alla tua velocità. Clicca per aggiungere allo sprint corrente."},"TABLE":{"COLUMN_US":"Storie Utente","TITLE_COLUMN_POINTS":"Seleziona vista per Ruolo"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"punti
    totali","COMPLETED_POINTS":"
    punti completati","OPEN_TASKS":"
    compiti aperti","CLOSED_TASKS":"
    compiti chiusi","IOCAINE_DOSES":"
    pasticche di aspirina","SHOW_STATISTICS_TITLE":"Mostra statistiche","TOGGLE_BAKLOG_GRAPH":"Mostra/nascondi i grafici burndown","POINTS_PER_ROLE":"Punti per ruolo"},"SUMMARY":{"PROJECT_POINTS":"
    punti di progetto","DEFINED_POINTS":"
    punti definiti","CLOSED_POINTS":"
    punti chiusi","POINTS_PER_SPRINT":"
    punti di sprint"},"FILTERS":{"TOGGLE":"Premi i filtri visibilità","HIDE":"Nascondi Filtri","SHOW":"Mostra Filtri"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Pannello dei compiti dello sprint","TITLE_LINK_TASKBOARD":"Vai al pannello dei compiti di \"{{name}}\"","EMPTY":"Non ci sono ancora sprints disponibili","WARNING_EMPTY_SPRINT_ANONYMOUS":"Lo Sprint non ha Storie Utente","WARNING_EMPTY_SPRINT":"Metti qui le storie del tuo backlog che iniziare in nuovo sprint","TITLE_ACTION_NEW_SPRINT":"Aggiungi un nuovo sprint","TEXT_ACTION_NEW_SPRINT":"Potresti voler creare un nuovo sprint nel tuo progetto","ACTION_SHOW_CLOSED_SPRINTS":"Mostra gli sprints terminati","ACTION_HIDE_CLOSED_SPRINTS":"Nascondi lo sprint terminato"}},"ERROR":{"TEXT1":"E' successo qualcosa, ma i nostri Oompa Loompa ci stanno lavorando sodo!","NOT_FOUND":"Non trovato","NOT_FOUND_TEXT":"Errore 404. La pagina che stai cercando non esiste più. Forse puoi tornare alla home e vedere se è possibile trovare quello che stai cercando.","PERMISSION_DENIED":"Permesso negato","PERMISSION_DENIED_TEXT":"Non si hanno i permessi necessari per accedere a questa pagina.","VERSION_ERROR":"Qualcuno all'interno di Taiga ha fatto un cambiamento prima che i nostri Oompa Loompa potessero applicare le modifiche. Per favore ricarica e applica di nuovo le modifiche (altrimenti andranno perse)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Pannello dei compiti dello Sprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (da {{startDate}} a {{endDate}}) di {{projectName}}. Completato {{completedPercentage}}% ({{completedPoints}} di {{totalPoints}} points). {{openTasks}} compiti aperti di {{totalTasks}}","SECTION_NAME":"Pannello dei compiti","TITLE_ACTION_ADD":"Aggiungi un nuovo compito","TITLE_ACTION_ADD_BULK":"Aggiungi qualche nuovo Compito nel carico","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Compito assegnato","PLACEHOLDER_CARD_TITLE":"Questo potrebbe essere un compito","PLACEHOLDER_CARD_TEXT":"Dividi le storie in compiti per tenerne traccia separatamente","TABLE":{"COLUMN":"Storia utente","TITLE_ACTION_FOLD":"Ripiega la colonna","TITLE_ACTION_UNFOLD":"Riapri la colonna","TITLE_ACTION_FOLD_ROW":"Ripiega la riga","TITLE_ACTION_UNFOLD_ROW":"Rivela la riga","FIELD_POINTS":"punti","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Giorni","YAXIS_LABEL":"Punti","OPTIMAL":"Il livello ottimale di punti sospesi per la giornata {{formattedDate}} dovrebbe essere {{roundedValue}}","REAL":"I punti in sospeso definitivi per la giornata {{formattedDate}} sono {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Compiti {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Stato: {{taskStatus }}. Descrizione: {{taskDescription}}","SECTION_NAME":"Compito","LINK_TASKBOARD":"Pannello dei compiti","TITLE_LINK_TASKBOARD":"Vai al pannello dei compiti","PLACEHOLDER_SUBJECT":"Inserisci il soggetto del nuovo compito","TITLE_SELECT_STATUS":"Nome dello status","OWNER_US":"Questo compito appartiene a","TITLE_LINK_GO_OWNER":"Vai alla storia utente","TITLE_DELETE_ACTION":"Rimuovi compito","LIGHTBOX_TITLE_BLOKING_TASK":"Sto bloccando il compito","FIELDS":{"IS_IOCAINE":"E' un'aspirina"},"TITLE_ACTION_IOCAINE":"Sei stremato? Assicurati che gli altri lo sappiano cliccando su \"aspirina\" quando stai lavorando su compito che ti affatica. Ma non demordere, ricordati: si può migliorare solo se di tanto in tanto si accettano sfide extra!"},"NOTIFICATION":{"OK":"E' tutto ok!","WARNING":"Oops, é successo qualcosa...","WARNING_TEXT":"Accidenti! I nostri Oompa Loompa sono tristi..le modifiche non sono state salvate","SAVED":"I nostri Oompa Loompa hanno salvato tutte le modifiche! wow!!","CLOSE":"Chiudi notifica","MAIL":"Notifica tramite mail","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Sei sicuro di voler cancellare?"},"CANCEL_ACCOUNT":{"TITLE":"Elimina il tuo account","SUBTITLE":"Ci spiace se stai lasciando Taiga, speriamo che il tuo soggiorno sia stato piacevole :)","PLACEHOLDER_INPUT_TOKEN":"cancella il token dell'account","ACTION_LEAVING":"Si, sto abbandonando!","SUCCESS":"I nostri Oompa Loompa hanno eliminato il tuo account, e ora sono tristi"},"CHANGE_EMAIL_FORM":{"TITLE":"Cambia la tua email","SUBTITLE":"Un'altro click e la tua mail verrá aggiornata!","PLACEHOLDER_INPUT_TOKEN":"Modifica il token della mail","ACTION_CHANGE_EMAIL":"Cambia email","SUCCESS":"I nostri Oompa Loompa hanno aggiornato la tua mail"},"ISSUES":{"PAGE_TITLE":"Problemi - {{projectName}}","PAGE_DESCRIPTION":"Il pannello con la lista dei problemi del progetto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Problema","ACTION_NEW_ISSUE":"+ NUOVO PROBLEMA","ACTION_PROMOTE_TO_US":"Promuovi la storia utente","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Il problema è stato promosso a storia utente","EXTERNAL_REFERENCE":"Questo problema è stato creato da ","GO_TO_EXTERNAL_REFERENCE":"Ritorna all'inizio","ACTION_DELETE":"Elimina problema","LIGHTBOX_TITLE_BLOKING_ISSUE":"Problema bloccante","LINK_TASKBOARD":"Pannello dei compiti","TITLE_LINK_TASKBOARD":"Vai al pannello dei compiti","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Priorità","SEVERITY":"Gravità","TYPE":"Tipo"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promuovi questo problema come nuova storia utente","MESSAGE":"Sei sicuro di voler creare una nuova storia utente da questo problema?"},"TABLE":{"COLUMNS":{"TYPE":"Tipo","SEVERITY":"Gravità","PRIORITY":"Priorità","SUBJECT":"Oggetto","VOTES":"Voti","STATUS":"Stato","MODIFIED":"Modificato","ASSIGNED_TO":"Assegna a"},"TITLE_ACTION_CHANGE_STATUS":"Cambia stato","TITLE_ACTION_ASSIGNED_TO":"Assegna a","BLOCKED":"Bloccato","EMPTY":{"TITLE":"Non ci sono problemi da segnalare :-)","SUBTITLE":"Hai trovato un problema?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Criticitá {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Stato: {{issueStatus }}. Tipo: {{issueType}}, Prioritá: {{issuePriority}}. Severitá: {{issueSeverity}}. Descrizione: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Il pannello kanban, con le storie utenti del progetto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Ripiega la colonna","TITLE_ACTION_UNFOLD":"Riapri la colonna","TITLE_ACTION_ADD_US":"Aggiungi una nuova storia utente","TITLE_ACTION_ADD_BULK":"Aggiungi un nuovo carico","ACTION_SHOW_ARCHIVED":"Mostra archivio","ACTION_HIDE_ARCHIVED":"Nascondi archivio","HIDDEN_USER_STORIES":"Le storie utente in questo status sono nascoste by default","PLACEHOLDER_CARD_TITLE":"Queste sono le tue storie utente.","PLACEHOLDER_CARD_TEXT":"Le storie possono anche avere dei sotto-compiti che separano i requisiti"},"SEARCH":{"PAGE_TITLE":"Cerca - {{projectName}}","PAGE_DESCRIPTION":"Cerca storie utenti, problemi, compiti o pagine wiki, all'interno del progetto {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epici","FILTER_USER_STORIES":"Storie Utente","FILTER_ISSUES":"Problemi","FILTER_TASKS":"Compiti","FILTER_WIKI":"Pagine wiki","PLACEHOLDER_SEARCH":"Cerca in...","TITLE_ACTION_SEARCH":"cerca","EMPTY_TITLE":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca","EMPTY_DESCRIPTION":"Prova uno dei tab che trovi sopra, o prova a cercare di nuovo"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Il pannello del team da mostrare a tutti i membri del progetto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Squadra","PLACEHOLDER_INPUT_SEARCH":"Cerca con il nome completo","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Problemi chiusi","COLUMN_IOCAINE":"Aspirinomane","EXPLANATION_COLUMN_IOCAINE":"Pasticche di aspirina prese","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Pagine wiki modificate","COLUMN_BUG_HUNTER":"Cacciatore di bug","EXPLANATION_COLUMN_BUG_HUNTER":"Problemi segnalati","COLUMN_NIGHT_SHIFT":"Turno notturno","EXPLANATION_COLUMN_NIGHT_SHIFT":"Compiti chiusi","COLUMN_TOTAL_POWER":"Potere totale","EXPLANATION_COLUMN_TOTAL_POWER":"Totale Punti","SECTION_TITLE_TEAM":"Squadra >","SECTION_FILTER_ALL":"Tutti","CONFIRM_LEAVE_PROJECT":"Sei sicuro di voler abbandonare il progetto?","ACTION_LEAVE_PROJECT":"Abbandona il progetto"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Dimensione massima: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Impostazioni utente","USER_PROFILE":"Profilo utente","CHANGE_PASSWORD":"Cambia password","EMAIL_NOTIFICATIONS":"Notifiche email","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Notifiche email","COLUMN_PROJECT":"Progetto","COLUMN_RECEIVE_ALL":"Ricevi tutto","COLUMN_ONLY_INVOLVED":"Solo coinvolto","COLUMN_NO_NOTIFICATIONS":"Nessuna notifica","OPTION_ALL":"Tutti","OPTION_INVOLVED":"Coinvolto","OPTION_NONE":"Nessuno"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Progetto","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Progetto"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Usa l'immagine di default","ACTION_DELETE_ACCOUNT":"Elimina l'account Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Controlla la tua casella di posta
    abbiamo mandato una mail al tuo account
    con le istruzioni per impostare un nuovo indirizzo","CHANGE_PHOTO":"Cambia foto","FIELD":{"USERNAME":"Username","EMAIL":"Email","FULL_NAME":"Nome completo","PLACEHOLDER_FULL_NAME":"Inserisci il tuo nome completo (es. Alessio Biancalana)","BIO":"Biografia (massimo 210 caratteri)","PLACEHOLDER_BIO":"Raccontaci qualcosa di te","LANGUAGE":"Lingua","LANGUAGE_DEFAULT":"-- usa lingua predefinita --","THEME":"Tema","THEME_DEFAULT":"-- usa tema predefinito --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"L'ultima versione su {{lastModifiedDate}} ({{totalEditions}} versioni in totale) Contenuto: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Rimuovi questa pagina wiki","DELETE_LIGHTBOX_TITLE":"Elimina Pagina Wiki","DELETE_LINK_TITLE":"Cancella collegamento Wiki","NAVIGATION":{"HOME":"Pagina principale","SECTION_NAME":"SEGNALIBRI","ACTION_ADD_LINK":"Aggiungi segnalibro","ALL_PAGES":"Tutte le pagine wiki"},"SUMMARY":{"TIMES_EDITED":"tempo
    modificato","LAST_EDIT":"
    ultima modifica","LAST_MODIFICATION":"ultima modifica"},"SECTION_PAGES_LIST":"Tutte le pagine","PAGES_LIST_COLUMNS":{"TITLE":"Titolo","EDITIONS":"Edizioni","CREATED":"Creato","MODIFIED":"Modificato","CREATOR":"Creato da","LAST_MODIFIER":"Ultimo a modificare"}},"HINTS":{"SECTION_NAME":"Suggerimento","LINK":"Se vuoi sapere come si usa visita la nostra pagina di supporto","LINK_TITLE":"Visita la nostra pagina di supporto","HINT1_TITLE":"Sai che puoi anche importare ed esportare progetti?","HINT1_TEXT":"Questo ti permette di estrarre tutti i tuoi dati da un Taiga e muoverli dentro un altro.","HINT2_TITLE":"Sai che puoi anche creare dei campi personalizzati?","HINT2_TEXT":"I team adesso possono creare dei campi personalizzati. Così hanno uno strumento flessibile per inserire quei dati specifici che sono utili al loro flusso di lavoro.","HINT3_TITLE":"Riordina i tuoi progetti e metti in evidenza quelli più rilevanti.","HINT3_TEXT":"I 10 progetti sono elencati nella barra ad accesso rapido su in alto.","HINT4_TITLE":"Ti sei dimenticato su cosa stavi lavorando?","HINT4_TEXT":"Non preoccuparti, sulla tua dashboard troverai i compiti aperti, i problemi e le storie utenti così da poterci lavorare"},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} ha caricato un nuovo allegato in {{obj_name}}","US_CREATED":"{{username}} ha creato una nuova storia utente {{obj_name}} in {{project_name}}","ISSUE_CREATED":"{{username}} ha creato un nuovo problema {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} ha creato un nuovo compito {{obj_name}} in {{project_name}}","TASK_CREATED_WITH_US":"{{username}} ha creato un nuovo compito {{obj_name}} in {{project_name}} che appartiene alla storia utente {{us_name}}","WIKI_CREATED":"{{username}} ha creato una nuova pagina wiki {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} ha creato un nuovo sprint {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} ha creato un nuovo epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} ha collegato la storia utente {{related_us_name}} all'epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} ha creato il progetto {{project_name}}","MILESTONE_UPDATED":"{{username}} ha aggiornato lo sprint {{obj_name}}","US_UPDATED":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" alla storia utente {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" della storia utente {{obj_name}} a {{new_value}}","US_UPDATED_POINTS":"{{username}} ha aggiornato '{{role_name}}' punti della storia utente {{obj_name}} a {{new_value}}","ISSUE_UPDATED":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del problema {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del problema {{obj_name}} a {{new_value}}","TASK_UPDATED":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} a {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} a {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} che appartiene alla storia utente {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} che appartiene alla storia utente {{us_name}} a {{new_value}}","WIKI_UPDATED":"{{username}} ha aggiornato la pagina wiki {{obj_name}}","EPIC_UPDATED":"{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}} in {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}} in ","NEW_COMMENT_US":"{{username}} ha commentato nella storia utente {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} ha commentato nel problema {{obj_name}}","NEW_COMMENT_TASK":"{{username}} ha commentato nel compito {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} ha commentato nell'epic {{obj_name}}","NEW_MEMBER":"{{project_name}} ha un nuovo membro","US_ADDED_MILESTONE":"{{username}} ha aggiunto la storia utente {{obj_name}} a {{sprint_name}}","US_MOVED":"{{username}} ha spostato la storia utente {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} ha aggiunto la storia utente {{obj_name}} al backlog","BLOCKED":"{{username}} è stato bloccato {{obj_name}}","UNBLOCKED":"{{username}} è stato sbloccato {{obj_name}}","NEW_USER":"{{username}} si é iscritto su Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Problema","TASK":"Compito"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"Un'applicazione esterna richiede l'autenticazione","PAGE_DESCRIPTION":"Un'applicazione esterna richiede l'autenticazione","AUTHORIZATION_REQUEST":"Vuoi autorizzare {{application}} ad usare il tuo account Taiga?","LOGIN_WITH_ANOTHER_USER":"Accedi come un altro utente","AUTHORIZE_APP":"Autorizza applicazione","CANCEL":"Annulla"},"JOYRIDE":{"NAV":{"NEXT":"Successivo","BACK":"Back","SKIP":"Salta","DONE":"Fatto"},"DASHBOARD":{"STEP1":{"TITLE":"Il tuo progetto","TEXT":"Benvenuto! Qui puoi trovare i progetti in cui sei coinvolto."},"STEP2":{"TITLE":"Sta lavorando su","TEXT":"Qui puoi trovare le storie utente, i compiti e i problemi a cui stai lavorando."},"STEP3":{"TITLE":"In osservazione","TEXT1":"E qui trovi tutte quelle cose del progetto di cui volevi sapere.","TEXT2":"Stai giù lavorando in Taiga ;) "},"STEP4":{"TITLE":"Bene..cominciamo!!","TEXT1":"Il modo migliore per iniziare é creare subito il tuo primo progetto Taiga.","TEXT2":"Buona fortuna!"}},"BACKLOG":{"STEP1":{"TITLE":"Riassunto di progetto","TEXT1":"Qui puoi vedere lo stato del progetto.","TEXT2":"Puoi cambiare qualsiasi impostazione del tuo progetto attraverso l'Amministratore."},"STEP2":{"TITLE":"Backlog di produzione","TEXT":"Il Backlog è la lista dei requisiti (o storie utente) per il progetto. Qui è dove pianificherai i tuoi sprint. "},"STEP3":{"TITLE":"Sprints","TEXT":"Gli sprints durano solitamente poco tempo (circa 2 settimane) durante le quali deve essere completato e consegnato un lavoro specifico."},"STEP4":{"TITLE":"Storie Utente","TEXT":"Questi sono i requisiti di alto livello. Li puoi aggiungere al backlog e spostare nello sprint dove devono essere consegnati."}},"KANBAN":{"STEP1":{"TITLE":"Personalizza il tuo flusso di lavoro","TEXT":"Imposta le colonne di cui hai bisogno per mappare lo stato dei tuoi flussi di lavoro come Amministratore. "},"STEP2":{"TITLE":"Storie utente e compiti","TEXT":"Le storie utente sono i requisiti di alto livello. Puoi spostarle in differenti colonne."},"STEP3":{"TITLE":"Aggiungi le storie utente","TEXT1":"Potresti voler aggiungere una solo storia utente (aggiungi l'icona storia utente) o più di una, in gruppo (icona bulk)","TEXT2":"Buona fortuna! "}}},"DISCOVER":{"PAGE_TITLE":"Scopri i progetti - Taiga","PAGE_DESCRIPTION":"Elenco ricercabile dei progetti pubblici in Taiga. Esplora i backlog, i problemi e i team. Scopri i progetti più apprezzati o più attivi. Filtra per Kanban o Scrum.","DISCOVER_TITLE":"Scopri progetti","DISCOVER_SUBTITLE":"{projects, plural, one{Un progetto pubblico da scoprire} other{# progetti pubblici da scoprire}}","MOST_ACTIVE":"Più attivi","MOST_ACTIVE_EMPTY":"Non ci sono ancora progetti ATTIVI","MOST_LIKED":"Preferiti","MOST_LIKED_EMPTY":"Non ci sono ancora progetti PREFERITI","VIEW_MORE":"Vedi altro","FEATURED":"Progetti in Vetrina","EMPTY":"Non ci sono progetti da mostrare con questi criteri.
    Prova ancora!","FILTERS":{"ALL":"Tutti","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Cerca persone","WEEK":"Ultima settimana","MONTH":"Ultimo mese","YEAR":"Ultimo anno","ALL_TIME":"Tutto","CLEAR":"Cancella filtri"},"SEARCH":{"PAGE_TITLE":"Cerca - Scopri i progetti - Taiga","PAGE_DESCRIPTION":"Elenco ricercabile dei progetti pubblici in Taiga. Esplora i backlog, le timeline, le issue e i team. Scopri i progetti più piaciuti o più attivi. Filtra per Kanban o Scrum.","INPUT_PLACEHOLDER":"Inserisci testo...","ACTION_TITLE":"Cerca","RESULTS":"Risultati della ricerca"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-ja.json b/dist/v-1547534999795/locales/taiga/locale-ja.json deleted file mode 100644 index 8004c4b..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-ja.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"はい","NO":"いいえ","OR":"または","I_GET_IT":"OK, I get it","LOADING":"ロード中...","DATE":"YYYY年MM月DD日","DATETIME":"YYYY年MM月DD日 HH時mm分","SAVE":"保存","CANCEL":"キャンセル","ACCEPT":"はい","DELETE":"削除","UNLINK":"リンク解除","CREATE":"作成","ADD":"追加","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"編集","DRAG":"ドラッグ","TAG_LINE":"あなたのアジャイルでフリーでオープンソースなマネジメントツールです","TAG_LINE_2":"LOVE YOUR PROJECT","BLOCK":"ブロック","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"ブロック中","UNBLOCK":"ブロック解除","UNBLOCK_TITLE":"ブロックを解除する","BLOCKED_NOTE":"なぜこれはブロックされているのか?","BLOCKED_REASON":"理由を説明してください","CREATED_BY":"{{fullDisplayName}} によって作成","CLOSE":"閉じる","GO_HOME":"ホームに戻る","PLUGINS":"プラグイン","ONE_ITEM_LINE":"1行に1アイテム","NEW_BULK":"一括登録","SUBTASKS":"Subtasks","PREVIOUS":"前","NEXT":"次へ","LOGOUT":"ログアウト","EXTERNAL_USER":"外部ユーザー","GENERIC_ERROR":"ウンパルンパのひとりが「{{error}}」と言っています。","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"プロジェクトオーナー","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"本当にこの編集画面を閉じてもよろしいですか?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"保存せずに編集画面を閉じた場合、すべての変更が失われます。","RELATED_USERSTORIES":"関連するユーザーストーリー","CARD":{"ASSIGN_TO":"割当","EDIT":"編集","DELETE":"カードを削除","DELETE_ISSUE":"課題を削除","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"無効な値です","TYPE_EMAIL":"有効なメールアドレスでなければいけません。","TYPE_URL":"有効なURLでなければいけません","TYPE_URLSTRICT":"有効なURLでなければいけません","TYPE_NUMBER":"有効な数字でなければいけません","TYPE_DIGITS":"アラビア数字でなければいけません","TYPE_DATEISO":"YYYY-MM-DD の形式でなければいけません (例: 2038年01月23日)","TYPE_ALPHANUM":"半角英数字でなければなりません","TYPE_PHONE":"有効な電話番号でなければいけません","NOTNULL":"null以外でなければいけません","NOT_BLANK":"空欄にできません","REQUIRED":"必須です","REGEXP":"無効な値です","MIN":"この値は %s 以上でなければいけません","MAX":"この値は %s 以下でなければいけません","RANGE":"この値は %s と %s の間でなければいけません","MIN_LENGTH":"文字数が短すぎます。%s 文字以上にしてください。","MAX_LENGTH":"入力した値が長すぎます。%s 文字以下にしてください。","RANGE_LENGTH":"文字数が無効です。%s から %s 文字の間でなければいけません ","MIN_CHECK":"%s 以上選択してください。","MAX_CHECK":"選択できるのは %s までです","RANGE_CHECK":"選択できるのは %s から %s までです","EQUAL_TO":"この値は同じでなければいけません","LINEWIDTH":"行がおそらく長すぎます。%s文字以内におさえてください。","PIKADAY":"無効なデータフォーマットです。DD MMM YYYYの形式で入力してください。(例:23 Mar 1984)"},"PICKERDATE":{"FORMAT":"YYYY年MM月DD日","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"先月","NEXT_MONTH":"翌月","MONTHS":{"JAN":"1月","FEB":"2月","MAR":"3月","APR":"4月","MAY":"5月","JUN":"6月","JUL":"7月","AUG":"8月","SEP":"9月","OCT":"10月","NOV":"11月","DEC":"12月"},"WEEK_DAYS":{"SUN":"日曜","MON":"月曜","TUE":"火曜","WED":"水曜","THU":"木曜日","FRI":"金曜","SAT":"土曜"},"WEEK_DAYS_SHORT":{"SUN":"日","MON":"月","TUE":"火","WED":"水","THU":"木","FRI":"金","SAT":"土"}},"SEE_USER_PROFILE":"{{username }} のプロフィールを見る","USER_STORY":"User story","TASK":"タスク","ISSUE":"課題","EPIC":"エピック","TAGS":{"PLACEHOLDER":"タグを入力","DELETE":"タグを削除","ADD":"タグを追加"},"DESCRIPTION":{"EMPTY":"空欄だと退屈です…。説明を追加してください。","NO_DESCRIPTION":"説明はありません"},"FIELDS":{"SUBJECT":"題名","NAME":"名前","URL":"URL","DESCRIPTION":"説明","VALUE":"値","SLUG":"スラッグ","COLOR":"色","IS_CLOSED":"クローズ","STATUS":"ステータス","TYPE":"タイプ","SEVERITY":"深刻度","PRIORITY":"優先度","ASSIGNED_TO":"割当","ASSIGNED_USERS":"割当ユーザー","POINTS":"ポイント","IS_BLOCKED":"はブロックされています。","REF":"参照","VOTES":"投票","SPRINT":"スプリント","DUE_DATE":"締切日","DUE_DATE_REASON":"締切日理由"},"ROLES":{"ALL":"すべて"},"ASSIGNED_TO":{"NOT_ASSIGNED":"未割当","ASSIGN":"割当","DELETE_ASSIGNMENT":"割当を削除","REMOVE_ASSIGNED":"割当を解除","TOO_MANY":"…ユーザーが多すぎます。フィルタを継続してください。","CONFIRM_UNASSIGNED":"本当にこのアサインから外れてもよろしいですか?","TITLE_ACTION_EDIT_ASSIGNMENT":"割当を編集","SELF":"自分に割当"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"締切日を設定"},"ASSIGNED_USERS":{"ADD":"割当ユーザーを選択","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"終了","OPEN":"オープン"},"WATCHERS":{"WATCHERS":"ウォッチャー","ADD":"ウォッチャー追加","TITLE_ADD":"プロジェクトメンバーをウォッチャーリストへ追加","DELETE":"ウォッチャーを削除","TITLE_LIGHTBOX_DELETE_WARTCHER":"ウォッチャーの削除..."},"WATCH_BUTTON":{"WATCH":"フォロー","WATCHING":"フォロー中","UNWATCH":"フォローをやめる","WATCHERS":"ウォッチャー","BUTTON_TITLE":"この項目のフォローを有効/無効にする","COUNTER_TITLE":"{total, plural, one{one watcher} other{# 人がフォロー中}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"賛成/反対の投票を行う","COUNTER_TITLE":"{total, plural, one{one vote} other{# 人が賛成}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"カスタムフィールド","SAVE":"カスタムフィールドを保存","EDIT":"カスタムフィールドを編集","DELETE":"カスタム属性を削除","CONFIRM_DELETE":"このカスタムフィールドのすべての値が削除されることになります。\n本当にこのまま続行してもよろしいですか?"},"FILTERS":{"INPUT_PLACEHOLDER":"Subject or reference","TITLE_ACTION_FILTER_BUTTON":"検索","TITLE":"フィルター","TITLE_ACTION_SEARCH":"検索","ACTION_SAVE_CUSTOM_FILTER":"カスタムフィルターとして保存する","PLACEHOLDER_FILTER_NAME":"フィルター名を入力しエンターキーを押してください。","APPLIED_FILTERS_NUM":"フィルター適用中","CATEGORIES":{"TYPE":"タイプ","STATUS":"ステータス","SEVERITY":"深刻度","PRIORITIES":"優先度","TAGS":"タグ","ASSIGNED_TO":"割当","ASSIGNED_USERS":"割当ユーザー","ROLE":"役割","CREATED_BY":"作成者","CUSTOM_FILTERS":"カスタムフィルター","EPIC":"エピック"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"ダブルクリックして編集","SELECT_LANGUAGE_PLACEHOLDER":"言語を選択","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown記法のヘルプ"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"エピック","VIEW_EPICS":"エピックの表示","ADD_EPICS":"エピックを追加","MODIFY_EPICS":"エピックの変更","COMMENT_EPICS":"複数のエピックにコメントする","DELETE_EPICS":"エピックの削除"},"SPRINTS":{"NAME":"スプリント","VIEW_SPRINTS":"スプリントの表示","ADD_SPRINTS":"スプリントを追加","MODIFY_SPRINTS":"スプリントの変更","DELETE_SPRINTS":"スプリントの削除"},"USER_STORIES":{"NAME":"ユーザーストーリー","VIEW_USER_STORIES":"ユーザーストーリーの表示","ADD_USER_STORIES":"ユーザーストーリーを追加","MODIFY_USER_STORIES":"ユーザーストーリーの変更","COMMENT_USER_STORIES":"複数のユーザーストーリーにコメントする","DELETE_USER_STORIES":"ユーザーストーリーの削除"},"TASKS":{"NAME":"タスク","VIEW_TASKS":"タスクの表示","ADD_TASKS":"タスクを追加","MODIFY_TASKS":"タスクの変更","COMMENT_TASKS":"複数のタスクにコメントする","DELETE_TASKS":"タスクの削除"},"ISSUES":{"NAME":"課題","VIEW_ISSUES":"課題の表示","ADD_ISSUES":"課題を追加","MODIFY_ISSUES":"課題の変更","COMMENT_ISSUES":"複数の課題にコメントする","DELETE_ISSUES":"課題の削除"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Wikiページの表示","ADD_WIKI_PAGES":"Wikiページを追加","MODIFY_WIKI_PAGES":"Wikiページの変更","DELETE_WIKI_PAGES":"Wikiページの削除","VIEW_WIKI_LINKS":"Wikiリンクの表示","ADD_WIKI_LINKS":"Wikiリンクを追加","DELETE_WIKI_LINKS":"Wikiリンクの削除"}}},"LOGIN":{"PAGE_TITLE":"ログイン - Taiga","PAGE_DESCRIPTION":"スタートアップ、デベロッパー、デザイナーのための、仕事を真から楽しくするシンプルで美しいプロジェクトマネージメントツール、Taigaにログインしましょう。"},"AUTH":{"INVITED_YOU":"があなたをプロジェクトに招待しています","NOT_REGISTERED_YET":"未登録ですか?","REGISTER":"登録","CREATE_ACCOUNT":"こちらから無料でアカウントを作成"},"LOGIN_COMMON":{"HEADER":"すでにログインしたことがあります","PLACEHOLDER_AUTH_NAME":"ユーザー名 または メールアドレス","LINK_FORGOT_PASSWORD":"忘れましたか?","TITLE_LINK_FORGOT_PASSWORD":"パスワードをお忘れですか?","ACTION_ENTER":"決定","ACTION_SIGN_IN":"ログイン","PLACEHOLDER_AUTH_PASSWORD":"パスワード","ALT_LOGIN":"または次でログイン"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"「あなたのユーザー名/メールアドレス または パスワードが間違っている」とウンパルンパたちが言っています。","SUCCESS":"ウンパルンパたちは嬉しいみたいですよ。Taigaへようこそ。"},"REGISTER":{"PAGE_TITLE":"登録 - Taiga","PAGE_DESCRIPTION":"スタートアップ、デベロッパー、デザイナーのための、仕事を真から楽しくするシンプルで美しいプロジェクトマネージメントツール、Taigaのアカウントを作成しましょう。"},"REGISTER_FORM":{"TITLE":"新しいTaigaアカウントを登録する (無料)","PLACEHOLDER_NAME":"ユーザー名を記入","PLACEHOLDER_FULL_NAME":"フルネームを記入","PLACEHOLDER_EMAIL":"メールアドレスを記入","PLACEHOLDER_PASSWORD":"パスワードを設定 (大文字・小文字を区別)","ACTION_SIGN_UP":"サインアップ","TITLE_LINK_LOGIN":"ログイン","LINK_LOGIN":"登録の準備は整いましたか? ログイン"},"FORGOT_PASSWORD":{"PAGE_TITLE":"パスワードを忘れました - Taiga","PAGE_DESCRIPTION":"ユーザー名 または メールアドレスを記入して新しいパスワードを取得すれば、Taigaに再びアクセスできます。"},"FORGOT_PASSWORD_FORM":{"TITLE":"おっと、パスワードを忘れてしまいましたか?","SUBTITLE":"新しく始めるためにユーザー名 または メールアドレスを入力","PLACEHOLDER_FIELD":"ユーザー名 または メールアドレス","ACTION_RESET_PASSWORD":"パスワードをリセット","LINK_CANCEL":"いいえ、戻ります。私はそれを覚えていると思います。","SUCCESS_TITLE":"メールボックスを確認してください","SUCCESS_TEXT":"新しいパスワードを設定するための手順を記載したメールを送信しました","ERROR":"「あなたのアカウントはまだ登録されていない」とウンパルンパたちが言っています。"},"CHANGE_PASSWORD":{"PAGE_TITLE":"パスワードの変更 - Taiga","SECTION_NAME":"パスワード変更","FIELD_CURRENT_PASSWORD":"現在のパスワード","PLACEHOLDER_CURRENT_PASSWORD":"現在のパスワード (パスワードが未設定の場合は空)","FIELD_NEW_PASSWORD":"新しいパスワード","PLACEHOLDER_NEW_PASSWORD":"新しいパスワードを入力","FIELD_RETYPE_PASSWORD":"新しいパスワードを再入力","PLACEHOLDER_RETYPE_PASSWORD":"新しいパスワードを再入力","ERROR_PASSWORD_MATCH":"パスワードが一致しません。"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"新しいTaigaのパスを作成","SUBTITLE":"そして、いくつかの鉄分豊富な食品を摂取しましょう!脳にとって良いことです :-P","PLACEHOLDER_NEW_PASSWORD":"新しいパスワード","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"新しいパスワードを再入力","ACTION_RESET_PASSWORD":"パスワードをリセット","ERROR":"ウンパルンパたちはあなたのパスワード復元依頼を見つけられないようです。もう一度お試しください。","SUCCESS":"ウンパルンパたちはあなたの新しいパスワードを保存しました。
    新しいパスワードでサインイン してみてください。"},"INVITATION":{"PAGE_TITLE":"招待を受諾する - Taiga","PAGE_DESCRIPTION":"スタートアップ、デベロッパー、デザイナーのための、仕事を真から楽しくするシンプルで美しいプロジェクトマネージメントツール、Taigaへの招待を受諾します。"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"「あなたの招待を確認できなかった」とウンパルンパたちが言っています。","SUCCESS":"プロジェクトへの参加に成功しました, {{project_name}}へようこそ"},"HOME":{"PAGE_TITLE":"ホーム - Taiga","PAGE_DESCRIPTION":"あなたのメインプロジェクト、担当あるいはフォローしているユーザーストーリー、タスク、課題が表示されるTaigaのホームページです。","EMPTY_WORKING_ON":"何も表示されていませんか? Taigaで作業を始めると、ここにあなたが取り組んでいるユーザーストーリー、タスク、課題が表示されます。","EMPTY_WATCHING":"ユーザーストーリー、タスク、課題をフォローして変更が発生した際に通知を受け取りましょう。:)","EMPTY_PROJECT_LIST":"参加中のプロジェクトがありません","WORKING_ON_SECTION":"取り組んでいる作業","WATCHING_SECTION":"フォロー中","DASHBOARD":"プロジェクトのダッシュボート"},"EPICS":{"TITLE":"エピック","SECTION_NAME":"エピック","EPIC":"エピック","PAGE_TITLE":"エピック - {{projectName}}","PAGE_DESCRIPTION":"エピックの一覧 {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"エピックを追加","UNASSIGNED":"未割当"},"EMPTY":{"TITLE":"まだエピックが無いようです","EXPLANATION":"エピックはユーザーストーリーを包含する、より上の階層のものです。
    階級のトップにあり、ユーザーストーリーをグループ化してまとめるのにも用いられます。","HELP":"エピックについて"},"TABLE":{"VOTES":"投票","NAME":"名前","PROJECT":"プロジェクト","SPRINT":"スプリント","ASSIGNED_TO":"割当済","STATUS":"ステータス","PROGRESS":"進捗","VIEW_OPTIONS":"オプションの表示"},"CREATE":{"TITLE":"新しいエピック","PLACEHOLDER_DESCRIPTION":"このエピックを他の人が理解できるように説明を加えて下さい","TEAM_REQUIREMENT":"チームからの要求","CLIENT_REQUIREMENT":"お客様からの要求","BLOCKED":"ブロック中","BLOCKED_NOTE_PLACEHOLDER":"なぜこのエピックはブロックされているのか?","CREATE_EPIC":"エピックを作成"}},"PROJECTS":{"PAGE_TITLE":"マイ プロジェクト - Taiga","PAGE_DESCRIPTION":"あなたの全てのプロジェクトのリストです。順序の入れ替えや新規作成ができます。","MY_PROJECTS":"マイ プロジェクト"},"ATTACHMENT":{"SECTION_NAME":"添付ファイル","TITLE":"{{ fileName }} が {{ date }} にアップロードされました","LIST_VIEW_MODE":"ライブビューモード","GALLERY_VIEW_MODE":"ギャラリービューモード","DESCRIPTION":"要約を入力","DEPRECATED":"(非推奨)","DEPRECATED_FILE":"推奨されませんか?","ADD":"新しい添付ファイルを追加する。 {{maxFileSizeMsg}}","DROP":"添付ファイルをここにドロップ!","SHOW_DEPRECATED":"+ 非推奨のアタッチメントを表示する","HIDE_DEPRECATED":"- 非推奨のアタッチメントを隠す","COUNT_DEPRECATED":"({{ counter }} deprecated)","MAX_UPLOAD_SIZE":"アップロード上限サイズは {{maxFileSize}} です","DATE":"YYYY年MM月DD日 hh時mm分","ERROR_UPLOAD_ATTACHMENT":"'{{fileName}}'のアップロードに失敗. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"添付ファイルの削除...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"添付ファイル '{{fileName}}'","ERROR_DELETE_ATTACHMENT":" 削除に失敗: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。"},"PAGINATION":{"PREVIOUS":"前へ","NEXT":"次へ"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"値を編集","TITLE_ACTION_DELETE_VALUE":"値を削除","TITLE_ACTION_DELETE_TAG":"タグを削除"},"HELP":"手助けが必要な場合はサポートページをチェックしてください。","PROJECT_DEFAULT_VALUES":{"TITLE":"初期値設定","SUBTITLE":"プルダウン項目の初期値を設定してください。"},"MEMBERSHIPS":{"TITLE":"メンバー管理","PAGE_TITLE":"メンバーシップ - {{projectName}}","ADD_BUTTON":"+ 新規メンバー","ADD_BUTTON_TITLE":"新規メンバーを追加","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"このプロジェクトは許可されている最大メンバー数({{members}}名)に達しました。上限を増やしたい場合は管理者にお問い合わせください。"},"PROJECT_EXPORT":{"TITLE":"エクスポート","SUBTITLE":"エクスポートの実行によりプロジェクトのバックアップを作成することができます。
    また、バックアップをベースとして新しいプロジェクトを作成することも可能です。","EXPORT_BUTTON":"エクスポート","EXPORT_BUTTON_TITLE":"プロジェクトをエクスポート","LOADING_TITLE":"ダンプファイルを生成中","DUMP_READY":"ダンプファイルの用意が出来ました!","LOADING_MESSAGE":"このページを閉じないでください。","ASYNC_MESSAGE":"準備が出来たらメールで通知します。","SYNC_MESSAGE":"ダウンロードが自動で開始されない場合はこちらをクリックしてください。","ERROR":"ウンパルンパたちはダンプファイルの生成に手こずっているようです。もう一度お試しください。","ERROR_BUSY":"すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。"},"MODULES":{"TITLE":"モジュール","EPICS":"エピック","EPICS_DESCRIPTION":"あなたのプロジェクトの最も戦略的な部分を視覚化し、管理する","BACKLOG":"バックログ","BACKLOG_DESCRIPTION":"ユーザーストーリーが適切にメンテナンスされるよう管理し、優先順位に基づく作業を行うためのビュー","NUMBER_SPRINTS":"予測されるスプリント数","NUMBER_SPRINTS_HELP":"0に設定した場合、無制限となります","NUMBER_US_POINTS":"予測されるストーリーポイントの合計","NUMBER_US_POINTS_HELP":"0に設定した場合、無制限となります","KANBAN":"かんばん","KANBAN_DESCRIPTION":"このかんばんを利用して、無駄のない方法でプロジェクトを整理しましょう。","ISSUES":"課題","ISSUES_DESCRIPTION":"プロジェクトのバグ追跡、質問、機能改善に関する議論などが行えるようになります。","WIKI":"Wiki","WIKI_DESCRIPTION":"他のメンバーと協力してコンテンツを編集することができます。
    プロジェクトの情報を文書化するのにぴったりです。","MEETUP":"会議","MEETUP_DESCRIPTION":"あなたが利用しているビデオ会議システムを選択してください。","SELECT_VIDEOCONFERENCE":"ビデオ会議システムを選択","SALT_CHAT_ROOM":"チャットルーム名に接頭辞を追加","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"カスタム","URL_CHAT_ROOM":"チャットルームのURL"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - プロジェクトプロフィール - {{projectName}}","PROJECT_DETAILS":"プロジェクト詳細","PROJECT_NAME":"プロジェクト名","TAGS":"タグ","DESCRIPTION":"説明","RECRUITING":"プロジェクトメンバーを探していますか?","RECRUITING_MESSAGE":"どんな人を探していますか?","RECRUITING_PLACEHOLDER":"探している人のプロフィールを記載してください","FEEDBACK":"Taigaユーザーからのフィードバックを受け取りますか?","PUBLIC_PROJECT":"パブリック プロジェクト","PRIVATE_PROJECT":"非公開プロジェクト","PRIVATE_OR_PUBLIC":"パブリックプロジェクトとプライベートプロジェクトの違いは何ですか?","DELETE":"このプロジェクトを削除","CHANGE_LOGO":"ロゴを変更","ACTION_USE_DEFAULT_LOGO":"デフォルトのイメージを使用する","MAX_PRIVATE_PROJECTS":"あなたの現在のプランで許可されている非公開プロジェクトの上限数に達しました。","MAX_PRIVATE_PROJECTS_MEMBERS":"非公開プロジェクトの最大メンバー数を超えました。","MAX_PUBLIC_PROJECTS":"あなたの現在のプランで許可されている公開プロジェクトの上限数に達しました。","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"プロジェクトオーナー","REQUEST_OWNERSHIP":"オーナー権限を要求","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"新しいプロジェクトオーナーになりますか?","REQUEST_OWNERSHIP_DESC":"現在のプロジェクトオーナー {{name}} に、このプロジェクトのオーナー権限をあなたに移すよう要求","REQUEST_OWNERSHIP_BUTTON":"リクエスト","REQUEST_OWNERSHIP_SUCCESS":"プロジェクトオーナーに通知します","CHANGE_OWNER":"オーナーを変更","CHANGE_OWNER_SUCCESS_TITLE":"あなたのリクエストが送信されました!","CHANGE_OWNER_SUCCESS_DESC":"プロジェクトのオーナー権限要求が承認または拒否されことをメールでお知らせします"},"REPORTS":{"TITLE":"レポート","SUBTITLE":"オリジナルのレポートを作成するためにプロジェクトのデータをCSVで出力することができます。","DESCRIPTION":"CSVのダウンロードボタンまたは生成されたURLへアクセスしてファイルを入手し、お好みのテキストエディタや表計算ソフトで開いてください。データの可視化や分析を簡単に行うことが可能です。","HELP":"このファイルをどうやって表計算ソフトで活用すればいいですか?","REGENERATE_TITLE":"URLが変更されます","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"エピックレポート","SECTION_TITLE_US":"ユーザーストーリーを出力する","SECTION_TITLE_TASK":"タスクを出力する","SECTION_TITLE_ISSUE":"課題を出力する","DOWNLOAD":"CSVのダウンロード","URL_FIELD_PLACEHOLDER":"CSV出力用のURLを作成してください","TITLE_REGENERATE_URL":"CSV出力用のURLを作成","ACTION_GENERATE_URL":"URL を生成","ACTION_REGENERATE":"再作成","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"削除する"},"CUSTOM_FIELDS":{"TITLE":"カスタムフィールド","SUBTITLE":"ユーザーストーリー、タスク、課題のためのカスタムフィールドを明記してください。","EPIC_DESCRIPTION":"エピックカスタムフィールド","EPIC_ADD":"複数のエピックにカスタムフィールドを追加","US_DESCRIPTION":"ユーザーストーリーのカスタムフィールド","US_ADD":"ユーザーストーリーにカスタムフィールドを追加","TASK_DESCRIPTION":"タスクカスタムフィールド","TASK_ADD":"タスクにカスタムフィールドを追加","ISSUE_DESCRIPTION":"課題のカスタムフィールド","ISSUE_ADD":"課題にカスタムフィールドを追加","FIELD_TYPE_TEXT":"テキスト","FIELD_TYPE_RICHTEXT":"リッチテキスト","FIELD_TYPE_MULTI":"マルチライン","FIELD_TYPE_DATE":"日時","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - プロジェクト値 - {{projectName}}","REPLACEMENT":"この値を持つすべてのアイテムはこちらに変更されます:","ERROR_DELETE_ALL":"すべての値を削除することはできません。"},"PROJECT_VALUES_POINTS":{"TITLE":"ポイント","SUBTITLE":"予測されるユーザーストーリーのポイントを定義することができます。","US_TITLE":"ユーザーストーリーのポイント","ACTION_ADD":"新規ポイントを追加"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"優先度","SUBTITLE":"課題の優先度を定義することができます。","ISSUE_TITLE":"課題の優先度","ACTION_ADD":"新しい優先度を追加"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"深刻度","SUBTITLE":"課題の深刻度を定義することができます。","ISSUE_TITLE":"課題の深刻度","ACTION_ADD":"新しい深刻度を追加"},"PROJECT_VALUES_STATUS":{"TITLE":"ステータス","SUBTITLE":"ユーザーストーリー、タスク、課題のステータスを定義することができます。","EPIC_TITLE":"エピックステータス","US_TITLE":"ユーザーストーリーステータス","TASK_TITLE":"タスクのステータス","ISSUE_TITLE":"課題のステータス"},"PROJECT_VALUES_TYPES":{"TITLE":"タイプ","SUBTITLE":"課題のタイプを定義することができます。","ISSUE_TITLE":"課題のタイプ","ACTION_ADD":"新しい {{objName}} を追加"},"PROJECT_VALUES_TAGS":{"TITLE":"タグ","SUBTITLE":"タグの色を編集","EMPTY":"タグは現在ありません。","EMPTY_SEARCH":"検索条件に当てはまるものはありませんでした。","ACTION_ADD":"タグを追加","NEW_TAG":"新規タグ","MIXING_HELP_TEXT":"マージしたいタグを選択","MIXING_MERGE":"タグを結合","SELECTED":"選択中"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"ステータスを追加","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"役割 - {{projectName}}","WARNING_NO_ROLE":"Be careful, no role in your project will be able to estimate the point value for user stories","HELP_ROLE_ENABLED":"この設定を有効にするとメンバーがこの役割に割り当てられた際にユーザーストーリーのポイントに反映されます。","DISABLE_COMPUTABLE_ALERT_TITLE":"本当に役割見積もりを無効にしてもよろしいですか?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} 名がこの役割を担当","TITLE_DELETE_ROLE":"役割を削除","REPLACEMENT_ROLE":"All the users with this role will be moved to","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"すべての値を削除することはできません","EXTERNAL_USER":"外部ユーザー","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"シークレットキー","PAYLOAD_URL":"Payload URL","VALID_IPS":"Valid origin IPs (separated by ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITHUB":{"SECTION_NAME":"Github","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"新規Webhookを追加","TYPE_NAME":"サービス名を入力","TYPE_PAYLOAD_URL":"サービスペイロードのURLを入力","TYPE_SERVICE_SECRET":"サービスのシークレットキーを入力","SAVE":"Webhookを保存","CANCEL":"Webhookをキャンセル","SHOW_HISTORY":"(履歴を表示)","TEST":"Webhookをテスト","EDIT":"Webhookを編集","DELETE":"Webhookを削除","REQUEST":"リクエスト","RESEND_REQUEST":"リクエストを再送","HEADERS":"ヘッダー","PAYLOAD":"Payload","RESPONSE":"レスポンス","DATE":"YYYY年MM月DD日 hh時mm分ss秒","ACTION_HIDE_HISTORY":"(履歴を非表示)","ACTION_HIDE_HISTORY_TITLE":"履歴を非表示","ACTION_SHOW_HISTORY":"(履歴を表示)","ACTION_SHOW_HISTORY_TITLE":"履歴を表示","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - カスタム属性 - {{projectName}}","ADD":"カスタムフィールドを追加","EDIT":"カスタムフィールドを編集","DELETE":"カスタムフィールドを削除","SAVE_TITLE":"カスタムフィールドを保存","CANCEL_TITLE":"作成するのをやめる","SET_FIELD_NAME":"カスタムフィールド名を設定","SET_FIELD_DESCRIPTION":"カスタムフィールドの説明を設定","FIELD_TYPE_DEFAULT":"-- 1つ選択 --","ACTION_UPDATE":"カスタムフィールドを更新","ACTION_CANCEL_EDITION":"編集をキャンセル"},"MEMBERSHIP":{"COLUMN_MEMBER":"メンバー","COLUMN_ADMIN":"管理","COLUMN_ROLE":"役割","COLUMN_STATUS":"ステータス","STATUS_ACTIVE":"有効","STATUS_PENDING":"保留","DELETE_MEMBER":"メンバーを削除","RESEND":"再送信","SUCCESS_SEND_INVITATION":"招待メールを '{{email}}' へもう一度送りました。","SUCCESS_DELETE":"{{message}} を削除しました","ERROR_DELETE":"{{message}} を削除できませんでした","DEFAULT_DELETE_MESSAGE":"{{email}} への招待メール"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"エピックステータスの初期値","LABEL_US_STATUS":"ユーザーストーリーステータスの初期値","LABEL_POINTS":"ポイントの初期値","LABEL_TASK_STATUS":"タスクステータスの初期値","LABEL_ISSUE_TYPE":"課題タイプの初期値","LABEL_ISSUE_STATUS":"課題ステータスの初期値","LABEL_PRIORITY":"優先度の初期値","LABEL_SEVERITY":"深刻度の初期値"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"新しいステータス名を記入","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"新しいエレメント名を記入"},"US_STATUS":{"ACTION_ADD_STATUS":"ステータスを追加","IS_ARCHIVED_COLUMN":"アーカイブ","IS_CLOSED_COLUMN":"終了","WIP_LIMIT_COLUMN":"WIP制限","PLACEHOLDER_WRITE_NAME":"新しいステータス名を記入"},"MENU":{"PROJECT":"プロジェクト","ATTRIBUTES":"属性","MEMBERS":"メンバー","PERMISSIONS":"権限","INTEGRATIONS":"インテグレーション"},"SUBMENU_PROJECT_VALUES":{"STATUS":"ステータス","POINTS":"ポイント","PRIORITIES":"優先度","SEVERITIES":"深刻度","TYPES":"タイプ","CUSTOM_FIELDS":"カスタムフィールド","TAGS":"タグ","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"役割","ACTION_NEW_ROLE":"+ 新規役割","TITLE_ACTION_NEW_ROLE":"新しい役割を追加"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"新しいプロジェクトオーナーとなりますか?","PRIVATE":"プライベート","ACCEPTED_PROJECT_OWNERNSHIP":"おめでとうございます! あなたが新しいプロジェクトオーナーです。","REJECTED_PROJECT_OWNERNSHIP":"承知致しました。現在のプロジェクトオーナーに連絡します","ACCEPT":"はい","REJECT":"却下","PROPOSE_OWNERSHIP":"プロジェクト {{project}} の現在のオーナー {{owner}} が、あなたに新しいプロジェクトオーナーになるよう要求しています。","ADD_COMMENT":"プロジェクトオーナーにコメントしますか?","UNLIMITED_PROJECTS":"無制限","OWNER_MESSAGE":{"PRIVATE":"あなたが持てる非公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。","PUBLIC":"あなたが持てる公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。"},"CANT_BE_OWNED":"現在あなたはこのタイプのプロジェクトのオーナーにはなれません。このプロジェクトのオーナーになりたい場合は管理者に問い合わせてオーナー権限を変更してもらってください。"}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"プロフィールを編集","CLOSED_US":"完了したユーザーストーリー","PROJECTS":"プロジェクト","PROJECTS_EMPTY":"{{username}} はまだプロジェクトに参加していません","CONTACTS":"連絡先","CONTACTS_EMPTY":"{{username}} はまだ連絡先を持っていません","CURRENT_USER_CONTACTS_EMPTY":"あなたへのコンタクトはまだありません。","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Taigaで一緒に仕事をしたメンバーは自動的に連絡先へ追加されます","TABS":{"ACTIVITY_TAB":"タイムライン","ACTIVITY_TAB_TITLE":"このユーザのすべてのアクティビティーを表示する","PROJECTS_TAB":"プロジェクト","PROJECTS_TAB_TITLE":"ユーザーが参加しているプロジェクト","LIKES_TAB":"いいね","LIKES_TAB_TITLE":"このユーザーが「いいね」と評価したすべての内容を表示","VOTES_TAB":"投票","VOTES_TAB_TITLE":"このユーザーが「賛成」したすべての内容を表示","WATCHED_TAB":"フォロー","WATCHED_TAB_TITLE":"このユーザーが「フォロー」したすべての内容を表示","CONTACTS_TAB":"連絡先","CONTACTS_TAB_TITLE":"このユーザーが「コンタクト」したすべての内容を表示"}},"PROFILE_SIDEBAR":{"TITLE":"プロフィール","DESCRIPTION":"すべてのメンバーはあなたが完了させた作業、あなたが今取り組んでいる作業を確認することができます。自己紹介を追記してあなたについてもっと知ってもらいましょう!","ADD_INFO":"編集する"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"入力してください","FILTER_TYPE_ALL":"すべて","FILTER_TYPE_ALL_TITLE":"すべてを表示","FILTER_TYPE_PROJECTS":"プロジェクト","FILTER_TYPE_PROJECTS_TITLE":"プロジェクトのみ表示","FILTER_TYPE_EPICS":"エピック","FILTER_TYPE_EPICS_TITLE":"エピックのみ表示","FILTER_TYPE_USER_STORIES":"ストーリー","FILTER_TYPE_USER_STORIES_TITLE":"ユーザーストーリーを表示","FILTER_TYPE_TASKS":"タスク","FILTER_TYPE_TASKS_TITLE":"タスクのみ表示","FILTER_TYPE_ISSUES":"課題","FILTER_TYPE_ISSUES_TITLE":"課題のみ表示","EMPTY_TITLE":"表示するものがありません。"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"最も良く使うプロジェクトがトップになるように順序を入れ替えてみましょう。
    トップ10のプロジェクトが上のナビゲーションバーのプロジェクトリストに現れます。","PRIVATE":"プライベート プロジェクト","LOOKING_FOR_PEOPLE":"プロジェクトはメンバーを探しています","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# 人のファン}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# 人がフォロー中}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# 人のメンバー}}","BLOCKED_PROJECT":{"BLOCKED":"ブロックされたプロジェクト","THIS_PROJECT_IS_BLOCKED":"このプロジェクトは一時的にブロックされています。","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"プロジェクトのブロックを解除したい場合は管理者にお問い合わせください。"},"SECTION":{"SEARCH":"検索","TIMELINE":"タイムライン","EPICS":"エピック","BACKLOG":"バックログ","KANBAN":"かんばん","ISSUES":"課題","WIKI":"Wiki","TEAM":"チーム","MEETUP":"会議","ADMIN":"管理"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"プロジェクトを作成","MANAGE_PROJECTS":"プロジェクト管理","TITLE_CREATE_PROJECT":"プロジェクトを作成","HELP_TITLE":"Taiga サポートページ","HELP":"ヘルプ","HOMEPAGE":"ホームページ","FEEDBACK_TITLE":"フィードバックを送る","FEEDBACK":"フィードバック","NOTIFICATIONS_TITLE":"通知設定を編集","NOTIFICATIONS":"通知","VIEW_PROFILE_TITLE":"プロフィールを表示","VIEW_PROFILE":"プロフィールを表示","EDIT_PROFILE_TITLE":"プロフィールを編集","EDIT_PROFILE":"プロフィールを編集","CHANGE_PASSWORD_TITLE":"パスワード変更","CHANGE_PASSWORD":"パスワード変更","DASHBOARD_TITLE":"ダッシュボード","DISCOVER_TITLE":"トレンドプロジェクトを探す","DISCOVER":"探す"},"LIKE_BUTTON":{"LIKE":"いいね","LIKED":"いいね","UNLIKE":"「いいね」を取り消す","BUTTON_TITLE":"Like or unlike this project","COUNTER_TITLE":"{total, plural, one{one fan} other{# 人のファン}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"このプロジェクトをフォローして通知ポリシーを設定してください","WATCH":"フォロー","WATCHING":"フォロー中","COUNTER_TITLE":"{total, plural, one{one watcher} other{# 人がフォロー中}}","OPTIONS":{"NOTIFY_ALL":"すべての通知を受信する","NOTIFY_ALL_TITLE":"このプロジェクトのすべての通知を受信する","NOTIFY_INVOLVED":"関連するものだけ","NOTIFY_INVOLVED_TITLE":"あなたが携わっている時のみ通知を受信","UNWATCH":"フォローをやめる","UNWATCH_TITLE":"プロジェクトのフォローをやめる"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"プロジェクトチームに連絡","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"プロジェクトを作成","CHOOSE_TEMPLATE":"どちらのテンプレートがあなたのプロジェクトにより適していますか?","TEMPLATE_SCRUM":"スクラム","TEMPLATE_SCRUM_DESC":"短時間のサイクルでタスクの優先順位付けと解決を行います。","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"かんばん","TEMPLATE_KANBAN_DESC":"独立したタスクで一定のワークフローを維持します。","TEMPLATE_KANBAN_LONGDESC":"かんばん方法論はプロジェクト開発(あらゆる種類のプロジェクト)を工程ごとに区切るのに使われます。\nかんばんカードはインデックスカードやポストイットのようなもので、プロジェクト内の全ての達成する必要のあるタスク(またはユーザーストーリー)がそれぞれのカードに詳細に書かれています。かんばんボードでは各カードを一つの工程が完了するたびに次の工程に動かし、進捗管理をしていきます。","DUPLICATE":"プロジェクトを複製","DUPLICATE_DESC":"設定を維持したままプロジェクトを始めます。","IMPORT":"プロジェクトをインポート","IMPORT_DESC":"複数プラットフォームからのプロジェクトをTaigaにインポート","INVITE":"プロジェクトに招待","SOLO_PROJECT":"このプロジェクトで独りになります","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"バックエンド","MAX_PRIVATE_PROJECTS":"残念ながら許可されている非公開プロジェクトの上限数に達しました。\nもし現在の上限を増やしたい場合は管理者にお問い合わせください。","MAX_PUBLIC_PROJECTS":"残念ながら許可されている公開プロジェクトの上限数に達しました。\nもし現在の上限を増やしたい場合は管理者にお問い合わせください。","PUBLIC_PROJECT":"パブリック プロジェクト","PRIVATE_PROJECT":"プライベート プロジェクト"},"COMMON":{"DETAILS":"新規プロジェクト詳細","PROJECT_TITLE":"プロジェクト名","PROJECT_DESCRIPTION":"プロジェクト概要"},"DUPLICATE":{"TITLE":"プロジェクトを複製","DESCRIPTION":"設定を維持したままプロジェクトを始めます。","SELECT_PLACEHOLDER":"複製する既存プロジェクトを選択"},"IMPORT":{"TITLE":"プロジェクトをインポート","DESCRIPTION":"複数プラットフォームからのプロジェクトをTaigaにインポート","ASYNC_IN_PROGRESS_TITLE":"ウンパルンパたちがあなたのプロジェクトをインポートしています。","ASYNC_IN_PROGRESS_MESSAGE":"この処理には時間がかかります。
    準備が出来たらメールで通知します。","UPLOAD_IN_PROGRESS_MESSAGE":"{{totalSize}} 中 {{uploadedSize}} アップロード済み","ERROR":"ウンパルンパたちはダンプファイルのインポートに手こずっているようです。もう一度お試しください。","ERROR_TOO_MANY_REQUEST":"すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。","ERROR_MESSAGE":"ウンパルンパたちはダンプファイルのインポートに手こずっているようです。  \n{{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。","SYNC_SUCCESS":"プロジェクトのインポートに成功しました","IMPORT":"インポート","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"あるいは必要であれば、このユーザーがTaigaで使用しているメールアドレスを記入","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Taigaでこのユーザーが使用しているメールアドレスを記入","ACCEEDE":"Acceede","PROJECT_MEMBERS":"プロジェクトメンバー","PROCESS_DESCRIPTION":"{{platform}}のタスクを割り当てたいTaigaユーザーを教えてください。","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"ユーザーを選択","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"指定したユーザーがTaigaアカウントを持っていない場合、タスクを割り当てることはできません。","ASSIGN":"割当","PROJECT_SELECTOR":{"NO_RESULTS":"検索条件に当てはまるものはありませんでした。","ACTION_SEARCH":"検索","ACTION_BACK":"バックエンド"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"インポートしようとしているプロジェクトのメンバー数はあなたを含めて{{members}}名ですが、あなたの現在のプランでは非公開プロジェクト1つにつき最大{{max_memberships}}名までしか許可されていません。 上限を増やしたい場合は管理者にお問い合わせください。","PROJECT_MEMBERS_DESC_PUBLIC":"インポートしようとしているプロジェクトのメンバー数はあなたを含めて{{members}}名ですが、あなたの現在のプランでは公開プロジェクト1つにつき最大{{max_memberships}}名までしか許可されていません。 上限を増やしたい場合は管理者にお問い合わせください。","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"現在のプランではこれ以上の非公開プロジェクトは許可されていません。","DESC":"インポートしようとしているプロジェクトは非公開プロジェクトです。現在のプランではこれ以上の非公開プロジェクトは許可されていません。"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"現在のプランではこれ以上の公開プロジェクトは許可されていません。","DESC":"インポートしようとしているプロジェクトは公開プロジェクトです。現在のプランではこれ以上の公開プロジェクトは許可されていません。"},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"現在のプランでは非公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"現在のプランでは公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。"},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"現在のプランではこれ以上の非公開プロジェクトの作成や、一つの非公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。","DESC":"インポートしようとしているのは非公開プロジェクトで{{members}}名のメンバーがいます。"},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"現在のプランではこれ以上の公開プロジェクトの作成や、一つの公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。","DESC":"インポートしようとしているのは公開プロジェクトで{{members}}名以上のメンバーがいます。"}},"IN_PROGRESS":{"TITLE":"プロジェクトをインポート中","DESCRIPTION":"このプロセスには時間がかかります。ウィンドウを開いたままにしていてください。"},"WARNING":{"TITLE":"いくつかのタスクは未割当になります","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"コンタクトを確認"},"TAIGA":{"SELECTOR":"Taigaプロジェクトをインポート"},"TRELLO":{"SELECTOR":"TrelloボードをTaigaにインポート","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"GitHubプロジェクト課題をインポート","CHOOSE_PROJECT":"インポートしたいプロジェクトを検索","NO_PROJECTS":"GitHubプロジェクトがないようです","HOW_DO_YOU_WANT_TO_IMPORT":"課題をどのようにTaigaにインポートしたいですか?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"課題として","ISSUES_PROJECT_DESCRIPTION":"課題をカンバンまたはスクラムモードで使うことはできません。新しいユーザーストーリーからカンバンまたはスクラムを有効にすることができます。"},"ASANA":{"SELECTOR":"Asanaプロジェクトをインポートし管理方法を選択","CHOOSE_PROJECT":"インポートしたいプロジェクトを選択","NO_PROJECTS":"Asanaにプロジェクトがないようです","KANBAN_PROJECT":"かんばん","SCRUM_PROJECT":"スクラム","CREATE_AS_SCRUM_DESCRIPTION":"あなたのプロジェクトのタスクとサブタスクはTaigaユーザーストーリーとタスクとして作成されます。","CREATE_AS_KANBAN_DESCRIPTION":"あなたのプロジェクトのタスクとサブタスクはTaigaユーザーストーリーとタスクとして作成されます。"},"JIRA":{"SELECTOR":"Jiraプロジェクトをインポートし管理方法を選択","HOW_TO_CONFIGURE":"(設定ヘルプ)","CHOOSE_PROJECT":"インポートしたいプロジェクトまたはボードを選択","NO_PROJECTS":"Jiraにプロジェクトやボードがないようです","URL":"Jira URL","KANBAN_PROJECT":"かんばん","SCRUM_PROJECT":"スクラム","ISSUES_PROJECT":"課題","CREATE_AS_SCRUM_DESCRIPTION":"あなたのプロジェクトの課題とサブ課題はTaigaユーザーストーリーとタスクとして作成されます。","CREATE_AS_KANBAN_DESCRIPTION":"あなたのプロジェクトの課題とサブ課題はTaigaユーザーストーリーとタスクとして作成されます。","CREATE_AS_ISSUES_DESCRIPTION":"Jiraプロジェクトからのサブ課題をどうしますか? (Taigaはサブ課題というものを許可しません)","CREATE_NEW_ISSUES":"サブ課題を新しいTaiga課題に変換する","NOT_CREATE_NEW_ISSUES":"サブ課題をインポートしないでください"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"本当にあなたのTaigaアカウントを削除してもよろしいですか?","CANCEL":"設定に戻る","ACCEPT":"アカウントを削除する","BLOCK_PROJECT":"あなたが所有しているプロジェクトは、あなたのアカウント削除後にブロックされることを覚えておいてください。あなたのアカウントが削除されてプロジェクトがブロックされる前にプロジェクトのオーナー権限を他のメンバーに譲渡してください。"},"DELETE_PROJECT":{"TITLE":"プロジェクトを削除","QUESTION":"本当にこのプロジェクトを削除していいですか?","SUBTITLE":"プロジェクトのすべてのデータ (ユーザーストーリー、タスク、課題、スプリント、Wikiページ) が失われます! :-(","CONFIRM":"はい、問題ありません"},"ASSIGNED_TO":{"SELECT":"割り当てる","SEARCH":"ユーザーを検索"},"ADD_MEMBER":{"TITLE":"新しいメンバー","PLACEHOLDER":"ユーザーをフィルターまたは招待メールを書く","ADD_EMAIL":"メールを追加","REMOVE":"削除","INVITE":"招待","CHOOSE_ROLE":"役割の選択","PLACEHOLDER_INVITATION_TEXT":"(任意) 招待する際のメッセージを追加できます。新メンバーに素敵な言葉を贈りましょう ;-)","HELP_TEXT":"ユーザーが既にTaigaに登録されている場合、自動的に追加されます。そうでない場合は招待状が送信されます。"},"FEEDBACK":{"TITLE":"我々に教えてください...","COMMENT":"...バグ、提案、何かクールなことやTaigaを利用していて発生した悪夢など(英語で記載してください)","ACTION_SEND":"フィードバックを送る"},"SEARCH":{"TITLE":"検索","PLACEHOLDER_SEARCH":"何をお探しですか?"},"ADD_EDIT_SPRINT":{"TITLE":"新しいスプリント","PLACEHOLDER_SPRINT_NAME":"スプリント名","PLACEHOLDER_SPRINT_START":"見積もり開始","PLACEHOLDER_SPRINT_END":"見積もり終了","ACTION_DELETE_SPRINT":"このスプリントを削除しますか?","TITLE_ACTION_DELETE_SPRINT":"スプリントを削除","LAST_SPRINT_NAME":"最後のスプリントは {{lastSprint}}でした ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"変更をまだ保存していません。\n本当にフォームを閉じてもよろしいですか?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"課題を追加","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"締切日を削除","SUBTITLE":"本当にこの終了日を削除してもよろしいですか?"},"DELETE_SPRINT":{"TITLE":"スプリントを削除"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(任意) 招待する際のメッセージを追加できます。新メンバーに素敵な言葉を贈りましょう ;-)","PLACEHOLDER_TYPE_EMAIL":"メールアドレスを入力","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"このプロジェクトで許可されている最大メンバー数{{maxMembers}}名に達しようとしています。上限を増やしたい場合は管理者にお問い合わせください。","LIMIT_USERS_WARNING_MESSAGE":"このプロジェクトで許可されている最大メンバー数{{maxMembers}}名に達しようとしています。"},"LEAVE_PROJECT_WARNING":{"TITLE":"オーナーが不在となるため、プロジェクトを離脱することができません。","CURRENT_USER_OWNER":{"DESC":"現在、あなたはこのプロジェクトのオーナーです。プロジェクトを離脱する前にオーナー権限を他の誰かに譲渡してください。","BUTTON":"プロジェクトのオーナーを変更"},"OTHER_USER_OWNER":{"DESC":"現在のプロジェクトのオーナーになっているメンバーを削除することはできません。まず新しいプロジェクトオーナーを割り当ててください。","BUTTON":"プロジェクトオーナーの変更をリクエスト"}},"CHANGE_OWNER":{"TITLE":"誰を新しいプロジェクトオーナーにしたいですか?","ADD_COMMENT":"コメントを追加","BUTTON":"新しいプロジェクトオーナーとなるようこのメンバーに要求"},"CONTACT_PROJECT":{"TITLE":"メールを送る","WARNING":"プロジェクト管理者がメールを受信します","PLACEHOLDER":"メッセージを書いてください","SEND":"送信"},"SET_DUE_DATE":{"TITLE":"締切日を設定","PLACEHOLDER_DUE_DATE":"日付を選択","REASON_FOR_DUE_DATE":"締切日の設定理由","PLACEHOLDER_REASON_FOR_DUE_DATE":"なぜこのユーザーストーリーに締切日が必要なのでしょうか?","SUGGESTIONS":{"IN_ONE_WEEK":"1週間以内","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"1ヶ月以内","IN_THREE_MONTHS":"3ヶ月以内"},"TITLE_ACTION_DELETE_DUE_DATE":"締切日を削除"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"締切日を削除","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"プロジェクトとは?","CHOOSE_PROJECT_FROM":"プロジェクトとは?","SUBJECT":"題名","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"検索条件に当てはまるものはありませんでした。"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - エピック {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"ステータス: {{epicStatus }}. 説明: {{epicDescription}}","SECTION_NAME":"エピック","ERROR_UNLINK_RELATED_USERSTORY":"リンクの削除に失敗: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"関連付ける","NEW_USERSTORY":"新しいユーザーストーリー","EXISTING_USERSTORY":"既存のユーザーストーリー","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"題名","SUBJECT_BULK_MODE":"題名 (一括登録)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"このプロジェクトにはユーザーストーリーがまだありません。別のプロジェクトを選択してください。","NO_USERSTORIES_FOUND":"検索条件に当てはまるものはありませんでした。","FILTER_USERSTORIES":"ユーザーストーリーをフィルター","LIGHTBOX_TITLE_BLOKING_EPIC":"ブロックしているエピック","ACTION_DELETE":"エピックの削除"},"US":{"PAGE_TITLE":"{{userStorySubject}} - ユーザーストーリー {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"ステータス: {{userStoryStatus }}. 進捗 {{userStoryProgressPercentage}}% ({{userStoryTotalTasks}}中{{userStoryClosedTasks}}タスク完了). ポイント: {{userStoryPoints}}. 説明: {{userStoryDescription}}","SECTION_NAME":"ユーザーストーリー","LINK_TASKBOARD":"タスクボード","TITLE_LINK_TASKBOARD":"タスクボードに移動","TOTAL_POINTS":"合計ポイント","ADD":"+ 新規ユーザーストーリーを追加する","ADD_BULK":"新規ユーザーストーリーを一括で追加する","PROMOTED":"このユーザーストーリーはこちらの課題から発展:","TITLE_LINK_GO_TO_ISSUE":"課題へ移動","TITLE_DELETE_ACTION":"ユーザーストーリーを削除","LIGHTBOX_TITLE_BLOKING_US":"Blocking us","NOT_ESTIMATED":"見積もりが行われていません","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Taiga Tribeでギグとして発行","PUBLISH_INFO":"詳細表示","PUBLISH_TITLE":"Taiga Tribeへの発行に関する情報","PUBLISHED_AS_GIG":"Taiga Tribeでギグとして発行されたストーリー","EDIT_LINK":"リンクを編集","CLOSE":"閉じる","SYNCHRONIZE_LINK":"Taiga Tribeと同期","PUBLISH_MORE_INFO_TITLE":"このタスクに誰か必要ですか?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"{{user}}によってコメントは削除されました。","COMMENTS_COUNT":"{{comments}}コメント","OLDER_FIRST":"古い順","RECENT_FIRST":"新しい順","COMMENT":"コメント","EDITED_COMMENT":"編集済み:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"新しいコメントをここに入力","SHOW_DELETED":"削除済コメントを表示","HIDE_DELETED":"削除済コメントを隠す","DELETE":"コメントを削除","RESTORE":"コメントを復元","HISTORY":{"TITLE":"アクティビティ"}},"ACTIVITY":{"TITLE":"アクティビティ","ACTIVITIES_COUNT":"{{activities}} アクティビティー","TAGS_ADDED":"追加したタグ:","TAGS_REMOVED":"削除したタグ:","US_POINTS":"{{role}} ポイント","NEW_ATTACHMENT":"新しい添付ファイル:","DELETED_ATTACHMENT":"削除された添付ファイル:","UPDATED_ATTACHMENT":"更新された添付ファイル ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"カスタム属性を作成しました","UPDATED_CUSTOM_ATTRIBUTE":"カスタム属性を更新しました","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"チームからの要求","CLIENT_REQUIREMENT":"お客様からの要求","BLOCKED":"ブロック中","VALUES":{"NOT_SET":"not set","UNASSIGNED":"未割当"},"FIELDS":{"SUBJECT":"題名","DESCRIPTION":"説明","PRIORITY":"優先度","SEVERITY":"深刻度","STATUS":"ステータス","TYPE":"タイプ","ASSIGNED_TO":"割当","ASSIGNED_USERS":"割当ユーザー","DUE_DATE":"締切日","MILESTONE":"スプリント","COLOR":"色"}},"BACKLOG":{"PAGE_TITLE":"バックログ - {{projectName}}","PAGE_DESCRIPTION":"バックログパネルです。次のプロジェクトのユーザーストーリーとスプリントが記録されています:{{projectName}}: {{projectDescription}}","SECTION_NAME":"バックログ","CUSTOMIZE_GRAPH":"バックロググラフのカスタマイズ","CUSTOMIZE_GRAPH_TEXT":"プロジェクトの進化に役立つ素敵なグラフを表示するには、ポイントとスプリントを設定する必要があります。","CUSTOMIZE_GRAPH_ADMIN":"管理","CUSTOMIZE_GRAPH_TITLE":"管理ユーザーでポイントとスプリントを設定してください。","MOVE_US_TO_CURRENT_SPRINT":"現在のスプリントに移動","MOVE_US_TO_LATEST_SPRINT":"最新のスプリントに移動","EMPTY":"バックログが空です!","CREATE_NEW_US":"新規US作成","CREATE_NEW_US_EMPTY_HELP":"新しくユーザーストーリーを作成してください。","EXCESS_OF_POINTS":"ポイント超過","PENDING_POINTS":"保留ポイント","CLOSED_POINTS":"完了","COMPACT_SPRINT":"Compact Sprint","GO_TO_TASKBOARD":"タスクボード {{::name}} へ移動","EDIT_SPRINT":"スプリントを編集","TOTAL_POINTS":"合計","STATUS_NAME":"ステータス名","SORTABLE_FILTER_ERROR":"You can't drop on backlog when filters are open","DOOMLINE":"Project Scope [Doomline]","CHART":{"XAXIS_LABEL":"スプリント","YAXIS_LABEL":"ポイント","OPTIMAL":"Optimal pending points for sprint \"{{sprintName}}\" should be {{value}}","REAL":"スプリント \"{{sprintName}}\" の実際の保留ポイントは {{value}} です","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"タグ表示を固定","SHOW":"タグを表示","HIDE":"タグを非表示"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"バックログを表示","NEW_SPRINT":"あなたの作業速度をもとにした次のスプリントのユーザーストーリー候補。新しくスプリントを作成するにはクリックしてください。","CURRENT_SPRINT":"あなたの作業速度をもとにしたスプリント向けのユーザーストーリー候補。現在のスプリントに追加するにはクリックしてください。"},"TABLE":{"COLUMN_US":"User Stories","TITLE_COLUMN_POINTS":"役割ごとにビューを選択"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"合計
    ポイント","COMPLETED_POINTS":"完了済み
    ポイント","OPEN_TASKS":"オープン
    タスク","CLOSED_TASKS":"完了済み
    タスク","IOCAINE_DOSES":"iocaine
    doses","SHOW_STATISTICS_TITLE":"統計を表示","TOGGLE_BAKLOG_GRAPH":"バーンダウングラフ 表示/非表示","POINTS_PER_ROLE":"役割ごとのポイント"},"SUMMARY":{"PROJECT_POINTS":"プロジェクト
    ポイント","DEFINED_POINTS":"定義された
    ポイント","CLOSED_POINTS":"closed
    points","POINTS_PER_SPRINT":"ポイント /
    スプリント"},"FILTERS":{"TOGGLE":"フィルター表示を固定","HIDE":"フィルターを非表示","SHOW":"フィルターを表示"},"SPRINTS":{"TITLE":"スプリント","DATE":"YYYY年MM月DD日","LINK_TASKBOARD":"スプリントタスクボード","TITLE_LINK_TASKBOARD":"タスクボード{{name}}へ移動","EMPTY":"まだスプリントはありません","WARNING_EMPTY_SPRINT_ANONYMOUS":"このスプリントにはユーザーストーリーがありません","WARNING_EMPTY_SPRINT":"新しいスプリントを始めるために、バックログからストーリーをここにドロップしてください。","TITLE_ACTION_NEW_SPRINT":"新しいスプリントを追加","TEXT_ACTION_NEW_SPRINT":"新しくスプリントをプロジェクトに作成してください。","ACTION_SHOW_CLOSED_SPRINTS":"終了したスプリントを表示","ACTION_HIDE_CLOSED_SPRINTS":"終了したスプリントを非表示"}},"ERROR":{"TEXT1":"何かよくないことが発生したようですがウンパルンパたちは問題なく作業しています。","NOT_FOUND":"見つかりません","NOT_FOUND_TEXT":"Error 404. 参照しようとしているページはすでに存在しません。TAIGAホームページに戻って探してみてください。","PERMISSION_DENIED":"権限がありません","PERMISSION_DENIED_TEXT":"このページへのアクセスが許可されていません。","VERSION_ERROR":"以前、Taigaの中の誰かが変更をしたためウンパルンパたちはあなたの変更を適用できません。リロードをしてもう一度適用してみてください。(現在の変更は失われます)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - スプリントタスクボード - {{projectName}}","PAGE_DESCRIPTION":"スプリント {{sprintName}} ({{startDate}}から{{endDate}}まで) / {{projectName}}。{{completedPercentage}}% ({{totalPoints}}中{{completedPoints}}ポイント) 完了。{{totalTasks}}タスク中{{openTasks}}タスクが未完了。","SECTION_NAME":"タスクボード","TITLE_ACTION_ADD":"新規タスクを追加","TITLE_ACTION_ADD_BULK":"新規タスクを一括で追加する","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"タスクの割当","PLACEHOLDER_CARD_TITLE":"This could be a task","PLACEHOLDER_CARD_TEXT":"ストーリーを分割しタスクとして別管理","TABLE":{"COLUMN":"ユーザーストーリー","TITLE_ACTION_FOLD":"列をたたむ","TITLE_ACTION_UNFOLD":"列をひろげる","TITLE_ACTION_FOLD_ROW":"行をたたむ","TITLE_ACTION_UNFOLD_ROW":"行をひろげる","FIELD_POINTS":"ポイント","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"日","YAXIS_LABEL":"ポイント","OPTIMAL":"Optimal pending points for day {{formattedDate}} should be {{roundedValue}}","REAL":"{{formattedDate}} の実際の保留ポイントは {{roundedValue}} です","DATE":"YYYY年MM月DD日"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - タスク {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"ステータス: {{taskStatus }}. 説明: {{taskDescription}}","SECTION_NAME":"タスク","LINK_TASKBOARD":"タスクボード","TITLE_LINK_TASKBOARD":"タスクボードに移動","PLACEHOLDER_SUBJECT":"新しいタスク名を入力","TITLE_SELECT_STATUS":"ステータス名","OWNER_US":"このタスクはこちらに属しています。","TITLE_LINK_GO_OWNER":"ユーザーストーリーに移動","TITLE_DELETE_ACTION":"タスクを削除","LIGHTBOX_TITLE_BLOKING_TASK":"ブロックしているタスク","FIELDS":{"IS_IOCAINE":"Is iocaine"},"TITLE_ACTION_IOCAINE":"Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!"},"NOTIFICATION":{"OK":"すべてOKです","WARNING":"おっと、何か問題があったようです","WARNING_TEXT":"あなたの変更がセーブされなかったことにウンパルンパたちは悲しんでいます!","SAVED":"ウンパルンパたちがすべての変更を保存しました。","CLOSE":"通知を閉じる","MAIL":"メールでの通知","DESKTOP":"ブラウザアラートを使ったデスクトップ通知","ASK_DELETE":"本当に削除してもよろしいですか?"},"CANCEL_ACCOUNT":{"TITLE":"アカウントを解約する","SUBTITLE":"Taigaを脱会されてしまうのは残念です。楽しくご利用頂いていたことを祈ります。:)","PLACEHOLDER_INPUT_TOKEN":"アカウントトークンをキャンセル","ACTION_LEAVING":"はい、離脱します!","SUCCESS":"ウンパルンパたちがあなたのアカウントを削除しました。"},"CHANGE_EMAIL_FORM":{"TITLE":"メール変更","SUBTITLE":"あとはクリックだけであなたのメールアドレスが更新されます!","PLACEHOLDER_INPUT_TOKEN":"メールトークンを変更","ACTION_CHANGE_EMAIL":"メール変更","SUCCESS":"ウンパルンパたちがあなたのメールアドレスを更新しました"},"ISSUES":{"PAGE_TITLE":"課題 - {{projectName}}","PAGE_DESCRIPTION":"課題一覧パネル {{projectName}}: {{projectDescription}}","SECTION_NAME":"課題","ACTION_NEW_ISSUE":"+ 新規課題","ACTION_PROMOTE_TO_US":"ユーザーストーリーに変更する","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"この課題はこちらのユーザーストーリーへ発展:","EXTERNAL_REFERENCE":"課題の作成元: ","GO_TO_EXTERNAL_REFERENCE":"originへ移動","ACTION_DELETE":"課題を削除","LIGHTBOX_TITLE_BLOKING_ISSUE":"ブロックしている課題","LINK_TASKBOARD":"タスクボード","TITLE_LINK_TASKBOARD":"タスクボードに移動","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"優先度","SEVERITY":"深刻度","TYPE":"タイプ"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"この課題を新しいユーザーストーリーに変更","MESSAGE":"この課題から新しいユーザーストーリーを作成しますか?"},"TABLE":{"COLUMNS":{"TYPE":"タイプ","SEVERITY":"深刻度","PRIORITY":"優先度","SUBJECT":"題名","VOTES":"投票","STATUS":"ステータス","MODIFIED":"変更済み","ASSIGNED_TO":"割当"},"TITLE_ACTION_CHANGE_STATUS":"ステータスを変更","TITLE_ACTION_ASSIGNED_TO":"割当","BLOCKED":"ブロック中","EMPTY":{"TITLE":"レポートが必要な課題はありません :-)","SUBTITLE":"課題は見つかりましたか?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - 課題 {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"ステータス: {{issueStatus }}. タイプ: {{issueType}}, 優先度: {{issuePriority}}. 深刻度: {{issueSeverity}}. 説明: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"かんばん - {{projectName}}","PAGE_DESCRIPTION":"かんばんパネルです。次のプロジェクトのユーザーストーリーが記載されています:{{projectName}}: {{projectDescription}}","SECTION_NAME":"かんばん","TITLE_ACTION_FOLD":"列をたたむ","TITLE_ACTION_UNFOLD":"列をひろげる","TITLE_ACTION_ADD_US":"新規ユーザーストーリーを追加","TITLE_ACTION_ADD_BULK":"新規ユーザーストーリーを一括追加","ACTION_SHOW_ARCHIVED":"アーカイブ済を表示","ACTION_HIDE_ARCHIVED":"アーカイブ済を隠す","HIDDEN_USER_STORIES":"このステータスのユーザーストーリーはデフォルトで非表示となります","PLACEHOLDER_CARD_TITLE":"あなたのユーザーストーリーです","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"検索 - {{projectName}}","PAGE_DESCRIPTION":"ユーザーストーリー、課題、タスク、Wikiページ、その他何でもこのプロジェクト内を検索: {{projectName}}: {{projectDescription}}","FILTER_EPICS":"エピック","FILTER_USER_STORIES":"User Stories","FILTER_ISSUES":"課題","FILTER_TASKS":"タスク","FILTER_WIKI":"Wikiページ","PLACEHOLDER_SEARCH":"検索...","TITLE_ACTION_SEARCH":"検索","EMPTY_TITLE":"It looks like nothing was found with your search criteria.","EMPTY_DESCRIPTION":"Maybe try one of the tabs above or search again"},"TEAM":{"PAGE_TITLE":"チーム - {{projectName}}","PAGE_DESCRIPTION":"The team panel to show all the members of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"チーム","PLACEHOLDER_INPUT_SEARCH":"フルネームで検索する","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"完了した課題","COLUMN_IOCAINE":"Iocaine Drinker","EXPLANATION_COLUMN_IOCAINE":"Iocaine doses ingested","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki ページを編集しました","COLUMN_BUG_HUNTER":"バグハンター","EXPLANATION_COLUMN_BUG_HUNTER":"報告されている課題","COLUMN_NIGHT_SHIFT":"ナイトシフト","EXPLANATION_COLUMN_NIGHT_SHIFT":"完了タスク","COLUMN_TOTAL_POWER":"Total Power","EXPLANATION_COLUMN_TOTAL_POWER":"合計ポイント","SECTION_TITLE_TEAM":"チーム >","SECTION_FILTER_ALL":"すべて","CONFIRM_LEAVE_PROJECT":"本当にこのプロジェクトから脱退していいですか?","ACTION_LEAVE_PROJECT":"このプロジェクトから離脱する"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[最大サイズ: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"ユーザー設定","USER_PROFILE":"ユーザープロフィール","CHANGE_PASSWORD":"パスワード変更","EMAIL_NOTIFICATIONS":"メール通知","DESKTOP_NOTIFICATIONS":"デスクトップ通知","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"メール通知","COLUMN_PROJECT":"プロジェクト","COLUMN_RECEIVE_ALL":"すべて受信","COLUMN_ONLY_INVOLVED":"関連するものだけ","COLUMN_NO_NOTIFICATIONS":"通知なし","OPTION_ALL":"すべて","OPTION_INVOLVED":"Involved","OPTION_NONE":"なし"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"プロジェクト","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"プロジェクト"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"デフォルトのイメージを使用する","ACTION_DELETE_ACCOUNT":"Taigaアカウントを削除","ACTION_DOWNLOAD_PROFILE":"Taigaプロフィールをダウンロード","CHANGE_EMAIL_SUCCESS":"メールボックスを確認してください!
    新しいメールアドレスを設定するための手順を送信しました。","CHANGE_PHOTO":"写真を変更","FIELD":{"USERNAME":"ユーザー名","EMAIL":"メール","FULL_NAME":"フルネーム","PLACEHOLDER_FULL_NAME":"フルネームを入力 (例. Íñigo Montoya)","BIO":"自己紹介(最大で全角105文字まで)","PLACEHOLDER_BIO":"あなたについて教えてください","LANGUAGE":"言語","LANGUAGE_DEFAULT":"-- デフォルトの言語を使用 --","THEME":"テーマ","THEME_DEFAULT":"-- デフォルトのテーマを使用 --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"{{lastModifiedDate}} に最後に編集がありました。(合計 {{totalEditions}} 件) 内容: {{ wikiPageContent }}","DATETIME":"YYYY年MM月DD日 HH時mm分","REMOVE":"このWikiページを削除","DELETE_LIGHTBOX_TITLE":"Wikiページを削除","DELETE_LINK_TITLE":"Wikiリンクを削除","NAVIGATION":{"HOME":"メインページ","SECTION_NAME":"ブックマーク","ACTION_ADD_LINK":"ブックマークを追加する","ALL_PAGES":"全Wikiページ"},"SUMMARY":{"TIMES_EDITED":"編集
    回数","LAST_EDIT":"最終
    編集","LAST_MODIFICATION":"最後の変更"},"SECTION_PAGES_LIST":"全ページ","PAGES_LIST_COLUMNS":{"TITLE":"タイトル","EDITIONS":"Editions","CREATED":"作成","MODIFIED":"変更済み","CREATOR":"作者","LAST_MODIFIER":"最後の変更者"}},"HINTS":{"SECTION_NAME":"ヒント","LINK":"利用方法を知りたい場合はサポートページを訪れてください","LINK_TITLE":"サポートページへ行く","HINT1_TITLE":"プロジェクトのインポートやエクスポートができるのをご存知でしたか?","HINT1_TEXT":"ひとつのTaigaアカウントの全てのデータを抽出し、別のアカウントへ移すことができます。","HINT2_TITLE":"カスタムフィールドが作れるのはご存知ですか?","HINT2_TEXT":"Teams can now create custom fields as a flexible means to enter specific data useful for their particular workflow.","HINT3_TITLE":"あなたに最も関連性のあるプロジェクトを見つけやすくするために順序を入れ替えてみましょう。","HINT3_TEXT":"最上部にあるダイレクトアクセスバーに10プロジェクトまで表示されます。","HINT4_TITLE":"何をしているのか忘れましたか?","HINT4_TEXT":"ご心配なさらないでください。ダッシュボードではあなたが取り組んだ順番にオープンなタスク、課題、ユーザーストーリーが表示されます。"},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} さんが新しい添付ファイル {{obj_name}} をアップロードしました","US_CREATED":"{{username}} さんが新しいユーザーストーリー {{obj_name}} を作成しました( {{project_name}} )","ISSUE_CREATED":"{{username}} さんが新しい課題 {{obj_name}} を作成しました( {{project_name}} )","TASK_CREATED":"{{username}} さんが新しいタスク {{obj_name}} を作成しました( {{project_name}} )","TASK_CREATED_WITH_US":"{{username}} さんが新しいタスク {{obj_name}} をユーザーストーリー {{us_name}} に作成しました( {{project_name}} )","WIKI_CREATED":"{{username}} さんが新しいwikiページ {{obj_name}} を作成しました( {{project_name}} )","MILESTONE_CREATED":"{{username}} さんがスプリント {{obj_name}} を作成しました( {{project_name}} )","EPIC_CREATED":"{{username}} さんが {{project_name}} で新しいエピック {{obj_name}} を作成しました","EPIC_RELATED_USERSTORY_CREATED":"{{username}} さんが {{project_name}} でユーザーストーリー {{related_us_name}} をエピック {{epic_name}} に関連付けました","NEW_PROJECT":"{{username}} がプロジェクト {{project_name}} を作成しました","MILESTONE_UPDATED":"{{username}} がスプリント {{obj_name}} を更新しました","US_UPDATED":"{{username}} さんがユーザーストーリー {{obj_name}} の属性 \"{{field_name}}\" を更新しました ","US_UPDATED_WITH_NEW_VALUE":"{{username}} さんがユーザーストーリー {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました","US_UPDATED_POINTS":"{{username}} さんがユーザーストーリー {{obj_name}} における役割 '{{role_name}}' のポイントを {{new_value}} に更新しました","ISSUE_UPDATED":"{{username}} さんが課題 {{obj_name}} の属性 \"{{field_name}}\" を更新しました","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} さんが課題 {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました","TASK_UPDATED":"{{username}} が {{obj_name}} の {{field_name}} を {{new_value}} に更新しました","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} が {{obj_name}} の {{field_name}} を {{new_value}} に更新しました","TASK_UPDATED_WITH_US":"{{username}} さんがユーザーストーリー {{us_name}} のタスク {{obj_name}} の属性 \"{{field_name}}\" を更新しました","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} さんがユーザーストーリー {{us_name}} のタスク {{obj_name}} における属性 \"{{field_name}}\" を {{new_value}} に更新しました","WIKI_UPDATED":"{{username}} さんがWikiページ {{obj_name}} を更新しました","EPIC_UPDATED":"{{username}} さんがエピック {{obj_name}} の属性 \"{{field_name}}\" を更新しました","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} さんがエピック {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} さんが エピック {{obj_name}} の \"{{field_name}}\" を に更新しました","NEW_COMMENT_US":"{{username}} さんがユーザーストーリー {{obj_name}} にコメントしました","NEW_COMMENT_ISSUE":"{{username}} さんが課題 {{obj_name}} にコメントしました","NEW_COMMENT_TASK":"{{username}} さんがタスク {{obj_name}} にコメントしました","NEW_COMMENT_EPIC":"{{username}} さんがエピック {{obj_name}} にコメントしました","NEW_MEMBER":"{{project_name}} に新規メンバーが追加されました","US_ADDED_MILESTONE":"{{username}} さんがユーザーストーリー {{obj_name}} に {{sprint_name}} を追加しました","US_MOVED":"{{username}} さんがユーザーストーリー {{obj_name}} を移動しました","US_REMOVED_FROM_MILESTONE":"{{username}} さんがユーザーストーリー {{obj_name}} をバックログに追加しました","BLOCKED":"{{username}} さんが {{obj_name}} をブロックしました","UNBLOCKED":"{{username}} さんが {{obj_name}} のブロックを解除しました","NEW_USER":"{{username}} さんが Taiga に参加しました","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"課題","TASK":"タスク"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"外部アプリでは認証が必要です","PAGE_DESCRIPTION":"外部アプリでは認証が必要です","AUTHORIZATION_REQUEST":"{{application}} にあなたのTaigaアカウントを使用することを許可しますか?","LOGIN_WITH_ANOTHER_USER":"別のユーザーでログイン","AUTHORIZE_APP":"アプリを許可","CANCEL":"キャンセル"},"JOYRIDE":{"NAV":{"NEXT":"次へ","BACK":"戻る","SKIP":"スキップ","DONE":"完了"},"DASHBOARD":{"STEP1":{"TITLE":"あなたのプロジェクト","TEXT":"ようこそ!ここであなたが関わっているプロジェクトが見つかります。"},"STEP2":{"TITLE":"取り組んでいる作業","TEXT":"あなたが取り組んでいるユーザーストーリー、タスク、課題です。"},"STEP3":{"TITLE":"フォロー中","TEXT1":"そして、ここでは、あなたが知りたいプロジェクトの内容が見みつかるでしょう。","TEXT2":"あなたはもうTaigaで作業しています ;)"},"STEP4":{"TITLE":"さあ始めましょう","TEXT1":"最初のTaigaプロジェクトを作成して始めてみましょう。","TEXT2":"グッドラック!"}},"BACKLOG":{"STEP1":{"TITLE":"プロジェクト概要","TEXT1":"ここではあなたのプロジェクトの進捗を見ることができます。","TEXT2":"管理でプロジェクトの全ての設定を変更できます。"},"STEP2":{"TITLE":"プロダクト バックログ","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"スプリント","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"User Stories","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"ワークフローのカスタマイズ","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"ユーザーストーリー&タスク","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"ユーザーストーリーを追加中","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"グッドラック!"}}},"DISCOVER":{"PAGE_TITLE":"プロジェクトを探す - Taiga","PAGE_DESCRIPTION":"検索できるTaigaの公開プロジェクトディレクトリ。バックログ、タイムライン、課題、そしてチームを探してみてください。最も人気な、あるいは活気のあるプロジェクトも見つけられます。カンバンやスクラムでフィルターしてみるのも良いかもしれません。","DISCOVER_TITLE":"プロジェクトを探す","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# 件のプロジェクトが見つかりました}}","MOST_ACTIVE":"最も活発なプロジェクト","MOST_ACTIVE_EMPTY":"アクティブなプロジェクトはまだありません。","MOST_LIKED":"最も好まれているプロジェクト","MOST_LIKED_EMPTY":"「いいね」されたプロジェクトはまだありません","VIEW_MORE":"もっと見る","FEATURED":"注目プロジェクト","EMPTY":"該当するプロジェクトがありませんでした。
    検索条件を変えて再度試してみてください!","FILTERS":{"ALL":"すべて","KANBAN":"かんばん","SCRUM":"スクラム","PEOPLE":"人","WEEK":"先週","MONTH":"先月","YEAR":"昨年","ALL_TIME":"すべて","CLEAR":"フィルターをクリア"},"SEARCH":{"PAGE_TITLE":"検索結果 - プロジェクトを探す - Taiga","PAGE_DESCRIPTION":"検索できるTaigaの公開プロジェクトディレクトリ。バックログ、タイムライン、課題、そしてチームを探してみてください。最も人気な、あるいは活気のあるプロジェクトも見つけられます。カンバンやスクラムでフィルターしてみるのも良いかもしれません。","INPUT_PLACEHOLDER":"入力してください","ACTION_TITLE":"検索","RESULTS":"検索結果"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-ko.json b/dist/v-1547534999795/locales/taiga/locale-ko.json deleted file mode 100644 index 7335b75..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-ko.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"예","NO":"아니오","OR":"또는","I_GET_IT":"OK, I get it","LOADING":"불러오는 중...","DATE":"YYYY MMM DD","DATETIME":"YYYY MMM DD HH:mm","SAVE":"저장","CANCEL":"취소","ACCEPT":"확인","DELETE":"삭제하기","UNLINK":"연결끊기","CREATE":"생성하기","ADD":"추가하기","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"수정하기","DRAG":"드래그","TAG_LINE":"당신의 프로젝트 관리를 위한 민첩하고 무료인 오픈소스 도구","TAG_LINE_2":"프로젝트에 사랑을 담아","BLOCK":"차단","BLOCK_TITLE":"조건을 만족하지 않는 경우 이 아이템을 차단하세요.","BLOCKED":"차단됨","UNBLOCK":"차단 해제","UNBLOCK_TITLE":"차단 취소","BLOCKED_NOTE":"왜 차단되었나요?","BLOCKED_REASON":"이유를 적어주시겠어요?","CREATED_BY":"{{fullDisplayName}} 님이 생성","CLOSE":"완료","GO_HOME":"첫 화면으로 가기","PLUGINS":"플러그인","ONE_ITEM_LINE":"한 줄마다 하나씩...","NEW_BULK":"여러개 생성하기","SUBTASKS":"Subtasks","PREVIOUS":"이전","NEXT":"다음","LOGOUT":"로그아웃","EXTERNAL_USER":"외부 사용자","GENERIC_ERROR":"움파룸파가 {{error}} 라고 합니다.","IOCAINE_TEXT":"이 회원은 이 일에 조금 압박감을 ​​느낍니다. 당신의 도움이 필요한 시간이 지나면 아이오케인 독에 면역될 것 입니다. 지금 당장 포옹이 필요할 수도 있어요.","CLIENT_REQUIREMENT":"고객 요구 사항은 이전에 예상하지 않았던 새로운 요구 사항이며 프로젝트의 일부가 되어야만 합니다.","TEAM_REQUIREMENT":"팀 요구 사항은 프로젝트에 반드시 있어야하지만 클라이언트에게는 비용이 없어야합니다.","OWNER":"프로젝트 소유자","CAPSLOCK_WARNING":"조심하세요! 대/소문자를 구분하는 입력란에 대문자를 사용하고 있습니다.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"정말로 수정 모드를 닫겠습니까?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"저장하지 않고 편집 모드를 닫으면 모든 변경 사항이 손실됩니다.","RELATED_USERSTORIES":"연결된 유저 스토리","CARD":{"ASSIGN_TO":"다음으로 할당","EDIT":"카드 수정","DELETE":"Delete card","DELETE_ISSUE":"이슈 삭제","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"값이 유효하지 않습니다","TYPE_EMAIL":"정확한 이메일이어야 합니다.","TYPE_URL":"정확한 URL이어야 합니다.","TYPE_URLSTRICT":"정확한 URL이어야 합니다.","TYPE_NUMBER":"정확한 숫자만 적어 주세요","TYPE_DIGITS":"숫자만 입력해 주세요","TYPE_DATEISO":"유효한 날짜(YYYY-MM-DD)여야 합니다.","TYPE_ALPHANUM":"알파벳과 숫자만 써 주세요.","TYPE_PHONE":"전화번호를 정확히 적어 주세요.","NOTNULL":"이 값은 비워 둘 수 없습니다.","NOT_BLANK":"이 값은 비워 둘 수 없습니다.","REQUIRED":"필수 항목입니다.","REGEXP":"값이 유효하지 않습니다","MIN":"이 값은 %s 와 같거나 커야 합니다.","MAX":"이 값은 %s 와 같거나 작아야 합니다.","RANGE":"이 값은 %와 %s 사이여야 합니다.","MIN_LENGTH":"너무 짧습니다. %s 글자 이상 입력해주세요.","MAX_LENGTH":"너무 깁니다. %s 글자 이하로 입력해주세요.","RANGE_LENGTH":"글자수가 잘못되었습니다. %s와 %s의 사이 글자수여야 합니다.","MIN_CHECK":"%s 개 이상 선택해주세요.","MAX_CHECK":"%s 개 이하로 선택해주세요.","RANGE_CHECK":"%s 값과 %s 값 중에 선택해주세요.","EQUAL_TO":"이 값이 일치해야 합니다.","LINEWIDTH":"하나 또는 그 이상의 줄들이 너무 깁니다. %s 이하의 문자로 다시 시도해주세요.","PIKADAY":"날짜 형식이 올바르지 않습니다. DD MMM YYYY 형식을 사용해주세요. (예, 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"YYYY MMM DD","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"이전 달","NEXT_MONTH":"다음 달","MONTHS":{"JAN":"1월","FEB":"2월","MAR":"3월","APR":"4월","MAY":"5월","JUN":"6월","JUL":"7월","AUG":"8월","SEP":"9월","OCT":"10월","NOV":"11월","DEC":"12월"},"WEEK_DAYS":{"SUN":"일요일","MON":"월요일","TUE":"화요일","WED":"수요일","THU":"목요일","FRI":"금요일","SAT":"토요일"},"WEEK_DAYS_SHORT":{"SUN":"일","MON":"월","TUE":"화","WED":"수","THU":"목","FRI":"금","SAT":"토"}},"SEE_USER_PROFILE":"{{username }}의 프로필 보기","USER_STORY":"유저 스토리","TASK":"태스크","ISSUE":"이슈","EPIC":"에픽","TAGS":{"PLACEHOLDER":"태그 입력","DELETE":"태그 삭제하기","ADD":"태그 추가하기"},"DESCRIPTION":{"EMPTY":"공백으로 남기지 마세요. 재미없어요. 뭐라도 좀 적어보세요...","NO_DESCRIPTION":"아직 설명이 없습니다"},"FIELDS":{"SUBJECT":"주제","NAME":"이름","URL":"URL","DESCRIPTION":"설명","VALUE":"값","SLUG":"슬러그","COLOR":"색","IS_CLOSED":"완료했나요?","STATUS":"상태","TYPE":"타입","SEVERITY":"심각도","PRIORITY":"우선순위","ASSIGNED_TO":"할당됨","ASSIGNED_USERS":"Assigned users","POINTS":"포인트","IS_BLOCKED":"차단됨","REF":"참조","VOTES":"투표","SPRINT":"스프린트","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"전체"},"ASSIGNED_TO":{"NOT_ASSIGNED":"할당 되지 않음","ASSIGN":"할당","DELETE_ASSIGNMENT":"할당 삭제하기","REMOVE_ASSIGNED":"할당 삭제","TOO_MANY":"사용자가 너무 많아요. 필터링 좀....","CONFIRM_UNASSIGNED":"어사인 하지 않은 상태로 둘 건가요?","TITLE_ACTION_EDIT_ASSIGNMENT":"할당 수정하기","SELF":"나에게 할당하기"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"완료함","OPEN":"열림"},"WATCHERS":{"WATCHERS":"구독중인 사람들","ADD":"구독자 추가","TITLE_ADD":"프로젝트 회원을 구독자 목록에 추가","DELETE":"구독자 삭제하기","TITLE_LIGHTBOX_DELETE_WARTCHER":"구독자 삭제..."},"WATCH_BUTTON":{"WATCH":"구독","WATCHING":"구독중","UNWATCH":"구독 취소","WATCHERS":"구독중인 사람들","BUTTON_TITLE":"구독/구독 취소","COUNTER_TITLE":"{total, plural, one{one watcher} other{# 명이 구독중}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"이 아이템 공감/비공감","COUNTER_TITLE":"{total, plural, one{one vote} other{# 명의 찬성}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"사용자 정의 필드","SAVE":"사용자 정의 필드 저장하기","EDIT":"사용자 정의 필드 수정하기","DELETE":"사용자 정의 속성 삭제하기","CONFIRM_DELETE":"이 사용자 정의 필드의 모든 값이 삭제된다는 점을 기억하십시오.\n계속 하시겠습니까?"},"FILTERS":{"INPUT_PLACEHOLDER":"제목 또는 참조","TITLE_ACTION_FILTER_BUTTON":"검색하기","TITLE":"필터","TITLE_ACTION_SEARCH":"검색","ACTION_SAVE_CUSTOM_FILTER":"커스컴 필터 저장하기","PLACEHOLDER_FILTER_NAME":"필터 이름을 쓰고 엔터키를 누르세요","APPLIED_FILTERS_NUM":"적용된 필터","CATEGORIES":{"TYPE":"타입","STATUS":"상태","SEVERITY":"심각도","PRIORITIES":"우선순위","TAGS":"태그","ASSIGNED_TO":"할당됨","ASSIGNED_USERS":"Assigned users","ROLE":"역할","CREATED_BY":"생성함","CUSTOM_FILTERS":"사용자 정의 필터","EPIC":"에픽"}},"WYSIWYG":{"CODE_SNIPPET":"코드 스니펫","DB_CLICK":"더블클릭하여 수정","SELECT_LANGUAGE_PLACEHOLDER":"언어 선택","SELECT_LANGUAGE_REMOVE_FORMATING":"포매팅 제거","OUTDATED":"다른 사용자가 수정하는 동안 변경하였습니다. 반영하기 전에 액티비티 탭에서 새로운 버전을 확인하세요.","MARKDOWN_HELP":"마크다운 문법 도움말"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"에픽","VIEW_EPICS":"에픽 보기","ADD_EPICS":"에픽 추가","MODIFY_EPICS":"에픽 수정하기","COMMENT_EPICS":"에픽 댓글","DELETE_EPICS":"에픽 삭제하기"},"SPRINTS":{"NAME":"스프린트","VIEW_SPRINTS":"스프린트 보기","ADD_SPRINTS":"스프린트 추가하기","MODIFY_SPRINTS":"스프린트 수정하기","DELETE_SPRINTS":"스프린트 삭제하기"},"USER_STORIES":{"NAME":"유저 스토리","VIEW_USER_STORIES":"유저 스토리 보기","ADD_USER_STORIES":"유저 스토리 추가하기","MODIFY_USER_STORIES":"유저 스토리 수정하기","COMMENT_USER_STORIES":"유저 스토리 댓글","DELETE_USER_STORIES":"유저 스토리 삭제하기"},"TASKS":{"NAME":"태스크","VIEW_TASKS":"태스크 보기","ADD_TASKS":"태스크 추가하기","MODIFY_TASKS":"태스크 수정하기","COMMENT_TASKS":"태스크 댓글","DELETE_TASKS":"태스크 삭제하기"},"ISSUES":{"NAME":"이슈","VIEW_ISSUES":"이슈 보기","ADD_ISSUES":"이슈 추가하기","MODIFY_ISSUES":"이슈 수정하기","COMMENT_ISSUES":"이슈 댓글","DELETE_ISSUES":"이슈 삭제하기"},"WIKI":{"NAME":"위키","VIEW_WIKI_PAGES":"위키 보기","ADD_WIKI_PAGES":"위키 페이지 추가하기","MODIFY_WIKI_PAGES":"위키 페이지 수정하기","DELETE_WIKI_PAGES":"위키 페이지 삭제하기","VIEW_WIKI_LINKS":"위키 링크 보기","ADD_WIKI_LINKS":"위키 링크 추가하기","DELETE_WIKI_LINKS":"위키 링크 삭제하기"}}},"LOGIN":{"PAGE_TITLE":"로그인 - 타이가","PAGE_DESCRIPTION":"타이가에 로그인하세요. 타이가는 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요."},"AUTH":{"INVITED_YOU":"이 프로젝트에 참여하도록 초대받았습니다","NOT_REGISTERED_YET":"아직 가입을 안 했나요?","REGISTER":"회원 가입","CREATE_ACCOUNT":"무료 계정을 생성하세요"},"LOGIN_COMMON":{"HEADER":"타이가 계정을 이미 등록했습니다","PLACEHOLDER_AUTH_NAME":"아이디나 이메일 (대소문자 구분)","LINK_FORGOT_PASSWORD":"비밀번호를 잊었나요?","TITLE_LINK_FORGOT_PASSWORD":"비밀번호를 잊었나요?","ACTION_ENTER":"들어가기","ACTION_SIGN_IN":"로그인","PLACEHOLDER_AUTH_PASSWORD":"비밀번호 (대소문자 구분)","ALT_LOGIN":"또는 다른 방법으로 로그인"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"움파룸파가 말하길, 아이디나 이메일, 비밀번호 중 하나가 틀렸다고 하네요.","SUCCESS":"움파룸파가 즐거워 합니다. 타이가에 어서 오세요."},"REGISTER":{"PAGE_TITLE":"등록 - 타이가","PAGE_DESCRIPTION":"타이가에 계정을 만드세요. 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요."},"REGISTER_FORM":{"TITLE":"타이가 계정을 등록하기(무료)","PLACEHOLDER_NAME":"아이디를 입력하세요 (대소문자 구분)","PLACEHOLDER_FULL_NAME":"전체 이름을 넣으세요","PLACEHOLDER_EMAIL":"이메일","PLACEHOLDER_PASSWORD":"비밀번호 설정하기 (대소문자 구분)","ACTION_SIGN_UP":"등록하기","TITLE_LINK_LOGIN":"로그인","LINK_LOGIN":"이미 등록하셨나요? 로그인"},"FORGOT_PASSWORD":{"PAGE_TITLE":"비밀번호 찾기 - 타이가","PAGE_DESCRIPTION":"새 비밀번호를 발급받을 아이디나 이메일을 입력하세요."},"FORGOT_PASSWORD_FORM":{"TITLE":"혹시 비밀번호를 잊었나요?","SUBTITLE":"새로운 암호를 설정하기 위해서, 아이디나 이메일을 입력하세요.","PLACEHOLDER_FIELD":"아이디나 이메일","ACTION_RESET_PASSWORD":"비밀번호 재설정하기","LINK_CANCEL":"아니요 되돌아갈래요. 기억이 났어요.","SUCCESS_TITLE":"메일함을 확인해보세요!","SUCCESS_TEXT":"이메일 보관함을 확인하세요!
    새 비밀번호를 설정할 수 있는 방법을 이메일로 알려드렸습니다.","ERROR":"움파룸파가 말하길, 아직 등록되지 않은 사용자라고 하네요."},"CHANGE_PASSWORD":{"PAGE_TITLE":"비밀번호 변경하기 - 타이가","SECTION_NAME":"비밀번호 변경하기","FIELD_CURRENT_PASSWORD":"현재 비밀번호","PLACEHOLDER_CURRENT_PASSWORD":"현재 비밀번호 (아직 설정한 적이 없다면 비워두세요)","FIELD_NEW_PASSWORD":"새 비밀번호","PLACEHOLDER_NEW_PASSWORD":"새 비밀번호를 입력하세요","FIELD_RETYPE_PASSWORD":"새 비밀번호를 한 번 더 입력하세요","PLACEHOLDER_RETYPE_PASSWORD":"새 비밀번호를 한 번 더 입력하세요","ERROR_PASSWORD_MATCH":"비밀번호가 일치하지 않습니다"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"타이가 패쓰 생성하기","SUBTITLE":"아참, 철분이 많은 음식을 먹으면 기억력에 좋다네요. ^^","PLACEHOLDER_NEW_PASSWORD":"새 비밀번호","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"새 비밀번호를 한 번 더 입력하세요","ACTION_RESET_PASSWORD":"비밀번호 재설정하기","ERROR":"움파룸파가 암호를 복구하지 못했습니다. 다시 한 번 시도해 주세요.","SUCCESS":"움파룸파가 새 비밀번호를 저장했습니다.
    로그인해보세요."},"INVITATION":{"PAGE_TITLE":"초대 수락 - 타이가","PAGE_DESCRIPTION":"타이가에서 온 프로젝트 초대를 수락하세요. 타이가는 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"움파룸파가, 당신의 초대장을 못 찾았습니다.","SUCCESS":"{{project_name}} 프로젝트에 오신 것을 환영합니다."},"HOME":{"PAGE_TITLE":"홈페이지 - 타이가","PAGE_DESCRIPTION":"타이가 홈페이지에서는 여러분의 프로젝트 뿐만 아니라 여러분이 관련된 유저 스토리, 태스크, 이슈를 확인할 수 있습니다.","EMPTY_WORKING_ON":"비어있는 것 같아요. 아닌가요?
    타이가로 일을 시작하고 당신이 일하게 될 스토리, 태스크, 이슈들을 확인해보세요.","EMPTY_WATCHING":"프로젝트의 유저 스토리, 태스크 그리고 이슈들을 팔로우하여 변경사항이 있을 때마다 알림을 받으세요 :)","EMPTY_PROJECT_LIST":"아직 프로젝트가 없습니다.","WORKING_ON_SECTION":"일 하는 중","WATCHING_SECTION":"구독중","DASHBOARD":"프로젝트 대시보드"},"EPICS":{"TITLE":"에픽","SECTION_NAME":"에픽","EPIC":"에픽","PAGE_TITLE":"에픽 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트의 에픽 목록 {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ 에픽 추가","UNASSIGNED":"할당되지 않음"},"EMPTY":{"TITLE":"아직 에픽이 없는 것 같네요.","EXPLANATION":"에픽은 유저 스토리를 포함하는 상위 레벨 항목입니다.
    에픽은 계층 구조의 최상위에 있으며 유저 스토리를 그룹화하는데 사용할 수 있습니다.","HELP":"에픽에 대하여 더 배우기"},"TABLE":{"VOTES":"투표","NAME":"이름","PROJECT":"프로젝트","SPRINT":"스프린트","ASSIGNED_TO":"할당됨","STATUS":"상태","PROGRESS":"진행","VIEW_OPTIONS":"옵션 보기"},"CREATE":{"TITLE":"새로운 에픽 만들기","PLACEHOLDER_DESCRIPTION":"다른 사람들이 이 에픽에 대해 좀 더 쉽게 이해할 수 있도록 설명을 추가해주세요.","TEAM_REQUIREMENT":"팀 요구 사항","CLIENT_REQUIREMENT":"고객 요구 사항","BLOCKED":"차단됨","BLOCKED_NOTE_PLACEHOLDER":"왜 이 에픽이 차단되었나요?","CREATE_EPIC":"에픽 만들기"}},"PROJECTS":{"PAGE_TITLE":"내 프로젝트 - 타이가","PAGE_DESCRIPTION":"프로젝트 목록입니다. 새 프로젝트를 만들거나 순서를 바꿀 수 있습니다.","MY_PROJECTS":"내 프로젝트"},"ATTACHMENT":{"SECTION_NAME":"첨부","TITLE":"{{ fileName }} 파일은 {{ date }}에 업로드되었습니다.","LIST_VIEW_MODE":"목록으로 보기","GALLERY_VIEW_MODE":"갤러리로 보기","DESCRIPTION":"간단한 설명을 입력하세요","DEPRECATED":"(지원 안함)","DEPRECATED_FILE":"더 이상 지원하지 않도록 할까요?","ADD":"첨부 파일 추가. {{maxFileSizeMsg}}","DROP":"여기에 첨부파일을 끌어 놓으세요!","SHOW_DEPRECATED":"+ 더 이상 필요 없는 첨부파일 보기","HIDE_DEPRECATED":"- 더 이상 필요 없는 첨부파일 숨기기","COUNT_DEPRECATED":"({{ counter }} 지원 안함)","MAX_UPLOAD_SIZE":"업로드 가능한 최대 용량은 {{maxFileSize}}","DATE":"YYYY MMM DD [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"'{{fileName}}'를 업로드할 수 없었습니다. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"첨부파일 삭제하기","MSG_LIGHTBOX_DELETE_ATTACHMENT":"첨부 파일 '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"삭제할 수 없었습니다: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요."},"PAGINATION":{"PREVIOUS":"이전","NEXT":"다음"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"값 수정하기","TITLE_ACTION_DELETE_VALUE":"값 삭제하기","TITLE_ACTION_DELETE_TAG":"태그 삭제하기"},"HELP":"도움이 필요하다면 고객 지원 페이지를 확인하세요","PROJECT_DEFAULT_VALUES":{"TITLE":"기본 값","SUBTITLE":"선택된 모든 항목을 모두 초기값으로 설정"},"MEMBERSHIPS":{"TITLE":"회원 관리","PAGE_TITLE":"팀원 - {{projectName}}","ADD_BUTTON":"회원 추가하기","ADD_BUTTON_TITLE":"회원 추가하기","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"이 프로젝트는 허용된 최대 회원 수 ({{members}}) 명에 도달하였습니다. 더 많은 최대 회원 수를 할당받고 싶다면 관리자에게 문의하세요."},"PROJECT_EXPORT":{"TITLE":"내보내기","SUBTITLE":"백업 혹은 새 프로젝트를 만들기 위해 현재 프로젝트의 데이터를 내 컴퓨터에 저장합니다. ","EXPORT_BUTTON":"내보내기","EXPORT_BUTTON_TITLE":"프로젝트 내보내기","LOADING_TITLE":"덤프 파일을 생성하고 있습니다.","DUMP_READY":"덤프 파일을 모두 만들었습니다.","LOADING_MESSAGE":"이 페이지를 닫지 마세요.","ASYNC_MESSAGE":"작업이 끝나면 이메일로 알려드릴게요.","SYNC_MESSAGE":"자동으로 다운로드가 시작되지 않는다면 여기를 클릭하세요.","ERROR":"움파룸파가 덤프 파일을 만들 수 없었습니다. 다시 한 번 시도해주세요.","ERROR_BUSY":"죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?"},"MODULES":{"TITLE":"모듈","EPICS":"에픽","EPICS_DESCRIPTION":"프로젝트의 가장 전략적인 부분을 시각화하고 관리합니다.","BACKLOG":"백로그","BACKLOG_DESCRIPTION":"유저 스토리를 관리하여 다가오는 작업과 우선 순위가 지정된 작업을 체계적으로 볼 수 있습니다.","NUMBER_SPRINTS":"예상되는 스프린트 의 갯수","NUMBER_SPRINTS_HELP":"정하지 않으려면 0을 입력합니다.","NUMBER_US_POINTS":"예상되는 총 스토리 포인트","NUMBER_US_POINTS_HELP":"정하지 않으려면 0을 입력합니다.","KANBAN":"칸반","KANBAN_DESCRIPTION":"이 칸반을 이용해 프로젝트를 효율적으로 만듭시다.","ISSUES":"이슈","ISSUES_DESCRIPTION":"프로젝트와 관련된 버그와 질문 및 개선 사항을 추적하십시오. 그 무엇도 놓치지 마세요!","WIKI":"위키","WIKI_DESCRIPTION":"다른 사람들과 공동으로 콘텐츠를 추가, 수정 또는 삭제합니다. 프로젝트 문서화에 적합합니다.","MEETUP":"미팅","MEETUP_DESCRIPTION":"당신의 화상회의 시스템을 선택하세요.","SELECT_VIDEOCONFERENCE":"화상 회의 시스템 선택","SALT_CHAT_ROOM":"채팅방 이름에 머릿말 추가","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"사용자 정의 ","URL_CHAT_ROOM":"채팅방 URL"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - 프로젝트 프로필 - {{projectName}}","PROJECT_DETAILS":"프로젝트 세부사항","PROJECT_NAME":"프로젝트 이름","TAGS":"태그","DESCRIPTION":"설명","RECRUITING":"이 프로젝트에 다른 사람이 필요합니까?","RECRUITING_MESSAGE":"누구를 찾고 계십니까?","RECRUITING_PLACEHOLDER":"찾고 있는 프로파일을 정의하십시오.","FEEDBACK":"타이가사용자들로부터 피드백을 받으시겠습니까?","PUBLIC_PROJECT":"공개된 프로젝트","PRIVATE_PROJECT":"비공개 프로젝트","PRIVATE_OR_PUBLIC":"공공 프로젝트와 비공개 프로젝트의 차이점은 무엇입니까?","DELETE":"프로젝트 삭제하기","CHANGE_LOGO":"로고 변경하기","ACTION_USE_DEFAULT_LOGO":"기본 이미지 사용","MAX_PRIVATE_PROJECTS":"당신에게 적용된 설정에서 허용하는 최대 비공개 프로젝트 수에 도달했습니다.","MAX_PRIVATE_PROJECTS_MEMBERS":"비공개 프로젝트의 최대 회원수를 초과하였습니다.","MAX_PUBLIC_PROJECTS":"안타깝게도 당신에게 설정된 최대 공공 프로젝트 갯수에 도달하였습니다.","MAX_PUBLIC_PROJECTS_MEMBERS":"프로젝트가 공개 프로젝트의 최대 회원 수를 초과했습니다.","PROJECT_OWNER":"프로젝트 소유자","REQUEST_OWNERSHIP":"소유권 요청","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"새 프로젝트의 소유자가 되고 싶습니까?","REQUEST_OWNERSHIP_DESC":"현재 프로젝트 소유자 {{name}}에게 이 프로젝트의 소유권을 당신에게 양도하도록 요청합니다.","REQUEST_OWNERSHIP_BUTTON":"요청하기","REQUEST_OWNERSHIP_SUCCESS":"프로젝트 소유자에게 알립니다.","CHANGE_OWNER":"소유자 변경하기","CHANGE_OWNER_SUCCESS_TITLE":"당신의 요청이 전송되었습니다!","CHANGE_OWNER_SUCCESS_DESC":"프로젝트 소유권 요청이 수락되거나 거부되면 이메일로 알려드립니다."},"REPORTS":{"TITLE":"보고서","SUBTITLE":"프로젝트 데이터를 CSV 형태로 내보낸 다음 여러분만의 보고서를 만들어 보세요.","DESCRIPTION":"CSV 파일을 다운로드하거나 생성 된 URL을 복사하여 원하는 텍스트 편집기 또는 스프레드 시트에서 프로젝트 데이터 보고서를 만듭니다. 모든 데이터를 쉽게 시각화하고 분석 할 수 있습니다.","HELP":"이걸 스프레드 시트에서 사용하는 방법이 무엇인가요?","REGENERATE_TITLE":"URL 변경하기","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"에픽 보고서","SECTION_TITLE_US":"유저 스토리 보고서","SECTION_TITLE_TASK":"태스크 보고서","SECTION_TITLE_ISSUE":"이슈 보고서","DOWNLOAD":"CSV 다운로드","URL_FIELD_PLACEHOLDER":"CSV url을 다시 생성하세요","TITLE_REGENERATE_URL":"CSV url 재생성하기","ACTION_GENERATE_URL":"URL 생성하기","ACTION_REGENERATE":"재생성","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"삭제"},"CUSTOM_FIELDS":{"TITLE":"사용자 정의 필드","SUBTITLE":"유저 스토리, 태스크 그리고 이슈를 위한 사용자 정의 필드를 지정하세요.","EPIC_DESCRIPTION":"에픽 사용자 정의 필드","EPIC_ADD":"에픽에 사용자 정의 필드 추가","US_DESCRIPTION":"유저 스토리의 사용자 정의 필드","US_ADD":"유저 스토리에 사용자 정의 필드 추가하기","TASK_DESCRIPTION":"태스크의 사용자 정의 필드","TASK_ADD":"태스크에 사용자 정의 필드 추가하기","ISSUE_DESCRIPTION":"이슈의 사용자 정의 필드","ISSUE_ADD":"이슈에 사용자 정의 필드 추가하기","FIELD_TYPE_TEXT":"텍스트","FIELD_TYPE_RICHTEXT":"서식있는 텍스트","FIELD_TYPE_MULTI":"여러 줄","FIELD_TYPE_DATE":"날짜","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - 프로젝트 값들 - {{projectName}}","REPLACEMENT":"이 값을 가진 모든 아이템들의 값을 다음으로 변경합니다.","ERROR_DELETE_ALL":"최소한 한 개의 값은 남겨두어야 합니다."},"PROJECT_VALUES_POINTS":{"TITLE":"포인트","SUBTITLE":"유저 스토리의 포인트를 추산하세요.","US_TITLE":"유저 스토리 포인트","ACTION_ADD":"새 포인트 추가하기"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"우선순위","SUBTITLE":"이슈의 우선순위를 지정하세요.","ISSUE_TITLE":"이슈 우선순위","ACTION_ADD":"우선순위 추가하기"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"심각도","SUBTITLE":"이슈에 대한 심각도를 지정하세요.","ISSUE_TITLE":"이슈 심각도","ACTION_ADD":"심각도 추가하기"},"PROJECT_VALUES_STATUS":{"TITLE":"상태","SUBTITLE":"유저 스토리, 태스크 그리고 이슈의 상태를 지정하세요.","EPIC_TITLE":"에픽 상태","US_TITLE":"유저 스토리 상태","TASK_TITLE":"태스크 상태","ISSUE_TITLE":"이슈 상태"},"PROJECT_VALUES_TYPES":{"TITLE":"타입","SUBTITLE":"이슈의 종류를 지정하세요.","ISSUE_TITLE":"이슈 타입","ACTION_ADD":"{{objName}} 새로 추가하기"},"PROJECT_VALUES_TAGS":{"TITLE":"태그","SUBTITLE":"태그를 보고 색을 변경하세요.","EMPTY":"태그가 없습니다.","EMPTY_SEARCH":"검색 기준에 아무 것도 발견되지 않았습니다.","ACTION_ADD":"태그 추가하기","NEW_TAG":"새로운 태그","MIXING_HELP_TEXT":"병합하기 원하는 태그를 선택하세요.","MIXING_MERGE":"태그 병합","SELECTED":"선택됨"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"상태 추가하기","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"역할 - {{projectName}}","WARNING_NO_ROLE":"주의하세요, 현재 프로젝트에 유저 스토리의 포인트를 산정할 수 있는 역할이 없습니다.","HELP_ROLE_ENABLED":"사용하도록 설정하면, 회원들에게 이 역할이 할당되었을 때 유저 스토리의 포인트 값을 예측할 수 있습니다.","DISABLE_COMPUTABLE_ALERT_TITLE":"이 역할의 예측 기능을 비활성화 하시겠습니까?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"만약 {{roleName}} 역할에 대한 평가 권한을 비활성화 했다면, 이 역할로 수행한 모든 평가는 삭제될 것입니다.","COUNT_MEMBERS":"{{ role.members_count }} 명의 회원이 이 역할을 가지고 있습니다.","TITLE_DELETE_ROLE":"역할 삭제하기","REPLACEMENT_ROLE":"이 역할의 모든 사용자들은 다음의 역할로 변경됨","WARNING_DELETE_ROLE":"조심하세요! 모든 역할 예측이 삭제됩니다.","ERROR_DELETE_ALL":"최소한 한 개의 값은 남겨두어야 합니다.","EXTERNAL_USER":"외부 사용자","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"비밀 키","PAYLOAD_URL":"Payload URL","VALID_IPS":"유효한 원본 IP (콤마','로 구분)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket 요청은 IP를 이용해서 출처를 확인하는 방법으로 서명되지 않았습니다. 필드가 비어있을 경우, IP 유효성 검증이 되지 않습니다."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab 요청은 IP를 이용해서 출처를 확인하는 방법으로 서명되지 않았습니다. 필드가 비어있을 경우, IP 유효성 검증이 되지 않습니다."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"웹훅 - {{projectName}}","SECTION_NAME":"웹훅","ADD_NEW":"웹훅 추가하기","TYPE_NAME":"서비스 이름을 입력해 주세요","TYPE_PAYLOAD_URL":"서비스 주소를 입력하세요","TYPE_SERVICE_SECRET":"서비스 시크릿 키를 입력해 주세요","SAVE":"웹훅 저장하기","CANCEL":"웹훅 취소하기","SHOW_HISTORY":"(이력 보기)","TEST":"웹훅 테스트하기","EDIT":"웹훅 수정하기","DELETE":"웹훅 삭제하기","REQUEST":"요청하기","RESEND_REQUEST":"요청 재전송하기","HEADERS":"헤더","PAYLOAD":"Payload","RESPONSE":"응답하기","DATE":"YYYY MMM DD [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(이력 숨기기)","ACTION_HIDE_HISTORY_TITLE":"상세 이력 숨기기","ACTION_SHOW_HISTORY":"(이력 보기)","ACTION_SHOW_HISTORY_TITLE":"상세 이력 보기","WEBHOOK_NAME":"웹훅 '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - 사용자 정의 속성 - {{projectName}}","ADD":"사용자 정의 필드 추가하기","EDIT":"사용자 정의 필드 수정하기","DELETE":"사용자 정의 필드 삭제하기","SAVE_TITLE":"사용자 정의 필드 저장하기","CANCEL_TITLE":"만들기 취소 하기","SET_FIELD_NAME":"사용자 정의 필드의 이름을 설정하세요","SET_FIELD_DESCRIPTION":"사용자 정의 필드에 대한 설명을 넣으세요","FIELD_TYPE_DEFAULT":"-- 하나를 고르세요 --","ACTION_UPDATE":"사용자 정의 필드 업데이트하기","ACTION_CANCEL_EDITION":"수정 내역 취소하기"},"MEMBERSHIP":{"COLUMN_MEMBER":"회원","COLUMN_ADMIN":"관리자","COLUMN_ROLE":"역할","COLUMN_STATUS":"상태","STATUS_ACTIVE":"활성상태","STATUS_PENDING":"보류 중","DELETE_MEMBER":"회원 삭제하기","RESEND":"다시 보내기","SUCCESS_SEND_INVITATION":"'{{email}}' 님에게 다시 초대장을 보냈습니다.","SUCCESS_DELETE":"{{message}} 를 지웠습니다.","ERROR_DELETE":"{{message}} 를 지울 수 없었습니다.","DEFAULT_DELETE_MESSAGE":"{{email}} 초대하기"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"에픽 상태의 기본값","LABEL_US_STATUS":"유저 스토리 상태의 기본 값","LABEL_POINTS":"포인트의 기본 값","LABEL_TASK_STATUS":"태스크 상태의 기본 값","LABEL_ISSUE_TYPE":"이슈 종류의 기본 값","LABEL_ISSUE_STATUS":"이슈 상태의 기본 값","LABEL_PRIORITY":"우선순위의 기본 값","LABEL_SEVERITY":"심각도의 기본 값"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"새 상태의 이름을 입력하세요","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"새 엘리먼트의 이름을 입력하세요"},"US_STATUS":{"ACTION_ADD_STATUS":"상태 추가하기","IS_ARCHIVED_COLUMN":"보관됨","IS_CLOSED_COLUMN":"완료함","WIP_LIMIT_COLUMN":"동시 진행 제한 갯수","PLACEHOLDER_WRITE_NAME":"새 상태의 이름을 입력하세요"},"MENU":{"PROJECT":"프로젝트","ATTRIBUTES":"속성","MEMBERS":"회원","PERMISSIONS":"권한","INTEGRATIONS":"연동"},"SUBMENU_PROJECT_VALUES":{"STATUS":"상태","POINTS":"포인트","PRIORITIES":"우선순위","SEVERITIES":"심각도","TYPES":"타입","CUSTOM_FIELDS":"사용자 정의 필드","TAGS":"태그","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"역할","ACTION_NEW_ROLE":"역할 추가하기","TITLE_ACTION_NEW_ROLE":"역할 추가하기"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"새 프로젝트의 소유자가 되고 싶습니까?","PRIVATE":"비공개","ACCEPTED_PROJECT_OWNERNSHIP":"축하합니다! 새로운 프로젝트의 소유자가 되었습니다.","REJECTED_PROJECT_OWNERNSHIP":"네. 이 프로젝트 소유자에게 연락하겠습니다.","ACCEPT":"확인","REJECT":"거절","PROPOSE_OWNERSHIP":"{{owner}}가 자신이 소유한 프로젝트 {{project}}의 새로운 소유자가 될 수 있는지 제안하였습니다.","ADD_COMMENT":"프로젝트 소유자에 대한 의견을 추가 하시겠습니까?","UNLIMITED_PROJECTS":"제한 없음","OWNER_MESSAGE":{"PRIVATE":"{{maxProjects}}개의 비공개 프로젝트를 소유 할 수 있음을 기억하십시오. 현재 당신은 {{currentProjects}}개의 비공개 프로젝트를 소유하고 있습니다.","PUBLIC":"{{maxProjects}}개의 공공 프로젝트를 소유 할 수 있음을 기억하십시오. 현재 당신은 {{currentProjects}}개의 공공 프로젝트를 소유하고 있습니다."},"CANT_BE_OWNED":"현재 이 유형의 프로젝트 소유자가 될 수 없습니다. 이 프로젝트의 소유자가되고 싶다면 관리자에게 문의하여 프로젝트 소유권을 사용하도록 계정 설정을 변경하십시오."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"프로필 수정하기","CLOSED_US":"완료한 유저 스토리","PROJECTS":"프로젝트","PROJECTS_EMPTY":"{{username}} 님은 아직 프로젝트가 없습니다","CONTACTS":"연락처","CONTACTS_EMPTY":"{{username}} 님은 연락처가 없습니다","CURRENT_USER_CONTACTS_EMPTY":"연락처가 없습니다","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"타이가에서 일하는 사람들은 자동으로 당신의 연락처가 됩니다.","TABS":{"ACTIVITY_TAB":"타임라인","ACTIVITY_TAB_TITLE":"이 사용자의 전체 액티비티 보기","PROJECTS_TAB":"프로젝트","PROJECTS_TAB_TITLE":"이 사용자가 참여하는 모든 프로젝트 목록","LIKES_TAB":"좋아요","LIKES_TAB_TITLE":"이 사용자의 모든 좋아요 목록","VOTES_TAB":"투표","VOTES_TAB_TITLE":"이 사용자가 투표한 모든 투표 목록 보기","WATCHED_TAB":"구독","WATCHED_TAB_TITLE":"이 사용자가 구독중인 모든 목록 보기","CONTACTS_TAB":"연락처","CONTACTS_TAB_TITLE":"이 사용자가 만든 모든 연락처 목록"}},"PROFILE_SIDEBAR":{"TITLE":"프로필","DESCRIPTION":"당신이 하는 모든 것, 그리고 당신이 어떤 일을 하고 있는 지 사람들이 몽땅 볼 수 있어요. 당신을 알릴 수 있는 멋진 소개를 추가하세요.","ADD_INFO":"이력 수정하기"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"아무거나 입력하세요...","FILTER_TYPE_ALL":"전체","FILTER_TYPE_ALL_TITLE":"모두 보기","FILTER_TYPE_PROJECTS":"프로젝트","FILTER_TYPE_PROJECTS_TITLE":"프로젝트만 보기","FILTER_TYPE_EPICS":"에픽","FILTER_TYPE_EPICS_TITLE":"에픽만 보기","FILTER_TYPE_USER_STORIES":"스토리","FILTER_TYPE_USER_STORIES_TITLE":"유저 스토리만 보기","FILTER_TYPE_TASKS":"태스크","FILTER_TYPE_TASKS_TITLE":"태스크만 보기","FILTER_TYPE_ISSUES":"이슈","FILTER_TYPE_ISSUES_TITLE":"이슈만 보기","EMPTY_TITLE":"여기엔 보여 줄 수 있는게 하나도 없네요."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"자주 사용하는 프로젝트들을 상위로 올려보세요.
    상위 10개 프로젝트는 내비게이션 바의 프로젝트 목록에 나타납니다.","PRIVATE":"비공개 프로젝트","LOOKING_FOR_PEOPLE":"이 프로젝트는 사람을 찾고 있습니다.","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# 명의 좋아요}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# 명이 구독중}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# 명의 회원}}","BLOCKED_PROJECT":{"BLOCKED":"차단된 프로젝트","THIS_PROJECT_IS_BLOCKED":"이 프로젝트는 임시로 차단되었습니다.","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"프로젝트의 차단을 해제하려면 관리자에게 문의하십시오."},"SECTION":{"SEARCH":"검색","TIMELINE":"타임라인","EPICS":"에픽","BACKLOG":"백로그","KANBAN":"칸반","ISSUES":"이슈","WIKI":"위키","TEAM":"팀","MEETUP":"미팅","ADMIN":"관리자"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"프로젝트 생성하기","MANAGE_PROJECTS":"프로젝트 관리하기","TITLE_CREATE_PROJECT":"프로젝트 생성하기","HELP_TITLE":"타이가 고객 지원 페이지","HELP":"도움말","HOMEPAGE":"홈페이지","FEEDBACK_TITLE":"피드백 보내기","FEEDBACK":"피드백","NOTIFICATIONS_TITLE":"알림 설정 수정","NOTIFICATIONS":"알림","VIEW_PROFILE_TITLE":"프로필 보기","VIEW_PROFILE":"프로필 보기","EDIT_PROFILE_TITLE":"프로필 수정하기","EDIT_PROFILE":"프로필 수정하기","CHANGE_PASSWORD_TITLE":"비밀번호 변경하기","CHANGE_PASSWORD":"비밀번호 변경하기","DASHBOARD_TITLE":"대시보드","DISCOVER_TITLE":"트렌드 프로젝트 찾기","DISCOVER":"찾기"},"LIKE_BUTTON":{"LIKE":"좋아요","LIKED":"좋아함","UNLIKE":"좋아요 취소","BUTTON_TITLE":"이 프로젝트를 좋아요 또는 좋아요 취소","COUNTER_TITLE":"{total, plural, one{one fan} other{# 명의 좋아요}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"이 프로젝트를 구독하고 알림 정책 설정하기","WATCH":"구독","WATCHING":"구독중","COUNTER_TITLE":"{total, plural, one{one watcher} other{# 명이 구독중}}","OPTIONS":{"NOTIFY_ALL":"모든 공지 받기","NOTIFY_ALL_TITLE":"이 프로젝트에 대한 모든 공지 받기","NOTIFY_INVOLVED":"내가 관련된 경우에만","NOTIFY_INVOLVED_TITLE":"연관된 경우에만 공지 받기","UNWATCH":"구독 취소","UNWATCH_TITLE":"이 프로젝트의 구독 취소"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"프로젝트 팀 문의","CONTACT_BUTTON":"프로젝트 문의"},"CREATE":{"TITLE":"프로젝트 생성하기","CHOOSE_TEMPLATE":"당신의 프로젝트에 가장 적합한 템플릿이 무엇입니까?","TEMPLATE_SCRUM":"스크럼","TEMPLATE_SCRUM_DESC":"짧은 시간 주기로 작업 우선 순위 지정 및 해결","TEMPLATE_SCRUM_LONGDESC":"스크럼은 제품 개발 과정을 관리하기 위해 반복하며 쌓아가는 애자일 소프트웨어 개발 방법론입니다.\n끊임없이 채워지는 제품 백로그를 만들어야되는 순서대로 정렬하세요. 제품 백로그의 유저스토리를 스프린트로 나누세요. 관리할 만큼, 실행할 만큼 스프린트로 나누세요. 팀원들의 실력과 능력, 가진 것을 고려하여 매번 정해진 때마다 새로운 스프린트를 만들고 백로그에서 몇 개의 유저 스토리를 등록하세요. 백로그를 없애며 프로젝트를 발전시키세요.","TEMPLATE_KANBAN":"칸반","TEMPLATE_KANBAN_DESC":"독립적인 태스크에 대해 지속적인 워크플로 유지","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"프로젝트 복사","DUPLICATE_DESC":"정리를 시작하고 설정을 유지","IMPORT":"프로젝트 불러오기","IMPORT_DESC":"여러 플랫폼의 당신의 프로젝트를 타이가로 가져오십시오.","INVITE":"프로젝트로 초대","SOLO_PROJECT":"이 프로젝트에 당신 혼자 남을 것입니다.","INVITE_LATER":"(나중에 더 많은 회원을 초대 할 수 있습니다.)","BACK":"이전","MAX_PRIVATE_PROJECTS":"비공개 프로젝트 수 제한에 도달하였습니다.\n제한을 늘리고 싶다면 관리자에게 연락하세요.","MAX_PUBLIC_PROJECTS":"공개 프로젝트 수 제한에 도달하였습니다.\n제한을 늘리고 싶다면 관리자에게 문의해주세요.","PUBLIC_PROJECT":"공개된 프로젝트","PRIVATE_PROJECT":"비공개 프로젝트"},"COMMON":{"DETAILS":"새로운 프로젝트 세부사항","PROJECT_TITLE":"프로젝트 이름","PROJECT_DESCRIPTION":"프로젝트 설명"},"DUPLICATE":{"TITLE":"프로젝트 복사","DESCRIPTION":"정리를 시작하고 설정을 유지","SELECT_PLACEHOLDER":"복제 할 기존 프로젝트 선택"},"IMPORT":{"TITLE":"프로젝트 가져오기","DESCRIPTION":"여러 플랫폼의 당신의 프로젝트를 타이가로 가져오십시오.","ASYNC_IN_PROGRESS_TITLE":"움파룸파가 프로젝트를 불러오고 있습니다.","ASYNC_IN_PROGRESS_MESSAGE":"이 작업은 몇 분 정도 걸립니다.
    작업이 끝나면 이메일로 알려드릴게요.","UPLOAD_IN_PROGRESS_MESSAGE":"{{totalSize}} 중 {{uploadedSize}} 만큼 업로드했습니다","ERROR":"움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요.","ERROR_TOO_MANY_REQUEST":"죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?","ERROR_MESSAGE":"움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요. {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.","SYNC_SUCCESS":"프로젝트를 불러오는 데 성공했습니다.","IMPORT":"가져오기","WHO_IS":"이 태스크들을 할당 ...","WRITE_EMAIL":"원한다면, 사용자가 사용하는 이메일을 타이가에 작성하십시오.","SEARCH_CONTACT":"또는 연락처에서 찾습니다.","WRITE_EMAIL_LABEL":"Tagia에서 사용자가 사용할 이메일을 작성","ACCEEDE":"Acceede","PROJECT_MEMBERS":"프로젝트 회원","PROCESS_DESCRIPTION":"Tagia에서 {{platform}}의 태스크들을 누구에게 할당할 것인지 알려주세요.","MATCH":"외부의 {{user_external}} 사용자는 내부의 {{user_internal}} 사용자와 동일인입니까?","CHOOSE":"사용자 선택","LINKS":"{{platform}}과 연결","LINKS_DESCRIPTION":"{{platform}} 카드와 모든 아이템들의 연결을 유지하시겠습니까?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"할당","PROJECT_SELECTOR":{"NO_RESULTS":"검색 기준에 아무 것도 발견되지 않았습니다.","ACTION_SEARCH":"검색하기","ACTION_BACK":"이전"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"당신의 계정은 오직 {{members}} 회원만 허가되어있습니다.","PRIVATE_PROJECTS_SPACE":{"TITLE":"안타깝게도, 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다.","DESC":"가져오기하려는 프로젝트가 비공개 되어있습니다. 안타깝게도, 현재 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"안타깝게도, 당신의 현재 설정에는 추가 공공 프로젝트가 허용되어있지 않습니다.","DESC":"가져오기 하려는 프로젝트는 공공 프로젝트입니다. 안타깝게도, 당신의 현재 섲렁에는 추가 공공 프로젝트가 허용되어있지 않습니다."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"현재 당신의 설정으로는 비공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다."},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"현재 당신의 설정으로는 공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"안타깝게도 현재 당신의 설정으로는 추가 비공개 프로젝트가 허용되지 않았거나 비공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.","DESC":"가져오기 하려는 프로젝트가 비공개이며 {{members}} 명의 회원이 있습니다."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"안타깝게도 현재 당신의 설정으로는 추가 공개 프로젝트가 허용되지 않았거나 공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.","DESC":"가져오기 하려는 프로젝트는 공개되어있으며 {{members}} 이상의 회원이 존재합니다."}},"IN_PROGRESS":{"TITLE":"프로젝트 불러오기","DESCRIPTION":"이 과정은 시간이 걸릴 수 있습니다. 이 창을 닫지 마세요."},"WARNING":{"TITLE":"일부 태스크는 할당되지 않을 것입니다.","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"연락처 확인"},"TAIGA":{"SELECTOR":"타이가 프로젝트 가져오기"},"TRELLO":{"SELECTOR":"타이가로 트렐로 보드 가져오기","CHOOSE_PROJECT":"가져오고 싶은 보드를 선택하세요.","NO_PROJECTS":"트렐로에 당신의 보드가 없는 것 같군요."},"GITHUB":{"SELECTOR":"깃헙 프로젝트 이슈 가져오기","CHOOSE_PROJECT":"가져오고 싶은 프로젝트를 찾으세요.","NO_PROJECTS":"깃헙에 당신의 프로젝트가 없는 것 같군요.","HOW_DO_YOU_WANT_TO_IMPORT":"타이가로 당신의 이슈들을 어떻게 가져오고 싶습니까?","KANBAN_PROJECT":"칸반 프로젝트의 유저 스토리","KANBAN_PROJECT_DESCRIPTION":"이후에 스크럼과 백로그를 활성화할 수 있습니다.","SCRUM_PROJECT":"스크럼 프로젝트의 유저 스토리","SCRUM_PROJECT_DESCRIPTION":"이후에 칸반모드를 활성화할 수 있습니다.","ISSUES_PROJECT":"이슈","ISSUES_PROJECT_DESCRIPTION":"칸반이나 스크럼에서는 이슈를 사용할 수 없습니다. 하지만 유저 스토리를 사용할 수 있습니다."},"ASANA":{"SELECTOR":"가져올 Asana 프로젝트와 어떻게 관리할지를 선택하세요.","CHOOSE_PROJECT":"가져오고 싶은 프로젝트를 선택하세요.","NO_PROJECTS":"Asana에 당신의 프로젝트가 없는 것 같군요.","KANBAN_PROJECT":"칸반","SCRUM_PROJECT":"스크럼","CREATE_AS_SCRUM_DESCRIPTION":"당신의 프로젝트에서 태스크와 하위 태스크는 Taiga 유저 스토리와 태스크로 작성됩니다.","CREATE_AS_KANBAN_DESCRIPTION":"당신의 프로젝트에서 태스크와 하위 태스크는 Taiga 유저 스토리와 태스크로 작성됩니다."},"JIRA":{"SELECTOR":"가져올 Jira 프로젝트와 어떻게 관리할지를 선택하세요","HOW_TO_CONFIGURE":"(설정 도움말)","CHOOSE_PROJECT":"가져오고 싶은 프로젝트나 보드를 선택하세요.","NO_PROJECTS":"Jira에 당신의 프로젝트가나 보드가 없는 것 같군요.","URL":"당신의 Jira URL","KANBAN_PROJECT":"칸반","SCRUM_PROJECT":"스크럼","ISSUES_PROJECT":"이슈","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"하위 이슈를 새로운 타이가 이슈로 변경","NOT_CREATE_NEW_ISSUES":"하위 이슈를 가져오지 마십시오."}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"타이가 계정을 정말로 삭제하시겠어요?","CANCEL":"설정으로 돌아가기","ACCEPT":"계정 삭제","BLOCK_PROJECT":"계정을 삭제한 후에는 당신이 소유하고 있는 모든 프로젝트가 차단됩니다. 이걸 원치 않으시면, 계정을 삭제하기 전에 프로젝트 소유권을 다른 회원에게 넘겨주세요."},"DELETE_PROJECT":{"TITLE":"프로젝트 삭제하기","QUESTION":"프로젝트를 정말 삭제하시려고요?","SUBTITLE":"모든 프로젝트 데이터(유저 스토리, 태스크, 이슈, 스프린트, 위키)가 사라질 겁니다. :-(","CONFIRM":"네. 진심으로 원해요."},"ASSIGNED_TO":{"SELECT":"다음 사람에게 할당","SEARCH":"사용자 검색"},"ADD_MEMBER":{"TITLE":"새 회원","PLACEHOLDER":"사용자를 필터링하거나 초대할 이메일 쓰기","ADD_EMAIL":"이메일 추가","REMOVE":"삭제","INVITE":"초대","CHOOSE_ROLE":"역할 선택","PLACEHOLDER_INVITATION_TEXT":"(선택사항) 초대장에 특별한 메시지를 적으세요. 새로운 회원에게 멋진 말을 전해주세요 ;-)","HELP_TEXT":"타이가에 이미 등록한 사용자라면 자동으로 프로젝트에 추가될 겁니다. 등록하지 않은 사용자라면 초대장이 발송됩니다."},"FEEDBACK":{"TITLE":"말해주세요...","COMMENT":"... 버그, 몇 가지 제안, 멋진 것 ... 아니면 타이가와의 최악의 악몽","ACTION_SEND":"피드백 보내기"},"SEARCH":{"TITLE":"검색","PLACEHOLDER_SEARCH":"무엇을 찾고 있나요?"},"ADD_EDIT_SPRINT":{"TITLE":"다음 스프린트","PLACEHOLDER_SPRINT_NAME":"스프린트 이름","PLACEHOLDER_SPRINT_START":"예정된 시작일","PLACEHOLDER_SPRINT_END":"예정된 종료일","ACTION_DELETE_SPRINT":"이 스프린트를 삭제하시려고요?","TITLE_ACTION_DELETE_SPRINT":"스프린트 삭제하기","LAST_SPRINT_NAME":"마지막 스프린트는 {{lastSprint}} 입니다 ;-)"},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"이슈 추가하기","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"스프린트 삭제하기"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(선택사항) 초대장에 특별한 메시지를 적으세요. 새로운 회원에게 멋진 말을 전해주세요 ;-)","PLACEHOLDER_TYPE_EMAIL":"이메일을 입력하세요","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"이 프로젝트에 허용 된 최대 회원 수인 {{maxMembers}} 명에 도달하려합니다. 최대 회원 수를 늘리려면 관리자에게 문의하십시오.","LIMIT_USERS_WARNING_MESSAGE":"이 프로젝트에 허용 된 최대 회원 수 인 {{maxMembers}} 명에 도달하려고 합니다."},"LEAVE_PROJECT_WARNING":{"TITLE":"안타깝게도 이 프로젝트는 소유자 없이 남아있을 수 없습니다.","CURRENT_USER_OWNER":{"DESC":"현재 이 프로젝트의 소유자입니다. 나가기전에 소유권을 다른 사람에게 양도하시기 바랍니다.","BUTTON":"프로젝트 소유자 변경하기"},"OTHER_USER_OWNER":{"DESC":"안타깝게도 현재 프로젝트 소유자인 회원을 삭제할 수 없습니다. 먼저 새 프로젝트 소유자를 지정하십시오.","BUTTON":"프로젝트 소유자 변경 요청"}},"CHANGE_OWNER":{"TITLE":"누구를 새로운 프로젝트 소유자로 삼고 싶습니까?","ADD_COMMENT":"댓글 추가","BUTTON":"이 프로젝트 회원에게 새 프로젝트 소유자가 되도록 문의하십시오."},"CONTACT_PROJECT":{"TITLE":"이메일 보내기","WARNING":"프로젝트 관리자로부터 이메일을 받았습니다.","PLACEHOLDER":"메시지 쓰기","SEND":"보내기"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"프로젝트가 무엇인가요?","CHOOSE_PROJECT_FROM":"프로젝트가 무엇인가요?","SUBJECT":"주제","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"검색 기준에 아무 것도 발견되지 않았습니다."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - 에픽 {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"상태: {{epicStatus }}. 설명: {{epicDescription}}","SECTION_NAME":"에픽","ERROR_UNLINK_RELATED_USERSTORY":"링크를 해제할 수 없었습니다: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"다음으로 관계 만들기","NEW_USERSTORY":"새 유저 스토리","EXISTING_USERSTORY":"존재하는 유저 스토리","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"주제","SUBJECT_BULK_MODE":"제목 (여러개 생성하기)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"이 프로젝트에는 아직 유저 스토리가 없습니다. 다른 프로젝트를 선택하십시오.","NO_USERSTORIES_FOUND":"검색 기준에 아무 것도 발견되지 않았습니다.","FILTER_USERSTORIES":"유저 스토리 필터","LIGHTBOX_TITLE_BLOKING_EPIC":"에픽 차단","ACTION_DELETE":"에픽 삭제"},"US":{"PAGE_TITLE":"{{userStorySubject}} - 유저 스토리 {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"상태: {{userStoryStatus }}. 완료 {{userStoryProgressPercentage}}% ({{userStoryTotalTasks}} 중 {{userStoryClosedTasks}} 태스크 완료). 포인트: {{userStoryPoints}}. 상세사항: {{userStoryDescription}}","SECTION_NAME":"유저 스토리","LINK_TASKBOARD":"태스크보드","TITLE_LINK_TASKBOARD":"태스크보드로 가기","TOTAL_POINTS":"전체 포인트","ADD":"유저 스토리 추가하기","ADD_BULK":"유저 스토리 여러개 생성하기","PROMOTED":"이 유저 스토리는 이슈에서 만들어졌음","TITLE_LINK_GO_TO_ISSUE":"이슈로 가기","TITLE_DELETE_ACTION":"유저 스토리 삭제하기","LIGHTBOX_TITLE_BLOKING_US":"블로킹 유저 스토리","NOT_ESTIMATED":"추산되지 않음","OWNER_US":"이 유저 스토리를 포함한 에픽은","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Tiaga Tribe의 Gig으로 배포하기","PUBLISH_INFO":"더 많은 정보","PUBLISH_TITLE":"Taiga Tribe로 배포하기에 대한 더 많은 정보","PUBLISHED_AS_GIG":"스토리가 Taiga Tribe의 Gig으로 배포되었습니다.","EDIT_LINK":"링크 수정","CLOSE":"닫기","SYNCHRONIZE_LINK":"Taiga Tribe와 동기화","PUBLISH_MORE_INFO_TITLE":"이 태스크에 누군가가 필요합니까?","PUBLISH_MORE_INFO_TEXT":"

    만약 당신이 어떤 일에 도움이 필요하면 간단하게 Taiga Tribe 의 Gigs를 만들어 전세계의 도움을 받을 수 있습니다. 우리는 당신이 이 위대한 커뮤니티의 gig을 즐기고 제어하거나 관리하면서 기여 할 수 있기를 열망합니다.

    Taiga Tribe 는 타이가의 형제로 태어났습니다. 두 플랫폼은 별개로 살아갈 수 있지만, 우리는 이들을 결합 하였을 때 더 큰 힘을 낼 수 있다고 믿습니다. 그리고 멋지게 통합되어 움직이는 것을 확인하였습니다.

    "}},"COMMENTS":{"DELETED_INFO":"{{user}} 에 의해 댓글이 지워짐.","COMMENTS_COUNT":"{{comments}} 댓글","OLDER_FIRST":"오랜된 순으로","RECENT_FIRST":"최신 순으로","COMMENT":"댓글","EDITED_COMMENT":"수정됨:","SHOW_HISTORY":"역사 보기","TYPE_NEW_COMMENT":"댓글을 입력하세요","SHOW_DELETED":"삭제된 댓글 보기","HIDE_DELETED":"삭제된 댓글 가리기","DELETE":"댓글 삭제","RESTORE":"댓글 되살리기","HISTORY":{"TITLE":"활동 내역"}},"ACTIVITY":{"TITLE":"활동 내역","ACTIVITIES_COUNT":"{{activities}} 활동","TAGS_ADDED":"태그 추가됨:","TAGS_REMOVED":"태그 삭제됨:","US_POINTS":"{{role}} 포인트","NEW_ATTACHMENT":"새로운 첨부파일:","DELETED_ATTACHMENT":"첨부파일 삭제하기","UPDATED_ATTACHMENT":"첨부 파일이 업데이트됨 ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"사용자 정의 속성 만들기","UPDATED_CUSTOM_ATTRIBUTE":"사용자 정의 속성 업데이트하기","BECAME_DEPRECATED":"지원하지 않도록 되었습니다.","BECAME_UNDEPRECATED":"다시 지원하도록 되었습니다.","TEAM_REQUIREMENT":"팀 요구 사항","CLIENT_REQUIREMENT":"고객 요구 사항","BLOCKED":"차단됨","VALUES":{"NOT_SET":"not set","UNASSIGNED":"할당되지 않음"},"FIELDS":{"SUBJECT":"주제","DESCRIPTION":"설명","PRIORITY":"우선 순위","SEVERITY":"심각도","STATUS":"상태","TYPE":"타입","ASSIGNED_TO":"할당됨","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"스프린트","COLOR":"색"}},"BACKLOG":{"PAGE_TITLE":"백로그 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트의 유저 스토리와 스프린트를 보여주는 백 패널 {{projectName}}: {{projectDescription}}","SECTION_NAME":"백로그","CUSTOMIZE_GRAPH":"백로그 그래프 사용자 정의하기","CUSTOMIZE_GRAPH_TEXT":"프로젝트의 진화를 돕는 좋은 그래프를 얻으려면, 당신은 포인트와 스프린트를 설정해야합니다.","CUSTOMIZE_GRAPH_ADMIN":"관리자","CUSTOMIZE_GRAPH_TITLE":"관리자 메뉴에서 포인트와 스프린트를 설정하세요.","MOVE_US_TO_CURRENT_SPRINT":"현재 스프린트로 옮기기","MOVE_US_TO_LATEST_SPRINT":"가장 최근 스프린트로 옮기기","EMPTY":"백로그가 비었습니다!","CREATE_NEW_US":"유저 스토리 생성하기","CREATE_NEW_US_EMPTY_HELP":"새로운 유저 스토리를 만들어 보고 싶죠?","EXCESS_OF_POINTS":"포인트 초과","PENDING_POINTS":"보류 중인 포인트","CLOSED_POINTS":"완료","COMPACT_SPRINT":"스프린트 접기","GO_TO_TASKBOARD":"{{::name}}의 태스크보드로 이동하기","EDIT_SPRINT":"스프린트 수정하기","TOTAL_POINTS":"전체","STATUS_NAME":"상태 이름","SORTABLE_FILTER_ERROR":"필터 창이 열려있을 때에는 백로그를 옮길 수 없습니다.","DOOMLINE":"프로젝트 범위 [둠 라인]","CHART":{"XAXIS_LABEL":"스프린트","YAXIS_LABEL":"포인트","OPTIMAL":"\"{{sprintName}}\" 스프린트에서 최적의 대기 포인트는 {{value}} 로 되어야합니다.","REAL":"\"{{sprintName}}\" 스프린트의 실제 대기포인트는 {{value}} 입니다.","INCREMENT_TEAM":"팀 요구 사항에 따라 \"{{sprintName}}\" 스프린트의 포인트가 {{value}}로 증가했습니다.","INCREMENT_CLIENT":"고객 요구 사항에 따라 \"{{sprintName}}\" 스프린트의 포인트가 {{value}}로 증가했습니다."},"TAGS":{"TOGGLE":"태그 보여짐 토글","SHOW":"태그 보기","HIDE":"태그 숨기기"},"FORECASTING":{"TITLE":"속도 예측","BACKLOG":"백로그 표시","NEW_SPRINT":"당신의 속도를 기반으로한 다음 스프린트의 후보 유저 스토리 입니다. 클릭하여 새로운 스프린트를 만드십시오.","CURRENT_SPRINT":"당신의 속도를 기반으로한 다음 스프린트의 후보 유저 스토리 입니다. 클릭하여 현재 스프린트에 추가하십시오."},"TABLE":{"COLUMN_US":"유저 스토리","TITLE_COLUMN_POINTS":"역할 별로 보기"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"종합
    포인트","COMPLETED_POINTS":"완료한
    포인트","OPEN_TASKS":"태스크
    열림","CLOSED_TASKS":"완료한
    태스크","IOCAINE_DOSES":"아이오케인
    복용","SHOW_STATISTICS_TITLE":"지표 보기","TOGGLE_BAKLOG_GRAPH":"번다운 그래프 보이기/숨기기","POINTS_PER_ROLE":"역할별 포인트"},"SUMMARY":{"PROJECT_POINTS":"프로젝트
    포인트","DEFINED_POINTS":"정의된
    포인트","CLOSED_POINTS":"완료한
    포인트","POINTS_PER_SPRINT":"포인트 /
    스프린트"},"FILTERS":{"TOGGLE":"필터 보여짐 토글","HIDE":"필터 숨기기","SHOW":"필터 보기"},"SPRINTS":{"TITLE":"스프린트","DATE":"YYYY MMM DD","LINK_TASKBOARD":"스프린트 태스크보드","TITLE_LINK_TASKBOARD":"\"{{name}}\" 태스크보드로 가기","EMPTY":"스프린트가 아직 없습니다.","WARNING_EMPTY_SPRINT_ANONYMOUS":"이 스프린트는 유저 스토리가 없습니다.","WARNING_EMPTY_SPRINT":"새 스프린트를 추가하려면 백로그에서 스토리를 끌어 놓으세요","TITLE_ACTION_NEW_SPRINT":"새로운 스프린트 추가","TEXT_ACTION_NEW_SPRINT":"프로젝트에 새로운 스프린트를 만들어 보고 싶죠?","ACTION_SHOW_CLOSED_SPRINTS":"완료한 스프린트 보기","ACTION_HIDE_CLOSED_SPRINTS":"완료한 스프린트 숨기기"}},"ERROR":{"TEXT1":"움파룸파가 무언가를 작업하고 있습니다.","NOT_FOUND":"찾지 못함","NOT_FOUND_TEXT":"404 에러: 당신이 접속한 페이지는 더 이상 존재하지 않습니다. 타이가홈페이지로 돌아가서 당신이 찾고 있는 페이지를 찾아보세요.","PERMISSION_DENIED":"권한이 없습니다","PERMISSION_DENIED_TEXT":"이 페이지를 볼 수 있는 권한이 없습니다.","VERSION_ERROR":"타이가 내부의 누군가가 이전에 이를 변경했으며 우리 움파룸파는 변경 사항을 적용 할 수 없습니다. 다시 로드하고 변경 사항을 다시 적용하십시오. (지금의 변경사항들은 손실 될 것입니다)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - 스프린트 태스크보드 - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}}의 스프린트 {{sprintName}} ({{startDate}}에서 {{endDate}}까지). {{completedPercentage}}% 완료됨 ({{completedPoints}} 중 {{totalPoints}}). {{openTasks}}는 {{totalTasks}}의 작업을 열었습니다.","SECTION_NAME":"태스크보드","TITLE_ACTION_ADD":"태스크 추가하기","TITLE_ACTION_ADD_BULK":"태스트 여러개 생성하기","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"태스크 할당하기","PLACEHOLDER_CARD_TITLE":"이것은 태스크가 될 수 있습니다.","PLACEHOLDER_CARD_TEXT":"스토리를 여러 태스크로 나누고 개별적으로 추적하세요.","TABLE":{"COLUMN":"유저 스토리","TITLE_ACTION_FOLD":"컬럼 접기","TITLE_ACTION_UNFOLD":"컬럼 접기","TITLE_ACTION_FOLD_ROW":"행 접기","TITLE_ACTION_UNFOLD_ROW":"행 접기","FIELD_POINTS":"포인트","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"일","YAXIS_LABEL":"포인트","OPTIMAL":"{{formattedDate}}에 대한 최적의 일일 대기 포인트는 {{roundedValue}}이어야 합니다.","REAL":"{{formattedDate}}의 실제 대기 포인트는 {{roundedValue}} 입니다.","DATE":"YYYY MMMM DD"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - 태스크 {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"상태: {{taskStatus }}. 세부사항: {{taskDescription}}","SECTION_NAME":"태스크","LINK_TASKBOARD":"태스크보드","TITLE_LINK_TASKBOARD":"태스크보드로 가기","PLACEHOLDER_SUBJECT":"새 태스크의 이름을 입력하세요","TITLE_SELECT_STATUS":"상태 이름","OWNER_US":"이 태스크는 다음에 속합니다.","TITLE_LINK_GO_OWNER":"유저 스토리로 가기","TITLE_DELETE_ACTION":"태스크 삭제하기","LIGHTBOX_TITLE_BLOKING_TASK":"블로킹 태스크","FIELDS":{"IS_IOCAINE":"독약인가요?"},"TITLE_ACTION_IOCAINE":"이 태스크에 대해 조금 압박감을 느끼나요? 이 태스크를 수정할 때 아이오케인을 클릭해 다른 사람들에게 알리세요. 조금씩 이 독에 맞서면 이 (허구의)치명적인 독에 면역이 될 수 있습니다. 때로는 추가 도전 과제를 취함으로써 당신이 하는 일을 더 잘 할 수 있는 것 처럼 말이죠!"},"NOTIFICATION":{"OK":"모든게 좋네요","WARNING":"음? 뭔가 문제가 있는데...","WARNING_TEXT":"변경사항이 저장되지 않아서 움파룸파는 슬퍼요.","SAVED":"움파룸파가 모든 사항을 저장했습니다.","CLOSE":"알림 닫기","MAIL":"메일로 알림","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"정말 삭제하실 건가요?"},"CANCEL_ACCOUNT":{"TITLE":"계정 취소 하기","SUBTITLE":"당신이 타이가 떠난다니 아쉽네요. 부디 좋은 기억만 남기를 바랍니다 :)","PLACEHOLDER_INPUT_TOKEN":"계정 토큰 삭제","ACTION_LEAVING":"네, 나갈래요!","SUCCESS":"움파룸파가 당신 계정을 지웠습니다"},"CHANGE_EMAIL_FORM":{"TITLE":"이메일 변경하기","SUBTITLE":"한번 더 클릭하시면 이메일 정보가 업데이트 됩니다.","PLACEHOLDER_INPUT_TOKEN":"이메일 토큰 변경","ACTION_CHANGE_EMAIL":"이메일 변경하기","SUCCESS":"움파룸파가 당신의 이메일을 업데이트 하였습니다."},"ISSUES":{"PAGE_TITLE":"이슈 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트 {{projectName}}: {{projectDescription}}의 이슈 목록 패널","SECTION_NAME":"이슈","ACTION_NEW_ISSUE":"이슈 추가하기","ACTION_PROMOTE_TO_US":"유저 스토리에 등록하기","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"이 이슈가 유저 스토리에 등록되었습니다.","EXTERNAL_REFERENCE":"이 이슈가 만들어 진 곳은 ","GO_TO_EXTERNAL_REFERENCE":"원본으로 가기","ACTION_DELETE":"이슈 삭제하기","LIGHTBOX_TITLE_BLOKING_ISSUE":"걸림돌이 되는 이슈","LINK_TASKBOARD":"태스크보드","TITLE_LINK_TASKBOARD":"태스크보드로 가기","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"우선순위","SEVERITY":"심각도","TYPE":"타입"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"이 이슈를 유저 스토리에 등록하기","MESSAGE":"이 이슈에서 새 유저 스토리를 생성하시겠어요?"},"TABLE":{"COLUMNS":{"TYPE":"타입","SEVERITY":"심각도","PRIORITY":"우선순위","SUBJECT":"주제","VOTES":"투표","STATUS":"상태","MODIFIED":"수정됨","ASSIGNED_TO":"할당됨"},"TITLE_ACTION_CHANGE_STATUS":"상태 변경하기","TITLE_ACTION_ASSIGNED_TO":"할당됨","BLOCKED":"차단됨","EMPTY":{"TITLE":"보고할 이슈가 없습니다. :-)","SUBTITLE":"이슈를 찾았나요?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - 이슈 {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"상태: {{issueStatus }}. 종류: {{issueType}}, 우선순위: {{issuePriority}}. 심각도: {{issueSeverity}}. 설명: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"칸반 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트 {{projectName}}: {{projectDescription}}의 유저 스토리를 보여주는 칸반 패널","SECTION_NAME":"칸반","TITLE_ACTION_FOLD":"컬럼 접기","TITLE_ACTION_UNFOLD":"컬럼 접기","TITLE_ACTION_ADD_US":"새 유저 스토리 추가하기","TITLE_ACTION_ADD_BULK":"여러개 생성하기","ACTION_SHOW_ARCHIVED":"보관된 것 보기","ACTION_HIDE_ARCHIVED":"보관된 것 숨기기","HIDDEN_USER_STORIES":"이 상태에 있는 유저 스토리는 기본적으로 숨겨집니다.","PLACEHOLDER_CARD_TITLE":"당신의 유저 스토리들 입니다.","PLACEHOLDER_CARD_TEXT":"스토리에는 요구 사항을 구분하는 하위 태스크가 있을 수도 있습니다."},"SEARCH":{"PAGE_TITLE":"검색 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트 내에서 유저 스토리, 이슈, 태스크 또는 위키 페이지를 포함한 모든 검색 {{projectName}}: {{projectDescription}}","FILTER_EPICS":"에픽","FILTER_USER_STORIES":"유저 스토리","FILTER_ISSUES":"이슈","FILTER_TASKS":"태스크","FILTER_WIKI":"위키 페이지","PLACEHOLDER_SEARCH":"검색하기","TITLE_ACTION_SEARCH":"검색하기","EMPTY_TITLE":"검색 조건에 부합하는 결과가 하나도 없네요.","EMPTY_DESCRIPTION":"위의 탭 중 하나를 사용하거나 다시 검색하십시오."},"TEAM":{"PAGE_TITLE":"팀 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트의 모든 회원들을 보여주기 위한 팀 패널 {{projectName}}: {{projectDescription}}","SECTION_NAME":"팀","PLACEHOLDER_INPUT_SEARCH":"전체 이름 검색하기","COLUMN_MR_WOLF":"울프씨","EXPLANATION_COLUMN_MR_WOLF":" 완료한 이슈","COLUMN_IOCAINE":"아이오케인 중독자","EXPLANATION_COLUMN_IOCAINE":"복용한 아이오케인 양","COLUMN_CERVANTES":"세르반테스","EXPLANATION_COLUMN_CERVANTES":"위키 페이지가 수정되었습니다.","COLUMN_BUG_HUNTER":"버그 사냥꾼","EXPLANATION_COLUMN_BUG_HUNTER":"이슈 보고서","COLUMN_NIGHT_SHIFT":"야간 근무","EXPLANATION_COLUMN_NIGHT_SHIFT":"완료한 태스크","COLUMN_TOTAL_POWER":"전체 파워","EXPLANATION_COLUMN_TOTAL_POWER":"전체 포인트","SECTION_TITLE_TEAM":"팀 >","SECTION_FILTER_ALL":"전체","CONFIRM_LEAVE_PROJECT":"이 프로젝트를 정말로 떠나시려고요?","ACTION_LEAVE_PROJECT":"프로젝트 나가기"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[최대 크기: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"사용자 설정","USER_PROFILE":"사용자 프로필","CHANGE_PASSWORD":"비밀번호 변경하기","EMAIL_NOTIFICATIONS":"이메일 알림","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"이메일 알림","COLUMN_PROJECT":"프로젝트","COLUMN_RECEIVE_ALL":"모두 받기","COLUMN_ONLY_INVOLVED":"내가 관련된 경우에만","COLUMN_NO_NOTIFICATIONS":"알림 없음","OPTION_ALL":"전체","OPTION_INVOLVED":"관련됨","OPTION_NONE":"없음"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"프로젝트","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"프로젝트"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"기본 이미지 사용","ACTION_DELETE_ACCOUNT":"타이가 계정 삭제하기","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"이메일 보관함을 확인하세요!
    새 주소를 설정할 수 있는 방법을
    이메일로 알려드렸습니다.","CHANGE_PHOTO":"사진 변경하기","FIELD":{"USERNAME":"아이디","EMAIL":"이메일","FULL_NAME":"전체 이름","PLACEHOLDER_FULL_NAME":"이름 전체를 적어 주세요(예. 조찬제)","BIO":"소개 (최대 210자)","PLACEHOLDER_BIO":"당신에 대해서 알려 주세요.","LANGUAGE":"언어","LANGUAGE_DEFAULT":"-- 기본 언어 사용하기 --","THEME":"테마","THEME_DEFAULT":"-- 기본 테마 사용하기 --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - 위키 - {{projectName}}","PAGE_DESCRIPTION":"{{lastModifiedDate}}에 최종 수정 (총 {{totalEditions}} 회 수정) 내용: {{ wikiPageContent }}","DATETIME":"YYYY MMM DD HH:mm","REMOVE":"이 위키 페이지 삭제하기","DELETE_LIGHTBOX_TITLE":"위키 페이지 삭제하기","DELETE_LINK_TITLE":"위키 링크 삭제하기","NAVIGATION":{"HOME":"메인 페이지","SECTION_NAME":"북마크","ACTION_ADD_LINK":"북마크 추가","ALL_PAGES":"모든 위키 페이지"},"SUMMARY":{"TIMES_EDITED":"번
    수정됨","LAST_EDIT":"에
    수정됨","LAST_MODIFICATION":"마지막 수정"},"SECTION_PAGES_LIST":"모든 페이지","PAGES_LIST_COLUMNS":{"TITLE":"제목","EDITIONS":"판","CREATED":"생성됨","MODIFIED":"수정됨","CREATOR":"작성자","LAST_MODIFIER":"마지막 수정"}},"HINTS":{"SECTION_NAME":"힌트","LINK":"사용법을 알고싶으시다면 지원 페이지를 방문해주세요.","LINK_TITLE":"지원 페이지를 방문하세요","HINT1_TITLE":"프로젝트를 내보내거나 가져올 수 있다는 건 아세요?","HINT1_TEXT":"이것은 당신에게 하나의 타이가에서 당신의 모든 데이터를 추출하여 다른 곳으로 이동시킬 수 있도록 허용합니다.","HINT2_TITLE":"사용자 정의 필드를 만들 수 있다는건 아세요?","HINT2_TEXT":"이제 팀은 특정 워크 플로우에 유용한 특정 데이터를 입력하는 유연한 방법으로 사용자 정의 필드를 만들 수 있습니다.","HINT3_TITLE":"당신과 가장 관련성이 높은 순서대로 프로젝트를 정렬하세요.","HINT3_TEXT":"상단의 빠른 접근 항목에서 10개의 목록이 보여 집니다.","HINT4_TITLE":"뭘 하고 있었는지 잊었습니까?","HINT4_TEXT":"걱정마세요, 대시보드에서 당신이 연 태스크, 이슈, 유저 스토리를 작업한 순서데로 찾아볼 수 있습니다."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} 님이 {{obj_name}} 첨부파일을 업로드했습니다.","US_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 유저 스토리를 생성하였습니다.","ISSUE_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 이슈를 생성하였습니다.","TASK_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 태스크를 추가하였습니다.","TASK_CREATED_WITH_US":"{{username}} 님이 {{project_name}} {{us_name}} 유저 스토리에 {{obj_name}}을 생성하였습니다.","WIKI_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 위키 페이지를 만들었습니다.","MILESTONE_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 스프린트를 만들었습니다.","EPIC_CREATED":"{{username}} 님이 새로운 에픽을 {{project_name}} 프로젝트에 {{obj_name}} 명으로 생성하였습니다.","EPIC_RELATED_USERSTORY_CREATED":"{{username}} 님이 {{project_name}} 프로젝트에서 {{related_us_name}} 유저 스토리를 {{epic_name}} 에픽과의 연결에 사용하였습니다.","NEW_PROJECT":"{{username}} 님이 {{project_name}} 프로젝트를 만들었습니다.","MILESTONE_UPDATED":"{{username}} 님이 {{obj_name}} 스프린트를 업데이트 했습니다.","US_UPDATED":"{{obj_name}} 유저 스토리에서 \"{{field_name}}\" 속성을 {{username}} 님이 업데이트 했습니다.","US_UPDATED_WITH_NEW_VALUE":"{{username}} 님이 {{obj_name}} 유저 스토리의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.","US_UPDATED_POINTS":"{{username}} 님이 {{obj_name}} 유저 스토리의 '{{role_name}}' 포인트를 {{new_value}}로 변경하였습니다.","ISSUE_UPDATED":"{{username}}님이 {{obj_name}} 이슈의 \"{{field_name}}\" 속성을 변경하였습니다.","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} 님이 {{obj_name}} 이슈의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.","TASK_UPDATED":"{{username}} 님이 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} 님이 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.","TASK_UPDATED_WITH_US":"{{username}} 님이 {{us_name}} 유저 스토리에 있는 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 수정하였습니다.","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} 님이 {{us_name}} 유저스토리에 있는 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 수정하였습니다.","WIKI_UPDATED":"{{username}} 님이 {{obj_name}} 위키 페이지를 업데이트했습니다.","EPIC_UPDATED":"{{username}}님이 에픽 {{obj_name}}의 속성 \"{{field_name}}\"을 변경하였습니다.","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}}님이 에픽 {{obj_name}}의 속성 \"{{field_name}}\"을 {{new_value}}로 변경하였습니다.","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}}님이 에픽 {{obj_name}}의 \"{{field_name}}\"을 으로 변경하였습니다.","NEW_COMMENT_US":"{{username}} 님이 {{obj_name}} 유저 스토리에 댓글을 남겼습니다.","NEW_COMMENT_ISSUE":"{{username}} 님이 {{obj_name}} 이슈에 댓글을 남겼습니다.","NEW_COMMENT_TASK":"{{username}} 님이 {{obj_name}} 태스크에 댓글을 남겼습니다.","NEW_COMMENT_EPIC":"{{username}} 님이 {{obj_name}} 에픽에 댓글을 남겼습니다.","NEW_MEMBER":"{{project_name}}에 새 팀원이 들어왔습니다.","US_ADDED_MILESTONE":"{{username}} 님이 {{obj_name}} 유저 스토리를 {{sprint_name}}에 추가하였습니다.","US_MOVED":"{{username}} 님이 {{obj_name}} 유저 스토리를 이동했습니다.","US_REMOVED_FROM_MILESTONE":"{{username}} 님이 {{obj_name}} 유저 스토리를 백로그에 추가하였습니다.","BLOCKED":"{{username}} 님이 {{obj_name}}를 차단하였습니다.","UNBLOCKED":"{{username}} 님이 {{obj_name}}를 차단 해제하였습니다.","NEW_USER":"{{username}} 님이 타이가에 등록하였습니다.","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"이슈","TASK":"태스크"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"외부 연동 앱은 권한이 필요합니다.","PAGE_DESCRIPTION":"외부 연동 앱은 권한이 필요합니다.","AUTHORIZATION_REQUEST":"{{application}}이 당신의 타이가 계정을 사용하도록 허가하시겠어요?","LOGIN_WITH_ANOTHER_USER":"다른 사용자로 로그인 하기","AUTHORIZE_APP":"인증 앱","CANCEL":"취소"},"JOYRIDE":{"NAV":{"NEXT":"다음","BACK":"이전","SKIP":"건너뛰기","DONE":"완료됨"},"DASHBOARD":{"STEP1":{"TITLE":"프로젝트","TEXT":"환영합니다! 여기에서 당신이 참여하고 있는 프로젝트를 찾으실 수 있습니다."},"STEP2":{"TITLE":"일 하는 중","TEXT":"여기에는 당신이 작업하고 있는 유저 스토리, 태스크, 이슈들이 표시됩니다."},"STEP3":{"TITLE":"구독중","TEXT1":"그리고 여기에서 프로젝트에 대해 알고 싶은 것들을 찾을 수 있습니다.","TEXT2":"이미 타이가에 있으신걸요? ;)"},"STEP4":{"TITLE":"시작해 봅시다.","TEXT1":"여러분의 첫번째 Tagia 프로젝트를 만드세요.","TEXT2":"행운을 빌어요!"}},"BACKLOG":{"STEP1":{"TITLE":"프로젝트 요약","TEXT1":"여기에서는 당신의 프로젝트의 상태를 알 수 있습니다.","TEXT2":"관리자 메뉴에서 프로젝트의 모든 설정을 변경할 수 있어요."},"STEP2":{"TITLE":"제품 백로그","TEXT":"백 로그는 프로젝트의 요구 사항 (유저 스토리)목록입니다. 스프린트를 계획 할 곳은 다음과 같습니다."},"STEP3":{"TITLE":"스프린트","TEXT":"스프린트는 특정 작업을 완료하고 전달해야하는 짧은 기간 (일반적으로 2주)입니다."},"STEP4":{"TITLE":"유저 스토리","TEXT":"그것들은 높은 수준의 요구 사항입니다. 백 로그에 추가하고 전달해야하는 스프린트로 드래그 할 수 있습니다."}},"KANBAN":{"STEP1":{"TITLE":"워크플로우 사용자 정의하기","TEXT":"관리자를 통해 워크 플로우 상태를 매핑하는 데 필요한 열을 설정하십시오"},"STEP2":{"TITLE":"유저 스토리 & 태스크","TEXT":"유저 스토리에 더 높은 권한이 필요합니다. 다른 컬럼에 끌어 놓으세요."},"STEP3":{"TITLE":"유저 스토리 추가하기","TEXT1":"단일 유저 스토리 (유저 스토리 아이콘 추가) 또는 그 그룹 (여러개의 아이콘)을 추가 할 수 있습니다.","TEXT2":"행운을 빌어요!"}}},"DISCOVER":{"PAGE_TITLE":"프로젝트 찾기 - 타이가","PAGE_DESCRIPTION":"타이가 공공 프로젝트 디렉토리를 검색 할 수 있습니다. 백 로그, 타임 라인, 이슈 및 팀을 탐색하십시오. 가장 인기 있거나 가장 활동적인 프로젝트를 확인하십시오. 칸반 또는 스크럼으로 필터","DISCOVER_TITLE":"프로젝트 찾기","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# 개의 프로젝트를 발견}}","MOST_ACTIVE":"가장 활동적인","MOST_ACTIVE_EMPTY":"아직 활성화된 프로젝트가 없습니다.","MOST_LIKED":"가장 인기있는","MOST_LIKED_EMPTY":"아직 '좋아요' 표시한 프로젝트가 없습니다.","VIEW_MORE":"더 보기","FEATURED":"주요 프로젝트","EMPTY":"이 검색 기준으로 표시 할 프로젝트가 없습니다.
    다시 시도해주세요!","FILTERS":{"ALL":"전체","KANBAN":"칸반","SCRUM":"스크럼","PEOPLE":"사용자 찾기","WEEK":"지난 주","MONTH":"지난 달","YEAR":"작년","ALL_TIME":"모든 날짜","CLEAR":"필터 없애기"},"SEARCH":{"PAGE_TITLE":"검색 - 프로젝트 찾기 - 타이가","PAGE_DESCRIPTION":"타이가 공공 프로젝트 디렉토리를 검색 할 수 있습니다. 백 로그, 타임 라인, 이슈 및 팀을 탐색하십시오. 가장 인기 있거나 가장 활동적인 프로젝트를 확인하십시오. 칸반 또는 스크럼으로 필터","INPUT_PLACEHOLDER":"아무거나 입력하세요...","ACTION_TITLE":"검색","RESULTS":"검색 결과"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-nb.json b/dist/v-1547534999795/locales/taiga/locale-nb.json deleted file mode 100644 index 28ab9f3..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-nb.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Ja","NO":"Nei","OR":"eller","I_GET_IT":"OK, jeg forstår","LOADING":"Laster...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Lagre","CANCEL":"Avbryt","ACCEPT":"Aksepter","DELETE":"Slett","UNLINK":"Koble fra","CREATE":"Opprett","ADD":"Legg til","COPY_TO_CLIPBOARD":"Kopier til utklippstavle","COPIED_TO_CLIPBOARD":"Tekst kopiert til utklippstavlen","EDIT":"Endre","DRAG":"Dra","TAG_LINE":"Ditt smidige, gratis og åpen kildekode prosjektstyringsverktøy","TAG_LINE_2":"ELSK DITT PROSJEKT","BLOCK":"Blokker","BLOCK_TITLE":"Blokker elementet for eksempel hvis det har en avhengighet som ikke kan oppfylles","BLOCKED":"Blokkert","UNBLOCK":"Opphev blokkeringen","UNBLOCK_TITLE":"Avblokker dette elementet","BLOCKED_NOTE":"Hvorfor er dette blokkert?","BLOCKED_REASON":"Venligst forklar årsaken","CREATED_BY":"Opprettet av {{fullDisplayName}}","CLOSE":"lukk","GO_HOME":"Led meg hjem","PLUGINS":"Programtillegg","ONE_ITEM_LINE":"En enhet per linje...","NEW_BULK":"Ny sett (mange)","SUBTASKS":"Subtasks","PREVIOUS":"Previous","NEXT":"Neste","LOGOUT":"Logg ut","EXTERNAL_USER":"en ekstern bruker","GENERIC_ERROR":"En av våre Oompa Loompaer sier {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Klientkravet er nytt krav som tidligere ikke var forventet, og det er nødt til å være en del av prosjektet","TEAM_REQUIREMENT":"TeamBehov er et behov som må eksistere i prosjektet, men som ikke har noen kostnad for klienten","OWNER":"Prosjekteier","CAPSLOCK_WARNING":"Vær forsiktig! Du bruker blokkbokstaver i et felt som er for store og små bokstaver.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Slett hendelse","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Denne verdien virker å være ugyldig","TYPE_EMAIL":"Dette skal være en gyldig epost.","TYPE_URL":"Denne verdien skal være en URL","TYPE_URLSTRICT":"Denne verdien skal være en URL","TYPE_NUMBER":"Denne verdien skal være et gyldig tall.","TYPE_DIGITS":"Denne verdien skal være sifre.","TYPE_DATEISO":"Denne verdien skal være en gyldig dato (YYYY-MM-DD).","TYPE_ALPHANUM":"Denne verdien skal være alfanumerisk.","TYPE_PHONE":"Denne verdien skal være et gyldig telefonnummer.","NOTNULL":"Denne verdien skal ikke være \"null\"","NOT_BLANK":"Denne verdien skal ikke være blank.","REQUIRED":"Denne verdien er nødvendig.","REGEXP":"Denne verdien virker å være ugyldig","MIN":"Denne verdien skal være større eller lik %s.","MAX":"Denne verdien skal være mindre eller lik %s.","RANGE":"Denne verdien skal være mellom %s og %s.","MIN_LENGTH":"Denne verdien er for kort. Den skal ha %s eller flere bokstaver.","MAX_LENGTH":"Denne verdien er for lang. Den skal ha %s eller færre bokstaver.","RANGE_LENGTH":"Lengden på denne verdien er ikke gydlig. Den skal være mellom %s og %s teng lang.","MIN_CHECK":"Du må velge minst %s valg.","MAX_CHECK":"Du må velge %s valg eller mindre.","RANGE_CHECK":"Du må velge mellom %s og %s valg.","EQUAL_TO":"Denne verdien skal være den samme.","LINEWIDTH":"En eller flere av linjene er kanskje for lang. Prøv å hold de under %s tegn.","PIKADAY":"Ugyldig datoformat , kan du bruke DD MMM YYYY (eks: 23 mars 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Forrige Måned","NEXT_MONTH":"Neste Måned","MONTHS":{"JAN":"Januar","FEB":"Februar","MAR":"Mars","APR":"April","MAY":"Mai","JUN":"Juni","JUL":"Juli","AUG":"August","SEP":"September","OCT":"Oktober","NOV":"November","DEC":"Desember"},"WEEK_DAYS":{"SUN":"Søndag","MON":"Mandag","TUE":"Tirsdag","WED":"Onsdag","THU":"Torsdag","FRI":"Fredag","SAT":"Lørdag"},"WEEK_DAYS_SHORT":{"SUN":"Man","MON":"Man","TUE":"Tirs","WED":"Ons","THU":"Tors","FRI":"Fre","SAT":"Lør"}},"SEE_USER_PROFILE":"Se See {{username }} profil","USER_STORY":"Brukerhistorie","TASK":"Oppgave","ISSUE":"Hendelse","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Slett etikett","ADD":"Legg til etikett"},"DESCRIPTION":{"EMPTY":"Tomme felter er så kjedelig... kom igjen, vær kreativ...","NO_DESCRIPTION":"Ingen beskrivelse enda"},"FIELDS":{"SUBJECT":"Subjekt","NAME":"Navn","URL":"URL","DESCRIPTION":"Beskrivelse","VALUE":"Verdi","SLUG":"Slug","COLOR":"Farge","IS_CLOSED":"Er lukket?","STATUS":"Status","TYPE":"Type","SEVERITY":"Alvorlighetsgrad","PRIORITY":"Prioritet","ASSIGNED_TO":"Tildelt til","ASSIGNED_USERS":"Assigned users","POINTS":"Poeng","IS_BLOCKED":"er blokkert","REF":"Ref","VOTES":"Stemmer","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Alle"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Ikke tildelt","ASSIGN":"Tildel","DELETE_ASSIGNMENT":"Slett tildeling","REMOVE_ASSIGNED":"Fjern tildeling","TOO_MANY":"...for mange brukere, forstett å filtrere","CONFIRM_UNASSIGNED":"Er du sikker på at du vil la den være ikke tildelt?","TITLE_ACTION_EDIT_ASSIGNMENT":"Rediger tildeling","SELF":"Tildel til meg"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Lukket","OPEN":"Åpen"},"WATCHERS":{"WATCHERS":"Følgere","ADD":"Legg til følgere","TITLE_ADD":"Legg til et prosjektmedlem til følgerlisten","DELETE":"Slett følger","TITLE_LIGHTBOX_DELETE_WARTCHER":"Slett følger..."},"WATCH_BUTTON":{"WATCH":"Følg","WATCHING":"Følger med på","UNWATCH":"Ikke overvåk","WATCHERS":"Følgere","BUTTON_TITLE":"Følg/Ikke følg denne enheten","COUNTER_TITLE":"{total, plural, one{en følger} other{# følgere}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Stem opp / Stem ned dette elementet","COUNTER_TITLE":"{total, plural, one{en stemme} other{# stemmer}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Egendefinerte felter","SAVE":"Lagre Egendefinert Felt","EDIT":"Endre Egendefinert Felt","DELETE":"Slett egendefinert egenskap","CONFIRM_DELETE":"Husk at alle verdier i dette egendefinerte feltet vil bli slettet.\nEr du sikker på at du vil fortsette?"},"FILTERS":{"INPUT_PLACEHOLDER":"Subjekt eller referanse","TITLE_ACTION_FILTER_BUTTON":"Søk","TITLE":"Filtre","TITLE_ACTION_SEARCH":"Søk","ACTION_SAVE_CUSTOM_FILTER":"lagre som egendefinert filter","PLACEHOLDER_FILTER_NAME":"Skriv filternavnet og trykk enter","APPLIED_FILTERS_NUM":"filters applied","CATEGORIES":{"TYPE":"Type","STATUS":"Status","SEVERITY":"Alvorlighetsgrad","PRIORITIES":"Prioriteter","TAGS":"Etiketter","ASSIGNED_TO":"Tildelt til","ASSIGNED_USERS":"Assigned users","ROLE":"Rolle","CREATED_BY":"Laget av","CUSTOM_FILTERS":"Egendefinert filtre","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown syntaks hjelp"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Episk","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"Sprinter","VIEW_SPRINTS":"Se sprinter","ADD_SPRINTS":"Legg til sprinter","MODIFY_SPRINTS":"Rediger sprinter","DELETE_SPRINTS":"Slett sprinter"},"USER_STORIES":{"NAME":"Brukerhistorie","VIEW_USER_STORIES":"Se på brukerhistorier","ADD_USER_STORIES":"Legg til brukerhistorier","MODIFY_USER_STORIES":"Rediger brukerhistorier","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Slett brukerhistorier"},"TASKS":{"NAME":"Oppgaver","VIEW_TASKS":"Se på oppgaver","ADD_TASKS":"Legg til oppgave","MODIFY_TASKS":"Rediger oppgaver","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Slett oppgaver"},"ISSUES":{"NAME":"Hendelser","VIEW_ISSUES":"Vis hendelser","ADD_ISSUES":"Legg til hendelser","MODIFY_ISSUES":"Endre hendelser","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Slett hendelser"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Se wiki-sider","ADD_WIKI_PAGES":"Legg til wiki-sider","MODIFY_WIKI_PAGES":"Endre wiki-sider","DELETE_WIKI_PAGES":"Slett wiki-sider","VIEW_WIKI_LINKS":"Se wiki-lenker","ADD_WIKI_LINKS":"Legg til wiki-lenker","DELETE_WIKI_LINKS":"Slett wiki-lenker"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Logg på Taiga, prosjektledelsesplattformen for startups, smidige utviklere og designere som ønsker et enkelt og pent verktøy som gjør arbeidet en fornøyelse."},"AUTH":{"INVITED_YOU":"har invitert deg til å delta i prosjektet","NOT_REGISTERED_YET":"Ikke registrert?","REGISTER":"Registrer","CREATE_ACCOUNT":"opprett gratis konto her"},"LOGIN_COMMON":{"HEADER":"Jeg har allerede en konto","PLACEHOLDER_AUTH_NAME":"Brukernavn eller e-post (case sensitiv)","LINK_FORGOT_PASSWORD":"Glemte det?","TITLE_LINK_FORGOT_PASSWORD":"Har du glemt ditt passord?","ACTION_ENTER":"Enter","ACTION_SIGN_IN":"Login","PLACEHOLDER_AUTH_PASSWORD":"Passord (case sensitiv)","ALT_LOGIN":"Eller logg inn med"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Ifølge våre Oompa Loompaer er ditt brukernavn, e-post eller passord feil.","SUCCESS":"Våre Oompa Loompaer er glade, velkommen til Taiga ."},"REGISTER":{"PAGE_TITLE":"Registrer - Taiga","PAGE_DESCRIPTION":"Opprett en konto i Taiga , prosjektledelsesplattformen for startups, smidige utviklere og designere som ønsker et enkelt og pent verktøy som gjør arbeidet en fornøyelse."},"REGISTER_FORM":{"TITLE":"Registrer en ny Taiga konto (gratis)","PLACEHOLDER_NAME":"Velg et brukernavn (case sensitiv)","PLACEHOLDER_FULL_NAME":"Skriv inn fullt navn","PLACEHOLDER_EMAIL":"Din e-post","PLACEHOLDER_PASSWORD":"Set et passord (case sensitiv)","ACTION_SIGN_UP":"Registrer","TITLE_LINK_LOGIN":"Logg inn","LINK_LOGIN":"Er du allerede registrert? Logg inn"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Glemt passord - Taiga","PAGE_DESCRIPTION":"Skriv inn brukernavn eller e-post for å få et nytt passord, og du kan få tilgang til Taiga igjen."},"FORGOT_PASSWORD_FORM":{"TITLE":"Obs, har du glemt passordet ditt?","SUBTITLE":"Skriv inn ditt brukernavn eller e-post for å få et nytt","PLACEHOLDER_FIELD":"Brukernavn eller e-post","ACTION_RESET_PASSWORD":"Nullstill passord","LINK_CANCEL":"Eh, ta meg tilbake. Jeg tror jeg husker det.","SUCCESS_TITLE":"Sjekk innboksen din!","SUCCESS_TEXT":"\nVi har sendte deg en e-post med instruksjoner for å sette et nytt passord","ERROR":"I følge våre Oompa Loompas har du ikke registert deg ennå."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Endre ditt passord - Taiga","SECTION_NAME":"Endre passord","FIELD_CURRENT_PASSWORD":"Nåværende passord","PLACEHOLDER_CURRENT_PASSWORD":"Din nåværende passord (eller tomt hvis du ikke har ett)","FIELD_NEW_PASSWORD":"Nytt passord","PLACEHOLDER_NEW_PASSWORD":"Skriv inn nytt passord","FIELD_RETYPE_PASSWORD":"Gjenta nytt passord","PLACEHOLDER_RETYPE_PASSWORD":"Skriv inn passordet på nytt","ERROR_PASSWORD_MATCH":"Passordene er ikke like"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Opprett ett nytt Taiga pass","SUBTITLE":"Og hei, det kan være lurt å spise litt mer jern-rik mat, det er godt for hjernen din :P","PLACEHOLDER_NEW_PASSWORD":"Nytt passord","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Skriv inn passord på nytt","ACTION_RESET_PASSWORD":"Nullstill passord","ERROR":"Våre Oompa Loompaer finner ikke forespørselen om å gjenopprette passordet ditt. Prøv å å gjennopprette en gang til.","SUCCESS":"Oompa Loompaene våre lagret ditt nye passord.
    Prøv å logge inn med det."},"INVITATION":{"PAGE_TITLE":"Invitasjonsbekreftelse - Taiga","PAGE_DESCRIPTION":"Godta invitasjonen til å delta i et prosjekt i Taiga, prosjektledelsesplattformen for startups, smidige utviklere og designere som ønsker et enkelt og pent verktøy som gjør arbeidet fornøyelig."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Våre Oompa Loompas can ikke finne invitasjonen din.","SUCCESS":"Du er nå sluttet til prosjektet {{project_name}}, velkommen!"},"HOME":{"PAGE_TITLE":"Hjem - Taiga","PAGE_DESCRIPTION":"Taiga hjemmeside med dine viktigste prosjekter og alle dine tildelte og overvåkede brukerhistorier, oppgaver og hendelser","EMPTY_WORKING_ON":"Det føles tom, gjør det ikke? Start å jobbe med Taiga og du vil se her brukerhistorier, opggaver og hendelser du jobber med.","EMPTY_WATCHING":"Følg Brukerhistorier, Oppgaver, Hendelser i dine projekter og bli varslet når noe blir endret :)","EMPTY_PROJECT_LIST":"Du har ikke noen prosjekter enda","WORKING_ON_SECTION":"Arbeider med","WATCHING_SECTION":"Følger med på","DASHBOARD":"Prosjektoversikt"},"EPICS":{"TITLE":"EPISK","SECTION_NAME":"Episk","EPIC":"EPISK","PAGE_TITLE":"Episk - {{projectName}}","PAGE_DESCRIPTION":"Liste over episke hendelser i prosjekt {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ Legg til episk hendelse","UNASSIGNED":"Ikke tildelt"},"EMPTY":{"TITLE":"Det ser ut som det ikke finnes noen episke hendelser enda","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Stemmer","NAME":"Navn","PROJECT":"Prosjekt","SPRINT":"Sprint","ASSIGNED_TO":"Assigned","STATUS":"Status","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Blokkert","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Mine prosjekter - Taiga","PAGE_DESCRIPTION":"Liste med alle dine prosjekter du kan endre rekkefølgen på eller opprette et nytt.","MY_PROJECTS":"Mine prosjekter"},"ATTACHMENT":{"SECTION_NAME":"vedlegg","TITLE":"{{ fileName }} lastet opp {{ date }}","LIST_VIEW_MODE":"Listevisnings-modus","GALLERY_VIEW_MODE":"Gallerivisningsmodus","DESCRIPTION":"Skriv en kort beskrivelse","DEPRECATED":"(avviklet)","DEPRECATED_FILE":"Avviklet?","ADD":"Legg til nytt vedlegg. {{maxFileSizeMsg}}","DROP":"Slipp vedlegg her!","SHOW_DEPRECATED":"+ vis foreldete vedlegg","HIDE_DEPRECATED":"- skjul foreldete vedlegg","COUNT_DEPRECATED":"({{ counter }} avviklet)","MAX_UPLOAD_SIZE":"Maksimal størrelse for opplastning er {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Vi var ikke kapable til å laste opp '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Slett vedlegg...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"vedlegget '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Vi hadde ikke mulighet til å slette: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Forrige","NEXT":"Neste"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Rediger verdi","TITLE_ACTION_DELETE_VALUE":"Slett verdi","TITLE_ACTION_DELETE_TAG":"Slett etikett"},"HELP":"Trenger du hjelp? Sjekk ut vår hjelpeside!","PROJECT_DEFAULT_VALUES":{"TITLE":"Standard verdier","SUBTITLE":"Sett standard verdi for alle valgte felter."},"MEMBERSHIPS":{"TITLE":"Konfigurer medlemmer","PAGE_TITLE":"Medlemskap - {{projectName}}","ADD_BUTTON":"+ Nytt medlem","ADD_BUTTON_TITLE":"Legg til nytt medlem","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"Dersom du ønsker å legge til flere medlemmer, kontakt prosjekteier {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Dette prosjektet har nådd sin grense for ({{members}}) tillatte medlemmer. Dersom du ønsker å øke den grensen, venligst kontakt en administrator."},"PROJECT_EXPORT":{"TITLE":"Eksport","SUBTITLE":"Eksportér prosjektet for å lagre en backup, eller for å lage et nytt en basert på dette.","EXPORT_BUTTON":"Eksport","EXPORT_BUTTON_TITLE":"Eksporter ditt prosjekt","LOADING_TITLE":"Vi genererer din eksportfil","DUMP_READY":"Din data-dump-fil er klar!","LOADING_MESSAGE":"Vennligst ikke lukk denne siden.","ASYNC_MESSAGE":"Vi sender deg en epost når det er klart.","SYNC_MESSAGE":"Hvis nedlastningen ikke starter automatisk, klikk her.","ERROR":"Våre Oompa Loompaer har problemer med å generere din data dump. Vennligst prøv på nytt.","ERROR_BUSY":"Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter."},"MODULES":{"TITLE":"Moduler","EPICS":"Episk","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Hold styr på dine brukerhistorier for å vedlikeholde en organisert visning over kommende og prioritert arbeid.","NUMBER_SPRINTS":"Antatt antall sprinter","NUMBER_SPRINTS_HELP":"0 for et ubestemt antall","NUMBER_US_POINTS":"Antatt total av brukerhistoriepoeng","NUMBER_US_POINTS_HELP":"0 for et ubestemt antall","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organiser prosjektet ditt på en avabalansert måte med dette panelet.","ISSUES":"Hendelser","ISSUES_DESCRIPTION":"Forfølg feil, spørsmål og forbedringer relatert til ditt prosjekt. Ikke gå glipp av noe!","WIKI":"Wiki","WIKI_DESCRIPTION":"Legg til, endre eller slette innhold i samarbeid med andre. Dette er det rette stedet for din prosjektdokumentasjon.","MEETUP":"Møtes","MEETUP_DESCRIPTION":"Velg ditt videokonferansesystem","SELECT_VIDEOCONFERENCE":"Velg et videokonferansesystem","SALT_CHAT_ROOM":"Legg et prefiks til navnet til chatterommet","JITSI_CHAT_ROOM":"Jitsl","APPEARIN_CHAT_ROOM":"Vises","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Egendefinert","URL_CHAT_ROOM":"URL til ditt chatrom"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Prosjektprofil - {{projectName}}","PROJECT_DETAILS":"Prosjektdetaljer","PROJECT_NAME":"Prosjektnavn","TAGS":"Etiketter","DESCRIPTION":"Beskrivelse","RECRUITING":"Leter dette prosjektet etter folk?","RECRUITING_MESSAGE":"Hva leter du etter?","RECRUITING_PLACEHOLDER":"Definer profilene du leter etter","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Offentlig prosjekt","PRIVATE_PROJECT":"Privat prosjekt","PRIVATE_OR_PUBLIC":"Hva er forskjellen mellom offentlige og private prosjekt?","DELETE":"Slett dette prosjektet","CHANGE_LOGO":"Endre logo","ACTION_USE_DEFAULT_LOGO":"Bruk standardbilde","MAX_PRIVATE_PROJECTS":"Du har nådd maksimalt antall private prosjekter som tillates med din gjeldende plan","MAX_PRIVATE_PROJECTS_MEMBERS":"Det maksimale antall medlemmer for private prosjekter er overskredet","MAX_PUBLIC_PROJECTS":"Dessverre , du har nådd det maksimale antallet offentlige prosjekter som tillates av din gjeldende plan","MAX_PUBLIC_PROJECTS_MEMBERS":"Prosjektet overskrider maksimalt antall medlemmer for offentlige prosjekter","PROJECT_OWNER":"Prosjekteier","REQUEST_OWNERSHIP":"Be om eierskap","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Ønsker du å bli den nye prosjekteieren?","REQUEST_OWNERSHIP_DESC":"Be om at den nåværende prosjekteieren {{name}} overfører eierskapet av dette prosjektet til deg.","REQUEST_OWNERSHIP_BUTTON":"Be om","REQUEST_OWNERSHIP_SUCCESS":"Vi vil varsle prosjekteieren","CHANGE_OWNER":"Endre eier","CHANGE_OWNER_SUCCESS_TITLE":"Ok, din henvendelse har blitt sendt!","CHANGE_OWNER_SUCCESS_DESC":"Vi vil varsle deg via epost hvis anmodningen om eierskap til prosjektet ble godtatt eller avslått"},"REPORTS":{"TITLE":"Rapporter","SUBTITLE":"Eksporter dine prosjektdata i CSV-format og lag dine egne rapporter.","DESCRIPTION":"Last ned en CSV fil eller kopier den genererte URL'en og åpne den i din favoritt tekstbehandler for å lage dine egne prosjektdatarapporter. Du vil kunne visualisere og analysere alle dine data enkelt.","HELP":"Hvordan bruke dette i mitt eget regneark?","REGENERATE_TITLE":"Endre URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"brukerhistorie-rapporter","SECTION_TITLE_TASK":"oppgaverapport","SECTION_TITLE_ISSUE":"Hendelsesrapport","DOWNLOAD":"Last ned CSV","URL_FIELD_PLACEHOLDER":"Venligst regenerer CSV url","TITLE_REGENERATE_URL":"Regenerer CSV url","ACTION_GENERATE_URL":"Generer URL","ACTION_REGENERATE":"Generer på nytt","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Slett"},"CUSTOM_FIELDS":{"TITLE":"Egendefinerte felter","SUBTITLE":"Spesifiser egendefinerte felter for dine brukerhistorier, oppgaver og hendelser","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"Brukerhistorier tilpassede felter","US_ADD":"Legg til et egendefinert felt i Brukerhistorier","TASK_DESCRIPTION":"Oppgaver egendefinerte felter","TASK_ADD":"Legg til et egendefinert felt i flere oppgaver","ISSUE_DESCRIPTION":"Hendelser egendefinerte felter","ISSUE_ADD":"Legg til et egendefinert felt i Hendelser","FIELD_TYPE_TEXT":"Tekst","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Flere linjer","FIELD_TYPE_DATE":"Dato","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Prosjekt verdier - {{projectName}}","REPLACEMENT":"Alle elementer med denne verdien vil bli endre til","ERROR_DELETE_ALL":"Du kan ikke slette alle verdier."},"PROJECT_VALUES_POINTS":{"TITLE":"Poeng","SUBTITLE":"Spesifiser poengene dine brukerhistorier kan estimeres som","US_TITLE":"BH poeng","ACTION_ADD":"Legg til nytt poeng"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioriteter","SUBTITLE":"Angi prioriteringen som dine hendelser vil ha","ISSUE_TITLE":"Hendelse prioriteringer","ACTION_ADD":"Legg til ny prioritet"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Alvorlighetsgrad","SUBTITLE":"Spesifiser alvorlighetsgraden som hendelsen vil ha","ISSUE_TITLE":"Hendelse alvorlighetsgrad","ACTION_ADD":"Legg til ny alvorlighetsgrad"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"Angi statusene som dine brukerhistorier, oppgaver og hendelser vil følge","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Oppgave Statuser","ISSUE_TITLE":"Hendelsesstatuser"},"PROJECT_VALUES_TYPES":{"TITLE":"Typer","SUBTITLE":"Angi hvilke typer dine hendelser kan være","ISSUE_TITLE":"Hendelsestyper","ACTION_ADD":"Legg til {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiketter","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Legg til etikett","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Legg til ny status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roller - {{projectName}}","WARNING_NO_ROLE":"Vær forsiktig, ingen roller i ditt prosjekt vil kunne estimere poengverdier for brukerhistorier","HELP_ROLE_ENABLED":"Når aktivert; medlemmer tildelt denne rollen vil kunne estimere poengverdier for brukerhistorier","DISABLE_COMPUTABLE_ALERT_TITLE":"Er du sikker på at du vil deaktivere denne rollens beregninger?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Hvis du deaktiverer estimeringstillatelser for rollen {{roleName}} vil alle tidligere anslag gjort av denne rollen bli fjernet","COUNT_MEMBERS":"{{ role.members_count }} medlemmer med denne rollen","TITLE_DELETE_ROLE":"Slett rolle","REPLACEMENT_ROLE":"Alle brukerene med denne rollen vil bli flyttet til","WARNING_DELETE_ROLE":"Vær forsiktig! Alle rolle-estimatene vil bli fjernet","ERROR_DELETE_ALL":"Du kan ikke slette alle verdier","EXTERNAL_USER":"Ekstern bruker","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Hemmelig nøkkel","PAYLOAD_URL":"Nyttelast URL","VALID_IPS":"Gyldige opprinnelses IP-adresser (atskilt med,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket forespørsler er ikke signert så den beste måten å verifisere opphavet på er med IP. Hvis feltet er tomt blir det ingen IP validering."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"GitHub-forespørsler er ikke signert så den beste måten å verifisere opprinnelsen på er med IP. Hvis feltet er tomt blir det ingen IP validering."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webkoblinger","ADD_NEW":"Legg til en ny webkobling","TYPE_NAME":"Skriv inn tjenestenavn","TYPE_PAYLOAD_URL":"Skriv inn tjenestens payload url","TYPE_SERVICE_SECRET":"Skriv inn tjenesten hemmelige nøkkel","SAVE":"Lagre webkobling","CANCEL":"Fjern Webkobling","SHOW_HISTORY":"(Vis historie)","TEST":"Test Webkobling","EDIT":"Rediger Webkobling","DELETE":"Slett Webkobling","REQUEST":"Be om","RESEND_REQUEST":"Send forespørsel på nytt","HEADERS":"Overskrifter","PAYLOAD":"Payload","RESPONSE":"Respons","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Skjul historikk)","ACTION_HIDE_HISTORY_TITLE":"Skjul historikk detaljer","ACTION_SHOW_HISTORY":"(Vis historie)","ACTION_SHOW_HISTORY_TITLE":"Vis historiedetaljer","WEBHOOK_NAME":"Webkobling \"{{name}}\""},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{Seksjon navn}} - Egendefinerte felter - {{prosjekt Name}}","ADD":"Legg til et egendefinert felt","EDIT":"Endre Egendefinert Felt","DELETE":"Slett Egendefinert felt","SAVE_TITLE":"Lagre Egendefinert Felt","CANCEL_TITLE":"Avbryt opprettelsen","SET_FIELD_NAME":"Sett navnet til ditt egendefinerte felt","SET_FIELD_DESCRIPTION":"Gi en beskrivelse til ditt egendefinerte felt","FIELD_TYPE_DEFAULT":"-- velg en --","ACTION_UPDATE":"Oppdater Egendefinert Felt","ACTION_CANCEL_EDITION":"Avbryt redigering"},"MEMBERSHIP":{"COLUMN_MEMBER":"Medlem","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rolle","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Aktiv","STATUS_PENDING":"Avventer","DELETE_MEMBER":"Slett medlem","RESEND":"Send igjen","SUCCESS_SEND_INVITATION":"Vi har sendt invitasjonen på nytt til '{{email}}'.","SUCCESS_DELETE":"Vi har slettet {{message}}.","ERROR_DELETE":"Vi har ikke vært i stand til å slette {{message}}.","DEFAULT_DELETE_MESSAGE":"invitasjonen til {{epost}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Standardverdi for poengvelger","LABEL_TASK_STATUS":"Standardverdi for oppgave statusvelger","LABEL_ISSUE_TYPE":"Standard verdi for hendelses type-velger","LABEL_ISSUE_STATUS":"Standard verdi for hendelse statusvelger","LABEL_PRIORITY":"Standardverdi for prioritetsvelger","LABEL_SEVERITY":"Standardverdi for alvorlighetsgradsvelgeren"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Skriv et navn til den nye statusen","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Skriv et navn til det nye elementet"},"US_STATUS":{"ACTION_ADD_STATUS":"Legg til ny status","IS_ARCHIVED_COLUMN":"Arkivert","IS_CLOSED_COLUMN":"Lukket","WIP_LIMIT_COLUMN":"WIP Grense","PLACEHOLDER_WRITE_NAME":"Skriv et navn til den nye statusen"},"MENU":{"PROJECT":"Prosjekt","ATTRIBUTES":"Egenskaper","MEMBERS":"Medlemmer","PERMISSIONS":"Tilganger","INTEGRATIONS":"Integrasjoner"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Poeng","PRIORITIES":"Prioriteter","SEVERITIES":"Alvorlighetsgrad","TYPES":"Typer","CUSTOM_FIELDS":"Egendefinerte felter","TAGS":"Etiketter","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roller","ACTION_NEW_ROLE":"+ Ny rolle","TITLE_ACTION_NEW_ROLE":"Legg til ny rolle"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Har du lyst til å bli den nye prosjekteieren?","PRIVATE":"Privat","ACCEPTED_PROJECT_OWNERNSHIP":"Gratulerer! Du er nå den nye prosjekteieren.","REJECTED_PROJECT_OWNERNSHIP":"OK. Vi kontakter den nåværende prosjekteieren","ACCEPT":"Aksepter","REJECT":"Avvis","PROPOSE_OWNERSHIP":"{{owner}}, den nåværende eiere av prosjekt {{project}} har spurt om du vil bli den nye prosjekteieren.","ADD_COMMENT":"Har du lyst til å gi en kommentar til prosjekteieren?","UNLIMITED_PROJECTS":"Ubegrenset","OWNER_MESSAGE":{"PRIVATE":"Husk, du kan eie opp til {{maxProjects}} private prosjekter. Du eier for tiden {{currentProjects}} private prosjekter","PUBLIC":"Husk, du kan eie opp til {{maxProjects}} offentlige prosjekter. Du eier foreløpig {{currentProjects}} offentlige prosjekter"},"CANT_BE_OWNED":"For øyeblikket kan du ikke bli eier av et prosjekt av denne typen. Dersom du ønsker å bli eier av dette prosjektet, venligst kontakt en administrator så de kan endre dine kontoinstillinger slik at du kan eie et prosjekt."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Endre profil","CLOSED_US":"Lukket historie","PROJECTS":"Prosjekter","PROJECTS_EMPTY":"{{username}} har ikke prosjekter enda","CONTACTS":"Kontakter","CONTACTS_EMPTY":"{{username}} har ingen kontakter enda","CURRENT_USER_CONTACTS_EMPTY":"Du har ingen kontakter enda","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Personene som du jobber sammen med i Taiga vil automatisk bli dine kontakter","TABS":{"ACTIVITY_TAB":"Tidslinje","ACTIVITY_TAB_TITLE":"Vis all aktiviteten til denne brukeren","PROJECTS_TAB":"Prosjekter","PROJECTS_TAB_TITLE":"Liste over alle prosjekter som brukeren er medlem av","LIKES_TAB":"Liker","LIKES_TAB_TITLE":"List alle \"liker\" gjort av denne brukeren","VOTES_TAB":"Stemmer","VOTES_TAB_TITLE":"List alle stemmer gitt av denne brukeren","WATCHED_TAB":"Overvåket","WATCHED_TAB_TITLE":"List alle element overvåket av denne brukeren","CONTACTS_TAB":"Kontakter","CONTACTS_TAB_TITLE":"List alle kontakter laget av denne brukeren"}},"PROFILE_SIDEBAR":{"TITLE":"Din profil","DESCRIPTION":"Alle kan se alt du gjør og hva du jobber med. Legg til en informativ biografi av deg selv.","ADD_INFO":"Endre bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Skriv noe...","FILTER_TYPE_ALL":"Alle","FILTER_TYPE_ALL_TITLE":"Vis alle","FILTER_TYPE_PROJECTS":"Prosjekter","FILTER_TYPE_PROJECTS_TITLE":"Vis kun prosjekter","FILTER_TYPE_EPICS":"Episk","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Historier","FILTER_TYPE_USER_STORIES_TITLE":"Vis kun brukerhistorier","FILTER_TYPE_TASKS":"Oppgaver","FILTER_TYPE_TASKS_TITLE":"Vis kun oppgaver","FILTER_TYPE_ISSUES":"Hendelser","FILTER_TYPE_ISSUES_TITLE":"Vis kun hendelser","EMPTY_TITLE":"Det ser ut som om det ikke er noe å vise her."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reorganiser prosjektene dine etter de mest brukte.
    De topp 10 mest brukte prosjektene vil vises i navigasjonslenken på toppen.","PRIVATE":"Privat prosjekt","LOOKING_FOR_PEOPLE":"Dette prosjekter søker etter mennesker","FANS_COUNTER_TITLE":"{total, plural, one{en fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{en følger} other{# følgere}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{ett medlem} other{# medlemmer}}","BLOCKED_PROJECT":{"BLOCKED":"Blokkert prosjekt","THIS_PROJECT_IS_BLOCKED":"Dette prosjektet er midlertidig blokkert","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"For å avblokkere dine prosjekter, kontakt administratoren"},"SECTION":{"SEARCH":"Søk","TIMELINE":"Tidslinje","EPICS":"Episk","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Hendelser","WIKI":"Wiki","TEAM":"Team","MEETUP":"Møtes","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Opprett prosjekt","MANAGE_PROJECTS":"Håndter prosjekter","TITLE_CREATE_PROJECT":"Opprett prosjekt","HELP_TITLE":"Taiga Brukerstøtte","HELP":"Hjelp","HOMEPAGE":"Hjemmeside","FEEDBACK_TITLE":"Gi tilbakemelding","FEEDBACK":"Tilbakemelding","NOTIFICATIONS_TITLE":"Endre dine varslingsinstillinger","NOTIFICATIONS":"Varsler","VIEW_PROFILE_TITLE":"Vis Profil","VIEW_PROFILE":"Vis Profil","EDIT_PROFILE_TITLE":"Rediger din profil","EDIT_PROFILE":"Rediger Profil","CHANGE_PASSWORD_TITLE":"Endre passord","CHANGE_PASSWORD":"Endre passord","DASHBOARD_TITLE":"Dashbord","DISCOVER_TITLE":"Oppdag populære prosjekter","DISCOVER":"Oppdag"},"LIKE_BUTTON":{"LIKE":"Liker","LIKED":"Likt","UNLIKE":"Ikke lik","BUTTON_TITLE":"Like eller ikke like dette prosjektet","COUNTER_TITLE":"{total, plural, one{en fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Overvåk dette prosjektet og sett varslingsstrategi","WATCH":"Følg","WATCHING":"Følger med på","COUNTER_TITLE":"{total, plural, one{en følger} other{# følgere}}","OPTIONS":{"NOTIFY_ALL":"Motta alle varsler","NOTIFY_ALL_TITLE":"Motta alle varsler for dette prosjektet","NOTIFY_INVOLVED":"Kun involvert","NOTIFY_INVOLVED_TITLE":"Motta varsler kun når du er involvert","UNWATCH":"Ikke overvåk","UNWATCH_TITLE":"Ikke overvåk dette prosjektet"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Opprett prosjekt","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Importer prosjekt","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Offentlig Prosjekt","PRIVATE_PROJECT":"Privat Prosjekt"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Våre Oompa Loompaer importerer ditt prosjekt","ASYNC_IN_PROGRESS_MESSAGE":"Denne prosessen kan ta noen minutter
    Vi vil sende deg en e-post når den er klar","UPLOAD_IN_PROGRESS_MESSAGE":"Opplastet {{uploadedSize}} av {{totalSize}}","ERROR":"Våre Oompa Loompaer har problemer med å importere din data-dump. Vennligst prøv på nytt.","ERROR_TOO_MANY_REQUEST":"Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter.","ERROR_MESSAGE":"Våre Oompa Loompaer har problemer med å importere din data-dump: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})","SYNC_SUCCESS":"Importen av ditt prosjekt var vellykket","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Prosjektmedlemmer","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Tildel","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"søk","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Dessverre, din nåværende plan tillater ikke private prosjekter","DESC":"Prosjektet du prøver å importere er privat. Dessverre tillater ikke din gjeldende flere private prosjekter."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Dessverre din gjeldende plan tillatee ikke flere offentlige prosjekter","DESC":"Prosjektet du prøver å importere er offentlig. Dessverre, din nåværende plan tillater ikke offentlige prosjekter."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Din nåværende plan tillater et maksimalt antall av {{max_memberships}} medlemmer per private prosjekt"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Din nåværende plan tillater maksimum {{max_memberships}} medlemmer per offentlige prosjekt."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Dessverre, din nåværende plan tillater ikke flere private prosjekter eller mer enn {{max_memberships}} medlemmer per private prosjekt","DESC":"Prosjektet som du prøver å importere er privat og har {{members}} medlemmer."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Dessverre, din nåværende plan tillater ikke flere offentlige prosjekter eller en økning til fler enn {{max_memberships}} medlemmer per offentlige prosjekt","DESC":"Prosjektet du prøver å importere er offentlig og har fler enn {{members}} medlemmer."}},"IN_PROGRESS":{"TITLE":"Importer prosjekt","DESCRIPTION":"Denne prosessen kan ta en stund, vennligst hold vinduet åpent."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Hendelser","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Er du sikker på at du vil slette din Taiga konto?","CANCEL":"Tilbake til instillinger","ACCEPT":"Slett konto","BLOCK_PROJECT":"Merk at alle prosjektene der du står som eier vil bli blokkert etter at du sletter din konto. Dersom du ikke ønsker dette, overfør eierskapet til et annet medlem før du sletter kontoen."},"DELETE_PROJECT":{"TITLE":"Slett prosjekt","QUESTION":"Er du sikker på at du vil slette dette prosjektet?","SUBTITLE":"All prosjekt-data (burkerhistorier, oppgaver, saker, sprinter og wiki-sider) vil gå tapt! :(","CONFIRM":"Ja, jeg er virkelig sikker"},"ASSIGNED_TO":{"SELECT":"Velg ansvarlig","SEARCH":"Søk etter brukere"},"ADD_MEMBER":{"TITLE":"Nytt medlem","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Add email","REMOVE":"Remove","INVITE":"Invite","CHOOSE_ROLE":"Choose a role","PLACEHOLDER_INVITATION_TEXT":"(Valgfritt) Legg til en egen tekst til invitasjonen. Fortell dine nye medlemmer noe fantastisk ;-)","HELP_TEXT":"Hvis brukere allerede er registrerte på Taiga, vil de bli lagt til automatisk. Ellers vil de motta en invitasjon."},"FEEDBACK":{"TITLE":"Fortell oss noe...","COMMENT":"...en feil, noen forslag, noe kult... eller til og med ditt værste mareritt med Taiga","ACTION_SEND":"Gi tilbakemelding"},"SEARCH":{"TITLE":"Søk","PLACEHOLDER_SEARCH":"Hva ser du etter?"},"ADD_EDIT_SPRINT":{"TITLE":"Ny sprint","PLACEHOLDER_SPRINT_NAME":"sprint navn","PLACEHOLDER_SPRINT_START":"Estimert Start","PLACEHOLDER_SPRINT_END":"Estimert Slutt","ACTION_DELETE_SPRINT":"Vil du slette denne sprinten?","TITLE_ACTION_DELETE_SPRINT":"slett sprint","LAST_SPRINT_NAME":"siste sprinten er {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Legg til hendelse","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Slett sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Valgfritt) Legg til en egen tekst til invitasjonen. Fortell dine nye medlemmer noe fantastisk ;-)","PLACEHOLDER_TYPE_EMAIL":"Skriv en epost","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Dessverre, dette prosjektet kan ikke stå uten en eier","CURRENT_USER_OWNER":{"DESC":"Du er den nåværende eieren av dette prosjektet. Før du forlater, vennligst overfør eierskapet til noen andre.","BUTTON":"Endre eieren av prosjektet"},"OTHER_USER_OWNER":{"DESC":"Dessverre, du kan ikke slette et medlem som også er den nåværende prosjekteieren. Vennligst tildel eierskapet til et annet medlem først.","BUTTON":"Be om endring av prosjekteier"}},"CHANGE_OWNER":{"TITLE":"Hvem vil du at skal være den nye eieren av prosjektet?","ADD_COMMENT":"Legg til kommentar","BUTTON":"Spør dette prosjektetmedlemet om å bli den nye prosjekteieren"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"What's the project?","CHOOSE_PROJECT_FROM":"What's the project?","SUBJECT":"Subjekt","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"Ny brukerhistorie","EXISTING_USERSTORY":"Existing user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Subjekt","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Brukerhistorie {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Ferdigstilt: {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} av {{userStoryTotalTasks}} lukkede hendelser). Poeng: {{userStoryPoints}}. Beskrivelse: {{userStoryDescription}}","SECTION_NAME":"Brukerhistorie","LINK_TASKBOARD":"Oppgavetavle","TITLE_LINK_TASKBOARD":"Gå til oppgavetavlen","TOTAL_POINTS":"totale poeng","ADD":"+ Legg til en ny brukerhistorie","ADD_BULK":"Legg til mange nye Brukerhistorier","PROMOTED":"Denne Brukerhistorien har blitt oppgradert fra Hendelse:","TITLE_LINK_GO_TO_ISSUE":"Gå til hendelse","TITLE_DELETE_ACTION":"Slett Brukerhistorie","LIGHTBOX_TITLE_BLOKING_US":"Blokkerer oss","NOT_ESTIMATED":"Ikke estimert","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Mer info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Close","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Comment deleted by {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Older first","RECENT_FIRST":"Recent first","COMMENT":"Kommentar","EDITED_COMMENT":"Edited:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Skriv en ny kommentar her","SHOW_DELETED":"Vis slettede kommentarer","HIDE_DELETED":"Skjul slettede kommentarer","DELETE":"Slett kommentar","RESTORE":"Gjennoprett kommentarer","HISTORY":{"TITLE":"Aktivitet"}},"ACTIVITY":{"TITLE":"Aktivitet","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"tags added:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"new attachment:","DELETED_ATTACHMENT":"deleted attachment:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Team behov","CLIENT_REQUIREMENT":"Klientkrav","BLOCKED":"Blokkert","VALUES":{"NOT_SET":"not set","UNASSIGNED":"ikke tildelt"},"FIELDS":{"SUBJECT":"subjekt","DESCRIPTION":"beskrivelse","PRIORITY":"prioritet","SEVERITY":"alvorlighetsgrad","STATUS":"status","TYPE":"type","ASSIGNED_TO":"tildelt til","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"farge"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Backlogpanelet, med brukerhistorier og sprinter for prosjektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Tilpass din backlog-graf","CUSTOMIZE_GRAPH_TEXT":"For å ha en flott graf som hjelper deg å følge utviklingen av prosjektet må du sette opp poeng og sprinter gjennom","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Sett opp poengene og sprintene gjennom Admin-panelet","MOVE_US_TO_CURRENT_SPRINT":"Gå til nåværende sprint","MOVE_US_TO_LATEST_SPRINT":"Flytt til siste Sprint","EMPTY":"Backlogen er tom!","CREATE_NEW_US":"Opprett en ny BH","CREATE_NEW_US_EMPTY_HELP":"Det kan være lurt å opprette en ny brukerhistorie","EXCESS_OF_POINTS":"Overskudd av poeng","PENDING_POINTS":"Ventende poeng","CLOSED_POINTS":"lukket","COMPACT_SPRINT":"Kompakt Sprint","GO_TO_TASKBOARD":"Gå til oppgavepanelet for {{::name}}","EDIT_SPRINT":"Rediger Sprint","TOTAL_POINTS":"total","STATUS_NAME":"Status Navn","SORTABLE_FILTER_ERROR":"Du kan ikke slippe på backlog når filtere er åpen","DOOMLINE":"Prosjektomfang [Dommedagslinje]","CHART":{"XAXIS_LABEL":"Sprinter","YAXIS_LABEL":"Poeng","OPTIMAL":"Optimal mengde avventede poeng for sprint \"{{sprintName}}\" skal være {{value}}","REAL":"Ekte avventende poeng for sprint \"{{sprintName}}\" er {{value}}","INCREMENT_TEAM":"Inkrementelle poeng ved gruppekrav for sprint \"{{sprintName}}\" er {{value}}","INCREMENT_CLIENT":"Inkrementelle poeng med klientkrav for sprint \"{{sprintNam}}\" er {{verdi}}"},"TAGS":{"TOGGLE":"Endre synligheten til etiketter","SHOW":"Vis etiketter","HIDE":"Skjul etiketter"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Brukerhistorie","TITLE_COLUMN_POINTS":"Velg visning per Rolle"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"total
    poeng","COMPLETED_POINTS":"fullførte
    poeng","OPEN_TASKS":"åpne
    oppgaver","CLOSED_TASKS":"lukkede
    oppgaver","IOCAINE_DOSES":"iocaine
    doser","SHOW_STATISTICS_TITLE":"Vis statistikker","TOGGLE_BAKLOG_GRAPH":"Vis/Skjul Burndown Graf","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"prosjekt
    poeng","DEFINED_POINTS":"definerte
    poeng","CLOSED_POINTS":"lukkede
    poeng","POINTS_PER_SPRINT":"poeng /
    sprint"},"FILTERS":{"TOGGLE":"Veksle filteres synlighet","HIDE":"Skjul Filtere","SHOW":"Vis Filtere"},"SPRINTS":{"TITLE":"SPRINTER","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Sprint Oppgavepanel","TITLE_LINK_TASKBOARD":"Gå til Oppgavepanel for \"{{name}}\"","EMPTY":"Det er ingen sprinter enda","WARNING_EMPTY_SPRINT_ANONYMOUS":"Denne sprinten har ingen Brukerhistorier","WARNING_EMPTY_SPRINT":"Slipp Brukerhistorier her fra din backlog for å starte en ny sprint","TITLE_ACTION_NEW_SPRINT":"Legg til ny sprint","TEXT_ACTION_NEW_SPRINT":"Det kan være lurt å lage en ny sprint i prosjektet ditt","ACTION_SHOW_CLOSED_SPRINTS":"Vis lukkede sprinter","ACTION_HIDE_CLOSED_SPRINTS":"Skjul lukkede sprinter"}},"ERROR":{"TEXT1":"Noe skjedde og våre Oompa Loompaer jobber med det.","NOT_FOUND":"Ikke funnet","NOT_FOUND_TEXT":"Error 404. Siden du ser etter eksisterer ikke lenger. Kanskje du kan returnere til TAIGA-hjemmesiden og se om du kan finne det du leter etter.","PERMISSION_DENIED":"Tilgang nektet","PERMISSION_DENIED_TEXT":"Du har ikke tilgang til å aksessere denne siden","VERSION_ERROR":"Noen andre som bruker Taiga har endret dette før, og våre Oompa Loompaer kan ikke lagre dine endringer. Vennligst last om og lagre dine endringer igjen (de vil gå tapt)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint oppgavepanel - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} til {{endDate}}) med {{projectName}}. Fullført {{completedPercentage}}% ({{completedPoints}} av {{totalPoints}} poeng). {{openTasks}} åpne oppgaver av {{totalTasks}}.","SECTION_NAME":"Oppgavetavle","TITLE_ACTION_ADD":"Legg til en ny oppgave","TITLE_ACTION_ADD_BULK":"Legg til noen nye Oppgaver samlet","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Tildel oppgave","PLACEHOLDER_CARD_TITLE":"Dette kunne vært en oppgave","PLACEHOLDER_CARD_TEXT":"Splitt historier inn i oppgaver og følg dem separat","TABLE":{"COLUMN":"Brukerhistorie","TITLE_ACTION_FOLD":"Slå sammen kolonne","TITLE_ACTION_UNFOLD":"Brett ut kolonne","TITLE_ACTION_FOLD_ROW":"Brett Rad","TITLE_ACTION_UNFOLD_ROW":"Brett ut Rad","FIELD_POINTS":"poeng","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Dager","YAXIS_LABEL":"Poeng","OPTIMAL":"Optimal mengde ventende poeng for dagen {{formattedDate}} bør være {{roundedValue}}","REAL":"Reelle ventende poeng for dagen {{formattedDate}} er {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Oppgave {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Beskrivelse: {{taskDescription}}","SECTION_NAME":"Oppgave","LINK_TASKBOARD":"Oppgavetavle","TITLE_LINK_TASKBOARD":"Gå til oppgavetavlen","PLACEHOLDER_SUBJECT":"Skriv inn subjektet til den nye oppgaven","TITLE_SELECT_STATUS":"Status Navn","OWNER_US":"Denne oppgaven tilhører","TITLE_LINK_GO_OWNER":"Gå til brukerhistorie","TITLE_DELETE_ACTION":"Slett oppgave","LIGHTBOX_TITLE_BLOKING_TASK":"Blokkerende oppgave","FIELDS":{"IS_IOCAINE":"Er Iocaine"},"TITLE_ACTION_IOCAINE":"Føler du deg litt overveldet av en oppgave? Sørg for at andre vet om det ved å klikke på \"Iocane\" når du redigerer en oppgave. Det er mulig å bli immun mot denne (fiktive) dødelige giften ved å konsumere små mengder over tid, akkurat som det er mulig å bli bedre på det du gjør ved av og til å ta på deg ekstra utfordringer!"},"NOTIFICATION":{"OK":"Alt er ok","WARNING":"Opps, noe skjedde...","WARNING_TEXT":"Våre Oompa Loompaer er lei seg :-( , dine endringer ble ikke lagret!","SAVED":"Våre Oompa Loompaer har lagret alle endringer!","CLOSE":"Lukk melding","MAIL":"Varsler per Epost","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Er du sikker på at du vil slette?"},"CANCEL_ACCOUNT":{"TITLE":"Kanseler din konto","SUBTITLE":"Vi er lei oss for at du forlater Taiga, vi håper du nøt oppholdet :)","PLACEHOLDER_INPUT_TOKEN":"kanseler konto token","ACTION_LEAVING":"Ja, jeg går!","SUCCESS":"Våre Oompa Loompaer har slettet din konto"},"CHANGE_EMAIL_FORM":{"TITLE":"Bytt din epost","SUBTITLE":"Ett klikk til og din epost vil være oppdatert!","PLACEHOLDER_INPUT_TOKEN":"skift epost token","ACTION_CHANGE_EMAIL":"Endre epost","SUCCESS":"Våre Oompa Loompaer oppdaterte din epost"},"ISSUES":{"PAGE_TITLE":"Hendelser - {{projectName}}","PAGE_DESCRIPTION":"Hendelsespanelet for prosjekt {{projectName}}: {{projectDescription}}","SECTION_NAME":"Hendelse","ACTION_NEW_ISSUE":"+ NY HENDELSE","ACTION_PROMOTE_TO_US":"Oppgrader til Brukerhistorie","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Denne hendelsen har blitt oppgradert til BH","EXTERNAL_REFERENCE":"Denne hendelsen har blitt opprettet av","GO_TO_EXTERNAL_REFERENCE":"Gå til opphav","ACTION_DELETE":"Slett hendelse","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blokker hendelse","LINK_TASKBOARD":"Oppgavetavle","TITLE_LINK_TASKBOARD":"Gå til oppgavetavlen","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioritet","SEVERITY":"Alvorlighetsgrad","TYPE":"Type"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Oppgrader denne henelsen til en ny brukerhistorie","MESSAGE":"Er du sikker på at du vil lage en ny BH fra denne hendelsen?"},"TABLE":{"COLUMNS":{"TYPE":"Type","SEVERITY":"Alvorlighetsgrad","PRIORITY":"Prioritet","SUBJECT":"Subjekt","VOTES":"Stemmer","STATUS":"Status","MODIFIED":"Modified","ASSIGNED_TO":"Tildelt til"},"TITLE_ACTION_CHANGE_STATUS":"Endre status","TITLE_ACTION_ASSIGNED_TO":"Tildelt til","BLOCKED":"Blokkert","EMPTY":{"TITLE":"Det er ingen hendelser å jobbe med :-)","SUBTITLE":"Oppdaget du en hendelse?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Hendelse {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Type: {{issueType}}, Prioritet: {{issuePriority}}. Alvorlighetsgrad: {{issueSeverity}}. Beskrivelse: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Kanbanpanelet, med brukerhistorier til prosjektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Slå sammen kolonne","TITLE_ACTION_UNFOLD":"Brett ut kolonne","TITLE_ACTION_ADD_US":"Legg til ny Brukerhistorie","TITLE_ACTION_ADD_BULK":"Legg til ny samling","ACTION_SHOW_ARCHIVED":"Vis arkiverte","ACTION_HIDE_ARCHIVED":"Skjul arkivert","HIDDEN_USER_STORIES":"Brukerhistoriene med denne statusen er skjult som standard","PLACEHOLDER_CARD_TITLE":"Dette er dine Brukerhistorier","PLACEHOLDER_CARD_TEXT":"Historier kan også ha underoppgaver med egne krav"},"SEARCH":{"PAGE_TITLE":"Søk - {{projectName}}","PAGE_DESCRIPTION":"Søk etter hva som helst, brukerhistorier, hendelser, oppgaver or wiki-sider i prosjektet {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Episk","FILTER_USER_STORIES":"Brukerhistorie","FILTER_ISSUES":"Hendelser","FILTER_TASKS":"Oppgaver","FILTER_WIKI":"Wiki-sider","PLACEHOLDER_SEARCH":"Søk i...","TITLE_ACTION_SEARCH":"søk","EMPTY_TITLE":"Det ser ut som ingenting ble funnet med søkekriteriene dine","EMPTY_DESCRIPTION":"Kanskje prøve en av fanene ovenfor eller søk på nytt"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Teampanelet for å vise alle medlemmene i prosjektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Team","PLACEHOLDER_INPUT_SEARCH":"Søk på fult navn---","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Lukkede hendelser","COLUMN_IOCAINE":"Iocaine Drikker","EXPLANATION_COLUMN_IOCAINE":"Iocainedoser inntatt","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki-sider redigert","COLUMN_BUG_HUNTER":"Bug Jeger","EXPLANATION_COLUMN_BUG_HUNTER":"Hendelser som er medlt inn","COLUMN_NIGHT_SHIFT":"Nattevakt","EXPLANATION_COLUMN_NIGHT_SHIFT":"Oppgaver lukket","COLUMN_TOTAL_POWER":"Total Styrke","EXPLANATION_COLUMN_TOTAL_POWER":"Totalt Antall Poeng","SECTION_TITLE_TEAM":"Team >","SECTION_FILTER_ALL":"Alle","CONFIRM_LEAVE_PROJECT":"Er du sikker på at du vil forlate prosjektet?","ACTION_LEAVE_PROJECT":"Forlat dette prosjektet"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. størrelse: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Brukerinstillinger","USER_PROFILE":"Brukerprofil","CHANGE_PASSWORD":"Endre passord","EMAIL_NOTIFICATIONS":"Epost-varsler","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"E-postvarsler","COLUMN_PROJECT":"Prosjekt","COLUMN_RECEIVE_ALL":"Motta alle","COLUMN_ONLY_INVOLVED":"Kun involvert","COLUMN_NO_NOTIFICATIONS":"Ingen varsler","OPTION_ALL":"Alle","OPTION_INVOLVED":"Involvert","OPTION_NONE":"Ingen"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Prosjekt","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Prosjekt"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Bruk standardbilde","ACTION_DELETE_ACCOUNT":"Slett Taiga-konto","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Sjekk din innboks!
    Vi har sent en epost til din konto
    med instruksjonene for å velge ny epostadresse.","CHANGE_PHOTO":"Endre bilde","FIELD":{"USERNAME":"Brukernavn","EMAIL":"Epost","FULL_NAME":"Fullt navn","PLACEHOLDER_FULL_NAME":"Skriv ditt fulle navn (f.eks: Ola Nordmann)","BIO":"Bio (max. 210 tegn)","PLACEHOLDER_BIO":"Fortell oss noe om deg selv","LANGUAGE":"Språk","LANGUAGE_DEFAULT":"-- bruk standard språk --","THEME":"Tema","THEME_DEFAULT":"-- bruk standard tema --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Siste versjon: {{lastModifiedDate}} ({{totalEditions}} versjoner totalt) Innhold: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Fjern denne wiki-siden","DELETE_LIGHTBOX_TITLE":"Slett wiki-siden","DELETE_LINK_TITLE":"Slett wiki-lenke","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"ganger
    redigert","LAST_EDIT":"siste
    endring","LAST_MODIFICATION":"siste endring"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"Opprettet","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Tips","LINK":"Hvis du vil vite hvordan du bruker den, besøk vår brukerstøtte","LINK_TITLE":"Besøk vår brukerstøtte","HINT1_TITLE":"Viste du at du kan importere og eksportere prosjekter?","HINT1_TEXT":"Dette gir deg muligheten til å ta ut alle dine data fra en Taiga og flytte den til en annen.","HINT2_TITLE":"Viste du at du kan opprette egendefinerte felter?","HINT2_TEXT":"Team kan nå lage egendefinerte felter som en fleksibel måte å legge til spesifik data nyttig for deres egne arbeidsflyt.","HINT3_TITLE":"Endre rekkefølge på dine prosjekter for å fremvise de som er mest relevante for deg.","HINT3_TEXT":"De 10 prosjektene er listet opp i navigasjonslinjen på toppen.","HINT4_TITLE":"Glemte du det du arbeidet med?","HINT4_TEXT":"Ikke fortvil, på ditt dashboard finner du åpne oppgaver, hendelser og brukerhistorier i den rekkefølgen du jobbet med de."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} har lastet opp ett nytt vedlegg i {{obj_name}}","US_CREATED":"{{username}} har opprettet en ny BH {{obj_name}} i {{project_name}}","ISSUE_CREATED":"{{username}} har opprettet en ny hendelse {{obj_name}} i {{project_name}}","TASK_CREATED":"{{username}} har opprettet en ny oppgave {{obj_name}} i {{project_name}}","TASK_CREATED_WITH_US":"{{username}} har opprettet en ny oppgave {{obj_name}} i {{project_name}} som tilhører BH {{us_name}}","WIKI_CREATED":"{{username}} har opprettet en ny wiki-side {{obj_name}} i {{project_name}}","MILESTONE_CREATED":"{{username}} har opprettet en ny sprint {{obj_name}} i {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} opprettet prosjektet {{project_name}}","MILESTONE_UPDATED":"{{username}} har oppdatert sprint {{obj_name}}","US_UPDATED":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til BH {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til BH {{obj_name}} til {{new_value}}","US_UPDATED_POINTS":"{{username}} har oppdatert '{{role_name}}' poeng for BH {{obj_name}} til {{new_value}}","ISSUE_UPDATED":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til hendelsen {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til hendelsen {{obj_name}} til {{new_value}}","TASK_UPDATED":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til oppgave {{obj_name}} til {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til oppgave {{obj_name}} til {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til oppgave {{obj_name}} som tilhører BH {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til oppgaven {{obj_name}} som tilhører BH {{us_name}} til {{new_value}}","WIKI_UPDATED":"{{username}} har oppdatert wiki-siden {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} har kommentert på BH {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} har kommentert på hendelsen {{obj_name}}","NEW_COMMENT_TASK":"{{username}} har kommentert på oppgave {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} har et nytt medlem","US_ADDED_MILESTONE":"{{username}} har lagt til BH {{obj_name}} til {{sprint_name}}","US_MOVED":"{{username}} har flyttet BH {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} har lagt til BH {{obj_name}} til backlogen","BLOCKED":"{{username}} har blokkert {{obj_name}}","UNBLOCKED":"{{username}} har avblokkert {{obj_name}}","NEW_USER":"{{username}} har sluttet seg til Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Hendelse","TASK":"Oppgave"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"En ekstern app krever autentisering","PAGE_DESCRIPTION":"En ekstern app krever autentisering","AUTHORIZATION_REQUEST":"Tillat {{application}} til å bruke din Taiga konto?","LOGIN_WITH_ANOTHER_USER":"Logg inn med en annen bruker","AUTHORIZE_APP":"Godkjenn app","CANCEL":"Avbryt"},"JOYRIDE":{"NAV":{"NEXT":"Neste","BACK":"Tilbake","SKIP":"Hopp over","DONE":"Ferdig"},"DASHBOARD":{"STEP1":{"TITLE":"Ditt prosjekt","TEXT":"Velkommen! Her finner du prosjektene du er involvert i."},"STEP2":{"TITLE":"Arbeider med","TEXT":"Her vil du finne Brukerhistorier, Oppgaver og Hendelser som du jobber med."},"STEP3":{"TITLE":"Følger med på","TEXT1":"Og akkuratt her vil du finne de i prosjektet ditt som du vil vite om.","TEXT2":"Du arbeider allerede med Taiga ;)"},"STEP4":{"TITLE":"La oss begynne","TEXT1":"Du kan starte med å opprette ditt første Taiga prosjekt","TEXT2":"Lykke til!"}},"BACKLOG":{"STEP1":{"TITLE":"Prosjektsammendrag","TEXT1":"Her vil du se tilstanden til ditt prosjekt.","TEXT2":"Du kan endre alle prosjektegenskaper gjennom administrasjonpanelet"},"STEP2":{"TITLE":"Produkt backlog","TEXT":"Backlogen er listen over kravene (Brukerhistorier) til prosjektet. Her kan du planlegge dine sprinter."},"STEP3":{"TITLE":"Sprinter","TEXT":"Sprinter er korte tidsperioder (vanligvis 2 uker) der spesifikt arbeide må ferdigstilles og leveres."},"STEP4":{"TITLE":"Brukerhistorie","TEXT":"Dette er kravene på et overordnet nivå. Du kan legge dem til backlogen og dra dem inn i den sprinten der det skal leveres."}},"KANBAN":{"STEP1":{"TITLE":"Tilpass din arbeidsflyt","TEXT":"Sett opp kolonnene du trenger for å kartlegge statusene til din arbeidsflyt gjennom administrasjonspanelet."},"STEP2":{"TITLE":"Brukerhistorier & Oppgaver","TEXT":"Brukerhistorier er krav på et overordnet nivå. Du kan dra de inn i ulike kolonner."},"STEP3":{"TITLE":"Legger til Brukerhistorier","TEXT1":"Det kan være lurt å legge til en Brukerhistorie (legg til BH ikon) eller en samling av dem (bulk ikon)","TEXT2":"Lykke til!"}}},"DISCOVER":{"PAGE_TITLE":"Oppdag prosjekter -Taiga","PAGE_DESCRIPTION":"Søkbar katalog med offentlige prosjekter i Taiga. Utforsk backlogger, tidslinjer, hendelser og team. Sjekk ut de mest likte og mest aktive prosjektene. Filtrer etter Kanban og Scrum.","DISCOVER_TITLE":"Oppdag prosjekter","DISCOVER_SUBTITLE":"{projects, plural, one{Ett offentlig prosjekt å oppdage} other{# offentlige prosjekt å oppdage}}","MOST_ACTIVE":"Mest aktiv","MOST_ACTIVE_EMPTY":"Det er ingen AKTIVE prosjekter enda","MOST_LIKED":"Mest likt","MOST_LIKED_EMPTY":"Det er ingen LIKTE prosjekter enda","VIEW_MORE":"Vis mer","FEATURED":"Utvalgte Prosjekter","EMPTY":"Det er ingen prosjekter å vise med dette søkekriteriet.
    Prøv igjen!","FILTERS":{"ALL":"Alle","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Søker etter folk","WEEK":"Forrige uke","MONTH":"Forrige måned","YEAR":"Forrige år","ALL_TIME":"All tid","CLEAR":"Fjern filtrene"},"SEARCH":{"PAGE_TITLE":"Søk - Oppdag prosjekter - Taiga","PAGE_DESCRIPTION":"Søkbar katalog med offentlige prosjekter i Taiga. Utforsk backlogger, tidslinjer, hendelser og team. Sjekk ut de mest likte og mest aktive prosjektene. Filtrer etter Kanban og Scrum.","INPUT_PLACEHOLDER":"Skriv noe...","ACTION_TITLE":"Søk","RESULTS":"Søkeresultater"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-nl.json b/dist/v-1547534999795/locales/taiga/locale-nl.json deleted file mode 100644 index 1c72647..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-nl.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Ja","NO":"Nee","OR":"of","I_GET_IT":"OK, I get it","LOADING":"Aan het laden...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Bewaar","CANCEL":"Annuleren","ACCEPT":"Accepteren","DELETE":"Verwijder","UNLINK":"ontkoppel","CREATE":"Aanmaken","ADD":"Toevoegen","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Bewerk","DRAG":"Sleep","TAG_LINE":"Jouw agile, gratis en open source project management tool","TAG_LINE_2":"HOU VAN JE PROJECT","BLOCK":"Blokkeer","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"Geblokkeerd","UNBLOCK":"Deblokkeer","UNBLOCK_TITLE":"Dit item deblokkeren","BLOCKED_NOTE":"Waarom is dit geblokkeerd?","BLOCKED_REASON":"Gelieve de reden uit te leggen","CREATED_BY":"Aangemaakt door {{fullDisplayName}}","CLOSE":"sluiten","GO_HOME":"Neem me naar de homepage","PLUGINS":"Plugins","ONE_ITEM_LINE":"Eén item per regel...","NEW_BULK":"Nieuwe bulk toevoeging","SUBTASKS":"Subtasks","PREVIOUS":"Vorige","NEXT":"Volgende","LOGOUT":"Afmelden","EXTERNAL_USER":"een extern gebruiker","GENERIC_ERROR":"Een van onze Oempa Loempa's zegt {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Project Owner","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Verwijder issue","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Deze waarde lijkt ongeldig te zijn","TYPE_EMAIL":"Deze waarde moet een geldig emailadres bevatten","TYPE_URL":"Deze waarde moet een geldige url bevatten","TYPE_URLSTRICT":"Deze waarde moet een geldige url bevatten","TYPE_NUMBER":"Deze waarde moet een geldig nummer bevatten","TYPE_DIGITS":"Deze waarde moet alleen cijfers bevatten.","TYPE_DATEISO":"Deze waarde moet een geldige datum zijn (YYYY-MM-DD).","TYPE_ALPHANUM":"Deze waarde moet alfanumeriek zijn","TYPE_PHONE":"Deze waarde moet een geldig telefoonnummer bevatten","NOTNULL":"Deze waarde zou niet null moeten zijn","NOT_BLANK":"Deze waarde zou niet leeg moeten zijn","REQUIRED":"Dit veld is verplicht.","REGEXP":"Deze waarde lijkt ongeldig te zijn","MIN":"Deze waarde zou groter of gelijk aan %s moeten zijn.","MAX":"Deze waarde zou lager of gelijk aan %s moeten zijn.","RANGE":"Deze waarde zou tussen %s en %s moeten zijn.","MIN_LENGTH":"Deze waarde is te kort. Hij zou %s tekens of meer moeten bevatten.","MAX_LENGTH":"Deze waarde is te lang. Hij zou %s tekens of minder moeten bevatten.","RANGE_LENGTH":"Deze lengte is ongeldig. Hij zou tussen de %s en %s tekens lang moeten zijn.","MIN_CHECK":"Je moet minstens %s opties selecteren.","MAX_CHECK":"Je moet %s keuzes of minder selecteren.","RANGE_CHECK":"Je moet tussen %s en %s keuzes selecteren.","EQUAL_TO":"Deze waarde zou hetzelfde moeten zijn.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Ongeldige datum, gebruik DD MMM YYYY (vb 23 mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Vorige maand","NEXT_MONTH":"Volgende maand","MONTHS":{"JAN":"Januari","FEB":"Februari","MAR":"Maart","APR":"April","MAY":"Mei","JUN":"Julli","JUL":"Jullie","AUG":"Augustus","SEP":"September","OCT":"Oktober","NOV":"November","DEC":"December"},"WEEK_DAYS":{"SUN":"Zondag","MON":"Maandag","TUE":"Dinsdag","WED":"Woensdag","THU":"Donderdag","FRI":"Vrijdag","SAT":"Zaterdag"},"WEEK_DAYS_SHORT":{"SUN":"Zon","MON":"Maa","TUE":"Din","WED":"Woens","THU":"Don","FRI":"Vrij","SAT":"Zat"}},"SEE_USER_PROFILE":"Bekijk het profiel van {{username}}","USER_STORY":"User story","TASK":"Taak","ISSUE":"Issue","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Verwijder tag","ADD":"Tag tovoegen"},"DESCRIPTION":{"EMPTY":"Lege ruimte is zo saai... vooruit, wees beschrijflijk...","NO_DESCRIPTION":"Nog geen beschrijving"},"FIELDS":{"SUBJECT":"Onderwerp","NAME":"Naam","URL":"URL","DESCRIPTION":"Beschrijving","VALUE":"Waarde","SLUG":"Slug","COLOR":"Kleur","IS_CLOSED":"Is gesloten?","STATUS":"Status","TYPE":"Type","SEVERITY":"Ernst","PRIORITY":"Prioriteit","ASSIGNED_TO":"Toegewezen aan","ASSIGNED_USERS":"Assigned users","POINTS":"Punten","IS_BLOCKED":"is geblokkeerd","REF":"Ref","VOTES":"Stemmen","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Alles"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Niet toegewezen","ASSIGN":"Assign","DELETE_ASSIGNMENT":"Toewijzing verwijderen","REMOVE_ASSIGNED":"Verwijder toegewezene","TOO_MANY":"...te veel gebruikers, blijf filteren","CONFIRM_UNASSIGNED":"Weet je zeker dat je deze niet wilt toewijzen?","TITLE_ACTION_EDIT_ASSIGNMENT":"Toewijzing bewerken","SELF":"Aan mezelf toewijzen"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Gesloten","OPEN":"Open"},"WATCHERS":{"WATCHERS":"Volgers","ADD":"Add watchers","TITLE_ADD":"Add a project member to the watchers list","DELETE":"Verwijder waarnemer","TITLE_LIGHTBOX_DELETE_WARTCHER":"Verwijder waarnemer..."},"WATCH_BUTTON":{"WATCH":"Bekijk","WATCHING":"Volgers","UNWATCH":"Unwatch","WATCHERS":"Volgers","BUTTON_TITLE":"Watch/Unwatch this item","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Eigen velden","SAVE":"Eigen velden opslaan","EDIT":"Eigen velden bewerken","DELETE":"Verwijder eigen attribuut","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Onderwerp of referentie","TITLE_ACTION_FILTER_BUTTON":"zoek","TITLE":"Filters","TITLE_ACTION_SEARCH":"Zoek","ACTION_SAVE_CUSTOM_FILTER":"Als eigen filter opslaan","PLACEHOLDER_FILTER_NAME":"Geef de filternaam in en druk op enter","APPLIED_FILTERS_NUM":"filters applied","CATEGORIES":{"TYPE":"Type","STATUS":"Status","SEVERITY":"Ernst","PRIORITIES":"Prioriteit","TAGS":"Tags","ASSIGNED_TO":"Toegewezen aan","ASSIGNED_USERS":"Assigned users","ROLE":"Rol","CREATED_BY":"Aangemaakt door","CUSTOM_FILTERS":"Eigen filters","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown syntax help"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Verwijder epics"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Sprints bekijken","ADD_SPRINTS":"Sprints toevoegen","MODIFY_SPRINTS":"Sprints bewerken","DELETE_SPRINTS":"Sprints verwijderen"},"USER_STORIES":{"NAME":"User Stories","VIEW_USER_STORIES":"Bekijk user stories","ADD_USER_STORIES":"User stories toevoegen","MODIFY_USER_STORIES":"user stories bewerken","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Verwijderd user stories"},"TASKS":{"NAME":"Taak","VIEW_TASKS":"Bekijk taken","ADD_TASKS":"Taak toevoegen","MODIFY_TASKS":"Bewerk taken","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Verwijder taken"},"ISSUES":{"NAME":"Kwesties","VIEW_ISSUES":"Bekijk kwesties","ADD_ISSUES":"Kwesties toevoegen","MODIFY_ISSUES":"Bewerk kwesties","COMMENT_ISSUES":"Becommentarieer kwesties","DELETE_ISSUES":"Kwesties verwijderen"},"WIKI":{"NAME":"Wiki\n","VIEW_WIKI_PAGES":"Bekijk wiki pagina's","ADD_WIKI_PAGES":"Wiki pagina's toevoegen","MODIFY_WIKI_PAGES":"Bewerk wiki pagina's","DELETE_WIKI_PAGES":"Verwijder wiki pagina's","VIEW_WIKI_LINKS":"Wiki links bekijken","ADD_WIKI_LINKS":"Wiki links toevoegen","DELETE_WIKI_LINKS":"Verwijder wiki links"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Inloggen op Taiga, een project management platform voor startups en agile ontwikkelaars & designers die een simpele, mooie tool willen om werken echt leuk te maken."},"AUTH":{"INVITED_YOU":"Heeft je uitgenodigd voor het project","NOT_REGISTERED_YET":"Nog niet geregistreerd?","REGISTER":"Registreer","CREATE_ACCOUNT":"maak hier je gratis account aan"},"LOGIN_COMMON":{"HEADER":"Ik heb al een Taiga login","PLACEHOLDER_AUTH_NAME":"Gebruikersnaam of email (case sensitive)","LINK_FORGOT_PASSWORD":"Vergeten?","TITLE_LINK_FORGOT_PASSWORD":"Ben je je wachtwoord vergeten?","ACTION_ENTER":"Enter","ACTION_SIGN_IN":"Log in","PLACEHOLDER_AUTH_PASSWORD":"Wachtwoord (hoofdlettergevoelig)","ALT_LOGIN":"Of login met"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Volgens onze Oempa-Loempa's, zijn je gebruikers/email of wachtwoord incorrect.","SUCCESS":"Onze Oempa-Loempa's zijn blij, welkom bij Taiga."},"REGISTER":{"PAGE_TITLE":"Registreer - Taiga","PAGE_DESCRIPTION":"Maak je account op Taiga, een project management platform voor startups en agile ontwikkelaars & designers die een simpele, mooie tool willen om werken echt leuk te maken."},"REGISTER_FORM":{"TITLE":"Registreer een nieuw Taiga account (gratis)","PLACEHOLDER_NAME":"Kies een gebruikersnaam (hoofdlettergevoelig)","PLACEHOLDER_FULL_NAME":"Kies je volledige naam","PLACEHOLDER_EMAIL":"Jouw e-mail","PLACEHOLDER_PASSWORD":"Kies een wachtwoord (hoofdlettergevoelig)","ACTION_SIGN_UP":"Aanmelden","TITLE_LINK_LOGIN":"Inloggen","LINK_LOGIN":"Ben je al geregistreerd? Log in"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Wachtwoord vergeten - Taiga","PAGE_DESCRIPTION":"Geef je gebruikersnaam of e-mail in om een nieuw wachtwoord te krijgen. Zo heb je weer toegang tot Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Oeps, ben je je wachtwoord vergeten?","SUBTITLE":"Voer je gebruikersnaam of email in om een nieuwe te ontvangen","PLACEHOLDER_FIELD":"Gebruikersnaam of e-mail","ACTION_RESET_PASSWORD":"Wachtwoord resetten","LINK_CANCEL":"Nah, stuur me terug. I denk dat ik het zal onthouden.","SUCCESS_TITLE":"Controleer je inbox!","SUCCESS_TEXT":"We hebben je een e-mail gestuurd met de instructie om een nieuw wachtwoord aan te maken","ERROR":"Volgens onze Oempa-Loempa's ben je nog niet geregisteerd"},"CHANGE_PASSWORD":{"PAGE_TITLE":"Verander je wachtwoord - Taiga","SECTION_NAME":"Wachtwoord wijzigen","FIELD_CURRENT_PASSWORD":"Huidig wachtwoord","PLACEHOLDER_CURRENT_PASSWORD":"Je huidige wachtwoord (of leeg als je nog geen wachtwoord hebt)","FIELD_NEW_PASSWORD":"Nieuw wachtwoord","PLACEHOLDER_NEW_PASSWORD":"Type een wachtwoord","FIELD_RETYPE_PASSWORD":"Herhaal nieuwe wachtwoord","PLACEHOLDER_RETYPE_PASSWORD":"Herhaal nieuw wachtwoord","ERROR_PASSWORD_MATCH":"De wachtwoorden komen niet overeen"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Maak een nieuwe Taiga pass aan","SUBTITLE":"En hé, misschien dat je wat ijzer-rijk voedsel kunt eten, het is goed voor je brein :P","PLACEHOLDER_NEW_PASSWORD":"Nieuw wachtwoord","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Herhaal wachtwoord","ACTION_RESET_PASSWORD":"Wachtwoord resetten","ERROR":"Onze Oempa-Loempa's kunnen het verzoek om je wachtwoord te herstellen niet terugvinden. Probeer het nog een keer.","SUCCESS":"Onze Oempa-Loempas hebben je nieuwe wachtwoord opgeslagen.
    Probeer ermee in te loggen."},"INVITATION":{"PAGE_TITLE":"Uitnodiging accepteren - Taiga","PAGE_DESCRIPTION":"Accepteer de uitnodiging voor een project in Taiga, een project management platform voor startups en agile ontwikkelaars & designers die een simpele, mooie tool willen om werken echt leuk te maken."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Onze Oompa Loompa's kunnen je uitnodiging niet vinden.","SUCCESS":"Je bent met succes toegetreden tot dit project, Welkom bij {{project_name}}"},"HOME":{"PAGE_TITLE":"Home -Taiga","PAGE_DESCRIPTION":"De Taiga start pagina met jouw projecten en de aan jou toegewezen en gevolgde user stories, taken en kwesties","EMPTY_WORKING_ON":"Voelt leeg, vind je niet? Begin met Taiga te werken en hier zullen de stories, taken en kwesties verschijnen waar jij aan werkt.","EMPTY_WATCHING":"Volg User Stories, Taken, Kwesties binnen jouw projecten en ontvang een bericht bij veranderingen :)","EMPTY_PROJECT_LIST":"Je hebt nog geen projecten","WORKING_ON_SECTION":"Werkt aan","WATCHING_SECTION":"Volgers","DASHBOARD":"Projects Dashboard"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ NIEUWE EPIC","UNASSIGNED":"Niet toegewezen"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Stemmen","NAME":"Naam","PROJECT":"Project","SPRINT":"Sprint","ASSIGNED_TO":"Toegewezen","STATUS":"Status","PROGRESS":"Vooruitgang","VIEW_OPTIONS":"Toon opties"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Geblokkeerd","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Mijn projecten - Taiga","PAGE_DESCRIPTION":"Een lijst met al jouw projecten, je kunt deze herodenen of een nieuwe aanmaken.","MY_PROJECTS":"Mijn projecten"},"ATTACHMENT":{"SECTION_NAME":"bijlagen","TITLE":"{{ fileName }} toegevoegd op {{ date }}","LIST_VIEW_MODE":"Lijst weergave","GALLERY_VIEW_MODE":"Afbeeldingweergave","DESCRIPTION":"Geef een korte beschrijving","DEPRECATED":"(verouderd)","DEPRECATED_FILE":"Verouderd?","ADD":"Nieuwe bijlage toevoegen. {{maxFileSizeMsg}}","DROP":"Voeg bijlagen hier toe!","SHOW_DEPRECATED":"+ toon verouderde bijlagen","HIDE_DEPRECATED":"- verberg verouderde bijlagen","COUNT_DEPRECATED":"({{ counter }} verouderd)","MAX_UPLOAD_SIZE":"Maximale upload grootte is {{maxFileSize}}","DATE":"DD MMM YYYY [om] hh:mm","ERROR_UPLOAD_ATTACHMENT":"We konden '{{fileName}}' niet uploaden. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Verwijder bijlage","MSG_LIGHTBOX_DELETE_ATTACHMENT":"de bijlage '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"We zijn er niet in geslaagd om te verwijderen: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Vor","NEXT":"Volgende"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Bewerk waarde","TITLE_ACTION_DELETE_VALUE":"Verwijder waarde","TITLE_ACTION_DELETE_TAG":"Verwijder tag"},"HELP":"Help je hulp nodig? Bekijk onze support pagina!","PROJECT_DEFAULT_VALUES":{"TITLE":"Standaard waardes","SUBTITLE":"Standaard waardes instellen voor alle invoer selecties."},"MEMBERSHIPS":{"TITLE":"Gebruikers beheren","PAGE_TITLE":"Lidmaatschappen - {{projectName}}","ADD_BUTTON":"+ Nieuwe gebruiker","ADD_BUTTON_TITLE":"Nieuwe gebruiker toevoegen","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Export","SUBTITLE":"Exporteer je project om een backup te bewaren of om een nieuwe aan te maken gebaseerd op deze.","EXPORT_BUTTON":"Export","EXPORT_BUTTON_TITLE":"Exporteer je project","LOADING_TITLE":"We zijn bezig met het genereren van je dump bestand","DUMP_READY":"Je dump bestand is klaar!","LOADING_MESSAGE":"Gelieve deze pagina niet te sluiten.","ASYNC_MESSAGE":"We sturen je een email als het klaar is","SYNC_MESSAGE":"Als de download niet automatisch start, klik dan hier.","ERROR":"Onze Oempa-Loempa's hebben wat problemen bij het genereren van uw dump.\nProbeer het opnieuw a.u.b.","ERROR_BUSY":"Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten."},"MODULES":{"TITLE":"Modules","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Organiseer je user stories om een duidelijk overzicht van aankomend en geprioritiseerd werk te behouden.","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organiseer je project volgens het lean principe met dit bord.","ISSUES":"Kwesties","ISSUES_DESCRIPTION":"Volg de bugs, vragen en verbeteringen gerelateerd aan je project.\nMis niets meer!","WIKI":"Wiki\n","WIKI_DESCRIPTION":"Voeg toe, wijzig of verwijder inhoud in samenwerking met anderen. Dit is the juiste plaats voor je project documentatie.","MEETUP":"Meet Up","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Kies een videoconference systeem","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Op maat","URL_CHAT_ROOM":"URL van je chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Project profiel - {{projectName}}","PROJECT_DETAILS":"Project details","PROJECT_NAME":"Naam project","TAGS":"Tags","DESCRIPTION":"Beschrijving","RECRUITING":"Is dit project opzoek naar mensen?","RECRUITING_MESSAGE":"Who are you looking for?","RECRUITING_PLACEHOLDER":"Define the profiles you are looking for","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Open project","PRIVATE_PROJECT":"Gesloten project","PRIVATE_OR_PUBLIC":"What's the difference between public and private projects?","DELETE":"Verwijder dit project","CHANGE_LOGO":"Change logo","ACTION_USE_DEFAULT_LOGO":"Use default image","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Verzoek","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Change owner","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Rapporten","SUBTITLE":"Exporteer je project data in CSV formaat en maak je eigen rapporten","DESCRIPTION":"Download een CSV bestand of kopieer de gegenereerde URL en open deze in je favoriete tekst editor of spreadsheet om je eigen rapportages te maken. Op die manier kun je al je data gemakkelijk analyseren en visualiseren.","HELP":"Hoe kan ik dit gebruiken in mijn eigen spreadsheet?","REGENERATE_TITLE":"Wijzig URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"user stories rapporten","SECTION_TITLE_TASK":"taak rapporten","SECTION_TITLE_ISSUE":"Kwesties rapporten","DOWNLOAD":"Download CSV","URL_FIELD_PLACEHOLDER":"Genereer de CSV url opnieuw alsjeblieft","TITLE_REGENERATE_URL":"Opnieuw CSV url genereren","ACTION_GENERATE_URL":"Url genereren","ACTION_REGENERATE":"Opnieuw genereren","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Verwijder"},"CUSTOM_FIELDS":{"TITLE":"Eigen velden","SUBTITLE":"Specifieer de aangepaste velden voor je user stories, taken en kwesties","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"Eigen velden user stories","US_ADD":"Voeg eigen velden toe in user stories","TASK_DESCRIPTION":"Eigen velden taken","TASK_ADD":"Voeg een aangepast veld toe in taken","ISSUE_DESCRIPTION":"Kwesties aangepaste velden","ISSUE_ADD":"Voeg een aangepast veld toe in kwesties","FIELD_TYPE_TEXT":"Tekst","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Over meerdere regels","FIELD_TYPE_DATE":"Date","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Project waardes - {{projectName}}","REPLACEMENT":"Alle items met deze waarde zullen worden veranderd in","ERROR_DELETE_ALL":"Je kunt niet alle waardes verwijderen"},"PROJECT_VALUES_POINTS":{"TITLE":"Punten","SUBTITLE":"Specifieer de punten waar naar je user stories kunnen worden ingeschat","US_TITLE":"US punten","ACTION_ADD":"Nieuw punt toevoegen"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioriteit","SUBTITLE":"Kies de prioriteit die je kwesties zullen hebben","ISSUE_TITLE":"Issue prioriteit","ACTION_ADD":"Nieuwe prioriteit toevoegen"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Ernstniveaus","SUBTITLE":"Kies het belang die je kwesties zullen hebben","ISSUE_TITLE":"Ernst van het issue","ACTION_ADD":"Nieuwe ernst toevoegen"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"Specifieer de stadia die je user stories, taken en kwesties door zullen maken","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Taak statussen","ISSUE_TITLE":"Issue statussen"},"PROJECT_VALUES_TYPES":{"TITLE":"Types","SUBTITLE":"Kies de types die je kwesties kunnen hebben","ISSUE_TITLE":"Kwestie types","ACTION_ADD":"Voeg nieuwe {{objName}} toe"},"PROJECT_VALUES_TAGS":{"TITLE":"Tags","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Tag tovoegen","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specifieer de deadlines die je user stories, taken en kwesties door zullen maken","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Nieuwe status toevoegen","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Rollen - {{projectName}}","WARNING_NO_ROLE":"Wees voorzichtig, geen enkele rol in je project zal de puntenwaarde van een user story kunnen estimeren","HELP_ROLE_ENABLED":"Als dit actief is, zullen leden met deze rol de punten waarde voor user stories kunnen schatten","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} leden met deze rol","TITLE_DELETE_ROLE":"Verwijder Rol","REPLACEMENT_ROLE":"Al de gebruikers met deze rol zullen verplaats worden naar","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Je kan niet alle waarden verwijderen","EXTERNAL_USER":"Externe gebruiker","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Geheime sleutel","PAYLOAD_URL":"Payload URL","VALID_IPS":"Correct origine IPs (gescheiden door ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket requests zijn niet gesigneerd, dus de beste manier om hun oorsprong te verifiëren is op basis van IP. Als het veld leeg is zal er geen IP validatie plaatsvinden."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab requests zijn niet gesigneerd, dus de beste manier om hun oorsprong te verifiëren is op basis van IP. Als het veld leeg is zal er geen IP validatie plaatsvinden."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Nieuwe webhook toevoegen","TYPE_NAME":"Type de service naam","TYPE_PAYLOAD_URL":"Type de service payload url","TYPE_SERVICE_SECRET":"Type de geheime service sleutel","SAVE":"Webhook opslaan","CANCEL":"Webhook Annuleren","SHOW_HISTORY":"(Toon historie)","TEST":"Test webhook","EDIT":"Webhook bewerken","DELETE":"Verwijder Webhook","REQUEST":"Verzoek","RESEND_REQUEST":"Verzoek opnieuw versturen","HEADERS":"Koppen","PAYLOAD":"Payload","RESPONSE":"Reactie","DATE":"DD MMM YYYY [om] hh:mm:ss","ACTION_HIDE_HISTORY":"(Verberg historie)","ACTION_HIDE_HISTORY_TITLE":"Verberg geschiedenis","ACTION_SHOW_HISTORY":"(Toon geschiedenis)","ACTION_SHOW_HISTORY_TITLE":"Toon geschiedenis","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Eigen attributen - {{projectName}}","ADD":"Voeg aangepast veld toe","EDIT":"Eigen veld bewerken","DELETE":"Eigen veld verwijderen","SAVE_TITLE":"Eigen velden opslaan","CANCEL_TITLE":"Annuleer aanmaken","SET_FIELD_NAME":"Stel de naam van je eigen veld in","SET_FIELD_DESCRIPTION":"Eigen veld omschrijving instellen","FIELD_TYPE_DEFAULT":"-- select one --","ACTION_UPDATE":"Eigen veld bijwerken","ACTION_CANCEL_EDITION":"Editie annuleren"},"MEMBERSHIP":{"COLUMN_MEMBER":"Gebruiker","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rol","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Actief","STATUS_PENDING":"Resterend","DELETE_MEMBER":"Verwijder gebruiker","RESEND":"Resend","SUCCESS_SEND_INVITATION":"We hebben de uitnodiging opnieuw gestuurd aan '{{email}}'.","SUCCESS_DELETE":"We hebben {{message}} verwijderd.","ERROR_DELETE":"We zijn er niet in geslaagd om te verwijderen {{message}}","DEFAULT_DELETE_MESSAGE":"de uitnodiging naar {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Standaard waarde voor punten selectie","LABEL_TASK_STATUS":"Standaard waarde voor taak status selectie","LABEL_ISSUE_TYPE":"Standaard waarde voor issue type selectie","LABEL_ISSUE_STATUS":"Standaard waarde voor issue status selectie","LABEL_PRIORITY":"Standaard waarde voor prioriteit selectie","LABEL_SEVERITY":"Standaard waarde voor ernst selectie"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Geef een naam voor de nieuwe status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Geef een naam voor het nieuwe element"},"US_STATUS":{"ACTION_ADD_STATUS":"Nieuwe status toevoegen","IS_ARCHIVED_COLUMN":"Gearchiveerd","IS_CLOSED_COLUMN":"Gesloten","WIP_LIMIT_COLUMN":"WIP limiet","PLACEHOLDER_WRITE_NAME":"Schrijf een naam voor de nieuwe status"},"MENU":{"PROJECT":"Project","ATTRIBUTES":"Attributen","MEMBERS":"Gebruikers","PERMISSIONS":"Permissies","INTEGRATIONS":"Integraties"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Punten","PRIORITIES":"Prioriteiten","SEVERITIES":"Ernst","TYPES":"Types","CUSTOM_FIELDS":"Eigen velden","TAGS":"Tags","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Rollen","ACTION_NEW_ROLE":"+ Nieuwe rol","TITLE_ACTION_NEW_ROLE":"Nieuwe rol toevoegen"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Verborgen","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Accepteren","REJECT":"Afwijzen","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Ongelimiteerd","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Profiel bewerken","CLOSED_US":"Gesloten US","PROJECTS":"Projecten","PROJECTS_EMPTY":"{{username}} heeft nog geen projecten","CONTACTS":"Contacten","CONTACTS_EMPTY":"{{username}} heeft nog geen contacten","CURRENT_USER_CONTACTS_EMPTY":"Je hebt nog geen contacten","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"De mensen waarmee je via Taiga werkt zullen automatisch je contacten worden","TABS":{"ACTIVITY_TAB":"Tijdlijn","ACTIVITY_TAB_TITLE":"Alle activiteit van deze gebruiker weergeven","PROJECTS_TAB":"Projecten","PROJECTS_TAB_TITLE":"List of all projects in which the user is a member","LIKES_TAB":"Personen die dit leuk vinden","LIKES_TAB_TITLE":"Lijst alles op wat deze gebruiker leuk vind","VOTES_TAB":"Stemmen","VOTES_TAB_TITLE":"List all votes made by this user","WATCHED_TAB":"Watched","WATCHED_TAB_TITLE":"List all item watched by this user","CONTACTS_TAB":"Contacten","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"Jouw profiel","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"Bio aanpassen"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Typ iets...","FILTER_TYPE_ALL":"Alles","FILTER_TYPE_ALL_TITLE":"Alles weergeven","FILTER_TYPE_PROJECTS":"Projecten","FILTER_TYPE_PROJECTS_TITLE":"Enkel projecten weergeven","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Verhalen","FILTER_TYPE_USER_STORIES_TITLE":"Enkel verhalen van gebruikers weergeven","FILTER_TYPE_TASKS":"Taken","FILTER_TYPE_TASKS_TITLE":"Enkel taken weergeven","FILTER_TYPE_ISSUES":"Kwesties","FILTER_TYPE_ISSUES_TITLE":"Alleen kwesties weergeven","EMPTY_TITLE":"Het ziet er naar uit dat er hier niets is om weer te geven."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Herorden je projecten met de vaakst gebruikte bovenaan.
    De top 10 projecten zullen verschijnen in de project lijst bovenaan in de navigatie bar.","PRIVATE":"Gesloten project","LOOKING_FOR_PEOPLE":"This project is looking for people","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Geblokkeerd project","THIS_PROJECT_IS_BLOCKED":"This project is temporarily blocked","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Neem contact op met de administrator om je projecten te deblokkeren."},"SECTION":{"SEARCH":"Zoek","TIMELINE":"Tijdlijn","EPICS":"Epics","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Kwesties","WIKI":"Wiki","TEAM":"Team","MEETUP":"Meet Up","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Project aanmaken","MANAGE_PROJECTS":"Manage projects","TITLE_CREATE_PROJECT":"Project aanmaken","HELP_TITLE":"Taiga support pagina","HELP":"Help","HOMEPAGE":"Startpagina","FEEDBACK_TITLE":"Stuur feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Notificatie instellingen bewerken","NOTIFICATIONS":"Notificaties","VIEW_PROFILE_TITLE":"Bekijk profiel","VIEW_PROFILE":"Bekijk profiel","EDIT_PROFILE_TITLE":"Bewerk je profiel","EDIT_PROFILE":"Bewerk profiel","CHANGE_PASSWORD_TITLE":"Wachtwoord wijzigen","CHANGE_PASSWORD":"Wachtwoord wijzigen","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Ontdek trending projecten","DISCOVER":"Ontdek"},"LIKE_BUTTON":{"LIKE":"Vind ik leuk","LIKED":"Leuk gevonden","UNLIKE":"Vind ik niet meer leu","BUTTON_TITLE":"Vind dit project leuk of niet","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Watch this project and set notification policy","WATCH":"Bekijk","WATCHING":"Volgers","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Ontvang alle notificaties","NOTIFY_ALL_TITLE":"Ontvang alle notificaties voor dit project","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Recive notificacions only when you are involved","UNWATCH":"Unwatch","UNWATCH_TITLE":"Unwatch this project"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Neem contact op met het project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Project aanmaken","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Importeer project","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Private Project"},"COMMON":{"DETAILS":"Nieuwe project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Onze Oempa-Loempa's zijn je project aan het importeren","ASYNC_IN_PROGRESS_MESSAGE":"Dit proces kan een paar minuten duren
    We sturen je een email als het gereed is","UPLOAD_IN_PROGRESS_MESSAGE":"{{uploadedSize}} van {{totalSize}} geupload","ERROR":"Onze Oempa-Loempa's hebben wat problemen bij het importeren van de dump. Probeer het opnieuw.","ERROR_TOO_MANY_REQUEST":"Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten.","ERROR_MESSAGE":"Onze Oempa-Loempa's hebben wat problemen met het importeren van je dump: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})","SYNC_SUCCESS":"Je project werd met succes geïmporteerd","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Kies gebruiker","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Assign","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"zoek","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Importeren project","DESCRIPTION":"Dit proces kan even duren, laat het venster even open alsjeblieft."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Importeer je GitHub project kwesties","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Hoe wil je je kwesties in Taiga importeren?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"Als kwesties","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Kwesties","CREATE_AS_SCRUM_DESCRIPTION":"De kwesties en sub-kwesties van je project zullen in Taiga als user stories en taken worden aangemaakt.","CREATE_AS_KANBAN_DESCRIPTION":"De kwesties en sub-kwesties van je project zullen in Taiga als user stories en taken worden aangemaakt.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Weet je zeker dat je je Taiga account wilt verwijderen?","CANCEL":"Terug naar instellingen","ACCEPT":"Verwijder account","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Verwijder project","QUESTION":"Weet je zeker dat je dit project wilt verwijderen?","SUBTITLE":"Alle projectgegevens (user stories, taken, kwesties, sprints en wiki pagina's) zullen verloren gaan! :-(","CONFIRM":"Ja, ik weet het zeker"},"ASSIGNED_TO":{"SELECT":"Selecteer toegewezen aan","SEARCH":"Zoek gebruikers"},"ADD_MEMBER":{"TITLE":"Nieuwe gebruiker","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Voeg e-mail toe","REMOVE":"Verwijder","INVITE":"Uitnodigen","CHOOSE_ROLE":"Kies een rol","PLACEHOLDER_INVITATION_TEXT":"(Optioneel) Voeg een gepersonaliseerd bericht toe aan je uitnodiging. Vertel iets leuks aan je nieuwe leden ;-)","HELP_TEXT":"Als gebruikers al geregistreerd zijn op Taiga, zullen ze automatisch toegevoegd worden. Anders krijgen ze een uitnodiging."},"FEEDBACK":{"TITLE":"Vertel ons iets...","COMMENT":"...een bug, suggesties, iets cools... of zelfs je ergste nachtmerrie met Taiga.","ACTION_SEND":"Stuur feedback"},"SEARCH":{"TITLE":"Zoek","PLACEHOLDER_SEARCH":"Wat zoek je?"},"ADD_EDIT_SPRINT":{"TITLE":"Nieuwe sprint","PLACEHOLDER_SPRINT_NAME":"naam sprint","PLACEHOLDER_SPRINT_START":"Geschatte start","PLACEHOLDER_SPRINT_END":"Geschat einde","ACTION_DELETE_SPRINT":"Wil je deze sprint verwijderen?","TITLE_ACTION_DELETE_SPRINT":"sprint verwijderen","LAST_SPRINT_NAME":"laatste sprint is {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Voeg Issue toe","FILTER_ISSUES":"Filter kwesties"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Verwijder sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optioneel) Voeg een gepersonaliseerd bericht toe aan je uitnodiging. Vertel iets leuks aan je nieuwe leden ;-)","PLACEHOLDER_TYPE_EMAIL":"Type en E-mail","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Opmerking toevoegen","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Wat is dit project?","CHOOSE_PROJECT_FROM":"Wat is dit project?","SUBJECT":"Onderwerp","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"Nieuwe user story","EXISTING_USERSTORY":"Bestaande user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Onderwerp","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - User Story {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Voltooid {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} van {{userStoryTotalTasks}} taken gesloten). Punten: {{userStoryPoints}}. Omschrijving: {{userStoryDescription}}","SECTION_NAME":"User story","LINK_TASKBOARD":"Taakbord","TITLE_LINK_TASKBOARD":"Ga naar het dashboard","TOTAL_POINTS":"totaal aantal punten","ADD":"+ Nieuwe User Story toevoegen","ADD_BULK":"Voeg enkele nieuwe User Stories in bulk toe","PROMOTED":"Deze US werd gepromoveerd van Issue:","TITLE_LINK_GO_TO_ISSUE":"Ga naar probleem","TITLE_DELETE_ACTION":"Verwijder user story","LIGHTBOX_TITLE_BLOKING_US":"User story blokkeren","NOT_ESTIMATED":"Niet ingeschat","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Close","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Opmerking verwijderd door {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Oudste eerst","RECENT_FIRST":"Nieuwste eerst","COMMENT":"Reageer","EDITED_COMMENT":"Aangepast:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Type hier nieuw commentaar","SHOW_DELETED":"Toon verwijderd commentaar","HIDE_DELETED":"Verberg verwijderde opmerkingen","DELETE":"Opmerking verwijderen","RESTORE":"Opmerking herstellen","HISTORY":{"TITLE":"Activiteit"}},"ACTIVITY":{"TITLE":"Activiteit","ACTIVITIES_COUNT":"{{activities}} Activiteiten","TAGS_ADDED":"tags toegevoegd:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"new attachment:","DELETED_ATTACHMENT":"deleted attachment:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Eisen team","CLIENT_REQUIREMENT":"Requirement van de klant","BLOCKED":"Geblokkeerd","VALUES":{"NOT_SET":"not set","UNASSIGNED":"niet toegewezen"},"FIELDS":{"SUBJECT":"onderwerp","DESCRIPTION":"beschrijving","PRIORITY":"prioriteit","SEVERITY":"erstniveau","STATUS":"status","TYPE":"type","ASSIGNED_TO":"toegewezen aan","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"kleur"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Het backlog overzicht, met user stories en sprints van het project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Je backlog grafiek aanpassen","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Verplaats naar huidige sprint","MOVE_US_TO_LATEST_SPRINT":"Move to latest Sprint","EMPTY":"De backlog is leeg!","CREATE_NEW_US":"Nieuwe US aanmaken","CREATE_NEW_US_EMPTY_HELP":"Misschien wil je een nieuwe user story aanmaken","EXCESS_OF_POINTS":"Overschot aan punten","PENDING_POINTS":"Resterende punten","CLOSED_POINTS":"gesloten","COMPACT_SPRINT":"Compacte Sprint","GO_TO_TASKBOARD":"Ga naar het taakbord van {{::name}}","EDIT_SPRINT":"Bewerk sprint","TOTAL_POINTS":"totaal","STATUS_NAME":"Naam status","SORTABLE_FILTER_ERROR":"Je kan niet loslaten op de backlog als er filters geopend zijn","DOOMLINE":"Project scope [doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Punten","OPTIMAL":"Optimaal aantal openstaande punten voor sprint \"{{sprintName}}\" zou {{value}} moeten zijn","REAL":"Reële openstaande punten voor sprint \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Toegevoegde aantal punten door team vereisten voor sprint \"{{sprintName}}\" is {{vallue}}","INCREMENT_CLIENT":"Toegevoegde aantal punten door klant vereisten voor sprint \"{{sprintName}}\" is {{vallue}}"},"TAGS":{"TOGGLE":"Zet de tag zichtbaarheid aan of af","SHOW":"Toon tags","HIDE":"Verberg tags"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"User Stories","TITLE_COLUMN_POINTS":"Selecteer view per rol"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"totaal
    punten","COMPLETED_POINTS":"afgeronde
    punten","OPEN_TASKS":"open
    taken","CLOSED_TASKS":"gesloten
    taken","IOCAINE_DOSES":"iocaine
    dosissen","SHOW_STATISTICS_TITLE":"Toon statistieken","TOGGLE_BAKLOG_GRAPH":"Toon/Verstop burndown grafiek","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"project
    punten","DEFINED_POINTS":"definieer
    punten","CLOSED_POINTS":"gesloten
    punten","POINTS_PER_SPRINT":"punten/
    sprint"},"FILTERS":{"TOGGLE":"Zet de filter zichtbaarheid aan of af","HIDE":"Filters verbergen","SHOW":"Toon filters"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Sprint taakbord","TITLE_LINK_TASKBOARD":"Ga naar taakbord van \"{{name}}\"","EMPTY":"There are no sprints yet","WARNING_EMPTY_SPRINT_ANONYMOUS":"This sprint has no User Stories","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"Add new sprint","TEXT_ACTION_NEW_SPRINT":"You may want to create a new sprint in your project","ACTION_SHOW_CLOSED_SPRINTS":"Toon gesloten sprints","ACTION_HIDE_CLOSED_SPRINTS":"Verberg afgesloten sprints"}},"ERROR":{"TEXT1":"Er is iets gebeurd en onze Oempa-Loempa's zijn er mee bezig.","NOT_FOUND":"Niet gevonden","NOT_FOUND_TEXT":"Error 404. De pagina die je zoekt bestaat niet meer. Misschien kan je terugkeren naar de TAIGA startpagina en kijken of je kan vinden wat je zoekt.","PERMISSION_DENIED":"Niet toegestaan","PERMISSION_DENIED_TEXT":"Je hebt geen toegangsrechten tot deze pagina","VERSION_ERROR":"Iemand bij Taiga heeft dit vooraf veranderd en onze Oempa-Loempa's konden je veranderingen niet toepassen. Gelieve te herladen en je veranderingen opnieuw toe te passen (ze zullen verloren gaan)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint taakbord - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (van {{startDate}} tot {{endDate}}) van {{projectName}}. Voltooid {{completedPercentage}}% ({{completedPoints}} van {{totalPoints}} punten). {{openTasks}} geopende taken van {{totalTasks}}.","SECTION_NAME":"Taakbord","TITLE_ACTION_ADD":"Voeg een nieuwe taak toe","TITLE_ACTION_ADD_BULK":"Wat nieuwe taken in bulk toevoegen","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Voeg kwesties in bulk toe","TITLE_ACTION_ASSIGN":"Toegewezen taak","PLACEHOLDER_CARD_TITLE":"Dit zou een taak kunnen zijn","PLACEHOLDER_CARD_TEXT":"Split Stories into tasks to track them separately","TABLE":{"COLUMN":"User story","TITLE_ACTION_FOLD":"Kolom inklappen","TITLE_ACTION_UNFOLD":"Kolom uitklappen","TITLE_ACTION_FOLD_ROW":"Regel inklappen","TITLE_ACTION_UNFOLD_ROW":"Regel uitklappen","FIELD_POINTS":"punten","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint kwesties"},"CHARTS":{"XAXIS_LABEL":"Dagen","YAXIS_LABEL":"Punten","OPTIMAL":"Optimaal resterende punten voor dag {{formattedDate}} zou {{roundedValue}} zijn","REAL":"Werkelijk aantal resterende punten op {{formattedDate}} zijn {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Taak {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Omschrijving: {{taskDescription}}","SECTION_NAME":"Taak","LINK_TASKBOARD":"Taakbord","TITLE_LINK_TASKBOARD":"Ga naar het taakbord","PLACEHOLDER_SUBJECT":"Type het nieuwe onderwerp voor de taak","TITLE_SELECT_STATUS":"Status naam","OWNER_US":"Deze taak is van","TITLE_LINK_GO_OWNER":"Ga naar user story","TITLE_DELETE_ACTION":"Verwijder taak","LIGHTBOX_TITLE_BLOKING_TASK":"Blokkerende taak","FIELDS":{"IS_IOCAINE":"Is iocaine"},"TITLE_ACTION_IOCAINE":"Voel je je wat overweldigd door een taak? Zorg ervoor dat anderen dit weten door op Iocaine te klikken bij het wijzigen van een taak. Je kan stapsgewijs immuun worden tegen dit (fictioneel) dodelijk gif door kleine dosissen op te nemen. Net zoals je beter kan worden in wat je doet door af en toe een extra uitdaging aan te gaan!"},"NOTIFICATION":{"OK":"Alles is goed","WARNING":"Oeps, er ging iets mis...","WARNING_TEXT":"Onze Oempa-Loempa's zijn verdrietig, uw veranderingen werden niet opgeslagen!","SAVED":"Onze Oompa Loompas hebben al je wijzigingen opgeslagen!","CLOSE":"Notificatie sluiten","MAIL":"Notificaties per mail","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Weet je zeker dat je wilt verwijderen?"},"CANCEL_ACCOUNT":{"TITLE":"Annuleer je account","SUBTITLE":"We vinden het spijtig dat je de taiga verlaat, hopelijk heb je van je verblijf genoten :)","PLACEHOLDER_INPUT_TOKEN":"annuleer account token","ACTION_LEAVING":"Ja, ik ga weg!","SUCCESS":"Onze Oempa-Loempa's hebben je account verwijderd"},"CHANGE_EMAIL_FORM":{"TITLE":"Wijzig je e-mail","SUBTITLE":"Nog één klik en je email wordt geüpdatet!","PLACEHOLDER_INPUT_TOKEN":"wijzig email token","ACTION_CHANGE_EMAIL":"Email wijzigen","SUCCESS":"Onze Oempa-Loempa's hebben je email bijgewerkt"},"ISSUES":{"PAGE_TITLE":"Kwesties - {{projectName}}","PAGE_DESCRIPTION":"Het kwesties lijstje van het project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Issue","ACTION_NEW_ISSUE":"+ nieuw probleem","ACTION_PROMOTE_TO_US":"Promoveer tot User Story","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Dit issue is gepromoveerd tot US:","EXTERNAL_REFERENCE":"Dit issue is aangemaakt vanaf","GO_TO_EXTERNAL_REFERENCE":"Ga naar bron","ACTION_DELETE":"Verwijderd issue","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blokkerend issue","LINK_TASKBOARD":"Taakbord","TITLE_LINK_TASKBOARD":"Ga naar het taakbord","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioriteit","SEVERITY":"Ernst","TYPE":"Type"},"FILTER_ISSUES":"Filter kwesties","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Bevorder dit issue tot een nieuwe user story","MESSAGE":"Weet je zeker dat je een nieuw US van dit issue wilt maken?"},"TABLE":{"COLUMNS":{"TYPE":"Type","SEVERITY":"Ernst","PRIORITY":"Prioriteit","SUBJECT":"Onderwerp","VOTES":"Stemmen","STATUS":"Status","MODIFIED":"Modified","ASSIGNED_TO":"Toegewezen aan"},"TITLE_ACTION_CHANGE_STATUS":"Status veranderen","TITLE_ACTION_ASSIGNED_TO":"Toegewezen aan","BLOCKED":"Geblokkeerd","EMPTY":{"TITLE":"Er zijn geen kwesties om te rapporteren :-)","SUBTITLE":"Heb je een issue gevonden?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Kwestie {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Type: {{issueType}}, Prioriteit: {{issuePriority}}. Ernst: {{issueSeverity}}. Omschrijving: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Het kanban overzicht, met user stories van het project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Kolom inklappen","TITLE_ACTION_UNFOLD":"Kolom uitklappen","TITLE_ACTION_ADD_US":"Nieuwe user story toevoegen","TITLE_ACTION_ADD_BULK":"Nieuwe bulk toevoegen","ACTION_SHOW_ARCHIVED":"Toon gearchiveerd","ACTION_HIDE_ARCHIVED":"Verberg gearchiveerde","HIDDEN_USER_STORIES":"De user stories met deze status zijn standaard verborgen","PLACEHOLDER_CARD_TITLE":"These are your User Stories","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Zoek - {{projectName}}","PAGE_DESCRIPTION":"Zoek op alles, user stories, kwesties, taken, wiki pagina's, in het project {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"User Stories","FILTER_ISSUES":"Kwesties","FILTER_TASKS":"Taken","FILTER_WIKI":"Wiki pagina's","PLACEHOLDER_SEARCH":"Zoeken in...","TITLE_ACTION_SEARCH":"zoek","EMPTY_TITLE":"Het lijkt erop dat er niets kon gevonden worden met je opgegeven zoektermen.","EMPTY_DESCRIPTION":"Probeer één van de bovenstaande tabs of zoek opnieuw"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Het team overzicht toont alle leden van het project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Team","PLACEHOLDER_INPUT_SEARCH":"Zoek op volledige naam","COLUMN_MR_WOLF":"Dhr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Gesloten kwesties","COLUMN_IOCAINE":"Iocaine Drinker","EXPLANATION_COLUMN_IOCAINE":"Ingenomen Iocaine dosissen","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki pagina's bewerkt","COLUMN_BUG_HUNTER":"Bug Jager","EXPLANATION_COLUMN_BUG_HUNTER":"Kwesties gerapporteerd","COLUMN_NIGHT_SHIFT":"Nacht Shift","EXPLANATION_COLUMN_NIGHT_SHIFT":"Taak gesloten","COLUMN_TOTAL_POWER":"Volledige Controle","EXPLANATION_COLUMN_TOTAL_POWER":"Totaal punten","SECTION_TITLE_TEAM":"Team >","SECTION_FILTER_ALL":"Alles","CONFIRM_LEAVE_PROJECT":"Weet je zeker dat je dit project wilt verlaten?","ACTION_LEAVE_PROJECT":"Verlaat dit project"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. grootte: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Gebruikersinstellingen","USER_PROFILE":"Gebruikersprofiel","CHANGE_PASSWORD":"Wachtwoord wijzigen","EMAIL_NOTIFICATIONS":"Email notificaties","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Email notificaties","COLUMN_PROJECT":"Project","COLUMN_RECEIVE_ALL":"Alles ontvangen","COLUMN_ONLY_INVOLVED":"Alleen betrokkken","COLUMN_NO_NOTIFICATIONS":"Geen notificaties","OPTION_ALL":"Alles","OPTION_INVOLVED":"Betrokken","OPTION_NONE":"Geen"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Project","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Project"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Use default image","ACTION_DELETE_ACCOUNT":"Verwijderd Taiga account","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Controleer je inbox!
    We hebben je een email gestuurd met instructie om je nieuwe adres in te stellen","CHANGE_PHOTO":"Foto wijzigen","FIELD":{"USERNAME":"Gebruikersnaam","EMAIL":"E-mail","FULL_NAME":"Volledige naam","PLACEHOLDER_FULL_NAME":"Vul je volledige naam in (ex. Íñigo Montoya)","BIO":"Bio","PLACEHOLDER_BIO":"Vertel iets over jezelf","LANGUAGE":"Taal","LANGUAGE_DEFAULT":"-- gebruik standaard taal --","THEME":"Thema","THEME_DEFAULT":"-- gebruikt standaard thema --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Laatst bewerkt op {{lastModifiedDate}} ({{totalEditions}} keer bewerkt in totaal) Inhoud: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Verwijder deze wiki pagina","DELETE_LIGHTBOX_TITLE":"Verwijderd wiki pagina","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"keer
    bewerkt","LAST_EDIT":"laatst
    bewerkt","LAST_MODIFICATION":"laatste wijziging"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Titel","EDITIONS":"Editions","CREATED":"Aangemaakt","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Hint","LINK":"Als je wilt weten hoe, bezoek dan onze support-pagina","LINK_TITLE":"Bezoek onze supportpagina","HINT1_TITLE":"Wist je dat je nu projecten kunt importeren en exporteren?","HINT1_TEXT":"Dit maakt het mogelijk om al je data vanuit de ene taiga te verplaatsen naar een andere","HINT2_TITLE":"Weet je dat je custom velden kunt aanmaken?","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 forget what were you working on?","HINT4_TEXT":"Maak je geen zorgen, op je dashboard vind je al jouw open taken, kwesties en user stories in de volgorde waarin je hebt gewerkt."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} heeft een nieuwe bijlage geüpload in {{obj_name}}","US_CREATED":"{{username}} heeft een nieuwe US aangemaakt {{obj_name}} in {{project_name}}","ISSUE_CREATED":"{{username}} heeft een nieuw Issue aangemaakt {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} heeft een nieuwe taak aangemaakt {{obj_name}} in {{project_name}}","TASK_CREATED_WITH_US":"{{username}} heeft de nieuwe taak {{obj_name}} aangemakt in {{project_name}} die hoort bij de US {{us_name}}","WIKI_CREATED":"{{username}} heeft een nieuwe Wiki-pagina aangemaakt {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} heeft een nieuwe sprint aangemaakt {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} heeft een nieuw project aangemaakt {{project_name}}","MILESTONE_UPDATED":"{{username}} heeft de sprint {{obj_name}} bijgewerkt","US_UPDATED":"{{username}} heeft de eigenschap \"{{field_name}}\" van de US {{obj_name}} bijgewerkt","US_UPDATED_WITH_NEW_VALUE":"{{username}} heeft het attribuut \"{{field_name}}\" van de US {{obj_name}} gewijzigd naar {{new_value}}","US_UPDATED_POINTS":"{{username}} heeft '{{role_name}}' punten van de user story {{obj_name}} gewijzigd naar {{new_value}}","ISSUE_UPDATED":"{{username}} heeft de eigenschap \"{{field_name}}\" van het issue {{obj_name}} bijgewerkt","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} heeft het attribuut \"{{field_name}}\" van de issue gewijzigd van {{obj_name}} naar {{new_value}}","TASK_UPDATED":"{{username}} heeft het attribuut \"{{field_name}}\" van de taak {{obj_name}} gewijzigd naar {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} heeft het attribuut \"{{field_name}}\" van de taak {{obj_name}} gewijzigd naar {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} heeft de eigenschap \"{{field_name}}\" van de taak {{obj_name}} die behoort tot de US {{us_name}} bijgewerkt","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} heeft de eigenschap \"{{field_name}}\" van de taak {{obj_name}} die behoort tot de US {{us_name}} gewijzigd naar {{new_value}}","WIKI_UPDATED":"{{username}} heeft de wiki pagina {{obj_name}} bijgewerkt","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} heeft gereageerd op de US {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} heeft gereageerd op het issue {{obj_name}}","NEW_COMMENT_TASK":"{{username}} heeft gereageerd op de taak {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} heeft gereageerd op de epic {{obj_name}}","NEW_MEMBER":"{{project_name}} heeft een nieuw lid","US_ADDED_MILESTONE":"{{username}} heeft de US {{obj_name}} toegevoegd aan {{sprint_name}}","US_MOVED":"{{username}} heeft de user story {{obj_name}} verplaatst","US_REMOVED_FROM_MILESTONE":"{{username}} heeft de US {{obj_name}} toegevoegd aan de Backlog","BLOCKED":"{{username}} heeft {{obj_name}} geblokkeerd","UNBLOCKED":"{{username}} heeft {{obj_name}} gedeblokkeerd","NEW_USER":"{{username}} heeft zich aangemeld voor Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Issue","TASK":"Taak"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Login with another user","AUTHORIZE_APP":"Authorize app","CANCEL":"Annuleren"},"JOYRIDE":{"NAV":{"NEXT":"Volgende","BACK":"Back","SKIP":"Skip","DONE":"Afgewerkt"},"DASHBOARD":{"STEP1":{"TITLE":"Your project","TEXT":"Welcome! Here you will find the projects you are involved on."},"STEP2":{"TITLE":"Werkt aan","TEXT":"Hier vind je de user stories, taken en kwesties waar je aan werkt."},"STEP3":{"TITLE":"Volgers","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"You are already working with Taiga ;)"},"STEP4":{"TITLE":"Laten we beginnen","TEXT1":"You can start by creating your first Taiga project.","TEXT2":"Veel succes!"}},"BACKLOG":{"STEP1":{"TITLE":"Project summary","TEXT1":"Here you will see the state of your project.","TEXT2":"You can change every kind of project settings through the admin."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"User Stories","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"User Stories & Tasks","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Veel succes!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Discover projects","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Most liked","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"Meer","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Alles","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Looking for people","WEEK":"Vorige week","MONTH":"Vorige maand","YEAR":"Vorig jaar","ALL_TIME":"All time","CLEAR":"Filters ongedaan maken"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Typ iets...","ACTION_TITLE":"Zoek","RESULTS":"Search results"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-pl.json b/dist/v-1547534999795/locales/taiga/locale-pl.json deleted file mode 100644 index 547e57c..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-pl.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Tak","NO":"Nie","OR":"lub","I_GET_IT":"OK, I get it","LOADING":"Wczytywanie...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Zapisz","CANCEL":"Anuluj","ACCEPT":"Akceptuj","DELETE":"Usuń","UNLINK":"Odłącz","CREATE":"Stwórz","ADD":"Dodaj","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Edycja","DRAG":"Przeciągnij","TAG_LINE":"Twoje zwinne, wolne, otwartoźródłowe narzędzie do zarządzania projektem","TAG_LINE_2":"Pokochaj swój projekt!","BLOCK":"Blokuj","BLOCK_TITLE":"Zablokuj to np. jeżeli posiada zależności, które nie mogą być zrealizowane","BLOCKED":"Zablokowane","UNBLOCK":"Odblokuj","UNBLOCK_TITLE":"Odblokuj","BLOCKED_NOTE":"Dlaczego jest zabokowane?","BLOCKED_REASON":"Wyjaśnij powód","CREATED_BY":"Utworzone przez {{fullDisplayName}}","CLOSE":"zamknij","GO_HOME":"Zabierz mnie do strony domowej","PLUGINS":"Wtyczki","ONE_ITEM_LINE":"Jedna pozycja na wiersz...","NEW_BULK":"Nowe zbiorcze dodawanie","SUBTASKS":"Subtasks","PREVIOUS":"Poprzedni","NEXT":"Następny","LOGOUT":"Wyloguj","EXTERNAL_USER":"zewnętrzny użytkownik","GENERIC_ERROR":"Umpa Lumpa mówi {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Project Owner","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Powiązane historyjki użytkownika","CARD":{"ASSIGN_TO":"Przypisz Do","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Usuń zgłoszenie","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Nieprawidłowa wartość","TYPE_EMAIL":"Podaj prawidłowy adres email.","TYPE_URL":"Podaj prawidłowy link.","TYPE_URLSTRICT":"Tutaj powinien być prawidłowy link.","TYPE_NUMBER":"Podaj prawidłową wartość liczbową.","TYPE_DIGITS":"Tutaj powinny znajdować się cyfry.","TYPE_DATEISO":"Tutaj powinna znajdować się data w formacie (RRRR-MM-DD).","TYPE_ALPHANUM":"Tutaj powinna znajdować się wartość alfanumeryczna.","TYPE_PHONE":"Wpisz numer telefonu.","NOTNULL":"Ta wartość nie powinna być zerowa.","NOT_BLANK":"To pole nie powinno zostać puste.","REQUIRED":"To pole jest wymagane.","REGEXP":"Nieprawidłowa wartość","MIN":"Ta wartość powinna być większa lub równa od %s.","MAX":"Ta wartość powinna być mniejsza lub równa od %s.","RANGE":"Ta wartość powinna mieścić się w przedziale od %s do %s.","MIN_LENGTH":"Zbyt mało znaków. Wpisz %s lub więcej znaków.","MAX_LENGTH":"Zbyt dużo znaków. Wpisz %s lub mniej znaków.","RANGE_LENGTH":"Niewłaściwa ilość znaków. Wpisz pomiędzy %s a %s znaków.","MIN_CHECK":"Musisz zaznaczyć przynajmniej %s pozycji.","MAX_CHECK":"Musisz zaznaczyć %s pozycji lub mniej.","RANGE_CHECK":"Musisz zaznaczyć pomiędzy %s a %s pozycji.","EQUAL_TO":"Ta wartość powinna być taka sama.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Poprzedni Miesiąc","NEXT_MONTH":"Następny Miesiąc","MONTHS":{"JAN":"Styczeń","FEB":"Luty","MAR":"Marzec","APR":"Kwiecień","MAY":"Maj","JUN":"Czerwiec","JUL":"Lipiec","AUG":"Sierpień","SEP":"Wrzesień","OCT":"Październik","NOV":"Listopad","DEC":"Grudzień"},"WEEK_DAYS":{"SUN":"Niedziela","MON":"Poniedziałek","TUE":"Wtorek","WED":"Środa","THU":"Czwartek","FRI":"Piątek","SAT":"Sobota"},"WEEK_DAYS_SHORT":{"SUN":"Nd","MON":"Pon","TUE":"Wt","WED":"Śr","THU":"Czw","FRI":"Pt","SAT":"Sob"}},"SEE_USER_PROFILE":"Zobacz profil użytkownika {{username }}","USER_STORY":"Historyjka użytkownika","TASK":"Zadania","ISSUE":"Zgłoszenie","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Usuń tag","ADD":"Dodaj tag"},"DESCRIPTION":{"EMPTY":"Puste miejsce jest takie nudne... opisz, nadaj sensu...","NO_DESCRIPTION":"Jeszcze bez opisu"},"FIELDS":{"SUBJECT":"Temat","NAME":"Nazwa","URL":"Link","DESCRIPTION":"Opis","VALUE":"Wartość","SLUG":"Slug","COLOR":"Kolor","IS_CLOSED":"Zamknięte?","STATUS":"Status","TYPE":"Typ","SEVERITY":"Ważność","PRIORITY":"Priorytet","ASSIGNED_TO":"Przydzielone do","ASSIGNED_USERS":"Assigned users","POINTS":"Punkty","IS_BLOCKED":"zablokowana","REF":"Ref","VOTES":"Głosy","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Wszystko"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Nieprzypisane","ASSIGN":"Assign","DELETE_ASSIGNMENT":"Usuń przypisanie","REMOVE_ASSIGNED":"Ukryj przypisane","TOO_MANY":"...zbyt wielu użytkowników, filtruj dalej Umpa Lumpy nie ogarniają","CONFIRM_UNASSIGNED":"Jesteś pewny, że chcesz pozostawić nieprzypisane?","TITLE_ACTION_EDIT_ASSIGNMENT":"Edytuj przypisanie","SELF":"Przypisz do mnie"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Zamknięte","OPEN":"Otwórz"},"WATCHERS":{"WATCHERS":"Obserwatorzy","ADD":"Dodaj obserwatorów","TITLE_ADD":"Dodaj członka projektu do listy obserwatorów.","DELETE":"Usuń obserwatora","TITLE_LIGHTBOX_DELETE_WARTCHER":"Usuwanie obserwatora..."},"WATCH_BUTTON":{"WATCH":"Obserwuj","WATCHING":"Obserwujesz","UNWATCH":"Nie obserwuj","WATCHERS":"Obserwatorzy","BUTTON_TITLE":"Obserwuj lub przestań obserwować","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Ocen ten obiekt","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Własne Pola","SAVE":"Zapisz pole niestandardowe","EDIT":"Edytuj pole niestandardowe","DELETE":"Usuń niestandardowy atrybut","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Temat lub odniesienie","TITLE_ACTION_FILTER_BUTTON":"szukaj","TITLE":"Filtry","TITLE_ACTION_SEARCH":"Szukaj","ACTION_SAVE_CUSTOM_FILTER":"zapisz jako filtr niestandardowy","PLACEHOLDER_FILTER_NAME":"Wpisz nazwę filtru i kliknij enter","APPLIED_FILTERS_NUM":"filters applied","CATEGORIES":{"TYPE":"Typ","STATUS":"Statusy","SEVERITY":"Ważność","PRIORITIES":"Priorytety","TAGS":"Tagi","ASSIGNED_TO":"Przypisane do","ASSIGNED_USERS":"Assigned users","ROLE":"Rola","CREATED_BY":"Stworzona przez","CUSTOM_FILTERS":"Filtry niestandardowe","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Składnia Markdown pomoc"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epiki","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"Sprinty","VIEW_SPRINTS":"Przeglądaj Sprinty","ADD_SPRINTS":"Dodawaj sprinty","MODIFY_SPRINTS":"Modyfikuj sprinty","DELETE_SPRINTS":"Usuwaj sprinty"},"USER_STORIES":{"NAME":"Historyjki użytkownika","VIEW_USER_STORIES":"Przeglądaj historyjki użytkownika","ADD_USER_STORIES":"Dodawaj historyjki użytkownika","MODIFY_USER_STORIES":"Modyfikuj historyjki użytkownika","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Usuwaj historyjki użytkownika"},"TASKS":{"NAME":"Zadania","VIEW_TASKS":"Przeglądaj zadania","ADD_TASKS":"Dodawaj zadania","MODIFY_TASKS":"Modyfikuj zadania","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Usuwaj zadania"},"ISSUES":{"NAME":"Zgłoszenia","VIEW_ISSUES":"Przeglądaj zgłoszenia","ADD_ISSUES":"Dodawaj zgłoszenia","MODIFY_ISSUES":"Modyfikuj zgłoszenia","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Usuwaj zgłoszenia"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Przeglądaj strony Wiki","ADD_WIKI_PAGES":"Dodawaj strony Wiki","MODIFY_WIKI_PAGES":"Modyfikuj strony Wiki","DELETE_WIKI_PAGES":"Usuwaj strony Wiki","VIEW_WIKI_LINKS":"Przeglądaj linki Wiki","ADD_WIKI_LINKS":"Dodawaj linki Wiki","DELETE_WIKI_LINKS":"Usuwaj linki Wiki"}}},"LOGIN":{"PAGE_TITLE":"Logowanie - Taiga","PAGE_DESCRIPTION":"Logowanie do Taiga, platformy do zarządzania projektami dla startup'ów oraz zwinnych developerów i designerów, którzy potrzebują prostego, ładnego narzędzia, które sprawi, że praca stanie się przyjemnością."},"AUTH":{"INVITED_YOU":"zaprasza cię do dołączenia do projektu","NOT_REGISTERED_YET":"Jeszcze nie zarejestrowany?","REGISTER":"Zarejestruj","CREATE_ACCOUNT":"Tutaj utwórz swoje darmowe konto"},"LOGIN_COMMON":{"HEADER":"Mam już login do Taigi","PLACEHOLDER_AUTH_NAME":"Login albo e-mail (uwzględnij wielkość liter)","LINK_FORGOT_PASSWORD":"Zapomniałeś?","TITLE_LINK_FORGOT_PASSWORD":"Zapomniałeś hasło? ","ACTION_ENTER":"Wprowadź","ACTION_SIGN_IN":"Zaloguj","PLACEHOLDER_AUTH_PASSWORD":"Hasło (uwzględnij wielkość liter)","ALT_LOGIN":"Lub zaloguj z"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Nasze Umpa Lumpy twierdzą,że Twój login/e-mail lub hasło nie są poprawne.","SUCCESS":"Nasze Umpa Lumpy są szczęśliwe, witaj w Taiga."},"REGISTER":{"PAGE_TITLE":"Rejestracja - Taiga","PAGE_DESCRIPTION":"Załóż własne konto w Taiga, platformie do zarządzania projektami dla startup'ów i zwinnych deweloperów oraz designerów, którzy chcą prostego, pięknego narzędzia sprawiającego, że praca jest przyjemna."},"REGISTER_FORM":{"TITLE":"Utwórz nowe konto (bezpłatnie)","PLACEHOLDER_NAME":"Wybierz nazwę użytkownika (z uwzględnieniem wielkości liter)","PLACEHOLDER_FULL_NAME":"Podaj twoje imię i nazwisko","PLACEHOLDER_EMAIL":"Twój e-mail","PLACEHOLDER_PASSWORD":"Wpisz nowe hasło (z uwzględnieniem wielkości liter)","ACTION_SIGN_UP":"Zarejestruj","TITLE_LINK_LOGIN":"Zaloguj","LINK_LOGIN":"Jesteś już zarejestrowany? Zaloguj się"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Zapomniałem hasła - Taiga","PAGE_DESCRIPTION":"Podaj twoją nazwę użytkownika lub e-mail by zdobyć nowe hasło i odzyskać dostęp do Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Ups, czyżbyś zapomniał hasło?","SUBTITLE":"Podaj twoją nazwę użytkownika lub e-mail by zdobyć nowe","PLACEHOLDER_FIELD":"Login albo e-mail","ACTION_RESET_PASSWORD":"Resetuj hasło","LINK_CANCEL":"Nie, zabierz mnie stąd. Chyba je pamiętam.","SUCCESS_TITLE":"Sprawdź swoją skrzynkę mailową!","SUCCESS_TEXT":"Sprawdź swoją skrzynkę!
    Wysłaliśmy Ci wiadomość e-mail z instrukcją jak ustawić nowe hasło.","ERROR":"Nasze Umpa Lumpy twierdzą, że nie jesteś jeszcze zarejestrowany."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Zmień hasło - Taiga","SECTION_NAME":"Zmień hasło","FIELD_CURRENT_PASSWORD":"Obecne hasło","PLACEHOLDER_CURRENT_PASSWORD":"Twoje obecne hasło (lub puste, jeśli jeszcze go nie masz)","FIELD_NEW_PASSWORD":"Nowe hasło","PLACEHOLDER_NEW_PASSWORD":"Wpisz nowe hasło","FIELD_RETYPE_PASSWORD":"Wpisz ponownie nowe hasło","PLACEHOLDER_RETYPE_PASSWORD":"Wpisz ponownie nowe hasło","ERROR_PASSWORD_MATCH":"Hasło nie jest zgodne"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Ustaw nowe hasło do Taiga","SUBTITLE":"Powinieneś spróbować jeść więcej rzeczy bogatych w żelazo, są dobre dla Twojej pamięci :P","PLACEHOLDER_NEW_PASSWORD":"Nowe hasło","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Wpisz ponownie nowe hasło","ACTION_RESET_PASSWORD":"Resetuj hasło","ERROR":"Our Oompa Loompas can't find your request to recover your password. Try to ask for it again.","SUCCESS":"Nasze Umpa Lumpy zapisały Twoje nowe hasło
    Spróbuj zalogować się z jego pomocą."},"INVITATION":{"PAGE_TITLE":"Akceptowanie zaproszenia - Taiga","PAGE_DESCRIPTION":"Zaakceptuj zaproszenie, aby dołączyć do projektu w Taiga, platformie do zarządzania projektami dla startup'ów i zwinnych deweloperów oraz designerów, którzy chcą prostego, pięknego narzędzia sprawiającego, że praca jest przyjemna."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Nasze Umpa Lumpy nie znajdują Twojego zaproszenia :(","SUCCESS":"Udało Ci się dołączyć do tego projektu. Witaj w {{project_name}}"},"HOME":{"PAGE_TITLE":"Strona główna - Taiga","PAGE_DESCRIPTION":"Główna strona Taiga, z Twoimi głównymi projektami i wszystkimi przypisanymi Tobie i obserwowanymi historyjkami użytkownika, zadaniami i zgłoszeniami.","EMPTY_WORKING_ON":"Trochę pusto, nieprawdaż? Zacznij pracować z Taiga a tutaj pojawią się historie, zadania i zgłoszenia nad którymi pracujesz.","EMPTY_WATCHING":"Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)","EMPTY_PROJECT_LIST":"Nie masz jeszcze żadnych projektów","WORKING_ON_SECTION":"Pracujesz nad","WATCHING_SECTION":"Obserwujesz","DASHBOARD":"Panel projektów"},"EPICS":{"TITLE":"EPIKI","SECTION_NAME":"Epiki","EPIC":"EPIK","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+DODAJ EPIK","UNASSIGNED":"Nieprzypisane"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Głosy","NAME":"Nazwa","PROJECT":"Projekt","SPRINT":"Sprint","ASSIGNED_TO":"Przydzielone","STATUS":"Statusy","PROGRESS":"Postęp","VIEW_OPTIONS":"Zobacz opcje"},"CREATE":{"TITLE":"Nowy epik","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Wymaganie zespołu","CLIENT_REQUIREMENT":"Wymaganie klienta","BLOCKED":"Zablokowane","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Moje projekty - Taiga","PAGE_DESCRIPTION":"Lista wszystkich Twoich projektów, możesz zmieniać ich kolejność lub tworzyć nowe.","MY_PROJECTS":"Moje projekty"},"ATTACHMENT":{"SECTION_NAME":"załączniki","TITLE":"{{ plik }} załadowany dnia {{ data }}","LIST_VIEW_MODE":"Tryb listy","GALLERY_VIEW_MODE":"Tryb galerii","DESCRIPTION":"Wpisz krótki opis","DEPRECATED":"(przestarzały)","DEPRECATED_FILE":"Przestarzałe?","ADD":"Dodaj nowy załącznik. {{maxFileSizeMsg}}","DROP":"Upuść załączniki tutaj","SHOW_DEPRECATED":"+ pokaż przestarzałe załączniki","HIDE_DEPRECATED":"- ukryj przestarzałe załączniki","COUNT_DEPRECATED":"({{ counter }} przestarzałych","MAX_UPLOAD_SIZE":"Maksymalny rozmiar wysyłania to {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Nie udało się przesłać pliku '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Usuń załącznik...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"załącznik '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Nie udało się usunąć załącznika w związku z następującym błędem: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Poprzedni","NEXT":"Następny"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Edytuj wartość","TITLE_ACTION_DELETE_VALUE":"Usuń wartość","TITLE_ACTION_DELETE_TAG":"Usuń tag"},"HELP":"Potrzebujesz pomocy? Sprawdź naszą stronę wsparcia!","PROJECT_DEFAULT_VALUES":{"TITLE":"Domyślne wartości","SUBTITLE":"Ustaw wartości domyślne dla wszystkich pól wyboru."},"MEMBERSHIPS":{"TITLE":"Zarządzaj członkami","PAGE_TITLE":"Członkostwa - {{projectName}}","ADD_BUTTON":"+ Nowy członek","ADD_BUTTON_TITLE":"Dodaj nowego członka","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Ten projekt osiągną limit ({{members}}) użytkowników. Jeśli chcesz zwiększyć ten limit, skontaktuj się z administratorem."},"PROJECT_EXPORT":{"TITLE":"Eksport","SUBTITLE":"Wyeksportuj twój projekt aby utworzyć kopię zapasową lub stworzyć nowy bazujący na nim.","EXPORT_BUTTON":"Eksport","EXPORT_BUTTON_TITLE":"Eksport projektu","LOADING_TITLE":"Generujemy plik zrzutu","DUMP_READY":"Twój plik zrzutu jest gotowy!","LOADING_MESSAGE":"Proszę, nie zamykaj tej strony.","ASYNC_MESSAGE":"Wyślemy Ci wiadomość e-mail, kiedy będziemy gotowi.","SYNC_MESSAGE":"Jeśli pobieranie nie rozpocznie się automatycznie kliknij tutaj.","ERROR":"Umpa Lumpy mają problem z wygenerowaniem zrzutu. Spróbuj ponownie.","ERROR_BUSY":"Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę."},"MODULES":{"TITLE":"Moduły","EPICS":"Epiki","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Dziennik","BACKLOG_DESCRIPTION":"Zarządzaj swoimi historyjkami użytkownika aby utrzymać zorganizowany widok i priorytety zadań","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 dla nieokreślonej liczby","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 dla nieokreślonej liczby","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organizuj swój projekt przy użyciu metody lean.","ISSUES":"Zgłoszenia","ISSUES_DESCRIPTION":"Śledź błędy, pytania i ulepszenia związane z projektem. Nie przegap niczego!","WIKI":"Wiki","WIKI_DESCRIPTION":"Dodawaj, modyfikuj lub usuwaj dane we współpracy z innymi. To jest właściwe miejsce dla Twojej dokumentacji projektowej.","MEETUP":"Spotkaj się","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Wybierz system do wideokonferencji.","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Niestandardowy","URL_CHAT_ROOM":"Link do chat roomu"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Profil projektu - {{projectName}}","PROJECT_DETAILS":"Szczegóły projektu","PROJECT_NAME":"Nazwa projektu","TAGS":"Tagi","DESCRIPTION":"Opis","RECRUITING":"Czy ten pojekt szuka uczestników?","RECRUITING_MESSAGE":"Kogo szukasz?","RECRUITING_PLACEHOLDER":"Zdefiniuj jakich profilów szukasz","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Projekt publiczny","PRIVATE_PROJECT":"Projekt prywatny","PRIVATE_OR_PUBLIC":"Jaka jest różnica między publicznymi a prywatnymi projektami?","DELETE":"Usuń ten projekt","CHANGE_LOGO":"Zmień logo","ACTION_USE_DEFAULT_LOGO":"Użyj domyślnego obrazu","MAX_PRIVATE_PROJECTS":"Osiągnąłeś maksymalną liczbę prywatnych projektów dozwoloną przez obecny plan","MAX_PRIVATE_PROJECTS_MEMBERS":"Maksymalna liczba członków dla prywatnych projektów została przekroczona.","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Żądanie","REQUEST_OWNERSHIP_SUCCESS":"Powiadomimy właściciela projektu","CHANGE_OWNER":"Zmień właściciela","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Raporty","SUBTITLE":"Wyeksportuj dane projektu w CSV i stwórz swoje własne projekty","DESCRIPTION":"Pobierz plik CSV lub skopiuj wygenerowany adres URL i otwórz go w edytorze tekstu lub arkuszu kalkulacyjnym, aby tworzyć własne raporty danych projektu. Będziesz mógł łatwo wizualizować i analizować wszystkie dane.","HELP":"Jak mogę tego użyć we własnym arkuszu kalkulacyjnym?","REGENERATE_TITLE":"Zmień link","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"raporty historii użytkownika","SECTION_TITLE_TASK":"Raporty zadań","SECTION_TITLE_ISSUE":"raporty zgłoszeń","DOWNLOAD":"Ściągnij CSV","URL_FIELD_PLACEHOLDER":"Proszę wygeneruj ponownie link do CSV","TITLE_REGENERATE_URL":"Wygeneruj ponownie link do CSV","ACTION_GENERATE_URL":"Wygeneruj link","ACTION_REGENERATE":"Wygeneruj ponownie","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Usuń"},"CUSTOM_FIELDS":{"TITLE":"Własne Pola","SUBTITLE":"Zdefiniuj własne dodatkowe pola dla historyjek użytkownika, zadań i zgłoszeń.","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"Własne pola dla historyjek użytkownika","US_ADD":"Dodaj własne pole dla historyjek użytkownika","TASK_DESCRIPTION":"Własne pola dla zadań","TASK_ADD":"Dodaj Własne pole dla zadań","ISSUE_DESCRIPTION":"Własne pola dla zgłoszeń","ISSUE_ADD":"Dodaj własne pole dla zgłoszeń","FIELD_TYPE_TEXT":"Tekst","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Pole wielowierszowe","FIELD_TYPE_DATE":"Date","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Wartości projektu - {{projectName}}","REPLACEMENT":"Wszystkie wpisy z tą wartością zostaną zmienione na","ERROR_DELETE_ALL":"Nie możesz usunąć wszystkich wartości."},"PROJECT_VALUES_POINTS":{"TITLE":"Punkty","SUBTITLE":"Podaj możliwe estymaty dla historyjek użytkownika","US_TITLE":"punkty","ACTION_ADD":"Dodaj nową wartość"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Priorytety","SUBTITLE":"Zdefiniuj priorytety dla zgłoszeń","ISSUE_TITLE":"Priorytety zgłoszeń","ACTION_ADD":"Dodaj nowy priorytet"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Ważność","SUBTITLE":"Zdefiniuj ważność dla zgłoszeń","ISSUE_TITLE":"Ważność zgłoszeń","ACTION_ADD":"Dodaj nową ważność"},"PROJECT_VALUES_STATUS":{"TITLE":"Statusy","SUBTITLE":"Zdefiniuj statusy dla historyjek użytkownika, zadań i zgłoszeń.","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Statusy zadań","ISSUE_TITLE":"Statusy zgłoszeń"},"PROJECT_VALUES_TYPES":{"TITLE":"Typy","SUBTITLE":"Zdefiniuj typy zgłoszeń","ISSUE_TITLE":"Typy zgłoszeń","ACTION_ADD":"Dodaj nowy {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Tagi","SUBTITLE":"Zobacz i edytuj kolory tagów","EMPTY":"Aktualnie nie ma tu tagów","EMPTY_SEARCH":"Nie znaleziono niczego, co spełniałoby podane kryteria.","ACTION_ADD":"Dodaj tag","NEW_TAG":"Nowy tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Dodaj nowy status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Role - {{projectName}}","WARNING_NO_ROLE":"Bez przydzielenia ról w projekcie nie ma możliwości oceniania historyjek użytkownika. Umpa Lumpy nie będą wiedziały komu wolno to zrobić :)","HELP_ROLE_ENABLED":"Jeśli aktywne użytkownicy pełniący tę rolę będą mogli szacować wartości historyjek","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} użytkowników pełniących tę rolę w projekcie","TITLE_DELETE_ROLE":"Usuń rolę","REPLACEMENT_ROLE":"Wszyscy użytkownicy pełniący tę rolę zostaną przeniesieni do","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Nie możesz usunąć wszystkich wartości","EXTERNAL_USER":"Zewnętrzny użytkownik","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Tajny klucz","PAYLOAD_URL":"Payload URL","VALID_IPS":"Adresy IP(oddzielone przecinkami)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Zapytania Bitbucket nie są szyfrowane zatem najlepszym sposobem weryfikacji źródła jest sprawdzenie adresu IP.Jeśli pole pozostanie puste sprawdzanie IP nie będzie działać."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Zapytania Gitlab nie są szyfrowane zatem najlepszym sposobem weryfikacji źródła jest sprawdzenie adresu IP.Jeśli pole pozostanie puste sprawdzanie IP nie będzie działać."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Dodaj nowy webhook","TYPE_NAME":"Wpisz nazwę serwisu","TYPE_PAYLOAD_URL":"Type the service payload url","TYPE_SERVICE_SECRET":"Wpisz sekretny klucz","SAVE":"Zapisz Webhook","CANCEL":"Cancel Webhook","SHOW_HISTORY":"(Show history)","TEST":"Testuj Webhook","EDIT":"Zmień Webhook","DELETE":"Usuń Webhook","REQUEST":"Żądanie","RESEND_REQUEST":"Resend request","HEADERS":"Headers","PAYLOAD":"Payload","RESPONSE":"Response","DATE":"DD MMM YYYY [at] hh:mm","ACTION_HIDE_HISTORY":"(Ukryj historię)","ACTION_HIDE_HISTORY_TITLE":"Ukryj szczegóły historii","ACTION_SHOW_HISTORY":"(Pokaż historię)","ACTION_SHOW_HISTORY_TITLE":"Pokaż szczegóły historii","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Niestandardowe atrybuty - {{projectName}}","ADD":"Dodaj niestandardowe pole","EDIT":"Edytuj niestandardowe pole","DELETE":"Usuń niestandardowe pole","SAVE_TITLE":"Zapisz niestandardowe pole","CANCEL_TITLE":"Anuluj tworzenie","SET_FIELD_NAME":"podaj nazwę pola","SET_FIELD_DESCRIPTION":"podaj opis pola","FIELD_TYPE_DEFAULT":"-- wybierz --","ACTION_UPDATE":"Aktualizuj pole","ACTION_CANCEL_EDITION":"Anuluj edycję"},"MEMBERSHIP":{"COLUMN_MEMBER":"Członek","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rola","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Aktywny","STATUS_PENDING":"Nieaktywny","DELETE_MEMBER":"Usuń członka","RESEND":"Wyślij ponownie","SUCCESS_SEND_INVITATION":"Ponownie wysłano zaproszenie do '{{e-mail}}'.","SUCCESS_DELETE":"Usunięto {{message}}.","ERROR_DELETE":"Nie usunięto {{message}}.","DEFAULT_DELETE_MESSAGE":"zaproszenie do {{e-mail}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Domyślna wartość dla selektora punktów","LABEL_TASK_STATUS":"Domyśla wartość dla selektora statusu zadań","LABEL_ISSUE_TYPE":"Domyślna wartość dla selektora typu zgłoszenia","LABEL_ISSUE_STATUS":"Domyślna wartość dla selektora statusu zgłoszenia","LABEL_PRIORITY":"Domyślna wartość dla selektora priorytetu","LABEL_SEVERITY":"Domyślna wartość dla selektora ważności"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Wpisz nazwę nowego statusu","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Wpisz nazwę nowego elementu"},"US_STATUS":{"ACTION_ADD_STATUS":"Dodaj nowy status","IS_ARCHIVED_COLUMN":"Zarchiwizowane","IS_CLOSED_COLUMN":"Zamknięte","WIP_LIMIT_COLUMN":"WIP Limit","PLACEHOLDER_WRITE_NAME":"Wpisz nazwę nowego statusu"},"MENU":{"PROJECT":"Projekt","ATTRIBUTES":"Atrybuty","MEMBERS":"Członkowie","PERMISSIONS":"Uprawnienia","INTEGRATIONS":"Integracje"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Punkty","PRIORITIES":"Priorytety","SEVERITIES":"Ważność","TYPES":"Typy","CUSTOM_FIELDS":"Niestandardowe pola","TAGS":"Tagi","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Role","ACTION_NEW_ROLE":"+ Nowa rola","TITLE_ACTION_NEW_ROLE":"Dodaj nową rolę"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Akceptuj","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Edycja profilu","CLOSED_US":"Zamknięte historyjki użytkownika","PROJECTS":"Projekty","PROJECTS_EMPTY":"{{username}} jeszcze nie uczestniczy w żadnym projekcie","CONTACTS":"Kontakty","CONTACTS_EMPTY":"{{username}} jeszcze nie ma kontaktów","CURRENT_USER_CONTACTS_EMPTY":"Jeszcze nie masz kontaktów","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Ludzie z którymi pracujesz w Taiga staną się Twoimi kontaktami automatycznie.","TABS":{"ACTIVITY_TAB":"Oś czasu","ACTIVITY_TAB_TITLE":"Wyświetl całą aktywność użytkownika","PROJECTS_TAB":"Projekty","PROJECTS_TAB_TITLE":"Lista wszystkich projektów, do których należy użytkownik","LIKES_TAB":"Polubienia","LIKES_TAB_TITLE":"Zobacz wszystkie polubienia tego użytkownika","VOTES_TAB":"Głosy","VOTES_TAB_TITLE":"Zobacz wszystkie głosy tego użytkownika","WATCHED_TAB":"Obserwowane","WATCHED_TAB_TITLE":"List all item watched by this user","CONTACTS_TAB":"Kontakty","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"Twój profil","DESCRIPTION":"Ludzie mogą zobaczyć wszystko co robisz i nad czym pracujesz. Dodaj dobre bio, żeby przedstawić więcej informacji.","ADD_INFO":"Edytuj biografię"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Type something...","FILTER_TYPE_ALL":"Wszystkie","FILTER_TYPE_ALL_TITLE":"Show all","FILTER_TYPE_PROJECTS":"Projekty","FILTER_TYPE_PROJECTS_TITLE":"Show only projects","FILTER_TYPE_EPICS":"Epiki","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Stories","FILTER_TYPE_USER_STORIES_TITLE":"Show only user stories","FILTER_TYPE_TASKS":"Zadania","FILTER_TYPE_TASKS_TITLE":"Show only tasks","FILTER_TYPE_ISSUES":"Zgłoszenia","FILTER_TYPE_ISSUES_TITLE":"Show only issues","EMPTY_TITLE":"Wygląda na to, że nie ma niczego do wyświetlenia tutaj."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Ustal kolejność Twoich projektów tak, aby na górze znalazły się te najważniejsze.
    Pierwsze 10 projektów pojawi się w liście projektów na górnym pasku nawigacji.","PRIVATE":"Projekt prywatny","LOOKING_FOR_PEOPLE":"Ten projekt szuka uczestników","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Projekt zablokowany","THIS_PROJECT_IS_BLOCKED":"Ten projekt jest tymczasowo zablokowany","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Aby odblokować swój projekt, skontaktuj się z administacją"},"SECTION":{"SEARCH":"Szukaj","TIMELINE":"Oś czasu","EPICS":"Epiki","BACKLOG":"Dziennik","KANBAN":"Kanban","ISSUES":"Zgłoszenia","WIKI":"Wiki","TEAM":"Zespół","MEETUP":"Spotkaj się","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Stwórz projekt","MANAGE_PROJECTS":"Zarządzaj projektami","TITLE_CREATE_PROJECT":"Utwórz projekt","HELP_TITLE":"Taiga strona wsparcia","HELP":"Pomoc","HOMEPAGE":"Strona startowa","FEEDBACK_TITLE":"Prześlij opinię","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Edytuj ustawienia powiadomień","NOTIFICATIONS":"Powiadomienia","VIEW_PROFILE_TITLE":"Zobacz profil","VIEW_PROFILE":"Zobacz profil","EDIT_PROFILE_TITLE":"Edytuj profil","EDIT_PROFILE":"Edytuj profil","CHANGE_PASSWORD_TITLE":"Zmień hasło","CHANGE_PASSWORD":"Zmień hasło","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Odkryj projekty","DISCOVER":"Odkryj"},"LIKE_BUTTON":{"LIKE":"Like","LIKED":"Liked","UNLIKE":"Unlike","BUTTON_TITLE":"Like or unlike this project","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Watch this project and set notification policy","WATCH":"Watch","WATCHING":"Obserwujesz","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Receive all notifications","NOTIFY_ALL_TITLE":"Receive all notifications for this project","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Recive notificacions only when you are involved","UNWATCH":"Unwatch","UNWATCH_TITLE":"Unwatch this project"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Skontaktuj się z projektem"},"CREATE":{"TITLE":"Utwórz projekt","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Importuj projekt","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Niestety, osiągnąłeś maksimum dozwolonych projektów prywatnych.\nJeśli chciałbyś zwiększyć obecny limit, skontaktuj się z administratorem.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Projekt publiczny","PRIVATE_PROJECT":"Projekt prywatny"},"COMMON":{"DETAILS":"Szczegóły nowego projektu","PROJECT_TITLE":"Nazwa Projektu","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplikuj projekt","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Importuj projekt","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Umpa Lumpy importują projekt","ASYNC_IN_PROGRESS_MESSAGE":"To może zając kilka minut.
    Otrzymasz mail gdy wszystko będzie gotowe.","UPLOAD_IN_PROGRESS_MESSAGE":"Wysłano {{uploadedSize}} z {{totalSize}}","ERROR":"Umpa Lumpy mają problem z importem. Spróbuj ponownie.","ERROR_TOO_MANY_REQUEST":"Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę.","ERROR_MESSAGE":"Przy imporcie wystąpił następujący problem: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})","SYNC_SUCCESS":"Twój projekt zaimportował się prawidłowo!","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Assign","PROJECT_SELECTOR":{"NO_RESULTS":"Nie znaleziono niczego, co spełniałoby podane kryteria.","ACTION_SEARCH":"szukaj","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Importowanie Projektu","DESCRIPTION":"Proces może zająć chwilkę, proszę nie zamykaj okna."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Zgłoszenia","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Czy na pewno chcesz usunąć swoje konto z Taiga?","CANCEL":"Powrót do ustawień","ACCEPT":"Usuń konto","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Usuń projekt","QUESTION":"Czy masz pewność, że chcesz skasować ten projekt?","SUBTITLE":"Wszystkie dane projektu będą stracone! :(","CONFIRM":"Tak, jestem pewny"},"ASSIGNED_TO":{"SELECT":"Wybierz przypisane do","SEARCH":"Szukaj użytkowników"},"ADD_MEMBER":{"TITLE":"Nowy Członek","PLACEHOLDER":"Filtruj użytkowników lub napisz emaila, żeby zaprosić","ADD_EMAIL":"Dodaj e-mail","REMOVE":"Usuń","INVITE":"Zaproś","CHOOSE_ROLE":"Wybierz rolę","PLACEHOLDER_INVITATION_TEXT":"(Opcjonalne) Dodaj spersonalizowany tekst do zaproszenia. Napisz coś słodziachnego do nowego członka zespołu :)","HELP_TEXT":"Jeżeli użytkownik jest już zarejestrowany w Taiga, będzie dodany automatycznie. W przeciwnym wypadku otrzyma zaproszenie."},"FEEDBACK":{"TITLE":"Powiedz nam coś...","COMMENT":"...błędy, sugestie, fajne propozycje..., nawet najgorsze koszmary z Taigi.","ACTION_SEND":"Prześlij opinię"},"SEARCH":{"TITLE":"Szukaj","PLACEHOLDER_SEARCH":"Czego szukasz?"},"ADD_EDIT_SPRINT":{"TITLE":"Nowy sprint","PLACEHOLDER_SPRINT_NAME":"Nazwa sprintu","PLACEHOLDER_SPRINT_START":"Oszacowany Początek","PLACEHOLDER_SPRINT_END":"Oszacowane Zakończenie","ACTION_DELETE_SPRINT":"Chcesz usunąć sprint?","TITLE_ACTION_DELETE_SPRINT":"usuń sprint","LAST_SPRINT_NAME":"ostatni sprint to: {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Dodaj zgłoszenie","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Usuń sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opcjonalne) Dodaj spersonalizowany tekst do zaproszenia. Napisz coś słodziachnego do nowego członka zespołu :)","PLACEHOLDER_TYPE_EMAIL":"Wpisz Email","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Wkrótce osiągniesz maksimum dozwolonych członków dla tego projektu - {{maxMembers}} członków. Jeśli chciałbyś zwiększyć obecny limit, skontaktuj się z administratorem.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Niestety, ten projekt nie może zostać opuszczony bez właściciela","CURRENT_USER_OWNER":{"DESC":"Jesteś aktualnym właścicielem tego projektu. Przed opuszczeniem przetransferuj własność do kogoś innego.","BUTTON":"Zmień właściciela projektu"},"OTHER_USER_OWNER":{"DESC":"Niestety, nie możesz usunąć użytkownika kto jest również aktualnym właścicielem projektu. Najpierw proszę ustaw nowego właściciela projektu.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Kto ma być nowym właścicielem projektu?","ADD_COMMENT":"Dodaj komentarz","BUTTON":"Poproś tego użytkownika o zostanie nowym właścicielem projektu"},"CONTACT_PROJECT":{"TITLE":"Wyślij e-mail do","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Wyślij"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Co to za projekt?","CHOOSE_PROJECT_FROM":"Co to za projekt?","SUBJECT":"Temat","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Nie znaleziono niczego, co spełniałoby podane kryteria."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Opis: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"Nie byliśmy w stanie odlinkować: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Stwórz relację z","NEW_USERSTORY":"Nowa historyjka użytkownika","EXISTING_USERSTORY":"Istniejąca historia użytkownika","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Temat","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"Nie znaleziono niczego, co spełniałoby podane kryteria.","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Historyjka użytkownika {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Zakończono {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} z {{userStoryTotalTasks}} zadań). Punktów: {{userStoryPoints}}. Opis: {{userStoryDescription}}","SECTION_NAME":"Historyjka użytkownika","LINK_TASKBOARD":"Tablica zadań","TITLE_LINK_TASKBOARD":"Idź do listy zadań","TOTAL_POINTS":"total points","ADD":"+ Dodaj nową historyjkę użytkownika","ADD_BULK":"Masowo dodaj nowe historyjki użytkownika","PROMOTED":"Ta historyjka awansowała ze zgłoszenia:","TITLE_LINK_GO_TO_ISSUE":"Idź do zgłoszenia","TITLE_DELETE_ACTION":"Usuń historyjkę użytkownika","LIGHTBOX_TITLE_BLOKING_US":"Blokuje nas","NOT_ESTIMATED":"Nie oszacowane","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edytuj link","CLOSE":"Zamknij","SYNCHRONIZE_LINK":"synchronizuj z Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Potrzebujesz kogoś do tego zadania?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Komentarz usunięty przez {{user}}","COMMENTS_COUNT":"{{comments}} Komentarze","OLDER_FIRST":"Starsze najpierw","RECENT_FIRST":"Ostatnie najpierw","COMMENT":"Komentarz","EDITED_COMMENT":"Edytowano","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Tutaj wpisz nowy komentarz","SHOW_DELETED":"Pokaż usunięty komentarz","HIDE_DELETED":"Ukryj skasowane komentarze","DELETE":"Usuń komentarz","RESTORE":"Przywróć komentarz","HISTORY":{"TITLE":"Aktywność"}},"ACTIVITY":{"TITLE":"Aktywność","ACTIVITIES_COUNT":"{{activities}} Aktywności","TAGS_ADDED":"dodano klucz","TAGS_REMOVED":"usunięto tag:","US_POINTS":"{{role}} punktów","NEW_ATTACHMENT":"nowy załącznik","DELETED_ATTACHMENT":"załącznik usunięty:","UPDATED_ATTACHMENT":"zaktualizowany załącznik ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Wymaganie zespołu","CLIENT_REQUIREMENT":"Wymaganie klienta","BLOCKED":"Zablokowane","VALUES":{"NOT_SET":"not set","UNASSIGNED":"nieprzypisany"},"FIELDS":{"SUBJECT":"temat","DESCRIPTION":"opis","PRIORITY":"priorytet","SEVERITY":"ważność","STATUS":"status","TYPE":"typ","ASSIGNED_TO":"przypisane do","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"kolor"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Panel backlogu zawierający historyjki użytkownika i sprinty {{projectName}}: {{projectDescription}}","SECTION_NAME":"Dziennik","CUSTOMIZE_GRAPH":"Customize your backlog graph","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Przejdź do bieżącego sprintu","MOVE_US_TO_LATEST_SPRINT":"Przejdź do ostatniego sprintu","EMPTY":"The backlog is empty!","CREATE_NEW_US":"Utwórz nową HU","CREATE_NEW_US_EMPTY_HELP":"Możesz utworzyć nową historyjkę użytkownika","EXCESS_OF_POINTS":"Nadwyżka punktów","PENDING_POINTS":"Oczekujące punkty","CLOSED_POINTS":"zamkniętych","COMPACT_SPRINT":"Kompaktuj sprint","GO_TO_TASKBOARD":"Idź do tablicy zadań{{::name}}","EDIT_SPRINT":"Edytuj sprint","TOTAL_POINTS":"w sumie","STATUS_NAME":"Nazwa statusu","SORTABLE_FILTER_ERROR":"Nie możesz przenosić do backlogu kiedy filtry są otwarte","DOOMLINE":"Zakres projektu [Doomline]","CHART":{"XAXIS_LABEL":"Sprinty","YAXIS_LABEL":"Punkty","OPTIMAL":"Optymalna ilość puntów oczekujących w sprincie {{xval}} to {{yval}}","REAL":"Faktyczna ilość punktów oczekujących w sprincie {{xval}} to {{yval}}","INCREMENT_TEAM":"Punkty dodane na podstawie wymagań zespołu w sprincie {{xval}} to {{yval}}","INCREMENT_CLIENT":"Punkty dodane na podstawie wymagań klienta w sprincie {{xval}} to {{yval}}"},"TAGS":{"TOGGLE":"Przełącz widoczność tagów","SHOW":"Pokaż tagi","HIDE":"Ukryj tagi"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Historyjki użytkownika","TITLE_COLUMN_POINTS":"Widok według ról"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"łącznie
    punktów","COMPLETED_POINTS":"wypalonych
    punktów","OPEN_TASKS":"otwartych
    zadań","CLOSED_TASKS":"zamkniętych
    zadań","IOCAINE_DOSES":"dawek
    Iokainy","SHOW_STATISTICS_TITLE":"Pokaż statystyki","TOGGLE_BAKLOG_GRAPH":"Pokaż/Ukryj wykres spalania","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"punktów w
    projekcie","DEFINED_POINTS":"zdefiniowanych
    punktów","CLOSED_POINTS":"zamkniętych
    punktów","POINTS_PER_SPRINT":"punktów na /
    sprint"},"FILTERS":{"TOGGLE":"Przełącz widoczność filtrów","HIDE":"Ukryj filtry","SHOW":"Pokaż filtry"},"SPRINTS":{"TITLE":"SPRINTY","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Tablica zadań sprintu","TITLE_LINK_TASKBOARD":"Idź do tablicy zadań użytkownika {{name}}","EMPTY":"There are no sprints yet","WARNING_EMPTY_SPRINT_ANONYMOUS":"This sprint has no User Stories","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"Add new sprint","TEXT_ACTION_NEW_SPRINT":"You may want to create a new sprint in your project","ACTION_SHOW_CLOSED_SPRINTS":"Pokaż zamknięte sprinty","ACTION_HIDE_CLOSED_SPRINTS":"Ukryj zamknięte sprinty"}},"ERROR":{"TEXT1":"Wystąpił błąd, nasze Umpa Lumpy będą pracować nad jego rozwiązaniem.","NOT_FOUND":"Nie znaleziono","NOT_FOUND_TEXT":"Błąd 404 - strona której szukasz nie istnieje. Wróć do strony głównej Taiga i zobacz, czy znajdziesz tam to, czego szukasz.","PERMISSION_DENIED":"Dostęp zabroniony","PERMISSION_DENIED_TEXT":"You don't have permission to access this page.","VERSION_ERROR":"Odśwież i zastosuj zmiany ponownie gdyż może ktoś przed Tobą zapisał jakieś zmiany."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Lista zadań sprintu - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (od {{startDate}} do {{endDate}}) z {{projectName}}. Ukończono {{completedPercentage}}% ({{completedPoints}} z {{totalPoints}} punktów). {{openTasks}} otwartych zadań z {{totalTasks}}.","SECTION_NAME":"Tablica zadań","TITLE_ACTION_ADD":"Dodaj nowe zadanie","TITLE_ACTION_ADD_BULK":"Dodaj nowe zadania zbiorczo","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Przydziel zadanie","PLACEHOLDER_CARD_TITLE":"This could be a task","PLACEHOLDER_CARD_TEXT":"Split Stories into tasks to track them separately","TABLE":{"COLUMN":"Historyjka użytkownika","TITLE_ACTION_FOLD":"Zwiń kolumnę","TITLE_ACTION_UNFOLD":"Rozwiń kolumnę","TITLE_ACTION_FOLD_ROW":"Zwiń wiersz","TITLE_ACTION_UNFOLD_ROW":"Rozwiń wiersz","FIELD_POINTS":"punkty","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Dni","YAXIS_LABEL":"Punkty","OPTIMAL":"Optymalna ilość oczekujących punktów na dzień {{formattedDate}} to {{roundedValue}}","REAL":"Faktyczna ilość punktów oczekujących na dzień {{formattedDate}} to {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Zadanie {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Opis: {{taskDescription}}","SECTION_NAME":"Zadania","LINK_TASKBOARD":"Tablica zadań","TITLE_LINK_TASKBOARD":"Idź do listy zadań","PLACEHOLDER_SUBJECT":"Wpisz temat zadania","TITLE_SELECT_STATUS":"SNazwa statusu","OWNER_US":"To zadanie należy do","TITLE_LINK_GO_OWNER":"Idź do historyjki użytkownika","TITLE_DELETE_ACTION":"Usuń zadanie","LIGHTBOX_TITLE_BLOKING_TASK":"Blokowanie zadania","FIELDS":{"IS_IOCAINE":"Iocaina"},"TITLE_ACTION_IOCAINE":"Czujesz się trochę przytłoczony zadaniem? Daj znać innym klikając na ikonę Iokainy podczas edycji zadania. Jest szansa, że staniesz się odporny na tą (fikcyjną ;) ) śmiertelną truciznę biorąc małe dawki. Z pewnością jednak da Ci ona dodatkowego kopa, który pomoże w pokonaniu nowego wyzwania i staniu się lepszym w tym co robisz!"},"NOTIFICATION":{"OK":"Wszystko ok","WARNING":"Ups, coś się stało...","WARNING_TEXT":"Twoje zmiany nie zostały zapisane z powodu błędu!","SAVED":"Wszystkie zmiany zapisane!","CLOSE":"Zamknij powiadomienie","MAIL":"Powiadomienia na e-mail","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Czy na pewno chcesz usunąć?"},"CANCEL_ACCOUNT":{"TITLE":"Unieważnij swoje konto","SUBTITLE":"Przykro nam, że opuszczasz Taiga. Mamy nadzieję, że było miło :)","PLACEHOLDER_INPUT_TOKEN":"unieważnij token konta","ACTION_LEAVING":"Tak, odchodzę!","SUCCESS":"Nasze Umpa Lumpy usunęły twoje konto"},"CHANGE_EMAIL_FORM":{"TITLE":"Zmień swój e-mail","SUBTITLE":"Jeszcze tylko jeden klik i twój email będzie zaktualizowany!","PLACEHOLDER_INPUT_TOKEN":"zmień token e-maila","ACTION_CHANGE_EMAIL":"Zmień e-mail","SUCCESS":"Nasze Umpa Lumpy zaktualizowały Twój e-mail"},"ISSUES":{"PAGE_TITLE":"Zgłoszenia - {{projectName}}","PAGE_DESCRIPTION":"Lista zgłoszeń w projekcie {{projectName}}: {{projectDescription}}","SECTION_NAME":"Zgłoszenie","ACTION_NEW_ISSUE":"+ NOWE ZGŁOSZENIE","ACTION_PROMOTE_TO_US":"Awansuj na historyjkę użytkownika","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"To zgłoszenie zostało wypromowane na HU:","EXTERNAL_REFERENCE":"Źródło zgłoszenia","GO_TO_EXTERNAL_REFERENCE":"Idź do źródła","ACTION_DELETE":"Usuń zgłoszenie","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blokowanie zgłoszenia","LINK_TASKBOARD":"Tablica zadań","TITLE_LINK_TASKBOARD":"Idź do listy zadań","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Priorytet","SEVERITY":"Ważność","TYPE":"Typ"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Awansuj to zgłoszenie na historyjkę użytkownika","MESSAGE":"Jesteś pewny, że chcesz wypromować to zgłoszenie na historyjkę użytkownika?"},"TABLE":{"COLUMNS":{"TYPE":"Typ","SEVERITY":"Ważność","PRIORITY":"Priorytet","SUBJECT":"Temat","VOTES":"Głosy","STATUS":"Status","MODIFIED":"Modified","ASSIGNED_TO":"Przypisane do"},"TITLE_ACTION_CHANGE_STATUS":"Zmień status","TITLE_ACTION_ASSIGNED_TO":"Przypisane do","BLOCKED":"Zablokowane","EMPTY":{"TITLE":"Brak zgłoszeń :-)","SUBTITLE":"Masz zgłoszenie?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Zgłoszenie {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Typ: {{issueType}}, Priorytet: {{issuePriority}}. Ważność: {{issueSeverity}}. Opis: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Panel kanban zawierający historyjki użytkownika wchodzące w skład projektu {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanaban","TITLE_ACTION_FOLD":"Zwiń kolumnę","TITLE_ACTION_UNFOLD":"Rozwiń kolumnę","TITLE_ACTION_ADD_US":"Dodaj nową HU","TITLE_ACTION_ADD_BULK":"Dodaj zbiorczo HU","ACTION_SHOW_ARCHIVED":"Pokaż archiwalne","ACTION_HIDE_ARCHIVED":"Ukryj archiwalne","HIDDEN_USER_STORIES":"Historyjki użytkownika o tym statusie są domyślnie ukryte","PLACEHOLDER_CARD_TITLE":"To są Twoje Historyjki Użytkownika","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Szukaj - {{projectName}}","PAGE_DESCRIPTION":"Możesz przeszukiwać wszystko, historyjki użytkownika, zgłoszenia, zadania oraz strony Wiki w projekcie {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epiki","FILTER_USER_STORIES":"Historyjki użytkownika","FILTER_ISSUES":"Zgłoszenia","FILTER_TASKS":"Zadania","FILTER_WIKI":"Strony Wiki","PLACEHOLDER_SEARCH":"Szukaj w ...","TITLE_ACTION_SEARCH":"szukaj","EMPTY_TITLE":"Nie znaleziono niczego, co spełniałoby podane kryteria.","EMPTY_DESCRIPTION":"Spróbuj użyć zakładek powyżej przy ponownym wyszukiwaniu"},"TEAM":{"PAGE_TITLE":"Zespół - {{projectName}}","PAGE_DESCRIPTION":"Panel zespołu w którym zebrani są wszyscy jego członkowie pracujący przy projekcie {{projectName}}: {{projectDescription}}","SECTION_NAME":"Zespół","PLACEHOLDER_INPUT_SEARCH":"Szukaj po imieniu...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Zamknięte zgłoszenia","COLUMN_IOCAINE":"Iokainista","EXPLANATION_COLUMN_IOCAINE":"Spożyte dawki","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Edytowane strony Wiki","COLUMN_BUG_HUNTER":"Łowca Bugów","EXPLANATION_COLUMN_BUG_HUNTER":"Zgłoszone zadania","COLUMN_NIGHT_SHIFT":"Niezłomny","EXPLANATION_COLUMN_NIGHT_SHIFT":"Zamknięte zadania","COLUMN_TOTAL_POWER":"Ogólna potęga","EXPLANATION_COLUMN_TOTAL_POWER":"Punktów łącznie","SECTION_TITLE_TEAM":"Zespół >","SECTION_FILTER_ALL":"Wszystko","CONFIRM_LEAVE_PROJECT":"Na pewno chcesz opuścić projekt?","ACTION_LEAVE_PROJECT":"Opuść projekt"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Maks. rozmiar: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Ustawienia użytkownika","USER_PROFILE":"Profil użytkownika","CHANGE_PASSWORD":"Zmień hasło","EMAIL_NOTIFICATIONS":"Powiadomienia e-mail","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Powiadomienia przez e-mail","COLUMN_PROJECT":"Projekt","COLUMN_RECEIVE_ALL":"Otrzymuj wszystkie","COLUMN_ONLY_INVOLVED":"Tylko te, w których bierzesz udział","COLUMN_NO_NOTIFICATIONS":"Nie otrzymuj żadnych","OPTION_ALL":"Wszystkie","OPTION_INVOLVED":"Z moim udziałem","OPTION_NONE":"Żadne"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projekt","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projekt"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Użyj domyślnego obrazu","ACTION_DELETE_ACCOUNT":"Usuń konto Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Sprawdź swoją skrzynkę e-mail!
    Wysłaliśmy wiadomość z instrukcjami.","CHANGE_PHOTO":"Zmień zdjęcie","FIELD":{"USERNAME":"Nazwa użytkownika","EMAIL":"Email","FULL_NAME":"Imię i nazwisko","PLACEHOLDER_FULL_NAME":"Podaj swoje imię i nazwisko","BIO":"Bio (max. 210 znaków)","PLACEHOLDER_BIO":"Powiedz coś o sobie","LANGUAGE":"Język","LANGUAGE_DEFAULT":"-- używaj domyślnego języka --","THEME":"Szablon strony","THEME_DEFAULT":"-- używaj domyślnego szablonu --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Ostatnio edytowane dnia {{lastModifiedDate}} ({{totalEditions}} edycji łącznie) Zawartość: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Usuń tą stronę Wiki","DELETE_LIGHTBOX_TITLE":"Usuń tą stronę Wiki","DELETE_LINK_TITLE":"Usuń link Wiki","NAVIGATION":{"HOME":"Strona Główna","SECTION_NAME":"ZAKŁADKI","ACTION_ADD_LINK":"Dodaj zakładkę","ALL_PAGES":"Wszystkie strony Wiki"},"SUMMARY":{"TIMES_EDITED":"razy
    edytowano","LAST_EDIT":"ostatnia
    edycja","LAST_MODIFICATION":"ostatnia modyfikacja"},"SECTION_PAGES_LIST":"Wszystkie strony","PAGES_LIST_COLUMNS":{"TITLE":"Tytuł","EDITIONS":"Editions","CREATED":"Utworzone","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Wskazówka","LINK":"Jeśli chcesz się dowiedzieć jak tego używać odwiedź nasz support","LINK_TITLE":"Odwiedź nasz support","HINT1_TITLE":"Czy wiesz, że możesz eksportować i importować projekty?","HINT1_TEXT":"Dzięki temu możesz przenieść wszystkie swoje dane z jednej instalacji Taiga do drugiej.","HINT2_TITLE":"Czy wiesz, że możesz tworzyć niestandardowe pola?","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":"Zapomniałeś nad czym pracowałeś?","HINT4_TEXT":"Nie martw się, na Twojej tablicy znajdziesz otwarte zadania, zgłoszenia i historyjki użytkownika w takiej kolejności, w jakiej nad nimi pracowałeś."},"TIMELINE":{"UPLOAD_ATTACHMENT":"Użytkownik {{username}} wysłał nowy załącznik do {{obj_name}}","US_CREATED":"Użytkownik {{username}} utworzył nową historyjkę użytkownika {{obj_name}} w projekcie {{project_name}}","ISSUE_CREATED":"Użytkownik {{username}} utworzył nowe zgłoszenie {{obj_name}} w projekcie {{project_name}}","TASK_CREATED":"Użytkownik {{username}} utworzył nowe zadanie {{obj_name}} w projekcie {{project_name}}","TASK_CREATED_WITH_US":"Użytkownik {{username}} utworzył nowe zadanie {{obj_name}} w projekcie {{project_name}} należące do HU {{us_name}}","WIKI_CREATED":"Użytkownik {{username}} utworzył nową stronę Wiki {{obj_name}} w projekcie {{project_name}}","MILESTONE_CREATED":"Użytkownik {{username}} utworzył nowy sprint {{obj_name}} w projekcie {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"Użytkownik {{username}} utworzył projekt {{project_name}}","MILESTONE_UPDATED":"Użytkownik {{username}} zaktualizował sprint {{obj_name}}","US_UPDATED":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} historyjki użytkownika {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} historyjki użytkownika {{obj_name}} na {{new_value}}","US_UPDATED_POINTS":"Użytkownik {{username}} zaktualizował '{{role_name}}' punkty w historyjce użytkownika {{obj_name}} na {{new_value}}","ISSUE_UPDATED":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zgłoszenia {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zgłoszenia {{obj_name}} na {{new_value}}","TASK_UPDATED":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zadania {{obj_name}} na {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zadania {{obj_name}} na {{new_value}}","TASK_UPDATED_WITH_US":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zadania {{obj_name}} należącego do HU {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zadania {{obj_name}} należącego do HU {{us_name}} na {{new_value}}","WIKI_UPDATED":"Użytkownik {{username}} zaktualizował stronę Wiki {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"Użytkownik {{username}} skomentował historyjkę użytkownika {{obj_name}}","NEW_COMMENT_ISSUE":"Użytkownik {{username}} skomentował zgłoszenie {{obj_name}}","NEW_COMMENT_TASK":"Użytkownik {{username}} skomentował zadanie {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"Projekt {{project_name}} ma nowego członka","US_ADDED_MILESTONE":"Użytkownik{{username}} dodał HU {{obj_name}} do {{sprint_name}}","US_MOVED":"{{username}} przeniósł historyjkę użytkownika {{obj_name}}","US_REMOVED_FROM_MILESTONE":"Użytkownik {{username}} dodał HU {{obj_name}} do backlogu","BLOCKED":"Użytkownik {{username}} zablokował {{obj_name}}","UNBLOCKED":"Użytkownik {{username}} odblokował {{obj_name}}","NEW_USER":"Nowy użytkownik{{username}} dołączył do Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Zgłoszenie","TASK":"Zadania"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Login with another user","AUTHORIZE_APP":"Authorize app","CANCEL":"Anuluj"},"JOYRIDE":{"NAV":{"NEXT":"Następny","BACK":"Back","SKIP":"Pomiń","DONE":"Gotowe!"},"DASHBOARD":{"STEP1":{"TITLE":"Twój projekt","TEXT":"Welcome! Here you will find the projects you are involved on."},"STEP2":{"TITLE":"Pracujesz nad","TEXT":"Tutaj znajdziesz Historyjki Użytkownika, Zadania i Problemy nad którymi pracujesz."},"STEP3":{"TITLE":"Obserwujesz","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"Już korzystasz z Taiga ;)"},"STEP4":{"TITLE":"Zaczynajmy","TEXT1":"Możesz zacząć od stworzenia swojego pierwszego projektu w Taiga.","TEXT2":"Powodzenia!"}},"BACKLOG":{"STEP1":{"TITLE":"Podsumowanie projektu","TEXT1":"Tutaj zobaczysz status Twojego projektu.","TEXT2":"You can change every kind of project settings through the admin."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Sprinty","TEXT":"Sprinty to krótkie odcinki czasu (z reguły trwające 2 tygodnie) podczas których określona praca musi zostać wykonana i dostarczona."},"STEP4":{"TITLE":"Historyjki użytkownika","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"Historyjki Użytkownika i Zadania","TEXT":"Historyjki Użytkownika to wymagania wysokiego poziomu. Możesz przeciągnąć je do różnych kolumn."},"STEP3":{"TITLE":"Dodawanie Historyjek Użytkownika","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Powodzenia!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Odkryj projekty","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Najbardziej lubiane","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"View more","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Wszystkie","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Looking for people","WEEK":"Last week","MONTH":"Ostatni miesiąc","YEAR":"Ostatni rok","ALL_TIME":"All time","CLEAR":"Clear filters"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Type something...","ACTION_TITLE":"Szukaj","RESULTS":"Search results"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-pt-br.json b/dist/v-1547534999795/locales/taiga/locale-pt-br.json deleted file mode 100644 index 7caaf05..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-pt-br.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Sim","NO":"Não","OR":"ou","I_GET_IT":"OK, entendi","LOADING":"Carregando...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Salvar","CANCEL":"Cancelar","ACCEPT":"Aceitar","DELETE":"Excluir","UNLINK":"Separar","CREATE":"Criar","ADD":"Adicionar","COPY_TO_CLIPBOARD":"Copiar para área de transferência","COPIED_TO_CLIPBOARD":"O texto foi copiado para a área de transferência","EDIT":"Editar","DRAG":"Arrastar","TAG_LINE":"Sua ferramenta de código aberto, gratuita e ágil.","TAG_LINE_2":"AME SEU PROJETO","BLOCK":"Bloquear","BLOCK_TITLE":"Bloqueia este item, por exemplo, se ele possui uma dependência não resolvida","BLOCKED":"Bloqueado","UNBLOCK":"Desbloquear","UNBLOCK_TITLE":"Desbloquear este item","BLOCKED_NOTE":"Por que esta bloqueado?","BLOCKED_REASON":"Por favor, explique a razão","CREATED_BY":"Criado por {{fullDisplayName}}","CLOSE":"fechar","GO_HOME":"Ir ao início","PLUGINS":"Plugins","ONE_ITEM_LINE":"Um item por linha...","NEW_BULK":"Nova inserção em lote","SUBTASKS":"Subtasks","PREVIOUS":"Anterior","NEXT":"Próximo","LOGOUT":"Sair","EXTERNAL_USER":"um usuário externo","GENERIC_ERROR":"Um Oompa Loompas disse {{error}}.","IOCAINE_TEXT":"Este membro está se sentindo um pouco oprimido por esta tarefa. Ficará imune ao veneno de iocaína ao longo do tempo com sua ajuda. Por agora, pode precisar de um abraço.","CLIENT_REQUIREMENT":"Requisito de cliente é um novo requisito que não foi anteriormente previsto e que necessita se tornar uma parte do projeto.","TEAM_REQUIREMENT":"Requisito de time é um requisito que deve existir no projeto, mas que não deve ter nenhum custo para o cliente.","OWNER":"Dono do Projeto","CAPSLOCK_WARNING":"Seja cuidadoso! Você está escrevendo em letras maiúsculas e esse campo é case sensitive, ou seja, trata com distinção as letras maiúsculas das minúsculas.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Você tem certeza que quer fechar o modo de edição?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Lembre-se que se você fechar o modo de edição sem salvar, todas as mudanças serão perdidas","RELATED_USERSTORIES":"Histórias de usuário relacionadas","CARD":{"ASSIGN_TO":"Atribuir a","EDIT":"Editar cartão","DELETE":"Excluir cartão","DELETE_ISSUE":"Problema excluído","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Este valor parece ser inválido.","TYPE_EMAIL":"Este valor deve ser um e-mail válido.","TYPE_URL":"Este valor deve ser uma url válida.","TYPE_URLSTRICT":"Este valor deve ser uma url válida.","TYPE_NUMBER":"Este valor deve ser um número válido.","TYPE_DIGITS":"Este valor deve ser dígitos.","TYPE_DATEISO":"Este valor deve ser uma data válida (YYYY-MM-DD).","TYPE_ALPHANUM":"Este valor deve ser alfanumérico.","TYPE_PHONE":"Este valor deveria ser um número telefônico valido.","NOTNULL":"Este valor não deveria ser nulo.","NOT_BLANK":"Esta campo não deveria esta em branco.","REQUIRED":"Este campo é obrigatório.","REGEXP":"Este valor parece ser inválido.","MIN":"O valor deve ser maior que ou igual a %s.","MAX":"Esse valor deve ser menor que ou igual a %s.","RANGE":"Esse valor deve ser entre %s e %s.","MIN_LENGTH":"Esse valor é muito curto. deve ter %s caracteres ou mais.","MAX_LENGTH":"Valor muito longo. O campo deve conter %s caracteres ou menos.","RANGE_LENGTH":"Esse comprimento de valor é inválido. Deve ser entre %s e %s caracteres de comprimento.","MIN_CHECK":"Você deve selecionar pelo menos %s escolhas.","MAX_CHECK":"Você deve selecionar %s escolhas ou menos.","RANGE_CHECK":"Você deve selecionar entre %s e %s escolhas.","EQUAL_TO":"Esse valor deveria ser o mesmo.","LINEWIDTH":"Talvez uma ou mais linhas estejam muito grandes. Tente usar menos de %s caracteres.","PIKADAY":"Formato de data inválido, por favor, use DD MMM YYYY (exemplo: 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mês Anterior","NEXT_MONTH":"Próximo Mês","MONTHS":{"JAN":"Janeiro","FEB":"Fevereiro","MAR":"Março","APR":"Abril","MAY":"Maio","JUN":"Junho","JUL":"Julho","AUG":"Agosto","SEP":"Setembro","OCT":"Outubro","NOV":"Novembro","DEC":"Dezembro"},"WEEK_DAYS":{"SUN":"Domingo","MON":"Segunda-feira","TUE":"Terça-feira","WED":"Quarta-feira","THU":"Quinta-feira","FRI":"Sexta-feira","SAT":"Sábado"},"WEEK_DAYS_SHORT":{"SUN":"Dom","MON":"Seg","TUE":"Ter","WED":"Qua","THU":"Qui","FRI":"Sex","SAT":"Sab"}},"SEE_USER_PROFILE":"Ver o perfil de {{username }}","USER_STORY":"História de usuário","TASK":"Tarefa","ISSUE":"Problema","EPIC":"Épico","TAGS":{"PLACEHOLDER":"Inserir tag","DELETE":"Excluir tag","ADD":"Adicionar tag"},"DESCRIPTION":{"EMPTY":"Espaço vazio é tão monótono... escreva algo, vai...","NO_DESCRIPTION":"Sem descrição ainda"},"FIELDS":{"SUBJECT":"Assunto","NAME":"Nome","URL":"URL","DESCRIPTION":"Descrição","VALUE":"Valor","SLUG":"Rótulo","COLOR":"Cor","IS_CLOSED":"Está fechado?","STATUS":"Status","TYPE":"Tipo","SEVERITY":"Gravidade","PRIORITY":"Prioridade","ASSIGNED_TO":"Atribuído a","ASSIGNED_USERS":"Usuários atribuídos","POINTS":"Pontos","IS_BLOCKED":"está bloqueada","REF":"Ref","VOTES":"Votos","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Tudo"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Não assinado","ASSIGN":"Atribuir","DELETE_ASSIGNMENT":"Excluir atribuição","REMOVE_ASSIGNED":"Remover assinatura","TOO_MANY":"...muitos usuários, continue filtrando","CONFIRM_UNASSIGNED":"Você tem certeza que deseja deixar sem ","TITLE_ACTION_EDIT_ASSIGNMENT":"E","SELF":"Atribuir a mim"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Fechado","OPEN":"Aberto"},"WATCHERS":{"WATCHERS":"Observadores","ADD":"Adicionar observadores","TITLE_ADD":"Adicionar um membro do projeto para a lista de observadores","DELETE":"Excluir observador","TITLE_LIGHTBOX_DELETE_WARTCHER":"Excluir observador..."},"WATCH_BUTTON":{"WATCH":"Observar","WATCHING":"Observando","UNWATCH":"Deixar de Observar","WATCHERS":"Observadores","BUTTON_TITLE":"Observar/Deixar de observar este item","COUNTER_TITLE":"{total, plural, one{um observador} other{#watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Aprovar/Reprovar este item","COUNTER_TITLE":"{total, plural, one{um voto} other{# votos}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Campos Personalizados","SAVE":"Salvar Campo Personalizado","EDIT":"Editar Campo Personalizado","DELETE":"Excluir atributo personalizado","CONFIRM_DELETE":"Lembre-se que todos os valores neste campo customizado serão excluídos.\nVocê tem certeza que quer continuar?"},"FILTERS":{"INPUT_PLACEHOLDER":"Assunto ou referência","TITLE_ACTION_FILTER_BUTTON":"procurar","TITLE":"Filtros","TITLE_ACTION_SEARCH":"Procurar","ACTION_SAVE_CUSTOM_FILTER":"salve como filtro personalizado","PLACEHOLDER_FILTER_NAME":"Digite o nome do filtro e pressione Enter","APPLIED_FILTERS_NUM":"filtros aplicados","CATEGORIES":{"TYPE":"Tipo","STATUS":"Status","SEVERITY":"Gravidade","PRIORITIES":"Prioridades","TAGS":"Tags","ASSIGNED_TO":"Atribuído a","ASSIGNED_USERS":"Usuários atribuídos","ROLE":"Função","CREATED_BY":"Criado por","CUSTOM_FILTERS":"Filtros personalizados","EPIC":"Épico"}},"WYSIWYG":{"CODE_SNIPPET":"Pedaço de código","DB_CLICK":"duplo clique para editar","SELECT_LANGUAGE_PLACEHOLDER":"Selecione sua linguagem","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatação","OUTDATED":"Outra pessoa fez mudanças enquanto estava editando. Verifique a nova versão na guia atividade antes de salvar suas alterações.","MARKDOWN_HELP":"Ajuda de sintaxe markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Épicos","VIEW_EPICS":"Ver épicos","ADD_EPICS":"Adicionar épicos","MODIFY_EPICS":"Modificar épicos","COMMENT_EPICS":"Comentar épicos","DELETE_EPICS":"Excluir épicos"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Ver sprints","ADD_SPRINTS":"Adicionar sprints","MODIFY_SPRINTS":"Modificar sprints","DELETE_SPRINTS":"Excluir sprints"},"USER_STORIES":{"NAME":"Histórias de Usuários","VIEW_USER_STORIES":"Ver histórias de usuários","ADD_USER_STORIES":"Adicionar histórias de usuários","MODIFY_USER_STORIES":"Modificar histórias de usuários","COMMENT_USER_STORIES":"Comentar histórias de usuário","DELETE_USER_STORIES":"Excluir histórias de usuários"},"TASKS":{"NAME":"Tarefas","VIEW_TASKS":"Ver tarefas","ADD_TASKS":"Adicionar uma nova Tarefa","MODIFY_TASKS":"Modificar tarefa","COMMENT_TASKS":"Comentar tarefas","DELETE_TASKS":"Excluir tarefas"},"ISSUES":{"NAME":"Problemas","VIEW_ISSUES":"Ver problemas","ADD_ISSUES":"Adicionar problemas","MODIFY_ISSUES":"Modificar problemas","COMMENT_ISSUES":"Comentar problemas","DELETE_ISSUES":"Excluir problemas"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Exibir páginas da wiki","ADD_WIKI_PAGES":"Adicionar páginas wiki","MODIFY_WIKI_PAGES":"Modificar páginas wiki","DELETE_WIKI_PAGES":"Excluir páginas wiki","VIEW_WIKI_LINKS":"Exibir links da wiki","ADD_WIKI_LINKS":"Adicionar links da wiki","DELETE_WIKI_LINKS":"Excluir links da wiki"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Entrando no Taiga, uma plataforma de gerenciamento de projetos para startups com desenvolvedores e designers ágeis que desejam uma ferramenta simples e bela que torne o trabalho realmente agradável."},"AUTH":{"INVITED_YOU":"convidou você para entrar no projeto","NOT_REGISTERED_YET":"Não é cadastrado ainda?","REGISTER":"Registrar","CREATE_ACCOUNT":"crie sua conta grátis aqui"},"LOGIN_COMMON":{"HEADER":"Eu já tenho um login Taiga","PLACEHOLDER_AUTH_NAME":"Nome de usuário ou email (case sensitive)","LINK_FORGOT_PASSWORD":"Esqueceu?","TITLE_LINK_FORGOT_PASSWORD":"Esqueceu sua senha?","ACTION_ENTER":"Entre","ACTION_SIGN_IN":"Entrar","PLACEHOLDER_AUTH_PASSWORD":"Senha (case sensitive)","ALT_LOGIN":"Ou entre com"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"De acordo com nossos Oompa Loompas, seu nome de usuario/email ou senha estão incorretos.","SUCCESS":"Nossos Oompa Loompas estão felizes, bem vindo ao Taiga."},"REGISTER":{"PAGE_TITLE":"Cadastre-se - Taiga","PAGE_DESCRIPTION":"Crie sua conta no Taiga, uma plataforma de gerenciamento de projetos para startups e desenvolvedores ágeis & designers que desejam uma ferramenta bela e simples que torne o trabalho realmente agradável.\""},"REGISTER_FORM":{"TITLE":"Registre uma nova conta Taiga (Grátis)","PLACEHOLDER_NAME":"Escolha um nome de usuário (case sensitive)","PLACEHOLDER_FULL_NAME":"Insira seu nome completo","PLACEHOLDER_EMAIL":"Seu email","PLACEHOLDER_PASSWORD":"Escolha uma senha (case sensitive)","ACTION_SIGN_UP":"Registre-se","TITLE_LINK_LOGIN":"Identifique-se","LINK_LOGIN":"Você já está registrado? Idenfique-se"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Esqueceu sua senha - Taiga","PAGE_DESCRIPTION":"Informe seu nome de usuário ou email para receber uma nova senha e ter acesso ao Taiga novamente."},"FORGOT_PASSWORD_FORM":{"TITLE":"Opaaa, você esqueceu sua senha?","SUBTITLE":"Entre seu usuário ou email para conseguir uma senha nova","PLACEHOLDER_FIELD":"Nome de usuário ou email","ACTION_RESET_PASSWORD":"Resetar Senha","LINK_CANCEL":"Nããão, me leve de volta. Acho que me lembrei.","SUCCESS_TITLE":"Verifique sua caixa de entrada!","SUCCESS_TEXT":"Nós lhe enviamos um e-mail com instruções para definição de uma nova senha.","ERROR":"Segundo nossos Oompa Loompas, você ainda não está inscrito."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Alterar sua senha - Taiga","SECTION_NAME":"Alterar senha","FIELD_CURRENT_PASSWORD":"Senha atual","PLACEHOLDER_CURRENT_PASSWORD":"Sua senha atual (ou vazio caso ainda não tenha uma senha)","FIELD_NEW_PASSWORD":"Nova senha","PLACEHOLDER_NEW_PASSWORD":"Digite a nova senha","FIELD_RETYPE_PASSWORD":"Redigite a nova senha","PLACEHOLDER_RETYPE_PASSWORD":"Digite novamente a sua nova senha","ERROR_PASSWORD_MATCH":"As senhas não coincidem"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Criar um novo passe Taiga","SUBTITLE":"Hey, você deveria comer comida rica em ferro, é ótimo para o cérebro :P","PLACEHOLDER_NEW_PASSWORD":"Nova senha","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Redigite a nova senha","ACTION_RESET_PASSWORD":"Resetar Senha","ERROR":"Nossos Oompa Loompas não encontraram a solicitação para recuperar sua senha. Tente solicitar novamente.","SUCCESS":"Nossos Oompa Loompas salvaram sua nova senha.
    Tente identificar-se com ela."},"INVITATION":{"PAGE_TITLE":"Aceitando um convite - Taiga","PAGE_DESCRIPTION":"Aceitar o convite para participar de um projeto no Taiga, uma plataforma de gerenciamento de projetos para startups e desenvolvedores ágeis & designers que desejam uma ferramenta bela e simples que torne o trabalho realmente agradável."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Nossos Oompa Loompas não puderam encontrar seu convite.","SUCCESS":"Você ingressou com sucesso nesse projeto, Seja bem vindo ao projeto {{project_name}}"},"HOME":{"PAGE_TITLE":"Início - Taiga","PAGE_DESCRIPTION":"A página inicial do Taiga com seus principais projetos e todas as histórias de usuários atribuídas ou observadas por você, tarefas e problemas","EMPTY_WORKING_ON":"Parece vazio, não acha? Comece a trabalhar com Taiga e você verá aqui as histórias, tarefas e problemas em que está trabalhando.","EMPTY_WATCHING":"Siga Histórias de Usuários, Tarefas e Problemas nos seus projetos e seja notificado das mudanças :)","EMPTY_PROJECT_LIST":"Você ainda não tem projetos","WORKING_ON_SECTION":"Trabalhando em","WATCHING_SECTION":"Observando","DASHBOARD":"Painel de Projetos"},"EPICS":{"TITLE":"ÉPICOS","SECTION_NAME":"Épicos","EPIC":"ÉPICO","PAGE_TITLE":"Épico - {{projectName}}","PAGE_DESCRIPTION":"A lista de épicos do projeto {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADICIONAR ÉPICO","UNASSIGNED":"Não-atribuído"},"EMPTY":{"TITLE":"Parece que não há nenhum épico ainda","EXPLANATION":"Épicos são itens em um nível mais alto que contêm histórias de usuário.
    Épicos são o topo da hierarquia e podem ser usados para agrupar histórias.","HELP":"Saiba mais sobre épicos"},"TABLE":{"VOTES":"Votos","NAME":"Nome","PROJECT":"Projeto","SPRINT":"Sprint","ASSIGNED_TO":"Atribuído","STATUS":"Status","PROGRESS":"Progresso","VIEW_OPTIONS":"Ver opções"},"CREATE":{"TITLE":"Novo Épico","PLACEHOLDER_DESCRIPTION":"Por favor, adicione um texto descritivo para ajudar outras pessoas a entenderem melhor este épico","TEAM_REQUIREMENT":"Requisitos da equipe","CLIENT_REQUIREMENT":"Requisitos do cliente","BLOCKED":"Bloqueado","BLOCKED_NOTE_PLACEHOLDER":"Por que esse épico está bloqueado?","CREATE_EPIC":"Criar épico"}},"PROJECTS":{"PAGE_TITLE":"Meus projetos - Taiga","PAGE_DESCRIPTION":"Uma lista com todos os seus projetos, você pode reorganizá-los ou criar um novo.","MY_PROJECTS":"Meus Projetos"},"ATTACHMENT":{"SECTION_NAME":"anexos","TITLE":"{{ fileName }} enviado em {{ date }}","LIST_VIEW_MODE":"Modo de visualização lista","GALLERY_VIEW_MODE":"Modo de Visualização Galeria","DESCRIPTION":"Escreva uma curta descrição","DEPRECATED":"(obsoleto)","DEPRECATED_FILE":"Obsoleto?","ADD":"Adicionar novo anexo. {{maxFileSizeMsg}}","DROP":"Jogue os anexos aqui!","SHOW_DEPRECATED":"+ mostrar anexos deprecados","HIDE_DEPRECATED":"- esconder anexos obsoletos","COUNT_DEPRECATED":"({{ counter }} deprecados)","MAX_UPLOAD_SIZE":"Tamanho máximo de upload é {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Não fomos capazes de carregar '{{fileName}}'.\n{{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Excluir anexo...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"o anexo '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Não fomos capazes de excluir: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Anterior","NEXT":"Próximo"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Editar valor","TITLE_ACTION_DELETE_VALUE":"Excluir valor","TITLE_ACTION_DELETE_TAG":"Excluir tag"},"HELP":"Você precisa de ajuda? Verifique nossa pagina de suporte!","PROJECT_DEFAULT_VALUES":{"TITLE":"Valores Padrão","SUBTITLE":"Seleciona valores default para todos os seletores"},"MEMBERSHIPS":{"TITLE":"Gerenciar Membros","PAGE_TITLE":"Filiados - {{projectName}}","ADD_BUTTON":"+ Novo Membro","ADD_BUTTON_TITLE":"Adicionar novo membro","UPGRADE_BUTTON":"Fazer Upgrade no seu plano","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Este projeto atingiu o limite de ({{members}}) membros permitidos. Se você deseja aumentar este limite entre em contato com o administrador."},"PROJECT_EXPORT":{"TITLE":"Exportar","SUBTITLE":"Exporte seu projeto para guardar um backup ou para criar um novo a partir deste.","EXPORT_BUTTON":"Exportar","EXPORT_BUTTON_TITLE":"Exportar seu projeto","LOADING_TITLE":"Estamos gernado o arquivo de dump","DUMP_READY":"Seu arquivo de dump está pronto!","LOADING_MESSAGE":"Por favor, não feche esta pagina.","ASYNC_MESSAGE":"Enviaremos um email para você assim que estiver pronto.","SYNC_MESSAGE":"Se o download não iniciar automáticamente clique aqui","ERROR":"Nossos Oompa Loopmas tiveram alguns problemas gerando o dump. Por favor, tente novamente.","ERROR_BUSY":"Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos."},"MODULES":{"TITLE":"Modulos","EPICS":"Épicos","EPICS_DESCRIPTION":"Visualize e gerencie a parte mais estratégica do seu projeto","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Gerencie suas histórias de usuários para manter uma visualização organizada de trabalhos futuros e priorizados.","NUMBER_SPRINTS":"Número de sprints esperadas","NUMBER_SPRINTS_HELP":"0 para um número indeterminado","NUMBER_US_POINTS":"Total esperado de pontos de história","NUMBER_US_POINTS_HELP":"0 para um número indeterminado","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organize seu projeto de um jeito \"lean\" com esse mural","ISSUES":"Problemas","ISSUES_DESCRIPTION":"Acompanhe os bugs, problemas e melhorias relacionados ao seu projeto. Não perca nada!","WIKI":"Wiki","WIKI_DESCRIPTION":"Adicione, modifique ou exclua conteúdo em colaboração com outras pessoas. Este é o local certo pra documentação do seu projeto.","MEETUP":"Reunião","MEETUP_DESCRIPTION":"Selecione seu sistema de videoconferência.","SELECT_VIDEOCONFERENCE":"Selecione um sistema de videoconferência","SALT_CHAT_ROOM":"Adicionar um prefixo ao nome da sala de chat","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personalizar","URL_CHAT_ROOM":"URL da sua sala de bate-papo"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Perfil do projeto - {{projectName}}","PROJECT_DETAILS":"Detalhes do projeto","PROJECT_NAME":"Nome do projeto","TAGS":"Tags","DESCRIPTION":"Descrição","RECRUITING":"Este projeto esta a procura de colaboradores?","RECRUITING_MESSAGE":"O que você está procurando?","RECRUITING_PLACEHOLDER":"Defina o perfil que você procura?","FEEDBACK":"Receber notificações de usuários Taiga?","PUBLIC_PROJECT":"Projeto Publico","PRIVATE_PROJECT":"Projeto Privado","PRIVATE_OR_PUBLIC":"Qual a diferença entre projeto público e privado?","DELETE":"Excluir este projeto","CHANGE_LOGO":"Alterar logo","ACTION_USE_DEFAULT_LOGO":"Usar imagem padrão","MAX_PRIVATE_PROJECTS":"Você atingiu o número máximo de projetos privados permitidos para seu plano atual.","MAX_PRIVATE_PROJECTS_MEMBERS":"O número máximo de membros para projetos privados foi excedido.","MAX_PUBLIC_PROJECTS":"Infelizmente você atingiu o número máximo de projetos público permitidos para seu plano atual","MAX_PUBLIC_PROJECTS_MEMBERS":"Este projeto atingiu o seu limite atual de membros para projetos públicos","PROJECT_OWNER":"Dono do projeto","REQUEST_OWNERSHIP":"Solicitar propriedade","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Gostaria de se tornar o novo dono do projeto?","REQUEST_OWNERSHIP_DESC":"Solicitar ao atual dono de projeto {{name}} a transferência da propriedade deste projeto para você.","REQUEST_OWNERSHIP_BUTTON":"Solicitação","REQUEST_OWNERSHIP_SUCCESS":"Vamos notificar o dono do projeto","CHANGE_OWNER":"Mudar dono","CHANGE_OWNER_SUCCESS_TITLE":"Ok, sua requisição foi enviada!","CHANGE_OWNER_SUCCESS_DESC":"Nós notificaremos você por email se a requisição de propriedade do projeto for aceita ou recusada"},"REPORTS":{"TITLE":"Relatórios","SUBTITLE":"Exporte os dados do seu projeto no formato CSV e faça seus próprios relatórios.","DESCRIPTION":"Baixe o arquivo CSV ou copie a URL gerada e abra no seu editor de texto favorito ou planilha para fazer seu próprio relatório. Você poderá visualizar e analisar todos os seus dados facilmente.","HELP":"Como utilizar isto em minha própria planilha?","REGENERATE_TITLE":"Mudar URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Apagar URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"relatórios de épicos","SECTION_TITLE_US":"Relatórios de histórias de usuários","SECTION_TITLE_TASK":"relatórios de tarefas","SECTION_TITLE_ISSUE":"relatórios de problemas","DOWNLOAD":"Baixar CSV","URL_FIELD_PLACEHOLDER":"Por favor, gere novamente a url do CSV","TITLE_REGENERATE_URL":"Regerar URL CSV","ACTION_GENERATE_URL":"Gerar URL","ACTION_REGENERATE":"Regenerar","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Excluir"},"CUSTOM_FIELDS":{"TITLE":"Campos Personalizados","SUBTITLE":"Especificar campos personalizados para histórias de usuários, tarefas e problemas","EPIC_DESCRIPTION":"Campos personalizados dos épicos","EPIC_ADD":"Adicionar campos personalizados em épicos","US_DESCRIPTION":"Campos personalizados das histórias de usuários","US_ADD":"Adicionar campo personalizado nas histórias de usuários","TASK_DESCRIPTION":"Campos personalizados das Tarefas","TASK_ADD":"Adicionar campos personalizados na tarefa","ISSUE_DESCRIPTION":"Campos personalizados dos problemas","ISSUE_ADD":"Adicionar um campo personalizado em problemas ","FIELD_TYPE_TEXT":"Texto","FIELD_TYPE_RICHTEXT":"Texto rico","FIELD_TYPE_MULTI":"Multi-linha","FIELD_TYPE_DATE":"Data","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valores do projeto - {{projectName}}","REPLACEMENT":"Todos os itens com este valor serão modificados para","ERROR_DELETE_ALL":"Você não pode excluir todos os valores."},"PROJECT_VALUES_POINTS":{"TITLE":"Pontos","SUBTITLE":"Especifique os pontos em que suas histórias de usuários poderiam ser estimados ","US_TITLE":"Pontos de Histórias de Usuários","ACTION_ADD":"Adicionar novo ponto"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioridades","SUBTITLE":"Especifique as prioridades que seus problemas terão","ISSUE_TITLE":"Severidade dos apontamentos","ACTION_ADD":"Adicionar nova prioridade"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Gravidades","SUBTITLE":"Especifique as gravidades que seus problemas terão","ISSUE_TITLE":"Gravidades do problema","ACTION_ADD":"Adicionar nova gravidade"},"PROJECT_VALUES_STATUS":{"TITLE":"Status","SUBTITLE":"Especifique os status pelos quais suas histórias de usuários, tarefas e problemas passarão","EPIC_TITLE":"Estados do Épico","US_TITLE":"Status de história de usuário","TASK_TITLE":"Estados da Tarefa","ISSUE_TITLE":"Estados do problema"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipos","SUBTITLE":"Especifique de que tipos seus problemas poderão ser","ISSUE_TITLE":"Tipos de problemas","ACTION_ADD":"Adicionar novo {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Tags","SUBTITLE":"Ver e editar as cores das suas tags","EMPTY":"Atualmente não há tags","EMPTY_SEARCH":"Parece que nada foi encontrado com os critérios de sua pesquisa.","ACTION_ADD":"Adicionar tag","NEW_TAG":"Nova tag","MIXING_HELP_TEXT":"Selecione as tags que você quer mesclar","MIXING_MERGE":"Mesclar Tags","SELECTED":"Selecionado"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Adicionar novo status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Funções - {{projectName}}","WARNING_NO_ROLE":"Seja cuidadoso, nenhuma função em seu projeto será capaz de estimar o valor dos pontos para as histórias de usuários","HELP_ROLE_ENABLED":"Quando habilitado, membros atribuídos a esta função serão capazes de estimar valores para histórias de usuários","DISABLE_COMPUTABLE_ALERT_TITLE":"Você tem certeza que quer desativar esta permissão de estimativas?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Se você desativar a permissão de estimativas para esta regra {{roleName}} todas estimativas feitas anteriormente por esta regra serão removidas.","COUNT_MEMBERS":"{{ role.members_count }} membros com a mesma função","TITLE_DELETE_ROLE":"Excluir Função","REPLACEMENT_ROLE":"Todos os usuários com essa função serão movidos para","WARNING_DELETE_ROLE":"Cuidado! Todas as estimativas de papéis serão removidas","ERROR_DELETE_ALL":"Você não pode excluir todos os valores","EXTERNAL_USER":"Usuário externo","NOTE_EXTERNAL_USERS":"Nota: Por usuário externo, nos referimos a qualquer usuário anônimo que não pertença à plataforma Taiga, incluindo os motores de busca. Use esse papel com cuidado."},"THIRD_PARTIES":{"SECRET_KEY":"Chave secreta","PAYLOAD_URL":"URL da Payload","VALID_IPS":"IPs de origem válidos (separados por vírgulas)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Requisições do Bitbucket não são assinadas, ou seja, a melhor maneira de verificar a origem é por IP. Se o campo estiver vazio não será realizada verificação de IP."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Requisições do Gitlab não são assinadas, ou seja, a melhor maneira de verificar a origem é por IP. Se o campo estiver vazio não será realizada verificação de IP."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Adicionar um Novo Webhook","TYPE_NAME":"Digite o nome do serviço","TYPE_PAYLOAD_URL":"Digite a url do serviço Payload","TYPE_SERVICE_SECRET":"Escreva a palavra segredo do serviço","SAVE":"Salvar Webhook","CANCEL":"Cancelar Webhook","SHOW_HISTORY":"(Mostrar história)","TEST":"Testar Webhook","EDIT":"Editar Webhook","DELETE":"Excluir Webhook","REQUEST":"Solicitação","RESEND_REQUEST":"Reenviar pedido","HEADERS":"Cabeçalhos","PAYLOAD":"Payload","RESPONSE":"Resposta","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Esconder histórico)","ACTION_HIDE_HISTORY_TITLE":"Esconder os detalhes da história","ACTION_SHOW_HISTORY":"(Mostrar histórico)","ACTION_SHOW_HISTORY_TITLE":"Mostrar detalhes da história","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Atributos personalizados - {{projectName}}","ADD":"Adicionar campos personalizados","EDIT":"Editar Campo Personalizado","DELETE":"Excluir campo personalizado","SAVE_TITLE":"Salvar Campo Personalizado","CANCEL_TITLE":"Cancelar criação","SET_FIELD_NAME":"Definir nome do seu campo personalizados","SET_FIELD_DESCRIPTION":"Definir a descrição do seu campo personalizado","FIELD_TYPE_DEFAULT":"-- selecionar --","ACTION_UPDATE":"Atualizar campo personalizado","ACTION_CANCEL_EDITION":"Cancelar edição"},"MEMBERSHIP":{"COLUMN_MEMBER":"Membro","COLUMN_ADMIN":"Administrador","COLUMN_ROLE":"Função","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Ativo","STATUS_PENDING":"Pendente","DELETE_MEMBER":"Excluir membro","RESEND":"Reenviar","SUCCESS_SEND_INVITATION":"Enviamos novamente um convite para '{{email}}'.","SUCCESS_DELETE":"Nós excluimos {{message}}.","ERROR_DELETE":"Nós não fomos capaz de excluir {{message}}.","DEFAULT_DELETE_MESSAGE":"o convite para {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Valor padrão para seletor de status de épico","LABEL_US_STATUS":"Valor padrão para seletor de status da história de usuário","LABEL_POINTS":"Valores padrões para o seletor de pontos","LABEL_TASK_STATUS":"Valor padrão para seletor de status de tarefa","LABEL_ISSUE_TYPE":"Valor padrão para seletor de tipo de problema ","LABEL_ISSUE_STATUS":"Valor padrão para seletor de status de problema","LABEL_PRIORITY":"Valor padão para seletor de prioridade","LABEL_SEVERITY":"Valor padrão para seletor de gravidade"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Digite um nome para o novo status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Escreva o nome do novo elemento"},"US_STATUS":{"ACTION_ADD_STATUS":"Adicionar novo status","IS_ARCHIVED_COLUMN":"Arquivado","IS_CLOSED_COLUMN":"Fechado","WIP_LIMIT_COLUMN":"Limite WIP","PLACEHOLDER_WRITE_NAME":"Digite um nome para o novo status"},"MENU":{"PROJECT":"Projeto","ATTRIBUTES":"Atributos","MEMBERS":"Membros","PERMISSIONS":"Permissões","INTEGRATIONS":"Integrações"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Pontos","PRIORITIES":"Prioridades","SEVERITIES":"Gravidades","TYPES":"Tipos","CUSTOM_FIELDS":"Campos personalizados","TAGS":"Tags","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Funções","ACTION_NEW_ROLE":"+ Nova Função","TITLE_ACTION_NEW_ROLE":"Adicionar nova função"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Você gostaria de se tornar o novo dono do projeto?","PRIVATE":"Privado","ACCEPTED_PROJECT_OWNERNSHIP":"Parabéns! Você é o proprietário do projeto agora.","REJECTED_PROJECT_OWNERNSHIP":"OK. Entraremos em contato com o atual dono do projeto.","ACCEPT":"Aceitar","REJECT":"Rejeitar","PROPOSE_OWNERSHIP":"{{owner}}, o atual dono do projeto {{project}} te pediu para ser o novo dono do projeto.","ADD_COMMENT":"Você gostaria de adicionar um comentário para o dono do projeto?","UNLIMITED_PROJECTS":"Ilimitado","OWNER_MESSAGE":{"PRIVATE":"Por favor, lembre-se que você pode ser dono de até {{maxProjects}} projetos privados. Você, atualmente, é dono de {{currentProjects}} projetos privados","PUBLIC":"Por favor, lembre-se que você pode ser dono de até {{maxProjects}} projetos públicos. Você, atualmente, é dono de {{currentProjects}} projetos públicos"},"CANT_BE_OWNED":"No momento, você não pode se tornar dono de um projeto desse tipo. Se você quiser se tornar dono desse projeto, por favor, entre em contato com os administradores para mudarem as configurações da sua conta para habilitar a propriedade do projeto."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Editar Perfil","CLOSED_US":"Histórias Fechadas","PROJECTS":"Projetos","PROJECTS_EMPTY":"{{username}} ainda não tem projetos","CONTACTS":"Contatos","CONTACTS_EMPTY":"{{username}} ainda não tem nenhum contato","CURRENT_USER_CONTACTS_EMPTY":"Você não tem nenhum contato","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"As pessoas que trabalahm na Taiga serão seus contatos automaticamente","TABS":{"ACTIVITY_TAB":"Linha do Tempo","ACTIVITY_TAB_TITLE":"Exibir todas as atividade deste usuário","PROJECTS_TAB":"Projetos","PROJECTS_TAB_TITLE":"Lista de todos os projetos em que o membro esteja envolvido","LIKES_TAB":"Curtir","LIKES_TAB_TITLE":"Lista todos curtidas feitas por este usuário","VOTES_TAB":"Votos","VOTES_TAB_TITLE":"Listar todos os votos feitos por este usuário","WATCHED_TAB":"Observado","WATCHED_TAB_TITLE":"Exibe todos itens seguidos por este usuário","CONTACTS_TAB":"Contatos","CONTACTS_TAB_TITLE":"Exibe todos contatos feitos por este usuário"}},"PROFILE_SIDEBAR":{"TITLE":"Seu perfil","DESCRIPTION":"As pessoas podem ver tudo que você faz e no que você está trabalhando. Adicione uma bela biografia para disponibilizar uma versão melhorada das sua informações.","ADD_INFO":"Editar biografia"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Digite algo...","FILTER_TYPE_ALL":"Tudo","FILTER_TYPE_ALL_TITLE":"Mostrar tudo","FILTER_TYPE_PROJECTS":"Projetos","FILTER_TYPE_PROJECTS_TITLE":"Mostrar somente projetos","FILTER_TYPE_EPICS":"Épicos","FILTER_TYPE_EPICS_TITLE":"Mostrar somente épicos","FILTER_TYPE_USER_STORIES":"Histórias","FILTER_TYPE_USER_STORIES_TITLE":"Mostrar apenas histórias de usuários","FILTER_TYPE_TASKS":"Tarefas","FILTER_TYPE_TASKS_TITLE":"Mostrar apenas tarefas","FILTER_TYPE_ISSUES":"Problemas","FILTER_TYPE_ISSUES_TITLE":"mostrar apenas apontamentos","EMPTY_TITLE":"Parece que não há nada para exibir aqui."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reordene seus projetos para colocar no topo os mais usados.
    Os 10 primeiros projetos aparecerão na lista de projetos da barra de navegação superior.","PRIVATE":"Projeto Privado","LOOKING_FOR_PEOPLE":"Este projeto esta a procura de colaboradores","FANS_COUNTER_TITLE":"{total, plural, one{um fã} other{# fãs}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{um observador} other{#watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Projeto bloqueado","THIS_PROJECT_IS_BLOCKED":"Este projeto está temporariamente bloqueado","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Para desbloquear seus projetos, contate o administrador."},"SECTION":{"SEARCH":"Procurar","TIMELINE":"Linha do Tempo","EPICS":"Épicos","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Problemas","WIKI":"Wiki","TEAM":"Time","MEETUP":"Reunião","ADMIN":"Administrador"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Criar projeto","MANAGE_PROJECTS":"Gerenciar projetos","TITLE_CREATE_PROJECT":"Criar projeto","HELP_TITLE":"Página de Suporte do Taiga","HELP":"Ajuda","HOMEPAGE":"Página pessoal","FEEDBACK_TITLE":"Enviar feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Editar suas configurações de notificações","NOTIFICATIONS":"Notificações","VIEW_PROFILE_TITLE":"Ver perfil","VIEW_PROFILE":"Ver perfil","EDIT_PROFILE_TITLE":"Edit seu perfil","EDIT_PROFILE":"Editar Perfil","CHANGE_PASSWORD_TITLE":"Alterar senha","CHANGE_PASSWORD":"Alterar senha","DASHBOARD_TITLE":"Painel","DISCOVER_TITLE":"Descobrir projetos em destaques","DISCOVER":"Descubra"},"LIKE_BUTTON":{"LIKE":"Curtir","LIKED":"Curtiu","UNLIKE":"Descurtir","BUTTON_TITLE":"Curtir ou descurtir este projeto","COUNTER_TITLE":"{total, plural, one{um fã} other{# fãs}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Observar este projeto e definir política de notificação","WATCH":"Observar","WATCHING":"Observando","COUNTER_TITLE":"{total, plural, one{um observador} other{#watchers}}","OPTIONS":{"NOTIFY_ALL":"receber todas notificações","NOTIFY_ALL_TITLE":"Receber todas notificações para este projeto","NOTIFY_INVOLVED":"Apenas envolvidos","NOTIFY_INVOLVED_TITLE":"Receber notificações apenas enquanto você estiver envolvido","UNWATCH":"Deixar de Observar","UNWATCH_TITLE":"Deixar de observar este projeto"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contatar o time do projeto","CONTACT_BUTTON":"Contatar o projeto"},"CREATE":{"TITLE":"Criar Projeto","CHOOSE_TEMPLATE":"Qual modelo se encaixa melhor no seu projeto?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Priorize e resolva suas tarefas em curtos ciclos de tempo.","TEMPLATE_SCRUM_LONGDESC":"Scrum é uma metodologia de desenvolvimento de software agilizável e incremental para gerenciar o desenvolvimento de produtos.\nO backlog do produto é o que será finalmente entregue, ordenado na sequência em que deve ser entregue. Os Backlogs de produtos são divididos em pedaços executáveis ​​gerenciáveis, denominados sprints. Toda certa quantidade de tempo que a equipe inicia um novo sprint e compromete-se a entregar um certo número de histórias de usuários do backlog, de acordo com suas habilidades, habilidades e recursos. O projeto avança à medida que o backlog se torna esgotado.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Mantenha um fluxo de trabalho constante em tarefas independentes","TEMPLATE_KANBAN_LONGDESC":"A metodologia Kanban é usada para dividir o desenvolvimento do projeto (qualquer tipo de projeto) em etapas.Um cartão kanban é como um cartão de índice ou uma nota post-it que detalha cada tarefa (ou história do usuário) em um projeto que precisa ser concluído. O quadro Kanban é usado para mover cada cartão de um estado de conclusão para o próximo e, ao fazê-lo, ajuda a rastrear o progresso.","DUPLICATE":"Projeto duplicado","DUPLICATE_DESC":"Inicie limpo e mantenha suas configurações","IMPORT":"Importar projeto","IMPORT_DESC":"Importar seu projeto de múltiplas plataformas para o Taiga","INVITE":"Convidar para o projeto","SOLO_PROJECT":"Você estará sozinho neste projeto","INVITE_LATER":"(Você poderá convidar mais membros depois)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Infelizmente, você atingiu o número máximo de projetos privados. Se você quiser aumentar o limite atual, entre em contato com o administrador.","MAX_PUBLIC_PROJECTS":"Infelizmente, você atingiu o número máximo de projetos públicos.\nSe você quiser aumentar o limite atual, entre em contato com o administrador.","PUBLIC_PROJECT":"Projeto Público","PRIVATE_PROJECT":"Projeto Privado"},"COMMON":{"DETAILS":"Detalhes do novo projeto","PROJECT_TITLE":"Nome do Projeto","PROJECT_DESCRIPTION":"Descrição do Projeto"},"DUPLICATE":{"TITLE":"Duplicar Projeto","DESCRIPTION":"Inicie limpo e mantenha suas configurações","SELECT_PLACEHOLDER":"Escolha um projeto existente para duplicar"},"IMPORT":{"TITLE":"Importar Projeto","DESCRIPTION":"Importar seu projeto de múltiplas plataformas para o Taiga","ASYNC_IN_PROGRESS_TITLE":"Nossos Oompa Loompas estão importando seu projeto","ASYNC_IN_PROGRESS_MESSAGE":"Este processo pode levar alguns minutos
    Enviaremos um email a você assim que estiver pronto","UPLOAD_IN_PROGRESS_MESSAGE":"Enviado {{uploadedSize}} de {{totalSize}}","ERROR":"Nossos Oompa Loompas tiveram alguns problemas importando os dados do seu dump. Tente novamente.","ERROR_TOO_MANY_REQUEST":"Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos.","ERROR_MESSAGE":"Nossos Oompa Loompas tiveram alguns problemas ao importar seu arquivo de despejo: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})","SYNC_SUCCESS":"Seu projeto foi importado com sucesso","IMPORT":"Importar","WHO_IS":"As tarefas deles serão atribuídas para","WRITE_EMAIL":"Ou se você quiser, escreva o email que este usuário utiliza no Taiga","SEARCH_CONTACT":"Ou se você quiser, pesquise em seus contatos","WRITE_EMAIL_LABEL":"Escreva o email que este usuário utiliza no Taiga","ACCEEDE":"Aderir","PROJECT_MEMBERS":"Membros do Projeto","PROCESS_DESCRIPTION":"Diga-nos quem da Taiga você deseja atribuir as tarefas de {{platform}}","MATCH":"É{{user_external}} a mesma pessoa que {{user_internal}}?","CHOOSE":"Selecione o usuário","LINKS":"Links com {{platform}}","LINKS_DESCRIPTION":"Deseja manter o link de cada item com o cartão {{platform}} original?","WARNING_MAIL_USER":"Observe que, se o usuário não tiver uma conta na Taiga, não poderemos lhe atribuir as tarefas.","ASSIGN":"Atribuir","PROJECT_SELECTOR":{"NO_RESULTS":"Parece que nada foi encontrado com os critérios de sua pesquisa.","ACTION_SEARCH":"procurar","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"O projeto que você está tentando importar tem {{members}} membros incluindo você, infelizmente, seu plano atual permite um máximo de {{max_memberships}} membros por projeto privado. Se você gostaria de aumentar esse limite, entre em contato com o administrador.","PROJECT_MEMBERS_DESC_PUBLIC":"O projeto que você está tentando importar tem {{members}} membros incluindo você, infelizmente, seu plano atual permite um máximo de {{max_memberships}} membros por projeto público. Se você gostaria de aumentar esse limite, entre em contato com o administrador.","ACCOUNT_ALLOW_MEMBERS":"Sua conta só permite {{members}} membros","PRIVATE_PROJECTS_SPACE":{"TITLE":"Infelizmente, seu plano atual não permite projetos privados adicionais.","DESC":"O projeto que você está tentando importar é privado. Infelizmente, seu plano plano atual não permite projetos privados adicionais."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Infelizmente, seu plano atual não permite projetos públicos adicionais.","DESC":"O projeto que você está tentando importar é público. Infelizmente, seu plano plano atual não permite projetos públicos adicionais."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Seu plano atual permite um máximo de {{max_memberships}} membros por projeto privado"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Seu plano atual permite um máximo de {{max_memberships}} membros por projeto público."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Infelizmente, seu plano atual não permite projetos privados adicionais ou um aumento de mais de {{max_memberships}} membros por projeto privado.","DESC":"O projeto que você está tentando importar é privado e tem {{members}} membros."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Infelizmente, seu plano atual não permite projetos públicos adicionais ou um aumento de mais de {{max_memberships}} membros por projeto público.","DESC":"O projeto que você está tentando importar é público e tem mais que {{members}} membros."}},"IN_PROGRESS":{"TITLE":"Importando Projeto","DESCRIPTION":"Este processo pode levar algum tempo, mantenha a janela aberta por favor."},"WARNING":{"TITLE":"Algumas tarefas não serão atribuídas","DESCRIPTION":"Ainda há pessoas não identificadas. Os cartões atribuídos a essas pessoas permanecerão não atribuídos. Verifique todos os contatos para não perder essa informação.","CHECK":"Verificar contatos"},"TAIGA":{"SELECTOR":"Importe seu projeto Taiga"},"TRELLO":{"SELECTOR":"Importe seu quadro Trello para o Taiga","CHOOSE_PROJECT":"Escolha o quadro que você deseja importar","NO_PROJECTS":"Parece que você não possui quadros no Trello"},"GITHUB":{"SELECTOR":"Importe seus problemas de projeto Github","CHOOSE_PROJECT":"Ache o projeto que deseja importar","NO_PROJECTS":"Parece que você não tem nenhum projeto no GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Como você quer importar seus problemas para o Taiga?","KANBAN_PROJECT":"Como histórias de usuários em um projeto kanban","KANBAN_PROJECT_DESCRIPTION":"Depois disso, você pode ativar o scrum com backlog.","SCRUM_PROJECT":"Como histórias de usuário em um projeto de Scrum","SCRUM_PROJECT_DESCRIPTION":"Depois disso você pode habilitar o modo kanban.","ISSUES_PROJECT":"Como problemas","ISSUES_PROJECT_DESCRIPTION":"Você não sera capaz de usar seus problemas no modo kanban ou scrum. Você poderá habilitar o kanban ou scrum para novas histórias de usuário"},"ASANA":{"SELECTOR":"Importe seu projeto Asana e escolha como administra-lo","CHOOSE_PROJECT":"Escolha o projeto que deseja importar","NO_PROJECTS":"Parece que você não tem nenhum projeto no Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"As tarefas e sub tarefas de seu projeto serão criados como história de usuário Taiga e tarefas.","CREATE_AS_KANBAN_DESCRIPTION":"As tarefas e sub tarefas de seu projeto serão criados como história de usuário Taiga e tarefas."},"JIRA":{"SELECTOR":"Importe seu projeto Jira e escolha como gerenciá-lo","HOW_TO_CONFIGURE":"(Ajuda de configuração)","CHOOSE_PROJECT":"Escolha o projeto ou quadro que deseja importar","NO_PROJECTS":"Parece que você não tem projetos ou quadros no Jira","URL":"Sua url Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Tipos de problemas","CREATE_AS_SCRUM_DESCRIPTION":"Os problemas e sub problemas do seu projeto serão criados como histórias de usuário Taiga e tarefas.","CREATE_AS_KANBAN_DESCRIPTION":"Os problemas e sub problemas do seu projeto serão criados como histórias de usuário Taiga e tarefas.","CREATE_AS_ISSUES_DESCRIPTION":"O que você quer fazer com os sub problemas do projeto Jira? (Taiga não permite sub problemas)","CREATE_NEW_ISSUES":"Converta sub problemas para novos problemas Taiga","NOT_CREATE_NEW_ISSUES":"Não importe sub problemas"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Você tem certeza que quer excluir sua conta Taiga?","CANCEL":"Voltar para configurações","ACCEPT":"Excluir conta","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Excluir projeto","QUESTION":"Você tem certeza que quer excluir este projeto?","SUBTITLE":"Todas as informações do projeto (histórias, tarefas, problemas, sprints e páginas de wiki) serão perdidas! :-(","CONFIRM":"Sim, eu tenho certeza"},"ASSIGNED_TO":{"SELECT":"Selecionar assinalados para","SEARCH":"Procurar por usuários"},"ADD_MEMBER":{"TITLE":"Novo Membro","PLACEHOLDER":"Filtre usuários ou escreva um email para convidá-los","ADD_EMAIL":"Adicione e-mail.","REMOVE":"Remover","INVITE":"Convidar","CHOOSE_ROLE":"Escolha um papel","PLACEHOLDER_INVITATION_TEXT":"(Opcional) Adicione uma mensagem de texto ao convite. Diga algo animador para os novos membros ;-)","HELP_TEXT":"Se os usuários já estiverem registrados no Taiga, eles serão adicionados automaticamente. Caso contrário, eles receberão um convite."},"FEEDBACK":{"TITLE":"Diga-nos algo...","COMMENT":"...um problema, algumas sugestões, algo legal... ou até seu pior pesadelo com Taiga","ACTION_SEND":"Enviar feedback"},"SEARCH":{"TITLE":"Procurar","PLACEHOLDER_SEARCH":"O que você está procurando?"},"ADD_EDIT_SPRINT":{"TITLE":"Nova Sprint","PLACEHOLDER_SPRINT_NAME":"nome da sprint","PLACEHOLDER_SPRINT_START":"Inicio Estimado","PLACEHOLDER_SPRINT_END":"Estimativa de Termino","ACTION_DELETE_SPRINT":"Você quer excluir esta sprint?","TITLE_ACTION_DELETE_SPRINT":"excluir sprint","LAST_SPRINT_NAME":"última sprint é {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"Nova tarefa","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"Você não salvou as alterações.\nTem certeza que deseja fechar o formulário?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Adicionar problema","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Excluir sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opcional) Adicione uma mensagem de texto ao convite. Diga algo animador para os novos membros ;-)","PLACEHOLDER_TYPE_EMAIL":"Digite um Email","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Você está próximo de atingir o número máximo de membros permitidos para este projeto, {{maxMembers}} membros. Se você deseja aumentar este limite, por favor entre em contato com o administrador.","LIMIT_USERS_WARNING_MESSAGE":"Você está próximo de atingir o número máximo de membros permitidos para este projeto, {{maxMembers}} membros."},"LEAVE_PROJECT_WARNING":{"TITLE":"Infelizmente, este projeto não pode ficar sem um dono","CURRENT_USER_OWNER":{"DESC":"Você é o dono atual deste projeto. Antes de sair, por favor transfira o projeto para outra pessoa.","BUTTON":"Mude o dono do projeto"},"OTHER_USER_OWNER":{"DESC":"Infelizmente, você não pode excluir um membro que também é o dono de um projeto. Primeiro designe um novo proprietário para o projeto.","BUTTON":"Solicite a mudança do dono do projeto"}},"CHANGE_OWNER":{"TITLE":"Quem você quer que seja o novo dono do projeto?","ADD_COMMENT":"Adicionar comentário","BUTTON":"Pedir a este membro do projeto para se tornar o novo dono do projeto"},"CONTACT_PROJECT":{"TITLE":"Enviar um e-mail para","WARNING":"O e-mail será recebido pelos administradores do projeto","PLACEHOLDER":"Escreva sua mensagem","SEND":"Enviar"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"Em uma semana","IN_TWO_WEEKS":"Em duas semanas","IN_ONE_MONTH":"Em um mês","IN_THREE_MONTHS":"Em três meses"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Qual é o projeto?","CHOOSE_PROJECT_FROM":"Qual é o projeto?","SUBJECT":"Assunto","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Parece que nada foi encontrado com os critérios de sua pesquisa."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Épico {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{epicStatus }}. Descrição: {{epicDescription}}","SECTION_NAME":"Épico","ERROR_UNLINK_RELATED_USERSTORY":"Não fomos capazes de separar: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Criar um relacionamento com","NEW_USERSTORY":"Nova história de usuário","EXISTING_USERSTORY":"História de usuário existente","CHOOSE_PROJECT_FOR_CREATION":"Qual projeto?","SUBJECT":"Assunto","SUBJECT_BULK_MODE":"Sujeito (inserção em lote)","CHOOSE_PROJECT_FROM":"Qual projeto?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"Esse projeto ainda não possui Histórias de Usuário. Por favor, selecione outro projeto.","NO_USERSTORIES_FOUND":"Parece que nada foi encontrado com os critérios de sua pesquisa.","FILTER_USERSTORIES":"Filtrar histórias de usuário","LIGHTBOX_TITLE_BLOKING_EPIC":"Épico bloqueador","ACTION_DELETE":"Excluir épico"},"US":{"PAGE_TITLE":"{{userStorySubject}} - História de Usuário {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{userStoryStatus }}. Completos {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} de {{userStoryTotalTasks}} tarefas encerradas). Pontos: {{userStoryPoints}}. Descrição: {{userStoryDescription}}","SECTION_NAME":"História de usuário","LINK_TASKBOARD":"Quadro de Tarefas","TITLE_LINK_TASKBOARD":"Ir para o quadro de tarefas","TOTAL_POINTS":"total de pontos","ADD":"+ Adicionar uma nova História de Usuário","ADD_BULK":"Adicionar Histórias de Usuários em lote","PROMOTED":"Esta História de Usuário foi criada a partir do Problema:","TITLE_LINK_GO_TO_ISSUE":"Adicionar comentários aos apontamentos","TITLE_DELETE_ACTION":"Apagar história de usuário","LIGHTBOX_TITLE_BLOKING_US":"História de usuário bloqueadora","NOT_ESTIMATED":"Não estimado","OWNER_US":"Esta história de usuário pertence a","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publicar como Gig no Taiga Tribe","PUBLISH_INFO":"Mais informações","PUBLISH_TITLE":"Mais informações sobre como publicar na Tribo Taiga","PUBLISHED_AS_GIG":"História publicada como Apresentação na Tribo Taiga","EDIT_LINK":"Editar link","CLOSE":"Fechar","SYNCHRONIZE_LINK":"sincronizar com a Tribo Taiga","PUBLISH_MORE_INFO_TITLE":"Você precisa de alguém para esta tarefa?","PUBLISH_MORE_INFO_TEXT":"

    Se você precisar de ajuda com um determinado trabalho, você pode facilmente criar trabalhos em Taiga Tribe E receber ajuda de todo o mundo. Você será capaz de controlar e gerenciar o trabalho desfrutando de uma grande comunidade ansiosa para contribuir.

    TaigaTribe Nasceu como um irmão gêmeo taiga. Ambas as plataformas podem viver separadamente, mas acreditamos que há muito poder em usá-las combinadas, então estamos assegurando que a integração funcione como um charme.

    "}},"COMMENTS":{"DELETED_INFO":"Comentário excluído por {{user}}","COMMENTS_COUNT":"{{comments}} comentários","OLDER_FIRST":"Antigos primeiro","RECENT_FIRST":"Recentes primeiro","COMMENT":"Comentário","EDITED_COMMENT":"Editado:","SHOW_HISTORY":"Ver histórico","TYPE_NEW_COMMENT":"Escreva um novo comentário aqui","SHOW_DELETED":"Mostrar comentários excluídos","HIDE_DELETED":"Esconder comentário excluído","DELETE":"Excluir comentário","RESTORE":"Restaurar comentário","HISTORY":{"TITLE":"Atividade"}},"ACTIVITY":{"TITLE":"Atividade","ACTIVITIES_COUNT":"{{activities}} atividades","TAGS_ADDED":"tags adicionadas:","TAGS_REMOVED":"tags removidas:","US_POINTS":"{{role}} pontos","NEW_ATTACHMENT":"novo anexo:","DELETED_ATTACHMENT":"anexo excluído:","UPDATED_ATTACHMENT":"anexo atualizado ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"atributo personalizado criado","UPDATED_CUSTOM_ATTRIBUTE":"atributo personalizado atualizado","BECAME_DEPRECATED":"foi depreciado","BECAME_UNDEPRECATED":"foi depreciado","TEAM_REQUIREMENT":"Requisitos da Equipe","CLIENT_REQUIREMENT":"Requisitos do Cliente","BLOCKED":"Bloqueado","VALUES":{"NOT_SET":"not set","UNASSIGNED":"não atribuído"},"FIELDS":{"SUBJECT":"assunto","DESCRIPTION":"descrição","PRIORITY":"prioridade","SEVERITY":"gravidade","STATUS":"status","TYPE":"Digite","ASSIGNED_TO":"Assinado à","ASSIGNED_USERS":"Usuários atribuídos","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"cor"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"O painel de backlog, com histórias de usuário e sprints do projeto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Personalize seu gráficos de backlog","CUSTOMIZE_GRAPH_TEXT":"Para ter um gráfico que te ajuda a seguir a evolução do projeto você deve configurar os pontos e as sprints via","CUSTOMIZE_GRAPH_ADMIN":"Administrador","CUSTOMIZE_GRAPH_TITLE":"Configure os pontos e sprints pelo Administrador","MOVE_US_TO_CURRENT_SPRINT":"Mover para a Sprint Atual","MOVE_US_TO_LATEST_SPRINT":"Mover para a última Sprint","EMPTY":"O backlog está vazio!","CREATE_NEW_US":"Criar uma nova História de Usuário","CREATE_NEW_US_EMPTY_HELP":"Você talvez queira criar uma nova história de usuário","EXCESS_OF_POINTS":"Excesso de pontos","PENDING_POINTS":"Pontos Pendentes","CLOSED_POINTS":"fechado","COMPACT_SPRINT":"Sprint Resumida","GO_TO_TASKBOARD":"Ir ao quadro de tarefas de {{::name}}","EDIT_SPRINT":"Editar sprint","TOTAL_POINTS":"total","STATUS_NAME":"Nome de Status","SORTABLE_FILTER_ERROR":"Você não pode jogar sobre o backlog quando filtros estão abertos","DOOMLINE":"Escopo do projeto [Doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Pontos","OPTIMAL":"Ideal de pontos pendentes para a sprint \"{{sprintName}}\" deve ser {{value}}","REAL":"Pontos realmente pendentes para a sprint \"{{sprintName}}\" é {{value}}","INCREMENT_TEAM":"Pontos acrescentados pelos requisitos do time para a sprint \"{{sprintName}}\" é {{value}}","INCREMENT_CLIENT":"Pontos acrescentados pelos requisitos do cliente para a sprint \"{{sprintName}}\" é {{value}}"},"TAGS":{"TOGGLE":"Alternar visibilidade das tags","SHOW":"Exibir tags","HIDE":"Esconder tags"},"FORECASTING":{"TITLE":"Projeção de velocidade","BACKLOG":"Exibir backlog","NEW_SPRINT":"Candidatos a Histórias do Usuário do para o seu próximo sprint com base na sua velocidade. Clique para criar um novo sprint.","CURRENT_SPRINT":"Candidatos a Histórias do Usuário do para o seu próximo sprint com base na sua velocidade. Clique para adicionar ao sprint atual."},"TABLE":{"COLUMN_US":"Histórias de Usuários","TITLE_COLUMN_POINTS":"Selecionar exibição por função"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"pontos
    totais","COMPLETED_POINTS":"pontos
    completados","OPEN_TASKS":"tarefas
    abertas","CLOSED_TASKS":"tarefas
    fechadas","IOCAINE_DOSES":"iocaine
    doses","SHOW_STATISTICS_TITLE":"Mostrar estatísticas","TOGGLE_BAKLOG_GRAPH":"Mostrar/Esconder gráfico de burndown","POINTS_PER_ROLE":"Pontos por regra"},"SUMMARY":{"PROJECT_POINTS":"pontos do
    projeto","DEFINED_POINTS":"pontos
    definidos","CLOSED_POINTS":"pontos
    fechados","POINTS_PER_SPRINT":"pontos /
    sprint"},"FILTERS":{"TOGGLE":"Alternar visibilidade de filtros","HIDE":"Esconder Filtros","SHOW":"Mostrar Filtros"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Quadro de tarefas da Sprint","TITLE_LINK_TASKBOARD":"ir para quadro de tarefas de \"{{name}}\"","EMPTY":"Ainda não temos sprints.","WARNING_EMPTY_SPRINT_ANONYMOUS":"Esta sprint não tem Histórias de Usuário","WARNING_EMPTY_SPRINT":"Solte aqui Histórias do seu backlog para iniciar uma nova sprint","TITLE_ACTION_NEW_SPRINT":"Adicionar nova sprint","TEXT_ACTION_NEW_SPRINT":"Você poderá querer criar uma nova sprint em seu projeto","ACTION_SHOW_CLOSED_SPRINTS":"Mostrar sprints fechadas","ACTION_HIDE_CLOSED_SPRINTS":"Esconder sprints fechadas"}},"ERROR":{"TEXT1":"Alguma coisa aconteceu e nossos Oompa Loompas estão trabalhando nisso.","NOT_FOUND":"Não encontrado","NOT_FOUND_TEXT":"Erro 404. A página que você procura não existe mais. Você pode voltar para a página do TAIGA e ver se consegue encontrar o que está procurando.","PERMISSION_DENIED":"Permissão negada","PERMISSION_DENIED_TEXT":"Você não tem permissão de acesso a esta página.","VERSION_ERROR":"Alguém dentro da Taiga mudou isso antes e nosso Oompa Loompa não podem aplicar suas alterações. Recarregue a página e aplique-as novamente (elas serão perdidas, agora)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Quadro de Tarefas da Sprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (de{{startDate}} até {{endDate}}) para {{projectName}}. Completos {{completedPercentage}}% ({{completedPoints}} de {{totalPoints}} pontos). {{openTasks}} tarefas abertas de {{totalTasks}}.","SECTION_NAME":"Quadro de Tarefas","TITLE_ACTION_ADD":"Adicionar uma nova Tarefa","TITLE_ACTION_ADD_BULK":"Adicionar algumas tarefas em lote","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Assinalar tarefa","PLACEHOLDER_CARD_TITLE":"Isto pode ser uma atividade","PLACEHOLDER_CARD_TEXT":"Separe Histórias de Usuários em atividades para rastreá-las separadamente.","TABLE":{"COLUMN":"História de usuário","TITLE_ACTION_FOLD":"Recolher coluna","TITLE_ACTION_UNFOLD":"Abrir coluna","TITLE_ACTION_FOLD_ROW":"Guardar Linha","TITLE_ACTION_UNFOLD_ROW":"Abrir linha","FIELD_POINTS":"pontos","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Dias","YAXIS_LABEL":"Pontos","OPTIMAL":"Pontos pendentes ideais para o dia {{formattedDate}} deve ser {{roundedValue}}","REAL":"\"Pontos pendentes reais para o dia {{formattedDate}} são {{roundedValue}}\"","DATE":"DD MMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tarefa {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{taskStatus }}. Descrição: {{taskDescription}}","SECTION_NAME":"Tarefa","LINK_TASKBOARD":"Quadro de Tarefas","TITLE_LINK_TASKBOARD":"Ir para o quadro de tarefas","PLACEHOLDER_SUBJECT":"Digite um novo titulo para tarefa","TITLE_SELECT_STATUS":"Nome de Status","OWNER_US":"Esta tarefa pertence a ","TITLE_LINK_GO_OWNER":"Ir para história de usuário","TITLE_DELETE_ACTION":"Excluir Tarefa","LIGHTBOX_TITLE_BLOKING_TASK":"Tarefa bloqueadora","FIELDS":{"IS_IOCAINE":"É Iocaine"},"TITLE_ACTION_IOCAINE":"Se sentindo sobrecarregado por uma tarefa? Assegure-se de que os outros saibam disso clicando em Iocaine quando estiver editando a tarefa. É possível se tornar imune a essse veneno mortal (fictício) consumindo pequenas quantidades ao longo do tempo, assim como é possível ficar melhor no que faz, ocasionalmente, por assumir desafios extras!"},"NOTIFICATION":{"OK":"Tudo está ok","WARNING":"Oops, aconteceu algo...","WARNING_TEXT":"Nossos Oompa Loompas estão tristes, suas alterações não foram salvas.","SAVED":"Nossos Oompa Loompas salvaram todas as suas mudanças!","CLOSE":"Fechar Notificação","MAIL":"Notificações por Email","DESKTOP":"Notificações da área de trabalho usando alertas do navegador","ASK_DELETE":"Você tem certeza que quer excluir?"},"CANCEL_ACCOUNT":{"TITLE":"Cancelar sua conta","SUBTITLE":"Sentimos por você estar saindo. Esperamos que tenha gostado :)","PLACEHOLDER_INPUT_TOKEN":"cancelar o token da conta","ACTION_LEAVING":"Sim, estou indo embora!","SUCCESS":"Nossos Oompa Loompas removeram sua conta"},"CHANGE_EMAIL_FORM":{"TITLE":"Mudar seu e-mail","SUBTITLE":"Só mais um clique e seu email será atualizado!","PLACEHOLDER_INPUT_TOKEN":"mudar token do email","ACTION_CHANGE_EMAIL":"Mudar email","SUCCESS":"Nossos Oompa Loompas atualizaram seu email"},"ISSUES":{"PAGE_TITLE":"Apontamentos - {{projectName}}","PAGE_DESCRIPTION":"O painel de problemas do projeto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Problema","ACTION_NEW_ISSUE":"+ NOVO PROBLEMA","ACTION_PROMOTE_TO_US":"Promover para História de Usuário","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Esse problema foi promovido para história de usuário","EXTERNAL_REFERENCE":"Esse problema foi criado a partir de","GO_TO_EXTERNAL_REFERENCE":"Ir para a origem","ACTION_DELETE":"Problema excluído","LIGHTBOX_TITLE_BLOKING_ISSUE":"Problema que está bloqueando","LINK_TASKBOARD":"Quadro de Tarefas","TITLE_LINK_TASKBOARD":"Ir para o quadro de tarefas","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioridade","SEVERITY":"Gravidade","TYPE":"Tipo"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promover esse problema para nova história de usuário","MESSAGE":"Você tem certeza que deseja criar uma nova História de Usuário a partir desse problema?"},"TABLE":{"COLUMNS":{"TYPE":"Tipo","SEVERITY":"Gravidade","PRIORITY":"Prioridade","SUBJECT":"Assunto","VOTES":"Votos","STATUS":"Status","MODIFIED":"Modificado","ASSIGNED_TO":"Atribuído a"},"TITLE_ACTION_CHANGE_STATUS":"Mudar status","TITLE_ACTION_ASSIGNED_TO":"Atribuído a","BLOCKED":"Bloqueado","EMPTY":{"TITLE":"Não há problemas para reportar :-)","SUBTITLE":"Você encontrou um problema?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - problema {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{issueStatus }}. Tipo: {{issueType}}, Prioridade: {{issuePriority}}. gravidade: {{issueSeverity}}. Descrição: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"O painel do kanban, contendo histórias de usuários do projeto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Recolher coluna","TITLE_ACTION_UNFOLD":"Abrir coluna","TITLE_ACTION_ADD_US":"Adicionar Nova História de Usuário","TITLE_ACTION_ADD_BULK":"Adicionar novo lote","ACTION_SHOW_ARCHIVED":"Mostrar arquivados","ACTION_HIDE_ARCHIVED":"esconder arquivados","HIDDEN_USER_STORIES":"As histórias de usuários nesse status são escondidas por padrão","PLACEHOLDER_CARD_TITLE":"Estas são suas Histórias de Usuários","PLACEHOLDER_CARD_TEXT":"Histórias poderão também ter sub-atividades para separar os requisitos"},"SEARCH":{"PAGE_TITLE":"Buscar - {{projectName}}","PAGE_DESCRIPTION":"Busque qualquer coisa, histórias de usuários, problemas, tarefas, ou páginas da wiki, no projeto {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Épicos","FILTER_USER_STORIES":"Histórias de Usuários","FILTER_ISSUES":"Problemas","FILTER_TASKS":"Tarefas","FILTER_WIKI":"Paginas Wiki","PLACEHOLDER_SEARCH":"Procurar em...","TITLE_ACTION_SEARCH":"procurar","EMPTY_TITLE":"Parece que nada foi encontrado com o critério de busca","EMPTY_DESCRIPTION":"Talvez tente uma das abas acima ou busque novamente"},"TEAM":{"PAGE_TITLE":"Equipe - {{projectName}}","PAGE_DESCRIPTION":"O painel do time irá exibir todos os membros envolvidos no projeto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Time","PLACEHOLDER_INPUT_SEARCH":"Procurar pelo nome completo...","COLUMN_MR_WOLF":"Sr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Adicionar apontamentos","COLUMN_IOCAINE":"Bebedor de Iocaine","EXPLANATION_COLUMN_IOCAINE":"Doses de Iocaine ingeridas","COLUMN_CERVANTES":"Pero Vaz de Caminha","EXPLANATION_COLUMN_CERVANTES":"Páginas wiki editadas","COLUMN_BUG_HUNTER":"Caçador de bugs","EXPLANATION_COLUMN_BUG_HUNTER":"Problemas reportados","COLUMN_NIGHT_SHIFT":"Periodo Noturno","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tarefa fechada","COLUMN_TOTAL_POWER":"Total de poder","EXPLANATION_COLUMN_TOTAL_POWER":"Pontuação Total","SECTION_TITLE_TEAM":"Equipe >","SECTION_FILTER_ALL":"Tudo","CONFIRM_LEAVE_PROJECT":"Você tem certeza que quer deixar o projeto?","ACTION_LEAVE_PROJECT":"Deixar este projeto"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Tamanho máximo: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Configurações de usuário","USER_PROFILE":"Perfil do Usuário","CHANGE_PASSWORD":"Alterar senha","EMAIL_NOTIFICATIONS":"Notificações por email","DESKTOP_NOTIFICATIONS":"Notificações da área de trabalho","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Notificações da área de trabalho","SECTION_NAME":"Notificações por email","COLUMN_PROJECT":"Projeto","COLUMN_RECEIVE_ALL":"Receber todos","COLUMN_ONLY_INVOLVED":"Apenas envolvido","COLUMN_NO_NOTIFICATIONS":"Sem notificações","OPTION_ALL":"Tudo","OPTION_INVOLVED":"Envolvido","OPTION_NONE":"Nada"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projeto","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projeto"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Usar imagem padrão","ACTION_DELETE_ACCOUNT":"Excluir conta Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Verifique sua caixa de entrada!
    Enviamos um e-mail para sua conta
    com as instruções para definir seu novo endereço","CHANGE_PHOTO":"Mudar foto","FIELD":{"USERNAME":"Nome do usuário","EMAIL":"Email","FULL_NAME":"Nome completo","PLACEHOLDER_FULL_NAME":"Preencha seu nome completo (ex. Íñigo Montoya)","BIO":"Bio (max. 210 caracteres)","PLACEHOLDER_BIO":"Diga algo sobre você","LANGUAGE":"Idioma","LANGUAGE_DEFAULT":"-- usar idioma padrão --","THEME":"Tema","THEME_DEFAULT":"-- usar tema padrão --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Ultima edição em {{lastModifiedDate}} ({{totalEditions}} total de edições) Conteúdo: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Remover essa página wiki","DELETE_LIGHTBOX_TITLE":"Excluir página Wiki","DELETE_LINK_TITLE":"Excluir link de Wiki","NAVIGATION":{"HOME":"Página principal","SECTION_NAME":"MARCADORES","ACTION_ADD_LINK":"Adicionar marcador","ALL_PAGES":"Todas as páginas wiki"},"SUMMARY":{"TIMES_EDITED":"vezes
    editadas","LAST_EDIT":"última
    edição","LAST_MODIFICATION":"ultima modificação"},"SECTION_PAGES_LIST":"Todas as páginas","PAGES_LIST_COLUMNS":{"TITLE":"Título","EDITIONS":"Edições","CREATED":"Criado","MODIFIED":"Modificado","CREATOR":"Criador","LAST_MODIFIER":"Último modificador"}},"HINTS":{"SECTION_NAME":"Sugestões","LINK":"Se você quer saber como usar visite nossa página de suporte","LINK_TITLE":"Visite nossa página de suporte","HINT1_TITLE":"Você sabia que você pode importar e exportar projetos?","HINT1_TEXT":"Isso permite você extrair todo o seu conteúdo de um Taiga e mover para outro.","HINT2_TITLE":"Você sabia que pode criar campos personalizados?","HINT2_TEXT":"Equipes agora podem personalizar campos, um jeito flexível de inserir dados específicos para uso em seu próprio fluxo de trabalho.","HINT3_TITLE":"Reordene seus projetos para evidenciar os mais relevantes para você.","HINT3_TEXT":"Os 10 projetos estão listados na barra de acesso direto, no topo.","HINT4_TITLE":"Você esqueceu onde está trabalhando?","HINT4_TEXT":"Não se preocupe, no seu painel você vai encontrar suas tarefas abertas, problemas, e histórias de usuários na ordem em que você trabalhou nelas."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} adicionou um novo anexo em {{obj_name}}","US_CREATED":"{{username}} criou uma nova História de Usuário {{obj_name}} em {{project_name}}","ISSUE_CREATED":"{{username}} criou um novo problema {{obj_name}} em {{project_name}}","TASK_CREATED":"{{username}} criou uma nova tarefa {{obj_name}} em {{project_name}}","TASK_CREATED_WITH_US":"{{username}} criou nova tarefa {{obj_name}} em {{project_name}} que pertence a História de Usuário {{us_name}}","WIKI_CREATED":"{{username}} criou uma página wiki {{obj_name}} em {{project_name}}","MILESTONE_CREATED":"{{username}} criou uma nova sprint {{obj_name}} em {{project_name}}","EPIC_CREATED":"{{username}} criou um novo épico {{obj_name}} em {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} relacionou a história de usuário {{related_us_name}} ao épico {{epic_name}} em {{project_name}}","NEW_PROJECT":"{{username}} criou o projeto {{project_name}}","MILESTONE_UPDATED":"{{username}} atualizou a sprint {{obj_name}}","US_UPDATED":"{{username}} atualizou o atributo \"{{field_name}}\" da História de Usuário {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" da História de Usuário {{obj_name}} para {{new_value}}","US_UPDATED_POINTS":"{{username}} atualizou os pontos de '{{role_name}}' da História de Usuário {{obj_name}} para {{new_value}}","ISSUE_UPDATED":"{{username}} atualizou o atributo \"{{field_name}}\" do problema {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" do problema {{obj_name}} para {{new_value}}","TASK_UPDATED":"{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} para {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} para {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} que pertence à História de Usuário {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} que pertence à História de Usuário {{us_name}} para {{new_value}}","WIKI_UPDATED":"{{username}} atualizou a página wiki {{obj_name}}","EPIC_UPDATED":"{{username}} atualizou o atributo \"{{field_name}}\" do épico {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" do épico {{obj_name}} para {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} atualizou o \"{{field_name}}\" do épico {{obj_name}} para ","NEW_COMMENT_US":"{{username}} comentou na História de Usuário {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} comentou no problema {{obj_name}}","NEW_COMMENT_TASK":"{{username}} comentou na tarefa {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} comentou no épico {{obj_name}}","NEW_MEMBER":"{{project_name}} tem um membro novo","US_ADDED_MILESTONE":"{{username}} adicionou a História de Usuário {{obj_name}} a {{sprint_name}}","US_MOVED":"{{username}} moveu a História de Usuário {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} adicionou a História de Usuário {{obj_name}} ao backlog","BLOCKED":"{{username}} bloqueou {{obj_name}}","UNBLOCKED":"{{username}} desbloqueou {{obj_name}}","NEW_USER":"{{username}} ingressou no Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Problema","TASK":"Tarefa"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"Ao criar uma nova conta, você concorda com nossos termos de serviço e política de privacidade.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"Você viu isso chegando, certo? Atualizações aos nossos Termos de Serviço","GDPR_ANNOUNCEMENT_INFOLINK":"Por favor, leia nossa declaração aqui"},"EXTERNAL_APP":{"PAGE_TITLE":"Um app externo requer autenticação","PAGE_DESCRIPTION":"Um app externo requer autenticação","AUTHORIZATION_REQUEST":"Autorizar {{application}} a usar sua conta Taiga?","LOGIN_WITH_ANOTHER_USER":"Login com um outro usuário","AUTHORIZE_APP":"Autorizar app","CANCEL":"Cancelar"},"JOYRIDE":{"NAV":{"NEXT":"Próximo","BACK":"Back","SKIP":"Pular","DONE":"Terminado"},"DASHBOARD":{"STEP1":{"TITLE":"Seu projeto","TEXT":"Bem-Vindo! Aqui você encontrará os projetos que você está envolvido."},"STEP2":{"TITLE":"Trabalhando em","TEXT":"Aqui você irá encontrar as Histórias de Usuários, Atividades e Problemas em que você está trabalhando."},"STEP3":{"TITLE":"Observando","TEXT1":"E aqui você vai encontrar os do seu projeto que você escolheu seguir.","TEXT2":"Você já está trabalhando com Taiga ;)"},"STEP4":{"TITLE":"Vamos começar","TEXT1":"Você pode iniciar por criando seu primeiro Projeto no Taiga","TEXT2":"Boa Sorte!"}},"BACKLOG":{"STEP1":{"TITLE":"Sumário do projeto","TEXT1":"Aqui você verá o estado do seu projeto","TEXT2":"Você pode alterar qualquer configuração do projeto no menu admin."},"STEP2":{"TITLE":"Backlog do Produto","TEXT":"O backlog é a lista de requisitos (Histórias de Usuário) do projeto. Aqui é onde você planejará suas sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints são períodos curtos de tempo (geralmente 2 semanas) durante as quais o trabalho especificado tem que ser concluído e entregue."},"STEP4":{"TITLE":"Histórias de Usuários","TEXT":"Estes são os requisitos em alto nível. Você pode adicioná-los ao backlog e arrastá-los à sprint em que devem ser entregues. "}},"KANBAN":{"STEP1":{"TITLE":"Personalize seu fluxo de trabalho","TEXT":"Configure as colunas que você precisa para mapear seu workflow através do Admin"},"STEP2":{"TITLE":"Histórias de Usuários & Atividades","TEXT":"Histórias de Usuários são os requisitos de alto nível. Você pode arrastá-los para diferentes colunas."},"STEP3":{"TITLE":"Adicionando Histórias de Usuários","TEXT1":"Você poderá adicionar uma única História do Usuário (Ícone add US) ou um grupo delas (ícone de add em massa)","TEXT2":"Boa Sorte!"}}},"DISCOVER":{"PAGE_TITLE":"Descubra projetos - Taiga","PAGE_DESCRIPTION":"Diretório pesquisável de projetos públicos no Taiga. Explore backlogs, linhas do tempo, problemas e times. Encontre os projetos mais curtidos ou mais ativos. Filtre por Kanban ou Scrum.","DISCOVER_TITLE":"Descobrir projetos","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Mais ativo","MOST_ACTIVE_EMPTY":"Não tem projetos ativos ainda","MOST_LIKED":"Mais curtidas","MOST_LIKED_EMPTY":"Não existe projetos curtidos ainda","VIEW_MORE":"Visualizar mais","FEATURED":"Projetos em destaque","EMPTY":"Não há projetos para exibir sob esse critério de pesquisa.
    Tente novamente!","FILTERS":{"ALL":"Tudo","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Procurando por pessoas.","WEEK":"Última semana","MONTH":"Último mês","YEAR":"Último ano","ALL_TIME":"Todo tempo","CLEAR":"Limpar filtros"},"SEARCH":{"PAGE_TITLE":"Procurar - Descobrir projetos - Taiga","PAGE_DESCRIPTION":"Diretório pesquisável de projetos públicos no Taiga. Explore backlogs, linhas do tempo, problemas e times. Encontre os projetos mais curtidos ou mais ativos. Filtre por Kanban ou Scrum.","INPUT_PLACEHOLDER":"Digite algo...","ACTION_TITLE":"Procurar","RESULTS":"Resultado de pesquisa."}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-ru.json b/dist/v-1547534999795/locales/taiga/locale-ru.json deleted file mode 100644 index c46db99..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-ru.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Да","NO":"Нет","OR":"или","I_GET_IT":"OK, I get it","LOADING":"Пожалуйста, подождите...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Сохранить","CANCEL":"Отмена","ACCEPT":"Принимаю","DELETE":"Удалить","UNLINK":"Отсоединить","CREATE":"Создать","ADD":"Добавить","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Редактировать","DRAG":"Перетащите","TAG_LINE":"Ваш свободный, agile инструмент управления проектами с открытым исходным кодом","TAG_LINE_2":"Любите свой проект","BLOCK":"Блокировать","BLOCK_TITLE":"Заблокировать это, например, если имеются зависимости, которые не могут быть удовлетворены","BLOCKED":"Заблокирован","UNBLOCK":"Разблокировать","UNBLOCK_TITLE":"Разблокировать это","BLOCKED_NOTE":"Почему это заблокировано?","BLOCKED_REASON":"Пожалуйста разъясните причину","CREATED_BY":"Создано {{fullDisplayName}}","CLOSE":"закрыть","GO_HOME":"Домой","PLUGINS":"Плагины","ONE_ITEM_LINE":"Один объект на строку...","NEW_BULK":"Добавить пакетно","SUBTASKS":"Subtasks","PREVIOUS":"Предыдущий","NEXT":"Следующий","LOGOUT":"Выйти","EXTERNAL_USER":"внешний пользователь","GENERIC_ERROR":"Один из Умпа-Лумп говорит {{error}}.","IOCAINE_TEXT":"Пользователь не справляется с этой задачей. Возможно со временем Вы сможете ему помочь. Сейчас, просто обнимите его.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Владелец проекта","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Связанные пользовательские истории","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Удалить запрос","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Кажется, это значение некорректно.","TYPE_EMAIL":"Значение должно быть корректной электронной почтой.","TYPE_URL":"Это значение должно быть корректным URL-адресом.","TYPE_URLSTRICT":"Это значение должно быть корректным URL-адресом.","TYPE_NUMBER":"Это значение должно быть правильным числом","TYPE_DIGITS":"Это значение должно состоять из цифр.","TYPE_DATEISO":"Это значение должно быть корректной датой (в формате ГГГГ-ММ-ДД).","TYPE_ALPHANUM":"Это значение должно состоять только из букв и цифр.","TYPE_PHONE":"Это значение должно быть корректным номером телефона.","NOTNULL":"Это значение не должно быть пустым.","NOT_BLANK":"Это значение не должно быть пустым.","REQUIRED":"Это значение обязательно.","REGEXP":"Кажется, это значение некорректно.","MIN":"Это значение должно быть больше или равно %s.","MAX":"Значение должно быть меньше либо равно %s.","RANGE":"Это значение должно быть между %s и %s.","MIN_LENGTH":"Это значение слишком короткое. Оно должно иметь %s символов или больше.","MAX_LENGTH":"Это значение слишком длинное. Оно должно иметь %s символов или меньше.","RANGE_LENGTH":"Длина этого значения некорректна. Оно должно быть от %s до %s символов в длину.","MIN_CHECK":"Вы должны выбрать хотя бы %s вариантов.","MAX_CHECK":"Вы должны выбрать %s вариантов или меньше.","RANGE_CHECK":"Вы должны выбрать от %s до %s вариантов.","EQUAL_TO":"Это значение должно быть таким же.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Предыдущий Месяц","NEXT_MONTH":"Следующий Месяц","MONTHS":{"JAN":"Январь","FEB":"Февраль","MAR":"Март","APR":"Апрель","MAY":"Май","JUN":"Июнь","JUL":"Июль","AUG":"Август","SEP":"Сентябрь","OCT":"Октябрь","NOV":"Ноябрь","DEC":"Декабрь"},"WEEK_DAYS":{"SUN":"Воскресенье","MON":"Понедельник","TUE":"Вторник","WED":"Среда","THU":"Черверг","FRI":"Пятница","SAT":"Суббота"},"WEEK_DAYS_SHORT":{"SUN":"Вск","MON":"Пнд","TUE":"Втр","WED":"Срд","THU":"Чтв","FRI":"Птн","SAT":"Сбт"}},"SEE_USER_PROFILE":"Посмотреть профиль {{username }}","USER_STORY":"Пользовательская история","TASK":"Задача","ISSUE":"Запрос","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Ввести тэг","DELETE":"Удалить тэг","ADD":"Добавить тэг"},"DESCRIPTION":{"EMPTY":"Пустые места удручают... не стесняйтесь, напишите описание...","NO_DESCRIPTION":"Описания ещё нет"},"FIELDS":{"SUBJECT":"Тема","NAME":"Имя","URL":"URL","DESCRIPTION":"Описание","VALUE":"Значение","SLUG":"Ссылочное имя","COLOR":"Цвет","IS_CLOSED":"Закрыто?","STATUS":"Статус","TYPE":"Тип","SEVERITY":"Важность","PRIORITY":"Приоритет","ASSIGNED_TO":"Назначено","ASSIGNED_USERS":"Assigned users","POINTS":"Очки","IS_BLOCKED":"заблокирован","REF":"Ссылка","VOTES":"Голоса","SPRINT":"Спринт","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Все"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Не назначен","ASSIGN":"Назначить","DELETE_ASSIGNMENT":"Удалить назначение","REMOVE_ASSIGNED":"Удалить назначение","TOO_MANY":"...слишком много пользователей, продолжайте фильтровать","CONFIRM_UNASSIGNED":"Вы уверены что не хотите назначить ответственного?","TITLE_ACTION_EDIT_ASSIGNMENT":"Изменить назначение","SELF":"Назначено мне"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Закрыт","OPEN":"Открыть"},"WATCHERS":{"WATCHERS":"Наблюдатели","ADD":"Добавить наблюдателей","TITLE_ADD":"Добавить участника проекта к списку наблюдателей","DELETE":"Удалить наблюдателя","TITLE_LIGHTBOX_DELETE_WARTCHER":"Удалить наблюдателя..."},"WATCH_BUTTON":{"WATCH":"Отслеживать","WATCHING":"Отслеживаемое","UNWATCH":"Прекратить отслеживание","WATCHERS":"Наблюдатели","BUTTON_TITLE":"Начать/прекратить отслеживание","COUNTER_TITLE":"{total, plural, one{один наблюдатель} other{# наблюдателя (-ей)}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Повысить/понизить","COUNTER_TITLE":"{total, plural, one{один голос} other{# голоса (-ов)}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Пользовательские поля","SAVE":"Сохранить поле","EDIT":"Редактировать поле","DELETE":"Удалить атрибут","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Название ссылки","TITLE_ACTION_FILTER_BUTTON":"поиск","TITLE":"Фильтры","TITLE_ACTION_SEARCH":"Поиск","ACTION_SAVE_CUSTOM_FILTER":"сохранить как специальный фильтр","PLACEHOLDER_FILTER_NAME":"Введите название фильтра и нажмите \"ввод\"","APPLIED_FILTERS_NUM":"фильтры применены","CATEGORIES":{"TYPE":"Тип","STATUS":"Статус","SEVERITY":"Важность","PRIORITIES":"Приоритеты","TAGS":"Тэги","ASSIGNED_TO":"Назначено","ASSIGNED_USERS":"Assigned users","ROLE":"Роль","CREATED_BY":"Создано","CUSTOM_FILTERS":"Собственные фильтры","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Блок Кода","DB_CLICK":"двойной клик для редактирования","SELECT_LANGUAGE_PLACEHOLDER":"Выбор языка","SELECT_LANGUAGE_REMOVE_FORMATING":"Убрать форматирование","OUTDATED":"Другой пользователь внес изменения в систему. Проверьте новую версию на вкладке активности, прежде чем вы сохраните ваши изменения.","MARKDOWN_HELP":"Помощь по синтаксису Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"Посмотреть эпосы","ADD_EPICS":"Добавить эпосы","MODIFY_EPICS":"Изменить эпосы","COMMENT_EPICS":"Комментировать эпик","DELETE_EPICS":"Удалить эпосы"},"SPRINTS":{"NAME":"Спринты","VIEW_SPRINTS":"Посмотреть спринты","ADD_SPRINTS":"Добавить спринты","MODIFY_SPRINTS":"Изменить спринты","DELETE_SPRINTS":"Удалить спринты"},"USER_STORIES":{"NAME":"Пользовательские Истории","VIEW_USER_STORIES":"Просматривать пользовательские истории","ADD_USER_STORIES":"Добавлять пользовательские истории","MODIFY_USER_STORIES":"Изменять пользовательские истории","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Удалять пользовательские истории"},"TASKS":{"NAME":"Задачи","VIEW_TASKS":"Просмотреть задачи","ADD_TASKS":"Добавить задачи","MODIFY_TASKS":"Редактировать задачи","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Удалить задачи"},"ISSUES":{"NAME":"Запросы","VIEW_ISSUES":"Посмотреть запросы","ADD_ISSUES":"Добавить запросы","MODIFY_ISSUES":"Изменить запросы","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Удалить запросы"},"WIKI":{"NAME":"Вики","VIEW_WIKI_PAGES":"Посмотреть wiki-страницы","ADD_WIKI_PAGES":"Добавить wiki-страницы","MODIFY_WIKI_PAGES":"Модифицировать wiki-страницы","DELETE_WIKI_PAGES":"Удалить wiki-страницы","VIEW_WIKI_LINKS":"Посмотреть wiki-ссылки","ADD_WIKI_LINKS":"Добавить wiki-ссылки","DELETE_WIKI_LINKS":"Удалить wiki-ссылки"}}},"LOGIN":{"PAGE_TITLE":"Вход - Taiga","PAGE_DESCRIPTION":"Выполняется вход в Taiga, платформу для управления проектами стартапов, сделанную для разработчиков и дизайнеров, которые хотят простой и красивый инструмент превращающий работу в удовольствие."},"AUTH":{"INVITED_YOU":"пригласил Вас присоединиться к проекту","NOT_REGISTERED_YET":"Еще не зарегистрированы?","REGISTER":"Зарегистрироваться","CREATE_ACCOUNT":"Создать бесплатный аккаунт"},"LOGIN_COMMON":{"HEADER":"У меня уже есть логин в Taiga","PLACEHOLDER_AUTH_NAME":"Имя пользователя или электронная почта (с учётом регистра)","LINK_FORGOT_PASSWORD":"Забыли?","TITLE_LINK_FORGOT_PASSWORD":"Вы забыли свой пароль?","ACTION_ENTER":"Ввод","ACTION_SIGN_IN":"Логин","PLACEHOLDER_AUTH_PASSWORD":"Пароль (чувствителен к регистру)","ALT_LOGIN":"Или войдите с помощью"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Oompa Loompas считает, что ваше имя пользователя, электронная почта или пароль неправильные.","SUCCESS":"Oompa Loompas счастлив, добро пожаловать в Тайгу!"},"REGISTER":{"PAGE_TITLE":"Зарегистрироваться","PAGE_DESCRIPTION":"Создайте аккаунт в Taiga — платформе для управления проектами стартапов, agile разработчиков и дизайнеров, которые хотят простой и красивый инструмент превращающий работу в удовольствие."},"REGISTER_FORM":{"TITLE":"Зарегистрируйте аккаунт Taiga (бесплатно)","PLACEHOLDER_NAME":"Выберите имя учётной записи (с учётом регистра)","PLACEHOLDER_FULL_NAME":"Введите Ваше полное имя","PLACEHOLDER_EMAIL":"Ваша электронная почта","PLACEHOLDER_PASSWORD":"Задайте новый пароль (с учетом регистра)","ACTION_SIGN_UP":"Зарегистрироваться","TITLE_LINK_LOGIN":"Войти","LINK_LOGIN":"Уже зарегистрированы? Авторизуйтесь"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Забыли пароль?","PAGE_DESCRIPTION":"Введите Ваш логин или email для получения нового пароля и Вы сможете получить доступ к Taiga снова."},"FORGOT_PASSWORD_FORM":{"TITLE":"Упс, забыли пароль?","SUBTITLE":"Введите ваше имя пользователя или электронную почту, чтобы получить новый пароль","PLACEHOLDER_FIELD":"Имя пользователя или электронная почта","ACTION_RESET_PASSWORD":"Сбросить пароль","LINK_CANCEL":"Не, давай назад, думаю я вспомню.","SUCCESS_TITLE":"Проверьте Вашу почту!","SUCCESS_TEXT":"Мы отправили вам письмо с инструкциями по восстановлению пароля","ERROR":"Умпа-Лумпы говорят, что вы еще не зарегистрированы."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Изменить пароль - Taiga","SECTION_NAME":"Изменить пароль","FIELD_CURRENT_PASSWORD":"Текущий пароль","PLACEHOLDER_CURRENT_PASSWORD":"Ваш текущий пароль (или оставьте пустым, если пароль еще не задан)","FIELD_NEW_PASSWORD":"Новый пароль","PLACEHOLDER_NEW_PASSWORD":"Введите новый пароль","FIELD_RETYPE_PASSWORD":"Введите повторно новый пароль","PLACEHOLDER_RETYPE_PASSWORD":"Введите повторно новый пароль","ERROR_PASSWORD_MATCH":"Пароли не совпадают"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Задать новый пароль","SUBTITLE":"И кстати, может быть Вам будет полезна еда богатая железом — она укрепляет память :P","PLACEHOLDER_NEW_PASSWORD":"Новый пароль","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Введите повторно новый пароль","ACTION_RESET_PASSWORD":"Сбросить пароль","ERROR":"У наших Умпа-Лумп не получается найти ваш запрос на восстановление пароля. Попробуйте получить его ещё раз.","SUCCESS":"Наши Умпа Лумпы сохранили ваш новый пароль.
    Попробуйте войти, используя его."},"INVITATION":{"PAGE_TITLE":"Приглашение принято - Taiga","PAGE_DESCRIPTION":"Принять приглашение и присоединиться к Taiga — платформе для управления проектами стартапов, agile разработчиков и дизайнеров, которые хотят простой и красивый инструмент превращающий работу в удовольствие."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"У наших Умпа-Лумп не получается найти ваше приглашение.","SUCCESS":"Вы успешно добавлены к проекту. Добро пожаловать в {{project_name}}"},"HOME":{"PAGE_TITLE":"Домашняя страница - Taiga","PAGE_DESCRIPTION":"Главная страница Taiga с вашими основными проектами, назначенными и отслеживаемыми ПИ, задачами и запросами","EMPTY_WORKING_ON":"Тут кажется пусто, не правда ли? Начинайте использовать Taiga и вы увидите здесь истории, задачи и запросы над которыми вы сейчас работаете.","EMPTY_WATCHING":"Следите за пользовательскими историями, задачами, запросами в ваших проектах и будьте уведомлены об изменениях :)","EMPTY_PROJECT_LIST":"У Вас пока нет проектов","WORKING_ON_SECTION":"Работает над","WATCHING_SECTION":"Отслеживаемые","DASHBOARD":"Рабочий стол с проектами"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Эпосы - {{projectName}}","PAGE_DESCRIPTION":"Список эпосов этого проекта {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADD EPIC","UNASSIGNED":"Не назначено"},"EMPTY":{"TITLE":"Похоже, здесь пока нет ни одного эпоса ","EXPLANATION":"Эпосы - это сущности высокого уровня, которые направляют пользовательские истории.
    Эпосы находятся на вершине иерархии и могут быть использованы, чтобы связывать вместе пользовательские истории.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Голоса","NAME":"Имя","PROJECT":"Проект","SPRINT":"Спринт","ASSIGNED_TO":"Assigned","STATUS":"Статус","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Пожалуйста, добавьте описание, чтобы другие лучше поняли этот эпос","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Заблокирован","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Мои проекты","PAGE_DESCRIPTION":"Список Ваших проектов, отсортируйте их или создайте новый.","MY_PROJECTS":"Мои проекты"},"ATTACHMENT":{"SECTION_NAME":"Вложения","TITLE":"{{ fileName }} загружен {{ date }}","LIST_VIEW_MODE":"Режим \"список\"","GALLERY_VIEW_MODE":"Режим \"галерея\"","DESCRIPTION":"Введите краткое описание","DEPRECATED":"(устаревший)","DEPRECATED_FILE":"Устаревший?","ADD":"Добавить вложение. {{maxFileSizeMsg}}","DROP":"Перетяните вложение сюда","SHOW_DEPRECATED":"+ Показать устаревшие приложения","HIDE_DEPRECATED":"- спрятать устаревшие приложения","COUNT_DEPRECATED":"({{ counter }} устарело)","MAX_UPLOAD_SIZE":"Максимальный объем для загрузки {{maxFileSize}}","DATE":"DD MMM YYYY [в] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Мы не смогли загрузить '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Удалить вложение...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"приложение '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Мы не смогли провести удаление: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Пред.","NEXT":"Следующий"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Изменить значение","TITLE_ACTION_DELETE_VALUE":"Удалить значение","TITLE_ACTION_DELETE_TAG":"Удалить тэг"},"HELP":"Вам нужна помощь? Проверьте нашу страницу техподдержки!","PROJECT_DEFAULT_VALUES":{"TITLE":"Значения по умолчанию","SUBTITLE":"Задать начальные значения для всех полей"},"MEMBERSHIPS":{"TITLE":"Управление участниками","PAGE_TITLE":"Участие - {{projectName}}","ADD_BUTTON":"+ Новый участник","ADD_BUTTON_TITLE":"Добавить нового участника","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Экспорт","SUBTITLE":"Экспортируйте ваш проект, чтобы сохранить резервную копию или создать новый, основываясь на текущем.","EXPORT_BUTTON":"Экспорт","EXPORT_BUTTON_TITLE":"Экспортировать проект","LOADING_TITLE":"Мы создали ваш файл резервной копии","DUMP_READY":"Файл резервной копии готов!","LOADING_MESSAGE":"Пожалуйста, не закрывайте эту страницу","ASYNC_MESSAGE":"Мы отправим вам письмо когда будет готово.","SYNC_MESSAGE":"Если загрузка не начинается самостоятельно, нажмите здесь.","ERROR":"У Oompa Loompas возникли проблемы при создании резервной копии. Повторите еще раз.","ERROR_BUSY":"Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут."},"MODULES":{"TITLE":"Модули","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Список задач","BACKLOG_DESCRIPTION":"Управляйте пользовательскими историями, чтобы поддерживать организованное видение важных и приоритетных задач.","NUMBER_SPRINTS":"Ожидаемое количество спринтов","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Организуйте эффективную работу с проектом с помощью этой панели","ISSUES":"Запросы","ISSUES_DESCRIPTION":"Следите за ошибками, вопросами и улучшениями вашего проекта. Ничего не пропустите!","WIKI":"Вики","WIKI_DESCRIPTION":"Добавляйте, изменяйте или удаляйте контент совместно с остальными. Это самое правильное место для документации вашего проекта.","MEETUP":"Созвониться","MEETUP_DESCRIPTION":"Выберите Вашу систему видеоконференций","SELECT_VIDEOCONFERENCE":"Выберите систему видеоконференций","SALT_CHAT_ROOM":"Добавить префикс к имени чата","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Другое","URL_CHAT_ROOM":"Ссылка на Ваш чат"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - профиль Проекта - {{projectName}}","PROJECT_DETAILS":"Детали проекта","PROJECT_NAME":"Название проекта","TAGS":"Тэги","DESCRIPTION":"Описание","RECRUITING":"Этот проект ищет людей?","RECRUITING_MESSAGE":"Кого вы ищете?","RECRUITING_PLACEHOLDER":"Уточните, какие профили вы ищете","FEEDBACK":"Получать обратную связь от пользователей Тайги?","PUBLIC_PROJECT":"Публичный проект","PRIVATE_PROJECT":"Закрытый проект","PRIVATE_OR_PUBLIC":"В чём разница между публичными и приватными проектами?","DELETE":"Удалить проект","CHANGE_LOGO":"Изменить лого","ACTION_USE_DEFAULT_LOGO":"Использовать картинку по умолчанию","MAX_PRIVATE_PROJECTS":"Вы достигли максимального числа приватных проектов которое разрешено вашим планом.","MAX_PRIVATE_PROJECTS_MEMBERS":"Максимальное количество участников в приватном проекте достигло лимита","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Владелец проекта","REQUEST_OWNERSHIP":"Запрос владельца","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Хотите стать новым владельцем проекта?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Запрос","REQUEST_OWNERSHIP_SUCCESS":"Мы уведомим владельца проекта","CHANGE_OWNER":"Сменить владельца","CHANGE_OWNER_SUCCESS_TITLE":"ОК, ваш запрос был отправлен!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Отчеты","SUBTITLE":"Экспортируйте данные вашего проекта в формате CSV и создавайте ваши собственные отчёты","DESCRIPTION":"Скачайте файл CSV или скопируйте сгенерированную ссылку, затем откройте в любом текстовом редакторе или редакторе таблиц, чтобы создать ваши собственные отчёты о проекте. Вы сможете легко визуализировать и анализировать ваши данные.","HELP":"Как использовать это в моей таблице?","REGENERATE_TITLE":"Изменить URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"отчёты о эпосах","SECTION_TITLE_US":"Отчёты по пользовательским историям","SECTION_TITLE_TASK":"отчёты о задачах","SECTION_TITLE_ISSUE":"отчёты о запросах","DOWNLOAD":"Скачать CSV","URL_FIELD_PLACEHOLDER":"Упс, забыли пароль?","TITLE_REGENERATE_URL":"Сделать CSV ссылку ещё раз","ACTION_GENERATE_URL":"Сгенерировать ссылку","ACTION_REGENERATE":"Создать заново","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Удалить"},"CUSTOM_FIELDS":{"TITLE":"Пользовательские поля","SUBTITLE":"Укажите специальные поля для ваших пользовательских историй, задач и запросов","EPIC_DESCRIPTION":"Специальные поля эпосов","EPIC_ADD":"Добавить специальное поле для эпосов","US_DESCRIPTION":"Специальные поля для пользовательских историй","US_ADD":"Добавить специальное поле для пользовательских историй","TASK_DESCRIPTION":"Специальные поля задач","TASK_ADD":"Добавить новые типы задач","ISSUE_DESCRIPTION":"Специальные поля запросов","ISSUE_ADD":"Добавить специальное поле для запросов","FIELD_TYPE_TEXT":"Текст","FIELD_TYPE_RICHTEXT":"Форматируемый текст","FIELD_TYPE_MULTI":"Многостроковое","FIELD_TYPE_DATE":"Дата","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Значения атрибутов проекта - {{projectName}}","REPLACEMENT":"Все объекты с этим значением будут заменены на","ERROR_DELETE_ALL":"Невозможно удалить все значения"},"PROJECT_VALUES_POINTS":{"TITLE":"Очки","SUBTITLE":"Введите приблизительное количество очков для пользовательских историй","US_TITLE":"Очки ПИ","ACTION_ADD":"Добавить очки"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Приоритеты","SUBTITLE":"Укажите, какие приоритеты будут иметь ваши запросы","ISSUE_TITLE":"Приоритеты запросов","ACTION_ADD":"Добавить новый приоритет"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Степени важности","SUBTITLE":"Укажите степени важности, которые будут иметь ваши запросы","ISSUE_TITLE":"Степени важности запросов","ACTION_ADD":"Добавить новую степень важности"},"PROJECT_VALUES_STATUS":{"TITLE":"Статусы","SUBTITLE":"Укажите, какие статусы будут принимать ваши пользовательские истории, задачи и запросы","EPIC_TITLE":"Статусы Эпоса","US_TITLE":"Статусы пользовательских историй","TASK_TITLE":"Статус задач","ISSUE_TITLE":"Статусы запроса"},"PROJECT_VALUES_TYPES":{"TITLE":"Типы","SUBTITLE":"Укажите, какие типы смогут иметь ваши запросы","ISSUE_TITLE":"Типы запросов","ACTION_ADD":"Добавить новый"},"PROJECT_VALUES_TAGS":{"TITLE":"Тэги","SUBTITLE":"Просмотреть и изменить цвет ваших тэгов","EMPTY":"В данный момент тэги отсутствуют","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Добавить тэг","NEW_TAG":"Новый тэг","MIXING_HELP_TEXT":"Выберите тэги которые вы хотели бы объединить","MIXING_MERGE":"Объединить Тэги","SELECTED":"Выбранные"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Добавить новый статус","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Роли - {{projectName}}","WARNING_NO_ROLE":"Осторожнее: ни с какими ролями на вашем проекте участники не смогут оценить очки для пользовательских историй.","HELP_ROLE_ENABLED":"Когда включено, участники, назначенные на эту роль, смогут оценивать очки для пользовательских историй","DISABLE_COMPUTABLE_ALERT_TITLE":"Вы уверены, что хотите отключить оценку очков для этой роли?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} участников с этой ролью","TITLE_DELETE_ROLE":"Удалить Роль","REPLACEMENT_ROLE":"Все пользователи этой роли будут перемещены в","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Вы не можете удалить все значения","EXTERNAL_USER":"Внешний пользователь","NOTE_EXTERNAL_USERS":"Примечание: под 'внешним пользователем' мы имеем ввиду анонимного пользователя, не имеющего платформы Taiga, включая поисковые движки. Пожалуйста, используйте этот функционал с осторожностью."},"THIRD_PARTIES":{"SECRET_KEY":"Секретный ключ","PAYLOAD_URL":"Ссылка на полезную нагрузку","VALID_IPS":"Правильные IP-адреса (через ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Запросы к Bitbucket не подписаны, так что лучший способ их проверки - через IP-адрес. Если это поле пустое, то проверка по IP-адресу не будет проводиться."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Запросы к Gitlab не подписаны, так что лучший способ их проверки - это проверка по IP-адресу. Если это поле пустое, IP-адрес не будет проверяться."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Веб-хуки - {{projectName}}","SECTION_NAME":"Веб-хуки","ADD_NEW":"Добавить новый веб-хук","TYPE_NAME":"Укажите имя сервиса","TYPE_PAYLOAD_URL":"Укажите нагрузочную ссылку сервиса","TYPE_SERVICE_SECRET":"Введите секретный код сервиса","SAVE":"Сохранить веб-хук","CANCEL":"Отменить веб-хук","SHOW_HISTORY":"(Показать историю)","TEST":"Протестировать веб-хук","EDIT":"Редактировать веб-хук","DELETE":"Удалить веб-хук","REQUEST":"Запрос","RESEND_REQUEST":"Переслать запрос","HEADERS":"Заголовки","PAYLOAD":"Нагрузка","RESPONSE":"Ответ","DATE":"DD MMM YYYY [в] hh:mm:ss","ACTION_HIDE_HISTORY":"(Спрятать историю)","ACTION_HIDE_HISTORY_TITLE":"Скрыть детали истории","ACTION_SHOW_HISTORY":"(Показать историю)","ACTION_SHOW_HISTORY_TITLE":"Показать детали истории","WEBHOOK_NAME":"Веб-хук '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Специальные Атрибуты - {{projectName}}","ADD":"Добавить поле","EDIT":"Редактировать специальное поле","DELETE":"Удалить поле","SAVE_TITLE":"Сохранить поле","CANCEL_TITLE":"Отменить создание","SET_FIELD_NAME":"Введите имя поля","SET_FIELD_DESCRIPTION":"Назначьте описание специальному полю","FIELD_TYPE_DEFAULT":"-- выберите --","ACTION_UPDATE":"Обновить поле","ACTION_CANCEL_EDITION":"Отменить правку"},"MEMBERSHIP":{"COLUMN_MEMBER":"Участник","COLUMN_ADMIN":"Админка","COLUMN_ROLE":"Роль","COLUMN_STATUS":"Статус","STATUS_ACTIVE":"Активный","STATUS_PENDING":"В ожидании","DELETE_MEMBER":"Удалить участника","RESEND":"Переотправить","SUCCESS_SEND_INVITATION":"Мы отправили ещё одно приглашение на адрес '{{email}}'.","SUCCESS_DELETE":"Мы удалили {{message}}.","ERROR_DELETE":"Мы не смогли удалить {{message}}","DEFAULT_DELETE_MESSAGE":"приглашение на {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Значение по умолчанию для селектора эпического статуса","LABEL_US_STATUS":"Выбор значения статуса по умолчанию для пользовательской истории","LABEL_POINTS":"Значения по умолчанию для выбора очков","LABEL_TASK_STATUS":"Значение по умолчанию для статуса задачи","LABEL_ISSUE_TYPE":"Значение по умолчанию для типа запроса","LABEL_ISSUE_STATUS":"Значение по умолчанию для статуса запроса","LABEL_PRIORITY":"Значение по умолчанию для выбора приоритета","LABEL_SEVERITY":"Значение важности по умолчанию"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Укажите название для нового статуса","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Введите имя нового элемента"},"US_STATUS":{"ACTION_ADD_STATUS":"Добавить новый статус","IS_ARCHIVED_COLUMN":"В архиве","IS_CLOSED_COLUMN":"Закрыта","WIP_LIMIT_COLUMN":"Лимит текущей работы","PLACEHOLDER_WRITE_NAME":"Укажите название для нового статуса"},"MENU":{"PROJECT":"Проект","ATTRIBUTES":"Атрибуты","MEMBERS":"Участники","PERMISSIONS":"Разрешения","INTEGRATIONS":"Интеграции"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Статус","POINTS":"Очки","PRIORITIES":"Приоритет","SEVERITIES":"Степени важности","TYPES":"Типы","CUSTOM_FIELDS":"Собственные поля","TAGS":"Тэги","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Роли","ACTION_NEW_ROLE":"+ Новая роль","TITLE_ACTION_NEW_ROLE":"Добавить новую роль"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Поздравляем! Вы новый владелец проекта.","REJECTED_PROJECT_OWNERNSHIP":"Хорошо. Мы свяжемся с текущим владельцем проекта","ACCEPT":"Принимаю","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Изменить профиль","CLOSED_US":"Закрытые ПИ","PROJECTS":"Проекты","PROJECTS_EMPTY":"{{username}} пока не имеет проектов","CONTACTS":"Контакты","CONTACTS_EMPTY":"{{username}} ещё не имеет контактов","CURRENT_USER_CONTACTS_EMPTY":"У вас пока нет контактов","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Люди, с которыми вы работаете в Taiga, будут отмечены как ваши контакты автоматически","TABS":{"ACTIVITY_TAB":"График работ","ACTIVITY_TAB_TITLE":"Показать все действия пользователя","PROJECTS_TAB":"Проекты","PROJECTS_TAB_TITLE":"Список всех проектов, в которых участвует пользователь","LIKES_TAB":"Лайки","LIKES_TAB_TITLE":"Список всех лайков, поставленных этим пользователем","VOTES_TAB":"Голоса","VOTES_TAB_TITLE":"Список всех голосов, сделанных этим пользователем","WATCHED_TAB":"Просмотренные","WATCHED_TAB_TITLE":"Список всего, за чем наблюдает пользователь","CONTACTS_TAB":"Контакты","CONTACTS_TAB_TITLE":"Список всех контактов, созданных этим пользователем"}},"PROFILE_SIDEBAR":{"TITLE":"Ваш профиль","DESCRIPTION":"Люди могут видеть всё что Вы делаете и всё над чем Вы работаете. Вы также можете добавить краткую биографию.","ADD_INFO":"Редактировать биографию"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Введите что-нибудь...","FILTER_TYPE_ALL":"Все","FILTER_TYPE_ALL_TITLE":"Показать все","FILTER_TYPE_PROJECTS":"Проекты","FILTER_TYPE_PROJECTS_TITLE":"Показать только проекты","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Показывать только эпосы","FILTER_TYPE_USER_STORIES":"Истории","FILTER_TYPE_USER_STORIES_TITLE":"Показывать только пользовательские истории","FILTER_TYPE_TASKS":"Задачи","FILTER_TYPE_TASKS_TITLE":"Показывать только задачи","FILTER_TYPE_ISSUES":"Запросы","FILTER_TYPE_ISSUES_TITLE":"Показывать только запросы","EMPTY_TITLE":"Похоже, здесь ничего нет."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Реорганизуйте свои проекты так чтобы часто используемые были бы наверху.
    Первые 10 проектов будут находится вверху списка проектов.","PRIVATE":"Закрытый проект","LOOKING_FOR_PEOPLE":"Этот проект ищет людей","FANS_COUNTER_TITLE":"{total, plural, one{один фанат} other{# фаната (-ов)}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{один наблюдатель} other{# наблюдателя (-ей)}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Заблокированный проект","THIS_PROJECT_IS_BLOCKED":"Этот проект временно заблокирован","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"In order to unblock your projects, contact the administrator."},"SECTION":{"SEARCH":"Поиск","TIMELINE":"График работ","EPICS":"Epics","BACKLOG":"Список задач","KANBAN":"Kanban","ISSUES":"Запросы","WIKI":"Wiki","TEAM":"Команда","MEETUP":"Созвониться","ADMIN":"Админка"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Создать проект","MANAGE_PROJECTS":"Управлять проектами","TITLE_CREATE_PROJECT":"Создать проект","HELP_TITLE":"Страница поддержки Taiga","HELP":"Помощь","HOMEPAGE":"Домашняя страница","FEEDBACK_TITLE":"Оставить отзыв","FEEDBACK":"Обратная связь","NOTIFICATIONS_TITLE":"Настроить уведомления","NOTIFICATIONS":"Уведомления","VIEW_PROFILE_TITLE":"Посмотреть профиль","VIEW_PROFILE":"Посмотреть профиль","EDIT_PROFILE_TITLE":"Править свой профиль","EDIT_PROFILE":"Править профиль","CHANGE_PASSWORD_TITLE":"Изменить пароль","CHANGE_PASSWORD":"Изменить пароль","DASHBOARD_TITLE":"Рабочий стол","DISCOVER_TITLE":"Найти проекты в тренде","DISCOVER":"Найти"},"LIKE_BUTTON":{"LIKE":"Мне нравится","LIKED":"Понравилось","UNLIKE":"Не нравится","BUTTON_TITLE":"Оценить проект","COUNTER_TITLE":"{total, plural, one{один фанат} other{# фаната (-ов)}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Отслеживать этот проект и настроить уведомления","WATCH":"Отслеживать","WATCHING":"Отслеживаемое","COUNTER_TITLE":"{total, plural, one{один наблюдатель} other{# наблюдателя (-ей)}}","OPTIONS":{"NOTIFY_ALL":"Получать все уведомления","NOTIFY_ALL_TITLE":"Получать все уведомления для этого проекта","NOTIFY_INVOLVED":"Только вовлечённые","NOTIFY_INVOLVED_TITLE":"Получать уведомления только если вовлечён в работу","UNWATCH":"Прекратить отслеживание","UNWATCH_TITLE":"Прекратить отслеживание этого проекта"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Связаться с командой проекта","CONTACT_BUTTON":"Связаться с проектом"},"CREATE":{"TITLE":"Создать проект","CHOOSE_TEMPLATE":"Какой из шаблонов лучше подходит Вашему проекту?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Регулярно выставляйте приоритеты вашим задачам и меняйте их статусы","TEMPLATE_SCRUM_LONGDESC":"Скрам это методология управления процессом разработки программного обеспечения построенная на коротких итерациях и постепенном прогрессе. Бэклог по продукту это те задачи которые нужно сделать, отсортированные в порядке приоритета. Бэклоги разбиваются на относительно короткие, управляемые куски - спринты. На основании возможностей, навыков и ресурсов команды в каждый спринт вносится несколько выбранных пользовательских историй из бэклога. На каждый спринт выделяется оговоренный период времени. С развитием проекта бэклог уменьшается.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Придерживайтесь одинаковых принципов работы над независимыми задачами","TEMPLATE_KANBAN_LONGDESC":"Метод \"Канбан\" используется, чтобы разделить разработку проекта (проекта любого типа) на стадии. В этой методологоии, карточки похожи на примечания, которые описывают каждую задачу (или пользовательскую историю) проекта, который должен быть выполнен. Карточки в системе, построенной на методе \"Канбан\", обычно переводятся из одного состояния завершенности в другое, таким образом позволяя отслеживать прогресс всего проекта.","DUPLICATE":"Клонировать проект","DUPLICATE_DESC":"Начните сначала и сохраняйте вашу конфигурацию","IMPORT":"Импортировать проект","IMPORT_DESC":"Импортируйте Ваши проекты в Taiga из других систем ","INVITE":"Пригласить в проект","SOLO_PROJECT":"Вы единственный пользователь в этом проекте","INVITE_LATER":"(Вы сможете пригласить больше пользователей позже)","BACK":"Вернуться","MAX_PRIVATE_PROJECTS":"К сожалению Вы исчерпали количество приватных проектов. Если Вы хотите увеличить текущий лимит, пожалуйста обратитесь к администратору.","MAX_PUBLIC_PROJECTS":"К сожалению, Вы исчерпали количество публичных проектов. Если Вы хотите увеличить лимит, пожалуйста свяжитесь с администратором.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Частный проект"},"COMMON":{"DETAILS":"Новые свойства проекта","PROJECT_TITLE":"Название проекта","PROJECT_DESCRIPTION":"Описание проекта"},"DUPLICATE":{"TITLE":"Клонировать проект","DESCRIPTION":"Начните сначала и сохраняйте вашу конфигурацию","SELECT_PLACEHOLDER":"Выберите имеющийся проект чтобы его клонировать"},"IMPORT":{"TITLE":"Импортировать проект","DESCRIPTION":"Импортируйте Ваши проекты в Taiga из других систем ","ASYNC_IN_PROGRESS_TITLE":"Oompa Loompas импортирует ваш проект","ASYNC_IN_PROGRESS_MESSAGE":"Этот процесс может занять несколько минут
    Мы отправим вам email, когда всё будет готово","UPLOAD_IN_PROGRESS_MESSAGE":"Загружено {{uploadedSize}} размера {{totalSize}}","ERROR":"У Oompa Loompas возникли проблемы при импорте резервной копии. Попробуйте еще раз.","ERROR_TOO_MANY_REQUEST":"Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут.","ERROR_MESSAGE":"У Oompa Loompas возникли проблемы при импорте резервной копии: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})","SYNC_SUCCESS":"Импорт проекта выполнен успешно","IMPORT":"Импортировать","WHO_IS":"Их задачи будут переданы ...","WRITE_EMAIL":"Или, если Вы хотите, напишите почтовое сообщение этому пользователю Taiga","SEARCH_CONTACT":"Или, если Вы хотите, поищите в Ваших контактах","WRITE_EMAIL_LABEL":"Написать почтовое сообщение на адрес используемый этим пользователем Taiga","ACCEEDE":"Согласиться","PROJECT_MEMBERS":"Участники проекта","PROCESS_DESCRIPTION":"Сообщите нам кому из Taiga Вы хотите назначить на выполнения задач проекта {{platform}}","MATCH":"{{user_external}} это {{user_internal}}?","CHOOSE":"Выбрать пользователя","LINKS":"Связь с {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Заметьте, если у пользователя нету аккаунта Taiga, мы не сможем назначить ему задачи.","ASSIGN":"Назначить","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"поиск","ACTION_BACK":"Вернуться"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Ваш аккаунт позволяет использовать {{members}} пользователей.","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Импорт проекта","DESCRIPTION":"Этот процесс может занять некоторое время. Пожалуйста, сохраняйте это окно открытым."},"WARNING":{"TITLE":"Некоторые задачи останутся не распределенными","DESCRIPTION":"Неидентифицируемые пользователи все еще остались. Задачи назначенные таким пользователям останутся нераспределенными. Проверьте все контактные данные чтобы не потерять информацию о них.","CHECK":"Контакты"},"TAIGA":{"SELECTOR":"Импортируйте свой проект из Тайги"},"TRELLO":{"SELECTOR":"Импортируйте Ваши доски из Trello в Taiga","CHOOSE_PROJECT":"Выберите доску которую Вы хотите импортировать","NO_PROJECTS":"Кажется у вас нет досок в Trello"},"GITHUB":{"SELECTOR":"Импортируйте задачи из Вашего проекта на Github","CHOOSE_PROJECT":"Выберите проект который Вы хотите импортировать","NO_PROJECTS":"Кажется у Вас нет проектов на Github","HOW_DO_YOU_WANT_TO_IMPORT":"Как Вы хотите импортировать Ваши задачи в Taiga?","KANBAN_PROJECT":"Как пользовательские истории в Канбан проекте","KANBAN_PROJECT_DESCRIPTION":"Далее Вы сможете включить Скрам с бэклогом.","SCRUM_PROJECT":"Как пользовательские истории в Скрам проекте","SCRUM_PROJECT_DESCRIPTION":"Далее Вы сможете включить режим Канбан.","ISSUES_PROJECT":"Как задачи","ISSUES_PROJECT_DESCRIPTION":"Вы не сможете использовать Ваши задачи в Канбан и Скрам режимах. Вы сможете включить Канбан и Скрам для новых пользовательских историй."},"ASANA":{"SELECTOR":"Импортируйте Ваш проект из Asana и выберите как управлять им","CHOOSE_PROJECT":"Выберите проект который Вы хотите импортировать","NO_PROJECTS":"Кажется в Вас нет проектов в Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Задачи и подзадачи Вашего проекта будут созданы как пользовательские истории и задачи Taiga соответственно.","CREATE_AS_KANBAN_DESCRIPTION":"Задачи и подзадачи Вашего проекта будут созданы как пользовательские истории и задачи Taiga соответственно."},"JIRA":{"SELECTOR":"Импортируйте Ваш проект из Jira и выберите как управлять им","HOW_TO_CONFIGURE":"(помощь в конфигурации)","CHOOSE_PROJECT":"Выберите проект или доску которую Вы хотите импортировать","NO_PROJECTS":"Кажется у Вас нет проектов и досок в Jira","URL":"URL Вашей Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Запросы","CREATE_AS_SCRUM_DESCRIPTION":"Задачи и подзадачи Вашего проекта будут созданы как пользовательские истории и задачи Taiga соответственно.","CREATE_AS_KANBAN_DESCRIPTION":"Задачи и подзадачи Вашего проекта будут созданы как пользовательские истории и задачи Taiga соответственно.","CREATE_AS_ISSUES_DESCRIPTION":"Что Вы хотите сделать с подзадачами из проекта Jira (в Тайге нет подзадач)","CREATE_NEW_ISSUES":"Конвертировать подзадачи в новые задачи Taiga","NOT_CREATE_NEW_ISSUES":"Не импортировать подзадачи"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Вы уверены, что хотите удалить ваш аккаунт?","CANCEL":"Вернуться к настройкам","ACCEPT":"Удалить аккаунт","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Удалить проект","QUESTION":"Вы уверены, что хотите удалить данный проект?","SUBTITLE":"Все данные проекта (пользовательские истории, задачи, запросы, спринты и вики страницы) будут утрачены! :-(","CONFIRM":"Да, я уверен"},"ASSIGNED_TO":{"SELECT":"Назначить","SEARCH":"Найти пользователей"},"ADD_MEMBER":{"TITLE":"Новый участник","PLACEHOLDER":"Выберите пользователей или отправьте приглашение по почте","ADD_EMAIL":"Добавить электронную почту","REMOVE":"Удалить","INVITE":"Пригласить","CHOOSE_ROLE":"Выберите роль","PLACEHOLDER_INVITATION_TEXT":"(Необязательно) Добавьте персональный текст в приглашение. Скажите что-нибудь приятное вашим новым участникам ;-)","HELP_TEXT":"Если пользователи уже зарегистрированы в Тайге они добавятся автоматически. В противном случае им будет отправлено приглашение."},"FEEDBACK":{"TITLE":"Расскажи что-нибудь...","COMMENT":"... ошибки, предложения, что-нибудь клёвое... или даже Ваш самый страшный кошмар с Taiga","ACTION_SEND":"Оставить отзыв"},"SEARCH":{"TITLE":"Поиск","PLACEHOLDER_SEARCH":"Что вы ищете?"},"ADD_EDIT_SPRINT":{"TITLE":"Новый спринт","PLACEHOLDER_SPRINT_NAME":"Название спринта","PLACEHOLDER_SPRINT_START":"Начало - примерно","PLACEHOLDER_SPRINT_END":"Окончание - примерно","ACTION_DELETE_SPRINT":"Вы уверены, что хотите удалить данный спринт?","TITLE_ACTION_DELETE_SPRINT":"удалить спринт","LAST_SPRINT_NAME":"последний этап sprint - {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Добавить запрос","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Удалить спринт"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Необязательно) Добавьте персональный текст в приглашение. Скажите что-нибудь приятное вашим новым участникам ;-)","PLACEHOLDER_TYPE_EMAIL":"Введите электронную почту","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Сменить владельца проекта"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Запрос смены владельца проекта"}},"CHANGE_OWNER":{"TITLE":"Кого вы хотите назначить новым владельцем проекта?","ADD_COMMENT":"Добавить комментарий","BUTTON":"Предложить участнику проекта стать его новым владельцем"},"CONTACT_PROJECT":{"TITLE":"Отправить почтовое сообщение","WARNING":"Сообщение будет отправлено администраторам проекта","PLACEHOLDER":"Напишите Ваше сообщение","SEND":"Отправить"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Какой проект Вам нужен?","CHOOSE_PROJECT_FROM":"Какой проект Вам нужен?","SUBJECT":"Тема","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Эпос {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{epicStatus }}. Описание: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"Мы не смогли открепить ссылку: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Создать связь с","NEW_USERSTORY":"Новая пользовательская история","EXISTING_USERSTORY":"Существующая пользовательская история","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Тема","SUBJECT_BULK_MODE":"Тема (массовое заполнение)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"В проекте нет ни одной пользовательской истории. Пожалуйста выберите другой проект.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Фильтровать ПИ","LIGHTBOX_TITLE_BLOKING_EPIC":"Блокирующая задача","ACTION_DELETE":"Удалить эпос"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Пользовательская История {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{userStoryStatus }}. Выполнено {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} из {{userStoryTotalTasks}} задач). Очки: {{userStoryPoints}}. Описание: {{userStoryDescription}}","SECTION_NAME":"Пользовательская история","LINK_TASKBOARD":"Панель задач","TITLE_LINK_TASKBOARD":"Перейти к панели задач","TOTAL_POINTS":"общее число очков","ADD":"+ Добавить Пользовательскую Историю","ADD_BULK":"Добавить Пользовательские Истории пакетно","PROMOTED":"Эта ПИ была сформирована из запроса:","TITLE_LINK_GO_TO_ISSUE":"Перейти к запросу","TITLE_DELETE_ACTION":"Удалить пользовательскую историю","LIGHTBOX_TITLE_BLOKING_US":"Блокирующая ПИ","NOT_ESTIMATED":"Не оценено","OWNER_US":"Эта пользовательская история принадлежит","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Больше инфо","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Редактировать ссылку","CLOSE":"Закрыть","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Комментарий удалён {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Сначала старые","RECENT_FIRST":"Сначала новые","COMMENT":"Комментарий","EDITED_COMMENT":"Изменено:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Добавить комментарий","SHOW_DELETED":"Показать удаленный комментарий","HIDE_DELETED":"Скрыть удаленный комментарий","DELETE":"Удалить комментарий","RESTORE":"Показать удаленный комментарий","HISTORY":{"TITLE":"Действия"}},"ACTIVITY":{"TITLE":"Действия","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"тэги добавлены:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"новое вложение:","DELETED_ATTACHMENT":"удалённое вложение:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Требование от Команды","CLIENT_REQUIREMENT":"Требование клиента","BLOCKED":"Заблокирован","VALUES":{"NOT_SET":"not set","UNASSIGNED":"нет ответственного"},"FIELDS":{"SUBJECT":"название","DESCRIPTION":"описание","PRIORITY":"приоритет","SEVERITY":"важность","STATUS":"cтатус","TYPE":"тип","ASSIGNED_TO":"назначено на","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"спринт","COLOR":"цвет"}},"BACKLOG":{"PAGE_TITLE":"Список задач - {{projectName}}","PAGE_DESCRIPTION":"Список задач с пользовательскими историями и спринтами проекта {{projectName}}: {{projectDescription}}","SECTION_NAME":"Список задач","CUSTOMIZE_GRAPH":"Настроить граф вашего списка задач","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Админка","CUSTOMIZE_GRAPH_TITLE":"Настройте очки и спринты в админке","MOVE_US_TO_CURRENT_SPRINT":"Перейти к текущему спринту","MOVE_US_TO_LATEST_SPRINT":"Перейти к последнему спринту","EMPTY":"Список задач пуст!","CREATE_NEW_US":"Создать новую ПИ","CREATE_NEW_US_EMPTY_HELP":"Вы можете создать пользовательскую историю","EXCESS_OF_POINTS":"Избыток очков","PENDING_POINTS":"Текущие очки","CLOSED_POINTS":"закрыта","COMPACT_SPRINT":"Компактный Спринт","GO_TO_TASKBOARD":"Перейти на панель задач: {{::name}}","EDIT_SPRINT":"Изменить Спринт","TOTAL_POINTS":"всего","STATUS_NAME":"Статус","SORTABLE_FILTER_ERROR":"Вы не можете перетаскивать на список задач, когда фильтры открыты","DOOMLINE":"Рамки Проекта [Крайний срок]","CHART":{"XAXIS_LABEL":"Спринты","YAXIS_LABEL":"Очки","OPTIMAL":"Оптимальное число очков для работы по спринту \"{{sprintName}}\" должно быть {{value}}","REAL":"Реальные очки для работы по спринту \"{{sprintName}}\" - {{value}}","INCREMENT_TEAM":"Для спринта \"{{sprintName}}\" очки увеличены на {{value}} засчёт требований от команды","INCREMENT_CLIENT":"Для спринта \"{{sprintName}}\" очки увеличены на {{value}} засчёт требований от клиентов"},"TAGS":{"TOGGLE":"Переключить видимость тэга","SHOW":"Показать теги","HIDE":"Скрыть тэги"},"FORECASTING":{"TITLE":"Прогноз скорости выполнения","BACKLOG":"Отобразить бэклог","NEW_SPRINT":"Предлагаемые к выполнению в следующем спринте пользовательские истории на основании Вашей скорости выполнения. Нажмите для создания нового спринта.","CURRENT_SPRINT":"Предлагаемые к выполнению в следующем спринте пользовательские истории на основании Вашей скорости выполнения. Нажмите для добавления в текущий спринт."},"TABLE":{"COLUMN_US":"Пользовательские Истории","TITLE_COLUMN_POINTS":"Выберите вид для Роли"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"всего
    очков","COMPLETED_POINTS":"получено
    очков","OPEN_TASKS":"открытые
    задачи","CLOSED_TASKS":"завершённые
    задачи","IOCAINE_DOSES":"дозы
    иокаина","SHOW_STATISTICS_TITLE":"Показать статистику","TOGGLE_BAKLOG_GRAPH":"Показать/Скрыть график решения задач","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"проектные
    очки","DEFINED_POINTS":"определено
    очков","CLOSED_POINTS":"закрытые
    очки","POINTS_PER_SPRINT":"очков на /
    спринт"},"FILTERS":{"TOGGLE":"Переключить видимость фильтров","HIDE":"Спрятать фильтры","SHOW":"Показать фильтры"},"SPRINTS":{"TITLE":"СПРИНТЫ","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Панель задач Спринта","TITLE_LINK_TASKBOARD":"Перейти к Панели Задач \"{{name}}\"","EMPTY":"Спринтов пока что нет","WARNING_EMPTY_SPRINT_ANONYMOUS":"У этого спринта нет пользовательских историй","WARNING_EMPTY_SPRINT":"Накидайте сюда ПИ из списка задач чтобы начать новый спринт","TITLE_ACTION_NEW_SPRINT":"Добавить новый спринт","TEXT_ACTION_NEW_SPRINT":"Вы можете создать новый спринт в проекте","ACTION_SHOW_CLOSED_SPRINTS":"Показать закрытые спринты","ACTION_HIDE_CLOSED_SPRINTS":"Спрятать закрытые спринты"}},"ERROR":{"TEXT1":"Что-то случилось, Oompa Loompas работает над этим.","NOT_FOUND":"Не найдено","NOT_FOUND_TEXT":"Ошибка 404. Страница не найдена.","PERMISSION_DENIED":"Доступ закрыт","PERMISSION_DENIED_TEXT":"У вас нет прав для доступа к этой странице.","VERSION_ERROR":"Кто-то в Тайге изменил это раньше вас и Умпа-Лумпы не могут применить ваши изменения. Пожалуйста обновите страницу (Внимание! При обновлении страницы текущие правки будут утеряны) и внесите правки еще раз."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - панель задач спринта - {{projectName}}","PAGE_DESCRIPTION":"Спринт {{sprintName}} (с {{startDate}} по {{endDate}}) проекта {{projectName}}. Выполнено {{completedPercentage}}% ({{completedPoints}} из {{totalPoints}} очков). Открытые задачи: {{openTasks}} из {{totalTasks}}.","SECTION_NAME":"Панель задач","TITLE_ACTION_ADD":"Добавить новую Задачу","TITLE_ACTION_ADD_BULK":"Добавить новые задачи пакетно","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Назначить задачу","PLACEHOLDER_CARD_TITLE":"Это может быть задачей","PLACEHOLDER_CARD_TEXT":"Разделяйте ПИ в задачи чтобы отслеживать их по отдельности","TABLE":{"COLUMN":"Пользовательская история","TITLE_ACTION_FOLD":"Свернуть колонку","TITLE_ACTION_UNFOLD":"Развернуть колонку","TITLE_ACTION_FOLD_ROW":"Свернуть ряд","TITLE_ACTION_UNFOLD_ROW":"Развернуть ряд","FIELD_POINTS":"очков","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Дней","YAXIS_LABEL":"Очки","OPTIMAL":"Оптимальное количество очков для работы на день {{formattedDate}}: {{roundedValue}}","REAL":"Реальные очки для работы на день: {{formattedDate}} - {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Задача {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{taskStatus }}. Описание: {{taskDescription}}","SECTION_NAME":"Задача","LINK_TASKBOARD":"Панель задач","TITLE_LINK_TASKBOARD":"Перейти к панели задач","PLACEHOLDER_SUBJECT":"Укажите новое название задачи","TITLE_SELECT_STATUS":"Статус","OWNER_US":"Эта задача принадлежит:","TITLE_LINK_GO_OWNER":"Перейти к пользовательской истории","TITLE_DELETE_ACTION":"Удалить задачу","LIGHTBOX_TITLE_BLOKING_TASK":"Блокирующее задание","FIELDS":{"IS_IOCAINE":"- иокаин"},"TITLE_ACTION_IOCAINE":"Чувствуете, что задание берет верх над вами? Дайте другим знать об этом, нажав на \"Иокаин\", когда редактируете задание. Возможно стать неуязвимым к этому (выдуманному) смертельном яду, потребляя небольшие количества время от времени, так же как возможно стать лучше в том, что вы делаете, временами беря на себя дополнительные препятствия!"},"NOTIFICATION":{"OK":"Всё хорошо","WARNING":"Упс, что-то случилось...","WARNING_TEXT":"Oompa Loompas сказал, что ваши изменения не сохранились!","SAVED":"Oompa Loompas сохранил изменения!","CLOSE":"закрыть уведомление","MAIL":"Уведомления почтой","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Вы уверены, что хотите удалить?"},"CANCEL_ACCOUNT":{"TITLE":"Аннулировать ваш аккаунт","SUBTITLE":"Жаль, что вы покидаете taiga, надеемся, вам здесь понравилось :)","PLACEHOLDER_INPUT_TOKEN":"идентификатор аннулирования аккаунта","ACTION_LEAVING":"Да, я ухожу!","SUCCESS":"Oompa Loompas удалил ваш аккаунт"},"CHANGE_EMAIL_FORM":{"TITLE":"Сменить вашу электронную почту","SUBTITLE":"Ещё один клик и Ваш email будет обновлён!","PLACEHOLDER_INPUT_TOKEN":"изменить идентификатор email","ACTION_CHANGE_EMAIL":"Сменить электронную почту","SUCCESS":"Наш Oompa Loompas обновил вашу электронную почту"},"ISSUES":{"PAGE_TITLE":"Запросы - {{projectName}}","PAGE_DESCRIPTION":"Панель запросов проекта {{projectName}}: {{projectDescription}}","SECTION_NAME":"Запрос","ACTION_NEW_ISSUE":"+НОВЫЙ ЗАПРОС","ACTION_PROMOTE_TO_US":"Повысить до пользовательской истории","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Этот запрос был переделан в ПИ:","EXTERNAL_REFERENCE":"Этот запрос был создан из","GO_TO_EXTERNAL_REFERENCE":"Перейти в начало","ACTION_DELETE":"Удалить запрос","LIGHTBOX_TITLE_BLOKING_ISSUE":"Блокирующий запрос","LINK_TASKBOARD":"Панель задач","TITLE_LINK_TASKBOARD":"Перейти к панели задач","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Приоритет","SEVERITY":"Важность","TYPE":"Тип"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Превратить этот запрос в новую пользовательскую историю","MESSAGE":"Вы уверены, что хотите создать новую ПИ из этого запроса?"},"TABLE":{"COLUMNS":{"TYPE":"Тип","SEVERITY":"Важность","PRIORITY":"Приоритет","SUBJECT":"Тема","VOTES":"Голоса","STATUS":"Статус","MODIFIED":"Modified","ASSIGNED_TO":"Назначено"},"TITLE_ACTION_CHANGE_STATUS":"Изменить статус","TITLE_ACTION_ASSIGNED_TO":"Назначено","BLOCKED":"Заблокирован","EMPTY":{"TITLE":"Нет присланных запросов :-)","SUBTITLE":"Вы нашли запрос?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Запрос {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{issueStatus }}. Тип: {{issueType}}, Приоритет: {{issuePriority}}. Важность: {{issueSeverity}}. Описание: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Панель kanban, с пользовательскими историями для проекта {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Свернуть колонку","TITLE_ACTION_UNFOLD":"Развернуть колонку","TITLE_ACTION_ADD_US":"Добавить Пользовательскую Историю","TITLE_ACTION_ADD_BULK":"Добавить пакетно","ACTION_SHOW_ARCHIVED":"Показать архивные","ACTION_HIDE_ARCHIVED":"Спрятать архив","HIDDEN_USER_STORIES":"Пользовательские истории в этом статусе скрыты по умолчанию","PLACEHOLDER_CARD_TITLE":"Это - ваши Пользовательские Истории.","PLACEHOLDER_CARD_TEXT":"У ПИ также могут быть подзадачи чтобы можно было разделять требования"},"SEARCH":{"PAGE_TITLE":"Поиск - {{projectName}}","PAGE_DESCRIPTION":"Ищите что угодно, пользовательские истории, задачи, запросы и вики-страницы, в проекте {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"Пользовательские Истории","FILTER_ISSUES":"Запросы","FILTER_TASKS":"Задачи","FILTER_WIKI":"Вики страницы","PLACEHOLDER_SEARCH":"Искать в...","TITLE_ACTION_SEARCH":"поиск","EMPTY_TITLE":"Кажется, по вашему запросу ничего не найдено.","EMPTY_DESCRIPTION":"Попробуйте одну из вкладок выше и запустите поиск ещё раз"},"TEAM":{"PAGE_TITLE":"Команда - {{projectName}}","PAGE_DESCRIPTION":"Панель команды показывает всех участников проекта {{projectName}}: {{projectDescription}}","SECTION_NAME":"Команда","PLACEHOLDER_INPUT_SEARCH":"Искать по имени","COLUMN_MR_WOLF":"Мр. Вульф","EXPLANATION_COLUMN_MR_WOLF":"Закрытые запросы","COLUMN_IOCAINE":"Употребляющий иокаин","EXPLANATION_COLUMN_IOCAINE":"потреблено доз иокаина","COLUMN_CERVANTES":"Сервантес","EXPLANATION_COLUMN_CERVANTES":"Отредактировано вики-страниц","COLUMN_BUG_HUNTER":"Охотник за ошибками","EXPLANATION_COLUMN_BUG_HUNTER":"Присланные запросы","COLUMN_NIGHT_SHIFT":"Ночная смена","EXPLANATION_COLUMN_NIGHT_SHIFT":"Задача закрыта","COLUMN_TOTAL_POWER":"Могущество","EXPLANATION_COLUMN_TOTAL_POWER":"Всего очков","SECTION_TITLE_TEAM":"Команда","SECTION_FILTER_ALL":"Все","CONFIRM_LEAVE_PROJECT":"Вы уверены, что хотите покинуть данный проект?","ACTION_LEAVE_PROJECT":"Покинуть проект"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[макс. размер: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Настройки пользователя","USER_PROFILE":"Профиль пользователя","CHANGE_PASSWORD":"Изменить пароль","EMAIL_NOTIFICATIONS":"Уведомления почтой","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Уведомления почтой","COLUMN_PROJECT":"Проект","COLUMN_RECEIVE_ALL":"Получать все","COLUMN_ONLY_INVOLVED":"Только вовлечённые","COLUMN_NO_NOTIFICATIONS":"Уведомлений нет","OPTION_ALL":"Все","OPTION_INVOLVED":"Вовлечен","OPTION_NONE":"Нет"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Проект","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Проект"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Использовать картинку по умолчанию","ACTION_DELETE_ACCOUNT":"Удалить аккаунт","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Проверьте входящие письма!
    Мы послали письмо на ваш аккаунт
    с инструкциями по установке вашего нового адреса.","CHANGE_PHOTO":"Изменить фото","FIELD":{"USERNAME":"Имя пользователя","EMAIL":"Электронная почта","FULL_NAME":"Полное имя","PLACEHOLDER_FULL_NAME":"Полное имя (например, Игорь Николаев)","BIO":"Биография (не более 210 символов)","PLACEHOLDER_BIO":"Расскажите нам что-нибудь о себе","LANGUAGE":"Язык","LANGUAGE_DEFAULT":"-- использовать язык по умолчанию --","THEME":"Тема","THEME_DEFAULT":"-- использовать тему по умолчанию --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Вики - {{projectName}}","PAGE_DESCRIPTION":"Последнее редактирование: {{lastModifiedDate}} ({{totalEditions}} - всего правок) Контент: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Удалить эту вики страницу","DELETE_LIGHTBOX_TITLE":"Удалить вики страницу","DELETE_LINK_TITLE":"Удалить ссылку wiki","NAVIGATION":{"HOME":"Главная страница","SECTION_NAME":"ЗАКЛАДКИ","ACTION_ADD_LINK":"Добавить закладку","ALL_PAGES":"Все wiki-страницы"},"SUMMARY":{"TIMES_EDITED":"раз
    отредактировано","LAST_EDIT":"последняя
    правка","LAST_MODIFICATION":"последнее изменение"},"SECTION_PAGES_LIST":"Все страницы","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"Создан","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Подсказка","LINK":"Чтобы узать как пользовать этим — посетите нашу страницу поддержки.","LINK_TITLE":"Посетить нашу страницу поддержки","HINT1_TITLE":"Вы знали что можно импортировать и экспортировать проекты?","HINT1_TEXT":"Это позволяет вам собирать данные из одной Taiga и копировать в другую.","HINT2_TITLE":"Вы знали что можно создавать собственные поля?","HINT2_TEXT":"Теперь команды могут создавать специальные поля, чтобы гибко вводить данные, специфические для их рабочего процесса.","HINT3_TITLE":"Перестройте список своих проектов так, чтобы выделить самые важные для себя.","HINT3_TEXT":"Первые 10 проектов доступны из панели прямого доступа сверху.","HINT4_TITLE":"Забыли, над чем вы работали?","HINT4_TEXT":"Не переживайте, на вашем рабочем столе вы найдёте ваши активные задачи, запросы и пользовательские истории в том порядке, в котором вы над ними работали."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} приложил новый файл к {{obj_name}}","US_CREATED":"{{username}} создал новую ПИ {{obj_name}} в {{project_name}}","ISSUE_CREATED":"{{username}} создал новый запрос {{obj_name}} в {{project_name}}","TASK_CREATED":"{{username}} создал новую задачу {{obj_name}} в {{project_name}}","TASK_CREATED_WITH_US":"{{username}} создал новую задачу {{obj_name}} в {{project_name}}, которая принадлежит ПИ {{us_name}}","WIKI_CREATED":"{{username}} создал новую вики-страницу {{obj_name}} в {{project_name}}","MILESTONE_CREATED":"{{username}} создал новый спринт {{obj_name}} в {{project_name}}","EPIC_CREATED":"{{username}} создал новый эпик {{obj_name}} в проекте {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} прикрепил пользовательскую историю {{related_us_name}} к эпику {{epic_name}} в проекте {{project_name}}","NEW_PROJECT":"{{username}} создал проект {{project_name}}","MILESTONE_UPDATED":"{{username}} обновил спринт {{obj_name}}","US_UPDATED":"{{username}} обновил атрибут \"{{field_name}}\" ПИ {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} установил атрибут \"{{field_name}}\" для ПИ {{obj_name}} на {{new_value}}","US_UPDATED_POINTS":"{{username}} установил очки для '{{role_name}}' для ПИ {{obj_name}} на {{new_value}}","ISSUE_UPDATED":"{{username}} обновил атрибут \"{{field_name}}\" запроса {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} установил атрибут \"{{field_name}}\" запроса {{obj_name}} на {{new_value}}","TASK_UPDATED":"{{username}} установил атрибут \"{{field_name}}\" задачи {{obj_name}} на {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} установил атрибут \"{{field_name}}\" задачи {{obj_name}} на {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} изменил атрибут \"{{field_name}}\" задачи {{obj_name}}, которая принадлежит ПИ {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} установил атрибут \"{{field_name}}\" задачи {{obj_name}}, которая принадлежит ПИ {{us_name}}, на {{new_value}}","WIKI_UPDATED":"{{username}} обновил вики-страницу {{obj_name}}","EPIC_UPDATED":"{{username}} обновил атрибут \"{{field_name}}\" ПИ {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} обновил атрибут поля \"{{field_name}}\" эпика {{obj_name}} на {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} обновил поле \"{{field_name}}\" эпика {{obj_name}} на ","NEW_COMMENT_US":"{{username}} прокомментировал ПИ {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} прокомментировал запрос {{obj_name}}","NEW_COMMENT_TASK":"{{username}} прокомментировал задачу {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} написал комментарий в эпике {{obj_name}}","NEW_MEMBER":"У {{project_name}} появился новый участник","US_ADDED_MILESTONE":"{{username}} добавил ПИ {{obj_name}} для {{sprint_name}}","US_MOVED":"{{username}} переместил ПИ {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} добавил ПИ {{obj_name}} к списку задач","BLOCKED":"{{username}} заблокировал {{obj_name}}","UNBLOCKED":"{{username}} разблокировал {{obj_name}}","NEW_USER":"{{username}} присоединился к Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Запрос","TASK":"Задача"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"Внешнее приложение требующие аутентификации","PAGE_DESCRIPTION":"Внешнее приложение требующие аутентификации","AUTHORIZATION_REQUEST":"Разрешить {{application}} использовать ваш Taiga аккаунт?","LOGIN_WITH_ANOTHER_USER":"Войти под другим пользователем","AUTHORIZE_APP":"Авторизировать приложение","CANCEL":"Отмена"},"JOYRIDE":{"NAV":{"NEXT":"Следующий","BACK":"Вернуться","SKIP":"Пропустить","DONE":"Завершена"},"DASHBOARD":{"STEP1":{"TITLE":"Ваш проект","TEXT":"Добро пожаловать! Здесь вы найдете проекты, над которыми работаете."},"STEP2":{"TITLE":"Работает над","TEXT":"Здесь вы найдете Пользовательские Истории, Задачи и Запросы, над которыми работаете."},"STEP3":{"TITLE":"Отслеживаемое","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"Вы уже работаете с Taiga ;)"},"STEP4":{"TITLE":"Давайте начнём","TEXT1":"Вы можете начать, создав свой первый проект в Taiga.","TEXT2":"Удачи!"}},"BACKLOG":{"STEP1":{"TITLE":"Содержание проекта","TEXT1":"Здесь вы будете видеть состояние проекта.","TEXT2":"Вы можете изменять все настройки проекта в админке."},"STEP2":{"TITLE":"Список задач проекта","TEXT":"Список задач - набор требований (Пользовательский Историй) к вашему проекту. Здесь вы можете планировать спринты."},"STEP3":{"TITLE":"Спринты","TEXT":"Спринты - это небольшие промежутки времени (обычно 2 недели), на протяжении которых конкретные задачи должны быть закончены и доставлены."},"STEP4":{"TITLE":"Пользовательские Истории","TEXT":"Это высокоуровневые требования. Вы можете добавить их в список задач и перетащить в спринт, в который они должны быть реализованы."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"Пользовательские Истории и Задачи","TEXT":"Пользовательские истории - это высокоуровневые требования. Вы можете перетаскивать их между колонками."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"Вы можете добавить одну пользовательскую историю (кнопка \"добавить ПИ\") или сразу несколько (кнопка \"пакетное добавление\")","TEXT2":"Удачи!"}}},"DISCOVER":{"PAGE_TITLE":"Найти проекты - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Найти проекты","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Наиболее активные","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Больше всего лайков","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"Показать больше","FEATURED":"Популярные проекты","EMPTY":"Нету проектов, удовлетворяющих заданным критериям поиска.
    Попробуйте снова!","FILTERS":{"ALL":"Все","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Ищем людей","WEEK":"За неделю","MONTH":"За месяц","YEAR":"За год","ALL_TIME":"За всё время","CLEAR":"Очистить фильтры"},"SEARCH":{"PAGE_TITLE":"Поиск - Найти проекты - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Введите что-нибудь...","ACTION_TITLE":"Поиск","RESULTS":"Результаты поиска"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-sv.json b/dist/v-1547534999795/locales/taiga/locale-sv.json deleted file mode 100644 index 1c96e01..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-sv.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Ja","NO":"Nej","OR":"eller","I_GET_IT":"OK, I get it","LOADING":"Laddar...","DATE":"YYYY-MM-DD","DATETIME":"YYYY-MM-DD HH:mm","SAVE":"Spara","CANCEL":"Avbryt","ACCEPT":"Acceptera","DELETE":"Radera","UNLINK":"Avlänka","CREATE":"Skapa","ADD":"Lägg till","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Texten är kopierad","EDIT":"Redigera","DRAG":"Dra","TAG_LINE":"Ditt agila, gratis och öppen-källkod projekthanteringsverktyg","TAG_LINE_2":"Älska ditt projekt","BLOCK":"Blockera","BLOCK_TITLE":"Blockera denna post, till exempel om den har ett beroende som inte kan tillgodoses","BLOCKED":"Blockerad","UNBLOCK":"Avblockera","UNBLOCK_TITLE":"Avblockera denna post","BLOCKED_NOTE":"Varför är denna blockerad?","BLOCKED_REASON":"Vänligen förklara orsaken","CREATED_BY":"Skapad av {{fullDisplayName}}","CLOSE":"stäng","GO_HOME":"Ta mig hem","PLUGINS":"Insticksprogram","ONE_ITEM_LINE":"En post per rad ...","NEW_BULK":"Lägg till flera nya","SUBTASKS":"Subtasks","PREVIOUS":"Föregående","NEXT":"Nästa","LOGOUT":"Logga ut","EXTERNAL_USER":"en extern användare","GENERIC_ERROR":"En av våra Oompa Loompier säger {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Projektägare","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Är du säker på att du vill stänga redigeringsläget?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Kom ihåg att alla ändringar kommer förloras om du stänger utan att spara","RELATED_USERSTORIES":"Relaterade användarhistorier","CARD":{"ASSIGN_TO":"Tilldela Till","EDIT":"Ändra kort","DELETE":"Delete card","DELETE_ISSUE":"Ta bort ärende","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Det här värdet är felaktigt. ","TYPE_EMAIL":"Värdet måste vara en giltig e-postadress","TYPE_URL":"Det här värdet borde vara en giltig länk","TYPE_URLSTRICT":"Det här värdet borde vara en giltig länk","TYPE_NUMBER":"Det här värdet måste vara ett giltigt nummer","TYPE_DIGITS":"Det här värdet måste vara ett siffer.","TYPE_DATEISO":"Värdet ska vara ett giltigt datum (YYYY-MM-DD).","TYPE_ALPHANUM":"Det här värdet ska vara alfanumeriskt","TYPE_PHONE":"Det här värdet ska vara ett giltigt telefonnummer","NOTNULL":"Det här värdet kan inte vara null.","NOT_BLANK":"Det här värdet ska inte vara blankt. ","REQUIRED":"Det här värdet är obligatoriskt.","REGEXP":"Det här värdet är felaktigt. ","MIN":"Det här värdet skulle vara större eller lika med %s.","MAX":"Det här värdet ska vara lägre eller lika med %s. ","RANGE":"Värdet ska vara mellan %s och %s. ","MIN_LENGTH":"Det här värdet är för kort. Det ska ha %s tecken eller flera. ","MAX_LENGTH":"Det här värdet är för långt. Du kan ha %s tecken eller mindre. ","RANGE_LENGTH":"Värdets längd är ej giltig. Det ska vara mellan %s och %s tecken långt. ","MIN_CHECK":"Du måste välja minst %s val.","MAX_CHECK":"Du måste välja %s val eller mindre.","RANGE_CHECK":"Du måste välja mellan %s och %s val.","EQUAL_TO":"Det här värdet skulle vara det samma. ","LINEWIDTH":"En eller fler rader är kanske för långa. Försök hålla det under % bokstäver.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"YYYY-MM-DD","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Tidigare månad","NEXT_MONTH":"Nästa månad","MONTHS":{"JAN":"Januar","FEB":"Februar","MAR":"Mars","APR":"April","MAY":"Maj","JUN":"Juni","JUL":"Juli","AUG":"Augusti","SEP":"September","OCT":"Oktober","NOV":"November","DEC":"December"},"WEEK_DAYS":{"SUN":"Söndag","MON":"Måndag","TUE":"Tisdag","WED":"Onsdag","THU":"Torsdag","FRI":"Fredag","SAT":"Lördag"},"WEEK_DAYS_SHORT":{"SUN":"Sol","MON":"Mån","TUE":"Tis","WED":"Ons","THU":"Tor","FRI":"Fre","SAT":"Lör"}},"SEE_USER_PROFILE":"Se {{username }}s profil","USER_STORY":"Användarhistorie","TASK":"Uppgift","ISSUE":"ärende","EPIC":"Epost","TAGS":{"PLACEHOLDER":"Ange tagg","DELETE":"Ta bort etikett","ADD":"Lägg till etikett"},"DESCRIPTION":{"EMPTY":"Så tråkigt med ingen information ... här kan du beskriva det ...","NO_DESCRIPTION":"Ingen beskrivning än"},"FIELDS":{"SUBJECT":"Titel","NAME":"Namn","URL":"Länk","DESCRIPTION":"Beskrivning","VALUE":"Värde","SLUG":"Slugg","COLOR":"Färg","IS_CLOSED":"Är den stängd?","STATUS":"Status","TYPE":"Typ","SEVERITY":"Allvarsgrad","PRIORITY":"Prioritet","ASSIGNED_TO":"Tilldelad till","ASSIGNED_USERS":"Assigned users","POINTS":"Poäng","IS_BLOCKED":"är blockerad","REF":"Ref. ","VOTES":"Röster","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Alla"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Ej tilldelad","ASSIGN":"Tilldela","DELETE_ASSIGNMENT":"Ta bort tilldelning","REMOVE_ASSIGNED":"Ta bort tilldelning","TOO_MANY":"... för många användare, fortsätter filtreringen","CONFIRM_UNASSIGNED":"Vill du lämna det utan att tilldela det? ","TITLE_ACTION_EDIT_ASSIGNMENT":"Redigera tilldelning","SELF":"Tilldela mig"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Stängd","OPEN":"Öppen"},"WATCHERS":{"WATCHERS":"Observatörer","ADD":"Lägg till bevakare","TITLE_ADD":"Lägg till en projektmedlem till bevakningslistan","DELETE":"Ta bort observatör","TITLE_LIGHTBOX_DELETE_WARTCHER":"Ta bort observatör ..."},"WATCH_BUTTON":{"WATCH":"Visa","WATCHING":"Bevakar","UNWATCH":"Frånkoppla visning","WATCHERS":"Observatörer","BUTTON_TITLE":"Visa/Visa inte den här posten","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Rösta för / Rösta emot den här posten","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Anpassade fält","SAVE":"Spara anpassad fält","EDIT":"Ändra anpassad fält","DELETE":"Ta bort anpassad egenskap","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Titel eller referens","TITLE_ACTION_FILTER_BUTTON":"sök","TITLE":"Filter","TITLE_ACTION_SEARCH":"Sök","ACTION_SAVE_CUSTOM_FILTER":"spara som anpassad filter","PLACEHOLDER_FILTER_NAME":"Skriv filternamnet och tryck på ","APPLIED_FILTERS_NUM":"applicerade filter","CATEGORIES":{"TYPE":"Typ","STATUS":"Status","SEVERITY":"Allvarsgrad","PRIORITIES":"Prioritet","TAGS":"Etiketter","ASSIGNED_TO":"Tilldelad till","ASSIGNED_USERS":"Assigned users","ROLE":"Roll","CREATED_BY":"Skapad av","CUSTOM_FILTERS":"Anpassad filter","EPIC":"Epost"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Välj Språk","SELECT_LANGUAGE_REMOVE_FORMATING":"Ta bort formatering","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Hjälp för markeringssyntax"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epos","VIEW_EPICS":"Visa Epics","ADD_EPICS":"Lägg till Epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Radera eipcs"},"SPRINTS":{"NAME":"Sprintar","VIEW_SPRINTS":"Visa sprintar","ADD_SPRINTS":"Lägg till sprintar","MODIFY_SPRINTS":"Ändra sprintar","DELETE_SPRINTS":"Ta bort sprintar"},"USER_STORIES":{"NAME":"Användarhistorie","VIEW_USER_STORIES":"Visa användarhistorier","ADD_USER_STORIES":"Lägg till användarhistorier","MODIFY_USER_STORIES":"Modifiera användarhistorier","COMMENT_USER_STORIES":"Kommentera användningsfall","DELETE_USER_STORIES":"Ta bort användarhistorier"},"TASKS":{"NAME":"Uppgift","VIEW_TASKS":"Visa uppgifter","ADD_TASKS":"Lägg till uppgifter","MODIFY_TASKS":"Modifiera uppgifter","COMMENT_TASKS":"Kommentera uppgifter","DELETE_TASKS":"Ta bort uppgift"},"ISSUES":{"NAME":"Ärenden","VIEW_ISSUES":"Visa ärenden","ADD_ISSUES":"Lägg till ärenden","MODIFY_ISSUES":"Modifiera ärenden","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Ta bort uppgifter"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Visa wiki-sidor","ADD_WIKI_PAGES":"Lägg till wiki-sida","MODIFY_WIKI_PAGES":"Modifiera wiki-sidor","DELETE_WIKI_PAGES":"Ta bort wiki-sidor","VIEW_WIKI_LINKS":"Visa wiki-länkar","ADD_WIKI_LINKS":"Lägg till wiki-länkar","DELETE_WIKI_LINKS":"Ta bort wiki-länkar"}}},"LOGIN":{"PAGE_TITLE":"Logga in - Taiga","PAGE_DESCRIPTION":"Loggar in till Taiga, en projekthanteringsplatform för startups och agila utvecklare & designers som vill ha ett simpelt, vackert verktyg som gör arbetet till en fröjd."},"AUTH":{"INVITED_YOU":"har bjudit in dig till projektet","NOT_REGISTERED_YET":"Inte registrerad ännu?","REGISTER":"Registrera","CREATE_ACCOUNT":"skapa ett gratis konto här"},"LOGIN_COMMON":{"HEADER":"Jag har redan ett Taiga-konto","PLACEHOLDER_AUTH_NAME":"Användarnamn eller e-postadress (skiftlägeskänsligt)","LINK_FORGOT_PASSWORD":"Glömt det?","TITLE_LINK_FORGOT_PASSWORD":"Har du glömt ditt lösenord?","ACTION_ENTER":"Gå in","ACTION_SIGN_IN":"Logga in","PLACEHOLDER_AUTH_PASSWORD":"Lösenord (skiftlägeskänslig)","ALT_LOGIN":"Eller logga in med"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Enligt våra Ooma Loompas är ditt användarnamn, din e-postadress eller ditt lösenord inkorrekt.","SUCCESS":"Våra Ooma Loompas är glada, välkommen till Taiga!"},"REGISTER":{"PAGE_TITLE":"Registrera - Taiga","PAGE_DESCRIPTION":"Skapa ditt konto i Taiga, en projekthanteringsplatform för startups och agila utvecklare & designers som vill ha ett simpelt, vackert verktyg som gör arbetet till en fröjd."},"REGISTER_FORM":{"TITLE":"Registrera ett nytt Taiga-konto (gratis)","PLACEHOLDER_NAME":"Välj ett användarnamn (skiflägeskänsligt)","PLACEHOLDER_FULL_NAME":"Ange ditt fullständiga namn","PLACEHOLDER_EMAIL":"Din e-postadress","PLACEHOLDER_PASSWORD":"Välj ett lösenord (skiftlägeskänsligt)","ACTION_SIGN_UP":"Registrera","TITLE_LINK_LOGIN":"Logga in","LINK_LOGIN":"Redan registrerad? Logg in"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Glömt lösenord - Taiga","PAGE_DESCRIPTION":"Skriv ditt användarnamn eller e-postadress för att få ett nytt lösenord så att du kan få åtkomst till Taiga igen. "},"FORGOT_PASSWORD_FORM":{"TITLE":"Oj, har du glömt ditt lösenord?","SUBTITLE":"Skriv ditt användarnamn eller e-postadress för att få ett nytt. ","PLACEHOLDER_FIELD":"Användarnamn eller e-postadress","ACTION_RESET_PASSWORD":"Återställ lösenord","LINK_CANCEL":"Nej, ta mig tillbaka. Jag tror att jag minns det.","SUCCESS_TITLE":"Kolla din inkorg!","SUCCESS_TEXT":"Vi skickade dig ett e-postmeddelande med anvisningar hur du byter lösenord","ERROR":"Enligt våra Oompaloompier är du inte registrerad ännu."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Byt ditt lösenord - Taiga","SECTION_NAME":"Byt lösenord","FIELD_CURRENT_PASSWORD":"Befintligt lösenord","PLACEHOLDER_CURRENT_PASSWORD":"Ditt nuvarande lösenord (eller tomt om du inte har något lösenord än)","FIELD_NEW_PASSWORD":"Nytt lösenord","PLACEHOLDER_NEW_PASSWORD":"Skriv in lösenordet på nytt","FIELD_RETYPE_PASSWORD":"Skriv in lösenordet på nytt","PLACEHOLDER_RETYPE_PASSWORD":"Skriv in ditt nya lösenord på nytt","ERROR_PASSWORD_MATCH":"Lösenordet överensstämmer inte. "},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Skapa ett nytt Taiga-lösenord","SUBTITLE":"Vet du va? Du kanske behöver äta mera järnrika livsmedel. Det är bra för hjärnan :P","PLACEHOLDER_NEW_PASSWORD":"Nytt lösenord","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Skriv in lösenordet på nytt","ACTION_RESET_PASSWORD":"Återställ lösenord","ERROR":"Våra Oompa Loompier kan inte hitta din begäran om att återställa lösenordet. Fråga om det på nytt.","SUCCESS":"Våra Oompa Loompier har sparat ditt nya lösenord
    Försök att logga in med det. "},"INVITATION":{"PAGE_TITLE":"Invitation accepterad - Taiga","PAGE_DESCRIPTION":"Acceptera invitationer för att bli medlem i ett Taiga-projekt. Taiga är ett projekthanteringsverktyg för uppstartsföretag och agila utvecklare och designers som behöver ett enkelt, vackert verktyg som är mycket trevligt att använda. "},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Våra Oompa Loompier kan inte hitta din invitation.","SUCCESS":"Du har nu blitt medlem i det här projektet. Välkommen till {{project_name}}"},"HOME":{"PAGE_TITLE":"Hem - Taiga","PAGE_DESCRIPTION":"Taiga hemsida med dina viktigaste projekt, alla dina tilldelade användaruppgifter, uppdrag och frågor","EMPTY_WORKING_ON":"Känns det inte lite tomt? Börja arbeta med Taiga så kommer se användningsfall, uppgifter och frågor du arbetar på.","EMPTY_WATCHING":"Följ Användningsfall, Uppgifter och Frågor i dina projekt och få meddelanden om förändringar i dem :)","EMPTY_PROJECT_LIST":"Du har inte än några projekt","WORKING_ON_SECTION":"Arbetar med","WATCHING_SECTION":"Bevakar","DASHBOARD":"Instrumentpanel för projekt"},"EPICS":{"TITLE":"EPOS","SECTION_NAME":"Epos","EPIC":"EPOS","PAGE_TITLE":"Epos - {{projectName}}","PAGE_DESCRIPTION":"Listan med epost för projektet {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ LÄGG TILL EPOS","UNASSIGNED":"Ej tilldelad"},"EMPTY":{"TITLE":"Det ser ut som att det inte finns några epos än","EXPLANATION":"Epost är poster på en högre nivå som omfattar användningsfall.
    Epost är på toppen av hierarkin och kan användas för att grupper användningsfall.","HELP":"Lär dig med om epos"},"TABLE":{"VOTES":"Röster","NAME":"Namn","PROJECT":"Projekt","SPRINT":"Sprint","ASSIGNED_TO":"Tilldelad","STATUS":"Status","PROGRESS":"Framsteg","VIEW_OPTIONS":"Visningsalternativ"},"CREATE":{"TITLE":"Nytt epos","PLACEHOLDER_DESCRIPTION":"Lägg till beskrivande text för att hjälpa andra bättre förstå detta epos","TEAM_REQUIREMENT":"Teamets krav","CLIENT_REQUIREMENT":"Klientkrav","BLOCKED":"Blockerad","BLOCKED_NOTE_PLACEHOLDER":"Varför är detta epos blockerat? ","CREATE_EPIC":"Skapa epos"}},"PROJECTS":{"PAGE_TITLE":"Mina projekt - Taiga","PAGE_DESCRIPTION":"En lista med alla dina projekt som du kan organisera eller skapa ett nytt. ","MY_PROJECTS":"Mina projekt"},"ATTACHMENT":{"SECTION_NAME":"bilagor","TITLE":"{{ fileName }} laddat upp {{ date }}","LIST_VIEW_MODE":"Visningsläge listvy","GALLERY_VIEW_MODE":"Visningsläge galleri","DESCRIPTION":"Skriv en kort beskrivning","DEPRECATED":"(borttagen)","DEPRECATED_FILE":"Borttagen?","ADD":"Lägg till ny bilaga. {{maxFileSizeMsg}}","DROP":"Drag och släpp filer som ska bifogas här!","SHOW_DEPRECATED":"+ visa ogillade bilagor","HIDE_DEPRECATED":"- dölj ogillade bilagor","COUNT_DEPRECATED":"({{ counter }} deprecated)","MAX_UPLOAD_SIZE":"Maximal filstorlek att ladda upp är {{maxFileSize}}","DATE":"DD MM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Det var omöjligt för oss att ladda upp '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Ta bort bilagan ...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"bifogad '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Vi klarade inte att ta bort: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Förra","NEXT":"Nästa"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Redigera","TITLE_ACTION_DELETE_VALUE":"Ta bort","TITLE_ACTION_DELETE_TAG":"Ta bort etikett"},"HELP":"Behöver du hjälp? Besök hjälpsidorna!","PROJECT_DEFAULT_VALUES":{"TITLE":"Standardvärden","SUBTITLE":"Sätt standardvärden för alla ingångsval."},"MEMBERSHIPS":{"TITLE":"Hantera medlemmar","PAGE_TITLE":"Medlemskap - {{projectName}}","ADD_BUTTON":"+ Ny medlem","ADD_BUTTON_TITLE":"Lägg till ny medlem","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Detta projektet har nått sin gräns för ({{members}}) tillåtna medlemmar. Kontakta administratören om du vill utöka gränsen."},"PROJECT_EXPORT":{"TITLE":"Exportera","SUBTITLE":"Exportera ditt projekt som säkerhetskopia eller för att skapa ett nytt projekt baserad på det här projektet. ","EXPORT_BUTTON":"Exportera","EXPORT_BUTTON_TITLE":"Exportera dina projekt","LOADING_TITLE":"Vi skapar en hämtningsfil för dig. ","DUMP_READY":"Din hämtningsfil är klar!","LOADING_MESSAGE":"Vänligen stäng inte den här sidan. ","ASYNC_MESSAGE":"Vi vill skicka dig ett e-postmeddelande när vi är klara.","SYNC_MESSAGE":"Om hämtningen inte startar automatiskt, klick här.","ERROR":"Våra Oompa Loompier har vissa problemer med att skapa din hämtningsfil. Vänligen försök på nytt!","ERROR_BUSY":"Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. "},"MODULES":{"TITLE":"Moduler","EPICS":"Epos","EPICS_DESCRIPTION":"Visualisera och hantera den mest strategiska delen av ditt projekt","BACKLOG":"Inkorg","BACKLOG_DESCRIPTION":"Hantera dina användarhistorier för att organisera visningar av kommande och prioriterade jobb. ","NUMBER_SPRINTS":"Förväntat antal sprintar","NUMBER_SPRINTS_HELP":"0 för ett obestämt antal","NUMBER_US_POINTS":"Förväntat antal totala användningsfallspoäng","NUMBER_US_POINTS_HELP":"0 för ett obestämt nummer","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organisera dina projekt med Lean med den här tavlan. ","ISSUES":"Frågor","ISSUES_DESCRIPTION":"Sök efter buggar, visa frågor eller gör förbättringar relaterad till dina projekt. Missa inte något!","WIKI":"Wiki","WIKI_DESCRIPTION":"Lägg till, modifiera eller ta bort innehåll i samarbetet med andra. Det här är rätt plats för ditt projektdokumentation. ","MEETUP":"Möt upp","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Välj videokonferenssystem","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"Dyker upp i ","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Anpassa","URL_CHAT_ROOM":"Länken till ditt chattrum"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Projektprofil - {{projectName}}","PROJECT_DETAILS":"Projektdetaljer","PROJECT_NAME":"Projektnamn","TAGS":"Etiketter","DESCRIPTION":"Beskrivning","RECRUITING":"Letar detta projekt efter personer? ","RECRUITING_MESSAGE":"Vem letar du efter?","RECRUITING_PLACEHOLDER":"Definiera profilerna du letar efter","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Publika projekt","PRIVATE_PROJECT":"Privata projekt","PRIVATE_OR_PUBLIC":"Vad är skillnaden mellan publika och privata projekt?","DELETE":"Ta bort projekt","CHANGE_LOGO":"Ändra logga","ACTION_USE_DEFAULT_LOGO":"Använd standardbilden","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"Projektet överstiger antalet tillåtna medlemmar för ett publikt projekt","PROJECT_OWNER":"Projektägare","REQUEST_OWNERSHIP":"Efterfråga ägareskap","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Begär att den nuvarande projektägaren {{namn}} överför ägarskap av det här projektet till dig.","REQUEST_OWNERSHIP_BUTTON":"Förfrågan","REQUEST_OWNERSHIP_SUCCESS":"Vi noterar projektägaren","CHANGE_OWNER":"Ända ägare","CHANGE_OWNER_SUCCESS_TITLE":"Ok, din förfrågan har skickats!","CHANGE_OWNER_SUCCESS_DESC":"Vi kommer kontakta dig via email om ändringen av ägarskapet för projektet accepteras eller nekas"},"REPORTS":{"TITLE":"Rapporter","SUBTITLE":"Exportera dina projektdata i CSV-format och skapa dina egna rapporter. ","DESCRIPTION":"Hämta en CSV-fil eller kopiera den genererade länken och öppna i din favorit ordbehandlare eller kalkylark för att skapa dina egna projektdatarapporter. Du kan lätt visualisera och analysera alla dina data. ","HELP":"Hur använda i mitt eget kalkylark?","REGENERATE_TITLE":"Ändra länken","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"eposrapporter","SECTION_TITLE_US":"rapporter för användarhistorier","SECTION_TITLE_TASK":"Rapport för uppgifter","SECTION_TITLE_ISSUE":"Rapporter för ärenden","DOWNLOAD":"Hämta CSV","URL_FIELD_PLACEHOLDER":"Vänligen skapa en ny CSV-länk","TITLE_REGENERATE_URL":"Skapa CSV länk","ACTION_GENERATE_URL":"Skapa länk","ACTION_REGENERATE":"Regenerera","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Ta bort"},"CUSTOM_FIELDS":{"TITLE":"Anpassade fält","SUBTITLE":"Specificera anpassade fält för användarhistorier, uppgifter och ärenden. ","EPIC_DESCRIPTION":"Epos anpassade fält","EPIC_ADD":"Lägg till ett anpassat fält i epos","US_DESCRIPTION":"Användarhistorier för anpassade fält","US_ADD":"Lägg till ett anpassad fält i användarhistorien","TASK_DESCRIPTION":"Anpassade fält för uppgifter","TASK_ADD":"Lägg till anpassade fält i uppgifter","ISSUE_DESCRIPTION":"Anpassade fält för ärenden","ISSUE_ADD":"Anpassade fält för ärenden","FIELD_TYPE_TEXT":"Text","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Flerradig","FIELD_TYPE_DATE":"Datum","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Projektvärden - {{projectName}}","REPLACEMENT":"Alla poster med det här värdet vill ändras till ","ERROR_DELETE_ALL":"Du kan inte ta bort alla värden. "},"PROJECT_VALUES_POINTS":{"TITLE":"Poäng","SUBTITLE":"Specificera antal poäng som användarhistorien ska estimeras till","US_TITLE":"US-poäng","ACTION_ADD":"Lägg till nytt punkt"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioritet","SUBTITLE":"Specificera den prioriteten dina ärenden ska ha","ISSUE_TITLE":"Prioritet för ärenden ","ACTION_ADD":"Lägg till en ny prioritet"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Allvarsgrad","SUBTITLE":"Specificera den allvarsgrad dina ärenden vill ha","ISSUE_TITLE":"Allvarighetsgrad för ärenden","ACTION_ADD":"Lägg till ny allvarlighetsgrad"},"PROJECT_VALUES_STATUS":{"TITLE":"Status","SUBTITLE":"Specificera status för dina användarhistorier, uppgifter och ärenden ska ha i olika faser. ","EPIC_TITLE":"Status för Epics","US_TITLE":"User Story Statuses","TASK_TITLE":"Status för uppgifter","ISSUE_TITLE":"Status för ärenden"},"PROJECT_VALUES_TYPES":{"TITLE":"Typ","SUBTITLE":"Specificera typer av ärenden","ISSUE_TITLE":"Ärendetyper","ACTION_ADD":"Lägg till ny {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiketter","SUBTITLE":"Visa och ändra färgerna på dina taggar","EMPTY":"För närvarande finns inga taggar","EMPTY_SEARCH":"Det ser ut som om vi inte hittade något som matchade din sökning.","ACTION_ADD":"Lägg till etikett","NEW_TAG":"Ny tagg","MIXING_HELP_TEXT":"Välj de taggar du vill slå samman","MIXING_MERGE":"Slå samman taggar","SELECTED":"Valda"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Lägg till ny status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roller - {{projectName}}","WARNING_NO_ROLE":"Var försiktig. Inga roller i ditt projekt kan estimera poängvärden för användarhistorier","HELP_ROLE_ENABLED":"När det är aktivt, vill medlemmarna tilldelad den här rollen kunna estimera punktvärlden för användarhistorier","DISABLE_COMPUTABLE_ALERT_TITLE":"ÄR du säker på att du vill avvaktivera den här rollens beräkningar?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Om du avaktiverar behörigheter för beräkning för rollen {{roleName}} vill alla tidigare beräkningar gjord av den här rollen tas bort. ","COUNT_MEMBERS":"{{ role.members_count }} medlemmar med den här rollen","TITLE_DELETE_ROLE":"Ta bort rollen","REPLACEMENT_ROLE":"Alla användarna med den här rollen vill flyttas till","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Du kan inte ta bort alla värden","EXTERNAL_USER":"Extern användare","NOTE_EXTERNAL_USERS":"Notera: med Extern Användare menar vi alla anonyma användare som inte tillhör Taiga-plattformen, inklusive sökmotorer. Vänligen använd denna rollen med försiktighet."},"THIRD_PARTIES":{"SECRET_KEY":"Hemlig nyckel","PAYLOAD_URL":"Länk för paketinnhåll","VALID_IPS":"Giltig ursprunglig IP-adresser (separerat med ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket-förfrågningar är inte signerad så det bästa är att bekräfta ursprunglig IP. Om fältet är tomt blir det ingen IP-kontroll. "},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab-förfrågningar är inte signerade. Det bästa är att kontrollera ursprunglig IP-adress. Om fältet är tomt vill det inte bli någon IP-kontroll."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webbkrok - {{projectName}}","SECTION_NAME":"Webbkrokar","ADD_NEW":"Lägg till en ny Webbkrok","TYPE_NAME":"Skriv in tjänstens namn","TYPE_PAYLOAD_URL":"Skriv in länken till tjänsten","TYPE_SERVICE_SECRET":"Skriv in tjänstens hemliga nyckel","SAVE":"Spara webbkroken","CANCEL":"Avbryt webbkrok","SHOW_HISTORY":"(Vis historiken)","TEST":"Testa webbkroken","EDIT":"Ändra webkrok","DELETE":"Ta bort webbkrok","REQUEST":"Förfrågan","RESEND_REQUEST":"Skicka på nytt förfrågan","HEADERS":"Rubriker","PAYLOAD":"Tjänster","RESPONSE":"Respons","DATE":"DD MM YYY [at} hh:mm:ss","ACTION_HIDE_HISTORY":"(Dölj historiken)","ACTION_HIDE_HISTORY_TITLE":"Dölj detaljer för historiken","ACTION_SHOW_HISTORY":"(Vis historiken)","ACTION_SHOW_HISTORY_TITLE":"Visa detaljer för historiken","WEBHOOK_NAME":"Webbkrok '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Anpassade egenskaper - {{projectName}}","ADD":"Lägg till ett anpassad fält","EDIT":"Ändra anpassad fält","DELETE":"Ta bort anpassad fält","SAVE_TITLE":"Spara anpassad fält","CANCEL_TITLE":"Avbryt det du skapar","SET_FIELD_NAME":"Sätt ditt anpassade fältnamn","SET_FIELD_DESCRIPTION":"Sätt beskrivning för anpassad fält","FIELD_TYPE_DEFAULT":"-- välj en --","ACTION_UPDATE":"Uppdatera anpassad fält","ACTION_CANCEL_EDITION":"Avbryt ändringen"},"MEMBERSHIP":{"COLUMN_MEMBER":"Medlem","COLUMN_ADMIN":"Administrator","COLUMN_ROLE":"Roll","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Aktiv","STATUS_PENDING":"Avvaktar","DELETE_MEMBER":"Ta bort medlem","RESEND":"Skicka på nytt","SUCCESS_SEND_INVITATION":"Vi har skickat på nytt invitationen till '{{email}}'.","SUCCESS_DELETE":"Vi har tagit bort {{message}}.","ERROR_DELETE":"Vi har inte lyckats att ta bort {{message}}.","DEFAULT_DELETE_MESSAGE":"den här invitationen till {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Standardvärde för poängväljaren","LABEL_TASK_STATUS":"Standardvärdet för val av uppgiftsstatus","LABEL_ISSUE_TYPE":"Standardvärde för ärendetyp-väljare","LABEL_ISSUE_STATUS":"Standardvärde för väljare för ärendestatus","LABEL_PRIORITY":"Standardvärde för val av prioritet","LABEL_SEVERITY":"Standardvärde för val av allvarlighet"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Skriv ett namn för den nya statusen","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Skriv ett namn för det nya elementet"},"US_STATUS":{"ACTION_ADD_STATUS":"Lägg till ny status","IS_ARCHIVED_COLUMN":"Arkiverad","IS_CLOSED_COLUMN":"Stängd","WIP_LIMIT_COLUMN":"WIP-begränsning","PLACEHOLDER_WRITE_NAME":"Skriv ett namn för den nya statusen"},"MENU":{"PROJECT":"Projekt","ATTRIBUTES":"Egenskaper","MEMBERS":"Medlemmar","PERMISSIONS":"Behörigheter","INTEGRATIONS":"Integrationer"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Poäng","PRIORITIES":"Prioritet","SEVERITIES":"Allvarsgrad","TYPES":"Typ","CUSTOM_FIELDS":"Anpassade fält","TAGS":"Etiketter","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roller","ACTION_NEW_ROLE":"+ Ny roll","TITLE_ACTION_NEW_ROLE":"Lägg till ny roll"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Vill du bli den nya projektägaren?","PRIVATE":"Privat","ACCEPTED_PROJECT_OWNERNSHIP":"Gratulerar. Du är nu den nya projektägaren.","REJECTED_PROJECT_OWNERNSHIP":"OK. Vi kontaktar nuvarande projektägare.","ACCEPT":"Acceptera","REJECT":"Avvisa","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Vill du lämna en kommentar till projektägaren?","UNLIMITED_PROJECTS":"Obegränsad","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Ändra profil","CLOSED_US":"Stängd US","PROJECTS":"Projekt","PROJECTS_EMPTY":"{{username}} har inga projekt än","CONTACTS":"Kontakter","CONTACTS_EMPTY":"{{username}} har inte några kontakter än","CURRENT_USER_CONTACTS_EMPTY":"Du har inga kontakter än","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"De du arbetar med på Taiga vill automatiskt bli dina kontakter. ","TABS":{"ACTIVITY_TAB":"Tidslinje","ACTIVITY_TAB_TITLE":"Visa alla aktiviteter för den här användaren","PROJECTS_TAB":"Projekt","PROJECTS_TAB_TITLE":"Lista på alla projekt som användaren är medlem i","LIKES_TAB":"Gillar","LIKES_TAB_TITLE":"Lista allt vad användaren gillar","VOTES_TAB":"Röster","VOTES_TAB_TITLE":"Lista alla röster från den här användaren","WATCHED_TAB":"Visad","WATCHED_TAB_TITLE":"Lista alla element som användaren ser","CONTACTS_TAB":"Kontakter","CONTACTS_TAB_TITLE":"Lista alla kontakter för den här användaren"}},"PROFILE_SIDEBAR":{"TITLE":"Din profil","DESCRIPTION":"Folk kan se allt vad du gör och vad du arbetar med. Lägg till en trevlig bio för att förhöja din information. ","ADD_INFO":"Ändra bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Skriv något ...","FILTER_TYPE_ALL":"Alla","FILTER_TYPE_ALL_TITLE":"Visa alla","FILTER_TYPE_PROJECTS":"Projekt","FILTER_TYPE_PROJECTS_TITLE":"Visa bara projekt","FILTER_TYPE_EPICS":"Epos","FILTER_TYPE_EPICS_TITLE":"Visa endast epos","FILTER_TYPE_USER_STORIES":"Berättelser","FILTER_TYPE_USER_STORIES_TITLE":"Visa endast användarhistorier","FILTER_TYPE_TASKS":"Uppgift","FILTER_TYPE_TASKS_TITLE":"Visar endast uppgifter","FILTER_TYPE_ISSUES":"Ärenden","FILTER_TYPE_ISSUES_TITLE":"Visa bara ärenden ","EMPTY_TITLE":"Det verkar som om vi inte har något att visa just nu"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Organisera dina projekt och sätt in de mest använda här.
    De första 10 toppprojekten vill visas i toppnavigeringens projektlista. ","PRIVATE":"Privata projekt","LOOKING_FOR_PEOPLE":"Detta projekt söker efter fler personer","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, en{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Blockerat projekt","THIS_PROJECT_IS_BLOCKED":"Detta projekt är tillfälligt blockerat","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Kontakta administratören för att avblockera dina projekt."},"SECTION":{"SEARCH":"Sök","TIMELINE":"Tidslinje","EPICS":"Epos","BACKLOG":"Inkorg","KANBAN":"Kanban","ISSUES":"Ärenden","WIKI":"Wiki","TEAM":"Arbetsgrupp","MEETUP":"Möt upp","ADMIN":"Administrator"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Skapa projekt","MANAGE_PROJECTS":"Hantera projekt","TITLE_CREATE_PROJECT":"Skapa projekt","HELP_TITLE":"Taiga hjälpsida","HELP":"Hjälp","HOMEPAGE":"Webbplats","FEEDBACK_TITLE":"Skicka återkoppling","FEEDBACK":"Återkoppling","NOTIFICATIONS_TITLE":"Ändra inställningar för dina notifieringar","NOTIFICATIONS":"Notifieringar","VIEW_PROFILE_TITLE":"Visa profil","VIEW_PROFILE":"Visa profil","EDIT_PROFILE_TITLE":"Ändra din profil","EDIT_PROFILE":"Ändra profil","CHANGE_PASSWORD_TITLE":"Byt lösenord","CHANGE_PASSWORD":"Byt lösenord","DASHBOARD_TITLE":"Instrumentpanel","DISCOVER_TITLE":"Upptäck nya rörliga projekt","DISCOVER":"Upptäck"},"LIKE_BUTTON":{"LIKE":"Gillar","LIKED":"Likte","UNLIKE":"Ogillar","BUTTON_TITLE":"Gilla eller ogilla projektet","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Visa projektet och lägg till egenskaper för avisering","WATCH":"Visa","WATCHING":"Bevakar","COUNTER_TITLE":"{total, plural, en{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Motta alla notifieringar","NOTIFY_ALL_TITLE":"Motta alla notifieringar för det här projektet","NOTIFY_INVOLVED":"Endast involverad","NOTIFY_INVOLVED_TITLE":"Motta notifieringar bara när du är involverad","UNWATCH":"Frånkoppla visning","UNWATCH_TITLE":"Visa inte projektet"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Kontakta projektet"},"CREATE":{"TITLE":"Skapa projekt","CHOOSE_TEMPLATE":"Vilken mall passar ditt projekt bättre?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritera och lös dina uppgifter i korta tidscykler.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Kopiera projekt","DUPLICATE_DESC":"Påbörja städning och behåll din konfiguration","IMPORT":"Importerar projekt","IMPORT_DESC":"Importera dina projekt ifrån multipla platformer till Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"Du kommer vara ensam i detta projektet","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Baksida","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Publika projekt","PRIVATE_PROJECT":"Privat Projekt"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Projektnamn","PROJECT_DESCRIPTION":"Projektbeskrivning"},"DUPLICATE":{"TITLE":"Kopiera Projekt","DESCRIPTION":"Påbörja städning och behåll din konfiguration","SELECT_PLACEHOLDER":"Välj ett befintligt projekt för att kopiera"},"IMPORT":{"TITLE":"Importera Projekt","DESCRIPTION":"Importera dina projekt ifrån multipla platformer till Taiga","ASYNC_IN_PROGRESS_TITLE":"Våra Oompa Loompier importerar ditt projekt","ASYNC_IN_PROGRESS_MESSAGE":"Den här processen kan ta några minuter
    . Vi vill skicka dig en e-post när det blir klart. ","UPLOAD_IN_PROGRESS_MESSAGE":"Laddat upp {{uploadedSize}} av {{totalSize}}","ERROR":"Våra Oompa Loompier har problem med att importera din hämtningsfil. Vänligen försök igen. ","ERROR_TOO_MANY_REQUEST":"Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. ","ERROR_MESSAGE":"Våra Oompa Loompier har lite problem med att importera dina hämtningsdata: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})","SYNC_SUCCESS":"Ditt projekt är korrekt importerad","IMPORT":"Importera","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Eller om du vill, sök i dina kontakter","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Projektmedlem","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Välj användare","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Tilldela","PROJECT_SELECTOR":{"NO_RESULTS":"Det ser ut som om vi inte hittade något som matchade din sökning.","ACTION_SEARCH":"sök","ACTION_BACK":"Baksida"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"Projektet du försöker importera är publikt och har fler än {{members}} medlemmar."}},"IN_PROGRESS":{"TITLE":"Importerar projekt","DESCRIPTION":"Den här processen kan ta en liten stund, vänligen försök med fönstret öppet. "},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"Det finns fortfarande oidentifierade användare. Korten som är tilldelade till de personerna, kommer fortsatt att vara otilldelade. Kontrollera alla kontakter för att inte förlora informationen.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Importera ditt Taiga projekt"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"Det verkar som om du har några tavlor på Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"Det verkar som om du har några projekt på GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Välj projekt som du vill importera","NO_PROJECTS":"Det verkar som om du inte har några projekt i Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(konfigurationshjälp)","CHOOSE_PROJECT":"Välj ett projekt eller en tavla du vill importera","NO_PROJECTS":"Det verkar som om du inte har några projekt eller tavlor i Jira","URL":"Din Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Frågor","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Är du säker på att du vill radera kontot?","CANCEL":"Tillbaka till inställningar","ACCEPT":"Ta bort konto","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Ta bort projekt","QUESTION":"Är du säker på att du vill ta bort projektet?","SUBTITLE":"Alla projektdata (användarhistorier, uppgifter, ärenden, sprintar och wikisidor) vill raderas! :-(","CONFIRM":"Ja! Jag är verkligen säker på det"},"ASSIGNED_TO":{"SELECT":"Välj att tilldela till","SEARCH":"Sök efter användare"},"ADD_MEMBER":{"TITLE":"Ny medlem","PLACEHOLDER":"Filtrera användare eller skriv ett mail för att bjuda in","ADD_EMAIL":"Lägg till e-post","REMOVE":"Ta bort","INVITE":"Bjud In","CHOOSE_ROLE":"Välj en roll","PLACEHOLDER_INVITATION_TEXT":"(Valfritt) Lägg till en personlig hälsning till invitationen. Berätta något trevligt till din nya projektmedlem ;-)","HELP_TEXT":"Om användaren redan är registrerad på Taiga vill hen bli lagt till automatiskt. I annat fall vill de motta en invitation. "},"FEEDBACK":{"TITLE":"Berätta för oss ...","COMMENT":"... en bug, några förslag, något spännande ... eller din värsta mardröm med Taiga","ACTION_SEND":"Skicka återkoppling"},"SEARCH":{"TITLE":"Sök","PLACEHOLDER_SEARCH":"Vad letar du efter?"},"ADD_EDIT_SPRINT":{"TITLE":"Ny sprint","PLACEHOLDER_SPRINT_NAME":"sprintens namn","PLACEHOLDER_SPRINT_START":"Beräknad start","PLACEHOLDER_SPRINT_END":"Beräknad slutdato","ACTION_DELETE_SPRINT":"Vill du verkligen ta bort den här sprinten?","TITLE_ACTION_DELETE_SPRINT":"ta bort sprint","LAST_SPRINT_NAME":"senaste sprint är {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Lägg till ärende","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Ta bort sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Valfritt) Lägg till en personlig hälsning till invitationen. Berätta något trevligt till din nya projektmedlem ;-)","PLACEHOLDER_TYPE_EMAIL":"Skriv in en e-postadress","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Ändra projektägaren"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Lägg till kommentar","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Skicka ett e-postmeddelande till","WARNING":"Detta mailet kommer mottagas utav projektadministratörerna","PLACEHOLDER":"Skriv ditt meddelande","SEND":"Skicka"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Vilket är projektet?","CHOOSE_PROJECT_FROM":"Vilket är projektet?","SUBJECT":"Titel","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Det ser ut som om vi inte hittade något som matchade din sökning."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epost {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Beskrivning: {{epicDescription}}","SECTION_NAME":"Epost","ERROR_UNLINK_RELATED_USERSTORY":"Vi har inte lyckats att ta bort: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Skapa en relation med","NEW_USERSTORY":"Ny användarhistorie","EXISTING_USERSTORY":"Befintligt användningsfal","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Titel","SUBJECT_BULK_MODE":"Ämne (infoga bulk)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"Det ser ut som om vi inte hittade något som matchade din sökning.","FILTER_USERSTORIES":"Filtrera användningsfall","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Radera epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Användarhistorier {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. avslutad{{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} av {{userStoryTotalTasks}} tasks closed). Poäng: {{userStoryPoints}}. Beskrivning: {{userStoryDescription}}","SECTION_NAME":"Användarhistorie","LINK_TASKBOARD":"Uppgiftstavla","TITLE_LINK_TASKBOARD":"Gå till uppgiftstavlan","TOTAL_POINTS":"totalpoäng","ADD":"+ Lägg till ny användarhistorie","ADD_BULK":"Lägg till flera nya användarhistorier","PROMOTED":"Denna US har blivit flyttat från ärende: ","TITLE_LINK_GO_TO_ISSUE":"Gå till ärende","TITLE_DELETE_ACTION":"Ta bort användarhistorien","LIGHTBOX_TITLE_BLOKING_US":"Blockera oss","NOT_ESTIMATED":"Ej beräknad","OWNER_US":"Denna användarstoryn tillhör","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Mer information","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Ändra länk","CLOSE":"Stäng","SYNCHRONIZE_LINK":"synkronisera med Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Behöver du någon för den här uppgiften?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Kommentar raderad av {{user}}","COMMENTS_COUNT":"{{comments}} Kommentarer","OLDER_FIRST":"Äldre först","RECENT_FIRST":"Senast först","COMMENT":"Kommentarer","EDITED_COMMENT":"Redigerad:","SHOW_HISTORY":"Se historik","TYPE_NEW_COMMENT":"Skriv en ny kommentar här","SHOW_DELETED":"Visa raderade kommentarer","HIDE_DELETED":"Dölj raderade kommentarer","DELETE":"Ta bort kommentar","RESTORE":"Hämta tillbaka tidigare kommentarer","HISTORY":{"TITLE":"Aktiviteter"}},"ACTIVITY":{"TITLE":"Aktiviteter","ACTIVITIES_COUNT":"{{activities}} Aktiviteter","TAGS_ADDED":"taggar tillagda","TAGS_REMOVED":"borttagna taggar:","US_POINTS":"{{role}} poäng","NEW_ATTACHMENT":"ny bilaga:","DELETED_ATTACHMENT":"radera bilaga:","UPDATED_ATTACHMENT":"uppdatera bifogat ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"Uppdatera anpassat attribut","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Teamets behov","CLIENT_REQUIREMENT":"Kräver beställare","BLOCKED":"Blockerad","VALUES":{"NOT_SET":"not set","UNASSIGNED":"otilldelad"},"FIELDS":{"SUBJECT":"titel","DESCRIPTION":"beskrivning","PRIORITY":"prioritet","SEVERITY":"Allvarsgrad","STATUS":"status","TYPE":"typ","ASSIGNED_TO":"tilldelad till","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"färg"}},"BACKLOG":{"PAGE_TITLE":"Inkorg - {{projectName}}","PAGE_DESCRIPTION":"Panelen för inkorgen, användarhistorier och sprintar i projektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Inkorg","CUSTOMIZE_GRAPH":"Anpassa din graf för inkorgen","CUSTOMIZE_GRAPH_TEXT":"För att få en fin graf som hjälper dig att följa projektets gång kan du sätta upp poäng och sprintar genom ","CUSTOMIZE_GRAPH_ADMIN":"Administrator","CUSTOMIZE_GRAPH_TITLE":"Lägg till poäng och sprintar via Administratorn","MOVE_US_TO_CURRENT_SPRINT":"Flytta till nuvarande sprint","MOVE_US_TO_LATEST_SPRINT":"Move to latest Sprint","EMPTY":"Inkorgen är tom!","CREATE_NEW_US":"Skapa en ny US","CREATE_NEW_US_EMPTY_HELP":"Du kanske vill skapa en ny användarhistorie","EXCESS_OF_POINTS":"Poängöverskott","PENDING_POINTS":"Poäng som väntar","CLOSED_POINTS":"stängd","COMPACT_SPRINT":"Komprimera sprint","GO_TO_TASKBOARD":"Gå till uppgiftstavlan till {{::name}}","EDIT_SPRINT":"Ändra sprint","TOTAL_POINTS":"totalt","STATUS_NAME":"Status namn","SORTABLE_FILTER_ERROR":"Du kan inte lägga till i inkorgen när filter är öppen","DOOMLINE":"Projektbegränsningar [Doomline]","CHART":{"XAXIS_LABEL":"Sprintar","YAXIS_LABEL":"Poäng","OPTIMAL":"Optimala poäng som avvaktar sprinten \"{{sprintName}}\" skulle varit {{value}}","REAL":"Verkliga poäng som avvaktar för sprinten \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Ökande poäng för arbetsgruppens krav för sprint \"{{sprintName}}\" är {{value}}","INCREMENT_CLIENT":"Ökande poäng för beställarkrav till sprinten \"{{sprintName}}\" är {{value}}"},"TAGS":{"TOGGLE":"Växla visning av etiketter","SHOW":"Visa etiketter","HIDE":"Dölj etiketter"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Användarhistorie","TITLE_COLUMN_POINTS":"Välj visning per roll"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"totalt
    poäng","COMPLETED_POINTS":"avslutad
    poäng","OPEN_TASKS":"öppna
    uppgifter\n","CLOSED_TASKS":"stängd
    uppgifer","IOCAINE_DOSES":"iocaine
    doser","SHOW_STATISTICS_TITLE":"Visa statistik","TOGGLE_BAKLOG_GRAPH":"Visa/Dölj burn down-graf","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"projekt
    poäng","DEFINED_POINTS":"definiera
    poäng","CLOSED_POINTS":"stängda
    poäng","POINTS_PER_SPRINT":"poäng/
    sprint"},"FILTERS":{"TOGGLE":"Växla filtrens synlighet","HIDE":"Dölj filter","SHOW":"Visa filter"},"SPRINTS":{"TITLE":"SPRINTAR","DATE":"YYYY-MM-DD","LINK_TASKBOARD":"Sprint uppgiftspanel","TITLE_LINK_TASKBOARD":"Gå till uppgiftspanelen för \"{{name}}\"","EMPTY":"Det är inga sprintar än","WARNING_EMPTY_SPRINT_ANONYMOUS":"Den här sprinten har inga användarhistorier","WARNING_EMPTY_SPRINT":"Här kan du föra in användarhistorier från inkorgen för att starta en ny sprint","TITLE_ACTION_NEW_SPRINT":"Lägg till ny sprint","TEXT_ACTION_NEW_SPRINT":"Du kanske vill skapa en ny sprint i ditt projekt","ACTION_SHOW_CLOSED_SPRINTS":"Visa stängda sprintar","ACTION_HIDE_CLOSED_SPRINTS":"Dölj stängda sprintar"}},"ERROR":{"TEXT1":"Någonting har hänt och våra Oompa Loompier arbetar på att hitta en lösning. ","NOT_FOUND":"Hittade inte","NOT_FOUND_TEXT":"Fel 404. Sidan du letar efter existerar inte längre. Du kan gå tillbaka till TAIGA hemsidan och se om du hittar vad du letar efter. ","PERMISSION_DENIED":"Du har inte behöriget","PERMISSION_DENIED_TEXT":"Du har inte behörighet till den här sidan. ","VERSION_ERROR":"Någon inuti Taiga har ändrat den här tidigare och våra Oompa Loompier kan inte lägga till din ändring. Vänligen hämta sidan på nytt och lägg till ändringarna (de här ändringar du gör just nu förlorar du). "},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint uppgiftstavla - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} till {{endDate}}) av {{projectName}}. Avslutad {{completedPercentage}} % ({{completedPoints}} av {{totalPoints}} points). {{openTasks}} öppna ärenden av {{totalTasks}}.","SECTION_NAME":"Uppgiftstavla","TITLE_ACTION_ADD":"Lägg till en ny uppgift","TITLE_ACTION_ADD_BULK":"Lägg till några flera nya uppgifter","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Tilldela uppgift","PLACEHOLDER_CARD_TITLE":"Det har kan vara en uppgift","PLACEHOLDER_CARD_TEXT":"Dela användarhistorier upp i uppgifter och spåra dem separat","TABLE":{"COLUMN":"Användarhistorie","TITLE_ACTION_FOLD":"Vika i hop kolumnen","TITLE_ACTION_UNFOLD":"Veckla ut kolumnen","TITLE_ACTION_FOLD_ROW":"Vika i hop raden","TITLE_ACTION_UNFOLD_ROW":"Veckla ut rad","FIELD_POINTS":"poäng","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Dagar","YAXIS_LABEL":"Poäng","OPTIMAL":"Optimala poäng som väntar för dag {{formattedDate}} ska vara {{roundedValue}}","REAL":"Verkliga poäng som väntar för dag {{formattedDate}} är {{roundedValue}}","DATE":"DD MM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Uppgift {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Beskrivning: {{taskDescription}}","SECTION_NAME":"Uppgift","LINK_TASKBOARD":"Uppgiftstavla","TITLE_LINK_TASKBOARD":"Gå till uppgiftstavlan","PLACEHOLDER_SUBJECT":"Skriv in den nya uppgiftens titel","TITLE_SELECT_STATUS":"Status namn","OWNER_US":"Den här uppgiften tillhör","TITLE_LINK_GO_OWNER":"Gå till användarhistorie","TITLE_DELETE_ACTION":"Ta bort uppgift","LIGHTBOX_TITLE_BLOKING_TASK":"Blockerad uppgift","FIELDS":{"IS_IOCAINE":"Är iocaine"},"TITLE_ACTION_IOCAINE":"Känner du dig lite bortkommen med en uppgift? Försäkra dig om att andra känner till uppgiften när du klickar på Iocaine-knappen när du ändrar uppgiften. Det är möjligt att bli immun till det här (påhittade) dödliga giftet om du tar små mängder över tid - och du kan även så småningom om bli bättre på vad du gör när du då och då tar på dig större utmaningar!"},"NOTIFICATION":{"OK":"Allt är OK","WARNING":"Ojsan, något har hänt ...","WARNING_TEXT":"Våra Oompa Loompier är ledsna, dina ändringar gick inte att spara!","SAVED":"Vår oompa loompier har sparat alla dina ändringar!","CLOSE":"Stäng avisering","MAIL":"Notifieringar via e-post","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Är du säker på att du vill radera?"},"CANCEL_ACCOUNT":{"TITLE":"Ta bort ditt konto","SUBTITLE":"Vi beklagar att du lämnar Taiga, men hoppas att du hade det trevligt i alla fall :-)","PLACEHOLDER_INPUT_TOKEN":"avbryt kontoförekomsten","ACTION_LEAVING":"Ja. Jag lämnar det!","SUCCESS":"Våra Oompa Loompier har tagit bort ditt konto"},"CHANGE_EMAIL_FORM":{"TITLE":"Ändra din e-postadress","SUBTITLE":"Ett klick mera och din e-post uppdateras!","PLACEHOLDER_INPUT_TOKEN":"ändra e-postförekomsten","ACTION_CHANGE_EMAIL":"Ändra din e-postadress","SUCCESS":"Våra Oompa Loompier uppdaterade din e-postadress"},"ISSUES":{"PAGE_TITLE":"Ärenden - {{projectName}}","PAGE_DESCRIPTION":"Ärenden som listas för projektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"ärende","ACTION_NEW_ISSUE":"+ NYTT ÄRENDE","ACTION_PROMOTE_TO_US":"Flytta till användarhistorie","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Ärendet har flyttats till US:","EXTERNAL_REFERENCE":"Den här uppgiften är skapat från","GO_TO_EXTERNAL_REFERENCE":"Gå till början","ACTION_DELETE":"Ta bort ärende","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blockerad ärende","LINK_TASKBOARD":"Uppgiftstavla","TITLE_LINK_TASKBOARD":"Gå till uppgiftstavlan","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioritet","SEVERITY":"Allvarsgrad","TYPE":"Typ"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Flytta det här ärendet till en ny användarhistorie","MESSAGE":"Är du säker på att du vill skapa en ny US från det här ärendet?"},"TABLE":{"COLUMNS":{"TYPE":"Typ","SEVERITY":"Allvarsgrad","PRIORITY":"Prioritet","SUBJECT":"Titel","VOTES":"Röster","STATUS":"Status","MODIFIED":"Modifierad","ASSIGNED_TO":"Tilldelad till"},"TITLE_ACTION_CHANGE_STATUS":"Ändra status","TITLE_ACTION_ASSIGNED_TO":"Tilldelad till","BLOCKED":"Blockerad","EMPTY":{"TITLE":"Det är inte några ärenden att rapportera","SUBTITLE":"Hittade du ett ärende?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Ärende {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Typ: {{issueType}}, Prioritet: {{issuePriority}}. Allvarlighetsgrad: {{issueSeverity}}. Beskrivning: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Kanbanpanelet, med projekt {{projectName}}: {{projectDescription}} användarhistorier. ","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Vika i hop kolumnen","TITLE_ACTION_UNFOLD":"Veckla ut kolumnen","TITLE_ACTION_ADD_US":"Lägg till ny användarhistorie","TITLE_ACTION_ADD_BULK":"Lägg till flera nya","ACTION_SHOW_ARCHIVED":"Visa arkiverad","ACTION_HIDE_ARCHIVED":"Dölj arkiverad","HIDDEN_USER_STORIES":"Användarhistorien för den här statusen är dolt som standard","PLACEHOLDER_CARD_TITLE":"Detta är dina användarhistorier","PLACEHOLDER_CARD_TEXT":"Användarhistorier behöver även underuppgifter för att separera kraven."},"SEARCH":{"PAGE_TITLE":"Sök - {{projectName}}","PAGE_DESCRIPTION":"Sök på vad som helst, användarhistorier, uppgifter, ärenden och wiki-innehåll i projektet {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epos","FILTER_USER_STORIES":"Användarhistorier","FILTER_ISSUES":"Ärenden","FILTER_TASKS":"Uppgift","FILTER_WIKI":"Wiki-sidor","PLACEHOLDER_SEARCH":"Sök i ...","TITLE_ACTION_SEARCH":"sök","EMPTY_TITLE":"Det ser ut som om vi inte hittade något för ditt sök. ","EMPTY_DESCRIPTION":"Kanske du kan försöka en av flikarna ovan eller sök på nytt"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Panelen för arbetsgrupper visar alla medlemmar i projektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Arbetsgrupp","PLACEHOLDER_INPUT_SEARCH":"Sök på hela namnet ...","COLUMN_MR_WOLF":"Herr Hansson","EXPLANATION_COLUMN_MR_WOLF":"Stängda ärenden","COLUMN_IOCAINE":"Iocaine-drinkare","EXPLANATION_COLUMN_IOCAINE":"Tagna iocaine-doser","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Ändrade wiki-sidor","COLUMN_BUG_HUNTER":"Buggjägare","EXPLANATION_COLUMN_BUG_HUNTER":"Rapporterade ärenden","COLUMN_NIGHT_SHIFT":"Nattarbete","EXPLANATION_COLUMN_NIGHT_SHIFT":"Stängda uppgifter","COLUMN_TOTAL_POWER":"Totalkraft","EXPLANATION_COLUMN_TOTAL_POWER":"Totalpoäng","SECTION_TITLE_TEAM":"Arbetsgrupp >","SECTION_FILTER_ALL":"Alla","CONFIRM_LEAVE_PROJECT":"Är du säker på att du vill lämna projektet?","ACTION_LEAVE_PROJECT":"Lämna det här projektet"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. size: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Inställningar för användare","USER_PROFILE":"Användarprofil","CHANGE_PASSWORD":"Byt lösenord","EMAIL_NOTIFICATIONS":"E-postnotifieringar","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"E-postnotifieringar","COLUMN_PROJECT":"Projekt","COLUMN_RECEIVE_ALL":"Motta alla","COLUMN_ONLY_INVOLVED":"Bara involverade","COLUMN_NO_NOTIFICATIONS":"Inga notifieringar","OPTION_ALL":"Alla","OPTION_INVOLVED":"Involverad","OPTION_NONE":"Ingen"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projekt","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projekt"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Använd standardbilden","ACTION_DELETE_ACCOUNT":"Ta bort Taiga-kontot","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Kontrollera din inbox!
    Vi har skickad dig ett e-postmeddelande
    med instruktioner för hur du sätter upp din nya adress","CHANGE_PHOTO":"Ändra foto","FIELD":{"USERNAME":"Användarnamn","EMAIL":"E-post","FULL_NAME":"Hela namnet","PLACEHOLDER_FULL_NAME":"Skriv in hela namnet (ex. Medelsvensson)","BIO":"Personlig bio (max. 210 tecken)","PLACEHOLDER_BIO":"Berätta något om dig själv","LANGUAGE":"Språk","LANGUAGE_DEFAULT":"-- använda standardspråk --","THEME":"Tema","THEME_DEFAULT":"-- använd standardtema --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Senaste ändringar utförd {{lastModifiedDate}} ({{totalEditions}} editions in total) Innehållt: {{ wikiPageContent }}","DATETIME":"YYYY-MM-DD HH:mm","REMOVE":"Ta bort den här wiki-sidan","DELETE_LIGHTBOX_TITLE":"Ta bort Wiki-sida","DELETE_LINK_TITLE":"Ta bort wiki-länk","NAVIGATION":{"HOME":"Huvudsida","SECTION_NAME":"BOKMÄRKEN","ACTION_ADD_LINK":"Lägg till bokmärke","ALL_PAGES":"Alla wiki-sidor"},"SUMMARY":{"TIMES_EDITED":"gånger
    ändrad","LAST_EDIT":"senaste
    ändring","LAST_MODIFICATION":"senast modifierad"},"SECTION_PAGES_LIST":"Alla sidor","PAGES_LIST_COLUMNS":{"TITLE":"Titel","EDITIONS":"Editions","CREATED":"Skapad","MODIFIED":"Modifierad","CREATOR":"Skapare","LAST_MODIFIER":"Senaste modifiering"}},"HINTS":{"SECTION_NAME":"Tips","LINK":"Om du önskar att veta hur du ska använda det - besök vår hjälpsida ","LINK_TITLE":"Besök vår hjälpsida","HINT1_TITLE":"Visste du att du kan importera och exportera projekten?","HINT1_TEXT":"Det gör det möjligt att extrahera alla dina data från en Taiga och flytta det till en annan. ","HINT2_TITLE":"Visste du att du kan skapa anpassade fält?","HINT2_TEXT":"Arbetsgrupper kan skapa anpassade flexibla fält för att använda specifika data som passar arbetsflödet. ","HINT3_TITLE":"Omorganizera dina projekt så de blir mera relevanta för dig","HINT3_TEXT":"De 10 projekten är listad och du har åtkomst till dem på verktyglinjen på toppen av sidan. ","HINT4_TITLE":"Har du glömt vad du jobbade på?","HINT4_TEXT":"Du behöver inte bekymra dig. På vårt instrumentpanel vill du hitta öppna uppgifter, ärenden och användarhistorier sorterad efter hur du arbetar med dem. "},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} har laddat upp en ny bilaga i {{obj_name}}","US_CREATED":"{{username}} har skapat en ny US {{obj_name}} i {{project_name}}","ISSUE_CREATED":"{{username}} har skapat en ny uppgift {{obj_name}} i {{project_name}}","TASK_CREATED":"{{username}} har skapat en ny uppgift {{obj_name}} i {{project_name}}","TASK_CREATED_WITH_US":"{{username}} har skapat en ny uppgift {{obj_name}} i {{project_name}} som hör till US {{us_name}}","WIKI_CREATED":"{{username}} skapade en ny wiki-sida {{obj_name}} i {{project_name}}","MILESTONE_CREATED":"{{username}} har skapad en ny sprint {{obj_name}} i {{project_name}}","EPIC_CREATED":"{{username}} har skapat en ny epic {{obj_name}} i {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} skapade projektet {{project_name}}","MILESTONE_UPDATED":"{{username}} har uppdaterad sprinten {{obj_name}}","US_UPDATED":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" i US {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för US {{obj_name}} till {{new_value}}","US_UPDATED_POINTS":"{{username}} har uppdaterad '{{role_name}}' poäng av US {{obj_name}} till {{new_value}}","ISSUE_UPDATED":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" i ärendet {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för ärendet {{obj_name}} till {{new_value}}","TASK_UPDATED":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för uppgiften {{obj_name}} till {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för uppgiften {{obj_name}} till {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för uppgiften {{obj_name}} som tillhör US {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för uppgiften {{obj_name}} som tillhör US {{us_name}} till {{new_value}}","WIKI_UPDATED":"{{username}} har uppdaterad wiki-sidan {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} har kommenterad i {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} har kommenterad i ärendet {{obj_name}}","NEW_COMMENT_TASK":"{{username}} har kommenterad uppgiften {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} har en ny medlem","US_ADDED_MILESTONE":"{{username}} har lagt till US {{obj_name}} till {{sprint_name}}","US_MOVED":"{{username}} har flyttat US {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} har lagt till US {{obj_name}} till inkorgen","BLOCKED":"{{username}} har blockerad {{obj_name}}","UNBLOCKED":"{{username}} har tagit bort blockeringen för {{obj_name}}","NEW_USER":"{{username}} har blitt medlem i Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"ärende","TASK":"Uppgift"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"En extern app kräver verifiering","PAGE_DESCRIPTION":"En extern app kräver verifiering","AUTHORIZATION_REQUEST":"Auktorisera {{application}} för att använda det med ditt Taiga-konto?","LOGIN_WITH_ANOTHER_USER":"Logga in med ett annat användarnamn","AUTHORIZE_APP":"Auktorisera appen","CANCEL":"Avbryt"},"JOYRIDE":{"NAV":{"NEXT":"Nästa","BACK":"Baksida","SKIP":"Skip","DONE":"Färdig"},"DASHBOARD":{"STEP1":{"TITLE":"Ditt projekt","TEXT":"välkommen! Her hittar du projekt du är involverad i."},"STEP2":{"TITLE":"Arbetar med","TEXT":"Här kan du hitta användarhistorier, uppgifter och ärenden som du arbetar på."},"STEP3":{"TITLE":"Bevakar","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"Du arbetar redan med Taiga ;)"},"STEP4":{"TITLE":"Låt oss börja","TEXT1":"Du kan starta att skapa ditt första Taiga-projekt.","TEXT2":"Lycka till!"}},"BACKLOG":{"STEP1":{"TITLE":"Uppsummering projekt","TEXT1":"Har kan du se ditt projekts status.","TEXT2":"Du kanändra varje del av projektinställningarna i Admin."},"STEP2":{"TITLE":"Produkt-inkorg","TEXT":"Inkorgen består av kravlistor (användarhistorier) för projektet. Det är här du planerar dina sprintar."},"STEP3":{"TITLE":"Sprintar","TEXT":"Sprintar är korta tidsperioder (normalt 2 veckor) där specifika arbetsuppgifter ska utföras eller levereras. "},"STEP4":{"TITLE":"Användarhistorie","TEXT":"Det här är kraven på en hög nivå. Du kan lägga till dem i inkorgen och dra dem till sprinten som de ska ligga i."}},"KANBAN":{"STEP1":{"TITLE":"Anpassa ditt arbetsflöde","TEXT":"Lägg till de kolumner du behöver för att få en översikt över arbetsflödets statusar genom Admin. "},"STEP2":{"TITLE":"Användarhistorier & uppgifter","TEXT":"Användarhistorier är kraven på en hög nivå. Du kan dra dem till olika kolumner."},"STEP3":{"TITLE":"Lägg till användarhistorier","TEXT1":"Du kanske vill lägga till en enda användarhistorie (lägg till US-ikon) eller en grupp av dem (bulk icon). ","TEXT2":"Lycka till!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Upptäck projekt","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Mest aktiva","MOST_ACTIVE_EMPTY":"Det finns inga AKTIVA projekt ännu.","MOST_LIKED":"Mest gillade","MOST_LIKED_EMPTY":"Det finns inga GILLADE projekt ännu.","VIEW_MORE":"Visa fler","FEATURED":"Utvalda Projekt","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Alla","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Letar efter människor","WEEK":"Förra veckan","MONTH":"Senaste månaden","YEAR":"Förra året","ALL_TIME":"All tid","CLEAR":"Clear filters"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Skriv något ...","ACTION_TITLE":"Sök","RESULTS":"Sökresultat"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-tr.json b/dist/v-1547534999795/locales/taiga/locale-tr.json deleted file mode 100644 index 16b2940..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-tr.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Evet","NO":"Hayır","OR":"veya","I_GET_IT":"Tamam, Anlaşıldı.","LOADING":"Yükleniyor...","DATE":"DD MM YYYY","DATETIME":"DD MM YYYY HH:mm","SAVE":"Kaydet","CANCEL":"İptal","ACCEPT":"Kabul et","DELETE":"Sil","UNLINK":"Bağlantıyı Kopar","CREATE":"Oluştur","ADD":"Ekle","COPY_TO_CLIPBOARD":"Kopyala","COPIED_TO_CLIPBOARD":"Yazı belleğe kopyalandı.","EDIT":"Düzenle","DRAG":"Sürükle","TAG_LINE":"Çevik, ücretsiz ve açık kaynak proje yönetim aracınız","TAG_LINE_2":"PROJENİ SEV","BLOCK":"Engelle","BLOCK_TITLE":"Mesela, bu maddenin çözülemeyen bir bağlantısı varsa engelleyin","BLOCKED":"Engelli","UNBLOCK":"Engellemeyi kaldır","UNBLOCK_TITLE":"Bu maddeden engellemeyi kaldır","BLOCKED_NOTE":"Bu niye engelli?","BLOCKED_REASON":"Lütfen sebebini açıklayın","CREATED_BY":"{{fullDisplayName}} tarafından oluşturuldu","CLOSE":"kapat","GO_HOME":"Ana sayfaya götür beni","PLUGINS":"Eklentiler","ONE_ITEM_LINE":"Her satıra bir kalem...","NEW_BULK":"Yeni toplu ekleme","SUBTASKS":"Alt Görev","PREVIOUS":"Önceki","NEXT":"İleri","LOGOUT":"Çıkış","EXTERNAL_USER":"bir dış kullanıcı","GENERIC_ERROR":"Honki ponkilerimizden biri derki; {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Müşteri gereksinimi, daha önceden belli olmayan ama projeye dahil olması gereken bir gereksinimdir","TEAM_REQUIREMENT":"Takım gereksinimi, müsteriyi ilgilendirmeyen, ama projede yer alması zorunlu olan bir gereksinimdir.","OWNER":"Proje Sahibi","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Atanmış","EDIT":"Kartı düzenle","DELETE":"Delete card","DELETE_ISSUE":"Sorun sil","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Bu değer geçersiz gözüküyor","TYPE_EMAIL":"Bu değer geçerli bir e-posta adresi olmalı.","TYPE_URL":"Bu değer geçerli bir URL şeklinde olmalı","TYPE_URLSTRICT":"Bu değer geçerli bir URL şeklinde olmalı","TYPE_NUMBER":"Bu değer geçerli bir sayı şeklinde olmalı.","TYPE_DIGITS":"Bu değer rakam olmalı","TYPE_DATEISO":"Bu değer geçerli bir tarih olmalı (YYYY-MM-DD).","TYPE_ALPHANUM":"Bu değer alfanümerik olmalıdır.","TYPE_PHONE":"Bu değer geçerli bir telefon numarası şeklinde olmalı","NOTNULL":"Bu değer boş olmamalı","NOT_BLANK":"Bu değer boş olmamalı","REQUIRED":"Bu değer gerekli.","REGEXP":"Bu değer geçersiz gözüküyor","MIN":"Bu değer %s e eşit yada daha büyük olmalı.","MAX":"Bu değer %s den az ya da eşit olmalı.","RANGE":"Bu değer %s ve %s aralığında olmalıdır.","MIN_LENGTH":"Bu değer çok kısa. Karakter sayısı en az %s olmalıdır.","MAX_LENGTH":"Bu değer çok uzun. Karakter sayısı %s kadar ya da daha az olmalıdır.","RANGE_LENGTH":"Bu değer uzunluğu geçersiz. Karakter sayısı %s ve %s aralığında olmalıdır.","MIN_CHECK":"En az %s seçenek belirtmek zorundasınız.","MAX_CHECK":"%s seçenek ya da daha azını seçmek zorunlu.","RANGE_CHECK":"%s ve %s seçenekleri arasında bir seçim yapmak zorunludu.","EQUAL_TO":"Bu değer aynı olmalı.","LINEWIDTH":"Satırların uzunluğu sistem için çok fazla olabilir. %s karakterden kısa tutmaya çalışınız.","PIKADAY":"Hatalı tarih biçimi, lütfen GG AAA YYYY (örnek 23 Mar 1984) biçimini kullanın"},"PICKERDATE":{"FORMAT":"DD MM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Önceki Ay","NEXT_MONTH":"Gelecek Ay","MONTHS":{"JAN":"Ocak","FEB":"Şubat","MAR":"Mart","APR":"Nisan","MAY":"Mayıs","JUN":"Haziran","JUL":"Temmuz","AUG":"Ağustos","SEP":"Eylül","OCT":"Ekim","NOV":"Kasım","DEC":"Aralık"},"WEEK_DAYS":{"SUN":"Pazar","MON":"Pazartesi","TUE":"Salı","WED":"Çarşamba","THU":"Perşembe","FRI":"Cuma","SAT":"Cumartesi"},"WEEK_DAYS_SHORT":{"SUN":"Pzr","MON":"Pzt","TUE":"Salı","WED":"Çar","THU":"Per","FRI":"Cum","SAT":"Cmt"}},"SEE_USER_PROFILE":" {{username }} profilini gör","USER_STORY":"Kullanıcı hikayesi","TASK":"Görev","ISSUE":"Sorun","EPIC":"Destan","TAGS":{"PLACEHOLDER":"Etiket gir","DELETE":"Etiket sil","ADD":"Etiket ekle"},"DESCRIPTION":{"EMPTY":"Boş alan oldukça sıkıcı oluyor... daha betimleyici olun...","NO_DESCRIPTION":"Bir tanım henüz yok"},"FIELDS":{"SUBJECT":"Konu","NAME":"İsim","URL":"URL","DESCRIPTION":"TanımTanım","VALUE":"Değer","SLUG":"Satır","COLOR":"Renk","IS_CLOSED":"Kapatılsın?","STATUS":"Durum ","TYPE":"Tip ","SEVERITY":"Önem Derecesi","PRIORITY":"Öncelik","ASSIGNED_TO":"Atanmış","ASSIGNED_USERS":"Assigned users","POINTS":"Puanlar","IS_BLOCKED":"engellendi ","REF":"Ref","VOTES":"Oylar","SPRINT":"Koşu","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Hepsi"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Atanmamış","ASSIGN":"Ata","DELETE_ASSIGNMENT":"Atama sil","REMOVE_ASSIGNED":"Atanmışı sil","TOO_MANY":"...çok sayıda kullanıcı, filtrelemeye devam","CONFIRM_UNASSIGNED":"Atanmamış şekilde bırakmak istediğinizden emin misiniz?","TITLE_ACTION_EDIT_ASSIGNMENT":"Atama düzenle","SELF":"Bana ata"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Kapalı","OPEN":"Aç"},"WATCHERS":{"WATCHERS":"İzleyiciler","ADD":"İzleyicileri ekle","TITLE_ADD":"İzleyiciler listesine bir proje üyesi ekle","DELETE":"izleyici sil","TITLE_LIGHTBOX_DELETE_WARTCHER":"İzleyici sil"},"WATCH_BUTTON":{"WATCH":"İzle","WATCHING":"İzliyor","UNWATCH":"İzleme","WATCHERS":"İzleyiciler","BUTTON_TITLE":"Bu madeyi izle/izleme ","COUNTER_TITLE":"{total, plural, one{bir takipçi} other{# takipçi}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Bu konuya oy/karşı oy ver","COUNTER_TITLE":"{total, plural, one{bir oy} other{# oy}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Özel Alanlar","SAVE":"Özel Alan Kaydet","EDIT":"Özel Alan Düzenle","DELETE":"özel öznitelik sil","CONFIRM_DELETE":"Bu özel alandaki tüm bilgiler silinecek.\nDevam etmek istediğinize emin misiniz?"},"FILTERS":{"INPUT_PLACEHOLDER":"Konu yada referans","TITLE_ACTION_FILTER_BUTTON":"ara","TITLE":"Filtreler","TITLE_ACTION_SEARCH":"Ara","ACTION_SAVE_CUSTOM_FILTER":"özel filtre olarak kaydet","PLACEHOLDER_FILTER_NAME":"Filtre adı yazın ve enter a basın","APPLIED_FILTERS_NUM":"filtre uygulandı","CATEGORIES":{"TYPE":"Tip","STATUS":"Durum ","SEVERITY":"Önem Derecesi","PRIORITIES":"Öncelikler","TAGS":"Etiketler ","ASSIGNED_TO":"Atanmış","ASSIGNED_USERS":"Assigned users","ROLE":"Rol","CREATED_BY":"Oluşturan","CUSTOM_FILTERS":"Özel filtreler","EPIC":"Destan"}},"WYSIWYG":{"CODE_SNIPPET":"Kod Parçacığı","DB_CLICK":"düzenlemek için çift tıklayın","SELECT_LANGUAGE_PLACEHOLDER":"Diş Seçin","SELECT_LANGUAGE_REMOVE_FORMATING":"Biçemi kaldır","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown yazım kılavuzu"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Destanlar","VIEW_EPICS":"Destanları gör","ADD_EPICS":"Destan ekle","MODIFY_EPICS":"Destan düzenle","COMMENT_EPICS":"Destanlara yorum ekleme","DELETE_EPICS":"Destanları sil"},"SPRINTS":{"NAME":"Koşular","VIEW_SPRINTS":"Koşuları gör","ADD_SPRINTS":"Koşular ekle","MODIFY_SPRINTS":"Koşuları değiştir","DELETE_SPRINTS":"Koşuları sil"},"USER_STORIES":{"NAME":"Kullanıcı Hikayeleri","VIEW_USER_STORIES":"Kullanıcı hikayelerini gör","ADD_USER_STORIES":"Kullanıcı hikayeleri ekle","MODIFY_USER_STORIES":"Kullanıcı hikayelerini değiştir","COMMENT_USER_STORIES":"Kullanıcı hikayelerine yorum ekleyebilme","DELETE_USER_STORIES":"Kullanıcı hikayelerini sil"},"TASKS":{"NAME":"Görevler","VIEW_TASKS":"Görevler gör","ADD_TASKS":"Görevleri ekle","MODIFY_TASKS":"Görevleri değiştir","COMMENT_TASKS":"Görevlere yorum ekleyebilme","DELETE_TASKS":"Görevleri sil"},"ISSUES":{"NAME":"Sorunlar","VIEW_ISSUES":"Sorunları gör","ADD_ISSUES":"Sorunları ekle","MODIFY_ISSUES":"Sorunları değiştir","COMMENT_ISSUES":"Taleplere yorum ekleyebilme","DELETE_ISSUES":"Sorunları sil"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Wiki sayfalarını göster","ADD_WIKI_PAGES":"Wiki sayfaları ekle","MODIFY_WIKI_PAGES":"Wiki sayfalarını değiştir","DELETE_WIKI_PAGES":"Wiki sayfalarını sil","VIEW_WIKI_LINKS":"Wiki bağlantılarını göster","ADD_WIKI_LINKS":"Wiki bağlantıları ekle","DELETE_WIKI_LINKS":"Wiki bağlantılarını sil"}}},"LOGIN":{"PAGE_TITLE":"Giriş - Taiga","PAGE_DESCRIPTION":"Yeni girişimciler, çevik geliştiriciler ve tasarımcılar için çalışmaları gerçekten eğlenceli hale getiren basit, güzel bir proje yönetim platformu Taiga ya giriş yapılıyor."},"AUTH":{"INVITED_YOU":"sizi şu projeye davet etti","NOT_REGISTERED_YET":"Henüz kayıt olmadınız mı?","REGISTER":"Kayıt ol","CREATE_ACCOUNT":"buradan ücretsiz bir hesap oluşturun"},"LOGIN_COMMON":{"HEADER":"Zaten bir Taiga hesabım var","PLACEHOLDER_AUTH_NAME":"Kullanıcı adı yada e-posta (büyük küçük harf duyarlı)","LINK_FORGOT_PASSWORD":"Unuttunuz mu?","TITLE_LINK_FORGOT_PASSWORD":"Parolanızı mı unuttunuz?","ACTION_ENTER":"Giriş","ACTION_SIGN_IN":"Giriş","PLACEHOLDER_AUTH_PASSWORD":"Parola (büyük küçük harf duyarlı)","ALT_LOGIN":"Ya da böyle girin"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Umpa Lumpalarımıza göre, kullanıcı adınızı / e-posta adresinizi ya da parolanızı yanlış girdiniz.","SUCCESS":"Umpa Lumpalarımız çok mutlu oldular, Taiga ya hoşgeldiniz."},"REGISTER":{"PAGE_TITLE":"Kayıt ol - Taiga","PAGE_DESCRIPTION":"Yeni girişimciler, çevik geliştiriciler ve tasarımcılar için çalışmaları gerçekten eğlenceli hale getiren basit, güzel bir proje yönetim platformu Taiga da hesabınızı oluşturun."},"REGISTER_FORM":{"TITLE":"Yeni bir Taiga hesabı oluştur (ücretsiz)","PLACEHOLDER_NAME":"Bir kullanıcı adı seçin (büyük küçük harf duyarlı)","PLACEHOLDER_FULL_NAME":"Tam adınızı girin","PLACEHOLDER_EMAIL":"E-posta adresiniz","PLACEHOLDER_PASSWORD":"Parola belirleyin (büyük küçük harf duyarlı)","ACTION_SIGN_UP":"Kaydol","TITLE_LINK_LOGIN":"Giriş yap","LINK_LOGIN":"Zaten üye misiniz? Giriş yapın"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Parolayı unuttum - Taiga","PAGE_DESCRIPTION":"Kullanıcı adınızı ya da e-posta adresinizi girerek yeni bir parola edinin ve Taiga ya yeniden erişin."},"FORGOT_PASSWORD_FORM":{"TITLE":"Eyvah, parolanızı mı unuttunuz?","SUBTITLE":"Yeni bir tane almak için kullanıcı adınızı ya da e-postanızı girin","PLACEHOLDER_FIELD":"Kullanıcı adı veya e-posta","ACTION_RESET_PASSWORD":"Parolayı Sıfırla","LINK_CANCEL":"Boşver, geri gidelim. Sanırım hatırladım.","SUCCESS_TITLE":"Gelen kutunuza bakınız!","SUCCESS_TEXT":"Yeni parolanızı belirlemeniz için yönergeleri içeren e-posta hesabınıza gönderilmiştir","ERROR":"Honki ponkilerimize göre, siz henüz bir kayıt yaptırmamış durumdasınız."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Parolayı değiştirin - Taiga","SECTION_NAME":"Parolayı değiştir","FIELD_CURRENT_PASSWORD":"Şimdiki parola","PLACEHOLDER_CURRENT_PASSWORD":"Şimdiki parolanız (boş da olabilir eger parola belirlemediyseniz)","FIELD_NEW_PASSWORD":"Yeni parola","PLACEHOLDER_NEW_PASSWORD":"Yeni bir parola yaz","FIELD_RETYPE_PASSWORD":"Yeni parolayı yeniden girin","PLACEHOLDER_RETYPE_PASSWORD":"Yeni parolayı yeniden giriniz","ERROR_PASSWORD_MATCH":"Parolalar uyuşmuyor"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Yeni bir Taiga parolası oluşturun","SUBTITLE":"Bir de, demir yönünden zengin yiyecekler yemek beyninize iyi gelebilir :P","PLACEHOLDER_NEW_PASSWORD":"Yeni parola","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Yeni parolayı yeniden girin","ACTION_RESET_PASSWORD":"Parolayı Sıfırla","ERROR":"Honki ponkiler parola geri kurtarma isteğinizi bulamıyorlar. Tekrar sormayı deneyin.","SUCCESS":"Honki ponkilerimiz yeni parolanızı kaydetti.
    Yeni parolanız ile giriş yapın"},"INVITATION":{"PAGE_TITLE":"Davet kabulü - Taiga","PAGE_DESCRIPTION":"Yeni girişimciler, çevik geliştiriciler ve tasarımcılar için çalışmaları gerçekten eğlenceli hale getiren basit, güzel bir proje yönetim platformu Taiga dan yapılan daveti kabul edin."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Umpa Lumpalarımız davetiyenize ulaşamıyor.","SUCCESS":"Projeye katılımınız başarıyla gerçekleşti. {{project_name}} 'ye hoş geldiniz."},"HOME":{"PAGE_TITLE":"AnaSayfa - Taiga","PAGE_DESCRIPTION":"Atanmış ve izlenen kullanıcı hikayeleri, işler ve sorunların yanı sıra ana projeleriniz için Taiga ana sayfanız","EMPTY_WORKING_ON":"Burası bomboş, değil mi? Taiga ile çalışmaya başlayınca burada hikayeler, isler ve sorunları göreceksin.","EMPTY_WATCHING":"Projelerinizdeki Kullanıcı Hikayelerini, İşleri ve Sorunları takip edin ve değişikliklerden haberdar olun :) ","EMPTY_PROJECT_LIST":"Henüz bir projeniz yok","WORKING_ON_SECTION":"Üzerinde çalışılıyor","WATCHING_SECTION":"İzleniyor","DASHBOARD":"Proje Panosu"},"EPICS":{"TITLE":"DESTANLAR","SECTION_NAME":"Destanlar","EPIC":"DESTAN","PAGE_TITLE":"Destanlar - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin destan listesi paneli: {{projectDescription}}","DASHBOARD":{"ADD":"+ DESTAN EKLE","UNASSIGNED":"Atama Yok"},"EMPTY":{"TITLE":"Görünüşe göre henüz hiç destan yok.","EXPLANATION":"Destanlar kullanıcı hikayelerini kapsayan geniş kapsamlı kavramlardır.
    Destanlar hiyerarşinin en üstünde yer alır ve kullanıcı hikayelerini gruplar.","HELP":"Destanlar hakkında daha fazla bilgi edin"},"TABLE":{"VOTES":"Oylar","NAME":"İsim","PROJECT":"Proje","SPRINT":"Koşu","ASSIGNED_TO":"Aranmış","STATUS":"Durum ","PROGRESS":"İlerleme","VIEW_OPTIONS":"Seçenekleri gör"},"CREATE":{"TITLE":"Yeni Destan","PLACEHOLDER_DESCRIPTION":"Lütfen diğerlerinin bu destanı daha iyi anlayabilmesi için açıklama giriniz","TEAM_REQUIREMENT":"Takım gereksinimi","CLIENT_REQUIREMENT":"İstemci Gereksinimi","BLOCKED":"Engelli","BLOCKED_NOTE_PLACEHOLDER":"Bu destan neden engellenmiş?","CREATE_EPIC":"Destan yarat"}},"PROJECTS":{"PAGE_TITLE":"Projelerim - Taiga","PAGE_DESCRIPTION":"Tüm projelerinizi içeren bir liste, yenide düzenle ya da yeni bir tane yarat.","MY_PROJECTS":"Projelerim"},"ATTACHMENT":{"SECTION_NAME":"ekler","TITLE":" {{ date }} tarihinde {{ fileName }} dosyası yüklendi","LIST_VIEW_MODE":"Liste görünümü biçimi","GALLERY_VIEW_MODE":"Galeri görünümü biçimi","DESCRIPTION":"Kısa bir tanım yaz","DEPRECATED":"(kaldırıldı)","DEPRECATED_FILE":"Kaldırıldı mı?","ADD":"Yeni ek ekleyin {{maxFileSizeMsg}}","DROP":"Ekleri buraya bırakın!","SHOW_DEPRECATED":"+ kaldırılan ekleri göster","HIDE_DEPRECATED":"- kaldırılan ekleri gizle","COUNT_DEPRECATED":"({{ counter }} kaldırılmış)","MAX_UPLOAD_SIZE":"Karşıya yükleme için en yüksek boyut limiti {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"'{{fileName}}' dosyasını yükleyemedik. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Ek sil","MSG_LIGHTBOX_DELETE_ATTACHMENT":"ek '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Silemiyoruz: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin"},"PAGINATION":{"PREVIOUS":"Önceki","NEXT":"İleri"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Değeri düzenle","TITLE_ACTION_DELETE_VALUE":"Değer sil","TITLE_ACTION_DELETE_TAG":"Etiket sil"},"HELP":"Yardıma mı ihtiyacın var? Destek sayfamızı kontrol edin!","PROJECT_DEFAULT_VALUES":{"TITLE":"Varsayılan Değerler","SUBTITLE":"Tüm seçici girdiler için varsayılan değerleri seçin."},"MEMBERSHIPS":{"TITLE":"Üyeleri yönet","PAGE_TITLE":"Üyelikler - {{projectName}}","ADD_BUTTON":"+ Yeni üye","ADD_BUTTON_TITLE":"Yeni üye ekle","UPGRADE_BUTTON":"Planınızı Yükseltin","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Dışarı aktar","SUBTITLE":"Yedek olarak saklamak ya da yeni bir proje için temel olarak adına projenizi dışarı aktarın.","EXPORT_BUTTON":"Dışarı aktar","EXPORT_BUTTON_TITLE":"Projeni dışarı aktar","LOADING_TITLE":"Döküm dosyanızı oluşturuyoruz","DUMP_READY":"Döküm dosyanız hazır!","LOADING_MESSAGE":"Lütfen bu sayfayı kapatmayın","ASYNC_MESSAGE":"Hazır olduğunda size bir e-posta göndereceğiz.","SYNC_MESSAGE":"Eğer indirme otomatik olarak başlamıyor ise buraya tıklayın.","ERROR":"Bizim Honki ponkiler döküm dosyasını oluştururken birkaç hata ile karşılaştı. Lütfen yeniden deneyin.","ERROR_BUSY":"Üzgünüz, bizim honki ponkiler şu anda çok meşgul. Lütfen bir kaç dakika içinde yeniden deneyin."},"MODULES":{"TITLE":"Modüller","EPICS":"Destanlar","EPICS_DESCRIPTION":"Projenizin en stratejik parçasını görüntüleyin ve yönetin","BACKLOG":"Havuz","BACKLOG_DESCRIPTION":"Yeni gelen ve önceliklendirilmiş işler için düzenli bir görünüm elde etmek için kullanıcı hikayelerinizi yönetin.","NUMBER_SPRINTS":"Beklenen koşu sayısı","NUMBER_SPRINTS_HELP":"Belirsizse 0 giriniz","NUMBER_US_POINTS":"Hikaye puanlarının beklenen toplamı","NUMBER_US_POINTS_HELP":"Belirsizse 0 giriniz","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Bu pano ile projenizi güzel bir şekilde düzenleyin.","ISSUES":"Sorunlar","ISSUES_DESCRIPTION":"Proje ile ilgili hataları, sorular ve geliştirmeleri izle. Hiçbir şeyi kaçırma!!","WIKI":"Wiki","WIKI_DESCRIPTION":"Diğerleriyle işbirliği yaparak içerik ekleyin, düzenleyin ve silin. Burası projenizin dokümantasyonu için doğru yer.","MEETUP":"Toplantı","MEETUP_DESCRIPTION":"Video konferans sistemi seçin","SELECT_VIDEOCONFERENCE":"Bir video konferans sistemi seç","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Özel","URL_CHAT_ROOM":"Sohbet odanızın linki"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Proje profili- {{projectName}}","PROJECT_DETAILS":"Proje detayları","PROJECT_NAME":"Proje adı","TAGS":"Etiketler","DESCRIPTION":"Tanım","RECRUITING":"Bu proje insan arıyor mu?","RECRUITING_MESSAGE":"Ne aramıştınız?","RECRUITING_PLACEHOLDER":"Aradığınız özellikleri yazın","FEEDBACK":"Taiga kullanıcılarından geri bildirim almak ister misiniz?","PUBLIC_PROJECT":"Açık Proje","PRIVATE_PROJECT":"Gizli proje","PRIVATE_OR_PUBLIC":"Açık ve özel projeler arasındaki fark nedir?","DELETE":"Bu projeyi sil","CHANGE_LOGO":"Logoyu değiştir","ACTION_USE_DEFAULT_LOGO":"Varsayılan resmi kullan","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Proje sahibi","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Talep","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Sahibi değiştir","CHANGE_OWNER_SUCCESS_TITLE":"İsteminiz gönderildi!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Raporlar","SUBTITLE":"Kendi raporlarınızı oluşturmak için proje verinizi CSV biçeminde dışarı aktarın.","DESCRIPTION":"Kendi raporlarınızı oluşturmak için CSV dosyası olarak indirin veya oluşturulan URL'yi kopyalayıp istediğiniz metin editörü veya hesap tablosu programında açın. Bu sayede tüm verilerinizi kolayca görüp inceleyebileceksiniz.","HELP":"Bunu elektronik çizelgemde nasıl kullanayım?","REGENERATE_TITLE":"URL değiştir","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Url'yi sil","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"destan raporları","SECTION_TITLE_US":"kullanıcı hikayeleri raporları","SECTION_TITLE_TASK":"görevlere ait raporlar","SECTION_TITLE_ISSUE":"sorun raporları","DOWNLOAD":"CSV İndir","URL_FIELD_PLACEHOLDER":"Lütfen CSV url'ini yeniden oluşturun","TITLE_REGENERATE_URL":"CSV url ini yeniden oluştur","ACTION_GENERATE_URL":"URL oluştur","ACTION_REGENERATE":"Yeniden oluştur","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Sil"},"CUSTOM_FIELDS":{"TITLE":"Özel Alanlar","SUBTITLE":"Hikayeleriniz, işleriniz ve sorunlarınız için özel alanları tanımlayın","EPIC_DESCRIPTION":"Destanın özel alanları","EPIC_ADD":"Destana özel alan ekle","US_DESCRIPTION":"Kullanıcı hikayeleri özel alanları","US_ADD":"Kullanıcı hikayelerine özel bir alan ekleyin","TASK_DESCRIPTION":"Görevlere ait özel alanlar","TASK_ADD":"Görevlere özel alan ekle","ISSUE_DESCRIPTION":"Sorunlar için özel alanlar","ISSUE_ADD":"Sorunlara yeni bir özel alan ekle","FIELD_TYPE_TEXT":"Metin","FIELD_TYPE_RICHTEXT":"Zengin metin","FIELD_TYPE_MULTI":"Çoklu-satır","FIELD_TYPE_DATE":"Tarih","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Proje değerleri- {{projectName}}","REPLACEMENT":"Bu değerdeki tüm öğeler yandaki gibi değiştirilecek","ERROR_DELETE_ALL":"Bütün değerleri silemezsiniz."},"PROJECT_VALUES_POINTS":{"TITLE":"Puanlar","SUBTITLE":"Kullanıcı hikayelerinin puanları için kestirim değerleri belirtin","US_TITLE":"KH puanları","ACTION_ADD":"Yeni puan ekle"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Öncelikler","SUBTITLE":"Sorunların alabileceği öncelik seviyelerini belirtin","ISSUE_TITLE":"Sorun öncelikleri","ACTION_ADD":"Yeni öncelik ekle"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Önem Dereceleri","SUBTITLE":"Sorunların alabileceği önem derecelerini tanımlayın","ISSUE_TITLE":"Sorun önem dereceleri","ACTION_ADD":"Yeni önem derecesi ekle"},"PROJECT_VALUES_STATUS":{"TITLE":"Durumlar","SUBTITLE":"Hikayeleriniz, işleriniz ve sorunlarınızın alabileceği durumları tanımlayın","EPIC_TITLE":"Epic Statuses","US_TITLE":"Kullanıcı hikayelerinin durumları","TASK_TITLE":"Görev Durumları","ISSUE_TITLE":"Sorun Durumları"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipler","SUBTITLE":"Taleblerinizin olası tiplerini belirtin","ISSUE_TITLE":"Sorun türleri","ACTION_ADD":"Ekle yeni {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiketler ","SUBTITLE":"Etiketin rengini gör ve düzenle","EMPTY":"Henüz etiket yok","EMPTY_SEARCH":"Arama kriterlerinize uyan bir kayıt bulunamadı","ACTION_ADD":"Etiket ekle","NEW_TAG":"Yeni etiket","MIXING_HELP_TEXT":"Birleştirmek istediğiniz etiketleri seçiniz","MIXING_MERGE":"Etiketleri Birleştir","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Yeni durum ekle","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roller - {{projectName}}","WARNING_NO_ROLE":"Dikkat edin, projenizdeki rollerden hiçbiri kullanıcı hikayeleri için puan değeri kestirimi yapma yetkisine sahip değil.","HELP_ROLE_ENABLED":"Etkileştirildiğinde, bu role atanan üyeler kullanıcı hikayeleri için puan kestirimi yapabilecek","DISABLE_COMPUTABLE_ALERT_TITLE":"Bu role ait kestirimleri kapatmak istediğinizden emin misiniz?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"{{roleName}} görevi için tahmin izinlerini kaldırırsanız, bu görevdekiler tarafından daha önce yapılmış tüm tahminler silinir","COUNT_MEMBERS":"bu roldeki üyelerin sayısı {{ role.members_count }} ","TITLE_DELETE_ROLE":"Rol Sil","REPLACEMENT_ROLE":"Bu role sahip kullanıcıların taşınacağı","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Bütün değerleri silemezsiniz","EXTERNAL_USER":"Dış kullanıcı","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Gizli anahtar","PAYLOAD_URL":"Paket URL'si","VALID_IPS":"Geçerli çıkış IP'leri (virgülle ayrılmış olarak)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket talepleri imzalı değil dolayısıyla kaynağı doğrulamanın en iyi yolu IP 'dir. Eğer bu alan boş ise IP doğrulaması yapılamayacaktır. "},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab istekleri imzalı değiller bu yüzden IP kaynağını doğrulamak en iyi yol. Eğer alan boş bırakılırsa IP doğrulaması yapılmayacak."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Yeni bir Webhook Ekle","TYPE_NAME":"Servis adını girin","TYPE_PAYLOAD_URL":"Servis paket URL'sini yazın","TYPE_SERVICE_SECRET":"Gizli anahtar servisini girin","SAVE":"Webhook Kaydet","CANCEL":"Webhook iptal et","SHOW_HISTORY":"(Tarihçeyi göster)","TEST":"Webhook testi","EDIT":"Webhook Düzenle","DELETE":"Webhook Sil","REQUEST":"Talep","RESEND_REQUEST":"İsteği yeniden gönder","HEADERS":"Başlıklar","PAYLOAD":"Paket","RESPONSE":"Cevap","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Tarihçe gizle)","ACTION_HIDE_HISTORY_TITLE":"Tarihçe detaylarını gizle","ACTION_SHOW_HISTORY":"(Tarihçeyi göster)","ACTION_SHOW_HISTORY_TITLE":"Tarihçe detaylarını göster","WEBHOOK_NAME":" '{{name}}' Webhook'u"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Özel Öznitelikler - {{projectName}}","ADD":"Özel alan ekle","EDIT":"Özel Alan Düzenle","DELETE":"Özel Alan Sil","SAVE_TITLE":"Özel Alan Kaydet","CANCEL_TITLE":"oluşturmayı iptal et","SET_FIELD_NAME":"Özel alan adınızı belirtin","SET_FIELD_DESCRIPTION":"Özel alanınıza ait tanım girin","FIELD_TYPE_DEFAULT":"-- birini seçin --","ACTION_UPDATE":"Özel Alanı Güncelle","ACTION_CANCEL_EDITION":"Baskıyı iptal et"},"MEMBERSHIP":{"COLUMN_MEMBER":"Üye","COLUMN_ADMIN":"Yönetim","COLUMN_ROLE":"Rol","COLUMN_STATUS":"Durum","STATUS_ACTIVE":"Aktif","STATUS_PENDING":"Bekliyor","DELETE_MEMBER":"Üye sil","RESEND":"Yeniden gönder","SUCCESS_SEND_INVITATION":"Davetiyeyi '{{email}}' adresine yeniden gönderdik.","SUCCESS_DELETE":"{{message}} 'i sildik","ERROR_DELETE":"Silemiyoruz {{message}}.","DEFAULT_DELETE_MESSAGE":"davetiye {{email}} "},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Puan seçici için varsayılan değer","LABEL_TASK_STATUS":"Görev durum seçici için varsayılan değer","LABEL_ISSUE_TYPE":"Sorun tipi seçici için varsayılan değer","LABEL_ISSUE_STATUS":"Sorun durumu seçici için varsayılan değer","LABEL_PRIORITY":"Önceli seçicisi için varsayılan değer","LABEL_SEVERITY":"Önem derecesi seçicisi için varsayılan değer"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Yeni durum için bir isim yaz","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Yeni nesne için bir isim yazın"},"US_STATUS":{"ACTION_ADD_STATUS":"Yeni durum ekle","IS_ARCHIVED_COLUMN":"Arşivlenmiş","IS_CLOSED_COLUMN":"Kapatılmış","WIP_LIMIT_COLUMN":"WIP Sınır","PLACEHOLDER_WRITE_NAME":"Yeni durum için bir isim yaz"},"MENU":{"PROJECT":"Proje","ATTRIBUTES":"Öznitelikler","MEMBERS":"Üyeler","PERMISSIONS":"İzinler","INTEGRATIONS":"Bütünleştirmeler"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Durum","POINTS":"Puanlar","PRIORITIES":"Öncelikler","SEVERITIES":"Önem Dereceleri","TYPES":"Tipler","CUSTOM_FIELDS":"Özel alanlar","TAGS":"Etiketler ","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roller","ACTION_NEW_ROLE":"+ Yeni rol","TITLE_ACTION_NEW_ROLE":"Yeni rol ekle"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Yeni proje sahibi olmak ister misiniz?","PRIVATE":"Gizli","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Kabul et","REJECT":"Reddet","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Proje sahibine yorum göndermek ister misiniz?","UNLIMITED_PROJECTS":"Sınırsız","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Profili Düzenle","CLOSED_US":"Kapatılmış KH","PROJECTS":"Projeler","PROJECTS_EMPTY":"{{username}} kullanıcısının henüz bir projesi yok","CONTACTS":"İrtibat Kişileri","CONTACTS_EMPTY":"{{username}} kullanıcısının henüz irtibat kişileri yok","CURRENT_USER_CONTACTS_EMPTY":"Henüz irtibat kişileriniz yok","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Taiga ile çalışan kişiler otomatik olarak irtibat kişileriniz olacaktır","TABS":{"ACTIVITY_TAB":"Zaman Çizelgesi","ACTIVITY_TAB_TITLE":"Bu kullanıcı için tüm eylemleri göster","PROJECTS_TAB":"Projeler","PROJECTS_TAB_TITLE":"Kullanıcının üyesi olduğu tüm projelerin listesi","LIKES_TAB":"Beğeniler","LIKES_TAB_TITLE":"Bu kullanıcının tüm beğenilerilerini listele","VOTES_TAB":"Oylar","VOTES_TAB_TITLE":"Bu kullanıcı tarafından verilmiş tüm oyları görün","WATCHED_TAB":"İzlendi","WATCHED_TAB_TITLE":"Bu kullanıcı tarafından izlenen herşeyi listele","CONTACTS_TAB":"İrtibat Kişileri","CONTACTS_TAB_TITLE":"Bu kullanıcının tüm kişilerini listele"}},"PROFILE_SIDEBAR":{"TITLE":"Profiliniz","DESCRIPTION":"Yaptığınız herşey ve üzerinde çalıştığınız konular buradan görülebilir. Bilgilerinizi zenginleştirmek için güzel bir özgeçmiş ekleyin.","ADD_INFO":"Bio yu düzenle"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Birşeyler yazın...","FILTER_TYPE_ALL":"Hepsi","FILTER_TYPE_ALL_TITLE":"Hepsini göster","FILTER_TYPE_PROJECTS":"Projeler","FILTER_TYPE_PROJECTS_TITLE":"Sadece projeleri görüntüle","FILTER_TYPE_EPICS":"Destanlar","FILTER_TYPE_EPICS_TITLE":"Sadece destanları göster","FILTER_TYPE_USER_STORIES":"Hikayeler","FILTER_TYPE_USER_STORIES_TITLE":"Sadece kullanıcı hikayelerini göster","FILTER_TYPE_TASKS":"Görevler","FILTER_TYPE_TASKS_TITLE":"Sadece görevleri göster","FILTER_TYPE_ISSUES":"Sorunlar ","FILTER_TYPE_ISSUES_TITLE":"Sadece sorunları göster","EMPTY_TITLE":"Görünüşe göre burada gösterilecek bir şey yok."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"En çok kullanılan projelerinizi en üste koymak için yeniden sıralayın.
    Top 10 projeler gezinti çubuğunun proje listesinin başında gösterilecektir.","PRIVATE":"Gizli proje","LOOKING_FOR_PEOPLE":"Bu proje ahalisini arıyor","FANS_COUNTER_TITLE":"{total, plural, one{bir meraklı} other{# meraklı}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{bir takipçi} other{# takipçi}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{bir üye} other{# üye}}","BLOCKED_PROJECT":{"BLOCKED":"Engellenmiş proje","THIS_PROJECT_IS_BLOCKED":"Proje geçici olarak engellenmiş","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Projenizdeki engellemeyi kaldırmak için yöneticiyle bağlantı kurunuz."},"SECTION":{"SEARCH":"Ara","TIMELINE":"Zaman Çizelgesi","EPICS":"Destanlar","BACKLOG":"Havuz","KANBAN":"Kanban","ISSUES":"Sorunlar","WIKI":"Wiki","TEAM":"Takım","MEETUP":"Toplantı","ADMIN":"Yönetim"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Proje Oluştur","MANAGE_PROJECTS":"Projeleri yönet","TITLE_CREATE_PROJECT":"Proje oluştur","HELP_TITLE":"Taiga Destek Sayfası","HELP":"Yardım","HOMEPAGE":"Ana sayfa","FEEDBACK_TITLE":"Geribildirim Gönder","FEEDBACK":"Geribildirim","NOTIFICATIONS_TITLE":"Bildirim ayarlarını düzenle","NOTIFICATIONS":"Bildirimler","VIEW_PROFILE_TITLE":"Profili Görüntüle","VIEW_PROFILE":"Profili Görüntüle","EDIT_PROFILE_TITLE":"Profilini düzenle","EDIT_PROFILE":"Profil Düzenle","CHANGE_PASSWORD_TITLE":"Parolayı değiştir","CHANGE_PASSWORD":"Parolayı değiştir","DASHBOARD_TITLE":"Pano","DISCOVER_TITLE":"Trend projeleri keşfet","DISCOVER":"Keşfet"},"LIKE_BUTTON":{"LIKE":"Beğen","LIKED":"Beğendi","UNLIKE":"Beğenme","BUTTON_TITLE":"Bu projeyi beğen ya da beğenme","COUNTER_TITLE":"{total, plural, one{bir meraklı} other{# meraklı}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Bu projeyi izle ve bildirim politikasını ayarla","WATCH":"İzle","WATCHING":"İzliyor","COUNTER_TITLE":"{total, plural, one{bir takipçi} other{# takipçi}}","OPTIONS":{"NOTIFY_ALL":"Bütün bildirimleri al","NOTIFY_ALL_TITLE":"Bu proje için tüm bildirimleri al","NOTIFY_INVOLVED":"Sadece ilgililer","NOTIFY_INVOLVED_TITLE":"Sadece ilgilendiğiniz bildirimleri alın","UNWATCH":"İzleme","UNWATCH_TITLE":"Bu projeyi izleme"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Proje ekibiyle bağlantıya geçin","CONTACT_BUTTON":"Proje ile bağlantıya geç"},"CREATE":{"TITLE":"Proje Oluştur","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Projeyi Kopayala","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Projeyi İçe Aktar","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Projeye davet et","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Arka","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Açık Proje","PRIVATE_PROJECT":"Gizli Proje"},"COMMON":{"DETAILS":"Proje detayları","PROJECT_TITLE":"Proje Adı","PROJECT_DESCRIPTION":"Proje Tanımı"},"DUPLICATE":{"TITLE":"Projeyi Kopyala","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Kopyalamak için var olan bir proje seçin"},"IMPORT":{"TITLE":"Projeyi İçe Aktar","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Bizim honki ponkiler projenizi içeriye aktarıyor","ASYNC_IN_PROGRESS_MESSAGE":"Bu işlem bir kaç dakika sürecek
    Hazır olduğunda bir e-posta göndereceğiz","UPLOAD_IN_PROGRESS_MESSAGE":"{{totalSize}} in {{uploadedSize}} kadarı karşıya yüklendi","ERROR":"Sarı çizmeli memmet ağamız döküm dosyanızı içeri aktarırken birkaç problem yaşadı. Lütfen yeniden deneyin.","ERROR_TOO_MANY_REQUEST":"Üzgünüm, bizim honki ponkiler şu anda çok meşgul. Lütfen birkaç dakika içinde yeniden deneyin.","ERROR_MESSAGE":"Honki ponkilerimiz döküm dosyanızı içeri aktarırken birkaç problem yaşadı: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin","SYNC_SUCCESS":"Projeniz başarıyla içe aktarıldı","IMPORT":"İçe Aktar","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Proje Üyeleri","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Kullanıcı seçin","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Ata","PROJECT_SELECTOR":{"NO_RESULTS":"Arama kriterlerinize uyan bir kayıt bulunamadı","ACTION_SEARCH":"ara","ACTION_BACK":"Arka"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Hesabınız sadece {{members}} kişiye izin veriyor","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"İçe aktarmaya çalıştığınız proje gizli. Maalesef var olan ödeme planınız daha fazla gizli proje yaratmanıza izin vermiyor"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Maalesef var olan ödeme planınız daha fazla açık proje yaratmanıza izin vermiyor","DESC":"İçe aktarmaya çalıştığınız proje açık bir proje. Maalesef şu anki ödeme planınız daha fazla açık projeye izin vermiyor."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Var olan ödeme planınız gizli proje başına {{max_memberships}} kullanıcıya izin veriyor."},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Var olan ödeme planınız açık proje başına {{max_memberships}} kullanıcıya izin veriyor."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Maalesef şu anki ödeme planınız daha fazla gizli proje eklemenize ya da gizli proje başına {{max_memberships}} kullanıcıdan fazla kullanıcı eklemenize izin vermiyor","DESC":"İçe aktarmaya çalıştığınız proje gizli ve {{members}} kullanıcısı var."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Maalesef şu anki ödeme planınız daha fazla açık proje eklemenize ya da açık proje başına {{max_memberships}} kullanıcıdan fazla kullanıcı eklemenize izin vermiyor","DESC":"İçe aktarmak istediğiniz proje açık ve {{members}} kullanıcıdan daha fazla kullanıcı içeriyor."}},"IN_PROGRESS":{"TITLE":"Proje İçe Aktarılıyor","DESCRIPTION":"Bu işlem biraz sürecek, lütfen pencereyi kapatmayın."},"WARNING":{"TITLE":"Bazı görevler atanmamış olacak","DESCRIPTION":"Hala belirlenemeyen kişiler var. Bu kişilere atanmış kartlar atanmamış olarak kalacak. Veri kaybetmemek için ilişkili kişileri kontrol edin.","CHECK":"İrtibat kişilerini kontrol edin"},"TAIGA":{"SELECTOR":"Taiga projenizi içe aktarın"},"TRELLO":{"SELECTOR":"Trello panolarınızı Taiga'ya aktarın","CHOOSE_PROJECT":"İçe aktarmak istediğiniz panoyu seçin","NO_PROJECTS":"Trello içinde panonuz yok"},"GITHUB":{"SELECTOR":"GitHub proje taleplerini içe aktar","CHOOSE_PROJECT":"İçe aktarmak istediğiniz projeyi bulun","NO_PROJECTS":"GitHub'da projeniz yok","HOW_DO_YOU_WANT_TO_IMPORT":"Taleplerinizi Taiga'ya nasıl aktarmak istersiniz?","KANBAN_PROJECT":"Kanban projesine kullanıcı hikayesi olarak","KANBAN_PROJECT_DESCRIPTION":"Bundan sonra scrum havuzunu açabileceksiniz.","SCRUM_PROJECT":"Scrum projesinde kullanıcı hikayesi olarak","SCRUM_PROJECT_DESCRIPTION":"Bundan sonra kanban modunu etkinleştirebilirsiniz.","ISSUES_PROJECT":"Talep olarak","ISSUES_PROJECT_DESCRIPTION":"Taleplerinizi kanban ya da scrum modunda kullanamayacaksınız. Yeni kullanıcı hikayeleri için kanban ve scrum'ı açabileceksiniz."},"ASANA":{"SELECTOR":"Asana projenizi içe aktarın ve nasıl yöneteceğiniz seçin","CHOOSE_PROJECT":"İçe aktarmak istediğiniz projeyi seçiniz","NO_PROJECTS":"Asana da projeniz yok","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Projenizin görev ve alt görevleri, Taiga kullanıcı hikayeleri ve görevleri olarak oluşturulacak.","CREATE_AS_KANBAN_DESCRIPTION":"Projenizin görev ve alt görevleri, Taiga kullanıcı hikayeleri ve görevleri olarak oluşturulacak."},"JIRA":{"SELECTOR":"Jira projenizi içe aktarın ve nasıl yöneteceğiniz seçin","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"İçe aktarmak istediğiniz proje ya da panoyu seçiniz","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Jira URL'niz","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Sorunlar","CREATE_AS_SCRUM_DESCRIPTION":"Projenizin talep ve alt talepleri, Taiga kullanıcı hikayeleri ve görevleri olarak yaratılacak.","CREATE_AS_KANBAN_DESCRIPTION":"Projenizin talep ve alt talepleri, Taiga kullanıcı hikayeleri ve görevleri olarak yaratılacak.","CREATE_AS_ISSUES_DESCRIPTION":"Jira projenizin alt taleplerini ne yapmak istersiniz? (Taiga alt taleplere izin vermez)","CREATE_NEW_ISSUES":"Alt talepleri yeni Taiga taleplerine çevir.","NOT_CREATE_NEW_ISSUES":"Alt talepleri aktarma"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Taiga hesabınızı silmek istediğinizden emin misiniz?","CANCEL":"Ayarlara dön","ACCEPT":"Hesabı sil","BLOCK_PROJECT":"Hesabınızı sildiğinizde sahibi olduğunuz tüm projeler bloke edilecek. Eğer bunu istemiyorsanız hesabınızı silmeden önce projelerinizin sahipliğini diğer üyelere devredin."},"DELETE_PROJECT":{"TITLE":"Proje Sil","QUESTION":"Bu projeyi silmek istediğinizden emin misiniz?","SUBTITLE":"Bütün proje verileri (kullanıcı hikayeleri, işler, sorunlar, koşular ve viki sayfaları) kaybolacak! :-(","CONFIRM":"Evet, kesinlikle eminim"},"ASSIGNED_TO":{"SELECT":"Atananı seç","SEARCH":"Kullanıcıları ara"},"ADD_MEMBER":{"TITLE":"Yeni üye","PLACEHOLDER":"Kullanıcıları süzün ya da davet etmek için e-posta yazın","ADD_EMAIL":"e-posta ekle","REMOVE":"Kaldır","INVITE":"Davet et","CHOOSE_ROLE":"Rol seçiniz","PLACEHOLDER_INVITATION_TEXT":"(Opsiyonel) Davetinize kişiselleştirilmiş bir metin ekleyin. Yeni üyelerinize tatlı bir şeyler söyleyin ;-)","HELP_TEXT":"Eğer kullanıcılar önceden Taigaya kayıt olmuşlarsa, otomatik olarak ekleneceklerdir. Eğer olmamışlarsa bir davet mektubu alacaklardır."},"FEEDBACK":{"TITLE":"Bize birşeyler anlat..","COMMENT":"...bir hata, biraz öneri, biraz klas... ya da Taiga ile en kötü kabusunuz","ACTION_SEND":"Geribildirim Gönder"},"SEARCH":{"TITLE":"Ara","PLACEHOLDER_SEARCH":"Neye bakıyorsunuz?"},"ADD_EDIT_SPRINT":{"TITLE":"Yeni koşu","PLACEHOLDER_SPRINT_NAME":"koşu adı","PLACEHOLDER_SPRINT_START":"Tahmini Başlangıç","PLACEHOLDER_SPRINT_END":"Tahmini Bitiş","ACTION_DELETE_SPRINT":"Bu koşuyu silmek istiyor musunuz?","TITLE_ACTION_DELETE_SPRINT":"koşuyu sil","LAST_SPRINT_NAME":"Son koşu {{lastSprint}} ;-)"},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"Yeni Görev","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Görevi Düzenle","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Sorun Ekle","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Koşuyu sil"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opsiyonel) Davetinize kişiselleştirilmiş bir metin ekleyin. Yeni üyelerinize tatlı bir şeyler söyleyin ;-)","PLACEHOLDER_TYPE_EMAIL":"Bir e-posta girin","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Maalesef bu proje sahipsiz olarak terkedilemez","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Proje sahibi değişikliği iste"}},"CHANGE_OWNER":{"TITLE":"Kimin yeni proje sahibi olmasını istersiniz?","ADD_COMMENT":"Yorum ekle","BUTTON":"Şu proje katılımcısından yeni proje sahibi olmasını iste"},"CONTACT_PROJECT":{"TITLE":"e-posta gönder","WARNING":"Bu e-posta proje yöneticileri tarafından alıncak","PLACEHOLDER":"Mesajınızı yazın","SEND":"Gönder"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Proje nedir?","CHOOSE_PROJECT_FROM":"Proje nedir?","SUBJECT":"Konu","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Arama kriterlerinize uyan bir kayıt bulunamadı"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Destan {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Durum: {{epicStatus }}. Açıklama: {{epicDescription}}","SECTION_NAME":"Destan","ERROR_UNLINK_RELATED_USERSTORY":"Bağlantıyı koparamıyoruz: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"İlişki yarat: ","NEW_USERSTORY":"Yeni kullanıcı hikayesi","EXISTING_USERSTORY":"Var olan kullanıcı hikayesi","CHOOSE_PROJECT_FOR_CREATION":"Hangi proje?","SUBJECT":"Konu","SUBJECT_BULK_MODE":"Konu (toplu giriş)","CHOOSE_PROJECT_FROM":"Hangi proje?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"Bu projenin henüz Kullanıcı Hikayesi yok. Lütfen başka proje seçiniz.","NO_USERSTORIES_FOUND":"Arama kriterlerinize uyan bir kayıt bulunamadı","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Destan sil"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Kullanıcı Hikayesi {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Durum: {{userStoryStatus }}. Tamamlanan {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} of {{userStoryTotalTasks}} tasks closed). Puanlar: {{userStoryPoints}}. Tanım: {{userStoryDescription}}","SECTION_NAME":"Kullanıcı hikayesi","LINK_TASKBOARD":"Görev Panosu","TITLE_LINK_TASKBOARD":"Görev panosuna git","TOTAL_POINTS":"toplam puanlar","ADD":"+ Yeni bir Kullanıcı Hikayesi ekle","ADD_BULK":"Toplu halde yeni Kullanıcı Hikayeleri ekle","PROMOTED":"Bu hikayenin temelindeki sorun:","TITLE_LINK_GO_TO_ISSUE":"Talebe git","TITLE_DELETE_ACTION":"Kullanıcı Hikayesi Sil","LIGHTBOX_TITLE_BLOKING_US":"Bizi engelleyen","NOT_ESTIMATED":"Kestirim yapılmamış","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Taiga Tribe'da Gig olarak yayınla","PUBLISH_INFO":"Daha fazla bilgi","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Kapat","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Yorum {{user}} tarafından silindi","COMMENTS_COUNT":"{{comments}} Yorum","OLDER_FIRST":"Eskiden yeniye","RECENT_FIRST":"Yeniden eskiye","COMMENT":"Yorum Yap","EDITED_COMMENT":"Düzenlendi:","SHOW_HISTORY":"Tarihçe gör","TYPE_NEW_COMMENT":"Buraya yeni bir yorum yazın","SHOW_DELETED":"Silinmiş yorumları göster","HIDE_DELETED":"Silinmiş yorumu gizle","DELETE":"Yorumu sil","RESTORE":"Yorumu geri yükle","HISTORY":{"TITLE":"Aktivite"}},"ACTIVITY":{"TITLE":"Aktivite","ACTIVITIES_COUNT":"{{activities}} Aktivite","TAGS_ADDED":"eklenen etiketler:","TAGS_REMOVED":"etiketler kaldırıldı:","US_POINTS":"{{role}} puanı","NEW_ATTACHMENT":"yeni eklenti:","DELETED_ATTACHMENT":"silinmiş eklenti:","UPDATED_ATTACHMENT":"eklenti güncellendi ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"özel öznitelik yaratıldı","UPDATED_CUSTOM_ATTRIBUTE":"özel öznitelik güncellendi","BECAME_DEPRECATED":"kaldırıldı olarak işaretlendi","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Takım Gereksinimi","CLIENT_REQUIREMENT":"İstemci Gereksinimi","BLOCKED":"Engelli","VALUES":{"NOT_SET":"not set","UNASSIGNED":"atama yok"},"FIELDS":{"SUBJECT":"konu","DESCRIPTION":"tanım","PRIORITY":"öncelik","SEVERITY":"önem derecesi","STATUS":"durum","TYPE":"tip","ASSIGNED_TO":"atanmış","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"koşu","COLOR":"renk"}},"BACKLOG":{"PAGE_TITLE":"Havuz - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin koşuları ve kullanıcı hikayeleriyle birlikte havuz paneli: {{projectDescription}}","SECTION_NAME":"Havuz","CUSTOMIZE_GRAPH":"Havuz grafiğinizi özelleştirin","CUSTOMIZE_GRAPH_TEXT":"Projenizin gelişimini görebileceğiniz güzel bir grafik için koşu ve puanları ayarlayın","CUSTOMIZE_GRAPH_ADMIN":"Yönetim","CUSTOMIZE_GRAPH_TITLE":"Yönetimden puan ve koşuları ayarlayın","MOVE_US_TO_CURRENT_SPRINT":"Şimdiki Koşuya Taşı","MOVE_US_TO_LATEST_SPRINT":"Son koşuya taşı","EMPTY":"Havuz bomboş!","CREATE_NEW_US":"Yeni bir KH oluştur","CREATE_NEW_US_EMPTY_HELP":"Yeni bir kullanıcı hikayesi oluşturmak isteyebilirsiniz","EXCESS_OF_POINTS":"Puan bolluğu","PENDING_POINTS":"Bekleyen Puanlar","CLOSED_POINTS":"kapatıldı","COMPACT_SPRINT":"Kısa koşu","GO_TO_TASKBOARD":" {{::name}} görev panosuna git ","EDIT_SPRINT":"Koşuyu düzenle","TOTAL_POINTS":"toplam","STATUS_NAME":"Durum Adı","SORTABLE_FILTER_ERROR":"Filtreler açıkken sürükle bırak yapamazsınız","DOOMLINE":"Proje Kapsamı","CHART":{"XAXIS_LABEL":"Koşular","YAXIS_LABEL":"Puanlar","OPTIMAL":"\"{{sprintName}}\" koşusu için ideal puan {{value}} olmalı","REAL":"\"{{sprintName}}\" koşusunda gerçekte kalan puan {{value}}","INCREMENT_TEAM":" {{sprintName}} koşusu için müşteri gereksinimleri nedeniyle artırılan puan {{value}}","INCREMENT_CLIENT":" {{sprintName}} koşusu için takım gereksinimleri nedeniyle artırılan puan {{value}}"},"TAGS":{"TOGGLE":"Etiket görünürlüğünü değiştir","SHOW":"Etiketleri göster","HIDE":"Etiketleri gizler"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Havuzu göster","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Kullanıcı Hikayeleri ","TITLE_COLUMN_POINTS":"Her rol için görünüm seç"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"toplam
    puan","COMPLETED_POINTS":"tamamlanmış
    puanlar","OPEN_TASKS":"açık
    görevler","CLOSED_TASKS":"kapatılmış
    görevler","IOCAINE_DOSES":"baldıran zehri
    dozu","SHOW_STATISTICS_TITLE":"İstatistikleri göster","TOGGLE_BAKLOG_GRAPH":"Eritme grafiğini göster/gizle","POINTS_PER_ROLE":"Rol başına düşen puan"},"SUMMARY":{"PROJECT_POINTS":"proje
    puanları","DEFINED_POINTS":"tanımlı
    puanlar","CLOSED_POINTS":"kapatılmış
    puanlar","POINTS_PER_SPRINT":"puanlar /
    koşu"},"FILTERS":{"TOGGLE":"Filtrelerin görünürlüğünü değiştir","HIDE":"Filtreleri Gizle","SHOW":"Filtreleri Göster"},"SPRINTS":{"TITLE":"KOŞULAR","DATE":"DD MM YYYY","LINK_TASKBOARD":"Koşu İş Panosu","TITLE_LINK_TASKBOARD":"\"{{name}}\" görev panosuna git","EMPTY":"Henüz hiç koşu yok","WARNING_EMPTY_SPRINT_ANONYMOUS":"Bu koşuda hiç kullanıcı hikayesi yok.","WARNING_EMPTY_SPRINT":"Yeni bir koşu başlatmak icin havuzdan buraya hikaye taşıyın","TITLE_ACTION_NEW_SPRINT":"Yeni koşu ekle","TEXT_ACTION_NEW_SPRINT":"Projenizde yeni bri koşu oluşturmak isteyebilirsiniz","ACTION_SHOW_CLOSED_SPRINTS":"Kapatılmış koşuları göster","ACTION_HIDE_CLOSED_SPRINTS":"Kapatılmış koşuları gizle"}},"ERROR":{"TEXT1":"Birşeyler oldu ve bizim Honki ponkilerimiz üzerinde çalışıyor.","NOT_FOUND":"Bulunamadı","NOT_FOUND_TEXT":"Hata 404. Baktığınız sayfa mevcut değil. Belki TAIGA ana sayfasına geri dönerek aradığınızı bulabilirsiniz.","PERMISSION_DENIED":"İzin verilmedi","PERMISSION_DENIED_TEXT":"Bu sayfaya erişim izniniz yok.","VERSION_ERROR":"Honki ponkilerimiz yaptığınız değişiklikleri uygulamadan önce Taiga da çalışan birileri farklı bir değişiklik yapmış. Lütfen sayfayı yeniden yükleyin ve değişikliklerinizi yeniden uygulayın(yenileme ile değişiklikler kaybolabilir)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Koşu İş Panosu - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin koşusu {{sprintName}} ( {{startDate}} - {{endDate}} tarihleri arası) . %{{completedPercentage}} tamam. ({{totalPoints}} puandan {{completedPoints}} bitmiş). {{totalTasks}} işten {{openTasks}} tanesi açık.","SECTION_NAME":"Görev Panosu","TITLE_ACTION_ADD":"Yeni bir Görev ekle","TITLE_ACTION_ADD_BULK":"Toplu halde yeni bir kaç görev ekle","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Görev ata","PLACEHOLDER_CARD_TITLE":"Bu bir görev olabilir","PLACEHOLDER_CARD_TEXT":"Hikayeleri ve görevleri birbirinden ayırın ve öyle izleyin","TABLE":{"COLUMN":"Kullanıcı hikayesi","TITLE_ACTION_FOLD":"Sütun Katla","TITLE_ACTION_UNFOLD":"Sütun katını aç","TITLE_ACTION_FOLD_ROW":"Satın Katla","TITLE_ACTION_UNFOLD_ROW":"Satır katını aç","FIELD_POINTS":"puanlar","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Günler","YAXIS_LABEL":"Puanlar","OPTIMAL":"{{formattedDate}} günü için ideal kalan puan {{roundedValue}} olmalı","REAL":"{{formattedDate}} günü gerçekten kalan puan {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Görev {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Durum: {{taskStatus }}. Tanım: {{taskDescription}}","SECTION_NAME":"Görev","LINK_TASKBOARD":"Görev Panosu","TITLE_LINK_TASKBOARD":"Görev panosuna git","PLACEHOLDER_SUBJECT":"Yeni görev konusunu gir","TITLE_SELECT_STATUS":"Durum Adı","OWNER_US":"Bu görevin ait olduğu","TITLE_LINK_GO_OWNER":"Kullanıcı hikayesine git","TITLE_DELETE_ACTION":"Görev Sil","LIGHTBOX_TITLE_BLOKING_TASK":"Engelleyen iş","FIELDS":{"IS_IOCAINE":"baldıran zehri"},"TITLE_ACTION_IOCAINE":"Bir görev size ağır geldi ve bunaldınız mı? Diğerlerinin bu durumdan haberi olması için bir görevi düzenlerken baldıran zehrinin(temsili) üzerine tıklayın. Nasıl ki zaman zaman ekstra meydan okumalarla bir işte gittikçe iyi olmanız mümkünse, zaman içerisinde küçük dozlar alarak bu ölümcül zehre de bağışıklık kazanabilmek mümkün!"},"NOTIFICATION":{"OK":"Herşey mükemmel","WARNING":"Amanın, birşeyler oldu..","WARNING_TEXT":"Honki ponkilerimiz üzgün, yaptığınz değişiklikler kaydedilemedi!","SAVED":"Honki ponkilerimiz tüm değişikliklerinizi kaydetti!","CLOSE":"Bildirimleri kapat","MAIL":"Posta ile Bildirim","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Silmek istediğinizden emin misiniz?"},"CANCEL_ACCOUNT":{"TITLE":"Hesabınızı iptal edin","SUBTITLE":"Taigadan ayrıldığınız için üzüldük, umarım kaldığınız sürece sizi memnun kılmışızdır :)","PLACEHOLDER_INPUT_TOKEN":"hesap kuponunu iptal et","ACTION_LEAVING":"Evet, ayrılıyorum!","SUCCESS":"Honki ponkilerimiz hesabınızı sildi"},"CHANGE_EMAIL_FORM":{"TITLE":"E-postanı değiştir","SUBTITLE":"Bir tık daha ve e-postanız güncellenecek!","PLACEHOLDER_INPUT_TOKEN":"e-posta kuponunu değiştir","ACTION_CHANGE_EMAIL":"E-posta değiştir","SUCCESS":"Honki ponkiler e-postanızı güncelledi"},"ISSUES":{"PAGE_TITLE":"Sorunlar - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin sorun listesi paneli: {{projectDescription}}","SECTION_NAME":"Sorun","ACTION_NEW_ISSUE":"+ YENİ SORUN","ACTION_PROMOTE_TO_US":"Kullanıcı Hikayesine Terfi Ettir","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Bu sorun, kullanıcı hikayesine yükseltildi:","EXTERNAL_REFERENCE":"Bu talebin oluşturulduğu ","GO_TO_EXTERNAL_REFERENCE":"Kökenine git","ACTION_DELETE":"Sorun sil","LIGHTBOX_TITLE_BLOKING_ISSUE":"Engelleyen sorun","LINK_TASKBOARD":"Görev Panosu","TITLE_LINK_TASKBOARD":"Görev panosuna git","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Öncelik","SEVERITY":"Önem Durumu","TYPE":"Tip"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Bu talebi yeni bir kullanıcı hikayesi olacak şekilde terfi ettirin","MESSAGE":"Bu sorundan yeni bir hikaye oluşturmak istediğinize emin misiniz?"},"TABLE":{"COLUMNS":{"TYPE":"Tip","SEVERITY":"Önem Derecesi","PRIORITY":"Öncelik","SUBJECT":"Konu","VOTES":"Oylar","STATUS":"Durum","MODIFIED":"Değiştirilmiş","ASSIGNED_TO":"Atanmış"},"TITLE_ACTION_CHANGE_STATUS":"Durumu değiştir","TITLE_ACTION_ASSIGNED_TO":"Atanmış","BLOCKED":"Engelli","EMPTY":{"TITLE":"Bildirilen sorun yok :)","SUBTITLE":"Bir sorun mu buldunuz?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Sorun {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Durum: {{issueStatus }}. Tip: {{issueType}}, Öncelik: {{issuePriority}}. Önem: {{issueSeverity}}. Tanı: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin kullanıcı hikayeleriyle birlikte kanban paneli: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Sütun Katla","TITLE_ACTION_UNFOLD":"Sütun katını aç","TITLE_ACTION_ADD_US":"Yeni Kullanıcı Hikayesi Ekle","TITLE_ACTION_ADD_BULK":"Yeni toplu ekle","ACTION_SHOW_ARCHIVED":"Arşivlenmişleri Göster","ACTION_HIDE_ARCHIVED":"Arşivlenmişleri gizle","HIDDEN_USER_STORIES":"Bu durumdaki kullanıcı hikayeleri otomatik olarak gizlenir","PLACEHOLDER_CARD_TITLE":"Bunlar Kullanıcı Hikayeleriniz","PLACEHOLDER_CARD_TEXT":"Gereksinimleri ayrıştırmak için hikayeler alt görevlere sahip olabilirler"},"SEARCH":{"PAGE_TITLE":"Ara - {{projectName}}","PAGE_DESCRIPTION":"Projedeki hikayeleri, sorunları, işleri, viki sayfalarını ya da herhangi bir şeyi arayın {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Destanlar","FILTER_USER_STORIES":"Kullanıcı Hikayeleri","FILTER_ISSUES":"Sorunlar ","FILTER_TASKS":"Görevler","FILTER_WIKI":"Wiki Sayfaları","PLACEHOLDER_SEARCH":"Aranan konum...","TITLE_ACTION_SEARCH":"ara","EMPTY_TITLE":"Görünüşe göre arama kriterinize göre hiç bir şey bulunamadı","EMPTY_DESCRIPTION":"Üstteki sekmelerden birini deneyin ya da yeniden arayın"},"TEAM":{"PAGE_TITLE":"Takım - {{projectName}}","PAGE_DESCRIPTION":"Projedeki üyelerin tümünü göstermek için takım paneli {{projectName}}: {{projectDescription}}","SECTION_NAME":"Takım","PLACEHOLDER_INPUT_SEARCH":"Tam ad ile ara","COLUMN_MR_WOLF":"Reyiz","EXPLANATION_COLUMN_MR_WOLF":"Kapatılmış sorunlar","COLUMN_IOCAINE":"Baldıran İçici","EXPLANATION_COLUMN_IOCAINE":"içilen baldıran miktarı","COLUMN_CERVANTES":"Katip","EXPLANATION_COLUMN_CERVANTES":"Düzenlenmiş Wiki sayfaları","COLUMN_BUG_HUNTER":"Böcek Avcısı","EXPLANATION_COLUMN_BUG_HUNTER":"Bildirilen sorunlar","COLUMN_NIGHT_SHIFT":"Akşamcı","EXPLANATION_COLUMN_NIGHT_SHIFT":"Kapatılmış görevler","COLUMN_TOTAL_POWER":"Toplam Güç","EXPLANATION_COLUMN_TOTAL_POWER":"Toplam Puanlar","SECTION_TITLE_TEAM":"Takım >","SECTION_FILTER_ALL":"Hepsi","CONFIRM_LEAVE_PROJECT":"Projeden ayrılmak istediğine emin misin?","ACTION_LEAVE_PROJECT":"Bu projeden ayrıl"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. boyut: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Kullanıcı Ayarları","USER_PROFILE":"Kullanıcı profili","CHANGE_PASSWORD":"Parolayı değiştir","EMAIL_NOTIFICATIONS":"E-posta bildirimleri","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"E-posta Bildirimleri","COLUMN_PROJECT":"Proje","COLUMN_RECEIVE_ALL":"Hepsini al","COLUMN_ONLY_INVOLVED":"Sadece İlgililer","COLUMN_NO_NOTIFICATIONS":"Bildirimler kapalı","OPTION_ALL":"Hepsi","OPTION_INVOLVED":"İlgili","OPTION_NONE":"Hiçbiri"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Proje","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Proje"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Varsayılan resmi kullan","ACTION_DELETE_ACCOUNT":"Taiga hesabını sil","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Gelen kutunuzu kontrol edin!
    Yeni adresinizi belirlemek için gerekli
    yönergeleri içeren postayı gönderdik","CHANGE_PHOTO":"Resim değiştir","FIELD":{"USERNAME":"Kullanıcı adı","EMAIL":"E-posta","FULL_NAME":"Tam isim","PLACEHOLDER_FULL_NAME":"Tam adınızı giriniz (ör. Bilge Tonyukuk)","BIO":"Bio (max. 210 karakter)","PLACEHOLDER_BIO":"Bize kendin hakkında bir şeyler söyle","LANGUAGE":"Dil","LANGUAGE_DEFAULT":"-- varsayılan dili kullan --","THEME":"Tema","THEME_DEFAULT":"-- varsayılan temayı kullan --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Son sürüm {{lastModifiedDate}} ({{totalEditions}} toplamda sürüm sayısı) İçerik: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Bu wiki sayfasını sil","DELETE_LIGHTBOX_TITLE":"Wiki Sayfası Sil","DELETE_LINK_TITLE":"Wiki bağlantısı sil","NAVIGATION":{"HOME":"Ana Sayfa","SECTION_NAME":"YER İMLERİ","ACTION_ADD_LINK":"Yer imi ekle","ALL_PAGES":"Tüm Wiki sayfaları"},"SUMMARY":{"TIMES_EDITED":"kere
    düzenlendi","LAST_EDIT":"son
    düzenleme","LAST_MODIFICATION":"son düzenleme"},"SECTION_PAGES_LIST":"Tüm sayfalar","PAGES_LIST_COLUMNS":{"TITLE":"Başlık","EDITIONS":"Editions","CREATED":"Oluşturuldu","MODIFIED":"Değiştirilmiş","CREATOR":"Başlatan","LAST_MODIFIER":"Son düzenleyen"}},"HINTS":{"SECTION_NAME":"İpucu","LINK":"Nasıl kullanılacağını öğrenmek isterseniz destek sayfamıza bekleriz","LINK_TITLE":"Destek sayfamızı ziyaret edin","HINT1_TITLE":"Projeleri içe ya da dışarı aktarabileceğinizi biliyor muydunuz?","HINT1_TEXT":"Bu bir Taiga da yer alan tüm verilerinizi çıkararak diğerine taşımanıza olanak sağlar.","HINT2_TITLE":"Özel alanlar oluşturabileceğinizi biliyor muydunuz?","HINT2_TEXT":"Takımlar artık kendi iş akışlarına özgü bilgileri girebilecekleri özel alanlar oluşturabilirler","HINT3_TITLE":"Projelerinizi, sizi en çok ilgilendirenleri öne çıkartacak şekilde sıralayın.","HINT3_TEXT":"10 proje üstteki doğrudan erişim bölümünde gözükür","HINT4_TITLE":"Nerede kaldığınızı unuttunuz mu?","HINT4_TEXT":"Kaygılanmayın, çalışma sıranıza göre ayarlanan açık işlerinize, sorunlarınıza ve kullanıcı hikayelerinize panonuzdan erişebilirsiniz."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} kullanıcısı {{obj_name}} 'ye bir yeni ek yükledi","US_CREATED":"{{project_name}} projesinde yer alacak {{us_name}} adlı yeni bir KH, {{username}} tarafından oluşturuldu","ISSUE_CREATED":"{{username}}, {{project_name}} projesinde yeni sorun ({{obj_name}}) oluşturdu","TASK_CREATED":"{{project_name}} projesindeki yeni görev {{obj_name}}, {{username}} tarafından oluşturuldu","TASK_CREATED_WITH_US":" {{project_name}} projesinde yer alan {{us_name}} adlı KH ya ait yeni bir görev {{obj_name}}, {{username}} tarafından oluşturuldu","WIKI_CREATED":"{{project_name}} projesindeki yeni wiki sayfası {{obj_name}}, {{username}} tarafından oluşturuldu","MILESTONE_CREATED":"{{project_name}} projesinde {{obj_name}} koşusu, {{username}} tarafından oluşturuldu","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{project_name}} proje {{username}} tarafından oluşturuldu","MILESTONE_UPDATED":" {{obj_name}} koşusu {{username}} tarafından güncellendi","US_UPDATED":"{{username}} kullanıcısı, {{obj_name}} KH 'sinin \"{{field_name}}\" alanını güncelledi. ","US_UPDATED_WITH_NEW_VALUE":"{{username}}, {{obj_name}} hikayesinin {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","US_UPDATED_POINTS":"{{username}}, {{obj_name}} hikayesinin {{role_name}} puanını {{new_value}} yaptı","ISSUE_UPDATED":"{{obj_name}} talebinin \"{{field_name}}\" özniteliği {{username}} tarafından güncellendi. ","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}}, {{obj_name}} sorununun {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","TASK_UPDATED":"{{username}}, {{obj_name}} işinin {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","TASK_UPDATED_WITH_NEW_VALUE":"{{username}}, {{obj_name}} işinin {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","TASK_UPDATED_WITH_US":"{{us_name}} adlı KH'ye ait {{obj_name}} talebinin \"{{field_name}}\" özniteliği {{username}} tarafından güncellendi. ","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}}, {{us_name}} hikayesindeki {{obj_name}} işinin {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","WIKI_UPDATED":"{{obj_name}} adlı wiki sayfası {{username}} tarafından güncellendi","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}}, {{obj_name}} adlı destanın \"{{field_name}}\" alanını olarak değiştirdi","NEW_COMMENT_US":" {{obj_name}} KH'sine {{username}} tarafından yorum yapıldı","NEW_COMMENT_ISSUE":" {{obj_name}} talebine {{username}} tarafından yorum yapıldı","NEW_COMMENT_TASK":" {{obj_name}} görevine {{username}} tarafından yorum yapıldı","NEW_COMMENT_EPIC":"{{username}}, {{obj_name}} destanına bir yorum ekledi","NEW_MEMBER":"{{project_name}} projesi yeni bir üyeye sahip","US_ADDED_MILESTONE":" {{username}}, {{sprint_name}} koşusuna {{obj_name}} hikayesini ekledi","US_MOVED":"{{username}}, {{obj_name}} hikayesini taşıdı","US_REMOVED_FROM_MILESTONE":"{{username}} havuza {{obj_name}} hikayesini ekledi","BLOCKED":"{{obj_name}}, {{username}} tarafından engellendi","UNBLOCKED":"{{obj_name}} nin engeli {{username}} tarafından kaldırıldı ","NEW_USER":"{{username}} Taiga ya katıldı","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Sorun","TASK":"Görev"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"Bir dış uygulama oturum açmayı gerektiriyor","PAGE_DESCRIPTION":"Bir dış uygulama oturum açmayı gerektiriyor","AUTHORIZATION_REQUEST":"Taiga hesabınızı kullanması için {{application}} uygulamasına izin verin?","LOGIN_WITH_ANOTHER_USER":"Başka kullanıcı ile oturum açın","AUTHORIZE_APP":"Uygulamayı yetkilendir","CANCEL":"İptal"},"JOYRIDE":{"NAV":{"NEXT":"İleri","BACK":"Arka","SKIP":"Geç","DONE":"Bitmiş"},"DASHBOARD":{"STEP1":{"TITLE":"Projeniz","TEXT":"Hoşgeldiniz! Burada dahil olduğunuz projeleri göreceksiniz."},"STEP2":{"TITLE":"Üzerinde çalışılıyor","TEXT":"Burada üzerinde çalıştığınız hikayeleri, işleri ve sorunları göreceksiniz."},"STEP3":{"TITLE":"İzliyor","TEXT1":"Ve burada da projenizde bilmek isteyebileceklerinizi bulacaksınız.","TEXT2":"Zaten Taiga ile birlikte çalışmaktasınız ;)"},"STEP4":{"TITLE":"Hadi başlayın","TEXT1":"İlk Taiga projenizi oluşturarak başlayabilirsiniz.","TEXT2":"İyi şanslar!"}},"BACKLOG":{"STEP1":{"TITLE":"Proje özeti","TEXT1":"Buradan projenizin durumunu görebilirsiniz.","TEXT2":"Yönetim bölümünde ile her türlü proje ayarlarını değiştirebilirsiniz."},"STEP2":{"TITLE":"Ürün havuzu","TEXT":"Havuz, proje gereksinimlerinin (Kullanıcı Hikayeleri) sıralı listesidir. Koşularınızı planlayacağınız yer burasıdır."},"STEP3":{"TITLE":"Koşular","TEXT":"Koşular, belirlenmiş bir iş yükünün bitirilip teslim edilmesi beklenen tanımlı, kısa (genellikle 2'şer haftalık) zaman dilimleridir."},"STEP4":{"TITLE":"Kullanıcı Hikayeleri ","TEXT":"Bunlar üst seviye gereksinimler. Bunları önce havuza ekleyip sonra da teslim edilmeleri gereken koşuya çekebilirsiniz."}},"KANBAN":{"STEP1":{"TITLE":"İş akışınızı düzenleyin","TEXT":"İş akışı adımlarınıza eşleşen sütunları yönetim bölümünden ayarlayın."},"STEP2":{"TITLE":"Kullanıcı Hikayeleri & Görevleri","TEXT":"Kullanıcı hikayeleri üst düzey gereksinimlerdir. Onları farklı kolonlara taşıyabilirsiniz."},"STEP3":{"TITLE":"Kullanıcı hikayesi eklemek","TEXT1":"Kullanıcı Hikayelerini tek tek (KH ekle ikonu) veya toptan (toptan ikonu) girmek isteyebilirsiniz","TEXT2":"İyi şanslar!"}}},"DISCOVER":{"PAGE_TITLE":"Projeleri keşfedin - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Proje keşfedin","DISCOVER_SUBTITLE":"{projects, plural, one{Keşfedilecek bir açık proje} other{Keşfedilecek # açık proje}}","MOST_ACTIVE":"En hareketli","MOST_ACTIVE_EMPTY":"Henüz AKTİF proje yok","MOST_LIKED":"En beğenilen","MOST_LIKED_EMPTY":"Henüz BEĞENİLEN proje yok","VIEW_MORE":"Daha fazlası","FEATURED":"Önemli projeler","EMPTY":"Bu arama ölçütlerine göre gösterilebilecek bir proje çıkmadı.
    Tekrar deneyin!","FILTERS":{"ALL":"Hepsi","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"İnsan arıyor","WEEK":"Geçen hafta","MONTH":"Geçen ay","YEAR":"Geçen yıl","ALL_TIME":"Tüm zamanlar","CLEAR":"Filtreleri kaldır"},"SEARCH":{"PAGE_TITLE":"Arama - Proje keşfedin - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Birşeyler yazın...","ACTION_TITLE":"Ara","RESULTS":"Arama sonuçları"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-zh-hans.json b/dist/v-1547534999795/locales/taiga/locale-zh-hans.json deleted file mode 100644 index 3283f7d..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-zh-hans.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"是","NO":"否","OR":"或","I_GET_IT":"OK, I get it","LOADING":"载入中...","DATE":"YYYY MMM DD","DATETIME":"YYYY MMM DD HH:mm","SAVE":"保存","CANCEL":"取消","ACCEPT":"接受","DELETE":"删除","UNLINK":"断开链接","CREATE":"创建","ADD":"新增","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"编辑","DRAG":"拖拽","TAG_LINE":"你的敏捷、免费和开源的项目管理工具","TAG_LINE_2":"你喜欢的项目","BLOCK":"锁定","BLOCK_TITLE":"冻结:例如它有一个依赖不能满足,那么请冻结此项","BLOCKED":"已冻结","UNBLOCK":"解除冻结","UNBLOCK_TITLE":"关闭此项","BLOCKED_NOTE":"为什么它被关闭了呢?","BLOCKED_REASON":"请解释此原因","CREATED_BY":"由 {{fullDisplayName}} 创建","CLOSE":"关闭","GO_HOME":"返回首页","PLUGINS":"插件","ONE_ITEM_LINE":"一行一项","NEW_BULK":"批量插入","SUBTASKS":"Subtasks","PREVIOUS":"前一个","NEXT":"下一个","LOGOUT":"退出","EXTERNAL_USER":"外部用户","GENERIC_ERROR":"系统错误:{{error}}。","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"终端需求:是一个之前不存在的新的需求,并且该需求被要求成为项目的一部分","TEAM_REQUIREMENT":"团队需求:必须是项目中已经存在的需求,并且该需求不会对终端造成任何额外成本","OWNER":"项目所有者","CAPSLOCK_WARNING":"注意!你正在输入大写字母,该输入区域是区分大小写的。","CONFIRM_CLOSE_EDIT_MODE_TITLE":"你确定关闭编辑模式吗?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"请记住,如果你在保存之前关闭了编辑模式,所有的更改都会丢失","RELATED_USERSTORIES":"相关用户故事","CARD":{"ASSIGN_TO":"指派给","EDIT":"编辑卡片","DELETE":"删除卡片","DELETE_ISSUE":"删除问题","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"该数值似乎为无效","TYPE_EMAIL":"该电子邮件应为有效地址","TYPE_URL":"该网址应为有效链接","TYPE_URLSTRICT":"该网址应为有效链接","TYPE_NUMBER":"该数值应为有效号码","TYPE_DIGITS":"该数值应为有效数字","TYPE_DATEISO":"该数值应为有效日期 (YYYY-MM-DD)","TYPE_ALPHANUM":"该数值应为字母","TYPE_PHONE":"该数值应为有效的电话号码","NOTNULL":"该数值不应为零","NOT_BLANK":"该数值不应为空白","REQUIRED":"该数值为必须","REGEXP":"该数值似乎无效","MIN":"该数值应大于或等于 %s","MAX":"该数值应小于或等于 %s","RANGE":"该数值应介于 %s 与 %s之间","MIN_LENGTH":"该数值过短,它至少要有 %s 个字符","MAX_LENGTH":"该数值过长,它不可多于 %s 个字符。","RANGE_LENGTH":"该数值长度为无效,它应介于 %s 与 %s 字符之间","MIN_CHECK":"你必须至少选择 %s 选项","MAX_CHECK":"你必须至多选出 %s 选项","RANGE_CHECK":"你必须在 %s 与 %s 之间作出选择","EQUAL_TO":"该数值应为一致","LINEWIDTH":"一行或者多行可能太长了。尝试保持在 %s 字节以内","PIKADAY":"无效的日期格式,请使用DD MMM YYYY (如 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"上个月","NEXT_MONTH":"下个月","MONTHS":{"JAN":"一月","FEB":"二月","MAR":"三月","APR":"四月","MAY":"五月","JUN":"六月","JUL":"七月","AUG":"八月","SEP":"九月","OCT":"十月","NOV":"十一月","DEC":"十二月"},"WEEK_DAYS":{"SUN":"周日","MON":"周一","TUE":"周二","WED":"周三","THU":"周四","FRI":"周五","SAT":"周六"},"WEEK_DAYS_SHORT":{"SUN":"周日","MON":"周一","TUE":"周二","WED":"周三","THU":"周四","FRI":"周五","SAT":"周六"}},"SEE_USER_PROFILE":"查看 {{username }} 个人信息","USER_STORY":"用户故事","TASK":"任务","ISSUE":"问题","EPIC":"史诗","TAGS":{"PLACEHOLDER":"输入标签","DELETE":"删除标签","ADD":"新增标签"},"DESCRIPTION":{"EMPTY":"留下空白显得很无趣,写下点描述吧","NO_DESCRIPTION":"未有任何描述"},"FIELDS":{"SUBJECT":"主题","NAME":"名称","URL":"网址","DESCRIPTION":"描述","VALUE":"值","SLUG":"代称","COLOR":"颜色","IS_CLOSED":"关闭中?","STATUS":"状态","TYPE":"类型","SEVERITY":"严重程度","PRIORITY":"优先级","ASSIGNED_TO":"指派给","ASSIGNED_USERS":"被指派人列表","POINTS":"点数","IS_BLOCKED":"冻结","REF":"Ref","VOTES":"投票数","SPRINT":"冲刺任务","DUE_DATE":"截止日期","DUE_DATE_REASON":"截止日期原因"},"ROLES":{"ALL":"所有"},"ASSIGNED_TO":{"NOT_ASSIGNED":"未指派","ASSIGN":"指派","DELETE_ASSIGNMENT":"删除指派","REMOVE_ASSIGNED":"移除指派","TOO_MANY":"...太多用户,继续过滤中","CONFIRM_UNASSIGNED":"你确定要让它无任何指派吗?","TITLE_ACTION_EDIT_ASSIGNMENT":"编辑指派","SELF":"指派给我"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"设置截止日期"},"ASSIGNED_USERS":{"ADD":"选择指派人","ADD_ASSIGNED":"添加指派人","TITLE_LIGHTBOX_DELETE_ASSIGNED":"删除指派..."},"STATUS":{"CLOSED":"关闭","OPEN":"开启"},"WATCHERS":{"WATCHERS":"关注者列表","ADD":"添加关注者","TITLE_ADD":"添加项目成员到关注者列表","DELETE":"已删除关注者","TITLE_LIGHTBOX_DELETE_WARTCHER":"删除关注者"},"WATCH_BUTTON":{"WATCH":"关注","WATCHING":"关注中","UNWATCH":"撤销关注","WATCHERS":"关注者列表","BUTTON_TITLE":"关注/撤销关注该项","COUNTER_TITLE":"{total, plural, one{一个关注者} other{# 个关注者}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"赞/踩该项","COUNTER_TITLE":"{total, plural, one{一票} other{# 票}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"自定义字段","SAVE":"保存自定义字段","EDIT":"编辑自定义字段","DELETE":"删除自定义字段","CONFIRM_DELETE":"请记住,在这个自定义字段中的所有值都会被删除。你确定继续吗?"},"FILTERS":{"INPUT_PLACEHOLDER":"标题或参考","TITLE_ACTION_FILTER_BUTTON":"搜索","TITLE":"过滤器","TITLE_ACTION_SEARCH":"搜索","ACTION_SAVE_CUSTOM_FILTER":"储存为定制过滤器","PLACEHOLDER_FILTER_NAME":"写入过滤器名称后按下enter","APPLIED_FILTERS_NUM":"已用过滤器","CATEGORIES":{"TYPE":"类型","STATUS":"状态","SEVERITY":"严重程度","PRIORITIES":"优先级","TAGS":"标签","ASSIGNED_TO":"指派给","ASSIGNED_USERS":"被指派人列表","ROLE":"角色","CREATED_BY":"由创建","CUSTOM_FILTERS":"定制过滤器","EPIC":"史诗"}},"WYSIWYG":{"CODE_SNIPPET":"代码块","DB_CLICK":"双击进行编辑","SELECT_LANGUAGE_PLACEHOLDER":"选择语言","SELECT_LANGUAGE_REMOVE_FORMATING":"删除格式","OUTDATED":"在你编辑的过程中其他用户对其做了更新。在你保存你的修改之前,请在活动标签页查看新版本。","MARKDOWN_HELP":"Markdown 语法帮助"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"史诗","VIEW_EPICS":"查看史诗","ADD_EPICS":"添加史诗","MODIFY_EPICS":"修改史诗","COMMENT_EPICS":"评论史诗","DELETE_EPICS":"删除史诗"},"SPRINTS":{"NAME":"冲刺任务","VIEW_SPRINTS":"查看冲刺任务","ADD_SPRINTS":"增加冲刺任务","MODIFY_SPRINTS":"修改冲刺任务","DELETE_SPRINTS":"删除冲刺任务"},"USER_STORIES":{"NAME":"用户故事","VIEW_USER_STORIES":"查看用户故事","ADD_USER_STORIES":"新增用户故事","MODIFY_USER_STORIES":"修改用户故事","COMMENT_USER_STORIES":"评论用户故事","DELETE_USER_STORIES":"删除用户故事"},"TASKS":{"NAME":"任务","VIEW_TASKS":"查看任务","ADD_TASKS":"新增任务","MODIFY_TASKS":"修改任务","COMMENT_TASKS":"评论任务","DELETE_TASKS":"删除任务"},"ISSUES":{"NAME":"问题","VIEW_ISSUES":"查看问题","ADD_ISSUES":"新增问题","MODIFY_ISSUES":"修改议题","COMMENT_ISSUES":"评论问题","DELETE_ISSUES":"删除问题"},"WIKI":{"NAME":"维基","VIEW_WIKI_PAGES":"查看维基页","ADD_WIKI_PAGES":"新增维基页","MODIFY_WIKI_PAGES":"修改维基页","DELETE_WIKI_PAGES":"删除维基页","VIEW_WIKI_LINKS":"查看维基链接","ADD_WIKI_LINKS":"新增维基链接","DELETE_WIKI_LINKS":"删除维基链接"}}},"LOGIN":{"PAGE_TITLE":"登入 - Taiga","PAGE_DESCRIPTION":"登录Taig,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。"},"AUTH":{"INVITED_YOU":"已邀请您加入此项目","NOT_REGISTERED_YET":"还没注册吗?","REGISTER":"注册","CREATE_ACCOUNT":"在此建立您的免费账户"},"LOGIN_COMMON":{"HEADER":"我已登录Taiga","PLACEHOLDER_AUTH_NAME":"用户名称或电子邮件(注意大小写)","LINK_FORGOT_PASSWORD":"忘记密码?","TITLE_LINK_FORGOT_PASSWORD":"您忘记密码了吗","ACTION_ENTER":"回车","ACTION_SIGN_IN":"登录","PLACEHOLDER_AUTH_PASSWORD":"密码(大小写敏感)","ALT_LOGIN":"或登录为"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"根据我们的系统记录,你的账户名称/电子邮件或密码并不正确","SUCCESS":"欢迎你登录Taiga"},"REGISTER":{"PAGE_TITLE":"注册 - Taiga","PAGE_DESCRIPTION":"在Taiga创建一个账户,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。"},"REGISTER_FORM":{"TITLE":"注册一个新的Taiga账户(免费 )","PLACEHOLDER_NAME":"填写一个用户账号(注意大小写)","PLACEHOLDER_FULL_NAME":"填写你的全名","PLACEHOLDER_EMAIL":"填写你的电子邮件","PLACEHOLDER_PASSWORD":"设置密码(大小写敏感)","ACTION_SIGN_UP":"注册","TITLE_LINK_LOGIN":"登录","LINK_LOGIN":"你是否已注册? 登录"},"FORGOT_PASSWORD":{"PAGE_TITLE":"忘记密码 - Taiga","PAGE_DESCRIPTION":"请输入你的用户名或电子邮件地址获取新密码重新登录Taiga"},"FORGOT_PASSWORD_FORM":{"TITLE":"你是否忘了密码?","SUBTITLE":"输入你的用户名称或电子邮件进行注册","PLACEHOLDER_FIELD":"用户名称或电子邮件","ACTION_RESET_PASSWORD":"重设密码","LINK_CANCEL":"不,请带我回去,我记起来了","SUCCESS_TITLE":"检查你的收件箱!","SUCCESS_TEXT":"我们向你的邮箱发送了一封带有重置密码指令的邮件","ERROR":"根据我们的系统记录,你尚未注册"},"CHANGE_PASSWORD":{"PAGE_TITLE":"修改密码 - Taiga","SECTION_NAME":"更新密码","FIELD_CURRENT_PASSWORD":"当前密码","PLACEHOLDER_CURRENT_PASSWORD":"你当前的密码(如果你未有密码,此处请空白)","FIELD_NEW_PASSWORD":"新密码","PLACEHOLDER_NEW_PASSWORD":"输入新密码","FIELD_RETYPE_PASSWORD":"重新输入新密码","PLACEHOLDER_RETYPE_PASSWORD":"重新输入新密码","ERROR_PASSWORD_MATCH":"密码不匹配"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"创建新Taiga通过","SUBTITLE":"你也许该吃点含铁丰富的食物,它对你的大脑有益处:p","PLACEHOLDER_NEW_PASSWORD":"新密码","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"重新输入新密码","ACTION_RESET_PASSWORD":"重设密码","ERROR":"我们的系统无法响应恢复密码的请求。请再尝试一次。","SUCCESS":"系统已储存你的新密码
    试试 用它登录"},"INVITATION":{"PAGE_TITLE":"接受邀请 - Taiga","PAGE_DESCRIPTION":"接受邀请加入Taiga上的项目,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"我们的Oompa Loompas无法找到你邀请","SUCCESS":"你成功地加入此项目,欢迎来到 {{project_name}}"},"HOME":{"PAGE_TITLE":"首页 - Taiga","PAGE_DESCRIPTION":"Taiga 首页,你的主要项目以及任命,观看用户故事,任务与问题。","EMPTY_WORKING_ON":"看起来空荡荡的,是不是?开始使用Taiga,你将会在这里看到你正在处理的用户故事,任务以及问题。","EMPTY_WATCHING":"在你的项目中追踪用户故事、任务、问题并且收到更新的通知 :)","EMPTY_PROJECT_LIST":"你尚无任何项目","WORKING_ON_SECTION":"进行中","WATCHING_SECTION":"关注中","DASHBOARD":"项目仪表盘"},"EPICS":{"TITLE":"史诗","SECTION_NAME":"用户故事","EPIC":"史诗","PAGE_TITLE":"史诗 - {{projectName}}","PAGE_DESCRIPTION":"项目的史诗列表{{projectName}}:{{projectDescription}}","DASHBOARD":{"ADD":"添加史诗","UNASSIGNED":"未指派"},"EMPTY":{"TITLE":"您还未创建任何史诗","EXPLANATION":"史诗是一种包含用户故事的更上层的概念。\n史诗可用于组织用户故事并处于其层次结构的顶层。","HELP":"了解更多关于史诗的信息"},"TABLE":{"VOTES":"投票数","NAME":"名称","PROJECT":"项目","SPRINT":"冲刺任务","ASSIGNED_TO":"已指派","STATUS":"状态","PROGRESS":"进度","VIEW_OPTIONS":"浏览选项"},"CREATE":{"TITLE":"新建史诗","PLACEHOLDER_DESCRIPTION":"请添加一些描述文字来帮助其他人更好的了解这个史诗","TEAM_REQUIREMENT":"团队需求","CLIENT_REQUIREMENT":"客户需求","BLOCKED":"已锁定","BLOCKED_NOTE_PLACEHOLDER":"为什么这个史诗被冻结了?","CREATE_EPIC":"创建史诗"}},"PROJECTS":{"PAGE_TITLE":"我的项目 - Taiga","PAGE_DESCRIPTION":"你的项目列表,你可以重新排序或者创建新项目。","MY_PROJECTS":"我的项目"},"ATTACHMENT":{"SECTION_NAME":"附件","TITLE":"{{ fileName }} 上传于 {{ date }}","LIST_VIEW_MODE":"列表视图模式","GALLERY_VIEW_MODE":"缩略图模式","DESCRIPTION":"输入一段简短描述","DEPRECATED":"(已废弃)","DEPRECATED_FILE":"废弃?","ADD":"加入新附件 {{maxFileSizeMsg}}","DROP":"将附件拖到这里来!","SHOW_DEPRECATED":"+ 显示废弃的附件","HIDE_DEPRECATED":"- 隐藏废弃的附件","COUNT_DEPRECATED":"({{ counter }} 遭废弃)","MAX_UPLOAD_SIZE":"上传文档最大体积限制 {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"无法成功上传 '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"删除附件....","MSG_LIGHTBOX_DELETE_ATTACHMENT":"附件 '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"无法删除: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"上一个","NEXT":"下一个"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"编辑值","TITLE_ACTION_DELETE_VALUE":"删除值","TITLE_ACTION_DELETE_TAG":"删除标签"},"HELP":"需要帮助吗?看看我们的帮助页面吧!","PROJECT_DEFAULT_VALUES":{"TITLE":"预设值","SUBTITLE":"将所有选项设为预设值"},"MEMBERSHIPS":{"TITLE":"管理成员","PAGE_TITLE":"成员资格 - {{projectName}}","ADD_BUTTON":"+ 新成员","ADD_BUTTON_TITLE":"增加新成员","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"这个项目已经达到它的允许最多成员上限 ({{members}})。如果你希望增加这个上限,请联系管理员。"},"PROJECT_EXPORT":{"TITLE":"导出","SUBTITLE":"导出你的项目以备份,或以此为基础来创建一个新的。","EXPORT_BUTTON":"导出","EXPORT_BUTTON_TITLE":"导出你的项目","LOADING_TITLE":"档案正在生成中","DUMP_READY":"你的档案已经准备好了!","LOADING_MESSAGE":"请勿关闭本页","ASYNC_MESSAGE":"准备好后,我们会发送一封电子邮件","SYNC_MESSAGE":"如果未能自动下载,请点击此处.","ERROR":"我们的系统无法导出你的资料,请再试一次","ERROR_BUSY":"抱歉系统繁忙中,请稍后再试试"},"MODULES":{"TITLE":"模块","EPICS":"史诗","EPICS_DESCRIPTION":"可视化和管理你项目的最为要害的部分","BACKLOG":"待办事项","BACKLOG_DESCRIPTION":"管理你的用户故事,让接下来的及优先的工作能被有条理地查看","NUMBER_SPRINTS":"期待的冲刺数量","NUMBER_SPRINTS_HELP":"待确定的数量(0)","NUMBER_US_POINTS":"估计总的故事点","NUMBER_US_POINTS_HELP":"待确定的数量(0)","KANBAN":"看板","KANBAN_DESCRIPTION":"在此看板上组织你的项目","ISSUES":"问题","ISSUES_DESCRIPTION":"追踪错误,问题以及增强你的项目,不要错过任何事","WIKI":"维基文档","WIKI_DESCRIPTION":"新增,修正或是删除与他人合作的文档内容。这里正是项目文件记录区","MEETUP":"视频会议","MEETUP_DESCRIPTION":"选择你的视频会议系统","SELECT_VIDEOCONFERENCE":"选择一个视频会议系统","SALT_CHAT_ROOM":"为聊天室名称添加一个前缀","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"自定","URL_CHAT_ROOM":"聊天室之网址"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - 项目档案 - {{projectName}}","PROJECT_DETAILS":"项目细节","PROJECT_NAME":"项目名称","TAGS":"标签","DESCRIPTION":"描述","RECRUITING":"这个项目是否在招人?","RECRUITING_MESSAGE":"你在寻找什么人?","RECRUITING_PLACEHOLDER":"定义简介","FEEDBACK":"是否接收来自Taiga用户的反馈?","PUBLIC_PROJECT":"公开项目","PRIVATE_PROJECT":"私有项目","PRIVATE_OR_PUBLIC":"公开项目与私有项目有什么区别?","DELETE":"删除此项目","CHANGE_LOGO":"更换图标","ACTION_USE_DEFAULT_LOGO":"使用默认图片","MAX_PRIVATE_PROJECTS":"根据你当前计划,你已经达到了私有项目允许的最大成员限制","MAX_PRIVATE_PROJECTS_MEMBERS":"已超过私有项目的最大成员数目的限制","MAX_PUBLIC_PROJECTS":"对不起,根据你当前计划,你已经达到了公开项目允许的最大成员限制","MAX_PUBLIC_PROJECTS_MEMBERS":"作为公开项目,该项目已经超过了你的最大成员数目","PROJECT_OWNER":"项目所有者","REQUEST_OWNERSHIP":"请求项目所有权","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"你希望成为该项目的新所有者吗?","REQUEST_OWNERSHIP_DESC":"请求当前项目所有者 {{name}} 将项目所有权转给你。","REQUEST_OWNERSHIP_BUTTON":"要求","REQUEST_OWNERSHIP_SUCCESS":"我们将通知项目所有者","CHANGE_OWNER":"改变所有者","CHANGE_OWNER_SUCCESS_TITLE":"好,你的请求已经发出!","CHANGE_OWNER_SUCCESS_DESC":"如果项目所有者请求被接受或者被拒绝,我们将通过邮件通知你"},"REPORTS":{"TITLE":"报告","SUBTITLE":"以 CSV 格式导出你的项目资料,并制作你的专属报告","DESCRIPTION":"下载CSV档案格式是复制生成网址到常用的文字编辑软件/试算表,以保存你的项目资料报告。你可以轻易地视觉化和分析你的资料。","HELP":"如何使用我的表格软件?","REGENERATE_TITLE":"改变网址","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"史诗报告","SECTION_TITLE_US":"用户故事报告","SECTION_TITLE_TASK":"任务报告","SECTION_TITLE_ISSUE":"问题报告","DOWNLOAD":"下载CSV档案","URL_FIELD_PLACEHOLDER":"再次产生CSV 网址","TITLE_REGENERATE_URL":"再次产生CSV 网址","ACTION_GENERATE_URL":"产生网址","ACTION_REGENERATE":"再次产生","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"删除"},"CUSTOM_FIELDS":{"TITLE":"自定义字段","SUBTITLE":"指定用户故事,任务与问题一些自定义字段","EPIC_DESCRIPTION":"史诗自定义字段","EPIC_ADD":"在史诗中加入自定义字段","US_DESCRIPTION":"用户自定义字段","US_ADD":"在用户故事中加入自定义字段","TASK_DESCRIPTION":"任务自定义字段","TASK_ADD":"在任务中加入自定义字段","ISSUE_DESCRIPTION":"问题自定义字段","ISSUE_ADD":"在问题中加入自定义字段","FIELD_TYPE_TEXT":"单行文字","FIELD_TYPE_RICHTEXT":"富文本","FIELD_TYPE_MULTI":"多行文字","FIELD_TYPE_DATE":"日期","FIELD_TYPE_URL":"链接","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - 项目数值 - {{projectName}}","REPLACEMENT":"所有此值的项将被改成","ERROR_DELETE_ALL":"你不能删除所有的值"},"PROJECT_VALUES_POINTS":{"TITLE":"点数","SUBTITLE":"指定你的用户故事的估计点数为","US_TITLE":"用户故事点数","ACTION_ADD":"增加点数"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"优先级","SUBTITLE":"指明你将遇到的问题优先程度","ISSUE_TITLE":"问题优先级","ACTION_ADD":"新增优先级"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"严重程度","SUBTITLE":"指明你将遇到问题的严重程度","ISSUE_TITLE":"问题严重程度","ACTION_ADD":"新增严重程度"},"PROJECT_VALUES_STATUS":{"TITLE":"状态","SUBTITLE":"指明你的用户故事,任务以及问题经历的状态","EPIC_TITLE":"史诗状态","US_TITLE":"用户故事状态","TASK_TITLE":"任务状态","ISSUE_TITLE":"问题状态"},"PROJECT_VALUES_TYPES":{"TITLE":"类型","SUBTITLE":"指定你的问题类型可能是","ISSUE_TITLE":"问题类型","ACTION_ADD":"新增{{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"标签","SUBTITLE":"查看并编辑你的用户故事的颜色","EMPTY":"当前没有标签","EMPTY_SEARCH":"看起来没有符合你的搜索条件的结果","ACTION_ADD":"新增标签","NEW_TAG":"新建标签","MIXING_HELP_TEXT":"选择你想合并的标签","MIXING_MERGE":"合并标签","SELECTED":"已选择"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"增加新状态","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"角色- {{projectName}}","WARNING_NO_ROLE":"注意,你的项目中无角色可以评估用户故事的点数","HELP_ROLE_ENABLED":"当启动时,被指派此角色的成员将可以评估用户故事点数","DISABLE_COMPUTABLE_ALERT_TITLE":"你确定要禁用这个角色评估吗?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"如果该角色“{{roleName}}”被禁止估算用户故事的点数,那么该角色以前做的所有评估将被删除","COUNT_MEMBERS":"{{ role.members_count }} 这类角色的成员","TITLE_DELETE_ROLE":"删除角色","REPLACEMENT_ROLE":"和此角色有关的用户都将被移除","WARNING_DELETE_ROLE":"小心!所有角色估算都将被移除","ERROR_DELETE_ALL":"你不能删除所有值","EXTERNAL_USER":"外部用户","NOTE_EXTERNAL_USERS":"注意:我们所说的外部用户是指不属于Taiga平台的匿名用户。请小心使用这种角色。"},"THIRD_PARTIES":{"SECRET_KEY":"密钥","PAYLOAD_URL":"有效负荷网址","VALID_IPS":"有效来源IP(请用逗点分开)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket要求不指派,因此最佳确认方式为IP位置来源。如果此处空白,表示IP未有效校验。"},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"GitLab要求不指派因此最佳确认方式为IP位置来源。如果此处空白,表示IP未有效校验。"},"GITHUB":{"SECTION_NAME":"Github","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"网页钩子- {{projectName}}","SECTION_NAME":"网页触发","ADD_NEW":"新增一个网页触发","TYPE_NAME":"键入服务名称","TYPE_PAYLOAD_URL":"键入服务有效负荷网址","TYPE_SERVICE_SECRET":"键入服务密码钥匙","SAVE":"储存网页触发","CANCEL":"取消网页触发","SHOW_HISTORY":"(显示记录)","TEST":"测试网页触发","EDIT":"编辑网页触发","DELETE":"删除网页触发","REQUEST":"要求","RESEND_REQUEST":"重送出要求","HEADERS":"标头","PAYLOAD":"有效负荷","RESPONSE":"回应","DATE":"DD MMM YYYY [at] hh:mm","ACTION_HIDE_HISTORY":"(藏记录)","ACTION_HIDE_HISTORY_TITLE":"藏记录细节","ACTION_SHOW_HISTORY":"(显示记录)","ACTION_SHOW_HISTORY_TITLE":"显示记录细节","WEBHOOK_NAME":"网页触发 '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - 个性设置 - {{projectName}}","ADD":"加入自定义字段","EDIT":"编辑自定义字段","DELETE":"删除自定义字段","SAVE_TITLE":"储存自定义字段","CANCEL_TITLE":"取消创建","SET_FIELD_NAME":"设定你的自定义字段名称","SET_FIELD_DESCRIPTION":"设定你自定义字段的文字描述","FIELD_TYPE_DEFAULT":"-- 选择一个 --","ACTION_UPDATE":"更新自定义字段","ACTION_CANCEL_EDITION":"取消编辑"},"MEMBERSHIP":{"COLUMN_MEMBER":"成员","COLUMN_ADMIN":"管理者","COLUMN_ROLE":"角色","COLUMN_STATUS":"状态","STATUS_ACTIVE":"活跃","STATUS_PENDING":"待办中","DELETE_MEMBER":"删除成员","RESEND":"Resend","SUCCESS_SEND_INVITATION":"我们已再次发出邀请信给'{{email}}'.","SUCCESS_DELETE":"已删除 {{message}}.","ERROR_DELETE":"我们无法删除 {{message}}.","DEFAULT_DELETE_MESSAGE":"邀请 {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"史诗状态选择器的默认值","LABEL_US_STATUS":"用户故事状态选择器的默认值","LABEL_POINTS":"点数选择器预设值","LABEL_TASK_STATUS":"任务状态选择器预设值","LABEL_ISSUE_TYPE":"问题类型选择器预设值","LABEL_ISSUE_STATUS":"问题状态选择器预设值","LABEL_PRIORITY":"优先选择器预设值","LABEL_SEVERITY":"严重程度选择器预设值"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"为此新状态命名","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"为此新元素命名"},"US_STATUS":{"ACTION_ADD_STATUS":"增加新状态","IS_ARCHIVED_COLUMN":"归档","IS_CLOSED_COLUMN":"关闭","WIP_LIMIT_COLUMN":"WIP限制","PLACEHOLDER_WRITE_NAME":"为此新状态命名"},"MENU":{"PROJECT":"项目","ATTRIBUTES":"属性","MEMBERS":"成员","PERMISSIONS":"权限","INTEGRATIONS":"整合"},"SUBMENU_PROJECT_VALUES":{"STATUS":"状态","POINTS":"点数","PRIORITIES":"优先级","SEVERITIES":"严重程度","TYPES":"类型","CUSTOM_FIELDS":"自定义字段","TAGS":"标签","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"角色","ACTION_NEW_ROLE":"+ 新角色","TITLE_ACTION_NEW_ROLE":"新增角色"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"你希望成为新的项目所有者吗?","PRIVATE":"私有的","ACCEPTED_PROJECT_OWNERNSHIP":"恭喜你!你现在是项目新的所有者了。","REJECTED_PROJECT_OWNERNSHIP":"好的。我们将联系当前项目的所有者","ACCEPT":"接受","REJECT":"拒绝","PROPOSE_OWNERSHIP":"{{owner}}, 当前项目 {{project}} 的所有者要求你成为项目的新的所有者。","ADD_COMMENT":"你愿意为项目所有者添加一条评论吗?","UNLIMITED_PROJECTS":"无线的","OWNER_MESSAGE":{"PRIVATE":"请记住你可以拥有最多 {{maxProjects}} 个私有项目。你当前拥有 {{currentProjects}} 个私有项目","PUBLIC":"请记住你最多可以拥有 {{maxProjects}} 个公开项目。你当前拥有 {{currentProjects}} 个公开项目"},"CANT_BE_OWNED":"目前你不能成为这类项目的所有者。如果你希望成为这个项目的所有者,请联系管理员,请其在你的账户设置中启用项目所有权。"}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"编辑个人资料","CLOSED_US":"关闭用户故事","PROJECTS":"项目","PROJECTS_EMPTY":"{{username}} 尚无项目","CONTACTS":"联络人","CONTACTS_EMPTY":"{{username}} 尚无联络人","CURRENT_USER_CONTACTS_EMPTY":"您尚无任何联络人","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"你在Taiga一同工作的伙伴将自动成为你的联络人","TABS":{"ACTIVITY_TAB":"时间表","ACTIVITY_TAB_TITLE":"显示该用户的所有活动","PROJECTS_TAB":"项目","PROJECTS_TAB_TITLE":"列出该用户参与的所有项目","LIKES_TAB":"Likes","LIKES_TAB_TITLE":"List all likes made by this user","VOTES_TAB":"投票数","VOTES_TAB_TITLE":"列出该用户的所有投票","WATCHED_TAB":"关注","WATCHED_TAB_TITLE":"列出该用户关注的所有事项","CONTACTS_TAB":"联络人","CONTACTS_TAB_TITLE":"列出这个用户的所有联系人"}},"PROFILE_SIDEBAR":{"TITLE":"个人信息","DESCRIPTION":"其他人可以看到你做的所有事情以及正在做的事情。添加一个好的简历可以使得你的个人信息更为丰满。","ADD_INFO":"编辑个人简介"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"输入内容...","FILTER_TYPE_ALL":"所有","FILTER_TYPE_ALL_TITLE":"显示所有","FILTER_TYPE_PROJECTS":"项目","FILTER_TYPE_PROJECTS_TITLE":"只显示项目","FILTER_TYPE_EPICS":"史诗","FILTER_TYPE_EPICS_TITLE":"仅显示史诗","FILTER_TYPE_USER_STORIES":"故事","FILTER_TYPE_USER_STORIES_TITLE":"只显示用户故事","FILTER_TYPE_TASKS":"任务","FILTER_TYPE_TASKS_TITLE":"只显示任务","FILTER_TYPE_ISSUES":"问题","FILTER_TYPE_ISSUES_TITLE":"只显示问题","EMPTY_TITLE":"看来没有什么可以显示的."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"记录你的项目在上方常用栏位
    前十个项目将会显示在上方导览处。","PRIVATE":"私有项目","LOOKING_FOR_PEOPLE":"这个项目在寻找队友","FANS_COUNTER_TITLE":"{total, plural, one{一个粉丝} other{# 个粉丝}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{一个关注者} other{# 个关注者}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{一个成员} other{# 个成员}}","BLOCKED_PROJECT":{"BLOCKED":"关闭项目","THIS_PROJECT_IS_BLOCKED":"这个项目暂时被关闭了","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"要解冻你的项目,请联系管理员。"},"SECTION":{"SEARCH":"搜索","TIMELINE":"时间表","EPICS":"用户故事","BACKLOG":"待办任务","KANBAN":"看板","ISSUES":"问题","WIKI":"维基","TEAM":"团队","MEETUP":"视频会议","ADMIN":"管理者"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"创建项目","MANAGE_PROJECTS":"管理项目","TITLE_CREATE_PROJECT":"创建项目","HELP_TITLE":"Taiga支持页","HELP":"帮助","HOMEPAGE":"主页","FEEDBACK_TITLE":"发送反馈","FEEDBACK":"反馈","NOTIFICATIONS_TITLE":"编辑个人通知设定","NOTIFICATIONS":"通知","VIEW_PROFILE_TITLE":"查看个人资料","VIEW_PROFILE":"查看个人资料","EDIT_PROFILE_TITLE":"编辑你的个人资料","EDIT_PROFILE":"编辑个人资料","CHANGE_PASSWORD_TITLE":"更换密码","CHANGE_PASSWORD":"更换密码","DASHBOARD_TITLE":"控制台","DISCOVER_TITLE":"发现流行项目","DISCOVER":"发现"},"LIKE_BUTTON":{"LIKE":"点赞","LIKED":"已点赞","UNLIKE":"取消点赞","BUTTON_TITLE":"对这个项目点赞或者取消点赞","COUNTER_TITLE":"{total, plural, one{一个粉丝} other{# 个粉丝}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"关注这个项目并设置通知规则","WATCH":"Watch","WATCHING":"关注中","COUNTER_TITLE":"{total, plural, one{一个关注者} other{# 个关注者}}","OPTIONS":{"NOTIFY_ALL":"接收所有通知","NOTIFY_ALL_TITLE":"接收这个项目的所有通知","NOTIFY_INVOLVED":"只接收相关通知","NOTIFY_INVOLVED_TITLE":"只接收与你相关的通知","UNWATCH":"取消关注","UNWATCH_TITLE":"取消关注这个项目"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"联系项目组","CONTACT_BUTTON":"联系项目组"},"CREATE":{"TITLE":"创建项目","CHOOSE_TEMPLATE":"哪个模板更适合你的项目?","TEMPLATE_SCRUM":"冲刺","TEMPLATE_SCRUM_DESC":"优先考虑和解决的时间周期短的任务.","TEMPLATE_SCRUM_LONGDESC":"Scrum是一种管理产品开发的迭代和增量的敏捷软件开发方法论。\n产品挤压(backlog)是需要最终交付的,它们按序进入交付队列的。产品挤压(backlog)被分解为可控可执行的组块,称之为冲刺(sprints)。在每一个确定的时间段内,团队根据他们的技能,能力和资源,发起一个新的冲刺并从产品挤压中提交传递一定量的用户故事(US)。随着挤压的减少,项目向前推进。","TEMPLATE_KANBAN":"看板","TEMPLATE_KANBAN_DESC":"在独立的任务上保持恒定的工作流","TEMPLATE_KANBAN_LONGDESC":"看板方法用于将(任意类型的)项目开发分为各个阶段。\n看板卡片就像一个卡片或者邮箱索引--它表明了在项目中需要完成的每个人物的细节。看板用于将卡片从一种完成状态移动到下一个状态,这样可以跟踪项目进度。","DUPLICATE":"复制项目","DUPLICATE_DESC":"开始清洁并保持您的配置","IMPORT":"导入项目","IMPORT_DESC":"从多平台导入你的项目到Taiga","INVITE":"邀请加入项目","SOLO_PROJECT":"你会单独加入这个项目","INVITE_LATER":"(你可以在之后邀请更多成员)","BACK":"后退","MAX_PRIVATE_PROJECTS":"很抱歉,你创建的私有项目数量已到达限制。如果想创建更多私有项目,请联系管理员","MAX_PUBLIC_PROJECTS":"不幸的是,你已经达到了公开项目的最大数量限制。\n如果您想增加当前限制数量,请与管理员联系。","PUBLIC_PROJECT":"公开项目","PRIVATE_PROJECT":"私有项目"},"COMMON":{"DETAILS":"新的项目详情","PROJECT_TITLE":"项目名称","PROJECT_DESCRIPTION":"项目描述"},"DUPLICATE":{"TITLE":"复制项目","DESCRIPTION":"开始清洁并保持您的配置 ","SELECT_PLACEHOLDER":"选择一个已存在的项目来复制"},"IMPORT":{"TITLE":"导入项目","DESCRIPTION":"从多平台导入你的项目到Taiga","ASYNC_IN_PROGRESS_TITLE":"我们正在导入你的项目","ASYNC_IN_PROGRESS_MESSAGE":"这个过程要花上一点时间
    当弄好时我们会发给你一封邮件","UPLOAD_IN_PROGRESS_MESSAGE":"已上传 {{totalSize}}中的{{uploadedSize}}","ERROR":"系统在滙进你倒入的资料时遇上一些问题,请再试一次","ERROR_TOO_MANY_REQUEST":"抱歉系统繁忙中,请稍后再试试","ERROR_MESSAGE":"我们的系统无法导入你的资料","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})","SYNC_SUCCESS":"你的项目已成功导入","IMPORT":"导入","WHO_IS":"他们的任务将被分配给…","WRITE_EMAIL":"或者如果你愿意,写下这个用户在Taiga使用的电子邮件","SEARCH_CONTACT":"或者如果你愿意,在你的联系人中检索","WRITE_EMAIL_LABEL":"写下这个用户在Taiga使用的电子邮件","ACCEEDE":"加入","PROJECT_MEMBERS":"项目成员","PROCESS_DESCRIPTION":"告诉我们你想要分配{{platform}}的任务给来自Taiga中的谁","MATCH":"{{user_external}}{{user_internal}}是同一个人吗?","CHOOSE":"选择用户","LINKS":"与{{platform}}链接","LINKS_DESCRIPTION":"是否要保留每个条目与原{{platform}} 卡片的链接?","WARNING_MAIL_USER":"注意,如果用户没有Taiga的帐户将无法分配任务给他。 ","ASSIGN":"指派","PROJECT_SELECTOR":{"NO_RESULTS":"看起来没有符合你的搜索条件的结果","ACTION_SEARCH":"搜索","ACTION_BACK":"后退"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"你尝试导入的项目有包含你在内的 {{members}} 个成员,不幸的是,你当前的计划对于每个私有项目最大允许 {{max_memberships}} 个成员。如果你希望增加人数请联系管理员。","PROJECT_MEMBERS_DESC_PUBLIC":"你尝试导入的项目有包含你在内的 {{members}} 个成员,不幸的是,你当前的计划对于每个公开项目最大允许 {{members}} 个成员。如果你希望增加人数请联系管理员。","ACCOUNT_ALLOW_MEMBERS":"您的账户只允许 {{members}} 成员","PRIVATE_PROJECTS_SPACE":{"TITLE":"对不起,你当前的计划不允许额外的私有项目","DESC":"你尝试导入的项目是私有的。不幸的是,你当前的计划不允许额外的私有项目。"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"对不起,你当前的计划不允许额外的公开项目","DESC":"你尝试导入的项目是公开的。不幸的是,你当前的计划不允许额外的公开项目。"},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"你当前的计划允许每个私有项目最多 {{max_memberships}} 位成员。"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"你当前的计划允许每个项目最多 {{max_memberships}} 位成员。"},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"对不起,你当前的计划不允许额外的私有项目或者每个私有项目多于 {{max_memberships}} 位成员","DESC":"你正在试图导入的项目是私有的并且有 {{members}} 位成员。"},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"对不起,你当前的计划不允许额外的公开项目或者每个公开项目多于 {{max_memberships}} 位成员","DESC":"你正在试图导入的项目是公开的并且有多于 {{members}} 位成员。"}},"IN_PROGRESS":{"TITLE":"导入项目中","DESCRIPTION":"这个过桯要花点时间,请保持视窗开启"},"WARNING":{"TITLE":"一些已分配的任务将被取消","DESCRIPTION":"依然有未经确认的人员。指派给这些人的卡片将保持未指派状态。检查所有的联系方式以保证不会丢失这些信息。","CHECK":"检查联系人"},"TAIGA":{"SELECTOR":"导入您的Taigo项目"},"TRELLO":{"SELECTOR":"将你的Trello面板导入Taiga","CHOOSE_PROJECT":"选择将要导入的面板","NO_PROJECTS":"看起来你在Trello中没有面板"},"GITHUB":{"SELECTOR":"导入你在GitHub上的问题","CHOOSE_PROJECT":"查找你想要导入的项目","NO_PROJECTS":"似乎你在GitHub上没有项目","HOW_DO_YOU_WANT_TO_IMPORT":"你希望如何将你的问题导入Taiga?","KANBAN_PROJECT":"在看板项目中作为用户故事","KANBAN_PROJECT_DESCRIPTION":"之后你可以使用backlog来启用scrum。","SCRUM_PROJECT":"在scrum项目中作为用户故事","SCRUM_PROJECT_DESCRIPTION":"之后你可以启用看板模式。","ISSUES_PROJECT":"作为问题","ISSUES_PROJECT_DESCRIPTION":"你在看板或者scrum模式下将不能使用你的问题。你可以为新的用户故事启用看板或者scrum。"},"ASANA":{"SELECTOR":"导入你的Asana项目并选择如何管理该项目","CHOOSE_PROJECT":"选择你想导入的项目","NO_PROJECTS":"似乎你在Asana上没有项目","KANBAN_PROJECT":"看板","SCRUM_PROJECT":"冲刺","CREATE_AS_SCRUM_DESCRIPTION":"你项目的任务及其子任务将被创建为用户故事和任务。","CREATE_AS_KANBAN_DESCRIPTION":"你项目的任务及其子任务将被创建为用户故事和任务。"},"JIRA":{"SELECTOR":"导入你的Jira项目并选择如何管理这个项目","HOW_TO_CONFIGURE":"(配置帮助)","CHOOSE_PROJECT":"选择你想要导入的项目或者看板","NO_PROJECTS":"看起来你在Jira中没有项目或者看板。","URL":"你的Jira地址","KANBAN_PROJECT":"看板","SCRUM_PROJECT":"冲刺","ISSUES_PROJECT":"问题","CREATE_AS_SCRUM_DESCRIPTION":"你项目的问题及其子问题将被创建为Taiga用户故事和任务。","CREATE_AS_KANBAN_DESCRIPTION":"你项目的问题及其子问题将被创建为Taiga用户故事和任务。","CREATE_AS_ISSUES_DESCRIPTION":"你打算如何使用从Jira项目中导入的子问题?(Taiga不允许存在子问题)","CREATE_NEW_ISSUES":"将子问题转换为Taiga问题","NOT_CREATE_NEW_ISSUES":"不导入子问题"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"你确定要删除Taiga账户吗?","CANCEL":"返回设置","ACCEPT":"删除账号","BLOCK_PROJECT":"请注意,在你删除你的账户之后,所有属于你的项目都会被冻结。如果你确实希望一个项目被冻结,在你删除你的账户之前,请将所有权转移至该项目的其他成员名下。"},"DELETE_PROJECT":{"TITLE":"删除项目","QUESTION":"你确定要删除这个项目吗?","SUBTITLE":"所有项目资料 (用户故事/任务/问题/冲刺/维基页面) 将会丢失! :-(","CONFIRM":"是的,我很确定"},"ASSIGNED_TO":{"SELECT":"选择要指派给","SEARCH":"搜索用户"},"ADD_MEMBER":{"TITLE":"新成员","PLACEHOLDER":"筛选用户或者编写邮件来进行邀请","ADD_EMAIL":"添加收件人邮箱","REMOVE":"移除","INVITE":"邀请","CHOOSE_ROLE":"选择一个角色","PLACEHOLDER_INVITATION_TEXT":"(非必要) 加上一段私人文字在邀请信,告诉你的新成员一些好事 ;-)","HELP_TEXT":"如果用户已注册Taiga账户,他们会自动被加入。否则他们会收到一封加入的邀请信"},"FEEDBACK":{"TITLE":"告诉我们你的故事","COMMENT":"系统错误,有改进建议有乐趣,或者是你使用Taiga 上的恶梦?","ACTION_SEND":"送出反馈"},"SEARCH":{"TITLE":"搜索","PLACEHOLDER_SEARCH":"你在找什么?"},"ADD_EDIT_SPRINT":{"TITLE":"新冲刺任务","PLACEHOLDER_SPRINT_NAME":"冲刺任务名称","PLACEHOLDER_SPRINT_START":"预估开始","PLACEHOLDER_SPRINT_END":"预估结束","ACTION_DELETE_SPRINT":"你确定要删除这个冲刺任务吗?","TITLE_ACTION_DELETE_SPRINT":"删除冲刺任务","LAST_SPRINT_NAME":"最后冲刺任务 {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"你有更改没有保存。\n你确定要关闭该表单吗?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"新增问题","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"删除截止日期","SUBTITLE":"你确定要删除该截止日期吗?"},"DELETE_SPRINT":{"TITLE":"删除冲刺任务"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(非必要) 加上一段私人文字在邀请信,告诉你的新成员一些好事 ;-)","PLACEHOLDER_TYPE_EMAIL":"输入一个电邮地址","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"对不起,该项目不能超过 {{maxMembers}} 位成员。
    如果你希望增加当前限制,请联系管理员。","LIMIT_USERS_WARNING_MESSAGE":"对不起,本项目不能有超过 {{maxMembers}} 名成员。"},"LEAVE_PROJECT_WARNING":{"TITLE":"对不起,该项目不允许在没有所有者的情况下离开","CURRENT_USER_OWNER":{"DESC":"你是本项目的当前所有者。在离开之前,请将所有权转移给其他成员。","BUTTON":"改变项目拥有者"},"OTHER_USER_OWNER":{"DESC":"对不起,你不能删除作为当前项目所有者的成员。首先,请指派一位新的项目所有者。","BUTTON":"请求项目所有者改变"}},"CHANGE_OWNER":{"TITLE":"你希望谁作为项目的新的所有者?","ADD_COMMENT":"评论","BUTTON":"要求这位项目成员作为新的项目所有者"},"CONTACT_PROJECT":{"TITLE":"发送邮件到","WARNING":"项目管理员会收到邮件","PLACEHOLDER":"输入你的消息","SEND":"发送"},"SET_DUE_DATE":{"TITLE":"设置截止日期","PLACEHOLDER_DUE_DATE":"选择截止日期","REASON_FOR_DUE_DATE":"截止日期原因","PLACEHOLDER_REASON_FOR_DUE_DATE":"为什么用户故事需要一个截止日期?","SUGGESTIONS":{"IN_ONE_WEEK":"一周内","IN_TWO_WEEKS":"两周内","IN_ONE_MONTH":"一月内","IN_THREE_MONTHS":"三月内"},"TITLE_ACTION_DELETE_DUE_DATE":"删除截止日期"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"删除截止日期","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"项目是什么","CHOOSE_PROJECT_FROM":"项目是什么","SUBJECT":"主题","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"看起来没有符合你的搜索条件的结果"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - 史诗{{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"状态:{{epicStatus}}。描述:{{epicDescription}}","SECTION_NAME":"史诗","ERROR_UNLINK_RELATED_USERSTORY":"无法断开链接:{{errorMessage}}","CREATE_RELATED_USERSTORIES":"创建关系","NEW_USERSTORY":"新建用户故事","EXISTING_USERSTORY":"已有用户故事","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"主题","SUBJECT_BULK_MODE":"题目(批量插入)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"该项目无用户故事。请选择其他项目。","NO_USERSTORIES_FOUND":"看起来没有符合你的搜索条件的结果","FILTER_USERSTORIES":"过滤用户故事","LIGHTBOX_TITLE_BLOKING_EPIC":"屏蔽史诗","ACTION_DELETE":"删除史诗"},"US":{"PAGE_TITLE":"{{userStorySubject}} - 用户故事 {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"状态: {{userStoryStatus }},已完成 {{userStoryProgressPercentage}}% (任务总数 {{userStoryTotalTasks}},已关闭{{userStoryClosedTasks}}),点数: {{userStoryPoints}},描述: {{userStoryDescription}}","SECTION_NAME":"用户故事","LINK_TASKBOARD":"任务板","TITLE_LINK_TASKBOARD":"到任务板去","TOTAL_POINTS":"总点数","ADD":"+新增用户故事","ADD_BULK":"批次加入新用户故事","PROMOTED":"此用户故事已提升成问题:","TITLE_LINK_GO_TO_ISSUE":"到问题","TITLE_DELETE_ACTION":"删除用户故事","LIGHTBOX_TITLE_BLOKING_US":"封锁中的用户故事","NOT_ESTIMATED":"无预估","OWNER_US":"此User Story属于","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"以Gig的形式在Taiga Tribe中发布","PUBLISH_INFO":"更多信息","PUBLISH_TITLE":"在Taiga Tribe中查找关于发布的更多信息","PUBLISHED_AS_GIG":"用户故事已经以Gig的形式在Taiga Tribe中发布","EDIT_LINK":"编辑链接","CLOSE":"关闭","SYNCHRONIZE_LINK":"与Taiga Tribe同步","PUBLISH_MORE_INFO_TITLE":"你是否需要其他人来做这个任务?","PUBLISH_MORE_INFO_TEXT":"如果你在工作中的某个特殊的地方需要帮助,你可以很容易地在Taiga Tribe 创建gig并接受来自世界各地的帮助。你将能够控制并管理这个gig并享受一个渴望贡献的伟大社区。TaigaTribe 作为Taiga的姊妹存在。两个平台可以相互独立,但是我们相信联合使用他们会更为强大,所以我们确信集成工作将会非常有用。"}},"COMMENTS":{"DELETED_INFO":"评论被用户{{user}}删除","COMMENTS_COUNT":"{{comments}}评论","OLDER_FIRST":"上次第一名","RECENT_FIRST":"最近第一名","COMMENT":"评论","EDITED_COMMENT":"已编辑","SHOW_HISTORY":"查看历史","TYPE_NEW_COMMENT":"在此输入一个新的评论","SHOW_DELETED":"显示遭删除的评论","HIDE_DELETED":"隐藏已删除之评论","DELETE":"删除评论","RESTORE":"恢复原评论","HISTORY":{"TITLE":"动态"}},"ACTIVITY":{"TITLE":"动态","ACTIVITIES_COUNT":"{{activities}} 活动","TAGS_ADDED":"已添加的标签","TAGS_REMOVED":"已移除的标签","US_POINTS":"{{role}} 得分","NEW_ATTACHMENT":"新附件","DELETED_ATTACHMENT":"删除附件:","UPDATED_ATTACHMENT":"更新附件 ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"创建自定义属性","UPDATED_CUSTOM_ATTRIBUTE":"更新自定义属性","BECAME_DEPRECATED":"已置为废弃","BECAME_UNDEPRECATED":"已置为废弃","TEAM_REQUIREMENT":"团队要求","CLIENT_REQUIREMENT":"客户要求","BLOCKED":"已封锁","VALUES":{"NOT_SET":"未设置","UNASSIGNED":"未指派"},"FIELDS":{"SUBJECT":"主旨","DESCRIPTION":"描述","PRIORITY":"优先级","SEVERITY":"严重程度","STATUS":"状态","TYPE":"类型","ASSIGNED_TO":"指派给","ASSIGNED_USERS":"被指派人员列表","DUE_DATE":"截止日期","MILESTONE":"冲刺任务","COLOR":"颜色"}},"BACKLOG":{"PAGE_TITLE":"待办任务 - {{projectName}}","PAGE_DESCRIPTION":"待办任务面板 {{projectName}}(项目的用户故事与冲刺任务): {{projectDescription}}","SECTION_NAME":"待办任务","CUSTOMIZE_GRAPH":"自定义你的代办任务图表","CUSTOMIZE_GRAPH_TEXT":"一个好的图表可以帮助你更好地跟随项目进展,这就要求你设置好点数和冲刺","CUSTOMIZE_GRAPH_ADMIN":"管理者","CUSTOMIZE_GRAPH_TITLE":"通过管理员来设置点数和冲刺","MOVE_US_TO_CURRENT_SPRINT":"移到目前的冲刺","MOVE_US_TO_LATEST_SPRINT":"切换到最近的冲刺","EMPTY":"没有待办任务!","CREATE_NEW_US":"创建一个新的用户故事","CREATE_NEW_US_EMPTY_HELP":"你可以创建一个新用户故事","EXCESS_OF_POINTS":"超过的点数","PENDING_POINTS":"待核点数","CLOSED_POINTS":"关闭","COMPACT_SPRINT":"浓缩冲刺点数","GO_TO_TASKBOARD":"前往任务板 {{spring.name}}","EDIT_SPRINT":"编辑冲刺任务","TOTAL_POINTS":"全部","STATUS_NAME":"状态名称","SORTABLE_FILTER_ERROR":"当过滤器开启时,无法放入待办任务","DOOMLINE":"项目规模 [Doomline]","CHART":{"XAXIS_LABEL":"冲刺任务","YAXIS_LABEL":"点数","OPTIMAL":"最适化的冲刺任务\"{{sprintName}}\"待定点数应为 {{value}}","REAL":"真实的冲刺任务\"{{sprintName}}\"待定点数为 {{value}}","INCREMENT_TEAM":"团队要求的冲刺任务\"{{sprintName}}\"渐增点数为 {{value}}","INCREMENT_CLIENT":"客户要求的冲刺任务\"{{sprintName}}\"渐增点数为 {{value}}"},"TAGS":{"TOGGLE":"切换标签可见度","SHOW":"显示标签","HIDE":"隐藏标签"},"FORECASTING":{"TITLE":"速度预测","BACKLOG":"显示待办任务","NEW_SPRINT":"根据进度确定下一个冲刺目标的候选用户故事。点击创建新的冲刺目标。","CURRENT_SPRINT":"根据进度确定当前冲刺目标的候选用户故事。点击创建当前的冲刺目标。"},"TABLE":{"COLUMN_US":"用户故事","TITLE_COLUMN_POINTS":"选择检示每个角色"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"全部
    点数","COMPLETED_POINTS":"已完成
    点数","OPEN_TASKS":"开启
    任务","CLOSED_TASKS":"已关闭
    任务","IOCAINE_DOSES":"毒物(全新任务挑战)
    剂量","SHOW_STATISTICS_TITLE":"显示统计","TOGGLE_BAKLOG_GRAPH":"显示/隐藏 剩余工作量图","POINTS_PER_ROLE":"每角色的点数"},"SUMMARY":{"PROJECT_POINTS":"项目
    点数","DEFINED_POINTS":"已定义
    点数","CLOSED_POINTS":"已关闭
    点数","POINTS_PER_SPRINT":"点数 /
    冲刺任务"},"FILTERS":{"TOGGLE":"切换过滤器可见度","HIDE":"隐藏过滤器","SHOW":"显示过滤器"},"SPRINTS":{"TITLE":"冲刺任务","DATE":"DD MMM YYYY","LINK_TASKBOARD":"冲刺任务板","TITLE_LINK_TASKBOARD":"到任务板 {{spring.name}}","EMPTY":"还没有冲刺","WARNING_EMPTY_SPRINT_ANONYMOUS":"这个冲刺没有用户故事","WARNING_EMPTY_SPRINT":"从你的待办事项中拖拽一个用户故事到这里来开启一个新的冲刺","TITLE_ACTION_NEW_SPRINT":"添加一个新的冲刺","TEXT_ACTION_NEW_SPRINT":"你可能希望在你的项目中创建一个新的冲刺","ACTION_SHOW_CLOSED_SPRINTS":"显示关闭冲刺任务","ACTION_HIDE_CLOSED_SPRINTS":"隐藏冲刺任务"}},"ERROR":{"TEXT1":"系统出了一点问题,工程师正在抢修中","NOT_FOUND":"找不到","NOT_FOUND_TEXT":"Error 404,你要找的网页不存在,你可以稍后再回来Taiga首页,看看是否能再次找到要找的东西。","PERMISSION_DENIED":"无此权限","PERMISSION_DENIED_TEXT":"你无权访问这个页面","VERSION_ERROR":"Taiga某人之前更改了这个,而我们的工程师无法再做改变。请重新载入页面来使用你的更新(之前设定将消失)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - 冲刺任务看板 - {{projectName}}","PAGE_DESCRIPTION":"冲刺任务 {{sprintName}} (项目 {{projectName}} 从 {{startDate}} 到 {{endDate}})。完成比例{{completedPercentage}}% (总点数 {{totalPoints}} 点,完成 {{completedPoints}} 点)。总任务数 {{totalTasks}},开启任务数 {{openTasks}}。","SECTION_NAME":"任务板","TITLE_ACTION_ADD":"增加新任务","TITLE_ACTION_ADD_BULK":"批次加入新任务","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"指派任务","PLACEHOLDER_CARD_TITLE":"这可能是一个任务","PLACEHOLDER_CARD_TEXT":"将用户故事拆分为多个任务以便单独跟踪","TABLE":{"COLUMN":"用户故事","TITLE_ACTION_FOLD":"隐藏栏位","TITLE_ACTION_UNFOLD":"未隐藏栏位","TITLE_ACTION_FOLD_ROW":"隐藏列数","TITLE_ACTION_UNFOLD_ROW":"未隐藏列数","FIELD_POINTS":"点数","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"天数","YAXIS_LABEL":"点数","OPTIMAL":"一天最适待办点数 {formattedDate},应为 {{roundedValue}}","REAL":"一天真实的待办点数 {{formattedDate}},应为 {{roundedValue}}","DATE":"DD MMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - 任务 {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"状态:{{taskStatus }}。描述:{{taskDescription}}","SECTION_NAME":"任务","LINK_TASKBOARD":"任务板","TITLE_LINK_TASKBOARD":"到任务板去","PLACEHOLDER_SUBJECT":"键入新任务主旨","TITLE_SELECT_STATUS":"状态名称","OWNER_US":"这任务属于","TITLE_LINK_GO_OWNER":"到用户故事","TITLE_DELETE_ACTION":"删除任务","LIGHTBOX_TITLE_BLOKING_TASK":"封锁中的任务","FIELDS":{"IS_IOCAINE":"负予全新任务"},"TITLE_ACTION_IOCAINE":"感到任务的不勘负荷?确定其它人知道此状况在编辑任务时点选此「毒药键」。这种致命毒物如果长期吸食微量,最后可能免疫。因此你最好偶而做点出奇的挑战。"},"NOTIFICATION":{"OK":"一切顺利","WARNING":"哇,有状况发生","WARNING_TEXT":"很抱歉你的变动并未成功保存","SAVED":"系统已保存你所有变动","CLOSE":"关闭通知","MAIL":"通过邮件通知","DESKTOP":"使用浏览器警告作为桌面提醒","ASK_DELETE":"你确定要删除吗?"},"CANCEL_ACCOUNT":{"TITLE":"注销您的账户","SUBTITLE":"很遗憾你要离开Taiga,希望你喜欢这段时光~","PLACEHOLDER_INPUT_TOKEN":"注销账户代码","ACTION_LEAVING":"是的,我要走了","SUCCESS":"我们系统已移除你的账户"},"CHANGE_EMAIL_FORM":{"TITLE":"变更电子邮件","SUBTITLE":"确认要更新你的电子邮件","PLACEHOLDER_INPUT_TOKEN":"变更电邮代码","ACTION_CHANGE_EMAIL":"变更电邮地址","SUCCESS":"我们系统已更新你的电子邮件地址"},"ISSUES":{"PAGE_TITLE":"问题 - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}}的问题清单看版:{{projectDescription}}","SECTION_NAME":"问题","ACTION_NEW_ISSUE":"+ 新问题","ACTION_PROMOTE_TO_US":"提升到用户故事","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"此问题已提升为用户故事","EXTERNAL_REFERENCE":"此问题的提出者是","GO_TO_EXTERNAL_REFERENCE":"回到开头","ACTION_DELETE":"删除议题","LIGHTBOX_TITLE_BLOKING_ISSUE":"冻结中的问题","LINK_TASKBOARD":"任务板","TITLE_LINK_TASKBOARD":"到任务板去","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"优先级","SEVERITY":"严重程度","TYPE":"类型"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"将此问题提为用户故事","MESSAGE":"你确定要用此问题创建一个新的用户故事?"},"TABLE":{"COLUMNS":{"TYPE":"类型","SEVERITY":"严重程度","PRIORITY":"优先级","SUBJECT":"主旨","VOTES":"投票数","STATUS":"状态","MODIFIED":"已修改","ASSIGNED_TO":"指派给"},"TITLE_ACTION_CHANGE_STATUS":"改变状态","TITLE_ACTION_ASSIGNED_TO":"指派给","BLOCKED":"已冻结","EMPTY":{"TITLE":"没有问题回报:-)","SUBTITLE":"你有发现任何问题吗?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - 问题 {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"状态:{{issueStatus }},类型:{{issueType}},优先级:{{issuePriority}},严重程度:{{issueSeverity}},描述:{{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"看板 - {{projectName}}","PAGE_DESCRIPTION":"看板面板上有项目的用户故事 {{projectName}}:{{projectDescription}}","SECTION_NAME":"看板","TITLE_ACTION_FOLD":"隐藏栏位","TITLE_ACTION_UNFOLD":"未隐藏栏位","TITLE_ACTION_ADD_US":"新增用户故事","TITLE_ACTION_ADD_BULK":"成批增加","ACTION_SHOW_ARCHIVED":"显示归档资料","ACTION_HIDE_ARCHIVED":"隐藏归档","HIDDEN_USER_STORIES":"此状态下的用户故事预设为隐藏","PLACEHOLDER_CARD_TITLE":"这是您的用户故事","PLACEHOLDER_CARD_TEXT":"用户故事可有子任务以便分离需求"},"SEARCH":{"PAGE_TITLE":"搜索 - {{projectName}}","PAGE_DESCRIPTION":"项目搜索(用户故事, 问题, 任务或维基页等信息) {{projectName}}: {{projectDescription}}","FILTER_EPICS":"史诗","FILTER_USER_STORIES":"用户故事","FILTER_ISSUES":"问题","FILTER_TASKS":"任务","FILTER_WIKI":"维基页","PLACEHOLDER_SEARCH":"搜索","TITLE_ACTION_SEARCH":"搜索","EMPTY_TITLE":"依你搜索标准并未找到任何东西","EMPTY_DESCRIPTION":"请试试上方某一个分页或再搜索一次"},"TEAM":{"PAGE_TITLE":"团队- {{projectName}}","PAGE_DESCRIPTION":"团队面版可显示项目中所有成员{{projectName}}:{{projectDescription}}","SECTION_NAME":"团队","PLACEHOLDER_INPUT_SEARCH":"以全名搜索","COLUMN_MR_WOLF":"问题解决高手","EXPLANATION_COLUMN_MR_WOLF":"已关闭议题","COLUMN_IOCAINE":"新任务挑战者","EXPLANATION_COLUMN_IOCAINE":"毒物(新任务)剂量摄取","COLUMN_CERVANTES":"大文豪","EXPLANATION_COLUMN_CERVANTES":"已编辑的维基页","COLUMN_BUG_HUNTER":"Bug猎手","EXPLANATION_COLUMN_BUG_HUNTER":"问题回报","COLUMN_NIGHT_SHIFT":"夜猫子","EXPLANATION_COLUMN_NIGHT_SHIFT":"任务关闭","COLUMN_TOTAL_POWER":"总战斗力","EXPLANATION_COLUMN_TOTAL_POWER":"所有点数","SECTION_TITLE_TEAM":"团队 >","SECTION_FILTER_ALL":"所有","CONFIRM_LEAVE_PROJECT":"你确定要退出这个项目吗?","ACTION_LEAVE_PROJECT":"退出此项目"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[最大尺寸:{{maxFileSize}}]","MENU":{"SECTION_TITLE":"用户设置","USER_PROFILE":"用户设置","CHANGE_PASSWORD":"更新密码","EMAIL_NOTIFICATIONS":"电子邮件通知","DESKTOP_NOTIFICATIONS":"桌面提醒","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"桌面提醒","SECTION_NAME":"电子邮件通知","COLUMN_PROJECT":"项目","COLUMN_RECEIVE_ALL":"接收所有通知","COLUMN_ONLY_INVOLVED":"只接收相关通知","COLUMN_NO_NOTIFICATIONS":"不接收通知","OPTION_ALL":"所有","OPTION_INVOLVED":"相关","OPTION_NONE":"无"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"项目","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"项目"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"使用默认图片","ACTION_DELETE_ACCOUNT":"删除Taiga账户","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"检查你的收信箱
    我们送出了一封信
    里面有设定你新电子邮件的相关指示","CHANGE_PHOTO":"变更照片","FIELD":{"USERNAME":"用户名称","EMAIL":"电子邮件","FULL_NAME":"全名","PLACEHOLDER_FULL_NAME":"你的全名","BIO":"简历(最多210字)","PLACEHOLDER_BIO":"请自我介绍","LANGUAGE":"语言","LANGUAGE_DEFAULT":"-- 使用默认语言 --","THEME":"主题","THEME_DEFAULT":"-- 使用默认主题--"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - 维基 - {{projectName}}","PAGE_DESCRIPTION":"最近编辑{{lastModifiedDate}} (总共编辑了{{totalEditions}}次),内容:{{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"移除此维基页","DELETE_LIGHTBOX_TITLE":"删除维基页","DELETE_LINK_TITLE":"删除维基链接","NAVIGATION":{"HOME":"主页","SECTION_NAME":"连结","ACTION_ADD_LINK":"新增连结","ALL_PAGES":"所有页面"},"SUMMARY":{"TIMES_EDITED":"次数
    编辑","LAST_EDIT":"上次
    编辑","LAST_MODIFICATION":"上回修改"},"SECTION_PAGES_LIST":"所有页面","PAGES_LIST_COLUMNS":{"TITLE":"标题","EDITIONS":"版本","CREATED":"已创建","MODIFIED":"已修改","CREATOR":"创建者","LAST_MODIFIER":"最新修改者"}},"HINTS":{"SECTION_NAME":"提示","LINK":"如果想知道如何使用,可以到我们的支援页面了解详情。","LINK_TITLE":"造访我们的支援页面","HINT1_TITLE":"你知道可以导入与滙出项目吗?","HINT1_TEXT":"可以从 Taiga提取所有个人资料记录,移入其它地方。","HINT2_TITLE":"你知道可以创建个人化栏位吗","HINT2_TEXT":"作为一个灵活手段,团队现在可以创建自定义字段,这意味着需要为特殊的工作流指定有用的数据。","HINT3_TITLE":"根据特性来重新排序与你最为相关的项目。","HINT3_TEXT":"在顶端的直接访问条中,列出了十个项目。","HINT4_TITLE":"你忘记了你正在做什么了吗?","HINT4_TEXT":"别担心,在控制台可以找到你的公开任务、问题以及用户故事的工作次序。"},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} 上传新附件 {{obj_name}}","US_CREATED":"{{username}} 为项目 {{project_name}} 创建新的用户故事 {{obj_name}}","ISSUE_CREATED":"{{username}} 为项目 {{project_name}} 创建新问题 {{obj_name}}","TASK_CREATED":"{{username}} 为项目 {{project_name}} 创建新任务 {{obj_name}}","TASK_CREATED_WITH_US":"{{username}} 为项目 {{project_name}} 创建新任务 {{obj_name}},该任务隶属于用户故事 {{us_name}}","WIKI_CREATED":"{{username}} 为项目 {{project_name}} 创建新维基页 {{obj_name}}","MILESTONE_CREATED":"{{username}} 为项目 {{project_name}} 创建新冲刺任务 {{obj_name}}","EPIC_CREATED":"{{username}} 已经在{{project_name}}中创建了一个新史诗{{obj_name}}","EPIC_RELATED_USERSTORY_CREATED":"在{{project_name}}中{{username}}已经关联到史诗{{epic_name}}的用户故事{{related_us_name}}","NEW_PROJECT":"{{username}} 创建项目 {{project_name}}","MILESTONE_UPDATED":"{{username}} 已更新冲刺任务 {{obj_name}}","US_UPDATED":"{{username}} 已更新用户故事 {{obj_name}} 的 \"{{field_name}}\" 属性","US_UPDATED_WITH_NEW_VALUE":"{{username}} 更新了用户故事 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","US_UPDATED_POINTS":"{{username}} 更新了用户故事 {{obj_name}} 的 \"{{field_name}}\" 点数为 {{new_value}}","ISSUE_UPDATED":"{{username}} 更新了问题 {{obj_name}} 的 \"{{field_name}}\" 属性","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} 更新了问题 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","TASK_UPDATED":"{{username}} 更新了任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} 更新了任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} 更新了用户故事 {{us_name}} 的任务 {{obj_name}} 的 \"{{field_name}}\" 属性","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} 已更新了用户故事 {{us_name}} 的任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","WIKI_UPDATED":"{{username}} 更新了维基页 {{obj_name}}","EPIC_UPDATED":"{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性为{{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性为","NEW_COMMENT_US":"{{username}} 评论了用户故事 {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} 评论了问题 {{obj_name}}","NEW_COMMENT_TASK":"{{username}} 评论了任务 {{obj_name}}","NEW_COMMENT_EPIC":"{{username}}在史诗{{obj_name}}做了评论","NEW_MEMBER":"{{project_name}} 有新成员","US_ADDED_MILESTONE":"{{username}} 为冲刺 {{sprint_name}} 添加用户故事 {{obj_name}}","US_MOVED":"{{username}} 已经移动了用户故事 {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} 新增用户故事 {{obj_name}} 到待办任务","BLOCKED":"{{username}} 冻结了 {{obj_name}}","UNBLOCKED":"{{username}} 解除对 {{obj_name}} 的冻结","NEW_USER":"{{username}} 已加入 Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"问题","TASK":"任务"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"一个外部应用需要验证","PAGE_DESCRIPTION":"一个外部应用需要验证","AUTHORIZATION_REQUEST":"向你的Taiga账户验证{{application}}?","LOGIN_WITH_ANOTHER_USER":"以其他用户登录","AUTHORIZE_APP":"授权应用","CANCEL":"取消"},"JOYRIDE":{"NAV":{"NEXT":"下一个","BACK":"后退","SKIP":"跳过","DONE":"完成"},"DASHBOARD":{"STEP1":{"TITLE":"你的项目","TEXT":"欢迎!你将找到你所涉及的项目。"},"STEP2":{"TITLE":"进行中","TEXT":"在这里你将发现一些你正在处理的用户故事,任务,问题。"},"STEP3":{"TITLE":"观看中","TEXT1":"在这里你将会找到那些你希望了解的你的项目成员。","TEXT2":"你已经开始使用Taiga ;)"},"STEP4":{"TITLE":"现在开始!","TEXT1":"你可以以创建你的第一个Taiga项目开始。","TEXT2":"祝你好运!"}},"BACKLOG":{"STEP1":{"TITLE":"项目简介","TEXT1":"在这里你将看到你的项目状态。","TEXT2":"通过管理员,你可以改变项目的各种设置。"},"STEP2":{"TITLE":"产品待办事项","TEXT":"待办事项是产品的需求(用户故事)列表这里也就是你做冲刺计划的地方。"},"STEP3":{"TITLE":"冲刺任务","TEXT":"冲刺是一段时间(一般为两周),在这期间你需要完成指定工作并交付。"},"STEP4":{"TITLE":"用户故事","TEXT":"这些是更高层次的需求。你可以将它们添加到待办事项中,然后将其拖拽到冲刺,它们应该在冲刺中进行交付。"}},"KANBAN":{"STEP1":{"TITLE":"自定义你的工作流","TEXT":"通过管理员,根据你的需要设置这些列来映射你的工作流"},"STEP2":{"TITLE":"用户故事和任务","TEXT":"用户故事是更高层次的需求。你可以将其拖拽到不同列中"},"STEP3":{"TITLE":"添加你的用户故事","TEXT1":"你可能希望添加一个用户故事(添加用户故事图标)或者一组用户故事(批量图标)","TEXT2":"祝你好运!"}}},"DISCOVER":{"PAGE_TITLE":"探索更多项目","PAGE_DESCRIPTION":"Taiga中的公共项目的可搜索的目录。探索积压,时间线,问题,以及团队。检索出最喜欢的或者最活跃的项目。通过看板或者敏捷开发进行过滤。","DISCOVER_TITLE":"探索项目","DISCOVER_SUBTITLE":"{projects, plural, one{一个要发现的公开项目} other{# 个要发现的公开项目}}","MOST_ACTIVE":"最活跃的","MOST_ACTIVE_EMPTY":"还没有活动的项目","MOST_LIKED":"最受欢迎的","MOST_LIKED_EMPTY":"还没有喜欢的项目","VIEW_MORE":"查看更多","FEATURED":"特色项目","EMPTY":"没有满足当前搜索条件的项目。
    再试一次!","FILTERS":{"ALL":"所有","KANBAN":"看板","SCRUM":"冲刺","PEOPLE":"查找队友","WEEK":"上周","MONTH":"上月","YEAR":"去年","ALL_TIME":"长期","CLEAR":"清除过滤"},"SEARCH":{"PAGE_TITLE":"搜索 - 发现项目 - Taiga","PAGE_DESCRIPTION":"Taiga中的公共项目的可搜索的目录。探索积压,时间线,问题,以及团队。检索出最喜欢的或者最活跃的项目。通过看板或者敏捷开发进行过滤。","INPUT_PLACEHOLDER":"输入内容...","ACTION_TITLE":"搜索","RESULTS":"搜索结果"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/locales/taiga/locale-zh-hant.json b/dist/v-1547534999795/locales/taiga/locale-zh-hant.json deleted file mode 100644 index 75574b8..0000000 --- a/dist/v-1547534999795/locales/taiga/locale-zh-hant.json +++ /dev/null @@ -1 +0,0 @@ -{"COMMON":{"YES":"Yes","NO":"No","OR":"or","I_GET_IT":"OK, I get it","LOADING":"載入中...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"儲存","CANCEL":"取消","ACCEPT":"接受","DELETE":"刪除","UNLINK":"Unlink","CREATE":"創建","ADD":"新增","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"編輯","DRAG":"拖拉","TAG_LINE":"你的敏捷、免費、和開放原始碼的專案管理工具","TAG_LINE_2":"愛你的專案","BLOCK":"封鎖","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"已封鎖","UNBLOCK":"解除封鎖","UNBLOCK_TITLE":"解除項目封鎖","BLOCKED_NOTE":"為何遭到封鎖?","BLOCKED_REASON":"請解釋此原因","CREATED_BY":"由 {{fullDisplayName}}創建","CLOSE":"關閉","GO_HOME":"帶我回到首頁","PLUGINS":"外掛","ONE_ITEM_LINE":"一行一物 ","NEW_BULK":"新批次插入","SUBTASKS":"Subtasks","PREVIOUS":"Previous","NEXT":"下一個","LOGOUT":"登出","EXTERNAL_USER":"外部使用者","GENERIC_ERROR":"我們的系統指出{{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"專案主持人","CAPSLOCK_WARNING":"請注意,此欄位大小寫有區別,目前輸入法切換至大寫模式","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"删除議題 ","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"該數值似乎為無效","TYPE_EMAIL":"該電子郵件應為有效地址","TYPE_URL":"該網址應為有效連結","TYPE_URLSTRICT":"該網址應為有效連結","TYPE_NUMBER":"該數值應為有效號碼 ","TYPE_DIGITS":"該數值應為有效數字","TYPE_DATEISO":"該數值應為有效日期 (YYYY-MM-DD).","TYPE_ALPHANUM":"該數值應為字母","TYPE_PHONE":"該數值應為有效的電話號碼 ","NOTNULL":"該數值不應為零","NOT_BLANK":"該數值不應為空白","REQUIRED":"該數值為必要","REGEXP":"該數值似乎無效","MIN":"該數值應大於或等於 %s","MAX":"該數值應小於或等於 %s","RANGE":"該數值應介於 %s 與 %s之間","MIN_LENGTH":"該數值過簡短,它至少要有 %s個字元","MAX_LENGTH":"該數值過長,它不可多於 %s個字元。","RANGE_LENGTH":"該數值長度為無效,它應介於 %s 與 %s 字元之間","MIN_CHECK":"你必須至少選擇 %s 選項","MAX_CHECK":"你必須至多選出 %s選項","RANGE_CHECK":"你必須在%s 與 %s 之間作出選擇","EQUAL_TO":"該數值應為一致","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"上個月","NEXT_MONTH":"下個月","MONTHS":{"JAN":"1月份","FEB":"2月份","MAR":"三月","APR":"四月份","MAY":"五月份","JUN":"六月份","JUL":"七月份","AUG":"八月份","SEP":"九月份","OCT":"十月份","NOV":"十一月份","DEC":"十二月份"},"WEEK_DAYS":{"SUN":"週日","MON":"週一","TUE":"週二","WED":"週三","THU":"週四","FRI":"週五","SAT":"週六"},"WEEK_DAYS_SHORT":{"SUN":"週日","MON":"週一","TUE":"週二","WED":"週三","THU":"週四","FRI":"週五","SAT":"週六"}},"SEE_USER_PROFILE":"觀看 {{username }} 個人資訊","USER_STORY":"使用者故事","TASK":"任務","ISSUE":"問題","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"刪除Tag","ADD":"新增標籤"},"DESCRIPTION":{"EMPTY":"留下空白顯得很無趣,寫下點描述吧","NO_DESCRIPTION":"未有任何描述"},"FIELDS":{"SUBJECT":"主旨","NAME":"名稱 ","URL":"網址","DESCRIPTION":"描述","VALUE":"數值","SLUG":"代稱 ","COLOR":"顏色","IS_CLOSED":"關閉中?","STATUS":"狀態","TYPE":"類型","SEVERITY":"急迫性","PRIORITY":"優先性","ASSIGNED_TO":"指派給 ","ASSIGNED_USERS":"Assigned users","POINTS":"點數","IS_BLOCKED":"封鎖","REF":"Ref","VOTES":"投票數","SPRINT":"衝刺任務","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"所有"},"ASSIGNED_TO":{"NOT_ASSIGNED":"未指派","ASSIGN":"指派","DELETE_ASSIGNMENT":"刪除指派","REMOVE_ASSIGNED":"數值","TOO_MANY":"太多用戶,繼續過濾中","CONFIRM_UNASSIGNED":"你確定要讓它無任何指派嗎?","TITLE_ACTION_EDIT_ASSIGNMENT":"編輯指派","SELF":"指派給我"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"關閉","OPEN":"開啟"},"WATCHERS":{"WATCHERS":"觀注者","ADD":"新增觀注者","TITLE_ADD":"將專案成員加到觀注者清單裏","DELETE":"已刪除監督者","TITLE_LIGHTBOX_DELETE_WARTCHER":"刪除監督者"},"WATCH_BUTTON":{"WATCH":"觀注","WATCHING":"觀看中","UNWATCH":"不觀注","WATCHERS":"觀注者","BUTTON_TITLE":"Watch/Unwatch this item","COUNTER_TITLE":"{total, plural, one{一個觀注者} other{# 觀注者}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"客製化欄位","SAVE":"儲存客製化欄位","EDIT":"編輯客製化欄位","DELETE":"刪除客製屬性","CONFIRM_DELETE":"記住在此客制欄位裏的數值資料都將遭刪除\n你確定要繼續嗎?"},"FILTERS":{"INPUT_PLACEHOLDER":"主旨或參考","TITLE_ACTION_FILTER_BUTTON":"搜尋","TITLE":"過濾器","TITLE_ACTION_SEARCH":"搜尋","ACTION_SAVE_CUSTOM_FILTER":"儲存為客製過濾器 ","PLACEHOLDER_FILTER_NAME":"寫入過濾器名稱後按下enter ","APPLIED_FILTERS_NUM":"filters applied","CATEGORIES":{"TYPE":"類型","STATUS":"狀態","SEVERITY":"急迫性","PRIORITIES":"優先性","TAGS":"標籤","ASSIGNED_TO":"指派給 ","ASSIGNED_USERS":"Assigned users","ROLE":"角色","CREATED_BY":"由創建","CUSTOM_FILTERS":"客製過濾器 ","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown 語法協助"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"衝刺任務","VIEW_SPRINTS":"檢視衝刺任務 ","ADD_SPRINTS":"增加衝刺任務","MODIFY_SPRINTS":"修正衝刺任務","DELETE_SPRINTS":"刪除衝刺任務"},"USER_STORIES":{"NAME":"使用者故事","VIEW_USER_STORIES":"檢視使用者故事","ADD_USER_STORIES":"新增使用者故事","MODIFY_USER_STORIES":"修正使用者故事","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"刪除使用者故事"},"TASKS":{"NAME":"任務 ","VIEW_TASKS":"檢視任務 ","ADD_TASKS":"新增任務 ","MODIFY_TASKS":"修正任務 ","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"刪除任務"},"ISSUES":{"NAME":"問題 ","VIEW_ISSUES":"檢視問題 ","ADD_ISSUES":"新增問題 ","MODIFY_ISSUES":"修正議題 ","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"刪除問題 "},"WIKI":{"NAME":"維基","VIEW_WIKI_PAGES":"檢視維基頁","ADD_WIKI_PAGES":"新增維基頁","MODIFY_WIKI_PAGES":"修正維基頁","DELETE_WIKI_PAGES":"刪除維基頁 ","VIEW_WIKI_LINKS":"檢視維基連結","ADD_WIKI_LINKS":"新增維基連結","DELETE_WIKI_LINKS":"刪除維基連結"}}},"LOGIN":{"PAGE_TITLE":"登入 - Taiga","PAGE_DESCRIPTION":"登入Taig,它是一個給新創團隊與敏捷開發者設計師使用的專案管理平台。Taiga是一個簡易輕鬆美觀的工具,讓工作變成樂趣。"},"AUTH":{"INVITED_YOU":"已邀請您加入此專案","NOT_REGISTERED_YET":"還沒註冊嗎?","REGISTER":"註冊","CREATE_ACCOUNT":"在此建立您的免費帳號"},"LOGIN_COMMON":{"HEADER":"我已登入Taiga","PLACEHOLDER_AUTH_NAME":"使用者名稱或電子郵件(注意大小寫)","LINK_FORGOT_PASSWORD":"忘記了?","TITLE_LINK_FORGOT_PASSWORD":"你是否忘了密碼嗎","ACTION_ENTER":"Enter","ACTION_SIGN_IN":"登入","PLACEHOLDER_AUTH_PASSWORD":"密碼(大小寫有別)","ALT_LOGIN":"Or login with"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"按我們的箹統記錄,你的帳戶名稱/電子郵件或密碼並不正確 ","SUCCESS":"我們系統歡迎你加入Taiga"},"REGISTER":{"PAGE_TITLE":"註冊 - Taiga","PAGE_DESCRIPTION":"在Taiga創建一個帳號,它是一個給新創團隊與敏捷開發者設計師使用的專案管理平台。Taiga是一個簡易輕鬆美觀的工具,讓工作變成樂趣。"},"REGISTER_FORM":{"TITLE":"註冊一個新的Taiga帳戶(免費 )","PLACEHOLDER_NAME":"選一個用戶帳號(注意大小寫)","PLACEHOLDER_FULL_NAME":"選取你的全名","PLACEHOLDER_EMAIL":"你的電子郵件","PLACEHOLDER_PASSWORD":"設定密碼(注意大小寫不同) ","ACTION_SIGN_UP":"註冊","TITLE_LINK_LOGIN":"登入","LINK_LOGIN":"你是否已註冊? 登入"},"FORGOT_PASSWORD":{"PAGE_TITLE":"忘記密碼 - Taiga","PAGE_DESCRIPTION":"輸入用戶名稍或電子郵件以獲取新密碼,可以再重新登入Taiga權限"},"FORGOT_PASSWORD_FORM":{"TITLE":"你是否忘了密碼嗎","SUBTITLE":"輸入你的帳戶名稱或電子郵件以進行註冊","PLACEHOLDER_FIELD":"使用者名稱或電子郵件","ACTION_RESET_PASSWORD":"重設密碼 ","LINK_CANCEL":"不,請帶我回去,我記起來了","SUCCESS_TITLE":"Check your inbox!","SUCCESS_TEXT":"已將重設密碼的郵件寄送至您的電子信箱","ERROR":"按我們的記錄,你尚未註冊"},"CHANGE_PASSWORD":{"PAGE_TITLE":"變更密碼 - Taiga","SECTION_NAME":"改變密碼 ","FIELD_CURRENT_PASSWORD":"現用密碼 ","PLACEHOLDER_CURRENT_PASSWORD":"你目前的密碼(如果你未有密碼,此處請空白)","FIELD_NEW_PASSWORD":"新密碼 ","PLACEHOLDER_NEW_PASSWORD":"輸入新密碼","FIELD_RETYPE_PASSWORD":"重新輸入新密碼","PLACEHOLDER_RETYPE_PASSWORD":"重新輸入新密碼","ERROR_PASSWORD_MATCH":"密碼不符"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"創建新Taiga通過","SUBTITLE":"你也許該吃點鐵質豐富的食物,它對你的大腦有益處:p","PLACEHOLDER_NEW_PASSWORD":"新密碼 ","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"重新輸入新密碼","ACTION_RESET_PASSWORD":"重設密碼 ","ERROR":"Our Oompa Loompas can't find your request to recover your password. Try to ask for it again.","SUCCESS":"系統已儲存你的新密碼
    試試 用它登入 "},"INVITATION":{"PAGE_TITLE":"接受邀請- Taiga","PAGE_DESCRIPTION":"接受邀請加入Taiga上的專案,它是一個給新創團隊與敏捷開發者設計師使用的專案管理平台。Taiga是一個簡易輕鬆美觀的工具,讓工作變成樂趣。"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"我們找不到你的邀請碼","SUCCESS":"你成功地加入此專案,歡迎來到 {{project_name}}"},"HOME":{"PAGE_TITLE":"首頁 - Taiga","PAGE_DESCRIPTION":"Taiga 首頁,你的主要專案以及任命,觀看使用者故事,任務與問題。","EMPTY_WORKING_ON":"It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.","EMPTY_WATCHING":"Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)","EMPTY_PROJECT_LIST":"你尚無任何專案","WORKING_ON_SECTION":"進行中","WATCHING_SECTION":"觀看中","DASHBOARD":"專案控制台"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADD EPIC","UNASSIGNED":"未指派"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"投票數","NAME":"名稱 ","PROJECT":"專案","SPRINT":"衝刺任務","ASSIGNED_TO":"Assigned","STATUS":"狀態","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"已封鎖","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"我的專案 - Taiga","PAGE_DESCRIPTION":"你的專案列表,你可以記錄或創建新專案。","MY_PROJECTS":"我的專案"},"ATTACHMENT":{"SECTION_NAME":"附件","TITLE":"{{ fileName }} 上傳於 {{ date }}","LIST_VIEW_MODE":"列出檢視模視","GALLERY_VIEW_MODE":"檢視模視選項","DESCRIPTION":"輸入一段簡短描述","DEPRECATED":"(被棄用)","DEPRECATED_FILE":"棄用?","ADD":"加入新附件 {{maxFileSizeMsg}}","DROP":"在此移除附件 ","SHOW_DEPRECATED":"+ 顯示棄用的附件","HIDE_DEPRECATED":"- 隱藏棄用的附件","COUNT_DEPRECATED":"({{ counter }} 遭棄用)","MAX_UPLOAD_SIZE":"上傳檔案最大容量限制 {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"無法成功上傳 '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"刪除附件....","MSG_LIGHTBOX_DELETE_ATTACHMENT":"附件 '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"無法刪除: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Prev","NEXT":"下一個"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"編輯數值","TITLE_ACTION_DELETE_VALUE":"删除值","TITLE_ACTION_DELETE_TAG":"刪除Tag"},"HELP":"需要幫助嗎?看看我們的支援頁面吧!","PROJECT_DEFAULT_VALUES":{"TITLE":"預設值","SUBTITLE":"將所有選項設為預設值"},"MEMBERSHIPS":{"TITLE":"管理成員","PAGE_TITLE":"成員資格 - {{projectName}}","ADD_BUTTON":"+ 新成員","ADD_BUTTON_TITLE":"增加新成員","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"匯出","SUBTITLE":"匯出你的專案以備份,或以此為基礎來建立一個新的。","EXPORT_BUTTON":"匯出","EXPORT_BUTTON_TITLE":"匯出你的專案","LOADING_TITLE":"傾倒檔案正在生成中","DUMP_READY":"你注入的檔案已完成","LOADING_MESSAGE":"請勿關閉本頁","ASYNC_MESSAGE":"準備好後,我們會送給 你一封電子郵件","SYNC_MESSAGE":"如果未能自動下載,請點選此處 . ","ERROR":"我們的系統無法製作你的滙出資料,請再試一次 ","ERROR_BUSY":"抱歉系統繁忙中,請稍後再試試 "},"MODULES":{"TITLE":"模組","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"待辦任務優先表","BACKLOG_DESCRIPTION":"管理你的 User Story 讓接下來的及優先的工作能被有條理地檢視 ","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban(看板)","KANBAN_DESCRIPTION":"在此看板上組織你的專案","ISSUES":"問題 ","ISSUES_DESCRIPTION":"追踪系統錯誤問題強化你的專案,不要錯過任何事 ","WIKI":"維基","WIKI_DESCRIPTION":"新增,修正或是刪除與他人合作的內容。這裏正是專案文件記錄區","MEETUP":"符合","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"選擇一個視訊會議系統 ","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"自定","URL_CHAT_ROOM":"聊天室之網址"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - 專案檔案 - {{projectName}}","PROJECT_DETAILS":"專案細節","PROJECT_NAME":"專案名稱","TAGS":"標籤","DESCRIPTION":"描述","RECRUITING":"這個專案是否在徵人","RECRUITING_MESSAGE":"你在找誰?","RECRUITING_PLACEHOLDER":"定義你要找的資訊","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"公開專案","PRIVATE_PROJECT":"不公開專案","PRIVATE_OR_PUBLIC":"公開專案和私密專案有何差異?","DELETE":"刪除此專案","CHANGE_LOGO":"更改圖標","ACTION_USE_DEFAULT_LOGO":"使用設預圖片","MAX_PRIVATE_PROJECTS":"\b您已到達目前會員等級的私有專案數上限","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"要求","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Change owner","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Reports","SUBTITLE":"以 CSV 格式匯出你的專案資料,並製作你的專屬報告","DESCRIPTION":"下載CSV檔案格式是複制生成網址到常用的文字編輯軟體/試算表,以保存你的專案資料報告。你可以輕易地視覺化和分析你的資料。","HELP":"使用者故事預設欄位","REGENERATE_TITLE":"改變網址","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"使用者故事報告","SECTION_TITLE_TASK":"任務報告","SECTION_TITLE_ISSUE":"問題報告","DOWNLOAD":"下戴CSV檔案","URL_FIELD_PLACEHOLDER":"再次產生CSV 網址","TITLE_REGENERATE_URL":"再次產生CSV 網址","ACTION_GENERATE_URL":"產生網址","ACTION_REGENERATE":"再次產生","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"刪除"},"CUSTOM_FIELDS":{"TITLE":"客製化欄位","SUBTITLE":"指定使用者故事,任務與問題一些客製化欄位","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"使用者客製欄位","US_ADD":"在使用者故事中加入客制欄位","TASK_DESCRIPTION":"任務客製化欄位","TASK_ADD":"在任務中加入客制欄位","ISSUE_DESCRIPTION":"問題客製化欄位","ISSUE_ADD":"在問題中加入客制欄位","FIELD_TYPE_TEXT":"單行文字","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"多行","FIELD_TYPE_DATE":"日期","FIELD_TYPE_URL":"網址","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - 專案數值 - {{projectName}}","REPLACEMENT":"所有此數值物品將改成","ERROR_DELETE_ALL":"你不能刪除所有數值"},"PROJECT_VALUES_POINTS":{"TITLE":"點數","SUBTITLE":"指定你的使用者故事點數可能預估為","US_TITLE":"使用者故事點數","ACTION_ADD":"增加點數"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"優先性","SUBTITLE":"指明你將遇到的問題優先程度","ISSUE_TITLE":"問題優先性","ACTION_ADD":"新增優先性"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"急迫性","SUBTITLE":"指明你將遇到問題的嚴重程度","ISSUE_TITLE":"問題急迫性","ACTION_ADD":"新增急迫性"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"指明你的使用者故事狀態,任務以及經歷問題 ","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"任務狀態","ISSUE_TITLE":"問題狀態"},"PROJECT_VALUES_TYPES":{"TITLE":"類型","SUBTITLE":"指定你的問題類型可能是","ISSUE_TITLE":"問題類型","ACTION_ADD":"新增{{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"標籤","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"新增標籤","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"已選擇"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"增加新狀態","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"角色- {{projectName}}","WARNING_NO_ROLE":"注意,你的專案中無角色可以評估使用者故事的點數","HELP_ROLE_ENABLED":"當啟動時,被指派此角色的成員將可以評估使用者故事點數","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} 這類角色的成員","TITLE_DELETE_ROLE":"删除角色","REPLACEMENT_ROLE":"和此角色有關的使用者都將遭移除 ","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"你不能刪除所有數值","EXTERNAL_USER":"外部使用者","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Secret key","PAYLOAD_URL":"有效載荷網址","VALID_IPS":"有效來源IP(請用逗點分開)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket要求不指派因此最佳確認方式為IP位置來源。如果此處空白,表示IP未有效確核。"},"GITLAB":{"SECTION_NAME":"Gitlob","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"GitHub要求不指派因此最佳確認方式為IP位置來源。如果此處空白,表示IP未有效確核。"},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks- {{projectName}}","SECTION_NAME":"網頁觸發 ","ADD_NEW":"新增一個網頁觸發 ","TYPE_NAME":"鍵入服務名稱 ","TYPE_PAYLOAD_URL":"鍵入服務有效載荷網址","TYPE_SERVICE_SECRET":"鍵入服務密碼鑰匙 ","SAVE":"儲存網頁觸發 ","CANCEL":"取消網頁觸發 ","SHOW_HISTORY":"(顯示記錄)","TEST":"測試網頁觸發 ","EDIT":"編輯網頁觸發 ","DELETE":"刪除網頁觸發 ","REQUEST":"要求","RESEND_REQUEST":"重送出要求","HEADERS":"標頭 ","PAYLOAD":"有效載荷","RESPONSE":"回應","DATE":"DD MMM YYYY [at] hh:mm","ACTION_HIDE_HISTORY":"(藏記錄)","ACTION_HIDE_HISTORY_TITLE":"藏記錄細節","ACTION_SHOW_HISTORY":"(顯示記錄)","ACTION_SHOW_HISTORY_TITLE":"顯示記錄細節","WEBHOOK_NAME":"網頁觸發 '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - 個人化屬性 - {{projectName}}","ADD":"加入客製化欄位","EDIT":"編輯客製化欄位","DELETE":"刪除客製欄位","SAVE_TITLE":"儲存客製化欄位","CANCEL_TITLE":"取消創建","SET_FIELD_NAME":"設定你的客制欄位名稱 ","SET_FIELD_DESCRIPTION":"設定你客製化欄位的文字描述","FIELD_TYPE_DEFAULT":"-- 選擇其一 --","ACTION_UPDATE":"更新客製化欄位","ACTION_CANCEL_EDITION":"取消編輯 "},"MEMBERSHIP":{"COLUMN_MEMBER":"成員","COLUMN_ADMIN":"管理者","COLUMN_ROLE":"角色","COLUMN_STATUS":"狀態","STATUS_ACTIVE":"活躍 ","STATUS_PENDING":"待辦中","DELETE_MEMBER":"刪除成員","RESEND":"重新送出","SUCCESS_SEND_INVITATION":"我們已再次發出邀請信給'{{email}}'. ","SUCCESS_DELETE":"已刪除 {{message}}.","ERROR_DELETE":"我們無法刪除 {{message}}.","DEFAULT_DELETE_MESSAGE":"邀請 {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"點數選擇器預設值","LABEL_TASK_STATUS":"任務狀態選擇器預設值","LABEL_ISSUE_TYPE":"問題類型選擇器預設值","LABEL_ISSUE_STATUS":"問題狀態選擇器預設值","LABEL_PRIORITY":"優先選擇器預設值","LABEL_SEVERITY":"急迫性選擇器預設值"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"為此新狀態命名","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"為此新要素命名"},"US_STATUS":{"ACTION_ADD_STATUS":"增加新狀態","IS_ARCHIVED_COLUMN":"歸檔","IS_CLOSED_COLUMN":"關閉","WIP_LIMIT_COLUMN":"WIP限制","PLACEHOLDER_WRITE_NAME":"為此新狀態命名"},"MENU":{"PROJECT":"專案","ATTRIBUTES":"屬性","MEMBERS":"成員","PERMISSIONS":"權限","INTEGRATIONS":"整合"},"SUBMENU_PROJECT_VALUES":{"STATUS":"狀態","POINTS":"點數","PRIORITIES":"優先性","SEVERITIES":"急迫性","TYPES":"類型","CUSTOM_FIELDS":"客製化欄位","TAGS":"標籤","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"角色","ACTION_NEW_ROLE":"+ 新角色","TITLE_ACTION_NEW_ROLE":"新增角色"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"接受","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"編輯個人資料","CLOSED_US":"閞閉使用者故事","PROJECTS":"專案","PROJECTS_EMPTY":"{{username}} 尚無專案","CONTACTS":"聯絡人","CONTACTS_EMPTY":"{{username}} 尚無聯絡人","CURRENT_USER_CONTACTS_EMPTY":"您尚無任何聯絡人","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"你在Taiga一同工作的伙伴將自動成為你的聯絡人","TABS":{"ACTIVITY_TAB":"時間表","ACTIVITY_TAB_TITLE":"顯示該用戶的所有活動","PROJECTS_TAB":"專案","PROJECTS_TAB_TITLE":"列出所有專案的用戶成員名單","LIKES_TAB":"喜歡","LIKES_TAB_TITLE":"列出該使用者的喜受清單","VOTES_TAB":"投票數","VOTES_TAB_TITLE":"列出該使用者的所有投票數","WATCHED_TAB":"已觀注","WATCHED_TAB_TITLE":"該使用者所有觀注的專案清單","CONTACTS_TAB":"聯絡人","CONTACTS_TAB_TITLE":"列出該使用者所有的聯絡人"}},"PROFILE_SIDEBAR":{"TITLE":"個人資訊","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"編輯自介"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"輸入文字","FILTER_TYPE_ALL":"所有","FILTER_TYPE_ALL_TITLE":"顯示全部","FILTER_TYPE_PROJECTS":"專案","FILTER_TYPE_PROJECTS_TITLE":"只顯示專案","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"故事","FILTER_TYPE_USER_STORIES_TITLE":"只顯視使用者故事","FILTER_TYPE_TASKS":"任務 ","FILTER_TYPE_TASKS_TITLE":"只顯示任務 ","FILTER_TYPE_ISSUES":"問題 ","FILTER_TYPE_ISSUES_TITLE":"只顯示問題 ","EMPTY_TITLE":"似乎沒有東西可顯示"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"記錄你的專案在上方常用欄位
    前十個專案將會顯示在上方導覽處。","PRIVATE":"不公開專案","LOOKING_FOR_PEOPLE":"這個專案正在徵人","FANS_COUNTER_TITLE":"{total, plural, one{一個粉絲} other{# 粉絲}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{一個觀注者} other{# 觀注者}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Blocked project","THIS_PROJECT_IS_BLOCKED":"This project is temporarily blocked","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"欲解鎖專案請聯絡管理員"},"SECTION":{"SEARCH":"搜尋","TIMELINE":"時間表","EPICS":"Epics","BACKLOG":"待辦任務優先表","KANBAN":"Kanban(看板)","ISSUES":"問題 ","WIKI":"維基","TEAM":"團隊","MEETUP":"符合","ADMIN":"管理者"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"創建專案","MANAGE_PROJECTS":"管理專案","TITLE_CREATE_PROJECT":"創建專案","HELP_TITLE":"Taiga支援頁","HELP":"幫助","HOMEPAGE":"首頁","FEEDBACK_TITLE":"送出回饋 ","FEEDBACK":"回饋 ","NOTIFICATIONS_TITLE":"編輯個人通知設定","NOTIFICATIONS":"通知","VIEW_PROFILE_TITLE":"檢視個人資料","VIEW_PROFILE":"檢視個人資料","EDIT_PROFILE_TITLE":"編輯你的個人資料","EDIT_PROFILE":"編輯個人資料","CHANGE_PASSWORD_TITLE":"更換密碼 ","CHANGE_PASSWORD":"更換密碼 ","DASHBOARD_TITLE":"控制台","DISCOVER_TITLE":"發現流行專案","DISCOVER":"發現"},"LIKE_BUTTON":{"LIKE":"喜歡","LIKED":"喜歡","UNLIKE":"不喜歡","BUTTON_TITLE":"是否喜歡該專案","COUNTER_TITLE":"{total, plural, one{一個粉絲} other{# 粉絲}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"觀注本專案並設置通知選項","WATCH":"觀注","WATCHING":"觀看中","COUNTER_TITLE":"{total, plural, one{一個觀注者} other{# 觀注者}}","OPTIONS":{"NOTIFY_ALL":"接收所有通知","NOTIFY_ALL_TITLE":"接到該專案的所有通知","NOTIFY_INVOLVED":"只有相關","NOTIFY_INVOLVED_TITLE":"只接收與你相關的通知訊息","UNWATCH":"不觀注","UNWATCH_TITLE":"不再觀注此專案"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"創建專案","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban(看板)","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"滙入專案","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"後台","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Private Project"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"我們的工程師對你的專案很重要哦","ASYNC_IN_PROGRESS_MESSAGE":"這個過程要花上一點時間
    當弄好時我們會發給你一封郵件","UPLOAD_IN_PROGRESS_MESSAGE":"已上傳 {{totalSize}}中的{{uploadedSize}} ","ERROR":"系統在滙進你倒入的資料時遇上一些問題,請再試一次","ERROR_TOO_MANY_REQUEST":"抱歉系統繁忙中,請稍後再試試 ","ERROR_MESSAGE":"我們的系統無法滙入你的資料","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})","SYNC_SUCCESS":"你的專案已成功滙入","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"指派","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"搜尋","ACTION_BACK":"後台"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"滙入專案中","DESCRIPTION":"這個過桯要花點時間,請保持视窗開啟"},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban(看板)","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban(看板)","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"問題 ","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"你確定要刪除Taiga帳戶嗎?","CANCEL":"回到設定","ACCEPT":"移除帳號","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"刪除專案","QUESTION":"你確定要刪除這個專案嗎?","SUBTITLE":"所有專案資料 (US/Tasks/Issues/Sprints/WikiPages) 將會遺失! :-(","CONFIRM":"是的,我很確定"},"ASSIGNED_TO":{"SELECT":"選擇要旨派給","SEARCH":"搜尋使用者"},"ADD_MEMBER":{"TITLE":"新成員","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Add email","REMOVE":"移除","INVITE":"Invite","CHOOSE_ROLE":"選擇角色","PLACEHOLDER_INVITATION_TEXT":"(非必要) 加上一段私人文字在邀請信,告訴你的新成員一些好事 ;-)","HELP_TEXT":"如果用戶已註冊Taiga帳戶,他們會自動被加入。否則他們會收到一封加入的邀請信"},"FEEDBACK":{"TITLE":"告訴我們你的故事","COMMENT":"系統錯誤,有改進建議有樂趣,或者是你使用Taiga 上的惡夢?","ACTION_SEND":"送出回饋 "},"SEARCH":{"TITLE":"搜尋","PLACEHOLDER_SEARCH":"你在找什麼?"},"ADD_EDIT_SPRINT":{"TITLE":"新衝刺任務 ","PLACEHOLDER_SPRINT_NAME":"衝刺任務名稱","PLACEHOLDER_SPRINT_START":"預估開始","PLACEHOLDER_SPRINT_END":"預估結束","ACTION_DELETE_SPRINT":"你確定要刪除這個衝刺任務嗎?","TITLE_ACTION_DELETE_SPRINT":"刪除衝刺任務","LAST_SPRINT_NAME":"最後衝刺任務 {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"新增問題 ","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"刪除衝刺任務"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(非必要) 加上一段私人文字在邀請信,告訴你的新成員一些好事 ;-)","PLACEHOLDER_TYPE_EMAIL":"輸入一個電郵地址","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Add comment","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"What's the project?","CHOOSE_PROJECT_FROM":"What's the project?","SUBJECT":"主旨","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"新使用者故事","EXISTING_USERSTORY":"Existing user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"主旨","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - 使用者故事 {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"狀態: {{userStoryStatus }}.已完成 {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} of {{userStoryTotalTasks}} tasks closed). 點數: {{userStoryPoints}}. 描述: {{userStoryDescription}}","SECTION_NAME":"使用者故事","LINK_TASKBOARD":"任務板","TITLE_LINK_TASKBOARD":"到任務板去","TOTAL_POINTS":"所有點數","ADD":"+新增使用者故事","ADD_BULK":"批次加入新使用者故事","PROMOTED":"此使用者故事已提昇成問題:","TITLE_LINK_GO_TO_ISSUE":"到問題 ","TITLE_DELETE_ACTION":"刪除使用者故事","LIGHTBOX_TITLE_BLOKING_US":"封鎖中的使用者故事","NOT_ESTIMATED":"無預估","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"關閉","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Comment deleted by {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Older first","RECENT_FIRST":"Recent first","COMMENT":"評論","EDITED_COMMENT":"已編輯","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"在此輸入一個新的評論","SHOW_DELETED":"顯示遭刪除的評論 ","HIDE_DELETED":"隱藏已刪除之評論 ","DELETE":"刪除評論 ","RESTORE":"恢復原評論 ","HISTORY":{"TITLE":"動態"}},"ACTIVITY":{"TITLE":"動態","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"tags added:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"新增附件","DELETED_ATTACHMENT":"刪除附件","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"團隊要求","CLIENT_REQUIREMENT":"客戶要求","BLOCKED":"已封鎖","VALUES":{"NOT_SET":"not set","UNASSIGNED":"未指派"},"FIELDS":{"SUBJECT":"主旨","DESCRIPTION":"描述","PRIORITY":"優先性","SEVERITY":"急迫性","STATUS":"狀態","TYPE":"類型","ASSIGNED_TO":"指派給 ","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"衝刺任務","COLOR":"顏色"}},"BACKLOG":{"PAGE_TITLE":"待辦任務優先表 - {{projectName}}","PAGE_DESCRIPTION":"待辦任務優先表面板 {{projectName}}(專案的使用者故事與衝刺任務): {{projectDescription}}","SECTION_NAME":"待辦任務優先表","CUSTOMIZE_GRAPH":"Customize your backlog graph","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"管理者","CUSTOMIZE_GRAPH_TITLE":"透由管理頁面設置點數與衝刺任務 \n ","MOVE_US_TO_CURRENT_SPRINT":"移到目前的 Sprint","MOVE_US_TO_LATEST_SPRINT":"移到最近的一個衝刺任務 ","EMPTY":"The backlog is empty!","CREATE_NEW_US":"創建一個新的使用者故事","CREATE_NEW_US_EMPTY_HELP":"你可以創建一個新使用者故事","EXCESS_OF_POINTS":"超過的點數","PENDING_POINTS":"待核點數","CLOSED_POINTS":"關閉","COMPACT_SPRINT":"濃縮衝刺點數","GO_TO_TASKBOARD":"到任務板 {{spring.name}}","EDIT_SPRINT":"編輯衝刺任務 ","TOTAL_POINTS":"全部","STATUS_NAME":"狀態名稱 ","SORTABLE_FILTER_ERROR":"當過濾器開啟時,無法放入待辦任務優先表","DOOMLINE":"專案規模 [Doomline]","CHART":{"XAXIS_LABEL":"衝刺任務","YAXIS_LABEL":"點數","OPTIMAL":"最適化的衝刺任務\"{{sprintName}}\"待定點數應為 {{value}}","REAL":"真實的衝刺任務\"{{sprintName}}\"待定點數為 {{value}}","INCREMENT_TEAM":"團隊要求的衝刺任務\"{{sprintName}}\"漸增點數為 {{value}}","INCREMENT_CLIENT":"客戶要求的衝刺任務\"{{sprintName}}\"漸增點數為 {{value}}"},"TAGS":{"TOGGLE":"切換標籤可見度","SHOW":"顯示標籤","HIDE":"隱藏標籤"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"使用者故事","TITLE_COLUMN_POINTS":"選擇檢示每個角色"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"全部
    點數","COMPLETED_POINTS":"已完成
    點數","OPEN_TASKS":"開啟
    任務","CLOSED_TASKS":"已關閉
    任務","IOCAINE_DOSES":"毒物(全新任務挑戰)
    劑量","SHOW_STATISTICS_TITLE":"顯示統計","TOGGLE_BAKLOG_GRAPH":"顯示/隱藏 剩餘工作量圖","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"專案
    點數","DEFINED_POINTS":"已定義
    點數","CLOSED_POINTS":"已關閉
    點數","POINTS_PER_SPRINT":"點數 /
    衝刺任務"},"FILTERS":{"TOGGLE":"切換過濾器可見度","HIDE":"隱藏過濾器","SHOW":"顯示過濾器"},"SPRINTS":{"TITLE":"衝刺任務","DATE":"DD MMM YYYY","LINK_TASKBOARD":"衝刺任務板","TITLE_LINK_TASKBOARD":"到任務板 {{spring.name}}","EMPTY":"尚無衝刺任務","WARNING_EMPTY_SPRINT_ANONYMOUS":"此衝刺任務無使用者故事","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"增加衝刺任務","TEXT_ACTION_NEW_SPRINT":"你可以在你的專案下創建一個新衝刺任務","ACTION_SHOW_CLOSED_SPRINTS":"顯示關閉衝刺任務","ACTION_HIDE_CLOSED_SPRINTS":"隱藏衝刺任務"}},"ERROR":{"TEXT1":"系統出了一點問題,工程師正在搶修中","NOT_FOUND":"找不到","NOT_FOUND_TEXT":"Error 404,你要找的網頁不存在,你可以稍後再回來TAIGA首頁,看看是否能再次找到要找的東西。","PERMISSION_DENIED":"無此權限","PERMISSION_DENIED_TEXT":"您無權限設進入此頁面","VERSION_ERROR":"Taiga某人之前更改了這個,而我們的工程師無法再做改變。請重新載入頁面來使用你的更新(之前設定將消失)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - 衝刺任務看板 - {{projectName}}","PAGE_DESCRIPTION":"衝刺任務 {{sprintName}} (from {{startDate}} to {{endDate}}) of {{projectName}}. 完成{{completedPercentage}}% ({{completedPoints}} of {{totalPoints}} points). {{openTasks}} 開啟任務 {{totalTasks}}.","SECTION_NAME":"任務板","TITLE_ACTION_ADD":"增加新任務 ","TITLE_ACTION_ADD_BULK":"批次加入新任務 ","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"指派任務 ","PLACEHOLDER_CARD_TITLE":"這可能是一項任務","PLACEHOLDER_CARD_TEXT":"Split Stories into tasks to track them separately","TABLE":{"COLUMN":"使用者故事","TITLE_ACTION_FOLD":"隱藏欄位","TITLE_ACTION_UNFOLD":"未隱藏欄位","TITLE_ACTION_FOLD_ROW":"隱藏列數","TITLE_ACTION_UNFOLD_ROW":"未隱藏列數","FIELD_POINTS":"點數","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"天數","YAXIS_LABEL":"點數","OPTIMAL":"一天最適待辦點數{formattedDate}應為{{roundedValue}}","REAL":"一天真實的待辦點數 {{formattedDate}} is {{roundedValue}}","DATE":"DD MMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - 任務 {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"狀態: {{taskStatus }}.描述: {{taskDescription}}","SECTION_NAME":"任務","LINK_TASKBOARD":"任務板","TITLE_LINK_TASKBOARD":"到任務板去","PLACEHOLDER_SUBJECT":"鍵入新任務主旨","TITLE_SELECT_STATUS":"狀態名稱 ","OWNER_US":"這任務屬於","TITLE_LINK_GO_OWNER":"到使用者故事","TITLE_DELETE_ACTION":"刪除任務","LIGHTBOX_TITLE_BLOKING_TASK":"封鎖中的任務 ","FIELDS":{"IS_IOCAINE":"負予全新任務"},"TITLE_ACTION_IOCAINE":"感到任務的不勘負荷?確定其它人知道此狀況在編輯任務時點選此「毒藥鍵」。這種致命毒物如果長期吸食微量,最後可能免疫。因此你最好偶而做點出奇的挑戰。"},"NOTIFICATION":{"OK":"一切還好","WARNING":"哇,有狀況發生","WARNING_TEXT":"很抱歉你的變動並未成功儲存","SAVED":"我們系統已儲存你所有變動","CLOSE":"關閉通知","MAIL":"透過郵件通知","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"你確定要刪除嗎?"},"CANCEL_ACCOUNT":{"TITLE":"取消您的帳戶","SUBTITLE":"很遺憾你要離開Taiga,希望你喜歡這段時光:","PLACEHOLDER_INPUT_TOKEN":"取消帳戶代碼 ","ACTION_LEAVING":"是的,我要走了","SUCCESS":"我們系統已移附你的帳戶"},"CHANGE_EMAIL_FORM":{"TITLE":"變更電子郵件","SUBTITLE":"確認你的電子郵件要更新","PLACEHOLDER_INPUT_TOKEN":"變更電郵代碼 ","ACTION_CHANGE_EMAIL":"變更電郵地址","SUCCESS":"我們系統已更新你的電子郵件"},"ISSUES":{"PAGE_TITLE":"問題 - {{projectName}}","PAGE_DESCRIPTION":" {{projectName}}的問題清單看版: {{projectDescription}}","SECTION_NAME":"問題","ACTION_NEW_ISSUE":"+ 新問題 ","ACTION_PROMOTE_TO_US":"提昇到使用者故事","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"此問題已提昇成使用者故事 ","EXTERNAL_REFERENCE":"此問題的提供者是","GO_TO_EXTERNAL_REFERENCE":"回到一開始","ACTION_DELETE":"删除議題 ","LIGHTBOX_TITLE_BLOKING_ISSUE":"封鎖中的問題","LINK_TASKBOARD":"任務板","TITLE_LINK_TASKBOARD":"到任務板去","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"優先性","SEVERITY":"急迫性","TYPE":"類型"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"將此問題提到使用者故事","MESSAGE":"你確定此問題要創建一個新的使用者故事?"},"TABLE":{"COLUMNS":{"TYPE":"類型","SEVERITY":"急迫性","PRIORITY":"優先性","SUBJECT":"主旨","VOTES":"投票數","STATUS":"狀態","MODIFIED":"Modified","ASSIGNED_TO":"指派給 "},"TITLE_ACTION_CHANGE_STATUS":"改變狀態","TITLE_ACTION_ASSIGNED_TO":"指派給 ","BLOCKED":"已封鎖","EMPTY":{"TITLE":"沒有問題回報:-)","SUBTITLE":"你有發現任何問題嗎"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - 問題 {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"狀態: {{issueStatus }}. 類型: {{issueType}}, 優先性: {{issuePriority}}. 急迫性: {{issueSeverity}}. Description: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"看板 - {{projectName}}","PAGE_DESCRIPTION":"看板面板 上有專案的使用者故事 {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban(看板)","TITLE_ACTION_FOLD":"隱藏欄位","TITLE_ACTION_UNFOLD":"未隱藏欄位","TITLE_ACTION_ADD_US":"新增使用者故事","TITLE_ACTION_ADD_BULK":"增加新批次","ACTION_SHOW_ARCHIVED":"顯示歸檔資料","ACTION_HIDE_ARCHIVED":"隱藏歸檔","HIDDEN_USER_STORIES":"此狀態下的使用者故事預設為隱藏","PLACEHOLDER_CARD_TITLE":"這裏是你的使用者故事","PLACEHOLDER_CARD_TEXT":"在此可以找到你想了解的專案"},"SEARCH":{"PAGE_TITLE":"搜尋 - {{projectName}}","PAGE_DESCRIPTION":"專案搜尋(使用者故事, 問題, 任務或維基頁等資訊) {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"使用者故事","FILTER_ISSUES":"問題 ","FILTER_TASKS":"任務 ","FILTER_WIKI":"維基頁","PLACEHOLDER_SEARCH":"搜尋","TITLE_ACTION_SEARCH":"搜尋","EMPTY_TITLE":"依你搜尋標準並未找到任何東西","EMPTY_DESCRIPTION":"請試試上方某一個分頁或再搜尋一次"},"TEAM":{"PAGE_TITLE":"團隊- {{projectName}}","PAGE_DESCRIPTION":"團隊面版可顯示專案中所有成員{{projectName}}: {{projectDescription}}","SECTION_NAME":"團隊","PLACEHOLDER_INPUT_SEARCH":"以全名搜尋","COLUMN_MR_WOLF":"問題解決高手","EXPLANATION_COLUMN_MR_WOLF":"已關閉議題 ","COLUMN_IOCAINE":"毒品吸食者(新領域任務挑戰)","EXPLANATION_COLUMN_IOCAINE":"毒物(新任務)劑量攝取","COLUMN_CERVANTES":"大文豪","EXPLANATION_COLUMN_CERVANTES":"已編輯之維基頁","COLUMN_BUG_HUNTER":"程式錯誤獵人","EXPLANATION_COLUMN_BUG_HUNTER":"問題回報","COLUMN_NIGHT_SHIFT":"熬夜工作","EXPLANATION_COLUMN_NIGHT_SHIFT":"任務關閉","COLUMN_TOTAL_POWER":"所有力量","EXPLANATION_COLUMN_TOTAL_POWER":"所有點數","SECTION_TITLE_TEAM":"團隊 >","SECTION_FILTER_ALL":"所有","CONFIRM_LEAVE_PROJECT":"你確定要退出這個專案嗎?","ACTION_LEAVE_PROJECT":"退出此專案"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[最大. 尺寸: {{maxFileSize}}] ","MENU":{"SECTION_TITLE":"使用者設定","USER_PROFILE":"使用者設定檔案","CHANGE_PASSWORD":"更換密碼 ","EMAIL_NOTIFICATIONS":"電子郵件通知","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"電子郵件通知","COLUMN_PROJECT":"專案","COLUMN_RECEIVE_ALL":"接收所有","COLUMN_ONLY_INVOLVED":"只有相關","COLUMN_NO_NOTIFICATIONS":"無通知","OPTION_ALL":"所有","OPTION_INVOLVED":"涉入","OPTION_NONE":"無"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"專案","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"專案"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"使用預設圖像","ACTION_DELETE_ACCOUNT":"刪除Taiga帳戶","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"檢查你的收信箱
    我們送出了一封信
    裏面有設定你新電子郵件的相關指示","CHANGE_PHOTO":"變更照片","FIELD":{"USERNAME":"使用者名稱","EMAIL":"電子郵件","FULL_NAME":"全名","PLACEHOLDER_FULL_NAME":"你的全名","BIO":"自介(最多210字)","PLACEHOLDER_BIO":"請自我介紹","LANGUAGE":"語言","LANGUAGE_DEFAULT":"-- 使用設預語言 -- ","THEME":"主題","THEME_DEFAULT":"-- 使用預設主題--"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - 維基 - {{projectName}}","PAGE_DESCRIPTION":"上回編輯{{lastModifiedDate}} ({{totalEditions}} editions in total) 內容: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"移除此維基頁 ","DELETE_LIGHTBOX_TITLE":"刪除維基頁","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"次數
    編輯 ","LAST_EDIT":"上次
    編輯 ","LAST_MODIFICATION":"上回修改"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"已創建","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"提示","LINK":"如果想知道如何使用,可以到我們的支援頁面了解詳情。","LINK_TITLE":"造訪我們的支援頁面","HINT1_TITLE":"你知道可以滙入與滙出專案嗎?","HINT1_TEXT":"可以從 Taiga提取所有個人資料記錄,移入其它地方。","HINT2_TITLE":"你知道可以創建個人化欄位嗎","HINT2_TEXT":"團隊可以使用客制化欄位來彈性地輸入特殊資料以應付其特定的工作流程 ","HINT3_TITLE":"重新整理與你相關的專案特徵","HINT3_TEXT":"本頁上方直接列出前10個專案選單","HINT4_TITLE":"你是否忘了你在做什麼?","HINT4_TEXT":"別憺心,在控制台可以找到你的公開任務、問題以及使用者故事的工作次序。"},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} 上傳新附件檔案 {{obj_name}}","US_CREATED":"{{username}} 創建新的使用者故事 {{obj_name}} 於 {{project_name}}","ISSUE_CREATED":"{{username}} 提出了新問題 {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} 創建新任務 {{obj_name}} 於 {{project_name}}","TASK_CREATED_WITH_US":"{{username}} 創建新任務 {{obj_name}} 於 {{project_name}} ,其為{{us_name}}之使用者故事","WIKI_CREATED":"{{username}} 創建新維基頁 {{obj_name}} 於 {{project_name}}","MILESTONE_CREATED":"{{username}} 創建新衝刺任務 {{obj_name}} 於 {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} 創建專案 {{project_name}}","MILESTONE_UPDATED":"{{username}}更新衝刺任務 {{obj_name}} ","US_UPDATED":"{{username}} 已更新 {{obj_name}}使用者故事之 \"{{field_name}}\"屬性。","US_UPDATED_WITH_NEW_VALUE":"{{username}} 已更新了 {{obj_name}} 使用者故事的\"{{field_name}}\"屬性到{{new_value}}","US_UPDATED_POINTS":"{{username}} 已更新了 {{obj_name}} 的使用者故事\"{{field_name}}\"點數為{{new_value}}","ISSUE_UPDATED":"{{username}} 更新了{{obj_name}}問題的 \"{{field_name}}\" 屬性","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} 已更新了 {{obj_name}} 問題的\"{{field_name}}\"屬性到{{new_value}}","TASK_UPDATED":"{{username}} 已更新了 {{obj_name}} 使用者故事的\"{{field_name}}\"屬性到{{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} 已更新了 {{obj_name}} 任務\"{{field_name}}\"的屬性到{{new_value}}","TASK_UPDATED_WITH_US":"{{username}} 更新了 {{obj_name}} 任務之\"{{field_name}}\" 屬性,其為 {{us_name}} 之使用者故事","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} 已更新了 {{obj_name}} 下的 {{us_name}} 使用者故事\"{{field_name}}\"屬性到{{new_value}}","WIKI_UPDATED":"\n{{username}} 更新了維基頁{{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} 評論了 {{obj_name}}使用者故事","NEW_COMMENT_ISSUE":"{{username}}評論了此問題 {{obj_name}}","NEW_COMMENT_TASK":"{{username}} 評論了此任務{{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} 有新成員","US_ADDED_MILESTONE":"{{username}} 增加使用者故事 {{obj_name}} 給 {{sprint_name}}","US_MOVED":"{{username}} 搬移了使用者故事 {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} 新增使用者故事 {{obj_name}} 到待辦工作優先列表","BLOCKED":"{{username}} 封鎖了 {{obj_name}}","UNBLOCKED":"{{username}} 解除了封鎖 {{obj_name}}","NEW_USER":"{{username}} 已加入 Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"問題","TASK":"任務"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"外部的應用程式要求取得授權","PAGE_DESCRIPTION":"外部的應用程式要求取得授權","AUTHORIZATION_REQUEST":"同意授權 {{application}} 應用程式使用你的帳戶資訊?","LOGIN_WITH_ANOTHER_USER":"以其它帳號登入","AUTHORIZE_APP":"授權的應用服務 ","CANCEL":"取消"},"JOYRIDE":{"NAV":{"NEXT":"下一個","BACK":"後台","SKIP":"略過","DONE":"完成"},"DASHBOARD":{"STEP1":{"TITLE":"你的專案","TEXT":"歡迎!你可以在此找到相關的專案"},"STEP2":{"TITLE":"進行中","TEXT":"你可以在此找到你正在處理的使用者故事,任務,問題。 "},"STEP3":{"TITLE":"觀看中","TEXT1":"在此你可以找到你想知道的專案","TEXT2":"你現在可利用Taiga進行工作了"},"STEP4":{"TITLE":"我們開始吧","TEXT1":"你可以開始創建你在Taiga上的第一個專案了","TEXT2":"祝好運!"}},"BACKLOG":{"STEP1":{"TITLE":"專案摘要","TEXT1":"你可以看到專案的狀態","TEXT2":"你可以在管理頁面變更專案的設定"},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"衝刺任務","TEXT":"衝刺任務為短期(通常為2 週)內特定工作必須要完成與送達."},"STEP4":{"TITLE":"使用者故事","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"調整你的工作流程 ","TEXT":"你可在管理者頁面設置欄位來繪製工作流程狀態"},"STEP2":{"TITLE":"使用者故事與任務","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"新增使用者故事","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"祝好運!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"發現更多專案","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"最活躍","MOST_ACTIVE_EMPTY":"目前尚無活進行中的專案","MOST_LIKED":"最受喜愛的","MOST_LIKED_EMPTY":"尚未有喜愛的專案","VIEW_MORE":"顯示更多","FEATURED":"受矚目專案","EMPTY":"沒有專案符合你尋找的條件.
    再試一次","FILTERS":{"ALL":"所有","KANBAN":"Kanban(看板)","SCRUM":"Scrum","PEOPLE":"找尋人員","WEEK":"上星期","MONTH":"上個月","YEAR":"去年","ALL_TIME":"全部時間","CLEAR":"清除過濾器 "},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"輸入文字","ACTION_TITLE":"搜尋","RESULTS":"搜尋結果"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/styles/theme-high-contrast.css b/dist/v-1547534999795/styles/theme-high-contrast.css deleted file mode 100644 index ee63076..0000000 --- a/dist/v-1547534999795/styles/theme-high-contrast.css +++ /dev/null @@ -1,4 +0,0 @@ -@charset "UTF-8";.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;box-sizing:content-box}.introjs-bullets ul,.introjs-bullets ul li,.introjs-bullets ul li a,.introjs-button,.introjs-helperLayer,.introjs-helperNumberLayer,.introjs-hint,.introjs-overlay,.introjs-progress,.introjs-progressbar,.introjs-tooltip,.introjs-tooltipReferenceLayer{box-sizing:content-box}.pika-table,table{border-collapse:collapse;border-spacing:0}.lightbox textarea,textarea{resize:vertical}h1 .date,h1 span{text-overflow:ellipsis}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:100000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0)";filter:"progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000)";box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow.bottom-middle,.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow{border:5px solid transparent;content:'';position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-bottom-color:#fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.right{right:-10px;top:10px;border-left-color:#fff}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-left-color:#fff}.introjs-arrow.bottom,.introjs-arrow.bottom-middle,.introjs-arrow.bottom-right{bottom:-10px;border-top-color:#fff}.introjs-arrow.bottom-right{right:10px}.introjs-arrow.left{left:-10px;top:10px;border-right-color:#fff}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-right-color:#fff}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-bullets,.pika-table th,.pika-title{text-align:center}.introjs-button{position:relative;overflow:visible;display:inline-block;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{box-sizing:content-box;margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-prevbutton.introjs-fullbutton{border:1px solid #d4d4d4;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-nextbutton.introjs-fullbutton{-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0;display:inline-block}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none;cursor:pointer}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{overflow:hidden;height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0%;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{position:absolute;background:0 0;width:20px;height:15px;cursor:pointer}.introjs-hint:focus{border:0;outline:0}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}.introjs-hint-dot,.introjs-hint-pulse{box-sizing:content-box;position:absolute}.introjs-hint:hover>.introjs-hint-pulse{border:5px solid rgba(60,60,60,.57)}.introjs-hint-pulse{width:10px;height:10px;border:5px solid rgba(60,60,60,.27);-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;background-color:rgba(136,136,136,.24);z-index:10;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.introjs-hint-no-anim .introjs-hint-dot{-webkit-animation:none;-moz-animation:none;animation:none}.introjs-hint-dot{border:10px solid rgba(146,146,146,.36);background:0 0;-webkit-border-radius:60px;-moz-border-radius:60px;border-radius:60px;height:50px;width:50px;-webkit-animation:introjspulse 3s ease-out;-moz-animation:introjspulse 3s ease-out;animation:introjspulse 3s ease-out;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;animation-iteration-count:infinite;top:-25px;left:-25px;z-index:1;opacity:0}@-webkit-keyframes introjspulse{0%{-webkit-transform:scale(0);opacity:0}25%{-webkit-transform:scale(0);opacity:.1}50%{-webkit-transform:scale(.1);opacity:.3}75%{-webkit-transform:scale(.5);opacity:.5}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes introjspulse{0%{-moz-transform:scale(0);opacity:0}25%{-moz-transform:scale(0);opacity:.1}50%{-moz-transform:scale(.1);opacity:.3}75%{-moz-transform:scale(.5);opacity:.5}100%{-moz-transform:scale(1);opacity:0}}@keyframes introjspulse{0%{transform:scale(0);opacity:0}25%{transform:scale(0);opacity:.1}50%{transform:scale(.1);opacity:.3}75%{transform:scale(.5);opacity:.5}100%{transform:scale(1);opacity:0}}.gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";filter:alpha(opacity=20)}.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:hsla(0,0%,100%,.9);background:linear-gradient(to bottom right,#fff,hsla(0,0%,100%,.8));border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.2);text-shadow:none}.awesomplete>ul:empty{display:none}@supports (transform:scale(0)){.awesomplete>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.awesomplete>ul:empty,.awesomplete>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.awesomplete>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.awesomplete>ul>li{position:relative;padding:.2em .5em;cursor:pointer}.awesomplete>ul>li:hover{background:#b7d2e0;color:#000}.awesomplete>ul>li[aria-selected=true]{background:#3d6c8e;color:#fff}.awesomplete mark{background:#e9ff00}.awesomplete li:hover mark{background:#b5d100}.awesomplete li[aria-selected=true] mark{background:#3c6b00;color:inherit}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}.project-values-title,h1{text-transform:uppercase}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! - * Pikaday - * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ - */.pika-single{display:block;position:relative;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.medium-editor-anchor-preview,.medium-editor-toolbar{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;top:0;z-index:2000}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}@-webkit-keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}@keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}.medium-editor-anchor-preview{left:0;line-height:1.4;max-width:280px;position:absolute;text-align:center;word-break:break-all;word-wrap:break-word;visibility:hidden}.medium-editor-anchor-preview a{color:#fff;display:inline-block;margin:5px 5px 10px}.medium-editor-placeholder-relative:after,.medium-editor-placeholder:after{content:attr(data-placeholder)!important;padding:inherit;margin:inherit;white-space:pre;font-style:italic}.medium-editor-anchor-preview-active{visibility:visible}.medium-editor-dragover{background:#ddd}.medium-editor-image-loading{-webkit-animation:medium-editor-image-loading 1s infinite ease-in-out;animation:medium-editor-image-loading 1s infinite ease-in-out;background-color:#333;border-radius:100%;display:inline-block;height:40px;width:40px}.medium-editor-placeholder{position:relative}.medium-editor-placeholder:after{position:absolute;left:0;top:0}.medium-editor-placeholder-relative,.medium-editor-placeholder-relative:after{position:relative}.medium-toolbar-arrow-over:before,.medium-toolbar-arrow-under:after{border-style:solid;content:'';display:block;height:0;left:50%;margin-left:-8px;position:absolute;width:0}.medium-toolbar-arrow-under:after{border-width:8px 8px 0}.medium-toolbar-arrow-over:before{border-width:0 8px 8px}.medium-editor-toolbar{left:0;position:absolute;visibility:hidden}.medium-editor-toolbar ul{margin:0;padding:0}.medium-editor-toolbar li{float:left;list-style:none;margin:0;padding:0}.medium-editor-toolbar li button{box-sizing:border-box;cursor:pointer;display:block;font-size:14px;line-height:1.33;margin:0;padding:15px;text-decoration:none}.medium-editor-toolbar li button:focus{outline:0}.medium-editor-toolbar li .medium-editor-action-underline{text-decoration:underline}.medium-editor-toolbar li .medium-editor-action-pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-weight:100;padding:15px 0}.medium-editor-toolbar-active{visibility:visible}.belong-to-epic-text-wrapper .remove-epic-relationship svg,.colors-table .gu-transit *{visibility:hidden}.medium-editor-sticky-toolbar{position:fixed;top:1px}.master,.medium-editor-relative-toolbar{position:relative}.medium-editor-toolbar-active.medium-editor-stalker-toolbar{-webkit-animation:medium-editor-pop-upwards 160ms forwards linear;animation:medium-editor-pop-upwards 160ms forwards linear}.medium-editor-action-bold{font-weight:bolder}.medium-editor-action-italic{font-style:italic}.medium-editor-toolbar-form{display:none}.medium-editor-toolbar-form a,.medium-editor-toolbar-form input{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.medium-editor-toolbar-form .medium-editor-toolbar-form-row{line-height:14px;margin-left:5px;padding-bottom:5px}.medium-editor-toolbar-form .medium-editor-toolbar-input,.medium-editor-toolbar-form label{border:none;box-sizing:border-box;font-size:14px;margin:0;padding:6px;width:316px;display:inline-block}body,html{width:100%}.medium-editor-toolbar-form .medium-editor-toolbar-input:focus,.medium-editor-toolbar-form label:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;box-shadow:none;outline:0}.medium-editor-toolbar-form a{display:inline-block;font-size:24px;font-weight:bolder;margin:0 10px;text-decoration:none}.medium-editor-toolbar-form-active{display:block}.medium-editor-toolbar-actions:after{clear:both;content:"";display:table}.medium-editor-element{word-wrap:break-word;min-height:30px}.master,body,html{min-height:100%}.medium-editor-element img{max-width:100%}.medium-editor-element sub{vertical-align:sub}.medium-editor-element sup{vertical-align:super}.medium-editor-hidden{display:none}.medium-toolbar-arrow-under:after{border-color:#242424 transparent transparent;top:50px}.medium-toolbar-arrow-over:before{border-color:transparent transparent #242424;top:-8px}.medium-editor-toolbar{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.75));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.75));border:1px solid #000;border-radius:5px;box-shadow:0 0 3px #000}.medium-editor-toolbar li button{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.89));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.89));border:0;border-right:1px solid #000;border-left:1px solid #333;border-left:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px rgba(0,0,0,.3);color:#fff;height:50px;min-width:50px;-webkit-transition:background-color .2s ease-in;transition:background-color .2s ease-in}.medium-editor-toolbar li button:hover{background-color:#000;color:#ff0}.medium-editor-toolbar li .medium-editor-button-first{border-bottom-left-radius:5px;border-top-left-radius:5px}.medium-editor-toolbar li .medium-editor-button-last{border-bottom-right-radius:5px;border-top-right-radius:5px}.medium-editor-toolbar li .medium-editor-button-active{background-color:#000;background:-webkit-linear-gradient(top,#242424,rgba(0,0,0,.89));background:linear-gradient(to bottom,#242424,rgba(0,0,0,.89))}.medium-editor-toolbar-form{background:#242424;border-radius:5px;color:#999}.medium-editor-toolbar-form .medium-editor-toolbar-input{background:#242424;box-sizing:border-box;color:#ccc;height:50px}.medium-editor-toolbar-form a{color:#fff}.medium-editor-toolbar-anchor-preview{background:#242424;border-radius:5px;color:#fff}.medium-editor-placeholder:after{color:#b3b3b1}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}.loader-active,body.loading-project,h1 .date,h1 span{overflow:hidden}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.prism-token.prism-cdata,.prism-token.prism-comment,.prism-token.prism-doctype,.prism-token.prism-prolog{color:#708090}.prism-token.prism-punctuation{color:#f8f8f2}.prism-namespace{opacity:.7}.prism-token.prism-constant,.prism-token.prism-deleted,.prism-token.prism-property,.prism-token.prism-symbol,.prism-token.prism-tag{color:#f92672}.prism-token.prism-boolean,.prism-token.prism-number{color:#ae81ff}.prism-token.prism-attr-name,.prism-token.prism-builtin,.prism-token.prism-char,.prism-token.prism-inserted,.prism-token.prism-selector,.prism-token.prism-string{color:#a6e22e}.prism-language-css .prism-token.prism-string,.prism-style .prism-token.prism-string,.prism-token.prism-entity,.prism-token.prism-operator,.prism-token.prism-url,.prism-token.prism-variable{color:#f8f8f2}.prism-token.prism-atrule,.prism-token.prism-attr-value,.prism-token.prism-class-name,.prism-token.prism-function{color:#e6db74}.prism-token.prism-keyword{color:#66d9ef}.prism-token.prism-important,.prism-token.prism-regex{color:#fd971f}.prism-token.prism-bold,.prism-token.prism-important{font-weight:700}.prism-token.prism-italic{font-style:italic}.prism-token.prism-entity{cursor:help}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}.backlog-table-body .user-story-name span,h1,p{line-height:1.5}.wysiwyg dl dt,.wysiwyg i,em{font-style:italic}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}*{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.3}body .master.ng-animate{transition:0}.drag-active{overflow-x:hidden}.master{height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-ms-flexbox;display:flex;height:100%}.menu-secondary{-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions header{-ms-flex:1;flex:1}.header-with-actions .action-buttons{-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;float:right;margin-left:10px}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.ttf) format("truetype")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.ttf) format("truetype")}@font-face{font-family:OpenSans-Regular;src:url(../fonts/OpenSans-Regular.ttf) format("truetype")}@font-face{font-family:OpenSans-Semibold;src:url(../fonts/OpenSans-Semibold.ttf) format("truetype")}@font-face{font-family:taiga;font-style:normal;font-weight:400;src:url(../fonts/taiga.eot);src:url(../fonts/taiga.eot?) format("eot"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:2rem;margin-bottom:1rem}h1 span,h2{font-size:1.6rem}h1 span{margin-right:.5rem;vertical-align:bottom;white-space:nowrap}h1 span.green,h1 span:last-child{-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#000;fill:#000}h1 .date{display:inline-block;max-width:500px;white-space:nowrap;word-wrap:normal}h2{line-height:1.2;margin-bottom:1rem}p img{margin:0}small{font-size:1rem}strong{font-weight:700}hr{border:solid #212121;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{transition:color .3s linear}@keyframes loading{0%{filter:blur(5px);opacity:0}100%{filter:blur(0);opacity:1}}@keyframes rotate{50%{filter:invert(1);transform:rotate(360deg)}}@keyframes formSlide{0%{filter:blur(5px);opacity:0;transform:translateY(10rem)}50%{filter:blur(0)}100%{opacity:1;transform:translateY(0)}}.ticket-assigned-to .user-avatar.is-iocaine img,.ticket-assigned-users .user-avatar.is-iocaine img{filter:hue-rotate(150deg) saturate(200%)}@keyframes loadBar{0%,20%{-ms-flex:1;flex:1}10%{-ms-flex:10;flex:10}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-.25rem)}60%{opacity:1}100%{transform:translateY(0)}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{font-size:.9rem;display:block}blockquote cite::before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}.card-task,.main-nav,.wysiwyg .list-stye-none{list-style:none}sup{font-size:.9rem;vertical-align:super}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}svg{height:1rem;width:1rem}.pika-single{min-width:240px;width:auto;z-index:999999}.pika-single .pika-title{color:#212121}.pika-single .is-selected .pika-button{background:#000;border-radius:0!important;box-shadow:inset 0 1px 3px #000}.pika-single .is-today .pika-button{color:#000}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#212121!important;border-radius:0!important;box-shadow:inset 0 1px 3px #212121!important}div.awesomplete>ul,div.awesomplete>ul::before{background:rgba(0,0,0,.95)}.spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:2rem;max-width:2rem}.capslock.ng-enter,.capslock.ng-leave{animation:dropdownFade .2s ease-in}div.awesomplete input{display:inline-block}div.awesomplete>ul{color:#212121;top:2.25rem;transition:all .2s ease}div.awesomplete>ul[hidden]{position:absolute;top:1.5rem;transform:scale(1)}div.awesomplete li:hover mark,div.awesomplete mark,div.awesomplete>ul>li:hover{background:#212121;color:#000}fieldset{border:0;margin:0;padding:0;position:relative;width:100%}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{transition:border .3s linear}button,button:active,button:focus{border:0;outline:0}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.capslock.ng-leave{animation-direction:reverse}.capslock .icon-capslock{bottom:.8rem;fill:#757575;height:.9rem;position:absolute;right:1rem;width:.9rem}.admin-membership .header-message{background:#dfdfdf;margin-top:1rem;padding:1rem}.admin-membership .header-message .no-more-membership{-ms-flex-align:center;align-items:center;color:#212121;display:-ms-flexbox;display:flex}.admin-membership .header-message .no-more-membership a,.admin-membership .header-message .no-more-membership strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-membership .header-message .no-more-membership p{color:#212121;-ms-flex-positive:1;flex-grow:1;margin:0;padding-left:2rem;padding-right:1rem}.admin-membership .limit-users-warning{font-size:.9rem;color:#000;margin-right:1rem}.admin-membership .check input{height:40px;width:85px}.add-tag-container{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:.5rem 0;padding:1rem}.add-tag-container .color-column{cursor:pointer;-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative}.add-tag-container .tag-name{-ms-flex-preferred-size:80%;flex-basis:80%;margin-right:1rem}.add-tag-container .options-column{display:-ms-flexbox;display:flex}.add-tag-container .options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.add-tag-container .current-color.empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.add-tag-container .current-color.empty-color:after,.add-tag-container .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.add-tag-container .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.add-tag-container .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.add-tag-container input[type=text]{background:#fff}.add-tag-container .icon.icon-close,.add-tag-container .icon.icon-save{opacity:1}.tags-table .table-tags-editor input[type=text]{background-color:transparent;border:0;border-bottom:1px solid transparent;box-shadow:none;transition:border-bottom .2s linear}.tags-table .table-tags-editor input[type=text]:focus{border-bottom:1px solid #757575;outline:0}.tags-table .table-tags-editor .row.header-tag-row{cursor:default;padding-left:1rem}.tags-table .color-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;padding:0 10px;position:relative}.tags-table .color-filter:hover input{border-bottom:1px solid #c1c1c1}.tags-table .color-filter input{padding:0}.tags-table .color-filter label{cursor:pointer}.tags-table .row.tag-row{margin:.3rem 0;padding:.7rem}.tags-table .row.tag-row:hover{cursor:default}.tags-table .row .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mix-tags{position:relative}.tags-table .mix-tags .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#212121;bottom:2rem;color:#fff;display:none;list-style-type:none;margin:0;padding:10px;position:absolute;right:-85%;width:120px;z-index:99;text-align:"center"}.tags-table .mix-tags .popover a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.tags-table .mix-tags .popover a:last-child{border:0}.tags-table .mix-tags .popover a:hover{color:#212121;transition:color .3s linear}.tags-table .mix-tags .popover a:hover.point{color:#fff}.tags-table .mix-tags .popover:after{background:#212121;bottom:-5px;content:'';height:15px;left:50%;position:absolute;transform:rotate(45deg);width:1rem}.tags-table .mix-tags:hover .popover{display:block}.tags-table .mixing-options-column{text-align:right}.tags-table .mixing-options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mixing-tags-from,.tags-table .mixing-tags-to{background:rgba(110,110,110,.2)}.tags-table .mixing-confirm{margin:0 .5rem}.tags-table .mixing-help-text{font-size:.75rem;color:#000;display:inline;padding-right:.5rem;text-align:center}@media (max-width:1280px){.tags-table .mixing-help-text{display:block;padding:.5rem}}.tags-table .current-color.empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.tags-table .current-color.empty-color:after,.tags-table .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.tags-table .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.tags-table .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,36,0,.7);position:absolute;width:100%}.admin-attributes .admin-attributes-section .admin-tags-section-wrapper-empty{color:#757575;padding:10vh 0 0;text-align:center}.admin-attributes .admin-attributes-section .loading-spinner{max-height:3rem;max-width:3rem}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.admin-roles p{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#757575}.auth .logo,.project-values-title h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.auth .logo,.auth .tagline{color:#fff;text-align:center}.project-values-title{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem}.project-values-title h2{font-size:1.2rem;margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(../images/bg.png) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;overflow-y:auto;position:fixed;right:0;top:0;z-index:999}.auth .auth-container{-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{text-align:center;width:100%}.auth .logo-svg svg{height:8rem;width:8rem}.auth .logo{font-size:3rem}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{margin-left:.5rem;padding-bottom:1rem}.auth .login-text a,.auth .register-text a{text-decoration:underline}.auth .login-text a:hover,.auth .register-text a:hover{color:#212121}.auth .register-terms{margin:.5rem 0 .75rem}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{animation-duration:5s;animation-iteration-count:infinite;animation-name:moustache;animation-timing-function:ease-in-out;fill:rgba(0,0,0,.9);stroke:#212121;stroke-width:1px;transform-origin:50% 50%;transition:.3s}.moustache:hover{fill:rgba(33,33,33,.9);transition:.3s}@keyframes moustache{0%,30%,70%,90%{transform:rotate(0)}10%{transform:rotate(-10deg)}80%{transform:rotate(10deg)}}.backlog-filter{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;opacity:0;overflow:hidden;position:relative;transition:all .2s linear;width:0}.backlog-filter tg-filter{transform:translateX(-260px);transition:all .2s linear}.backlog-filter.active tg-filter,.issues tg-filter{transform:translateX(0)}.backlog-filter.active{opacity:1;transition:all .2s linear;width:260px}.backlog-menu{background:#f5f5f5;color:#212121;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .menu-button.move-to-sprint,.multiple-drag-mirror.us-item-row .icon-drag,.multiple-drag-mirror.us-item-row .points,.multiple-drag-mirror.us-item-row .status,.multiple-drag-mirror.us-item-row .tags-block,.multiple-drag-mirror.us-item-row .us-settings,.multiple-drag-mirror.us-item-row .votes,.multiple-drag-mirror.us-item-row input{display:none}@media (max-width:1280px){.backlog-menu{-ms-flex-direction:column;flex-direction:column}}.backlog-menu .menu-button .icon-move{margin-right:.25rem}.backlog-menu .button-bulk{margin-left:.2rem}.multiple-drag-mirror.us-item-row{background:#fff;border-radius:4px;box-shadow:2px 2px 5px #757575;min-height:calc(40px + 1rem);opacity:.9;padding:1rem}.multiple-drag-mirror.us-item-row.is-checked,.multiple-drag-mirror.us-item-row:hover{background:#fff}.forecasting-add-sprint{font-size:.9rem;background:#f5f5f5;cursor:pointer;padding:.5rem 0;text-align:center}.invitation-main .avatar .person-name,.invitation-main .invitation-text{font-size:1.2rem;color:#fff;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.forecasting-add-sprint:hover{background:#ededed;transition:background .2s}.forecasting-add-sprint .icon-add{width:1.75rem;height:1.75rem;background:#212121;fill:#fff;margin-right:1rem;padding:.25rem;vertical-align:middle}.invitation-main{background:url(../images/invitation_bg.jpg) center center no-repeat;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background-size:cover;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;height:100vh;-ms-flex-pack:center;justify-content:center;z-index:999}.kanban,.taskboard{height:calc(100vh - 40px)}.invitation-main .invitation-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.error-main h1,.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.5rem;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#212121;transition:color .3s linear}.invitation-main .login-form,.invitation-main .register-form{-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff}.invitation-main .register-text{color:#fff;font-size:.9rem;margin-left:.5rem;padding-bottom:1rem;text-align:left}.invitation-main .register-text a{color:#000}.invitation-main .button-auth{display:block}.invitation-main .button-blackish:hover{background:#000}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.invitation-main .public-register-disabled{width:400px}.invitation-main .public-register-disabled .login-form{border-right:0}.invitation-main .contrib-plugins-wrapper label{color:#c1c1c1}.issues .filters-bar{position:relative;width:260px}.kanban{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px);position:relative}.kanban header{min-height:70px}.kanban .kanban-settings{float:right}.kanban .burndown-container{display:none}.kanban .zoom-loading img{display:block;margin-right:1rem}.kanban-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.kanban-header .options{display:-ms-flexbox;display:flex}.taskboard-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.error-main{background:url(../images/invitation_bg.jpg) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.duty-content,.taskboard{position:relative}.error-main .error-container{color:#fff;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff}.error-main a{color:#212121}.rtl .navbar .nav-right{margin:0}.rtl .navbar .nav-right .user-avatar{padding-left:0;padding-right:2em;text-align:left}.rtl .navbar .nav-right img{margin-left:0;margin-right:.5rem}.rtl .main-nav li:hover .helper{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav li:hover .helper::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav .backlog-sprints-menu::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu a{text-align:right}.rtl .admin-menu li a{padding:1rem 1rem 1rem 0}.rtl h1 span{margin-left:.5rem;margin-right:0}.rtl blockquote{border-left:0;border-right:5px solid #f5f5f5}.rtl .single-filter .name,.rtl .tag{border-color:transparent;border-width:0 3px 0 0}.rtl .tag{border-radius:5px 0 0 5px;margin:0 0 .5rem .5rem}.rtl .tag .icon-close{margin-left:0;margin-right:.25rem}.rtl .home-wrapper .working-on-container{margin-left:1rem;margin-right:0}.rtl .home-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .home-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .contact-team-large .icon-mail{margin-left:.5rem;margin-right:0}.rtl .user-profile .project-details-image{margin-left:2rem;margin-right:0}.rtl .profile-timeline .activity-item .profile-contact-picture,.rtl .profile-timeline .activity-item .profile-member-picture,.rtl .single-project .project-logo{margin-left:1rem;margin-right:0}.rtl .profile-timeline .activity-item{padding:1rem 0 1rem .5rem}.rtl .profile-timeline .activity-item .activity-date{left:.5rem;right:auto}.rtl .profile-timeline .activity-item .activity-info{margin-left:130px;margin-right:0}.rtl .profile-timeline .activity-item blockquote{margin-left:0;margin-right:calc(35px + 1rem)}.rtl .profile-timeline .single-attachment .icon{margin-left:.5rem;margin-right:0}.rtl .project-data .involved-team li{margin-left:.13rem;margin-right:0}.rtl .project-details-form-data .actions .delete-account{text-align:left}.rtl .backlog-table-body .backlog-table-title .user-stories,.rtl .backlog-table-body .row .user-stories,.rtl .backlog-table-body .user-story-name a,.rtl .backlog-table-header .backlog-table-title .user-stories,.rtl .backlog-table-header .row .user-stories,.rtl .issues-table .assigned-field,.rtl .issues-table .issue-field,.rtl .issues-table .modified-field,.rtl .issues-table .subject a,.rtl .sprints .sprint-table .column-us{text-align:right}.rtl .project-data .timeline{margin-left:1rem;margin-right:0}.rtl .track-icon{margin-left:.5rem;margin-right:0}.rtl .watch-options-arrow{margin-left:0;margin-right:auto}.rtl .ticket-estimation .ticket-role-points .icon-arrow-down{margin-left:0;margin-right:.25rem}.rtl .ticket-watch .ticket-watch-button,.rtl .ticket-watch svg{margin-left:.25rem;margin-right:0}.rtl .related-tasks-body .task-assignedto .icon{left:.5rem;right:0}.rtl .related-tasks-body .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .related-tasks-body .task-name{margin-left:1rem;margin-right:0}.rtl .related-tasks-body .task-name span{margin-left:.25rem;margin-right:0}.rtl tg-filter .search-action{left:.7rem;right:auto}.rtl .kanban tg-filter,.rtl .taskboard tg-filter{left:auto;right:0;transform:translateX(260px)}.rtl .kanban tg-filter.open,.rtl .taskboard tg-filter.open{transform:translateX(0)}.rtl .category-config .icon,.rtl .icon-arrow-left,.rtl .icon-arrow-right{transform:scaleX(-1)}.rtl .issues-options .button-bulk{margin-left:0;margin-right:.2rem}.rtl .issues-table .assigned-field .icon,.rtl .issues-table .issue-field .icon,.rtl .issues-table .modified-field .icon{margin-left:0;margin-right:.25rem}.rtl .issues-table .pop-status{left:auto;right:0}.rtl .issues-table .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .highlighted .header svg,.rtl .issues-table .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .issues-table .subject{padding-left:1rem;padding-right:0}.rtl .issues-table .issue-assignedto .icon{left:0;right:auto}.rtl .single-filter{padding-left:.5rem;padding-right:0}.rtl .single-filter .number{left:0;right:auto}.rtl .single-filter .name{border-style:solid}.rtl .discover-header .search-button{left:1rem;right:auto}.rtl .highlighted .header svg.icon-activity,.rtl .highlighted .header svg.icon-like{margin-left:.5rem;margin-right:0}.rtl .highlighted tg-most-liked{margin-left:8%;margin-right:0}.rtl .highlighted-project .statistic{margin-left:.5rem;margin-right:0}.rtl .highlighted-project .project-statistics svg{margin-left:.25rem;margin-right:0}.rtl .highlighted-project .project-logo{margin-left:1rem;margin-right:0}.rtl .featured-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .featured-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .project-list-wrapper .project-list{margin-left:2rem;margin-right:0}.rtl .project-list-wrapper .list-itemtype-project .list-itemtype-project-image{margin-left:1rem;margin-right:0}.rtl .create-project-selector-question{left:1.5rem;right:auto}.rtl .create-project-title-wrapper .icon{margin-left:.5rem;margin-right:0}.rtl .create-project-privacity label .icon{margin-left:.25rem;margin-right:0}.rtl .create-project-action-submit{margin-left:0;margin-right:1rem}.rtl .summary-progress-bar{margin-left:10px;margin-right:0}.rtl .empty-burndown svg{margin-left:2rem;margin-right:0}.rtl .backlog-menu .button-bulk{margin-left:0;margin-right:.2rem}.rtl .ticket-header .detail-status{margin-left:0;margin-right:.25rem}.rtl .ticket-status .level-name{float:left}.rtl .ticket-status .level{margin-left:.5rem;margin-right:0}.rtl .ticket-data-container .icon{margin-left:0;margin-right:.25rem}.rtl .ticket-assigned-to .assigned-to{margin-left:0;margin-right:.5rem}.rtl .user-list-avatar{margin-left:.25rem;margin-right:0}.rtl .user-list-name{margin-left:0;margin-right:.5rem}.rtl .assigned-to-list .user-list-multiple .remove-assigned-to,.rtl .assigned-to-list .user-list-single .remove-assigned-to,.rtl .ticket-assigned-to .remove-user,.rtl .ticket-assigned-users .remove-user,.rtl .ticket-watchers .delete-watcher{left:.5rem;right:auto}.rtl .lightbox .close{left:3rem;right:auto}.rtl .activity .activity-avatar,.rtl .comment .comment-avatar{margin-left:1.5rem;margin-right:0}.rtl .comment .comment-creator{margin-left:.5rem;margin-right:0}.rtl tg-wysiwyg .tools{padding-left:0;padding-right:1rem}.rtl .add-tag-button .icon-add{margin:.5rem 0 0 .25rem}.rtl .add-tag-input .save{margin:.5rem .5rem 0 0}.rtl .issue-nav{left:1rem;right:auto}.rtl .upvote-btn{margin-left:.3rem;margin-right:0}.rtl .taskboard-table-header .taskboard-table-inner{margin-left:1rem}.rtl .taskboard-table-header .task-colum-name{margin:0 0 0 5px}.rtl .kanban-table-header{margin-left:-3.7rem}.rtl .kanban-table-body .task-column,.rtl .kanban-table-header .task-colum-name,.rtl .taskboard-table-body .task-column{margin:0 0 0 5px}.rtl .kanban-table-body .task-column:last-child,.rtl .taskboard-table-body .task-column:last-child{margin-left:0;margin-right:initial}.rtl .backlog-table-body .votes svg{margin-left:.25rem;margin-right:0}.rtl .backlog-table-header .backlog-table-title{padding-left:1rem;padding-right:0}.rtl .backlog-table-body .backlog-table-title .status,.rtl .backlog-table-body .row .status,.rtl .backlog-table-header .backlog-table-title .status,.rtl .backlog-table-header .row .status{-ms-flex-preferred-size:150px;flex-basis:150px;text-align:right}.rtl .backlog-table-body .points .icon,.rtl .backlog-table-body .status .icon,.rtl .backlog-table-header .points .icon,.rtl .backlog-table-header .status .icon{margin-left:0;margin-right:.2rem}.rtl .sprints .sprint-table .column-points,.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .created-by .created-title{text-align:left}.rtl .sprints .sprint .edit-sprint{left:0;margin-left:.5rem;margin-right:0;right:auto}.rtl .epic-row .progress-bar,.rtl .epic-row .progress-status{left:auto;right:0}.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem}.rtl tg-wysiwyg .markdown-editor-placeholder,.rtl tg-wysiwyg .medium-editor-placeholder{padding-left:0;padding-right:1rem;text-align:right}.rtl .attachments-header button{margin-left:.2rem;margin-right:0}.rtl .attachments-header label{margin-left:0;margin-right:.25rem}.rtl .attachment-list .attachment-comments,.rtl .attachment-list .editable-attachment-comment{margin-left:.5rem;margin-right:0}.rtl .attachment-list .editable-attachment-deprecated input{margin-left:.2rem;margin-right:0}.rtl .more-attachments .more-attachments-num{margin-left:0;margin-right:.5rem}.rtl .single-attachment .attachment-name{padding-left:1rem;padding-right:0}.rtl .single-attachment .attachment-name svg{margin-left:.25rem;margin-right:0}.rtl .wiki-nav .add-button svg{margin-left:.5rem;margin-right:0}.rtl .wiki-pages-table .created-field,.rtl .wiki-pages-table .creator-field,.rtl .wiki-pages-table .last-modifier-field,.rtl .wiki-pages-table .modified-field,.rtl .wiki-pages-table .title-field{text-align:right}.rtl .wiki-summary div{margin-left:1.25rem;margin-right:0}.rtl .summary .number{margin-left:.3rem;margin-right:0}.rtl .summary .stats{margin-left:initial;margin-right:auto}.rtl .table-team .avatar .avatar-data{margin-left:0;margin-right:1rem;text-align:right}.rtl .table-team .leave-project .icon{margin-left:.2rem;margin-right:0}.rtl .belong-to-epic-text-wrapper{margin-left:1rem;margin-right:0}.rtl .epics-table-options-wrapper{left:.5rem;right:auto}.rtl .epics-table-dropdown{left:0;right:auto}.rtl .epic-row .icon-upvote,.rtl .story-row .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .story-row{margin-left:0;margin-right:4rem}.rtl .epic-row .icon-arrow-down{margin-left:0;margin-right:.1rem}.rtl .epic-header-container .color-selector{margin-left:.5rem;margin-right:0}.rtl .related-userstories-header .related-userstories-title{margin-left:0;margin-right:1rem}.rtl tg-related-userstory-row .userstory-name{margin-left:1rem;margin-right:0}.rtl tg-related-userstory-row .userstory-name span{margin-left:0;margin-right:.25rem}.rtl tg-related-userstory-row .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .card-owner-actions .icon{margin-left:.25rem;margin-right:0}.rtl .card-owner img{margin-left:.5rem;margin-right:0}.rtl .card-owner .card-owner-avatar img{margin-left:.45rem;margin-right:0}.rtl .card-statistics .statistic{margin-left:.5rem;margin-right:.5rem}.rtl .card-statistics .icon{margin-left:.2rem;margin-right:0}.rtl .lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-left:.5rem;margin-right:0}.rtl .lightbox-create-related-user-stories .new-user-story-options{margin-left:0;margin-right:auto}.rtl .lightbox-generic-form .settings fieldset{margin-left:.5rem;margin-right:0}.rtl .ticket-estimation .popover{left:auto;right:.5rem}.rtl .ticket-estimation .popover::after{left:auto;right:10px}.rtl .profile .timeline-wrapper{margin-left:3.5rem;margin-right:0}.rtl .profile .profile-bar{margin-left:1rem;margin-right:0}.rtl .profile-content-tabs .icon{margin-left:.5rem;margin-right:0}.rtl .profile-sidebar h4 .icon{margin-left:.3rem;margin-right:auto}.rtl .profile-filter .searchbox input{margin-left:1rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-project-image,.rtl .list-itemtype-project .list-itemtype-track .list-itemtype-track-likers,.rtl .list-itemtype-ticket .list-itemtype-avatar,.rtl .list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers,.rtl .profile-filter .searchbox .icon-search{margin-left:.5rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-track-likers .icon,.rtl .list-itemtype-project .list-itemtype-track-watchers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-likers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-watchers .icon{margin-left:.25rem;margin-right:0}.rtl .list-itemtype-ticket.blocked-project .icon-blocked-project{margin-left:0;margin-right:.25rem}.rtl .list-itemtype-ticket .list-itemtype-ticket-data{margin-left:1rem;margin-right:0}.rtl .list-itemtype-user .list-itemtype-avatar{margin-left:.75rem;margin-right:0}.rtl .admin-submenu ul a{padding:1rem 1rem 1rem 0}.rtl .admin-functionalities .module-desc{margin:0 0 0 2rem}.rtl .admin-functionalities .module-icon{margin:0 0 0 .5rem}.rtl .project-details .project-details-image{margin-left:2rem;margin-right:0}.rtl .admin-project-profile-owner-actions .owner-info{padding-left:0;padding-right:.5rem}.rtl .admin-roles .general-category .check{margin-left:0;margin-right:.5rem}.rtl .help-button svg,.rtl .project-details .private-or-public svg{margin-left:.5rem;margin-right:0}.rtl .project-csv .option-wrapper{border-left:1px solid #757575;border-radius:5px 0 0 5px;border-right:0}.rtl .colors-table .table-header .row{padding-left:0;padding-right:50px}.rtl .basic-table .row{text-align:right}.rtl .admin-membership-table .avatar img{margin:0 .3rem 0 .5rem}.rtl .admin-membership-table .row-role{padding-left:1rem;padding-right:0}.rtl .project-details .get-feedback-inner .check,.rtl .project-details .looking-for-people-selector .check{margin-left:0;margin-right:auto}.rtl .check input{left:auto;right:-10px}.rtl .check input:checked+div{margin-left:0;margin-right:50%}.rtl .check input:checked~.check-yes{left:.3rem;right:auto}.rtl .check input~.check-no{left:auto;right:.375rem}.rtl .notification-message-success{left:-370px;right:auto}.rtl .notification-message-success.active{animation:animSlideRTL 2s}.rtl .notification-message-success.inactive{animation:animSlideOutRTL .5s}@keyframes animSlideRTL{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}4.1%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,232.117,0,0,1)}8.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,357.804,0,0,1)}12.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,407.374,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,417.342,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,399.585,0,0,1)}60.56%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400.01,0,0,1)}100%,82.78%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400,0,0,1)}}@keyframes animSlideOutRTL{100%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}0%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}}.taskboard{overflow:hidden}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.taskboard .zoom-loading img{display:block;margin-right:1rem}.taskboard-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.taskboard-inner{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden}.team h2{margin:1rem 0}.team h2 span:last-child{color:#000}.us-story-main-data{margin-bottom:1rem}.us-story-main-data header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.subheader{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:1280px){.subheader{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}}.subheader .ticket-created-by{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-negative:0;flex-shrink:0}@media (max-width:1280px){.subheader .ticket-created-by{-ms-flex-preferred-size:auto;flex-basis:auto;-ms-flex-order:1;order:1}}.subheader .tags-block{-ms-flex:1;flex:1}@media (max-width:1280px){.subheader .tags-block{-ms-flex-order:2;order:2}}.subheader .tags-block .tag{border-color:transparent;border-style:solid}.duty-content .in-progress{cursor:progress}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#212121}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#757575}.duty-content .markdown{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;transition:opacity .2s linear}.duty-content .save-container .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:1.5rem;max-width:1.5rem}.duty-content .edit{cursor:pointer;fill:#757575}.duty-content .view-description .edit{background:#f5f5f5;height:2rem;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;transition:all .2s linear;width:2rem}.duty-content .edit-description{margin-bottom:2rem}.duty-content .edit-description .save{cursor:pointer;display:inline-block;position:relative;top:.3rem}.duty-content .edit-description .edit{display:inline-block;position:absolute;right:2.5rem;top:.4rem;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.save-wiki{float:right}.wiki{max-width:1024px}.wiki .wysiwyg{margin-bottom:0}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #b7b7b7;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:.3rem 0;text-align:left;width:100%}@media (max-width:767px){.basic-table .row{-ms-flex-direction:column;flex-direction:column}}.basic-table .row .width-1{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.button,.button-auth,.button-blackish,.button-bulk,.button-filter,.button-gray,.button-green,.button-red,.button-tribe,.menu-button,.trans-button,a.button-gray,a.button-green{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0;border:0;border-radius:3px;color:#fff;cursor:pointer;display:inline-block;padding:.6rem 2rem;text-align:center;text-transform:uppercase;transition:all .2s linear;vertical-align:middle}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-filter:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button-tribe:hover,.button:hover,.menu-button:hover,.trans-button:hover{color:#fff;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-filter:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button-tribe:visited,.button:visited,.menu-button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-filter span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.button-tribe span,.loading.menu-button span,.loading.trans-button span{animation:loading .5s linear}.button .icon,.button span,.button-auth .icon,.button-auth span,.button-blackish .icon,.button-blackish span,.button-bulk .icon,.button-bulk span,.button-filter .icon,.button-filter span,.button-gray .icon,.button-gray span,.button-green .icon,.button-green span,.button-red .icon,.button-red span,.button-tribe .icon,.button-tribe span,.menu-button .icon,.menu-button span,.trans-button .icon,.trans-button span{color:#fff}.button.disabled,.button[disabled],.disabled.button-auth,.disabled.button-blackish,.disabled.button-bulk,.disabled.button-filter,.disabled.button-gray,.disabled.button-green,.disabled.button-red,.disabled.button-tribe,.disabled.menu-button,.disabled.trans-button,[disabled].button-auth,[disabled].button-blackish,[disabled].button-bulk,[disabled].button-filter,[disabled].button-gray,[disabled].button-green,[disabled].button-red,[disabled].button-tribe,[disabled].menu-button,[disabled].trans-button{background:#f5f5f5;box-shadow:none;color:#757575;cursor:not-allowed;opacity:.65}.button.disabled:hover,.button[disabled]:hover,.disabled.button-auth:hover,.disabled.button-blackish:hover,.disabled.button-bulk:hover,.disabled.button-filter:hover,.disabled.button-gray:hover,.disabled.button-green:hover,.disabled.button-red:hover,.disabled.button-tribe:hover,.disabled.menu-button:hover,.disabled.trans-button:hover,[disabled].button-auth:hover,[disabled].button-blackish:hover,[disabled].button-bulk:hover,[disabled].button-filter:hover,[disabled].button-gray:hover,[disabled].button-green:hover,[disabled].button-red:hover,[disabled].button-tribe:hover,[disabled].menu-button:hover,[disabled].trans-button:hover{background:#f5f5f5;color:#757575}.menu-button,.trans-button:visited{color:#212121}.trans-button .icon,.trans-button span{color:#212121;transition:color .2s linear}.trans-button .icon{margin-right:.5rem}.menu-button{border-radius:0}.menu-button:hover{background:#c1c1c1;color:#757575}.menu-button span,.menu-button:visited{color:#212121}.submit-button{width:100%}.button-green,a.button-green{background:#000}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#212121;color:#fff}.button-gray,a.button-gray{background:#757575}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#212121;color:#fff}.button-blackish{background:#212121;color:#c1c1c1}.button-blackish:hover{background:#212121;color:#fff}.button-red{background:#ff0062}.button-red:hover{background:#ff2400;color:#fff}.button-red .icon{color:#fff}.button-bulk{background:#000;padding:.55rem .75rem}.button-bulk .icon{fill:currentColor;margin-right:0;position:relative;top:1px}.button-auth,.button-bulk:hover{background:#212121}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.button-tribe{-ms-flex-align:center;align-items:center;background:#107a8a;display:-ms-flexbox;display:flex;padding:.4rem .4rem .4rem 1.5rem}.button-tribe.active,.button-tribe:hover{background:#0b525c;color:#fff}.button-tribe .tribe-logo{margin-right:.5rem;width:1.5rem}.tribe-more-info{font-size:.9rem;color:#000;display:inline-block;margin-top:.5rem}.button-filter{background:#c1c1c1;margin-left:1rem;padding:.4rem .5rem;position:relative}.button-filter:hover{background:#757575;fill:#c1c1c1}.button-filter .filter-num{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background:#ff2400;border-radius:50%;height:1rem;left:-.5rem;position:absolute;top:-.5rem;width:1rem}.card-placeholder{background:#bcbcbc;border:1px dashed #adadad;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:-ms-flexbox;display:flex}.card-placeholder .image{background:#adadad;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-ms-flex:1;flex:1}.card-placeholder .line{background:#adadad;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;margin:0}.check{background-color:#a8a8a8;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:100px;z-index:999}.check input+div{background-color:#757575;height:25px;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#212121;margin-left:50%;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.check input:disabled+div{background-color:#757575}.ticket-created-by{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end}@media (max-width:1280px){.ticket-created-by{-ms-flex-pack:start;justify-content:flex-start;margin-bottom:.5rem}}.ticket-created-by .user-avatar{-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-positive:0;flex-grow:0;margin-left:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575;display:block;text-align:right}@media (max-width:1280px){.ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem;-ms-flex-order:1;order:1}.ticket-created-by .created-by{-ms-flex-order:2;order:2}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{text-align:left}}.ticket-created-by .created-by .created-title{color:#000}.ticket-created-by .created-by .created-date{margin-left:.5rem}@media (max-width:1280px){.ticket-created-by .created-by .created-date{margin-left:0}}.doom-line{-ms-flex-align:center;align-items:center;background:#ff0062;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:.5rem 0;padding:.25rem 0}.doom-line span{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff}.drag-drop-help,.help-button,.help-markdown{font-size:.75rem}.wysiwyg-help{background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:-.5rem;padding:.45rem .5rem}.wysiwyg-help a{display:inline-block}.help-button:hover span,.help-markdown:hover span{transition:color .2s linear}.help-button:hover .icon,.help-markdown:hover .icon{fill:#212121;transition:fill .2s linear}.help-button span,.help-markdown span{vertical-align:text-top}.help-button .icon,.help-markdown .icon{width:.9rem;height:.9rem;fill:#757575;margin-right:.2rem}.empty-filter,.empty-large,.empty-small{margin-top:4rem;text-align:center}.empty-filter img,.empty-large img,.empty-small img{margin-bottom:1rem;width:100%}.empty-filter .title,.empty-large .title,.empty-small .title{font-size:1.2rem;text-transform:uppercase}.empty-filter p,.empty-large p,.empty-small p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.empty-filter a,.empty-large a,.empty-small a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#000}.empty-small img{max-width:175px}.empty-large img{max-width:800px}.empty-filter{margin-top:1rem}.ticket-estimation .points-per-role{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.ticket-estimation .ticket-role-points{background:rgba(117,117,117,.2);color:#757575;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.1rem;min-height:2rem;padding:.5rem 1rem;position:relative}.ticket-estimation .ticket-role-points.clickable.active,.ticket-estimation .ticket-role-points.clickable:hover{background:rgba(33,33,33,.9);color:#c1c1c1}.ticket-estimation .ticket-role-points.clickable.active .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable.active .points,.ticket-estimation .ticket-role-points.clickable.active .role,.ticket-estimation .ticket-role-points.clickable:hover .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable:hover .points,.ticket-estimation .ticket-role-points.clickable:hover .role{color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points:last-child{background:rgba(0,0,0,.5);border-bottom:0;color:#c1c1c1}.ticket-estimation .ticket-role-points:last-child .icon-arrow-bottom,.ticket-estimation .ticket-role-points:last-child .points,.ticket-estimation .ticket-role-points:last-child .role{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points .icon-arrow-down{fill:currentColor;height:.6rem;margin-left:.25rem;width:.6rem}.ticket-estimation .popover.fix:after,.ticket-estimation .popover:after{height:10px;transform:rotate(45deg);content:''}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0;z-index:99;background:#212121;position:absolute;font-size:.9rem;list-style-type:none}.ticket-estimation .ticket-role-points .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#212121}.ticket-estimation .ticket-role-points .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .popover{color:#fff;display:none;left:.5rem;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#212121;left:10px;position:absolute;top:-5px;width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#212121;color:#fff}.ticket-estimation .popover.fix{color:#fff;display:none;left:-160px;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover.fix a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#212121;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#212121;left:90%;position:absolute;top:-5px;width:10px}.history-tabs{background:#c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.history-tabs a{display:inline-block;padding:.75rem 1rem}.history-tabs a:hover{color:#000}.history-tabs .history-tab{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid transparent;color:#757575;transition:all .1s linear}.history-tabs .history-tab.active{border-bottom:3px solid #212121;color:#212121}.history-tabs .order-comments{color:#212121}.level{background-color:#757575;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project{border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{font-size:.9rem;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#000}.list-itemtype-project .list-itemtype-track-likers.active .icon,.list-itemtype-project .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-project .icon{fill:#757575}.list-itemtype-project h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-project p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .icon-blocked-project{width:.75rem;height:.75rem}.list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-project-data-wrapper .icon-private{fill:#757575;height:22px;margin-left:.5rem;padding-top:.5rem;width:22px}.list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;width:3rem}.list-itemtype-project .list-itemtype-project-image img{width:100%}.list-itemtype-project .list-itemtype-project-members{-ms-flex-item-align:end;align-self:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-ticket .list-itemtype-avatar img,.list-itemtype-user .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-project .tag{-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket,.list-itemtype-user{border-bottom:1px solid #c1c1c1;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-ms-flexbox;display:flex;position:relative}.list-itemtype-ticket .list-itemtype-track{font-size:.9rem;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#000}.list-itemtype-ticket .ticket-id,.list-itemtype-ticket .ticket-project{color:#757575}.list-itemtype-ticket .list-itemtype-track-likers.active .icon,.list-itemtype-ticket .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-ticket .icon{fill:#757575}.list-itemtype-ticket h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1rem}.list-itemtype-ticket p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-ticket .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-type{margin-left:.3rem;text-transform:uppercase}.list-itemtype-ticket .list-itemtype-ticket-data{-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-blocked{color:#ff2400;margin-right:.25rem}.list-itemtype-user{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track{font-size:.9rem;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#000}.list-itemtype-user .list-itemtype-track-likers.active .icon,.list-itemtype-user .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-user .icon{fill:#757575}.list-itemtype-user h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-user p{margin-bottom:0}.list-itemtype-user .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .extra-info{font-size:.9rem;margin-top:.25rem}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:100%;-ms-flex-pack:center;justify-content:center;width:100%}.loader p{font-size:1.2rem;color:#757575;text-align:center}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{animation-duration:5s;animation-iteration-count:infinite;animation-name:loadBar;animation-timing-function:ease-in;background:#757575;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{animation-delay:0s;background:#ffc107}.loading-bar .item-1{animation-delay:1s;background:#009688}.loading-bar .item-2{animation-delay:2s;background:#e91e63}.loading-bar .item-3{animation-delay:3s;background:#9c27b0}.loading-bar .item-4{animation-delay:4s;background:#cddc39}.loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;transform-origin:32 32}.look-for-people{width:1rem;height:1rem;fill:#757575;margin-left:.25rem}.notification-message-success{background:rgba(33,33,33,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);right:-370px;top:2%;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{animation:animSlide 2s;animation-fill-mode:forwards;animation-iteration-count:1;opacity:1}.notification-message-success.inactive{animation:animSlideOut .5s;opacity:0;transform:none}.notification-message-success p{margin:0}.notification-message-success .warning{font-size:1.2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:1.2}@keyframes animSlide{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}100%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlideOut{0%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-message-error{background:rgba(255,36,0,.9);opacity:1;top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;transform:translateY(0);transition:all .6s ease-in-out}.notification-light,.notification-light.inactive{opacity:0;transform:translateY(-100%);transition:all .6s}.notification-message-error.inactive{transition:all .6s ease-in-out}.notification-message-error .icon-error{width:3rem;height:3rem;fill:#fff;margin-right:.5rem}.notification-message-error .warning{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:2.4rem}.notification-light p,.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-message-error .text p{margin:0}.notification-message-error .close{display:block;position:absolute;right:1rem;top:1rem}.notification-message-error .icon-close{cursor:pointer;fill:#fff}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-ms-flex-align:center;align-items:center;background:rgba(117,117,117,.95);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;position:absolute;top:0;width:100%;z-index:99999}.notification-light.active{opacity:1;transform:translateY(0);transition:all .6s}.paginator .active span,.paginator a,.paginator a:hover{transition:all .3s linear;color:#fff}.notification-light p{margin:0}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{display:block;margin-right:1rem;width:2rem}.notification-light .close svg{fill:#fff}.notification-message-light-error{background:rgba(255,36,0,.8)}.paginator{margin:2rem 0}.paginator ul{display:-ms-flexbox;display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator a{background:#757575;padding:.5rem 1rem}.paginator .active span,.paginator a:hover,.select-color{background:#212121}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.select-color{color:#fff;display:none;left:50px;list-style-type:none;margin:0;position:absolute;top:0;width:323px;z-index:99;text-align:"center";border-radius:0 10px 10px 0;padding:15px}.select-color a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#212121;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{background:#212121;content:'';height:15px;left:-7px;position:absolute;top:13px;transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#757575;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color .empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.select-color .empty-color:after,.select-color .empty-color:before{content:"";width:2px;height:47px;background:#ff8282;position:absolute;top:0}.select-color .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.select-color .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background-color:#c1c1c1;width:243px}.summary .description,.summary .number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.select-color input::-webkit-input-placeholder{color:#757575}.select-color input::-moz-placeholder{color:#757575}.select-color input:-moz-placeholder{color:#757575}.select-color input:-ms-input-placeholder{color:#757575}.select-color .selected-color{background:#757575;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.summary{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:65px;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;overflow:hidden;padding:1rem}.summary .summary-stats{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{font-size:.9rem;line-height:1}.summary .stats{cursor:pointer;display:block;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .graph{fill:#212121;transition:fill .2s}.summary .stats.active .graph,.summary .stats.active svg,.summary .stats:hover svg{fill:#000}.summary .stats svg{height:100%;max-height:2rem;max-width:2rem;transition:all .2s;width:100%}.summary .stats .graph{fill:#424242;transition:fill .2s}.summary .main-summary-stats{display:-ms-flexbox;display:flex;transform:translateY(0);transition:all .2s ease-in-out}.summary .show-role-points .points-per-role-stats{transform:translateY(-35px)}.summary .show-role-points .main-summary-stats{transform:translateY(-65px)}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#212121;height:24px}.summary-progress-bar .defined-points{background:#ff0062;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#212121;height:24px;position:absolute}.large-summary{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;padding:.75rem 1rem}.large-summary .stats-wrapper{padding-top:.35rem}.large-summary .large-summary-wrapper{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.large-summary .summary-progress-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding-top:.35rem}.large-summary .summary-progress-bar{-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats.summary-completed-points,.large-summary .summary-stats.summary-move-unfinished{border-right:1px solid #212121;margin-right:0;padding-right:1rem}.large-summary .summary-stats.summary-completed-points+.summary-stats,.large-summary .summary-stats.summary-move-unfinished+.summary-stats{border-left:1px solid #757575;margin-left:0;padding-left:1rem}.large-summary .icon{width:1.3rem;height:1.3rem;fill:currentColor;margin:.1rem .4rem 0 0;vertical-align:middle}.large-summary .icon.icon-stats{color:#000;float:right;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#212121;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#212121}.large-summary .icon.icon-stats.active:hover{color:#000;transition:color .3s linear}.large-summary .points-per-role-stats-content{display:-ms-flexbox;display:flex;padding-left:1rem}.large-summary .points-per-role-stats-content .summary-stats{padding:0}.large-summary .toggle-points-per-role{color:#fff;cursor:pointer}.large-summary .toggle-points-per-role svg{width:1rem;height:1rem}.large-summary .points-per-role-stats{margin-left:.5rem;transform:translateY(35px);transition:all .2s ease-in-out}.large-summary .points-per-role-stats .number{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.empty-burndown,.empty-burndown .title,.large-summary .points-per-role-stats .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.large-summary .points-per-role-stats .role{font-size:.75rem}.empty-burndown{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.15);display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{width:4rem;height:4rem;fill:#000;-ms-flex-preferred-size:4rem;flex-basis:4rem;-ms-flex-negative:0;flex-shrink:0;margin-right:2rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-ms-flex:1;flex:1}.empty-burndown .title{font-size:1.2rem;color:#000;margin:0;text-transform:uppercase}.empty-burndown a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;animation:blink 2s infinite}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name,.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;transition:none}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-ms-flex-align:stretch;align-items:stretch;border-radius:4px;display:-ms-flexbox;display:flex;margin:0;padding:0}.track-button.active .track-inner{background:rgba(33,33,33,.4)}.track-button.active .icon{fill:#000}.track-button.active .track-button-counter{background:rgba(33,33,33,.6)}.track-button.is-hover .track-inner{background:#ff5033;color:#c1c1c1;transition:background .2s}.track-button.is-hover .icon{fill:#ff0062}.track-icon,.watch-options .watch-check svg{fill:#212121}.track-button.is-hover .track-button-counter{background:#ff2400;color:#c1c1c1;transition:background .2s}.track-button .watch-options-arrow{margin-left:auto}.track-button .icon-arrow-down{width:.75rem;height:.75rem}.track-inner{-ms-flex-align:center;align-items:center;background:#c1c1c1;border-radius:4px 0 0 4px;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:start;justify-content:flex-start;min-width:140px;padding:.25rem 1rem}.track-inner:hover{background:#b4b4b4;transition:background .3s}.track-icon{margin-right:.5rem;position:relative;top:2px}.track-button-counter{-ms-flex-align:center;align-items:center;background:#b4b4b4;border-radius:0 4px 4px 0;padding:.25rem .75rem}.contact-team{background:#c1c1c1;border-radius:4px;padding:.25rem .75rem}.contact-team:hover{background:#b4b4b4;transition:background .3s}.watch-options{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.watch-options li{margin:0}.assigned-to-list,.ticket-assigned-users,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{border-bottom:1px solid rgba(117,117,117,.3);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.assigned-to-list .user-list-single,.upvote-btn{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox}.watch-options .watch-check{height:1.25rem;width:1.25rem}.upvote-btn a.active svg,.upvote-btn a:hover path{fill:#000}.upvote-btn{-ms-flex-align:stretch;align-items:stretch;display:flex;-ms-flex:0;flex:0;-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#757575;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#000;transition:background .3s}.upvote-btn a.active{background:rgba(33,33,33,.2);color:#000;transition:all .3s}.upvote-btn a.is-hover{background:#ff2400;color:#c1c1c1}.upvote-btn a.is-hover svg{fill:#ff0062;transform:rotate(180deg);transition:all .3s}.upvote-btn svg{fill:#757575;height:1rem;width:1rem}.assigned-to-list .user-list-avatar img,.ticket-assigned-users .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.upvote-btn span{display:block}.assigned-to-list .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #c1c1c1;display:flex;padding:.25rem 0;vertical-align:middle}.assigned-to-list .user-list-multiple,.ticket-watchers .user-list-single{-ms-flex-line-pack:center;padding:.25rem 0;vertical-align:middle;align-content:center}.assigned-to-list .user-list-single:last-child{border:0}.assigned-to-list .user-list-multiple{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex}.assigned-to-list .user-list-multiple.selected,.assigned-to-list .user-list-multiple:hover,.assigned-to-list .user-list-single.is-active,.assigned-to-list .user-list-single.selected,.assigned-to-list .user-list-single:hover{background:rgba(110,110,110,.3);cursor:pointer}.assigned-to-list .user-list-multiple:last-child{border:0}.assigned-to-list .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-name{color:#212121;margin-left:.5rem}.assigned-to-list .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{margin-bottom:1rem;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-single .remove-assigned-to{display:block;fill:#212121;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-single .remove-assigned-to:hover{fill:#ff2400}.assigned-to-list .user-list-multiple:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-multiple.is-active{background:rgba(110,110,110,.3);cursor:pointer;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-multiple .remove-assigned-to{display:block;fill:#212121;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-multiple .remove-assigned-to:hover{fill:#ff2400}.ticket-watchers .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex}.ticket-watchers .user-list-single:last-child{border:0}.ticket-watchers .user-list-multiple{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.25rem 0;vertical-align:middle}.ticket-assigned-users .user-list-multiple,.ticket-assigned-users .user-list-single{background:0 0;display:-ms-flexbox;padding:.25rem 0;align-content:center;vertical-align:middle}.ticket-watchers .user-list-multiple:last-child{border:0}.ticket-watchers .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-watchers .user-list-name{color:#212121;margin-left:.5rem;-ms-flex:1;flex:1;position:relative}.ticket-watchers .user-list-single:hover .delete-watcher{opacity:1;transition:opacity .2s ease-in}.ticket-watchers .delete-watcher{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-watchers .delete-watcher:hover{fill:#ff2400;transition:color .3s ease-in}.ticket-assigned-users .user-list-single{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:flex}.ticket-assigned-users .user-list-single:last-child{border:0}.ticket-assigned-users .user-list-multiple{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:flex}.ticket-assigned-users .user-list-multiple:last-child{border:0}.ticket-assigned-users .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-assigned-users .user-list-single{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-users .user-list-single:hover .remove-user{opacity:1;transition:opacity .2s ease-in}.ticket-assigned-users .user-list-name{color:#212121;margin-left:.5rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex:1;flex:1;position:relative}.admin-functionalities .module-name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .remove-user{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-assigned-users .remove-user:hover{fill:#ff2400;transition:color .3s ease-in}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{margin-bottom:2rem}.admin-common .admin-subtitle a{color:#000}.admin-common .admin-subtitle a:hover{color:#212121}.admin-common .total{font-size:1.2rem;-ms-flex-align:center;align-items:center;background-color:#c1c1c1;color:#212121;display:-ms-flexbox;display:flex;padding:.3rem 1rem}.custom-fields-table .custom-field-extra,.custom-fields-table .single-custom-field{color:#757575;border-bottom:1px solid #c1c1c1}.admin-common .total:hover .icon-edit{opacity:1;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0}.custom-fields-table .table-header{border-bottom:3px solid #c1c1c1}.custom-fields-table .table-header .custom-description,.custom-fields-table .table-header .custom-name{padding-left:1.1rem}.custom-fields-table .table-body .row:hover{background:rgba(33,33,33,.05);cursor:move;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag{opacity:1;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .js-view-custom-field{padding:.75rem 0}.custom-fields-table .js-view-custom-field .custom-extra-attr-wrapper{margin-left:1em}.custom-fields-table .icon-drag{fill:#757575;opacity:0;padding:0 .25rem 0 .1rem;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{margin-right:.5rem}.custom-fields-table .custom-name{-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-name a{padding:.5em}.custom-fields-table .custom-name svg{height:12px;width:12px}.custom-fields-table .custom-description{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:50%;flex-basis:50%;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-ms-flex-preferred-size:12%;flex-basis:12%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;opacity:0;text-align:center}.custom-fields-table .custom-options svg{cursor:pointer;fill:#757575;margin-right:.5rem;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options svg:hover{fill:#000;transition:color .2s linear}.custom-fields-table .custom-options svg.icon-close,.custom-fields-table .custom-options svg.icon-trash{fill:#ff0062}.custom-fields-table .custom-options-wrapper{opacity:0;transition:opacity .3s linear}.custom-fields-table .custom-options-wrapper:hover,.custom-fields-table .js-form .custom-options-wrapper{opacity:1}.custom-fields-table .custom-options-wrapper a{display:inline-block}.custom-fields-table .custom-field-extra{-ms-flex-align:center;align-items:center;font-size:.95em;padding:.25em 1.5em}.custom-fields-table .custom-extra-actions,.custom-fields-table .js-view-custom-field-extra{padding:.5em}.custom-fields-table .js-edit-custom-field{margin-left:.4rem}.custom-fields-table .custom-extra-attr-wrapper{-ms-flex-positive:1;flex-grow:1}.custom-fields-table .custom-extra-actions a{color:#000}.custom-fields-table .custom-extra-actions svg{height:10px;margin-right:.25em;width:10px}.admin-functionalities .module-container{max-width:900px;width:100%}.admin-project-export-result .spin img,.project-details .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;max-height:1rem;max-width:1rem}.admin-functionalities .module{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:1rem 0}.admin-functionalities .module.active .module-icon .icon,.admin-functionalities .module.active .module-name{color:#000;fill:#000}.admin-functionalities .module-icon{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem 0 0}.admin-functionalities .module-icon .icon{width:3rem;height:3rem;fill:#757575}.admin-functionalities .module-name{font-size:1.2rem;color:#757575;-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem}.admin-functionalities .module-desc{font-size:.9rem;color:#757575;-ms-flex:1;flex:1;margin:0 2rem 0 0}.admin-functionalities .module-desc p{margin:0}.admin-functionalities .module-desc-options,.admin-functionalities .videoconference-attributes{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-top:.5rem}.admin-functionalities .module-desc-options .options,.admin-functionalities .videoconference-attributes .options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:2.5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .module-desc-options fieldset,.admin-functionalities .videoconference-attributes .icon,.admin-functionalities .videoconference-attributes fieldset{margin:0 .5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .videoconference-attributes .icon{fill:#757575}.admin-functionalities .module-desc-options .icon:hover,.admin-functionalities .videoconference-attributes .icon:hover{fill:#000}.admin-functionalities .module-scrum .options{-ms-flex-item-align:end;align-self:flex-end}.admin-functionalities .module-videoconference .options{-ms-flex-item-align:start;align-self:flex-start}.admin-membership-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.admin-membership-table .avatar img{border-radius:4px;-ms-flex-positive:0;flex-grow:0;margin:0 .5rem 0 .3rem;width:50px}.admin-membership-table .avatar .data{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575;margin-top:.2rem}.admin-membership-table .avatar .pending,.admin-menu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-membership-table .avatar .pending{color:#ff0062;display:inline-block;padding-left:.3rem}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#c1c1c1}.admin-membership-table .resend{background-color:#000;color:#fff}.admin-membership-table .resend:hover{background-color:#212121;color:#fff;transition:background-color .3s linear}.admin-membership-table .delete{fill:#757575;transition:fill .2s}.admin-membership-table .delete:hover{fill:#ff2400}.admin-membership-table .pending{color:#ff0062}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-ms-flex-preferred-size:210px;flex-basis:210px;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.admin-menu li{border-bottom:1px solid #a8a8a8;text-transform:uppercase}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{margin:0 auto;transform-origin:32 32;width:100%}.admin-project-export-result h3{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.2rem;background:#f5f5f5;color:#757575;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#757575;margin:.5rem 0;text-align:center}.project-details .delete-project:hover,.project-details .use-default-image:hover{color:#ff2400}.project-details form{display:-ms-flexbox;display:flex}.project-details fieldset{margin-bottom:1rem}.project-details label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.project-details .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.project-details .project-details-image .image{width:100%}.project-details .change-image{display:block}.project-details .image-container{position:relative;margin-bottom:.5rem}.project-details .loading-overlay{display:none}.project-details .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.project-details .loading-spinner{margin:0 auto;border:0;transform-origin:center center}.project-details .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.project-details .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.project-details form{display:block}}.project-details .get-feedback,.project-details .looking-for-people{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid #c1c1c1;padding:1rem 0}.project-details .looking-for-people{border-top:1px solid #c1c1c1;margin-bottom:0}.project-details .get-feedback-inner,.project-details .looking-for-people-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.project-details .get-feedback-inner svg,.project-details .looking-for-people-selector svg{width:1rem;height:1rem;fill:#757575;margin-left:.5rem}.project-details .get-feedback-inner .check,.project-details .looking-for-people-selector .check{margin-left:auto}.project-details .looking-for-people-reason{display:block;margin-top:1rem}.project-details .looking-for-people-reason.ng-hide-remove-active{animation:dropdownFade .3s}.project-details .looking-for-people-reason.ng-hide-add-active{animation:dropdownFade .2s reverse;animation-delay:.1s}.project-details .delete-project{font-size:1rem;display:block;margin-top:1rem;text-align:right}.project-details .private-or-public{font-size:1rem;color:#757575;margin-bottom:2rem}.project-details .private-or-public svg{width:1.1rem;height:1.1rem;fill:#757575;margin-right:.5rem;vertical-align:middle}.project-privacy-settings{display:-ms-flexbox;display:flex;margin-bottom:.5rem}.project-privacy-settings .privacy-option{-ms-flex:1;flex:1;transition:.2 linear}.project-privacy-settings .privacy-option:first-child{margin-right:.5rem}.project-privacy-settings input[type=radio],.project-privacy-settings input[type=text]{display:none}.project-privacy-settings .privacy-project:checked~input[type=text],tg-admin-project-restrictions span{display:block}.project-privacy-settings label{background:#f5f5f5;color:#212121;text-align:center;transition:all .2s linear}.project-privacy-settings label:hover{background:rgba(33,33,33,.4);color:#212121}.project-privacy-settings label:hover svg{fill:#212121}.project-privacy-settings label svg{width:1.1rem;height:1.1rem;fill:#212121;margin-left:.5rem;vertical-align:middle}.project-privacy-settings .privacy-project:checked+label{background:#212121;color:#fff}.project-privacy-settings .privacy-project:checked+label svg{width:1.1rem;height:1.1rem;fill:#fff}.project-privacy-settings .privacy-project[disabled]+label{background:#f5f5f5;box-shadow:none;color:#757575;cursor:not-allowed;opacity:.65}.project-privacy-settings .privacy-project[disabled]+label:hover{background:#f5f5f5;color:#757575}tg-admin-project-restrictions p{font-size:1rem;text-align:center}tg-admin-project-restrictions a{color:#000}tg-admin-project-restrictions span:first-child::before{border:1px solid #ff0062;border-radius:6px;color:#ff0062;content:'!';display:inline-block;height:12px;line-height:12px;margin-right:.5rem;text-align:center;width:12px}.admin-project-profile-owner-actions{-ms-flex-align:center;align-items:center;border-top:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem}.admin-project-profile-owner-actions a{color:#000}.admin-project-profile-owner-actions a:hover{color:#212121;transition:color .2s}.admin-project-profile-owner-actions img{width:100%}.admin-project-profile-owner-actions .owner-info{-ms-flex:1;flex:1;padding-left:.5rem}.admin-project-profile-owner-actions .owner-info-title{color:#757575}.admin-project-profile-owner-actions .owner-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-project-profile-owner-actions .owner-avatar{width:2.5rem}.admin-project-profile-owner-actions .request{-ms-flex-negative:0;flex-shrink:0}.admin-roles .save{display:inline-block}.admin-roles .role-name{font-size:2rem;color:#212121}.admin-roles .icon:hover{fill:#000;transition:fill .2s linear}.admin-roles .icon-edit{cursor:pointer;fill:#757575;margin-left:.5rem;opacity:0;transition:opacity .2s linear}.admin-roles .icon-save{fill:#757575;margin-left:.5rem;transition:fill .2s linear}.admin-roles .edit-role{background-color:#c1c1c1;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .any-computable-role{background:#ff2400;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{font-size:.9rem;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category.external-user{-ms-flex-pack:start;justify-content:flex-start}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.admin-submenu ul a span,.admin-webhooks .webhook-url span{max-width:85%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admin-submenu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575;text-transform:uppercase}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#080808;color:#fff;transition:all .2s}.admin-submenu ul a.active{background:#1a1a1a;color:#fff;transition:all .2s}.admin-submenu ul a span{display:block}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#212121}.admin-webhooks .webhooks-table{margin-bottom:1rem}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;transition:opacity .2s linear}.admin-webhooks .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575}.admin-webhooks .table-body .webhook-service{color:#757575}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #c1c1c1}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-negative:0;flex-shrink:0}.admin-webhooks .webhook-url{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.admin-webhooks .webhook-url span{word-wrap:normal;color:#757575;display:inline-block;vertical-align:middle}.admin-webhooks .webhook-url a{color:#000;cursor:pointer;margin-left:.5rem;white-space:nowrap}.admin-webhooks .webhook-url a:hover{color:#212121}.admin-webhooks .webhook-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.admin-webhooks .webhook-options a{cursor:pointer;display:inline-block;margin-right:.5rem}.admin-webhooks .webhook-options svg{fill:#757575}.admin-webhooks .webhook-options svg:hover{fill:#000;transition:fill .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{display:none}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #c1c1c1;margin-left:22%}.admin-webhooks .history-single{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(33,33,33,.1);transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{transform:rotate(180deg);transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{transform:rotate(0);transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#757575;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#212121}.admin-webhooks .history-response-icon.history-error{background:#ff2400}.admin-webhooks .history-single-response{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#757575}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-header a{font-size:.9rem;color:#757575}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#212121;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{font-family:'courier new',monospace;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{font-size:.9rem;color:#757575;-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace;border:0;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-contrib h2,.admin-contrib label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #c1c1c1;margin-bottom:1rem}.admin-contrib input{margin-bottom:1rem}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #757575;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:0 1rem}.admin-contrib .check-item{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0;margin-bottom:1rem}.contrib-form-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.contrib-form-wrapper input{margin:0}.contrib-form-wrapper .contrib-input{border:0;-ms-flex:5;flex:5;margin:0}.contrib-form-wrapper .contrib-test{border:0;-ms-flex:1;flex:1;margin:0 0 0 1rem}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field a{font-size:.9rem;margin-left:1em;white-space:nowrap}.project-csv .csv-regenerate-field .icon:not(.icon-clipboard){fill:currentColor;height:.9rem;margin-right:.3rem;vertical-align:middle;width:.9rem}.project-csv .field-with-options{display:-ms-flexbox;display:flex;width:100%}.project-csv .field-with-options input{-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #757575;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{cursor:pointer;fill:#757575;opacity:0}.project-values-row .icon:hover{fill:#212121;transition:all .2s ease-in}.project-values-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #c1c1c1}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#999;cursor:move;transition:background .2s ease-in}.project-values-body .project-values-row:hover .icon{opacity:1;transition:opacity .2s ease-in}.project-values-name{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-values-value{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{display:inline-block;margin-right:.5rem}.project-values-settings svg.icon-trash{fill:#ff0062}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p{color:#212121;margin-bottom:.5rem;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #757575;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{font-size:.9rem;opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;transition:opacity .2s linear}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-password-text,.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;transition:opacity .3s linear}.login-form-container .forgot-pass{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.6rem;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#212121;transition:color .3s linear}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin:1rem 0;text-align:center}.register-form-container .register-text{font-size:.9rem}.backlog-table-body,.backlog-table-header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #757575;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-ms-flex-preferred-size:25px;flex-basis:25px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{width:100%}.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .votes,.backlog-table-header .votes{color:#757575;-ms-flex-preferred-size:65px;flex-basis:65px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.backlog-table-body .votes.inactive,.backlog-table-header .votes.inactive{color:#757575}.backlog-table-body .votes.inactive svg,.backlog-table-header .votes.inactive svg{fill:#757575}.backlog-table-body .votes.is-voted,.backlog-table-header .votes.is-voted{color:#212121;fill:#212121}.backlog-table-body .votes svg,.backlog-table-header .votes svg{fill:#757575;height:.75rem;margin-right:.25rem;vertical-align:middle;width:.75rem}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.2rem}.backlog-table-body .pop-points,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-header .pop-points,.backlog-table-header .pop-role,.backlog-table-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#212121;list-style-type:none;margin:0;position:absolute;z-index:99;text-align:"center";font-size:.9rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{color:#fff;display:none;left:65%;padding:10px 1rem 10px 10px;top:0;width:200px}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#212121;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{color:#fff;display:none;left:65%;padding:10px;top:0;width:200px}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#212121;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#212121;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{bottom:10px;color:#fff;display:none;left:30px;padding:10px 3rem 10px 10px;width:150px}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:none;left:30px;list-style-type:none;margin:0;z-index:99;text-align:"center";font-size:.9rem;position:absolute;background:#212121}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#212121;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{color:#fff;padding:10px;top:0;width:200px}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{bottom:0;color:#fff;padding:10px;top:auto;width:200px}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#212121;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#212121;color:#fff}.backlog-table-header .backlog-table-title{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;border-bottom:2px solid #757575;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:1rem}.backlog-table-header .points{cursor:pointer}.backlog-table-header .header-points span{color:#757575}.backlog-table-body.forecasted-stories{border:.5rem solid #f5f5f5;border-bottom:0}.backlog-table-body .row{border-bottom:1px solid #b7b7b7;cursor:move;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#999;transition:background .2s ease-in;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag,.backlog-table-body .row:hover .us-settings{opacity:1;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.gu-mirror{background:#999;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .row .icon-arrow-down{fill:#757575;height:.7rem;width:.7rem}.backlog-table-body .gu-transit{background:#c1c1c1}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .sortable-placeholder *{display:none}.backlog-table-body .is-checked{background:#999;transition:background .2s ease-in}.backlog-table-body input:checked{color:#212121;transition:color .2s ease-in}.backlog-table-body .user-story-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:inline-block;-ms-flex:1;flex:1}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{font-size:.9rem;margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff0062;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:#ff2400;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .us-settings{-ms-flex-negative:0;flex-shrink:0;margin-left:2rem;opacity:0}.backlog-table-body .us-settings svg{fill:#757575;margin-right:.5rem;transition:fill .2s ease-in}.backlog-table-body .us-settings svg:hover{fill:#212121}.backlog-table-body .icon-drag{cursor:move;fill:#757575;opacity:0;padding:.1rem}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.backlog-table-body .us-status tg-svg{display:inline-block}.backlog-table-body .loading{margin:2% auto;width:3rem}.backlog-table-body .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.empty-large .row{display:none}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#000;padding:.25rem .25rem 0;transition:background .2s}.sprints .add-sprint:hover{background:#212121}.sprints .add-sprint svg{fill:#c1c1c1;height:1.4rem;width:1.5rem}.sprints .filter-closed-sprints{font-size:.9rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading{text-align:center}.sprints .loading-spinner{border:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;transform-origin:center center}.sprints .sprint-name a{font-size:1rem;display:inline-block;margin-right:.5rem}.sprints .sprint{margin-bottom:2rem}.sprints .sprint header{position:relative}.sprints .sprint:hover .edit-sprint{opacity:1;transition:opacity .2s ease-in}.sprints .sprint .edit-sprint{opacity:0;position:absolute;right:0;top:0;transition:opacity .2s ease-in;vertical-align:baseline}.lightbox-generic-form .settings .iocaine,.lightbox-generic-form .settings .requirement,.ticket-assigned-to .self-assign .icon,.ticket-assigned-to .user-assigned .icon,.ticket-assigned-users .self-assign .icon,.ticket-assigned-users .user-assigned .icon{vertical-align:middle}.sprints .sprint svg{fill:#757575}.sprints .sprint svg:hover{fill:#000;transition:fill .2s ease-in}.sprints .sprint .number{font-size:.75rem;margin-right:.2rem}.sprints .sprint .description{font-size:.75rem;line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{font-size:.9rem;color:#757575;-ms-flex:1;flex:1}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint ul{margin:0;text-align:right}.sprints .compact-sprint{transform:rotate(0);transition:all .2s}.sprints .compact-sprint.active{transform:rotate(90deg);transition:all .2s}.sprints .compact-sprint:hover .icon{fill:#212121;transition:color .2s}.sprints .sprint-progress-bar{background:#757575;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#000;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table{min-height:2rem}.sprints .sprint-table .sprint-empty{background:#b4b4b4;border:2px dashed #8f8f8f;color:#757575;padding:1rem;text-align:center}.sprints .sprint-table .row{border-bottom:1px solid #757575;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:rgba(117,117,117,.2);cursor:move;transition:background .2s ease-in}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.readonly{cursor:auto}.sprints .sprint-table .row.ui-sortable-helper{background:#999;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.sprints .sprint-table .gu-transit{background:#949494;height:40px}.sprints .sprint-table .gu-transit *{display:none}.sprints .sprint-table .column-us{font-size:.9rem;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{display:block}.sprints .sprint-table .us-name.closed{color:#828282}.sprints .sprint-table .us-name.blocked{color:#ff2400}.sprints .sprint-table .column-points{-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#828282}.sprints .sprint-table .column-points.blocked{color:#ff2400}.sprints .sprint-table.sprint-empty-wrapper .row{display:none}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input{display:none}.sprints .us-item-row .user-story-name{font-size:.9rem;line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#757575}.sprint-closed .sprint-progress-bar .current-progress{background:#5c5c5c}.sprint-closed .button-gray{background:#757575}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{font-size:1.2rem;margin-bottom:.5rem;text-transform:uppercase}.sprints-empty a{color:#000}.taskboard-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.taskboard-table.zoom-0 .task-colum-name span{padding-right:1rem}.taskboard-table .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;background:#f5f5f5;border-top:3px solid #757575;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;text-transform:uppercase;width:300px}.taskboard-table .task-colum-name:last-child{margin-right:0}.taskboard-table .task-colum-name.column-fold{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table .task-colum-name.column-fold span{display:none}.taskboard-table .task-colum-name.column-fold .hfold,.taskboard-table .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table .task-colum-name span{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.taskboard-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;min-height:2.4rem;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.taskboard-table-header tg-svg{display:block;margin-right:.3rem}.taskboard-table-header tg-svg:hover{cursor:pointer}.taskboard-table-header tg-svg.hfold,.taskboard-table-header tg-svg.hunfold{display:inline-block;transform:rotate(90deg)}.taskboard-table-body{-ms-flex:1;flex:1;margin-bottom:5rem;overflow:auto;width:100%}.taskboard-table-body .taskboard-column{-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:300px;width:300px}.taskboard-table-body .column-fold .card .card-owner img,.taskboard-table-body .row-fold .card .card-owner img{height:1.3rem;margin-right:0;width:1.3rem}.taskboard-table-body .taskboard-column:last-child{margin-right:0}.taskboard-table-body .row-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .row-fold .card .card-data,.taskboard-table-body .row-fold .card .card-owner-actions,.taskboard-table-body .row-fold .card .card-owner-name,.taskboard-table-body .row-fold .card .card-statistics,.taskboard-table-body .row-fold .card .card-tag,.taskboard-table-body .row-fold .card .card-title,.taskboard-table-body .row-fold .card .card-unfold,.taskboard-table-body .row-fold .card tg-card-slideshow{display:none}.taskboard-table-body .row-fold .taskboard-column,.taskboard-table-body .row-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .card .card-data,.taskboard-table-body .column-fold .card .card-owner-actions,.taskboard-table-body .column-fold .card .card-owner-name,.taskboard-table-body .column-fold .card .card-statistics,.taskboard-table-body .column-fold .card .card-tag,.taskboard-table-body .column-fold .card .card-title,.taskboard-table-body .column-fold .card .card-unfold,.taskboard-table-body .column-fold .card tg-card-slideshow,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table-body .column-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .column-fold .taskboard-column,.taskboard-table-body .column-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to{display:none}.taskboard-table-body .taskboard-row{display:-ms-flexbox;display:flex;margin-bottom:.25rem;min-height:10rem;width:100%}.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box{background:rgba(255,36,0,.6)}.taskboard-table-body .taskboard-row.blocked .points-value,.taskboard-table-body .taskboard-row.blocked .points-value:hover,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg:hover{color:#fff;fill:#fff;transition:color .3s linear}.taskboard-table-body .taskboard-row.blocked .taskboard-cards-box{background:rgba(255,36,0,.1)}.taskboard-table-body .taskboard-row.row-fold{min-height:0}.taskboard-table-body .taskboard-row.row-fold .us-title{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.ticket-assigned-to .loading-spinner,.ticket-assigned-users .loading-spinner{transform-origin:32 32;max-height:2rem;max-width:2rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.taskboard-table-body .taskboard-row.row-fold .icon-add,.taskboard-table-body .taskboard-row.row-fold .icon-bulk,.taskboard-table-body .taskboard-row.row-fold .points-value,.taskboard-table-body .taskboard-row.row-fold .us-data{display:none}.taskboard-table-body .taskboard-row.issues-row{margin-top:1em}.taskboard-table-body .taskboard-row.issues-row .taskboard-cards-box{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:start;align-items:flex-start;border-top:3px solid #757575;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.taskboard-table-body .taskboard-row.issues-row .taskboard-row-title-box{padding:0}.taskboard-table-body .taskboard-row.issues-row .task-colum-name{-ms-flex-pack:start;justify-content:flex-start;padding:.5rem .5rem .5rem 2em}.taskboard-table-body .taskboard-row.issues-row .row-title{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-to,.ticket-assigned-users{-ms-flex-align:center;border-bottom:1px solid #757575;border-top:1px solid #757575}.taskboard-table-body .taskboard-row.issues-row .toggle-fold{display:block;left:.5rem;position:absolute;top:-.4rem}.taskboard-table-body .taskboard-row.issues-row .card{cursor:default;height:auto;margin:.3rem .1rem .3rem .5rem}.taskboard-table-body .taskboard-row.issues-row:not(.row-fold) .card{width:280px}.taskboard-table-body .taskboard-row-title-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-row-title-box{position:relative}.taskboard-row-title-box .us-title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-row-title-box .points-value{font-size:.9rem;color:#757575}.taskboard-row-title-box .points-value span{margin-right:.1rem}.taskboard-row-title-box .us-data{display:-ms-flexbox;display:flex}.taskboard-row-title-box .due-date tg-svg{position:inherit}.taskboard-row-title-box tg-svg{cursor:pointer;display:block;position:absolute;right:.5rem;top:.7rem}.taskboard-row-title-box tg-svg:hover svg{fill:#000}.taskboard-row-title-box tg-svg.add-action{right:2rem}.taskboard-row-title-box tg-svg.fold-action{left:0;right:inherit;top:1rem}.ticket-assigned-to{align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:1rem 0;position:relative}.ticket-assigned-to:hover .remove-user{opacity:1;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{margin:1rem auto}.ticket-assigned-to .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-to .user-avatar .iocaine-symbol svg{background:#212121;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.ticket-assigned-to .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;margin:.2rem 0 .25rem}.ticket-assigned-to .assigned-to .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-to .assigned-to .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-to .assigned-to .self-assign,.ticket-assigned-to .assigned-to .user-assigned{color:#000;cursor:default}.ticket-assigned-to .assigned-to .self-assign:hover,.ticket-assigned-to .assigned-to .user-assigned:hover,.ticket-assigned-to .remove-user:hover,.ticket-assigned-to .self-assign.editable:hover,.ticket-assigned-to .user-assigned.editable:hover,.ticket-assigned-users .self-assign.editable:hover,.ticket-assigned-users .user-assigned.editable:hover{cursor:pointer}.ticket-assigned-to .assigned-to .self-assign .icon,.ticket-assigned-to .assigned-to .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-to .remove-user{fill:#757575;opacity:0;position:absolute;right:.5rem;top:2rem}.ticket-assigned-to .remove-user:hover{fill:#ff2400;transition:fill .2s}.ticket-assigned-to .self-assign,.ticket-assigned-to .user-assigned{color:#000}.ticket-assigned-to .self-assign:hover,.ticket-assigned-to .user-assigned:hover{color:currentColor}.ticket-assigned-to .self-assign.editable,.ticket-assigned-to .user-assigned.editable{color:#000}.ticket-assigned-users .assigned-title,.ticket-assigned-users .tg-add-assigned span{color:#757575;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-assigned-users{align-items:center;margin-bottom:1rem;padding:.5rem 0;position:relative}.ticket-assigned-users .loading-spinner{margin:1rem auto}.ticket-assigned-users .assigned-title{display:block;margin:.2rem 0 .25rem}.ticket-assigned-users .tg-assigned-users{-ms-flex-align:center;align-items:center;position:relative}.ticket-assigned-users .tg-add-assigned{margin-top:.25rem}.ticket-assigned-users .tg-add-assigned .add-assigned{fill:#757575;opacity:1;right:.5rem;top:2rem}.ticket-assigned-users .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:#ff2400;transition:fill .2s}.ticket-assigned-users .tg-add-assigned span{margin:.2rem .5rem}.ticket-assigned-users .assigned-users-options{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .assigned-users-options a{margin-right:.2rem}.ticket-assigned-users .self-assign,.ticket-assigned-users .self-assign.editable,.ticket-assigned-users .user-assigned,.ticket-assigned-users .user-assigned.editable{color:#000}.ticket-assigned-users .not-assigned-users{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;margin:.2rem 0 .25rem}.colors-table .table-header,.duty-custom-fields .custom-fields-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .not-assigned-users .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-users .not-assigned-users .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-users .not-assigned-users .self-assign,.ticket-assigned-users .not-assigned-users .user-assigned{color:#000;cursor:default}.colors-table .row.edition .current-color,.ticket-assigned-users .not-assigned-users .self-assign:hover,.ticket-assigned-users .not-assigned-users .user-assigned:hover{cursor:pointer}.ticket-assigned-users .not-assigned-users .self-assign .icon,.ticket-assigned-users .not-assigned-users .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-users .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-users .user-avatar img{width:100%}.ticket-assigned-users .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-users .user-avatar .iocaine-symbol svg{background:#212121;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.category-config{border-bottom:1px solid #757575}.category-config:first-child{border-top:1px solid #757575}.category-config .resume{-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:-ms-flexbox;display:flex;padding:1rem;position:relative}.category-config .resume.open-drawer .icon{transform:rotate(90deg)}.category-config .icon{transform:rotate(0);transition:all .4s}.category-config .resume-title{width:280px}.category-config .count{color:#757575;float:left;padding-right:5px}.category-config .summary-role{-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#757575;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#000}.category-config .summary-role .role-summary-single.inactive{background:#757575}.category-config .category-items{max-height:0;transition:max-height .5s ease-in;overflow:hidden;background-color:#c1c1c1;width:100%}.colors-table .table-header .row:hover,.colors-table .table-header:hover{background:0 0}.category-config .category-items.open{transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #c1c1c1}.colors-table .table-header .row{padding-left:50px}.colors-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:last-child{border:0}.colors-table .row.edition{padding-left:3rem}.colors-table .row.hidden{display:none}.colors-table .row:hover{background:rgba(110,110,110,.2);cursor:move;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;transition:opacity .3s linear}.colors-table .row.no-draggable{padding-left:50px}.colors-table .row.no-draggable:hover{cursor:auto}.colors-table .row .color-column{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .before-after-column,.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit,.colors-table .row .thresold-column{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.colors-table .row .before-after-column{padding:0 10px}.colors-table .row .color-name,.colors-table .row .status-name{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 10px;position:relative}.colors-table .row .color-name span,.colors-table .row .status-name span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.colors-table .row .color-name{-ms-flex-preferred-size:100px;flex-basis:100px}.colors-table .row .status-slug{display:none;-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:6;flex-grow:6;padding:0 10px}@media (min-width:1400px){.colors-table .row .status-slug{display:block}}.colors-table .row .status-slug span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:100px;text-align:center}.colors-table .row .status-wip-limit{display:none;max-width:100px;padding:0 0 0 10px;text-align:center}@media (min-width:1400px){.colors-table .row .status-wip-limit{display:block}}.colors-table .before-after-selector{display:-ms-flexbox;display:flex;font-size:.9rem}.colors-table .before-after-selector input{display:none}.colors-table .before-after-selector input+label{background:rgba(193,193,193,.7);cursor:pointer;display:block;padding:.5rem .25rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.colors-table .before-after-selector input+label:hover{background:rgba(33,33,33,.3);transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single{-ms-flex:1;flex:1;margin-right:.25rem}.colors-table .before-after-selector .before-after-selector-single:last-child{margin-right:0}.colors-table .before-after-selector .before-after-selector-single.checked label{background:#212121;color:#fff;transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single.checked label:hover{background:#212121}.colors-table .options-column a{cursor:pointer;display:inline-block}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#c1c1c1;border-radius:2px;height:40px;width:40px}.colors-table .icon{cursor:pointer;fill:#757575;margin-right:1rem;opacity:0}.colors-table .icon:hover{fill:#212121;transition:all .2s ease-in}.colors-table .icon.icon-check{cursor:default;fill:#000;opacity:1}.colors-table .icon.icon-merge{cursor:default;opacity:1}.colors-table .icon.icon-search{cursor:none;fill:#000;opacity:1}.colors-table .icon.icon-drag{cursor:move}.colors-table .icon.icon-trash{fill:#ff0062}.colors-table .gu-mirror{background:#999;opacity:1}.contrib-plugins-wrapper{margin:1rem 0 2rem}.contrib-plugins-wrapper label{font-size:.9rem;display:block;margin-bottom:.5rem}.duty-custom-fields{margin-bottom:2rem}.duty-custom-fields .custom-fields-header{-ms-flex-line-pack:justify;align-content:space-between;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value,.lightbox h2,.lightbox-create-edit .tg-add-assigned span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header .icon{cursor:pointer}.duty-custom-fields .custom-fields-header .collapse{display:block;transform:rotate(-90deg);transition:.1s ease-out}.duty-custom-fields .custom-fields-header .open{transform:rotate(0)}.duty-custom-fields .custom-field-single{border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;padding:.7rem}.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-options{margin:0;opacity:0;transition:opacity .2s linear}.duty-custom-fields .custom-field-options a{display:inline-block}.duty-custom-fields .custom-field-options svg{fill:#757575}.duty-custom-fields .custom-field-options svg:hover{fill:#000}.duty-custom-fields .custom-field-data{-ms-flex:0;flex:0;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem;display:block;line-height:.9rem}.duty-custom-fields .custom-field-value{-ms-flex-align:start;align-items:flex-start;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields .custom-field-value.js-value-view-mode.wysiwyg{white-space:normal}.duty-custom-fields form label{cursor:pointer}.duty-custom-fields form input{width:100%}.custom-fields-body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:50%;flex-basis:50%}@media (max-width:1280px){.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even),.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0}}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even){padding:0 0 0 2rem}.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0 2rem 0 0}.custom-fields-body .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body .custom-attribute:nth-child(even),.custom-fields-body .custom-attribute:nth-child(odd){padding:0}.custom-fields-body .custom-field-single{height:100%}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff0062}.external-reference{font-size:.9rem;color:#757575;margin-top:.5rem}.external-reference a{border-left:1px solid #757575;padding:0 .2rem;transition:color .3s linear}.external-reference a:hover{color:#000}.external-reference a:first-child{border:0}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox .close{width:2rem;height:2rem;cursor:pointer;fill:#757575;position:absolute;right:3rem;top:3rem;transition:fill .2s;display:block}.lightbox .close:hover{fill:#ff0062}.lightbox .close svg{width:2rem;height:2rem;pointer-events:none}.lightbox.open{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1;transition:opacity .3s ease}.lightbox.close{opacity:0;transition:opacity .3s ease}.lightbox .lb-icon{margin:1rem auto;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single:first-child,.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox .lb-icon svg{width:6rem;height:6rem;display:block;fill:#c1c1c1}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox h2{font-size:2rem}.lightbox-generic-form form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form fieldset{position:relative}.lightbox-generic-form textarea{min-height:4.5rem;resize:vertical}.lightbox-generic-form .existing-or-new-selector{display:-ms-flexbox;display:flex;margin-bottom:2rem}.lightbox-generic-form .existing-or-new-selector input{display:none}.lightbox-generic-form .existing-or-new-selector input:checked+label{background:#212121;color:#fff;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input:checked+label:hover{background:#212121}.lightbox-generic-form .existing-or-new-selector input+label{background:rgba(193,193,193,.7);cursor:pointer;display:block;font-size:1em;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input+label:hover{background:rgba(33,33,33,.3);transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single{-ms-flex:1;flex:1}.lightbox-generic-form .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#212121;border:1px solid #000}.lightbox-generic-form .settings .iocaine svg,.lightbox-generic-form .settings .requirement svg{width:.75rem;height:.75rem}.lightbox-generic-form .settings .blocked:hover{background:#ff0062;border:1px solid #ff2400}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#000;border:1px solid #000;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:#ff2400;border:1px solid #ff2400;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-form .attachments{margin-bottom:0}.lightbox-search fieldset,.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-generic-form .attachment-body{max-height:7.5rem;overflow-y:auto}.lightbox-generic-form .attachment-delete{right:.5rem}.lightbox-generic-form .attachment-delete svg{fill:#757575;height:1.25rem;width:1.25rem}.lightbox-generic-form .attachment-delete:hover svg{fill:#ff2400}.lightbox-sprint-add-edit .delete-sprint .icon,.lightbox-sprint-add-edit .delete-sprint:hover .icon{fill:currentColor}.lightbox-generic-bulk form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-search form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-sprint-add-edit form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.7rem;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-sprint-add-edit .delete-sprint{font-size:.9rem;color:#757575;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-ask-choice .subtitle,.lightbox-generic-ask .subtitle{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint:hover{color:#ff2400;transition:color .3s linear}.lightbox-generic-ask form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .subtitle{white-space:pre-line}.lightbox-generic-ask .options{display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-ask-choice .warning{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-delete-account p{text-align:center}.lightbox-delete-account form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .newsletter input+label{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-delete-project .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem}.lightbox-delete-account .options{display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-ms-flexbox;display:flex}.lightbox-delete-project .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:100%;max-width:100%;width:100%}.backlog-sprints-menu::after,.lightbox-create-edit .pop-status:after,.lightbox-create-edit .pop-users:after,.main-nav a:hover .helper::after,.related-tasks-body .pop-status:after,.ticket-header .pop-status:after{content:'';transform:rotate(45deg)}.lightbox-generic-loading .progress-bar-wrapper{background:#b4b4b4;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#212121;height:24px;position:absolute;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#b4b4b4;bottom:35px;color:#757575;padding:.3rem;position:absolute;transition:left .1s linear}.lightbox-import-error .description a,.lightbox-select-user .add-comment a{color:#000}.lightbox-create-issue form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row fieldset{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block textarea,.lightbox-create-issue textarea{margin-bottom:1rem;max-height:12rem;min-height:8rem}.lightbox-select-user .add-comment textarea,.lightbox-select-user .submit-button{margin-top:1rem}.lightbox-block .form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single.selected,.lightbox-select-user .user-list-single:hover{background:rgba(110,110,110,.3);cursor:pointer}.lightbox-select-user .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.lightbox-select-user .more-watchers{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;padding:.5rem;text-align:center}.lightbox-select-user .add-comment{position:relative;text-align:center}.lightbox-select-user .add-comment .icon-close{cursor:pointer;fill:#757575;position:absolute;right:0;top:0;transition:fill .2s}.lightbox-select-user .add-comment .icon-close:hover{fill:#ff0062}.lightbox-select-user .add-comment .icon-close svg{width:2rem;height:2rem}.lb-create-edit-userstory .points-per-role{-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0}.lb-create-edit-userstory .ticket-role-points{margin:.1rem;min-width:20%}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(4n+4){margin-right:0}.lb-create-edit-userstory .ticket-role-points:last-child{-ms-flex-preferred-size:100%;flex-basis:100%;margin:.1rem 0;min-width:100%}.lightbox-import-error{text-align:center}.lightbox-import-error .content{width:500px}.lightbox-import-error h2{margin-top:1rem}.lightbox-import-error img{height:5rem}.lightbox-leave-project-warning{text-align:center}.lightbox-leave-project-warning .icon{fill:#757575;height:3rem;margin-bottom:1rem;width:3rem}.lightbox-set-due-date .delete-due-date .icon,.lightbox-set-due-date .delete-due-date:hover .icon{fill:currentColor}.lightbox-leave-project-warning .content,.lightbox-request-ownership .content{width:500px}.lightbox-request-ownership{text-align:center}.lightbox-set-due-date{z-index:9999}.lightbox-set-due-date form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-set-due-date .date{margin:2rem 0 1rem}.lightbox-set-due-date .reason textarea{margin-top:.5rem}.lightbox-set-due-date .due-date-suggestions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:1rem 0 .5rem}.lightbox-set-due-date .suggestion{background:rgba(184,184,184,.2);color:#B8B8B8;-ms-flex-pack:start;justify-content:flex-start;margin:0 .5rem .5rem;min-height:2rem;padding:.5rem .75rem;position:relative}.lightbox-set-due-date .suggestion:first-child{margin-left:0}.lightbox-set-due-date .suggestion:nth-child(4n+4){margin-right:0}.lightbox-set-due-date .suggestion.clickable.active,.lightbox-set-due-date .suggestion.clickable:hover{background:rgba(33,33,33,.9);color:#fff}.lightbox-set-due-date .delete-due-date{font-size:.9rem;color:#757575;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-set-due-date .delete-due-date:hover{color:#ff2400;transition:color .3s linear}.lightbox-create-edit{z-index:9998}.lightbox-create-edit form{-ms-flex-preferred-size:700px;flex-basis:700px;max-width:700px;width:700px}.lightbox-create-edit .form-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:700px;flex-basis:700px;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;margin-bottom:30px}.lightbox-create-edit .form-wrapper main{-ms-flex-positive:1;flex-grow:1;max-width:480px}.lightbox-create-edit .form-wrapper .sidebar{border-left:2px solid #c1c1c1;margin-left:15px;padding-left:15px;width:220px}.lightbox-create-edit .existing-item-wrapper{margin-bottom:30px}.lightbox-create-edit .existing-item-wrapper select .strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-create-edit .add-existing-button{width:100%}.lightbox-create-edit .status-button{display:-ms-flexbox;display:flex;position:relative}.lightbox-create-edit .status-dropdown{-ms-flex-line-pack:center;align-content:center;color:#fff;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;height:30px;padding:.25rem .5rem}.lightbox-create-edit .status-dropdown .status-text{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.lightbox-create-edit .status-dropdown svg{fill:#fff;height:.9rem;width:.9rem}.lightbox-create-edit .popover a{color:#fff;display:block;padding:.5rem 1rem;text-align:left}.lightbox-create-edit .popover a.active,.lightbox-create-edit .popover a:hover{color:#212121}.lightbox-create-edit .ticket-assigned-to{border:0;padding:0}.lightbox-create-edit .ticket-assigned-to.single-assign{margin:0}.lightbox-create-edit .ticket-assigned-to.multiple-assign{-ms-flex-align:start;align-items:start;-ms-flex-direction:column;flex-direction:column;margin:0}.lightbox-create-edit .ticket-assigned-to .assigned-to-actions{display:block}.lightbox-create-edit .ticket-assigned-to .remove-user{top:1.2rem}.lightbox-create-edit .user-list{display:-ms-flexbox;display:flex;width:100%}.lightbox-create-edit .user-list .user-list-item{margin-right:.5rem;width:44.75px}.lightbox-create-edit .user-list .user-list-item img{height:44.75px;width:44.75px}.lightbox-create-edit .user-list .user-list-item:last-child{margin-right:0}.lightbox-create-edit .user-list .user-list-item.counter{background:#B8B8B8;color:#757575;font-weight:400;height:44.75px;line-height:44.75px;text-align:center}.wysiwyg b,.wysiwyg dl dt,tg-wysiwyg .mention{font-weight:700}.lightbox-create-edit .tg-add-assigned{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:.25rem 0 .75rem}.lightbox-create-edit .tg-add-assigned .add-assigned{fill:#757575;opacity:1;right:.5rem;top:2rem}.lightbox-create-edit .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:#ff2400;transition:fill .2s}.lightbox-create-edit .tg-add-assigned span{font-size:.9rem;color:#757575;margin:.2rem .5rem}.lightbox-create-edit .pop-status,.lightbox-create-edit .pop-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;text-align:"center";background:#212121;font-size:.9rem;z-index:99}.lightbox-create-edit .users-dropdown{position:relative}.lightbox-create-edit .pop-status{color:#fff;display:none;padding:10px;position:absolute;top:28px;width:203px}.lightbox-create-edit .pop-status a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-status a:last-child{border:0}.lightbox-create-edit .pop-status a:hover{color:#212121;transition:color .3s linear}.lightbox-create-edit .pop-status a:hover.point{color:#fff}.lightbox-create-edit .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.lightbox-create-edit .pop-users{color:#fff;display:none;left:0;padding:10px;position:absolute;top:60px;width:203px}.lightbox-create-edit .pop-users a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-users a:last-child{border:0}.lightbox-create-edit .pop-users a:hover{color:#212121;transition:color .3s linear}.lightbox-create-edit .pop-users a:hover.point{color:#fff}.lightbox-create-edit .pop-users:after{background:#212121;height:15px;left:67.67px;position:absolute;top:-7px;width:16px}.lightbox-create-edit .pop-users.multiple{top:84px}.lightbox-create-edit .pop-users.multiple::after{left:30px}.lightbox-create-edit .pop-users ul{margin-bottom:.5rem}.lightbox-create-edit .pop-users li{border-bottom:1px solid #757575}.lightbox-create-edit .pop-users li:last-child{border:0}.lightbox-create-edit .pop-users .user-list-single{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;padding:.5rem 0}.lightbox-create-edit .pop-users .user-list-single.selected{color:#000}.lightbox-create-edit .pop-users .user-list-avatar{height:32px;margin-right:.5rem;width:32px}.lightbox-create-edit .pop-users .user-list-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-positive:1;flex-grow:1;position:relative}.lightbox-create-edit .pop-users .remove svg{fill:#c1c1c1;height:.8rem;width:.8rem}.lightbox-create-edit .pop-users .show-more{border-top:1px solid #757575;padding-top:.5rem;text-align:center}.lightbox-create-edit .ticket-data-container{margin:0;padding:0 0 .1rem}.lightbox-create-edit .ticket-data-container .ticket-status .priority-data,.lightbox-create-edit .ticket-estimation .points-per-role{margin:0}.lightbox-create-edit .ticket-detail-settings{height:52px;-ms-flex-pack:left;justify-content:left;margin:1rem 0 0}.lightbox-create-edit .ticket-detail-settings label{border:0;padding:12px 13px;width:auto}.lightbox-create-edit .ticket-detail-settings .item-block,.lightbox-create-edit .ticket-detail-settings .item-unblock{display:block;margin:0}.lightbox-create-edit .blocked-note{margin-top:.5rem}.ticket-detail-settings .lightbox-assign-sprint-to-issue .lightbox-assign-related-sprint{width:700px}.ticket-detail-settings .lightbox-assign-sprint-to-issue svg{fill:initial;max-height:initial;max-width:initial}.ticket-detail-settings img,.ticket-detail-settings svg{max-height:1.25rem;max-width:1.25rem;width:100%}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label{background:0 0;display:inline-block;margin-bottom:.5rem;margin-right:0;padding:0}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label+input{display:initial}.ticket-detail-settings .lightbox-assign-sprint-to-issue button{width:100%}.lightbox-relate-to-epic .lightbox-create-related-epic-wrapper{max-width:600px;width:90%}.lightbox-relate-to-epic .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-relate-to-epic .related-with-selector input{display:none}.lightbox-relate-to-epic .related-with-selector input:checked+label{background:#212121;color:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input:checked+label:hover{background:#212121}.lightbox-relate-to-epic .related-with-selector input+label{background:rgba(193,193,193,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input+label:hover{background:rgba(33,33,33,.3);transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-relate-to-epic fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-relate-to-epic .new-epic-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-relate-to-epic .existing-epic-form,.lightbox-relate-to-epic .new-epic-form{margin-bottom:1rem}.lightbox-relate-to-epic .no-epics-found{padding:1rem 0 0}.lightbox-relate-to-epic .new-epic-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-relate-to-epic .new-epic-options input{display:none}.lightbox-relate-to-epic .new-epic-options input:checked+label{background:#212121;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label{background:#f5f5f5;color:#212121;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label:hover{background:#212121;color:#fff;fill:#fff}.lightbox-relate-to-epic button{width:100%}tg-project-menu{background-position:0 -300px;display:inline-block;min-height:calc(100vh - 40px);min-width:50px;padding:1rem 0;position:relative;text-transform:uppercase;z-index:99}.main-nav a,.main-nav span{display:block}tg-project-menu .menu.menu-fixed{position:fixed;top:1rem}.main-nav,.main-nav a,.main-nav li{position:relative}.main-nav{padding:0;text-align:center}.main-nav a{padding:1rem .7rem}.main-nav a:hover{background:rgba(0,0,0,.2);transition:color .3s linear}.main-nav a:hover svg{fill:#212121;transition:fill .3s linear}.backlog-sprints-menu,.main-nav a:hover .helper{animation:slideLeft .2s ease-in-out both;padding:.4rem 1rem;transition:all .2s;position:absolute;white-space:nowrap}.main-nav a:hover .helper{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:calc(50% - 1rem);z-index:99}.main-nav a:hover .helper::after{background:#212121;height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);width:12px;z-index:98}.main-nav svg{height:1.7rem;width:1.7rem}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .item{font-size:1.2rem}.main-nav .active{color:#000}.main-nav .active svg{opacity:1;stroke:#000}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.backlog-sprints-menu{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:1rem;z-index:99}.backlog-sprints-menu a{color:#fff;padding:.6rem .8rem;text-align:left;text-transform:none}.backlog-sprints-menu a:nth-child(2){padding:1rem .8rem .6rem}.backlog-sprints-menu a:last-child{padding:.6rem .8rem .4rem}.backlog-sprints-menu a:hover{background:0 0}.backlog-sprints-menu::after{background:#212121;height:12px;left:calc(-12px/2);position:absolute;top:calc(1rem - 12px/2);width:12px;z-index:98}.related-tasks,.related-tasks-body .status{position:relative}.related-tasks{margin-bottom:2rem}.related-tasks-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-tasks-header .related-tasks-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-tasks-header .add-button{background:#212121;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-tasks-header .add-button.is-active,.related-tasks-header .add-button:hover{background:#212121}.related-tasks-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-tasks-body{width:100%}.related-tasks-body .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}.related-tasks-body .row:hover .task-settings{opacity:1;transition:all .2s ease-in}.related-tasks-body .row .task-name{-ms-flex:1;flex:1}.related-tasks-body .row .task-settings{-ms-flex-negative:0;flex-shrink:0;width:60px}.related-tasks-body .row .status{-ms-flex-negative:0;flex-shrink:0;width:125px}.related-tasks-body .row .assigned-to{cursor:pointer;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .single-related-task:hover{background:rgba(33,33,33,.05)}.related-tasks-body .single-related-task:hover .icon-drag{opacity:1}.related-tasks-body .single-related-task .task-reorder{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .single-related-task .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#c1c1c1;opacity:0;transition:opacity .1s}.issues-table .title div,.issues-table .votes,.related-tasks-body .task-assignedto.editable,.related-tasks-body .task-settings a:hover,.ticket-detail-settings .assign-issue-button.editable,.ticket-detail-settings .button-delete.editable,.ticket-detail-settings .item-block.editable,.ticket-detail-settings .item-unblock.editable,.ticket-detail-settings .promote-button.editable,.ticket-detail-settings label.editable{cursor:pointer}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .iocaine{background:rgba(33,33,33,.1);border-left:10px solid #212121}.related-tasks-body .task-name{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .task-name span{margin-right:.25rem}.related-tasks-body .task-name input{font-size:1rem;margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .pop-status,.ticket-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;z-index:99;text-align:"center"}.related-tasks-body .task-name.loading span{animation:loading .5s linear,spin 1s linear infinite}.related-tasks-body .status .not-clickable:hover{color:#212121}.related-tasks-body .status .popover{left:0;top:1rem}.related-tasks-body .status .popover a{display:block}.related-tasks-body .status .icon{width:.8rem;height:.8rem;fill:currentColor;margin-left:.2rem}.related-tasks-body .closed,.related-tasks-body .closed:hover{border-left:10px solid #c1c1c1;color:#c1c1c1}.related-tasks-body .closed a,.related-tasks-body .closed svg,.related-tasks-body .closed:hover a,.related-tasks-body .closed:hover svg{fill:#c1c1c1}.related-tasks-body .closed .task-name a,.related-tasks-body .closed:hover .task-name a{color:#c1c1c1;text-decoration:line-through}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .pop-status{font-size:.9rem;background:#212121;color:#fff;display:none;left:40%;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px}.related-tasks-body .pop-status a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#212121;transition:color .3s linear}.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:rgba(255,0,98,.2);border-left:10px solid #ff0062}.related-tasks-body .task-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;opacity:0}.related-tasks-body .task-settings svg{width:1.1rem;height:1.1rem;fill:#757575;margin-right:.5rem;transition:fill .2s ease-in}.related-tasks-body .task-settings svg:hover{fill:#757575}.related-tasks-body .delete-task:hover .icon-edit,.related-tasks-body .edit-task:hover .icon-edit,.related-tasks-body .save-task:hover .icon-edit{fill:#212121}.related-tasks-body .delete-task:hover .icon-save,.related-tasks-body .edit-task:hover .icon-save,.related-tasks-body .save-task:hover .icon-save{fill:#000}.related-tasks-body .delete-task:hover .icon-trash,.related-tasks-body .edit-task:hover .icon-trash,.related-tasks-body .save-task:hover .icon-trash{fill:#ff0062}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{width:.8rem;height:.8rem;fill:#757575;opacity:0;position:absolute;right:.5rem;top:.5rem;transition:opacity .3s linear}.related-tasks-body .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:1.5rem 0 2rem;position:relative}.ticket-header .ticket-title{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;text-transform:uppercase;vertical-align:sub}.ticket-header .detail-status{font-size:.9rem;display:-ms-flexbox;display:flex;margin-left:.25rem;position:relative}.ticket-header .detail-status .icon-arrow-down{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem}.ticket-header .detail-status-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start}.ticket-header .detail-status-inner>span{color:#fff;padding:.15rem .25rem;text-transform:uppercase}.ticket-header .pop-status{font-size:.9rem;background:#212121;color:#fff;display:none;left:0;margin:0;position:absolute;top:1.25rem;width:150px;padding:0;text-transform:none}.ticket-data-container,.ticket-header .pop-status a{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.ticket-header .pop-status a{border-bottom:1px solid #212121;color:#fff;display:block;padding:.5rem 1rem;text-align:left}.ticket-header .pop-status a:last-child{border:0}.ticket-header .pop-status a:hover{color:#212121;transition:color .3s linear}.ticket-header .pop-status a:hover.point{color:#fff}.ticket-header .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.ticket-header .pop-status a:hover{background:rgba(33,33,33,.2)}.ticket-data-container{margin-bottom:1rem}.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .type-data .pop-type{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;left:30px;top:30px;text-align:"left";font-size:.9rem;z-index:99;list-style-type:none}.ticket-data-container .icon{width:.7rem;height:.7rem;color:currentColor;margin-left:.25rem}.ticket-status .priority-data .pop-priority:after,.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;transform:rotate(45deg)}.ticket-status:last-child{margin:0}.ticket-status .level{display:inline-block;margin-right:.5rem;vertical-align:top}.ticket-status .level-name{color:#8e8e8e;float:right;text-transform:lowercase}.ticket-status .clickable:hover{background:#a8a8a8;transition:background .2s ease-in}.ticket-status .type-data{background:#b4b4b4;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .type-data .pop-type{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .type-data .pop-type a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#212121;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#212121;position:absolute;width:0}.ticket-status .severity-data{background:#b4b4b4;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .severity-data .pop-severity{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .severity-data .pop-severity a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#212121;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#212121;position:absolute;width:0}.ticket-status .priority-data{background:#b4b4b4;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .priority-data .pop-priority{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-watch .ticket-watch-button,.ticket-watch svg{margin-right:.25rem}.ticket-status .priority-data .pop-priority a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#212121;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{background:#212121;position:absolute;width:0}.ticket-watch-buttons{margin-bottom:1rem}.ticket-watch .ticket-watch-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.introjs-tooltip p,.single-project .description,.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-watch .ticket-watch-inner{display:-ms-flexbox;display:flex}.ticket-watch svg{position:relative;top:2px}.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-size:.9rem;background:#757575;color:#fff;-ms-flex:1;flex:1;padding:.25rem;text-align:center;text-transform:uppercase;transition:background .25s}.ticket-watch .add-watcher svg,.ticket-watch .ticket-watch-button svg{fill:#fff}.ticket-watch .add-watcher:hover,.ticket-watch .ticket-watch-button:hover{background:#212121}.ticket-watch .add-watcher.is-hover,.ticket-watch .ticket-watch-button.is-hover{background:#ff2400;color:#c1c1c1;transition:background .3s}.ticket-watch .add-watcher.is-hover svg,.ticket-watch .ticket-watch-button.is-hover svg{fill:#ff0062}.ticket-watch .add-watcher.active,.ticket-watch .ticket-watch-button.active{background:#212121}.ticket-watch .add-watcher.active:hover,.ticket-watch .ticket-watch-button.active:hover{background:#ff0062}.ticket-watch .add-watcher.active svg,.ticket-watch .ticket-watch-button.active svg{fill:#fff}.ticket-detail-settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:2rem}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .button-delete,.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock,.ticket-detail-settings .promote-button,.ticket-detail-settings label{background:#757575;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .assign-issue-button+input,.ticket-detail-settings .button-delete+input,.ticket-detail-settings .item-block+input,.ticket-detail-settings .item-unblock+input,.ticket-detail-settings .promote-button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .assign-issue-button:hover,.ticket-detail-settings .button-delete:hover,.ticket-detail-settings .item-block:hover,.ticket-detail-settings .item-unblock:hover,.ticket-detail-settings .promote-button:hover,.ticket-detail-settings label:hover{background:#757575}.ticket-detail-settings .assign-issue-button.button-set,.ticket-detail-settings .assign-issue-button.text-button.button-set:hover,.ticket-detail-settings .button-delete.button-set,.ticket-detail-settings .button-delete.text-button.button-set:hover,.ticket-detail-settings .item-block.button-set,.ticket-detail-settings .item-block.text-button.button-set:hover,.ticket-detail-settings .item-unblock.button-set,.ticket-detail-settings .item-unblock.text-button.button-set:hover,.ticket-detail-settings .promote-button.button-set,.ticket-detail-settings .promote-button.text-button.button-set:hover,.ticket-detail-settings label.button-set,.ticket-detail-settings label.text-button.button-set:hover{background:#9dce0a;border-color:#9dce0a}.ticket-detail-settings .assign-issue-button:hover{background:#9dce0a}.ticket-detail-settings .assign-issue-button.button-set:hover,.ticket-detail-settings .item-unblock{background:#ff0062}.ticket-detail-settings .assign-issue-button.is-active{display:inline-block}.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock{display:none}.ticket-detail-settings .item-block.is-active,.ticket-detail-settings .item-unblock.is-active{display:inline-block}.ticket-detail-settings .item-unblock:hover{background:#ff2400}.ticket-detail-settings .button-delete{background:#ff0062}.ticket-detail-settings .button-delete:hover{background:#ff2400}.ticket-detail-settings svg{fill:#fff;height:100%;stroke:#fff}.ticket-detail-settings .icon-private{margin:0}.ticket-detail-settings a{display:block}.epic-header-container{display:-ms-flexbox;display:flex}.epic-header-container .color-selector{margin-right:.5rem}.epic-header-container tg-detail-header{-ms-flex:1;flex:1;width:100%}.introjs-overlay{background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(193,193,193,.2) 100%);background-color:#c1c1c1}.introjs-helperLayer{border:1px solid rgba(33,33,33,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(33,33,33,.2)}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-bullets ul li a.active{background:#212121}.introjs-button{background-color:#000;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#212121;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .single-project-intro{display:-ms-flexbox;display:flex;margin-bottom:2rem}.single-project .project-logo{margin-right:1rem;width:6rem}.single-project .project-logo img{width:100%}.single-project .single-project-title-wrapper{-ms-flex:1;flex:1}.single-project .intro-options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem}.single-project .intro-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.single-project .intro-title .icon-private{fill:#757575;height:24px;margin-left:.25rem;margin-top:1rem;width:24px}.single-project h1{color:#000;display:inline-block;line-height:1.2;margin-bottom:0;vertical-align:middle}.single-project .private{width:1.1rem;height:1.1rem}.single-project .track-buttons-container{display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{font-size:.9rem;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#000}.single-project .track-container .list-itemtype-track-likers.active .icon,.single-project .track-container .list-itemtype-track-watchers.active .icon{fill:currentcolor}.single-project .track-container .icon{fill:#757575}.single-project .description{font-size:1rem;margin:0}.single-project .project-data{display:-ms-flexbox;display:flex}.single-project .title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-ms-flex:1;flex:1;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .looking-for-people img{width:100%}.single-project .looking-for-people h3{font-size:.9rem}.single-project .looking-for-people .is-empty{margin-bottom:.5rem}.single-project .looking-for-people p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.single-project .looking-for-people .contact-team{margin-bottom:1rem}.single-project .involved-data{-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-team{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-team li{-ms-flex-preferred-size:24%;flex-basis:24%;margin-right:.14rem;position:relative}.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-team a{display:block}.single-project .involved-team img{border-radius:.2rem;width:100%}.single-project .involved-team .icon-badge{width:1.2rem;height:1.2rem;background:rgba(0,0,0,.5);bottom:5%;fill:#212121;padding:.1rem;position:absolute;right:5%;stroke:#212121}.issues-options{-ms-flex-align:center;align-items:center;background-color:#c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table{display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#a6a6a6;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .row.is-blocked{background:#ff66a1}.issues-table .row.is-blocked .blocked-text{color:#ff2400;margin-right:.5rem}.issues-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575}.issues-table .title:hover{background:0 0}.issues-table .title .votes{color:#757575}.issues-table .table-main{font-size:.9rem;border-bottom:1px solid #b7b7b7}.issues-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-ms-flex-preferred-size:85px;flex-basis:85px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:85px}.issues-table .votes{color:#757575;-ms-flex-preferred-size:75px;flex-basis:75px;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes:hover{color:#212121;transition:all .2s linear}.issues-table .votes:hover svg{fill:#212121;transition:all .2s linear}.issues-table .votes.inactive{color:#757575}.issues-table .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.issues-table .icon-arrow-down,.issues-table .icon-arrow-up{width:.7rem;height:.7rem;fill:#757575;margin-left:.25rem;vertical-align:middle}.issues-table .is-voted{color:#212121;transition:all .2s linear}.issues-table .is-voted svg{fill:#212121;transition:all .2s linear}.issues-table .is-voted:hover{color:#ff0062}.issues-table .is-voted:hover svg{fill:#ff0062;transform:rotate(180deg)}.issues-table .pop-status:after,.table-team .popover:after{transform:rotate(45deg);content:''}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .issue-field,.issues-table .modified-field{-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field .icon,.issues-table .issue-field .icon,.issues-table .modified-field .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem;vertical-align:middle}.issues-table .assigned-field{-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{width:.75rem;height:.75rem;opacity:0;position:absolute;right:0;top:.75rem;transition:opacity .3s linear}.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#212121;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99;text-align:"center"}.kanban-table-body .taskboard-column .kanban-column-intro,.search-result-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.issues-table .pop-status a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#212121;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1280px){.issues-table .level-field,.issues-table .modified-field{display:none}}.issues-table .issue-status{display:inline-block}.kanban-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table.zoom-0 .task-colum-name,.kanban-table.zoom-0 .taskboard-column{max-width:148px}.kanban-table.zoom-0 .task-colum-name span{padding-right:1rem}.kanban-table .vfold tg-card{display:none}.kanban-table .vfold.task-colum-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold.task-colum-name .option:not(.hunfold),.kanban-table .vfold.task-colum-name .title,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.taskboard-column{-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;min-height:2.4rem;position:relative}.kanban-table-header .kanban-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute;width:100%}.kanban-table-header .options{display:-ms-flexbox;display:flex}.kanban-table-header .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:296px;padding:.5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;width:100%}.kanban-table-header .task-colum-name .title .counter{font-size:.75rem;line-height:1.6;margin:0 .5rem}.kanban-table-header .task-colum-name .title .name{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.kanban-table-header .task-colum-name .option{margin-right:.3rem}.kanban-table-header .task-colum-name .icon{fill:#757575;height:1rem;transition:color .2s linear;width:1rem}.kanban-table-header .task-colum-name .icon:hover{fill:#000}.kanban-table-body{font-size:1rem;display:-ms-flexbox;display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-body .taskboard-column{-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:296px;overflow-y:auto;widows:296px;width:296px}.kanban-table-body .taskboard-column:last-child{margin-right:0}.kanban-table-body .taskboard-column .kanban-column-intro{font-size:.9rem;color:#757575;margin:1rem 2rem}.kanban-table-body .taskboard-column .kanban-column-intro.active{color:#212121}.kanban-table-body .taskboard-column .kanban-wip-limit{background:#ff2400;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-body .kanban-task-selected.card:not(.gu-transit-multi){box-shadow:0 0 0 1px #212121,2px 2px 4px #a8a8a8}.kanban-table-inner{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.card-transit-multi{background:#bcbcbc;border:1px dashed #adadad;display:none;opacity:1;padding:1rem}.search-filter,.search-result-table,.table-team .hero .row{border-top:1px solid #c1c1c1}.card-transit-multi .fake-img,.card-transit-multi .fake-text{background:#adadad}.card-transit-multi .fake-us{display:-ms-flexbox;display:flex;margin-bottom:1rem}.card-transit-multi .fake-us:last-child{margin-bottom:0}.card-transit-multi .column{padding-left:.5rem;width:100%}.card-transit-multi .fake-img{-ms-flex-preferred-size:48px;flex-basis:48px;-ms-flex-negative:0;flex-shrink:0;height:48px;width:48px}.card-transit-multi .fake-text{height:1rem;margin-bottom:1rem;width:80%}.card-transit-multi .fake-text:last-child{margin-bottom:0;width:40%}.card.gu-transit-multi .card-transit-multi{display:block}.card.gu-transit-multi .card-inner{display:none}.search-filter{display:-ms-flexbox;display:flex;margin-bottom:0;z-index:9}.search-filter a{background:#fff;color:#757575;display:inline-block;margin-right:1rem;padding:1rem 1.25rem}.search-filter .name,.search-filter a:hover .name{padding-left:5px}.search-filter a:hover{transition:color .3s linear}.search-filter a:hover .icon{fill:currentColor}.search-filter a.active{border-left:1px solid #c1c1c1;border-right:1px solid #c1c1c1;color:#212121;position:relative;top:1px}.search-filter a.active .icon{fill:#212121}.search-filter .icon{fill:currentColor;margin-right:.4rem}.search-in input{background:#212121;color:#fff}.search-in input::-webkit-input-placeholder{color:#757575}.search-in input::-moz-placeholder{color:#757575}.search-in input:-moz-placeholder{color:#757575}.search-in input:-ms-input-placeholder{color:#757575}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{fill:#757575}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row .ref{margin-right:.5rem}.search-result-table .row .user-stories{overflow:hidden;padding-right:1rem;width:100%}.search-result-table .row .points,.search-result-table .row .sprint,.search-result-table .row .status{-ms-flex:0 0 150px;flex:0 0 150px;-ms-flex-positive:0;flex-grow:0;max-width:150px;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;padding:0 1rem}.search-result-table .row-selected{background:#999;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.single-filter .name img,.tag img,.wiki-nav .add-button{vertical-align:middle}.search-result-table .user-story-name span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon{font-size:1rem;color:#757575}.search-result-table .user-story-name .icon:hover{color:#212121;transition:color .3s linear}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #c1c1c1}.search-result-table .points,.search-result-table .sprint,.search-result-table .status{position:relative}.search-result-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters li{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575;text-transform:uppercase}.table-team .attribute,.table-team .attribute .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.team-filters li:last-child{border-bottom:0}.team-filters li .icon{fill:#212121;opacity:0;transition:opacity .3s linear}.team-filters a{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.team-filters a.active,.team-filters a:hover{color:#000;transition:color .3s linear}.team-filters a.active .icon,.team-filters a:hover .icon{fill:currentColor;opacity:1}.team-filters .active{opacity:1;transition:opacity .3s linear}.table-team .row{padding:.5rem}.table-team .username{-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:6;flex:6;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{width:1.75rem;height:1.75rem;fill:#757575}.table-team .attribute .points{font-size:1.6rem;color:#212121}.table-team .attribute .top{fill:#212121;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{font-size:.9rem;color:#ff0062}.table-team .leave-project .icon{width:.8rem;height:.8rem;fill:currentColor;margin-right:.2rem}.table-team .leave-project:hover{color:#ff2400}.table-team .leave-project:hover .icon{color:currentColor;transition:fill .3s linear}.table-team .team-header{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:0}.table-team .hero{width:100%}.table-team .hero .row{border-bottom:1px solid #c1c1c1;margin:1rem 0;padding:1.5rem 1rem}.table-team .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.table-team .avatar img{-ms-flex-preferred-size:66px;flex-basis:66px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:66px}.table-team .avatar .avatar-data{margin-left:1rem}.table-team .avatar .avatar-data span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.table-team .popover{font-size:.9rem;background:#212121;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99;text-align:"center"}.table-team .popover a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#212121;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#212121;bottom:-5px;height:15px;left:50%;position:absolute;width:15px}.table-team .icon-badge{fill:#212121;position:relative;stroke:#212121;top:.15rem}.policy-table .policy-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #757575}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#000;transition:background .3s linear}.policy-table label{background:#757575;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#212121;cursor:pointer;transition:background .3s linear}.project-settings-table .project-settings-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.project-settings-table .project-settings-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #757575}.project-settings-table .project-settings-table-homepage,.project-settings-table .project-settings-table-project{padding:1rem}.project-settings-table .project-settings-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-settings-table .project-settings-table-homepage{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile{max-width:780px}.user-profile form{display:-ms-flexbox;display:flex}.user-profile fieldset{margin-bottom:1rem}.user-profile label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.user-profile .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.user-profile .project-details-image .image,.user-profile .submit-button{width:100%}.user-profile .change-image{display:block}.user-profile .image-container{position:relative;margin-bottom:.5rem}.user-profile .loading-overlay{display:none}.user-profile .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;border:0;transform-origin:center center}.user-profile .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.user-profile .use-default-image:hover{color:#ff2400}.user-profile .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.user-profile form{display:block}}.user-profile .actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:.5rem}.user-profile .delete-account,.user-profile .download-profile{font-size:.9rem;display:block;-ms-flex:1;flex:1;margin-top:.5rem}.user-profile .delete-account{text-align:right}.wiki-nav{padding:0;width:240px}.wiki-nav .title{font-size:1.6rem;padding:2rem 1rem 0 2rem}.wiki-nav .add-button{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:1rem 1rem 1rem 2rem;text-transform:uppercase}.wiki-nav .add-button:hover svg{background:#212121}.wiki-nav .add-button svg{width:1.25rem;height:1.25rem;background:#757575;border-radius:2px;fill:#fff;margin-right:.5rem;padding:.25rem;transition:background .2s linear}.wiki-nav .wiki-link-container{margin:0}.wiki-nav .wiki-link-container.wiki-all-links{border-top:1px solid #757575}.wiki-nav input[type=text]{background:#c1c1c1;color:#212121;margin:1rem 1rem 1rem 2rem;width:80%}.wiki-nav input[type=text]::-webkit-input-placeholder{color:#757575}.wiki-nav input[type=text]::-moz-placeholder{color:#757575}.wiki-nav input[type=text]:-moz-placeholder{color:#757575}.wiki-nav input[type=text]:-ms-input-placeholder{color:#757575}.wiki-nav .loading{padding:1rem;text-align:center}.wiki-link{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-left:2rem;padding-right:1rem;position:relative}.wiki-link:hover .remove-wiki-page{cursor:pointer;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link:hover .dragger{cursor:move;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link.gu-mirror{border-bottom:0}.wiki-link.fixed-link{font-size:1.2rem;text-transform:uppercase}.wiki-link.is-sortable{cursor:move}.wiki-link .link-title{cursor:pointer;display:block;-ms-flex-positive:1;flex-grow:1;padding:1rem 0}.wiki-link .dragger{fill:#757575;left:-1rem;opacity:0;position:absolute;top:1rem}.wiki-link .dragger svg{width:.7rem;height:.7rem}.wiki-link .remove-wiki-page{opacity:0}.wiki-link .remove-wiki-page:hover .icon{fill:#ff2400}.wiki-pages-table{display:-ms-flexbox;display:flex}.wiki-pages-table .row{padding:.5rem}.wiki-pages-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.wiki-pages-table .table-main{font-size:.9rem}.wiki-pages-table .title-field{-ms-flex-preferred-size:180px;flex-basis:180px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.wiki-pages-table .created-field,.wiki-pages-table .modified-field{-ms-flex-preferred-size:10vw;flex-basis:10vw;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.wiki-pages-table .editions-field{-ms-flex-preferred-size:80px;flex-basis:80px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;text-align:center}.wiki-pages-table .creator-field,.wiki-pages-table .last-modifier-field{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:200px;flex-basis:200px}.wiki-pages-table .creator-field .user-avatar,.wiki-pages-table .last-modifier-field .user-avatar{-ms-flex-positive:0;flex-grow:0}.wiki-pages-table .creator-field .user-avatar img,.wiki-pages-table .last-modifier-field .user-avatar img{height:2rem}.wiki-pages-table .creator-field .user-full-name,.wiki-pages-table .last-modifier-field .user-full-name{-ms-flex-positive:1;flex-grow:1;padding:.5rem}.wiki-summary{-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.wiki-summary.summary{background:#f5f5f5;color:#757575}.wiki-summary div{display:-ms-flexbox;display:flex;margin-right:1.25rem}.wiki-summary .wiki-user-modification{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary .avatar{margin-right:.5rem;width:2.25rem}.wiki-summary img{height:100%;width:100%}.wiki-summary .username{font-size:1.2rem;white-space:nowrap}.wiki-summary .remove{fill:#757575;margin-left:auto;transition:fill .1s linear}.wiki-summary .remove:hover{cursor:pointer;fill:#ff0062}.wiki-summary .remove svg{width:1.5rem;height:1.5rem}.attachment-gallery{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.attachment-gallery .single-attachment{margin-bottom:.5rem;margin-right:.5rem;max-width:200px}.attachment-gallery .single-attachment:hover .icon-delete{opacity:1}.attachment-gallery .single-attachment .attachment-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.attachment-gallery .attachment-image{display:inline-block}.attachment-gallery img{height:150px;margin-bottom:.2rem;width:200px}.attachment-gallery img:hover{filter:saturate(150%) hue-rotate(60deg);transition:all .3s cubic-bezier(.01,.7,1,1)}.attachment-gallery.deprecated img{opacity:.5}.attachment-gallery.deprecated .attachment-name{color:#757575}.attachment-gallery .attachment-data{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.attachment-gallery .icon-delete{margin-left:auto;opacity:0;transition:opacity .2s ease-in;transition-delay:.1s}.attachment-gallery .icon-delete svg{fill:#ff0062}.attachment-gallery .icon-delete:hover svg{color:#ff2400}.attachment-list .attachment-comments span,.attachment-list .editable-attachment-comment span,.attachment-list .editable-attachment-deprecated span,.attachment-list .single-attachment.deprecated,.attachment-list .single-attachment.deprecated .attachment-name a{color:#757575}.attachment-gallery .loading-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:150px;-ms-flex-pack:center;justify-content:center;margin:0 .5rem .5rem 0;width:200px}.attachment-gallery .loading-spinner{margin:0 auto;max-height:3rem;max-width:3rem}.attachment-list .single-attachment{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;position:relative}.attachment-list .single-attachment:hover .settings{opacity:1;transition:opacity .2s ease-in}.attachment-list .attachment-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding-right:1rem}.attachment-list .attachment-comments,.attachment-list .editable-attachment-comment{-ms-flex:2;flex:2;-ms-flex-preferred-size:50%;flex-basis:50%;margin-right:.5rem}.attachment-list .attachment-size{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.attachment-list .attachment-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:10%;flex-basis:10%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:distribute;justify-content:space-around;margin-left:auto}.attachment-list .attachment-settings .settings{opacity:0}.attachments .gu-mirror,.card-owner:hover .card-owner-actions{opacity:1}.attachment-list .attachment-settings .editable-settings{display:block;opacity:1}.attachment-list .attachment-settings svg{fill:#757575;pointer-events:none}.attachment-list .attachment-settings .icon-edit:hover,.attachment-list .attachment-settings .icon-save:hover{fill:#000}.attachment-list .attachment-settings .icon-close:hover,.attachment-list .attachment-settings .icon-trash:hover{fill:#ff2400}.attachment-list .attachment-settings .icon-drag{cursor:move}.attachment-list .editable-attachment-deprecated{display:-ms-flexbox;display:flex;padding-left:1rem}.attachment-list .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.attachment-list .editable-attachment-deprecated input:checked+span{color:#212121}.attachment-list .percentage{background:rgba(0,0,0,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.attachments{margin-bottom:4rem}.attachments .gu-transit{background:#c1c1c1;height:40px}.attachments .gu-transit *{display:none}.attachments .gu-mirror form{background:#999;box-shadow:1px 1px 10px rgba(0,0,0,.1);transition:background .2s ease-in}.attachments-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.attachments-header .attachments-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1rem;color:#212121;line-height:36px;padding:0 1rem}.attachments-header .options{display:-ms-flexbox;display:flex}.attachments-header label{cursor:pointer;margin-left:.25rem}.attachments-header label.add-attachment-button{background:#757575;border:0;display:inline-block;padding:.5rem;transition:background .25s}.attachments-header label.add-attachment-button:hover{background:#212121}.attachments-header label svg{fill:#fff;height:1.2rem;margin-bottom:-.2rem;width:1.2rem}.attachments-header button{background:0 0;margin-right:.2rem}.attachments-header button.is-active svg,.attachments-header button:hover svg{fill:#212121}.attachments-header button svg{fill:#757575;height:1.6rem;width:1.6rem}.attachments-header .size-info{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;padding-left:1rem}.attachments-empty,.single-attachment .attachment-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.attachments-header input{display:none}.attachments-empty{font-size:1.2rem;border:3px dashed #c1c1c1;color:#757575;margin-top:.5rem;padding:1rem;text-align:center}.single-attachment{font-size:.9rem;background:rgba(255,255,255,.9)}.single-attachment .attachment-name{padding-right:1rem}.single-attachment .attachment-name svg{fill:#757575;height:.9rem;margin-right:.25rem;width:.9rem}.single-attachment .attachment-size{color:#757575}.more-attachments{font-size:.9rem;border-bottom:1px solid #757575;display:block;padding:1rem 0 1rem 1rem}.more-attachments .more-attachments-num{color:#000;margin-left:.5rem}.more-attachments:hover{background:#999;transition:background .2s ease-in}.attachment-preview .attachment-preview-container svg{width:3rem;height:3rem;fill:#757575}.attachment-preview .attachment-preview-container svg:hover{fill:#212121;transition:fill .3s linear}.attachment-preview .previous{left:3rem;position:absolute;top:calc(50% - 3rem)}.attachment-preview .next{position:absolute;right:3rem;top:calc(50% - 3rem)}.attachment-preview img{max-height:80vh;max-width:80vw}.assignable-member-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:.25rem 0}.assigned-members-option .assignable-member-single{background:#fff;border-bottom:1px solid #c1c1c1;cursor:pointer}.assignable-member-single:hover{background:rgba(33,33,33,.05)}.assignable-member-single .assignable-member-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.5rem;max-height:3rem;max-width:3rem}.assignable-member-single .assignable-member-name{-ms-flex:1;flex:1}.assigned-to-container{width:600px}.assignable-member-list{margin-top:1rem}.assignable-member-list .assigned-member{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.05);border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.assignable-member-list .unassign-epic{cursor:pointer;margin-right:1rem}.assignable-member-list .icon{fill:#ff0062;transition:fill .2s}.assignable-member-list .icon:hover{cursor:pointer;fill:#ff2400}.belong-to-epic-pill-wrapper{display:inline-block;position:relative}.belong-to-epic-pill-wrapper:hover .belong-to-epic-pill-data{display:block}.belong-to-epics-list{margin-bottom:.5rem}.belong-to-epics-list svg{position:relative;top:.1rem}.belong-to-epics-list.unique,.belong-to-epics-list.unique li{display:inline-block}.belong-to-epics-list.unique li svg{top:.2rem}.belong-to-epic-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;padding-top:.25rem}.belong-to-epic-text-wrapper .remove-epic-relationship{display:inline-block;line-height:.5rem;margin-left:.5rem}.belong-to-epic-text-wrapper:hover .remove-epic-relationship svg{visibility:visible}.belong-to-epic-label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;background:#212121;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.detail-title-wrapper,.edit-title-wrapper{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.belong-to-epic-pill{background-color:#f5f5f5;border-radius:50%;display:inline-block;height:.7rem;margin:0 .1rem;position:relative;width:.7rem}.range-slider{-webkit-appearance:none;display:block;margin:7px 0;width:200px}.range-slider:focus{outline:0}.range-slider:focus::-webkit-slider-runnable-track{background:#050505}.range-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(33,33,33,.3)}.range-slider:focus::-moz-range-thumb{box-shadow:0 0 0 4px rgba(33,33,33,.3)}.range-slider:focus::-ms-fill-lower{background:#c1c1c1}.range-slider:focus::-ms-fill-upper{background:#c6c6c6}.range-slider::-webkit-slider-runnable-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#c1c1c1;border:0 solid transparent;border-radius:1px}.range-slider::-webkit-slider-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#212121;cursor:pointer;box-shadow:0 0 0 2px rgba(33,33,33,.3);transition:box-shadow .2s;-webkit-appearance:none;margin-top:-5.5px}.range-slider::-moz-range-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#c1c1c1;border:0 solid transparent;border-radius:1px}.range-slider::-moz-range-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#212121;cursor:pointer;box-shadow:0 0 0 2px rgba(33,33,33,.3);transition:box-shadow .2s}.range-slider::-ms-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:0 0;border-color:transparent;border-width:14px 0;color:transparent}.range-slider::-ms-fill-lower{background:#bcbcbc;border:0 solid transparent;border-radius:2px}.range-slider::-ms-fill-upper{background:#c1c1c1;border:0 solid transparent;border-radius:2px}.range-slider::-ms-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#212121;cursor:pointer;box-shadow:0 0 0 2px rgba(33,33,33,.3);transition:box-shadow .2s}.card{box-shadow:2px 2px 4px #a8a8a8;cursor:move;display:block;margin:0 .6rem .6rem;outline:0;overflow:hidden;transition:box-shadow .2s ease-in}.card .loading-extra.loading{padding:.2rem;text-align:center}.card:hover{box-shadow:3px 3px 6px #a8a8a8}.card-inner{background:#fff;border-radius:.25rem}.card-inner.zoom-0 .card-title,.card-inner.zoom-1 .card-title{-ms-flex:1;flex:1;margin:0;padding:.25rem}.card-inner.zoom-1 .card-owner-info{-ms-flex-align:start;align-items:flex-start}.card-inner.card-blocked{background:#ff0062}.card-inner.card-blocked .card-owner-actions,.card-inner.card-blocked .card-unfold:hover{background:rgba(255,0,98,.9)}.card-inner.card-blocked .card-estimation,.card-inner.card-blocked .card-owner-name,.card-inner.card-blocked .card-title a,.card-inner.card-blocked .statistic{color:#fff}.card-inner.card-blocked .card-task a.blocked-task{color:#ff2400}.card-inner.card-blocked .card-owner-actions a:hover,.card-inner.card-blocked .statistic.active,.card-inner.card-blocked.zoom-0 .card-title,.card-inner.card-blocked.zoom-1 .card-title{color:#fff}.card-inner.card-blocked svg{fill:#fff}.card-owner-actions:hover svg,.card-statistics .statistic.active svg{fill:currentColor}.card-tags{display:-ms-flexbox;display:flex}.card-tags .card-tag{display:block;-ms-flex:1;flex:1;height:.5rem}.card-owner{position:relative}.card-owner .card-owner-info{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.card-owner .card-owner-info.multiple .card-owner-avatar img{margin-right:.45rem}.card-owner .card-owner-avatar{line-height:0;position:relative}.card-owner .is-iocaine{filter:hue-rotate(265deg) saturate(3)}.card-owner img{-ms-flex-negative:0;flex-shrink:0;height:2.5rem;margin-right:.5rem;width:2.5rem}.card-owner .card-owner-name{color:#757575}.card-owner-actions{background:rgba(255,255,255,.9);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;left:0;opacity:0;position:absolute;top:0;transition:all .2s;width:100%}.card-owner-actions:hover{color:#212121}.card-owner-actions .card-actions{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:0 0 0 .5rem}.card-owner-actions .card-delete:hover{color:#ff0062}.card-owner-actions .icon{width:1.2rem;height:1.2rem;display:inline-block;margin-right:.25rem;padding:0}.card-owner-actions a{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;padding:.6rem .5rem}.card-title{font-size:1rem;line-height:1.25;margin-bottom:.25rem;padding:1rem 1rem 0}.card-title span{padding-right:.25rem}.card-data{color:#757575;display:-ms-flexbox;display:flex;font-size:14px;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem .5rem}.card-data .card-status-tag{font-size:.75rem;height:.1rem;line-height:.1rem;padding:0 .5em 0 0}.card-data .card-estimation.not-estimated{font-size:.8125rem}.card-statistics{font-size:.9rem;color:#b5b5b5;display:-ms-flexbox;display:flex;margin-left:auto}.card-statistics .statistic{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;margin-left:.5rem}.card-statistics .statistic.active{color:#212121}.card-statistics .statistic.card-iocaine{cursor:help}.card-statistics .statistic.card-votes{margin-left:.2rem}.card-statistics .statistic.card-due-date{margin-left:.1rem}.card-statistics .icon{width:.75rem;height:.75rem;fill:#b5b5b5;margin-right:.2rem}.card-statistics .icon-iocaine{fill:#9c27b0}.card-completion{margin:0 1rem .5rem;position:relative}.card-completion:hover .card-tooltip{display:block}.card-completion .card-completion-bar{background:#c1c1c1;height:.4rem;width:100%}.card-completion .card-completion-percentage{background:#212121;cursor:pointer;height:.4rem;left:0;position:absolute;top:0}.card-completion .card-tooltip{background:#212121;border-radius:5px;color:#fff;display:none;font-size:14px;left:calc(25% - 50px);padding:.25rem 1rem;position:absolute;text-align:center;top:-2.25rem;width:100px}.card-completion .card-tooltip::after{background:#000;content:'';height:10px;left:50%;position:absolute;top:70%;transform:rotate(45deg);width:10px}.color-selector .tag-color.empty-color:after,.color-selector .tag-color.empty-color:before{content:"";top:0;height:48px;width:2px;background:#ff8282;position:absolute}.card-unfold{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0;outline:0;padding:.25rem}.card-unfold:hover{background:linear-gradient(to bottom,#fff,#fcfcfc)}.card-unfold svg{width:2rem;height:.3rem;fill:#c1c1c1}.card-tasks{border-top:1px solid #c1c1c1;margin:.5rem 0 0;padding:0}.card-task{font-size:.75rem;border-bottom:1px solid #c1c1c1}.card-task a{color:#757575;display:block;overflow:hidden;padding:.5rem .75rem;text-overflow:ellipsis;transition:color .2s;white-space:nowrap}.card-task a.blocked-task{color:#ff0062}.card-task a.closed-task{color:#757575;text-decoration:line-through}.card-task a:hover{color:#000}.detail-header-container.blocked,.detail-header-container.blocked .detail-number,.detail-header-container.blocked .detail-subject,.detail-header-container.blocked a{color:#fff}.card-slideshow{position:relative}.card-slideshow:hover .slideshow-left,.card-slideshow:hover .slideshow-right{background:rgba(255,255,255,.2);padding:.25rem;transition:background .2s}.card-slideshow .slideshow-icon{cursor:pointer;position:absolute;top:35%}.card-slideshow .slideshow-icon:hover{background:rgba(33,33,33,.5);transition:background .2s}.card-slideshow svg{width:1.2rem;height:1.2rem;transition:fill .2s}.card-slideshow .slideshow-left,.card-slideshow .slideshow-right{background:0 0;padding:.25rem}.card-slideshow .slideshow-left{left:0}.card-slideshow .slideshow-right{right:0}.card-slideshow img{width:100%}.card-slideshow-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:120px;-ms-flex-pack:center;justify-content:center;overflow:hidden}.card-slideshow-wrapper .loading-spinner{min-height:3rem;min-width:3rem}.color-selector{position:relative}.color-selector .tag-color{cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;border:1px solid #757575;border-radius:0;margin:0;transition:background .3s ease-out}.color-selector .tag-color:nth-child(7n){margin-right:0}.color-selector .tag-color.disabled{cursor:auto}.color-selector .tag-color.empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.color-selector .tag-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector .tag-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.color-selector-dropdown{background:#212121;left:0;padding:1rem;position:absolute;top:2.25rem;width:332px;z-index:99}.color-selector-dropdown-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;margin-bottom:0}.color-selector-dropdown-list .color-selector-option{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0}.color-selector-dropdown-list .color-selector-option:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0;background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.color-selector-dropdown-list .empty-color:after,.color-selector-dropdown-list .empty-color:before{width:2px;height:48px;background:#ff8282;position:absolute;top:0;content:""}.color-selector-dropdown-list .empty-color:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector-dropdown-list .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.custom-color-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.custom-color-selector .custom-color-input{margin:0;width:100%}.custom-color-selector .display-custom-color-wrapper{background:#f5f5f5;margin-right:.5rem}.custom-color-selector .display-custom-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;-ms-flex-negative:0;flex-shrink:0;margin:0}.custom-color-selector .display-custom-color:nth-child(7n){margin-right:0}.custom-color-selector .display-custom-color.empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative;cursor:default}.custom-color-selector .display-custom-color.empty-color:after{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(-45deg);position:absolute;top:0;left:0;transform-origin:top}.custom-color-selector .display-custom-color.empty-color:before{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(45deg);position:absolute;top:0;right:0;transform-origin:top}.detail-header-container{background:#f5f5f5;-ms-flex:1;flex:1;padding:1rem;position:relative}.detail-header-container.blocked,.detail-title-wrapper.blocked{background:#ff2400;transition:all .2s linear}.detail-header-container:hover .detail-edit{opacity:1}.detail-header-container.blocked svg{fill:#fff}.detail-header-container .belong-to-epics-wrapper,.detail-header-container .block-desc-container,.detail-header-container .issue-external-reference,.detail-header-container .item-generated-us,.detail-header-container .item-origin-issue,.detail-header-container .task-belongs-to{font-size:.9rem;margin-top:.5rem}.detail-header-container .relate-to-epic-button{color:#757575;cursor:pointer;display:inline-block}.detail-header-container .relate-to-epic-button:hover{color:#212121}.detail-header-container .relate-to-epic-button .icon-epics{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.detail-header-container .relate-to-epic-button .relate-to-epic-text{font-size:.9rem}.detail-header-container .issue-external-reference a,.detail-header-container .item-generated-us a,.detail-header-container .item-origin-issue a,.detail-header-container .task-belongs-to a{cursor:pointer;padding:0 .2rem}.detail-header-container .issue-external-reference .item-ref,.detail-header-container .item-generated-us .item-ref,.detail-header-container .item-origin-issue .item-ref,.detail-header-container .task-belongs-to .item-ref{padding:0 .2rem}.detail-title-wrapper{font-size:1.6rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;max-width:95%;position:relative;transition:all .2s linear}.detail-title-wrapper .detail-title-text{line-height:normal;margin:0}.detail-title-wrapper .detail-number{color:#757575;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.detail-title-wrapper .detail-subject{color:#757575;-ms-flex-positive:1;flex-grow:1}.detail-title-wrapper .detail-edit{cursor:pointer;margin-left:.75rem;opacity:0;transition:opacity .2s}.detail-title-wrapper .detail-edit svg,.detail-title-wrapper .due-date-icon svg{width:1.3rem;height:1.3rem}.detail-title-wrapper.readonly .due-date-icon{margin-left:2.7rem}.edit-title-wrapper{font-size:1.6rem;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-input{background:#fff;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-button{background:0 0;display:inline;transition:fill .2s}.due-date-icon,.issue-nav a{display:inline-block}.edit-title-wrapper .edit-title-button:hover{fill:#000}.edit-title-wrapper .save-title-button{margin-left:1rem}.block-desc-container .block-description-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-right:.5rem}.issue-nav{position:absolute;right:1rem;top:1rem}.issue-nav svg{width:1.2rem;height:1.2rem;fill:currentColor}.due-date-button,[disabled].due-date-button{background:#757575;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.due-date-button.closed,.due-date-button.text-button.closed:hover,[disabled].due-date-button.closed,[disabled].due-date-button.text-button.closed:hover{background:#B8B8B8;border-color:#B8B8B8}.due-date-button.due-set,.due-date-button.text-button.due-set:hover,[disabled].due-date-button.due-set,[disabled].due-date-button.text-button.due-set:hover{background:#9dce0a;border-color:#9dce0a}.due-date-button.due-soon,.due-date-button.text-button.due-soon:hover,[disabled].due-date-button.due-soon,[disabled].due-date-button.text-button.due-soon:hover{background:#fcaf3e;border-color:#fcaf3e}.due-date-button.past-due,.due-date-button.text-button.past-due:hover,[disabled].due-date-button.past-due,[disabled].due-date-button.text-button.past-due:hover{background:#ff0062;border-color:#ff0062}.due-date-button:hover,[disabled].due-date-button:hover{background:#757575}.due-date-button.editable,[disabled].due-date-button.editable{cursor:pointer}.due-date-button.text-button,[disabled].due-date-button.text-button{color:#fff;margin:0;padding:.5rem}.due-date-button.text-button.not-set:hover,[disabled].due-date-button.text-button.not-set:hover{color:#fff}.due-date-button.text-button.not-set,[disabled].due-date-button.text-button.not-set{color:#757575}.due-date-icon{margin:0 .25rem;position:relative}.due-date-icon svg{fill:#757575;transition:fill .2s ease-in}.due-date-icon.closed svg{fill:#B8B8B8}.due-date-icon.due-set svg{fill:#9dce0a}.due-date-icon.due-soon svg{fill:#fcaf3e}.due-date-icon.past-due svg{fill:#ff0062}.backlog-table-body .user-story-name .due-date-icon,.related-tasks .task-name .due-date-icon{top:.1rem}.issues-table .subject .due-date-icon{top:.25rem}.card-statistics .due-date-icon{margin:.1rem 0 0}.card-statistics .due-date-icon svg{height:.9rem;width:.9rem}.due-date-button-wrapper{display:-ms-flexbox;display:flex;position:relative}.date-picker-container{overflow:visible}.date-picker-popover{background:#fff;border:1px solid #757575;left:0;overflow:visible;position:absolute;top:56px;width:auto}.date-picker-popover .pika-single.is-bound{border:0;box-shadow:none}.date-picker-popover-footer{padding:.2rem .5rem;text-align:right}.date-picker-popover-footer svg{fill:#757575;height:1rem;width:1rem}.date-picker-popover-footer a:hover svg{fill:#ff2400}tg-filter{background-color:#f5f5f5;display:block;left:0;min-height:100%;padding:1rem 0;position:absolute;top:0;transform:translateX(-260px);transition-duration:.5s;width:260px;z-index:1}tg-filter .filters-applied{padding:0 1rem 1rem}tg-filter .filters-applied .single-filter:hover{color:currentColor;cursor:default;opacity:.5;transition:none}tg-filter form,tg-filter h1{padding:0 1rem}tg-filter input{background:#212121;color:#fff;padding-right:2rem}tg-filter input::-webkit-input-placeholder{color:#757575}tg-filter input::-moz-placeholder{color:#757575}tg-filter input:-moz-placeholder{color:#757575}tg-filter input:-ms-input-placeholder{color:#757575}tg-filter .search-action{position:absolute;right:.7rem;top:.7rem}tg-filter.open{box-shadow:1px 1px 5px rgba(0,0,0,.2);transform:translateX(0)}.filter-list{overflow-y:auto;padding:1rem}.filters-step-cat{margin-top:2rem}.filters-cats ul{margin-bottom:0}.filters-cats li{border-bottom:1px solid #757575;text-transform:uppercase}.filters-cats li.selected{border-bottom:0}.filters-cats .custom-filters .title{color:#000}.filters-cats .filters-cat-single{-ms-flex-align:center;align-items:center;color:#212121;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 1.5rem;transition:color .2s ease-in}.filters-cats .filters-cat-single.selected,.filters-cats .filters-cat-single:hover{background-color:#a8a8a8;color:#212121;transition:background-color .2s ease-in}.filters-cats .filters-cat-single.selected .icon,.filters-cats .filters-cat-single:hover .icon{opacity:1;transition:opacity .2s ease-in}.filters-cats .icon-arrow-down{fill:currentColor;float:right;height:.9rem;opacity:0;transition:opacity .2s ease-in;width:.9rem}.single-filter{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-align:center;align-items:center;background:#b4b4b4;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;opacity:.5;padding-right:.5rem;position:relative}.live-announcement-inner .title,.live-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.single-filter::after{clear:both;content:"";display:block}.single-filter:hover{background:#adadad;opacity:1;transition:opacity .2s linear}.single-filter.active,.single-filter.selected{color:#212121;opacity:1;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;border-color:transparent;border-style:solid;border-width:0 0 0 3px;display:block;width:100%}.profile-bar .not-full-name,.profile-bar h1,.wysiwyg p{word-wrap:break-word}.single-filter .number{background:#8e8e8e;position:absolute;right:0;top:0}.single-filter .remove-filter{cursor:pointer;display:block}.single-filter .remove-filter svg{fill:#757575;transition:fill .2s linear}.single-filter .remove-filter:hover svg{fill:#ff2400}.live-announcement{-ms-flex-line-pack:center;align-content:center;background:#107a8a;display:-ms-flexbox;display:flex;height:0;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.live-announcement .live-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.live-announcement.visible{height:146px;pointer-events:auto;transition-delay:0s;width:100%}.live-announcement.visible .live-announcement-inner{opacity:1;transition:opacity .5s .5s}.live-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.live-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;margin-right:1rem}.live-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.live-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.live-announcement-inner .warning,.live-announcement-inner .warning a{color:#0b525c}.live-announcement-inner .close{display:block;position:absolute;right:0;top:1rem}.live-announcement-inner .close svg{width:2rem;height:2rem;fill:#138ea1;pointer-events:none;transition:fill .2s}.live-announcement-inner .close svg:hover{fill:#0b525c}.lightbox-move-to-sprint .move-to-sprint-container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:550px;width:100%}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header{margin:0 auto;max-width:400px;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header ul{display:inline-block;margin:.5em auto 2.5em;width:auto}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header li{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header .check{margin-left:4em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls p{margin-bottom:2.5em;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .sprint-select{margin-top:.5em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .move-button{width:100%}.move-to-sprint-button{color:#fff}.move-to-sprint-button:not(.disabled){cursor:pointer}.move-to-sprint-button:not(.disabled):hover{color:#212121}.move-to-sprint-button.disabled:hover,.search-list .choice.selected .info{color:#fff}.move-to-sprint-button.disabled{opacity:.5}.search-list .show-closed{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;float:right;font-size:.9em}.add-tag-button .add-tag-text,.tag{font-size:.9rem}.search-list .show-closed svg{height:1em;margin-right:.25em;width:1em}.search-list ul{background:#f5f5f5;border:1px solid #757575;height:200px;margin:.25em 0 0;max-height:200px;overflow-y:auto}.search-list .choice{cursor:pointer;padding:.25em .5em}.search-list .choice.selected{background:#9dce0a;color:#fff}.search-list .choice[disabled]{color:#B8B8B8;cursor:not-allowed}.search-list .choice[disabled] .info{color:#B8B8B8}.search-list .choice ng-include{display:-ms-flexbox;display:flex;width:100%}.search-list .choice ng-include .title{-ms-flex-positive:1;flex-grow:1;text-align:left}.search-list .choice ng-include .info{color:#757575;text-align:right}.search-list .choice .title span{margin-right:.5em}.add-tag-input{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative;width:250px}.add-tag-input input{border-color:#757575;padding:6px;width:14rem}.add-tag-input .save{cursor:pointer;display:inline-block;fill:#212121;margin:.5rem 0 0 .5rem;transition:.2s linear}.add-tag-input .save:hover{fill:#000}.add-tag-input .tags-dropdown{font-size:.9rem;background:#fff;border:1px solid #757575;border-top:0;box-shadow:2px 2px 3px rgba(0,0,0,.2);left:0;max-height:20vh;min-height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:2.25rem;width:85%;z-index:99}.add-tag-input .tags-dropdown-option{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.tags-block,.terms-announcement{align-content:center;display:-ms-flexbox}.add-tag-input .tags-dropdown-color{height:1rem;width:1rem}.add-tag-input li.selected,.add-tag-input li:hover{background:#a1a1a1;cursor:pointer;transition:.2s;transition-delay:.1s}.tags-block{-ms-flex-line-pack:center;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.add-tag-button,.tag{display:inline-block}.add-tag-button{color:#757575;cursor:pointer}.add-tag-button:hover,.tag{color:#212121}.add-tag-button .icon-add{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-radius:0 5px 5px 0;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.terms-announcement-inner .title,.terms-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.tag .icon-close{width:.7rem;height:.7rem;cursor:pointer;fill:#ff0062;margin-left:.25rem}.tag .loading-spinner{height:1rem;width:1rem}.terms-announcement{-ms-flex-line-pack:center;background:#107a8a;display:flex;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.terms-announcement .terms-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.terms-announcement.visible{min-height:146px;pointer-events:auto;transition-delay:0s;width:100%}.terms-announcement.visible .terms-announcement-inner{opacity:1;transition:opacity .5s .5s}.terms-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.terms-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;height:auto;margin-right:1rem}.terms-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.terms-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.terms-announcement-inner .warning,.terms-announcement-inner .warning a{color:#0b525c}.tribe-linked.is-active .delete-link,.tribe-linked.is-active .gig-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.terms-announcement-inner .close{display:block;position:absolute;right:.5rem;top:1rem}.terms-announcement-inner .close svg{width:2rem;height:2rem;fill:#f5f5f5;pointer-events:none;transition:fill .2s}.terms-announcement-inner .close svg:hover{fill:#0b525c}.terms-announcement-inner a{color:#f5f5f5}.loader .tip-color-1 p{color:#ae4fb0}.loader .tip-color-1 svg{fill:#ae4fb0;stroke:#ae4fb0}.loader .tip-color-2 p{color:#4e88df}.loader .tip-color-2 svg{fill:#4e88df;stroke:#4e88df}.loader .tip-color-3 p{color:#6360d6}.loader .tip-color-3 svg{fill:#6360d6;stroke:#6360d6}.loader .tip-color-4 p{color:#47b3a6}.loader .tip-color-4 svg{fill:#47b3a6;stroke:#47b3a6}.loader .tip-color-5 p{color:#d76969}.loader .tip-color-5 svg{fill:#d76969;stroke:#d76969}.tip{text-align:center;width:auto}.tip .translate-cloak{display:none}.tip p{display:-ms-flexbox;display:flex;font-size:1.1em;-ms-flex-pack:center;justify-content:center;margin-bottom:1em;max-width:440px}.tip p.title{color:#000;font-size:1em;margin-bottom:1.75em}.tip p.range{width:1px}.tip svg{height:32px;margin:0 .3em;width:32px}.tip svg.icon-upvote{height:30px;width:24px}.tip .range-slider{display:initial;width:100px}.tip .arrows svg{height:40px;margin:0}.tip .arrows svg.icon-arrow-left{margin-left:7px}.tip .arrows svg.icon-arrow-right{margin-left:-7px}.tribe-linked{margin-left:auto;overflow:hidden;position:absolute;right:0;top:0;z-index:99}.tribe-linked .tribe-linked-inner{padding:.5rem;transition:.2s}.tribe-linked .tribe-linked-inner:hover{background:#fff;cursor:pointer}.tribe-linked .tribe-linked-inner .close,.tribe-linked .tribe-linked-inner .delete-link,.tribe-linked .tribe-linked-inner .gig-title,.tribe-linked .tribe-linked-inner .synchronize-link,.tribe-linked .tribe-linked-inner .title{display:none;opacity:0}.tribe-linked .tribe-logo{height:2rem;width:2rem}.tribe-linked.is-active{animation-duration:1s;animation-name:slideTribeInner;background:#fff;box-shadow:1px 1px 5px rgba(33,33,33,.2);overflow:hidden}.epic-row .epic-statuses,.epics-table-dropdown{box-shadow:3px 3px 2px rgba(0,0,0,.1);z-index:99}.tribe-linked.is-active .tribe-linked-inner{height:100%;min-width:300px}.tribe-linked.is-active .tribe-linked-inner .close,.tribe-linked.is-active .tribe-linked-inner .delete-link,.tribe-linked.is-active .tribe-linked-inner .gig-title,.tribe-linked.is-active .tribe-linked-inner .synchronize-link,.tribe-linked.is-active .tribe-linked-inner .title{animation-duration:1.25s;animation-name:fadeInFromNone;display:block;opacity:1}.tribe-linked.is-active .tribe-linked-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.tribe-linked.is-active .tribe-logo{margin-right:.5rem;vertical-align:text-bottom}.tribe-linked.is-active svg{width:1rem;height:1rem;fill:#ff0062;transition:all .2s}.tribe-linked.is-active svg:hover{fill:#ff2400}.tribe-linked.is-active .title{margin-bottom:0}.tribe-linked.is-active .gig-title{color:#107a8a;margin-bottom:.5rem}.tribe-linked.is-active .delete-link{font-size:.9rem;color:#000;display:block;margin-bottom:1rem}.tribe-linked.is-active .synchronize-link{display:block;padding:.5rem}.tribe-linked.is-active .close{-ms-flex-item-align:start;align-self:flex-start;margin-left:1rem}@keyframes slideTribeInner{0%{max-height:60px;width:100px}20%{max-height:60px;width:300px}100%{max-height:225px}}@keyframes fadeInFromNone{0%{display:none;opacity:0}80%{display:block;opacity:0}100%{display:block;opacity:1}}tg-wysiwyg-code-lightbox textarea{height:350px}.wysiwyg{line-height:1.4rem;overflow:auto;padding:1rem}.wysiwyg h1,.wysiwyg h2,.wysiwyg h3{padding-bottom:.5rem}.wysiwyg h1{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:2.25em;line-height:1.2;margin-bottom:1rem;margin-top:1rem;text-transform:uppercase}.wysiwyg h2,.wysiwyg h3,.wysiwyg h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-top:1rem;margin-bottom:1rem}.wysiwyg h2{font-size:1.6rem;line-height:1.225}.wysiwyg h3{font-size:1.2rem}.wysiwyg ol,.wysiwyg ul{line-height:1.5;list-style-position:outside;margin-bottom:1rem;margin-top:0;padding-left:2em}.wysiwyg ol ol,.wysiwyg ol ul,.wysiwyg ul ol,.wysiwyg ul ul{padding-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#000;cursor:pointer}.wysiwyg a:hover{color:#212121}.wysiwyg code,.wysiwyg pre:not([class*=language-]){font-size:.9rem;background:#272822;color:#c1c1c1;direction:ltr;font-family:'courier new',monospace;overflow:auto;unicode-bidi:embed}.wysiwyg p{margin-bottom:1rem}.wysiwyg .codehilite{overflow:auto}.wysiwyg blockquote p{margin:0}.wysiwyg pre:not([class*=language-]){line-height:1.4rem;margin-bottom:.5rem;padding:1rem;white-space:pre-wrap}.wysiwyg code{padding:.2rem}.wysiwyg table{border:1px solid #757575;margin-bottom:1rem}.medium-editor-mention-panel ul,tg-wysiwyg div[contenteditable=true] :last-child{margin-bottom:0}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#757575 1px solid}.wysiwyg th{border-right:#757575 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#757575 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.wysiwyg textarea{background:#fff;max-height:none}.wysiwyg hr{border:1px solid #c1c1c1}.medium-editor-mention-panel{background-color:#fff;border:1px solid #757575;position:absolute}.medium-editor-mention-panel:empty{border:0}.medium-editor-mention-panel li{border-top:1px solid #757575;cursor:pointer;padding:2px 5px}.medium-editor-mention-panel li:first-child{border-top:0}.medium-editor-mention-panel li.active,.medium-editor-mention-panel li:hover{background-color:#000;color:#fff}.code-language-search,.code-language-selector{font-size:.75rem;background-color:#fff;position:absolute}tg-wysiwyg{display:-ms-flexbox;display:flex;margin-bottom:2rem}tg-wysiwyg pre{cursor:pointer}tg-wysiwyg .outdated{color:#ff2400}tg-wysiwyg .tools{padding-left:1rem}tg-wysiwyg .tools:not(.visible){opacity:0;pointer-events:none}tg-wysiwyg .tools:not(.visible) a{cursor:default}tg-wysiwyg .tools a{display:block;margin-bottom:.5rem}tg-wysiwyg .tools svg{fill:#757575}tg-wysiwyg .editor{width:100%}tg-wysiwyg .mode-editor span{color:#757575;cursor:pointer;margin-right:.5rem}tg-wysiwyg .markdown-editor-placeholder,tg-wysiwyg .medium-editor-placeholder{color:#757575;overflow:visible;padding-left:1rem}tg-wysiwyg .markdown-editor-placeholder::after,tg-wysiwyg .medium-editor-placeholder::after{color:#757575;font-style:normal}tg-wysiwyg .markdown:not(.empty) p{margin-bottom:0;white-space:pre-wrap}tg-wysiwyg .read-mode{cursor:pointer}tg-wysiwyg .medium{border:1px solid transparent}.code-language-search,.code-language-selector,tg-wysiwyg .edit-mode .markdown,tg-wysiwyg .edit-mode .medium{border:1px solid #757575}tg-wysiwyg .edit-mode .medium-editor-element{min-height:10rem}.code-language-selector{cursor:pointer;padding:.2rem .5rem 0}.code-language-search ul{cursor:pointer;margin-bottom:0;max-height:20vh;overflow-y:scroll}.epic-row .sprint,.epics-table-header .sprint,.story-row .sprint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.code-language-search li{padding:.2rem .5rem}.medium-editor-toolbar li .medium-editor-button-active{color:#212121}.medium-editor-toolbar svg{fill:#fff}.medium-editor-toolbar button:hover svg{fill:#212121}.discover-header{background:url(../images/discover.png) bottom left repeat-x #c1c1c1;margin-bottom:2.5rem;padding:1rem 1rem 2rem;text-align:center}.discover-header .discover-header-inner{max-width:1200px;min-width:768px;margin:0 auto}.discover-header .title{font-size:3rem;margin-bottom:0}.discover-header .project-number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#000}.discover-results-header .title,.featured-projects .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.discover-header form{margin:0 30%;position:relative}@media (max-width:767px){.discover-header .discover-header-inner{width:90%;min-width:0}.discover-header form{margin:0 .5rem}}.discover-header input[type=text]{background:#fff;border:0;padding:1rem;width:100%}.discover-header input[type=text]:focus{outline-color:#212121}.discover-header input[type=text]:-webkit-autofill{background:rgba(0,0,0,.5)}.discover-header .search-button{width:1.5rem;height:1.5rem;fill:#757575;position:absolute;right:1rem;top:1rem;transition:fill .2s}.discover-header .search-button:hover{cursor:pointer;fill:#000}.discover-results-header .discover-results-header-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.discover-results-header svg{width:1.2rem;height:1.2rem;fill:#757575;margin-right:.25rem}.discover-results-header .title{font-size:1.6rem;text-transform:uppercase}.discover-results-header h2{display:inline-block}.filter-discover-search .discover-search-filter{margin-right:1rem}.filter-discover-search .discover-search-filter.active{color:#000}.filter-discover-search .discover-search-filter.active svg{fill:#000}.filter-discover-search svg{width:.8rem;height:.8rem}.discover-search-subfilter{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative}.discover-search-subfilter:after,.discover-search-subfilter:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.discover-search-subfilter:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.discover-search-subfilter:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.discover-search-subfilter.most-liked-subfilter::after,.discover-search-subfilter.most-liked-subfilter::before{left:85%}.discover-search-subfilter.most-active-subfilter::after,.discover-search-subfilter.most-active-subfilter::before{left:95%}.discover-search-subfilter.ng-enter{animation:dropdownFade .2s}.discover-search-subfilter .results{font-size:.9rem;color:#ff0062;display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .results:hover{color:#ff2400}.discover-search-subfilter .filter-list{display:-ms-flexbox;display:flex;margin:0 0 0 auto}.discover-search-subfilter .filter-list a{display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .filter-list a:hover{background:#757575;color:currentColor}.discover-search-subfilter .filter-list a.active{background:#212121;color:#fff}.featured-projects{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.featured-projects{width:90%;min-width:0}}.featured-projects .title{font-size:1.6rem;color:#212121;text-align:center}.featured-projects-inner{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.featured-project{background:#fff;border:1px solid #c1c1c1;margin:.5rem;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:23%;flex-basis:23%;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:23%}.featured-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.featured-project .project-tag{-ms-flex:1;flex:1}.featured-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.featured-project .project-card-description{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575}.featured-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.featured-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.featured-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.featured-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.featured-project .statistic{font-size:.9rem;color:#757575;display:inline-block;margin-right:.5rem}.featured-project .statistic.active{color:#000}.featured-project .statistic.active svg{fill:currentColor}.featured-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.featured-project .project-card-header .icon-badge{fill:#212121}.featured-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.featured-project .project-card-logo img{width:100%}.featured-project .project-card-name{line-height:1.25}.featured-project .project-card-name a{font-size:1.2rem;color:#000}.featured-project .project-card-name a:hover{color:#212121}@media (max-width:767px){.featured-project{-ms-flex-preferred-size:45%;flex-basis:45%}}@media (max-width:480px){.featured-project{-ms-flex-preferred-size:100%;flex-basis:100%}}.highlighted{margin:1rem auto 4rem;max-width:1200px;min-width:768px;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}@media (max-width:767px){.highlighted{width:90%;min-width:0;-ms-flex-direction:column;flex-direction:column}.highlighted tg-most-active{margin-top:4rem}}.highlighted tg-most-active,.highlighted tg-most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.highlighted tg-most-liked{margin-right:8%}@media (max-width:767px){.highlighted tg-most-liked{margin-right:0}}.highlighted .most-active,.highlighted .most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column}.highlighted .header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.highlighted .header svg{width:.8rem;height:.8rem;fill:#757575;margin-left:.5rem}.highlighted .title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.highlighted .title-wrapper svg{width:1.25rem;height:1.25rem;fill:#757575;margin-right:.5rem}.highlighted .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.6rem;color:#212121;display:inline-block;margin:0}.highlighted .highlighted-projects-container{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.highlighted .loading-container{margin-top:calc(50% - 1rem)}.highlighted .loading-spinner{display:block;margin:2rem auto;max-height:3rem;max-width:3rem}.highlighted .view-more-projects{margin-top:auto;width:100%}.highlighted .empty-highlighted-project{border:2px dashed #c1c1c1;-ms-flex:1;flex:1;padding:2rem;text-align:center}.highlighted .empty-highlighted-project svg{width:2rem;height:2rem;display:block;fill:#757575;margin:1rem auto}.highlighted .empty-highlighted-project span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block}.filter-highlighted{position:relative}.filter-highlighted .current-filter{padding:1rem}.filter-highlighted .current-filter span{margin-left:.2rem;position:relative;top:.2rem}.filter-highlighted .current-filter:hover svg{fill:currentColor}.filter-highlighted .filter-list{background:#000;position:absolute;right:0;top:1.5rem}.filter-highlighted .filter-list.ng-enter{animation:dropdownFade .2s ease-in}.filter-highlighted .filter-list.ng-leave{animation:dropdownFade .2s ease-in;animation-direction:reverse}.filter-highlighted li{font-size:.9rem;color:#fff;cursor:pointer;min-width:8rem;padding:.25rem .5rem}.filter-highlighted li:hover{background:rgba(33,33,33,.4)}.highlighted-project{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:9rem;flex-basis:9rem;min-height:9rem;padding:1.5rem 0}.highlighted-project:nth-last-child(-n+2){border-bottom:0}.highlighted-project .project-logo{-ms-flex-preferred-size:3rem;flex-basis:3rem;height:auto;margin-right:1rem;width:3rem}.highlighted-project .project-logo img{width:100%}.highlighted-project .project-data-container{-ms-flex:1;flex:1}.highlighted-project .single-project-header{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.highlighted-project .project-title{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.epic-row .epic-pill,.epic-row .epic-statuses{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.highlighted-project .project-title a{color:#000}.highlighted-project .project-title a:hover{color:#212121}.highlighted-project .project-description{font-size:.9rem;color:#757575;margin-bottom:0}.highlighted-project .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:end;justify-content:flex-end}.highlighted-project .project-statistics svg{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem}.highlighted-project .statistic{font-size:.9rem;color:#757575;display:inline-block;margin-right:.5rem}.highlighted-project .statistic.active{color:#000}.highlighted-project .statistic.active svg{fill:#000}.discover-search .discover-header form{margin:0 8rem;position:relative}.discover-search .discover-header .search-button{left:1rem;right:auto}.discover-search .discover-header .searchbox input{padding-left:3.5rem;padding-right:23rem}.discover-search .searchbox-filters{position:absolute;right:1rem;top:.7rem;width:auto}.discover-search .searchbox-filters input{display:none}.discover-search .searchbox-filters label{border-radius:4px;color:#757575;cursor:pointer;display:inline-block;padding:.4rem .75rem;transition:all .2s;transition-delay:.2s}.discover-search .searchbox-filters label.active{background:#212121;color:#fff}.discover-search .searchbox-filters label:hover{background:#c1c1c1;color:#757575}.discover-results{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.discover-results{width:90%;min-width:0}}.discover-results .discover-results-inner .spin{margin-top:4rem}.discover-results .list-itemtype-project{border-bottom:1px solid #757575;display:-ms-flexbox;display:flex;padding:1rem 0}.discover-results .list-itemtype-project:last-child{border-bottom:0}.discover-results .list-itemtype-project-left{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;width:100%}.discover-results .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.discover-results .list-itemtype-project-data{-ms-flex:1;flex:1;vertical-align:middle}.discover-results .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-pack:end;justify-content:flex-end}.discover-results .project-statistics svg{width:.7rem;height:.7rem;fill:#757575;margin-right:.2rem}.discover-results .statistic{font-size:.9rem;color:#757575;display:inline-block;margin-right:.5rem}.discover-results .statistic svg{fill:#757575;stroke:#757575}.discover-results .statistic.active{color:#000}.discover-results .statistic.active svg{fill:#000}.discover-results .more-results{display:block;margin:0 20rem;transition:inherit}.discover-results div[tg-loading] img{display:block;margin:0 auto}.lightbox-create-epic{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1}.lightbox-create-epic .create-epic-container{max-width:700px;width:90%}.lightbox-create-epic .subject-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.lightbox-create-epic .subject-container .subject{padding-left:1rem;width:100%}.lightbox-create-epic .attachments{margin-bottom:0}.lightbox-create-epic .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-create-epic .settings fieldset{margin-right:.5rem}.lightbox-create-epic .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-create-epic .settings fieldset:last-child{margin:0}.lightbox-create-epic .settings input{display:none}.lightbox-create-epic .settings input:checked+label{background:#000;border:1px solid #000;color:#fff}.lightbox-create-epic .settings input:checked+.blocked{background:#ff2400;border:1px solid #ff2400;color:#fff}.lightbox-create-epic label{font-size:.9rem;background:#f5f5f5;border:1px solid #757575;color:#757575;cursor:pointer;display:block;padding:.5rem 3rem;text-transform:none;transition:all .2s ease-in}.lightbox-create-epic label:hover{background:#212121;border:1px solid #000;color:#fff}.lightbox-create-epic label.blocked:hover{background:#ff0062;border:1px solid #ff2400}.lightbox-create-epic .create-epic-button{display:block;width:100%}.epic-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #c1c1c1;cursor:move;display:-ms-flexbox;display:flex;transition:background .2s}.epic-row .assigned,.epic-row .project{padding:.5rem}.epic-row .name,.epic-row .progress,.epic-row .sprint,.epic-row .status,.epic-row .vote{padding:1rem .5rem}.epic-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .assigned,.epic-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .sprint,.epic-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epic-row .name,.epic-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epic-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epic-row .sprint{width:90%}.epic-row:hover{background:rgba(33,33,33,.05)}.epic-row:hover .icon-drag{opacity:1}.epic-row.not-empty{cursor:pointer}.epic-row.is-blocked{background:rgba(255,0,98,.5)}.epic-row.is-closed .name a{color:#9b9b9b;text-decoration:line-through}.epic-row.unfold .name .icon{transform:rotate(0)}.epic-row .name .icon{transform:rotate(180deg);transition:all .2s}.epic-row .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#c1c1c1;opacity:0;transition:opacity .1s}.epic-row .epic-pill{font-size:.75rem;background:#212121;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.epic-row .status{cursor:pointer;position:relative}.epic-row .status button{background:0 0}.epic-row .icon-arrow-down{width:.7rem;height:.7rem;fill:#757575;margin-left:.1rem}.epic-row .progress-bar,.epic-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.epic-row .progress-bar{background:#f5f5f5;max-width:40vw;padding-right:1rem;width:100%}.epic-row .progress-status{background:#212121;width:10vw}.epic-row .vote{color:#757575}.epic-row .vote.is-voter{color:#212121;fill:#212121}.epic-row .assigned img{width:40px}.epic-row .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.epic-row .is-unassigned{color:#757575}.epic-row .epic-statuses{font-size:.9rem;background:rgba(33,33,33,.9);border-bottom:1px solid #212121;color:#fff;left:0;list-style-type:none;margin:0;position:absolute;text-align:left;top:2.5rem;width:200px}.epic-row .epic-statuses:last-child{border:0}.epic-row .epic-statuses li{padding:.5rem}.epic-row .epic-statuses li:hover{color:#212121;transition:color .3s linear}.empty-epics{text-align:center}.empty-epics a{color:#000;display:block;margin-bottom:2rem}.epics-table{margin-top:2rem}.epics-table .loading{margin:2% auto;width:3rem}.epics-table .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.epics-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575;display:-ms-flexbox;display:flex;padding:.5rem;position:relative}.epics-table-header .name,.epics-table-header .progress,.epics-table-header .sprint,.epics-table-header .status,.epics-table-header .vote{padding:1rem .5rem}.epics-table-header .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epics-table-header .assigned,.epics-table-header .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center;padding:1rem .5rem}.epics-table-header .sprint,.epics-table-header .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epics-table-header .name,.epics-table-header .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epics-table-header .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epics-table-header .sprint{width:90%}.epics-table-options-wrapper{bottom:1rem;position:absolute;right:.5rem}.epics-table-option-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0}.epics-table-option-button .icon{width:.7rem;height:.7rem}.epics-table-dropdown{background:#fff;border-bottom:1px solid rgba(0,0,0,.1);border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);padding:.5rem;position:absolute;right:0;top:1.3rem;width:250px}.epics-table-dropdown.ng-hide-remove{animation:dropdownFade .2s}.epics-table-dropdown.ng-hide-add{animation:dropdownFade .2s reverse}.epics-table-dropdown .fieldset{font-size:.9rem;border-bottom:1px solid #c1c1c1;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.epics-table-dropdown .fieldset:last-child{border:0}.story-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;margin-left:4rem;transition:background .2s}.story-row .assigned,.story-row .project{padding:.5rem}.story-row .name,.story-row .progress,.story-row .sprint,.story-row .status,.story-row .vote{padding:1rem .5rem}.story-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center;color:#757575}.story-row .assigned,.story-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .sprint,.story-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.story-row .name,.story-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.story-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.story-row .sprint{width:90%}.story-row:hover{background:rgba(33,33,33,.05)}.story-row.is-blocked{background:rgba(255,0,98,.5)}.story-row.is-closed .name{color:#757575;text-decoration:line-through}.story-row .name{-ms-flex-preferred-size:17.5vw;flex-basis:17.5vw}.story-row .name a{cursor:pointer}.story-row .progress-bar,.story-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.story-row .progress-bar{background:#f5f5f5;max-width:40vw;width:100%}.story-row .progress-status{background:#212121;width:10vw}.story-row .vote.is-voter{color:#212121;fill:#212121}.story-row .project{cursor:pointer}.story-row .assigned img,.story-row .project img{width:40px}.story-row .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.lightbox-create-related-user-stories .lightbox-create-related-user-stories-wrapper{max-width:600px;width:90%}.lightbox-create-related-user-stories .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-create-related-user-stories .related-with-selector input{display:none}.lightbox-create-related-user-stories .related-with-selector input:checked+label{background:#212121;color:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input:checked+label:hover{background:#212121}.lightbox-create-related-user-stories .related-with-selector input+label{background:rgba(193,193,193,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input+label:hover{background:rgba(33,33,33,.3);transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-create-related-user-stories fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-create-related-user-stories .new-user-story-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-create-related-user-stories .existing-user-story-form,.lightbox-create-related-user-stories .new-user-story-form{margin-bottom:1rem}.lightbox-create-related-user-stories .no-stories-found{padding:1rem 0 0}.lightbox-create-related-user-stories .new-user-story-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-create-related-user-stories .new-user-story-options input{display:none}.lightbox-create-related-user-stories .new-user-story-options input:checked+label{background:#212121;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label{background:#f5f5f5;color:#212121;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label:hover{background:#212121;color:#fff;fill:#fff}.lightbox-create-related-user-stories button{width:100%}.related-userstories{margin-bottom:2rem;position:relative}.related-userstories-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-userstories-header .related-userstories-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-userstories-header .add-button{background:#212121;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-userstories-header .add-button.is-active,.related-userstories-header .add-button:hover{background:#212121}.related-userstories-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-userstories-body{width:100%}tg-related-userstory-row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}tg-related-userstory-row.sortable{cursor:move}tg-related-userstory-row.sortable:hover{background:rgba(33,33,33,.05)}tg-related-userstory-row.sortable:hover .userstory-settings{opacity:1;transition:all .2s ease-in}tg-related-userstory-row.sortable:hover .icon-drag{opacity:1}tg-related-userstory-row.sortable .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#c1c1c1;opacity:0;transition:opacity .1s}tg-related-userstory-row .status{-ms-flex-negative:0;flex-shrink:0;position:relative;width:125px}tg-related-userstory-row .assigned-to-column{-ms-flex-negative:0;flex-shrink:0;width:150px}tg-related-userstory-row .assigned-to-column img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .project{cursor:pointer;-ms-flex-preferred-size:100px;flex-basis:100px}tg-related-userstory-row .project img{width:40px}tg-related-userstory-row .userstory-name{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;margin-right:1rem}tg-related-userstory-row .userstory-name a{cursor:pointer}tg-related-userstory-row .userstory-name span{display:inline-block;margin-left:.25rem}tg-related-userstory-row .closed{border-left:10px solid #c1c1c1;color:#c1c1c1}tg-related-userstory-row .closed a,tg-related-userstory-row .closed svg{fill:#c1c1c1}tg-related-userstory-row .closed .userstory-name a{color:#c1c1c1;text-decoration:line-through}tg-related-userstory-row .blocked{background:rgba(255,0,98,.2);border-left:10px solid #ff0062}tg-related-userstory-row .userstory-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;opacity:0;width:60px}tg-related-userstory-row .userstory-settings svg{width:1.1rem;height:1.1rem;fill:#757575;margin-right:.5rem;transition:fill .2s ease-in}tg-related-userstory-row .userstory-settings svg:hover{fill:#757575}tg-related-userstory-row .userstory-settings a:hover{cursor:pointer}tg-related-userstory-row .delete-userstory:hover .icon-trash{fill:#ff0062}tg-related-userstory-row .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}tg-related-userstory-row .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .avatar figcaption{margin-left:.5rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:4rem;margin:0 auto;width:4rem}.external-app-wrapper svg{width:4rem;height:4rem}.comment .comment-main,.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-ms-flexbox;display:flex}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper .app-card a,.external-app-wrapper .user-card a{font-size:1rem;display:block}.external-app-wrapper .app-card .app-image{-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-ms-flex:1;flex:1}.external-app-wrapper .app-card p{font-size:1rem}.external-app-wrapper .user-card{background:#F0EFD1;border:1px solid #000;padding:1rem}.external-app-wrapper .user-card .user-image{-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .button-green{display:block}.external-app-wrapper .cancel{font-size:.9rem;display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.comments{clear:both}.comments tg-wysiwyg{margin-top:1.5rem}.comments .read-mode{border:1px solid #757575;height:55px}.activity,.comment .comment-wrapper,.comment .deleted-comment-wrapper,.entry .entry-wrapper{border-bottom:1px solid #c1c1c1}.comments .read-mode .markdown-editor-placeholder,.comments .read-mode .medium-editor-placeholder{height:55px}.comments .add-comment{margin-top:1rem}.comments .add-comment textarea{height:3rem}.comments .add-comment .edit,.comments .add-comment .preview-icon{position:absolute;right:1rem}.comments .save-comment-wrapper{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.comments .save-comment{margin-top:1rem;padding:.5rem 4rem}.comment{display:block}.comment .comment-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.comment .comment-wrapper:hover .comment-option{opacity:1}.comment .comment-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.comment .comment-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:1rem}.comment .comment-creator{color:#000;margin-right:.5rem}.comment .comment-date{font-size:.9rem;color:#757575}.comment .comment-edited{font-size:.9rem;background:#c1c1c1;margin:0 .5rem;padding:.25rem}.comment .comment-edited .separator{margin:0 .25rem}.comment .comment-edited a{color:#000;fill:#000}.comment .comment-edited svg{width:.75rem;height:.75rem;margin:0 0 0 .25rem}.comment .comment-options .icon-close,.comment .comment-options .icon-edit{fill:#757575;margin-right:.5rem}.comment .comment-options{-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;margin-left:1.5rem}.comment .comment-options .comment-option{cursor:pointer;opacity:0}.comment .comment-options .icon-edit:hover{fill:#757575}.comment .comment-options .icon-close:hover{fill:#ff2400}.comment .comment-options .icon-trash{fill:#ff0062}.comment .comment-options .icon-trash:hover{fill:#ff2400}.comment .deleted-comment-wrapper{padding:1rem 0;width:100%}.comment .deleted-comment-main{font-size:.75rem;color:#757575;display:-ms-flexbox;display:flex;width:100%}.comment .toggle-deleted-comment{color:#000;fill:#000;margin:0 1rem;transition:none}.comment .toggle-deleted-comment .icon-arrow-down,.comment .toggle-deleted-comment .icon-arrow-up{width:.8rem;height:.8rem;margin-left:.25rem}.comment .restore-comment{margin-left:auto;transition:all .2s}.comment .restore-comment:hover{color:#000;fill:#000}.comment .restore-comment .icon-reload{width:.8rem;height:.8rem;margin-right:.25rem}.comment .deleted-comment-comment{margin-top:1rem}.comment-text{max-width:80rem}.comment-text.wysiwyg{margin-bottom:0;padding:0}.lightbox-display-historic{display:none}.lightbox-display-historic .history-container{max-width:800px;width:90%}.lightbox-display-historic .history-wrapper{max-height:600px;overflow-x:hidden;overflow-y:auto;padding:2rem}.entry{display:block}.entry .entry-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.entry .entry-avatar{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:50px}.entry .entry-main{-ms-flex:1;flex:1;max-width:calc(100% - 100px)}.entry .entry-data{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.entry .entry-creator{color:#000;margin-right:.5rem}.entry .entry-date{font-size:.9rem;color:#757575}.entry .display-full-entry{width:1.25rem;height:1.25rem;cursor:pointer;fill:#000;margin-left:auto;transform:rotate(0);transition:transform .2s}.entry .display-full-entry.inactive{transform:rotate(180deg)}.entry .entry-text{margin-bottom:0}.entry .entry-text.ellipsed{max-height:3rem;overflow:hidden}.entry .entry-text.blurry{position:relative}.entry .entry-text.blurry::after{background-image:linear-gradient(to top,#fff,transparent);content:'';height:100%;left:0;position:absolute;top:0;width:100%}.history-tabs .order-comments{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:auto;transition:none}.history-tabs .icon-arrow-down,.history-tabs .icon-arrow-up{width:.75rem;height:.75rem}.activity-diff .key{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#c1c1c1;margin-right:.5rem;padding:.25rem}.add-member-suggest .add-member-suggest-name,.home-project .project-card-description,.home-wrapper .title-bar,.invite-members-form .invite-members-single-help,.projects-empty p,.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.activity-diff .diff{line-height:1.6}.activity-diff .icon-arrow-right{width:.75rem;height:.75rem;fill:#757575;margin:0 .5rem}.activity-diff .diff-status-wrapper p{display:inline-block}.activity-diff .diff-status-wrapper ins{background:rgba(84,84,84,.3);text-decoration:underline}.activity-diff .diff-status-wrapper del{background:rgba(255,0,98,.3)}.activity-diff .diff-color-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.activity-diff .diff-color-wrapper .diff{display:inline-block;height:1.2rem;width:1.2rem}.activity{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.activity .activity-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.activity .activity-data{margin-bottom:1rem}.activity .activity-creator{color:#000;margin-right:.5rem}.activity .activity-date{color:#757575}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #c1c1c1;cursor:pointer;transition:background .2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(33,33,33,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single>a,.working-on .duty-single>a{-ms-flex-align:center;align-items:center;border-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.watching .duty-single>a.blocked,.working-on .duty-single>a.blocked{background:rgba(255,0,98,.2);color:#ff2400}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper{display:-ms-flexbox;display:flex}@media (max-width:767px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .duty-summary{-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .dashboard-container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@media (max-width:1280px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:767px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .watching-container,.home-wrapper .working-on-container{-ms-flex:1;flex:1;padding-left:.5rem;padding-right:.5rem}.home-wrapper .working-on-container{margin-right:1rem}.home-wrapper .project-list{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.2rem;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0 0 .5rem;padding:.5rem 1rem}.home-project{background:#fff;border:1px solid #c1c1c1;margin:.5rem .5rem 1rem;cursor:pointer;transition:all .2s}.home-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.home-project .project-tag{-ms-flex:1;flex:1}.home-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-project .project-card-description{font-size:.9rem;color:#757575}.home-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.home-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.home-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.home-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.home-project .statistic{font-size:.9rem;color:#757575;display:inline-block;margin-right:.5rem}.home-project .statistic.active{color:#000}.home-project .statistic.active svg{fill:currentColor}.home-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.home-project .project-card-header .icon-badge{fill:#212121}.home-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.home-project .project-card-logo img{width:100%}.home-project .project-card-name{line-height:1.25}.home-project .project-card-name a{font-size:1.2rem;color:#000}.home-project .project-card-name a:hover{color:#212121}.home-project:hover{border:1px solid rgba(33,33,33,.2);box-shadow:0 0 5px #c1c1c1}.home-project.blocked-project{border:#c1c1c1}.home-project.blocked-project:hover{border:#c1c1c1;box-shadow:none}.home-project.blocked-project .project-card-description,.home-project.blocked-project .project-card-logo,.home-project.blocked-project .project-card-name a,.home-project.blocked-project .project-card-statistics,.home-project.blocked-project .tags-container{opacity:.3}.projects-empty{text-align:center}.projects-empty svg{fill:#c1c1c1;height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty p{font-size:.9rem}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{margin:2rem 2rem 1rem;text-align:center}.empty-ticket{display:-ms-flexbox;display:flex}.empty-ticket:not(:last-child){border-bottom:1px solid #c1c1c1;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#b4b4b4;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:8vw}@media (max-width:1280px){.empty-ticket .line{width:30vw}}@media (max-width:767px){.empty-ticket .line{width:30vw}}@media (max-width:480px){.empty-ticket .line{width:30vw}}.empty-ticket .line:last-child{margin:0;width:18vw}@media (max-width:1280px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:767px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:480px){.empty-ticket .line:last-child{width:50vw}}.invite-members-form{border-top:1px solid #c1c1c1;margin:0 5rem}.invite-members-form .invite-members-form-list{margin:0 0 1rem}.invite-members-form .invite-members-single{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem}.invite-members-form .invite-members-single-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.invite-members-form .invite-members-single-avatar{height:4rem;margin-right:1rem;width:4rem}.invite-members-form .invite-members-single-remove{color:#ff0062;margin-left:1rem;transition:color .2s}.invite-members-form .invite-members-single-remove:hover{color:#ff2400}.invite-members-form .invite-members-single-role{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:0;flex-shrink:0}.invite-members-form .invite-members-single-new{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem 0}.invite-members-form .invite-members-single-new .invite-members-single-new-btn{cursor:pointer}.invite-members-form .invite-members-single-new .icon-add{width:2rem;height:2rem;fill:#212121;transition:fill .2s}.invite-members-form .invite-members-single-new:hover .icon-add{fill:#212121}.invite-members-form .invite-members-single-send{font-size:1.2rem;display:block;margin:1.5rem 0 1rem;padding:1rem;width:100%}.invite-members-form .invite-members-single-help{font-size:.9rem}.lightbox-add-member .add-members-wrapper{max-width:900px;width:90%}.add-member-suggest .add-member-suggest-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:2rem 0 0}.add-member-suggest .add-member-suggest-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:0 15rem;position:relative}.add-member-suggest .add-member-suggest-filter-input{-ms-flex:1;flex:1;margin-right:.25rem}.add-member-suggest .add-member-suggest-filter-hint{font-size:.75rem;color:#757575;position:absolute;right:16rem;top:.5rem}.add-member-suggest .add-member-suggest-filter-hint.to-send{right:19rem}.add-member-suggest .add-member-suggest-filter-addmail{background:#212121;border-radius:.25rem;padding:.5rem .75rem;transition:background .2s linear}.add-member-suggest .add-member-suggest-filter-addmail:hover{background:#212121}.add-member-suggest .add-member-suggest-filter-addmail svg{width:1.3rem;height:1.3rem;fill:#fff}.add-member-suggest .add-member-suggest-single{-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #c1c1c1;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:calc(25% - 1rem);flex-basis:calc(25% - 1rem);-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;padding:.2rem;transition:.2s linear}.add-member-suggest .add-member-suggest-single:hover{background:rgba(33,33,33,.1)}.add-member-suggest .add-member-suggest-single:nth-child(4n){margin-right:0}.add-member-suggest .add-member-suggest-avatar{-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;height:5rem;margin:.5rem;width:5rem}.notifications-list .entry .entry-project,.notifications-list .entry a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.navbar{display:-ms-flexbox;display:flex;height:40px;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar::after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.navbar .nav-left a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left .logo{background:rgba(0,0,0,.2);padding:.3rem .75rem}.navbar .nav-left svg{width:1.6rem;height:1.6rem}.navbar .nav-right{margin-left:auto}.navbar .nav-right .topnav-dropdown-wrapper>a,.navbar .nav-right>a{color:#fff;margin:0;padding:.5rem 2rem}.navbar .nav-right .active{background:rgba(255,255,255,.95);color:#000}.navbar .nav-right svg{width:1.2rem;height:1.2rem;fill:rgba(0,0,0,.8);transition:all .2s linear}.navbar .nav-right>a,.navbar .topnav-dropdown-wrapper>a{color:#fff;display:inline-block;transition:all .2s linear}.navbar .nav-right>a:hover,.navbar .topnav-dropdown-wrapper>a:hover{background:rgba(0,0,0,.2);color:#212121}.navbar .nav-right>a:hover svg,.navbar .topnav-dropdown-wrapper>a:hover svg{fill:#212121;transition:all .2s linear}.navbar .nav-right>a.user-avatar,.navbar .topnav-dropdown-wrapper>a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar .nav-right>a.user-avatar span,.navbar .topnav-dropdown-wrapper>a.user-avatar span{padding-right:1rem}.navbar .user-avatar img{height:2.5rem;margin-left:.5rem;vertical-align:middle}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#212121;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.navbar-dropdown ul:after{border-color:rgba(33,33,33,0);border-bottom-color:#212121;border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-color:rgba(33,33,33,0);border-bottom-color:#212121;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown .plugin:hover .new{color:#fff}.navbar-dropdown .plugin .new{font-size:.9rem;background:#ff0062;float:right;margin-left:auto;padding:.1rem .25rem}.navbar-dropdown a{color:#757575;display:block;padding:.8rem .5rem}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#212121}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-ms-flex:1;flex:1}.navbar-dropdown a.blocked-project{color:#757575}.navbar-dropdown a.blocked-project svg{margin-left:.5rem;position:relative;top:.25rem}.navbar-dropdown .create-options{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@keyframes highlightFadeOut{0%{background:#212121;font-size:.75rem;height:22px;left:49px;line-height:22px;top:-1px;width:22px}20%{font-size:.7rem;height:20px;left:50px;line-height:20px;top:0;width:20px}100%{background:#000}}.topnav-dropdown-wrapper{position:relative}.topnav-dropdown-wrapper:hover .navbar-dropdown-notifications{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.topnav-dropdown-wrapper .counter{background:#000;border-radius:50%;color:#fff;font-size:.7rem;height:18px;left:52px;line-height:18px;position:absolute;text-align:center;top:3px;width:18px}.topnav-dropdown-wrapper .counter.small{height:17px;line-height:17px;width:17px}.topnav-dropdown-wrapper .counter.large{height:22px;line-height:22px;top:2px;width:22px}.topnav-dropdown-wrapper .counter.counter-active{animation-duration:2s;animation-name:highlightFadeOut}.topnav-dropdown-wrapper .navbar-dropdown-notifications{background:#fff;border:1px solid #c1c1c1;border-radius:2px;box-shadow:0 0 3px 3px rgba(184,184,184,.2);color:#212121;display:none;left:calc(50% - 450px/2);margin-top:1px;min-width:450px;padding:0;position:absolute;top:2.4rem;z-index:999}.topnav-dropdown-wrapper .navbar-dropdown-notifications .empty{color:#757575;font-size:.9em;padding:1.5em 0;text-align:center;width:100%}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header{background:#f5f5f5;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:.6rem .75rem}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after,.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header .notifications-title{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action{font-size:.9rem;padding-left:1.2rem;text-align:right}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action.disabled{color:#B8B8B8;cursor:default}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled){color:#000}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled):hover{color:#212121}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-wrapper{min-height:70px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-list{max-height:400px;overflow-y:auto}.notifications-page{margin-top:1.5em;min-width:initial;padding-bottom:5em}.notifications-page .header{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0;padding:.5em 1em}.notifications-page .title{color:#000;-ms-flex-positive:1;flex-grow:1;font-size:1.8em;line-height:1.8em;margin:0;text-transform:uppercase}.notifications-page .action{color:#000;font-size:1em;line-height:.75em;margin-right:1em}.notifications-page .action.disabled{color:#B8B8B8}.notifications-list .entry a.project-link,.notifications-list .entry a.user-link,.notifications-page .action:not(.disabled):hover{color:#212121}.notifications-page .empty{margin:4rem auto;text-align:center;width:100%}.notifications-page .notifications-list .entry{-ms-flex-align:center;align-items:center;font-size:.95rem;margin:.5rem 0;padding:1rem .6rem}.notifications-page .notifications-list .entry.new{background-color:#E0E0E0}.notifications-page .notifications-list .entry .entry-content{font-size:1.05rem}.notifications-page .notifications-list .entry .entry-project{max-width:initial;text-overflow:initial;white-space:initial}.notifications-page .notifications-list .entry .entry-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:1rem;width:3rem}.notifications-page .notifications-list .entry .entry-date{font-size:.85rem;margin-right:.5rem}.notifications-list .entry{color:#212121;display:-ms-flexbox;display:flex;font-size:.9rem;margin:0 .8rem;padding:.8rem 0;position:relative}.notifications-list .entry:not(:last-child){border-bottom:1px solid #c1c1c1}.notifications-list .entry p{line-height:1.25em;margin-bottom:0}.notifications-list .entry a.object-link{color:#000}.notifications-list .entry a:hover{color:#212121}.notifications-list .entry .entry-avatar{border-radius:.1rem;-ms-flex-preferred-size:2.5rem;flex-basis:2.5rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.7rem;vertical-align:center;width:2.5rem}.notifications-list .entry .entry-avatar img{width:100%}.notifications-list .entry .entry-content{-ms-flex-positive:1;flex-grow:1;line-height:1.1em;margin-right:.7rem}.notifications-list .entry .entry-project{color:#B8B8B8;display:inline-block;font-size:.9rem;margin-top:.5em;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notifications-list .spin img,.profile .timeline-wrapper .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;transform-origin:32 32;max-height:3rem;max-width:3rem}.notifications-list .entry .entry-date{font-size:.7rem;white-space:nowrap}.notifications-list .spin{margin:5% auto;width:3rem}.notifications-list .spin img{margin:0 auto}.profile-favs{border-top:1px solid #c1c1c1}.profile-filter{-ms-flex-align:center;align-items:center;background:#c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile-filter .searchbox{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{fill:#757575;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-ms-flex:1;flex:1;margin-right:1rem}.import-project-asana-form-selector li:first-child,.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs{border-top:1px solid #c1c1c1}.profile-filter .searchbox input:focus{border-bottom:1px solid #757575;outline:0;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#757575;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#212121}.profile{display:-ms-flexbox;display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .timeline-wrapper .spin img{margin:0 auto}.profile .profile-sidebar{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{fill:#c1c1c1;height:10rem;margin:2rem auto;text-align:center;width:10rem}.profile .empty-tab p{color:#757575;font-size:.9rem;margin:0}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{filter:brightness(40%) saturate(150%) hue-rotate(60deg);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;transform:translateY(0);transition:all .2s cubic-bezier(.01,.7,1,1);transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#757575;transition:all .2s linear}.profile-bar .flag:hover path{fill:#ff2400;transition:all .2s linear}.profile-bar h1{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:2rem;line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar .location,.profile-bar .username,.profile-bar h2{margin-bottom:1rem;color:#757575}.profile-bar h2{font-size:1.6rem;line-height:1.2}.profile-bar .username{font-size:1.2rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#757575}.profile-bar .profile-stats{border-bottom:1px solid #c1c1c1;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;display:block;line-height:1}.profile-bar .profile-stats .stat-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:.9rem;display:block}.profile-bar .profile-quote{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;background:url(../images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contacts{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{display:inline-block;padding:1rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#757575;transition:color .2s linear}.profile-content-tabs .tab.active .icon,.profile-content-tabs .tab:hover .icon{fill:#212121}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #c1c1c1;border-right:1px solid #c1c1c1;position:relative;top:1px;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#000}.profile-content-tabs .icon{fill:#757575;height:.8rem;margin-right:.5rem;transition:fill .2s linear}.profile-sidebar h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#757575;margin-bottom:.5rem;padding:.5rem}.contact-team-large,.import-project-asana-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-sidebar h4 .icon{fill:#757575;margin-right:.3rem;margin-top:-3px;vertical-align:middle}.profile-sidebar p{font-size:.9rem}.profile-sidebar a{color:#000}.contact-team{margin-left:.75rem}.contact-team-large{font-size:.9rem;-ms-flex-pack:center;justify-content:center;margin-left:0;width:100%}.contact-team-large .icon-mail{margin-right:.5rem;vertical-align:center}.lightbox-contact-project{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-contact-project-container{max-width:600px;text-align:center;width:90%}.lightbox-contact-project-logo{width:5rem}.lightbox-contact-project-title{margin:0}.lightbox-contact-project-name{font-size:1.6rem;color:#000;margin-bottom:1rem}.lightbox-contact-project-message{max-height:400px}.lightbox-contact-project-button{display:block;margin-top:.5rem;width:100%}.import-project-asana-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-asana-form{width:90%;min-width:0}}.import-project-asana-form fieldset{margin-bottom:1rem}.import-project-asana-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-asana-form label span{font-size:.9rem}.import-project-asana-form label .mumble{margin-left:.25rem}.import-project-asana-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-asana-form-check span{display:block}.import-project-asana-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-asana-form-check .check{position:absolute;right:0;top:0}.import-project-asana-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-asana-form-title-wrapper .create-project-title{display:inline-block}.import-project-asana-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-description,.import-project-asana-form-title{margin:0;text-align:center}.import-project-asana-form-description{color:#757575;margin-bottom:2rem}.import-project-asana-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-asana-form-import-type input:checked+label,.import-project-asana-form-privacity input:checked+label,.import-project-asana-form-selector-template,.import-project-asana-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-asana-form-import-type{display:-ms-flexbox;display:flex}.import-project-asana-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-import-type label .icon{margin-right:.25rem}.import-project-asana-form-import-type input:checked+label{background:#dcdcdc}.import-project-asana-form-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-asana-form-import-type input:disabled+label .icon{color:#9b9b9b}.import-project-asana-form-import-type input{display:none}.import-project-asana-form-import-type label{background:#f5f5f5}.import-project-asana-form-privacity{display:-ms-flexbox;display:flex}.import-project-asana-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-privacity input:checked+label{background:#dcdcdc}.import-project-asana-form-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-asana-form-privacity input:disabled+label .icon{color:#9b9b9b}.import-project-asana-form-privacity input{display:none}.import-project-asana-form-privacity label{background:#f5f5f5}.import-project-asana-form-privacity label .icon{margin-right:.5em}.import-project-asana-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-asana-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-asana-form-type span{margin-left:.5rem}.import-project-asana-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-asana-form-action-back,.import-project-asana-form-action-cancel,.import-project-asana-form-selector a:hover{color:currentColor}.import-project-asana-form-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-asana-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-asana-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-asana-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-asana-form-selector-template{text-transform:uppercase}.import-project-asana-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-asana-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-asana-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-asana-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-asana-form-selector-question:hover svg{fill:#000;transition:fill .2s linear}.import-project-asana-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.import-project-asana-form-selector p{margin-bottom:0}.import-project-asana-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-asana-form-action button{font-size:1.2rem;padding:.75rem}.import-project-asana-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-asana-form-action-back:hover,.import-project-asana-form-action-cancel:hover{color:#212121}.import-project-asana-form-action-cancel{-ms-flex:1;flex:1}.import-project-asana-form-action-back{width:10%}.import-project-asana-form-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-asana-form-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-warning a{color:#000;display:inline-block;margin-left:.25rem}.import-project-asana-form .spin{text-align:center;width:100%}.create-project-asana-import-type{margin-bottom:1rem;text-align:center}.create-project-asana-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-asana-import-type fieldset{background:#fff;border-right:1px solid #c1c1c1;transition:background .2s linear}.create-project-asana-import-type fieldset:last-child{border:0}.create-project-asana-import-type input{display:none}.create-project-asana-import-type input:checked+label{background:rgba(0,0,0,.1)}.create-project-asana-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-asana-import-type label:hover{background:rgba(0,0,0,.1);cursor:pointer}.create-project-asana-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-asana-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.create-project{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.create-project{width:90%;min-width:0}}.create-project fieldset{margin-bottom:1rem}.create-project label{display:block;margin-bottom:.25rem;max-height:44px}.create-project label span{font-size:.9rem}.create-project label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.create-project-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.create-project-check span{display:block}.create-project-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-check .check{position:absolute;right:0;top:0}.create-project-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.create-project-title-wrapper .create-project-title{display:inline-block}.create-project-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.create-project-description,.create-project-title{margin:0;text-align:center}.create-project-description{color:#757575;margin-bottom:2rem}.create-project-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.create-project-import-type input:checked+label,.create-project-privacity input:checked+label,.create-project-selector-template,.create-project-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-import-type{display:-ms-flexbox;display:flex}.create-project-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.create-project-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-import-type label .icon{margin-right:.25rem}.create-project-import-type input:checked+label{background:#dcdcdc}.create-project-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.create-project-import-type input:disabled+label .icon{color:#9b9b9b}.create-project-import-type input{display:none}.create-project-import-type label{background:#f5f5f5}.create-project-privacity{display:-ms-flexbox;display:flex}.create-project-privacity label,.create-project-type{-ms-flex-align:center;display:-ms-flexbox;text-transform:uppercase}.create-project-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-privacity label{align-items:center;cursor:pointer;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem}.create-project-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-privacity input:checked+label{background:#dcdcdc}.create-project-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.create-project-privacity input:disabled+label .icon{color:#9b9b9b}.create-project-privacity input{display:none}.create-project-privacity label{background:#f5f5f5}.create-project-privacity label .icon{margin-right:.5em}.create-project-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.create-project-type{align-items:center;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem}.create-project-type span{margin-left:.5rem}.create-project-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.create-project-action-back,.create-project-action-cancel,.create-project-selector a:hover{color:currentColor}.create-project-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.create-project-selector li:first-child{border-top:1px solid #c1c1c1}.create-project-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.create-project-selector-icon .icon{width:2.25rem;height:2.25rem}.create-project-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.create-project-selector-template{text-transform:uppercase}.create-project-selector-description,.import-project-github-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.create-project-selector-long-description.ng-hide{line-height:0;max-height:0}.create-project-selector-question{position:absolute;right:1.5rem;top:1.5rem}.create-project-selector-question:hover svg{fill:#000;transition:fill .2s linear}.create-project-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.create-project-selector p{margin-bottom:0}.create-project-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.create-project-action button{font-size:1.2rem;padding:.75rem}.create-project-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.create-project-action-back:hover,.create-project-action-cancel:hover{color:#212121}.create-project-action-cancel{-ms-flex:1;flex:1}.create-project-action-back{width:10%}.create-project-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.create-project-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.create-project-warning a{color:#000;display:inline-block;margin-left:.25rem}.create-project .spin{text-align:center;width:100%}.duplicate-project-reference{margin-bottom:2rem}.import-project-github-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-github-form{width:90%;min-width:0}}.import-project-github-form fieldset{margin-bottom:1rem}.import-project-github-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-github-form label span{font-size:.9rem}.import-project-github-form label .mumble{margin-left:.25rem}.import-project-github-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-github-form-check span{display:block}.import-project-github-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-github-form-check .check{position:absolute;right:0;top:0}.import-project-github-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-github-form-title-wrapper .create-project-title{display:inline-block}.import-project-github-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-github-form-description,.import-project-github-form-title{margin:0;text-align:center}.import-project-github-form-description{color:#757575;margin-bottom:2rem}.import-project-github-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-github-form-import-type input:checked+label,.import-project-github-form-privacity input:checked+label,.import-project-github-form-selector-template,.import-project-github-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-github-form-import-type{display:-ms-flexbox;display:flex}.import-project-github-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-import-type label .icon{margin-right:.25rem}.import-project-github-form-import-type input:checked+label{background:#dcdcdc}.import-project-github-form-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-github-form-import-type input:disabled+label .icon{color:#9b9b9b}.import-project-github-form-import-type input{display:none}.import-project-github-form-import-type label{background:#f5f5f5}.import-project-github-form-privacity{display:-ms-flexbox;display:flex}.import-project-github-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-privacity input:checked+label{background:#dcdcdc}.import-project-github-form-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-github-form-privacity input:disabled+label .icon{color:#9b9b9b}.import-project-github-form-privacity input{display:none}.import-project-github-form-privacity label{background:#f5f5f5}.import-project-github-form-privacity label .icon{margin-right:.5em}.import-project-github-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-github-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-github-form-type span{margin-left:.5rem}.import-project-github-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-github-form-action-back,.import-project-github-form-action-cancel,.import-project-github-form-selector a:hover{color:currentColor}.import-project-github-form-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-github-form-selector li:first-child{border-top:1px solid #c1c1c1}.import-project-github-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-github-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-github-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-github-form-selector-template{text-transform:uppercase}.import-project-github-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-github-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-github-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-github-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-github-form-selector-question:hover svg{fill:#000;transition:fill .2s linear}.import-project-github-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.import-project-github-form-selector p{margin-bottom:0}.import-project-github-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-github-form-action button{font-size:1.2rem;padding:.75rem}.import-project-github-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-github-form-action-back:hover,.import-project-github-form-action-cancel:hover{color:#212121}.import-project-github-form-action-cancel{-ms-flex:1;flex:1}.import-project-github-form-action-back{width:10%}.import-project-github-form-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-github-form-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.import-project-github-form-warning a{color:#000;display:inline-block;margin-left:.25rem}.import-project-github-form .spin{text-align:center;width:100%}.create-project-github-import-type{margin-bottom:1rem;text-align:center}.create-project-github-import-type p{margin-bottom:.5rem}.create-project-github-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-github-import-type fieldset{background:#fff;border-right:1px solid #c1c1c1;transition:background .2s linear}.create-project-github-import-type fieldset:last-child{border:0}.create-project-github-import-type input{display:none}.create-project-github-import-type input:checked+label{background:rgba(0,0,0,.1)}.create-project-github-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-github-import-type label:hover{background:rgba(0,0,0,.1);cursor:pointer}.create-project-github-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-github-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.import-project-members{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-members{width:90%;min-width:0}}.import-project-members .avatar{width:48px}.import-project-members-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:0}.import-project-description,.import-project-jira-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-members-system{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0 0;padding:.5rem 0}.import-project-members-system img{width:100%}.import-project-members-logo{max-height:3rem;max-width:3rem}.import-project-members-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;border-top:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.import-project-members-row:hover .import-project-members-delete{opacity:1;transition:all .2s ease-in}.import-project-members-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-username{margin-left:1rem}.import-project-members .avatar.empty{background-color:#c1c1c1;line-height:3rem;text-align:center;width:3rem}.import-project-members-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-delete{background:0 0;opacity:0;padding:.25rem .5rem}.import-project-members-delete svg{width:.75rem;height:.75rem;fill:#ff2400}.import-project-members-match{color:#757575}.import-project-members-match button{background:#fff;border-radius:50%;padding:.25rem .5rem}.import-project-members-match button svg{width:.75rem;height:.75rem}.import-project-members-match-true{border:1px solid #000;margin:0 .1rem 0 .25rem;transition:background .2s}.import-project-members-match-true:hover{background:rgba(33,33,33,.3)}.import-project-members-match-true svg{fill:#000}.import-project-members-match-false{border:1px solid #ff2400;margin:0 .25rem 0 .1rem;transition:background .2s}.import-project-members-match-false:hover{background:rgba(255,36,0,.3)}.import-project-members-match-false svg{fill:#ff2400}.import-project-members-choose{color:#000;padding-right:0;text-transform:lowercase}.import-project-members-choose:hover{color:#212121}.import-project-members-selected{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-selected-img{margin-left:.5rem;max-width:3rem}.import-project-members-selected img{width:100%}.import-project-members-submit{display:block;margin:2rem auto 0;padding:.75rem 4rem}.import-project-selector{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-selector{width:90%;min-width:0}}.import-project-selector .import-project-selector-service img{display:block;margin:1rem auto;width:4rem}.import-project-selector .import-project-selector-filter{-ms-flex-align:center;align-items:center;background:#c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem}.import-project-selector .import-project-selector-filter input{background:#f5f5f5;border:0;-ms-flex:1;flex:1;padding:.5rem}.import-project-from-site,.import-project-selector .import-project-selector-title{border-bottom:1px solid #c1c1c1;padding:1rem}.import-project-selector .import-project-selector-filter svg{width:1rem;height:1rem;fill:#757575;margin:0 1rem}.import-project-selector .import-project-selector-title:hover{background:rgba(0,0,0,.1);cursor:pointer}.import-project-from-site{-ms-flex-align:center;align-items:center;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;position:relative}.import-project-from-site:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-from-site:first-child{border-top:1px solid #c1c1c1}.import-project-from-site:first-child .import-project-name{margin:0}.import-project-from-site:first-child .import-project-logo img{padding:0 .9rem 0 1rem;width:5.1rem}.import-project-logo{-ms-flex-item-align:start;align-self:flex-start;margin-right:.5rem}.import-project-logo img{padding:0 1rem;width:5rem}.import-project-name-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.import-project-description{margin-bottom:0}.import-project-description a{color:#000;margin-left:.3rem}.import-project-url{margin-top:.5rem}.import-project-input{vertical-align:middle}.import-project-button{background:#000;color:#fff;padding:.4rem 1rem}.create-project-invite-avatars{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.create-project-invite-avatar{cursor:pointer;display:block;margin-right:.25rem}.create-project-invite-avatar:hover{background:#f5f5f5;position:relative;border:0;opacity:.9;transition:all .2s;transition-delay:.2s}.create-project-invite-avatar:hover:after,.create-project-invite-avatar:hover:before{content:"";width:2px;height:66px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled{opacity:.3;transition:opacity .2s}.create-project-invite-avatar.disabled:hover{background:#f5f5f5;position:relative;border:0;opacity:.6;transition:all .2s ease-in}.create-project-invite-avatar.disabled:hover:after,.create-project-invite-avatar.disabled:hover:before{content:"";width:2px;height:33px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar.disabled:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar.disabled:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled:hover::after{background:#212121;left:24px;top:8px;transform:rotate(0);transform-origin:center}.create-project-invite-avatar.disabled:hover::before{background:#212121;right:22px;top:8px;transform:rotate(90deg);transform-origin:center}.create-project-invite-avatar img{cursor:pointer;width:3rem}.import-project-jira-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-jira-form{width:90%;min-width:0}}.import-project-jira-form fieldset{margin-bottom:1rem}.import-project-jira-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-jira-form label span{font-size:.9rem}.import-project-jira-form label .mumble{margin-left:.25rem}.import-project-jira-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-jira-form-check span{display:block}.import-project-jira-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-jira-form-check .check{position:absolute;right:0;top:0}.import-project-jira-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-jira-form-title-wrapper .create-project-title{display:inline-block}.import-project-jira-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-description,.import-project-jira-form-title{margin:0;text-align:center}.import-project-jira-form-description{color:#757575;margin-bottom:2rem}.import-project-jira-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-jira-form-import-type input:checked+label,.import-project-jira-form-privacity input:checked+label,.import-project-jira-form-selector-template,.import-project-jira-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-jira-form-import-type{display:-ms-flexbox;display:flex}.import-project-jira-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-import-type label .icon{margin-right:.25rem}.import-project-jira-form-import-type input:checked+label{background:#dcdcdc}.import-project-jira-form-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-jira-form-import-type input:disabled+label .icon{color:#9b9b9b}.import-project-jira-form-import-type input{display:none}.import-project-jira-form-import-type label{background:#f5f5f5}.import-project-jira-form-privacity{display:-ms-flexbox;display:flex}.import-project-jira-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-privacity input:checked+label{background:#dcdcdc}.import-project-jira-form-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-jira-form-privacity input:disabled+label .icon{color:#9b9b9b}.import-project-jira-form-privacity input{display:none}.import-project-jira-form-privacity label{background:#f5f5f5}.import-project-jira-form-privacity label .icon{margin-right:.5em}.import-project-jira-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-jira-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-jira-form-type span{margin-left:.5rem}.import-project-jira-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-jira-form-action-back,.import-project-jira-form-action-cancel,.import-project-jira-form-selector a:hover{color:currentColor}.import-project-jira-form-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-jira-form-selector li:first-child{border-top:1px solid #c1c1c1}.import-project-jira-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-jira-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-jira-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-jira-form-selector-template{text-transform:uppercase}.create-project-import-type-info,.import-project-jira-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-jira-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-jira-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-jira-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-jira-form-selector-question:hover svg{fill:#000;transition:fill .2s linear}.import-project-jira-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.import-project-jira-form-selector p{margin-bottom:0}.import-project-jira-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-jira-form-action button{font-size:1.2rem;padding:.75rem}.import-project-jira-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-jira-form-action-back:hover,.import-project-jira-form-action-cancel:hover{color:#212121}.import-project-jira-form-action-cancel{-ms-flex:1;flex:1}.import-project-jira-form-action-back{width:10%}.import-project-jira-form-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-jira-form-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-warning a{color:#000;display:inline-block;margin-left:.25rem}.import-project-jira-form .spin{text-align:center;width:100%}.create-project-import-type-info{font-size:.9rem;margin-bottom:1rem}.create-project-type-issues-subform{margin:1rem 0 2rem}.create-project-type-issues-subform-title{font-size:.9rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-type-issues-subform-radiogr input{opacity:0}.create-project-type-issues-subform-radiogr input:checked+svg{fill:rgba(0,0,0,.6);stroke:rgba(0,0,0,.1)}.create-project-type-issues-subform-radiogr svg{fill:#c1c1c1;stroke:#a8a8a8;stroke-width:1px;vertical-align:middle}.create-project-type-issues-subform-radiogr .control-indicator{padding-left:.25rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-import-type{margin-bottom:.25rem}.create-project-import-type fieldset{margin:0}tg-select-import-user-lightbox .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}tg-select-import-user-lightbox .candidate-user{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1.5rem}tg-select-import-user-lightbox .candidate-user .candidate-user-name{margin-left:.5rem}tg-select-import-user-lightbox .candidate-user .user-list-avatar{background-color:#ff2400;height:32px;margin-right:.5rem;width:32px}tg-select-import-user-lightbox .error{color:#ff0062;text-align:center}tg-select-import-user-lightbox .more-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;padding:1rem;text-align:center}tg-select-import-user-lightbox .group{display:-ms-flexbox;display:flex}tg-select-import-user-lightbox .group input{-ms-flex-positive:2;flex-grow:2;margin-right:.5rem}tg-select-import-user-lightbox .group .submit-button{-ms-flex-positive:0;flex-grow:0;width:auto}tg-select-import-user-lightbox .search-user-mode{font-size:.9rem;background:0 0;margin-top:2rem;padding:.5rem;text-align:left;transition:.2s;width:100%}tg-select-import-user-lightbox .search-user-mode:hover{color:#000}tg-select-import-user-lightbox label{display:block;padding-bottom:.5rem}.import-project-trello-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-trello-form{width:90%;min-width:0}}.import-project-trello-form fieldset{margin-bottom:1rem}.import-project-trello-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-trello-form label span{font-size:.9rem}.import-project-trello-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.import-project-trello-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-trello-form-check span{display:block}.import-project-trello-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-trello-form-check .check{position:absolute;right:0;top:0}.import-project-trello-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-trello-form-title-wrapper .create-project-title{display:inline-block}.import-project-trello-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-description,.import-project-trello-form-title{margin:0;text-align:center}.import-project-trello-form-description{color:#757575;margin-bottom:2rem}.import-project-trello-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-trello-form-import-type input:checked+label,.import-project-trello-form-privacity input:checked+label,.import-project-trello-form-selector-template,.import-project-trello-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-trello-form-import-type{display:-ms-flexbox;display:flex}.import-project-trello-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-import-type label .icon{margin-right:.25rem}.import-project-trello-form-import-type input:checked+label{background:#dcdcdc}.import-project-trello-form-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-trello-form-import-type input:disabled+label .icon{color:#9b9b9b}.import-project-trello-form-import-type input{display:none}.import-project-trello-form-import-type label{background:#f5f5f5}.import-project-trello-form-privacity{display:-ms-flexbox;display:flex}.import-project-trello-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-privacity input:checked+label{background:#dcdcdc}.import-project-trello-form-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-trello-form-privacity input:disabled+label .icon{color:#9b9b9b}.import-project-trello-form-privacity input{display:none}.import-project-trello-form-privacity label{background:#f5f5f5}.import-project-trello-form-privacity label .icon{margin-right:.5em}.import-project-trello-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-trello-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-trello-form-type span{margin-left:.5rem}.import-project-trello-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-trello-form-action-back,.import-project-trello-form-action-cancel,.import-project-trello-form-selector a:hover{color:currentColor}.import-project-trello-form-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-trello-form-selector li:first-child{border-top:1px solid #c1c1c1}.import-project-trello-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-trello-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-trello-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-trello-form-selector-template{text-transform:uppercase}.import-project-trello-form-selector-description,.project-list-wrapper .project-list-title h1,.transfer-project .transfer-title,.transfer-project-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-trello-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-trello-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-trello-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-trello-form-selector-question:hover svg{fill:#000;transition:fill .2s linear}.import-project-trello-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.import-project-trello-form-selector p{margin-bottom:0}.import-project-trello-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-trello-form-action button{font-size:1.2rem;padding:.75rem}.import-project-trello-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-trello-form-action-back:hover,.import-project-trello-form-action-cancel:hover{color:#212121}.import-project-trello-form-action-cancel{-ms-flex:1;flex:1}.import-project-trello-form-action-back{width:10%}.import-project-trello-form-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.profile-projects,.profile-timeline,.transfer-project-detail{border-top:1px solid #c1c1c1}.import-project-trello-form-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-warning a{color:#000;display:inline-block;margin-left:.25rem}.import-project-trello-form .spin{text-align:center;width:100%}.warning-users-import-lightbox{max-width:600px}.warning-users-import-lightbox .warning-users-import-title{text-align:center}.warning-users-import-lightbox .actions{display:-ms-flexbox;display:flex;margin:2rem}.warning-users-import-lightbox .actions button{-ms-flex:1;flex:1}.warning-users-import-lightbox .actions button:first-child{-ms-flex:0;flex:0;-ms-flex-preferred-size:40%;flex-basis:40%;margin-right:.5rem}.warning-users-import-lightbox .actions .button-trans{color:#212121}.profile-projects .list-itemtype-project{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:9rem;padding:.75rem}.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-image,.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-right,.profile-projects .list-itemtype-project.blocked-project .project-description,.profile-projects .list-itemtype-project.blocked-project .project-title{opacity:.4}.profile-projects .list-itemtype-project .project-list-single-title-wrapper{display:-ms-flexbox;display:flex}.profile-projects .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0}.profile-projects .list-itemtype-project .list-itemtype-project-right{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;width:200px}.profile-projects .list-itemtype-project .icon-blocked-project{width:1rem;height:1rem;fill:#fff;stroke:#ff0062}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;margin:0}.project-list-wrapper .icon-badge,.project-list-wrapper .icon-blocked-project,.project-list-wrapper .icon-private{width:1rem;height:1rem}.project-list-wrapper .icon-badge{fill:#212121;margin-left:.5rem;stroke:#212121}.project-list-wrapper .create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .import-project-button{padding:.53rem .8rem}.project-list-wrapper .import-project-button:hover .icon-upload{fill:#212121}.project-list-wrapper .import-project-button .icon-upload{fill:#fff}.project-list-wrapper .project-list-section{display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .help-area{font-size:.9rem;color:#757575;width:200px}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:rgba(33,33,33,.1);cursor:move;transition:background .3s}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .list-itemtype-project.blocked-project .icon-badge,.project-list-wrapper .list-itemtype-project.blocked-project .list-itemtype-project-image,.project-list-wrapper .list-itemtype-project.blocked-project .private,.project-list-wrapper .list-itemtype-project.blocked-project .project-description,.project-list-wrapper .list-itemtype-project.blocked-project .project-title{opacity:.25}.project-list-wrapper .list-itemtype-project.blocked-project:hover .icon-drag{opacity:1}.project-list-wrapper .list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.project-list-wrapper .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.project-list-wrapper .drag{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;opacity:0}.project-list-wrapper .drag svg{fill:#757575;height:1.1rem;margin-right:.5rem;transition:opacity .2s;width:1.1rem}.project-list-wrapper .gu-transit{background-color:#c9c9c9;height:5rem;opacity:1}.project-list-wrapper .gu-transit *{display:none}.project-list-wrapper .gu-mirror{background:#a1a1a1;opacity:1}.blocked-project-detail,.transfer-project{background:url(../images/discover.png) bottom center repeat-x;min-height:calc(100vh - 40px)}.blocked-project-detail{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center;min-width:100vw;width:100vw}.blocked-project-inner{width:330px}.blocked-project-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.blocked-project-title .project-image{-ms-flex-preferred-size:6rem;flex-basis:6rem;margin-right:1rem;max-width:6rem;position:relative}.blocked-project-title img{width:100%}.blocked-project-title .icon-blocked-project{width:1.5rem;height:1.5rem;position:absolute;right:-.5rem;top:-.5rem}.blocked-project-title .project-title{font-size:1.6rem}.blocked-project-message{margin-top:4rem;text-align:center}.blocked-project-message .project-block-title{font-size:2rem}.transfer-project-wrapper{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;width:90%}.transfer-project{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center}.transfer-project-detail{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin:1rem 0 3rem;padding:1rem 0}.transfer-project-image{margin-right:1rem;width:4rem}.transfer-project-title{font-size:1.6rem;margin-bottom:.25rem}.transfer-project-statistics span{color:#757575;margin-right:.5rem}.transfer-project-statistics svg{fill:#757575;margin-right:.25rem}.transfer-project-private{text-transform:uppercase}.transfer-project-comment-link{color:#000;cursor:pointer;display:block;margin-bottom:1rem}.transfer-project-comment-link:hover{color:#212121}.transfer-project-comment-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.transfer-project-comment-header .icon-close{cursor:pointer;fill:#757575}.transfer-project-comment-header .icon-close:hover{fill:#ff0062;transition:fill .2s}.transfer-project-comment-form.ng-enter{animation:dropdownFade .2s}.transfer-project-comment-label{display:block;margin-bottom:.5rem}.transfer-project-comment{margin-bottom:1rem;min-height:6rem}.transfer-project-options{display:-ms-flexbox;display:flex}.transfer-project-options a{font-size:1.2rem;display:block;-ms-flex:1;flex:1;padding:.75rem}.transfer-project-options a:first-child{margin-right:.5rem}.profile-timeline .activity-item{border-bottom:1px solid #c1c1c1;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#000}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#757575}.profile-timeline .activity-item a:hover{color:#212121}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-ms-flex-align:center;align-items:center;color:#757575;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#757575;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-item .new-color{border-radius:50%;display:inline-block;height:1rem;margin-left:.2rem;position:relative;top:.1rem;width:1rem}.profile-timeline .activity-member-view{display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-ms-flex:1;flex:1}.profile-timeline .activity-member-view a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.profile-timeline .activity-member-view p{color:#757575}a:hover,body,h1 .date,h2 .date,h3 .date,h4 .date,h5 .date,h6 .date{color:#000}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:sub;white-space:nowrap}.profile-timeline .single-attachment .icon{fill:#212121;margin-right:.5rem}.main-nav svg,.navbar a svg,.summary .stats svg{fill:#fff}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.wiki-history{margin-bottom:2rem}:root .taskboard-table-body .taskboard-row,_:-ms-fullscreen .taskboard-row{min-height:auto}svg{pointer-events:none}a[ng-click] svg{pointer-events:auto}tg-card .card-title span:last-child{word-break:break-word}body{background:#fff}.extrabar,.master,.menu-secondary,.menu-tertiary{background:#fff;border-left:1px solid #000;border-right:1px solid #000}.master,.menu-secondary{background:#fff}.menu-tertiary{background-color:#fff}.extrabar{background:#fff}h1,h2,h3,h4,h5,h6{color:#212121;font-family:Arial,Helvetica,sans-serif}a{color:#212121}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{background:#fff;border-color:#000;color:#000}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=url]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#000}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=url]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#000}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=url]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#000}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#000}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid #ff2400}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,36,0,.7);color:#fff}blockquote{border-left:5px solid #757575}.home-project-list li,.tag{border:1px solid #000}blockquote,blockquote p,cite{color:#000}.navbar a :hover,.summary{color:#fff}.button-gray{background:#000}.tag{background:#fff}.summary{background:#212121}.navbar{background:#000}.navbar::after{background:url(../images/menu-vert.png) top left}.home-project-list p,.watch-options a.active,.working-on-container .list-itemtype-ticket .ticket-project,.working-on-container .list-itemtype-ticket .ticket-status,.working-on-container .list-itemtype-ticket .ticket-type{color:#000}tg-project-menu{background-color:#000;background-image:none}.main-nav .active svg,.taskboard-table-header .task-colum-name .icon{fill:#000}.main-nav .active{background:#fff}.single-project .title{background:#c1c1c1;color:#000}.summary .data .number,.wiki-summary .username{color:#fff}.activity-item p,.drag-drop-help,.duty-custom-fields .custom-field-data .custom-field-description,.kanban-table-header .task-colum-name .icon,.points-per-role>li,.private path,.table-team .avatar .position,.us-created-by .created-by .created-date,.us-created-by .created-by .created-title,.watching .duty-id,.working-on .duty-id{color:#000}.wiki-content.editable:hover .wysiwyg{background:#fff;border:1px solid}.taskboard-table-header .task-colum-name{background:#fff;border-top:3px solid #000}.taskboard-table-body .taskboard-cards-box{background:#fff;border:1px solid #000}.kanban-table-header .task-colum-name{background:#fff;border-top:3px solid #000}.kanban-table-body .kanban-uses-box{background:#fff}.us-detail-settings .button-gray{background:0 0;border:1px solid #000;color:#000}.us-detail-settings .button-gray.active,.us-detail-settings .button-gray:hover{color:#fff}.history-tabs a,.more-attachments span,.us-detail-settings .button-gray span,.us-story-main-data .us-title .us-name{color:#000}.us-story-main-data .us-title{background:#fff}.login-main,.login-main a{color:#fff}.profile-content-tabs .tab,.profile-sidebar p{color:#212121}.settings-nav .active{background:#000;color:#fff}.admin-submenu ul a{color:#000}.policy-table input:checked+label,.policy-table label:hover{color:#fff}.admin-common .admin-subtitle,.admin-membership-table .avatar .email,.admin-membership-table .delete,.home-wrapper .title-bar{color:#000}.admin-functionalities .functionality.active{background:#fff;border:1px solid #000} \ No newline at end of file diff --git a/dist/v-1547534999795/styles/theme-material-design.css b/dist/v-1547534999795/styles/theme-material-design.css deleted file mode 100644 index 4649a1e..0000000 --- a/dist/v-1547534999795/styles/theme-material-design.css +++ /dev/null @@ -1,4 +0,0 @@ -@charset "UTF-8";.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;box-sizing:content-box}.introjs-bullets ul,.introjs-bullets ul li,.introjs-bullets ul li a,.introjs-button,.introjs-helperLayer,.introjs-helperNumberLayer,.introjs-hint,.introjs-overlay,.introjs-progress,.introjs-progressbar,.introjs-tooltip,.introjs-tooltipReferenceLayer{box-sizing:content-box}.pika-table,table{border-collapse:collapse;border-spacing:0}.lightbox textarea,textarea{resize:vertical}h1 .date,h1 span{text-overflow:ellipsis}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:100000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0)";filter:"progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000)";box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow.bottom-middle,.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow{border:5px solid transparent;content:'';position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-bottom-color:#fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.right{right:-10px;top:10px;border-left-color:#fff}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-left-color:#fff}.introjs-arrow.bottom,.introjs-arrow.bottom-middle,.introjs-arrow.bottom-right{bottom:-10px;border-top-color:#fff}.introjs-arrow.bottom-right{right:10px}.introjs-arrow.left{left:-10px;top:10px;border-right-color:#fff}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-right-color:#fff}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-bullets,.pika-table th,.pika-title{text-align:center}.introjs-button{position:relative;overflow:visible;display:inline-block;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{box-sizing:content-box;margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-prevbutton.introjs-fullbutton{border:1px solid #d4d4d4;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-nextbutton.introjs-fullbutton{-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0;display:inline-block}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none;cursor:pointer}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{overflow:hidden;height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0%;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{position:absolute;background:0 0;width:20px;height:15px;cursor:pointer}.introjs-hint:focus{border:0;outline:0}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}.introjs-hint-dot,.introjs-hint-pulse{box-sizing:content-box;position:absolute}.introjs-hint:hover>.introjs-hint-pulse{border:5px solid rgba(60,60,60,.57)}.introjs-hint-pulse{width:10px;height:10px;border:5px solid rgba(60,60,60,.27);-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;background-color:rgba(136,136,136,.24);z-index:10;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.introjs-hint-no-anim .introjs-hint-dot{-webkit-animation:none;-moz-animation:none;animation:none}.introjs-hint-dot{border:10px solid rgba(146,146,146,.36);background:0 0;-webkit-border-radius:60px;-moz-border-radius:60px;border-radius:60px;height:50px;width:50px;-webkit-animation:introjspulse 3s ease-out;-moz-animation:introjspulse 3s ease-out;animation:introjspulse 3s ease-out;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;animation-iteration-count:infinite;top:-25px;left:-25px;z-index:1;opacity:0}@-webkit-keyframes introjspulse{0%{-webkit-transform:scale(0);opacity:0}25%{-webkit-transform:scale(0);opacity:.1}50%{-webkit-transform:scale(.1);opacity:.3}75%{-webkit-transform:scale(.5);opacity:.5}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes introjspulse{0%{-moz-transform:scale(0);opacity:0}25%{-moz-transform:scale(0);opacity:.1}50%{-moz-transform:scale(.1);opacity:.3}75%{-moz-transform:scale(.5);opacity:.5}100%{-moz-transform:scale(1);opacity:0}}@keyframes introjspulse{0%{transform:scale(0);opacity:0}25%{transform:scale(0);opacity:.1}50%{transform:scale(.1);opacity:.3}75%{transform:scale(.5);opacity:.5}100%{transform:scale(1);opacity:0}}.gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";filter:alpha(opacity=20)}.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:hsla(0,0%,100%,.9);background:linear-gradient(to bottom right,#fff,hsla(0,0%,100%,.8));border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.2);text-shadow:none}.awesomplete>ul:empty{display:none}@supports (transform:scale(0)){.awesomplete>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.awesomplete>ul:empty,.awesomplete>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.awesomplete>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.awesomplete>ul>li{position:relative;padding:.2em .5em;cursor:pointer}.awesomplete>ul>li:hover{background:#b7d2e0;color:#000}.awesomplete>ul>li[aria-selected=true]{background:#3d6c8e;color:#fff}.awesomplete mark{background:#e9ff00}.awesomplete li:hover mark{background:#b5d100}.awesomplete li[aria-selected=true] mark{background:#3c6b00;color:inherit}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}.project-values-title,h1{text-transform:uppercase}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! - * Pikaday - * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ - */.pika-single{display:block;position:relative;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.medium-editor-anchor-preview,.medium-editor-toolbar{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;top:0;z-index:2000}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}@-webkit-keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}@keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}.medium-editor-anchor-preview{left:0;line-height:1.4;max-width:280px;position:absolute;text-align:center;word-break:break-all;word-wrap:break-word;visibility:hidden}.medium-editor-anchor-preview a{color:#fff;display:inline-block;margin:5px 5px 10px}.medium-editor-placeholder-relative:after,.medium-editor-placeholder:after{content:attr(data-placeholder)!important;padding:inherit;margin:inherit;white-space:pre;font-style:italic}.medium-editor-anchor-preview-active{visibility:visible}.medium-editor-dragover{background:#ddd}.medium-editor-image-loading{-webkit-animation:medium-editor-image-loading 1s infinite ease-in-out;animation:medium-editor-image-loading 1s infinite ease-in-out;background-color:#333;border-radius:100%;display:inline-block;height:40px;width:40px}.medium-editor-placeholder{position:relative}.medium-editor-placeholder:after{position:absolute;left:0;top:0}.medium-editor-placeholder-relative,.medium-editor-placeholder-relative:after{position:relative}.medium-toolbar-arrow-over:before,.medium-toolbar-arrow-under:after{border-style:solid;content:'';display:block;height:0;left:50%;margin-left:-8px;position:absolute;width:0}.medium-toolbar-arrow-under:after{border-width:8px 8px 0}.medium-toolbar-arrow-over:before{border-width:0 8px 8px}.medium-editor-toolbar{left:0;position:absolute;visibility:hidden}.medium-editor-toolbar ul{margin:0;padding:0}.medium-editor-toolbar li{float:left;list-style:none;margin:0;padding:0}.medium-editor-toolbar li button{box-sizing:border-box;cursor:pointer;display:block;font-size:14px;line-height:1.33;margin:0;padding:15px;text-decoration:none}.medium-editor-toolbar li button:focus{outline:0}.medium-editor-toolbar li .medium-editor-action-underline{text-decoration:underline}.medium-editor-toolbar li .medium-editor-action-pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-weight:100;padding:15px 0}.medium-editor-toolbar-active{visibility:visible}.belong-to-epic-text-wrapper .remove-epic-relationship svg,.colors-table .gu-transit *{visibility:hidden}.medium-editor-sticky-toolbar{position:fixed;top:1px}.master,.medium-editor-relative-toolbar{position:relative}.medium-editor-toolbar-active.medium-editor-stalker-toolbar{-webkit-animation:medium-editor-pop-upwards 160ms forwards linear;animation:medium-editor-pop-upwards 160ms forwards linear}.medium-editor-action-bold{font-weight:bolder}.medium-editor-action-italic{font-style:italic}.medium-editor-toolbar-form{display:none}.medium-editor-toolbar-form a,.medium-editor-toolbar-form input{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.medium-editor-toolbar-form .medium-editor-toolbar-form-row{line-height:14px;margin-left:5px;padding-bottom:5px}.medium-editor-toolbar-form .medium-editor-toolbar-input,.medium-editor-toolbar-form label{border:none;box-sizing:border-box;font-size:14px;margin:0;padding:6px;width:316px;display:inline-block}body,html{width:100%}.medium-editor-toolbar-form .medium-editor-toolbar-input:focus,.medium-editor-toolbar-form label:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;box-shadow:none;outline:0}.medium-editor-toolbar-form a{display:inline-block;font-size:24px;font-weight:bolder;margin:0 10px;text-decoration:none}.medium-editor-toolbar-form-active{display:block}.medium-editor-toolbar-actions:after{clear:both;content:"";display:table}.medium-editor-element{word-wrap:break-word;min-height:30px}.master,body,html{min-height:100%}.medium-editor-element img{max-width:100%}.medium-editor-element sub{vertical-align:sub}.medium-editor-element sup{vertical-align:super}.medium-editor-hidden{display:none}.medium-toolbar-arrow-under:after{border-color:#242424 transparent transparent;top:50px}.medium-toolbar-arrow-over:before{border-color:transparent transparent #242424;top:-8px}.medium-editor-toolbar{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.75));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.75));border:1px solid #000;border-radius:5px;box-shadow:0 0 3px #000}.medium-editor-toolbar li button{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.89));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.89));border:0;border-right:1px solid #000;border-left:1px solid #333;border-left:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px rgba(0,0,0,.3);color:#fff;height:50px;min-width:50px;-webkit-transition:background-color .2s ease-in;transition:background-color .2s ease-in}.medium-editor-toolbar li button:hover{background-color:#000;color:#ff0}.medium-editor-toolbar li .medium-editor-button-first{border-bottom-left-radius:5px;border-top-left-radius:5px}.medium-editor-toolbar li .medium-editor-button-last{border-bottom-right-radius:5px;border-top-right-radius:5px}.medium-editor-toolbar li .medium-editor-button-active{background-color:#000;background:-webkit-linear-gradient(top,#242424,rgba(0,0,0,.89));background:linear-gradient(to bottom,#242424,rgba(0,0,0,.89))}.medium-editor-toolbar-form{background:#242424;border-radius:5px;color:#999}.medium-editor-toolbar-form .medium-editor-toolbar-input{background:#242424;box-sizing:border-box;color:#ccc;height:50px}.medium-editor-toolbar-form a{color:#fff}.medium-editor-toolbar-anchor-preview{background:#242424;border-radius:5px;color:#fff}.medium-editor-placeholder:after{color:#b3b3b1}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}.loader-active,body.loading-project,h1 .date,h1 span{overflow:hidden}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.prism-token.prism-cdata,.prism-token.prism-comment,.prism-token.prism-doctype,.prism-token.prism-prolog{color:#708090}.prism-token.prism-punctuation{color:#f8f8f2}.prism-namespace{opacity:.7}.prism-token.prism-constant,.prism-token.prism-deleted,.prism-token.prism-property,.prism-token.prism-symbol,.prism-token.prism-tag{color:#f92672}.prism-token.prism-boolean,.prism-token.prism-number{color:#ae81ff}.prism-token.prism-attr-name,.prism-token.prism-builtin,.prism-token.prism-char,.prism-token.prism-inserted,.prism-token.prism-selector,.prism-token.prism-string{color:#a6e22e}.prism-language-css .prism-token.prism-string,.prism-style .prism-token.prism-string,.prism-token.prism-entity,.prism-token.prism-operator,.prism-token.prism-url,.prism-token.prism-variable{color:#f8f8f2}.prism-token.prism-atrule,.prism-token.prism-attr-value,.prism-token.prism-class-name,.prism-token.prism-function{color:#e6db74}.prism-token.prism-keyword{color:#66d9ef}.prism-token.prism-important,.prism-token.prism-regex{color:#fd971f}.prism-token.prism-bold,.prism-token.prism-important{font-weight:700}.prism-token.prism-italic{font-style:italic}.prism-token.prism-entity{cursor:help}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}h1,p{line-height:1.5}.wysiwyg dl dt,.wysiwyg i,em{font-style:italic}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}*{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.3}body .master.ng-animate{transition:0}.drag-active{overflow-x:hidden}.master{height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-ms-flexbox;display:flex;height:100%}.menu-secondary{-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions header{-ms-flex:1;flex:1}.header-with-actions .action-buttons{-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;float:right;margin-left:10px}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.ttf) format("truetype")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.ttf) format("truetype")}@font-face{font-family:OpenSans-Regular;src:url(../fonts/OpenSans-Regular.ttf) format("truetype")}@font-face{font-family:OpenSans-Semibold;src:url(../fonts/OpenSans-Semibold.ttf) format("truetype")}@font-face{font-family:taiga;font-style:normal;font-weight:400;src:url(../fonts/taiga.eot);src:url(../fonts/taiga.eot?) format("eot"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:1rem}h1 span,h2{font-size:1.6rem}h1 span{margin-right:.5rem;vertical-align:bottom;white-space:nowrap}h1 span.green,h1 span:last-child{-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#3f51b5;fill:#3f51b5}h1 .date{display:inline-block;max-width:500px;white-space:nowrap;word-wrap:normal;color:#BDBDBD}h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.2;margin-bottom:1rem}p img{margin:0}small{font-size:1rem}strong{font-weight:700}hr{border:solid #212121;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{transition:color .3s linear}@keyframes loading{0%{filter:blur(5px);opacity:0}100%{filter:blur(0);opacity:1}}@keyframes rotate{50%{filter:invert(1);transform:rotate(360deg)}}@keyframes formSlide{0%{filter:blur(5px);opacity:0;transform:translateY(10rem)}50%{filter:blur(0)}100%{opacity:1;transform:translateY(0)}}.ticket-assigned-to .user-avatar.is-iocaine img,.ticket-assigned-users .user-avatar.is-iocaine img{filter:hue-rotate(150deg) saturate(200%)}@keyframes loadBar{0%,20%{-ms-flex:1;flex:1}10%{-ms-flex:10;flex:10}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-.25rem)}60%{opacity:1}100%{transform:translateY(0)}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{font-size:.9rem;display:block}blockquote cite::before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}.card-task,.main-nav,.wysiwyg .list-stye-none{list-style:none}sup{font-size:.9rem;vertical-align:super}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}svg{height:1rem;width:1rem}.pika-single{min-width:240px;width:auto;z-index:999999}.pika-single .pika-title{color:#424242}.pika-single .is-selected .pika-button{background:#3f51b5;border-radius:0!important;box-shadow:inset 0 1px 3px #3f51b5}.pika-single .is-today .pika-button{color:#3f51b5}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#8c9eff!important;border-radius:0!important;box-shadow:inset 0 1px 3px #8c9eff!important}div.awesomplete>ul,div.awesomplete>ul::before{background:rgba(0,0,0,.95)}.spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:2rem;max-width:2rem}.capslock.ng-enter,.capslock.ng-leave{animation:dropdownFade .2s ease-in}div.awesomplete input{display:inline-block}div.awesomplete>ul{color:#8c9eff;top:2.25rem;transition:all .2s ease}div.awesomplete>ul[hidden]{position:absolute;top:1.5rem;transform:scale(1)}div.awesomplete li:hover mark,div.awesomplete mark,div.awesomplete>ul>li:hover{background:#8c9eff;color:#000}fieldset{border:0;margin:0;padding:0;position:relative;width:100%}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{transition:border .3s linear}button,button:active,button:focus{border:0;outline:0}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.capslock.ng-leave{animation-direction:reverse}.capslock .icon-capslock{bottom:.8rem;fill:#757575;height:.9rem;position:absolute;right:1rem;width:.9rem}.admin-membership .header-message{background:#929dd8;margin-top:1rem;padding:1rem}.admin-membership .header-message .no-more-membership{-ms-flex-align:center;align-items:center;color:#424242;display:-ms-flexbox;display:flex}.admin-membership .header-message .no-more-membership a,.admin-membership .header-message .no-more-membership strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-membership .header-message .no-more-membership p{color:#424242;-ms-flex-positive:1;flex-grow:1;margin:0;padding-left:2rem;padding-right:1rem}.admin-membership .limit-users-warning{font-size:.9rem;color:#3f51b5;margin-right:1rem}.admin-membership .check input{height:40px;width:85px}.add-tag-container{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:.5rem 0;padding:1rem}.add-tag-container .color-column{cursor:pointer;-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative}.add-tag-container .tag-name{-ms-flex-preferred-size:80%;flex-basis:80%;margin-right:1rem}.add-tag-container .options-column{display:-ms-flexbox;display:flex}.add-tag-container .options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.add-tag-container .current-color.empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative}.add-tag-container .current-color.empty-color:after,.add-tag-container .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.add-tag-container .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.add-tag-container .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.add-tag-container input[type=text]{background:#fff}.add-tag-container .icon.icon-close,.add-tag-container .icon.icon-save{opacity:1}.tags-table .table-tags-editor input[type=text]{background-color:transparent;border:0;border-bottom:1px solid transparent;box-shadow:none;transition:border-bottom .2s linear}.tags-table .table-tags-editor input[type=text]:focus{border-bottom:1px solid #757575;outline:0}.tags-table .table-tags-editor .row.header-tag-row{cursor:default;padding-left:1rem}.tags-table .color-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;padding:0 10px;position:relative}.tags-table .color-filter:hover input{border-bottom:1px solid #EEE}.tags-table .color-filter input{padding:0}.tags-table .color-filter label{cursor:pointer}.tags-table .row.tag-row{margin:.3rem 0;padding:.7rem}.tags-table .row.tag-row:hover{cursor:default}.tags-table .row .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mix-tags{position:relative}.tags-table .mix-tags .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#212121;bottom:2rem;color:#fff;display:none;list-style-type:none;margin:0;padding:10px;position:absolute;right:-85%;width:120px;z-index:99;text-align:"center"}.tags-table .mix-tags .popover a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.tags-table .mix-tags .popover a:last-child{border:0}.tags-table .mix-tags .popover a:hover{color:#8c9eff;transition:color .3s linear}.tags-table .mix-tags .popover a:hover.point{color:#fff}.tags-table .mix-tags .popover:after{background:#212121;bottom:-5px;content:'';height:15px;left:50%;position:absolute;transform:rotate(45deg);width:1rem}.tags-table .mix-tags:hover .popover{display:block}.tags-table .mixing-options-column{text-align:right}.tags-table .mixing-options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mixing-tags-from,.tags-table .mixing-tags-to{background:rgba(255,255,255,.2)}.tags-table .mixing-confirm{margin:0 .5rem}.tags-table .mixing-help-text{font-size:.75rem;color:#1a237e;display:inline;padding-right:.5rem;text-align:center}@media (max-width:1280px){.tags-table .mixing-help-text{display:block;padding:.5rem}}.tags-table .current-color.empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative}.tags-table .current-color.empty-color:after,.tags-table .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.tags-table .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.tags-table .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(244,67,54,.7);position:absolute;width:100%}.admin-attributes .admin-attributes-section .admin-tags-section-wrapper-empty{color:#BDBDBD;padding:10vh 0 0;text-align:center}.admin-attributes .admin-attributes-section .loading-spinner{max-height:3rem;max-width:3rem}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.admin-roles p{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#BDBDBD}.auth .logo,.project-values-title h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.auth .logo,.auth .tagline{color:#fff;text-align:center}.project-values-title{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem}.project-values-title h2{font-size:1.2rem;margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(../images/bg.png) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;overflow-y:auto;position:fixed;right:0;top:0;z-index:999}.auth .auth-container{-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{text-align:center;width:100%}.auth .logo-svg svg{height:8rem;width:8rem}.auth .logo{font-size:3rem}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{margin-left:.5rem;padding-bottom:1rem}.auth .login-text a,.auth .register-text a{text-decoration:underline}.auth .login-text a:hover,.auth .register-text a:hover{color:#8c9eff}.auth .register-terms{margin:.5rem 0 .75rem}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{animation-duration:5s;animation-iteration-count:infinite;animation-name:moustache;animation-timing-function:ease-in-out;fill:rgba(63,81,181,.9);stroke:#8c9eff;stroke-width:1px;transform-origin:50% 50%;transition:.3s}.moustache:hover{fill:rgba(140,158,255,.9);transition:.3s}@keyframes moustache{0%,30%,70%,90%{transform:rotate(0)}10%{transform:rotate(-10deg)}80%{transform:rotate(10deg)}}.backlog-filter{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;opacity:0;overflow:hidden;position:relative;transition:all .2s linear;width:0}.backlog-filter tg-filter{transform:translateX(-260px);transition:all .2s linear}.backlog-filter.active tg-filter,.issues tg-filter{transform:translateX(0)}.backlog-filter.active{opacity:1;transition:all .2s linear;width:260px}.backlog-menu{background:#f5f5f5;color:#212121;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .menu-button.move-to-sprint,.multiple-drag-mirror.us-item-row .icon-drag,.multiple-drag-mirror.us-item-row .points,.multiple-drag-mirror.us-item-row .status,.multiple-drag-mirror.us-item-row .tags-block,.multiple-drag-mirror.us-item-row .us-settings,.multiple-drag-mirror.us-item-row .votes,.multiple-drag-mirror.us-item-row input{display:none}@media (max-width:1280px){.backlog-menu{-ms-flex-direction:column;flex-direction:column}}.backlog-menu .menu-button .icon-move{margin-right:.25rem}.backlog-menu .button-bulk{margin-left:.2rem}.multiple-drag-mirror.us-item-row{background:#fff;border-radius:4px;box-shadow:2px 2px 5px #757575;min-height:calc(40px + 1rem);opacity:.9;padding:1rem}.multiple-drag-mirror.us-item-row.is-checked,.multiple-drag-mirror.us-item-row:hover{background:#fff}.forecasting-add-sprint{font-size:.9rem;background:#f5f5f5;cursor:pointer;padding:.5rem 0;text-align:center}.invitation-main .avatar .person-name,.invitation-main .invitation-text{font-size:1.2rem;color:#fff;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.forecasting-add-sprint:hover{background:#ededed;transition:background .2s}.forecasting-add-sprint .icon-add{width:1.75rem;height:1.75rem;background:#8c9eff;fill:#fff;margin-right:1rem;padding:.25rem;vertical-align:middle}.invitation-main{background:url(../images/invitation_bg.jpg) center center no-repeat;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background-size:cover;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;height:100vh;-ms-flex-pack:center;justify-content:center;z-index:999}.kanban,.taskboard{height:calc(100vh - 40px)}.invitation-main .invitation-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.error-main h1,.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{font-size:.9rem;color:#BDBDBD;opacity:1;position:absolute;right:1rem;top:.5rem;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#424242;transition:color .3s linear}.invitation-main .login-form,.invitation-main .register-form{-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff}.invitation-main .register-text{color:#fff;font-size:.9rem;margin-left:.5rem;padding-bottom:1rem;text-align:left}.invitation-main .register-text a{color:#3f51b5}.invitation-main .button-auth{display:block}.invitation-main .button-blackish:hover{background:#3f51b5}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.invitation-main .public-register-disabled{width:400px}.invitation-main .public-register-disabled .login-form{border-right:0}.invitation-main .contrib-plugins-wrapper label{color:#EEE}.issues .filters-bar{position:relative;width:260px}.kanban{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px);position:relative}.kanban header{min-height:70px}.kanban .kanban-settings{float:right}.kanban .burndown-container{display:none}.kanban .zoom-loading img{display:block;margin-right:1rem}.kanban-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.kanban-header .options{display:-ms-flexbox;display:flex}.taskboard-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.error-main{background:url(../images/invitation_bg.jpg) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.duty-content,.taskboard{position:relative}.error-main .error-container{color:#fff;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff}.error-main a{color:#8c9eff}.rtl .navbar .nav-right{margin:0}.rtl .navbar .nav-right .user-avatar{padding-left:0;padding-right:2em;text-align:left}.rtl .navbar .nav-right img{margin-left:0;margin-right:.5rem}.rtl .main-nav li:hover .helper{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav li:hover .helper::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav .backlog-sprints-menu::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu a{text-align:right}.rtl .admin-menu li a{padding:1rem 1rem 1rem 0}.rtl h1 span{margin-left:.5rem;margin-right:0}.rtl blockquote{border-left:0;border-right:5px solid #f5f5f5}.rtl .single-filter .name,.rtl .tag{border-color:transparent;border-width:0 3px 0 0}.rtl .tag{border-radius:5px 0 0 5px;margin:0 0 .5rem .5rem}.rtl .tag .icon-close{margin-left:0;margin-right:.25rem}.rtl .home-wrapper .working-on-container{margin-left:1rem;margin-right:0}.rtl .home-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .home-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .contact-team-large .icon-mail{margin-left:.5rem;margin-right:0}.rtl .user-profile .project-details-image{margin-left:2rem;margin-right:0}.rtl .profile-timeline .activity-item .profile-contact-picture,.rtl .profile-timeline .activity-item .profile-member-picture,.rtl .single-project .project-logo{margin-left:1rem;margin-right:0}.rtl .profile-timeline .activity-item{padding:1rem 0 1rem .5rem}.rtl .profile-timeline .activity-item .activity-date{left:.5rem;right:auto}.rtl .profile-timeline .activity-item .activity-info{margin-left:130px;margin-right:0}.rtl .profile-timeline .activity-item blockquote{margin-left:0;margin-right:calc(35px + 1rem)}.rtl .profile-timeline .single-attachment .icon{margin-left:.5rem;margin-right:0}.rtl .project-data .involved-team li{margin-left:.13rem;margin-right:0}.rtl .project-details-form-data .actions .delete-account{text-align:left}.rtl .backlog-table-body .backlog-table-title .user-stories,.rtl .backlog-table-body .row .user-stories,.rtl .backlog-table-body .user-story-name a,.rtl .backlog-table-header .backlog-table-title .user-stories,.rtl .backlog-table-header .row .user-stories,.rtl .issues-table .assigned-field,.rtl .issues-table .issue-field,.rtl .issues-table .modified-field,.rtl .issues-table .subject a,.rtl .sprints .sprint-table .column-us{text-align:right}.rtl .project-data .timeline{margin-left:1rem;margin-right:0}.rtl .track-icon{margin-left:.5rem;margin-right:0}.rtl .watch-options-arrow{margin-left:0;margin-right:auto}.rtl .ticket-estimation .ticket-role-points .icon-arrow-down{margin-left:0;margin-right:.25rem}.rtl .ticket-watch .ticket-watch-button,.rtl .ticket-watch svg{margin-left:.25rem;margin-right:0}.rtl .related-tasks-body .task-assignedto .icon{left:.5rem;right:0}.rtl .related-tasks-body .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .related-tasks-body .task-name{margin-left:1rem;margin-right:0}.rtl .related-tasks-body .task-name span{margin-left:.25rem;margin-right:0}.rtl tg-filter .search-action{left:.7rem;right:auto}.rtl .kanban tg-filter,.rtl .taskboard tg-filter{left:auto;right:0;transform:translateX(260px)}.rtl .kanban tg-filter.open,.rtl .taskboard tg-filter.open{transform:translateX(0)}.rtl .category-config .icon,.rtl .icon-arrow-left,.rtl .icon-arrow-right{transform:scaleX(-1)}.rtl .issues-options .button-bulk{margin-left:0;margin-right:.2rem}.rtl .issues-table .assigned-field .icon,.rtl .issues-table .issue-field .icon,.rtl .issues-table .modified-field .icon{margin-left:0;margin-right:.25rem}.rtl .issues-table .pop-status{left:auto;right:0}.rtl .issues-table .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .highlighted .header svg,.rtl .issues-table .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .issues-table .subject{padding-left:1rem;padding-right:0}.rtl .issues-table .issue-assignedto .icon{left:0;right:auto}.rtl .single-filter{padding-left:.5rem;padding-right:0}.rtl .single-filter .number{left:0;right:auto}.rtl .single-filter .name{border-style:solid}.rtl .discover-header .search-button{left:1rem;right:auto}.rtl .highlighted .header svg.icon-activity,.rtl .highlighted .header svg.icon-like{margin-left:.5rem;margin-right:0}.rtl .highlighted tg-most-liked{margin-left:8%;margin-right:0}.rtl .highlighted-project .statistic{margin-left:.5rem;margin-right:0}.rtl .highlighted-project .project-statistics svg{margin-left:.25rem;margin-right:0}.rtl .highlighted-project .project-logo{margin-left:1rem;margin-right:0}.rtl .featured-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .featured-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .project-list-wrapper .project-list{margin-left:2rem;margin-right:0}.rtl .project-list-wrapper .list-itemtype-project .list-itemtype-project-image{margin-left:1rem;margin-right:0}.rtl .create-project-selector-question{left:1.5rem;right:auto}.rtl .create-project-title-wrapper .icon{margin-left:.5rem;margin-right:0}.rtl .create-project-privacity label .icon{margin-left:.25rem;margin-right:0}.rtl .create-project-action-submit{margin-left:0;margin-right:1rem}.rtl .summary-progress-bar{margin-left:10px;margin-right:0}.rtl .empty-burndown svg{margin-left:2rem;margin-right:0}.rtl .backlog-menu .button-bulk{margin-left:0;margin-right:.2rem}.rtl .ticket-header .detail-status{margin-left:0;margin-right:.25rem}.rtl .ticket-status .level-name{float:left}.rtl .ticket-status .level{margin-left:.5rem;margin-right:0}.rtl .ticket-data-container .icon{margin-left:0;margin-right:.25rem}.rtl .ticket-assigned-to .assigned-to{margin-left:0;margin-right:.5rem}.rtl .user-list-avatar{margin-left:.25rem;margin-right:0}.rtl .user-list-name{margin-left:0;margin-right:.5rem}.rtl .assigned-to-list .user-list-multiple .remove-assigned-to,.rtl .assigned-to-list .user-list-single .remove-assigned-to,.rtl .ticket-assigned-to .remove-user,.rtl .ticket-assigned-users .remove-user,.rtl .ticket-watchers .delete-watcher{left:.5rem;right:auto}.rtl .lightbox .close{left:3rem;right:auto}.rtl .activity .activity-avatar,.rtl .comment .comment-avatar{margin-left:1.5rem;margin-right:0}.rtl .comment .comment-creator{margin-left:.5rem;margin-right:0}.rtl tg-wysiwyg .tools{padding-left:0;padding-right:1rem}.rtl .add-tag-button .icon-add{margin:.5rem 0 0 .25rem}.rtl .add-tag-input .save{margin:.5rem .5rem 0 0}.rtl .issue-nav{left:1rem;right:auto}.rtl .upvote-btn{margin-left:.3rem;margin-right:0}.rtl .taskboard-table-header .taskboard-table-inner{margin-left:1rem}.rtl .taskboard-table-header .task-colum-name{margin:0 0 0 5px}.rtl .kanban-table-header{margin-left:-3.7rem}.rtl .kanban-table-body .task-column,.rtl .kanban-table-header .task-colum-name,.rtl .taskboard-table-body .task-column{margin:0 0 0 5px}.rtl .kanban-table-body .task-column:last-child,.rtl .taskboard-table-body .task-column:last-child{margin-left:0;margin-right:initial}.rtl .backlog-table-body .votes svg{margin-left:.25rem;margin-right:0}.rtl .backlog-table-header .backlog-table-title{padding-left:1rem;padding-right:0}.rtl .backlog-table-body .backlog-table-title .status,.rtl .backlog-table-body .row .status,.rtl .backlog-table-header .backlog-table-title .status,.rtl .backlog-table-header .row .status{-ms-flex-preferred-size:150px;flex-basis:150px;text-align:right}.rtl .backlog-table-body .points .icon,.rtl .backlog-table-body .status .icon,.rtl .backlog-table-header .points .icon,.rtl .backlog-table-header .status .icon{margin-left:0;margin-right:.2rem}.rtl .sprints .sprint-table .column-points,.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .created-by .created-title{text-align:left}.rtl .sprints .sprint .edit-sprint{left:0;margin-left:.5rem;margin-right:0;right:auto}.rtl .epic-row .progress-bar,.rtl .epic-row .progress-status{left:auto;right:0}.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem}.rtl tg-wysiwyg .markdown-editor-placeholder,.rtl tg-wysiwyg .medium-editor-placeholder{padding-left:0;padding-right:1rem;text-align:right}.rtl .attachments-header button{margin-left:.2rem;margin-right:0}.rtl .attachments-header label{margin-left:0;margin-right:.25rem}.rtl .attachment-list .attachment-comments,.rtl .attachment-list .editable-attachment-comment{margin-left:.5rem;margin-right:0}.rtl .attachment-list .editable-attachment-deprecated input{margin-left:.2rem;margin-right:0}.rtl .more-attachments .more-attachments-num{margin-left:0;margin-right:.5rem}.rtl .single-attachment .attachment-name{padding-left:1rem;padding-right:0}.rtl .single-attachment .attachment-name svg{margin-left:.25rem;margin-right:0}.rtl .wiki-nav .add-button svg{margin-left:.5rem;margin-right:0}.rtl .wiki-pages-table .created-field,.rtl .wiki-pages-table .creator-field,.rtl .wiki-pages-table .last-modifier-field,.rtl .wiki-pages-table .modified-field,.rtl .wiki-pages-table .title-field{text-align:right}.rtl .wiki-summary div{margin-left:1.25rem;margin-right:0}.rtl .summary .number{margin-left:.3rem;margin-right:0}.rtl .summary .stats{margin-left:initial;margin-right:auto}.rtl .table-team .avatar .avatar-data{margin-left:0;margin-right:1rem;text-align:right}.rtl .table-team .leave-project .icon{margin-left:.2rem;margin-right:0}.rtl .belong-to-epic-text-wrapper{margin-left:1rem;margin-right:0}.rtl .epics-table-options-wrapper{left:.5rem;right:auto}.rtl .epics-table-dropdown{left:0;right:auto}.rtl .epic-row .icon-upvote,.rtl .story-row .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .story-row{margin-left:0;margin-right:4rem}.rtl .epic-row .icon-arrow-down{margin-left:0;margin-right:.1rem}.rtl .epic-header-container .color-selector{margin-left:.5rem;margin-right:0}.rtl .related-userstories-header .related-userstories-title{margin-left:0;margin-right:1rem}.rtl tg-related-userstory-row .userstory-name{margin-left:1rem;margin-right:0}.rtl tg-related-userstory-row .userstory-name span{margin-left:0;margin-right:.25rem}.rtl tg-related-userstory-row .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .card-owner-actions .icon{margin-left:.25rem;margin-right:0}.rtl .card-owner img{margin-left:.5rem;margin-right:0}.rtl .card-owner .card-owner-avatar img{margin-left:.45rem;margin-right:0}.rtl .card-statistics .statistic{margin-left:.5rem;margin-right:.5rem}.rtl .card-statistics .icon{margin-left:.2rem;margin-right:0}.rtl .lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-left:.5rem;margin-right:0}.rtl .lightbox-create-related-user-stories .new-user-story-options{margin-left:0;margin-right:auto}.rtl .lightbox-generic-form .settings fieldset{margin-left:.5rem;margin-right:0}.rtl .ticket-estimation .popover{left:auto;right:.5rem}.rtl .ticket-estimation .popover::after{left:auto;right:10px}.rtl .profile .timeline-wrapper{margin-left:3.5rem;margin-right:0}.rtl .profile .profile-bar{margin-left:1rem;margin-right:0}.rtl .profile-content-tabs .icon{margin-left:.5rem;margin-right:0}.rtl .profile-sidebar h4 .icon{margin-left:.3rem;margin-right:auto}.rtl .profile-filter .searchbox input{margin-left:1rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-project-image,.rtl .list-itemtype-project .list-itemtype-track .list-itemtype-track-likers,.rtl .list-itemtype-ticket .list-itemtype-avatar,.rtl .list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers,.rtl .profile-filter .searchbox .icon-search{margin-left:.5rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-track-likers .icon,.rtl .list-itemtype-project .list-itemtype-track-watchers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-likers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-watchers .icon{margin-left:.25rem;margin-right:0}.rtl .list-itemtype-ticket.blocked-project .icon-blocked-project{margin-left:0;margin-right:.25rem}.rtl .list-itemtype-ticket .list-itemtype-ticket-data{margin-left:1rem;margin-right:0}.rtl .list-itemtype-user .list-itemtype-avatar{margin-left:.75rem;margin-right:0}.rtl .admin-submenu ul a{padding:1rem 1rem 1rem 0}.rtl .admin-functionalities .module-desc{margin:0 0 0 2rem}.rtl .admin-functionalities .module-icon{margin:0 0 0 .5rem}.rtl .project-details .project-details-image{margin-left:2rem;margin-right:0}.rtl .admin-project-profile-owner-actions .owner-info{padding-left:0;padding-right:.5rem}.rtl .admin-roles .general-category .check{margin-left:0;margin-right:.5rem}.rtl .help-button svg,.rtl .project-details .private-or-public svg{margin-left:.5rem;margin-right:0}.rtl .project-csv .option-wrapper{border-left:1px solid #BDBDBD;border-radius:5px 0 0 5px;border-right:0}.rtl .colors-table .table-header .row{padding-left:0;padding-right:50px}.rtl .basic-table .row{text-align:right}.rtl .admin-membership-table .avatar img{margin:0 .3rem 0 .5rem}.rtl .admin-membership-table .row-role{padding-left:1rem;padding-right:0}.rtl .project-details .get-feedback-inner .check,.rtl .project-details .looking-for-people-selector .check{margin-left:0;margin-right:auto}.rtl .check input{left:auto;right:-10px}.rtl .check input:checked+div{margin-left:0;margin-right:50%}.rtl .check input:checked~.check-yes{left:.3rem;right:auto}.rtl .check input~.check-no{left:auto;right:.375rem}.rtl .notification-message-success{left:-370px;right:auto}.rtl .notification-message-success.active{animation:animSlideRTL 2s}.rtl .notification-message-success.inactive{animation:animSlideOutRTL .5s}@keyframes animSlideRTL{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}4.1%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,232.117,0,0,1)}8.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,357.804,0,0,1)}12.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,407.374,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,417.342,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,399.585,0,0,1)}60.56%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400.01,0,0,1)}100%,82.78%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400,0,0,1)}}@keyframes animSlideOutRTL{100%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}0%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}}.taskboard{overflow:hidden}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.taskboard .zoom-loading img{display:block;margin-right:1rem}.taskboard-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.taskboard-inner{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden}.team h2{margin:1rem 0}.team h2 span:last-child{color:#3f51b5}.us-story-main-data{margin-bottom:1rem}.us-story-main-data header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.subheader{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:1280px){.subheader{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}}.subheader .ticket-created-by{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-negative:0;flex-shrink:0}@media (max-width:1280px){.subheader .ticket-created-by{-ms-flex-preferred-size:auto;flex-basis:auto;-ms-flex-order:1;order:1}}.subheader .tags-block{-ms-flex:1;flex:1}@media (max-width:1280px){.subheader .tags-block{-ms-flex-order:2;order:2}}.subheader .tags-block .tag{border-color:transparent;border-style:solid}.duty-content .in-progress{cursor:progress}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#424242}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#BDBDBD}.duty-content .markdown{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;transition:opacity .2s linear}.duty-content .save-container .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:1.5rem;max-width:1.5rem}.duty-content .edit{cursor:pointer;fill:#757575}.duty-content .view-description .edit{background:#f5f5f5;height:2rem;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;transition:all .2s linear;width:2rem}.duty-content .edit-description{margin-bottom:2rem}.duty-content .edit-description .save{cursor:pointer;display:inline-block;position:relative;top:.3rem}.duty-content .edit-description .edit{display:inline-block;position:absolute;right:2.5rem;top:.4rem;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.save-wiki{float:right}.wiki{max-width:1024px}.wiki .wysiwyg{margin-bottom:0}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e4e4;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:.3rem 0;text-align:left;width:100%}@media (max-width:767px){.basic-table .row{-ms-flex-direction:column;flex-direction:column}}.basic-table .row .width-1{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.button,.button-auth,.button-blackish,.button-bulk,.button-filter,.button-gray,.button-green,.button-red,.button-tribe,.menu-button,.trans-button,a.button-gray,a.button-green{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0;border:0;border-radius:3px;color:#fff;cursor:pointer;display:inline-block;padding:.6rem 2rem;text-align:center;text-transform:uppercase;transition:all .2s linear;vertical-align:middle}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-filter:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button-tribe:hover,.button:hover,.menu-button:hover,.trans-button:hover{color:#fff;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-filter:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button-tribe:visited,.button:visited,.menu-button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-filter span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.button-tribe span,.loading.menu-button span,.loading.trans-button span{animation:loading .5s linear}.button .icon,.button span,.button-auth .icon,.button-auth span,.button-blackish .icon,.button-blackish span,.button-bulk .icon,.button-bulk span,.button-filter .icon,.button-filter span,.button-gray .icon,.button-gray span,.button-green .icon,.button-green span,.button-red .icon,.button-red span,.button-tribe .icon,.button-tribe span,.menu-button .icon,.menu-button span,.trans-button .icon,.trans-button span{color:#fff}.button.disabled,.button[disabled],.disabled.button-auth,.disabled.button-blackish,.disabled.button-bulk,.disabled.button-filter,.disabled.button-gray,.disabled.button-green,.disabled.button-red,.disabled.button-tribe,.disabled.menu-button,.disabled.trans-button,[disabled].button-auth,[disabled].button-blackish,[disabled].button-bulk,[disabled].button-filter,[disabled].button-gray,[disabled].button-green,[disabled].button-red,[disabled].button-tribe,[disabled].menu-button,[disabled].trans-button{background:#f5f5f5;box-shadow:none;color:#BDBDBD;cursor:not-allowed;opacity:.65}.button.disabled:hover,.button[disabled]:hover,.disabled.button-auth:hover,.disabled.button-blackish:hover,.disabled.button-bulk:hover,.disabled.button-filter:hover,.disabled.button-gray:hover,.disabled.button-green:hover,.disabled.button-red:hover,.disabled.button-tribe:hover,.disabled.menu-button:hover,.disabled.trans-button:hover,[disabled].button-auth:hover,[disabled].button-blackish:hover,[disabled].button-bulk:hover,[disabled].button-filter:hover,[disabled].button-gray:hover,[disabled].button-green:hover,[disabled].button-red:hover,[disabled].button-tribe:hover,[disabled].menu-button:hover,[disabled].trans-button:hover{background:#f5f5f5;color:#BDBDBD}.menu-button,.trans-button:visited{color:#212121}.trans-button .icon,.trans-button span{color:#212121;transition:color .2s linear}.trans-button .icon{margin-right:.5rem}.menu-button{border-radius:0}.menu-button:hover{background:#EEE;color:#757575}.menu-button span,.menu-button:visited{color:#212121}.submit-button{width:100%}.button-green,a.button-green{background:#3f51b5}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#8c9eff;color:#fff}.button-gray,a.button-gray{background:#757575}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#8c9eff;color:#fff}.button-blackish{background:#212121;color:#EEE}.button-blackish:hover{background:#212121;color:#fff}.button-red{background:#ff5252}.button-red:hover{background:#f44336;color:#fff}.button-red .icon{color:#fff}.button-bulk{background:#3f51b5;padding:.55rem .75rem}.button-bulk .icon{fill:currentColor;margin-right:0;position:relative;top:1px}.button-bulk:hover{background:#8c9eff}.button-auth{background:#424242}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.button-tribe{-ms-flex-align:center;align-items:center;background:#107a8a;display:-ms-flexbox;display:flex;padding:.4rem .4rem .4rem 1.5rem}.button-tribe.active,.button-tribe:hover{background:#0b525c;color:#fff}.button-tribe .tribe-logo{margin-right:.5rem;width:1.5rem}.tribe-more-info{font-size:.9rem;color:#3f51b5;display:inline-block;margin-top:.5rem}.button-filter{background:#EEE;margin-left:1rem;padding:.4rem .5rem;position:relative}.button-filter:hover{background:#BDBDBD;fill:#EEE}.button-filter .filter-num{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background:#f44336;border-radius:50%;height:1rem;left:-.5rem;position:absolute;top:-.5rem;width:1rem}.card-placeholder{background:#e9e9e9;border:1px dashed #dadada;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:-ms-flexbox;display:flex}.card-placeholder .image{background:#dadada;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-ms-flex:1;flex:1}.card-placeholder .line{background:#dadada;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;margin:0}.check{background-color:#d5d5d5;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:100px;z-index:999}.check input+div{background-color:#757575;height:25px;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#8c9eff;margin-left:50%;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.check input:disabled+div{background-color:#BDBDBD}.ticket-created-by{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end}@media (max-width:1280px){.ticket-created-by{-ms-flex-pack:start;justify-content:flex-start;margin-bottom:.5rem}}.ticket-created-by .user-avatar{-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-positive:0;flex-grow:0;margin-left:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575;display:block;text-align:right}@media (max-width:1280px){.ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem;-ms-flex-order:1;order:1}.ticket-created-by .created-by{-ms-flex-order:2;order:2}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{text-align:left}}.ticket-created-by .created-by .created-title{color:#3f51b5}.ticket-created-by .created-by .created-date{margin-left:.5rem}@media (max-width:1280px){.ticket-created-by .created-by .created-date{margin-left:0}}.doom-line{-ms-flex-align:center;align-items:center;background:#ff5252;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:.5rem 0;padding:.25rem 0}.doom-line span{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff}.drag-drop-help,.help-button,.help-markdown{font-size:.75rem}.wysiwyg-help{background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:-.5rem;padding:.45rem .5rem}.wysiwyg-help a{display:inline-block}.drag-drop-help{color:#757575}.help-button:hover span,.help-markdown:hover span{transition:color .2s linear}.help-button:hover .icon,.help-markdown:hover .icon{fill:#8c9eff;transition:fill .2s linear}.help-button span,.help-markdown span{vertical-align:text-top}.help-button .icon,.help-markdown .icon{width:.9rem;height:.9rem;fill:#BDBDBD;margin-right:.2rem}.empty-filter,.empty-large,.empty-small{margin-top:4rem;text-align:center}.empty-filter img,.empty-large img,.empty-small img{margin-bottom:1rem;width:100%}.empty-filter .title,.empty-large .title,.empty-small .title{font-size:1.2rem;text-transform:uppercase}.empty-filter p,.empty-large p,.empty-small p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.empty-filter a,.empty-large a,.empty-small a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#3f51b5}.empty-small img{max-width:175px}.empty-large img{max-width:800px}.empty-filter{margin-top:1rem}.ticket-estimation .points-per-role{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.ticket-estimation .ticket-role-points{background:rgba(189,189,189,.2);color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.1rem;min-height:2rem;padding:.5rem 1rem;position:relative}.ticket-estimation .ticket-role-points.clickable.active,.ticket-estimation .ticket-role-points.clickable:hover{background:rgba(140,158,255,.9);color:#EEE}.ticket-estimation .ticket-role-points.clickable.active .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable.active .points,.ticket-estimation .ticket-role-points.clickable.active .role,.ticket-estimation .ticket-role-points.clickable:hover .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable:hover .points,.ticket-estimation .ticket-role-points.clickable:hover .role{color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points:last-child{background:rgba(26,35,126,.5);border-bottom:0;color:#EEE}.ticket-estimation .ticket-role-points:last-child .icon-arrow-bottom,.ticket-estimation .ticket-role-points:last-child .points,.ticket-estimation .ticket-role-points:last-child .role{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points .icon-arrow-down{fill:currentColor;height:.6rem;margin-left:.25rem;width:.6rem}.ticket-estimation .popover.fix:after,.ticket-estimation .popover:after{height:10px;transform:rotate(45deg);content:''}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0;z-index:99;position:absolute;font-size:.9rem;list-style-type:none}.ticket-estimation .ticket-role-points .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#424242}.ticket-estimation .ticket-role-points .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .popover{background:#212121;color:#fff;display:none;left:.5rem;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#212121;left:10px;position:absolute;top:-5px;width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#8c9eff;color:#fff}.ticket-estimation .popover.fix{background:#212121;color:#fff;display:none;left:-160px;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover.fix a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#8c9eff;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#212121;left:90%;position:absolute;top:-5px;width:10px}.history-tabs{background:#EEE;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.history-tabs a{display:inline-block;padding:.75rem 1rem}.history-tabs a:hover{color:#3f51b5}.history-tabs .history-tab{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid transparent;color:#BDBDBD;transition:all .1s linear}.history-tabs .history-tab.active{border-bottom:3px solid #424242;color:#424242}.history-tabs .order-comments{color:#424242}.level{background-color:#BDBDBD;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project{border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{font-size:.9rem;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-project .list-itemtype-track-likers.active .icon,.list-itemtype-project .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-project .icon{fill:#BDBDBD}.list-itemtype-project h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-project p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .icon-blocked-project{width:.75rem;height:.75rem}.list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-project-data-wrapper .icon-private{fill:#BDBDBD;height:22px;margin-left:.5rem;padding-top:.5rem;width:22px}.list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;width:3rem}.list-itemtype-project .list-itemtype-project-image img{width:100%}.list-itemtype-project .list-itemtype-project-members{-ms-flex-item-align:end;align-self:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-ticket .list-itemtype-avatar img,.list-itemtype-user .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-project .tag{-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket,.list-itemtype-user{border-bottom:1px solid #EEE;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-ms-flexbox;display:flex;position:relative}.list-itemtype-ticket .list-itemtype-track{font-size:.9rem;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-ticket .ticket-id,.list-itemtype-ticket .ticket-project{color:#BDBDBD}.list-itemtype-ticket .list-itemtype-track-likers.active .icon,.list-itemtype-ticket .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-ticket .icon{fill:#BDBDBD}.list-itemtype-ticket h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1rem}.list-itemtype-ticket p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-ticket .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-type{margin-left:.3rem;text-transform:uppercase}.list-itemtype-ticket .list-itemtype-ticket-data{-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-blocked{color:#f44336;margin-right:.25rem}.list-itemtype-user{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track{font-size:.9rem;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-user .list-itemtype-track-likers.active .icon,.list-itemtype-user .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-user .icon{fill:#BDBDBD}.list-itemtype-user h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-user p{margin-bottom:0}.list-itemtype-user .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .extra-info{font-size:.9rem;margin-top:.25rem}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:100%;-ms-flex-pack:center;justify-content:center;width:100%}.loader p{font-size:1.2rem;color:#757575;text-align:center}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{animation-duration:5s;animation-iteration-count:infinite;animation-name:loadBar;animation-timing-function:ease-in;background:#757575;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{animation-delay:0s;background:#ffc107}.loading-bar .item-1{animation-delay:1s;background:#009688}.loading-bar .item-2{animation-delay:2s;background:#e91e63}.loading-bar .item-3{animation-delay:3s;background:#9c27b0}.loading-bar .item-4{animation-delay:4s;background:#cddc39}.loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;transform-origin:32 32}.look-for-people{width:1rem;height:1rem;fill:#BDBDBD;margin-left:.25rem}.notification-message-success{background:rgba(140,158,255,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);right:-370px;top:2%;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{animation:animSlide 2s;animation-fill-mode:forwards;animation-iteration-count:1;opacity:1}.notification-message-success.inactive{animation:animSlideOut .5s;opacity:0;transform:none}.notification-message-success p{margin:0}.notification-message-success .warning{font-size:1.2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:1.2}@keyframes animSlide{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}100%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlideOut{0%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-message-error{background:rgba(244,67,54,.9);opacity:1;top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;transform:translateY(0);transition:all .6s ease-in-out}.notification-light,.notification-light.inactive{opacity:0;transform:translateY(-100%);transition:all .6s}.notification-message-error.inactive{transition:all .6s ease-in-out}.notification-message-error .icon-error{width:3rem;height:3rem;fill:#fff;margin-right:.5rem}.notification-message-error .warning{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:2.4rem}.notification-light p,.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-message-error .text p{margin:0}.notification-message-error .close{display:block;position:absolute;right:1rem;top:1rem}.notification-message-error .icon-close{cursor:pointer;fill:#fff}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-ms-flex-align:center;align-items:center;background:rgba(189,189,189,.95);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;position:absolute;top:0;width:100%;z-index:99999}.notification-light.active{opacity:1;transform:translateY(0);transition:all .6s}.notification-light p{margin:0}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{display:block;margin-right:1rem;width:2rem}.notification-light .close svg{fill:#fff}.notification-message-light-error{background:rgba(244,67,54,.8)}.paginator{margin:2rem 0}.paginator ul{display:-ms-flexbox;display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator a{background:#BDBDBD;color:#fff;padding:.5rem 1rem;transition:all .3s linear}.paginator a:hover{background:#212121;color:#fff;transition:all .3s linear}.paginator .active span{background:#8c9eff}.select-color,.select-color:after{background:#212121;position:absolute}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.select-color{color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;text-align:"center";border-radius:0 10px 10px 0;padding:15px}.select-color a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#8c9eff;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#BDBDBD;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color .empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative}.select-color .empty-color:after,.select-color .empty-color:before{content:"";width:2px;height:47px;background:#ff8282;position:absolute;top:0}.select-color .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.select-color .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background-color:#EEE;width:243px}.summary .description,.summary .number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.select-color input::-webkit-input-placeholder{color:#757575}.select-color input::-moz-placeholder{color:#757575}.select-color input:-moz-placeholder{color:#757575}.select-color input:-ms-input-placeholder{color:#757575}.select-color .selected-color{background:#BDBDBD;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.settings-nav .active{background:#fff}.summary{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:65px;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;overflow:hidden;padding:1rem}.summary .summary-stats{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#8c9eff}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{font-size:.9rem;line-height:1}.summary .stats{cursor:pointer;display:block;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .graph{fill:#8c9eff;transition:fill .2s}.summary .stats.active .graph,.summary .stats.active svg,.summary .stats:hover svg{fill:#3f51b5}.summary .stats svg{fill:#000;height:100%;max-height:2rem;max-width:2rem;transition:all .2s;width:100%}.summary .stats .graph{fill:#8a8a8a;transition:fill .2s}.summary .main-summary-stats{display:-ms-flexbox;display:flex;transform:translateY(0);transition:all .2s ease-in-out}.summary .show-role-points .points-per-role-stats{transform:translateY(-35px)}.summary .show-role-points .main-summary-stats{transform:translateY(-65px)}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#8c9eff;height:24px}.summary-progress-bar .defined-points{background:#ff5252;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#8c9eff;height:24px;position:absolute}.large-summary{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;padding:.75rem 1rem}.large-summary .stats-wrapper{padding-top:.35rem}.large-summary .large-summary-wrapper{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.large-summary .summary-progress-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding-top:.35rem}.large-summary .summary-progress-bar{-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats.summary-completed-points,.large-summary .summary-stats.summary-move-unfinished{border-right:1px solid #212121;margin-right:0;padding-right:1rem}.large-summary .summary-stats.summary-completed-points+.summary-stats,.large-summary .summary-stats.summary-move-unfinished+.summary-stats{border-left:1px solid #757575;margin-left:0;padding-left:1rem}.large-summary .icon{width:1.3rem;height:1.3rem;fill:currentColor;margin:.1rem .4rem 0 0;vertical-align:middle}.large-summary .icon.icon-stats{color:#3f51b5;float:right;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#8c9eff;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#8c9eff}.large-summary .icon.icon-stats.active:hover{color:#3f51b5;transition:color .3s linear}.large-summary .points-per-role-stats-content{display:-ms-flexbox;display:flex;padding-left:1rem}.large-summary .points-per-role-stats-content .summary-stats{padding:0}.large-summary .toggle-points-per-role{color:#fff;cursor:pointer}.large-summary .toggle-points-per-role svg{width:1rem;height:1rem}.large-summary .points-per-role-stats{margin-left:.5rem;transform:translateY(35px);transition:all .2s ease-in-out}.large-summary .points-per-role-stats .number{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.empty-burndown,.empty-burndown .title,.large-summary .points-per-role-stats .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.large-summary .points-per-role-stats .role{font-size:.75rem}.empty-burndown{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:rgba(26,35,126,.15);display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{width:4rem;height:4rem;fill:#1a237e;-ms-flex-preferred-size:4rem;flex-basis:4rem;-ms-flex-negative:0;flex-shrink:0;margin-right:2rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-ms-flex:1;flex:1}.empty-burndown .title{font-size:1.2rem;color:#1a237e;margin:0;text-transform:uppercase}.empty-burndown a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;animation:blink 2s infinite}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name,.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;transition:none}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-ms-flex-align:stretch;align-items:stretch;border-radius:4px;display:-ms-flexbox;display:flex;margin:0;padding:0}.track-button.active .track-inner{background:rgba(140,158,255,.4)}.track-button.active .icon{fill:#3f51b5}.track-button.active .track-button-counter{background:rgba(140,158,255,.6)}.track-button.is-hover .track-inner{background:#f77066;color:#EEE;transition:background .2s}.track-button.is-hover .icon{fill:#ff5252}.track-button.is-hover .track-button-counter{background:#f44336;color:#EEE;transition:background .2s}.track-button .watch-options-arrow{margin-left:auto}.track-button .icon-arrow-down{width:.75rem;height:.75rem}.track-inner{-ms-flex-align:center;align-items:center;background:#EEE;border-radius:4px 0 0 4px;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:start;justify-content:flex-start;min-width:140px;padding:.25rem 1rem}.track-inner:hover{background:#e1e1e1;transition:background .3s}.track-icon{fill:#424242;margin-right:.5rem;position:relative;top:2px}.track-button-counter{-ms-flex-align:center;align-items:center;background:#e1e1e1;border-radius:0 4px 4px 0;padding:.25rem .75rem}.contact-team{background:#EEE;border-radius:4px;padding:.25rem .75rem}.contact-team:hover{background:#e1e1e1;transition:background .3s}.watch-options{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.watch-options li{margin:0}.assigned-to-list,.ticket-assigned-users,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{border-bottom:1px solid rgba(189,189,189,.3);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.assigned-to-list .user-list-single,.upvote-btn{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox}.watch-options a.active{color:#8c9eff}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check svg{fill:#8c9eff}.upvote-btn{-ms-flex-align:stretch;align-items:stretch;display:flex;-ms-flex:0;flex:0;-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#BDBDBD;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#1a237e;transition:background .3s}.upvote-btn a:hover path{fill:#1a237e}.upvote-btn a.active{background:rgba(140,158,255,.2);color:#3f51b5;transition:all .3s}.upvote-btn a.active svg{fill:#3f51b5}.upvote-btn a.is-hover{background:#f44336;color:#EEE}.upvote-btn a.is-hover svg{fill:#ff5252;transform:rotate(180deg);transition:all .3s}.upvote-btn svg{fill:#BDBDBD;height:1rem;width:1rem}.assigned-to-list .user-list-avatar img,.ticket-assigned-users .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.upvote-btn span{display:block}.assigned-to-list .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #EEE;display:flex;padding:.25rem 0;vertical-align:middle}.assigned-to-list .user-list-multiple,.ticket-watchers .user-list-single{-ms-flex-line-pack:center;padding:.25rem 0;vertical-align:middle;align-content:center}.assigned-to-list .user-list-single:last-child{border:0}.assigned-to-list .user-list-multiple{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex}.assigned-to-list .user-list-multiple.selected,.assigned-to-list .user-list-multiple:hover,.assigned-to-list .user-list-single.is-active,.assigned-to-list .user-list-single.selected,.assigned-to-list .user-list-single:hover{background:rgba(255,255,255,.3);cursor:pointer}.assigned-to-list .user-list-multiple:last-child{border:0}.assigned-to-list .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-name{color:#424242;margin-left:.5rem}.assigned-to-list .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{margin-bottom:1rem;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-single .remove-assigned-to{display:block;fill:#424242;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-single .remove-assigned-to:hover{fill:#f44336}.assigned-to-list .user-list-multiple:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-multiple.is-active{background:rgba(255,255,255,.3);cursor:pointer;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-multiple .remove-assigned-to{display:block;fill:#424242;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-multiple .remove-assigned-to:hover{fill:#f44336}.ticket-watchers .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex}.ticket-watchers .user-list-single:last-child{border:0}.ticket-watchers .user-list-multiple{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.25rem 0;vertical-align:middle}.ticket-assigned-users .user-list-multiple,.ticket-assigned-users .user-list-single{background:0 0;display:-ms-flexbox;padding:.25rem 0;align-content:center;vertical-align:middle}.ticket-watchers .user-list-multiple:last-child{border:0}.ticket-watchers .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-watchers .user-list-name{color:#424242;margin-left:.5rem;-ms-flex:1;flex:1;position:relative}.ticket-watchers .user-list-single:hover .delete-watcher{opacity:1;transition:opacity .2s ease-in}.ticket-watchers .delete-watcher{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-watchers .delete-watcher:hover{fill:#f44336;transition:color .3s ease-in}.ticket-assigned-users .user-list-single{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:flex}.ticket-assigned-users .user-list-single:last-child{border:0}.ticket-assigned-users .user-list-multiple{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:flex}.ticket-assigned-users .user-list-multiple:last-child{border:0}.ticket-assigned-users .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-assigned-users .user-list-single{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-users .user-list-single:hover .remove-user{opacity:1;transition:opacity .2s ease-in}.ticket-assigned-users .user-list-name{color:#424242;margin-left:.5rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex:1;flex:1;position:relative}.admin-functionalities .module-name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .remove-user{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-assigned-users .remove-user:hover{fill:#f44336;transition:color .3s ease-in}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{color:#BDBDBD;margin-bottom:2rem}.admin-common .admin-subtitle a{color:#3f51b5}.admin-common .admin-subtitle a:hover{color:#8c9eff}.admin-common .total{font-size:1.2rem;-ms-flex-align:center;align-items:center;background-color:#EEE;color:#424242;display:-ms-flexbox;display:flex;padding:.3rem 1rem}.admin-common .total:hover .icon-edit{opacity:1;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0}.custom-fields-table .table-header{border-bottom:3px solid #EEE}.custom-fields-table .table-header .custom-description,.custom-fields-table .table-header .custom-name{padding-left:1.1rem}.custom-fields-table .table-body .row:hover{background:rgba(140,158,255,.05);cursor:move;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag{opacity:1;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .single-custom-field{border-bottom:1px solid #EEE;color:#757575}.custom-fields-table .js-view-custom-field{padding:.75rem 0}.custom-fields-table .js-view-custom-field .custom-extra-attr-wrapper{margin-left:1em}.custom-fields-table .icon-drag{fill:#BDBDBD;opacity:0;padding:0 .25rem 0 .1rem;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{margin-right:.5rem}.custom-fields-table .custom-name{-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-name a{padding:.5em}.custom-fields-table .custom-name svg{height:12px;width:12px}.custom-fields-table .custom-description{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:50%;flex-basis:50%;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-ms-flex-preferred-size:12%;flex-basis:12%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;opacity:0;text-align:center}.custom-fields-table .custom-options svg{cursor:pointer;fill:#BDBDBD;margin-right:.5rem;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options svg:hover{fill:#3f51b5;transition:color .2s linear}.custom-fields-table .custom-options svg.icon-close,.custom-fields-table .custom-options svg.icon-trash{fill:#ff5252}.custom-fields-table .custom-options-wrapper{opacity:0;transition:opacity .3s linear}.custom-fields-table .custom-options-wrapper:hover,.custom-fields-table .js-form .custom-options-wrapper{opacity:1}.custom-fields-table .custom-options-wrapper a{display:inline-block}.custom-fields-table .custom-field-extra{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#BDBDBD;font-size:.95em;padding:.25em 1.5em}.custom-fields-table .custom-extra-actions,.custom-fields-table .js-view-custom-field-extra{padding:.5em}.custom-fields-table .js-edit-custom-field{margin-left:.4rem}.custom-fields-table .custom-extra-attr-wrapper{-ms-flex-positive:1;flex-grow:1}.custom-fields-table .custom-extra-actions a{color:#3f51b5}.custom-fields-table .custom-extra-actions svg{height:10px;margin-right:.25em;width:10px}.admin-functionalities .module-container{max-width:900px;width:100%}.admin-project-export-result .spin img,.project-details .loading-spinner{max-height:1rem;max-width:1rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.admin-functionalities .module{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:1rem 0}.admin-functionalities .module.active .module-icon .icon,.admin-functionalities .module.active .module-name{color:#3f51b5;fill:#3f51b5}.admin-functionalities .module-icon{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem 0 0}.admin-functionalities .module-icon .icon{width:3rem;height:3rem;fill:#BDBDBD}.admin-functionalities .module-name{font-size:1.2rem;color:#BDBDBD;-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem}.admin-functionalities .module-desc{font-size:.9rem;color:#BDBDBD;-ms-flex:1;flex:1;margin:0 2rem 0 0}.admin-functionalities .module-desc p{margin:0}.admin-functionalities .module-desc-options,.admin-functionalities .videoconference-attributes{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-top:.5rem}.admin-functionalities .module-desc-options .options,.admin-functionalities .videoconference-attributes .options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:2.5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .module-desc-options fieldset,.admin-functionalities .videoconference-attributes .icon,.admin-functionalities .videoconference-attributes fieldset{margin:0 .5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .videoconference-attributes .icon{fill:#BDBDBD}.admin-functionalities .module-desc-options .icon:hover,.admin-functionalities .videoconference-attributes .icon:hover{fill:#3f51b5}.admin-functionalities .module-scrum .options{-ms-flex-item-align:end;align-self:flex-end}.admin-functionalities .module-videoconference .options{-ms-flex-item-align:start;align-self:flex-start}.admin-membership-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.admin-membership-table .avatar img{border-radius:4px;-ms-flex-positive:0;flex-grow:0;margin:0 .5rem 0 .3rem;width:50px}.admin-membership-table .avatar .data{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575;margin-top:.2rem}.admin-membership-table .avatar .pending,.admin-menu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-membership-table .avatar .pending{color:#ff5252;display:inline-block;padding-left:.3rem}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#EEE}.admin-membership-table .resend{background-color:#3f51b5;color:#fff}.admin-membership-table .resend:hover{background-color:#8c9eff;color:#fff;transition:background-color .3s linear}.admin-membership-table .delete{fill:#BDBDBD;transition:fill .2s}.admin-membership-table .delete:hover{fill:#f44336}.admin-membership-table .pending{color:#ff5252}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-ms-flex-preferred-size:210px;flex-basis:210px;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.admin-menu li{border-bottom:1px solid #d5d5d5;text-transform:uppercase}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{margin:0 auto;transform-origin:32 32;width:100%}.admin-project-export-result h3{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.2rem;background:#f5f5f5;color:#757575;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#BDBDBD;margin:.5rem 0;text-align:center}.project-details .delete-project:hover,.project-details .use-default-image:hover{color:#f44336}.project-details form{display:-ms-flexbox;display:flex}.project-details fieldset{margin-bottom:1rem}.project-details label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.project-details .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.project-details .project-details-image .image{width:100%}.project-details .change-image{display:block}.project-details .image-container{position:relative;margin-bottom:.5rem}.project-details .loading-overlay{display:none}.project-details .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.project-details .loading-spinner{margin:0 auto;border:0;transform-origin:center center}.project-details .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.project-details .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.project-details form{display:block}}.project-details .get-feedback,.project-details .looking-for-people{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid #EEE;padding:1rem 0}.project-details .looking-for-people{border-top:1px solid #EEE;margin-bottom:0}.project-details .get-feedback-inner,.project-details .looking-for-people-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.project-details .get-feedback-inner svg,.project-details .looking-for-people-selector svg{width:1rem;height:1rem;fill:#BDBDBD;margin-left:.5rem}.project-details .get-feedback-inner .check,.project-details .looking-for-people-selector .check{margin-left:auto}.project-details .looking-for-people-reason{display:block;margin-top:1rem}.project-details .looking-for-people-reason.ng-hide-remove-active{animation:dropdownFade .3s}.project-details .looking-for-people-reason.ng-hide-add-active{animation:dropdownFade .2s reverse;animation-delay:.1s}.project-details .delete-project{font-size:1rem;display:block;margin-top:1rem;text-align:right}.project-details .private-or-public{font-size:1rem;color:#BDBDBD;margin-bottom:2rem}.project-details .private-or-public svg{width:1.1rem;height:1.1rem;fill:#BDBDBD;margin-right:.5rem;vertical-align:middle}.project-privacy-settings{display:-ms-flexbox;display:flex;margin-bottom:.5rem}.project-privacy-settings .privacy-option{-ms-flex:1;flex:1;transition:.2 linear}.project-privacy-settings .privacy-option:first-child{margin-right:.5rem}.project-privacy-settings input[type=radio],.project-privacy-settings input[type=text]{display:none}.project-privacy-settings .privacy-project:checked~input[type=text],tg-admin-project-restrictions span{display:block}.project-privacy-settings label{background:#f5f5f5;color:#424242;text-align:center;transition:all .2s linear}.project-privacy-settings label:hover{background:rgba(140,158,255,.4);color:#424242}.project-privacy-settings label:hover svg{fill:#424242}.project-privacy-settings label svg{width:1.1rem;height:1.1rem;fill:#424242;margin-left:.5rem;vertical-align:middle}.project-privacy-settings .privacy-project:checked+label{background:#8c9eff;color:#fff}.project-privacy-settings .privacy-project:checked+label svg{width:1.1rem;height:1.1rem;fill:#fff}.project-privacy-settings .privacy-project[disabled]+label{background:#f5f5f5;box-shadow:none;color:#BDBDBD;cursor:not-allowed;opacity:.65}.project-privacy-settings .privacy-project[disabled]+label:hover{background:#f5f5f5;color:#BDBDBD}tg-admin-project-restrictions p{font-size:1rem;text-align:center}tg-admin-project-restrictions a{color:#3f51b5}tg-admin-project-restrictions span:first-child::before{border:1px solid #ff5252;border-radius:6px;color:#ff5252;content:'!';display:inline-block;height:12px;line-height:12px;margin-right:.5rem;text-align:center;width:12px}.admin-project-profile-owner-actions{-ms-flex-align:center;align-items:center;border-top:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem}.admin-project-profile-owner-actions a{color:#3f51b5}.admin-project-profile-owner-actions a:hover{color:#8c9eff;transition:color .2s}.admin-project-profile-owner-actions img{width:100%}.admin-project-profile-owner-actions .owner-info{-ms-flex:1;flex:1;padding-left:.5rem}.admin-project-profile-owner-actions .owner-info-title{color:#BDBDBD}.admin-project-profile-owner-actions .owner-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-project-profile-owner-actions .owner-avatar{width:2.5rem}.admin-project-profile-owner-actions .request{-ms-flex-negative:0;flex-shrink:0}.admin-roles .save{display:inline-block}.admin-roles .role-name{font-size:2rem;color:#424242}.admin-roles .icon:hover{fill:#3f51b5;transition:fill .2s linear}.admin-roles .icon-edit{cursor:pointer;fill:#BDBDBD;margin-left:.5rem;opacity:0;transition:opacity .2s linear}.admin-roles .icon-save{fill:#BDBDBD;margin-left:.5rem;transition:fill .2s linear}.admin-roles .edit-role{background-color:#EEE;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .any-computable-role{background:#f44336;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{font-size:.9rem;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category.external-user{-ms-flex-pack:start;justify-content:flex-start}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.admin-submenu ul a span,.admin-webhooks .webhook-url span{max-width:85%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admin-submenu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD;text-transform:uppercase}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#1d278b;color:#fff;transition:all .2s}.admin-submenu ul a.active{background:#232fa8;color:#fff;transition:all .2s}.admin-submenu ul a span{display:block}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#212121}.admin-webhooks .webhooks-table{margin-bottom:1rem}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;transition:opacity .2s linear}.admin-webhooks .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD}.admin-webhooks .table-body .webhook-service{color:#757575}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #EEE}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-negative:0;flex-shrink:0}.admin-webhooks .webhook-url{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.admin-webhooks .webhook-url span{word-wrap:normal;color:#BDBDBD;display:inline-block;vertical-align:middle}.admin-webhooks .webhook-url a{color:#3f51b5;cursor:pointer;margin-left:.5rem;white-space:nowrap}.admin-webhooks .webhook-url a:hover{color:#8c9eff}.admin-webhooks .webhook-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.admin-webhooks .webhook-options a{cursor:pointer;display:inline-block;margin-right:.5rem}.admin-webhooks .webhook-options svg{fill:#BDBDBD}.admin-webhooks .webhook-options svg:hover{fill:#3f51b5;transition:fill .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{display:none}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #EEE;margin-left:22%}.admin-webhooks .history-single{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(140,158,255,.1);transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{transform:rotate(180deg);transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{transform:rotate(0);transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#757575;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#8c9eff}.admin-webhooks .history-response-icon.history-error{background:#f44336}.admin-webhooks .history-single-response{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#BDBDBD}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-header a{font-size:.9rem;color:#BDBDBD}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#8c9eff;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{font-family:'courier new',monospace;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#EEE;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{font-size:.9rem;color:#BDBDBD;-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace;border:0;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-contrib h2,.admin-contrib label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #EEE;margin-bottom:1rem}.admin-contrib input{margin-bottom:1rem}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #BDBDBD;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:0 1rem}.admin-contrib .check-item{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0;margin-bottom:1rem}.contrib-form-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.contrib-form-wrapper input{margin:0}.contrib-form-wrapper .contrib-input{border:0;-ms-flex:5;flex:5;margin:0}.contrib-form-wrapper .contrib-test{border:0;-ms-flex:1;flex:1;margin:0 0 0 1rem}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field a{font-size:.9rem;margin-left:1em;white-space:nowrap}.project-csv .csv-regenerate-field .icon:not(.icon-clipboard){fill:currentColor;height:.9rem;margin-right:.3rem;vertical-align:middle;width:.9rem}.project-csv .field-with-options{display:-ms-flexbox;display:flex;width:100%}.project-csv .field-with-options input{-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #BDBDBD;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{cursor:pointer;fill:#BDBDBD;opacity:0}.project-values-row .icon:hover{fill:#424242;transition:all .2s ease-in}.project-values-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #EEE}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#fff;cursor:move;transition:background .2s ease-in}.project-values-body .project-values-row:hover .icon{opacity:1;transition:opacity .2s ease-in}.project-values-name{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-values-value{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{display:inline-block;margin-right:.5rem}.project-values-settings svg.icon-trash{fill:#ff5252}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p{color:#424242;margin-bottom:.5rem;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #BDBDBD;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{font-size:.9rem;opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;transition:opacity .2s linear}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-password-text,.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;transition:opacity .3s linear}.login-form-container .forgot-pass{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.6rem;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#424242;transition:color .3s linear}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin:1rem 0;text-align:center}.register-form-container .register-text{font-size:.9rem}.backlog-table-body,.backlog-table-header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #BDBDBD;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-ms-flex-preferred-size:25px;flex-basis:25px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{width:100%}.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .votes,.backlog-table-header .votes{color:#757575;-ms-flex-preferred-size:65px;flex-basis:65px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.backlog-table-body .votes.inactive,.backlog-table-header .votes.inactive{color:#BDBDBD}.backlog-table-body .votes.inactive svg,.backlog-table-header .votes.inactive svg{fill:#BDBDBD}.backlog-table-body .votes.is-voted,.backlog-table-header .votes.is-voted{color:#8c9eff;fill:#8c9eff}.backlog-table-body .votes svg,.backlog-table-header .votes svg{fill:#757575;height:.75rem;margin-right:.25rem;vertical-align:middle;width:.75rem}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.2rem}.backlog-table-body .pop-points,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-header .pop-points,.backlog-table-header .pop-role,.backlog-table-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;position:absolute;z-index:99;text-align:"center";font-size:.9rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#212121;color:#fff;display:none;left:65%;padding:10px 1rem 10px 10px;top:0;width:200px}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#212121;color:#fff;display:none;left:65%;padding:10px;top:0;width:200px}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#8c9eff;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#8c9eff;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#212121;bottom:10px;color:#fff;display:none;left:30px;padding:10px 3rem 10px 10px;width:150px}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:none;left:30px;list-style-type:none;margin:0;z-index:99;text-align:"center";font-size:.9rem;background:#212121;position:absolute}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#8c9eff;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{color:#fff;padding:10px;top:0;width:200px}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{bottom:0;color:#fff;padding:10px;top:auto;width:200px}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#8c9eff;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#8c9eff;color:#fff}.backlog-table-header .backlog-table-title{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;border-bottom:2px solid #BDBDBD;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:1rem}.backlog-table-header .points{cursor:pointer}.backlog-table-header .header-points span{color:#BDBDBD}.backlog-table-body.forecasted-stories{border:.5rem solid #f5f5f5;border-bottom:0}.backlog-table-body .row{border-bottom:1px solid #e4e4e4;cursor:move;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#fff;transition:background .2s ease-in;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag,.backlog-table-body .row:hover .us-settings{opacity:1;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.gu-mirror{background:#fff;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .row .icon-arrow-down{fill:#BDBDBD;height:.7rem;width:.7rem}.backlog-table-body .gu-transit{background:#EEE}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .sortable-placeholder *{display:none}.backlog-table-body .is-checked{background:#fff;transition:background .2s ease-in}.backlog-table-body input:checked{color:#8c9eff;transition:color .2s ease-in}.backlog-table-body .user-story-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:inline-block;-ms-flex:1;flex:1}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.backlog-table-body .user-story-name span{line-height:1.5}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{font-size:.9rem;margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff5252;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:#f44336;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .us-settings{-ms-flex-negative:0;flex-shrink:0;margin-left:2rem;opacity:0}.backlog-table-body .us-settings svg{fill:#BDBDBD;margin-right:.5rem;transition:fill .2s ease-in}.backlog-table-body .us-settings svg:hover{fill:#8c9eff}.backlog-table-body .icon-drag{cursor:move;fill:#BDBDBD;opacity:0;padding:.1rem}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.backlog-table-body .us-status tg-svg{display:inline-block}.backlog-table-body .loading{margin:2% auto;width:3rem}.backlog-table-body .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.empty-large .row{display:none}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#3f51b5;padding:.25rem .25rem 0;transition:background .2s}.sprints .add-sprint:hover{background:#8c9eff}.sprints .add-sprint svg{fill:#EEE;height:1.4rem;width:1.5rem}.sprints .filter-closed-sprints{font-size:.9rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading{text-align:center}.sprints .loading-spinner{border:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;transform-origin:center center}.sprints .sprint-name a{font-size:1rem;display:inline-block;margin-right:.5rem}.sprints .sprint{margin-bottom:2rem}.sprints .sprint header{position:relative}.sprints .sprint:hover .edit-sprint{opacity:1;transition:opacity .2s ease-in}.sprints .sprint .edit-sprint{opacity:0;position:absolute;right:0;top:0;transition:opacity .2s ease-in;vertical-align:baseline}.lightbox-generic-form .settings .iocaine,.lightbox-generic-form .settings .requirement,.ticket-assigned-to .self-assign .icon,.ticket-assigned-to .user-assigned .icon,.ticket-assigned-users .self-assign .icon,.ticket-assigned-users .user-assigned .icon{vertical-align:middle}.sprints .sprint svg{fill:#BDBDBD}.sprints .sprint svg:hover{fill:#3f51b5;transition:fill .2s ease-in}.sprints .sprint .number{font-size:.75rem;margin-right:.2rem}.sprints .sprint .description{font-size:.75rem;line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{font-size:.9rem;color:#BDBDBD;-ms-flex:1;flex:1}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint ul{margin:0;text-align:right}.sprints .compact-sprint{transform:rotate(0);transition:all .2s}.sprints .compact-sprint.active{transform:rotate(90deg);transition:all .2s}.sprints .compact-sprint:hover .icon{fill:#8c9eff;transition:color .2s}.sprints .sprint-progress-bar{background:#BDBDBD;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#3f51b5;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table{min-height:2rem}.sprints .sprint-table .sprint-empty{background:#e1e1e1;border:2px dashed #d7d7d7;color:#757575;padding:1rem;text-align:center}.sprints .sprint-table .row{border-bottom:1px solid #BDBDBD;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:rgba(189,189,189,.2);cursor:move;transition:background .2s ease-in}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.readonly{cursor:auto}.sprints .sprint-table .row.ui-sortable-helper{background:#fff;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.sprints .sprint-table .gu-transit{background:#dcdcdc;height:40px}.sprints .sprint-table .gu-transit *{display:none}.sprints .sprint-table .column-us{font-size:.9rem;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{display:block}.sprints .sprint-table .us-name.closed{color:#cacaca}.sprints .sprint-table .us-name.blocked{color:#f44336}.sprints .sprint-table .column-points{-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#cacaca}.sprints .sprint-table .column-points.blocked{color:#f44336}.sprints .sprint-table.sprint-empty-wrapper .row{display:none}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input{display:none}.sprints .us-item-row .user-story-name{font-size:.9rem;line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#BDBDBD}.sprint-closed .sprint-progress-bar .current-progress{background:#a4a4a4}.sprint-closed .button-gray{background:#BDBDBD}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{font-size:1.2rem;margin-bottom:.5rem;text-transform:uppercase}.sprints-empty a{color:#3f51b5}.taskboard-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.taskboard-table.zoom-0 .task-colum-name span{padding-right:1rem}.taskboard-table .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;background:#f5f5f5;border-top:3px solid #BDBDBD;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;text-transform:uppercase;width:300px}.taskboard-table .task-colum-name:last-child{margin-right:0}.taskboard-table .task-colum-name.column-fold{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table .task-colum-name.column-fold span{display:none}.taskboard-table .task-colum-name.column-fold .hfold,.taskboard-table .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table .task-colum-name span{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.taskboard-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;min-height:2.4rem;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.taskboard-table-header tg-svg{display:block;margin-right:.3rem}.taskboard-table-header tg-svg:hover{cursor:pointer}.taskboard-table-header tg-svg.hfold,.taskboard-table-header tg-svg.hunfold{display:inline-block;transform:rotate(90deg)}.taskboard-table-body{-ms-flex:1;flex:1;margin-bottom:5rem;overflow:auto;width:100%}.taskboard-table-body .taskboard-column{-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:300px;width:300px}.taskboard-table-body .column-fold .card .card-owner img,.taskboard-table-body .row-fold .card .card-owner img{height:1.3rem;margin-right:0;width:1.3rem}.taskboard-table-body .taskboard-column:last-child{margin-right:0}.taskboard-table-body .row-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .row-fold .card .card-data,.taskboard-table-body .row-fold .card .card-owner-actions,.taskboard-table-body .row-fold .card .card-owner-name,.taskboard-table-body .row-fold .card .card-statistics,.taskboard-table-body .row-fold .card .card-tag,.taskboard-table-body .row-fold .card .card-title,.taskboard-table-body .row-fold .card .card-unfold,.taskboard-table-body .row-fold .card tg-card-slideshow{display:none}.taskboard-table-body .row-fold .taskboard-column,.taskboard-table-body .row-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .card .card-data,.taskboard-table-body .column-fold .card .card-owner-actions,.taskboard-table-body .column-fold .card .card-owner-name,.taskboard-table-body .column-fold .card .card-statistics,.taskboard-table-body .column-fold .card .card-tag,.taskboard-table-body .column-fold .card .card-title,.taskboard-table-body .column-fold .card .card-unfold,.taskboard-table-body .column-fold .card tg-card-slideshow,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table-body .column-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .column-fold .taskboard-column,.taskboard-table-body .column-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to{display:none}.taskboard-table-body .taskboard-row{display:-ms-flexbox;display:flex;margin-bottom:.25rem;min-height:10rem;width:100%}.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box{background:rgba(244,67,54,.6)}.taskboard-table-body .taskboard-row.blocked .points-value,.taskboard-table-body .taskboard-row.blocked .points-value:hover,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg:hover{color:#fff;fill:#fff;transition:color .3s linear}.taskboard-table-body .taskboard-row.blocked .taskboard-cards-box{background:rgba(244,67,54,.1)}.taskboard-table-body .taskboard-row.row-fold{min-height:0}.taskboard-table-body .taskboard-row.row-fold .us-title{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.ticket-assigned-to .loading-spinner,.ticket-assigned-users .loading-spinner{transform-origin:32 32;max-height:2rem;max-width:2rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.taskboard-table-body .taskboard-row.row-fold .icon-add,.taskboard-table-body .taskboard-row.row-fold .icon-bulk,.taskboard-table-body .taskboard-row.row-fold .points-value,.taskboard-table-body .taskboard-row.row-fold .us-data{display:none}.taskboard-table-body .taskboard-row.issues-row{margin-top:1em}.taskboard-table-body .taskboard-row.issues-row .taskboard-cards-box{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:start;align-items:flex-start;border-top:3px solid #BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.taskboard-table-body .taskboard-row.issues-row .taskboard-row-title-box{padding:0}.taskboard-table-body .taskboard-row.issues-row .task-colum-name{-ms-flex-pack:start;justify-content:flex-start;padding:.5rem .5rem .5rem 2em}.taskboard-table-body .taskboard-row.issues-row .row-title{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-to,.ticket-assigned-users{-ms-flex-align:center;border-bottom:1px solid #BDBDBD;border-top:1px solid #BDBDBD}.taskboard-table-body .taskboard-row.issues-row .toggle-fold{display:block;left:.5rem;position:absolute;top:-.4rem}.taskboard-table-body .taskboard-row.issues-row .card{cursor:default;height:auto;margin:.3rem .1rem .3rem .5rem}.taskboard-table-body .taskboard-row.issues-row:not(.row-fold) .card{width:280px}.taskboard-table-body .taskboard-row-title-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-row-title-box{position:relative}.taskboard-row-title-box .us-title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-row-title-box .points-value{font-size:.9rem;color:#BDBDBD}.taskboard-row-title-box .points-value span{margin-right:.1rem}.taskboard-row-title-box .us-data{display:-ms-flexbox;display:flex}.taskboard-row-title-box .due-date tg-svg{position:inherit}.taskboard-row-title-box tg-svg{cursor:pointer;display:block;position:absolute;right:.5rem;top:.7rem}.taskboard-row-title-box tg-svg:hover svg{fill:#3f51b5}.taskboard-row-title-box tg-svg.add-action{right:2rem}.taskboard-row-title-box tg-svg.fold-action{left:0;right:inherit;top:1rem}.ticket-assigned-to{align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:1rem 0;position:relative}.ticket-assigned-to:hover .remove-user{opacity:1;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{margin:1rem auto}.ticket-assigned-to .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-to .user-avatar .iocaine-symbol svg{background:#424242;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.ticket-assigned-to .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;margin:.2rem 0 .25rem}.ticket-assigned-to .assigned-to .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-to .assigned-to .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-to .assigned-to .self-assign,.ticket-assigned-to .assigned-to .user-assigned{color:#3f51b5;cursor:default}.ticket-assigned-to .assigned-to .self-assign:hover,.ticket-assigned-to .assigned-to .user-assigned:hover,.ticket-assigned-to .remove-user:hover,.ticket-assigned-to .self-assign.editable:hover,.ticket-assigned-to .user-assigned.editable:hover,.ticket-assigned-users .self-assign.editable:hover,.ticket-assigned-users .user-assigned.editable:hover{cursor:pointer}.ticket-assigned-to .assigned-to .self-assign .icon,.ticket-assigned-to .assigned-to .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-to .remove-user{fill:#757575;opacity:0;position:absolute;right:.5rem;top:2rem}.ticket-assigned-to .remove-user:hover{fill:#f44336;transition:fill .2s}.ticket-assigned-to .self-assign,.ticket-assigned-to .user-assigned{color:#3f51b5}.ticket-assigned-to .self-assign:hover,.ticket-assigned-to .user-assigned:hover{color:currentColor}.ticket-assigned-to .self-assign.editable,.ticket-assigned-to .user-assigned.editable{color:#3f51b5}.ticket-assigned-users .assigned-title,.ticket-assigned-users .tg-add-assigned span{color:#757575;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-assigned-users{align-items:center;margin-bottom:1rem;padding:.5rem 0;position:relative}.ticket-assigned-users .loading-spinner{margin:1rem auto}.ticket-assigned-users .assigned-title{display:block;margin:.2rem 0 .25rem}.ticket-assigned-users .tg-assigned-users{-ms-flex-align:center;align-items:center;position:relative}.ticket-assigned-users .tg-add-assigned{margin-top:.25rem}.ticket-assigned-users .tg-add-assigned .add-assigned{fill:#757575;opacity:1;right:.5rem;top:2rem}.ticket-assigned-users .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:#f44336;transition:fill .2s}.ticket-assigned-users .tg-add-assigned span{margin:.2rem .5rem}.ticket-assigned-users .assigned-users-options{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .assigned-users-options a{margin-right:.2rem}.ticket-assigned-users .self-assign,.ticket-assigned-users .self-assign.editable,.ticket-assigned-users .user-assigned,.ticket-assigned-users .user-assigned.editable{color:#3f51b5}.ticket-assigned-users .not-assigned-users{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;margin:.2rem 0 .25rem}.colors-table .table-header,.duty-custom-fields .custom-fields-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .not-assigned-users .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-users .not-assigned-users .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-users .not-assigned-users .self-assign,.ticket-assigned-users .not-assigned-users .user-assigned{color:#3f51b5;cursor:default}.colors-table .row.edition .current-color,.ticket-assigned-users .not-assigned-users .self-assign:hover,.ticket-assigned-users .not-assigned-users .user-assigned:hover{cursor:pointer}.ticket-assigned-users .not-assigned-users .self-assign .icon,.ticket-assigned-users .not-assigned-users .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-users .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-users .user-avatar img{width:100%}.ticket-assigned-users .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-users .user-avatar .iocaine-symbol svg{background:#424242;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.category-config{border-bottom:1px solid #BDBDBD}.category-config:first-child{border-top:1px solid #BDBDBD}.category-config .resume{-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:-ms-flexbox;display:flex;padding:1rem;position:relative}.category-config .resume.open-drawer .icon{transform:rotate(90deg)}.category-config .icon{transform:rotate(0);transition:all .4s}.category-config .resume-title{width:280px}.category-config .count{color:#BDBDBD;float:left;padding-right:5px}.category-config .summary-role{-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#BDBDBD;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#3f51b5}.category-config .summary-role .role-summary-single.inactive{background:#757575}.category-config .category-items{max-height:0;transition:max-height .5s ease-in;overflow:hidden;background-color:#EEE;width:100%}.colors-table .table-header .row:hover,.colors-table .table-header:hover{background:0 0}.category-config .category-items.open{transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #EEE}.colors-table .table-header .row{padding-left:50px}.colors-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:last-child{border:0}.colors-table .row.edition{padding-left:3rem}.colors-table .row.hidden{display:none}.colors-table .row:hover{background:rgba(255,255,255,.2);cursor:move;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;transition:opacity .3s linear}.colors-table .row.no-draggable{padding-left:50px}.colors-table .row.no-draggable:hover{cursor:auto}.colors-table .row .color-column{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .before-after-column,.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit,.colors-table .row .thresold-column{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.colors-table .row .before-after-column{padding:0 10px}.colors-table .row .color-name,.colors-table .row .status-name{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 10px;position:relative}.colors-table .row .color-name span,.colors-table .row .status-name span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.colors-table .row .color-name{-ms-flex-preferred-size:100px;flex-basis:100px}.colors-table .row .status-slug{display:none;-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:6;flex-grow:6;padding:0 10px}@media (min-width:1400px){.colors-table .row .status-slug{display:block}}.colors-table .row .status-slug span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:100px;text-align:center}.colors-table .row .status-wip-limit{display:none;max-width:100px;padding:0 0 0 10px;text-align:center}@media (min-width:1400px){.colors-table .row .status-wip-limit{display:block}}.colors-table .before-after-selector{display:-ms-flexbox;display:flex;font-size:.9rem}.colors-table .before-after-selector input{display:none}.colors-table .before-after-selector input+label{background:rgba(238,238,238,.7);cursor:pointer;display:block;padding:.5rem .25rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.colors-table .before-after-selector input+label:hover{background:rgba(140,158,255,.3);transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single{-ms-flex:1;flex:1;margin-right:.25rem}.colors-table .before-after-selector .before-after-selector-single:last-child{margin-right:0}.colors-table .before-after-selector .before-after-selector-single.checked label{background:#8c9eff;color:#fff;transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single.checked label:hover{background:#8c9eff}.colors-table .options-column a{cursor:pointer;display:inline-block}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#EEE;border-radius:2px;height:40px;width:40px}.colors-table .icon{cursor:pointer;fill:#BDBDBD;margin-right:1rem;opacity:0}.colors-table .icon:hover{fill:#8c9eff;transition:all .2s ease-in}.colors-table .icon.icon-check{cursor:default;fill:#3f51b5;opacity:1}.colors-table .icon.icon-merge{cursor:default;opacity:1}.colors-table .icon.icon-search{cursor:none;fill:#3f51b5;opacity:1}.colors-table .icon.icon-drag{cursor:move}.colors-table .icon.icon-trash{fill:#ff5252}.colors-table .gu-mirror{background:#fff;opacity:1}.contrib-plugins-wrapper{margin:1rem 0 2rem}.contrib-plugins-wrapper label{font-size:.9rem;display:block;margin-bottom:.5rem}.duty-custom-fields{margin-bottom:2rem}.duty-custom-fields .custom-fields-header{-ms-flex-line-pack:justify;align-content:space-between;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value,.lightbox h2,.lightbox-create-edit .tg-add-assigned span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header .icon{cursor:pointer}.duty-custom-fields .custom-fields-header .collapse{display:block;transform:rotate(-90deg);transition:.1s ease-out}.duty-custom-fields .custom-fields-header .open{transform:rotate(0)}.duty-custom-fields .custom-field-single{border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;padding:.7rem}.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-options{margin:0;opacity:0;transition:opacity .2s linear}.duty-custom-fields .custom-field-options a{display:inline-block}.duty-custom-fields .custom-field-options svg{fill:#BDBDBD}.duty-custom-fields .custom-field-options svg:hover{fill:#3f51b5}.duty-custom-fields .custom-field-data{-ms-flex:0;flex:0;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem;color:#a8a8a8;display:block;line-height:.9rem}.duty-custom-fields .custom-field-value{-ms-flex-align:start;align-items:flex-start;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields .custom-field-value.js-value-view-mode.wysiwyg{white-space:normal}.duty-custom-fields form label{cursor:pointer}.duty-custom-fields form input{width:100%}.custom-fields-body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:50%;flex-basis:50%}@media (max-width:1280px){.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even),.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0}}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even){padding:0 0 0 2rem}.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0 2rem 0 0}.custom-fields-body .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body .custom-attribute:nth-child(even),.custom-fields-body .custom-attribute:nth-child(odd){padding:0}.custom-fields-body .custom-field-single{height:100%}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff5252}.external-reference{font-size:.9rem;color:#BDBDBD;margin-top:.5rem}.external-reference a{border-left:1px solid #BDBDBD;padding:0 .2rem;transition:color .3s linear}.external-reference a:hover{color:#3f51b5}.external-reference a:first-child{border:0}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox .close{width:2rem;height:2rem;cursor:pointer;fill:#757575;position:absolute;right:3rem;top:3rem;transition:fill .2s;display:block}.lightbox .close:hover{fill:#ff5252}.lightbox .close svg{width:2rem;height:2rem;pointer-events:none}.lightbox.open{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1;transition:opacity .3s ease}.lightbox.close{opacity:0;transition:opacity .3s ease}.lightbox .lb-icon{margin:1rem auto;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single:first-child,.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox .lb-icon svg{width:6rem;height:6rem;display:block;fill:#EEE}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox h2{font-size:2rem}.lightbox-generic-form form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form fieldset{position:relative}.lightbox-generic-form textarea{min-height:4.5rem;resize:vertical}.lightbox-generic-form .existing-or-new-selector{display:-ms-flexbox;display:flex;margin-bottom:2rem}.lightbox-generic-form .existing-or-new-selector input{display:none}.lightbox-generic-form .existing-or-new-selector input:checked+label{background:#8c9eff;color:#fff;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input:checked+label:hover{background:#8c9eff}.lightbox-generic-form .existing-or-new-selector input+label{background:rgba(238,238,238,.7);cursor:pointer;display:block;font-size:1em;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input+label:hover{background:rgba(140,158,255,.3);transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single{-ms-flex:1;flex:1}.lightbox-generic-form .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#8c9eff;border:1px solid #3f51b5}.lightbox-generic-form .settings .iocaine svg,.lightbox-generic-form .settings .requirement svg{width:.75rem;height:.75rem}.lightbox-generic-form .settings .blocked:hover{background:#ff5252;border:1px solid #f44336}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#3f51b5;border:1px solid #3f51b5;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:#f44336;border:1px solid #f44336;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-form .attachments{margin-bottom:0}.lightbox-search fieldset,.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-generic-form .attachment-body{max-height:7.5rem;overflow-y:auto}.lightbox-generic-form .attachment-delete{right:.5rem}.lightbox-generic-form .attachment-delete svg{fill:#BDBDBD;height:1.25rem;width:1.25rem}.lightbox-generic-form .attachment-delete:hover svg{fill:#f44336}.lightbox-sprint-add-edit .delete-sprint .icon,.lightbox-sprint-add-edit .delete-sprint:hover .icon{fill:currentColor}.lightbox-generic-bulk form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-search form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-sprint-add-edit form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.7rem;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-sprint-add-edit .delete-sprint{font-size:.9rem;color:#757575;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-ask-choice .subtitle,.lightbox-generic-ask .subtitle{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint:hover{color:#f44336;transition:color .3s linear}.lightbox-generic-ask form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .subtitle{white-space:pre-line}.lightbox-generic-ask .options{display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-ask-choice .warning{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-delete-account p{text-align:center}.lightbox-delete-account form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .newsletter input+label{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-delete-project .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem}.lightbox-delete-account .options{display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-ms-flexbox;display:flex}.lightbox-delete-project .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:100%;max-width:100%;width:100%}.backlog-sprints-menu::after,.lightbox-create-edit .pop-status:after,.lightbox-create-edit .pop-users:after,.main-nav a:hover .helper::after,.related-tasks-body .pop-status:after,.ticket-header .pop-status:after{content:'';transform:rotate(45deg)}.lightbox-generic-loading .progress-bar-wrapper{background:#e1e1e1;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#8c9eff;height:24px;position:absolute;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#e1e1e1;bottom:35px;color:#757575;padding:.3rem;position:absolute;transition:left .1s linear}.lightbox-import-error .description a,.lightbox-select-user .add-comment a{color:#3f51b5}.lightbox-create-issue form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row fieldset{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block textarea,.lightbox-create-issue textarea{margin-bottom:1rem;max-height:12rem;min-height:8rem}.lightbox-select-user .add-comment textarea,.lightbox-select-user .submit-button{margin-top:1rem}.lightbox-block .form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single.selected,.lightbox-select-user .user-list-single:hover{background:rgba(255,255,255,.3);cursor:pointer}.lightbox-select-user .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.lightbox-select-user .more-watchers{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;padding:.5rem;text-align:center}.lightbox-select-user .add-comment{position:relative;text-align:center}.lightbox-select-user .add-comment .icon-close{cursor:pointer;fill:#757575;position:absolute;right:0;top:0;transition:fill .2s}.lightbox-select-user .add-comment .icon-close:hover{fill:#ff5252}.lightbox-select-user .add-comment .icon-close svg{width:2rem;height:2rem}.lb-create-edit-userstory .points-per-role{-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0}.lb-create-edit-userstory .ticket-role-points{margin:.1rem;min-width:20%}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(4n+4){margin-right:0}.lb-create-edit-userstory .ticket-role-points:last-child{-ms-flex-preferred-size:100%;flex-basis:100%;margin:.1rem 0;min-width:100%}.lightbox-import-error{text-align:center}.lightbox-import-error .content{width:500px}.lightbox-import-error h2{margin-top:1rem}.lightbox-import-error img{height:5rem}.lightbox-leave-project-warning{text-align:center}.lightbox-leave-project-warning .icon{fill:#BDBDBD;height:3rem;margin-bottom:1rem;width:3rem}.lightbox-set-due-date .delete-due-date .icon,.lightbox-set-due-date .delete-due-date:hover .icon{fill:currentColor}.lightbox-leave-project-warning .content,.lightbox-request-ownership .content{width:500px}.lightbox-request-ownership{text-align:center}.lightbox-set-due-date{z-index:9999}.lightbox-set-due-date form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-set-due-date .date{margin:2rem 0 1rem}.lightbox-set-due-date .reason textarea{margin-top:.5rem}.lightbox-set-due-date .due-date-suggestions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:1rem 0 .5rem}.lightbox-set-due-date .suggestion{background:rgba(184,184,184,.2);color:#B8B8B8;-ms-flex-pack:start;justify-content:flex-start;margin:0 .5rem .5rem;min-height:2rem;padding:.5rem .75rem;position:relative}.lightbox-set-due-date .suggestion:first-child{margin-left:0}.lightbox-set-due-date .suggestion:nth-child(4n+4){margin-right:0}.lightbox-set-due-date .suggestion.clickable.active,.lightbox-set-due-date .suggestion.clickable:hover{background:rgba(140,158,255,.9);color:#fff}.lightbox-set-due-date .delete-due-date{font-size:.9rem;color:#757575;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-set-due-date .delete-due-date:hover{color:#f44336;transition:color .3s linear}.lightbox-create-edit{z-index:9998}.lightbox-create-edit form{-ms-flex-preferred-size:700px;flex-basis:700px;max-width:700px;width:700px}.lightbox-create-edit .form-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:700px;flex-basis:700px;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;margin-bottom:30px}.lightbox-create-edit .form-wrapper main{-ms-flex-positive:1;flex-grow:1;max-width:480px}.lightbox-create-edit .form-wrapper .sidebar{border-left:2px solid #EEE;margin-left:15px;padding-left:15px;width:220px}.lightbox-create-edit .existing-item-wrapper{margin-bottom:30px}.lightbox-create-edit .existing-item-wrapper select .strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-create-edit .add-existing-button{width:100%}.lightbox-create-edit .status-button{display:-ms-flexbox;display:flex;position:relative}.lightbox-create-edit .status-dropdown{-ms-flex-line-pack:center;align-content:center;color:#fff;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;height:30px;padding:.25rem .5rem}.lightbox-create-edit .status-dropdown .status-text{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.lightbox-create-edit .status-dropdown svg{fill:#fff;height:.9rem;width:.9rem}.lightbox-create-edit .popover a{color:#fff;display:block;padding:.5rem 1rem;text-align:left}.lightbox-create-edit .popover a.active,.lightbox-create-edit .popover a:hover{color:#8c9eff}.lightbox-create-edit .ticket-assigned-to{border:0;padding:0}.lightbox-create-edit .ticket-assigned-to.single-assign{margin:0}.lightbox-create-edit .ticket-assigned-to.multiple-assign{-ms-flex-align:start;align-items:start;-ms-flex-direction:column;flex-direction:column;margin:0}.lightbox-create-edit .ticket-assigned-to .assigned-to-actions{display:block}.lightbox-create-edit .ticket-assigned-to .remove-user{top:1.2rem}.lightbox-create-edit .user-list{display:-ms-flexbox;display:flex;width:100%}.lightbox-create-edit .user-list .user-list-item{margin-right:.5rem;width:44.75px}.lightbox-create-edit .user-list .user-list-item img{height:44.75px;width:44.75px}.lightbox-create-edit .user-list .user-list-item:last-child{margin-right:0}.lightbox-create-edit .user-list .user-list-item.counter{background:#B8B8B8;color:#BDBDBD;font-weight:400;height:44.75px;line-height:44.75px;text-align:center}.wysiwyg b,.wysiwyg dl dt,tg-wysiwyg .mention{font-weight:700}.lightbox-create-edit .tg-add-assigned{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:.25rem 0 .75rem}.lightbox-create-edit .tg-add-assigned .add-assigned{fill:#757575;opacity:1;right:.5rem;top:2rem}.lightbox-create-edit .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:#f44336;transition:fill .2s}.lightbox-create-edit .tg-add-assigned span{font-size:.9rem;color:#757575;margin:.2rem .5rem}.lightbox-create-edit .pop-status,.lightbox-create-edit .pop-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;text-align:"center";background:#212121;font-size:.9rem;z-index:99}.lightbox-create-edit .users-dropdown{position:relative}.lightbox-create-edit .pop-status{color:#fff;display:none;padding:10px;position:absolute;top:28px;width:203px}.lightbox-create-edit .pop-status a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-status a:last-child{border:0}.lightbox-create-edit .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.lightbox-create-edit .pop-status a:hover.point{color:#fff}.lightbox-create-edit .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.lightbox-create-edit .pop-users{color:#fff;display:none;left:0;padding:10px;position:absolute;top:60px;width:203px}.lightbox-create-edit .pop-users a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-users a:last-child{border:0}.lightbox-create-edit .pop-users a:hover{color:#8c9eff;transition:color .3s linear}.lightbox-create-edit .pop-users a:hover.point{color:#fff}.lightbox-create-edit .pop-users:after{background:#212121;height:15px;left:67.67px;position:absolute;top:-7px;width:16px}.lightbox-create-edit .pop-users.multiple{top:84px}.lightbox-create-edit .pop-users.multiple::after{left:30px}.lightbox-create-edit .pop-users ul{margin-bottom:.5rem}.lightbox-create-edit .pop-users li{border-bottom:1px solid #BDBDBD}.lightbox-create-edit .pop-users li:last-child{border:0}.lightbox-create-edit .pop-users .user-list-single{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;padding:.5rem 0}.lightbox-create-edit .pop-users .user-list-single.selected{color:#3f51b5}.lightbox-create-edit .pop-users .user-list-avatar{height:32px;margin-right:.5rem;width:32px}.lightbox-create-edit .pop-users .user-list-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-positive:1;flex-grow:1;position:relative}.lightbox-create-edit .pop-users .remove svg{fill:#EEE;height:.8rem;width:.8rem}.lightbox-create-edit .pop-users .show-more{border-top:1px solid #BDBDBD;padding-top:.5rem;text-align:center}.lightbox-create-edit .ticket-data-container{margin:0;padding:0 0 .1rem}.lightbox-create-edit .ticket-data-container .ticket-status .priority-data,.lightbox-create-edit .ticket-estimation .points-per-role{margin:0}.lightbox-create-edit .ticket-detail-settings{height:52px;-ms-flex-pack:left;justify-content:left;margin:1rem 0 0}.lightbox-create-edit .ticket-detail-settings label{border:0;padding:12px 13px;width:auto}.lightbox-create-edit .ticket-detail-settings .item-block,.lightbox-create-edit .ticket-detail-settings .item-unblock{display:block;margin:0}.lightbox-create-edit .blocked-note{margin-top:.5rem}.ticket-detail-settings .lightbox-assign-sprint-to-issue .lightbox-assign-related-sprint{width:700px}.ticket-detail-settings .lightbox-assign-sprint-to-issue svg{fill:initial;max-height:initial;max-width:initial}.ticket-detail-settings img,.ticket-detail-settings svg{max-height:1.25rem;max-width:1.25rem;width:100%}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label{background:0 0;display:inline-block;margin-bottom:.5rem;margin-right:0;padding:0}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label+input{display:initial}.ticket-detail-settings .lightbox-assign-sprint-to-issue button{width:100%}.lightbox-relate-to-epic .lightbox-create-related-epic-wrapper{max-width:600px;width:90%}.lightbox-relate-to-epic .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-relate-to-epic .related-with-selector input{display:none}.lightbox-relate-to-epic .related-with-selector input:checked+label{background:#8c9eff;color:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input:checked+label:hover{background:#8c9eff}.lightbox-relate-to-epic .related-with-selector input+label{background:rgba(238,238,238,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input+label:hover{background:rgba(140,158,255,.3);transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-relate-to-epic fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-relate-to-epic .new-epic-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-relate-to-epic .existing-epic-form,.lightbox-relate-to-epic .new-epic-form{margin-bottom:1rem}.lightbox-relate-to-epic .no-epics-found{padding:1rem 0 0}.lightbox-relate-to-epic .new-epic-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-relate-to-epic .new-epic-options input{display:none}.lightbox-relate-to-epic .new-epic-options input:checked+label{background:#8c9eff;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label{background:#f5f5f5;color:#424242;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label:hover{background:#8c9eff;color:#fff;fill:#fff}.lightbox-relate-to-epic button{width:100%}tg-project-menu{background-position:0 -300px;display:inline-block;min-height:calc(100vh - 40px);min-width:50px;padding:1rem 0;position:relative;text-transform:uppercase;z-index:99}.main-nav a,.main-nav span{display:block}tg-project-menu .menu.menu-fixed{position:fixed;top:1rem}.main-nav,.main-nav a,.main-nav li{position:relative}.main-nav{padding:0;text-align:center}.main-nav a{padding:1rem .7rem}.main-nav a:hover{background:rgba(0,0,0,.2);transition:color .3s linear}.main-nav a:hover svg{fill:#8c9eff;transition:fill .3s linear}.backlog-sprints-menu,.main-nav a:hover .helper{animation:slideLeft .2s ease-in-out both;padding:.4rem 1rem;transition:all .2s;position:absolute;white-space:nowrap}.main-nav a:hover .helper{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:calc(50% - 1rem);z-index:99}.main-nav a:hover .helper::after{background:#212121;height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);width:12px;z-index:98}.main-nav svg{fill:#fff;height:1.7rem;width:1.7rem}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .item{font-size:1.2rem}.main-nav .active{background:rgba(255,255,255,.95);color:#1a237e}.main-nav .active svg{fill:#1a237e;opacity:1;stroke:#1a237e}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.backlog-sprints-menu{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:1rem;z-index:99}.backlog-sprints-menu a{color:#fff;padding:.6rem .8rem;text-align:left;text-transform:none}.backlog-sprints-menu a:nth-child(2){padding:1rem .8rem .6rem}.backlog-sprints-menu a:last-child{padding:.6rem .8rem .4rem}.backlog-sprints-menu a:hover{background:0 0}.backlog-sprints-menu::after{background:#212121;height:12px;left:calc(-12px/2);position:absolute;top:calc(1rem - 12px/2);width:12px;z-index:98}.related-tasks,.related-tasks-body .status{position:relative}.related-tasks{margin-bottom:2rem}.related-tasks-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-tasks-header .related-tasks-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-tasks-header .add-button{background:#424242;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-tasks-header .add-button.is-active,.related-tasks-header .add-button:hover{background:#8c9eff}.related-tasks-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-tasks-body{width:100%}.related-tasks-body .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}.related-tasks-body .row:hover .task-settings{opacity:1;transition:all .2s ease-in}.related-tasks-body .row .task-name{-ms-flex:1;flex:1}.related-tasks-body .row .task-settings{-ms-flex-negative:0;flex-shrink:0;width:60px}.related-tasks-body .row .status{-ms-flex-negative:0;flex-shrink:0;width:125px}.related-tasks-body .row .assigned-to{cursor:pointer;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .single-related-task:hover{background:rgba(140,158,255,.05)}.related-tasks-body .single-related-task:hover .icon-drag{opacity:1}.related-tasks-body .single-related-task .task-reorder{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .single-related-task .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#EEE;opacity:0;transition:opacity .1s}.issues-table .title div,.issues-table .votes,.related-tasks-body .task-assignedto.editable,.related-tasks-body .task-settings a:hover,.ticket-detail-settings .assign-issue-button.editable,.ticket-detail-settings .button-delete.editable,.ticket-detail-settings .item-block.editable,.ticket-detail-settings .item-unblock.editable,.ticket-detail-settings .promote-button.editable,.ticket-detail-settings label.editable{cursor:pointer}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .iocaine{background:rgba(140,158,255,.1);border-left:10px solid #8c9eff}.related-tasks-body .task-name{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .task-name span{margin-right:.25rem}.related-tasks-body .task-name input{font-size:1rem;margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .pop-status,.ticket-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;z-index:99;text-align:"center"}.related-tasks-body .task-name.loading span{animation:loading .5s linear,spin 1s linear infinite}.related-tasks-body .status .not-clickable:hover{color:#424242}.related-tasks-body .status .popover{left:0;top:1rem}.related-tasks-body .status .popover a{display:block}.related-tasks-body .status .icon{width:.8rem;height:.8rem;fill:currentColor;margin-left:.2rem}.related-tasks-body .closed,.related-tasks-body .closed:hover{border-left:10px solid #EEE;color:#EEE}.related-tasks-body .closed a,.related-tasks-body .closed svg,.related-tasks-body .closed:hover a,.related-tasks-body .closed:hover svg{fill:#EEE}.related-tasks-body .closed .task-name a,.related-tasks-body .closed:hover .task-name a{color:#EEE;text-decoration:line-through}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .pop-status{font-size:.9rem;background:#212121;color:#fff;display:none;left:40%;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px}.related-tasks-body .pop-status a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:rgba(255,82,82,.2);border-left:10px solid #ff5252}.related-tasks-body .task-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;opacity:0}.related-tasks-body .task-settings svg{width:1.1rem;height:1.1rem;fill:#BDBDBD;margin-right:.5rem;transition:fill .2s ease-in}.related-tasks-body .task-settings svg:hover{fill:#757575}.related-tasks-body .delete-task:hover .icon-edit,.related-tasks-body .edit-task:hover .icon-edit,.related-tasks-body .save-task:hover .icon-edit{fill:#424242}.related-tasks-body .delete-task:hover .icon-save,.related-tasks-body .edit-task:hover .icon-save,.related-tasks-body .save-task:hover .icon-save{fill:#3f51b5}.related-tasks-body .delete-task:hover .icon-trash,.related-tasks-body .edit-task:hover .icon-trash,.related-tasks-body .save-task:hover .icon-trash{fill:#ff5252}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{width:.8rem;height:.8rem;fill:#BDBDBD;opacity:0;position:absolute;right:.5rem;top:.5rem;transition:opacity .3s linear}.related-tasks-body .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:1.5rem 0 2rem;position:relative}.ticket-header .ticket-title{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;text-transform:uppercase;vertical-align:sub}.ticket-header .detail-status{font-size:.9rem;display:-ms-flexbox;display:flex;margin-left:.25rem;position:relative}.ticket-header .detail-status .icon-arrow-down{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem}.ticket-header .detail-status-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start}.ticket-header .detail-status-inner>span{color:#fff;padding:.15rem .25rem;text-transform:uppercase}.ticket-header .pop-status{font-size:.9rem;background:#212121;color:#fff;display:none;left:0;margin:0;position:absolute;top:1.25rem;width:150px;padding:0;text-transform:none}.ticket-data-container,.ticket-header .pop-status a{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.ticket-header .pop-status a{border-bottom:1px solid #424242;color:#fff;display:block;padding:.5rem 1rem;text-align:left}.ticket-header .pop-status a:last-child{border:0}.ticket-header .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.ticket-header .pop-status a:hover.point{color:#fff}.ticket-header .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.ticket-header .pop-status a:hover{background:rgba(140,158,255,.2)}.ticket-data-container{margin-bottom:1rem}.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .type-data .pop-type{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;left:30px;top:30px;text-align:"left";font-size:.9rem;z-index:99;list-style-type:none}.ticket-data-container .icon{width:.7rem;height:.7rem;color:currentColor;margin-left:.25rem}.ticket-status .priority-data .pop-priority:after,.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;transform:rotate(45deg)}.ticket-status:last-child{margin:0}.ticket-status .level{display:inline-block;margin-right:.5rem;vertical-align:top}.ticket-status .level-name{color:#bbb;float:right;text-transform:lowercase}.ticket-status .clickable:hover{background:#d5d5d5;transition:background .2s ease-in}.ticket-status .type-data{background:#e1e1e1;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .type-data .pop-type{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .type-data .pop-type a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#8c9eff;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#212121;position:absolute;width:0}.ticket-status .severity-data{background:#e1e1e1;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .severity-data .pop-severity{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .severity-data .pop-severity a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#8c9eff;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#212121;position:absolute;width:0}.ticket-status .priority-data{background:#e1e1e1;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .priority-data .pop-priority{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-watch .ticket-watch-button,.ticket-watch svg{margin-right:.25rem}.ticket-status .priority-data .pop-priority a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#8c9eff;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{background:#212121;position:absolute;width:0}.ticket-watch-buttons{margin-bottom:1rem}.ticket-watch .ticket-watch-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.introjs-tooltip p,.single-project .description,.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-watch .ticket-watch-inner{display:-ms-flexbox;display:flex}.ticket-watch svg{position:relative;top:2px}.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-size:.9rem;background:#BDBDBD;color:#fff;-ms-flex:1;flex:1;padding:.25rem;text-align:center;text-transform:uppercase;transition:background .25s}.ticket-watch .add-watcher svg,.ticket-watch .ticket-watch-button svg{fill:#fff}.ticket-watch .add-watcher:hover,.ticket-watch .ticket-watch-button:hover{background:#8c9eff}.ticket-watch .add-watcher.is-hover,.ticket-watch .ticket-watch-button.is-hover{background:#f44336;color:#EEE;transition:background .3s}.ticket-watch .add-watcher.is-hover svg,.ticket-watch .ticket-watch-button.is-hover svg{fill:#ff5252}.ticket-watch .add-watcher.active,.ticket-watch .ticket-watch-button.active{background:#8c9eff}.ticket-watch .add-watcher.active:hover,.ticket-watch .ticket-watch-button.active:hover{background:#ff5252}.ticket-watch .add-watcher.active svg,.ticket-watch .ticket-watch-button.active svg{fill:#fff}.ticket-detail-settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:2rem}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .button-delete,.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock,.ticket-detail-settings .promote-button,.ticket-detail-settings label{background:#BDBDBD;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .assign-issue-button+input,.ticket-detail-settings .button-delete+input,.ticket-detail-settings .item-block+input,.ticket-detail-settings .item-unblock+input,.ticket-detail-settings .promote-button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .assign-issue-button:hover,.ticket-detail-settings .button-delete:hover,.ticket-detail-settings .item-block:hover,.ticket-detail-settings .item-unblock:hover,.ticket-detail-settings .promote-button:hover,.ticket-detail-settings label:hover{background:#757575}.ticket-detail-settings .assign-issue-button.button-set,.ticket-detail-settings .assign-issue-button.text-button.button-set:hover,.ticket-detail-settings .button-delete.button-set,.ticket-detail-settings .button-delete.text-button.button-set:hover,.ticket-detail-settings .item-block.button-set,.ticket-detail-settings .item-block.text-button.button-set:hover,.ticket-detail-settings .item-unblock.button-set,.ticket-detail-settings .item-unblock.text-button.button-set:hover,.ticket-detail-settings .promote-button.button-set,.ticket-detail-settings .promote-button.text-button.button-set:hover,.ticket-detail-settings label.button-set,.ticket-detail-settings label.text-button.button-set:hover{background:#9dce0a;border-color:#9dce0a}.ticket-detail-settings .assign-issue-button:hover{background:#9dce0a}.ticket-detail-settings .assign-issue-button.button-set:hover,.ticket-detail-settings .item-unblock{background:#ff5252}.ticket-detail-settings .assign-issue-button.is-active{display:inline-block}.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock{display:none}.ticket-detail-settings .item-block.is-active,.ticket-detail-settings .item-unblock.is-active{display:inline-block}.ticket-detail-settings .item-unblock:hover{background:#f44336}.ticket-detail-settings .button-delete{background:#ff5252}.ticket-detail-settings .button-delete:hover{background:#f44336}.ticket-detail-settings svg{fill:#fff;height:100%;stroke:#fff}.ticket-detail-settings .icon-private{margin:0}.ticket-detail-settings a{display:block}.epic-header-container{display:-ms-flexbox;display:flex}.epic-header-container .color-selector{margin-right:.5rem}.epic-header-container tg-detail-header{-ms-flex:1;flex:1;width:100%}.introjs-overlay{background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(238,238,238,.2) 100%);background-color:#EEE}.introjs-helperLayer{border:1px solid rgba(140,158,255,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(66,66,66,.2)}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-bullets ul li a.active{background:#8c9eff}.introjs-button{background-color:#3f51b5;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#8c9eff;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .single-project-intro{display:-ms-flexbox;display:flex;margin-bottom:2rem}.single-project .project-logo{margin-right:1rem;width:6rem}.single-project .project-logo img{width:100%}.single-project .single-project-title-wrapper{-ms-flex:1;flex:1}.single-project .intro-options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem}.single-project .intro-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.single-project .intro-title .icon-private{fill:#BDBDBD;height:24px;margin-left:.25rem;margin-top:1rem;width:24px}.single-project h1{color:#3f51b5;display:inline-block;line-height:1.2;margin-bottom:0;vertical-align:middle}.single-project .private{width:1.1rem;height:1.1rem}.single-project .track-buttons-container{display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{font-size:.9rem;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#3f51b5}.single-project .track-container .list-itemtype-track-likers.active .icon,.single-project .track-container .list-itemtype-track-watchers.active .icon{fill:currentcolor}.single-project .track-container .icon{fill:#BDBDBD}.single-project .description{font-size:1rem;margin:0}.single-project .project-data{display:-ms-flexbox;display:flex}.single-project .title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-ms-flex:1;flex:1;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .looking-for-people img{width:100%}.single-project .looking-for-people h3{font-size:.9rem}.single-project .looking-for-people .is-empty{margin-bottom:.5rem}.single-project .looking-for-people p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.single-project .looking-for-people .contact-team{margin-bottom:1rem}.single-project .involved-data{-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-team{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-team li{-ms-flex-preferred-size:24%;flex-basis:24%;margin-right:.14rem;position:relative}.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-team a{display:block}.single-project .involved-team img{border-radius:.2rem;width:100%}.single-project .involved-team .icon-badge{width:1.2rem;height:1.2rem;background:rgba(0,0,0,.5);bottom:5%;fill:#8c9eff;padding:.1rem;position:absolute;right:5%;stroke:#8c9eff}.issues-options{-ms-flex-align:center;align-items:center;background-color:#EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table{display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#fff;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .row.is-blocked{background:#ffb8b8}.issues-table .row.is-blocked .blocked-text{color:#f44336;margin-right:.5rem}.issues-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD}.issues-table .title:hover{background:0 0}.issues-table .title .votes{color:#757575}.issues-table .table-main{font-size:.9rem;border-bottom:1px solid #e4e4e4}.issues-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-ms-flex-preferred-size:85px;flex-basis:85px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:85px}.issues-table .votes{color:#757575;-ms-flex-preferred-size:75px;flex-basis:75px;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes:hover{color:#8c9eff;transition:all .2s linear}.issues-table .votes:hover svg{fill:#8c9eff;transition:all .2s linear}.issues-table .votes.inactive{color:#BDBDBD}.issues-table .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.issues-table .icon-arrow-down,.issues-table .icon-arrow-up{width:.7rem;height:.7rem;fill:#BDBDBD;margin-left:.25rem;vertical-align:middle}.issues-table .is-voted{color:#8c9eff;transition:all .2s linear}.issues-table .is-voted svg{fill:#8c9eff;transition:all .2s linear}.issues-table .is-voted:hover{color:#ff5252}.issues-table .is-voted:hover svg{fill:#ff5252;transform:rotate(180deg)}.issues-table .pop-status:after,.table-team .popover:after{transform:rotate(45deg);content:''}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .issue-field,.issues-table .modified-field{-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field .icon,.issues-table .issue-field .icon,.issues-table .modified-field .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem;vertical-align:middle}.issues-table .assigned-field{-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{width:.75rem;height:.75rem;opacity:0;position:absolute;right:0;top:.75rem;transition:opacity .3s linear}.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#212121;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99;text-align:"center"}.kanban-table-body .taskboard-column .kanban-column-intro,.search-result-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.issues-table .pop-status a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1280px){.issues-table .level-field,.issues-table .modified-field{display:none}}.issues-table .issue-status{display:inline-block}.kanban-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table.zoom-0 .task-colum-name,.kanban-table.zoom-0 .taskboard-column{max-width:148px}.kanban-table.zoom-0 .task-colum-name span{padding-right:1rem}.kanban-table .vfold tg-card{display:none}.kanban-table .vfold.task-colum-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold.task-colum-name .option:not(.hunfold),.kanban-table .vfold.task-colum-name .title,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.taskboard-column{-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;min-height:2.4rem;position:relative}.kanban-table-header .kanban-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute;width:100%}.kanban-table-header .options{display:-ms-flexbox;display:flex}.kanban-table-header .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:296px;padding:.5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;width:100%}.kanban-table-header .task-colum-name .title .counter{font-size:.75rem;line-height:1.6;margin:0 .5rem}.kanban-table-header .task-colum-name .title .name{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.kanban-table-header .task-colum-name .option{margin-right:.3rem}.kanban-table-header .task-colum-name .icon{fill:#BDBDBD;height:1rem;transition:color .2s linear;width:1rem}.kanban-table-header .task-colum-name .icon:hover{fill:#3f51b5}.kanban-table-body{font-size:1rem;display:-ms-flexbox;display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-body .taskboard-column{-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:296px;overflow-y:auto;widows:296px;width:296px}.kanban-table-body .taskboard-column:last-child{margin-right:0}.kanban-table-body .taskboard-column .kanban-column-intro{font-size:.9rem;color:#BDBDBD;margin:1rem 2rem}.kanban-table-body .taskboard-column .kanban-column-intro.active{color:#212121}.kanban-table-body .taskboard-column .kanban-wip-limit{background:#f44336;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-body .kanban-task-selected.card:not(.gu-transit-multi){box-shadow:0 0 0 1px #8c9eff,2px 2px 4px #d5d5d5}.kanban-table-inner{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.card-transit-multi{background:#e9e9e9;border:1px dashed #dadada;display:none;opacity:1;padding:1rem}.search-filter,.search-result-table,.table-team .hero .row{border-top:1px solid #EEE}.card-transit-multi .fake-img,.card-transit-multi .fake-text{background:#dadada}.card-transit-multi .fake-us{display:-ms-flexbox;display:flex;margin-bottom:1rem}.card-transit-multi .fake-us:last-child{margin-bottom:0}.card-transit-multi .column{padding-left:.5rem;width:100%}.card-transit-multi .fake-img{-ms-flex-preferred-size:48px;flex-basis:48px;-ms-flex-negative:0;flex-shrink:0;height:48px;width:48px}.card-transit-multi .fake-text{height:1rem;margin-bottom:1rem;width:80%}.card-transit-multi .fake-text:last-child{margin-bottom:0;width:40%}.card.gu-transit-multi .card-transit-multi{display:block}.card.gu-transit-multi .card-inner{display:none}.search-filter{display:-ms-flexbox;display:flex;margin-bottom:0;z-index:9}.search-filter a{background:#fff;color:#BDBDBD;display:inline-block;margin-right:1rem;padding:1rem 1.25rem}.search-filter .name,.search-filter a:hover .name{padding-left:5px}.search-filter a:hover{transition:color .3s linear}.search-filter a:hover .icon{fill:currentColor}.search-filter a.active{border-left:1px solid #EEE;border-right:1px solid #EEE;color:#424242;position:relative;top:1px}.search-filter a.active .icon{fill:#8c9eff}.search-filter .icon{fill:currentColor;margin-right:.4rem}.search-in input{background:#424242;color:#fff}.search-in input::-webkit-input-placeholder{color:#BDBDBD}.search-in input::-moz-placeholder{color:#BDBDBD}.search-in input:-moz-placeholder{color:#BDBDBD}.search-in input:-ms-input-placeholder{color:#BDBDBD}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{fill:#BDBDBD}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row .ref{margin-right:.5rem}.search-result-table .row .user-stories{overflow:hidden;padding-right:1rem;width:100%}.search-result-table .row .points,.search-result-table .row .sprint,.search-result-table .row .status{-ms-flex:0 0 150px;flex:0 0 150px;-ms-flex-positive:0;flex-grow:0;max-width:150px;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;padding:0 1rem}.search-result-table .row-selected{background:#fff;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.single-filter .name img,.tag img,.wiki-nav .add-button{vertical-align:middle}.search-result-table .user-story-name span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon{font-size:1rem;color:#BDBDBD}.search-result-table .user-story-name .icon:hover{color:#424242;transition:color .3s linear}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #EEE}.search-result-table .points,.search-result-table .sprint,.search-result-table .status{position:relative}.search-result-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters li{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD;text-transform:uppercase}.table-team .attribute,.table-team .attribute .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.team-filters li:last-child{border-bottom:0}.team-filters li .icon{fill:#212121;opacity:0;transition:opacity .3s linear}.team-filters a{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.team-filters a.active,.team-filters a:hover{color:#3f51b5;transition:color .3s linear}.team-filters a.active .icon,.team-filters a:hover .icon{fill:currentColor;opacity:1}.team-filters .active{opacity:1;transition:opacity .3s linear}.table-team .row{padding:.5rem}.table-team .username{-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:6;flex:6;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{width:1.75rem;height:1.75rem;fill:#757575}.table-team .attribute .points{font-size:1.6rem;color:#424242}.table-team .attribute .top{fill:#8c9eff;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{font-size:.9rem;color:#ff5252}.table-team .leave-project .icon{width:.8rem;height:.8rem;fill:currentColor;margin-right:.2rem}.table-team .leave-project:hover{color:#f44336}.table-team .leave-project:hover .icon{color:currentColor;transition:fill .3s linear}.table-team .team-header{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:0}.table-team .hero{width:100%}.table-team .hero .row{border-bottom:1px solid #EEE;margin:1rem 0;padding:1.5rem 1rem}.table-team .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.table-team .avatar img{-ms-flex-preferred-size:66px;flex-basis:66px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:66px}.table-team .avatar .avatar-data{margin-left:1rem}.table-team .avatar .avatar-data span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.table-team .avatar .position{color:#BDBDBD}.table-team .popover{font-size:.9rem;background:#212121;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99;text-align:"center"}.table-team .popover a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#8c9eff;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#212121;bottom:-5px;height:15px;left:50%;position:absolute;width:15px}.table-team .icon-badge{fill:#8c9eff;position:relative;stroke:#8c9eff;top:.15rem}.policy-table .policy-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #BDBDBD}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#3f51b5;transition:background .3s linear}.policy-table label{background:#BDBDBD;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#8c9eff;cursor:pointer;transition:background .3s linear}.project-settings-table .project-settings-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.project-settings-table .project-settings-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #BDBDBD}.project-settings-table .project-settings-table-homepage,.project-settings-table .project-settings-table-project{padding:1rem}.project-settings-table .project-settings-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-settings-table .project-settings-table-homepage{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile{max-width:780px}.user-profile form{display:-ms-flexbox;display:flex}.user-profile fieldset{margin-bottom:1rem}.user-profile label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.user-profile .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.user-profile .project-details-image .image,.user-profile .submit-button{width:100%}.user-profile .change-image{display:block}.user-profile .image-container{position:relative;margin-bottom:.5rem}.user-profile .loading-overlay{display:none}.user-profile .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;border:0;transform-origin:center center}.user-profile .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.user-profile .use-default-image:hover{color:#f44336}.user-profile .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.user-profile form{display:block}}.user-profile .actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:.5rem}.user-profile .delete-account,.user-profile .download-profile{font-size:.9rem;display:block;-ms-flex:1;flex:1;margin-top:.5rem}.user-profile .delete-account{text-align:right}.wiki-nav{padding:0;width:240px}.wiki-nav .title{font-size:1.6rem;padding:2rem 1rem 0 2rem}.wiki-nav .add-button{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:1rem 1rem 1rem 2rem;text-transform:uppercase}.wiki-nav .add-button:hover svg{background:#8c9eff}.wiki-nav .add-button svg{width:1.25rem;height:1.25rem;background:#BDBDBD;border-radius:2px;fill:#fff;margin-right:.5rem;padding:.25rem;transition:background .2s linear}.wiki-nav .wiki-link-container{margin:0}.wiki-nav .wiki-link-container.wiki-all-links{border-top:1px solid #BDBDBD}.wiki-nav input[type=text]{background:#EEE;color:#424242;margin:1rem 1rem 1rem 2rem;width:80%}.wiki-nav input[type=text]::-webkit-input-placeholder{color:#BDBDBD}.wiki-nav input[type=text]::-moz-placeholder{color:#BDBDBD}.wiki-nav input[type=text]:-moz-placeholder{color:#BDBDBD}.wiki-nav input[type=text]:-ms-input-placeholder{color:#BDBDBD}.wiki-nav .loading{padding:1rem;text-align:center}.wiki-link{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-left:2rem;padding-right:1rem;position:relative}.wiki-link:hover .remove-wiki-page{cursor:pointer;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link:hover .dragger{cursor:move;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link.gu-mirror{border-bottom:0}.wiki-link.fixed-link{font-size:1.2rem;text-transform:uppercase}.wiki-link.is-sortable{cursor:move}.wiki-link .link-title{cursor:pointer;display:block;-ms-flex-positive:1;flex-grow:1;padding:1rem 0}.wiki-link .dragger{fill:#BDBDBD;left:-1rem;opacity:0;position:absolute;top:1rem}.wiki-link .dragger svg{width:.7rem;height:.7rem}.wiki-link .remove-wiki-page{opacity:0}.wiki-link .remove-wiki-page:hover .icon{fill:#f44336}.wiki-pages-table{display:-ms-flexbox;display:flex}.wiki-pages-table .row{padding:.5rem}.wiki-pages-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.wiki-pages-table .table-main{font-size:.9rem}.wiki-pages-table .title-field{-ms-flex-preferred-size:180px;flex-basis:180px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.wiki-pages-table .created-field,.wiki-pages-table .modified-field{-ms-flex-preferred-size:10vw;flex-basis:10vw;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.wiki-pages-table .editions-field{-ms-flex-preferred-size:80px;flex-basis:80px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;text-align:center}.wiki-pages-table .creator-field,.wiki-pages-table .last-modifier-field{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:200px;flex-basis:200px}.wiki-pages-table .creator-field .user-avatar,.wiki-pages-table .last-modifier-field .user-avatar{-ms-flex-positive:0;flex-grow:0}.wiki-pages-table .creator-field .user-avatar img,.wiki-pages-table .last-modifier-field .user-avatar img{height:2rem}.wiki-pages-table .creator-field .user-full-name,.wiki-pages-table .last-modifier-field .user-full-name{-ms-flex-positive:1;flex-grow:1;padding:.5rem}.wiki-summary{-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.wiki-summary.summary{background:#f5f5f5;color:#757575}.wiki-summary div{display:-ms-flexbox;display:flex;margin-right:1.25rem}.wiki-summary .wiki-user-modification{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary .avatar{margin-right:.5rem;width:2.25rem}.wiki-summary img{height:100%;width:100%}.wiki-summary .username{font-size:1.2rem;white-space:nowrap}.wiki-summary .remove{fill:#BDBDBD;margin-left:auto;transition:fill .1s linear}.wiki-summary .remove:hover{cursor:pointer;fill:#ff5252}.wiki-summary .remove svg{width:1.5rem;height:1.5rem}.attachment-gallery{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.attachment-gallery .single-attachment{margin-bottom:.5rem;margin-right:.5rem;max-width:200px}.attachment-gallery .single-attachment:hover .icon-delete{opacity:1}.attachment-gallery .single-attachment .attachment-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.attachment-gallery .attachment-image{display:inline-block}.attachment-gallery img{height:150px;margin-bottom:.2rem;width:200px}.attachment-gallery img:hover{filter:saturate(150%) hue-rotate(60deg);transition:all .3s cubic-bezier(.01,.7,1,1)}.attachment-gallery.deprecated img{opacity:.5}.attachment-gallery.deprecated .attachment-name{color:#BDBDBD}.attachment-gallery .attachment-data{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.attachment-gallery .icon-delete{margin-left:auto;opacity:0;transition:opacity .2s ease-in;transition-delay:.1s}.attachment-gallery .icon-delete svg{fill:#ff5252}.attachment-gallery .icon-delete:hover svg{color:#f44336}.attachment-gallery .loading-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:150px;-ms-flex-pack:center;justify-content:center;margin:0 .5rem .5rem 0;width:200px}.attachment-gallery .loading-spinner{margin:0 auto;max-height:3rem;max-width:3rem}.attachment-list .single-attachment{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;position:relative}.attachment-list .single-attachment:hover .settings{opacity:1;transition:opacity .2s ease-in}.attachment-list .single-attachment.deprecated,.attachment-list .single-attachment.deprecated .attachment-name a{color:#BDBDBD}.attachment-list .attachment-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding-right:1rem}.attachment-list .attachment-comments,.attachment-list .editable-attachment-comment{-ms-flex:2;flex:2;-ms-flex-preferred-size:50%;flex-basis:50%;margin-right:.5rem}.attachment-list .attachment-comments span,.attachment-list .editable-attachment-comment span{color:#757575}.attachment-list .attachment-size{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.attachment-list .attachment-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:10%;flex-basis:10%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:distribute;justify-content:space-around;margin-left:auto}.attachment-list .attachment-settings .settings{opacity:0}.attachments .gu-mirror,.card-owner:hover .card-owner-actions{opacity:1}.attachment-list .attachment-settings .editable-settings{display:block;opacity:1}.attachment-list .attachment-settings svg{fill:#BDBDBD;pointer-events:none}.attachment-list .attachment-settings .icon-edit:hover,.attachment-list .attachment-settings .icon-save:hover{fill:#3f51b5}.attachment-list .attachment-settings .icon-close:hover,.attachment-list .attachment-settings .icon-trash:hover{fill:#f44336}.attachment-list .attachment-settings .icon-drag{cursor:move}.attachment-list .editable-attachment-deprecated{display:-ms-flexbox;display:flex;padding-left:1rem}.attachment-list .editable-attachment-deprecated span{color:#BDBDBD}.attachment-list .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.attachment-list .editable-attachment-deprecated input:checked+span{color:#424242}.attachment-list .percentage{background:rgba(63,81,181,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.attachments{margin-bottom:4rem}.attachments .gu-transit{background:#EEE;height:40px}.attachments .gu-transit *{display:none}.attachments .gu-mirror form{background:#fff;box-shadow:1px 1px 10px rgba(0,0,0,.1);transition:background .2s ease-in}.attachments-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.attachments-header .attachments-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1rem;color:#424242;line-height:36px;padding:0 1rem}.attachments-header .options{display:-ms-flexbox;display:flex}.attachments-header label{cursor:pointer;margin-left:.25rem}.attachments-header label.add-attachment-button{background:#757575;border:0;display:inline-block;padding:.5rem;transition:background .25s}.attachments-header label.add-attachment-button:hover{background:#8c9eff}.attachments-header label svg{fill:#fff;height:1.2rem;margin-bottom:-.2rem;width:1.2rem}.attachments-header button{background:0 0;margin-right:.2rem}.attachments-header button.is-active svg,.attachments-header button:hover svg{fill:#8c9eff}.attachments-header button svg{fill:#BDBDBD;height:1.6rem;width:1.6rem}.attachments-header .size-info{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;padding-left:1rem}.attachments-empty,.single-attachment .attachment-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.more-attachments span,.single-attachment .attachment-size{color:#BDBDBD}.attachments-header input{display:none}.attachments-empty{font-size:1.2rem;border:3px dashed #EEE;color:#BDBDBD;margin-top:.5rem;padding:1rem;text-align:center}.single-attachment{font-size:.9rem;background:rgba(255,255,255,.9)}.single-attachment .attachment-name{padding-right:1rem}.single-attachment .attachment-name svg{fill:#757575;height:.9rem;margin-right:.25rem;width:.9rem}.more-attachments{font-size:.9rem;border-bottom:1px solid #BDBDBD;display:block;padding:1rem 0 1rem 1rem}.more-attachments .more-attachments-num{color:#3f51b5;margin-left:.5rem}.more-attachments:hover{background:#fff;transition:background .2s ease-in}.attachment-preview .attachment-preview-container svg{width:3rem;height:3rem;fill:#BDBDBD}.attachment-preview .attachment-preview-container svg:hover{fill:#8c9eff;transition:fill .3s linear}.attachment-preview .previous{left:3rem;position:absolute;top:calc(50% - 3rem)}.attachment-preview .next{position:absolute;right:3rem;top:calc(50% - 3rem)}.attachment-preview img{max-height:80vh;max-width:80vw}.assignable-member-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:.25rem 0}.assigned-members-option .assignable-member-single{background:#fff;border-bottom:1px solid #EEE;cursor:pointer}.assignable-member-single:hover{background:rgba(140,158,255,.05)}.assignable-member-single .assignable-member-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.5rem;max-height:3rem;max-width:3rem}.assignable-member-single .assignable-member-name{-ms-flex:1;flex:1}.assigned-to-container{width:600px}.assignable-member-list{margin-top:1rem}.assignable-member-list .assigned-member{-ms-flex-align:center;align-items:center;background:rgba(140,158,255,.05);border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.assignable-member-list .unassign-epic{cursor:pointer;margin-right:1rem}.assignable-member-list .icon{fill:#ff5252;transition:fill .2s}.assignable-member-list .icon:hover{cursor:pointer;fill:#f44336}.belong-to-epic-pill-wrapper{display:inline-block;position:relative}.belong-to-epic-pill-wrapper:hover .belong-to-epic-pill-data{display:block}.belong-to-epics-list{margin-bottom:.5rem}.belong-to-epics-list svg{position:relative;top:.1rem}.belong-to-epics-list.unique,.belong-to-epics-list.unique li{display:inline-block}.belong-to-epics-list.unique li svg{top:.2rem}.belong-to-epic-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;padding-top:.25rem}.belong-to-epic-text-wrapper .remove-epic-relationship{display:inline-block;line-height:.5rem;margin-left:.5rem}.belong-to-epic-text-wrapper:hover .remove-epic-relationship svg{visibility:visible}.belong-to-epic-label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;background:#424242;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.detail-title-wrapper,.edit-title-wrapper{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.belong-to-epic-pill{background-color:#f5f5f5;border-radius:50%;display:inline-block;height:.7rem;margin:0 .1rem;position:relative;width:.7rem}.range-slider{-webkit-appearance:none;display:block;margin:7px 0;width:200px}.range-slider:focus{outline:0}.range-slider:focus::-webkit-slider-runnable-track{background:#1c2586}.range-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(66,66,66,.3)}.range-slider:focus::-moz-range-thumb{box-shadow:0 0 0 4px rgba(66,66,66,.3)}.range-slider:focus::-ms-fill-lower{background:#EEE}.range-slider:focus::-ms-fill-upper{background:#f3f3f3}.range-slider::-webkit-slider-runnable-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#EEE;border:0 solid transparent;border-radius:1px}.range-slider::-webkit-slider-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#424242;cursor:pointer;box-shadow:0 0 0 2px rgba(66,66,66,.3);transition:box-shadow .2s;-webkit-appearance:none;margin-top:-5.5px}.range-slider::-moz-range-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#EEE;border:0 solid transparent;border-radius:1px}.range-slider::-moz-range-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#424242;cursor:pointer;box-shadow:0 0 0 2px rgba(66,66,66,.3);transition:box-shadow .2s}.range-slider::-ms-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:0 0;border-color:transparent;border-width:14px 0;color:transparent}.range-slider::-ms-fill-lower{background:#e9e9e9;border:0 solid transparent;border-radius:2px}.range-slider::-ms-fill-upper{background:#EEE;border:0 solid transparent;border-radius:2px}.range-slider::-ms-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#424242;cursor:pointer;box-shadow:0 0 0 2px rgba(66,66,66,.3);transition:box-shadow .2s}.card{box-shadow:2px 2px 4px #d5d5d5;cursor:move;display:block;margin:0 .6rem .6rem;outline:0;overflow:hidden;transition:box-shadow .2s ease-in}.card .loading-extra.loading{padding:.2rem;text-align:center}.card:hover{box-shadow:3px 3px 6px #d5d5d5}.card-inner{background:#fff;border-radius:.25rem}.card-inner.zoom-0 .card-title,.card-inner.zoom-1 .card-title{-ms-flex:1;flex:1;margin:0;padding:.25rem}.card-inner.zoom-1 .card-owner-info{-ms-flex-align:start;align-items:flex-start}.card-inner.card-blocked{background:#ff5252}.card-inner.card-blocked .card-owner-actions,.card-inner.card-blocked .card-unfold:hover{background:rgba(255,82,82,.9)}.card-inner.card-blocked .card-estimation,.card-inner.card-blocked .card-owner-name,.card-inner.card-blocked .card-title a,.card-inner.card-blocked .statistic{color:#fff}.card-inner.card-blocked .card-task a.blocked-task{color:#f44336}.card-inner.card-blocked .card-owner-actions a:hover,.card-inner.card-blocked .statistic.active,.card-inner.card-blocked.zoom-0 .card-title,.card-inner.card-blocked.zoom-1 .card-title{color:#fff}.card-inner.card-blocked svg{fill:#fff}.card-owner-actions:hover svg,.card-statistics .statistic.active svg{fill:currentColor}.card-tags{display:-ms-flexbox;display:flex}.card-tags .card-tag{display:block;-ms-flex:1;flex:1;height:.5rem}.card-owner{position:relative}.card-owner .card-owner-info{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.card-owner .card-owner-info.multiple .card-owner-avatar img{margin-right:.45rem}.card-owner .card-owner-avatar{line-height:0;position:relative}.card-owner .is-iocaine{filter:hue-rotate(265deg) saturate(3)}.card-owner img{-ms-flex-negative:0;flex-shrink:0;height:2.5rem;margin-right:.5rem;width:2.5rem}.card-owner .card-owner-name{color:#BDBDBD}.card-owner-actions{background:rgba(255,255,255,.9);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;left:0;opacity:0;position:absolute;top:0;transition:all .2s;width:100%}.card-owner-actions:hover{color:#8c9eff}.card-owner-actions .card-actions{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:0 0 0 .5rem}.card-owner-actions .card-delete:hover{color:#ff5252}.card-owner-actions .icon{width:1.2rem;height:1.2rem;display:inline-block;margin-right:.25rem;padding:0}.card-owner-actions a{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;padding:.6rem .5rem}.card-title{font-size:1rem;line-height:1.25;margin-bottom:.25rem;padding:1rem 1rem 0}.card-title span{padding-right:.25rem}.card-data{color:#BDBDBD;display:-ms-flexbox;display:flex;font-size:14px;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem .5rem}.card-data .card-status-tag{font-size:.75rem;height:.1rem;line-height:.1rem;padding:0 .5em 0 0}.card-data .card-estimation.not-estimated{font-size:.8125rem}.card-statistics{font-size:.9rem;color:#fdfdfd;display:-ms-flexbox;display:flex;margin-left:auto}.card-statistics .statistic{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;margin-left:.5rem}.card-statistics .statistic.active{color:#8c9eff}.card-statistics .statistic.card-iocaine{cursor:help}.card-statistics .statistic.card-votes{margin-left:.2rem}.card-statistics .statistic.card-due-date{margin-left:.1rem}.card-statistics .icon{width:.75rem;height:.75rem;fill:#fdfdfd;margin-right:.2rem}.card-statistics .icon-iocaine{fill:#9c27b0}.card-completion{margin:0 1rem .5rem;position:relative}.card-completion:hover .card-tooltip{display:block}.card-completion .card-completion-bar{background:#EEE;height:.4rem;width:100%}.card-completion .card-completion-percentage{background:#8c9eff;cursor:pointer;height:.4rem;left:0;position:absolute;top:0}.card-completion .card-tooltip{background:#212121;border-radius:5px;color:#fff;display:none;font-size:14px;left:calc(25% - 50px);padding:.25rem 1rem;position:absolute;text-align:center;top:-2.25rem;width:100px}.card-completion .card-tooltip::after{background:#000;content:'';height:10px;left:50%;position:absolute;top:70%;transform:rotate(45deg);width:10px}.color-selector .tag-color.empty-color:after,.color-selector .tag-color.empty-color:before{content:"";top:0;height:48px;width:2px;background:#ff8282;position:absolute}.card-unfold{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0;outline:0;padding:.25rem}.card-unfold:hover{background:linear-gradient(to bottom,#fff,#fcfcfc)}.card-unfold svg{width:2rem;height:.3rem;fill:#EEE}.card-tasks{border-top:1px solid #EEE;margin:.5rem 0 0;padding:0}.card-task{font-size:.75rem;border-bottom:1px solid #EEE}.card-task a{color:#BDBDBD;display:block;overflow:hidden;padding:.5rem .75rem;text-overflow:ellipsis;transition:color .2s;white-space:nowrap}.card-task a.blocked-task{color:#ff5252}.card-task a.closed-task{color:#BDBDBD;text-decoration:line-through}.card-task a:hover{color:#3f51b5}.detail-header-container.blocked,.detail-header-container.blocked .detail-number,.detail-header-container.blocked .detail-subject,.detail-header-container.blocked a{color:#fff}.card-slideshow{position:relative}.card-slideshow:hover .slideshow-left,.card-slideshow:hover .slideshow-right{background:rgba(255,255,255,.2);padding:.25rem;transition:background .2s}.card-slideshow .slideshow-icon{cursor:pointer;position:absolute;top:35%}.card-slideshow .slideshow-icon:hover{background:rgba(140,158,255,.5);transition:background .2s}.card-slideshow svg{width:1.2rem;height:1.2rem;transition:fill .2s}.card-slideshow .slideshow-left,.card-slideshow .slideshow-right{background:0 0;padding:.25rem}.card-slideshow .slideshow-left{left:0}.card-slideshow .slideshow-right{right:0}.card-slideshow img{width:100%}.card-slideshow-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:120px;-ms-flex-pack:center;justify-content:center;overflow:hidden}.card-slideshow-wrapper .loading-spinner{min-height:3rem;min-width:3rem}.color-selector{position:relative}.color-selector .tag-color{cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;border:1px solid #BDBDBD;border-radius:0;margin:0;transition:background .3s ease-out}.color-selector .tag-color:nth-child(7n){margin-right:0}.color-selector .tag-color.disabled{cursor:auto}.color-selector .tag-color.empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative}.color-selector .tag-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector .tag-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.color-selector-dropdown{background:#212121;left:0;padding:1rem;position:absolute;top:2.25rem;width:332px;z-index:99}.color-selector-dropdown-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;margin-bottom:0}.color-selector-dropdown-list .color-selector-option{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0}.color-selector-dropdown-list .color-selector-option:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0;background:#f5f5f5;border:1px solid #EEE;position:relative}.color-selector-dropdown-list .empty-color:after,.color-selector-dropdown-list .empty-color:before{width:2px;height:48px;background:#ff8282;position:absolute;top:0;content:""}.color-selector-dropdown-list .empty-color:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector-dropdown-list .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.custom-color-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.custom-color-selector .custom-color-input{margin:0;width:100%}.custom-color-selector .display-custom-color-wrapper{background:#f5f5f5;margin-right:.5rem}.custom-color-selector .display-custom-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;-ms-flex-negative:0;flex-shrink:0;margin:0}.custom-color-selector .display-custom-color:nth-child(7n){margin-right:0}.custom-color-selector .display-custom-color.empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative;cursor:default}.custom-color-selector .display-custom-color.empty-color:after{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(-45deg);position:absolute;top:0;left:0;transform-origin:top}.custom-color-selector .display-custom-color.empty-color:before{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(45deg);position:absolute;top:0;right:0;transform-origin:top}.detail-header-container{background:#f5f5f5;-ms-flex:1;flex:1;padding:1rem;position:relative}.detail-header-container.blocked,.detail-title-wrapper.blocked{background:#f44336;transition:all .2s linear}.detail-header-container:hover .detail-edit{opacity:1}.detail-header-container.blocked svg{fill:#fff}.detail-header-container .belong-to-epics-wrapper,.detail-header-container .block-desc-container,.detail-header-container .issue-external-reference,.detail-header-container .item-generated-us,.detail-header-container .item-origin-issue,.detail-header-container .task-belongs-to{font-size:.9rem;margin-top:.5rem}.detail-header-container .relate-to-epic-button{color:#BDBDBD;cursor:pointer;display:inline-block}.detail-header-container .relate-to-epic-button:hover{color:#8c9eff}.detail-header-container .relate-to-epic-button .icon-epics{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.detail-header-container .relate-to-epic-button .relate-to-epic-text{font-size:.9rem}.detail-header-container .issue-external-reference a,.detail-header-container .item-generated-us a,.detail-header-container .item-origin-issue a,.detail-header-container .task-belongs-to a{cursor:pointer;padding:0 .2rem}.detail-header-container .issue-external-reference .item-ref,.detail-header-container .item-generated-us .item-ref,.detail-header-container .item-origin-issue .item-ref,.detail-header-container .task-belongs-to .item-ref{padding:0 .2rem}.detail-title-wrapper{font-size:1.6rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;max-width:95%;position:relative;transition:all .2s linear}.detail-title-wrapper .detail-title-text{line-height:normal;margin:0}.detail-title-wrapper .detail-number{color:#BDBDBD;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.detail-title-wrapper .detail-subject{color:#757575;-ms-flex-positive:1;flex-grow:1}.detail-title-wrapper .detail-edit{cursor:pointer;margin-left:.75rem;opacity:0;transition:opacity .2s}.detail-title-wrapper .detail-edit svg,.detail-title-wrapper .due-date-icon svg{width:1.3rem;height:1.3rem}.detail-title-wrapper.readonly .due-date-icon{margin-left:2.7rem}.edit-title-wrapper{font-size:1.6rem;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-input{background:#fff;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-button{background:0 0;display:inline;transition:fill .2s}.due-date-icon,.issue-nav a{display:inline-block}.edit-title-wrapper .edit-title-button:hover{fill:#3f51b5}.edit-title-wrapper .save-title-button{margin-left:1rem}.block-desc-container .block-description-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-right:.5rem}.issue-nav{position:absolute;right:1rem;top:1rem}.issue-nav svg{width:1.2rem;height:1.2rem;fill:currentColor}.due-date-button,[disabled].due-date-button{background:#BDBDBD;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.due-date-button.closed,.due-date-button.text-button.closed:hover,[disabled].due-date-button.closed,[disabled].due-date-button.text-button.closed:hover{background:#B8B8B8;border-color:#B8B8B8}.due-date-button.due-set,.due-date-button.text-button.due-set:hover,[disabled].due-date-button.due-set,[disabled].due-date-button.text-button.due-set:hover{background:#9dce0a;border-color:#9dce0a}.due-date-button.due-soon,.due-date-button.text-button.due-soon:hover,[disabled].due-date-button.due-soon,[disabled].due-date-button.text-button.due-soon:hover{background:#fcaf3e;border-color:#fcaf3e}.due-date-button.past-due,.due-date-button.text-button.past-due:hover,[disabled].due-date-button.past-due,[disabled].due-date-button.text-button.past-due:hover{background:#ff5252;border-color:#ff5252}.due-date-button:hover,[disabled].due-date-button:hover{background:#757575}.due-date-button.editable,[disabled].due-date-button.editable{cursor:pointer}.due-date-button.text-button,[disabled].due-date-button.text-button{color:#fff;margin:0;padding:.5rem}.due-date-button.text-button.not-set:hover,[disabled].due-date-button.text-button.not-set:hover{color:#fff}.due-date-button.text-button.not-set,[disabled].due-date-button.text-button.not-set{color:#757575}.due-date-icon{margin:0 .25rem;position:relative}.due-date-icon svg{fill:#BDBDBD;transition:fill .2s ease-in}.due-date-icon.closed svg{fill:#B8B8B8}.due-date-icon.due-set svg{fill:#9dce0a}.due-date-icon.due-soon svg{fill:#fcaf3e}.due-date-icon.past-due svg{fill:#ff5252}.backlog-table-body .user-story-name .due-date-icon,.related-tasks .task-name .due-date-icon{top:.1rem}.issues-table .subject .due-date-icon{top:.25rem}.card-statistics .due-date-icon{margin:.1rem 0 0}.card-statistics .due-date-icon svg{height:.9rem;width:.9rem}.due-date-button-wrapper{display:-ms-flexbox;display:flex;position:relative}.date-picker-container{overflow:visible}.date-picker-popover{background:#fff;border:1px solid #757575;left:0;overflow:visible;position:absolute;top:56px;width:auto}.date-picker-popover .pika-single.is-bound{border:0;box-shadow:none}.date-picker-popover-footer{padding:.2rem .5rem;text-align:right}.date-picker-popover-footer svg{fill:#757575;height:1rem;width:1rem}.date-picker-popover-footer a:hover svg{fill:#f44336}tg-filter{background-color:#f5f5f5;display:block;left:0;min-height:100%;padding:1rem 0;position:absolute;top:0;transform:translateX(-260px);transition-duration:.5s;width:260px;z-index:1}tg-filter .filters-applied{padding:0 1rem 1rem}tg-filter .filters-applied .single-filter:hover{color:currentColor;cursor:default;opacity:.5;transition:none}tg-filter form,tg-filter h1{padding:0 1rem}tg-filter input{background:#424242;color:#fff;padding-right:2rem}tg-filter input::-webkit-input-placeholder{color:#BDBDBD}tg-filter input::-moz-placeholder{color:#BDBDBD}tg-filter input:-moz-placeholder{color:#BDBDBD}tg-filter input:-ms-input-placeholder{color:#BDBDBD}tg-filter .search-action{position:absolute;right:.7rem;top:.7rem}tg-filter.open{box-shadow:1px 1px 5px rgba(63,81,181,.2);transform:translateX(0)}.filter-list{overflow-y:auto;padding:1rem}.filters-step-cat{margin-top:2rem}.filters-cats ul{margin-bottom:0}.filters-cats li{border-bottom:1px solid #BDBDBD;text-transform:uppercase}.filters-cats li.selected{border-bottom:0}.filters-cats .custom-filters .title{color:#3f51b5}.filters-cats .filters-cat-single{-ms-flex-align:center;align-items:center;color:#424242;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 1.5rem;transition:color .2s ease-in}.filters-cats .filters-cat-single.selected,.filters-cats .filters-cat-single:hover{background-color:#d5d5d5;color:#424242;transition:background-color .2s ease-in}.filters-cats .filters-cat-single.selected .icon,.filters-cats .filters-cat-single:hover .icon{opacity:1;transition:opacity .2s ease-in}.filters-cats .icon-arrow-down{fill:currentColor;float:right;height:.9rem;opacity:0;transition:opacity .2s ease-in;width:.9rem}.single-filter{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-align:center;align-items:center;background:#e1e1e1;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;opacity:.5;padding-right:.5rem;position:relative}.live-announcement-inner .title,.live-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.single-filter::after{clear:both;content:"";display:block}.single-filter:hover{background:#dadada;opacity:1;transition:opacity .2s linear}.single-filter.active,.single-filter.selected{color:#424242;opacity:1;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;border-color:transparent;border-style:solid;border-width:0 0 0 3px;display:block;width:100%}.profile-bar .not-full-name,.profile-bar h1,.wysiwyg p{word-wrap:break-word}.single-filter .number{background:#bbb;position:absolute;right:0;top:0}.single-filter .remove-filter{cursor:pointer;display:block}.single-filter .remove-filter svg{fill:#757575;transition:fill .2s linear}.single-filter .remove-filter:hover svg{fill:#f44336}.live-announcement{-ms-flex-line-pack:center;align-content:center;background:#107a8a;display:-ms-flexbox;display:flex;height:0;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.live-announcement .live-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.live-announcement.visible{height:146px;pointer-events:auto;transition-delay:0s;width:100%}.live-announcement.visible .live-announcement-inner{opacity:1;transition:opacity .5s .5s}.live-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.live-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;margin-right:1rem}.live-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.live-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.live-announcement-inner .warning,.live-announcement-inner .warning a{color:#0b525c}.live-announcement-inner .close{display:block;position:absolute;right:0;top:1rem}.live-announcement-inner .close svg{width:2rem;height:2rem;fill:#138ea1;pointer-events:none;transition:fill .2s}.live-announcement-inner .close svg:hover{fill:#0b525c}.lightbox-move-to-sprint .move-to-sprint-container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:550px;width:100%}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header{margin:0 auto;max-width:400px;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header ul{display:inline-block;margin:.5em auto 2.5em;width:auto}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header li{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header .check{margin-left:4em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls p{margin-bottom:2.5em;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .sprint-select{margin-top:.5em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .move-button{width:100%}.move-to-sprint-button{color:#fff}.move-to-sprint-button:not(.disabled){cursor:pointer}.move-to-sprint-button:not(.disabled):hover{color:#8c9eff}.move-to-sprint-button.disabled:hover,.search-list .choice.selected .info{color:#fff}.move-to-sprint-button.disabled{opacity:.5}.search-list .show-closed{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;float:right;font-size:.9em}.add-tag-button .add-tag-text,.tag{font-size:.9rem}.search-list .show-closed svg{height:1em;margin-right:.25em;width:1em}.search-list ul{background:#f5f5f5;border:1px solid #BDBDBD;height:200px;margin:.25em 0 0;max-height:200px;overflow-y:auto}.search-list .choice{cursor:pointer;padding:.25em .5em}.search-list .choice.selected{background:#9dce0a;color:#fff}.search-list .choice[disabled]{color:#B8B8B8;cursor:not-allowed}.search-list .choice[disabled] .info{color:#B8B8B8}.search-list .choice ng-include{display:-ms-flexbox;display:flex;width:100%}.search-list .choice ng-include .title{-ms-flex-positive:1;flex-grow:1;text-align:left}.search-list .choice ng-include .info{color:#BDBDBD;text-align:right}.search-list .choice .title span{margin-right:.5em}.add-tag-input{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative;width:250px}.add-tag-input input{border-color:#BDBDBD;padding:6px;width:14rem}.add-tag-input .save{cursor:pointer;display:inline-block;fill:#424242;margin:.5rem 0 0 .5rem;transition:.2s linear}.add-tag-input .save:hover{fill:#3f51b5}.add-tag-input .tags-dropdown{font-size:.9rem;background:#fff;border:1px solid #BDBDBD;border-top:0;box-shadow:2px 2px 3px rgba(0,0,0,.2);left:0;max-height:20vh;min-height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:2.25rem;width:85%;z-index:99}.add-tag-input .tags-dropdown-option{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.tags-block,.terms-announcement{align-content:center;display:-ms-flexbox}.add-tag-input .tags-dropdown-color{height:1rem;width:1rem}.add-tag-input li.selected,.add-tag-input li:hover{background:#fff;cursor:pointer;transition:.2s;transition-delay:.1s}.tags-block{-ms-flex-line-pack:center;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.add-tag-button,.tag{display:inline-block}.add-tag-button{color:#BDBDBD;cursor:pointer}.add-tag-button:hover{color:#8c9eff}.add-tag-button .icon-add{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#f5f5f5;border-left:5px solid;border-radius:0 5px 5px 0;color:#424242;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.terms-announcement-inner .title,.terms-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.tag .icon-close{width:.7rem;height:.7rem;cursor:pointer;fill:#ff5252;margin-left:.25rem}.tag .loading-spinner{height:1rem;width:1rem}.terms-announcement{-ms-flex-line-pack:center;background:#107a8a;display:flex;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.terms-announcement .terms-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.terms-announcement.visible{min-height:146px;pointer-events:auto;transition-delay:0s;width:100%}.terms-announcement.visible .terms-announcement-inner{opacity:1;transition:opacity .5s .5s}.terms-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.terms-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;height:auto;margin-right:1rem}.terms-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.terms-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.terms-announcement-inner .warning,.terms-announcement-inner .warning a{color:#0b525c}.tribe-linked.is-active .delete-link,.tribe-linked.is-active .gig-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.terms-announcement-inner .close{display:block;position:absolute;right:.5rem;top:1rem}.terms-announcement-inner .close svg{width:2rem;height:2rem;fill:#f5f5f5;pointer-events:none;transition:fill .2s}.terms-announcement-inner .close svg:hover{fill:#0b525c}.terms-announcement-inner a{color:#f5f5f5}.loader .tip-color-1 p{color:#ae4fb0}.loader .tip-color-1 svg{fill:#ae4fb0;stroke:#ae4fb0}.loader .tip-color-2 p{color:#4e88df}.loader .tip-color-2 svg{fill:#4e88df;stroke:#4e88df}.loader .tip-color-3 p{color:#6360d6}.loader .tip-color-3 svg{fill:#6360d6;stroke:#6360d6}.loader .tip-color-4 p{color:#47b3a6}.loader .tip-color-4 svg{fill:#47b3a6;stroke:#47b3a6}.loader .tip-color-5 p{color:#d76969}.loader .tip-color-5 svg{fill:#d76969;stroke:#d76969}.tip{text-align:center;width:auto}.tip .translate-cloak{display:none}.tip p{display:-ms-flexbox;display:flex;font-size:1.1em;-ms-flex-pack:center;justify-content:center;margin-bottom:1em;max-width:440px}.tip p.title{color:#000;font-size:1em;margin-bottom:1.75em}.tip p.range{width:1px}.tip svg{height:32px;margin:0 .3em;width:32px}.tip svg.icon-upvote{height:30px;width:24px}.tip .range-slider{display:initial;width:100px}.tip .arrows svg{height:40px;margin:0}.tip .arrows svg.icon-arrow-left{margin-left:7px}.tip .arrows svg.icon-arrow-right{margin-left:-7px}.tribe-linked{margin-left:auto;overflow:hidden;position:absolute;right:0;top:0;z-index:99}.tribe-linked .tribe-linked-inner{padding:.5rem;transition:.2s}.tribe-linked .tribe-linked-inner:hover{background:#fff;cursor:pointer}.tribe-linked .tribe-linked-inner .close,.tribe-linked .tribe-linked-inner .delete-link,.tribe-linked .tribe-linked-inner .gig-title,.tribe-linked .tribe-linked-inner .synchronize-link,.tribe-linked .tribe-linked-inner .title{display:none;opacity:0}.tribe-linked .tribe-logo{height:2rem;width:2rem}.tribe-linked.is-active{animation-duration:1s;animation-name:slideTribeInner;background:#fff;box-shadow:1px 1px 5px rgba(66,66,66,.2);overflow:hidden}.epic-row .epic-statuses,.epics-table-dropdown{box-shadow:3px 3px 2px rgba(0,0,0,.1);z-index:99}.tribe-linked.is-active .tribe-linked-inner{height:100%;min-width:300px}.tribe-linked.is-active .tribe-linked-inner .close,.tribe-linked.is-active .tribe-linked-inner .delete-link,.tribe-linked.is-active .tribe-linked-inner .gig-title,.tribe-linked.is-active .tribe-linked-inner .synchronize-link,.tribe-linked.is-active .tribe-linked-inner .title{animation-duration:1.25s;animation-name:fadeInFromNone;display:block;opacity:1}.tribe-linked.is-active .tribe-linked-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.tribe-linked.is-active .tribe-logo{margin-right:.5rem;vertical-align:text-bottom}.tribe-linked.is-active svg{width:1rem;height:1rem;fill:#ff5252;transition:all .2s}.tribe-linked.is-active svg:hover{fill:#f44336}.tribe-linked.is-active .title{margin-bottom:0}.tribe-linked.is-active .gig-title{color:#107a8a;margin-bottom:.5rem}.tribe-linked.is-active .delete-link{font-size:.9rem;color:#3f51b5;display:block;margin-bottom:1rem}.tribe-linked.is-active .synchronize-link{display:block;padding:.5rem}.tribe-linked.is-active .close{-ms-flex-item-align:start;align-self:flex-start;margin-left:1rem}@keyframes slideTribeInner{0%{max-height:60px;width:100px}20%{max-height:60px;width:300px}100%{max-height:225px}}@keyframes fadeInFromNone{0%{display:none;opacity:0}80%{display:block;opacity:0}100%{display:block;opacity:1}}tg-wysiwyg-code-lightbox textarea{height:350px}.wysiwyg{line-height:1.4rem;overflow:auto;padding:1rem}.wysiwyg h1,.wysiwyg h2,.wysiwyg h3{padding-bottom:.5rem}.wysiwyg h1{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:2.25em;line-height:1.2;margin-bottom:1rem;margin-top:1rem;text-transform:uppercase}.wysiwyg h2,.wysiwyg h3,.wysiwyg h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-top:1rem;margin-bottom:1rem}.wysiwyg h2{font-size:1.6rem;line-height:1.225}.wysiwyg h3{font-size:1.2rem}.wysiwyg ol,.wysiwyg ul{line-height:1.5;list-style-position:outside;margin-bottom:1rem;margin-top:0;padding-left:2em}.wysiwyg ol ol,.wysiwyg ol ul,.wysiwyg ul ol,.wysiwyg ul ul{padding-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#3f51b5;cursor:pointer}.wysiwyg a:hover{color:#8c9eff}.wysiwyg code,.wysiwyg pre:not([class*=language-]){font-size:.9rem;background:#272822;color:#EEE;direction:ltr;font-family:'courier new',monospace;overflow:auto;unicode-bidi:embed}.wysiwyg p{margin-bottom:1rem}.wysiwyg .codehilite{overflow:auto}.wysiwyg blockquote p{margin:0}.wysiwyg pre:not([class*=language-]){line-height:1.4rem;margin-bottom:.5rem;padding:1rem;white-space:pre-wrap}.wysiwyg code{padding:.2rem}.wysiwyg table{border:1px solid #BDBDBD;margin-bottom:1rem}.medium-editor-mention-panel ul,tg-wysiwyg div[contenteditable=true] :last-child{margin-bottom:0}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#BDBDBD 1px solid}.wysiwyg th{border-right:#BDBDBD 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#BDBDBD 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.wysiwyg textarea{background:#fff;max-height:none}.wysiwyg hr{border:1px solid #EEE}.medium-editor-mention-panel{background-color:#fff;border:1px solid #BDBDBD;position:absolute}.medium-editor-mention-panel:empty{border:0}.medium-editor-mention-panel li{border-top:1px solid #BDBDBD;cursor:pointer;padding:2px 5px}.medium-editor-mention-panel li:first-child{border-top:0}.medium-editor-mention-panel li.active,.medium-editor-mention-panel li:hover{background-color:#1a237e;color:#fff}.code-language-search,.code-language-selector{font-size:.75rem;background-color:#fff;position:absolute}tg-wysiwyg{display:-ms-flexbox;display:flex;margin-bottom:2rem}tg-wysiwyg pre{cursor:pointer}tg-wysiwyg .outdated{color:#f44336}tg-wysiwyg .tools{padding-left:1rem}tg-wysiwyg .tools:not(.visible){opacity:0;pointer-events:none}tg-wysiwyg .tools:not(.visible) a{cursor:default}tg-wysiwyg .tools a{display:block;margin-bottom:.5rem}tg-wysiwyg .tools svg{fill:#BDBDBD}tg-wysiwyg .editor{width:100%}tg-wysiwyg .mode-editor span{color:#BDBDBD;cursor:pointer;margin-right:.5rem}tg-wysiwyg .markdown-editor-placeholder,tg-wysiwyg .medium-editor-placeholder{color:#BDBDBD;overflow:visible;padding-left:1rem}tg-wysiwyg .markdown-editor-placeholder::after,tg-wysiwyg .medium-editor-placeholder::after{color:#BDBDBD;font-style:normal}tg-wysiwyg .markdown:not(.empty) p{margin-bottom:0;white-space:pre-wrap}tg-wysiwyg .read-mode{cursor:pointer}tg-wysiwyg .medium{border:1px solid transparent}.code-language-search,.code-language-selector,tg-wysiwyg .edit-mode .markdown,tg-wysiwyg .edit-mode .medium{border:1px solid #BDBDBD}tg-wysiwyg .edit-mode .medium-editor-element{min-height:10rem}.code-language-selector{cursor:pointer;padding:.2rem .5rem 0}.code-language-search ul{cursor:pointer;margin-bottom:0;max-height:20vh;overflow-y:scroll}.epic-row .sprint,.epics-table-header .sprint,.story-row .sprint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.code-language-search li{padding:.2rem .5rem}.medium-editor-toolbar li .medium-editor-button-active{color:#8c9eff}.medium-editor-toolbar svg{fill:#fff}.medium-editor-toolbar button:hover svg{fill:#8c9eff}.discover-header{background:url(../images/discover.png) bottom left repeat-x #EEE;margin-bottom:2.5rem;padding:1rem 1rem 2rem;text-align:center}.discover-header .discover-header-inner{max-width:1200px;min-width:768px;margin:0 auto}.discover-header .title{font-size:3rem;margin-bottom:0}.discover-header .project-number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#3f51b5}.discover-results-header .title,.featured-projects .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.discover-header form{margin:0 30%;position:relative}@media (max-width:767px){.discover-header .discover-header-inner{width:90%;min-width:0}.discover-header form{margin:0 .5rem}}.discover-header input[type=text]{background:#fff;border:0;padding:1rem;width:100%}.discover-header input[type=text]:focus{outline-color:#8c9eff}.discover-header input[type=text]:-webkit-autofill{background:rgba(26,35,126,.5)}.discover-header .search-button{width:1.5rem;height:1.5rem;fill:#BDBDBD;position:absolute;right:1rem;top:1rem;transition:fill .2s}.discover-header .search-button:hover{cursor:pointer;fill:#3f51b5}.discover-results-header .discover-results-header-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.discover-results-header svg{width:1.2rem;height:1.2rem;fill:#BDBDBD;margin-right:.25rem}.discover-results-header .title{font-size:1.6rem;text-transform:uppercase}.discover-results-header h2{display:inline-block}.filter-discover-search .discover-search-filter{margin-right:1rem}.filter-discover-search .discover-search-filter.active{color:#3f51b5}.filter-discover-search .discover-search-filter.active svg{fill:#3f51b5}.filter-discover-search svg{width:.8rem;height:.8rem}.discover-search-subfilter{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative}.discover-search-subfilter:after,.discover-search-subfilter:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.discover-search-subfilter:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.discover-search-subfilter:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.discover-search-subfilter.most-liked-subfilter::after,.discover-search-subfilter.most-liked-subfilter::before{left:85%}.discover-search-subfilter.most-active-subfilter::after,.discover-search-subfilter.most-active-subfilter::before{left:95%}.discover-search-subfilter.ng-enter{animation:dropdownFade .2s}.discover-search-subfilter .results{font-size:.9rem;color:#ff5252;display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .results:hover{color:#f44336}.discover-search-subfilter .filter-list{display:-ms-flexbox;display:flex;margin:0 0 0 auto}.discover-search-subfilter .filter-list a{display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .filter-list a:hover{background:#BDBDBD;color:currentColor}.discover-search-subfilter .filter-list a.active{background:#8c9eff;color:#fff}.featured-projects{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.featured-projects{width:90%;min-width:0}}.featured-projects .title{font-size:1.6rem;color:#424242;text-align:center}.featured-projects-inner{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.featured-project{background:#fff;border:1px solid #EEE;margin:.5rem;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:23%;flex-basis:23%;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:23%}.featured-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.featured-project .project-tag{-ms-flex:1;flex:1}.featured-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.featured-project .project-card-description{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575}.featured-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.featured-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.featured-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.featured-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.featured-project .statistic{font-size:.9rem;color:#BDBDBD;display:inline-block;margin-right:.5rem}.featured-project .statistic.active{color:#3f51b5}.featured-project .statistic.active svg{fill:currentColor}.featured-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.featured-project .project-card-header .icon-badge{fill:#8c9eff}.featured-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.featured-project .project-card-logo img{width:100%}.featured-project .project-card-name{line-height:1.25}.featured-project .project-card-name a{font-size:1.2rem;color:#3f51b5}.featured-project .project-card-name a:hover{color:#8c9eff}@media (max-width:767px){.featured-project{-ms-flex-preferred-size:45%;flex-basis:45%}}@media (max-width:480px){.featured-project{-ms-flex-preferred-size:100%;flex-basis:100%}}.highlighted{margin:1rem auto 4rem;max-width:1200px;min-width:768px;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}@media (max-width:767px){.highlighted{width:90%;min-width:0;-ms-flex-direction:column;flex-direction:column}.highlighted tg-most-active{margin-top:4rem}}.highlighted tg-most-active,.highlighted tg-most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.highlighted tg-most-liked{margin-right:8%}@media (max-width:767px){.highlighted tg-most-liked{margin-right:0}}.highlighted .most-active,.highlighted .most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column}.highlighted .header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.highlighted .header svg{width:.8rem;height:.8rem;fill:#BDBDBD;margin-left:.5rem}.highlighted .title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.highlighted .title-wrapper svg{width:1.25rem;height:1.25rem;fill:#BDBDBD;margin-right:.5rem}.highlighted .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.6rem;color:#424242;display:inline-block;margin:0}.highlighted .highlighted-projects-container{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.highlighted .loading-container{margin-top:calc(50% - 1rem)}.highlighted .loading-spinner{display:block;margin:2rem auto;max-height:3rem;max-width:3rem}.highlighted .view-more-projects{margin-top:auto;width:100%}.highlighted .empty-highlighted-project{border:2px dashed #EEE;-ms-flex:1;flex:1;padding:2rem;text-align:center}.highlighted .empty-highlighted-project svg{width:2rem;height:2rem;display:block;fill:#BDBDBD;margin:1rem auto}.highlighted .empty-highlighted-project span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block}.filter-highlighted{position:relative}.filter-highlighted .current-filter{padding:1rem}.filter-highlighted .current-filter span{margin-left:.2rem;position:relative;top:.2rem}.filter-highlighted .current-filter:hover svg{fill:currentColor}.filter-highlighted .filter-list{background:#000;position:absolute;right:0;top:1.5rem}.filter-highlighted .filter-list.ng-enter{animation:dropdownFade .2s ease-in}.filter-highlighted .filter-list.ng-leave{animation:dropdownFade .2s ease-in;animation-direction:reverse}.filter-highlighted li{font-size:.9rem;color:#fff;cursor:pointer;min-width:8rem;padding:.25rem .5rem}.filter-highlighted li:hover{background:rgba(140,158,255,.4)}.highlighted-project{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:9rem;flex-basis:9rem;min-height:9rem;padding:1.5rem 0}.highlighted-project:nth-last-child(-n+2){border-bottom:0}.highlighted-project .project-logo{-ms-flex-preferred-size:3rem;flex-basis:3rem;height:auto;margin-right:1rem;width:3rem}.highlighted-project .project-logo img{width:100%}.highlighted-project .project-data-container{-ms-flex:1;flex:1}.highlighted-project .single-project-header{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.highlighted-project .project-title{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.epic-row .epic-pill,.epic-row .epic-statuses{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.highlighted-project .project-title a{color:#3f51b5}.highlighted-project .project-title a:hover{color:#8c9eff}.highlighted-project .project-description{font-size:.9rem;color:#757575;margin-bottom:0}.highlighted-project .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:end;justify-content:flex-end}.highlighted-project .project-statistics svg{width:.75rem;height:.75rem;fill:#BDBDBD;margin-right:.25rem}.highlighted-project .statistic{font-size:.9rem;color:#BDBDBD;display:inline-block;margin-right:.5rem}.highlighted-project .statistic.active{color:#3f51b5}.highlighted-project .statistic.active svg{fill:#3f51b5}.discover-search .discover-header form{margin:0 8rem;position:relative}.discover-search .discover-header .search-button{left:1rem;right:auto}.discover-search .discover-header .searchbox input{padding-left:3.5rem;padding-right:23rem}.discover-search .searchbox-filters{position:absolute;right:1rem;top:.7rem;width:auto}.discover-search .searchbox-filters input{display:none}.discover-search .searchbox-filters label{border-radius:4px;color:#BDBDBD;cursor:pointer;display:inline-block;padding:.4rem .75rem;transition:all .2s;transition-delay:.2s}.discover-search .searchbox-filters label.active{background:#8c9eff;color:#fff}.discover-search .searchbox-filters label:hover{background:#EEE;color:#757575}.discover-results{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.discover-results{width:90%;min-width:0}}.discover-results .discover-results-inner .spin{margin-top:4rem}.discover-results .list-itemtype-project{border-bottom:1px solid #BDBDBD;display:-ms-flexbox;display:flex;padding:1rem 0}.discover-results .list-itemtype-project:last-child{border-bottom:0}.discover-results .list-itemtype-project-left{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;width:100%}.discover-results .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.discover-results .list-itemtype-project-data{-ms-flex:1;flex:1;vertical-align:middle}.discover-results .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-pack:end;justify-content:flex-end}.discover-results .project-statistics svg{width:.7rem;height:.7rem;fill:#BDBDBD;margin-right:.2rem}.discover-results .statistic{font-size:.9rem;color:#BDBDBD;display:inline-block;margin-right:.5rem}.discover-results .statistic svg{fill:#BDBDBD;stroke:#BDBDBD}.discover-results .statistic.active{color:#3f51b5}.discover-results .statistic.active svg{fill:#3f51b5}.discover-results .more-results{display:block;margin:0 20rem;transition:inherit}.discover-results div[tg-loading] img{display:block;margin:0 auto}.lightbox-create-epic{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1}.lightbox-create-epic .create-epic-container{max-width:700px;width:90%}.lightbox-create-epic .subject-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.lightbox-create-epic .subject-container .subject{padding-left:1rem;width:100%}.lightbox-create-epic .attachments{margin-bottom:0}.lightbox-create-epic .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-create-epic .settings fieldset{margin-right:.5rem}.lightbox-create-epic .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-create-epic .settings fieldset:last-child{margin:0}.lightbox-create-epic .settings input{display:none}.lightbox-create-epic .settings input:checked+label{background:#3f51b5;border:1px solid #3f51b5;color:#fff}.lightbox-create-epic .settings input:checked+.blocked{background:#f44336;border:1px solid #f44336;color:#fff}.lightbox-create-epic label{font-size:.9rem;background:#f5f5f5;border:1px solid #BDBDBD;color:#BDBDBD;cursor:pointer;display:block;padding:.5rem 3rem;text-transform:none;transition:all .2s ease-in}.lightbox-create-epic label:hover{background:#8c9eff;border:1px solid #3f51b5;color:#fff}.lightbox-create-epic label.blocked:hover{background:#ff5252;border:1px solid #f44336}.lightbox-create-epic .create-epic-button{display:block;width:100%}.epic-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #EEE;cursor:move;display:-ms-flexbox;display:flex;transition:background .2s}.epic-row .assigned,.epic-row .project{padding:.5rem}.epic-row .name,.epic-row .progress,.epic-row .sprint,.epic-row .status,.epic-row .vote{padding:1rem .5rem}.epic-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .assigned,.epic-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .sprint,.epic-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epic-row .name,.epic-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epic-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epic-row .sprint{width:90%}.epic-row:hover{background:rgba(140,158,255,.05)}.epic-row:hover .icon-drag{opacity:1}.epic-row.not-empty{cursor:pointer}.epic-row.is-blocked{background:rgba(255,82,82,.5)}.epic-row.is-closed .name a{color:#e3e3e3;text-decoration:line-through}.epic-row.unfold .name .icon{transform:rotate(0)}.epic-row .name .icon{transform:rotate(180deg);transition:all .2s}.epic-row .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#EEE;opacity:0;transition:opacity .1s}.epic-row .epic-pill{font-size:.75rem;background:#424242;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.epic-row .status{cursor:pointer;position:relative}.epic-row .status button{background:0 0}.epic-row .icon-arrow-down{width:.7rem;height:.7rem;fill:#BDBDBD;margin-left:.1rem}.epic-row .progress-bar,.epic-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.epic-row .progress-bar{background:#f5f5f5;max-width:40vw;padding-right:1rem;width:100%}.epic-row .progress-status{background:#8c9eff;width:10vw}.epic-row .vote{color:#757575}.epic-row .vote.is-voter{color:#8c9eff;fill:#8c9eff}.epic-row .assigned img{width:40px}.epic-row .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.epic-row .is-unassigned{color:#BDBDBD}.epic-row .epic-statuses{font-size:.9rem;background:rgba(33,33,33,.9);border-bottom:1px solid #424242;color:#fff;left:0;list-style-type:none;margin:0;position:absolute;text-align:left;top:2.5rem;width:200px}.epic-row .epic-statuses:last-child{border:0}.epic-row .epic-statuses li{padding:.5rem}.epic-row .epic-statuses li:hover{color:#8c9eff;transition:color .3s linear}.empty-epics{text-align:center}.empty-epics a{color:#3f51b5;display:block;margin-bottom:2rem}.epics-table{margin-top:2rem}.epics-table .loading{margin:2% auto;width:3rem}.epics-table .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.epics-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD;display:-ms-flexbox;display:flex;padding:.5rem;position:relative}.epics-table-header .name,.epics-table-header .progress,.epics-table-header .sprint,.epics-table-header .status,.epics-table-header .vote{padding:1rem .5rem}.epics-table-header .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epics-table-header .assigned,.epics-table-header .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center;padding:1rem .5rem}.epics-table-header .sprint,.epics-table-header .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epics-table-header .name,.epics-table-header .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epics-table-header .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epics-table-header .sprint{width:90%}.epics-table-options-wrapper{bottom:1rem;position:absolute;right:.5rem}.epics-table-option-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0}.epics-table-option-button .icon{width:.7rem;height:.7rem}.epics-table-dropdown{background:#fff;border-bottom:1px solid rgba(0,0,0,.1);border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);padding:.5rem;position:absolute;right:0;top:1.3rem;width:250px}.epics-table-dropdown.ng-hide-remove{animation:dropdownFade .2s}.epics-table-dropdown.ng-hide-add{animation:dropdownFade .2s reverse}.epics-table-dropdown .fieldset{font-size:.9rem;border-bottom:1px solid #EEE;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.epics-table-dropdown .fieldset:last-child{border:0}.story-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;margin-left:4rem;transition:background .2s}.story-row .assigned,.story-row .project{padding:.5rem}.story-row .name,.story-row .progress,.story-row .sprint,.story-row .status,.story-row .vote{padding:1rem .5rem}.story-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .assigned,.story-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .sprint,.story-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.story-row .name,.story-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.story-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.story-row .sprint{width:90%}.story-row:hover{background:rgba(140,158,255,.05)}.story-row.is-blocked{background:rgba(255,82,82,.5)}.story-row.is-closed .name{color:#BDBDBD;text-decoration:line-through}.story-row .name{-ms-flex-preferred-size:17.5vw;flex-basis:17.5vw}.story-row .name a{cursor:pointer}.story-row .progress-bar,.story-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.story-row .progress-bar{background:#f5f5f5;max-width:40vw;width:100%}.story-row .progress-status{background:#8c9eff;width:10vw}.story-row .vote{color:#757575}.story-row .vote.is-voter{color:#8c9eff;fill:#8c9eff}.story-row .project{cursor:pointer}.story-row .assigned img,.story-row .project img{width:40px}.story-row .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.lightbox-create-related-user-stories .lightbox-create-related-user-stories-wrapper{max-width:600px;width:90%}.lightbox-create-related-user-stories .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-create-related-user-stories .related-with-selector input{display:none}.lightbox-create-related-user-stories .related-with-selector input:checked+label{background:#8c9eff;color:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input:checked+label:hover{background:#8c9eff}.lightbox-create-related-user-stories .related-with-selector input+label{background:rgba(238,238,238,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input+label:hover{background:rgba(140,158,255,.3);transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-create-related-user-stories fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-create-related-user-stories .new-user-story-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-create-related-user-stories .existing-user-story-form,.lightbox-create-related-user-stories .new-user-story-form{margin-bottom:1rem}.lightbox-create-related-user-stories .no-stories-found{padding:1rem 0 0}.lightbox-create-related-user-stories .new-user-story-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-create-related-user-stories .new-user-story-options input{display:none}.lightbox-create-related-user-stories .new-user-story-options input:checked+label{background:#8c9eff;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label{background:#f5f5f5;color:#424242;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label:hover{background:#8c9eff;color:#fff;fill:#fff}.lightbox-create-related-user-stories button{width:100%}.related-userstories{margin-bottom:2rem;position:relative}.related-userstories-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-userstories-header .related-userstories-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-userstories-header .add-button{background:#424242;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-userstories-header .add-button.is-active,.related-userstories-header .add-button:hover{background:#8c9eff}.related-userstories-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-userstories-body{width:100%}tg-related-userstory-row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}tg-related-userstory-row.sortable{cursor:move}tg-related-userstory-row.sortable:hover{background:rgba(140,158,255,.05)}tg-related-userstory-row.sortable:hover .userstory-settings{opacity:1;transition:all .2s ease-in}tg-related-userstory-row.sortable:hover .icon-drag{opacity:1}tg-related-userstory-row.sortable .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#EEE;opacity:0;transition:opacity .1s}tg-related-userstory-row .status{-ms-flex-negative:0;flex-shrink:0;position:relative;width:125px}tg-related-userstory-row .assigned-to-column{-ms-flex-negative:0;flex-shrink:0;width:150px}tg-related-userstory-row .assigned-to-column img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .project{cursor:pointer;-ms-flex-preferred-size:100px;flex-basis:100px}tg-related-userstory-row .project img{width:40px}tg-related-userstory-row .userstory-name{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;margin-right:1rem}tg-related-userstory-row .userstory-name a{cursor:pointer}tg-related-userstory-row .userstory-name span{display:inline-block;margin-left:.25rem}tg-related-userstory-row .closed{border-left:10px solid #EEE;color:#EEE}tg-related-userstory-row .closed a,tg-related-userstory-row .closed svg{fill:#EEE}tg-related-userstory-row .closed .userstory-name a{color:#EEE;text-decoration:line-through}tg-related-userstory-row .blocked{background:rgba(255,82,82,.2);border-left:10px solid #ff5252}tg-related-userstory-row .userstory-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;opacity:0;width:60px}tg-related-userstory-row .userstory-settings svg{width:1.1rem;height:1.1rem;fill:#BDBDBD;margin-right:.5rem;transition:fill .2s ease-in}tg-related-userstory-row .userstory-settings svg:hover{fill:#757575}tg-related-userstory-row .userstory-settings a:hover{cursor:pointer}tg-related-userstory-row .delete-userstory:hover .icon-trash{fill:#ff5252}tg-related-userstory-row .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}tg-related-userstory-row .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .avatar figcaption{margin-left:.5rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:4rem;margin:0 auto;width:4rem}.external-app-wrapper svg{width:4rem;height:4rem}.comment .comment-main,.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-ms-flexbox;display:flex}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper .app-card a,.external-app-wrapper .user-card a{font-size:1rem;display:block}.external-app-wrapper .app-card .app-image{-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-ms-flex:1;flex:1}.external-app-wrapper .app-card p{font-size:1rem}.external-app-wrapper .user-card{background:#fff8e4;border:1px solid #f1e8cd;padding:1rem}.external-app-wrapper .user-card .user-image{-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .button-green{display:block}.external-app-wrapper .cancel{font-size:.9rem;display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.comments{clear:both}.comments tg-wysiwyg{margin-top:1.5rem}.comments .read-mode{border:1px solid #BDBDBD;height:55px}.comments .read-mode .markdown-editor-placeholder,.comments .read-mode .medium-editor-placeholder{height:55px}.comments .add-comment{margin-top:1rem}.comments .add-comment textarea{height:3rem}.comments .add-comment .edit,.comments .add-comment .preview-icon{position:absolute;right:1rem}.comments .save-comment-wrapper{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.comments .save-comment{margin-top:1rem;padding:.5rem 4rem}.comment{display:block}.comment .comment-wrapper{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:2rem 0}.comment .comment-wrapper:hover .comment-option{opacity:1}.comment .comment-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.comment .comment-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:1rem}.comment .comment-creator{color:#3f51b5;margin-right:.5rem}.comment .comment-date{font-size:.9rem;color:#BDBDBD}.comment .comment-edited{font-size:.9rem;background:#EEE;margin:0 .5rem;padding:.25rem}.comment .comment-edited .separator{margin:0 .25rem}.comment .comment-edited a{color:#3f51b5;fill:#3f51b5}.comment .comment-edited svg{width:.75rem;height:.75rem;margin:0 0 0 .25rem}.comment .comment-options{-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;margin-left:1.5rem}.comment .comment-options .comment-option{cursor:pointer;opacity:0}.comment .comment-options .icon-edit{fill:#BDBDBD;margin-right:.5rem}.comment .comment-options .icon-edit:hover{fill:#757575}.comment .comment-options .icon-close{fill:#BDBDBD;margin-right:.5rem}.comment .comment-options .icon-close:hover{fill:#f44336}.comment .comment-options .icon-trash{fill:#ff5252}.comment .comment-options .icon-trash:hover{fill:#f44336}.comment .deleted-comment-wrapper{border-bottom:1px solid #EEE;padding:1rem 0;width:100%}.comment .deleted-comment-main{font-size:.75rem;color:#BDBDBD;display:-ms-flexbox;display:flex;width:100%}.comment .toggle-deleted-comment{color:#3f51b5;fill:#3f51b5;margin:0 1rem;transition:none}.comment .toggle-deleted-comment .icon-arrow-down,.comment .toggle-deleted-comment .icon-arrow-up{width:.8rem;height:.8rem;margin-left:.25rem}.comment .restore-comment{margin-left:auto;transition:all .2s}.comment .restore-comment:hover{color:#3f51b5;fill:#3f51b5}.comment .restore-comment .icon-reload{width:.8rem;height:.8rem;margin-right:.25rem}.comment .deleted-comment-comment{margin-top:1rem}.comment-text{max-width:80rem}.comment-text.wysiwyg{margin-bottom:0;padding:0}.lightbox-display-historic{display:none}.lightbox-display-historic .history-container{max-width:800px;width:90%}.lightbox-display-historic .history-wrapper{max-height:600px;overflow-x:hidden;overflow-y:auto;padding:2rem}.entry{display:block}.entry .entry-wrapper{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:2rem 0}.entry .entry-avatar{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:50px}.entry .entry-main{-ms-flex:1;flex:1;max-width:calc(100% - 100px)}.entry .entry-data{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.entry .entry-creator{color:#3f51b5;margin-right:.5rem}.entry .entry-date{font-size:.9rem;color:#BDBDBD}.entry .display-full-entry{width:1.25rem;height:1.25rem;cursor:pointer;fill:#3f51b5;margin-left:auto;transform:rotate(0);transition:transform .2s}.entry .display-full-entry.inactive{transform:rotate(180deg)}.entry .entry-text{margin-bottom:0}.entry .entry-text.ellipsed{max-height:3rem;overflow:hidden}.entry .entry-text.blurry{position:relative}.entry .entry-text.blurry::after{background-image:linear-gradient(to top,#fff,transparent);content:'';height:100%;left:0;position:absolute;top:0;width:100%}.history-tabs .order-comments{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:auto;transition:none}.history-tabs .icon-arrow-down,.history-tabs .icon-arrow-up{width:.75rem;height:.75rem}.activity-diff .key{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#EEE;margin-right:.5rem;padding:.25rem}.add-member-suggest .add-member-suggest-name,.home-project .project-card-description,.home-wrapper .title-bar,.invite-members-form .invite-members-single-help,.projects-empty p,.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.activity-diff .diff{line-height:1.6}.activity-diff .icon-arrow-right{width:.75rem;height:.75rem;fill:#BDBDBD;margin:0 .5rem}.activity-diff .diff-status-wrapper p{display:inline-block}.activity-diff .diff-status-wrapper ins{background:rgba(242,244,255,.3);text-decoration:underline}.activity-diff .diff-status-wrapper del{background:rgba(255,82,82,.3)}.activity-diff .diff-color-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.activity-diff .diff-color-wrapper .diff{display:inline-block;height:1.2rem;width:1.2rem}.activity{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:2rem 0}.activity .activity-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.activity .activity-data{margin-bottom:1rem}.activity .activity-creator{color:#3f51b5;margin-right:.5rem}.activity .activity-date{color:#BDBDBD}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #EEE;cursor:pointer;transition:background .2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(140,158,255,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single>a,.working-on .duty-single>a{-ms-flex-align:center;align-items:center;border-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.watching .duty-single>a.blocked,.working-on .duty-single>a.blocked{background:rgba(255,82,82,.2);color:#f44336}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper{display:-ms-flexbox;display:flex}@media (max-width:767px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .duty-summary{-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .dashboard-container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@media (max-width:1280px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:767px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .watching-container,.home-wrapper .working-on-container{-ms-flex:1;flex:1;padding-left:.5rem;padding-right:.5rem}.home-wrapper .working-on-container{margin-right:1rem}.home-wrapper .project-list{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.2rem;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0 0 .5rem;padding:.5rem 1rem}.home-project{background:#fff;border:1px solid #EEE;margin:.5rem .5rem 1rem;cursor:pointer;transition:all .2s}.home-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.home-project .project-tag{-ms-flex:1;flex:1}.home-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-project .project-card-description{font-size:.9rem;color:#757575}.home-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.home-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.home-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.home-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.home-project .statistic{font-size:.9rem;color:#BDBDBD;display:inline-block;margin-right:.5rem}.home-project .statistic.active{color:#3f51b5}.home-project .statistic.active svg{fill:currentColor}.home-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.home-project .project-card-header .icon-badge{fill:#8c9eff}.home-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.home-project .project-card-logo img{width:100%}.home-project .project-card-name{line-height:1.25}.home-project .project-card-name a{font-size:1.2rem;color:#3f51b5}.home-project .project-card-name a:hover{color:#8c9eff}.home-project:hover{border:1px solid rgba(140,158,255,.2);box-shadow:0 0 5px #EEE}.home-project.blocked-project{border:#EEE}.home-project.blocked-project:hover{border:#EEE;box-shadow:none}.home-project.blocked-project .project-card-description,.home-project.blocked-project .project-card-logo,.home-project.blocked-project .project-card-name a,.home-project.blocked-project .project-card-statistics,.home-project.blocked-project .tags-container{opacity:.3}.projects-empty{text-align:center}.projects-empty svg{fill:#EEE;height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty p{font-size:.9rem}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{margin:2rem 2rem 1rem;text-align:center}.empty-ticket{display:-ms-flexbox;display:flex}.empty-ticket:not(:last-child){border-bottom:1px solid #EEE;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#e1e1e1;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:8vw}@media (max-width:1280px){.empty-ticket .line{width:30vw}}@media (max-width:767px){.empty-ticket .line{width:30vw}}@media (max-width:480px){.empty-ticket .line{width:30vw}}.empty-ticket .line:last-child{margin:0;width:18vw}@media (max-width:1280px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:767px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:480px){.empty-ticket .line:last-child{width:50vw}}.invite-members-form{border-top:1px solid #EEE;margin:0 5rem}.invite-members-form .invite-members-form-list{margin:0 0 1rem}.invite-members-form .invite-members-single{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem}.invite-members-form .invite-members-single-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.invite-members-form .invite-members-single-avatar{height:4rem;margin-right:1rem;width:4rem}.invite-members-form .invite-members-single-remove{color:#ff5252;margin-left:1rem;transition:color .2s}.invite-members-form .invite-members-single-remove:hover{color:#f44336}.invite-members-form .invite-members-single-role{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:0;flex-shrink:0}.invite-members-form .invite-members-single-new{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem 0}.invite-members-form .invite-members-single-new .invite-members-single-new-btn{cursor:pointer}.invite-members-form .invite-members-single-new .icon-add{width:2rem;height:2rem;fill:#424242;transition:fill .2s}.invite-members-form .invite-members-single-new:hover .icon-add{fill:#8c9eff}.invite-members-form .invite-members-single-send{font-size:1.2rem;display:block;margin:1.5rem 0 1rem;padding:1rem;width:100%}.invite-members-form .invite-members-single-help{font-size:.9rem}.lightbox-add-member .add-members-wrapper{max-width:900px;width:90%}.add-member-suggest .add-member-suggest-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:2rem 0 0}.add-member-suggest .add-member-suggest-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:0 15rem;position:relative}.add-member-suggest .add-member-suggest-filter-input{-ms-flex:1;flex:1;margin-right:.25rem}.add-member-suggest .add-member-suggest-filter-hint{font-size:.75rem;color:#BDBDBD;position:absolute;right:16rem;top:.5rem}.add-member-suggest .add-member-suggest-filter-hint.to-send{right:19rem}.add-member-suggest .add-member-suggest-filter-addmail{background:#424242;border-radius:.25rem;padding:.5rem .75rem;transition:background .2s linear}.add-member-suggest .add-member-suggest-filter-addmail:hover{background:#212121}.add-member-suggest .add-member-suggest-filter-addmail svg{width:1.3rem;height:1.3rem;fill:#fff}.add-member-suggest .add-member-suggest-single{-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #EEE;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:calc(25% - 1rem);flex-basis:calc(25% - 1rem);-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;padding:.2rem;transition:.2s linear}.add-member-suggest .add-member-suggest-single:hover{background:rgba(140,158,255,.1)}.add-member-suggest .add-member-suggest-single:nth-child(4n){margin-right:0}.add-member-suggest .add-member-suggest-avatar{-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;height:5rem;margin:.5rem;width:5rem}.notifications-list .entry .entry-project,.notifications-list .entry a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.navbar{display:-ms-flexbox;display:flex;height:40px;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar::after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.navbar .nav-left a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left .logo{background:rgba(0,0,0,.2);padding:.3rem .75rem}.navbar .nav-left svg{width:1.6rem;height:1.6rem}.navbar .nav-right{margin-left:auto}.navbar .nav-right .topnav-dropdown-wrapper>a,.navbar .nav-right>a{color:#fff;margin:0;padding:.5rem 2rem}.navbar .nav-right .active{background:rgba(255,255,255,.95);color:#1a237e}.navbar .nav-right svg{width:1.2rem;height:1.2rem;fill:rgba(26,35,126,.8);transition:all .2s linear}.navbar .nav-right>a,.navbar .topnav-dropdown-wrapper>a{color:#fff;display:inline-block;transition:all .2s linear}.navbar .nav-right>a:hover,.navbar .topnav-dropdown-wrapper>a:hover{background:rgba(0,0,0,.2);color:#8c9eff}.navbar .nav-right>a:hover svg,.navbar .topnav-dropdown-wrapper>a:hover svg{fill:#8c9eff;transition:all .2s linear}.navbar .nav-right>a.user-avatar,.navbar .topnav-dropdown-wrapper>a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar .nav-right>a.user-avatar span,.navbar .topnav-dropdown-wrapper>a.user-avatar span{padding-right:1rem}.navbar .user-avatar img{height:2.5rem;margin-left:.5rem;vertical-align:middle}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#212121;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.navbar-dropdown ul:after{border-color:rgba(33,33,33,0);border-bottom-color:#212121;border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-color:rgba(33,33,33,0);border-bottom-color:#212121;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown .plugin:hover .new{color:#fff}.navbar-dropdown .plugin .new{font-size:.9rem;background:#ff5252;float:right;margin-left:auto;padding:.1rem .25rem}.navbar-dropdown a{color:#BDBDBD;display:block;padding:.8rem .5rem}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#8c9eff}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-ms-flex:1;flex:1}.navbar-dropdown a.blocked-project{color:#757575}.navbar-dropdown a.blocked-project svg{margin-left:.5rem;position:relative;top:.25rem}.navbar-dropdown .create-options{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@keyframes highlightFadeOut{0%{background:#8c9eff;font-size:.75rem;height:22px;left:49px;line-height:22px;top:-1px;width:22px}20%{font-size:.7rem;height:20px;left:50px;line-height:20px;top:0;width:20px}100%{background:#3f51b5}}.topnav-dropdown-wrapper{position:relative}.topnav-dropdown-wrapper:hover .navbar-dropdown-notifications{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.topnav-dropdown-wrapper .counter{background:#3f51b5;border-radius:50%;color:#fff;font-size:.7rem;height:18px;left:52px;line-height:18px;position:absolute;text-align:center;top:3px;width:18px}.topnav-dropdown-wrapper .counter.small{height:17px;line-height:17px;width:17px}.topnav-dropdown-wrapper .counter.large{height:22px;line-height:22px;top:2px;width:22px}.topnav-dropdown-wrapper .counter.counter-active{animation-duration:2s;animation-name:highlightFadeOut}.topnav-dropdown-wrapper .navbar-dropdown-notifications{background:#fff;border:1px solid #EEE;border-radius:2px;box-shadow:0 0 3px 3px rgba(184,184,184,.2);color:#212121;display:none;left:calc(50% - 450px/2);margin-top:1px;min-width:450px;padding:0;position:absolute;top:2.4rem;z-index:999}.topnav-dropdown-wrapper .navbar-dropdown-notifications .empty{color:#BDBDBD;font-size:.9em;padding:1.5em 0;text-align:center;width:100%}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header{background:#f5f5f5;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:.6rem .75rem}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after,.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header .notifications-title{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action{font-size:.9rem;padding-left:1.2rem;text-align:right}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action.disabled{color:#B8B8B8;cursor:default}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled){color:#3f51b5}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled):hover{color:#8c9eff}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-wrapper{min-height:70px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-list{max-height:400px;overflow-y:auto}.notifications-page{margin-top:1.5em;min-width:initial;padding-bottom:5em}.notifications-page .header{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0;padding:.5em 1em}.notifications-page .title{color:#000;-ms-flex-positive:1;flex-grow:1;font-size:1.8em;line-height:1.8em;margin:0;text-transform:uppercase}.notifications-page .action{color:#3f51b5;font-size:1em;line-height:.75em;margin-right:1em}.notifications-page .action.disabled{color:#B8B8B8}.notifications-page .action:not(.disabled):hover{color:#8c9eff}.notifications-page .empty{margin:4rem auto;text-align:center;width:100%}.notifications-page .notifications-list .entry{-ms-flex-align:center;align-items:center;font-size:.95rem;margin:.5rem 0;padding:1rem .6rem}.notifications-page .notifications-list .entry.new{background-color:#ECEDFB}.notifications-page .notifications-list .entry .entry-content{font-size:1.05rem}.notifications-page .notifications-list .entry .entry-project{max-width:initial;text-overflow:initial;white-space:initial}.notifications-page .notifications-list .entry .entry-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:1rem;width:3rem}.notifications-page .notifications-list .entry .entry-date{font-size:.85rem;margin-right:.5rem}.notifications-list .entry{color:#212121;display:-ms-flexbox;display:flex;font-size:.9rem;margin:0 .8rem;padding:.8rem 0;position:relative}.notifications-list .entry:not(:last-child){border-bottom:1px solid #EEE}.notifications-list .entry p{line-height:1.25em;margin-bottom:0}.notifications-list .entry a.project-link,.notifications-list .entry a.user-link{color:#212121}.notifications-list .entry a.object-link{color:#3f51b5}.notifications-list .entry a:hover{color:#8c9eff}.notifications-list .entry .entry-avatar{border-radius:.1rem;-ms-flex-preferred-size:2.5rem;flex-basis:2.5rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.7rem;vertical-align:center;width:2.5rem}.notifications-list .entry .entry-avatar img{width:100%}.notifications-list .entry .entry-content{-ms-flex-positive:1;flex-grow:1;line-height:1.1em;margin-right:.7rem}.notifications-list .entry .entry-project{color:#B8B8B8;display:inline-block;font-size:.9rem;margin-top:.5em;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notifications-list .spin img,.profile .timeline-wrapper .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;transform-origin:32 32;max-height:3rem;max-width:3rem}.notifications-list .entry .entry-date{font-size:.7rem;white-space:nowrap}.notifications-list .spin{margin:5% auto;width:3rem}.notifications-list .spin img{margin:0 auto}.profile-favs{border-top:1px solid #EEE}.profile-filter{-ms-flex-align:center;align-items:center;background:#EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile-filter .searchbox{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{fill:#757575;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-ms-flex:1;flex:1;margin-right:1rem}.import-project-asana-form-selector li:first-child,.profile-contacts,.profile-content-tabs{border-top:1px solid #EEE}.profile-filter .searchbox input:focus{border-bottom:1px solid #BDBDBD;outline:0;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#BDBDBD;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#212121}.profile{display:-ms-flexbox;display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .timeline-wrapper .spin img{margin:0 auto}.profile .profile-sidebar{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{fill:#EEE;height:10rem;margin:2rem auto;text-align:center;width:10rem}.profile .empty-tab p{color:#BDBDBD;font-size:.9rem;margin:0}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{filter:brightness(40%) saturate(150%) hue-rotate(60deg);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;transform:translateY(0);transition:all .2s cubic-bezier(.01,.7,1,1);transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#BDBDBD;transition:all .2s linear}.profile-bar .flag:hover path{fill:#f44336;transition:all .2s linear}.profile-bar h1{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:2rem;line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar h2{font-size:1.6rem;color:#757575;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#BDBDBD;margin-bottom:1rem}.profile-bar .username{font-size:1.2rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#BDBDBD}.profile-bar .profile-stats{border-bottom:1px solid #EEE;border-top:1px solid #EEE;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;display:block;line-height:1}.profile-bar .profile-stats .stat-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:.9rem;display:block}.profile-bar .profile-quote{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;background:url(../images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contacts{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{color:#BDBDBD;display:inline-block;padding:1rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#757575;transition:color .2s linear}.profile-content-tabs .tab.active .icon,.profile-content-tabs .tab:hover .icon{fill:#8c9eff}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #EEE;border-right:1px solid #EEE;position:relative;top:1px;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#3f51b5}.profile-content-tabs .icon{fill:#BDBDBD;height:.8rem;margin-right:.5rem;transition:fill .2s linear}.profile-sidebar h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#757575;margin-bottom:.5rem;padding:.5rem}.contact-team-large,.import-project-asana-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-sidebar h4 .icon{fill:#BDBDBD;margin-right:.3rem;margin-top:-3px;vertical-align:middle}.profile-sidebar p{font-size:.9rem;color:#BDBDBD}.profile-sidebar a{color:#3f51b5}.contact-team{margin-left:.75rem}.contact-team-large{font-size:.9rem;-ms-flex-pack:center;justify-content:center;margin-left:0;width:100%}.contact-team-large .icon-mail{margin-right:.5rem;vertical-align:center}.lightbox-contact-project{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-contact-project-container{max-width:600px;text-align:center;width:90%}.lightbox-contact-project-logo{width:5rem}.lightbox-contact-project-title{margin:0}.lightbox-contact-project-name{font-size:1.6rem;color:#3f51b5;margin-bottom:1rem}.lightbox-contact-project-message{max-height:400px}.lightbox-contact-project-button{display:block;margin-top:.5rem;width:100%}.import-project-asana-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-asana-form{width:90%;min-width:0}}.import-project-asana-form fieldset{margin-bottom:1rem}.import-project-asana-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-asana-form label span{font-size:.9rem}.import-project-asana-form label .mumble{margin-left:.25rem}.import-project-asana-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-asana-form-check span{display:block}.import-project-asana-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-asana-form-check .check{position:absolute;right:0;top:0}.import-project-asana-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-asana-form-title-wrapper .create-project-title{display:inline-block}.import-project-asana-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-description,.import-project-asana-form-title{margin:0;text-align:center}.import-project-asana-form-description{color:#BDBDBD;margin-bottom:2rem}.import-project-asana-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-asana-form-import-type input:checked+label,.import-project-asana-form-privacity input:checked+label,.import-project-asana-form-selector-template,.import-project-asana-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-asana-form-import-type{display:-ms-flexbox;display:flex}.import-project-asana-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-import-type label .icon{margin-right:.25rem}.import-project-asana-form-import-type input:checked+label{background:#dcdcdc}.import-project-asana-form-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-asana-form-import-type input:disabled+label .icon{color:#e3e3e3}.import-project-asana-form-import-type input{display:none}.import-project-asana-form-import-type label{background:#f5f5f5}.import-project-asana-form-privacity{display:-ms-flexbox;display:flex}.import-project-asana-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-privacity input:checked+label{background:#dcdcdc}.import-project-asana-form-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-asana-form-privacity input:disabled+label .icon{color:#e3e3e3}.import-project-asana-form-privacity input{display:none}.import-project-asana-form-privacity label{background:#f5f5f5}.import-project-asana-form-privacity label .icon{margin-right:.5em}.import-project-asana-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-asana-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-asana-form-type span{margin-left:.5rem}.import-project-asana-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-asana-form-action-back,.import-project-asana-form-action-cancel,.import-project-asana-form-selector a:hover{color:currentColor}.import-project-asana-form-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-asana-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-asana-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-asana-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-asana-form-selector-template{text-transform:uppercase}.import-project-asana-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-asana-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-asana-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-asana-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-asana-form-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.import-project-asana-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.import-project-asana-form-selector p{margin-bottom:0}.import-project-asana-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-asana-form-action button{font-size:1.2rem;padding:.75rem}.import-project-asana-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-asana-form-action-back:hover,.import-project-asana-form-action-cancel:hover{color:#8c9eff}.import-project-asana-form-action-cancel{-ms-flex:1;flex:1}.import-project-asana-form-action-back{width:10%}.import-project-asana-form-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-asana-form-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.import-project-asana-form .spin{text-align:center;width:100%}.create-project-asana-import-type{margin-bottom:1rem;text-align:center}.create-project-asana-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-asana-import-type fieldset{background:#fff;border-right:1px solid #EEE;transition:background .2s linear}.create-project-asana-import-type fieldset:last-child{border:0}.create-project-asana-import-type input{display:none}.create-project-asana-import-type input:checked+label{background:rgba(63,81,181,.1)}.create-project-asana-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-asana-import-type label:hover{background:rgba(63,81,181,.1);cursor:pointer}.create-project-asana-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-asana-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.create-project{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.create-project{width:90%;min-width:0}}.create-project fieldset{margin-bottom:1rem}.create-project label{display:block;margin-bottom:.25rem;max-height:44px}.create-project label span{font-size:.9rem}.create-project label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.create-project-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.create-project-check span{display:block}.create-project-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-check .check{position:absolute;right:0;top:0}.create-project-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.create-project-title-wrapper .create-project-title{display:inline-block}.create-project-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.create-project-description,.create-project-title{margin:0;text-align:center}.create-project-description{color:#BDBDBD;margin-bottom:2rem}.create-project-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.create-project-import-type input:checked+label,.create-project-privacity input:checked+label,.create-project-selector-template,.create-project-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-import-type{display:-ms-flexbox;display:flex}.create-project-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.create-project-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-import-type label .icon{margin-right:.25rem}.create-project-import-type input:checked+label{background:#dcdcdc}.create-project-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.create-project-import-type input:disabled+label .icon{color:#e3e3e3}.create-project-import-type input{display:none}.create-project-import-type label{background:#f5f5f5}.create-project-privacity{display:-ms-flexbox;display:flex}.create-project-privacity label,.create-project-type{-ms-flex-align:center;display:-ms-flexbox;text-transform:uppercase}.create-project-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-privacity label{align-items:center;cursor:pointer;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem}.create-project-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-privacity input:checked+label{background:#dcdcdc}.create-project-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.create-project-privacity input:disabled+label .icon{color:#e3e3e3}.create-project-privacity input{display:none}.create-project-privacity label{background:#f5f5f5}.create-project-privacity label .icon{margin-right:.5em}.create-project-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.create-project-type{align-items:center;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem}.create-project-type span{margin-left:.5rem}.create-project-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.create-project-action-back,.create-project-action-cancel,.create-project-selector a:hover{color:currentColor}.create-project-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.create-project-selector li:first-child{border-top:1px solid #EEE}.create-project-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.create-project-selector-icon .icon{width:2.25rem;height:2.25rem}.create-project-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.create-project-selector-template{text-transform:uppercase}.create-project-selector-description,.import-project-github-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.create-project-selector-long-description.ng-hide{line-height:0;max-height:0}.create-project-selector-question{position:absolute;right:1.5rem;top:1.5rem}.create-project-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.create-project-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.create-project-selector p{margin-bottom:0}.create-project-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.create-project-action button{font-size:1.2rem;padding:.75rem}.create-project-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.create-project-action-back:hover,.create-project-action-cancel:hover{color:#8c9eff}.create-project-action-cancel{-ms-flex:1;flex:1}.create-project-action-back{width:10%}.create-project-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.create-project-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.create-project-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.create-project .spin{text-align:center;width:100%}.duplicate-project-reference{margin-bottom:2rem}.import-project-github-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-github-form{width:90%;min-width:0}}.import-project-github-form fieldset{margin-bottom:1rem}.import-project-github-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-github-form label span{font-size:.9rem}.import-project-github-form label .mumble{margin-left:.25rem}.import-project-github-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-github-form-check span{display:block}.import-project-github-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-github-form-check .check{position:absolute;right:0;top:0}.import-project-github-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-github-form-title-wrapper .create-project-title{display:inline-block}.import-project-github-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-github-form-description,.import-project-github-form-title{margin:0;text-align:center}.import-project-github-form-description{color:#BDBDBD;margin-bottom:2rem}.import-project-github-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-github-form-import-type input:checked+label,.import-project-github-form-privacity input:checked+label,.import-project-github-form-selector-template,.import-project-github-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-github-form-import-type{display:-ms-flexbox;display:flex}.import-project-github-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-import-type label .icon{margin-right:.25rem}.import-project-github-form-import-type input:checked+label{background:#dcdcdc}.import-project-github-form-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-github-form-import-type input:disabled+label .icon{color:#e3e3e3}.import-project-github-form-import-type input{display:none}.import-project-github-form-import-type label{background:#f5f5f5}.import-project-github-form-privacity{display:-ms-flexbox;display:flex}.import-project-github-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-privacity input:checked+label{background:#dcdcdc}.import-project-github-form-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-github-form-privacity input:disabled+label .icon{color:#e3e3e3}.import-project-github-form-privacity input{display:none}.import-project-github-form-privacity label{background:#f5f5f5}.import-project-github-form-privacity label .icon{margin-right:.5em}.import-project-github-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-github-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-github-form-type span{margin-left:.5rem}.import-project-github-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-github-form-action-back,.import-project-github-form-action-cancel,.import-project-github-form-selector a:hover{color:currentColor}.import-project-github-form-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-github-form-selector li:first-child{border-top:1px solid #EEE}.import-project-github-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-github-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-github-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-github-form-selector-template{text-transform:uppercase}.import-project-github-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-github-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-github-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-github-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-github-form-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.import-project-github-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.import-project-github-form-selector p{margin-bottom:0}.import-project-github-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-github-form-action button{font-size:1.2rem;padding:.75rem}.import-project-github-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-github-form-action-back:hover,.import-project-github-form-action-cancel:hover{color:#8c9eff}.import-project-github-form-action-cancel{-ms-flex:1;flex:1}.import-project-github-form-action-back{width:10%}.import-project-github-form-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-github-form-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.import-project-github-form-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.import-project-github-form .spin{text-align:center;width:100%}.create-project-github-import-type{margin-bottom:1rem;text-align:center}.create-project-github-import-type p{margin-bottom:.5rem}.create-project-github-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-github-import-type fieldset{background:#fff;border-right:1px solid #EEE;transition:background .2s linear}.create-project-github-import-type fieldset:last-child{border:0}.create-project-github-import-type input{display:none}.create-project-github-import-type input:checked+label{background:rgba(63,81,181,.1)}.create-project-github-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-github-import-type label:hover{background:rgba(63,81,181,.1);cursor:pointer}.create-project-github-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-github-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.import-project-members{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-members{width:90%;min-width:0}}.import-project-members .avatar{width:48px}.import-project-members-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:0}.import-project-description,.import-project-jira-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-members-system{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0 0;padding:.5rem 0}.import-project-members-system img{width:100%}.import-project-members-logo{max-height:3rem;max-width:3rem}.import-project-members-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;border-top:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.import-project-members-row:hover .import-project-members-delete{opacity:1;transition:all .2s ease-in}.import-project-members-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-username{margin-left:1rem}.import-project-members .avatar.empty{background-color:#EEE;line-height:3rem;text-align:center;width:3rem}.import-project-members-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-delete{background:0 0;opacity:0;padding:.25rem .5rem}.import-project-members-delete svg{width:.75rem;height:.75rem;fill:#f44336}.import-project-members-match{color:#BDBDBD}.import-project-members-match button{background:#fff;border-radius:50%;padding:.25rem .5rem}.import-project-members-match button svg{width:.75rem;height:.75rem}.import-project-members-match-true{border:1px solid #3f51b5;margin:0 .1rem 0 .25rem;transition:background .2s}.import-project-members-match-true:hover{background:rgba(140,158,255,.3)}.import-project-members-match-true svg{fill:#3f51b5}.import-project-members-match-false{border:1px solid #f44336;margin:0 .25rem 0 .1rem;transition:background .2s}.import-project-members-match-false:hover{background:rgba(244,67,54,.3)}.import-project-members-match-false svg{fill:#f44336}.import-project-members-choose{color:#3f51b5;padding-right:0;text-transform:lowercase}.import-project-members-choose:hover{color:#8c9eff}.import-project-members-selected{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-selected-img{margin-left:.5rem;max-width:3rem}.import-project-members-selected img{width:100%}.import-project-members-submit{display:block;margin:2rem auto 0;padding:.75rem 4rem}.import-project-selector{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-selector{width:90%;min-width:0}}.import-project-selector .import-project-selector-service img{display:block;margin:1rem auto;width:4rem}.import-project-selector .import-project-selector-filter{-ms-flex-align:center;align-items:center;background:#EEE;display:-ms-flexbox;display:flex;padding:.5rem}.import-project-selector .import-project-selector-filter input{background:#f5f5f5;border:0;-ms-flex:1;flex:1;padding:.5rem}.import-project-from-site,.import-project-selector .import-project-selector-title{border-bottom:1px solid #EEE;padding:1rem}.import-project-selector .import-project-selector-filter svg{width:1rem;height:1rem;fill:#757575;margin:0 1rem}.import-project-selector .import-project-selector-title:hover{background:rgba(63,81,181,.1);cursor:pointer}.import-project-from-site{-ms-flex-align:center;align-items:center;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;position:relative}.import-project-from-site:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-from-site:first-child{border-top:1px solid #EEE}.import-project-from-site:first-child .import-project-name{margin:0}.import-project-from-site:first-child .import-project-logo img{padding:0 .9rem 0 1rem;width:5.1rem}.import-project-logo{-ms-flex-item-align:start;align-self:flex-start;margin-right:.5rem}.import-project-logo img{padding:0 1rem;width:5rem}.import-project-name-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.import-project-description{margin-bottom:0}.import-project-description a{color:#3f51b5;margin-left:.3rem}.import-project-url{margin-top:.5rem}.import-project-input{vertical-align:middle}.import-project-button{background:#3f51b5;color:#fff;padding:.4rem 1rem}.create-project-invite-avatars{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.create-project-invite-avatar{cursor:pointer;display:block;margin-right:.25rem}.create-project-invite-avatar:hover{background:#f5f5f5;position:relative;border:0;opacity:.9;transition:all .2s;transition-delay:.2s}.create-project-invite-avatar:hover:after,.create-project-invite-avatar:hover:before{content:"";width:2px;height:66px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled{opacity:.3;transition:opacity .2s}.create-project-invite-avatar.disabled:hover{background:#f5f5f5;position:relative;border:0;opacity:.6;transition:all .2s ease-in}.create-project-invite-avatar.disabled:hover:after,.create-project-invite-avatar.disabled:hover:before{content:"";width:2px;height:33px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar.disabled:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar.disabled:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled:hover::after{background:#424242;left:24px;top:8px;transform:rotate(0);transform-origin:center}.create-project-invite-avatar.disabled:hover::before{background:#424242;right:22px;top:8px;transform:rotate(90deg);transform-origin:center}.create-project-invite-avatar img{cursor:pointer;width:3rem}.import-project-jira-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-jira-form{width:90%;min-width:0}}.import-project-jira-form fieldset{margin-bottom:1rem}.import-project-jira-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-jira-form label span{font-size:.9rem}.import-project-jira-form label .mumble{margin-left:.25rem}.import-project-jira-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-jira-form-check span{display:block}.import-project-jira-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-jira-form-check .check{position:absolute;right:0;top:0}.import-project-jira-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-jira-form-title-wrapper .create-project-title{display:inline-block}.import-project-jira-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-description,.import-project-jira-form-title{margin:0;text-align:center}.import-project-jira-form-description{color:#BDBDBD;margin-bottom:2rem}.import-project-jira-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-jira-form-import-type input:checked+label,.import-project-jira-form-privacity input:checked+label,.import-project-jira-form-selector-template,.import-project-jira-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-jira-form-import-type{display:-ms-flexbox;display:flex}.import-project-jira-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-import-type label .icon{margin-right:.25rem}.import-project-jira-form-import-type input:checked+label{background:#dcdcdc}.import-project-jira-form-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-jira-form-import-type input:disabled+label .icon{color:#e3e3e3}.import-project-jira-form-import-type input{display:none}.import-project-jira-form-import-type label{background:#f5f5f5}.import-project-jira-form-privacity{display:-ms-flexbox;display:flex}.import-project-jira-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-privacity input:checked+label{background:#dcdcdc}.import-project-jira-form-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-jira-form-privacity input:disabled+label .icon{color:#e3e3e3}.import-project-jira-form-privacity input{display:none}.import-project-jira-form-privacity label{background:#f5f5f5}.import-project-jira-form-privacity label .icon{margin-right:.5em}.import-project-jira-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-jira-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-jira-form-type span{margin-left:.5rem}.import-project-jira-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-jira-form-action-back,.import-project-jira-form-action-cancel,.import-project-jira-form-selector a:hover{color:currentColor}.import-project-jira-form-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-jira-form-selector li:first-child{border-top:1px solid #EEE}.import-project-jira-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-jira-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-jira-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-jira-form-selector-template{text-transform:uppercase}.create-project-import-type-info,.import-project-jira-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-jira-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-jira-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-jira-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-jira-form-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.import-project-jira-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.import-project-jira-form-selector p{margin-bottom:0}.import-project-jira-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-jira-form-action button{font-size:1.2rem;padding:.75rem}.import-project-jira-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-jira-form-action-back:hover,.import-project-jira-form-action-cancel:hover{color:#8c9eff}.import-project-jira-form-action-cancel{-ms-flex:1;flex:1}.import-project-jira-form-action-back{width:10%}.import-project-jira-form-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-jira-form-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.import-project-jira-form .spin{text-align:center;width:100%}.create-project-import-type-info{font-size:.9rem;margin-bottom:1rem}.create-project-type-issues-subform{margin:1rem 0 2rem}.create-project-type-issues-subform-title{font-size:.9rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-type-issues-subform-radiogr input{opacity:0}.create-project-type-issues-subform-radiogr input:checked+svg{fill:rgba(63,81,181,.6);stroke:rgba(63,81,181,.1)}.create-project-type-issues-subform-radiogr svg{fill:#EEE;stroke:#d5d5d5;stroke-width:1px;vertical-align:middle}.create-project-type-issues-subform-radiogr .control-indicator{padding-left:.25rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-import-type{margin-bottom:.25rem}.create-project-import-type fieldset{margin:0}tg-select-import-user-lightbox .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}tg-select-import-user-lightbox .candidate-user{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1.5rem}tg-select-import-user-lightbox .candidate-user .candidate-user-name{margin-left:.5rem}tg-select-import-user-lightbox .candidate-user .user-list-avatar{background-color:#f44336;height:32px;margin-right:.5rem;width:32px}tg-select-import-user-lightbox .error{color:#ff5252;text-align:center}tg-select-import-user-lightbox .more-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;padding:1rem;text-align:center}tg-select-import-user-lightbox .group{display:-ms-flexbox;display:flex}tg-select-import-user-lightbox .group input{-ms-flex-positive:2;flex-grow:2;margin-right:.5rem}tg-select-import-user-lightbox .group .submit-button{-ms-flex-positive:0;flex-grow:0;width:auto}tg-select-import-user-lightbox .search-user-mode{font-size:.9rem;background:0 0;margin-top:2rem;padding:.5rem;text-align:left;transition:.2s;width:100%}tg-select-import-user-lightbox .search-user-mode:hover{color:#3f51b5}tg-select-import-user-lightbox label{display:block;padding-bottom:.5rem}.import-project-trello-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-trello-form{width:90%;min-width:0}}.import-project-trello-form fieldset{margin-bottom:1rem}.import-project-trello-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-trello-form label span{font-size:.9rem}.import-project-trello-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.import-project-trello-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-trello-form-check span{display:block}.import-project-trello-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-trello-form-check .check{position:absolute;right:0;top:0}.import-project-trello-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-trello-form-title-wrapper .create-project-title{display:inline-block}.import-project-trello-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-description,.import-project-trello-form-title{margin:0;text-align:center}.import-project-trello-form-description{color:#BDBDBD;margin-bottom:2rem}.import-project-trello-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-trello-form-import-type input:checked+label,.import-project-trello-form-privacity input:checked+label,.import-project-trello-form-selector-template,.import-project-trello-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-trello-form-import-type{display:-ms-flexbox;display:flex}.import-project-trello-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-import-type label .icon{margin-right:.25rem}.import-project-trello-form-import-type input:checked+label{background:#dcdcdc}.import-project-trello-form-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-trello-form-import-type input:disabled+label .icon{color:#e3e3e3}.import-project-trello-form-import-type input{display:none}.import-project-trello-form-import-type label{background:#f5f5f5}.import-project-trello-form-privacity{display:-ms-flexbox;display:flex}.import-project-trello-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-privacity input:checked+label{background:#dcdcdc}.import-project-trello-form-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-trello-form-privacity input:disabled+label .icon{color:#e3e3e3}.import-project-trello-form-privacity input{display:none}.import-project-trello-form-privacity label{background:#f5f5f5}.import-project-trello-form-privacity label .icon{margin-right:.5em}.import-project-trello-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-trello-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-trello-form-type span{margin-left:.5rem}.import-project-trello-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-trello-form-action-back,.import-project-trello-form-action-cancel,.import-project-trello-form-selector a:hover{color:currentColor}.import-project-trello-form-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-trello-form-selector li:first-child{border-top:1px solid #EEE}.import-project-trello-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-trello-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-trello-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-trello-form-selector-template{text-transform:uppercase}.import-project-trello-form-selector-description,.project-list-wrapper .project-list-title h1,.transfer-project .transfer-title,.transfer-project-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-trello-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-trello-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-trello-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-trello-form-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.import-project-trello-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.import-project-trello-form-selector p{margin-bottom:0}.import-project-trello-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-trello-form-action button{font-size:1.2rem;padding:.75rem}.import-project-trello-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-trello-form-action-back:hover,.import-project-trello-form-action-cancel:hover{color:#8c9eff}.import-project-trello-form-action-cancel{-ms-flex:1;flex:1}.import-project-trello-form-action-back{width:10%}.import-project-trello-form-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.profile-projects,.profile-timeline,.transfer-project-detail{border-top:1px solid #EEE}.import-project-trello-form-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.import-project-trello-form .spin{text-align:center;width:100%}.warning-users-import-lightbox{max-width:600px}.warning-users-import-lightbox .warning-users-import-title{text-align:center}.warning-users-import-lightbox .actions{display:-ms-flexbox;display:flex;margin:2rem}.warning-users-import-lightbox .actions button{-ms-flex:1;flex:1}.warning-users-import-lightbox .actions button:first-child{-ms-flex:0;flex:0;-ms-flex-preferred-size:40%;flex-basis:40%;margin-right:.5rem}.warning-users-import-lightbox .actions .button-trans{color:#424242}.profile-projects .list-itemtype-project{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:9rem;padding:.75rem}.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-image,.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-right,.profile-projects .list-itemtype-project.blocked-project .project-description,.profile-projects .list-itemtype-project.blocked-project .project-title{opacity:.4}.profile-projects .list-itemtype-project .project-list-single-title-wrapper{display:-ms-flexbox;display:flex}.profile-projects .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0}.profile-projects .list-itemtype-project .list-itemtype-project-right{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;width:200px}.profile-projects .list-itemtype-project .icon-blocked-project{width:1rem;height:1rem;fill:#fff;stroke:#ff5252}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;margin:0}.project-list-wrapper .icon-badge,.project-list-wrapper .icon-blocked-project,.project-list-wrapper .icon-private{width:1rem;height:1rem}.project-list-wrapper .icon-badge{fill:#8c9eff;margin-left:.5rem;stroke:#8c9eff}.project-list-wrapper .create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .import-project-button{padding:.53rem .8rem}.project-list-wrapper .import-project-button:hover .icon-upload{fill:#8c9eff}.project-list-wrapper .import-project-button .icon-upload{fill:#fff}.project-list-wrapper .project-list-section{display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .help-area{font-size:.9rem;color:#BDBDBD;width:200px}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:rgba(140,158,255,.1);cursor:move;transition:background .3s}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .list-itemtype-project.blocked-project .icon-badge,.project-list-wrapper .list-itemtype-project.blocked-project .list-itemtype-project-image,.project-list-wrapper .list-itemtype-project.blocked-project .private,.project-list-wrapper .list-itemtype-project.blocked-project .project-description,.project-list-wrapper .list-itemtype-project.blocked-project .project-title{opacity:.25}.project-list-wrapper .list-itemtype-project.blocked-project:hover .icon-drag{opacity:1}.project-list-wrapper .list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.project-list-wrapper .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.project-list-wrapper .drag{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;opacity:0}.project-list-wrapper .drag svg{fill:#BDBDBD;height:1.1rem;margin-right:.5rem;transition:opacity .2s;width:1.1rem}.project-list-wrapper .gu-transit{background-color:#f6f6f6;height:5rem;opacity:1}.project-list-wrapper .gu-transit *{display:none}.project-list-wrapper .gu-mirror{background:#fff;opacity:1}.blocked-project-detail,.transfer-project{background:url(../images/discover.png) bottom center repeat-x;min-height:calc(100vh - 40px)}.blocked-project-detail{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center;min-width:100vw;width:100vw}.blocked-project-inner{width:330px}.blocked-project-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.blocked-project-title .project-image{-ms-flex-preferred-size:6rem;flex-basis:6rem;margin-right:1rem;max-width:6rem;position:relative}.blocked-project-title img{width:100%}.blocked-project-title .icon-blocked-project{width:1.5rem;height:1.5rem;position:absolute;right:-.5rem;top:-.5rem}.blocked-project-title .project-title{font-size:1.6rem}.blocked-project-message{margin-top:4rem;text-align:center}.blocked-project-message .project-block-title{font-size:2rem}.transfer-project-wrapper{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;width:90%}.transfer-project{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center}.master,body{background:#fff}.transfer-project-detail{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin:1rem 0 3rem;padding:1rem 0}.transfer-project-image{margin-right:1rem;width:4rem}.transfer-project-title{font-size:1.6rem;margin-bottom:.25rem}.transfer-project-statistics span{color:#BDBDBD;margin-right:.5rem}.transfer-project-statistics svg{fill:#BDBDBD;margin-right:.25rem}.transfer-project-private{text-transform:uppercase}.transfer-project-comment-link{color:#3f51b5;cursor:pointer;display:block;margin-bottom:1rem}.transfer-project-comment-link:hover{color:#8c9eff}.transfer-project-comment-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.transfer-project-comment-header .icon-close{cursor:pointer;fill:#BDBDBD}.transfer-project-comment-header .icon-close:hover{fill:#ff5252;transition:fill .2s}.transfer-project-comment-form.ng-enter{animation:dropdownFade .2s}.transfer-project-comment-label{display:block;margin-bottom:.5rem}.transfer-project-comment{margin-bottom:1rem;min-height:6rem}.transfer-project-options{display:-ms-flexbox;display:flex}.transfer-project-options a{font-size:1.2rem;display:block;-ms-flex:1;flex:1;padding:.75rem}.transfer-project-options a:first-child{margin-right:.5rem}.profile-timeline .activity-item{border-bottom:1px solid #EEE;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#3f51b5}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#757575}.profile-timeline .activity-item a:hover{color:#8c9eff}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-ms-flex-align:center;align-items:center;color:#BDBDBD;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#BDBDBD;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-item .new-color{border-radius:50%;display:inline-block;height:1rem;margin-left:.2rem;position:relative;top:.1rem;width:1rem}.profile-timeline .activity-member-view{display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-ms-flex:1;flex:1}.profile-timeline .activity-member-view a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.profile-timeline .activity-member-view p{color:#BDBDBD}a,body{color:#424242}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:sub;white-space:nowrap}.profile-timeline .single-attachment .icon{fill:#424242;margin-right:.5rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.wiki-history{margin-bottom:2rem}:root .taskboard-table-body .taskboard-row,_:-ms-fullscreen .taskboard-row{min-height:auto}svg{pointer-events:none}a[ng-click] svg{pointer-events:auto}tg-card .card-title span:last-child{word-break:break-word}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}.menu-secondary{background:#fcfdff}.menu-tertiary{background-color:#1a237e}.extrabar{background:#fcfdff}h1,h2,h3,h4,h5,h6{color:#212121}a:hover{color:#3f51b5}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{background:#f5f5f5;border-color:#3f51b5;color:#424242}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=url]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a4a4a4}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=url]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#a4a4a4}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=url]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#a4a4a4}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a4a4a4}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid #f44336}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(244,67,54,.7);color:#fff}blockquote{border-left:5px solid #8c9eff}blockquote,blockquote p,cite{color:#757575}.summary{background:#424242;color:#fff}.navbar{background:rgba(233,30,99,.6)}.navbar::after{background:url(../images/menu-vert.png) top left}tg-project-menu{background-color:#0d113f;background-image:none}.main-nav svg path{fill:#fff}.taskboard-table-header .task-colum-name{background:#f5f5f5;border-top:3px solid #3f51b5}.taskboard-table-header .task-colum-name .icon{fill:#3f51b5}.taskboard-table-body .taskboard-cards-box{background:#f5f5f5}.kanban-table-header .task-colum-name{background:#fbfbfb;border-top:3px solid #3f51b5}.kanban-table-header .task-colum-name .icon{color:#3f51b5}.kanban-table-body .kanban-uses-box{background:#fbfbfb} \ No newline at end of file diff --git a/dist/v-1547534999795/styles/theme-taiga.css b/dist/v-1547534999795/styles/theme-taiga.css deleted file mode 100644 index 380d82d..0000000 --- a/dist/v-1547534999795/styles/theme-taiga.css +++ /dev/null @@ -1,4 +0,0 @@ -@charset "UTF-8";.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;box-sizing:content-box}.introjs-bullets ul,.introjs-bullets ul li,.introjs-bullets ul li a,.introjs-button,.introjs-helperLayer,.introjs-helperNumberLayer,.introjs-hint,.introjs-overlay,.introjs-progress,.introjs-progressbar,.introjs-tooltip,.introjs-tooltipReferenceLayer{box-sizing:content-box}.pika-table,table{border-collapse:collapse;border-spacing:0}.lightbox textarea,textarea{resize:vertical}h1 .date,h1 span{text-overflow:ellipsis}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:100000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0)";filter:"progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000)";box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow.bottom-middle,.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow{border:5px solid transparent;content:'';position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-bottom-color:#fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.right{right:-10px;top:10px;border-left-color:#fff}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-left-color:#fff}.introjs-arrow.bottom,.introjs-arrow.bottom-middle,.introjs-arrow.bottom-right{bottom:-10px;border-top-color:#fff}.introjs-arrow.bottom-right{right:10px}.introjs-arrow.left{left:-10px;top:10px;border-right-color:#fff}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-right-color:#fff}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-bullets,.pika-table th,.pika-title{text-align:center}.introjs-button{position:relative;overflow:visible;display:inline-block;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{box-sizing:content-box;margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-prevbutton.introjs-fullbutton{border:1px solid #d4d4d4;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-nextbutton.introjs-fullbutton{-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0;display:inline-block}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none;cursor:pointer}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{overflow:hidden;height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0%;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{position:absolute;background:0 0;width:20px;height:15px;cursor:pointer}.introjs-hint:focus{border:0;outline:0}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}.introjs-hint-dot,.introjs-hint-pulse{box-sizing:content-box;position:absolute}.introjs-hint:hover>.introjs-hint-pulse{border:5px solid rgba(60,60,60,.57)}.introjs-hint-pulse{width:10px;height:10px;border:5px solid rgba(60,60,60,.27);-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;background-color:rgba(136,136,136,.24);z-index:10;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.introjs-hint-no-anim .introjs-hint-dot{-webkit-animation:none;-moz-animation:none;animation:none}.introjs-hint-dot{border:10px solid rgba(146,146,146,.36);background:0 0;-webkit-border-radius:60px;-moz-border-radius:60px;border-radius:60px;height:50px;width:50px;-webkit-animation:introjspulse 3s ease-out;-moz-animation:introjspulse 3s ease-out;animation:introjspulse 3s ease-out;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;animation-iteration-count:infinite;top:-25px;left:-25px;z-index:1;opacity:0}@-webkit-keyframes introjspulse{0%{-webkit-transform:scale(0);opacity:0}25%{-webkit-transform:scale(0);opacity:.1}50%{-webkit-transform:scale(.1);opacity:.3}75%{-webkit-transform:scale(.5);opacity:.5}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes introjspulse{0%{-moz-transform:scale(0);opacity:0}25%{-moz-transform:scale(0);opacity:.1}50%{-moz-transform:scale(.1);opacity:.3}75%{-moz-transform:scale(.5);opacity:.5}100%{-moz-transform:scale(1);opacity:0}}@keyframes introjspulse{0%{transform:scale(0);opacity:0}25%{transform:scale(0);opacity:.1}50%{transform:scale(.1);opacity:.3}75%{transform:scale(.5);opacity:.5}100%{transform:scale(1);opacity:0}}.gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";filter:alpha(opacity=20)}.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:hsla(0,0%,100%,.9);background:linear-gradient(to bottom right,#fff,hsla(0,0%,100%,.8));border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.2);text-shadow:none}.awesomplete>ul:empty{display:none}@supports (transform:scale(0)){.awesomplete>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.awesomplete>ul:empty,.awesomplete>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.awesomplete>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.awesomplete>ul>li{position:relative;padding:.2em .5em;cursor:pointer}.awesomplete>ul>li:hover{background:#b7d2e0;color:#000}.awesomplete>ul>li[aria-selected=true]{background:#3d6c8e;color:#fff}.awesomplete mark{background:#e9ff00}.awesomplete li:hover mark{background:#b5d100}.awesomplete li[aria-selected=true] mark{background:#3c6b00;color:inherit}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}.project-values-title,h1{text-transform:uppercase}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! - * Pikaday - * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ - */.pika-single{display:block;position:relative;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.medium-editor-anchor-preview,.medium-editor-toolbar{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;top:0;z-index:2000}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}@-webkit-keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}@keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}.medium-editor-anchor-preview{left:0;line-height:1.4;max-width:280px;position:absolute;text-align:center;word-break:break-all;word-wrap:break-word;visibility:hidden}.medium-editor-anchor-preview a{color:#fff;display:inline-block;margin:5px 5px 10px}.medium-editor-placeholder-relative:after,.medium-editor-placeholder:after{content:attr(data-placeholder)!important;padding:inherit;margin:inherit;white-space:pre;font-style:italic}.medium-editor-anchor-preview-active{visibility:visible}.medium-editor-dragover{background:#ddd}.medium-editor-image-loading{-webkit-animation:medium-editor-image-loading 1s infinite ease-in-out;animation:medium-editor-image-loading 1s infinite ease-in-out;background-color:#333;border-radius:100%;display:inline-block;height:40px;width:40px}.medium-editor-placeholder{position:relative}.medium-editor-placeholder:after{position:absolute;left:0;top:0}.medium-editor-placeholder-relative,.medium-editor-placeholder-relative:after{position:relative}.medium-toolbar-arrow-over:before,.medium-toolbar-arrow-under:after{border-style:solid;content:'';display:block;height:0;left:50%;margin-left:-8px;position:absolute;width:0}.medium-toolbar-arrow-under:after{border-width:8px 8px 0}.medium-toolbar-arrow-over:before{border-width:0 8px 8px}.medium-editor-toolbar{left:0;position:absolute;visibility:hidden}.medium-editor-toolbar ul{margin:0;padding:0}.medium-editor-toolbar li{float:left;list-style:none;margin:0;padding:0}.medium-editor-toolbar li button{box-sizing:border-box;cursor:pointer;display:block;font-size:14px;line-height:1.33;margin:0;padding:15px;text-decoration:none}.medium-editor-toolbar li button:focus{outline:0}.medium-editor-toolbar li .medium-editor-action-underline{text-decoration:underline}.medium-editor-toolbar li .medium-editor-action-pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-weight:100;padding:15px 0}.medium-editor-toolbar-active{visibility:visible}.belong-to-epic-text-wrapper .remove-epic-relationship svg,.colors-table .gu-transit *{visibility:hidden}.medium-editor-sticky-toolbar{position:fixed;top:1px}.master,.medium-editor-relative-toolbar{position:relative}.medium-editor-toolbar-active.medium-editor-stalker-toolbar{-webkit-animation:medium-editor-pop-upwards 160ms forwards linear;animation:medium-editor-pop-upwards 160ms forwards linear}.medium-editor-action-bold{font-weight:bolder}.medium-editor-action-italic{font-style:italic}.medium-editor-toolbar-form{display:none}.medium-editor-toolbar-form a,.medium-editor-toolbar-form input{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.medium-editor-toolbar-form .medium-editor-toolbar-form-row{line-height:14px;margin-left:5px;padding-bottom:5px}.medium-editor-toolbar-form .medium-editor-toolbar-input,.medium-editor-toolbar-form label{border:none;box-sizing:border-box;font-size:14px;margin:0;padding:6px;width:316px;display:inline-block}body,html{width:100%}.medium-editor-toolbar-form .medium-editor-toolbar-input:focus,.medium-editor-toolbar-form label:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;box-shadow:none;outline:0}.medium-editor-toolbar-form a{display:inline-block;font-size:24px;font-weight:bolder;margin:0 10px;text-decoration:none}.medium-editor-toolbar-form-active{display:block}.medium-editor-toolbar-actions:after{clear:both;content:"";display:table}.medium-editor-element{word-wrap:break-word;min-height:30px}.master,body,html{min-height:100%}.medium-editor-element img{max-width:100%}.medium-editor-element sub{vertical-align:sub}.medium-editor-element sup{vertical-align:super}.medium-editor-hidden{display:none}.medium-toolbar-arrow-under:after{border-color:#242424 transparent transparent;top:50px}.medium-toolbar-arrow-over:before{border-color:transparent transparent #242424;top:-8px}.medium-editor-toolbar{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.75));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.75));border:1px solid #000;border-radius:5px;box-shadow:0 0 3px #000}.medium-editor-toolbar li button{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.89));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.89));border:0;border-right:1px solid #000;border-left:1px solid #333;border-left:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px rgba(0,0,0,.3);color:#fff;height:50px;min-width:50px;-webkit-transition:background-color .2s ease-in;transition:background-color .2s ease-in}.medium-editor-toolbar li button:hover{background-color:#000;color:#ff0}.medium-editor-toolbar li .medium-editor-button-first{border-bottom-left-radius:5px;border-top-left-radius:5px}.medium-editor-toolbar li .medium-editor-button-last{border-bottom-right-radius:5px;border-top-right-radius:5px}.medium-editor-toolbar li .medium-editor-button-active{background-color:#000;background:-webkit-linear-gradient(top,#242424,rgba(0,0,0,.89));background:linear-gradient(to bottom,#242424,rgba(0,0,0,.89))}.medium-editor-toolbar-form{background:#242424;border-radius:5px;color:#999}.medium-editor-toolbar-form .medium-editor-toolbar-input{background:#242424;box-sizing:border-box;color:#ccc;height:50px}.medium-editor-toolbar-form a{color:#fff}.medium-editor-toolbar-anchor-preview{background:#242424;border-radius:5px;color:#fff}.medium-editor-placeholder:after{color:#b3b3b1}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}.loader-active,body.loading-project,h1 .date,h1 span{overflow:hidden}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.prism-token.prism-cdata,.prism-token.prism-comment,.prism-token.prism-doctype,.prism-token.prism-prolog{color:#708090}.prism-token.prism-punctuation{color:#f8f8f2}.prism-namespace{opacity:.7}.prism-token.prism-constant,.prism-token.prism-deleted,.prism-token.prism-property,.prism-token.prism-symbol,.prism-token.prism-tag{color:#f92672}.prism-token.prism-boolean,.prism-token.prism-number{color:#ae81ff}.prism-token.prism-attr-name,.prism-token.prism-builtin,.prism-token.prism-char,.prism-token.prism-inserted,.prism-token.prism-selector,.prism-token.prism-string{color:#a6e22e}.prism-language-css .prism-token.prism-string,.prism-style .prism-token.prism-string,.prism-token.prism-entity,.prism-token.prism-operator,.prism-token.prism-url,.prism-token.prism-variable{color:#f8f8f2}.prism-token.prism-atrule,.prism-token.prism-attr-value,.prism-token.prism-class-name,.prism-token.prism-function{color:#e6db74}.prism-token.prism-keyword{color:#66d9ef}.prism-token.prism-important,.prism-token.prism-regex{color:#fd971f}.prism-token.prism-bold,.prism-token.prism-important{font-weight:700}.prism-token.prism-italic{font-style:italic}.prism-token.prism-entity{cursor:help}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}h1,p{line-height:1.5}.wysiwyg dl dt,.wysiwyg i,em{font-style:italic}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}*{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.3}body .master.ng-animate{transition:0}.drag-active{overflow-x:hidden}.master{height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-ms-flexbox;display:flex;height:100%}.menu-secondary{-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions header{-ms-flex:1;flex:1}.header-with-actions .action-buttons{-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;float:right;margin-left:10px}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.ttf) format("truetype")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.ttf) format("truetype")}@font-face{font-family:OpenSans-Regular;src:url(../fonts/OpenSans-Regular.ttf) format("truetype")}@font-face{font-family:OpenSans-Semibold;src:url(../fonts/OpenSans-Semibold.ttf) format("truetype")}@font-face{font-family:taiga;font-style:normal;font-weight:400;src:url(../fonts/taiga.eot);src:url(../fonts/taiga.eot?) format("eot"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:1rem}h1 span,h2{font-size:1.6rem}h1 span{margin-right:.5rem;vertical-align:bottom;white-space:nowrap}h1 span.green,h1 span:last-child{-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#5b8200;fill:#5b8200}h1 .date{display:inline-block;max-width:500px;white-space:nowrap;word-wrap:normal;color:#767676}h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.2;margin-bottom:1rem}p img{margin:0}small{font-size:1rem}strong{font-weight:700}hr{border:solid #050505;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{transition:color .3s linear}@keyframes loading{0%{filter:blur(5px);opacity:0}100%{filter:blur(0);opacity:1}}@keyframes rotate{50%{filter:invert(1);transform:rotate(360deg)}}@keyframes formSlide{0%{filter:blur(5px);opacity:0;transform:translateY(10rem)}50%{filter:blur(0)}100%{opacity:1;transform:translateY(0)}}.ticket-assigned-to .user-avatar.is-iocaine img,.ticket-assigned-users .user-avatar.is-iocaine img{filter:hue-rotate(150deg) saturate(200%)}@keyframes loadBar{0%,20%{-ms-flex:1;flex:1}10%{-ms-flex:10;flex:10}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-.25rem)}60%{opacity:1}100%{transform:translateY(0)}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{font-size:.9rem;display:block}blockquote cite::before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}.card-task,.main-nav,.wysiwyg .list-stye-none{list-style:none}sup{font-size:.9rem;vertical-align:super}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}svg{height:1rem;width:1rem}.pika-single{min-width:240px;width:auto;z-index:999999}.pika-single .pika-title{color:#444}.pika-single .is-selected .pika-button{background:#5b8200;border-radius:0!important;box-shadow:inset 0 1px 3px #5b8200}.pika-single .is-today .pika-button{color:#5b8200}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#9dce0a!important;border-radius:0!important;box-shadow:inset 0 1px 3px #9dce0a!important}div.awesomplete>ul,div.awesomplete>ul::before{background:rgba(0,0,0,.95)}.spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:2rem;max-width:2rem}.capslock.ng-enter,.capslock.ng-leave{animation:dropdownFade .2s ease-in}div.awesomplete input{display:inline-block}div.awesomplete>ul{color:#9dce0a;top:2.25rem;transition:all .2s ease}div.awesomplete>ul[hidden]{position:absolute;top:1.5rem;transform:scale(1)}div.awesomplete li:hover mark,div.awesomplete mark,div.awesomplete>ul>li:hover{background:#9dce0a;color:#000}fieldset{border:0;margin:0;padding:0;position:relative;width:100%}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{transition:border .3s linear}button,button:active,button:focus{border:0;outline:0}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.capslock.ng-leave{animation-direction:reverse}.capslock .icon-capslock{bottom:.8rem;fill:#555;height:.9rem;position:absolute;right:1rem;width:.9rem}.admin-membership .header-message{background:#E8F5E3;margin-top:1rem;padding:1rem}.admin-membership .header-message .no-more-membership{-ms-flex-align:center;align-items:center;color:#444;display:-ms-flexbox;display:flex}.admin-membership .header-message .no-more-membership a,.admin-membership .header-message .no-more-membership strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-membership .header-message .no-more-membership p{color:#444;-ms-flex-positive:1;flex-grow:1;margin:0;padding-left:2rem;padding-right:1rem}.admin-membership .limit-users-warning{font-size:.9rem;color:#5b8200;margin-right:1rem}.admin-membership .check input{height:40px;width:85px}.add-tag-container{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:.5rem 0;padding:1rem}.add-tag-container .color-column{cursor:pointer;-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative}.add-tag-container .tag-name{-ms-flex-preferred-size:80%;flex-basis:80%;margin-right:1rem}.add-tag-container .options-column{display:-ms-flexbox;display:flex}.add-tag-container .options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.add-tag-container .current-color.empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.add-tag-container .current-color.empty-color:after,.add-tag-container .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.add-tag-container .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.add-tag-container .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.add-tag-container input[type=text]{background:#fff}.add-tag-container .icon.icon-close,.add-tag-container .icon.icon-save{opacity:1}.tags-table .table-tags-editor input[type=text]{background-color:transparent;border:0;border-bottom:1px solid transparent;box-shadow:none;transition:border-bottom .2s linear}.tags-table .table-tags-editor input[type=text]:focus{border-bottom:1px solid #555;outline:0}.tags-table .table-tags-editor .row.header-tag-row{cursor:default;padding-left:1rem}.tags-table .color-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;padding:0 10px;position:relative}.tags-table .color-filter:hover input{border-bottom:1px solid #e4e3e3}.tags-table .color-filter input{padding:0}.tags-table .color-filter label{cursor:pointer}.tags-table .row.tag-row{margin:.3rem 0;padding:.7rem}.tags-table .row.tag-row:hover{cursor:default}.tags-table .row .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mix-tags{position:relative}.tags-table .mix-tags .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#050505;bottom:2rem;color:#fff;display:none;list-style-type:none;margin:0;padding:10px;position:absolute;right:-85%;width:120px;z-index:99;text-align:"center"}.tags-table .mix-tags .popover a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.tags-table .mix-tags .popover a:last-child{border:0}.tags-table .mix-tags .popover a:hover{color:#9dce0a;transition:color .3s linear}.tags-table .mix-tags .popover a:hover.point{color:#fff}.tags-table .mix-tags .popover:after{background:#050505;bottom:-5px;content:'';height:15px;left:50%;position:absolute;transform:rotate(45deg);width:1rem}.tags-table .mix-tags:hover .popover{display:block}.tags-table .mixing-options-column{text-align:right}.tags-table .mixing-options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mixing-tags-from,.tags-table .mixing-tags-to{background:rgba(216,248,121,.2)}.tags-table .mixing-confirm{margin:0 .5rem}.tags-table .mixing-help-text{font-size:.75rem;color:#879b89;display:inline;padding-right:.5rem;text-align:center}@media (max-width:1280px){.tags-table .mixing-help-text{display:block;padding:.5rem}}.tags-table .current-color.empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.tags-table .current-color.empty-color:after,.tags-table .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.tags-table .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.tags-table .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,0,0,.7);position:absolute;width:100%}.admin-attributes .admin-attributes-section .admin-tags-section-wrapper-empty{color:#767676;padding:10vh 0 0;text-align:center}.admin-attributes .admin-attributes-section .loading-spinner{max-height:3rem;max-width:3rem}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.admin-roles p{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#767676}.auth .logo,.project-values-title h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.auth .logo,.auth .tagline{color:#fff;text-align:center}.project-values-title{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem}.project-values-title h2{font-size:1.2rem;margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(../images/bg.png) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;overflow-y:auto;position:fixed;right:0;top:0;z-index:999}.auth .auth-container{-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{text-align:center;width:100%}.auth .logo-svg svg{height:8rem;width:8rem}.auth .logo{font-size:3rem}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{margin-left:.5rem;padding-bottom:1rem}.auth .login-text a,.auth .register-text a{text-decoration:underline}.auth .login-text a:hover,.auth .register-text a:hover{color:#9dce0a}.auth .register-terms{margin:.5rem 0 .75rem}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{animation-duration:5s;animation-iteration-count:infinite;animation-name:moustache;animation-timing-function:ease-in-out;fill:rgba(91,130,0,.9);stroke:#9dce0a;stroke-width:1px;transform-origin:50% 50%;transition:.3s}.moustache:hover{fill:rgba(157,206,10,.9);transition:.3s}@keyframes moustache{0%,30%,70%,90%{transform:rotate(0)}10%{transform:rotate(-10deg)}80%{transform:rotate(10deg)}}.backlog-filter{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;opacity:0;overflow:hidden;position:relative;transition:all .2s linear;width:0}.backlog-filter tg-filter{transform:translateX(-260px);transition:all .2s linear}.backlog-filter.active tg-filter,.issues tg-filter{transform:translateX(0)}.backlog-filter.active{opacity:1;transition:all .2s linear;width:260px}.backlog-menu{background:#f5f5f5;color:#050505;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .menu-button.move-to-sprint,.multiple-drag-mirror.us-item-row .icon-drag,.multiple-drag-mirror.us-item-row .points,.multiple-drag-mirror.us-item-row .status,.multiple-drag-mirror.us-item-row .tags-block,.multiple-drag-mirror.us-item-row .us-settings,.multiple-drag-mirror.us-item-row .votes,.multiple-drag-mirror.us-item-row input{display:none}@media (max-width:1280px){.backlog-menu{-ms-flex-direction:column;flex-direction:column}}.backlog-menu .menu-button .icon-move{margin-right:.25rem}.backlog-menu .button-bulk{margin-left:.2rem}.multiple-drag-mirror.us-item-row{background:#fff;border-radius:4px;box-shadow:2px 2px 5px #555;min-height:calc(40px + 1rem);opacity:.9;padding:1rem}.multiple-drag-mirror.us-item-row.is-checked,.multiple-drag-mirror.us-item-row:hover{background:#fff}.forecasting-add-sprint{font-size:.9rem;background:#f5f5f5;cursor:pointer;padding:.5rem 0;text-align:center}.invitation-main .avatar .person-name,.invitation-main .invitation-text{font-size:1.2rem;color:#fff;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.forecasting-add-sprint:hover{background:#ededed;transition:background .2s}.forecasting-add-sprint .icon-add{width:1.75rem;height:1.75rem;background:#9dce0a;fill:#fff;margin-right:1rem;padding:.25rem;vertical-align:middle}.invitation-main{background:url(../images/invitation_bg.jpg) center center no-repeat;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background-size:cover;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;height:100vh;-ms-flex-pack:center;justify-content:center;z-index:999}.kanban,.taskboard{height:calc(100vh - 40px)}.invitation-main .invitation-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.error-main h1,.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{font-size:.9rem;color:#767676;opacity:1;position:absolute;right:1rem;top:.5rem;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#444;transition:color .3s linear}.invitation-main .login-form,.invitation-main .register-form{-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff}.invitation-main .register-text{color:#fff;font-size:.9rem;margin-left:.5rem;padding-bottom:1rem;text-align:left}.invitation-main .register-text a{color:#5b8200}.invitation-main .button-auth{display:block}.invitation-main .button-blackish:hover{background:#5b8200}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.invitation-main .public-register-disabled{width:400px}.invitation-main .public-register-disabled .login-form{border-right:0}.invitation-main .contrib-plugins-wrapper label{color:#e4e3e3}.issues .filters-bar{position:relative;width:260px}.kanban{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px);position:relative}.kanban header{min-height:70px}.kanban .kanban-settings{float:right}.kanban .burndown-container{display:none}.kanban .zoom-loading img{display:block;margin-right:1rem}.kanban-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.kanban-header .options{display:-ms-flexbox;display:flex}.taskboard-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.error-main{background:url(../images/invitation_bg.jpg) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.duty-content,.taskboard{position:relative}.error-main .error-container{color:#fff;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff}.error-main a{color:#9dce0a}.rtl .navbar .nav-right{margin:0}.rtl .navbar .nav-right .user-avatar{padding-left:0;padding-right:2em;text-align:left}.rtl .navbar .nav-right img{margin-left:0;margin-right:.5rem}.rtl .main-nav li:hover .helper{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav li:hover .helper::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav .backlog-sprints-menu::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu a{text-align:right}.rtl .admin-menu li a{padding:1rem 1rem 1rem 0}.rtl h1 span{margin-left:.5rem;margin-right:0}.rtl blockquote{border-left:0;border-right:5px solid #f5f5f5}.rtl .single-filter .name,.rtl .tag{border-color:transparent;border-width:0 3px 0 0}.rtl .tag{border-radius:5px 0 0 5px;margin:0 0 .5rem .5rem}.rtl .tag .icon-close{margin-left:0;margin-right:.25rem}.rtl .home-wrapper .working-on-container{margin-left:1rem;margin-right:0}.rtl .home-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .home-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .contact-team-large .icon-mail{margin-left:.5rem;margin-right:0}.rtl .user-profile .project-details-image{margin-left:2rem;margin-right:0}.rtl .profile-timeline .activity-item .profile-contact-picture,.rtl .profile-timeline .activity-item .profile-member-picture,.rtl .single-project .project-logo{margin-left:1rem;margin-right:0}.rtl .profile-timeline .activity-item{padding:1rem 0 1rem .5rem}.rtl .profile-timeline .activity-item .activity-date{left:.5rem;right:auto}.rtl .profile-timeline .activity-item .activity-info{margin-left:130px;margin-right:0}.rtl .profile-timeline .activity-item blockquote{margin-left:0;margin-right:calc(35px + 1rem)}.rtl .profile-timeline .single-attachment .icon{margin-left:.5rem;margin-right:0}.rtl .project-data .involved-team li{margin-left:.13rem;margin-right:0}.rtl .project-details-form-data .actions .delete-account{text-align:left}.rtl .backlog-table-body .backlog-table-title .user-stories,.rtl .backlog-table-body .row .user-stories,.rtl .backlog-table-body .user-story-name a,.rtl .backlog-table-header .backlog-table-title .user-stories,.rtl .backlog-table-header .row .user-stories,.rtl .issues-table .assigned-field,.rtl .issues-table .issue-field,.rtl .issues-table .modified-field,.rtl .issues-table .subject a,.rtl .sprints .sprint-table .column-us{text-align:right}.rtl .project-data .timeline{margin-left:1rem;margin-right:0}.rtl .track-icon{margin-left:.5rem;margin-right:0}.rtl .watch-options-arrow{margin-left:0;margin-right:auto}.rtl .ticket-estimation .ticket-role-points .icon-arrow-down{margin-left:0;margin-right:.25rem}.rtl .ticket-watch .ticket-watch-button,.rtl .ticket-watch svg{margin-left:.25rem;margin-right:0}.rtl .related-tasks-body .task-assignedto .icon{left:.5rem;right:0}.rtl .related-tasks-body .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .related-tasks-body .task-name{margin-left:1rem;margin-right:0}.rtl .related-tasks-body .task-name span{margin-left:.25rem;margin-right:0}.rtl tg-filter .search-action{left:.7rem;right:auto}.rtl .kanban tg-filter,.rtl .taskboard tg-filter{left:auto;right:0;transform:translateX(260px)}.rtl .kanban tg-filter.open,.rtl .taskboard tg-filter.open{transform:translateX(0)}.rtl .category-config .icon,.rtl .icon-arrow-left,.rtl .icon-arrow-right{transform:scaleX(-1)}.rtl .issues-options .button-bulk{margin-left:0;margin-right:.2rem}.rtl .issues-table .assigned-field .icon,.rtl .issues-table .issue-field .icon,.rtl .issues-table .modified-field .icon{margin-left:0;margin-right:.25rem}.rtl .issues-table .pop-status{left:auto;right:0}.rtl .issues-table .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .highlighted .header svg,.rtl .issues-table .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .issues-table .subject{padding-left:1rem;padding-right:0}.rtl .issues-table .issue-assignedto .icon{left:0;right:auto}.rtl .single-filter{padding-left:.5rem;padding-right:0}.rtl .single-filter .number{left:0;right:auto}.rtl .single-filter .name{border-style:solid}.rtl .discover-header .search-button{left:1rem;right:auto}.rtl .highlighted .header svg.icon-activity,.rtl .highlighted .header svg.icon-like{margin-left:.5rem;margin-right:0}.rtl .highlighted tg-most-liked{margin-left:8%;margin-right:0}.rtl .highlighted-project .statistic{margin-left:.5rem;margin-right:0}.rtl .highlighted-project .project-statistics svg{margin-left:.25rem;margin-right:0}.rtl .highlighted-project .project-logo{margin-left:1rem;margin-right:0}.rtl .featured-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .featured-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .project-list-wrapper .project-list{margin-left:2rem;margin-right:0}.rtl .project-list-wrapper .list-itemtype-project .list-itemtype-project-image{margin-left:1rem;margin-right:0}.rtl .create-project-selector-question{left:1.5rem;right:auto}.rtl .create-project-title-wrapper .icon{margin-left:.5rem;margin-right:0}.rtl .create-project-privacity label .icon{margin-left:.25rem;margin-right:0}.rtl .create-project-action-submit{margin-left:0;margin-right:1rem}.rtl .summary-progress-bar{margin-left:10px;margin-right:0}.rtl .empty-burndown svg{margin-left:2rem;margin-right:0}.rtl .backlog-menu .button-bulk{margin-left:0;margin-right:.2rem}.rtl .ticket-header .detail-status{margin-left:0;margin-right:.25rem}.rtl .ticket-status .level-name{float:left}.rtl .ticket-status .level{margin-left:.5rem;margin-right:0}.rtl .ticket-data-container .icon{margin-left:0;margin-right:.25rem}.rtl .ticket-assigned-to .assigned-to{margin-left:0;margin-right:.5rem}.rtl .user-list-avatar{margin-left:.25rem;margin-right:0}.rtl .user-list-name{margin-left:0;margin-right:.5rem}.rtl .assigned-to-list .user-list-multiple .remove-assigned-to,.rtl .assigned-to-list .user-list-single .remove-assigned-to,.rtl .ticket-assigned-to .remove-user,.rtl .ticket-assigned-users .remove-user,.rtl .ticket-watchers .delete-watcher{left:.5rem;right:auto}.rtl .lightbox .close{left:3rem;right:auto}.rtl .activity .activity-avatar,.rtl .comment .comment-avatar{margin-left:1.5rem;margin-right:0}.rtl .comment .comment-creator{margin-left:.5rem;margin-right:0}.rtl tg-wysiwyg .tools{padding-left:0;padding-right:1rem}.rtl .add-tag-button .icon-add{margin:.5rem 0 0 .25rem}.rtl .add-tag-input .save{margin:.5rem .5rem 0 0}.rtl .issue-nav{left:1rem;right:auto}.rtl .upvote-btn{margin-left:.3rem;margin-right:0}.rtl .taskboard-table-header .taskboard-table-inner{margin-left:1rem}.rtl .taskboard-table-header .task-colum-name{margin:0 0 0 5px}.rtl .kanban-table-header{margin-left:-3.7rem}.rtl .kanban-table-body .task-column,.rtl .kanban-table-header .task-colum-name,.rtl .taskboard-table-body .task-column{margin:0 0 0 5px}.rtl .kanban-table-body .task-column:last-child,.rtl .taskboard-table-body .task-column:last-child{margin-left:0;margin-right:initial}.rtl .backlog-table-body .votes svg{margin-left:.25rem;margin-right:0}.rtl .backlog-table-header .backlog-table-title{padding-left:1rem;padding-right:0}.rtl .backlog-table-body .backlog-table-title .status,.rtl .backlog-table-body .row .status,.rtl .backlog-table-header .backlog-table-title .status,.rtl .backlog-table-header .row .status{-ms-flex-preferred-size:150px;flex-basis:150px;text-align:right}.rtl .backlog-table-body .points .icon,.rtl .backlog-table-body .status .icon,.rtl .backlog-table-header .points .icon,.rtl .backlog-table-header .status .icon{margin-left:0;margin-right:.2rem}.rtl .sprints .sprint-table .column-points,.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .created-by .created-title{text-align:left}.rtl .sprints .sprint .edit-sprint{left:0;margin-left:.5rem;margin-right:0;right:auto}.rtl .epic-row .progress-bar,.rtl .epic-row .progress-status{left:auto;right:0}.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem}.rtl tg-wysiwyg .markdown-editor-placeholder,.rtl tg-wysiwyg .medium-editor-placeholder{padding-left:0;padding-right:1rem;text-align:right}.rtl .attachments-header button{margin-left:.2rem;margin-right:0}.rtl .attachments-header label{margin-left:0;margin-right:.25rem}.rtl .attachment-list .attachment-comments,.rtl .attachment-list .editable-attachment-comment{margin-left:.5rem;margin-right:0}.rtl .attachment-list .editable-attachment-deprecated input{margin-left:.2rem;margin-right:0}.rtl .more-attachments .more-attachments-num{margin-left:0;margin-right:.5rem}.rtl .single-attachment .attachment-name{padding-left:1rem;padding-right:0}.rtl .single-attachment .attachment-name svg{margin-left:.25rem;margin-right:0}.rtl .wiki-nav .add-button svg{margin-left:.5rem;margin-right:0}.rtl .wiki-pages-table .created-field,.rtl .wiki-pages-table .creator-field,.rtl .wiki-pages-table .last-modifier-field,.rtl .wiki-pages-table .modified-field,.rtl .wiki-pages-table .title-field{text-align:right}.rtl .wiki-summary div{margin-left:1.25rem;margin-right:0}.rtl .summary .number{margin-left:.3rem;margin-right:0}.rtl .summary .stats{margin-left:initial;margin-right:auto}.rtl .table-team .avatar .avatar-data{margin-left:0;margin-right:1rem;text-align:right}.rtl .table-team .leave-project .icon{margin-left:.2rem;margin-right:0}.rtl .belong-to-epic-text-wrapper{margin-left:1rem;margin-right:0}.rtl .epics-table-options-wrapper{left:.5rem;right:auto}.rtl .epics-table-dropdown{left:0;right:auto}.rtl .epic-row .icon-upvote,.rtl .story-row .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .story-row{margin-left:0;margin-right:4rem}.rtl .epic-row .icon-arrow-down{margin-left:0;margin-right:.1rem}.rtl .epic-header-container .color-selector{margin-left:.5rem;margin-right:0}.rtl .related-userstories-header .related-userstories-title{margin-left:0;margin-right:1rem}.rtl tg-related-userstory-row .userstory-name{margin-left:1rem;margin-right:0}.rtl tg-related-userstory-row .userstory-name span{margin-left:0;margin-right:.25rem}.rtl tg-related-userstory-row .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .card-owner-actions .icon{margin-left:.25rem;margin-right:0}.rtl .card-owner img{margin-left:.5rem;margin-right:0}.rtl .card-owner .card-owner-avatar img{margin-left:.45rem;margin-right:0}.rtl .card-statistics .statistic{margin-left:.5rem;margin-right:.5rem}.rtl .card-statistics .icon{margin-left:.2rem;margin-right:0}.rtl .lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-left:.5rem;margin-right:0}.rtl .lightbox-create-related-user-stories .new-user-story-options{margin-left:0;margin-right:auto}.rtl .lightbox-generic-form .settings fieldset{margin-left:.5rem;margin-right:0}.rtl .ticket-estimation .popover{left:auto;right:.5rem}.rtl .ticket-estimation .popover::after{left:auto;right:10px}.rtl .profile .timeline-wrapper{margin-left:3.5rem;margin-right:0}.rtl .profile .profile-bar{margin-left:1rem;margin-right:0}.rtl .profile-content-tabs .icon{margin-left:.5rem;margin-right:0}.rtl .profile-sidebar h4 .icon{margin-left:.3rem;margin-right:auto}.rtl .profile-filter .searchbox input{margin-left:1rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-project-image,.rtl .list-itemtype-project .list-itemtype-track .list-itemtype-track-likers,.rtl .list-itemtype-ticket .list-itemtype-avatar,.rtl .list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers,.rtl .profile-filter .searchbox .icon-search{margin-left:.5rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-track-likers .icon,.rtl .list-itemtype-project .list-itemtype-track-watchers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-likers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-watchers .icon{margin-left:.25rem;margin-right:0}.rtl .list-itemtype-ticket.blocked-project .icon-blocked-project{margin-left:0;margin-right:.25rem}.rtl .list-itemtype-ticket .list-itemtype-ticket-data{margin-left:1rem;margin-right:0}.rtl .list-itemtype-user .list-itemtype-avatar{margin-left:.75rem;margin-right:0}.rtl .admin-submenu ul a{padding:1rem 1rem 1rem 0}.rtl .admin-functionalities .module-desc{margin:0 0 0 2rem}.rtl .admin-functionalities .module-icon{margin:0 0 0 .5rem}.rtl .project-details .project-details-image{margin-left:2rem;margin-right:0}.rtl .admin-project-profile-owner-actions .owner-info{padding-left:0;padding-right:.5rem}.rtl .admin-roles .general-category .check{margin-left:0;margin-right:.5rem}.rtl .help-button svg,.rtl .project-details .private-or-public svg{margin-left:.5rem;margin-right:0}.rtl .project-csv .option-wrapper{border-left:1px solid #767676;border-radius:5px 0 0 5px;border-right:0}.rtl .colors-table .table-header .row{padding-left:0;padding-right:50px}.rtl .basic-table .row{text-align:right}.rtl .admin-membership-table .avatar img{margin:0 .3rem 0 .5rem}.rtl .admin-membership-table .row-role{padding-left:1rem;padding-right:0}.rtl .project-details .get-feedback-inner .check,.rtl .project-details .looking-for-people-selector .check{margin-left:0;margin-right:auto}.rtl .check input{left:auto;right:-10px}.rtl .check input:checked+div{margin-left:0;margin-right:50%}.rtl .check input:checked~.check-yes{left:.3rem;right:auto}.rtl .check input~.check-no{left:auto;right:.375rem}.rtl .notification-message-success{left:-370px;right:auto}.rtl .notification-message-success.active{animation:animSlideRTL 2s}.rtl .notification-message-success.inactive{animation:animSlideOutRTL .5s}@keyframes animSlideRTL{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}4.1%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,232.117,0,0,1)}8.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,357.804,0,0,1)}12.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,407.374,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,417.342,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,399.585,0,0,1)}60.56%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400.01,0,0,1)}100%,82.78%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400,0,0,1)}}@keyframes animSlideOutRTL{100%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}0%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}}.taskboard{overflow:hidden}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.taskboard .zoom-loading img{display:block;margin-right:1rem}.taskboard-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.taskboard-inner{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden}.team h2{margin:1rem 0}.team h2 span:last-child{color:#5b8200}.us-story-main-data{margin-bottom:1rem}.us-story-main-data header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.subheader{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:1280px){.subheader{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}}.subheader .ticket-created-by{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-negative:0;flex-shrink:0}@media (max-width:1280px){.subheader .ticket-created-by{-ms-flex-preferred-size:auto;flex-basis:auto;-ms-flex-order:1;order:1}}.subheader .tags-block{-ms-flex:1;flex:1}@media (max-width:1280px){.subheader .tags-block{-ms-flex-order:2;order:2}}.subheader .tags-block .tag{border-color:transparent;border-style:solid}.duty-content .in-progress{cursor:progress}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#444}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#767676}.duty-content .markdown{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;transition:opacity .2s linear}.duty-content .save-container .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:1.5rem;max-width:1.5rem}.duty-content .edit{cursor:pointer;fill:#555}.duty-content .view-description .edit{background:#f5f5f5;height:2rem;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;transition:all .2s linear;width:2rem}.duty-content .edit-description{margin-bottom:2rem}.duty-content .edit-description .save{cursor:pointer;display:inline-block;position:relative;top:.3rem}.duty-content .edit-description .edit{display:inline-block;position:absolute;right:2.5rem;top:.4rem;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.save-wiki{float:right}.wiki{max-width:1024px}.wiki .wysiwyg{margin-bottom:0}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #dad9d9;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:.3rem 0;text-align:left;width:100%}@media (max-width:767px){.basic-table .row{-ms-flex-direction:column;flex-direction:column}}.basic-table .row .width-1{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.button,.button-auth,.button-blackish,.button-bulk,.button-filter,.button-gray,.button-green,.button-red,.button-tribe,.menu-button,.trans-button,a.button-gray,a.button-green{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0;border:0;border-radius:3px;color:#fff;cursor:pointer;display:inline-block;padding:.6rem 2rem;text-align:center;text-transform:uppercase;transition:all .2s linear;vertical-align:middle}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-filter:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button-tribe:hover,.button:hover,.menu-button:hover,.trans-button:hover{color:#fff;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-filter:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button-tribe:visited,.button:visited,.menu-button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-filter span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.button-tribe span,.loading.menu-button span,.loading.trans-button span{animation:loading .5s linear}.button .icon,.button span,.button-auth .icon,.button-auth span,.button-blackish .icon,.button-blackish span,.button-bulk .icon,.button-bulk span,.button-filter .icon,.button-filter span,.button-gray .icon,.button-gray span,.button-green .icon,.button-green span,.button-red .icon,.button-red span,.button-tribe .icon,.button-tribe span,.menu-button .icon,.menu-button span,.trans-button .icon,.trans-button span{color:#fff}.button.disabled,.button[disabled],.disabled.button-auth,.disabled.button-blackish,.disabled.button-bulk,.disabled.button-filter,.disabled.button-gray,.disabled.button-green,.disabled.button-red,.disabled.button-tribe,.disabled.menu-button,.disabled.trans-button,[disabled].button-auth,[disabled].button-blackish,[disabled].button-bulk,[disabled].button-filter,[disabled].button-gray,[disabled].button-green,[disabled].button-red,[disabled].button-tribe,[disabled].menu-button,[disabled].trans-button{background:#f5f5f5;box-shadow:none;color:#767676;cursor:not-allowed;opacity:.65}.button.disabled:hover,.button[disabled]:hover,.disabled.button-auth:hover,.disabled.button-blackish:hover,.disabled.button-bulk:hover,.disabled.button-filter:hover,.disabled.button-gray:hover,.disabled.button-green:hover,.disabled.button-red:hover,.disabled.button-tribe:hover,.disabled.menu-button:hover,.disabled.trans-button:hover,[disabled].button-auth:hover,[disabled].button-blackish:hover,[disabled].button-bulk:hover,[disabled].button-filter:hover,[disabled].button-gray:hover,[disabled].button-green:hover,[disabled].button-red:hover,[disabled].button-tribe:hover,[disabled].menu-button:hover,[disabled].trans-button:hover{background:#f5f5f5;color:#767676}.menu-button,.trans-button:visited{color:#050505}.trans-button .icon,.trans-button span{color:#050505;transition:color .2s linear}.trans-button .icon{margin-right:.5rem}.menu-button{border-radius:0}.menu-button:hover{background:#e4e3e3;color:#555}.menu-button span,.menu-button:visited{color:#050505}.submit-button{width:100%}.button-green,a.button-green{background:#5b8200}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#9dce0a;color:#fff}.button-gray,a.button-gray{background:#555}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#9dce0a;color:#fff}.button-blackish{background:#050505;color:#e4e3e3}.button-blackish:hover{background:#050505;color:#fff}.button-red{background:#ff8282}.button-red:hover{background:red;color:#fff}.button-red .icon{color:#fff}.button-bulk{background:#5b8200;padding:.55rem .75rem}.button-bulk .icon{fill:currentColor;margin-right:0;position:relative;top:1px}.button-bulk:hover{background:#9dce0a}.button-auth{background:#444}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.button-tribe{-ms-flex-align:center;align-items:center;background:#107a8a;display:-ms-flexbox;display:flex;padding:.4rem .4rem .4rem 1.5rem}.button-tribe.active,.button-tribe:hover{background:#0b525c;color:#fff}.button-tribe .tribe-logo{margin-right:.5rem;width:1.5rem}.tribe-more-info{font-size:.9rem;color:#5b8200;display:inline-block;margin-top:.5rem}.button-filter{background:#e4e3e3;margin-left:1rem;padding:.4rem .5rem;position:relative}.button-filter:hover{background:#767676;fill:#e4e3e3}.button-filter .filter-num{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background:red;border-radius:50%;height:1rem;left:-.5rem;position:absolute;top:-.5rem;width:1rem}.card-placeholder{background:#dfdede;border:1px dashed #d0cece;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:-ms-flexbox;display:flex}.card-placeholder .image{background:#d0cece;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-ms-flex:1;flex:1}.card-placeholder .line{background:#d0cece;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;margin:0}.check{background-color:#cbc9c9;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:100px;z-index:999}.check input+div{background-color:#555;height:25px;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#9dce0a;margin-left:50%;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.check input:disabled+div{background-color:#767676}.ticket-created-by{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end}@media (max-width:1280px){.ticket-created-by{-ms-flex-pack:start;justify-content:flex-start;margin-bottom:.5rem}}.ticket-created-by .user-avatar{-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-positive:0;flex-grow:0;margin-left:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555;display:block;text-align:right}@media (max-width:1280px){.ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem;-ms-flex-order:1;order:1}.ticket-created-by .created-by{-ms-flex-order:2;order:2}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{text-align:left}}.ticket-created-by .created-by .created-title{color:#5b8200}.ticket-created-by .created-by .created-date{margin-left:.5rem}@media (max-width:1280px){.ticket-created-by .created-by .created-date{margin-left:0}}.doom-line{-ms-flex-align:center;align-items:center;background:#ff8282;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:.5rem 0;padding:.25rem 0}.doom-line span{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff}.drag-drop-help,.help-button,.help-markdown{font-size:.75rem}.wysiwyg-help{background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:-.5rem;padding:.45rem .5rem}.wysiwyg-help a{display:inline-block}.drag-drop-help{color:#555}.help-button:hover span,.help-markdown:hover span{transition:color .2s linear}.help-button:hover .icon,.help-markdown:hover .icon{fill:#9dce0a;transition:fill .2s linear}.help-button span,.help-markdown span{vertical-align:text-top}.help-button .icon,.help-markdown .icon{width:.9rem;height:.9rem;fill:#767676;margin-right:.2rem}.empty-filter,.empty-large,.empty-small{margin-top:4rem;text-align:center}.empty-filter img,.empty-large img,.empty-small img{margin-bottom:1rem;width:100%}.empty-filter .title,.empty-large .title,.empty-small .title{font-size:1.2rem;text-transform:uppercase}.empty-filter p,.empty-large p,.empty-small p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.empty-filter a,.empty-large a,.empty-small a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#5b8200}.empty-small img{max-width:175px}.empty-large img{max-width:800px}.empty-filter{margin-top:1rem}.ticket-estimation .points-per-role{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.ticket-estimation .ticket-role-points{background:rgba(118,118,118,.2);color:#767676;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.1rem;min-height:2rem;padding:.5rem 1rem;position:relative}.ticket-estimation .ticket-role-points.clickable.active,.ticket-estimation .ticket-role-points.clickable:hover{background:rgba(157,206,10,.9);color:#e4e3e3}.ticket-estimation .ticket-role-points.clickable.active .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable.active .points,.ticket-estimation .ticket-role-points.clickable.active .role,.ticket-estimation .ticket-role-points.clickable:hover .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable:hover .points,.ticket-estimation .ticket-role-points.clickable:hover .role{color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points:last-child{background:rgba(135,155,137,.5);border-bottom:0;color:#e4e3e3}.ticket-estimation .ticket-role-points:last-child .icon-arrow-bottom,.ticket-estimation .ticket-role-points:last-child .points,.ticket-estimation .ticket-role-points:last-child .role{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points .icon-arrow-down{fill:currentColor;height:.6rem;margin-left:.25rem;width:.6rem}.ticket-estimation .popover.fix:after,.ticket-estimation .popover:after{height:10px;transform:rotate(45deg);content:''}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0;z-index:99;position:absolute;font-size:.9rem;list-style-type:none}.ticket-estimation .ticket-role-points .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#444}.ticket-estimation .ticket-role-points .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .popover{background:#050505;color:#fff;display:none;left:.5rem;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#050505;left:10px;position:absolute;top:-5px;width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#9dce0a;color:#fff}.ticket-estimation .popover.fix{background:#050505;color:#fff;display:none;left:-160px;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover.fix a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#9dce0a;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#050505;left:90%;position:absolute;top:-5px;width:10px}.history-tabs{background:#e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.history-tabs a{display:inline-block;padding:.75rem 1rem}.history-tabs a:hover{color:#5b8200}.history-tabs .history-tab{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid transparent;color:#767676;transition:all .1s linear}.history-tabs .history-tab.active{border-bottom:3px solid #444;color:#444}.history-tabs .order-comments{color:#444}.level{background-color:#767676;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project{border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{font-size:.9rem;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#5b8200}.list-itemtype-project .list-itemtype-track-likers.active .icon,.list-itemtype-project .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-project .icon{fill:#767676}.list-itemtype-project h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-project p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .icon-blocked-project{width:.75rem;height:.75rem}.list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-project-data-wrapper .icon-private{fill:#767676;height:22px;margin-left:.5rem;padding-top:.5rem;width:22px}.list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;width:3rem}.list-itemtype-project .list-itemtype-project-image img{width:100%}.list-itemtype-project .list-itemtype-project-members{-ms-flex-item-align:end;align-self:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-ticket .list-itemtype-avatar img,.list-itemtype-user .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-project .tag{-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket,.list-itemtype-user{border-bottom:1px solid #e4e3e3;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-ms-flexbox;display:flex;position:relative}.list-itemtype-ticket .list-itemtype-track{font-size:.9rem;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#5b8200}.list-itemtype-ticket .ticket-id,.list-itemtype-ticket .ticket-project{color:#767676}.list-itemtype-ticket .list-itemtype-track-likers.active .icon,.list-itemtype-ticket .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-ticket .icon{fill:#767676}.list-itemtype-ticket h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1rem}.list-itemtype-ticket p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-ticket .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-type{margin-left:.3rem;text-transform:uppercase}.list-itemtype-ticket .list-itemtype-ticket-data{-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-blocked{color:red;margin-right:.25rem}.list-itemtype-user{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track{font-size:.9rem;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#5b8200}.list-itemtype-user .list-itemtype-track-likers.active .icon,.list-itemtype-user .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-user .icon{fill:#767676}.list-itemtype-user h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-user p{margin-bottom:0}.list-itemtype-user .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .extra-info{font-size:.9rem;margin-top:.25rem}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:100%;-ms-flex-pack:center;justify-content:center;width:100%}.loader p{font-size:1.2rem;color:#555;text-align:center}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{animation-duration:5s;animation-iteration-count:infinite;animation-name:loadBar;animation-timing-function:ease-in;background:#555;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{animation-delay:0s;background:#bbe831}.loading-bar .item-1{animation-delay:1s;background:#237400}.loading-bar .item-2{animation-delay:2s;background:#e43050}.loading-bar .item-3{animation-delay:3s;background:#810061}.loading-bar .item-4{animation-delay:4s;background:#618000}.loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;transform-origin:32 32}.look-for-people{width:1rem;height:1rem;fill:#767676;margin-left:.25rem}.notification-message-success{background:rgba(157,206,10,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);right:-370px;top:2%;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{animation:animSlide 2s;animation-fill-mode:forwards;animation-iteration-count:1;opacity:1}.notification-message-success.inactive{animation:animSlideOut .5s;opacity:0;transform:none}.notification-message-success p{margin:0}.notification-message-success .warning{font-size:1.2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:1.2}@keyframes animSlide{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}100%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlideOut{0%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-message-error{background:rgba(255,0,0,.9);opacity:1;top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;transform:translateY(0);transition:all .6s ease-in-out}.notification-light,.notification-light.inactive{opacity:0;transform:translateY(-100%);transition:all .6s}.notification-message-error.inactive{transition:all .6s ease-in-out}.notification-message-error .icon-error{width:3rem;height:3rem;fill:#fff;margin-right:.5rem}.notification-message-error .warning{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:2.4rem}.notification-light p,.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-message-error .text p{margin:0}.notification-message-error .close{display:block;position:absolute;right:1rem;top:1rem}.notification-message-error .icon-close{cursor:pointer;fill:#fff}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-ms-flex-align:center;align-items:center;background:rgba(118,118,118,.95);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;position:absolute;top:0;width:100%;z-index:99999}.notification-light.active{opacity:1;transform:translateY(0);transition:all .6s}.notification-light p{margin:0}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{display:block;margin-right:1rem;width:2rem}.notification-light .close svg{fill:#fff}.notification-message-light-error{background:rgba(255,0,0,.8)}.paginator{margin:2rem 0}.paginator ul{display:-ms-flexbox;display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator a{background:#767676;color:#fff;padding:.5rem 1rem;transition:all .3s linear}.paginator a:hover{background:#050505;color:#fff;transition:all .3s linear}.paginator .active span{background:#9dce0a}.select-color,.select-color:after{background:#050505;position:absolute}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.select-color{color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;text-align:"center";border-radius:0 10px 10px 0;padding:15px}.select-color a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#9dce0a;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#767676;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color .empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.select-color .empty-color:after,.select-color .empty-color:before{content:"";width:2px;height:47px;background:#ff8282;position:absolute;top:0}.select-color .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.select-color .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background-color:#e4e3e3;width:243px}.summary .description,.summary .number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.select-color input::-webkit-input-placeholder{color:#555}.select-color input::-moz-placeholder{color:#555}.select-color input:-moz-placeholder{color:#555}.select-color input:-ms-input-placeholder{color:#555}.select-color .selected-color{background:#767676;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.settings-nav .active{background:#fff}.summary{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:65px;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;overflow:hidden;padding:1rem}.summary .summary-stats{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#9dce0a}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{font-size:.9rem;line-height:1}.summary .stats{cursor:pointer;display:block;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .graph{fill:#9dce0a;transition:fill .2s}.summary .stats.active .graph,.summary .stats.active svg,.summary .stats:hover svg{fill:#5b8200}.summary .stats svg{fill:#000;height:100%;max-height:2rem;max-width:2rem;transition:all .2s;width:100%}.summary .stats .graph{fill:#434343;transition:fill .2s}.summary .main-summary-stats{display:-ms-flexbox;display:flex;transform:translateY(0);transition:all .2s ease-in-out}.summary .show-role-points .points-per-role-stats{transform:translateY(-35px)}.summary .show-role-points .main-summary-stats{transform:translateY(-65px)}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#9dce0a;height:24px}.summary-progress-bar .defined-points{background:#ff8282;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#9dce0a;height:24px;position:absolute}.large-summary{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;padding:.75rem 1rem}.large-summary .stats-wrapper{padding-top:.35rem}.large-summary .large-summary-wrapper{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.large-summary .summary-progress-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding-top:.35rem}.large-summary .summary-progress-bar{-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats.summary-completed-points,.large-summary .summary-stats.summary-move-unfinished{border-right:1px solid #050505;margin-right:0;padding-right:1rem}.large-summary .summary-stats.summary-completed-points+.summary-stats,.large-summary .summary-stats.summary-move-unfinished+.summary-stats{border-left:1px solid #555;margin-left:0;padding-left:1rem}.large-summary .icon{width:1.3rem;height:1.3rem;fill:currentColor;margin:.1rem .4rem 0 0;vertical-align:middle}.large-summary .icon.icon-stats{color:#5b8200;float:right;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#9dce0a;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#9dce0a}.large-summary .icon.icon-stats.active:hover{color:#5b8200;transition:color .3s linear}.large-summary .points-per-role-stats-content{display:-ms-flexbox;display:flex;padding-left:1rem}.large-summary .points-per-role-stats-content .summary-stats{padding:0}.large-summary .toggle-points-per-role{color:#fff;cursor:pointer}.large-summary .toggle-points-per-role svg{width:1rem;height:1rem}.large-summary .points-per-role-stats{margin-left:.5rem;transform:translateY(35px);transition:all .2s ease-in-out}.large-summary .points-per-role-stats .number{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.empty-burndown,.empty-burndown .title,.large-summary .points-per-role-stats .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.large-summary .points-per-role-stats .role{font-size:.75rem}.empty-burndown{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:rgba(135,155,137,.15);display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{width:4rem;height:4rem;fill:#879b89;-ms-flex-preferred-size:4rem;flex-basis:4rem;-ms-flex-negative:0;flex-shrink:0;margin-right:2rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-ms-flex:1;flex:1}.empty-burndown .title{font-size:1.2rem;color:#879b89;margin:0;text-transform:uppercase}.empty-burndown a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;animation:blink 2s infinite}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name,.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;transition:none}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-ms-flex-align:stretch;align-items:stretch;border-radius:4px;display:-ms-flexbox;display:flex;margin:0;padding:0}.track-button.active .track-inner{background:rgba(157,206,10,.4)}.track-button.active .icon{fill:#5b8200}.track-button.active .track-button-counter{background:rgba(157,206,10,.6)}.track-button.is-hover .track-inner{background:#f33;color:#e4e3e3;transition:background .2s}.track-button.is-hover .icon{fill:#ff8282}.track-button.is-hover .track-button-counter{background:red;color:#e4e3e3;transition:background .2s}.track-button .watch-options-arrow{margin-left:auto}.track-button .icon-arrow-down{width:.75rem;height:.75rem}.track-inner{-ms-flex-align:center;align-items:center;background:#e4e3e3;border-radius:4px 0 0 4px;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:start;justify-content:flex-start;min-width:140px;padding:.25rem 1rem}.track-inner:hover{background:#d7d6d6;transition:background .3s}.track-icon{fill:#444;margin-right:.5rem;position:relative;top:2px}.track-button-counter{-ms-flex-align:center;align-items:center;background:#d7d6d6;border-radius:0 4px 4px 0;padding:.25rem .75rem}.contact-team{background:#e4e3e3;border-radius:4px;padding:.25rem .75rem}.contact-team:hover{background:#d7d6d6;transition:background .3s}.watch-options{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.watch-options li{margin:0}.assigned-to-list,.ticket-assigned-users,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{border-bottom:1px solid rgba(118,118,118,.3);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.assigned-to-list .user-list-single,.upvote-btn{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox}.watch-options a.active{color:#9dce0a}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check svg{fill:#9dce0a}.upvote-btn{-ms-flex-align:stretch;align-items:stretch;display:flex;-ms-flex:0;flex:0;-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#767676;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#879b89;transition:background .3s}.upvote-btn a:hover path{fill:#879b89}.upvote-btn a.active{background:rgba(157,206,10,.2);color:#5b8200;transition:all .3s}.upvote-btn a.active svg{fill:#5b8200}.upvote-btn a.is-hover{background:red;color:#e4e3e3}.upvote-btn a.is-hover svg{fill:#ff8282;transform:rotate(180deg);transition:all .3s}.upvote-btn svg{fill:#767676;height:1rem;width:1rem}.assigned-to-list .user-list-avatar img,.ticket-assigned-users .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.upvote-btn span{display:block}.assigned-to-list .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #e4e3e3;display:flex;padding:.25rem 0;vertical-align:middle}.assigned-to-list .user-list-multiple,.ticket-watchers .user-list-single{-ms-flex-line-pack:center;padding:.25rem 0;vertical-align:middle;align-content:center}.assigned-to-list .user-list-single:last-child{border:0}.assigned-to-list .user-list-multiple{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex}.assigned-to-list .user-list-multiple.selected,.assigned-to-list .user-list-multiple:hover,.assigned-to-list .user-list-single.is-active,.assigned-to-list .user-list-single.selected,.assigned-to-list .user-list-single:hover{background:rgba(216,248,121,.3);cursor:pointer}.assigned-to-list .user-list-multiple:last-child{border:0}.assigned-to-list .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-name{color:#444;margin-left:.5rem}.assigned-to-list .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{margin-bottom:1rem;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-single .remove-assigned-to{display:block;fill:#444;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-single .remove-assigned-to:hover{fill:red}.assigned-to-list .user-list-multiple:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-multiple.is-active{background:rgba(216,248,121,.3);cursor:pointer;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-multiple .remove-assigned-to{display:block;fill:#444;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-multiple .remove-assigned-to:hover{fill:red}.ticket-watchers .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex}.ticket-watchers .user-list-single:last-child{border:0}.ticket-watchers .user-list-multiple{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.25rem 0;vertical-align:middle}.ticket-assigned-users .user-list-multiple,.ticket-assigned-users .user-list-single{background:0 0;display:-ms-flexbox;padding:.25rem 0;align-content:center;vertical-align:middle}.ticket-watchers .user-list-multiple:last-child{border:0}.ticket-watchers .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-watchers .user-list-name{color:#444;margin-left:.5rem;-ms-flex:1;flex:1;position:relative}.ticket-watchers .user-list-single:hover .delete-watcher{opacity:1;transition:opacity .2s ease-in}.ticket-watchers .delete-watcher{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-watchers .delete-watcher:hover{fill:red;transition:color .3s ease-in}.ticket-assigned-users .user-list-single{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:flex}.ticket-assigned-users .user-list-single:last-child{border:0}.ticket-assigned-users .user-list-multiple{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:flex}.ticket-assigned-users .user-list-multiple:last-child{border:0}.ticket-assigned-users .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-assigned-users .user-list-single{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-users .user-list-single:hover .remove-user{opacity:1;transition:opacity .2s ease-in}.ticket-assigned-users .user-list-name{color:#444;margin-left:.5rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex:1;flex:1;position:relative}.admin-functionalities .module-name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .remove-user{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-assigned-users .remove-user:hover{fill:red;transition:color .3s ease-in}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{color:#767676;margin-bottom:2rem}.admin-common .admin-subtitle a{color:#5b8200}.admin-common .admin-subtitle a:hover{color:#9dce0a}.admin-common .total{font-size:1.2rem;-ms-flex-align:center;align-items:center;background-color:#e4e3e3;color:#444;display:-ms-flexbox;display:flex;padding:.3rem 1rem}.admin-common .total:hover .icon-edit{opacity:1;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0}.custom-fields-table .table-header{border-bottom:3px solid #e4e3e3}.custom-fields-table .table-header .custom-description,.custom-fields-table .table-header .custom-name{padding-left:1.1rem}.custom-fields-table .table-body .row:hover{background:rgba(157,206,10,.05);cursor:move;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag{opacity:1;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .single-custom-field{border-bottom:1px solid #e4e3e3;color:#555}.custom-fields-table .js-view-custom-field{padding:.75rem 0}.custom-fields-table .js-view-custom-field .custom-extra-attr-wrapper{margin-left:1em}.custom-fields-table .icon-drag{fill:#767676;opacity:0;padding:0 .25rem 0 .1rem;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{margin-right:.5rem}.custom-fields-table .custom-name{-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-name a{padding:.5em}.custom-fields-table .custom-name svg{height:12px;width:12px}.custom-fields-table .custom-description{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:50%;flex-basis:50%;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-ms-flex-preferred-size:12%;flex-basis:12%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;opacity:0;text-align:center}.custom-fields-table .custom-options svg{cursor:pointer;fill:#767676;margin-right:.5rem;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options svg:hover{fill:#5b8200;transition:color .2s linear}.custom-fields-table .custom-options svg.icon-close,.custom-fields-table .custom-options svg.icon-trash{fill:#ff8282}.custom-fields-table .custom-options-wrapper{opacity:0;transition:opacity .3s linear}.custom-fields-table .custom-options-wrapper:hover,.custom-fields-table .js-form .custom-options-wrapper{opacity:1}.custom-fields-table .custom-options-wrapper a{display:inline-block}.custom-fields-table .custom-field-extra{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#767676;font-size:.95em;padding:.25em 1.5em}.custom-fields-table .custom-extra-actions,.custom-fields-table .js-view-custom-field-extra{padding:.5em}.custom-fields-table .js-edit-custom-field{margin-left:.4rem}.custom-fields-table .custom-extra-attr-wrapper{-ms-flex-positive:1;flex-grow:1}.custom-fields-table .custom-extra-actions a{color:#5b8200}.custom-fields-table .custom-extra-actions svg{height:10px;margin-right:.25em;width:10px}.admin-functionalities .module-container{max-width:900px;width:100%}.admin-project-export-result .spin img,.project-details .loading-spinner{max-height:1rem;max-width:1rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.admin-functionalities .module{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:1rem 0}.admin-functionalities .module.active .module-icon .icon,.admin-functionalities .module.active .module-name{color:#5b8200;fill:#5b8200}.admin-functionalities .module-icon{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem 0 0}.admin-functionalities .module-icon .icon{width:3rem;height:3rem;fill:#767676}.admin-functionalities .module-name{font-size:1.2rem;color:#767676;-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem}.admin-functionalities .module-desc{font-size:.9rem;color:#767676;-ms-flex:1;flex:1;margin:0 2rem 0 0}.admin-functionalities .module-desc p{margin:0}.admin-functionalities .module-desc-options,.admin-functionalities .videoconference-attributes{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-top:.5rem}.admin-functionalities .module-desc-options .options,.admin-functionalities .videoconference-attributes .options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:2.5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .module-desc-options fieldset,.admin-functionalities .videoconference-attributes .icon,.admin-functionalities .videoconference-attributes fieldset{margin:0 .5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .videoconference-attributes .icon{fill:#767676}.admin-functionalities .module-desc-options .icon:hover,.admin-functionalities .videoconference-attributes .icon:hover{fill:#5b8200}.admin-functionalities .module-scrum .options{-ms-flex-item-align:end;align-self:flex-end}.admin-functionalities .module-videoconference .options{-ms-flex-item-align:start;align-self:flex-start}.admin-membership-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.admin-membership-table .avatar img{border-radius:4px;-ms-flex-positive:0;flex-grow:0;margin:0 .5rem 0 .3rem;width:50px}.admin-membership-table .avatar .data{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555;margin-top:.2rem}.admin-membership-table .avatar .pending,.admin-menu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-membership-table .avatar .pending{color:#ff8282;display:inline-block;padding-left:.3rem}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#e4e3e3}.admin-membership-table .resend{background-color:#5b8200;color:#fff}.admin-membership-table .resend:hover{background-color:#9dce0a;color:#fff;transition:background-color .3s linear}.admin-membership-table .delete{fill:#767676;transition:fill .2s}.admin-membership-table .delete:hover{fill:red}.admin-membership-table .pending{color:#ff8282}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-ms-flex-preferred-size:210px;flex-basis:210px;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.admin-menu li{border-bottom:1px solid #cbc9c9;text-transform:uppercase}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{margin:0 auto;transform-origin:32 32;width:100%}.admin-project-export-result h3{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.2rem;background:#f5f5f5;color:#555;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#767676;margin:.5rem 0;text-align:center}.project-details .delete-project:hover,.project-details .use-default-image:hover{color:red}.project-details form{display:-ms-flexbox;display:flex}.project-details fieldset{margin-bottom:1rem}.project-details label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.project-details .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.project-details .project-details-image .image{width:100%}.project-details .change-image{display:block}.project-details .image-container{position:relative;margin-bottom:.5rem}.project-details .loading-overlay{display:none}.project-details .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.project-details .loading-spinner{margin:0 auto;border:0;transform-origin:center center}.project-details .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.project-details .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.project-details form{display:block}}.project-details .get-feedback,.project-details .looking-for-people{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid #e4e3e3;padding:1rem 0}.project-details .looking-for-people{border-top:1px solid #e4e3e3;margin-bottom:0}.project-details .get-feedback-inner,.project-details .looking-for-people-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.project-details .get-feedback-inner svg,.project-details .looking-for-people-selector svg{width:1rem;height:1rem;fill:#767676;margin-left:.5rem}.project-details .get-feedback-inner .check,.project-details .looking-for-people-selector .check{margin-left:auto}.project-details .looking-for-people-reason{display:block;margin-top:1rem}.project-details .looking-for-people-reason.ng-hide-remove-active{animation:dropdownFade .3s}.project-details .looking-for-people-reason.ng-hide-add-active{animation:dropdownFade .2s reverse;animation-delay:.1s}.project-details .delete-project{font-size:1rem;display:block;margin-top:1rem;text-align:right}.project-details .private-or-public{font-size:1rem;color:#767676;margin-bottom:2rem}.project-details .private-or-public svg{width:1.1rem;height:1.1rem;fill:#767676;margin-right:.5rem;vertical-align:middle}.project-privacy-settings{display:-ms-flexbox;display:flex;margin-bottom:.5rem}.project-privacy-settings .privacy-option{-ms-flex:1;flex:1;transition:.2 linear}.project-privacy-settings .privacy-option:first-child{margin-right:.5rem}.project-privacy-settings input[type=radio],.project-privacy-settings input[type=text]{display:none}.project-privacy-settings .privacy-project:checked~input[type=text],tg-admin-project-restrictions span{display:block}.project-privacy-settings label{background:#f5f5f5;color:#444;text-align:center;transition:all .2s linear}.project-privacy-settings label:hover{background:rgba(157,206,10,.4);color:#444}.project-privacy-settings label:hover svg{fill:#444}.project-privacy-settings label svg{width:1.1rem;height:1.1rem;fill:#444;margin-left:.5rem;vertical-align:middle}.project-privacy-settings .privacy-project:checked+label{background:#9dce0a;color:#fff}.project-privacy-settings .privacy-project:checked+label svg{width:1.1rem;height:1.1rem;fill:#fff}.project-privacy-settings .privacy-project[disabled]+label{background:#f5f5f5;box-shadow:none;color:#767676;cursor:not-allowed;opacity:.65}.project-privacy-settings .privacy-project[disabled]+label:hover{background:#f5f5f5;color:#767676}tg-admin-project-restrictions p{font-size:1rem;text-align:center}tg-admin-project-restrictions a{color:#5b8200}tg-admin-project-restrictions span:first-child::before{border:1px solid #ff8282;border-radius:6px;color:#ff8282;content:'!';display:inline-block;height:12px;line-height:12px;margin-right:.5rem;text-align:center;width:12px}.admin-project-profile-owner-actions{-ms-flex-align:center;align-items:center;border-top:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem}.admin-project-profile-owner-actions a{color:#5b8200}.admin-project-profile-owner-actions a:hover{color:#9dce0a;transition:color .2s}.admin-project-profile-owner-actions img{width:100%}.admin-project-profile-owner-actions .owner-info{-ms-flex:1;flex:1;padding-left:.5rem}.admin-project-profile-owner-actions .owner-info-title{color:#767676}.admin-project-profile-owner-actions .owner-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-project-profile-owner-actions .owner-avatar{width:2.5rem}.admin-project-profile-owner-actions .request{-ms-flex-negative:0;flex-shrink:0}.admin-roles .save{display:inline-block}.admin-roles .role-name{font-size:2rem;color:#444}.admin-roles .icon:hover{fill:#5b8200;transition:fill .2s linear}.admin-roles .icon-edit{cursor:pointer;fill:#767676;margin-left:.5rem;opacity:0;transition:opacity .2s linear}.admin-roles .icon-save{fill:#767676;margin-left:.5rem;transition:fill .2s linear}.admin-roles .edit-role{background-color:#e4e3e3;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .any-computable-role{background:red;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{font-size:.9rem;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category.external-user{-ms-flex-pack:start;justify-content:flex-start}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.admin-submenu ul a span,.admin-webhooks .webhook-url span{max-width:85%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admin-submenu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676;text-transform:uppercase}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#8fa291;color:#fff;transition:all .2s}.admin-submenu ul a.active{background:#a3b2a4;color:#fff;transition:all .2s}.admin-submenu ul a span{display:block}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#050505}.admin-webhooks .webhooks-table{margin-bottom:1rem}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;transition:opacity .2s linear}.admin-webhooks .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676}.admin-webhooks .table-body .webhook-service{color:#555}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #e4e3e3}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-negative:0;flex-shrink:0}.admin-webhooks .webhook-url{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.admin-webhooks .webhook-url span{word-wrap:normal;color:#767676;display:inline-block;vertical-align:middle}.admin-webhooks .webhook-url a{color:#5b8200;cursor:pointer;margin-left:.5rem;white-space:nowrap}.admin-webhooks .webhook-url a:hover{color:#9dce0a}.admin-webhooks .webhook-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.admin-webhooks .webhook-options a{cursor:pointer;display:inline-block;margin-right:.5rem}.admin-webhooks .webhook-options svg{fill:#767676}.admin-webhooks .webhook-options svg:hover{fill:#5b8200;transition:fill .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{display:none}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #e4e3e3;margin-left:22%}.admin-webhooks .history-single{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(157,206,10,.1);transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{transform:rotate(180deg);transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{transform:rotate(0);transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#555;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#9dce0a}.admin-webhooks .history-response-icon.history-error{background:red}.admin-webhooks .history-single-response{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#767676}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-header a{font-size:.9rem;color:#767676}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#9dce0a;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{font-family:'courier new',monospace;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{font-size:.9rem;color:#767676;-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace;border:0;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-contrib h2,.admin-contrib label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #e4e3e3;margin-bottom:1rem}.admin-contrib input{margin-bottom:1rem}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #767676;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:0 1rem}.admin-contrib .check-item{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0;margin-bottom:1rem}.contrib-form-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.contrib-form-wrapper input{margin:0}.contrib-form-wrapper .contrib-input{border:0;-ms-flex:5;flex:5;margin:0}.contrib-form-wrapper .contrib-test{border:0;-ms-flex:1;flex:1;margin:0 0 0 1rem}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field a{font-size:.9rem;margin-left:1em;white-space:nowrap}.project-csv .csv-regenerate-field .icon:not(.icon-clipboard){fill:currentColor;height:.9rem;margin-right:.3rem;vertical-align:middle;width:.9rem}.project-csv .field-with-options{display:-ms-flexbox;display:flex;width:100%}.project-csv .field-with-options input{-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #767676;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{cursor:pointer;fill:#767676;opacity:0}.project-values-row .icon:hover{fill:#444;transition:all .2s ease-in}.project-values-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #e4e3e3}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#e9ffb5;cursor:move;transition:background .2s ease-in}.project-values-body .project-values-row:hover .icon{opacity:1;transition:opacity .2s ease-in}.project-values-name{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-values-value{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{display:inline-block;margin-right:.5rem}.project-values-settings svg.icon-trash{fill:#ff8282}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p{color:#444;margin-bottom:.5rem;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #767676;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{font-size:.9rem;opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;transition:opacity .2s linear}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-password-text,.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;transition:opacity .3s linear}.login-form-container .forgot-pass{font-size:.9rem;color:#555;opacity:1;position:absolute;right:1rem;top:.6rem;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#444;transition:color .3s linear}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin:1rem 0;text-align:center}.register-form-container .register-text{font-size:.9rem}.backlog-table-body,.backlog-table-header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #767676;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-ms-flex-preferred-size:25px;flex-basis:25px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{width:100%}.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .votes,.backlog-table-header .votes{color:#555;-ms-flex-preferred-size:65px;flex-basis:65px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.backlog-table-body .votes.inactive,.backlog-table-header .votes.inactive{color:#767676}.backlog-table-body .votes.inactive svg,.backlog-table-header .votes.inactive svg{fill:#767676}.backlog-table-body .votes.is-voted,.backlog-table-header .votes.is-voted{color:#9dce0a;fill:#9dce0a}.backlog-table-body .votes svg,.backlog-table-header .votes svg{fill:#555;height:.75rem;margin-right:.25rem;vertical-align:middle;width:.75rem}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.2rem}.backlog-table-body .pop-points,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-header .pop-points,.backlog-table-header .pop-role,.backlog-table-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;position:absolute;z-index:99;text-align:"center";font-size:.9rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#050505;color:#fff;display:none;left:65%;padding:10px 1rem 10px 10px;top:0;width:200px}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#050505;color:#fff;display:none;left:65%;padding:10px;top:0;width:200px}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#9dce0a;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#9dce0a;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#050505;bottom:10px;color:#fff;display:none;left:30px;padding:10px 3rem 10px 10px;width:150px}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:none;left:30px;list-style-type:none;margin:0;z-index:99;text-align:"center";font-size:.9rem;background:#050505;position:absolute}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#9dce0a;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{color:#fff;padding:10px;top:0;width:200px}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{bottom:0;color:#fff;padding:10px;top:auto;width:200px}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#9dce0a;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#9dce0a;color:#fff}.backlog-table-header .backlog-table-title{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;border-bottom:2px solid #767676;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:1rem}.backlog-table-header .points{cursor:pointer}.backlog-table-header .header-points span{color:#767676}.backlog-table-body.forecasted-stories{border:.5rem solid #f5f5f5;border-bottom:0}.backlog-table-body .row{border-bottom:1px solid #dad9d9;cursor:move;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#e9ffb5;transition:background .2s ease-in;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag,.backlog-table-body .row:hover .us-settings{opacity:1;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.gu-mirror{background:#e9ffb5;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .row .icon-arrow-down{fill:#767676;height:.7rem;width:.7rem}.backlog-table-body .gu-transit{background:#e4e3e3}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .sortable-placeholder *{display:none}.backlog-table-body .is-checked{background:#e9ffb5;transition:background .2s ease-in}.backlog-table-body input:checked{color:#9dce0a;transition:color .2s ease-in}.backlog-table-body .user-story-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:inline-block;-ms-flex:1;flex:1}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.backlog-table-body .user-story-name span{line-height:1.5}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{font-size:.9rem;margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff8282;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:red;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .us-settings{-ms-flex-negative:0;flex-shrink:0;margin-left:2rem;opacity:0}.backlog-table-body .us-settings svg{fill:#767676;margin-right:.5rem;transition:fill .2s ease-in}.backlog-table-body .us-settings svg:hover{fill:#9dce0a}.backlog-table-body .icon-drag{cursor:move;fill:#767676;opacity:0;padding:.1rem}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.backlog-table-body .us-status tg-svg{display:inline-block}.backlog-table-body .loading{margin:2% auto;width:3rem}.backlog-table-body .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.empty-large .row{display:none}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#5b8200;padding:.25rem .25rem 0;transition:background .2s}.sprints .add-sprint:hover{background:#9dce0a}.sprints .add-sprint svg{fill:#e4e3e3;height:1.4rem;width:1.5rem}.sprints .filter-closed-sprints{font-size:.9rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading{text-align:center}.sprints .loading-spinner{border:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;transform-origin:center center}.sprints .sprint-name a{font-size:1rem;display:inline-block;margin-right:.5rem}.sprints .sprint{margin-bottom:2rem}.sprints .sprint header{position:relative}.sprints .sprint:hover .edit-sprint{opacity:1;transition:opacity .2s ease-in}.sprints .sprint .edit-sprint{opacity:0;position:absolute;right:0;top:0;transition:opacity .2s ease-in;vertical-align:baseline}.lightbox-generic-form .settings .iocaine,.lightbox-generic-form .settings .requirement,.ticket-assigned-to .self-assign .icon,.ticket-assigned-to .user-assigned .icon,.ticket-assigned-users .self-assign .icon,.ticket-assigned-users .user-assigned .icon{vertical-align:middle}.sprints .sprint svg{fill:#767676}.sprints .sprint svg:hover{fill:#5b8200;transition:fill .2s ease-in}.sprints .sprint .number{font-size:.75rem;margin-right:.2rem}.sprints .sprint .description{font-size:.75rem;line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{font-size:.9rem;color:#767676;-ms-flex:1;flex:1}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint ul{margin:0;text-align:right}.sprints .compact-sprint{transform:rotate(0);transition:all .2s}.sprints .compact-sprint.active{transform:rotate(90deg);transition:all .2s}.sprints .compact-sprint:hover .icon{fill:#9dce0a;transition:color .2s}.sprints .sprint-progress-bar{background:#767676;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#5b8200;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table{min-height:2rem}.sprints .sprint-table .sprint-empty{background:#d7d6d6;border:2px dashed #909090;color:#555;padding:1rem;text-align:center}.sprints .sprint-table .row{border-bottom:1px solid #767676;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:rgba(118,118,118,.2);cursor:move;transition:background .2s ease-in}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.readonly{cursor:auto}.sprints .sprint-table .row.ui-sortable-helper{background:#e9ffb5;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.sprints .sprint-table .gu-transit{background:#959595;height:40px}.sprints .sprint-table .gu-transit *{display:none}.sprints .sprint-table .column-us{font-size:.9rem;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{display:block}.sprints .sprint-table .us-name.closed{color:#838383}.sprints .sprint-table .us-name.blocked{color:red}.sprints .sprint-table .column-points{-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#838383}.sprints .sprint-table .column-points.blocked{color:red}.sprints .sprint-table.sprint-empty-wrapper .row{display:none}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input{display:none}.sprints .us-item-row .user-story-name{font-size:.9rem;line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#767676}.sprint-closed .sprint-progress-bar .current-progress{background:#5d5d5d}.sprint-closed .button-gray{background:#767676}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{font-size:1.2rem;margin-bottom:.5rem;text-transform:uppercase}.sprints-empty a{color:#5b8200}.taskboard-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.taskboard-table.zoom-0 .task-colum-name span{padding-right:1rem}.taskboard-table .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;background:#f5f5f5;border-top:3px solid #767676;color:#555;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;text-transform:uppercase;width:300px}.taskboard-table .task-colum-name:last-child{margin-right:0}.taskboard-table .task-colum-name.column-fold{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table .task-colum-name.column-fold span{display:none}.taskboard-table .task-colum-name.column-fold .hfold,.taskboard-table .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table .task-colum-name span{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.taskboard-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;min-height:2.4rem;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.taskboard-table-header tg-svg{display:block;margin-right:.3rem}.taskboard-table-header tg-svg:hover{cursor:pointer}.taskboard-table-header tg-svg.hfold,.taskboard-table-header tg-svg.hunfold{display:inline-block;transform:rotate(90deg)}.taskboard-table-body{-ms-flex:1;flex:1;margin-bottom:5rem;overflow:auto;width:100%}.taskboard-table-body .taskboard-column{-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:300px;width:300px}.taskboard-table-body .column-fold .card .card-owner img,.taskboard-table-body .row-fold .card .card-owner img{height:1.3rem;margin-right:0;width:1.3rem}.taskboard-table-body .taskboard-column:last-child{margin-right:0}.taskboard-table-body .row-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .row-fold .card .card-data,.taskboard-table-body .row-fold .card .card-owner-actions,.taskboard-table-body .row-fold .card .card-owner-name,.taskboard-table-body .row-fold .card .card-statistics,.taskboard-table-body .row-fold .card .card-tag,.taskboard-table-body .row-fold .card .card-title,.taskboard-table-body .row-fold .card .card-unfold,.taskboard-table-body .row-fold .card tg-card-slideshow{display:none}.taskboard-table-body .row-fold .taskboard-column,.taskboard-table-body .row-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .card .card-data,.taskboard-table-body .column-fold .card .card-owner-actions,.taskboard-table-body .column-fold .card .card-owner-name,.taskboard-table-body .column-fold .card .card-statistics,.taskboard-table-body .column-fold .card .card-tag,.taskboard-table-body .column-fold .card .card-title,.taskboard-table-body .column-fold .card .card-unfold,.taskboard-table-body .column-fold .card tg-card-slideshow,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table-body .column-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .column-fold .taskboard-column,.taskboard-table-body .column-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to{display:none}.taskboard-table-body .taskboard-row{display:-ms-flexbox;display:flex;margin-bottom:.25rem;min-height:10rem;width:100%}.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box{background:rgba(255,0,0,.6)}.taskboard-table-body .taskboard-row.blocked .points-value,.taskboard-table-body .taskboard-row.blocked .points-value:hover,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg:hover{color:#fff;fill:#fff;transition:color .3s linear}.taskboard-table-body .taskboard-row.blocked .taskboard-cards-box{background:rgba(255,0,0,.1)}.taskboard-table-body .taskboard-row.row-fold{min-height:0}.taskboard-table-body .taskboard-row.row-fold .us-title{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.ticket-assigned-to .loading-spinner,.ticket-assigned-users .loading-spinner{transform-origin:32 32;max-height:2rem;max-width:2rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.taskboard-table-body .taskboard-row.row-fold .icon-add,.taskboard-table-body .taskboard-row.row-fold .icon-bulk,.taskboard-table-body .taskboard-row.row-fold .points-value,.taskboard-table-body .taskboard-row.row-fold .us-data{display:none}.taskboard-table-body .taskboard-row.issues-row{margin-top:1em}.taskboard-table-body .taskboard-row.issues-row .taskboard-cards-box{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:start;align-items:flex-start;border-top:3px solid #767676;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.taskboard-table-body .taskboard-row.issues-row .taskboard-row-title-box{padding:0}.taskboard-table-body .taskboard-row.issues-row .task-colum-name{-ms-flex-pack:start;justify-content:flex-start;padding:.5rem .5rem .5rem 2em}.taskboard-table-body .taskboard-row.issues-row .row-title{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-to,.ticket-assigned-users{-ms-flex-align:center;border-bottom:1px solid #767676;border-top:1px solid #767676}.taskboard-table-body .taskboard-row.issues-row .toggle-fold{display:block;left:.5rem;position:absolute;top:-.4rem}.taskboard-table-body .taskboard-row.issues-row .card{cursor:default;height:auto;margin:.3rem .1rem .3rem .5rem}.taskboard-table-body .taskboard-row.issues-row:not(.row-fold) .card{width:280px}.taskboard-table-body .taskboard-row-title-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-row-title-box{position:relative}.taskboard-row-title-box .us-title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-row-title-box .points-value{font-size:.9rem;color:#767676}.taskboard-row-title-box .points-value span{margin-right:.1rem}.taskboard-row-title-box .us-data{display:-ms-flexbox;display:flex}.taskboard-row-title-box .due-date tg-svg{position:inherit}.taskboard-row-title-box tg-svg{cursor:pointer;display:block;position:absolute;right:.5rem;top:.7rem}.taskboard-row-title-box tg-svg:hover svg{fill:#5b8200}.taskboard-row-title-box tg-svg.add-action{right:2rem}.taskboard-row-title-box tg-svg.fold-action{left:0;right:inherit;top:1rem}.ticket-assigned-to{align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:1rem 0;position:relative}.ticket-assigned-to:hover .remove-user{opacity:1;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{margin:1rem auto}.ticket-assigned-to .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-to .user-avatar .iocaine-symbol svg{background:#444;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.ticket-assigned-to .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block;margin:.2rem 0 .25rem}.ticket-assigned-to .assigned-to .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-to .assigned-to .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-to .assigned-to .self-assign,.ticket-assigned-to .assigned-to .user-assigned{color:#5b8200;cursor:default}.ticket-assigned-to .assigned-to .self-assign:hover,.ticket-assigned-to .assigned-to .user-assigned:hover,.ticket-assigned-to .remove-user:hover,.ticket-assigned-to .self-assign.editable:hover,.ticket-assigned-to .user-assigned.editable:hover,.ticket-assigned-users .self-assign.editable:hover,.ticket-assigned-users .user-assigned.editable:hover{cursor:pointer}.ticket-assigned-to .assigned-to .self-assign .icon,.ticket-assigned-to .assigned-to .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-to .remove-user{fill:#555;opacity:0;position:absolute;right:.5rem;top:2rem}.ticket-assigned-to .remove-user:hover{fill:red;transition:fill .2s}.ticket-assigned-to .self-assign,.ticket-assigned-to .user-assigned{color:#5b8200}.ticket-assigned-to .self-assign:hover,.ticket-assigned-to .user-assigned:hover{color:currentColor}.ticket-assigned-to .self-assign.editable,.ticket-assigned-to .user-assigned.editable{color:#5b8200}.ticket-assigned-users .assigned-title,.ticket-assigned-users .tg-add-assigned span{color:#555;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-assigned-users{align-items:center;margin-bottom:1rem;padding:.5rem 0;position:relative}.ticket-assigned-users .loading-spinner{margin:1rem auto}.ticket-assigned-users .assigned-title{display:block;margin:.2rem 0 .25rem}.ticket-assigned-users .tg-assigned-users{-ms-flex-align:center;align-items:center;position:relative}.ticket-assigned-users .tg-add-assigned{margin-top:.25rem}.ticket-assigned-users .tg-add-assigned .add-assigned{fill:#555;opacity:1;right:.5rem;top:2rem}.ticket-assigned-users .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:red;transition:fill .2s}.ticket-assigned-users .tg-add-assigned span{margin:.2rem .5rem}.ticket-assigned-users .assigned-users-options{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .assigned-users-options a{margin-right:.2rem}.ticket-assigned-users .self-assign,.ticket-assigned-users .self-assign.editable,.ticket-assigned-users .user-assigned,.ticket-assigned-users .user-assigned.editable{color:#5b8200}.ticket-assigned-users .not-assigned-users{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block;margin:.2rem 0 .25rem}.colors-table .table-header,.duty-custom-fields .custom-fields-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .not-assigned-users .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-users .not-assigned-users .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-users .not-assigned-users .self-assign,.ticket-assigned-users .not-assigned-users .user-assigned{color:#5b8200;cursor:default}.colors-table .row.edition .current-color,.ticket-assigned-users .not-assigned-users .self-assign:hover,.ticket-assigned-users .not-assigned-users .user-assigned:hover{cursor:pointer}.ticket-assigned-users .not-assigned-users .self-assign .icon,.ticket-assigned-users .not-assigned-users .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-users .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-users .user-avatar img{width:100%}.ticket-assigned-users .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-users .user-avatar .iocaine-symbol svg{background:#444;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.category-config{border-bottom:1px solid #767676}.category-config:first-child{border-top:1px solid #767676}.category-config .resume{-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:-ms-flexbox;display:flex;padding:1rem;position:relative}.category-config .resume.open-drawer .icon{transform:rotate(90deg)}.category-config .icon{transform:rotate(0);transition:all .4s}.category-config .resume-title{width:280px}.category-config .count{color:#767676;float:left;padding-right:5px}.category-config .summary-role{-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#767676;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#5b8200}.category-config .summary-role .role-summary-single.inactive{background:#555}.category-config .category-items{max-height:0;transition:max-height .5s ease-in;overflow:hidden;background-color:#e4e3e3;width:100%}.colors-table .table-header .row:hover,.colors-table .table-header:hover{background:0 0}.category-config .category-items.open{transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #e4e3e3}.colors-table .table-header .row{padding-left:50px}.colors-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:last-child{border:0}.colors-table .row.edition{padding-left:3rem}.colors-table .row.hidden{display:none}.colors-table .row:hover{background:rgba(216,248,121,.2);cursor:move;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;transition:opacity .3s linear}.colors-table .row.no-draggable{padding-left:50px}.colors-table .row.no-draggable:hover{cursor:auto}.colors-table .row .color-column{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .before-after-column,.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit,.colors-table .row .thresold-column{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.colors-table .row .before-after-column{padding:0 10px}.colors-table .row .color-name,.colors-table .row .status-name{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 10px;position:relative}.colors-table .row .color-name span,.colors-table .row .status-name span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.colors-table .row .color-name{-ms-flex-preferred-size:100px;flex-basis:100px}.colors-table .row .status-slug{display:none;-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:6;flex-grow:6;padding:0 10px}@media (min-width:1400px){.colors-table .row .status-slug{display:block}}.colors-table .row .status-slug span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:100px;text-align:center}.colors-table .row .status-wip-limit{display:none;max-width:100px;padding:0 0 0 10px;text-align:center}@media (min-width:1400px){.colors-table .row .status-wip-limit{display:block}}.colors-table .before-after-selector{display:-ms-flexbox;display:flex;font-size:.9rem}.colors-table .before-after-selector input{display:none}.colors-table .before-after-selector input+label{background:rgba(228,227,227,.7);cursor:pointer;display:block;padding:.5rem .25rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.colors-table .before-after-selector input+label:hover{background:rgba(157,206,10,.3);transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single{-ms-flex:1;flex:1;margin-right:.25rem}.colors-table .before-after-selector .before-after-selector-single:last-child{margin-right:0}.colors-table .before-after-selector .before-after-selector-single.checked label{background:#9dce0a;color:#fff;transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single.checked label:hover{background:#9dce0a}.colors-table .options-column a{cursor:pointer;display:inline-block}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#e4e3e3;border-radius:2px;height:40px;width:40px}.colors-table .icon{cursor:pointer;fill:#767676;margin-right:1rem;opacity:0}.colors-table .icon:hover{fill:#9dce0a;transition:all .2s ease-in}.colors-table .icon.icon-check{cursor:default;fill:#5b8200;opacity:1}.colors-table .icon.icon-merge{cursor:default;opacity:1}.colors-table .icon.icon-search{cursor:none;fill:#5b8200;opacity:1}.colors-table .icon.icon-drag{cursor:move}.colors-table .icon.icon-trash{fill:#ff8282}.colors-table .gu-mirror{background:#e9ffb5;opacity:1}.contrib-plugins-wrapper{margin:1rem 0 2rem}.contrib-plugins-wrapper label{font-size:.9rem;display:block;margin-bottom:.5rem}.duty-custom-fields{margin-bottom:2rem}.duty-custom-fields .custom-fields-header{-ms-flex-line-pack:justify;align-content:space-between;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value,.lightbox h2,.lightbox-create-edit .tg-add-assigned span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header .icon{cursor:pointer}.duty-custom-fields .custom-fields-header .collapse{display:block;transform:rotate(-90deg);transition:.1s ease-out}.duty-custom-fields .custom-fields-header .open{transform:rotate(0)}.duty-custom-fields .custom-field-single{border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;padding:.7rem}.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-options{margin:0;opacity:0;transition:opacity .2s linear}.duty-custom-fields .custom-field-options a{display:inline-block}.duty-custom-fields .custom-field-options svg{fill:#767676}.duty-custom-fields .custom-field-options svg:hover{fill:#5b8200}.duty-custom-fields .custom-field-data{-ms-flex:0;flex:0;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem;color:#888;display:block;line-height:.9rem}.duty-custom-fields .custom-field-value{-ms-flex-align:start;align-items:flex-start;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields .custom-field-value.js-value-view-mode.wysiwyg{white-space:normal}.duty-custom-fields form label{cursor:pointer}.duty-custom-fields form input{width:100%}.custom-fields-body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:50%;flex-basis:50%}@media (max-width:1280px){.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even),.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0}}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even){padding:0 0 0 2rem}.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0 2rem 0 0}.custom-fields-body .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body .custom-attribute:nth-child(even),.custom-fields-body .custom-attribute:nth-child(odd){padding:0}.custom-fields-body .custom-field-single{height:100%}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff8282}.external-reference{font-size:.9rem;color:#767676;margin-top:.5rem}.external-reference a{border-left:1px solid #767676;padding:0 .2rem;transition:color .3s linear}.external-reference a:hover{color:#5b8200}.external-reference a:first-child{border:0}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox .close{width:2rem;height:2rem;cursor:pointer;fill:#555;position:absolute;right:3rem;top:3rem;transition:fill .2s;display:block}.lightbox .close:hover{fill:#ff8282}.lightbox .close svg{width:2rem;height:2rem;pointer-events:none}.lightbox.open{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1;transition:opacity .3s ease}.lightbox.close{opacity:0;transition:opacity .3s ease}.lightbox .lb-icon{margin:1rem auto;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single:first-child,.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox .lb-icon svg{width:6rem;height:6rem;display:block;fill:#e4e3e3}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox h2{font-size:2rem}.lightbox-generic-form form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form fieldset{position:relative}.lightbox-generic-form textarea{min-height:4.5rem;resize:vertical}.lightbox-generic-form .existing-or-new-selector{display:-ms-flexbox;display:flex;margin-bottom:2rem}.lightbox-generic-form .existing-or-new-selector input{display:none}.lightbox-generic-form .existing-or-new-selector input:checked+label{background:#9dce0a;color:#fff;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input:checked+label:hover{background:#9dce0a}.lightbox-generic-form .existing-or-new-selector input+label{background:rgba(228,227,227,.7);cursor:pointer;display:block;font-size:1em;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input+label:hover{background:rgba(157,206,10,.3);transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single{-ms-flex:1;flex:1}.lightbox-generic-form .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#9dce0a;border:1px solid #5b8200}.lightbox-generic-form .settings .iocaine svg,.lightbox-generic-form .settings .requirement svg{width:.75rem;height:.75rem}.lightbox-generic-form .settings .blocked:hover{background:#ff8282;border:1px solid red}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#5b8200;border:1px solid #5b8200;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:red;border:1px solid red;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-form .attachments{margin-bottom:0}.lightbox-search fieldset,.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-generic-form .attachment-body{max-height:7.5rem;overflow-y:auto}.lightbox-generic-form .attachment-delete{right:.5rem}.lightbox-generic-form .attachment-delete svg{fill:#767676;height:1.25rem;width:1.25rem}.lightbox-generic-form .attachment-delete:hover svg{fill:red}.lightbox-sprint-add-edit .delete-sprint .icon,.lightbox-sprint-add-edit .delete-sprint:hover .icon{fill:currentColor}.lightbox-generic-bulk form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-search form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-sprint-add-edit form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem;color:#555;opacity:1;position:absolute;right:1rem;top:.7rem;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-sprint-add-edit .delete-sprint{font-size:.9rem;color:#555;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-ask-choice .subtitle,.lightbox-generic-ask .subtitle{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint:hover{color:red;transition:color .3s linear}.lightbox-generic-ask form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .subtitle{white-space:pre-line}.lightbox-generic-ask .options{display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-ask-choice .warning{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-delete-account p{text-align:center}.lightbox-delete-account form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .newsletter input+label{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-delete-project .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem}.lightbox-delete-account .options{display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-ms-flexbox;display:flex}.lightbox-delete-project .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:100%;max-width:100%;width:100%}.backlog-sprints-menu::after,.lightbox-create-edit .pop-status:after,.lightbox-create-edit .pop-users:after,.main-nav a:hover .helper::after,.related-tasks-body .pop-status:after,.ticket-header .pop-status:after{content:'';transform:rotate(45deg)}.lightbox-generic-loading .progress-bar-wrapper{background:#d7d6d6;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#9dce0a;height:24px;position:absolute;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#d7d6d6;bottom:35px;color:#555;padding:.3rem;position:absolute;transition:left .1s linear}.lightbox-import-error .description a,.lightbox-select-user .add-comment a{color:#5b8200}.lightbox-create-issue form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row fieldset{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block textarea,.lightbox-create-issue textarea{margin-bottom:1rem;max-height:12rem;min-height:8rem}.lightbox-select-user .add-comment textarea,.lightbox-select-user .submit-button{margin-top:1rem}.lightbox-block .form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single.selected,.lightbox-select-user .user-list-single:hover{background:rgba(216,248,121,.3);cursor:pointer}.lightbox-select-user .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.lightbox-select-user .more-watchers{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;padding:.5rem;text-align:center}.lightbox-select-user .add-comment{position:relative;text-align:center}.lightbox-select-user .add-comment .icon-close{cursor:pointer;fill:#555;position:absolute;right:0;top:0;transition:fill .2s}.lightbox-select-user .add-comment .icon-close:hover{fill:#ff8282}.lightbox-select-user .add-comment .icon-close svg{width:2rem;height:2rem}.lb-create-edit-userstory .points-per-role{-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0}.lb-create-edit-userstory .ticket-role-points{margin:.1rem;min-width:20%}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(4n+4){margin-right:0}.lb-create-edit-userstory .ticket-role-points:last-child{-ms-flex-preferred-size:100%;flex-basis:100%;margin:.1rem 0;min-width:100%}.lightbox-import-error{text-align:center}.lightbox-import-error .content{width:500px}.lightbox-import-error h2{margin-top:1rem}.lightbox-import-error img{height:5rem}.lightbox-leave-project-warning{text-align:center}.lightbox-leave-project-warning .icon{fill:#767676;height:3rem;margin-bottom:1rem;width:3rem}.lightbox-set-due-date .delete-due-date .icon,.lightbox-set-due-date .delete-due-date:hover .icon{fill:currentColor}.lightbox-leave-project-warning .content,.lightbox-request-ownership .content{width:500px}.lightbox-request-ownership{text-align:center}.lightbox-set-due-date{z-index:9999}.lightbox-set-due-date form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-set-due-date .date{margin:2rem 0 1rem}.lightbox-set-due-date .reason textarea{margin-top:.5rem}.lightbox-set-due-date .due-date-suggestions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:1rem 0 .5rem}.lightbox-set-due-date .suggestion{background:rgba(184,184,184,.2);color:#B8B8B8;-ms-flex-pack:start;justify-content:flex-start;margin:0 .5rem .5rem;min-height:2rem;padding:.5rem .75rem;position:relative}.lightbox-set-due-date .suggestion:first-child{margin-left:0}.lightbox-set-due-date .suggestion:nth-child(4n+4){margin-right:0}.lightbox-set-due-date .suggestion.clickable.active,.lightbox-set-due-date .suggestion.clickable:hover{background:rgba(157,206,10,.9);color:#fff}.lightbox-set-due-date .delete-due-date{font-size:.9rem;color:#555;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-set-due-date .delete-due-date:hover{color:red;transition:color .3s linear}.lightbox-create-edit{z-index:9998}.lightbox-create-edit form{-ms-flex-preferred-size:700px;flex-basis:700px;max-width:700px;width:700px}.lightbox-create-edit .form-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:700px;flex-basis:700px;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;margin-bottom:30px}.lightbox-create-edit .form-wrapper main{-ms-flex-positive:1;flex-grow:1;max-width:480px}.lightbox-create-edit .form-wrapper .sidebar{border-left:2px solid #e4e3e3;margin-left:15px;padding-left:15px;width:220px}.lightbox-create-edit .existing-item-wrapper{margin-bottom:30px}.lightbox-create-edit .existing-item-wrapper select .strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-create-edit .add-existing-button{width:100%}.lightbox-create-edit .status-button{display:-ms-flexbox;display:flex;position:relative}.lightbox-create-edit .status-dropdown{-ms-flex-line-pack:center;align-content:center;color:#fff;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;height:30px;padding:.25rem .5rem}.lightbox-create-edit .status-dropdown .status-text{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.lightbox-create-edit .status-dropdown svg{fill:#fff;height:.9rem;width:.9rem}.lightbox-create-edit .popover a{color:#fff;display:block;padding:.5rem 1rem;text-align:left}.lightbox-create-edit .popover a.active,.lightbox-create-edit .popover a:hover{color:#9dce0a}.lightbox-create-edit .ticket-assigned-to{border:0;padding:0}.lightbox-create-edit .ticket-assigned-to.single-assign{margin:0}.lightbox-create-edit .ticket-assigned-to.multiple-assign{-ms-flex-align:start;align-items:start;-ms-flex-direction:column;flex-direction:column;margin:0}.lightbox-create-edit .ticket-assigned-to .assigned-to-actions{display:block}.lightbox-create-edit .ticket-assigned-to .remove-user{top:1.2rem}.lightbox-create-edit .user-list{display:-ms-flexbox;display:flex;width:100%}.lightbox-create-edit .user-list .user-list-item{margin-right:.5rem;width:44.75px}.lightbox-create-edit .user-list .user-list-item img{height:44.75px;width:44.75px}.lightbox-create-edit .user-list .user-list-item:last-child{margin-right:0}.lightbox-create-edit .user-list .user-list-item.counter{background:#B8B8B8;color:#767676;font-weight:400;height:44.75px;line-height:44.75px;text-align:center}.wysiwyg b,.wysiwyg dl dt,tg-wysiwyg .mention{font-weight:700}.lightbox-create-edit .tg-add-assigned{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:.25rem 0 .75rem}.lightbox-create-edit .tg-add-assigned .add-assigned{fill:#555;opacity:1;right:.5rem;top:2rem}.lightbox-create-edit .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:red;transition:fill .2s}.lightbox-create-edit .tg-add-assigned span{font-size:.9rem;color:#555;margin:.2rem .5rem}.lightbox-create-edit .pop-status,.lightbox-create-edit .pop-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;text-align:"center";background:#050505;font-size:.9rem;z-index:99}.lightbox-create-edit .users-dropdown{position:relative}.lightbox-create-edit .pop-status{color:#fff;display:none;padding:10px;position:absolute;top:28px;width:203px}.lightbox-create-edit .pop-status a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-status a:last-child{border:0}.lightbox-create-edit .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.lightbox-create-edit .pop-status a:hover.point{color:#fff}.lightbox-create-edit .pop-status:after{background:#050505;height:15px;position:absolute;width:0}.lightbox-create-edit .pop-users{color:#fff;display:none;left:0;padding:10px;position:absolute;top:60px;width:203px}.lightbox-create-edit .pop-users a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-users a:last-child{border:0}.lightbox-create-edit .pop-users a:hover{color:#9dce0a;transition:color .3s linear}.lightbox-create-edit .pop-users a:hover.point{color:#fff}.lightbox-create-edit .pop-users:after{background:#050505;height:15px;left:67.67px;position:absolute;top:-7px;width:16px}.lightbox-create-edit .pop-users.multiple{top:84px}.lightbox-create-edit .pop-users.multiple::after{left:30px}.lightbox-create-edit .pop-users ul{margin-bottom:.5rem}.lightbox-create-edit .pop-users li{border-bottom:1px solid #767676}.lightbox-create-edit .pop-users li:last-child{border:0}.lightbox-create-edit .pop-users .user-list-single{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;padding:.5rem 0}.lightbox-create-edit .pop-users .user-list-single.selected{color:#5b8200}.lightbox-create-edit .pop-users .user-list-avatar{height:32px;margin-right:.5rem;width:32px}.lightbox-create-edit .pop-users .user-list-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-positive:1;flex-grow:1;position:relative}.lightbox-create-edit .pop-users .remove svg{fill:#e4e3e3;height:.8rem;width:.8rem}.lightbox-create-edit .pop-users .show-more{border-top:1px solid #767676;padding-top:.5rem;text-align:center}.lightbox-create-edit .ticket-data-container{margin:0;padding:0 0 .1rem}.lightbox-create-edit .ticket-data-container .ticket-status .priority-data,.lightbox-create-edit .ticket-estimation .points-per-role{margin:0}.lightbox-create-edit .ticket-detail-settings{height:52px;-ms-flex-pack:left;justify-content:left;margin:1rem 0 0}.lightbox-create-edit .ticket-detail-settings label{border:0;padding:12px 13px;width:auto}.lightbox-create-edit .ticket-detail-settings .item-block,.lightbox-create-edit .ticket-detail-settings .item-unblock{display:block;margin:0}.lightbox-create-edit .blocked-note{margin-top:.5rem}.ticket-detail-settings .lightbox-assign-sprint-to-issue .lightbox-assign-related-sprint{width:700px}.ticket-detail-settings .lightbox-assign-sprint-to-issue svg{fill:initial;max-height:initial;max-width:initial}.ticket-detail-settings img,.ticket-detail-settings svg{max-height:1.25rem;max-width:1.25rem;width:100%}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label{background:0 0;display:inline-block;margin-bottom:.5rem;margin-right:0;padding:0}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label+input{display:initial}.ticket-detail-settings .lightbox-assign-sprint-to-issue button{width:100%}.lightbox-relate-to-epic .lightbox-create-related-epic-wrapper{max-width:600px;width:90%}.lightbox-relate-to-epic .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-relate-to-epic .related-with-selector input{display:none}.lightbox-relate-to-epic .related-with-selector input:checked+label{background:#9dce0a;color:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input:checked+label:hover{background:#9dce0a}.lightbox-relate-to-epic .related-with-selector input+label{background:rgba(228,227,227,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input+label:hover{background:rgba(157,206,10,.3);transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-relate-to-epic fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-relate-to-epic .new-epic-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-relate-to-epic .existing-epic-form,.lightbox-relate-to-epic .new-epic-form{margin-bottom:1rem}.lightbox-relate-to-epic .no-epics-found{padding:1rem 0 0}.lightbox-relate-to-epic .new-epic-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-relate-to-epic .new-epic-options input{display:none}.lightbox-relate-to-epic .new-epic-options input:checked+label{background:#9dce0a;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label{background:#f5f5f5;color:#444;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label:hover{background:#9dce0a;color:#fff;fill:#fff}.lightbox-relate-to-epic button{width:100%}tg-project-menu{background-position:0 -300px;display:inline-block;min-height:calc(100vh - 40px);min-width:50px;padding:1rem 0;position:relative;text-transform:uppercase;z-index:99}.main-nav a,.main-nav span{display:block}tg-project-menu .menu.menu-fixed{position:fixed;top:1rem}.main-nav,.main-nav a,.main-nav li{position:relative}.main-nav{padding:0;text-align:center}.main-nav a{padding:1rem .7rem}.main-nav a:hover{background:rgba(0,0,0,.2);transition:color .3s linear}.main-nav a:hover svg{fill:#9dce0a;transition:fill .3s linear}.backlog-sprints-menu,.main-nav a:hover .helper{animation:slideLeft .2s ease-in-out both;padding:.4rem 1rem;transition:all .2s;position:absolute;white-space:nowrap}.main-nav a:hover .helper{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:calc(50% - 1rem);z-index:99}.main-nav a:hover .helper::after{background:#050505;height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);width:12px;z-index:98}.main-nav svg{height:1.7rem;width:1.7rem}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .item{font-size:1.2rem}.main-nav .active{background:rgba(255,255,255,.95);color:#718377}.main-nav .active svg{fill:#718377;opacity:1;stroke:#718377}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.backlog-sprints-menu{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:1rem;z-index:99}.backlog-sprints-menu a{color:#fff;padding:.6rem .8rem;text-align:left;text-transform:none}.backlog-sprints-menu a:nth-child(2){padding:1rem .8rem .6rem}.backlog-sprints-menu a:last-child{padding:.6rem .8rem .4rem}.backlog-sprints-menu a:hover{background:0 0}.backlog-sprints-menu::after{background:#050505;height:12px;left:calc(-12px/2);position:absolute;top:calc(1rem - 12px/2);width:12px;z-index:98}.related-tasks,.related-tasks-body .status{position:relative}.related-tasks{margin-bottom:2rem}.related-tasks-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-tasks-header .related-tasks-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-tasks-header .add-button{background:#444;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-tasks-header .add-button.is-active,.related-tasks-header .add-button:hover{background:#9dce0a}.related-tasks-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-tasks-body{width:100%}.related-tasks-body .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}.related-tasks-body .row:hover .task-settings{opacity:1;transition:all .2s ease-in}.related-tasks-body .row .task-name{-ms-flex:1;flex:1}.related-tasks-body .row .task-settings{-ms-flex-negative:0;flex-shrink:0;width:60px}.related-tasks-body .row .status{-ms-flex-negative:0;flex-shrink:0;width:125px}.related-tasks-body .row .assigned-to{cursor:pointer;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .single-related-task:hover{background:rgba(157,206,10,.05)}.related-tasks-body .single-related-task:hover .icon-drag{opacity:1}.related-tasks-body .single-related-task .task-reorder{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .single-related-task .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#e4e3e3;opacity:0;transition:opacity .1s}.issues-table .title div,.issues-table .votes,.related-tasks-body .task-assignedto.editable,.related-tasks-body .task-settings a:hover,.ticket-detail-settings .assign-issue-button.editable,.ticket-detail-settings .button-delete.editable,.ticket-detail-settings .item-block.editable,.ticket-detail-settings .item-unblock.editable,.ticket-detail-settings .promote-button.editable,.ticket-detail-settings label.editable{cursor:pointer}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .iocaine{background:rgba(157,206,10,.1);border-left:10px solid #9dce0a}.related-tasks-body .task-name{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .task-name span{margin-right:.25rem}.related-tasks-body .task-name input{font-size:1rem;margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .pop-status,.ticket-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;z-index:99;text-align:"center"}.related-tasks-body .task-name.loading span{animation:loading .5s linear,spin 1s linear infinite}.related-tasks-body .status .not-clickable:hover{color:#444}.related-tasks-body .status .popover{left:0;top:1rem}.related-tasks-body .status .popover a{display:block}.related-tasks-body .status .icon{width:.8rem;height:.8rem;fill:currentColor;margin-left:.2rem}.related-tasks-body .closed,.related-tasks-body .closed:hover{border-left:10px solid #e4e3e3;color:#e4e3e3}.related-tasks-body .closed a,.related-tasks-body .closed svg,.related-tasks-body .closed:hover a,.related-tasks-body .closed:hover svg{fill:#e4e3e3}.related-tasks-body .closed .task-name a,.related-tasks-body .closed:hover .task-name a{color:#e4e3e3;text-decoration:line-through}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .pop-status{font-size:.9rem;background:#050505;color:#fff;display:none;left:40%;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px}.related-tasks-body .pop-status a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#050505;height:15px;position:absolute;width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:rgba(255,130,130,.2);border-left:10px solid #ff8282}.related-tasks-body .task-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;opacity:0}.related-tasks-body .task-settings svg{width:1.1rem;height:1.1rem;fill:#767676;margin-right:.5rem;transition:fill .2s ease-in}.related-tasks-body .task-settings svg:hover{fill:#555}.related-tasks-body .delete-task:hover .icon-edit,.related-tasks-body .edit-task:hover .icon-edit,.related-tasks-body .save-task:hover .icon-edit{fill:#444}.related-tasks-body .delete-task:hover .icon-save,.related-tasks-body .edit-task:hover .icon-save,.related-tasks-body .save-task:hover .icon-save{fill:#5b8200}.related-tasks-body .delete-task:hover .icon-trash,.related-tasks-body .edit-task:hover .icon-trash,.related-tasks-body .save-task:hover .icon-trash{fill:#ff8282}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{width:.8rem;height:.8rem;fill:#767676;opacity:0;position:absolute;right:.5rem;top:.5rem;transition:opacity .3s linear}.related-tasks-body .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:1.5rem 0 2rem;position:relative}.ticket-header .ticket-title{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;text-transform:uppercase;vertical-align:sub}.ticket-header .detail-status{font-size:.9rem;display:-ms-flexbox;display:flex;margin-left:.25rem;position:relative}.ticket-header .detail-status .icon-arrow-down{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem}.ticket-header .detail-status-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start}.ticket-header .detail-status-inner>span{color:#fff;padding:.15rem .25rem;text-transform:uppercase}.ticket-header .pop-status{font-size:.9rem;background:#050505;color:#fff;display:none;left:0;margin:0;position:absolute;top:1.25rem;width:150px;padding:0;text-transform:none}.ticket-data-container,.ticket-header .pop-status a{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.ticket-header .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:.5rem 1rem;text-align:left}.ticket-header .pop-status a:last-child{border:0}.ticket-header .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.ticket-header .pop-status a:hover.point{color:#fff}.ticket-header .pop-status:after{background:#050505;height:15px;position:absolute;width:0}.ticket-header .pop-status a:hover{background:rgba(157,206,10,.2)}.ticket-data-container{margin-bottom:1rem}.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .type-data .pop-type{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;left:30px;top:30px;text-align:"left";font-size:.9rem;z-index:99;list-style-type:none}.ticket-data-container .icon{width:.7rem;height:.7rem;color:currentColor;margin-left:.25rem}.ticket-status .priority-data .pop-priority:after,.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;transform:rotate(45deg)}.ticket-status:last-child{margin:0}.ticket-status .level{display:inline-block;margin-right:.5rem;vertical-align:top}.ticket-status .level-name{color:#b2afaf;float:right;text-transform:lowercase}.ticket-status .clickable:hover{background:#cbc9c9;transition:background .2s ease-in}.ticket-status .type-data{background:#d7d6d6;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .type-data .pop-type{background:#050505;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .type-data .pop-type a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#9dce0a;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#050505;position:absolute;width:0}.ticket-status .severity-data{background:#d7d6d6;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .severity-data .pop-severity{background:#050505;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .severity-data .pop-severity a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#9dce0a;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#050505;position:absolute;width:0}.ticket-status .priority-data{background:#d7d6d6;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .priority-data .pop-priority{background:#050505;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-watch .ticket-watch-button,.ticket-watch svg{margin-right:.25rem}.ticket-status .priority-data .pop-priority a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#9dce0a;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{background:#050505;position:absolute;width:0}.ticket-watch-buttons{margin-bottom:1rem}.ticket-watch .ticket-watch-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.introjs-tooltip p,.single-project .description,.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-watch .ticket-watch-inner{display:-ms-flexbox;display:flex}.ticket-watch svg{position:relative;top:2px}.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-size:.9rem;background:#767676;color:#fff;-ms-flex:1;flex:1;padding:.25rem;text-align:center;text-transform:uppercase;transition:background .25s}.ticket-watch .add-watcher svg,.ticket-watch .ticket-watch-button svg{fill:#fff}.ticket-watch .add-watcher:hover,.ticket-watch .ticket-watch-button:hover{background:#9dce0a}.ticket-watch .add-watcher.is-hover,.ticket-watch .ticket-watch-button.is-hover{background:red;color:#e4e3e3;transition:background .3s}.ticket-watch .add-watcher.is-hover svg,.ticket-watch .ticket-watch-button.is-hover svg{fill:#ff8282}.ticket-watch .add-watcher.active,.ticket-watch .ticket-watch-button.active{background:#9dce0a}.ticket-watch .add-watcher.active:hover,.ticket-watch .ticket-watch-button.active:hover{background:#ff8282}.ticket-watch .add-watcher.active svg,.ticket-watch .ticket-watch-button.active svg{fill:#fff}.ticket-detail-settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:2rem}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .button-delete,.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock,.ticket-detail-settings .promote-button,.ticket-detail-settings label{background:#767676;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .assign-issue-button+input,.ticket-detail-settings .button-delete+input,.ticket-detail-settings .item-block+input,.ticket-detail-settings .item-unblock+input,.ticket-detail-settings .promote-button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .assign-issue-button:hover,.ticket-detail-settings .button-delete:hover,.ticket-detail-settings .item-block:hover,.ticket-detail-settings .item-unblock:hover,.ticket-detail-settings .promote-button:hover,.ticket-detail-settings label:hover{background:#555}.ticket-detail-settings .assign-issue-button.button-set,.ticket-detail-settings .assign-issue-button.text-button.button-set:hover,.ticket-detail-settings .button-delete.button-set,.ticket-detail-settings .button-delete.text-button.button-set:hover,.ticket-detail-settings .item-block.button-set,.ticket-detail-settings .item-block.text-button.button-set:hover,.ticket-detail-settings .item-unblock.button-set,.ticket-detail-settings .item-unblock.text-button.button-set:hover,.ticket-detail-settings .promote-button.button-set,.ticket-detail-settings .promote-button.text-button.button-set:hover,.ticket-detail-settings label.button-set,.ticket-detail-settings label.text-button.button-set:hover{background:#9dce0a;border-color:#9dce0a}.ticket-detail-settings .assign-issue-button:hover{background:#9dce0a}.ticket-detail-settings .assign-issue-button.button-set:hover,.ticket-detail-settings .item-unblock{background:#ff8282}.ticket-detail-settings .assign-issue-button.is-active{display:inline-block}.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock{display:none}.ticket-detail-settings .item-block.is-active,.ticket-detail-settings .item-unblock.is-active{display:inline-block}.ticket-detail-settings .item-unblock:hover{background:red}.ticket-detail-settings .button-delete{background:#ff8282}.ticket-detail-settings .button-delete:hover{background:red}.ticket-detail-settings svg{fill:#fff;height:100%;stroke:#fff}.ticket-detail-settings .icon-private{margin:0}.ticket-detail-settings a{display:block}.epic-header-container{display:-ms-flexbox;display:flex}.epic-header-container .color-selector{margin-right:.5rem}.epic-header-container tg-detail-header{-ms-flex:1;flex:1;width:100%}.introjs-overlay{background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(228,227,227,.2) 100%);background-color:#e4e3e3}.introjs-helperLayer{border:1px solid rgba(157,206,10,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(68,68,68,.2)}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-bullets ul li a.active{background:#9dce0a}.introjs-button{background-color:#5b8200;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#9dce0a;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .single-project-intro{display:-ms-flexbox;display:flex;margin-bottom:2rem}.single-project .project-logo{margin-right:1rem;width:6rem}.single-project .project-logo img{width:100%}.single-project .single-project-title-wrapper{-ms-flex:1;flex:1}.single-project .intro-options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem}.single-project .intro-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.single-project .intro-title .icon-private{fill:#767676;height:24px;margin-left:.25rem;margin-top:1rem;width:24px}.single-project h1{color:#5b8200;display:inline-block;line-height:1.2;margin-bottom:0;vertical-align:middle}.single-project .private{width:1.1rem;height:1.1rem}.single-project .track-buttons-container{display:-ms-flexbox;display:flex}.single-project .like-button{margin-right:.75rem}.single-project .track-container .list-itemtype-track{font-size:.9rem;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#5b8200}.single-project .track-container .list-itemtype-track-likers.active .icon,.single-project .track-container .list-itemtype-track-watchers.active .icon{fill:currentcolor}.single-project .track-container .icon{fill:#767676}.single-project .description{font-size:1rem;margin:0}.single-project .project-data{display:-ms-flexbox;display:flex}.single-project .title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-ms-flex:1;flex:1;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .looking-for-people img{width:100%}.single-project .looking-for-people h3{font-size:.9rem}.single-project .looking-for-people .is-empty{margin-bottom:.5rem}.single-project .looking-for-people p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.single-project .looking-for-people .contact-team{margin-bottom:1rem}.single-project .involved-data{-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-team{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-team li{-ms-flex-preferred-size:24%;flex-basis:24%;margin-right:.14rem;position:relative}.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-team a{display:block}.single-project .involved-team img{border-radius:.2rem;width:100%}.single-project .involved-team .icon-badge{width:1.2rem;height:1.2rem;background:rgba(0,0,0,.5);bottom:5%;fill:#9dce0a;padding:.1rem;position:absolute;right:5%;stroke:#9dce0a}.issues-options{-ms-flex-align:center;align-items:center;background-color:#e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table{display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#f0ffcf;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .row.is-blocked{background:#ffe8e8}.issues-table .row.is-blocked .blocked-text{color:red;margin-right:.5rem}.issues-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676}.issues-table .title:hover{background:0 0}.issues-table .title .votes{color:#555}.issues-table .table-main{font-size:.9rem;border-bottom:1px solid #dad9d9}.issues-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-ms-flex-preferred-size:85px;flex-basis:85px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:85px}.issues-table .votes{color:#555;-ms-flex-preferred-size:75px;flex-basis:75px;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes:hover{color:#9dce0a;transition:all .2s linear}.issues-table .votes:hover svg{fill:#9dce0a;transition:all .2s linear}.issues-table .votes.inactive{color:#767676}.issues-table .icon-upvote{width:.75rem;height:.75rem;fill:#555;margin-right:.25rem;vertical-align:middle}.issues-table .icon-arrow-down,.issues-table .icon-arrow-up{width:.7rem;height:.7rem;fill:#767676;margin-left:.25rem;vertical-align:middle}.issues-table .is-voted{color:#9dce0a;transition:all .2s linear}.issues-table .is-voted svg{fill:#9dce0a;transition:all .2s linear}.issues-table .is-voted:hover{color:#ff8282}.issues-table .is-voted:hover svg{fill:#ff8282;transform:rotate(180deg)}.issues-table .pop-status:after,.table-team .popover:after{transform:rotate(45deg);content:''}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .issue-field,.issues-table .modified-field{-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field .icon,.issues-table .issue-field .icon,.issues-table .modified-field .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem;vertical-align:middle}.issues-table .assigned-field{-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{width:.75rem;height:.75rem;opacity:0;position:absolute;right:0;top:.75rem;transition:opacity .3s linear}.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#050505;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99;text-align:"center"}.kanban-table-body .taskboard-column .kanban-column-intro,.search-result-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.issues-table .pop-status a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#050505;height:15px;position:absolute;width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1280px){.issues-table .level-field,.issues-table .modified-field{display:none}}.issues-table .issue-status{display:inline-block}.kanban-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table.zoom-0 .task-colum-name,.kanban-table.zoom-0 .taskboard-column{max-width:148px}.kanban-table.zoom-0 .task-colum-name span{padding-right:1rem}.kanban-table .vfold tg-card{display:none}.kanban-table .vfold.task-colum-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold.task-colum-name .option:not(.hunfold),.kanban-table .vfold.task-colum-name .title,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.taskboard-column{-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;min-height:2.4rem;position:relative}.kanban-table-header .kanban-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute;width:100%}.kanban-table-header .options{display:-ms-flexbox;display:flex}.kanban-table-header .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;color:#555;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:296px;padding:.5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;width:100%}.kanban-table-header .task-colum-name .title .counter{font-size:.75rem;line-height:1.6;margin:0 .5rem}.kanban-table-header .task-colum-name .title .name{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.kanban-table-header .task-colum-name .option{margin-right:.3rem}.kanban-table-header .task-colum-name .icon{fill:#767676;height:1rem;transition:color .2s linear;width:1rem}.kanban-table-header .task-colum-name .icon:hover{fill:#5b8200}.kanban-table-body{font-size:1rem;display:-ms-flexbox;display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-body .taskboard-column{-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:296px;overflow-y:auto;widows:296px;width:296px}.kanban-table-body .taskboard-column:last-child{margin-right:0}.kanban-table-body .taskboard-column .kanban-column-intro{font-size:.9rem;color:#767676;margin:1rem 2rem}.kanban-table-body .taskboard-column .kanban-column-intro.active{color:#050505}.kanban-table-body .taskboard-column .kanban-wip-limit{background:red;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-body .kanban-task-selected.card:not(.gu-transit-multi){box-shadow:0 0 0 1px #9dce0a,2px 2px 4px #cbc9c9}.kanban-table-inner{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.card-transit-multi{background:#dfdede;border:1px dashed #d0cece;display:none;opacity:1;padding:1rem}.search-filter,.search-result-table,.table-team .hero .row{border-top:1px solid #e4e3e3}.card-transit-multi .fake-img,.card-transit-multi .fake-text{background:#d0cece}.card-transit-multi .fake-us{display:-ms-flexbox;display:flex;margin-bottom:1rem}.card-transit-multi .fake-us:last-child{margin-bottom:0}.card-transit-multi .column{padding-left:.5rem;width:100%}.card-transit-multi .fake-img{-ms-flex-preferred-size:48px;flex-basis:48px;-ms-flex-negative:0;flex-shrink:0;height:48px;width:48px}.card-transit-multi .fake-text{height:1rem;margin-bottom:1rem;width:80%}.card-transit-multi .fake-text:last-child{margin-bottom:0;width:40%}.card.gu-transit-multi .card-transit-multi{display:block}.card.gu-transit-multi .card-inner{display:none}.search-filter{display:-ms-flexbox;display:flex;margin-bottom:0;z-index:9}.search-filter a{background:#fff;color:#767676;display:inline-block;margin-right:1rem;padding:1rem 1.25rem}.search-filter .name,.search-filter a:hover .name{padding-left:5px}.search-filter a:hover{transition:color .3s linear}.search-filter a:hover .icon{fill:currentColor}.search-filter a.active{border-left:1px solid #e4e3e3;border-right:1px solid #e4e3e3;color:#444;position:relative;top:1px}.search-filter a.active .icon{fill:#9dce0a}.search-filter .icon{fill:currentColor;margin-right:.4rem}.search-in input{background:#444;color:#fff}.search-in input::-webkit-input-placeholder{color:#767676}.search-in input::-moz-placeholder{color:#767676}.search-in input:-moz-placeholder{color:#767676}.search-in input:-ms-input-placeholder{color:#767676}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{fill:#767676}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row .ref{margin-right:.5rem}.search-result-table .row .user-stories{overflow:hidden;padding-right:1rem;width:100%}.search-result-table .row .points,.search-result-table .row .sprint,.search-result-table .row .status{-ms-flex:0 0 150px;flex:0 0 150px;-ms-flex-positive:0;flex-grow:0;max-width:150px;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;padding:0 1rem}.search-result-table .row-selected{background:#e9ffb5;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.single-filter .name img,.tag img,.wiki-nav .add-button{vertical-align:middle}.search-result-table .user-story-name span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon{font-size:1rem;color:#767676}.search-result-table .user-story-name .icon:hover{color:#444;transition:color .3s linear}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #e4e3e3}.search-result-table .points,.search-result-table .sprint,.search-result-table .status{position:relative}.search-result-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters li{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676;text-transform:uppercase}.table-team .attribute,.table-team .attribute .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.team-filters li:last-child{border-bottom:0}.team-filters li .icon{fill:#050505;opacity:0;transition:opacity .3s linear}.team-filters a{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.team-filters a.active,.team-filters a:hover{color:#5b8200;transition:color .3s linear}.team-filters a.active .icon,.team-filters a:hover .icon{fill:currentColor;opacity:1}.team-filters .active{opacity:1;transition:opacity .3s linear}.table-team .row{padding:.5rem}.table-team .username{-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:6;flex:6;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{width:1.75rem;height:1.75rem;fill:#555}.table-team .attribute .points{font-size:1.6rem;color:#444}.table-team .attribute .top{fill:#9dce0a;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{font-size:.9rem;color:#ff8282}.table-team .leave-project .icon{width:.8rem;height:.8rem;fill:currentColor;margin-right:.2rem}.table-team .leave-project:hover{color:red}.table-team .leave-project:hover .icon{color:currentColor;transition:fill .3s linear}.table-team .team-header{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:0}.table-team .hero{width:100%}.table-team .hero .row{border-bottom:1px solid #e4e3e3;margin:1rem 0;padding:1.5rem 1rem}.table-team .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.table-team .avatar img{-ms-flex-preferred-size:66px;flex-basis:66px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:66px}.table-team .avatar .avatar-data{margin-left:1rem}.table-team .avatar .avatar-data span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.table-team .avatar .position{color:#767676}.table-team .popover{font-size:.9rem;background:#050505;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99;text-align:"center"}.table-team .popover a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#9dce0a;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#050505;bottom:-5px;height:15px;left:50%;position:absolute;width:15px}.table-team .icon-badge{fill:#9dce0a;position:relative;stroke:#9dce0a;top:.15rem}.policy-table .policy-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #767676}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#5b8200;transition:background .3s linear}.policy-table label{background:#767676;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#9dce0a;cursor:pointer;transition:background .3s linear}.project-settings-table .project-settings-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.project-settings-table .project-settings-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #767676}.project-settings-table .project-settings-table-homepage,.project-settings-table .project-settings-table-project{padding:1rem}.project-settings-table .project-settings-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-settings-table .project-settings-table-homepage{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile{max-width:780px}.user-profile form{display:-ms-flexbox;display:flex}.user-profile fieldset{margin-bottom:1rem}.user-profile label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.user-profile .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.user-profile .project-details-image .image,.user-profile .submit-button{width:100%}.user-profile .change-image{display:block}.user-profile .image-container{position:relative;margin-bottom:.5rem}.user-profile .loading-overlay{display:none}.user-profile .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;border:0;transform-origin:center center}.user-profile .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.user-profile .use-default-image:hover{color:red}.user-profile .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.user-profile form{display:block}}.user-profile .actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:.5rem}.user-profile .delete-account,.user-profile .download-profile{font-size:.9rem;display:block;-ms-flex:1;flex:1;margin-top:.5rem}.user-profile .delete-account{text-align:right}.wiki-nav{padding:0;width:240px}.wiki-nav .title{font-size:1.6rem;padding:2rem 1rem 0 2rem}.wiki-nav .add-button{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:1rem 1rem 1rem 2rem;text-transform:uppercase}.wiki-nav .add-button:hover svg{background:#9dce0a}.wiki-nav .add-button svg{width:1.25rem;height:1.25rem;background:#767676;border-radius:2px;fill:#fff;margin-right:.5rem;padding:.25rem;transition:background .2s linear}.wiki-nav .wiki-link-container{margin:0}.wiki-nav .wiki-link-container.wiki-all-links{border-top:1px solid #767676}.wiki-nav input[type=text]{background:#e4e3e3;color:#444;margin:1rem 1rem 1rem 2rem;width:80%}.wiki-nav input[type=text]::-webkit-input-placeholder{color:#767676}.wiki-nav input[type=text]::-moz-placeholder{color:#767676}.wiki-nav input[type=text]:-moz-placeholder{color:#767676}.wiki-nav input[type=text]:-ms-input-placeholder{color:#767676}.wiki-nav .loading{padding:1rem;text-align:center}.wiki-link{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-left:2rem;padding-right:1rem;position:relative}.wiki-link:hover .remove-wiki-page{cursor:pointer;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link:hover .dragger{cursor:move;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link.gu-mirror{border-bottom:0}.wiki-link.fixed-link{font-size:1.2rem;text-transform:uppercase}.wiki-link.is-sortable{cursor:move}.wiki-link .link-title{cursor:pointer;display:block;-ms-flex-positive:1;flex-grow:1;padding:1rem 0}.wiki-link .dragger{fill:#767676;left:-1rem;opacity:0;position:absolute;top:1rem}.wiki-link .dragger svg{width:.7rem;height:.7rem}.wiki-link .remove-wiki-page{opacity:0}.wiki-link .remove-wiki-page:hover .icon{fill:red}.wiki-pages-table{display:-ms-flexbox;display:flex}.wiki-pages-table .row{padding:.5rem}.wiki-pages-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.wiki-pages-table .table-main{font-size:.9rem}.wiki-pages-table .title-field{-ms-flex-preferred-size:180px;flex-basis:180px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.wiki-pages-table .created-field,.wiki-pages-table .modified-field{-ms-flex-preferred-size:10vw;flex-basis:10vw;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.wiki-pages-table .editions-field{-ms-flex-preferred-size:80px;flex-basis:80px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;text-align:center}.wiki-pages-table .creator-field,.wiki-pages-table .last-modifier-field{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:200px;flex-basis:200px}.wiki-pages-table .creator-field .user-avatar,.wiki-pages-table .last-modifier-field .user-avatar{-ms-flex-positive:0;flex-grow:0}.wiki-pages-table .creator-field .user-avatar img,.wiki-pages-table .last-modifier-field .user-avatar img{height:2rem}.wiki-pages-table .creator-field .user-full-name,.wiki-pages-table .last-modifier-field .user-full-name{-ms-flex-positive:1;flex-grow:1;padding:.5rem}.wiki-summary{-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.wiki-summary.summary{background:#f5f5f5;color:#555}.wiki-summary div{display:-ms-flexbox;display:flex;margin-right:1.25rem}.wiki-summary .wiki-user-modification{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary .avatar{margin-right:.5rem;width:2.25rem}.wiki-summary img{height:100%;width:100%}.wiki-summary .username{font-size:1.2rem;white-space:nowrap}.wiki-summary .remove{fill:#767676;margin-left:auto;transition:fill .1s linear}.wiki-summary .remove:hover{cursor:pointer;fill:#ff8282}.wiki-summary .remove svg{width:1.5rem;height:1.5rem}.attachment-gallery{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.attachment-gallery .single-attachment{margin-bottom:.5rem;margin-right:.5rem;max-width:200px}.attachment-gallery .single-attachment:hover .icon-delete{opacity:1}.attachment-gallery .single-attachment .attachment-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.attachment-gallery .attachment-image{display:inline-block}.attachment-gallery img{height:150px;margin-bottom:.2rem;width:200px}.attachment-gallery img:hover{filter:saturate(150%) hue-rotate(60deg);transition:all .3s cubic-bezier(.01,.7,1,1)}.attachment-gallery.deprecated img{opacity:.5}.attachment-gallery.deprecated .attachment-name{color:#767676}.attachment-gallery .attachment-data{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.attachment-gallery .icon-delete{margin-left:auto;opacity:0;transition:opacity .2s ease-in;transition-delay:.1s}.attachment-gallery .icon-delete svg{fill:#ff8282}.attachment-gallery .icon-delete:hover svg{color:red}.attachment-gallery .loading-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:150px;-ms-flex-pack:center;justify-content:center;margin:0 .5rem .5rem 0;width:200px}.attachment-gallery .loading-spinner{margin:0 auto;max-height:3rem;max-width:3rem}.attachment-list .single-attachment{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;position:relative}.attachment-list .single-attachment:hover .settings{opacity:1;transition:opacity .2s ease-in}.attachment-list .single-attachment.deprecated,.attachment-list .single-attachment.deprecated .attachment-name a{color:#767676}.attachment-list .attachment-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding-right:1rem}.attachment-list .attachment-comments,.attachment-list .editable-attachment-comment{-ms-flex:2;flex:2;-ms-flex-preferred-size:50%;flex-basis:50%;margin-right:.5rem}.attachment-list .attachment-comments span,.attachment-list .editable-attachment-comment span{color:#555}.attachment-list .attachment-size{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.attachment-list .attachment-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:10%;flex-basis:10%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:distribute;justify-content:space-around;margin-left:auto}.attachment-list .attachment-settings .settings{opacity:0}.attachments .gu-mirror,.card-owner:hover .card-owner-actions{opacity:1}.attachment-list .attachment-settings .editable-settings{display:block;opacity:1}.attachment-list .attachment-settings svg{fill:#767676;pointer-events:none}.attachment-list .attachment-settings .icon-edit:hover,.attachment-list .attachment-settings .icon-save:hover{fill:#5b8200}.attachment-list .attachment-settings .icon-close:hover,.attachment-list .attachment-settings .icon-trash:hover{fill:red}.attachment-list .attachment-settings .icon-drag{cursor:move}.attachment-list .editable-attachment-deprecated{display:-ms-flexbox;display:flex;padding-left:1rem}.attachment-list .editable-attachment-deprecated span{color:#767676}.attachment-list .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.attachment-list .editable-attachment-deprecated input:checked+span{color:#444}.attachment-list .percentage{background:rgba(91,130,0,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.attachments{margin-bottom:4rem}.attachments .gu-transit{background:#e4e3e3;height:40px}.attachments .gu-transit *{display:none}.attachments .gu-mirror form{background:#e9ffb5;box-shadow:1px 1px 10px rgba(0,0,0,.1);transition:background .2s ease-in}.attachments-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.attachments-header .attachments-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1rem;color:#444;line-height:36px;padding:0 1rem}.attachments-header .options{display:-ms-flexbox;display:flex}.attachments-header label{cursor:pointer;margin-left:.25rem}.attachments-header label.add-attachment-button{background:#555;border:0;display:inline-block;padding:.5rem;transition:background .25s}.attachments-header label.add-attachment-button:hover{background:#9dce0a}.attachments-header label svg{fill:#fff;height:1.2rem;margin-bottom:-.2rem;width:1.2rem}.attachments-header button{background:0 0;margin-right:.2rem}.attachments-header button.is-active svg,.attachments-header button:hover svg{fill:#9dce0a}.attachments-header button svg{fill:#767676;height:1.6rem;width:1.6rem}.attachments-header .size-info{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;padding-left:1rem}.attachments-empty,.single-attachment .attachment-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.more-attachments span,.single-attachment .attachment-size{color:#767676}.attachments-header input{display:none}.attachments-empty{font-size:1.2rem;border:3px dashed #e4e3e3;color:#767676;margin-top:.5rem;padding:1rem;text-align:center}.single-attachment{font-size:.9rem;background:rgba(255,255,255,.9)}.single-attachment .attachment-name{padding-right:1rem}.single-attachment .attachment-name svg{fill:#555;height:.9rem;margin-right:.25rem;width:.9rem}.more-attachments{font-size:.9rem;border-bottom:1px solid #767676;display:block;padding:1rem 0 1rem 1rem}.more-attachments .more-attachments-num{color:#5b8200;margin-left:.5rem}.more-attachments:hover{background:#e9ffb5;transition:background .2s ease-in}.attachment-preview .attachment-preview-container svg{width:3rem;height:3rem;fill:#767676}.attachment-preview .attachment-preview-container svg:hover{fill:#9dce0a;transition:fill .3s linear}.attachment-preview .previous{left:3rem;position:absolute;top:calc(50% - 3rem)}.attachment-preview .next{position:absolute;right:3rem;top:calc(50% - 3rem)}.attachment-preview img{max-height:80vh;max-width:80vw}.assignable-member-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:.25rem 0}.assigned-members-option .assignable-member-single{background:#fff;border-bottom:1px solid #e4e3e3;cursor:pointer}.assignable-member-single:hover{background:rgba(157,206,10,.05)}.assignable-member-single .assignable-member-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.5rem;max-height:3rem;max-width:3rem}.assignable-member-single .assignable-member-name{-ms-flex:1;flex:1}.assigned-to-container{width:600px}.assignable-member-list{margin-top:1rem}.assignable-member-list .assigned-member{-ms-flex-align:center;align-items:center;background:rgba(157,206,10,.05);border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.assignable-member-list .unassign-epic{cursor:pointer;margin-right:1rem}.assignable-member-list .icon{fill:#ff8282;transition:fill .2s}.assignable-member-list .icon:hover{cursor:pointer;fill:red}.belong-to-epic-pill-wrapper{display:inline-block;position:relative}.belong-to-epic-pill-wrapper:hover .belong-to-epic-pill-data{display:block}.belong-to-epics-list{margin-bottom:.5rem}.belong-to-epics-list svg{position:relative;top:.1rem}.belong-to-epics-list.unique,.belong-to-epics-list.unique li{display:inline-block}.belong-to-epics-list.unique li svg{top:.2rem}.belong-to-epic-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;padding-top:.25rem}.belong-to-epic-text-wrapper .remove-epic-relationship{display:inline-block;line-height:.5rem;margin-left:.5rem}.belong-to-epic-text-wrapper:hover .remove-epic-relationship svg{visibility:visible}.belong-to-epic-label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;background:#444;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.detail-title-wrapper,.edit-title-wrapper{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.belong-to-epic-pill{background-color:#f5f5f5;border-radius:50%;display:inline-block;height:.7rem;margin:0 .1rem;position:relative;width:.7rem}.range-slider{-webkit-appearance:none;display:block;margin:7px 0;width:200px}.range-slider:focus{outline:0}.range-slider:focus::-webkit-slider-runnable-track{background:#8da08e}.range-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(68,68,68,.3)}.range-slider:focus::-moz-range-thumb{box-shadow:0 0 0 4px rgba(68,68,68,.3)}.range-slider:focus::-ms-fill-lower{background:#e4e3e3}.range-slider:focus::-ms-fill-upper{background:#e9e8e8}.range-slider::-webkit-slider-runnable-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#e4e3e3;border:0 solid transparent;border-radius:1px}.range-slider::-webkit-slider-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#444;cursor:pointer;box-shadow:0 0 0 2px rgba(68,68,68,.3);transition:box-shadow .2s;-webkit-appearance:none;margin-top:-5.5px}.range-slider::-moz-range-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#e4e3e3;border:0 solid transparent;border-radius:1px}.range-slider::-moz-range-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#444;cursor:pointer;box-shadow:0 0 0 2px rgba(68,68,68,.3);transition:box-shadow .2s}.range-slider::-ms-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:0 0;border-color:transparent;border-width:14px 0;color:transparent}.range-slider::-ms-fill-lower{background:#dfdede;border:0 solid transparent;border-radius:2px}.range-slider::-ms-fill-upper{background:#e4e3e3;border:0 solid transparent;border-radius:2px}.range-slider::-ms-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#444;cursor:pointer;box-shadow:0 0 0 2px rgba(68,68,68,.3);transition:box-shadow .2s}.card{box-shadow:2px 2px 4px #cbc9c9;cursor:move;display:block;margin:0 .6rem .6rem;outline:0;overflow:hidden;transition:box-shadow .2s ease-in}.card .loading-extra.loading{padding:.2rem;text-align:center}.card:hover{box-shadow:3px 3px 6px #cbc9c9}.card-inner{background:#fff;border-radius:.25rem}.card-inner.zoom-0 .card-title,.card-inner.zoom-1 .card-title{-ms-flex:1;flex:1;margin:0;padding:.25rem}.card-inner.zoom-1 .card-owner-info{-ms-flex-align:start;align-items:flex-start}.card-inner.card-blocked{background:#ff8282}.card-inner.card-blocked .card-owner-actions,.card-inner.card-blocked .card-unfold:hover{background:rgba(255,130,130,.9)}.card-inner.card-blocked .card-estimation,.card-inner.card-blocked .card-owner-name,.card-inner.card-blocked .card-title a,.card-inner.card-blocked .statistic{color:#fff}.card-inner.card-blocked .card-task a.blocked-task{color:red}.card-inner.card-blocked .card-owner-actions a:hover,.card-inner.card-blocked .statistic.active,.card-inner.card-blocked.zoom-0 .card-title,.card-inner.card-blocked.zoom-1 .card-title{color:#fff}.card-inner.card-blocked svg{fill:#fff}.card-owner-actions:hover svg,.card-statistics .statistic.active svg{fill:currentColor}.card-tags{display:-ms-flexbox;display:flex}.card-tags .card-tag{display:block;-ms-flex:1;flex:1;height:.5rem}.card-owner{position:relative}.card-owner .card-owner-info{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.card-owner .card-owner-info.multiple .card-owner-avatar img{margin-right:.45rem}.card-owner .card-owner-avatar{line-height:0;position:relative}.card-owner .is-iocaine{filter:hue-rotate(265deg) saturate(3)}.card-owner img{-ms-flex-negative:0;flex-shrink:0;height:2.5rem;margin-right:.5rem;width:2.5rem}.card-owner .card-owner-name{color:#767676}.card-owner-actions{background:rgba(255,255,255,.9);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;left:0;opacity:0;position:absolute;top:0;transition:all .2s;width:100%}.card-owner-actions:hover{color:#9dce0a}.card-owner-actions .card-actions{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:0 0 0 .5rem}.card-owner-actions .card-delete:hover{color:#ff8282}.card-owner-actions .icon{width:1.2rem;height:1.2rem;display:inline-block;margin-right:.25rem;padding:0}.card-owner-actions a{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;padding:.6rem .5rem}.card-title{font-size:1rem;line-height:1.25;margin-bottom:.25rem;padding:1rem 1rem 0}.card-title span{padding-right:.25rem}.card-data{color:#767676;display:-ms-flexbox;display:flex;font-size:14px;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem .5rem}.card-data .card-status-tag{font-size:.75rem;height:.1rem;line-height:.1rem;padding:0 .5em 0 0}.card-data .card-estimation.not-estimated{font-size:.8125rem}.card-statistics{font-size:.9rem;color:#b6b6b6;display:-ms-flexbox;display:flex;margin-left:auto}.card-statistics .statistic{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;margin-left:.5rem}.card-statistics .statistic.active{color:#9dce0a}.card-statistics .statistic.card-iocaine{cursor:help}.card-statistics .statistic.card-votes{margin-left:.2rem}.card-statistics .statistic.card-due-date{margin-left:.1rem}.card-statistics .icon{width:.75rem;height:.75rem;fill:#b6b6b6;margin-right:.2rem}.card-statistics .icon-iocaine{fill:#810061}.card-completion{margin:0 1rem .5rem;position:relative}.card-completion:hover .card-tooltip{display:block}.card-completion .card-completion-bar{background:#e4e3e3;height:.4rem;width:100%}.card-completion .card-completion-percentage{background:#9dce0a;cursor:pointer;height:.4rem;left:0;position:absolute;top:0}.card-completion .card-tooltip{background:#050505;border-radius:5px;color:#fff;display:none;font-size:14px;left:calc(25% - 50px);padding:.25rem 1rem;position:absolute;text-align:center;top:-2.25rem;width:100px}.card-completion .card-tooltip::after{background:#000;content:'';height:10px;left:50%;position:absolute;top:70%;transform:rotate(45deg);width:10px}.color-selector .tag-color.empty-color:after,.color-selector .tag-color.empty-color:before{content:"";top:0;height:48px;width:2px;background:#ff8282;position:absolute}.card-unfold{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0;outline:0;padding:.25rem}.card-unfold:hover{background:linear-gradient(to bottom,#fff,#fcfcfc)}.card-unfold svg{width:2rem;height:.3rem;fill:#e4e3e3}.card-tasks{border-top:1px solid #e4e3e3;margin:.5rem 0 0;padding:0}.card-task{font-size:.75rem;border-bottom:1px solid #e4e3e3}.card-task a{color:#767676;display:block;overflow:hidden;padding:.5rem .75rem;text-overflow:ellipsis;transition:color .2s;white-space:nowrap}.card-task a.blocked-task{color:#ff8282}.card-task a.closed-task{color:#767676;text-decoration:line-through}.card-task a:hover{color:#5b8200}.detail-header-container.blocked,.detail-header-container.blocked .detail-number,.detail-header-container.blocked .detail-subject,.detail-header-container.blocked a{color:#fff}.card-slideshow{position:relative}.card-slideshow:hover .slideshow-left,.card-slideshow:hover .slideshow-right{background:rgba(255,255,255,.2);padding:.25rem;transition:background .2s}.card-slideshow .slideshow-icon{cursor:pointer;position:absolute;top:35%}.card-slideshow .slideshow-icon:hover{background:rgba(157,206,10,.5);transition:background .2s}.card-slideshow svg{width:1.2rem;height:1.2rem;transition:fill .2s}.card-slideshow .slideshow-left,.card-slideshow .slideshow-right{background:0 0;padding:.25rem}.card-slideshow .slideshow-left{left:0}.card-slideshow .slideshow-right{right:0}.card-slideshow img{width:100%}.card-slideshow-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:120px;-ms-flex-pack:center;justify-content:center;overflow:hidden}.card-slideshow-wrapper .loading-spinner{min-height:3rem;min-width:3rem}.color-selector{position:relative}.color-selector .tag-color{cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;border:1px solid #767676;border-radius:0;margin:0;transition:background .3s ease-out}.color-selector .tag-color:nth-child(7n){margin-right:0}.color-selector .tag-color.disabled{cursor:auto}.color-selector .tag-color.empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.color-selector .tag-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector .tag-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.color-selector-dropdown{background:#050505;left:0;padding:1rem;position:absolute;top:2.25rem;width:332px;z-index:99}.color-selector-dropdown-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;margin-bottom:0}.color-selector-dropdown-list .color-selector-option{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0}.color-selector-dropdown-list .color-selector-option:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0;background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.color-selector-dropdown-list .empty-color:after,.color-selector-dropdown-list .empty-color:before{width:2px;height:48px;background:#ff8282;position:absolute;top:0;content:""}.color-selector-dropdown-list .empty-color:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector-dropdown-list .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.custom-color-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.custom-color-selector .custom-color-input{margin:0;width:100%}.custom-color-selector .display-custom-color-wrapper{background:#f5f5f5;margin-right:.5rem}.custom-color-selector .display-custom-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;-ms-flex-negative:0;flex-shrink:0;margin:0}.custom-color-selector .display-custom-color:nth-child(7n){margin-right:0}.custom-color-selector .display-custom-color.empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative;cursor:default}.custom-color-selector .display-custom-color.empty-color:after{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(-45deg);position:absolute;top:0;left:0;transform-origin:top}.custom-color-selector .display-custom-color.empty-color:before{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(45deg);position:absolute;top:0;right:0;transform-origin:top}.detail-header-container{background:#f5f5f5;-ms-flex:1;flex:1;padding:1rem;position:relative}.detail-header-container.blocked,.detail-title-wrapper.blocked{background:red;transition:all .2s linear}.detail-header-container:hover .detail-edit{opacity:1}.detail-header-container.blocked svg{fill:#fff}.detail-header-container .belong-to-epics-wrapper,.detail-header-container .block-desc-container,.detail-header-container .issue-external-reference,.detail-header-container .item-generated-us,.detail-header-container .item-origin-issue,.detail-header-container .task-belongs-to{font-size:.9rem;margin-top:.5rem}.detail-header-container .relate-to-epic-button{color:#767676;cursor:pointer;display:inline-block}.detail-header-container .relate-to-epic-button:hover{color:#9dce0a}.detail-header-container .relate-to-epic-button .icon-epics{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.detail-header-container .relate-to-epic-button .relate-to-epic-text{font-size:.9rem}.detail-header-container .issue-external-reference a,.detail-header-container .item-generated-us a,.detail-header-container .item-origin-issue a,.detail-header-container .task-belongs-to a{cursor:pointer;padding:0 .2rem}.detail-header-container .issue-external-reference .item-ref,.detail-header-container .item-generated-us .item-ref,.detail-header-container .item-origin-issue .item-ref,.detail-header-container .task-belongs-to .item-ref{padding:0 .2rem}.detail-title-wrapper{font-size:1.6rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;max-width:95%;position:relative;transition:all .2s linear}.detail-title-wrapper .detail-title-text{line-height:normal;margin:0}.detail-title-wrapper .detail-number{color:#767676;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.detail-title-wrapper .detail-subject{color:#555;-ms-flex-positive:1;flex-grow:1}.detail-title-wrapper .detail-edit{cursor:pointer;margin-left:.75rem;opacity:0;transition:opacity .2s}.detail-title-wrapper .detail-edit svg,.detail-title-wrapper .due-date-icon svg{width:1.3rem;height:1.3rem}.detail-title-wrapper.readonly .due-date-icon{margin-left:2.7rem}.edit-title-wrapper{font-size:1.6rem;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-input{background:#fff;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-button{background:0 0;display:inline;transition:fill .2s}.due-date-icon,.issue-nav a{display:inline-block}.edit-title-wrapper .edit-title-button:hover{fill:#5b8200}.edit-title-wrapper .save-title-button{margin-left:1rem}.block-desc-container .block-description-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-right:.5rem}.issue-nav{position:absolute;right:1rem;top:1rem}.issue-nav svg{width:1.2rem;height:1.2rem;fill:currentColor}.due-date-button,[disabled].due-date-button{background:#767676;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.due-date-button.closed,.due-date-button.text-button.closed:hover,[disabled].due-date-button.closed,[disabled].due-date-button.text-button.closed:hover{background:#B8B8B8;border-color:#B8B8B8}.due-date-button.due-set,.due-date-button.text-button.due-set:hover,[disabled].due-date-button.due-set,[disabled].due-date-button.text-button.due-set:hover{background:#9dce0a;border-color:#9dce0a}.due-date-button.due-soon,.due-date-button.text-button.due-soon:hover,[disabled].due-date-button.due-soon,[disabled].due-date-button.text-button.due-soon:hover{background:#fcaf3e;border-color:#fcaf3e}.due-date-button.past-due,.due-date-button.text-button.past-due:hover,[disabled].due-date-button.past-due,[disabled].due-date-button.text-button.past-due:hover{background:#ff8282;border-color:#ff8282}.due-date-button:hover,[disabled].due-date-button:hover{background:#555}.due-date-button.editable,[disabled].due-date-button.editable{cursor:pointer}.due-date-button.text-button,[disabled].due-date-button.text-button{color:#fff;margin:0;padding:.5rem}.due-date-button.text-button.not-set:hover,[disabled].due-date-button.text-button.not-set:hover{color:#fff}.due-date-button.text-button.not-set,[disabled].due-date-button.text-button.not-set{color:#555}.due-date-icon{margin:0 .25rem;position:relative}.due-date-icon svg{fill:#767676;transition:fill .2s ease-in}.due-date-icon.closed svg{fill:#B8B8B8}.due-date-icon.due-set svg{fill:#9dce0a}.due-date-icon.due-soon svg{fill:#fcaf3e}.due-date-icon.past-due svg{fill:#ff8282}.backlog-table-body .user-story-name .due-date-icon,.related-tasks .task-name .due-date-icon{top:.1rem}.issues-table .subject .due-date-icon{top:.25rem}.card-statistics .due-date-icon{margin:.1rem 0 0}.card-statistics .due-date-icon svg{height:.9rem;width:.9rem}.due-date-button-wrapper{display:-ms-flexbox;display:flex;position:relative}.date-picker-container{overflow:visible}.date-picker-popover{background:#fff;border:1px solid #555;left:0;overflow:visible;position:absolute;top:56px;width:auto}.date-picker-popover .pika-single.is-bound{border:0;box-shadow:none}.date-picker-popover-footer{padding:.2rem .5rem;text-align:right}.date-picker-popover-footer svg{fill:#555;height:1rem;width:1rem}.date-picker-popover-footer a:hover svg{fill:red}tg-filter{background-color:#f5f5f5;display:block;left:0;min-height:100%;padding:1rem 0;position:absolute;top:0;transform:translateX(-260px);transition-duration:.5s;width:260px;z-index:1}tg-filter .filters-applied{padding:0 1rem 1rem}tg-filter .filters-applied .single-filter:hover{color:currentColor;cursor:default;opacity:.5;transition:none}tg-filter form,tg-filter h1{padding:0 1rem}tg-filter input{background:#444;color:#fff;padding-right:2rem}tg-filter input::-webkit-input-placeholder{color:#767676}tg-filter input::-moz-placeholder{color:#767676}tg-filter input:-moz-placeholder{color:#767676}tg-filter input:-ms-input-placeholder{color:#767676}tg-filter .search-action{position:absolute;right:.7rem;top:.7rem}tg-filter.open{box-shadow:1px 1px 5px rgba(91,130,0,.2);transform:translateX(0)}.filter-list{overflow-y:auto;padding:1rem}.filters-step-cat{margin-top:2rem}.filters-cats ul{margin-bottom:0}.filters-cats li{border-bottom:1px solid #767676;text-transform:uppercase}.filters-cats li.selected{border-bottom:0}.filters-cats .custom-filters .title{color:#5b8200}.filters-cats .filters-cat-single{-ms-flex-align:center;align-items:center;color:#444;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 1.5rem;transition:color .2s ease-in}.filters-cats .filters-cat-single.selected,.filters-cats .filters-cat-single:hover{background-color:#cbc9c9;color:#444;transition:background-color .2s ease-in}.filters-cats .filters-cat-single.selected .icon,.filters-cats .filters-cat-single:hover .icon{opacity:1;transition:opacity .2s ease-in}.filters-cats .icon-arrow-down{fill:currentColor;float:right;height:.9rem;opacity:0;transition:opacity .2s ease-in;width:.9rem}.single-filter{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-align:center;align-items:center;background:#d7d6d6;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;opacity:.5;padding-right:.5rem;position:relative}.live-announcement-inner .title,.live-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.single-filter::after{clear:both;content:"";display:block}.single-filter:hover{background:#d0cece;opacity:1;transition:opacity .2s linear}.single-filter.active,.single-filter.selected{color:#444;opacity:1;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;border-color:transparent;border-style:solid;border-width:0 0 0 3px;display:block;width:100%}.profile-bar .not-full-name,.profile-bar h1,.wysiwyg p{word-wrap:break-word}.single-filter .number{background:#b2afaf;position:absolute;right:0;top:0}.single-filter .remove-filter{cursor:pointer;display:block}.single-filter .remove-filter svg{fill:#555;transition:fill .2s linear}.single-filter .remove-filter:hover svg{fill:red}.live-announcement{-ms-flex-line-pack:center;align-content:center;background:#107a8a;display:-ms-flexbox;display:flex;height:0;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.live-announcement .live-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.live-announcement.visible{height:146px;pointer-events:auto;transition-delay:0s;width:100%}.live-announcement.visible .live-announcement-inner{opacity:1;transition:opacity .5s .5s}.live-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.live-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;margin-right:1rem}.live-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.live-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.live-announcement-inner .warning,.live-announcement-inner .warning a{color:#0b525c}.live-announcement-inner .close{display:block;position:absolute;right:0;top:1rem}.live-announcement-inner .close svg{width:2rem;height:2rem;fill:#138ea1;pointer-events:none;transition:fill .2s}.live-announcement-inner .close svg:hover{fill:#0b525c}.lightbox-move-to-sprint .move-to-sprint-container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:550px;width:100%}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header{margin:0 auto;max-width:400px;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header ul{display:inline-block;margin:.5em auto 2.5em;width:auto}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header li{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header .check{margin-left:4em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls p{margin-bottom:2.5em;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .sprint-select{margin-top:.5em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .move-button{width:100%}.move-to-sprint-button{color:#fff}.move-to-sprint-button:not(.disabled){cursor:pointer}.move-to-sprint-button:not(.disabled):hover{color:#9dce0a}.move-to-sprint-button.disabled:hover,.search-list .choice.selected .info{color:#fff}.move-to-sprint-button.disabled{opacity:.5}.search-list .show-closed{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;float:right;font-size:.9em}.add-tag-button .add-tag-text,.tag{font-size:.9rem}.search-list .show-closed svg{height:1em;margin-right:.25em;width:1em}.search-list ul{background:#f5f5f5;border:1px solid #767676;height:200px;margin:.25em 0 0;max-height:200px;overflow-y:auto}.search-list .choice{cursor:pointer;padding:.25em .5em}.search-list .choice.selected{background:#9dce0a;color:#fff}.search-list .choice[disabled]{color:#B8B8B8;cursor:not-allowed}.search-list .choice[disabled] .info{color:#B8B8B8}.search-list .choice ng-include{display:-ms-flexbox;display:flex;width:100%}.search-list .choice ng-include .title{-ms-flex-positive:1;flex-grow:1;text-align:left}.search-list .choice ng-include .info{color:#767676;text-align:right}.search-list .choice .title span{margin-right:.5em}.add-tag-input{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative;width:250px}.add-tag-input input{border-color:#767676;padding:6px;width:14rem}.add-tag-input .save{cursor:pointer;display:inline-block;fill:#444;margin:.5rem 0 0 .5rem;transition:.2s linear}.add-tag-input .save:hover{fill:#5b8200}.add-tag-input .tags-dropdown{font-size:.9rem;background:#fff;border:1px solid #767676;border-top:0;box-shadow:2px 2px 3px rgba(0,0,0,.2);left:0;max-height:20vh;min-height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:2.25rem;width:85%;z-index:99}.add-tag-input .tags-dropdown-option{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.tags-block,.terms-announcement{align-content:center;display:-ms-flexbox}.add-tag-input .tags-dropdown-color{height:1rem;width:1rem}.add-tag-input li.selected,.add-tag-input li:hover{background:#f4fdda;cursor:pointer;transition:.2s;transition-delay:.1s}.tags-block{-ms-flex-line-pack:center;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.add-tag-button,.tag{display:inline-block}.add-tag-button{color:#767676;cursor:pointer}.add-tag-button:hover{color:#9dce0a}.add-tag-button .icon-add{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#f5f5f5;border-left:5px solid;border-radius:0 5px 5px 0;color:#444;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.terms-announcement-inner .title,.terms-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.tag .icon-close{width:.7rem;height:.7rem;cursor:pointer;fill:#ff8282;margin-left:.25rem}.tag .loading-spinner{height:1rem;width:1rem}.terms-announcement{-ms-flex-line-pack:center;background:#107a8a;display:flex;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.terms-announcement .terms-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.terms-announcement.visible{min-height:146px;pointer-events:auto;transition-delay:0s;width:100%}.terms-announcement.visible .terms-announcement-inner{opacity:1;transition:opacity .5s .5s}.terms-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.terms-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;height:auto;margin-right:1rem}.terms-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.terms-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.terms-announcement-inner .warning,.terms-announcement-inner .warning a{color:#0b525c}.tribe-linked.is-active .delete-link,.tribe-linked.is-active .gig-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.terms-announcement-inner .close{display:block;position:absolute;right:.5rem;top:1rem}.terms-announcement-inner .close svg{width:2rem;height:2rem;fill:#f5f5f5;pointer-events:none;transition:fill .2s}.terms-announcement-inner .close svg:hover{fill:#0b525c}.terms-announcement-inner a{color:#f5f5f5}.loader .tip-color-1 p{color:#ae4fb0}.loader .tip-color-1 svg{fill:#ae4fb0;stroke:#ae4fb0}.loader .tip-color-2 p{color:#4e88df}.loader .tip-color-2 svg{fill:#4e88df;stroke:#4e88df}.loader .tip-color-3 p{color:#6360d6}.loader .tip-color-3 svg{fill:#6360d6;stroke:#6360d6}.loader .tip-color-4 p{color:#47b3a6}.loader .tip-color-4 svg{fill:#47b3a6;stroke:#47b3a6}.loader .tip-color-5 p{color:#d76969}.loader .tip-color-5 svg{fill:#d76969;stroke:#d76969}.tip{text-align:center;width:auto}.tip .translate-cloak{display:none}.tip p{display:-ms-flexbox;display:flex;font-size:1.1em;-ms-flex-pack:center;justify-content:center;margin-bottom:1em;max-width:440px}.tip p.title{color:#000;font-size:1em;margin-bottom:1.75em}.tip p.range{width:1px}.tip svg{height:32px;margin:0 .3em;width:32px}.tip svg.icon-upvote{height:30px;width:24px}.tip .range-slider{display:initial;width:100px}.tip .arrows svg{height:40px;margin:0}.tip .arrows svg.icon-arrow-left{margin-left:7px}.tip .arrows svg.icon-arrow-right{margin-left:-7px}.tribe-linked{margin-left:auto;overflow:hidden;position:absolute;right:0;top:0;z-index:99}.tribe-linked .tribe-linked-inner{padding:.5rem;transition:.2s}.tribe-linked .tribe-linked-inner:hover{background:#fff;cursor:pointer}.tribe-linked .tribe-linked-inner .close,.tribe-linked .tribe-linked-inner .delete-link,.tribe-linked .tribe-linked-inner .gig-title,.tribe-linked .tribe-linked-inner .synchronize-link,.tribe-linked .tribe-linked-inner .title{display:none;opacity:0}.tribe-linked .tribe-logo{height:2rem;width:2rem}.tribe-linked.is-active{animation-duration:1s;animation-name:slideTribeInner;background:#fff;box-shadow:1px 1px 5px rgba(68,68,68,.2);overflow:hidden}.epic-row .epic-statuses,.epics-table-dropdown{box-shadow:3px 3px 2px rgba(0,0,0,.1);z-index:99}.tribe-linked.is-active .tribe-linked-inner{height:100%;min-width:300px}.tribe-linked.is-active .tribe-linked-inner .close,.tribe-linked.is-active .tribe-linked-inner .delete-link,.tribe-linked.is-active .tribe-linked-inner .gig-title,.tribe-linked.is-active .tribe-linked-inner .synchronize-link,.tribe-linked.is-active .tribe-linked-inner .title{animation-duration:1.25s;animation-name:fadeInFromNone;display:block;opacity:1}.tribe-linked.is-active .tribe-linked-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.tribe-linked.is-active .tribe-logo{margin-right:.5rem;vertical-align:text-bottom}.tribe-linked.is-active svg{width:1rem;height:1rem;fill:#ff8282;transition:all .2s}.tribe-linked.is-active svg:hover{fill:red}.tribe-linked.is-active .title{margin-bottom:0}.tribe-linked.is-active .gig-title{color:#107a8a;margin-bottom:.5rem}.tribe-linked.is-active .delete-link{font-size:.9rem;color:#5b8200;display:block;margin-bottom:1rem}.tribe-linked.is-active .synchronize-link{display:block;padding:.5rem}.tribe-linked.is-active .close{-ms-flex-item-align:start;align-self:flex-start;margin-left:1rem}@keyframes slideTribeInner{0%{max-height:60px;width:100px}20%{max-height:60px;width:300px}100%{max-height:225px}}@keyframes fadeInFromNone{0%{display:none;opacity:0}80%{display:block;opacity:0}100%{display:block;opacity:1}}tg-wysiwyg-code-lightbox textarea{height:350px}.wysiwyg{line-height:1.4rem;overflow:auto;padding:1rem}.wysiwyg h1,.wysiwyg h2,.wysiwyg h3{padding-bottom:.5rem}.wysiwyg h1{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:2.25em;line-height:1.2;margin-bottom:1rem;margin-top:1rem;text-transform:uppercase}.wysiwyg h2,.wysiwyg h3,.wysiwyg h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-top:1rem;margin-bottom:1rem}.wysiwyg h2{font-size:1.6rem;line-height:1.225}.wysiwyg h3{font-size:1.2rem}.wysiwyg ol,.wysiwyg ul{line-height:1.5;list-style-position:outside;margin-bottom:1rem;margin-top:0;padding-left:2em}.wysiwyg ol ol,.wysiwyg ol ul,.wysiwyg ul ol,.wysiwyg ul ul{padding-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#5b8200;cursor:pointer}.wysiwyg a:hover{color:#9dce0a}.wysiwyg code,.wysiwyg pre:not([class*=language-]){font-size:.9rem;background:#272822;color:#e4e3e3;direction:ltr;font-family:'courier new',monospace;overflow:auto;unicode-bidi:embed}.wysiwyg p{margin-bottom:1rem}.wysiwyg .codehilite{overflow:auto}.wysiwyg blockquote p{margin:0}.wysiwyg pre:not([class*=language-]){line-height:1.4rem;margin-bottom:.5rem;padding:1rem;white-space:pre-wrap}.wysiwyg code{padding:.2rem}.wysiwyg table{border:1px solid #767676;margin-bottom:1rem}.medium-editor-mention-panel ul,tg-wysiwyg div[contenteditable=true] :last-child{margin-bottom:0}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#767676 1px solid}.wysiwyg th{border-right:#767676 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#767676 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.wysiwyg textarea{background:#fff;max-height:none}.wysiwyg hr{border:1px solid #e4e3e3}.medium-editor-mention-panel{background-color:#fff;border:1px solid #767676;position:absolute}.medium-editor-mention-panel:empty{border:0}.medium-editor-mention-panel li{border-top:1px solid #767676;cursor:pointer;padding:2px 5px}.medium-editor-mention-panel li:first-child{border-top:0}.medium-editor-mention-panel li.active,.medium-editor-mention-panel li:hover{background-color:#879b89;color:#fff}.code-language-search,.code-language-selector{font-size:.75rem;background-color:#fff;position:absolute}tg-wysiwyg{display:-ms-flexbox;display:flex;margin-bottom:2rem}tg-wysiwyg pre{cursor:pointer}tg-wysiwyg .outdated{color:red}tg-wysiwyg .tools{padding-left:1rem}tg-wysiwyg .tools:not(.visible){opacity:0;pointer-events:none}tg-wysiwyg .tools:not(.visible) a{cursor:default}tg-wysiwyg .tools a{display:block;margin-bottom:.5rem}tg-wysiwyg .tools svg{fill:#767676}tg-wysiwyg .editor{width:100%}tg-wysiwyg .mode-editor span{color:#767676;cursor:pointer;margin-right:.5rem}tg-wysiwyg .markdown-editor-placeholder,tg-wysiwyg .medium-editor-placeholder{color:#767676;overflow:visible;padding-left:1rem}tg-wysiwyg .markdown-editor-placeholder::after,tg-wysiwyg .medium-editor-placeholder::after{color:#767676;font-style:normal}tg-wysiwyg .markdown:not(.empty) p{margin-bottom:0;white-space:pre-wrap}tg-wysiwyg .read-mode{cursor:pointer}tg-wysiwyg .medium{border:1px solid transparent}.code-language-search,.code-language-selector,tg-wysiwyg .edit-mode .markdown,tg-wysiwyg .edit-mode .medium{border:1px solid #767676}tg-wysiwyg .edit-mode .medium-editor-element{min-height:10rem}.code-language-selector{cursor:pointer;padding:.2rem .5rem 0}.code-language-search ul{cursor:pointer;margin-bottom:0;max-height:20vh;overflow-y:scroll}.epic-row .sprint,.epics-table-header .sprint,.story-row .sprint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.code-language-search li{padding:.2rem .5rem}.medium-editor-toolbar li .medium-editor-button-active{color:#9dce0a}.medium-editor-toolbar svg{fill:#fff}.medium-editor-toolbar button:hover svg{fill:#9dce0a}.discover-header{background:url(../images/discover.png) bottom left repeat-x #e4e3e3;margin-bottom:2.5rem;padding:1rem 1rem 2rem;text-align:center}.discover-header .discover-header-inner{max-width:1200px;min-width:768px;margin:0 auto}.discover-header .title{font-size:3rem;margin-bottom:0}.discover-header .project-number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#5b8200}.discover-results-header .title,.featured-projects .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.discover-header form{margin:0 30%;position:relative}@media (max-width:767px){.discover-header .discover-header-inner{width:90%;min-width:0}.discover-header form{margin:0 .5rem}}.discover-header input[type=text]{background:#fff;border:0;padding:1rem;width:100%}.discover-header input[type=text]:focus{outline-color:#9dce0a}.discover-header input[type=text]:-webkit-autofill{background:rgba(135,155,137,.5)}.discover-header .search-button{width:1.5rem;height:1.5rem;fill:#767676;position:absolute;right:1rem;top:1rem;transition:fill .2s}.discover-header .search-button:hover{cursor:pointer;fill:#5b8200}.discover-results-header .discover-results-header-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.discover-results-header svg{width:1.2rem;height:1.2rem;fill:#767676;margin-right:.25rem}.discover-results-header .title{font-size:1.6rem;text-transform:uppercase}.discover-results-header h2{display:inline-block}.filter-discover-search .discover-search-filter{margin-right:1rem}.filter-discover-search .discover-search-filter.active{color:#5b8200}.filter-discover-search .discover-search-filter.active svg{fill:#5b8200}.filter-discover-search svg{width:.8rem;height:.8rem}.discover-search-subfilter{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative}.discover-search-subfilter:after,.discover-search-subfilter:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.discover-search-subfilter:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.discover-search-subfilter:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.discover-search-subfilter.most-liked-subfilter::after,.discover-search-subfilter.most-liked-subfilter::before{left:85%}.discover-search-subfilter.most-active-subfilter::after,.discover-search-subfilter.most-active-subfilter::before{left:95%}.discover-search-subfilter.ng-enter{animation:dropdownFade .2s}.discover-search-subfilter .results{font-size:.9rem;color:#ff8282;display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .results:hover{color:red}.discover-search-subfilter .filter-list{display:-ms-flexbox;display:flex;margin:0 0 0 auto}.discover-search-subfilter .filter-list a{display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .filter-list a:hover{background:#767676;color:currentColor}.discover-search-subfilter .filter-list a.active{background:#9dce0a;color:#fff}.featured-projects{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.featured-projects{width:90%;min-width:0}}.featured-projects .title{font-size:1.6rem;color:#444;text-align:center}.featured-projects-inner{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.featured-project{background:#fff;border:1px solid #e4e3e3;margin:.5rem;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:23%;flex-basis:23%;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:23%}.featured-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.featured-project .project-tag{-ms-flex:1;flex:1}.featured-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.featured-project .project-card-description{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555}.featured-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.featured-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.featured-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.featured-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.featured-project .statistic{font-size:.9rem;color:#767676;display:inline-block;margin-right:.5rem}.featured-project .statistic.active{color:#5b8200}.featured-project .statistic.active svg{fill:currentColor}.featured-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.featured-project .project-card-header .icon-badge{fill:#9dce0a}.featured-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.featured-project .project-card-logo img{width:100%}.featured-project .project-card-name{line-height:1.25}.featured-project .project-card-name a{font-size:1.2rem;color:#5b8200}.featured-project .project-card-name a:hover{color:#9dce0a}@media (max-width:767px){.featured-project{-ms-flex-preferred-size:45%;flex-basis:45%}}@media (max-width:480px){.featured-project{-ms-flex-preferred-size:100%;flex-basis:100%}}.highlighted{margin:1rem auto 4rem;max-width:1200px;min-width:768px;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}@media (max-width:767px){.highlighted{width:90%;min-width:0;-ms-flex-direction:column;flex-direction:column}.highlighted tg-most-active{margin-top:4rem}}.highlighted tg-most-active,.highlighted tg-most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.highlighted tg-most-liked{margin-right:8%}@media (max-width:767px){.highlighted tg-most-liked{margin-right:0}}.highlighted .most-active,.highlighted .most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column}.highlighted .header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.highlighted .header svg{width:.8rem;height:.8rem;fill:#767676;margin-left:.5rem}.highlighted .title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.highlighted .title-wrapper svg{width:1.25rem;height:1.25rem;fill:#767676;margin-right:.5rem}.highlighted .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.6rem;color:#444;display:inline-block;margin:0}.highlighted .highlighted-projects-container{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.highlighted .loading-container{margin-top:calc(50% - 1rem)}.highlighted .loading-spinner{display:block;margin:2rem auto;max-height:3rem;max-width:3rem}.highlighted .view-more-projects{margin-top:auto;width:100%}.highlighted .empty-highlighted-project{border:2px dashed #e4e3e3;-ms-flex:1;flex:1;padding:2rem;text-align:center}.highlighted .empty-highlighted-project svg{width:2rem;height:2rem;display:block;fill:#767676;margin:1rem auto}.highlighted .empty-highlighted-project span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block}.filter-highlighted{position:relative}.filter-highlighted .current-filter{padding:1rem}.filter-highlighted .current-filter span{margin-left:.2rem;position:relative;top:.2rem}.filter-highlighted .current-filter:hover svg{fill:currentColor}.filter-highlighted .filter-list{background:#000;position:absolute;right:0;top:1.5rem}.filter-highlighted .filter-list.ng-enter{animation:dropdownFade .2s ease-in}.filter-highlighted .filter-list.ng-leave{animation:dropdownFade .2s ease-in;animation-direction:reverse}.filter-highlighted li{font-size:.9rem;color:#fff;cursor:pointer;min-width:8rem;padding:.25rem .5rem}.filter-highlighted li:hover{background:rgba(157,206,10,.4)}.highlighted-project{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:9rem;flex-basis:9rem;min-height:9rem;padding:1.5rem 0}.highlighted-project:nth-last-child(-n+2){border-bottom:0}.highlighted-project .project-logo{-ms-flex-preferred-size:3rem;flex-basis:3rem;height:auto;margin-right:1rem;width:3rem}.highlighted-project .project-logo img{width:100%}.highlighted-project .project-data-container{-ms-flex:1;flex:1}.highlighted-project .single-project-header{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.highlighted-project .project-title{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.epic-row .epic-pill,.epic-row .epic-statuses{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.highlighted-project .project-title a{color:#5b8200}.highlighted-project .project-title a:hover{color:#9dce0a}.highlighted-project .project-description{font-size:.9rem;color:#555;margin-bottom:0}.highlighted-project .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:end;justify-content:flex-end}.highlighted-project .project-statistics svg{width:.75rem;height:.75rem;fill:#767676;margin-right:.25rem}.highlighted-project .statistic{font-size:.9rem;color:#767676;display:inline-block;margin-right:.5rem}.highlighted-project .statistic.active{color:#5b8200}.highlighted-project .statistic.active svg{fill:#5b8200}.discover-search .discover-header form{margin:0 8rem;position:relative}.discover-search .discover-header .search-button{left:1rem;right:auto}.discover-search .discover-header .searchbox input{padding-left:3.5rem;padding-right:23rem}.discover-search .searchbox-filters{position:absolute;right:1rem;top:.7rem;width:auto}.discover-search .searchbox-filters input{display:none}.discover-search .searchbox-filters label{border-radius:4px;color:#767676;cursor:pointer;display:inline-block;padding:.4rem .75rem;transition:all .2s;transition-delay:.2s}.discover-search .searchbox-filters label.active{background:#9dce0a;color:#fff}.discover-search .searchbox-filters label:hover{background:#e4e3e3;color:#555}.discover-results{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.discover-results{width:90%;min-width:0}}.discover-results .discover-results-inner .spin{margin-top:4rem}.discover-results .list-itemtype-project{border-bottom:1px solid #767676;display:-ms-flexbox;display:flex;padding:1rem 0}.discover-results .list-itemtype-project:last-child{border-bottom:0}.discover-results .list-itemtype-project-left{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;width:100%}.discover-results .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.discover-results .list-itemtype-project-data{-ms-flex:1;flex:1;vertical-align:middle}.discover-results .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-pack:end;justify-content:flex-end}.discover-results .project-statistics svg{width:.7rem;height:.7rem;fill:#767676;margin-right:.2rem}.discover-results .statistic{font-size:.9rem;color:#767676;display:inline-block;margin-right:.5rem}.discover-results .statistic svg{fill:#767676;stroke:#767676}.discover-results .statistic.active{color:#5b8200}.discover-results .statistic.active svg{fill:#5b8200}.discover-results .more-results{display:block;margin:0 20rem;transition:inherit}.discover-results div[tg-loading] img{display:block;margin:0 auto}.lightbox-create-epic{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1}.lightbox-create-epic .create-epic-container{max-width:700px;width:90%}.lightbox-create-epic .subject-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.lightbox-create-epic .subject-container .subject{padding-left:1rem;width:100%}.lightbox-create-epic .attachments{margin-bottom:0}.lightbox-create-epic .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-create-epic .settings fieldset{margin-right:.5rem}.lightbox-create-epic .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-create-epic .settings fieldset:last-child{margin:0}.lightbox-create-epic .settings input{display:none}.lightbox-create-epic .settings input:checked+label{background:#5b8200;border:1px solid #5b8200;color:#fff}.lightbox-create-epic .settings input:checked+.blocked{background:red;border:1px solid red;color:#fff}.lightbox-create-epic label{font-size:.9rem;background:#f5f5f5;border:1px solid #767676;color:#767676;cursor:pointer;display:block;padding:.5rem 3rem;text-transform:none;transition:all .2s ease-in}.lightbox-create-epic label:hover{background:#9dce0a;border:1px solid #5b8200;color:#fff}.lightbox-create-epic label.blocked:hover{background:#ff8282;border:1px solid red}.lightbox-create-epic .create-epic-button{display:block;width:100%}.epic-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #e4e3e3;cursor:move;display:-ms-flexbox;display:flex;transition:background .2s}.epic-row .assigned,.epic-row .project{padding:.5rem}.epic-row .name,.epic-row .progress,.epic-row .sprint,.epic-row .status,.epic-row .vote{padding:1rem .5rem}.epic-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .assigned,.epic-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .sprint,.epic-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epic-row .name,.epic-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epic-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epic-row .sprint{width:90%}.epic-row:hover{background:rgba(157,206,10,.05)}.epic-row:hover .icon-drag{opacity:1}.epic-row.not-empty{cursor:pointer}.epic-row.is-blocked{background:rgba(255,130,130,.5)}.epic-row.is-closed .name a{color:#9c9c9c;text-decoration:line-through}.epic-row.unfold .name .icon{transform:rotate(0)}.epic-row .name .icon{transform:rotate(180deg);transition:all .2s}.epic-row .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#e4e3e3;opacity:0;transition:opacity .1s}.epic-row .epic-pill{font-size:.75rem;background:#444;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.epic-row .status{cursor:pointer;position:relative}.epic-row .status button{background:0 0}.epic-row .icon-arrow-down{width:.7rem;height:.7rem;fill:#767676;margin-left:.1rem}.epic-row .progress-bar,.epic-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.epic-row .progress-bar{background:#f5f5f5;max-width:40vw;padding-right:1rem;width:100%}.epic-row .progress-status{background:#9dce0a;width:10vw}.epic-row .vote{color:#555}.epic-row .vote.is-voter{color:#9dce0a;fill:#9dce0a}.epic-row .assigned img{width:40px}.epic-row .icon-upvote{width:.75rem;height:.75rem;fill:#555;margin-right:.25rem;vertical-align:middle}.epic-row .is-unassigned{color:#767676}.epic-row .epic-statuses{font-size:.9rem;background:rgba(5,5,5,.9);border-bottom:1px solid #444;color:#fff;left:0;list-style-type:none;margin:0;position:absolute;text-align:left;top:2.5rem;width:200px}.epic-row .epic-statuses:last-child{border:0}.epic-row .epic-statuses li{padding:.5rem}.epic-row .epic-statuses li:hover{color:#9dce0a;transition:color .3s linear}.empty-epics{text-align:center}.empty-epics a{color:#5b8200;display:block;margin-bottom:2rem}.epics-table{margin-top:2rem}.epics-table .loading{margin:2% auto;width:3rem}.epics-table .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.epics-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676;display:-ms-flexbox;display:flex;padding:.5rem;position:relative}.epics-table-header .name,.epics-table-header .progress,.epics-table-header .sprint,.epics-table-header .status,.epics-table-header .vote{padding:1rem .5rem}.epics-table-header .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epics-table-header .assigned,.epics-table-header .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center;padding:1rem .5rem}.epics-table-header .sprint,.epics-table-header .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epics-table-header .name,.epics-table-header .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epics-table-header .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epics-table-header .sprint{width:90%}.epics-table-options-wrapper{bottom:1rem;position:absolute;right:.5rem}.epics-table-option-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0}.epics-table-option-button .icon{width:.7rem;height:.7rem}.epics-table-dropdown{background:#fff;border-bottom:1px solid rgba(0,0,0,.1);border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);padding:.5rem;position:absolute;right:0;top:1.3rem;width:250px}.epics-table-dropdown.ng-hide-remove{animation:dropdownFade .2s}.epics-table-dropdown.ng-hide-add{animation:dropdownFade .2s reverse}.epics-table-dropdown .fieldset{font-size:.9rem;border-bottom:1px solid #e4e3e3;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.epics-table-dropdown .fieldset:last-child{border:0}.story-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;margin-left:4rem;transition:background .2s}.story-row .assigned,.story-row .project{padding:.5rem}.story-row .name,.story-row .progress,.story-row .sprint,.story-row .status,.story-row .vote{padding:1rem .5rem}.story-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .assigned,.story-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .sprint,.story-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.story-row .name,.story-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.story-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.story-row .sprint{width:90%}.story-row:hover{background:rgba(157,206,10,.05)}.story-row.is-blocked{background:rgba(255,130,130,.5)}.story-row.is-closed .name{color:#767676;text-decoration:line-through}.story-row .name{-ms-flex-preferred-size:17.5vw;flex-basis:17.5vw}.story-row .name a{cursor:pointer}.story-row .progress-bar,.story-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.story-row .progress-bar{background:#f5f5f5;max-width:40vw;width:100%}.story-row .progress-status{background:#9dce0a;width:10vw}.story-row .vote{color:#555}.story-row .vote.is-voter{color:#9dce0a;fill:#9dce0a}.story-row .project{cursor:pointer}.story-row .assigned img,.story-row .project img{width:40px}.story-row .icon-upvote{width:.75rem;height:.75rem;fill:#555;margin-right:.25rem;vertical-align:middle}.lightbox-create-related-user-stories .lightbox-create-related-user-stories-wrapper{max-width:600px;width:90%}.lightbox-create-related-user-stories .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-create-related-user-stories .related-with-selector input{display:none}.lightbox-create-related-user-stories .related-with-selector input:checked+label{background:#9dce0a;color:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input:checked+label:hover{background:#9dce0a}.lightbox-create-related-user-stories .related-with-selector input+label{background:rgba(228,227,227,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input+label:hover{background:rgba(157,206,10,.3);transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-create-related-user-stories fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-create-related-user-stories .new-user-story-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-create-related-user-stories .existing-user-story-form,.lightbox-create-related-user-stories .new-user-story-form{margin-bottom:1rem}.lightbox-create-related-user-stories .no-stories-found{padding:1rem 0 0}.lightbox-create-related-user-stories .new-user-story-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-create-related-user-stories .new-user-story-options input{display:none}.lightbox-create-related-user-stories .new-user-story-options input:checked+label{background:#9dce0a;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label{background:#f5f5f5;color:#444;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label:hover{background:#9dce0a;color:#fff;fill:#fff}.lightbox-create-related-user-stories button{width:100%}.related-userstories{margin-bottom:2rem;position:relative}.related-userstories-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-userstories-header .related-userstories-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-userstories-header .add-button{background:#444;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-userstories-header .add-button.is-active,.related-userstories-header .add-button:hover{background:#9dce0a}.related-userstories-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-userstories-body{width:100%}tg-related-userstory-row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}tg-related-userstory-row.sortable{cursor:move}tg-related-userstory-row.sortable:hover{background:rgba(157,206,10,.05)}tg-related-userstory-row.sortable:hover .userstory-settings{opacity:1;transition:all .2s ease-in}tg-related-userstory-row.sortable:hover .icon-drag{opacity:1}tg-related-userstory-row.sortable .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#e4e3e3;opacity:0;transition:opacity .1s}tg-related-userstory-row .status{-ms-flex-negative:0;flex-shrink:0;position:relative;width:125px}tg-related-userstory-row .assigned-to-column{-ms-flex-negative:0;flex-shrink:0;width:150px}tg-related-userstory-row .assigned-to-column img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .project{cursor:pointer;-ms-flex-preferred-size:100px;flex-basis:100px}tg-related-userstory-row .project img{width:40px}tg-related-userstory-row .userstory-name{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;margin-right:1rem}tg-related-userstory-row .userstory-name a{cursor:pointer}tg-related-userstory-row .userstory-name span{display:inline-block;margin-left:.25rem}tg-related-userstory-row .closed{border-left:10px solid #e4e3e3;color:#e4e3e3}tg-related-userstory-row .closed a,tg-related-userstory-row .closed svg{fill:#e4e3e3}tg-related-userstory-row .closed .userstory-name a{color:#e4e3e3;text-decoration:line-through}tg-related-userstory-row .blocked{background:rgba(255,130,130,.2);border-left:10px solid #ff8282}tg-related-userstory-row .userstory-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;opacity:0;width:60px}tg-related-userstory-row .userstory-settings svg{width:1.1rem;height:1.1rem;fill:#767676;margin-right:.5rem;transition:fill .2s ease-in}tg-related-userstory-row .userstory-settings svg:hover{fill:#555}tg-related-userstory-row .userstory-settings a:hover{cursor:pointer}tg-related-userstory-row .delete-userstory:hover .icon-trash{fill:#ff8282}tg-related-userstory-row .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}tg-related-userstory-row .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .avatar figcaption{margin-left:.5rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:4rem;margin:0 auto;width:4rem}.external-app-wrapper svg{width:4rem;height:4rem}.comment .comment-main,.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-ms-flexbox;display:flex}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper .app-card a,.external-app-wrapper .user-card a{font-size:1rem;display:block}.external-app-wrapper .app-card .app-image{-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-ms-flex:1;flex:1}.external-app-wrapper .app-card p{font-size:1rem}.external-app-wrapper .user-card{background:#fff8e4;border:1px solid #f1e8cd;padding:1rem}.external-app-wrapper .user-card .user-image{-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .button-green{display:block}.external-app-wrapper .cancel{font-size:.9rem;display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.comments{clear:both}.comments tg-wysiwyg{margin-top:1.5rem}.comments .read-mode{border:1px solid #767676;height:55px}.activity,.comment .comment-wrapper,.comment .deleted-comment-wrapper,.entry .entry-wrapper{border-bottom:1px solid #e4e3e3}.comments .read-mode .markdown-editor-placeholder,.comments .read-mode .medium-editor-placeholder{height:55px}.comments .add-comment{margin-top:1rem}.comments .add-comment textarea{height:3rem}.comments .add-comment .edit,.comments .add-comment .preview-icon{position:absolute;right:1rem}.comments .save-comment-wrapper{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.comments .save-comment{margin-top:1rem;padding:.5rem 4rem}.comment{display:block}.comment .comment-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.comment .comment-wrapper:hover .comment-option{opacity:1}.comment .comment-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.comment .comment-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:1rem}.comment .comment-creator{color:#5b8200;margin-right:.5rem}.comment .comment-date{font-size:.9rem;color:#767676}.comment .comment-edited{font-size:.9rem;background:#e4e3e3;margin:0 .5rem;padding:.25rem}.comment .comment-edited .separator{margin:0 .25rem}.comment .comment-edited a{color:#5b8200;fill:#5b8200}.comment .comment-edited svg{width:.75rem;height:.75rem;margin:0 0 0 .25rem}.comment .comment-options{-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;margin-left:1.5rem}.comment .comment-options .comment-option{cursor:pointer;opacity:0}.comment .comment-options .icon-edit{fill:#767676;margin-right:.5rem}.comment .comment-options .icon-edit:hover{fill:#555}.comment .comment-options .icon-close{fill:#767676;margin-right:.5rem}.comment .comment-options .icon-close:hover{fill:red}.comment .comment-options .icon-trash{fill:#ff8282}.comment .comment-options .icon-trash:hover{fill:red}.comment .deleted-comment-wrapper{padding:1rem 0;width:100%}.comment .deleted-comment-main{font-size:.75rem;color:#767676;display:-ms-flexbox;display:flex;width:100%}.comment .toggle-deleted-comment{color:#5b8200;fill:#5b8200;margin:0 1rem;transition:none}.comment .toggle-deleted-comment .icon-arrow-down,.comment .toggle-deleted-comment .icon-arrow-up{width:.8rem;height:.8rem;margin-left:.25rem}.comment .restore-comment{margin-left:auto;transition:all .2s}.comment .restore-comment:hover{color:#5b8200;fill:#5b8200}.comment .restore-comment .icon-reload{width:.8rem;height:.8rem;margin-right:.25rem}.comment .deleted-comment-comment{margin-top:1rem}.comment-text{max-width:80rem}.comment-text.wysiwyg{margin-bottom:0;padding:0}.lightbox-display-historic{display:none}.lightbox-display-historic .history-container{max-width:800px;width:90%}.lightbox-display-historic .history-wrapper{max-height:600px;overflow-x:hidden;overflow-y:auto;padding:2rem}.entry{display:block}.entry .entry-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.entry .entry-avatar{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:50px}.entry .entry-main{-ms-flex:1;flex:1;max-width:calc(100% - 100px)}.entry .entry-data{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.entry .entry-creator{color:#5b8200;margin-right:.5rem}.entry .entry-date{font-size:.9rem;color:#767676}.entry .display-full-entry{width:1.25rem;height:1.25rem;cursor:pointer;fill:#5b8200;margin-left:auto;transform:rotate(0);transition:transform .2s}.entry .display-full-entry.inactive{transform:rotate(180deg)}.entry .entry-text{margin-bottom:0}.entry .entry-text.ellipsed{max-height:3rem;overflow:hidden}.entry .entry-text.blurry{position:relative}.entry .entry-text.blurry::after{background-image:linear-gradient(to top,#fff,transparent);content:'';height:100%;left:0;position:absolute;top:0;width:100%}.history-tabs .order-comments{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:auto;transition:none}.history-tabs .icon-arrow-down,.history-tabs .icon-arrow-up{width:.75rem;height:.75rem}.activity-diff .key{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#e4e3e3;margin-right:.5rem;padding:.25rem}.add-member-suggest .add-member-suggest-name,.home-project .project-card-description,.home-wrapper .title-bar,.invite-members-form .invite-members-single-help,.projects-empty p,.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.activity-diff .diff{line-height:1.6}.activity-diff .icon-arrow-right{width:.75rem;height:.75rem;fill:#767676;margin:0 .5rem}.activity-diff .diff-status-wrapper p{display:inline-block}.activity-diff .diff-status-wrapper ins{background:rgba(203,246,72,.3);text-decoration:underline}.activity-diff .diff-status-wrapper del{background:rgba(255,130,130,.3)}.activity-diff .diff-color-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.activity-diff .diff-color-wrapper .diff{display:inline-block;height:1.2rem;width:1.2rem}.activity{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.activity .activity-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.activity .activity-data{margin-bottom:1rem}.activity .activity-creator{color:#5b8200;margin-right:.5rem}.activity .activity-date{color:#767676}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #e4e3e3;cursor:pointer;transition:background .2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(157,206,10,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single>a,.working-on .duty-single>a{-ms-flex-align:center;align-items:center;border-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.watching .duty-single>a.blocked,.working-on .duty-single>a.blocked{background:rgba(255,130,130,.2);color:red}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper{display:-ms-flexbox;display:flex}@media (max-width:767px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .duty-summary{-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .dashboard-container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@media (max-width:1280px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:767px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .watching-container,.home-wrapper .working-on-container{-ms-flex:1;flex:1;padding-left:.5rem;padding-right:.5rem}.home-wrapper .working-on-container{margin-right:1rem}.home-wrapper .project-list{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.2rem;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0 0 .5rem;padding:.5rem 1rem}.home-project{background:#fff;border:1px solid #e4e3e3;margin:.5rem .5rem 1rem;cursor:pointer;transition:all .2s}.home-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.home-project .project-tag{-ms-flex:1;flex:1}.home-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-project .project-card-description{font-size:.9rem;color:#555}.home-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.home-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.home-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.home-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.home-project .statistic{font-size:.9rem;color:#767676;display:inline-block;margin-right:.5rem}.home-project .statistic.active{color:#5b8200}.home-project .statistic.active svg{fill:currentColor}.home-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.home-project .project-card-header .icon-badge{fill:#9dce0a}.home-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.home-project .project-card-logo img{width:100%}.home-project .project-card-name{line-height:1.25}.home-project .project-card-name a{font-size:1.2rem;color:#5b8200}.home-project .project-card-name a:hover{color:#9dce0a}.home-project:hover{border:1px solid rgba(157,206,10,.2);box-shadow:0 0 5px #e4e3e3}.home-project.blocked-project{border:#e4e3e3}.home-project.blocked-project:hover{border:#e4e3e3;box-shadow:none}.home-project.blocked-project .project-card-description,.home-project.blocked-project .project-card-logo,.home-project.blocked-project .project-card-name a,.home-project.blocked-project .project-card-statistics,.home-project.blocked-project .tags-container{opacity:.3}.projects-empty{text-align:center}.projects-empty svg{fill:#e4e3e3;height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty p{font-size:.9rem}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{margin:2rem 2rem 1rem;text-align:center}.empty-ticket{display:-ms-flexbox;display:flex}.empty-ticket:not(:last-child){border-bottom:1px solid #e4e3e3;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#d7d6d6;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:8vw}@media (max-width:1280px){.empty-ticket .line{width:30vw}}@media (max-width:767px){.empty-ticket .line{width:30vw}}@media (max-width:480px){.empty-ticket .line{width:30vw}}.empty-ticket .line:last-child{margin:0;width:18vw}@media (max-width:1280px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:767px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:480px){.empty-ticket .line:last-child{width:50vw}}.invite-members-form{border-top:1px solid #e4e3e3;margin:0 5rem}.invite-members-form .invite-members-form-list{margin:0 0 1rem}.invite-members-form .invite-members-single{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem}.invite-members-form .invite-members-single-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.invite-members-form .invite-members-single-avatar{height:4rem;margin-right:1rem;width:4rem}.invite-members-form .invite-members-single-remove{color:#ff8282;margin-left:1rem;transition:color .2s}.invite-members-form .invite-members-single-remove:hover{color:red}.invite-members-form .invite-members-single-role{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:0;flex-shrink:0}.invite-members-form .invite-members-single-new{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem 0}.invite-members-form .invite-members-single-new .invite-members-single-new-btn{cursor:pointer}.invite-members-form .invite-members-single-new .icon-add{width:2rem;height:2rem;fill:#444;transition:fill .2s}.invite-members-form .invite-members-single-new:hover .icon-add{fill:#9dce0a}.invite-members-form .invite-members-single-send{font-size:1.2rem;display:block;margin:1.5rem 0 1rem;padding:1rem;width:100%}.invite-members-form .invite-members-single-help{font-size:.9rem}.lightbox-add-member .add-members-wrapper{max-width:900px;width:90%}.add-member-suggest .add-member-suggest-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:2rem 0 0}.add-member-suggest .add-member-suggest-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:0 15rem;position:relative}.add-member-suggest .add-member-suggest-filter-input{-ms-flex:1;flex:1;margin-right:.25rem}.add-member-suggest .add-member-suggest-filter-hint{font-size:.75rem;color:#767676;position:absolute;right:16rem;top:.5rem}.add-member-suggest .add-member-suggest-filter-hint.to-send{right:19rem}.add-member-suggest .add-member-suggest-filter-addmail{background:#444;border-radius:.25rem;padding:.5rem .75rem;transition:background .2s linear}.add-member-suggest .add-member-suggest-filter-addmail:hover{background:#050505}.add-member-suggest .add-member-suggest-filter-addmail svg{width:1.3rem;height:1.3rem;fill:#fff}.add-member-suggest .add-member-suggest-single{-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #e4e3e3;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:calc(25% - 1rem);flex-basis:calc(25% - 1rem);-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;padding:.2rem;transition:.2s linear}.add-member-suggest .add-member-suggest-single:hover{background:rgba(157,206,10,.1)}.add-member-suggest .add-member-suggest-single:nth-child(4n){margin-right:0}.add-member-suggest .add-member-suggest-avatar{-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;height:5rem;margin:.5rem;width:5rem}.notifications-list .entry .entry-project,.notifications-list .entry a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.navbar{display:-ms-flexbox;display:flex;height:40px;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar::after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.navbar .nav-left a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left .logo{background:rgba(0,0,0,.2);padding:.3rem .75rem}.navbar .nav-left svg{width:1.6rem;height:1.6rem}.navbar .nav-right{margin-left:auto}.navbar .nav-right .topnav-dropdown-wrapper>a,.navbar .nav-right>a{color:#fff;margin:0;padding:.5rem 2rem}.navbar .nav-right .active{background:rgba(255,255,255,.95);color:#718377}.navbar .nav-right svg{width:1.2rem;height:1.2rem;fill:rgba(135,155,137,.8);transition:all .2s linear}.navbar .nav-right>a,.navbar .topnav-dropdown-wrapper>a{color:#fff;display:inline-block;transition:all .2s linear}.navbar .nav-right>a:hover,.navbar .topnav-dropdown-wrapper>a:hover{background:rgba(0,0,0,.2);color:#9dce0a}.navbar .nav-right>a:hover svg,.navbar .topnav-dropdown-wrapper>a:hover svg{fill:#9dce0a;transition:all .2s linear}.navbar .nav-right>a.user-avatar,.navbar .topnav-dropdown-wrapper>a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar .nav-right>a.user-avatar span,.navbar .topnav-dropdown-wrapper>a.user-avatar span{padding-right:1rem}.navbar .user-avatar img{height:2.5rem;margin-left:.5rem;vertical-align:middle}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#050505;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.navbar-dropdown ul:after{border-color:rgba(5,5,5,0);border-bottom-color:#050505;border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-color:rgba(5,5,5,0);border-bottom-color:#050505;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown .plugin:hover .new{color:#fff}.navbar-dropdown .plugin .new{font-size:.9rem;background:#ff8282;float:right;margin-left:auto;padding:.1rem .25rem}.navbar-dropdown a{color:#767676;display:block;padding:.8rem .5rem}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#9dce0a}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-ms-flex:1;flex:1}.navbar-dropdown a.blocked-project{color:#555}.navbar-dropdown a.blocked-project svg{margin-left:.5rem;position:relative;top:.25rem}.navbar-dropdown .create-options{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@keyframes highlightFadeOut{0%{background:#9dce0a;font-size:.75rem;height:22px;left:49px;line-height:22px;top:-1px;width:22px}20%{font-size:.7rem;height:20px;left:50px;line-height:20px;top:0;width:20px}100%{background:#5b8200}}.topnav-dropdown-wrapper{position:relative}.topnav-dropdown-wrapper:hover .navbar-dropdown-notifications{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.topnav-dropdown-wrapper .counter{background:#5b8200;border-radius:50%;color:#fff;font-size:.7rem;height:18px;left:52px;line-height:18px;position:absolute;text-align:center;top:3px;width:18px}.topnav-dropdown-wrapper .counter.small{height:17px;line-height:17px;width:17px}.topnav-dropdown-wrapper .counter.large{height:22px;line-height:22px;top:2px;width:22px}.topnav-dropdown-wrapper .counter.counter-active{animation-duration:2s;animation-name:highlightFadeOut}.topnav-dropdown-wrapper .navbar-dropdown-notifications{background:#fff;border:1px solid #e4e3e3;border-radius:2px;box-shadow:0 0 3px 3px rgba(184,184,184,.2);color:#050505;display:none;left:calc(50% - 450px/2);margin-top:1px;min-width:450px;padding:0;position:absolute;top:2.4rem;z-index:999}.topnav-dropdown-wrapper .navbar-dropdown-notifications .empty{color:#767676;font-size:.9em;padding:1.5em 0;text-align:center;width:100%}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header{background:#f5f5f5;color:#555;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:.6rem .75rem}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after,.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header .notifications-title{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action{font-size:.9rem;padding-left:1.2rem;text-align:right}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action.disabled{color:#B8B8B8;cursor:default}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled){color:#5b8200}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled):hover{color:#9dce0a}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-wrapper{min-height:70px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-list{max-height:400px;overflow-y:auto}.notifications-page{margin-top:1.5em;min-width:initial;padding-bottom:5em}.notifications-page .header{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0;padding:.5em 1em}.notifications-page .title{color:#000;-ms-flex-positive:1;flex-grow:1;font-size:1.8em;line-height:1.8em;margin:0;text-transform:uppercase}.notifications-page .action{color:#5b8200;font-size:1em;line-height:.75em;margin-right:1em}.notifications-page .action.disabled{color:#B8B8B8}.notifications-page .action:not(.disabled):hover{color:#9dce0a}.notifications-page .empty{margin:4rem auto;text-align:center;width:100%}.notifications-page .notifications-list .entry{-ms-flex-align:center;align-items:center;font-size:.95rem;margin:.5rem 0;padding:1rem .6rem}.notifications-page .notifications-list .entry.new{background-color:#EFF3E3}.notifications-page .notifications-list .entry .entry-content{font-size:1.05rem}.notifications-page .notifications-list .entry .entry-project{max-width:initial;text-overflow:initial;white-space:initial}.notifications-page .notifications-list .entry .entry-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:1rem;width:3rem}.notifications-page .notifications-list .entry .entry-date{font-size:.85rem;margin-right:.5rem}.notifications-list .entry{color:#050505;display:-ms-flexbox;display:flex;font-size:.9rem;margin:0 .8rem;padding:.8rem 0;position:relative}.notifications-list .entry:not(:last-child){border-bottom:1px solid #e4e3e3}.notifications-list .entry p{line-height:1.25em;margin-bottom:0}.notifications-list .entry a.project-link,.notifications-list .entry a.user-link{color:#050505}.notifications-list .entry a.object-link{color:#5b8200}.notifications-list .entry a:hover{color:#9dce0a}.notifications-list .entry .entry-avatar{border-radius:.1rem;-ms-flex-preferred-size:2.5rem;flex-basis:2.5rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.7rem;vertical-align:center;width:2.5rem}.notifications-list .entry .entry-avatar img{width:100%}.notifications-list .entry .entry-content{-ms-flex-positive:1;flex-grow:1;line-height:1.1em;margin-right:.7rem}.notifications-list .entry .entry-project{color:#B8B8B8;display:inline-block;font-size:.9rem;margin-top:.5em;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notifications-list .spin img,.profile .timeline-wrapper .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;transform-origin:32 32;max-height:3rem;max-width:3rem}.notifications-list .entry .entry-date{font-size:.7rem;white-space:nowrap}.notifications-list .spin{margin:5% auto;width:3rem}.notifications-list .spin img{margin:0 auto}.profile-favs{border-top:1px solid #e4e3e3}.profile-filter{-ms-flex-align:center;align-items:center;background:#e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile-filter .searchbox{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{fill:#555;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-ms-flex:1;flex:1;margin-right:1rem}.import-project-asana-form-selector li:first-child,.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs{border-top:1px solid #e4e3e3}.profile-filter .searchbox input:focus{border-bottom:1px solid #767676;outline:0;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#767676;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#050505}.profile{display:-ms-flexbox;display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .timeline-wrapper .spin img{margin:0 auto}.profile .profile-sidebar{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{fill:#e4e3e3;height:10rem;margin:2rem auto;text-align:center;width:10rem}.profile .empty-tab p{color:#767676;font-size:.9rem;margin:0}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{filter:brightness(40%) saturate(150%) hue-rotate(60deg);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;transform:translateY(0);transition:all .2s cubic-bezier(.01,.7,1,1);transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#767676;transition:all .2s linear}.profile-bar .flag:hover path{fill:red;transition:all .2s linear}.profile-bar h1{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:2rem;line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar h2{font-size:1.6rem;color:#555;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#767676;margin-bottom:1rem}.profile-bar .username{font-size:1.2rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#767676}.profile-bar .profile-stats{border-bottom:1px solid #e4e3e3;color:#555;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;display:block;line-height:1}.profile-bar .profile-stats .stat-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:.9rem;display:block}.profile-bar .profile-quote{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;background:url(../images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contacts{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{color:#767676;display:inline-block;padding:1rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#555;transition:color .2s linear}.profile-content-tabs .tab.active .icon,.profile-content-tabs .tab:hover .icon{fill:#9dce0a}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #e4e3e3;border-right:1px solid #e4e3e3;position:relative;top:1px;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#5b8200}.profile-content-tabs .icon{fill:#767676;height:.8rem;margin-right:.5rem;transition:fill .2s linear}.profile-sidebar h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin-bottom:.5rem;padding:.5rem}.contact-team-large,.import-project-asana-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-sidebar h4 .icon{fill:#767676;margin-right:.3rem;margin-top:-3px;vertical-align:middle}.profile-sidebar p{font-size:.9rem;color:#767676}.profile-sidebar a{color:#5b8200}.contact-team{margin-left:.75rem}.contact-team-large{font-size:.9rem;-ms-flex-pack:center;justify-content:center;margin-left:0;width:100%}.contact-team-large .icon-mail{margin-right:.5rem;vertical-align:center}.lightbox-contact-project{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-contact-project-container{max-width:600px;text-align:center;width:90%}.lightbox-contact-project-logo{width:5rem}.lightbox-contact-project-title{margin:0}.lightbox-contact-project-name{font-size:1.6rem;color:#5b8200;margin-bottom:1rem}.lightbox-contact-project-message{max-height:400px}.lightbox-contact-project-button{display:block;margin-top:.5rem;width:100%}.import-project-asana-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-asana-form{width:90%;min-width:0}}.import-project-asana-form fieldset{margin-bottom:1rem}.import-project-asana-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-asana-form label span{font-size:.9rem}.import-project-asana-form label .mumble{margin-left:.25rem}.import-project-asana-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-asana-form-check span{display:block}.import-project-asana-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-asana-form-check .check{position:absolute;right:0;top:0}.import-project-asana-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-asana-form-title-wrapper .create-project-title{display:inline-block}.import-project-asana-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-description,.import-project-asana-form-title{margin:0;text-align:center}.import-project-asana-form-description{color:#767676;margin-bottom:2rem}.import-project-asana-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.import-project-asana-form-import-type input:checked+label,.import-project-asana-form-privacity input:checked+label,.import-project-asana-form-selector-template,.import-project-asana-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-asana-form-import-type{display:-ms-flexbox;display:flex}.import-project-asana-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-import-type label .icon{margin-right:.25rem}.import-project-asana-form-import-type input:checked+label{background:#dcdcdc}.import-project-asana-form-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-asana-form-import-type input:disabled+label .icon{color:#9c9c9c}.import-project-asana-form-import-type input{display:none}.import-project-asana-form-import-type label{background:#f5f5f5}.import-project-asana-form-privacity{display:-ms-flexbox;display:flex}.import-project-asana-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-privacity input:checked+label{background:#dcdcdc}.import-project-asana-form-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-asana-form-privacity input:disabled+label .icon{color:#9c9c9c}.import-project-asana-form-privacity input{display:none}.import-project-asana-form-privacity label{background:#f5f5f5}.import-project-asana-form-privacity label .icon{margin-right:.5em}.import-project-asana-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-asana-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-asana-form-type span{margin-left:.5rem}.import-project-asana-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-asana-form-action-back,.import-project-asana-form-action-cancel,.import-project-asana-form-selector a:hover{color:currentColor}.import-project-asana-form-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-asana-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-asana-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-asana-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-asana-form-selector-template{text-transform:uppercase}.import-project-asana-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-asana-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-asana-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-asana-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-asana-form-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.import-project-asana-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.import-project-asana-form-selector p{margin-bottom:0}.import-project-asana-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-asana-form-action button{font-size:1.2rem;padding:.75rem}.import-project-asana-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-asana-form-action-back:hover,.import-project-asana-form-action-cancel:hover{color:#9dce0a}.import-project-asana-form-action-cancel{-ms-flex:1;flex:1}.import-project-asana-form-action-back{width:10%}.import-project-asana-form-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-asana-form-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.import-project-asana-form .spin{text-align:center;width:100%}.create-project-asana-import-type{margin-bottom:1rem;text-align:center}.create-project-asana-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-asana-import-type fieldset{background:#fff;border-right:1px solid #e4e3e3;transition:background .2s linear}.create-project-asana-import-type fieldset:last-child{border:0}.create-project-asana-import-type input{display:none}.create-project-asana-import-type input:checked+label{background:rgba(91,130,0,.1)}.create-project-asana-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-asana-import-type label:hover{background:rgba(91,130,0,.1);cursor:pointer}.create-project-asana-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-asana-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.create-project{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.create-project{width:90%;min-width:0}}.create-project fieldset{margin-bottom:1rem}.create-project label{display:block;margin-bottom:.25rem;max-height:44px}.create-project label span{font-size:.9rem}.create-project label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.create-project-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.create-project-check span{display:block}.create-project-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-check .check{position:absolute;right:0;top:0}.create-project-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.create-project-title-wrapper .create-project-title{display:inline-block}.create-project-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.create-project-description,.create-project-title{margin:0;text-align:center}.create-project-description{color:#767676;margin-bottom:2rem}.create-project-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.create-project-import-type input:checked+label,.create-project-privacity input:checked+label,.create-project-selector-template,.create-project-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-import-type{display:-ms-flexbox;display:flex}.create-project-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.create-project-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-import-type label .icon{margin-right:.25rem}.create-project-import-type input:checked+label{background:#dcdcdc}.create-project-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.create-project-import-type input:disabled+label .icon{color:#9c9c9c}.create-project-import-type input{display:none}.create-project-import-type label{background:#f5f5f5}.create-project-privacity{display:-ms-flexbox;display:flex}.create-project-privacity label,.create-project-type{-ms-flex-align:center;display:-ms-flexbox;text-transform:uppercase}.create-project-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-privacity label{align-items:center;cursor:pointer;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem}.create-project-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-privacity input:checked+label{background:#dcdcdc}.create-project-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.create-project-privacity input:disabled+label .icon{color:#9c9c9c}.create-project-privacity input{display:none}.create-project-privacity label{background:#f5f5f5}.create-project-privacity label .icon{margin-right:.5em}.create-project-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.create-project-type{align-items:center;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem}.create-project-type span{margin-left:.5rem}.create-project-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.create-project-action-back,.create-project-action-cancel,.create-project-selector a:hover{color:currentColor}.create-project-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.create-project-selector li:first-child{border-top:1px solid #e4e3e3}.create-project-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.create-project-selector-icon .icon{width:2.25rem;height:2.25rem}.create-project-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.create-project-selector-template{text-transform:uppercase}.create-project-selector-description,.import-project-github-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.create-project-selector-long-description.ng-hide{line-height:0;max-height:0}.create-project-selector-question{position:absolute;right:1.5rem;top:1.5rem}.create-project-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.create-project-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.create-project-selector p{margin-bottom:0}.create-project-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.create-project-action button{font-size:1.2rem;padding:.75rem}.create-project-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.create-project-action-back:hover,.create-project-action-cancel:hover{color:#9dce0a}.create-project-action-cancel{-ms-flex:1;flex:1}.create-project-action-back{width:10%}.create-project-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.create-project-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.create-project-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.create-project .spin{text-align:center;width:100%}.duplicate-project-reference{margin-bottom:2rem}.import-project-github-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-github-form{width:90%;min-width:0}}.import-project-github-form fieldset{margin-bottom:1rem}.import-project-github-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-github-form label span{font-size:.9rem}.import-project-github-form label .mumble{margin-left:.25rem}.import-project-github-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-github-form-check span{display:block}.import-project-github-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-github-form-check .check{position:absolute;right:0;top:0}.import-project-github-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-github-form-title-wrapper .create-project-title{display:inline-block}.import-project-github-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-github-form-description,.import-project-github-form-title{margin:0;text-align:center}.import-project-github-form-description{color:#767676;margin-bottom:2rem}.import-project-github-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.import-project-github-form-import-type input:checked+label,.import-project-github-form-privacity input:checked+label,.import-project-github-form-selector-template,.import-project-github-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-github-form-import-type{display:-ms-flexbox;display:flex}.import-project-github-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-import-type label .icon{margin-right:.25rem}.import-project-github-form-import-type input:checked+label{background:#dcdcdc}.import-project-github-form-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-github-form-import-type input:disabled+label .icon{color:#9c9c9c}.import-project-github-form-import-type input{display:none}.import-project-github-form-import-type label{background:#f5f5f5}.import-project-github-form-privacity{display:-ms-flexbox;display:flex}.import-project-github-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-privacity input:checked+label{background:#dcdcdc}.import-project-github-form-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-github-form-privacity input:disabled+label .icon{color:#9c9c9c}.import-project-github-form-privacity input{display:none}.import-project-github-form-privacity label{background:#f5f5f5}.import-project-github-form-privacity label .icon{margin-right:.5em}.import-project-github-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-github-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-github-form-type span{margin-left:.5rem}.import-project-github-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-github-form-action-back,.import-project-github-form-action-cancel,.import-project-github-form-selector a:hover{color:currentColor}.import-project-github-form-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-github-form-selector li:first-child{border-top:1px solid #e4e3e3}.import-project-github-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-github-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-github-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-github-form-selector-template{text-transform:uppercase}.import-project-github-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-github-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-github-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-github-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-github-form-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.import-project-github-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.import-project-github-form-selector p{margin-bottom:0}.import-project-github-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-github-form-action button{font-size:1.2rem;padding:.75rem}.import-project-github-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-github-form-action-back:hover,.import-project-github-form-action-cancel:hover{color:#9dce0a}.import-project-github-form-action-cancel{-ms-flex:1;flex:1}.import-project-github-form-action-back{width:10%}.import-project-github-form-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-github-form-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.import-project-github-form-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.import-project-github-form .spin{text-align:center;width:100%}.create-project-github-import-type{margin-bottom:1rem;text-align:center}.create-project-github-import-type p{margin-bottom:.5rem}.create-project-github-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-github-import-type fieldset{background:#fff;border-right:1px solid #e4e3e3;transition:background .2s linear}.create-project-github-import-type fieldset:last-child{border:0}.create-project-github-import-type input{display:none}.create-project-github-import-type input:checked+label{background:rgba(91,130,0,.1)}.create-project-github-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-github-import-type label:hover{background:rgba(91,130,0,.1);cursor:pointer}.create-project-github-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-github-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.import-project-members{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-members{width:90%;min-width:0}}.import-project-members .avatar{width:48px}.import-project-members-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:0}.import-project-description,.import-project-jira-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-members-system{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0 0;padding:.5rem 0}.import-project-members-system img{width:100%}.import-project-members-logo{max-height:3rem;max-width:3rem}.import-project-members-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;border-top:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.import-project-members-row:hover .import-project-members-delete{opacity:1;transition:all .2s ease-in}.import-project-members-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-username{margin-left:1rem}.import-project-members .avatar.empty{background-color:#e4e3e3;line-height:3rem;text-align:center;width:3rem}.import-project-members-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-delete{background:0 0;opacity:0;padding:.25rem .5rem}.import-project-members-delete svg{width:.75rem;height:.75rem;fill:red}.import-project-members-match{color:#767676}.import-project-members-match button{background:#fff;border-radius:50%;padding:.25rem .5rem}.import-project-members-match button svg{width:.75rem;height:.75rem}.import-project-members-match-true{border:1px solid #5b8200;margin:0 .1rem 0 .25rem;transition:background .2s}.import-project-members-match-true:hover{background:rgba(157,206,10,.3)}.import-project-members-match-true svg{fill:#5b8200}.import-project-members-match-false{border:1px solid red;margin:0 .25rem 0 .1rem;transition:background .2s}.import-project-members-match-false:hover{background:rgba(255,0,0,.3)}.import-project-members-match-false svg{fill:red}.import-project-members-choose{color:#5b8200;padding-right:0;text-transform:lowercase}.import-project-members-choose:hover{color:#9dce0a}.import-project-members-selected{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-selected-img{margin-left:.5rem;max-width:3rem}.import-project-members-selected img{width:100%}.import-project-members-submit{display:block;margin:2rem auto 0;padding:.75rem 4rem}.import-project-selector{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-selector{width:90%;min-width:0}}.import-project-selector .import-project-selector-service img{display:block;margin:1rem auto;width:4rem}.import-project-selector .import-project-selector-filter{-ms-flex-align:center;align-items:center;background:#e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem}.import-project-selector .import-project-selector-filter input{background:#f5f5f5;border:0;-ms-flex:1;flex:1;padding:.5rem}.import-project-from-site,.import-project-selector .import-project-selector-title{border-bottom:1px solid #e4e3e3;padding:1rem}.import-project-selector .import-project-selector-filter svg{width:1rem;height:1rem;fill:#555;margin:0 1rem}.import-project-selector .import-project-selector-title:hover{background:rgba(91,130,0,.1);cursor:pointer}.import-project-from-site{-ms-flex-align:center;align-items:center;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;position:relative}.import-project-from-site:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-from-site:first-child{border-top:1px solid #e4e3e3}.import-project-from-site:first-child .import-project-name{margin:0}.import-project-from-site:first-child .import-project-logo img{padding:0 .9rem 0 1rem;width:5.1rem}.import-project-logo{-ms-flex-item-align:start;align-self:flex-start;margin-right:.5rem}.import-project-logo img{padding:0 1rem;width:5rem}.import-project-name-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.import-project-description{margin-bottom:0}.import-project-description a{color:#5b8200;margin-left:.3rem}.import-project-url{margin-top:.5rem}.import-project-input{vertical-align:middle}.import-project-button{background:#5b8200;color:#fff;padding:.4rem 1rem}.create-project-invite-avatars{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.create-project-invite-avatar{cursor:pointer;display:block;margin-right:.25rem}.create-project-invite-avatar:hover{background:#f5f5f5;position:relative;border:0;opacity:.9;transition:all .2s;transition-delay:.2s}.create-project-invite-avatar:hover:after,.create-project-invite-avatar:hover:before{content:"";width:2px;height:66px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled{opacity:.3;transition:opacity .2s}.create-project-invite-avatar.disabled:hover{background:#f5f5f5;position:relative;border:0;opacity:.6;transition:all .2s ease-in}.create-project-invite-avatar.disabled:hover:after,.create-project-invite-avatar.disabled:hover:before{content:"";width:2px;height:33px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar.disabled:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar.disabled:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled:hover::after{background:#444;left:24px;top:8px;transform:rotate(0);transform-origin:center}.create-project-invite-avatar.disabled:hover::before{background:#444;right:22px;top:8px;transform:rotate(90deg);transform-origin:center}.create-project-invite-avatar img{cursor:pointer;width:3rem}.import-project-jira-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-jira-form{width:90%;min-width:0}}.import-project-jira-form fieldset{margin-bottom:1rem}.import-project-jira-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-jira-form label span{font-size:.9rem}.import-project-jira-form label .mumble{margin-left:.25rem}.import-project-jira-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-jira-form-check span{display:block}.import-project-jira-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-jira-form-check .check{position:absolute;right:0;top:0}.import-project-jira-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-jira-form-title-wrapper .create-project-title{display:inline-block}.import-project-jira-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-description,.import-project-jira-form-title{margin:0;text-align:center}.import-project-jira-form-description{color:#767676;margin-bottom:2rem}.import-project-jira-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.import-project-jira-form-import-type input:checked+label,.import-project-jira-form-privacity input:checked+label,.import-project-jira-form-selector-template,.import-project-jira-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-jira-form-import-type{display:-ms-flexbox;display:flex}.import-project-jira-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-import-type label .icon{margin-right:.25rem}.import-project-jira-form-import-type input:checked+label{background:#dcdcdc}.import-project-jira-form-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-jira-form-import-type input:disabled+label .icon{color:#9c9c9c}.import-project-jira-form-import-type input{display:none}.import-project-jira-form-import-type label{background:#f5f5f5}.import-project-jira-form-privacity{display:-ms-flexbox;display:flex}.import-project-jira-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-privacity input:checked+label{background:#dcdcdc}.import-project-jira-form-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-jira-form-privacity input:disabled+label .icon{color:#9c9c9c}.import-project-jira-form-privacity input{display:none}.import-project-jira-form-privacity label{background:#f5f5f5}.import-project-jira-form-privacity label .icon{margin-right:.5em}.import-project-jira-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-jira-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-jira-form-type span{margin-left:.5rem}.import-project-jira-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-jira-form-action-back,.import-project-jira-form-action-cancel,.import-project-jira-form-selector a:hover{color:currentColor}.import-project-jira-form-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-jira-form-selector li:first-child{border-top:1px solid #e4e3e3}.import-project-jira-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-jira-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-jira-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-jira-form-selector-template{text-transform:uppercase}.create-project-import-type-info,.import-project-jira-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-jira-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-jira-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-jira-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-jira-form-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.import-project-jira-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.import-project-jira-form-selector p{margin-bottom:0}.import-project-jira-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-jira-form-action button{font-size:1.2rem;padding:.75rem}.import-project-jira-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-jira-form-action-back:hover,.import-project-jira-form-action-cancel:hover{color:#9dce0a}.import-project-jira-form-action-cancel{-ms-flex:1;flex:1}.import-project-jira-form-action-back{width:10%}.import-project-jira-form-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-jira-form-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.import-project-jira-form .spin{text-align:center;width:100%}.create-project-import-type-info{font-size:.9rem;margin-bottom:1rem}.create-project-type-issues-subform{margin:1rem 0 2rem}.create-project-type-issues-subform-title{font-size:.9rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-type-issues-subform-radiogr input{opacity:0}.create-project-type-issues-subform-radiogr input:checked+svg{fill:rgba(91,130,0,.6);stroke:rgba(91,130,0,.1)}.create-project-type-issues-subform-radiogr svg{fill:#e4e3e3;stroke:#cbc9c9;stroke-width:1px;vertical-align:middle}.create-project-type-issues-subform-radiogr .control-indicator{padding-left:.25rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-import-type{margin-bottom:.25rem}.create-project-import-type fieldset{margin:0}tg-select-import-user-lightbox .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}tg-select-import-user-lightbox .candidate-user{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1.5rem}tg-select-import-user-lightbox .candidate-user .candidate-user-name{margin-left:.5rem}tg-select-import-user-lightbox .candidate-user .user-list-avatar{background-color:red;height:32px;margin-right:.5rem;width:32px}tg-select-import-user-lightbox .error{color:#ff8282;text-align:center}tg-select-import-user-lightbox .more-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;padding:1rem;text-align:center}tg-select-import-user-lightbox .group{display:-ms-flexbox;display:flex}tg-select-import-user-lightbox .group input{-ms-flex-positive:2;flex-grow:2;margin-right:.5rem}tg-select-import-user-lightbox .group .submit-button{-ms-flex-positive:0;flex-grow:0;width:auto}tg-select-import-user-lightbox .search-user-mode{font-size:.9rem;background:0 0;margin-top:2rem;padding:.5rem;text-align:left;transition:.2s;width:100%}tg-select-import-user-lightbox .search-user-mode:hover{color:#5b8200}tg-select-import-user-lightbox label{display:block;padding-bottom:.5rem}.import-project-trello-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-trello-form{width:90%;min-width:0}}.import-project-trello-form fieldset{margin-bottom:1rem}.import-project-trello-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-trello-form label span{font-size:.9rem}.import-project-trello-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.import-project-trello-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-trello-form-check span{display:block}.import-project-trello-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-trello-form-check .check{position:absolute;right:0;top:0}.import-project-trello-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-trello-form-title-wrapper .create-project-title{display:inline-block}.import-project-trello-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-description,.import-project-trello-form-title{margin:0;text-align:center}.import-project-trello-form-description{color:#767676;margin-bottom:2rem}.import-project-trello-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.import-project-trello-form-import-type input:checked+label,.import-project-trello-form-privacity input:checked+label,.import-project-trello-form-selector-template,.import-project-trello-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-trello-form-import-type{display:-ms-flexbox;display:flex}.import-project-trello-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-import-type label .icon{margin-right:.25rem}.import-project-trello-form-import-type input:checked+label{background:#dcdcdc}.import-project-trello-form-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-trello-form-import-type input:disabled+label .icon{color:#9c9c9c}.import-project-trello-form-import-type input{display:none}.import-project-trello-form-import-type label{background:#f5f5f5}.import-project-trello-form-privacity{display:-ms-flexbox;display:flex}.import-project-trello-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-privacity input:checked+label{background:#dcdcdc}.import-project-trello-form-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-trello-form-privacity input:disabled+label .icon{color:#9c9c9c}.import-project-trello-form-privacity input{display:none}.import-project-trello-form-privacity label{background:#f5f5f5}.import-project-trello-form-privacity label .icon{margin-right:.5em}.import-project-trello-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-trello-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-trello-form-type span{margin-left:.5rem}.import-project-trello-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-trello-form-action-back,.import-project-trello-form-action-cancel,.import-project-trello-form-selector a:hover{color:currentColor}.import-project-trello-form-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-trello-form-selector li:first-child{border-top:1px solid #e4e3e3}.import-project-trello-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-trello-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-trello-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-trello-form-selector-template{text-transform:uppercase}.import-project-trello-form-selector-description,.project-list-wrapper .project-list-title h1,.transfer-project .transfer-title,.transfer-project-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-trello-form-selector-long-description{margin-top:1rem;max-height:120px;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-trello-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-trello-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-trello-form-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.import-project-trello-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.import-project-trello-form-selector p{margin-bottom:0}.import-project-trello-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-trello-form-action button{font-size:1.2rem;padding:.75rem}.import-project-trello-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-trello-form-action-back:hover,.import-project-trello-form-action-cancel:hover{color:#9dce0a}.import-project-trello-form-action-cancel{-ms-flex:1;flex:1}.import-project-trello-form-action-back{width:10%}.import-project-trello-form-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.profile-projects,.profile-timeline,.transfer-project-detail{border-top:1px solid #e4e3e3}.import-project-trello-form-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.import-project-trello-form .spin{text-align:center;width:100%}.warning-users-import-lightbox{max-width:600px}.warning-users-import-lightbox .warning-users-import-title{text-align:center}.warning-users-import-lightbox .actions{display:-ms-flexbox;display:flex;margin:2rem}.warning-users-import-lightbox .actions button{-ms-flex:1;flex:1}.warning-users-import-lightbox .actions button:first-child{-ms-flex:0;flex:0;-ms-flex-preferred-size:40%;flex-basis:40%;margin-right:.5rem}.warning-users-import-lightbox .actions .button-trans{color:#444}.profile-projects .list-itemtype-project{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:9rem;padding:.75rem}.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-image,.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-right,.profile-projects .list-itemtype-project.blocked-project .project-description,.profile-projects .list-itemtype-project.blocked-project .project-title{opacity:.4}.profile-projects .list-itemtype-project .project-list-single-title-wrapper{display:-ms-flexbox;display:flex}.profile-projects .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0}.profile-projects .list-itemtype-project .list-itemtype-project-right{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;width:200px}.profile-projects .list-itemtype-project .icon-blocked-project{width:1rem;height:1rem;fill:#fff;stroke:#ff8282}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;margin:0}.project-list-wrapper .icon-badge,.project-list-wrapper .icon-blocked-project,.project-list-wrapper .icon-private{width:1rem;height:1rem}.project-list-wrapper .icon-badge{fill:#9dce0a;margin-left:.5rem;stroke:#9dce0a}.project-list-wrapper .create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .import-project-button{padding:.53rem .8rem}.project-list-wrapper .import-project-button:hover .icon-upload{fill:#9dce0a}.project-list-wrapper .import-project-button .icon-upload{fill:#fff}.project-list-wrapper .project-list-section{display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .help-area{font-size:.9rem;color:#767676;width:200px}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:rgba(157,206,10,.1);cursor:move;transition:background .3s}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .list-itemtype-project.blocked-project .icon-badge,.project-list-wrapper .list-itemtype-project.blocked-project .list-itemtype-project-image,.project-list-wrapper .list-itemtype-project.blocked-project .private,.project-list-wrapper .list-itemtype-project.blocked-project .project-description,.project-list-wrapper .list-itemtype-project.blocked-project .project-title{opacity:.25}.project-list-wrapper .list-itemtype-project.blocked-project:hover .icon-drag{opacity:1}.project-list-wrapper .list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.project-list-wrapper .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.project-list-wrapper .drag{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;opacity:0}.project-list-wrapper .drag svg{fill:#767676;height:1.1rem;margin-right:.5rem;transition:opacity .2s;width:1.1rem}.project-list-wrapper .gu-transit{background-color:#ecebeb;height:5rem;opacity:1}.project-list-wrapper .gu-transit *{display:none}.project-list-wrapper .gu-mirror{background:#edffc4;opacity:1}.blocked-project-detail,.transfer-project{background:url(../images/discover.png) bottom center repeat-x;min-height:calc(100vh - 40px)}.blocked-project-detail{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center;min-width:100vw;width:100vw}.blocked-project-inner{width:330px}.blocked-project-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.blocked-project-title .project-image{-ms-flex-preferred-size:6rem;flex-basis:6rem;margin-right:1rem;max-width:6rem;position:relative}.blocked-project-title img{width:100%}.blocked-project-title .icon-blocked-project{width:1.5rem;height:1.5rem;position:absolute;right:-.5rem;top:-.5rem}.blocked-project-title .project-title{font-size:1.6rem}.blocked-project-message{margin-top:4rem;text-align:center}.blocked-project-message .project-block-title{font-size:2rem}.transfer-project-wrapper{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;width:90%}.transfer-project{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center}.master,body{background:#fff}.transfer-project-detail{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin:1rem 0 3rem;padding:1rem 0}.transfer-project-image{margin-right:1rem;width:4rem}.transfer-project-title{font-size:1.6rem;margin-bottom:.25rem}.transfer-project-statistics span{color:#767676;margin-right:.5rem}.transfer-project-statistics svg{fill:#767676;margin-right:.25rem}.transfer-project-private{text-transform:uppercase}.transfer-project-comment-link{color:#5b8200;cursor:pointer;display:block;margin-bottom:1rem}.transfer-project-comment-link:hover{color:#9dce0a}.transfer-project-comment-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.transfer-project-comment-header .icon-close{cursor:pointer;fill:#767676}.transfer-project-comment-header .icon-close:hover{fill:#ff8282;transition:fill .2s}.transfer-project-comment-form.ng-enter{animation:dropdownFade .2s}.transfer-project-comment-label{display:block;margin-bottom:.5rem}.transfer-project-comment{margin-bottom:1rem;min-height:6rem}.transfer-project-options{display:-ms-flexbox;display:flex}.transfer-project-options a{font-size:1.2rem;display:block;-ms-flex:1;flex:1;padding:.75rem}.transfer-project-options a:first-child{margin-right:.5rem}.profile-timeline .activity-item{border-bottom:1px solid #e4e3e3;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#5b8200}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#555}.profile-timeline .activity-item a:hover{color:#9dce0a}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-ms-flex-align:center;align-items:center;color:#767676;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#767676;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-item .new-color{border-radius:50%;display:inline-block;height:1rem;margin-left:.2rem;position:relative;top:.1rem;width:1rem}.profile-timeline .activity-member-view{display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-ms-flex:1;flex:1}.profile-timeline .activity-member-view a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.profile-timeline .activity-member-view p{color:#767676}a,body{color:#444}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:sub;white-space:nowrap}.profile-timeline .single-attachment .icon{fill:#444;margin-right:.5rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.wiki-history{margin-bottom:2rem}:root .taskboard-table-body .taskboard-row,_:-ms-fullscreen .taskboard-row{min-height:auto}svg{pointer-events:none}a[ng-click] svg{pointer-events:auto}tg-card .card-title span:last-child{word-break:break-word}.menu-secondary{background:#f5f5f5}.menu-tertiary{background-color:#879b89}.extrabar{background:#f5f5f5}h1,h2,h3,h4,h5,h6{color:#050505}a:hover{color:#5b8200}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{background:#f5f5f5;border-color:#767676;color:#444}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=url]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#909090}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=url]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#909090}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=url]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#909090}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#909090}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid red}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,0,0,.7);color:#fff}blockquote{border-left:5px solid #f5f5f5}blockquote,blockquote p,cite{color:#555}.summary{background:#444;color:#fff}.navbar{background:rgba(0,0,0,.5)}.navbar::after{background:url(../images/menu-vert.png) top left}tg-project-menu{background-color:#879b89;background-image:url(../images/menu.png)}.kanban-table-body .kanban-uses-box,.kanban-table-header .task-colum-name,.taskboard-table-body .taskboard-cards-box{background:#f5f5f5}.main-nav svg{fill:#fff}.taskboard-table-header .task-colum-name{background:#f5f5f5;border-top:3px solid #767676}.taskboard-table-header .task-colum-name .icon{fill:#767676}.kanban-table-header .task-colum-name{border-top:3px solid #767676}.kanban-table-header .task-colum-name .icon{color:#767676} \ No newline at end of file diff --git a/dist/v-1547534999795/emojis/0023-20e3.png b/dist/v-1549282893552/emojis/0023-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0023-20e3.png rename to dist/v-1549282893552/emojis/0023-20e3.png diff --git a/dist/v-1547534999795/emojis/002a-20e3.png b/dist/v-1549282893552/emojis/002a-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/002a-20e3.png rename to dist/v-1549282893552/emojis/002a-20e3.png diff --git a/dist/v-1547534999795/emojis/0030-20e3.png b/dist/v-1549282893552/emojis/0030-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0030-20e3.png rename to dist/v-1549282893552/emojis/0030-20e3.png diff --git a/dist/v-1547534999795/emojis/0031-20e3.png b/dist/v-1549282893552/emojis/0031-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0031-20e3.png rename to dist/v-1549282893552/emojis/0031-20e3.png diff --git a/dist/v-1547534999795/emojis/0032-20e3.png b/dist/v-1549282893552/emojis/0032-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0032-20e3.png rename to dist/v-1549282893552/emojis/0032-20e3.png diff --git a/dist/v-1547534999795/emojis/0033-20e3.png b/dist/v-1549282893552/emojis/0033-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0033-20e3.png rename to dist/v-1549282893552/emojis/0033-20e3.png diff --git a/dist/v-1547534999795/emojis/0034-20e3.png b/dist/v-1549282893552/emojis/0034-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0034-20e3.png rename to dist/v-1549282893552/emojis/0034-20e3.png diff --git a/dist/v-1547534999795/emojis/0035-20e3.png b/dist/v-1549282893552/emojis/0035-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0035-20e3.png rename to dist/v-1549282893552/emojis/0035-20e3.png diff --git a/dist/v-1547534999795/emojis/0036-20e3.png b/dist/v-1549282893552/emojis/0036-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0036-20e3.png rename to dist/v-1549282893552/emojis/0036-20e3.png diff --git a/dist/v-1547534999795/emojis/0037-20e3.png b/dist/v-1549282893552/emojis/0037-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0037-20e3.png rename to dist/v-1549282893552/emojis/0037-20e3.png diff --git a/dist/v-1547534999795/emojis/0038-20e3.png b/dist/v-1549282893552/emojis/0038-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0038-20e3.png rename to dist/v-1549282893552/emojis/0038-20e3.png diff --git a/dist/v-1547534999795/emojis/0039-20e3.png b/dist/v-1549282893552/emojis/0039-20e3.png similarity index 100% rename from dist/v-1547534999795/emojis/0039-20e3.png rename to dist/v-1549282893552/emojis/0039-20e3.png diff --git a/dist/v-1547534999795/emojis/1f004.png b/dist/v-1549282893552/emojis/1f004.png similarity index 100% rename from dist/v-1547534999795/emojis/1f004.png rename to dist/v-1549282893552/emojis/1f004.png diff --git a/dist/v-1547534999795/emojis/1f0cf.png b/dist/v-1549282893552/emojis/1f0cf.png similarity index 100% rename from dist/v-1547534999795/emojis/1f0cf.png rename to dist/v-1549282893552/emojis/1f0cf.png diff --git a/dist/v-1547534999795/emojis/1f170.png b/dist/v-1549282893552/emojis/1f170.png similarity index 100% rename from dist/v-1547534999795/emojis/1f170.png rename to dist/v-1549282893552/emojis/1f170.png diff --git a/dist/v-1547534999795/emojis/1f171.png b/dist/v-1549282893552/emojis/1f171.png similarity index 100% rename from dist/v-1547534999795/emojis/1f171.png rename to dist/v-1549282893552/emojis/1f171.png diff --git a/dist/v-1547534999795/emojis/1f17e.png b/dist/v-1549282893552/emojis/1f17e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f17e.png rename to dist/v-1549282893552/emojis/1f17e.png diff --git a/dist/v-1547534999795/emojis/1f17f.png b/dist/v-1549282893552/emojis/1f17f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f17f.png rename to dist/v-1549282893552/emojis/1f17f.png diff --git a/dist/v-1547534999795/emojis/1f18e.png b/dist/v-1549282893552/emojis/1f18e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f18e.png rename to dist/v-1549282893552/emojis/1f18e.png diff --git a/dist/v-1547534999795/emojis/1f191.png b/dist/v-1549282893552/emojis/1f191.png similarity index 100% rename from dist/v-1547534999795/emojis/1f191.png rename to dist/v-1549282893552/emojis/1f191.png diff --git a/dist/v-1547534999795/emojis/1f192.png b/dist/v-1549282893552/emojis/1f192.png similarity index 100% rename from dist/v-1547534999795/emojis/1f192.png rename to dist/v-1549282893552/emojis/1f192.png diff --git a/dist/v-1547534999795/emojis/1f193.png b/dist/v-1549282893552/emojis/1f193.png similarity index 100% rename from dist/v-1547534999795/emojis/1f193.png rename to dist/v-1549282893552/emojis/1f193.png diff --git a/dist/v-1547534999795/emojis/1f194.png b/dist/v-1549282893552/emojis/1f194.png similarity index 100% rename from dist/v-1547534999795/emojis/1f194.png rename to dist/v-1549282893552/emojis/1f194.png diff --git a/dist/v-1547534999795/emojis/1f195.png b/dist/v-1549282893552/emojis/1f195.png similarity index 100% rename from dist/v-1547534999795/emojis/1f195.png rename to dist/v-1549282893552/emojis/1f195.png diff --git a/dist/v-1547534999795/emojis/1f196.png b/dist/v-1549282893552/emojis/1f196.png similarity index 100% rename from dist/v-1547534999795/emojis/1f196.png rename to dist/v-1549282893552/emojis/1f196.png diff --git a/dist/v-1547534999795/emojis/1f197.png b/dist/v-1549282893552/emojis/1f197.png similarity index 100% rename from dist/v-1547534999795/emojis/1f197.png rename to dist/v-1549282893552/emojis/1f197.png diff --git a/dist/v-1547534999795/emojis/1f198.png b/dist/v-1549282893552/emojis/1f198.png similarity index 100% rename from dist/v-1547534999795/emojis/1f198.png rename to dist/v-1549282893552/emojis/1f198.png diff --git a/dist/v-1547534999795/emojis/1f199.png b/dist/v-1549282893552/emojis/1f199.png similarity index 100% rename from dist/v-1547534999795/emojis/1f199.png rename to dist/v-1549282893552/emojis/1f199.png diff --git a/dist/v-1547534999795/emojis/1f19a.png b/dist/v-1549282893552/emojis/1f19a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f19a.png rename to dist/v-1549282893552/emojis/1f19a.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1e8.png b/dist/v-1549282893552/emojis/1f1e6-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1e8.png rename to dist/v-1549282893552/emojis/1f1e6-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1e9.png b/dist/v-1549282893552/emojis/1f1e6-1f1e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1e9.png rename to dist/v-1549282893552/emojis/1f1e6-1f1e9.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1ea.png b/dist/v-1549282893552/emojis/1f1e6-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1ea.png rename to dist/v-1549282893552/emojis/1f1e6-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1eb.png b/dist/v-1549282893552/emojis/1f1e6-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1eb.png rename to dist/v-1549282893552/emojis/1f1e6-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1ec.png b/dist/v-1549282893552/emojis/1f1e6-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1ec.png rename to dist/v-1549282893552/emojis/1f1e6-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1ee.png b/dist/v-1549282893552/emojis/1f1e6-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1ee.png rename to dist/v-1549282893552/emojis/1f1e6-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1f1.png b/dist/v-1549282893552/emojis/1f1e6-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1f1.png rename to dist/v-1549282893552/emojis/1f1e6-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1f2.png b/dist/v-1549282893552/emojis/1f1e6-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1f2.png rename to dist/v-1549282893552/emojis/1f1e6-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1f4.png b/dist/v-1549282893552/emojis/1f1e6-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1f4.png rename to dist/v-1549282893552/emojis/1f1e6-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1f6.png b/dist/v-1549282893552/emojis/1f1e6-1f1f6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1f6.png rename to dist/v-1549282893552/emojis/1f1e6-1f1f6.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1f7.png b/dist/v-1549282893552/emojis/1f1e6-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1f7.png rename to dist/v-1549282893552/emojis/1f1e6-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1f8.png b/dist/v-1549282893552/emojis/1f1e6-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1f8.png rename to dist/v-1549282893552/emojis/1f1e6-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1f9.png b/dist/v-1549282893552/emojis/1f1e6-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1f9.png rename to dist/v-1549282893552/emojis/1f1e6-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1fa.png b/dist/v-1549282893552/emojis/1f1e6-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1fa.png rename to dist/v-1549282893552/emojis/1f1e6-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1fc.png b/dist/v-1549282893552/emojis/1f1e6-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1fc.png rename to dist/v-1549282893552/emojis/1f1e6-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1fd.png b/dist/v-1549282893552/emojis/1f1e6-1f1fd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1fd.png rename to dist/v-1549282893552/emojis/1f1e6-1f1fd.png diff --git a/dist/v-1547534999795/emojis/1f1e6-1f1ff.png b/dist/v-1549282893552/emojis/1f1e6-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e6-1f1ff.png rename to dist/v-1549282893552/emojis/1f1e6-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1e6.png b/dist/v-1549282893552/emojis/1f1e7-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1e6.png rename to dist/v-1549282893552/emojis/1f1e7-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1e7.png b/dist/v-1549282893552/emojis/1f1e7-1f1e7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1e7.png rename to dist/v-1549282893552/emojis/1f1e7-1f1e7.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1e9.png b/dist/v-1549282893552/emojis/1f1e7-1f1e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1e9.png rename to dist/v-1549282893552/emojis/1f1e7-1f1e9.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1ea.png b/dist/v-1549282893552/emojis/1f1e7-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1ea.png rename to dist/v-1549282893552/emojis/1f1e7-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1eb.png b/dist/v-1549282893552/emojis/1f1e7-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1eb.png rename to dist/v-1549282893552/emojis/1f1e7-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1ec.png b/dist/v-1549282893552/emojis/1f1e7-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1ec.png rename to dist/v-1549282893552/emojis/1f1e7-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1ed.png b/dist/v-1549282893552/emojis/1f1e7-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1ed.png rename to dist/v-1549282893552/emojis/1f1e7-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1ee.png b/dist/v-1549282893552/emojis/1f1e7-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1ee.png rename to dist/v-1549282893552/emojis/1f1e7-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1ef.png b/dist/v-1549282893552/emojis/1f1e7-1f1ef.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1ef.png rename to dist/v-1549282893552/emojis/1f1e7-1f1ef.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1f1.png b/dist/v-1549282893552/emojis/1f1e7-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1f1.png rename to dist/v-1549282893552/emojis/1f1e7-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1f2.png b/dist/v-1549282893552/emojis/1f1e7-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1f2.png rename to dist/v-1549282893552/emojis/1f1e7-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1f3.png b/dist/v-1549282893552/emojis/1f1e7-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1f3.png rename to dist/v-1549282893552/emojis/1f1e7-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1f4.png b/dist/v-1549282893552/emojis/1f1e7-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1f4.png rename to dist/v-1549282893552/emojis/1f1e7-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1f6.png b/dist/v-1549282893552/emojis/1f1e7-1f1f6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1f6.png rename to dist/v-1549282893552/emojis/1f1e7-1f1f6.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1f7.png b/dist/v-1549282893552/emojis/1f1e7-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1f7.png rename to dist/v-1549282893552/emojis/1f1e7-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1f8.png b/dist/v-1549282893552/emojis/1f1e7-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1f8.png rename to dist/v-1549282893552/emojis/1f1e7-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1f9.png b/dist/v-1549282893552/emojis/1f1e7-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1f9.png rename to dist/v-1549282893552/emojis/1f1e7-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1fb.png b/dist/v-1549282893552/emojis/1f1e7-1f1fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1fb.png rename to dist/v-1549282893552/emojis/1f1e7-1f1fb.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1fc.png b/dist/v-1549282893552/emojis/1f1e7-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1fc.png rename to dist/v-1549282893552/emojis/1f1e7-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1fe.png b/dist/v-1549282893552/emojis/1f1e7-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1fe.png rename to dist/v-1549282893552/emojis/1f1e7-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1e7-1f1ff.png b/dist/v-1549282893552/emojis/1f1e7-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e7-1f1ff.png rename to dist/v-1549282893552/emojis/1f1e7-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1e6.png b/dist/v-1549282893552/emojis/1f1e8-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1e6.png rename to dist/v-1549282893552/emojis/1f1e8-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1e8.png b/dist/v-1549282893552/emojis/1f1e8-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1e8.png rename to dist/v-1549282893552/emojis/1f1e8-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1e9.png b/dist/v-1549282893552/emojis/1f1e8-1f1e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1e9.png rename to dist/v-1549282893552/emojis/1f1e8-1f1e9.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1eb.png b/dist/v-1549282893552/emojis/1f1e8-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1eb.png rename to dist/v-1549282893552/emojis/1f1e8-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1ec.png b/dist/v-1549282893552/emojis/1f1e8-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1ec.png rename to dist/v-1549282893552/emojis/1f1e8-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1ed.png b/dist/v-1549282893552/emojis/1f1e8-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1ed.png rename to dist/v-1549282893552/emojis/1f1e8-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1ee.png b/dist/v-1549282893552/emojis/1f1e8-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1ee.png rename to dist/v-1549282893552/emojis/1f1e8-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1f0.png b/dist/v-1549282893552/emojis/1f1e8-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1f0.png rename to dist/v-1549282893552/emojis/1f1e8-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1f1.png b/dist/v-1549282893552/emojis/1f1e8-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1f1.png rename to dist/v-1549282893552/emojis/1f1e8-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1f2.png b/dist/v-1549282893552/emojis/1f1e8-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1f2.png rename to dist/v-1549282893552/emojis/1f1e8-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1f3.png b/dist/v-1549282893552/emojis/1f1e8-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1f3.png rename to dist/v-1549282893552/emojis/1f1e8-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1f4.png b/dist/v-1549282893552/emojis/1f1e8-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1f4.png rename to dist/v-1549282893552/emojis/1f1e8-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1f5.png b/dist/v-1549282893552/emojis/1f1e8-1f1f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1f5.png rename to dist/v-1549282893552/emojis/1f1e8-1f1f5.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1f7.png b/dist/v-1549282893552/emojis/1f1e8-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1f7.png rename to dist/v-1549282893552/emojis/1f1e8-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1fa.png b/dist/v-1549282893552/emojis/1f1e8-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1fa.png rename to dist/v-1549282893552/emojis/1f1e8-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1fb.png b/dist/v-1549282893552/emojis/1f1e8-1f1fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1fb.png rename to dist/v-1549282893552/emojis/1f1e8-1f1fb.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1fc.png b/dist/v-1549282893552/emojis/1f1e8-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1fc.png rename to dist/v-1549282893552/emojis/1f1e8-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1fd.png b/dist/v-1549282893552/emojis/1f1e8-1f1fd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1fd.png rename to dist/v-1549282893552/emojis/1f1e8-1f1fd.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1fe.png b/dist/v-1549282893552/emojis/1f1e8-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1fe.png rename to dist/v-1549282893552/emojis/1f1e8-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1e8-1f1ff.png b/dist/v-1549282893552/emojis/1f1e8-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e8-1f1ff.png rename to dist/v-1549282893552/emojis/1f1e8-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1e9-1f1ea.png b/dist/v-1549282893552/emojis/1f1e9-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e9-1f1ea.png rename to dist/v-1549282893552/emojis/1f1e9-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1e9-1f1ec.png b/dist/v-1549282893552/emojis/1f1e9-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e9-1f1ec.png rename to dist/v-1549282893552/emojis/1f1e9-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1e9-1f1ef.png b/dist/v-1549282893552/emojis/1f1e9-1f1ef.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e9-1f1ef.png rename to dist/v-1549282893552/emojis/1f1e9-1f1ef.png diff --git a/dist/v-1547534999795/emojis/1f1e9-1f1f0.png b/dist/v-1549282893552/emojis/1f1e9-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e9-1f1f0.png rename to dist/v-1549282893552/emojis/1f1e9-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1e9-1f1f2.png b/dist/v-1549282893552/emojis/1f1e9-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e9-1f1f2.png rename to dist/v-1549282893552/emojis/1f1e9-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1e9-1f1f4.png b/dist/v-1549282893552/emojis/1f1e9-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e9-1f1f4.png rename to dist/v-1549282893552/emojis/1f1e9-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1e9-1f1ff.png b/dist/v-1549282893552/emojis/1f1e9-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1e9-1f1ff.png rename to dist/v-1549282893552/emojis/1f1e9-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1e6.png b/dist/v-1549282893552/emojis/1f1ea-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1e6.png rename to dist/v-1549282893552/emojis/1f1ea-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1e8.png b/dist/v-1549282893552/emojis/1f1ea-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1e8.png rename to dist/v-1549282893552/emojis/1f1ea-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1ea.png b/dist/v-1549282893552/emojis/1f1ea-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1ea.png rename to dist/v-1549282893552/emojis/1f1ea-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1ec.png b/dist/v-1549282893552/emojis/1f1ea-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1ec.png rename to dist/v-1549282893552/emojis/1f1ea-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1ed.png b/dist/v-1549282893552/emojis/1f1ea-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1ed.png rename to dist/v-1549282893552/emojis/1f1ea-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1f7.png b/dist/v-1549282893552/emojis/1f1ea-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1f7.png rename to dist/v-1549282893552/emojis/1f1ea-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1f8.png b/dist/v-1549282893552/emojis/1f1ea-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1f8.png rename to dist/v-1549282893552/emojis/1f1ea-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1f9.png b/dist/v-1549282893552/emojis/1f1ea-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1f9.png rename to dist/v-1549282893552/emojis/1f1ea-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1ea-1f1fa.png b/dist/v-1549282893552/emojis/1f1ea-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ea-1f1fa.png rename to dist/v-1549282893552/emojis/1f1ea-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1eb-1f1ee.png b/dist/v-1549282893552/emojis/1f1eb-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1eb-1f1ee.png rename to dist/v-1549282893552/emojis/1f1eb-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1eb-1f1ef.png b/dist/v-1549282893552/emojis/1f1eb-1f1ef.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1eb-1f1ef.png rename to dist/v-1549282893552/emojis/1f1eb-1f1ef.png diff --git a/dist/v-1547534999795/emojis/1f1eb-1f1f0.png b/dist/v-1549282893552/emojis/1f1eb-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1eb-1f1f0.png rename to dist/v-1549282893552/emojis/1f1eb-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1eb-1f1f2.png b/dist/v-1549282893552/emojis/1f1eb-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1eb-1f1f2.png rename to dist/v-1549282893552/emojis/1f1eb-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1eb-1f1f4.png b/dist/v-1549282893552/emojis/1f1eb-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1eb-1f1f4.png rename to dist/v-1549282893552/emojis/1f1eb-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1eb-1f1f7.png b/dist/v-1549282893552/emojis/1f1eb-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1eb-1f1f7.png rename to dist/v-1549282893552/emojis/1f1eb-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1e6.png b/dist/v-1549282893552/emojis/1f1ec-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1e6.png rename to dist/v-1549282893552/emojis/1f1ec-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1e7.png b/dist/v-1549282893552/emojis/1f1ec-1f1e7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1e7.png rename to dist/v-1549282893552/emojis/1f1ec-1f1e7.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1e9.png b/dist/v-1549282893552/emojis/1f1ec-1f1e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1e9.png rename to dist/v-1549282893552/emojis/1f1ec-1f1e9.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1ea.png b/dist/v-1549282893552/emojis/1f1ec-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1ea.png rename to dist/v-1549282893552/emojis/1f1ec-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1eb.png b/dist/v-1549282893552/emojis/1f1ec-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1eb.png rename to dist/v-1549282893552/emojis/1f1ec-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1ec.png b/dist/v-1549282893552/emojis/1f1ec-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1ec.png rename to dist/v-1549282893552/emojis/1f1ec-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1ed.png b/dist/v-1549282893552/emojis/1f1ec-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1ed.png rename to dist/v-1549282893552/emojis/1f1ec-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1ee.png b/dist/v-1549282893552/emojis/1f1ec-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1ee.png rename to dist/v-1549282893552/emojis/1f1ec-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1f1.png b/dist/v-1549282893552/emojis/1f1ec-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1f1.png rename to dist/v-1549282893552/emojis/1f1ec-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1f2.png b/dist/v-1549282893552/emojis/1f1ec-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1f2.png rename to dist/v-1549282893552/emojis/1f1ec-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1f3.png b/dist/v-1549282893552/emojis/1f1ec-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1f3.png rename to dist/v-1549282893552/emojis/1f1ec-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1f5.png b/dist/v-1549282893552/emojis/1f1ec-1f1f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1f5.png rename to dist/v-1549282893552/emojis/1f1ec-1f1f5.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1f6.png b/dist/v-1549282893552/emojis/1f1ec-1f1f6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1f6.png rename to dist/v-1549282893552/emojis/1f1ec-1f1f6.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1f7.png b/dist/v-1549282893552/emojis/1f1ec-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1f7.png rename to dist/v-1549282893552/emojis/1f1ec-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1f8.png b/dist/v-1549282893552/emojis/1f1ec-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1f8.png rename to dist/v-1549282893552/emojis/1f1ec-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1f9.png b/dist/v-1549282893552/emojis/1f1ec-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1f9.png rename to dist/v-1549282893552/emojis/1f1ec-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1fa.png b/dist/v-1549282893552/emojis/1f1ec-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1fa.png rename to dist/v-1549282893552/emojis/1f1ec-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1fc.png b/dist/v-1549282893552/emojis/1f1ec-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1fc.png rename to dist/v-1549282893552/emojis/1f1ec-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1ec-1f1fe.png b/dist/v-1549282893552/emojis/1f1ec-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ec-1f1fe.png rename to dist/v-1549282893552/emojis/1f1ec-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1ed-1f1f0.png b/dist/v-1549282893552/emojis/1f1ed-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ed-1f1f0.png rename to dist/v-1549282893552/emojis/1f1ed-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1ed-1f1f2.png b/dist/v-1549282893552/emojis/1f1ed-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ed-1f1f2.png rename to dist/v-1549282893552/emojis/1f1ed-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1ed-1f1f3.png b/dist/v-1549282893552/emojis/1f1ed-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ed-1f1f3.png rename to dist/v-1549282893552/emojis/1f1ed-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1ed-1f1f7.png b/dist/v-1549282893552/emojis/1f1ed-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ed-1f1f7.png rename to dist/v-1549282893552/emojis/1f1ed-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1ed-1f1f9.png b/dist/v-1549282893552/emojis/1f1ed-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ed-1f1f9.png rename to dist/v-1549282893552/emojis/1f1ed-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1ed-1f1fa.png b/dist/v-1549282893552/emojis/1f1ed-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ed-1f1fa.png rename to dist/v-1549282893552/emojis/1f1ed-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1e8.png b/dist/v-1549282893552/emojis/1f1ee-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1e8.png rename to dist/v-1549282893552/emojis/1f1ee-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1e9.png b/dist/v-1549282893552/emojis/1f1ee-1f1e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1e9.png rename to dist/v-1549282893552/emojis/1f1ee-1f1e9.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1ea.png b/dist/v-1549282893552/emojis/1f1ee-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1ea.png rename to dist/v-1549282893552/emojis/1f1ee-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1f1.png b/dist/v-1549282893552/emojis/1f1ee-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1f1.png rename to dist/v-1549282893552/emojis/1f1ee-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1f2.png b/dist/v-1549282893552/emojis/1f1ee-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1f2.png rename to dist/v-1549282893552/emojis/1f1ee-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1f3.png b/dist/v-1549282893552/emojis/1f1ee-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1f3.png rename to dist/v-1549282893552/emojis/1f1ee-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1f4.png b/dist/v-1549282893552/emojis/1f1ee-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1f4.png rename to dist/v-1549282893552/emojis/1f1ee-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1f6.png b/dist/v-1549282893552/emojis/1f1ee-1f1f6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1f6.png rename to dist/v-1549282893552/emojis/1f1ee-1f1f6.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1f7.png b/dist/v-1549282893552/emojis/1f1ee-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1f7.png rename to dist/v-1549282893552/emojis/1f1ee-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1f8.png b/dist/v-1549282893552/emojis/1f1ee-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1f8.png rename to dist/v-1549282893552/emojis/1f1ee-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1ee-1f1f9.png b/dist/v-1549282893552/emojis/1f1ee-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ee-1f1f9.png rename to dist/v-1549282893552/emojis/1f1ee-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1ef-1f1ea.png b/dist/v-1549282893552/emojis/1f1ef-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ef-1f1ea.png rename to dist/v-1549282893552/emojis/1f1ef-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1ef-1f1f2.png b/dist/v-1549282893552/emojis/1f1ef-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ef-1f1f2.png rename to dist/v-1549282893552/emojis/1f1ef-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1ef-1f1f4.png b/dist/v-1549282893552/emojis/1f1ef-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ef-1f1f4.png rename to dist/v-1549282893552/emojis/1f1ef-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1ef-1f1f5.png b/dist/v-1549282893552/emojis/1f1ef-1f1f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ef-1f1f5.png rename to dist/v-1549282893552/emojis/1f1ef-1f1f5.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1ea.png b/dist/v-1549282893552/emojis/1f1f0-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1ea.png rename to dist/v-1549282893552/emojis/1f1f0-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1ec.png b/dist/v-1549282893552/emojis/1f1f0-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1ec.png rename to dist/v-1549282893552/emojis/1f1f0-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1ed.png b/dist/v-1549282893552/emojis/1f1f0-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1ed.png rename to dist/v-1549282893552/emojis/1f1f0-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1ee.png b/dist/v-1549282893552/emojis/1f1f0-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1ee.png rename to dist/v-1549282893552/emojis/1f1f0-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1f2.png b/dist/v-1549282893552/emojis/1f1f0-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1f2.png rename to dist/v-1549282893552/emojis/1f1f0-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1f3.png b/dist/v-1549282893552/emojis/1f1f0-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1f3.png rename to dist/v-1549282893552/emojis/1f1f0-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1f5.png b/dist/v-1549282893552/emojis/1f1f0-1f1f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1f5.png rename to dist/v-1549282893552/emojis/1f1f0-1f1f5.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1f7.png b/dist/v-1549282893552/emojis/1f1f0-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1f7.png rename to dist/v-1549282893552/emojis/1f1f0-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1fc.png b/dist/v-1549282893552/emojis/1f1f0-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1fc.png rename to dist/v-1549282893552/emojis/1f1f0-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1fe.png b/dist/v-1549282893552/emojis/1f1f0-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1fe.png rename to dist/v-1549282893552/emojis/1f1f0-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1f0-1f1ff.png b/dist/v-1549282893552/emojis/1f1f0-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f0-1f1ff.png rename to dist/v-1549282893552/emojis/1f1f0-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1e6.png b/dist/v-1549282893552/emojis/1f1f1-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1e6.png rename to dist/v-1549282893552/emojis/1f1f1-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1e7.png b/dist/v-1549282893552/emojis/1f1f1-1f1e7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1e7.png rename to dist/v-1549282893552/emojis/1f1f1-1f1e7.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1e8.png b/dist/v-1549282893552/emojis/1f1f1-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1e8.png rename to dist/v-1549282893552/emojis/1f1f1-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1ee.png b/dist/v-1549282893552/emojis/1f1f1-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1ee.png rename to dist/v-1549282893552/emojis/1f1f1-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1f0.png b/dist/v-1549282893552/emojis/1f1f1-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1f0.png rename to dist/v-1549282893552/emojis/1f1f1-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1f7.png b/dist/v-1549282893552/emojis/1f1f1-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1f7.png rename to dist/v-1549282893552/emojis/1f1f1-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1f8.png b/dist/v-1549282893552/emojis/1f1f1-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1f8.png rename to dist/v-1549282893552/emojis/1f1f1-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1f9.png b/dist/v-1549282893552/emojis/1f1f1-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1f9.png rename to dist/v-1549282893552/emojis/1f1f1-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1fa.png b/dist/v-1549282893552/emojis/1f1f1-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1fa.png rename to dist/v-1549282893552/emojis/1f1f1-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1fb.png b/dist/v-1549282893552/emojis/1f1f1-1f1fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1fb.png rename to dist/v-1549282893552/emojis/1f1f1-1f1fb.png diff --git a/dist/v-1547534999795/emojis/1f1f1-1f1fe.png b/dist/v-1549282893552/emojis/1f1f1-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f1-1f1fe.png rename to dist/v-1549282893552/emojis/1f1f1-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1e6.png b/dist/v-1549282893552/emojis/1f1f2-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1e6.png rename to dist/v-1549282893552/emojis/1f1f2-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1e8.png b/dist/v-1549282893552/emojis/1f1f2-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1e8.png rename to dist/v-1549282893552/emojis/1f1f2-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1e9.png b/dist/v-1549282893552/emojis/1f1f2-1f1e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1e9.png rename to dist/v-1549282893552/emojis/1f1f2-1f1e9.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1ea.png b/dist/v-1549282893552/emojis/1f1f2-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1ea.png rename to dist/v-1549282893552/emojis/1f1f2-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1eb.png b/dist/v-1549282893552/emojis/1f1f2-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1eb.png rename to dist/v-1549282893552/emojis/1f1f2-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1ec.png b/dist/v-1549282893552/emojis/1f1f2-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1ec.png rename to dist/v-1549282893552/emojis/1f1f2-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1ed.png b/dist/v-1549282893552/emojis/1f1f2-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1ed.png rename to dist/v-1549282893552/emojis/1f1f2-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f0.png b/dist/v-1549282893552/emojis/1f1f2-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f0.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f1.png b/dist/v-1549282893552/emojis/1f1f2-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f1.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f2.png b/dist/v-1549282893552/emojis/1f1f2-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f2.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f3.png b/dist/v-1549282893552/emojis/1f1f2-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f3.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f4.png b/dist/v-1549282893552/emojis/1f1f2-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f4.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f5.png b/dist/v-1549282893552/emojis/1f1f2-1f1f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f5.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f5.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f6.png b/dist/v-1549282893552/emojis/1f1f2-1f1f6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f6.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f6.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f7.png b/dist/v-1549282893552/emojis/1f1f2-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f7.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f8.png b/dist/v-1549282893552/emojis/1f1f2-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f8.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1f9.png b/dist/v-1549282893552/emojis/1f1f2-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1f9.png rename to dist/v-1549282893552/emojis/1f1f2-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1fa.png b/dist/v-1549282893552/emojis/1f1f2-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1fa.png rename to dist/v-1549282893552/emojis/1f1f2-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1fb.png b/dist/v-1549282893552/emojis/1f1f2-1f1fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1fb.png rename to dist/v-1549282893552/emojis/1f1f2-1f1fb.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1fc.png b/dist/v-1549282893552/emojis/1f1f2-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1fc.png rename to dist/v-1549282893552/emojis/1f1f2-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1fd.png b/dist/v-1549282893552/emojis/1f1f2-1f1fd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1fd.png rename to dist/v-1549282893552/emojis/1f1f2-1f1fd.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1fe.png b/dist/v-1549282893552/emojis/1f1f2-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1fe.png rename to dist/v-1549282893552/emojis/1f1f2-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1f2-1f1ff.png b/dist/v-1549282893552/emojis/1f1f2-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f2-1f1ff.png rename to dist/v-1549282893552/emojis/1f1f2-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1e6.png b/dist/v-1549282893552/emojis/1f1f3-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1e6.png rename to dist/v-1549282893552/emojis/1f1f3-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1e8.png b/dist/v-1549282893552/emojis/1f1f3-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1e8.png rename to dist/v-1549282893552/emojis/1f1f3-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1ea.png b/dist/v-1549282893552/emojis/1f1f3-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1ea.png rename to dist/v-1549282893552/emojis/1f1f3-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1eb.png b/dist/v-1549282893552/emojis/1f1f3-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1eb.png rename to dist/v-1549282893552/emojis/1f1f3-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1ec.png b/dist/v-1549282893552/emojis/1f1f3-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1ec.png rename to dist/v-1549282893552/emojis/1f1f3-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1ee.png b/dist/v-1549282893552/emojis/1f1f3-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1ee.png rename to dist/v-1549282893552/emojis/1f1f3-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1f1.png b/dist/v-1549282893552/emojis/1f1f3-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1f1.png rename to dist/v-1549282893552/emojis/1f1f3-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1f4.png b/dist/v-1549282893552/emojis/1f1f3-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1f4.png rename to dist/v-1549282893552/emojis/1f1f3-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1f5.png b/dist/v-1549282893552/emojis/1f1f3-1f1f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1f5.png rename to dist/v-1549282893552/emojis/1f1f3-1f1f5.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1f7.png b/dist/v-1549282893552/emojis/1f1f3-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1f7.png rename to dist/v-1549282893552/emojis/1f1f3-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1fa.png b/dist/v-1549282893552/emojis/1f1f3-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1fa.png rename to dist/v-1549282893552/emojis/1f1f3-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1f3-1f1ff.png b/dist/v-1549282893552/emojis/1f1f3-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f3-1f1ff.png rename to dist/v-1549282893552/emojis/1f1f3-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1f4-1f1f2.png b/dist/v-1549282893552/emojis/1f1f4-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f4-1f1f2.png rename to dist/v-1549282893552/emojis/1f1f4-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1e6.png b/dist/v-1549282893552/emojis/1f1f5-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1e6.png rename to dist/v-1549282893552/emojis/1f1f5-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1ea.png b/dist/v-1549282893552/emojis/1f1f5-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1ea.png rename to dist/v-1549282893552/emojis/1f1f5-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1eb.png b/dist/v-1549282893552/emojis/1f1f5-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1eb.png rename to dist/v-1549282893552/emojis/1f1f5-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1ec.png b/dist/v-1549282893552/emojis/1f1f5-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1ec.png rename to dist/v-1549282893552/emojis/1f1f5-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1ed.png b/dist/v-1549282893552/emojis/1f1f5-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1ed.png rename to dist/v-1549282893552/emojis/1f1f5-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1f0.png b/dist/v-1549282893552/emojis/1f1f5-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1f0.png rename to dist/v-1549282893552/emojis/1f1f5-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1f1.png b/dist/v-1549282893552/emojis/1f1f5-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1f1.png rename to dist/v-1549282893552/emojis/1f1f5-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1f2.png b/dist/v-1549282893552/emojis/1f1f5-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1f2.png rename to dist/v-1549282893552/emojis/1f1f5-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1f3.png b/dist/v-1549282893552/emojis/1f1f5-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1f3.png rename to dist/v-1549282893552/emojis/1f1f5-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1f7.png b/dist/v-1549282893552/emojis/1f1f5-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1f7.png rename to dist/v-1549282893552/emojis/1f1f5-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1f8.png b/dist/v-1549282893552/emojis/1f1f5-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1f8.png rename to dist/v-1549282893552/emojis/1f1f5-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1f9.png b/dist/v-1549282893552/emojis/1f1f5-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1f9.png rename to dist/v-1549282893552/emojis/1f1f5-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1fc.png b/dist/v-1549282893552/emojis/1f1f5-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1fc.png rename to dist/v-1549282893552/emojis/1f1f5-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1f5-1f1fe.png b/dist/v-1549282893552/emojis/1f1f5-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f5-1f1fe.png rename to dist/v-1549282893552/emojis/1f1f5-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1f6-1f1e6.png b/dist/v-1549282893552/emojis/1f1f6-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f6-1f1e6.png rename to dist/v-1549282893552/emojis/1f1f6-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1f7-1f1ea.png b/dist/v-1549282893552/emojis/1f1f7-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f7-1f1ea.png rename to dist/v-1549282893552/emojis/1f1f7-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1f7-1f1f4.png b/dist/v-1549282893552/emojis/1f1f7-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f7-1f1f4.png rename to dist/v-1549282893552/emojis/1f1f7-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1f7-1f1f8.png b/dist/v-1549282893552/emojis/1f1f7-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f7-1f1f8.png rename to dist/v-1549282893552/emojis/1f1f7-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1f7-1f1fa.png b/dist/v-1549282893552/emojis/1f1f7-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f7-1f1fa.png rename to dist/v-1549282893552/emojis/1f1f7-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1f7-1f1fc.png b/dist/v-1549282893552/emojis/1f1f7-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f7-1f1fc.png rename to dist/v-1549282893552/emojis/1f1f7-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1e6.png b/dist/v-1549282893552/emojis/1f1f8-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1e6.png rename to dist/v-1549282893552/emojis/1f1f8-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1e7.png b/dist/v-1549282893552/emojis/1f1f8-1f1e7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1e7.png rename to dist/v-1549282893552/emojis/1f1f8-1f1e7.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1e8.png b/dist/v-1549282893552/emojis/1f1f8-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1e8.png rename to dist/v-1549282893552/emojis/1f1f8-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1e9.png b/dist/v-1549282893552/emojis/1f1f8-1f1e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1e9.png rename to dist/v-1549282893552/emojis/1f1f8-1f1e9.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1ea.png b/dist/v-1549282893552/emojis/1f1f8-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1ea.png rename to dist/v-1549282893552/emojis/1f1f8-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1ec.png b/dist/v-1549282893552/emojis/1f1f8-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1ec.png rename to dist/v-1549282893552/emojis/1f1f8-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1ed.png b/dist/v-1549282893552/emojis/1f1f8-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1ed.png rename to dist/v-1549282893552/emojis/1f1f8-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1ee.png b/dist/v-1549282893552/emojis/1f1f8-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1ee.png rename to dist/v-1549282893552/emojis/1f1f8-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1ef.png b/dist/v-1549282893552/emojis/1f1f8-1f1ef.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1ef.png rename to dist/v-1549282893552/emojis/1f1f8-1f1ef.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1f0.png b/dist/v-1549282893552/emojis/1f1f8-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1f0.png rename to dist/v-1549282893552/emojis/1f1f8-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1f1.png b/dist/v-1549282893552/emojis/1f1f8-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1f1.png rename to dist/v-1549282893552/emojis/1f1f8-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1f2.png b/dist/v-1549282893552/emojis/1f1f8-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1f2.png rename to dist/v-1549282893552/emojis/1f1f8-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1f3.png b/dist/v-1549282893552/emojis/1f1f8-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1f3.png rename to dist/v-1549282893552/emojis/1f1f8-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1f4.png b/dist/v-1549282893552/emojis/1f1f8-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1f4.png rename to dist/v-1549282893552/emojis/1f1f8-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1f7.png b/dist/v-1549282893552/emojis/1f1f8-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1f7.png rename to dist/v-1549282893552/emojis/1f1f8-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1f8.png b/dist/v-1549282893552/emojis/1f1f8-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1f8.png rename to dist/v-1549282893552/emojis/1f1f8-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1f9.png b/dist/v-1549282893552/emojis/1f1f8-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1f9.png rename to dist/v-1549282893552/emojis/1f1f8-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1fb.png b/dist/v-1549282893552/emojis/1f1f8-1f1fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1fb.png rename to dist/v-1549282893552/emojis/1f1f8-1f1fb.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1fd.png b/dist/v-1549282893552/emojis/1f1f8-1f1fd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1fd.png rename to dist/v-1549282893552/emojis/1f1f8-1f1fd.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1fe.png b/dist/v-1549282893552/emojis/1f1f8-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1fe.png rename to dist/v-1549282893552/emojis/1f1f8-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1f8-1f1ff.png b/dist/v-1549282893552/emojis/1f1f8-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f8-1f1ff.png rename to dist/v-1549282893552/emojis/1f1f8-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1e6.png b/dist/v-1549282893552/emojis/1f1f9-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1e6.png rename to dist/v-1549282893552/emojis/1f1f9-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1e8.png b/dist/v-1549282893552/emojis/1f1f9-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1e8.png rename to dist/v-1549282893552/emojis/1f1f9-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1e9.png b/dist/v-1549282893552/emojis/1f1f9-1f1e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1e9.png rename to dist/v-1549282893552/emojis/1f1f9-1f1e9.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1eb.png b/dist/v-1549282893552/emojis/1f1f9-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1eb.png rename to dist/v-1549282893552/emojis/1f1f9-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1ec.png b/dist/v-1549282893552/emojis/1f1f9-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1ec.png rename to dist/v-1549282893552/emojis/1f1f9-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1ed.png b/dist/v-1549282893552/emojis/1f1f9-1f1ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1ed.png rename to dist/v-1549282893552/emojis/1f1f9-1f1ed.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1ef.png b/dist/v-1549282893552/emojis/1f1f9-1f1ef.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1ef.png rename to dist/v-1549282893552/emojis/1f1f9-1f1ef.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1f0.png b/dist/v-1549282893552/emojis/1f1f9-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1f0.png rename to dist/v-1549282893552/emojis/1f1f9-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1f1.png b/dist/v-1549282893552/emojis/1f1f9-1f1f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1f1.png rename to dist/v-1549282893552/emojis/1f1f9-1f1f1.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1f2.png b/dist/v-1549282893552/emojis/1f1f9-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1f2.png rename to dist/v-1549282893552/emojis/1f1f9-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1f3.png b/dist/v-1549282893552/emojis/1f1f9-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1f3.png rename to dist/v-1549282893552/emojis/1f1f9-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1f4.png b/dist/v-1549282893552/emojis/1f1f9-1f1f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1f4.png rename to dist/v-1549282893552/emojis/1f1f9-1f1f4.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1f7.png b/dist/v-1549282893552/emojis/1f1f9-1f1f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1f7.png rename to dist/v-1549282893552/emojis/1f1f9-1f1f7.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1f9.png b/dist/v-1549282893552/emojis/1f1f9-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1f9.png rename to dist/v-1549282893552/emojis/1f1f9-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1fb.png b/dist/v-1549282893552/emojis/1f1f9-1f1fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1fb.png rename to dist/v-1549282893552/emojis/1f1f9-1f1fb.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1fc.png b/dist/v-1549282893552/emojis/1f1f9-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1fc.png rename to dist/v-1549282893552/emojis/1f1f9-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f1f9-1f1ff.png b/dist/v-1549282893552/emojis/1f1f9-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1f9-1f1ff.png rename to dist/v-1549282893552/emojis/1f1f9-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1fa-1f1e6.png b/dist/v-1549282893552/emojis/1f1fa-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fa-1f1e6.png rename to dist/v-1549282893552/emojis/1f1fa-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1fa-1f1ec.png b/dist/v-1549282893552/emojis/1f1fa-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fa-1f1ec.png rename to dist/v-1549282893552/emojis/1f1fa-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1fa-1f1f2.png b/dist/v-1549282893552/emojis/1f1fa-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fa-1f1f2.png rename to dist/v-1549282893552/emojis/1f1fa-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1fa-1f1f3.png b/dist/v-1549282893552/emojis/1f1fa-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fa-1f1f3.png rename to dist/v-1549282893552/emojis/1f1fa-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1fa-1f1f8.png b/dist/v-1549282893552/emojis/1f1fa-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fa-1f1f8.png rename to dist/v-1549282893552/emojis/1f1fa-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1fa-1f1fe.png b/dist/v-1549282893552/emojis/1f1fa-1f1fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fa-1f1fe.png rename to dist/v-1549282893552/emojis/1f1fa-1f1fe.png diff --git a/dist/v-1547534999795/emojis/1f1fa-1f1ff.png b/dist/v-1549282893552/emojis/1f1fa-1f1ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fa-1f1ff.png rename to dist/v-1549282893552/emojis/1f1fa-1f1ff.png diff --git a/dist/v-1547534999795/emojis/1f1fb-1f1e6.png b/dist/v-1549282893552/emojis/1f1fb-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fb-1f1e6.png rename to dist/v-1549282893552/emojis/1f1fb-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1fb-1f1e8.png b/dist/v-1549282893552/emojis/1f1fb-1f1e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fb-1f1e8.png rename to dist/v-1549282893552/emojis/1f1fb-1f1e8.png diff --git a/dist/v-1547534999795/emojis/1f1fb-1f1ea.png b/dist/v-1549282893552/emojis/1f1fb-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fb-1f1ea.png rename to dist/v-1549282893552/emojis/1f1fb-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1fb-1f1ec.png b/dist/v-1549282893552/emojis/1f1fb-1f1ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fb-1f1ec.png rename to dist/v-1549282893552/emojis/1f1fb-1f1ec.png diff --git a/dist/v-1547534999795/emojis/1f1fb-1f1ee.png b/dist/v-1549282893552/emojis/1f1fb-1f1ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fb-1f1ee.png rename to dist/v-1549282893552/emojis/1f1fb-1f1ee.png diff --git a/dist/v-1547534999795/emojis/1f1fb-1f1f3.png b/dist/v-1549282893552/emojis/1f1fb-1f1f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fb-1f1f3.png rename to dist/v-1549282893552/emojis/1f1fb-1f1f3.png diff --git a/dist/v-1547534999795/emojis/1f1fb-1f1fa.png b/dist/v-1549282893552/emojis/1f1fb-1f1fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fb-1f1fa.png rename to dist/v-1549282893552/emojis/1f1fb-1f1fa.png diff --git a/dist/v-1547534999795/emojis/1f1fc-1f1eb.png b/dist/v-1549282893552/emojis/1f1fc-1f1eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fc-1f1eb.png rename to dist/v-1549282893552/emojis/1f1fc-1f1eb.png diff --git a/dist/v-1547534999795/emojis/1f1fc-1f1f8.png b/dist/v-1549282893552/emojis/1f1fc-1f1f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fc-1f1f8.png rename to dist/v-1549282893552/emojis/1f1fc-1f1f8.png diff --git a/dist/v-1547534999795/emojis/1f1fd-1f1f0.png b/dist/v-1549282893552/emojis/1f1fd-1f1f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fd-1f1f0.png rename to dist/v-1549282893552/emojis/1f1fd-1f1f0.png diff --git a/dist/v-1547534999795/emojis/1f1fe-1f1ea.png b/dist/v-1549282893552/emojis/1f1fe-1f1ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fe-1f1ea.png rename to dist/v-1549282893552/emojis/1f1fe-1f1ea.png diff --git a/dist/v-1547534999795/emojis/1f1fe-1f1f9.png b/dist/v-1549282893552/emojis/1f1fe-1f1f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1fe-1f1f9.png rename to dist/v-1549282893552/emojis/1f1fe-1f1f9.png diff --git a/dist/v-1547534999795/emojis/1f1ff-1f1e6.png b/dist/v-1549282893552/emojis/1f1ff-1f1e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ff-1f1e6.png rename to dist/v-1549282893552/emojis/1f1ff-1f1e6.png diff --git a/dist/v-1547534999795/emojis/1f1ff-1f1f2.png b/dist/v-1549282893552/emojis/1f1ff-1f1f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ff-1f1f2.png rename to dist/v-1549282893552/emojis/1f1ff-1f1f2.png diff --git a/dist/v-1547534999795/emojis/1f1ff-1f1fc.png b/dist/v-1549282893552/emojis/1f1ff-1f1fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f1ff-1f1fc.png rename to dist/v-1549282893552/emojis/1f1ff-1f1fc.png diff --git a/dist/v-1547534999795/emojis/1f201.png b/dist/v-1549282893552/emojis/1f201.png similarity index 100% rename from dist/v-1547534999795/emojis/1f201.png rename to dist/v-1549282893552/emojis/1f201.png diff --git a/dist/v-1547534999795/emojis/1f202.png b/dist/v-1549282893552/emojis/1f202.png similarity index 100% rename from dist/v-1547534999795/emojis/1f202.png rename to dist/v-1549282893552/emojis/1f202.png diff --git a/dist/v-1547534999795/emojis/1f21a.png b/dist/v-1549282893552/emojis/1f21a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f21a.png rename to dist/v-1549282893552/emojis/1f21a.png diff --git a/dist/v-1547534999795/emojis/1f22f.png b/dist/v-1549282893552/emojis/1f22f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f22f.png rename to dist/v-1549282893552/emojis/1f22f.png diff --git a/dist/v-1547534999795/emojis/1f232.png b/dist/v-1549282893552/emojis/1f232.png similarity index 100% rename from dist/v-1547534999795/emojis/1f232.png rename to dist/v-1549282893552/emojis/1f232.png diff --git a/dist/v-1547534999795/emojis/1f233.png b/dist/v-1549282893552/emojis/1f233.png similarity index 100% rename from dist/v-1547534999795/emojis/1f233.png rename to dist/v-1549282893552/emojis/1f233.png diff --git a/dist/v-1547534999795/emojis/1f234.png b/dist/v-1549282893552/emojis/1f234.png similarity index 100% rename from dist/v-1547534999795/emojis/1f234.png rename to dist/v-1549282893552/emojis/1f234.png diff --git a/dist/v-1547534999795/emojis/1f235.png b/dist/v-1549282893552/emojis/1f235.png similarity index 100% rename from dist/v-1547534999795/emojis/1f235.png rename to dist/v-1549282893552/emojis/1f235.png diff --git a/dist/v-1547534999795/emojis/1f236.png b/dist/v-1549282893552/emojis/1f236.png similarity index 100% rename from dist/v-1547534999795/emojis/1f236.png rename to dist/v-1549282893552/emojis/1f236.png diff --git a/dist/v-1547534999795/emojis/1f237.png b/dist/v-1549282893552/emojis/1f237.png similarity index 100% rename from dist/v-1547534999795/emojis/1f237.png rename to dist/v-1549282893552/emojis/1f237.png diff --git a/dist/v-1547534999795/emojis/1f238.png b/dist/v-1549282893552/emojis/1f238.png similarity index 100% rename from dist/v-1547534999795/emojis/1f238.png rename to dist/v-1549282893552/emojis/1f238.png diff --git a/dist/v-1547534999795/emojis/1f239.png b/dist/v-1549282893552/emojis/1f239.png similarity index 100% rename from dist/v-1547534999795/emojis/1f239.png rename to dist/v-1549282893552/emojis/1f239.png diff --git a/dist/v-1547534999795/emojis/1f23a.png b/dist/v-1549282893552/emojis/1f23a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f23a.png rename to dist/v-1549282893552/emojis/1f23a.png diff --git a/dist/v-1547534999795/emojis/1f250.png b/dist/v-1549282893552/emojis/1f250.png similarity index 100% rename from dist/v-1547534999795/emojis/1f250.png rename to dist/v-1549282893552/emojis/1f250.png diff --git a/dist/v-1547534999795/emojis/1f251.png b/dist/v-1549282893552/emojis/1f251.png similarity index 100% rename from dist/v-1547534999795/emojis/1f251.png rename to dist/v-1549282893552/emojis/1f251.png diff --git a/dist/v-1547534999795/emojis/1f300.png b/dist/v-1549282893552/emojis/1f300.png similarity index 100% rename from dist/v-1547534999795/emojis/1f300.png rename to dist/v-1549282893552/emojis/1f300.png diff --git a/dist/v-1547534999795/emojis/1f301.png b/dist/v-1549282893552/emojis/1f301.png similarity index 100% rename from dist/v-1547534999795/emojis/1f301.png rename to dist/v-1549282893552/emojis/1f301.png diff --git a/dist/v-1547534999795/emojis/1f302.png b/dist/v-1549282893552/emojis/1f302.png similarity index 100% rename from dist/v-1547534999795/emojis/1f302.png rename to dist/v-1549282893552/emojis/1f302.png diff --git a/dist/v-1547534999795/emojis/1f303.png b/dist/v-1549282893552/emojis/1f303.png similarity index 100% rename from dist/v-1547534999795/emojis/1f303.png rename to dist/v-1549282893552/emojis/1f303.png diff --git a/dist/v-1547534999795/emojis/1f304.png b/dist/v-1549282893552/emojis/1f304.png similarity index 100% rename from dist/v-1547534999795/emojis/1f304.png rename to dist/v-1549282893552/emojis/1f304.png diff --git a/dist/v-1547534999795/emojis/1f305.png b/dist/v-1549282893552/emojis/1f305.png similarity index 100% rename from dist/v-1547534999795/emojis/1f305.png rename to dist/v-1549282893552/emojis/1f305.png diff --git a/dist/v-1547534999795/emojis/1f306.png b/dist/v-1549282893552/emojis/1f306.png similarity index 100% rename from dist/v-1547534999795/emojis/1f306.png rename to dist/v-1549282893552/emojis/1f306.png diff --git a/dist/v-1547534999795/emojis/1f307.png b/dist/v-1549282893552/emojis/1f307.png similarity index 100% rename from dist/v-1547534999795/emojis/1f307.png rename to dist/v-1549282893552/emojis/1f307.png diff --git a/dist/v-1547534999795/emojis/1f308.png b/dist/v-1549282893552/emojis/1f308.png similarity index 100% rename from dist/v-1547534999795/emojis/1f308.png rename to dist/v-1549282893552/emojis/1f308.png diff --git a/dist/v-1547534999795/emojis/1f309.png b/dist/v-1549282893552/emojis/1f309.png similarity index 100% rename from dist/v-1547534999795/emojis/1f309.png rename to dist/v-1549282893552/emojis/1f309.png diff --git a/dist/v-1547534999795/emojis/1f30a.png b/dist/v-1549282893552/emojis/1f30a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f30a.png rename to dist/v-1549282893552/emojis/1f30a.png diff --git a/dist/v-1547534999795/emojis/1f30b.png b/dist/v-1549282893552/emojis/1f30b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f30b.png rename to dist/v-1549282893552/emojis/1f30b.png diff --git a/dist/v-1547534999795/emojis/1f30c.png b/dist/v-1549282893552/emojis/1f30c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f30c.png rename to dist/v-1549282893552/emojis/1f30c.png diff --git a/dist/v-1547534999795/emojis/1f30d.png b/dist/v-1549282893552/emojis/1f30d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f30d.png rename to dist/v-1549282893552/emojis/1f30d.png diff --git a/dist/v-1547534999795/emojis/1f30e.png b/dist/v-1549282893552/emojis/1f30e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f30e.png rename to dist/v-1549282893552/emojis/1f30e.png diff --git a/dist/v-1547534999795/emojis/1f30f.png b/dist/v-1549282893552/emojis/1f30f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f30f.png rename to dist/v-1549282893552/emojis/1f30f.png diff --git a/dist/v-1547534999795/emojis/1f310.png b/dist/v-1549282893552/emojis/1f310.png similarity index 100% rename from dist/v-1547534999795/emojis/1f310.png rename to dist/v-1549282893552/emojis/1f310.png diff --git a/dist/v-1547534999795/emojis/1f311.png b/dist/v-1549282893552/emojis/1f311.png similarity index 100% rename from dist/v-1547534999795/emojis/1f311.png rename to dist/v-1549282893552/emojis/1f311.png diff --git a/dist/v-1547534999795/emojis/1f312.png b/dist/v-1549282893552/emojis/1f312.png similarity index 100% rename from dist/v-1547534999795/emojis/1f312.png rename to dist/v-1549282893552/emojis/1f312.png diff --git a/dist/v-1547534999795/emojis/1f313.png b/dist/v-1549282893552/emojis/1f313.png similarity index 100% rename from dist/v-1547534999795/emojis/1f313.png rename to dist/v-1549282893552/emojis/1f313.png diff --git a/dist/v-1547534999795/emojis/1f314.png b/dist/v-1549282893552/emojis/1f314.png similarity index 100% rename from dist/v-1547534999795/emojis/1f314.png rename to dist/v-1549282893552/emojis/1f314.png diff --git a/dist/v-1547534999795/emojis/1f315.png b/dist/v-1549282893552/emojis/1f315.png similarity index 100% rename from dist/v-1547534999795/emojis/1f315.png rename to dist/v-1549282893552/emojis/1f315.png diff --git a/dist/v-1547534999795/emojis/1f316.png b/dist/v-1549282893552/emojis/1f316.png similarity index 100% rename from dist/v-1547534999795/emojis/1f316.png rename to dist/v-1549282893552/emojis/1f316.png diff --git a/dist/v-1547534999795/emojis/1f317.png b/dist/v-1549282893552/emojis/1f317.png similarity index 100% rename from dist/v-1547534999795/emojis/1f317.png rename to dist/v-1549282893552/emojis/1f317.png diff --git a/dist/v-1547534999795/emojis/1f318.png b/dist/v-1549282893552/emojis/1f318.png similarity index 100% rename from dist/v-1547534999795/emojis/1f318.png rename to dist/v-1549282893552/emojis/1f318.png diff --git a/dist/v-1547534999795/emojis/1f319.png b/dist/v-1549282893552/emojis/1f319.png similarity index 100% rename from dist/v-1547534999795/emojis/1f319.png rename to dist/v-1549282893552/emojis/1f319.png diff --git a/dist/v-1547534999795/emojis/1f31a.png b/dist/v-1549282893552/emojis/1f31a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f31a.png rename to dist/v-1549282893552/emojis/1f31a.png diff --git a/dist/v-1547534999795/emojis/1f31b.png b/dist/v-1549282893552/emojis/1f31b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f31b.png rename to dist/v-1549282893552/emojis/1f31b.png diff --git a/dist/v-1547534999795/emojis/1f31c.png b/dist/v-1549282893552/emojis/1f31c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f31c.png rename to dist/v-1549282893552/emojis/1f31c.png diff --git a/dist/v-1547534999795/emojis/1f31d.png b/dist/v-1549282893552/emojis/1f31d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f31d.png rename to dist/v-1549282893552/emojis/1f31d.png diff --git a/dist/v-1547534999795/emojis/1f31e.png b/dist/v-1549282893552/emojis/1f31e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f31e.png rename to dist/v-1549282893552/emojis/1f31e.png diff --git a/dist/v-1547534999795/emojis/1f31f.png b/dist/v-1549282893552/emojis/1f31f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f31f.png rename to dist/v-1549282893552/emojis/1f31f.png diff --git a/dist/v-1547534999795/emojis/1f320.png b/dist/v-1549282893552/emojis/1f320.png similarity index 100% rename from dist/v-1547534999795/emojis/1f320.png rename to dist/v-1549282893552/emojis/1f320.png diff --git a/dist/v-1547534999795/emojis/1f321.png b/dist/v-1549282893552/emojis/1f321.png similarity index 100% rename from dist/v-1547534999795/emojis/1f321.png rename to dist/v-1549282893552/emojis/1f321.png diff --git a/dist/v-1547534999795/emojis/1f324.png b/dist/v-1549282893552/emojis/1f324.png similarity index 100% rename from dist/v-1547534999795/emojis/1f324.png rename to dist/v-1549282893552/emojis/1f324.png diff --git a/dist/v-1547534999795/emojis/1f325.png b/dist/v-1549282893552/emojis/1f325.png similarity index 100% rename from dist/v-1547534999795/emojis/1f325.png rename to dist/v-1549282893552/emojis/1f325.png diff --git a/dist/v-1547534999795/emojis/1f326.png b/dist/v-1549282893552/emojis/1f326.png similarity index 100% rename from dist/v-1547534999795/emojis/1f326.png rename to dist/v-1549282893552/emojis/1f326.png diff --git a/dist/v-1547534999795/emojis/1f327.png b/dist/v-1549282893552/emojis/1f327.png similarity index 100% rename from dist/v-1547534999795/emojis/1f327.png rename to dist/v-1549282893552/emojis/1f327.png diff --git a/dist/v-1547534999795/emojis/1f328.png b/dist/v-1549282893552/emojis/1f328.png similarity index 100% rename from dist/v-1547534999795/emojis/1f328.png rename to dist/v-1549282893552/emojis/1f328.png diff --git a/dist/v-1547534999795/emojis/1f329.png b/dist/v-1549282893552/emojis/1f329.png similarity index 100% rename from dist/v-1547534999795/emojis/1f329.png rename to dist/v-1549282893552/emojis/1f329.png diff --git a/dist/v-1547534999795/emojis/1f32a.png b/dist/v-1549282893552/emojis/1f32a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f32a.png rename to dist/v-1549282893552/emojis/1f32a.png diff --git a/dist/v-1547534999795/emojis/1f32b.png b/dist/v-1549282893552/emojis/1f32b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f32b.png rename to dist/v-1549282893552/emojis/1f32b.png diff --git a/dist/v-1547534999795/emojis/1f32c.png b/dist/v-1549282893552/emojis/1f32c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f32c.png rename to dist/v-1549282893552/emojis/1f32c.png diff --git a/dist/v-1547534999795/emojis/1f32d.png b/dist/v-1549282893552/emojis/1f32d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f32d.png rename to dist/v-1549282893552/emojis/1f32d.png diff --git a/dist/v-1547534999795/emojis/1f32e.png b/dist/v-1549282893552/emojis/1f32e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f32e.png rename to dist/v-1549282893552/emojis/1f32e.png diff --git a/dist/v-1547534999795/emojis/1f32f.png b/dist/v-1549282893552/emojis/1f32f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f32f.png rename to dist/v-1549282893552/emojis/1f32f.png diff --git a/dist/v-1547534999795/emojis/1f330.png b/dist/v-1549282893552/emojis/1f330.png similarity index 100% rename from dist/v-1547534999795/emojis/1f330.png rename to dist/v-1549282893552/emojis/1f330.png diff --git a/dist/v-1547534999795/emojis/1f331.png b/dist/v-1549282893552/emojis/1f331.png similarity index 100% rename from dist/v-1547534999795/emojis/1f331.png rename to dist/v-1549282893552/emojis/1f331.png diff --git a/dist/v-1547534999795/emojis/1f332.png b/dist/v-1549282893552/emojis/1f332.png similarity index 100% rename from dist/v-1547534999795/emojis/1f332.png rename to dist/v-1549282893552/emojis/1f332.png diff --git a/dist/v-1547534999795/emojis/1f333.png b/dist/v-1549282893552/emojis/1f333.png similarity index 100% rename from dist/v-1547534999795/emojis/1f333.png rename to dist/v-1549282893552/emojis/1f333.png diff --git a/dist/v-1547534999795/emojis/1f334.png b/dist/v-1549282893552/emojis/1f334.png similarity index 100% rename from dist/v-1547534999795/emojis/1f334.png rename to dist/v-1549282893552/emojis/1f334.png diff --git a/dist/v-1547534999795/emojis/1f335.png b/dist/v-1549282893552/emojis/1f335.png similarity index 100% rename from dist/v-1547534999795/emojis/1f335.png rename to dist/v-1549282893552/emojis/1f335.png diff --git a/dist/v-1547534999795/emojis/1f336.png b/dist/v-1549282893552/emojis/1f336.png similarity index 100% rename from dist/v-1547534999795/emojis/1f336.png rename to dist/v-1549282893552/emojis/1f336.png diff --git a/dist/v-1547534999795/emojis/1f337.png b/dist/v-1549282893552/emojis/1f337.png similarity index 100% rename from dist/v-1547534999795/emojis/1f337.png rename to dist/v-1549282893552/emojis/1f337.png diff --git a/dist/v-1547534999795/emojis/1f338.png b/dist/v-1549282893552/emojis/1f338.png similarity index 100% rename from dist/v-1547534999795/emojis/1f338.png rename to dist/v-1549282893552/emojis/1f338.png diff --git a/dist/v-1547534999795/emojis/1f339.png b/dist/v-1549282893552/emojis/1f339.png similarity index 100% rename from dist/v-1547534999795/emojis/1f339.png rename to dist/v-1549282893552/emojis/1f339.png diff --git a/dist/v-1547534999795/emojis/1f33a.png b/dist/v-1549282893552/emojis/1f33a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f33a.png rename to dist/v-1549282893552/emojis/1f33a.png diff --git a/dist/v-1547534999795/emojis/1f33b.png b/dist/v-1549282893552/emojis/1f33b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f33b.png rename to dist/v-1549282893552/emojis/1f33b.png diff --git a/dist/v-1547534999795/emojis/1f33c.png b/dist/v-1549282893552/emojis/1f33c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f33c.png rename to dist/v-1549282893552/emojis/1f33c.png diff --git a/dist/v-1547534999795/emojis/1f33d.png b/dist/v-1549282893552/emojis/1f33d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f33d.png rename to dist/v-1549282893552/emojis/1f33d.png diff --git a/dist/v-1547534999795/emojis/1f33e.png b/dist/v-1549282893552/emojis/1f33e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f33e.png rename to dist/v-1549282893552/emojis/1f33e.png diff --git a/dist/v-1547534999795/emojis/1f33f.png b/dist/v-1549282893552/emojis/1f33f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f33f.png rename to dist/v-1549282893552/emojis/1f33f.png diff --git a/dist/v-1547534999795/emojis/1f340.png b/dist/v-1549282893552/emojis/1f340.png similarity index 100% rename from dist/v-1547534999795/emojis/1f340.png rename to dist/v-1549282893552/emojis/1f340.png diff --git a/dist/v-1547534999795/emojis/1f341.png b/dist/v-1549282893552/emojis/1f341.png similarity index 100% rename from dist/v-1547534999795/emojis/1f341.png rename to dist/v-1549282893552/emojis/1f341.png diff --git a/dist/v-1547534999795/emojis/1f342.png b/dist/v-1549282893552/emojis/1f342.png similarity index 100% rename from dist/v-1547534999795/emojis/1f342.png rename to dist/v-1549282893552/emojis/1f342.png diff --git a/dist/v-1547534999795/emojis/1f343.png b/dist/v-1549282893552/emojis/1f343.png similarity index 100% rename from dist/v-1547534999795/emojis/1f343.png rename to dist/v-1549282893552/emojis/1f343.png diff --git a/dist/v-1547534999795/emojis/1f344.png b/dist/v-1549282893552/emojis/1f344.png similarity index 100% rename from dist/v-1547534999795/emojis/1f344.png rename to dist/v-1549282893552/emojis/1f344.png diff --git a/dist/v-1547534999795/emojis/1f345.png b/dist/v-1549282893552/emojis/1f345.png similarity index 100% rename from dist/v-1547534999795/emojis/1f345.png rename to dist/v-1549282893552/emojis/1f345.png diff --git a/dist/v-1547534999795/emojis/1f346.png b/dist/v-1549282893552/emojis/1f346.png similarity index 100% rename from dist/v-1547534999795/emojis/1f346.png rename to dist/v-1549282893552/emojis/1f346.png diff --git a/dist/v-1547534999795/emojis/1f347.png b/dist/v-1549282893552/emojis/1f347.png similarity index 100% rename from dist/v-1547534999795/emojis/1f347.png rename to dist/v-1549282893552/emojis/1f347.png diff --git a/dist/v-1547534999795/emojis/1f348.png b/dist/v-1549282893552/emojis/1f348.png similarity index 100% rename from dist/v-1547534999795/emojis/1f348.png rename to dist/v-1549282893552/emojis/1f348.png diff --git a/dist/v-1547534999795/emojis/1f349.png b/dist/v-1549282893552/emojis/1f349.png similarity index 100% rename from dist/v-1547534999795/emojis/1f349.png rename to dist/v-1549282893552/emojis/1f349.png diff --git a/dist/v-1547534999795/emojis/1f34a.png b/dist/v-1549282893552/emojis/1f34a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f34a.png rename to dist/v-1549282893552/emojis/1f34a.png diff --git a/dist/v-1547534999795/emojis/1f34b.png b/dist/v-1549282893552/emojis/1f34b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f34b.png rename to dist/v-1549282893552/emojis/1f34b.png diff --git a/dist/v-1547534999795/emojis/1f34c.png b/dist/v-1549282893552/emojis/1f34c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f34c.png rename to dist/v-1549282893552/emojis/1f34c.png diff --git a/dist/v-1547534999795/emojis/1f34d.png b/dist/v-1549282893552/emojis/1f34d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f34d.png rename to dist/v-1549282893552/emojis/1f34d.png diff --git a/dist/v-1547534999795/emojis/1f34e.png b/dist/v-1549282893552/emojis/1f34e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f34e.png rename to dist/v-1549282893552/emojis/1f34e.png diff --git a/dist/v-1547534999795/emojis/1f34f.png b/dist/v-1549282893552/emojis/1f34f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f34f.png rename to dist/v-1549282893552/emojis/1f34f.png diff --git a/dist/v-1547534999795/emojis/1f350.png b/dist/v-1549282893552/emojis/1f350.png similarity index 100% rename from dist/v-1547534999795/emojis/1f350.png rename to dist/v-1549282893552/emojis/1f350.png diff --git a/dist/v-1547534999795/emojis/1f351.png b/dist/v-1549282893552/emojis/1f351.png similarity index 100% rename from dist/v-1547534999795/emojis/1f351.png rename to dist/v-1549282893552/emojis/1f351.png diff --git a/dist/v-1547534999795/emojis/1f352.png b/dist/v-1549282893552/emojis/1f352.png similarity index 100% rename from dist/v-1547534999795/emojis/1f352.png rename to dist/v-1549282893552/emojis/1f352.png diff --git a/dist/v-1547534999795/emojis/1f353.png b/dist/v-1549282893552/emojis/1f353.png similarity index 100% rename from dist/v-1547534999795/emojis/1f353.png rename to dist/v-1549282893552/emojis/1f353.png diff --git a/dist/v-1547534999795/emojis/1f354.png b/dist/v-1549282893552/emojis/1f354.png similarity index 100% rename from dist/v-1547534999795/emojis/1f354.png rename to dist/v-1549282893552/emojis/1f354.png diff --git a/dist/v-1547534999795/emojis/1f355.png b/dist/v-1549282893552/emojis/1f355.png similarity index 100% rename from dist/v-1547534999795/emojis/1f355.png rename to dist/v-1549282893552/emojis/1f355.png diff --git a/dist/v-1547534999795/emojis/1f356.png b/dist/v-1549282893552/emojis/1f356.png similarity index 100% rename from dist/v-1547534999795/emojis/1f356.png rename to dist/v-1549282893552/emojis/1f356.png diff --git a/dist/v-1547534999795/emojis/1f357.png b/dist/v-1549282893552/emojis/1f357.png similarity index 100% rename from dist/v-1547534999795/emojis/1f357.png rename to dist/v-1549282893552/emojis/1f357.png diff --git a/dist/v-1547534999795/emojis/1f358.png b/dist/v-1549282893552/emojis/1f358.png similarity index 100% rename from dist/v-1547534999795/emojis/1f358.png rename to dist/v-1549282893552/emojis/1f358.png diff --git a/dist/v-1547534999795/emojis/1f359.png b/dist/v-1549282893552/emojis/1f359.png similarity index 100% rename from dist/v-1547534999795/emojis/1f359.png rename to dist/v-1549282893552/emojis/1f359.png diff --git a/dist/v-1547534999795/emojis/1f35a.png b/dist/v-1549282893552/emojis/1f35a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f35a.png rename to dist/v-1549282893552/emojis/1f35a.png diff --git a/dist/v-1547534999795/emojis/1f35b.png b/dist/v-1549282893552/emojis/1f35b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f35b.png rename to dist/v-1549282893552/emojis/1f35b.png diff --git a/dist/v-1547534999795/emojis/1f35c.png b/dist/v-1549282893552/emojis/1f35c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f35c.png rename to dist/v-1549282893552/emojis/1f35c.png diff --git a/dist/v-1547534999795/emojis/1f35d.png b/dist/v-1549282893552/emojis/1f35d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f35d.png rename to dist/v-1549282893552/emojis/1f35d.png diff --git a/dist/v-1547534999795/emojis/1f35e.png b/dist/v-1549282893552/emojis/1f35e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f35e.png rename to dist/v-1549282893552/emojis/1f35e.png diff --git a/dist/v-1547534999795/emojis/1f35f.png b/dist/v-1549282893552/emojis/1f35f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f35f.png rename to dist/v-1549282893552/emojis/1f35f.png diff --git a/dist/v-1547534999795/emojis/1f360.png b/dist/v-1549282893552/emojis/1f360.png similarity index 100% rename from dist/v-1547534999795/emojis/1f360.png rename to dist/v-1549282893552/emojis/1f360.png diff --git a/dist/v-1547534999795/emojis/1f361.png b/dist/v-1549282893552/emojis/1f361.png similarity index 100% rename from dist/v-1547534999795/emojis/1f361.png rename to dist/v-1549282893552/emojis/1f361.png diff --git a/dist/v-1547534999795/emojis/1f362.png b/dist/v-1549282893552/emojis/1f362.png similarity index 100% rename from dist/v-1547534999795/emojis/1f362.png rename to dist/v-1549282893552/emojis/1f362.png diff --git a/dist/v-1547534999795/emojis/1f363.png b/dist/v-1549282893552/emojis/1f363.png similarity index 100% rename from dist/v-1547534999795/emojis/1f363.png rename to dist/v-1549282893552/emojis/1f363.png diff --git a/dist/v-1547534999795/emojis/1f364.png b/dist/v-1549282893552/emojis/1f364.png similarity index 100% rename from dist/v-1547534999795/emojis/1f364.png rename to dist/v-1549282893552/emojis/1f364.png diff --git a/dist/v-1547534999795/emojis/1f365.png b/dist/v-1549282893552/emojis/1f365.png similarity index 100% rename from dist/v-1547534999795/emojis/1f365.png rename to dist/v-1549282893552/emojis/1f365.png diff --git a/dist/v-1547534999795/emojis/1f366.png b/dist/v-1549282893552/emojis/1f366.png similarity index 100% rename from dist/v-1547534999795/emojis/1f366.png rename to dist/v-1549282893552/emojis/1f366.png diff --git a/dist/v-1547534999795/emojis/1f367.png b/dist/v-1549282893552/emojis/1f367.png similarity index 100% rename from dist/v-1547534999795/emojis/1f367.png rename to dist/v-1549282893552/emojis/1f367.png diff --git a/dist/v-1547534999795/emojis/1f368.png b/dist/v-1549282893552/emojis/1f368.png similarity index 100% rename from dist/v-1547534999795/emojis/1f368.png rename to dist/v-1549282893552/emojis/1f368.png diff --git a/dist/v-1547534999795/emojis/1f369.png b/dist/v-1549282893552/emojis/1f369.png similarity index 100% rename from dist/v-1547534999795/emojis/1f369.png rename to dist/v-1549282893552/emojis/1f369.png diff --git a/dist/v-1547534999795/emojis/1f36a.png b/dist/v-1549282893552/emojis/1f36a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f36a.png rename to dist/v-1549282893552/emojis/1f36a.png diff --git a/dist/v-1547534999795/emojis/1f36b.png b/dist/v-1549282893552/emojis/1f36b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f36b.png rename to dist/v-1549282893552/emojis/1f36b.png diff --git a/dist/v-1547534999795/emojis/1f36c.png b/dist/v-1549282893552/emojis/1f36c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f36c.png rename to dist/v-1549282893552/emojis/1f36c.png diff --git a/dist/v-1547534999795/emojis/1f36d.png b/dist/v-1549282893552/emojis/1f36d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f36d.png rename to dist/v-1549282893552/emojis/1f36d.png diff --git a/dist/v-1547534999795/emojis/1f36e.png b/dist/v-1549282893552/emojis/1f36e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f36e.png rename to dist/v-1549282893552/emojis/1f36e.png diff --git a/dist/v-1547534999795/emojis/1f36f.png b/dist/v-1549282893552/emojis/1f36f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f36f.png rename to dist/v-1549282893552/emojis/1f36f.png diff --git a/dist/v-1547534999795/emojis/1f370.png b/dist/v-1549282893552/emojis/1f370.png similarity index 100% rename from dist/v-1547534999795/emojis/1f370.png rename to dist/v-1549282893552/emojis/1f370.png diff --git a/dist/v-1547534999795/emojis/1f371.png b/dist/v-1549282893552/emojis/1f371.png similarity index 100% rename from dist/v-1547534999795/emojis/1f371.png rename to dist/v-1549282893552/emojis/1f371.png diff --git a/dist/v-1547534999795/emojis/1f372.png b/dist/v-1549282893552/emojis/1f372.png similarity index 100% rename from dist/v-1547534999795/emojis/1f372.png rename to dist/v-1549282893552/emojis/1f372.png diff --git a/dist/v-1547534999795/emojis/1f373.png b/dist/v-1549282893552/emojis/1f373.png similarity index 100% rename from dist/v-1547534999795/emojis/1f373.png rename to dist/v-1549282893552/emojis/1f373.png diff --git a/dist/v-1547534999795/emojis/1f374.png b/dist/v-1549282893552/emojis/1f374.png similarity index 100% rename from dist/v-1547534999795/emojis/1f374.png rename to dist/v-1549282893552/emojis/1f374.png diff --git a/dist/v-1547534999795/emojis/1f375.png b/dist/v-1549282893552/emojis/1f375.png similarity index 100% rename from dist/v-1547534999795/emojis/1f375.png rename to dist/v-1549282893552/emojis/1f375.png diff --git a/dist/v-1547534999795/emojis/1f376.png b/dist/v-1549282893552/emojis/1f376.png similarity index 100% rename from dist/v-1547534999795/emojis/1f376.png rename to dist/v-1549282893552/emojis/1f376.png diff --git a/dist/v-1547534999795/emojis/1f377.png b/dist/v-1549282893552/emojis/1f377.png similarity index 100% rename from dist/v-1547534999795/emojis/1f377.png rename to dist/v-1549282893552/emojis/1f377.png diff --git a/dist/v-1547534999795/emojis/1f378.png b/dist/v-1549282893552/emojis/1f378.png similarity index 100% rename from dist/v-1547534999795/emojis/1f378.png rename to dist/v-1549282893552/emojis/1f378.png diff --git a/dist/v-1547534999795/emojis/1f379.png b/dist/v-1549282893552/emojis/1f379.png similarity index 100% rename from dist/v-1547534999795/emojis/1f379.png rename to dist/v-1549282893552/emojis/1f379.png diff --git a/dist/v-1547534999795/emojis/1f37a.png b/dist/v-1549282893552/emojis/1f37a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f37a.png rename to dist/v-1549282893552/emojis/1f37a.png diff --git a/dist/v-1547534999795/emojis/1f37b.png b/dist/v-1549282893552/emojis/1f37b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f37b.png rename to dist/v-1549282893552/emojis/1f37b.png diff --git a/dist/v-1547534999795/emojis/1f37c.png b/dist/v-1549282893552/emojis/1f37c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f37c.png rename to dist/v-1549282893552/emojis/1f37c.png diff --git a/dist/v-1547534999795/emojis/1f37d.png b/dist/v-1549282893552/emojis/1f37d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f37d.png rename to dist/v-1549282893552/emojis/1f37d.png diff --git a/dist/v-1547534999795/emojis/1f37e.png b/dist/v-1549282893552/emojis/1f37e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f37e.png rename to dist/v-1549282893552/emojis/1f37e.png diff --git a/dist/v-1547534999795/emojis/1f37f.png b/dist/v-1549282893552/emojis/1f37f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f37f.png rename to dist/v-1549282893552/emojis/1f37f.png diff --git a/dist/v-1547534999795/emojis/1f380.png b/dist/v-1549282893552/emojis/1f380.png similarity index 100% rename from dist/v-1547534999795/emojis/1f380.png rename to dist/v-1549282893552/emojis/1f380.png diff --git a/dist/v-1547534999795/emojis/1f381.png b/dist/v-1549282893552/emojis/1f381.png similarity index 100% rename from dist/v-1547534999795/emojis/1f381.png rename to dist/v-1549282893552/emojis/1f381.png diff --git a/dist/v-1547534999795/emojis/1f382.png b/dist/v-1549282893552/emojis/1f382.png similarity index 100% rename from dist/v-1547534999795/emojis/1f382.png rename to dist/v-1549282893552/emojis/1f382.png diff --git a/dist/v-1547534999795/emojis/1f383.png b/dist/v-1549282893552/emojis/1f383.png similarity index 100% rename from dist/v-1547534999795/emojis/1f383.png rename to dist/v-1549282893552/emojis/1f383.png diff --git a/dist/v-1547534999795/emojis/1f384.png b/dist/v-1549282893552/emojis/1f384.png similarity index 100% rename from dist/v-1547534999795/emojis/1f384.png rename to dist/v-1549282893552/emojis/1f384.png diff --git a/dist/v-1547534999795/emojis/1f385.png b/dist/v-1549282893552/emojis/1f385.png similarity index 100% rename from dist/v-1547534999795/emojis/1f385.png rename to dist/v-1549282893552/emojis/1f385.png diff --git a/dist/v-1547534999795/emojis/1f386.png b/dist/v-1549282893552/emojis/1f386.png similarity index 100% rename from dist/v-1547534999795/emojis/1f386.png rename to dist/v-1549282893552/emojis/1f386.png diff --git a/dist/v-1547534999795/emojis/1f387.png b/dist/v-1549282893552/emojis/1f387.png similarity index 100% rename from dist/v-1547534999795/emojis/1f387.png rename to dist/v-1549282893552/emojis/1f387.png diff --git a/dist/v-1547534999795/emojis/1f388.png b/dist/v-1549282893552/emojis/1f388.png similarity index 100% rename from dist/v-1547534999795/emojis/1f388.png rename to dist/v-1549282893552/emojis/1f388.png diff --git a/dist/v-1547534999795/emojis/1f389.png b/dist/v-1549282893552/emojis/1f389.png similarity index 100% rename from dist/v-1547534999795/emojis/1f389.png rename to dist/v-1549282893552/emojis/1f389.png diff --git a/dist/v-1547534999795/emojis/1f38a.png b/dist/v-1549282893552/emojis/1f38a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f38a.png rename to dist/v-1549282893552/emojis/1f38a.png diff --git a/dist/v-1547534999795/emojis/1f38b.png b/dist/v-1549282893552/emojis/1f38b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f38b.png rename to dist/v-1549282893552/emojis/1f38b.png diff --git a/dist/v-1547534999795/emojis/1f38c.png b/dist/v-1549282893552/emojis/1f38c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f38c.png rename to dist/v-1549282893552/emojis/1f38c.png diff --git a/dist/v-1547534999795/emojis/1f38d.png b/dist/v-1549282893552/emojis/1f38d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f38d.png rename to dist/v-1549282893552/emojis/1f38d.png diff --git a/dist/v-1547534999795/emojis/1f38e.png b/dist/v-1549282893552/emojis/1f38e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f38e.png rename to dist/v-1549282893552/emojis/1f38e.png diff --git a/dist/v-1547534999795/emojis/1f38f.png b/dist/v-1549282893552/emojis/1f38f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f38f.png rename to dist/v-1549282893552/emojis/1f38f.png diff --git a/dist/v-1547534999795/emojis/1f390.png b/dist/v-1549282893552/emojis/1f390.png similarity index 100% rename from dist/v-1547534999795/emojis/1f390.png rename to dist/v-1549282893552/emojis/1f390.png diff --git a/dist/v-1547534999795/emojis/1f391.png b/dist/v-1549282893552/emojis/1f391.png similarity index 100% rename from dist/v-1547534999795/emojis/1f391.png rename to dist/v-1549282893552/emojis/1f391.png diff --git a/dist/v-1547534999795/emojis/1f392.png b/dist/v-1549282893552/emojis/1f392.png similarity index 100% rename from dist/v-1547534999795/emojis/1f392.png rename to dist/v-1549282893552/emojis/1f392.png diff --git a/dist/v-1547534999795/emojis/1f393.png b/dist/v-1549282893552/emojis/1f393.png similarity index 100% rename from dist/v-1547534999795/emojis/1f393.png rename to dist/v-1549282893552/emojis/1f393.png diff --git a/dist/v-1547534999795/emojis/1f396.png b/dist/v-1549282893552/emojis/1f396.png similarity index 100% rename from dist/v-1547534999795/emojis/1f396.png rename to dist/v-1549282893552/emojis/1f396.png diff --git a/dist/v-1547534999795/emojis/1f397.png b/dist/v-1549282893552/emojis/1f397.png similarity index 100% rename from dist/v-1547534999795/emojis/1f397.png rename to dist/v-1549282893552/emojis/1f397.png diff --git a/dist/v-1547534999795/emojis/1f399.png b/dist/v-1549282893552/emojis/1f399.png similarity index 100% rename from dist/v-1547534999795/emojis/1f399.png rename to dist/v-1549282893552/emojis/1f399.png diff --git a/dist/v-1547534999795/emojis/1f39a.png b/dist/v-1549282893552/emojis/1f39a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f39a.png rename to dist/v-1549282893552/emojis/1f39a.png diff --git a/dist/v-1547534999795/emojis/1f39b.png b/dist/v-1549282893552/emojis/1f39b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f39b.png rename to dist/v-1549282893552/emojis/1f39b.png diff --git a/dist/v-1547534999795/emojis/1f39e.png b/dist/v-1549282893552/emojis/1f39e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f39e.png rename to dist/v-1549282893552/emojis/1f39e.png diff --git a/dist/v-1547534999795/emojis/1f39f.png b/dist/v-1549282893552/emojis/1f39f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f39f.png rename to dist/v-1549282893552/emojis/1f39f.png diff --git a/dist/v-1547534999795/emojis/1f3a0.png b/dist/v-1549282893552/emojis/1f3a0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a0.png rename to dist/v-1549282893552/emojis/1f3a0.png diff --git a/dist/v-1547534999795/emojis/1f3a1.png b/dist/v-1549282893552/emojis/1f3a1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a1.png rename to dist/v-1549282893552/emojis/1f3a1.png diff --git a/dist/v-1547534999795/emojis/1f3a2.png b/dist/v-1549282893552/emojis/1f3a2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a2.png rename to dist/v-1549282893552/emojis/1f3a2.png diff --git a/dist/v-1547534999795/emojis/1f3a3.png b/dist/v-1549282893552/emojis/1f3a3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a3.png rename to dist/v-1549282893552/emojis/1f3a3.png diff --git a/dist/v-1547534999795/emojis/1f3a4.png b/dist/v-1549282893552/emojis/1f3a4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a4.png rename to dist/v-1549282893552/emojis/1f3a4.png diff --git a/dist/v-1547534999795/emojis/1f3a5.png b/dist/v-1549282893552/emojis/1f3a5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a5.png rename to dist/v-1549282893552/emojis/1f3a5.png diff --git a/dist/v-1547534999795/emojis/1f3a6.png b/dist/v-1549282893552/emojis/1f3a6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a6.png rename to dist/v-1549282893552/emojis/1f3a6.png diff --git a/dist/v-1547534999795/emojis/1f3a7.png b/dist/v-1549282893552/emojis/1f3a7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a7.png rename to dist/v-1549282893552/emojis/1f3a7.png diff --git a/dist/v-1547534999795/emojis/1f3a8.png b/dist/v-1549282893552/emojis/1f3a8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a8.png rename to dist/v-1549282893552/emojis/1f3a8.png diff --git a/dist/v-1547534999795/emojis/1f3a9.png b/dist/v-1549282893552/emojis/1f3a9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3a9.png rename to dist/v-1549282893552/emojis/1f3a9.png diff --git a/dist/v-1547534999795/emojis/1f3aa.png b/dist/v-1549282893552/emojis/1f3aa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3aa.png rename to dist/v-1549282893552/emojis/1f3aa.png diff --git a/dist/v-1547534999795/emojis/1f3ab.png b/dist/v-1549282893552/emojis/1f3ab.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ab.png rename to dist/v-1549282893552/emojis/1f3ab.png diff --git a/dist/v-1547534999795/emojis/1f3ac.png b/dist/v-1549282893552/emojis/1f3ac.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ac.png rename to dist/v-1549282893552/emojis/1f3ac.png diff --git a/dist/v-1547534999795/emojis/1f3ad.png b/dist/v-1549282893552/emojis/1f3ad.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ad.png rename to dist/v-1549282893552/emojis/1f3ad.png diff --git a/dist/v-1547534999795/emojis/1f3ae.png b/dist/v-1549282893552/emojis/1f3ae.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ae.png rename to dist/v-1549282893552/emojis/1f3ae.png diff --git a/dist/v-1547534999795/emojis/1f3af.png b/dist/v-1549282893552/emojis/1f3af.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3af.png rename to dist/v-1549282893552/emojis/1f3af.png diff --git a/dist/v-1547534999795/emojis/1f3b0.png b/dist/v-1549282893552/emojis/1f3b0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b0.png rename to dist/v-1549282893552/emojis/1f3b0.png diff --git a/dist/v-1547534999795/emojis/1f3b1.png b/dist/v-1549282893552/emojis/1f3b1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b1.png rename to dist/v-1549282893552/emojis/1f3b1.png diff --git a/dist/v-1547534999795/emojis/1f3b2.png b/dist/v-1549282893552/emojis/1f3b2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b2.png rename to dist/v-1549282893552/emojis/1f3b2.png diff --git a/dist/v-1547534999795/emojis/1f3b3.png b/dist/v-1549282893552/emojis/1f3b3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b3.png rename to dist/v-1549282893552/emojis/1f3b3.png diff --git a/dist/v-1547534999795/emojis/1f3b4.png b/dist/v-1549282893552/emojis/1f3b4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b4.png rename to dist/v-1549282893552/emojis/1f3b4.png diff --git a/dist/v-1547534999795/emojis/1f3b5.png b/dist/v-1549282893552/emojis/1f3b5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b5.png rename to dist/v-1549282893552/emojis/1f3b5.png diff --git a/dist/v-1547534999795/emojis/1f3b6.png b/dist/v-1549282893552/emojis/1f3b6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b6.png rename to dist/v-1549282893552/emojis/1f3b6.png diff --git a/dist/v-1547534999795/emojis/1f3b7.png b/dist/v-1549282893552/emojis/1f3b7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b7.png rename to dist/v-1549282893552/emojis/1f3b7.png diff --git a/dist/v-1547534999795/emojis/1f3b8.png b/dist/v-1549282893552/emojis/1f3b8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b8.png rename to dist/v-1549282893552/emojis/1f3b8.png diff --git a/dist/v-1547534999795/emojis/1f3b9.png b/dist/v-1549282893552/emojis/1f3b9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3b9.png rename to dist/v-1549282893552/emojis/1f3b9.png diff --git a/dist/v-1547534999795/emojis/1f3ba.png b/dist/v-1549282893552/emojis/1f3ba.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ba.png rename to dist/v-1549282893552/emojis/1f3ba.png diff --git a/dist/v-1547534999795/emojis/1f3bb.png b/dist/v-1549282893552/emojis/1f3bb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3bb.png rename to dist/v-1549282893552/emojis/1f3bb.png diff --git a/dist/v-1547534999795/emojis/1f3bc.png b/dist/v-1549282893552/emojis/1f3bc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3bc.png rename to dist/v-1549282893552/emojis/1f3bc.png diff --git a/dist/v-1547534999795/emojis/1f3bd.png b/dist/v-1549282893552/emojis/1f3bd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3bd.png rename to dist/v-1549282893552/emojis/1f3bd.png diff --git a/dist/v-1547534999795/emojis/1f3be.png b/dist/v-1549282893552/emojis/1f3be.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3be.png rename to dist/v-1549282893552/emojis/1f3be.png diff --git a/dist/v-1547534999795/emojis/1f3bf.png b/dist/v-1549282893552/emojis/1f3bf.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3bf.png rename to dist/v-1549282893552/emojis/1f3bf.png diff --git a/dist/v-1547534999795/emojis/1f3c0.png b/dist/v-1549282893552/emojis/1f3c0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c0.png rename to dist/v-1549282893552/emojis/1f3c0.png diff --git a/dist/v-1547534999795/emojis/1f3c1.png b/dist/v-1549282893552/emojis/1f3c1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c1.png rename to dist/v-1549282893552/emojis/1f3c1.png diff --git a/dist/v-1547534999795/emojis/1f3c2.png b/dist/v-1549282893552/emojis/1f3c2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c2.png rename to dist/v-1549282893552/emojis/1f3c2.png diff --git a/dist/v-1547534999795/emojis/1f3c3-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f3c3-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c3-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f3c3-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3c3-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f3c3-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c3-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f3c3-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3c3.png b/dist/v-1549282893552/emojis/1f3c3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c3.png rename to dist/v-1549282893552/emojis/1f3c3.png diff --git a/dist/v-1547534999795/emojis/1f3c4-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f3c4-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c4-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f3c4-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3c4-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f3c4-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c4-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f3c4-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3c4.png b/dist/v-1549282893552/emojis/1f3c4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c4.png rename to dist/v-1549282893552/emojis/1f3c4.png diff --git a/dist/v-1547534999795/emojis/1f3c5.png b/dist/v-1549282893552/emojis/1f3c5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c5.png rename to dist/v-1549282893552/emojis/1f3c5.png diff --git a/dist/v-1547534999795/emojis/1f3c6.png b/dist/v-1549282893552/emojis/1f3c6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c6.png rename to dist/v-1549282893552/emojis/1f3c6.png diff --git a/dist/v-1547534999795/emojis/1f3c7.png b/dist/v-1549282893552/emojis/1f3c7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c7.png rename to dist/v-1549282893552/emojis/1f3c7.png diff --git a/dist/v-1547534999795/emojis/1f3c8.png b/dist/v-1549282893552/emojis/1f3c8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c8.png rename to dist/v-1549282893552/emojis/1f3c8.png diff --git a/dist/v-1547534999795/emojis/1f3c9.png b/dist/v-1549282893552/emojis/1f3c9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3c9.png rename to dist/v-1549282893552/emojis/1f3c9.png diff --git a/dist/v-1547534999795/emojis/1f3ca-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f3ca-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ca-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f3ca-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3ca-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f3ca-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ca-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f3ca-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3ca.png b/dist/v-1549282893552/emojis/1f3ca.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ca.png rename to dist/v-1549282893552/emojis/1f3ca.png diff --git a/dist/v-1547534999795/emojis/1f3cb-fe0f-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f3cb-fe0f-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3cb-fe0f-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f3cb-fe0f-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3cb-fe0f-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f3cb-fe0f-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3cb-fe0f-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f3cb-fe0f-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3cb.png b/dist/v-1549282893552/emojis/1f3cb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3cb.png rename to dist/v-1549282893552/emojis/1f3cb.png diff --git a/dist/v-1547534999795/emojis/1f3cc-fe0f-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f3cc-fe0f-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3cc-fe0f-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f3cc-fe0f-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3cc-fe0f-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f3cc-fe0f-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3cc-fe0f-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f3cc-fe0f-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f3cc.png b/dist/v-1549282893552/emojis/1f3cc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3cc.png rename to dist/v-1549282893552/emojis/1f3cc.png diff --git a/dist/v-1547534999795/emojis/1f3cd.png b/dist/v-1549282893552/emojis/1f3cd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3cd.png rename to dist/v-1549282893552/emojis/1f3cd.png diff --git a/dist/v-1547534999795/emojis/1f3ce.png b/dist/v-1549282893552/emojis/1f3ce.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ce.png rename to dist/v-1549282893552/emojis/1f3ce.png diff --git a/dist/v-1547534999795/emojis/1f3cf.png b/dist/v-1549282893552/emojis/1f3cf.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3cf.png rename to dist/v-1549282893552/emojis/1f3cf.png diff --git a/dist/v-1547534999795/emojis/1f3d0.png b/dist/v-1549282893552/emojis/1f3d0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d0.png rename to dist/v-1549282893552/emojis/1f3d0.png diff --git a/dist/v-1547534999795/emojis/1f3d1.png b/dist/v-1549282893552/emojis/1f3d1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d1.png rename to dist/v-1549282893552/emojis/1f3d1.png diff --git a/dist/v-1547534999795/emojis/1f3d2.png b/dist/v-1549282893552/emojis/1f3d2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d2.png rename to dist/v-1549282893552/emojis/1f3d2.png diff --git a/dist/v-1547534999795/emojis/1f3d3.png b/dist/v-1549282893552/emojis/1f3d3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d3.png rename to dist/v-1549282893552/emojis/1f3d3.png diff --git a/dist/v-1547534999795/emojis/1f3d4.png b/dist/v-1549282893552/emojis/1f3d4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d4.png rename to dist/v-1549282893552/emojis/1f3d4.png diff --git a/dist/v-1547534999795/emojis/1f3d5.png b/dist/v-1549282893552/emojis/1f3d5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d5.png rename to dist/v-1549282893552/emojis/1f3d5.png diff --git a/dist/v-1547534999795/emojis/1f3d6.png b/dist/v-1549282893552/emojis/1f3d6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d6.png rename to dist/v-1549282893552/emojis/1f3d6.png diff --git a/dist/v-1547534999795/emojis/1f3d7.png b/dist/v-1549282893552/emojis/1f3d7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d7.png rename to dist/v-1549282893552/emojis/1f3d7.png diff --git a/dist/v-1547534999795/emojis/1f3d8.png b/dist/v-1549282893552/emojis/1f3d8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d8.png rename to dist/v-1549282893552/emojis/1f3d8.png diff --git a/dist/v-1547534999795/emojis/1f3d9.png b/dist/v-1549282893552/emojis/1f3d9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3d9.png rename to dist/v-1549282893552/emojis/1f3d9.png diff --git a/dist/v-1547534999795/emojis/1f3da.png b/dist/v-1549282893552/emojis/1f3da.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3da.png rename to dist/v-1549282893552/emojis/1f3da.png diff --git a/dist/v-1547534999795/emojis/1f3db.png b/dist/v-1549282893552/emojis/1f3db.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3db.png rename to dist/v-1549282893552/emojis/1f3db.png diff --git a/dist/v-1547534999795/emojis/1f3dc.png b/dist/v-1549282893552/emojis/1f3dc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3dc.png rename to dist/v-1549282893552/emojis/1f3dc.png diff --git a/dist/v-1547534999795/emojis/1f3dd.png b/dist/v-1549282893552/emojis/1f3dd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3dd.png rename to dist/v-1549282893552/emojis/1f3dd.png diff --git a/dist/v-1547534999795/emojis/1f3de.png b/dist/v-1549282893552/emojis/1f3de.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3de.png rename to dist/v-1549282893552/emojis/1f3de.png diff --git a/dist/v-1547534999795/emojis/1f3df.png b/dist/v-1549282893552/emojis/1f3df.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3df.png rename to dist/v-1549282893552/emojis/1f3df.png diff --git a/dist/v-1547534999795/emojis/1f3e0.png b/dist/v-1549282893552/emojis/1f3e0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e0.png rename to dist/v-1549282893552/emojis/1f3e0.png diff --git a/dist/v-1547534999795/emojis/1f3e1.png b/dist/v-1549282893552/emojis/1f3e1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e1.png rename to dist/v-1549282893552/emojis/1f3e1.png diff --git a/dist/v-1547534999795/emojis/1f3e2.png b/dist/v-1549282893552/emojis/1f3e2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e2.png rename to dist/v-1549282893552/emojis/1f3e2.png diff --git a/dist/v-1547534999795/emojis/1f3e3.png b/dist/v-1549282893552/emojis/1f3e3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e3.png rename to dist/v-1549282893552/emojis/1f3e3.png diff --git a/dist/v-1547534999795/emojis/1f3e4.png b/dist/v-1549282893552/emojis/1f3e4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e4.png rename to dist/v-1549282893552/emojis/1f3e4.png diff --git a/dist/v-1547534999795/emojis/1f3e5.png b/dist/v-1549282893552/emojis/1f3e5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e5.png rename to dist/v-1549282893552/emojis/1f3e5.png diff --git a/dist/v-1547534999795/emojis/1f3e6.png b/dist/v-1549282893552/emojis/1f3e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e6.png rename to dist/v-1549282893552/emojis/1f3e6.png diff --git a/dist/v-1547534999795/emojis/1f3e7.png b/dist/v-1549282893552/emojis/1f3e7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e7.png rename to dist/v-1549282893552/emojis/1f3e7.png diff --git a/dist/v-1547534999795/emojis/1f3e8.png b/dist/v-1549282893552/emojis/1f3e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e8.png rename to dist/v-1549282893552/emojis/1f3e8.png diff --git a/dist/v-1547534999795/emojis/1f3e9.png b/dist/v-1549282893552/emojis/1f3e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3e9.png rename to dist/v-1549282893552/emojis/1f3e9.png diff --git a/dist/v-1547534999795/emojis/1f3ea.png b/dist/v-1549282893552/emojis/1f3ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ea.png rename to dist/v-1549282893552/emojis/1f3ea.png diff --git a/dist/v-1547534999795/emojis/1f3eb.png b/dist/v-1549282893552/emojis/1f3eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3eb.png rename to dist/v-1549282893552/emojis/1f3eb.png diff --git a/dist/v-1547534999795/emojis/1f3ec.png b/dist/v-1549282893552/emojis/1f3ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ec.png rename to dist/v-1549282893552/emojis/1f3ec.png diff --git a/dist/v-1547534999795/emojis/1f3ed.png b/dist/v-1549282893552/emojis/1f3ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ed.png rename to dist/v-1549282893552/emojis/1f3ed.png diff --git a/dist/v-1547534999795/emojis/1f3ee.png b/dist/v-1549282893552/emojis/1f3ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ee.png rename to dist/v-1549282893552/emojis/1f3ee.png diff --git a/dist/v-1547534999795/emojis/1f3ef.png b/dist/v-1549282893552/emojis/1f3ef.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ef.png rename to dist/v-1549282893552/emojis/1f3ef.png diff --git a/dist/v-1547534999795/emojis/1f3f0.png b/dist/v-1549282893552/emojis/1f3f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3f0.png rename to dist/v-1549282893552/emojis/1f3f0.png diff --git a/dist/v-1547534999795/emojis/1f3f3-fe0f-200d-1f308.png b/dist/v-1549282893552/emojis/1f3f3-fe0f-200d-1f308.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3f3-fe0f-200d-1f308.png rename to dist/v-1549282893552/emojis/1f3f3-fe0f-200d-1f308.png diff --git a/dist/v-1547534999795/emojis/1f3f3.png b/dist/v-1549282893552/emojis/1f3f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3f3.png rename to dist/v-1549282893552/emojis/1f3f3.png diff --git a/dist/v-1547534999795/emojis/1f3f4.png b/dist/v-1549282893552/emojis/1f3f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3f4.png rename to dist/v-1549282893552/emojis/1f3f4.png diff --git a/dist/v-1547534999795/emojis/1f3f5.png b/dist/v-1549282893552/emojis/1f3f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3f5.png rename to dist/v-1549282893552/emojis/1f3f5.png diff --git a/dist/v-1547534999795/emojis/1f3f7.png b/dist/v-1549282893552/emojis/1f3f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3f7.png rename to dist/v-1549282893552/emojis/1f3f7.png diff --git a/dist/v-1547534999795/emojis/1f3f8.png b/dist/v-1549282893552/emojis/1f3f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3f8.png rename to dist/v-1549282893552/emojis/1f3f8.png diff --git a/dist/v-1547534999795/emojis/1f3f9.png b/dist/v-1549282893552/emojis/1f3f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3f9.png rename to dist/v-1549282893552/emojis/1f3f9.png diff --git a/dist/v-1547534999795/emojis/1f3fa.png b/dist/v-1549282893552/emojis/1f3fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3fa.png rename to dist/v-1549282893552/emojis/1f3fa.png diff --git a/dist/v-1547534999795/emojis/1f3fb.png b/dist/v-1549282893552/emojis/1f3fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3fb.png rename to dist/v-1549282893552/emojis/1f3fb.png diff --git a/dist/v-1547534999795/emojis/1f3fc.png b/dist/v-1549282893552/emojis/1f3fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3fc.png rename to dist/v-1549282893552/emojis/1f3fc.png diff --git a/dist/v-1547534999795/emojis/1f3fd.png b/dist/v-1549282893552/emojis/1f3fd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3fd.png rename to dist/v-1549282893552/emojis/1f3fd.png diff --git a/dist/v-1547534999795/emojis/1f3fe.png b/dist/v-1549282893552/emojis/1f3fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3fe.png rename to dist/v-1549282893552/emojis/1f3fe.png diff --git a/dist/v-1547534999795/emojis/1f3ff.png b/dist/v-1549282893552/emojis/1f3ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f3ff.png rename to dist/v-1549282893552/emojis/1f3ff.png diff --git a/dist/v-1547534999795/emojis/1f400.png b/dist/v-1549282893552/emojis/1f400.png similarity index 100% rename from dist/v-1547534999795/emojis/1f400.png rename to dist/v-1549282893552/emojis/1f400.png diff --git a/dist/v-1547534999795/emojis/1f401.png b/dist/v-1549282893552/emojis/1f401.png similarity index 100% rename from dist/v-1547534999795/emojis/1f401.png rename to dist/v-1549282893552/emojis/1f401.png diff --git a/dist/v-1547534999795/emojis/1f402.png b/dist/v-1549282893552/emojis/1f402.png similarity index 100% rename from dist/v-1547534999795/emojis/1f402.png rename to dist/v-1549282893552/emojis/1f402.png diff --git a/dist/v-1547534999795/emojis/1f403.png b/dist/v-1549282893552/emojis/1f403.png similarity index 100% rename from dist/v-1547534999795/emojis/1f403.png rename to dist/v-1549282893552/emojis/1f403.png diff --git a/dist/v-1547534999795/emojis/1f404.png b/dist/v-1549282893552/emojis/1f404.png similarity index 100% rename from dist/v-1547534999795/emojis/1f404.png rename to dist/v-1549282893552/emojis/1f404.png diff --git a/dist/v-1547534999795/emojis/1f405.png b/dist/v-1549282893552/emojis/1f405.png similarity index 100% rename from dist/v-1547534999795/emojis/1f405.png rename to dist/v-1549282893552/emojis/1f405.png diff --git a/dist/v-1547534999795/emojis/1f406.png b/dist/v-1549282893552/emojis/1f406.png similarity index 100% rename from dist/v-1547534999795/emojis/1f406.png rename to dist/v-1549282893552/emojis/1f406.png diff --git a/dist/v-1547534999795/emojis/1f407.png b/dist/v-1549282893552/emojis/1f407.png similarity index 100% rename from dist/v-1547534999795/emojis/1f407.png rename to dist/v-1549282893552/emojis/1f407.png diff --git a/dist/v-1547534999795/emojis/1f408.png b/dist/v-1549282893552/emojis/1f408.png similarity index 100% rename from dist/v-1547534999795/emojis/1f408.png rename to dist/v-1549282893552/emojis/1f408.png diff --git a/dist/v-1547534999795/emojis/1f409.png b/dist/v-1549282893552/emojis/1f409.png similarity index 100% rename from dist/v-1547534999795/emojis/1f409.png rename to dist/v-1549282893552/emojis/1f409.png diff --git a/dist/v-1547534999795/emojis/1f40a.png b/dist/v-1549282893552/emojis/1f40a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f40a.png rename to dist/v-1549282893552/emojis/1f40a.png diff --git a/dist/v-1547534999795/emojis/1f40b.png b/dist/v-1549282893552/emojis/1f40b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f40b.png rename to dist/v-1549282893552/emojis/1f40b.png diff --git a/dist/v-1547534999795/emojis/1f40c.png b/dist/v-1549282893552/emojis/1f40c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f40c.png rename to dist/v-1549282893552/emojis/1f40c.png diff --git a/dist/v-1547534999795/emojis/1f40d.png b/dist/v-1549282893552/emojis/1f40d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f40d.png rename to dist/v-1549282893552/emojis/1f40d.png diff --git a/dist/v-1547534999795/emojis/1f40e.png b/dist/v-1549282893552/emojis/1f40e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f40e.png rename to dist/v-1549282893552/emojis/1f40e.png diff --git a/dist/v-1547534999795/emojis/1f40f.png b/dist/v-1549282893552/emojis/1f40f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f40f.png rename to dist/v-1549282893552/emojis/1f40f.png diff --git a/dist/v-1547534999795/emojis/1f410.png b/dist/v-1549282893552/emojis/1f410.png similarity index 100% rename from dist/v-1547534999795/emojis/1f410.png rename to dist/v-1549282893552/emojis/1f410.png diff --git a/dist/v-1547534999795/emojis/1f411.png b/dist/v-1549282893552/emojis/1f411.png similarity index 100% rename from dist/v-1547534999795/emojis/1f411.png rename to dist/v-1549282893552/emojis/1f411.png diff --git a/dist/v-1547534999795/emojis/1f412.png b/dist/v-1549282893552/emojis/1f412.png similarity index 100% rename from dist/v-1547534999795/emojis/1f412.png rename to dist/v-1549282893552/emojis/1f412.png diff --git a/dist/v-1547534999795/emojis/1f413.png b/dist/v-1549282893552/emojis/1f413.png similarity index 100% rename from dist/v-1547534999795/emojis/1f413.png rename to dist/v-1549282893552/emojis/1f413.png diff --git a/dist/v-1547534999795/emojis/1f414.png b/dist/v-1549282893552/emojis/1f414.png similarity index 100% rename from dist/v-1547534999795/emojis/1f414.png rename to dist/v-1549282893552/emojis/1f414.png diff --git a/dist/v-1547534999795/emojis/1f415.png b/dist/v-1549282893552/emojis/1f415.png similarity index 100% rename from dist/v-1547534999795/emojis/1f415.png rename to dist/v-1549282893552/emojis/1f415.png diff --git a/dist/v-1547534999795/emojis/1f416.png b/dist/v-1549282893552/emojis/1f416.png similarity index 100% rename from dist/v-1547534999795/emojis/1f416.png rename to dist/v-1549282893552/emojis/1f416.png diff --git a/dist/v-1547534999795/emojis/1f417.png b/dist/v-1549282893552/emojis/1f417.png similarity index 100% rename from dist/v-1547534999795/emojis/1f417.png rename to dist/v-1549282893552/emojis/1f417.png diff --git a/dist/v-1547534999795/emojis/1f418.png b/dist/v-1549282893552/emojis/1f418.png similarity index 100% rename from dist/v-1547534999795/emojis/1f418.png rename to dist/v-1549282893552/emojis/1f418.png diff --git a/dist/v-1547534999795/emojis/1f419.png b/dist/v-1549282893552/emojis/1f419.png similarity index 100% rename from dist/v-1547534999795/emojis/1f419.png rename to dist/v-1549282893552/emojis/1f419.png diff --git a/dist/v-1547534999795/emojis/1f41a.png b/dist/v-1549282893552/emojis/1f41a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f41a.png rename to dist/v-1549282893552/emojis/1f41a.png diff --git a/dist/v-1547534999795/emojis/1f41b.png b/dist/v-1549282893552/emojis/1f41b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f41b.png rename to dist/v-1549282893552/emojis/1f41b.png diff --git a/dist/v-1547534999795/emojis/1f41c.png b/dist/v-1549282893552/emojis/1f41c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f41c.png rename to dist/v-1549282893552/emojis/1f41c.png diff --git a/dist/v-1547534999795/emojis/1f41d.png b/dist/v-1549282893552/emojis/1f41d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f41d.png rename to dist/v-1549282893552/emojis/1f41d.png diff --git a/dist/v-1547534999795/emojis/1f41e.png b/dist/v-1549282893552/emojis/1f41e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f41e.png rename to dist/v-1549282893552/emojis/1f41e.png diff --git a/dist/v-1547534999795/emojis/1f41f.png b/dist/v-1549282893552/emojis/1f41f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f41f.png rename to dist/v-1549282893552/emojis/1f41f.png diff --git a/dist/v-1547534999795/emojis/1f420.png b/dist/v-1549282893552/emojis/1f420.png similarity index 100% rename from dist/v-1547534999795/emojis/1f420.png rename to dist/v-1549282893552/emojis/1f420.png diff --git a/dist/v-1547534999795/emojis/1f421.png b/dist/v-1549282893552/emojis/1f421.png similarity index 100% rename from dist/v-1547534999795/emojis/1f421.png rename to dist/v-1549282893552/emojis/1f421.png diff --git a/dist/v-1547534999795/emojis/1f422.png b/dist/v-1549282893552/emojis/1f422.png similarity index 100% rename from dist/v-1547534999795/emojis/1f422.png rename to dist/v-1549282893552/emojis/1f422.png diff --git a/dist/v-1547534999795/emojis/1f423.png b/dist/v-1549282893552/emojis/1f423.png similarity index 100% rename from dist/v-1547534999795/emojis/1f423.png rename to dist/v-1549282893552/emojis/1f423.png diff --git a/dist/v-1547534999795/emojis/1f424.png b/dist/v-1549282893552/emojis/1f424.png similarity index 100% rename from dist/v-1547534999795/emojis/1f424.png rename to dist/v-1549282893552/emojis/1f424.png diff --git a/dist/v-1547534999795/emojis/1f425.png b/dist/v-1549282893552/emojis/1f425.png similarity index 100% rename from dist/v-1547534999795/emojis/1f425.png rename to dist/v-1549282893552/emojis/1f425.png diff --git a/dist/v-1547534999795/emojis/1f426.png b/dist/v-1549282893552/emojis/1f426.png similarity index 100% rename from dist/v-1547534999795/emojis/1f426.png rename to dist/v-1549282893552/emojis/1f426.png diff --git a/dist/v-1547534999795/emojis/1f427.png b/dist/v-1549282893552/emojis/1f427.png similarity index 100% rename from dist/v-1547534999795/emojis/1f427.png rename to dist/v-1549282893552/emojis/1f427.png diff --git a/dist/v-1547534999795/emojis/1f428.png b/dist/v-1549282893552/emojis/1f428.png similarity index 100% rename from dist/v-1547534999795/emojis/1f428.png rename to dist/v-1549282893552/emojis/1f428.png diff --git a/dist/v-1547534999795/emojis/1f429.png b/dist/v-1549282893552/emojis/1f429.png similarity index 100% rename from dist/v-1547534999795/emojis/1f429.png rename to dist/v-1549282893552/emojis/1f429.png diff --git a/dist/v-1547534999795/emojis/1f42a.png b/dist/v-1549282893552/emojis/1f42a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f42a.png rename to dist/v-1549282893552/emojis/1f42a.png diff --git a/dist/v-1547534999795/emojis/1f42b.png b/dist/v-1549282893552/emojis/1f42b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f42b.png rename to dist/v-1549282893552/emojis/1f42b.png diff --git a/dist/v-1547534999795/emojis/1f42c.png b/dist/v-1549282893552/emojis/1f42c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f42c.png rename to dist/v-1549282893552/emojis/1f42c.png diff --git a/dist/v-1547534999795/emojis/1f42d.png b/dist/v-1549282893552/emojis/1f42d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f42d.png rename to dist/v-1549282893552/emojis/1f42d.png diff --git a/dist/v-1547534999795/emojis/1f42e.png b/dist/v-1549282893552/emojis/1f42e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f42e.png rename to dist/v-1549282893552/emojis/1f42e.png diff --git a/dist/v-1547534999795/emojis/1f42f.png b/dist/v-1549282893552/emojis/1f42f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f42f.png rename to dist/v-1549282893552/emojis/1f42f.png diff --git a/dist/v-1547534999795/emojis/1f430.png b/dist/v-1549282893552/emojis/1f430.png similarity index 100% rename from dist/v-1547534999795/emojis/1f430.png rename to dist/v-1549282893552/emojis/1f430.png diff --git a/dist/v-1547534999795/emojis/1f431.png b/dist/v-1549282893552/emojis/1f431.png similarity index 100% rename from dist/v-1547534999795/emojis/1f431.png rename to dist/v-1549282893552/emojis/1f431.png diff --git a/dist/v-1547534999795/emojis/1f432.png b/dist/v-1549282893552/emojis/1f432.png similarity index 100% rename from dist/v-1547534999795/emojis/1f432.png rename to dist/v-1549282893552/emojis/1f432.png diff --git a/dist/v-1547534999795/emojis/1f433.png b/dist/v-1549282893552/emojis/1f433.png similarity index 100% rename from dist/v-1547534999795/emojis/1f433.png rename to dist/v-1549282893552/emojis/1f433.png diff --git a/dist/v-1547534999795/emojis/1f434.png b/dist/v-1549282893552/emojis/1f434.png similarity index 100% rename from dist/v-1547534999795/emojis/1f434.png rename to dist/v-1549282893552/emojis/1f434.png diff --git a/dist/v-1547534999795/emojis/1f435.png b/dist/v-1549282893552/emojis/1f435.png similarity index 100% rename from dist/v-1547534999795/emojis/1f435.png rename to dist/v-1549282893552/emojis/1f435.png diff --git a/dist/v-1547534999795/emojis/1f436.png b/dist/v-1549282893552/emojis/1f436.png similarity index 100% rename from dist/v-1547534999795/emojis/1f436.png rename to dist/v-1549282893552/emojis/1f436.png diff --git a/dist/v-1547534999795/emojis/1f437.png b/dist/v-1549282893552/emojis/1f437.png similarity index 100% rename from dist/v-1547534999795/emojis/1f437.png rename to dist/v-1549282893552/emojis/1f437.png diff --git a/dist/v-1547534999795/emojis/1f438.png b/dist/v-1549282893552/emojis/1f438.png similarity index 100% rename from dist/v-1547534999795/emojis/1f438.png rename to dist/v-1549282893552/emojis/1f438.png diff --git a/dist/v-1547534999795/emojis/1f439.png b/dist/v-1549282893552/emojis/1f439.png similarity index 100% rename from dist/v-1547534999795/emojis/1f439.png rename to dist/v-1549282893552/emojis/1f439.png diff --git a/dist/v-1547534999795/emojis/1f43a.png b/dist/v-1549282893552/emojis/1f43a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f43a.png rename to dist/v-1549282893552/emojis/1f43a.png diff --git a/dist/v-1547534999795/emojis/1f43b.png b/dist/v-1549282893552/emojis/1f43b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f43b.png rename to dist/v-1549282893552/emojis/1f43b.png diff --git a/dist/v-1547534999795/emojis/1f43c.png b/dist/v-1549282893552/emojis/1f43c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f43c.png rename to dist/v-1549282893552/emojis/1f43c.png diff --git a/dist/v-1547534999795/emojis/1f43d.png b/dist/v-1549282893552/emojis/1f43d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f43d.png rename to dist/v-1549282893552/emojis/1f43d.png diff --git a/dist/v-1547534999795/emojis/1f43e.png b/dist/v-1549282893552/emojis/1f43e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f43e.png rename to dist/v-1549282893552/emojis/1f43e.png diff --git a/dist/v-1547534999795/emojis/1f43f.png b/dist/v-1549282893552/emojis/1f43f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f43f.png rename to dist/v-1549282893552/emojis/1f43f.png diff --git a/dist/v-1547534999795/emojis/1f440.png b/dist/v-1549282893552/emojis/1f440.png similarity index 100% rename from dist/v-1547534999795/emojis/1f440.png rename to dist/v-1549282893552/emojis/1f440.png diff --git a/dist/v-1547534999795/emojis/1f441.png b/dist/v-1549282893552/emojis/1f441.png similarity index 100% rename from dist/v-1547534999795/emojis/1f441.png rename to dist/v-1549282893552/emojis/1f441.png diff --git a/dist/v-1547534999795/emojis/1f442.png b/dist/v-1549282893552/emojis/1f442.png similarity index 100% rename from dist/v-1547534999795/emojis/1f442.png rename to dist/v-1549282893552/emojis/1f442.png diff --git a/dist/v-1547534999795/emojis/1f443.png b/dist/v-1549282893552/emojis/1f443.png similarity index 100% rename from dist/v-1547534999795/emojis/1f443.png rename to dist/v-1549282893552/emojis/1f443.png diff --git a/dist/v-1547534999795/emojis/1f444.png b/dist/v-1549282893552/emojis/1f444.png similarity index 100% rename from dist/v-1547534999795/emojis/1f444.png rename to dist/v-1549282893552/emojis/1f444.png diff --git a/dist/v-1547534999795/emojis/1f445.png b/dist/v-1549282893552/emojis/1f445.png similarity index 100% rename from dist/v-1547534999795/emojis/1f445.png rename to dist/v-1549282893552/emojis/1f445.png diff --git a/dist/v-1547534999795/emojis/1f446.png b/dist/v-1549282893552/emojis/1f446.png similarity index 100% rename from dist/v-1547534999795/emojis/1f446.png rename to dist/v-1549282893552/emojis/1f446.png diff --git a/dist/v-1547534999795/emojis/1f447.png b/dist/v-1549282893552/emojis/1f447.png similarity index 100% rename from dist/v-1547534999795/emojis/1f447.png rename to dist/v-1549282893552/emojis/1f447.png diff --git a/dist/v-1547534999795/emojis/1f448.png b/dist/v-1549282893552/emojis/1f448.png similarity index 100% rename from dist/v-1547534999795/emojis/1f448.png rename to dist/v-1549282893552/emojis/1f448.png diff --git a/dist/v-1547534999795/emojis/1f449.png b/dist/v-1549282893552/emojis/1f449.png similarity index 100% rename from dist/v-1547534999795/emojis/1f449.png rename to dist/v-1549282893552/emojis/1f449.png diff --git a/dist/v-1547534999795/emojis/1f44a.png b/dist/v-1549282893552/emojis/1f44a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f44a.png rename to dist/v-1549282893552/emojis/1f44a.png diff --git a/dist/v-1547534999795/emojis/1f44b.png b/dist/v-1549282893552/emojis/1f44b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f44b.png rename to dist/v-1549282893552/emojis/1f44b.png diff --git a/dist/v-1547534999795/emojis/1f44c.png b/dist/v-1549282893552/emojis/1f44c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f44c.png rename to dist/v-1549282893552/emojis/1f44c.png diff --git a/dist/v-1547534999795/emojis/1f44d.png b/dist/v-1549282893552/emojis/1f44d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f44d.png rename to dist/v-1549282893552/emojis/1f44d.png diff --git a/dist/v-1547534999795/emojis/1f44e.png b/dist/v-1549282893552/emojis/1f44e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f44e.png rename to dist/v-1549282893552/emojis/1f44e.png diff --git a/dist/v-1547534999795/emojis/1f44f.png b/dist/v-1549282893552/emojis/1f44f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f44f.png rename to dist/v-1549282893552/emojis/1f44f.png diff --git a/dist/v-1547534999795/emojis/1f450.png b/dist/v-1549282893552/emojis/1f450.png similarity index 100% rename from dist/v-1547534999795/emojis/1f450.png rename to dist/v-1549282893552/emojis/1f450.png diff --git a/dist/v-1547534999795/emojis/1f451.png b/dist/v-1549282893552/emojis/1f451.png similarity index 100% rename from dist/v-1547534999795/emojis/1f451.png rename to dist/v-1549282893552/emojis/1f451.png diff --git a/dist/v-1547534999795/emojis/1f452.png b/dist/v-1549282893552/emojis/1f452.png similarity index 100% rename from dist/v-1547534999795/emojis/1f452.png rename to dist/v-1549282893552/emojis/1f452.png diff --git a/dist/v-1547534999795/emojis/1f453.png b/dist/v-1549282893552/emojis/1f453.png similarity index 100% rename from dist/v-1547534999795/emojis/1f453.png rename to dist/v-1549282893552/emojis/1f453.png diff --git a/dist/v-1547534999795/emojis/1f454.png b/dist/v-1549282893552/emojis/1f454.png similarity index 100% rename from dist/v-1547534999795/emojis/1f454.png rename to dist/v-1549282893552/emojis/1f454.png diff --git a/dist/v-1547534999795/emojis/1f455.png b/dist/v-1549282893552/emojis/1f455.png similarity index 100% rename from dist/v-1547534999795/emojis/1f455.png rename to dist/v-1549282893552/emojis/1f455.png diff --git a/dist/v-1547534999795/emojis/1f456.png b/dist/v-1549282893552/emojis/1f456.png similarity index 100% rename from dist/v-1547534999795/emojis/1f456.png rename to dist/v-1549282893552/emojis/1f456.png diff --git a/dist/v-1547534999795/emojis/1f457.png b/dist/v-1549282893552/emojis/1f457.png similarity index 100% rename from dist/v-1547534999795/emojis/1f457.png rename to dist/v-1549282893552/emojis/1f457.png diff --git a/dist/v-1547534999795/emojis/1f458.png b/dist/v-1549282893552/emojis/1f458.png similarity index 100% rename from dist/v-1547534999795/emojis/1f458.png rename to dist/v-1549282893552/emojis/1f458.png diff --git a/dist/v-1547534999795/emojis/1f459.png b/dist/v-1549282893552/emojis/1f459.png similarity index 100% rename from dist/v-1547534999795/emojis/1f459.png rename to dist/v-1549282893552/emojis/1f459.png diff --git a/dist/v-1547534999795/emojis/1f45a.png b/dist/v-1549282893552/emojis/1f45a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f45a.png rename to dist/v-1549282893552/emojis/1f45a.png diff --git a/dist/v-1547534999795/emojis/1f45b.png b/dist/v-1549282893552/emojis/1f45b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f45b.png rename to dist/v-1549282893552/emojis/1f45b.png diff --git a/dist/v-1547534999795/emojis/1f45c.png b/dist/v-1549282893552/emojis/1f45c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f45c.png rename to dist/v-1549282893552/emojis/1f45c.png diff --git a/dist/v-1547534999795/emojis/1f45d.png b/dist/v-1549282893552/emojis/1f45d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f45d.png rename to dist/v-1549282893552/emojis/1f45d.png diff --git a/dist/v-1547534999795/emojis/1f45e.png b/dist/v-1549282893552/emojis/1f45e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f45e.png rename to dist/v-1549282893552/emojis/1f45e.png diff --git a/dist/v-1547534999795/emojis/1f45f.png b/dist/v-1549282893552/emojis/1f45f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f45f.png rename to dist/v-1549282893552/emojis/1f45f.png diff --git a/dist/v-1547534999795/emojis/1f460.png b/dist/v-1549282893552/emojis/1f460.png similarity index 100% rename from dist/v-1547534999795/emojis/1f460.png rename to dist/v-1549282893552/emojis/1f460.png diff --git a/dist/v-1547534999795/emojis/1f461.png b/dist/v-1549282893552/emojis/1f461.png similarity index 100% rename from dist/v-1547534999795/emojis/1f461.png rename to dist/v-1549282893552/emojis/1f461.png diff --git a/dist/v-1547534999795/emojis/1f462.png b/dist/v-1549282893552/emojis/1f462.png similarity index 100% rename from dist/v-1547534999795/emojis/1f462.png rename to dist/v-1549282893552/emojis/1f462.png diff --git a/dist/v-1547534999795/emojis/1f463.png b/dist/v-1549282893552/emojis/1f463.png similarity index 100% rename from dist/v-1547534999795/emojis/1f463.png rename to dist/v-1549282893552/emojis/1f463.png diff --git a/dist/v-1547534999795/emojis/1f464.png b/dist/v-1549282893552/emojis/1f464.png similarity index 100% rename from dist/v-1547534999795/emojis/1f464.png rename to dist/v-1549282893552/emojis/1f464.png diff --git a/dist/v-1547534999795/emojis/1f465.png b/dist/v-1549282893552/emojis/1f465.png similarity index 100% rename from dist/v-1547534999795/emojis/1f465.png rename to dist/v-1549282893552/emojis/1f465.png diff --git a/dist/v-1547534999795/emojis/1f466.png b/dist/v-1549282893552/emojis/1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f466.png rename to dist/v-1549282893552/emojis/1f466.png diff --git a/dist/v-1547534999795/emojis/1f467.png b/dist/v-1549282893552/emojis/1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f467.png rename to dist/v-1549282893552/emojis/1f467.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f33e.png b/dist/v-1549282893552/emojis/1f468-200d-1f33e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f33e.png rename to dist/v-1549282893552/emojis/1f468-200d-1f33e.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f373.png b/dist/v-1549282893552/emojis/1f468-200d-1f373.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f373.png rename to dist/v-1549282893552/emojis/1f468-200d-1f373.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f393.png b/dist/v-1549282893552/emojis/1f468-200d-1f393.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f393.png rename to dist/v-1549282893552/emojis/1f468-200d-1f393.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f3a4.png b/dist/v-1549282893552/emojis/1f468-200d-1f3a4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f3a4.png rename to dist/v-1549282893552/emojis/1f468-200d-1f3a4.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f3a8.png b/dist/v-1549282893552/emojis/1f468-200d-1f3a8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f3a8.png rename to dist/v-1549282893552/emojis/1f468-200d-1f3a8.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f3eb.png b/dist/v-1549282893552/emojis/1f468-200d-1f3eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f3eb.png rename to dist/v-1549282893552/emojis/1f468-200d-1f3eb.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f3ed.png b/dist/v-1549282893552/emojis/1f468-200d-1f3ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f3ed.png rename to dist/v-1549282893552/emojis/1f468-200d-1f3ed.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f466-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f466-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f466-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f466-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f467-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f467-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f467-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f467-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f467-200d-1f467.png b/dist/v-1549282893552/emojis/1f468-200d-1f467-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f467-200d-1f467.png rename to dist/v-1549282893552/emojis/1f468-200d-1f467-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f467.png b/dist/v-1549282893552/emojis/1f468-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f467.png rename to dist/v-1549282893552/emojis/1f468-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f466-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f466-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f466-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f466-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f467-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f467-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f467-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f467-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f467-200d-1f467.png b/dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f467-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f467-200d-1f467.png rename to dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f467-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f467.png b/dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f468-200d-1f467.png rename to dist/v-1549282893552/emojis/1f468-200d-1f468-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f466-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f466-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f466-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f466-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f467-200d-1f466.png b/dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f467-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f467-200d-1f466.png rename to dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f467-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f467-200d-1f467.png b/dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f467-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f467-200d-1f467.png rename to dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f467-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f467.png b/dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f469-200d-1f467.png rename to dist/v-1549282893552/emojis/1f468-200d-1f469-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f4bb.png b/dist/v-1549282893552/emojis/1f468-200d-1f4bb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f4bb.png rename to dist/v-1549282893552/emojis/1f468-200d-1f4bb.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f4bc.png b/dist/v-1549282893552/emojis/1f468-200d-1f4bc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f4bc.png rename to dist/v-1549282893552/emojis/1f468-200d-1f4bc.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f527.png b/dist/v-1549282893552/emojis/1f468-200d-1f527.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f527.png rename to dist/v-1549282893552/emojis/1f468-200d-1f527.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f52c.png b/dist/v-1549282893552/emojis/1f468-200d-1f52c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f52c.png rename to dist/v-1549282893552/emojis/1f468-200d-1f52c.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f680.png b/dist/v-1549282893552/emojis/1f468-200d-1f680.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f680.png rename to dist/v-1549282893552/emojis/1f468-200d-1f680.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-1f692.png b/dist/v-1549282893552/emojis/1f468-200d-1f692.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-1f692.png rename to dist/v-1549282893552/emojis/1f468-200d-1f692.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-2695-fe0f.png b/dist/v-1549282893552/emojis/1f468-200d-2695-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-2695-fe0f.png rename to dist/v-1549282893552/emojis/1f468-200d-2695-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-2696-fe0f.png b/dist/v-1549282893552/emojis/1f468-200d-2696-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-2696-fe0f.png rename to dist/v-1549282893552/emojis/1f468-200d-2696-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-2708-fe0f.png b/dist/v-1549282893552/emojis/1f468-200d-2708-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-2708-fe0f.png rename to dist/v-1549282893552/emojis/1f468-200d-2708-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-2764-fe0f-200d-1f468.png b/dist/v-1549282893552/emojis/1f468-200d-2764-fe0f-200d-1f468.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-2764-fe0f-200d-1f468.png rename to dist/v-1549282893552/emojis/1f468-200d-2764-fe0f-200d-1f468.png diff --git a/dist/v-1547534999795/emojis/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png b/dist/v-1549282893552/emojis/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png rename to dist/v-1549282893552/emojis/1f468-200d-2764-fe0f-200d-1f48b-200d-1f468.png diff --git a/dist/v-1547534999795/emojis/1f468.png b/dist/v-1549282893552/emojis/1f468.png similarity index 100% rename from dist/v-1547534999795/emojis/1f468.png rename to dist/v-1549282893552/emojis/1f468.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f33e.png b/dist/v-1549282893552/emojis/1f469-200d-1f33e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f33e.png rename to dist/v-1549282893552/emojis/1f469-200d-1f33e.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f373.png b/dist/v-1549282893552/emojis/1f469-200d-1f373.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f373.png rename to dist/v-1549282893552/emojis/1f469-200d-1f373.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f393.png b/dist/v-1549282893552/emojis/1f469-200d-1f393.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f393.png rename to dist/v-1549282893552/emojis/1f469-200d-1f393.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f3a4.png b/dist/v-1549282893552/emojis/1f469-200d-1f3a4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f3a4.png rename to dist/v-1549282893552/emojis/1f469-200d-1f3a4.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f3a8.png b/dist/v-1549282893552/emojis/1f469-200d-1f3a8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f3a8.png rename to dist/v-1549282893552/emojis/1f469-200d-1f3a8.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f3eb.png b/dist/v-1549282893552/emojis/1f469-200d-1f3eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f3eb.png rename to dist/v-1549282893552/emojis/1f469-200d-1f3eb.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f3ed.png b/dist/v-1549282893552/emojis/1f469-200d-1f3ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f3ed.png rename to dist/v-1549282893552/emojis/1f469-200d-1f3ed.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f466-200d-1f466.png b/dist/v-1549282893552/emojis/1f469-200d-1f466-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f466-200d-1f466.png rename to dist/v-1549282893552/emojis/1f469-200d-1f466-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f466.png b/dist/v-1549282893552/emojis/1f469-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f466.png rename to dist/v-1549282893552/emojis/1f469-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f467-200d-1f466.png b/dist/v-1549282893552/emojis/1f469-200d-1f467-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f467-200d-1f466.png rename to dist/v-1549282893552/emojis/1f469-200d-1f467-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f467-200d-1f467.png b/dist/v-1549282893552/emojis/1f469-200d-1f467-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f467-200d-1f467.png rename to dist/v-1549282893552/emojis/1f469-200d-1f467-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f467.png b/dist/v-1549282893552/emojis/1f469-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f467.png rename to dist/v-1549282893552/emojis/1f469-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f466-200d-1f466.png b/dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f466-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f466-200d-1f466.png rename to dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f466-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f466.png b/dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f466.png rename to dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f467-200d-1f466.png b/dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f467-200d-1f466.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f467-200d-1f466.png rename to dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f467-200d-1f466.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f467-200d-1f467.png b/dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f467-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f467-200d-1f467.png rename to dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f467-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f467.png b/dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f467.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f469-200d-1f467.png rename to dist/v-1549282893552/emojis/1f469-200d-1f469-200d-1f467.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f4bb.png b/dist/v-1549282893552/emojis/1f469-200d-1f4bb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f4bb.png rename to dist/v-1549282893552/emojis/1f469-200d-1f4bb.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f4bc.png b/dist/v-1549282893552/emojis/1f469-200d-1f4bc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f4bc.png rename to dist/v-1549282893552/emojis/1f469-200d-1f4bc.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f527.png b/dist/v-1549282893552/emojis/1f469-200d-1f527.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f527.png rename to dist/v-1549282893552/emojis/1f469-200d-1f527.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f52c.png b/dist/v-1549282893552/emojis/1f469-200d-1f52c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f52c.png rename to dist/v-1549282893552/emojis/1f469-200d-1f52c.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f680.png b/dist/v-1549282893552/emojis/1f469-200d-1f680.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f680.png rename to dist/v-1549282893552/emojis/1f469-200d-1f680.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-1f692.png b/dist/v-1549282893552/emojis/1f469-200d-1f692.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-1f692.png rename to dist/v-1549282893552/emojis/1f469-200d-1f692.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-2695-fe0f.png b/dist/v-1549282893552/emojis/1f469-200d-2695-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-2695-fe0f.png rename to dist/v-1549282893552/emojis/1f469-200d-2695-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-2696-fe0f.png b/dist/v-1549282893552/emojis/1f469-200d-2696-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-2696-fe0f.png rename to dist/v-1549282893552/emojis/1f469-200d-2696-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-2708-fe0f.png b/dist/v-1549282893552/emojis/1f469-200d-2708-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-2708-fe0f.png rename to dist/v-1549282893552/emojis/1f469-200d-2708-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-2764-fe0f-200d-1f468.png b/dist/v-1549282893552/emojis/1f469-200d-2764-fe0f-200d-1f468.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-2764-fe0f-200d-1f468.png rename to dist/v-1549282893552/emojis/1f469-200d-2764-fe0f-200d-1f468.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-2764-fe0f-200d-1f469.png b/dist/v-1549282893552/emojis/1f469-200d-2764-fe0f-200d-1f469.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-2764-fe0f-200d-1f469.png rename to dist/v-1549282893552/emojis/1f469-200d-2764-fe0f-200d-1f469.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.png b/dist/v-1549282893552/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.png rename to dist/v-1549282893552/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f468.png diff --git a/dist/v-1547534999795/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png b/dist/v-1549282893552/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png rename to dist/v-1549282893552/emojis/1f469-200d-2764-fe0f-200d-1f48b-200d-1f469.png diff --git a/dist/v-1547534999795/emojis/1f469.png b/dist/v-1549282893552/emojis/1f469.png similarity index 100% rename from dist/v-1547534999795/emojis/1f469.png rename to dist/v-1549282893552/emojis/1f469.png diff --git a/dist/v-1547534999795/emojis/1f46a.png b/dist/v-1549282893552/emojis/1f46a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46a.png rename to dist/v-1549282893552/emojis/1f46a.png diff --git a/dist/v-1547534999795/emojis/1f46b.png b/dist/v-1549282893552/emojis/1f46b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46b.png rename to dist/v-1549282893552/emojis/1f46b.png diff --git a/dist/v-1547534999795/emojis/1f46c.png b/dist/v-1549282893552/emojis/1f46c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46c.png rename to dist/v-1549282893552/emojis/1f46c.png diff --git a/dist/v-1547534999795/emojis/1f46d.png b/dist/v-1549282893552/emojis/1f46d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46d.png rename to dist/v-1549282893552/emojis/1f46d.png diff --git a/dist/v-1547534999795/emojis/1f46e-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f46e-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46e-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f46e-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f46e-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f46e-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46e-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f46e-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f46e.png b/dist/v-1549282893552/emojis/1f46e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46e.png rename to dist/v-1549282893552/emojis/1f46e.png diff --git a/dist/v-1547534999795/emojis/1f46f-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f46f-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46f-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f46f-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f46f-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f46f-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46f-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f46f-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f46f.png b/dist/v-1549282893552/emojis/1f46f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f46f.png rename to dist/v-1549282893552/emojis/1f46f.png diff --git a/dist/v-1547534999795/emojis/1f470.png b/dist/v-1549282893552/emojis/1f470.png similarity index 100% rename from dist/v-1547534999795/emojis/1f470.png rename to dist/v-1549282893552/emojis/1f470.png diff --git a/dist/v-1547534999795/emojis/1f471-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f471-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f471-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f471-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f471-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f471-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f471-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f471-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f471.png b/dist/v-1549282893552/emojis/1f471.png similarity index 100% rename from dist/v-1547534999795/emojis/1f471.png rename to dist/v-1549282893552/emojis/1f471.png diff --git a/dist/v-1547534999795/emojis/1f472.png b/dist/v-1549282893552/emojis/1f472.png similarity index 100% rename from dist/v-1547534999795/emojis/1f472.png rename to dist/v-1549282893552/emojis/1f472.png diff --git a/dist/v-1547534999795/emojis/1f473-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f473-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f473-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f473-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f473-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f473-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f473-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f473-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f473.png b/dist/v-1549282893552/emojis/1f473.png similarity index 100% rename from dist/v-1547534999795/emojis/1f473.png rename to dist/v-1549282893552/emojis/1f473.png diff --git a/dist/v-1547534999795/emojis/1f474.png b/dist/v-1549282893552/emojis/1f474.png similarity index 100% rename from dist/v-1547534999795/emojis/1f474.png rename to dist/v-1549282893552/emojis/1f474.png diff --git a/dist/v-1547534999795/emojis/1f475.png b/dist/v-1549282893552/emojis/1f475.png similarity index 100% rename from dist/v-1547534999795/emojis/1f475.png rename to dist/v-1549282893552/emojis/1f475.png diff --git a/dist/v-1547534999795/emojis/1f476.png b/dist/v-1549282893552/emojis/1f476.png similarity index 100% rename from dist/v-1547534999795/emojis/1f476.png rename to dist/v-1549282893552/emojis/1f476.png diff --git a/dist/v-1547534999795/emojis/1f477-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f477-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f477-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f477-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f477-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f477-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f477-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f477-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f477.png b/dist/v-1549282893552/emojis/1f477.png similarity index 100% rename from dist/v-1547534999795/emojis/1f477.png rename to dist/v-1549282893552/emojis/1f477.png diff --git a/dist/v-1547534999795/emojis/1f478.png b/dist/v-1549282893552/emojis/1f478.png similarity index 100% rename from dist/v-1547534999795/emojis/1f478.png rename to dist/v-1549282893552/emojis/1f478.png diff --git a/dist/v-1547534999795/emojis/1f479.png b/dist/v-1549282893552/emojis/1f479.png similarity index 100% rename from dist/v-1547534999795/emojis/1f479.png rename to dist/v-1549282893552/emojis/1f479.png diff --git a/dist/v-1547534999795/emojis/1f47a.png b/dist/v-1549282893552/emojis/1f47a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f47a.png rename to dist/v-1549282893552/emojis/1f47a.png diff --git a/dist/v-1547534999795/emojis/1f47b.png b/dist/v-1549282893552/emojis/1f47b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f47b.png rename to dist/v-1549282893552/emojis/1f47b.png diff --git a/dist/v-1547534999795/emojis/1f47c.png b/dist/v-1549282893552/emojis/1f47c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f47c.png rename to dist/v-1549282893552/emojis/1f47c.png diff --git a/dist/v-1547534999795/emojis/1f47d.png b/dist/v-1549282893552/emojis/1f47d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f47d.png rename to dist/v-1549282893552/emojis/1f47d.png diff --git a/dist/v-1547534999795/emojis/1f47e.png b/dist/v-1549282893552/emojis/1f47e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f47e.png rename to dist/v-1549282893552/emojis/1f47e.png diff --git a/dist/v-1547534999795/emojis/1f47f.png b/dist/v-1549282893552/emojis/1f47f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f47f.png rename to dist/v-1549282893552/emojis/1f47f.png diff --git a/dist/v-1547534999795/emojis/1f480.png b/dist/v-1549282893552/emojis/1f480.png similarity index 100% rename from dist/v-1547534999795/emojis/1f480.png rename to dist/v-1549282893552/emojis/1f480.png diff --git a/dist/v-1547534999795/emojis/1f481-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f481-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f481-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f481-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f481-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f481-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f481-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f481-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f481.png b/dist/v-1549282893552/emojis/1f481.png similarity index 100% rename from dist/v-1547534999795/emojis/1f481.png rename to dist/v-1549282893552/emojis/1f481.png diff --git a/dist/v-1547534999795/emojis/1f482-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f482-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f482-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f482-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f482-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f482-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f482-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f482-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f482.png b/dist/v-1549282893552/emojis/1f482.png similarity index 100% rename from dist/v-1547534999795/emojis/1f482.png rename to dist/v-1549282893552/emojis/1f482.png diff --git a/dist/v-1547534999795/emojis/1f483.png b/dist/v-1549282893552/emojis/1f483.png similarity index 100% rename from dist/v-1547534999795/emojis/1f483.png rename to dist/v-1549282893552/emojis/1f483.png diff --git a/dist/v-1547534999795/emojis/1f484.png b/dist/v-1549282893552/emojis/1f484.png similarity index 100% rename from dist/v-1547534999795/emojis/1f484.png rename to dist/v-1549282893552/emojis/1f484.png diff --git a/dist/v-1547534999795/emojis/1f485.png b/dist/v-1549282893552/emojis/1f485.png similarity index 100% rename from dist/v-1547534999795/emojis/1f485.png rename to dist/v-1549282893552/emojis/1f485.png diff --git a/dist/v-1547534999795/emojis/1f486-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f486-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f486-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f486-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f486-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f486-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f486-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f486-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f486.png b/dist/v-1549282893552/emojis/1f486.png similarity index 100% rename from dist/v-1547534999795/emojis/1f486.png rename to dist/v-1549282893552/emojis/1f486.png diff --git a/dist/v-1547534999795/emojis/1f487-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f487-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f487-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f487-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f487-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f487-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f487-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f487-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f487.png b/dist/v-1549282893552/emojis/1f487.png similarity index 100% rename from dist/v-1547534999795/emojis/1f487.png rename to dist/v-1549282893552/emojis/1f487.png diff --git a/dist/v-1547534999795/emojis/1f488.png b/dist/v-1549282893552/emojis/1f488.png similarity index 100% rename from dist/v-1547534999795/emojis/1f488.png rename to dist/v-1549282893552/emojis/1f488.png diff --git a/dist/v-1547534999795/emojis/1f489.png b/dist/v-1549282893552/emojis/1f489.png similarity index 100% rename from dist/v-1547534999795/emojis/1f489.png rename to dist/v-1549282893552/emojis/1f489.png diff --git a/dist/v-1547534999795/emojis/1f48a.png b/dist/v-1549282893552/emojis/1f48a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f48a.png rename to dist/v-1549282893552/emojis/1f48a.png diff --git a/dist/v-1547534999795/emojis/1f48b.png b/dist/v-1549282893552/emojis/1f48b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f48b.png rename to dist/v-1549282893552/emojis/1f48b.png diff --git a/dist/v-1547534999795/emojis/1f48c.png b/dist/v-1549282893552/emojis/1f48c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f48c.png rename to dist/v-1549282893552/emojis/1f48c.png diff --git a/dist/v-1547534999795/emojis/1f48d.png b/dist/v-1549282893552/emojis/1f48d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f48d.png rename to dist/v-1549282893552/emojis/1f48d.png diff --git a/dist/v-1547534999795/emojis/1f48e.png b/dist/v-1549282893552/emojis/1f48e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f48e.png rename to dist/v-1549282893552/emojis/1f48e.png diff --git a/dist/v-1547534999795/emojis/1f48f.png b/dist/v-1549282893552/emojis/1f48f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f48f.png rename to dist/v-1549282893552/emojis/1f48f.png diff --git a/dist/v-1547534999795/emojis/1f490.png b/dist/v-1549282893552/emojis/1f490.png similarity index 100% rename from dist/v-1547534999795/emojis/1f490.png rename to dist/v-1549282893552/emojis/1f490.png diff --git a/dist/v-1547534999795/emojis/1f491.png b/dist/v-1549282893552/emojis/1f491.png similarity index 100% rename from dist/v-1547534999795/emojis/1f491.png rename to dist/v-1549282893552/emojis/1f491.png diff --git a/dist/v-1547534999795/emojis/1f492.png b/dist/v-1549282893552/emojis/1f492.png similarity index 100% rename from dist/v-1547534999795/emojis/1f492.png rename to dist/v-1549282893552/emojis/1f492.png diff --git a/dist/v-1547534999795/emojis/1f493.png b/dist/v-1549282893552/emojis/1f493.png similarity index 100% rename from dist/v-1547534999795/emojis/1f493.png rename to dist/v-1549282893552/emojis/1f493.png diff --git a/dist/v-1547534999795/emojis/1f494.png b/dist/v-1549282893552/emojis/1f494.png similarity index 100% rename from dist/v-1547534999795/emojis/1f494.png rename to dist/v-1549282893552/emojis/1f494.png diff --git a/dist/v-1547534999795/emojis/1f495.png b/dist/v-1549282893552/emojis/1f495.png similarity index 100% rename from dist/v-1547534999795/emojis/1f495.png rename to dist/v-1549282893552/emojis/1f495.png diff --git a/dist/v-1547534999795/emojis/1f496.png b/dist/v-1549282893552/emojis/1f496.png similarity index 100% rename from dist/v-1547534999795/emojis/1f496.png rename to dist/v-1549282893552/emojis/1f496.png diff --git a/dist/v-1547534999795/emojis/1f497.png b/dist/v-1549282893552/emojis/1f497.png similarity index 100% rename from dist/v-1547534999795/emojis/1f497.png rename to dist/v-1549282893552/emojis/1f497.png diff --git a/dist/v-1547534999795/emojis/1f498.png b/dist/v-1549282893552/emojis/1f498.png similarity index 100% rename from dist/v-1547534999795/emojis/1f498.png rename to dist/v-1549282893552/emojis/1f498.png diff --git a/dist/v-1547534999795/emojis/1f499.png b/dist/v-1549282893552/emojis/1f499.png similarity index 100% rename from dist/v-1547534999795/emojis/1f499.png rename to dist/v-1549282893552/emojis/1f499.png diff --git a/dist/v-1547534999795/emojis/1f49a.png b/dist/v-1549282893552/emojis/1f49a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f49a.png rename to dist/v-1549282893552/emojis/1f49a.png diff --git a/dist/v-1547534999795/emojis/1f49b.png b/dist/v-1549282893552/emojis/1f49b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f49b.png rename to dist/v-1549282893552/emojis/1f49b.png diff --git a/dist/v-1547534999795/emojis/1f49c.png b/dist/v-1549282893552/emojis/1f49c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f49c.png rename to dist/v-1549282893552/emojis/1f49c.png diff --git a/dist/v-1547534999795/emojis/1f49d.png b/dist/v-1549282893552/emojis/1f49d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f49d.png rename to dist/v-1549282893552/emojis/1f49d.png diff --git a/dist/v-1547534999795/emojis/1f49e.png b/dist/v-1549282893552/emojis/1f49e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f49e.png rename to dist/v-1549282893552/emojis/1f49e.png diff --git a/dist/v-1547534999795/emojis/1f49f.png b/dist/v-1549282893552/emojis/1f49f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f49f.png rename to dist/v-1549282893552/emojis/1f49f.png diff --git a/dist/v-1547534999795/emojis/1f4a0.png b/dist/v-1549282893552/emojis/1f4a0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a0.png rename to dist/v-1549282893552/emojis/1f4a0.png diff --git a/dist/v-1547534999795/emojis/1f4a1.png b/dist/v-1549282893552/emojis/1f4a1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a1.png rename to dist/v-1549282893552/emojis/1f4a1.png diff --git a/dist/v-1547534999795/emojis/1f4a2.png b/dist/v-1549282893552/emojis/1f4a2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a2.png rename to dist/v-1549282893552/emojis/1f4a2.png diff --git a/dist/v-1547534999795/emojis/1f4a3.png b/dist/v-1549282893552/emojis/1f4a3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a3.png rename to dist/v-1549282893552/emojis/1f4a3.png diff --git a/dist/v-1547534999795/emojis/1f4a4.png b/dist/v-1549282893552/emojis/1f4a4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a4.png rename to dist/v-1549282893552/emojis/1f4a4.png diff --git a/dist/v-1547534999795/emojis/1f4a5.png b/dist/v-1549282893552/emojis/1f4a5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a5.png rename to dist/v-1549282893552/emojis/1f4a5.png diff --git a/dist/v-1547534999795/emojis/1f4a6.png b/dist/v-1549282893552/emojis/1f4a6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a6.png rename to dist/v-1549282893552/emojis/1f4a6.png diff --git a/dist/v-1547534999795/emojis/1f4a7.png b/dist/v-1549282893552/emojis/1f4a7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a7.png rename to dist/v-1549282893552/emojis/1f4a7.png diff --git a/dist/v-1547534999795/emojis/1f4a8.png b/dist/v-1549282893552/emojis/1f4a8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a8.png rename to dist/v-1549282893552/emojis/1f4a8.png diff --git a/dist/v-1547534999795/emojis/1f4a9.png b/dist/v-1549282893552/emojis/1f4a9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4a9.png rename to dist/v-1549282893552/emojis/1f4a9.png diff --git a/dist/v-1547534999795/emojis/1f4aa.png b/dist/v-1549282893552/emojis/1f4aa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4aa.png rename to dist/v-1549282893552/emojis/1f4aa.png diff --git a/dist/v-1547534999795/emojis/1f4ab.png b/dist/v-1549282893552/emojis/1f4ab.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ab.png rename to dist/v-1549282893552/emojis/1f4ab.png diff --git a/dist/v-1547534999795/emojis/1f4ac.png b/dist/v-1549282893552/emojis/1f4ac.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ac.png rename to dist/v-1549282893552/emojis/1f4ac.png diff --git a/dist/v-1547534999795/emojis/1f4ad.png b/dist/v-1549282893552/emojis/1f4ad.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ad.png rename to dist/v-1549282893552/emojis/1f4ad.png diff --git a/dist/v-1547534999795/emojis/1f4ae.png b/dist/v-1549282893552/emojis/1f4ae.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ae.png rename to dist/v-1549282893552/emojis/1f4ae.png diff --git a/dist/v-1547534999795/emojis/1f4af.png b/dist/v-1549282893552/emojis/1f4af.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4af.png rename to dist/v-1549282893552/emojis/1f4af.png diff --git a/dist/v-1547534999795/emojis/1f4b0.png b/dist/v-1549282893552/emojis/1f4b0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b0.png rename to dist/v-1549282893552/emojis/1f4b0.png diff --git a/dist/v-1547534999795/emojis/1f4b1.png b/dist/v-1549282893552/emojis/1f4b1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b1.png rename to dist/v-1549282893552/emojis/1f4b1.png diff --git a/dist/v-1547534999795/emojis/1f4b2.png b/dist/v-1549282893552/emojis/1f4b2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b2.png rename to dist/v-1549282893552/emojis/1f4b2.png diff --git a/dist/v-1547534999795/emojis/1f4b3.png b/dist/v-1549282893552/emojis/1f4b3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b3.png rename to dist/v-1549282893552/emojis/1f4b3.png diff --git a/dist/v-1547534999795/emojis/1f4b4.png b/dist/v-1549282893552/emojis/1f4b4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b4.png rename to dist/v-1549282893552/emojis/1f4b4.png diff --git a/dist/v-1547534999795/emojis/1f4b5.png b/dist/v-1549282893552/emojis/1f4b5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b5.png rename to dist/v-1549282893552/emojis/1f4b5.png diff --git a/dist/v-1547534999795/emojis/1f4b6.png b/dist/v-1549282893552/emojis/1f4b6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b6.png rename to dist/v-1549282893552/emojis/1f4b6.png diff --git a/dist/v-1547534999795/emojis/1f4b7.png b/dist/v-1549282893552/emojis/1f4b7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b7.png rename to dist/v-1549282893552/emojis/1f4b7.png diff --git a/dist/v-1547534999795/emojis/1f4b8.png b/dist/v-1549282893552/emojis/1f4b8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b8.png rename to dist/v-1549282893552/emojis/1f4b8.png diff --git a/dist/v-1547534999795/emojis/1f4b9.png b/dist/v-1549282893552/emojis/1f4b9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4b9.png rename to dist/v-1549282893552/emojis/1f4b9.png diff --git a/dist/v-1547534999795/emojis/1f4ba.png b/dist/v-1549282893552/emojis/1f4ba.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ba.png rename to dist/v-1549282893552/emojis/1f4ba.png diff --git a/dist/v-1547534999795/emojis/1f4bb.png b/dist/v-1549282893552/emojis/1f4bb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4bb.png rename to dist/v-1549282893552/emojis/1f4bb.png diff --git a/dist/v-1547534999795/emojis/1f4bc.png b/dist/v-1549282893552/emojis/1f4bc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4bc.png rename to dist/v-1549282893552/emojis/1f4bc.png diff --git a/dist/v-1547534999795/emojis/1f4bd.png b/dist/v-1549282893552/emojis/1f4bd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4bd.png rename to dist/v-1549282893552/emojis/1f4bd.png diff --git a/dist/v-1547534999795/emojis/1f4be.png b/dist/v-1549282893552/emojis/1f4be.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4be.png rename to dist/v-1549282893552/emojis/1f4be.png diff --git a/dist/v-1547534999795/emojis/1f4bf.png b/dist/v-1549282893552/emojis/1f4bf.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4bf.png rename to dist/v-1549282893552/emojis/1f4bf.png diff --git a/dist/v-1547534999795/emojis/1f4c0.png b/dist/v-1549282893552/emojis/1f4c0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c0.png rename to dist/v-1549282893552/emojis/1f4c0.png diff --git a/dist/v-1547534999795/emojis/1f4c1.png b/dist/v-1549282893552/emojis/1f4c1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c1.png rename to dist/v-1549282893552/emojis/1f4c1.png diff --git a/dist/v-1547534999795/emojis/1f4c2.png b/dist/v-1549282893552/emojis/1f4c2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c2.png rename to dist/v-1549282893552/emojis/1f4c2.png diff --git a/dist/v-1547534999795/emojis/1f4c3.png b/dist/v-1549282893552/emojis/1f4c3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c3.png rename to dist/v-1549282893552/emojis/1f4c3.png diff --git a/dist/v-1547534999795/emojis/1f4c4.png b/dist/v-1549282893552/emojis/1f4c4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c4.png rename to dist/v-1549282893552/emojis/1f4c4.png diff --git a/dist/v-1547534999795/emojis/1f4c5.png b/dist/v-1549282893552/emojis/1f4c5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c5.png rename to dist/v-1549282893552/emojis/1f4c5.png diff --git a/dist/v-1547534999795/emojis/1f4c6.png b/dist/v-1549282893552/emojis/1f4c6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c6.png rename to dist/v-1549282893552/emojis/1f4c6.png diff --git a/dist/v-1547534999795/emojis/1f4c7.png b/dist/v-1549282893552/emojis/1f4c7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c7.png rename to dist/v-1549282893552/emojis/1f4c7.png diff --git a/dist/v-1547534999795/emojis/1f4c8.png b/dist/v-1549282893552/emojis/1f4c8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c8.png rename to dist/v-1549282893552/emojis/1f4c8.png diff --git a/dist/v-1547534999795/emojis/1f4c9.png b/dist/v-1549282893552/emojis/1f4c9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4c9.png rename to dist/v-1549282893552/emojis/1f4c9.png diff --git a/dist/v-1547534999795/emojis/1f4ca.png b/dist/v-1549282893552/emojis/1f4ca.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ca.png rename to dist/v-1549282893552/emojis/1f4ca.png diff --git a/dist/v-1547534999795/emojis/1f4cb.png b/dist/v-1549282893552/emojis/1f4cb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4cb.png rename to dist/v-1549282893552/emojis/1f4cb.png diff --git a/dist/v-1547534999795/emojis/1f4cc.png b/dist/v-1549282893552/emojis/1f4cc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4cc.png rename to dist/v-1549282893552/emojis/1f4cc.png diff --git a/dist/v-1547534999795/emojis/1f4cd.png b/dist/v-1549282893552/emojis/1f4cd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4cd.png rename to dist/v-1549282893552/emojis/1f4cd.png diff --git a/dist/v-1547534999795/emojis/1f4ce.png b/dist/v-1549282893552/emojis/1f4ce.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ce.png rename to dist/v-1549282893552/emojis/1f4ce.png diff --git a/dist/v-1547534999795/emojis/1f4cf.png b/dist/v-1549282893552/emojis/1f4cf.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4cf.png rename to dist/v-1549282893552/emojis/1f4cf.png diff --git a/dist/v-1547534999795/emojis/1f4d0.png b/dist/v-1549282893552/emojis/1f4d0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d0.png rename to dist/v-1549282893552/emojis/1f4d0.png diff --git a/dist/v-1547534999795/emojis/1f4d1.png b/dist/v-1549282893552/emojis/1f4d1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d1.png rename to dist/v-1549282893552/emojis/1f4d1.png diff --git a/dist/v-1547534999795/emojis/1f4d2.png b/dist/v-1549282893552/emojis/1f4d2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d2.png rename to dist/v-1549282893552/emojis/1f4d2.png diff --git a/dist/v-1547534999795/emojis/1f4d3.png b/dist/v-1549282893552/emojis/1f4d3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d3.png rename to dist/v-1549282893552/emojis/1f4d3.png diff --git a/dist/v-1547534999795/emojis/1f4d4.png b/dist/v-1549282893552/emojis/1f4d4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d4.png rename to dist/v-1549282893552/emojis/1f4d4.png diff --git a/dist/v-1547534999795/emojis/1f4d5.png b/dist/v-1549282893552/emojis/1f4d5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d5.png rename to dist/v-1549282893552/emojis/1f4d5.png diff --git a/dist/v-1547534999795/emojis/1f4d6.png b/dist/v-1549282893552/emojis/1f4d6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d6.png rename to dist/v-1549282893552/emojis/1f4d6.png diff --git a/dist/v-1547534999795/emojis/1f4d7.png b/dist/v-1549282893552/emojis/1f4d7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d7.png rename to dist/v-1549282893552/emojis/1f4d7.png diff --git a/dist/v-1547534999795/emojis/1f4d8.png b/dist/v-1549282893552/emojis/1f4d8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d8.png rename to dist/v-1549282893552/emojis/1f4d8.png diff --git a/dist/v-1547534999795/emojis/1f4d9.png b/dist/v-1549282893552/emojis/1f4d9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4d9.png rename to dist/v-1549282893552/emojis/1f4d9.png diff --git a/dist/v-1547534999795/emojis/1f4da.png b/dist/v-1549282893552/emojis/1f4da.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4da.png rename to dist/v-1549282893552/emojis/1f4da.png diff --git a/dist/v-1547534999795/emojis/1f4db.png b/dist/v-1549282893552/emojis/1f4db.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4db.png rename to dist/v-1549282893552/emojis/1f4db.png diff --git a/dist/v-1547534999795/emojis/1f4dc.png b/dist/v-1549282893552/emojis/1f4dc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4dc.png rename to dist/v-1549282893552/emojis/1f4dc.png diff --git a/dist/v-1547534999795/emojis/1f4dd.png b/dist/v-1549282893552/emojis/1f4dd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4dd.png rename to dist/v-1549282893552/emojis/1f4dd.png diff --git a/dist/v-1547534999795/emojis/1f4de.png b/dist/v-1549282893552/emojis/1f4de.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4de.png rename to dist/v-1549282893552/emojis/1f4de.png diff --git a/dist/v-1547534999795/emojis/1f4df.png b/dist/v-1549282893552/emojis/1f4df.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4df.png rename to dist/v-1549282893552/emojis/1f4df.png diff --git a/dist/v-1547534999795/emojis/1f4e0.png b/dist/v-1549282893552/emojis/1f4e0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e0.png rename to dist/v-1549282893552/emojis/1f4e0.png diff --git a/dist/v-1547534999795/emojis/1f4e1.png b/dist/v-1549282893552/emojis/1f4e1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e1.png rename to dist/v-1549282893552/emojis/1f4e1.png diff --git a/dist/v-1547534999795/emojis/1f4e2.png b/dist/v-1549282893552/emojis/1f4e2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e2.png rename to dist/v-1549282893552/emojis/1f4e2.png diff --git a/dist/v-1547534999795/emojis/1f4e3.png b/dist/v-1549282893552/emojis/1f4e3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e3.png rename to dist/v-1549282893552/emojis/1f4e3.png diff --git a/dist/v-1547534999795/emojis/1f4e4.png b/dist/v-1549282893552/emojis/1f4e4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e4.png rename to dist/v-1549282893552/emojis/1f4e4.png diff --git a/dist/v-1547534999795/emojis/1f4e5.png b/dist/v-1549282893552/emojis/1f4e5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e5.png rename to dist/v-1549282893552/emojis/1f4e5.png diff --git a/dist/v-1547534999795/emojis/1f4e6.png b/dist/v-1549282893552/emojis/1f4e6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e6.png rename to dist/v-1549282893552/emojis/1f4e6.png diff --git a/dist/v-1547534999795/emojis/1f4e7.png b/dist/v-1549282893552/emojis/1f4e7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e7.png rename to dist/v-1549282893552/emojis/1f4e7.png diff --git a/dist/v-1547534999795/emojis/1f4e8.png b/dist/v-1549282893552/emojis/1f4e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e8.png rename to dist/v-1549282893552/emojis/1f4e8.png diff --git a/dist/v-1547534999795/emojis/1f4e9.png b/dist/v-1549282893552/emojis/1f4e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4e9.png rename to dist/v-1549282893552/emojis/1f4e9.png diff --git a/dist/v-1547534999795/emojis/1f4ea.png b/dist/v-1549282893552/emojis/1f4ea.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ea.png rename to dist/v-1549282893552/emojis/1f4ea.png diff --git a/dist/v-1547534999795/emojis/1f4eb.png b/dist/v-1549282893552/emojis/1f4eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4eb.png rename to dist/v-1549282893552/emojis/1f4eb.png diff --git a/dist/v-1547534999795/emojis/1f4ec.png b/dist/v-1549282893552/emojis/1f4ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ec.png rename to dist/v-1549282893552/emojis/1f4ec.png diff --git a/dist/v-1547534999795/emojis/1f4ed.png b/dist/v-1549282893552/emojis/1f4ed.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ed.png rename to dist/v-1549282893552/emojis/1f4ed.png diff --git a/dist/v-1547534999795/emojis/1f4ee.png b/dist/v-1549282893552/emojis/1f4ee.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ee.png rename to dist/v-1549282893552/emojis/1f4ee.png diff --git a/dist/v-1547534999795/emojis/1f4ef.png b/dist/v-1549282893552/emojis/1f4ef.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ef.png rename to dist/v-1549282893552/emojis/1f4ef.png diff --git a/dist/v-1547534999795/emojis/1f4f0.png b/dist/v-1549282893552/emojis/1f4f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f0.png rename to dist/v-1549282893552/emojis/1f4f0.png diff --git a/dist/v-1547534999795/emojis/1f4f1.png b/dist/v-1549282893552/emojis/1f4f1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f1.png rename to dist/v-1549282893552/emojis/1f4f1.png diff --git a/dist/v-1547534999795/emojis/1f4f2.png b/dist/v-1549282893552/emojis/1f4f2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f2.png rename to dist/v-1549282893552/emojis/1f4f2.png diff --git a/dist/v-1547534999795/emojis/1f4f3.png b/dist/v-1549282893552/emojis/1f4f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f3.png rename to dist/v-1549282893552/emojis/1f4f3.png diff --git a/dist/v-1547534999795/emojis/1f4f4.png b/dist/v-1549282893552/emojis/1f4f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f4.png rename to dist/v-1549282893552/emojis/1f4f4.png diff --git a/dist/v-1547534999795/emojis/1f4f5.png b/dist/v-1549282893552/emojis/1f4f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f5.png rename to dist/v-1549282893552/emojis/1f4f5.png diff --git a/dist/v-1547534999795/emojis/1f4f6.png b/dist/v-1549282893552/emojis/1f4f6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f6.png rename to dist/v-1549282893552/emojis/1f4f6.png diff --git a/dist/v-1547534999795/emojis/1f4f7.png b/dist/v-1549282893552/emojis/1f4f7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f7.png rename to dist/v-1549282893552/emojis/1f4f7.png diff --git a/dist/v-1547534999795/emojis/1f4f8.png b/dist/v-1549282893552/emojis/1f4f8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f8.png rename to dist/v-1549282893552/emojis/1f4f8.png diff --git a/dist/v-1547534999795/emojis/1f4f9.png b/dist/v-1549282893552/emojis/1f4f9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4f9.png rename to dist/v-1549282893552/emojis/1f4f9.png diff --git a/dist/v-1547534999795/emojis/1f4fa.png b/dist/v-1549282893552/emojis/1f4fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4fa.png rename to dist/v-1549282893552/emojis/1f4fa.png diff --git a/dist/v-1547534999795/emojis/1f4fb.png b/dist/v-1549282893552/emojis/1f4fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4fb.png rename to dist/v-1549282893552/emojis/1f4fb.png diff --git a/dist/v-1547534999795/emojis/1f4fc.png b/dist/v-1549282893552/emojis/1f4fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4fc.png rename to dist/v-1549282893552/emojis/1f4fc.png diff --git a/dist/v-1547534999795/emojis/1f4fd.png b/dist/v-1549282893552/emojis/1f4fd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4fd.png rename to dist/v-1549282893552/emojis/1f4fd.png diff --git a/dist/v-1547534999795/emojis/1f4ff.png b/dist/v-1549282893552/emojis/1f4ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f4ff.png rename to dist/v-1549282893552/emojis/1f4ff.png diff --git a/dist/v-1547534999795/emojis/1f500.png b/dist/v-1549282893552/emojis/1f500.png similarity index 100% rename from dist/v-1547534999795/emojis/1f500.png rename to dist/v-1549282893552/emojis/1f500.png diff --git a/dist/v-1547534999795/emojis/1f501.png b/dist/v-1549282893552/emojis/1f501.png similarity index 100% rename from dist/v-1547534999795/emojis/1f501.png rename to dist/v-1549282893552/emojis/1f501.png diff --git a/dist/v-1547534999795/emojis/1f502.png b/dist/v-1549282893552/emojis/1f502.png similarity index 100% rename from dist/v-1547534999795/emojis/1f502.png rename to dist/v-1549282893552/emojis/1f502.png diff --git a/dist/v-1547534999795/emojis/1f503.png b/dist/v-1549282893552/emojis/1f503.png similarity index 100% rename from dist/v-1547534999795/emojis/1f503.png rename to dist/v-1549282893552/emojis/1f503.png diff --git a/dist/v-1547534999795/emojis/1f504.png b/dist/v-1549282893552/emojis/1f504.png similarity index 100% rename from dist/v-1547534999795/emojis/1f504.png rename to dist/v-1549282893552/emojis/1f504.png diff --git a/dist/v-1547534999795/emojis/1f505.png b/dist/v-1549282893552/emojis/1f505.png similarity index 100% rename from dist/v-1547534999795/emojis/1f505.png rename to dist/v-1549282893552/emojis/1f505.png diff --git a/dist/v-1547534999795/emojis/1f506.png b/dist/v-1549282893552/emojis/1f506.png similarity index 100% rename from dist/v-1547534999795/emojis/1f506.png rename to dist/v-1549282893552/emojis/1f506.png diff --git a/dist/v-1547534999795/emojis/1f507.png b/dist/v-1549282893552/emojis/1f507.png similarity index 100% rename from dist/v-1547534999795/emojis/1f507.png rename to dist/v-1549282893552/emojis/1f507.png diff --git a/dist/v-1547534999795/emojis/1f508.png b/dist/v-1549282893552/emojis/1f508.png similarity index 100% rename from dist/v-1547534999795/emojis/1f508.png rename to dist/v-1549282893552/emojis/1f508.png diff --git a/dist/v-1547534999795/emojis/1f509.png b/dist/v-1549282893552/emojis/1f509.png similarity index 100% rename from dist/v-1547534999795/emojis/1f509.png rename to dist/v-1549282893552/emojis/1f509.png diff --git a/dist/v-1547534999795/emojis/1f50a.png b/dist/v-1549282893552/emojis/1f50a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f50a.png rename to dist/v-1549282893552/emojis/1f50a.png diff --git a/dist/v-1547534999795/emojis/1f50b.png b/dist/v-1549282893552/emojis/1f50b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f50b.png rename to dist/v-1549282893552/emojis/1f50b.png diff --git a/dist/v-1547534999795/emojis/1f50c.png b/dist/v-1549282893552/emojis/1f50c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f50c.png rename to dist/v-1549282893552/emojis/1f50c.png diff --git a/dist/v-1547534999795/emojis/1f50d.png b/dist/v-1549282893552/emojis/1f50d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f50d.png rename to dist/v-1549282893552/emojis/1f50d.png diff --git a/dist/v-1547534999795/emojis/1f50e.png b/dist/v-1549282893552/emojis/1f50e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f50e.png rename to dist/v-1549282893552/emojis/1f50e.png diff --git a/dist/v-1547534999795/emojis/1f50f.png b/dist/v-1549282893552/emojis/1f50f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f50f.png rename to dist/v-1549282893552/emojis/1f50f.png diff --git a/dist/v-1547534999795/emojis/1f510.png b/dist/v-1549282893552/emojis/1f510.png similarity index 100% rename from dist/v-1547534999795/emojis/1f510.png rename to dist/v-1549282893552/emojis/1f510.png diff --git a/dist/v-1547534999795/emojis/1f511.png b/dist/v-1549282893552/emojis/1f511.png similarity index 100% rename from dist/v-1547534999795/emojis/1f511.png rename to dist/v-1549282893552/emojis/1f511.png diff --git a/dist/v-1547534999795/emojis/1f512.png b/dist/v-1549282893552/emojis/1f512.png similarity index 100% rename from dist/v-1547534999795/emojis/1f512.png rename to dist/v-1549282893552/emojis/1f512.png diff --git a/dist/v-1547534999795/emojis/1f513.png b/dist/v-1549282893552/emojis/1f513.png similarity index 100% rename from dist/v-1547534999795/emojis/1f513.png rename to dist/v-1549282893552/emojis/1f513.png diff --git a/dist/v-1547534999795/emojis/1f514.png b/dist/v-1549282893552/emojis/1f514.png similarity index 100% rename from dist/v-1547534999795/emojis/1f514.png rename to dist/v-1549282893552/emojis/1f514.png diff --git a/dist/v-1547534999795/emojis/1f515.png b/dist/v-1549282893552/emojis/1f515.png similarity index 100% rename from dist/v-1547534999795/emojis/1f515.png rename to dist/v-1549282893552/emojis/1f515.png diff --git a/dist/v-1547534999795/emojis/1f516.png b/dist/v-1549282893552/emojis/1f516.png similarity index 100% rename from dist/v-1547534999795/emojis/1f516.png rename to dist/v-1549282893552/emojis/1f516.png diff --git a/dist/v-1547534999795/emojis/1f517.png b/dist/v-1549282893552/emojis/1f517.png similarity index 100% rename from dist/v-1547534999795/emojis/1f517.png rename to dist/v-1549282893552/emojis/1f517.png diff --git a/dist/v-1547534999795/emojis/1f518.png b/dist/v-1549282893552/emojis/1f518.png similarity index 100% rename from dist/v-1547534999795/emojis/1f518.png rename to dist/v-1549282893552/emojis/1f518.png diff --git a/dist/v-1547534999795/emojis/1f519.png b/dist/v-1549282893552/emojis/1f519.png similarity index 100% rename from dist/v-1547534999795/emojis/1f519.png rename to dist/v-1549282893552/emojis/1f519.png diff --git a/dist/v-1547534999795/emojis/1f51a.png b/dist/v-1549282893552/emojis/1f51a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f51a.png rename to dist/v-1549282893552/emojis/1f51a.png diff --git a/dist/v-1547534999795/emojis/1f51b.png b/dist/v-1549282893552/emojis/1f51b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f51b.png rename to dist/v-1549282893552/emojis/1f51b.png diff --git a/dist/v-1547534999795/emojis/1f51c.png b/dist/v-1549282893552/emojis/1f51c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f51c.png rename to dist/v-1549282893552/emojis/1f51c.png diff --git a/dist/v-1547534999795/emojis/1f51d.png b/dist/v-1549282893552/emojis/1f51d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f51d.png rename to dist/v-1549282893552/emojis/1f51d.png diff --git a/dist/v-1547534999795/emojis/1f51e.png b/dist/v-1549282893552/emojis/1f51e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f51e.png rename to dist/v-1549282893552/emojis/1f51e.png diff --git a/dist/v-1547534999795/emojis/1f51f.png b/dist/v-1549282893552/emojis/1f51f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f51f.png rename to dist/v-1549282893552/emojis/1f51f.png diff --git a/dist/v-1547534999795/emojis/1f520.png b/dist/v-1549282893552/emojis/1f520.png similarity index 100% rename from dist/v-1547534999795/emojis/1f520.png rename to dist/v-1549282893552/emojis/1f520.png diff --git a/dist/v-1547534999795/emojis/1f521.png b/dist/v-1549282893552/emojis/1f521.png similarity index 100% rename from dist/v-1547534999795/emojis/1f521.png rename to dist/v-1549282893552/emojis/1f521.png diff --git a/dist/v-1547534999795/emojis/1f522.png b/dist/v-1549282893552/emojis/1f522.png similarity index 100% rename from dist/v-1547534999795/emojis/1f522.png rename to dist/v-1549282893552/emojis/1f522.png diff --git a/dist/v-1547534999795/emojis/1f523.png b/dist/v-1549282893552/emojis/1f523.png similarity index 100% rename from dist/v-1547534999795/emojis/1f523.png rename to dist/v-1549282893552/emojis/1f523.png diff --git a/dist/v-1547534999795/emojis/1f524.png b/dist/v-1549282893552/emojis/1f524.png similarity index 100% rename from dist/v-1547534999795/emojis/1f524.png rename to dist/v-1549282893552/emojis/1f524.png diff --git a/dist/v-1547534999795/emojis/1f525.png b/dist/v-1549282893552/emojis/1f525.png similarity index 100% rename from dist/v-1547534999795/emojis/1f525.png rename to dist/v-1549282893552/emojis/1f525.png diff --git a/dist/v-1547534999795/emojis/1f526.png b/dist/v-1549282893552/emojis/1f526.png similarity index 100% rename from dist/v-1547534999795/emojis/1f526.png rename to dist/v-1549282893552/emojis/1f526.png diff --git a/dist/v-1547534999795/emojis/1f527.png b/dist/v-1549282893552/emojis/1f527.png similarity index 100% rename from dist/v-1547534999795/emojis/1f527.png rename to dist/v-1549282893552/emojis/1f527.png diff --git a/dist/v-1547534999795/emojis/1f528.png b/dist/v-1549282893552/emojis/1f528.png similarity index 100% rename from dist/v-1547534999795/emojis/1f528.png rename to dist/v-1549282893552/emojis/1f528.png diff --git a/dist/v-1547534999795/emojis/1f529.png b/dist/v-1549282893552/emojis/1f529.png similarity index 100% rename from dist/v-1547534999795/emojis/1f529.png rename to dist/v-1549282893552/emojis/1f529.png diff --git a/dist/v-1547534999795/emojis/1f52a.png b/dist/v-1549282893552/emojis/1f52a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f52a.png rename to dist/v-1549282893552/emojis/1f52a.png diff --git a/dist/v-1547534999795/emojis/1f52b.png b/dist/v-1549282893552/emojis/1f52b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f52b.png rename to dist/v-1549282893552/emojis/1f52b.png diff --git a/dist/v-1547534999795/emojis/1f52c.png b/dist/v-1549282893552/emojis/1f52c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f52c.png rename to dist/v-1549282893552/emojis/1f52c.png diff --git a/dist/v-1547534999795/emojis/1f52d.png b/dist/v-1549282893552/emojis/1f52d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f52d.png rename to dist/v-1549282893552/emojis/1f52d.png diff --git a/dist/v-1547534999795/emojis/1f52e.png b/dist/v-1549282893552/emojis/1f52e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f52e.png rename to dist/v-1549282893552/emojis/1f52e.png diff --git a/dist/v-1547534999795/emojis/1f52f.png b/dist/v-1549282893552/emojis/1f52f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f52f.png rename to dist/v-1549282893552/emojis/1f52f.png diff --git a/dist/v-1547534999795/emojis/1f530.png b/dist/v-1549282893552/emojis/1f530.png similarity index 100% rename from dist/v-1547534999795/emojis/1f530.png rename to dist/v-1549282893552/emojis/1f530.png diff --git a/dist/v-1547534999795/emojis/1f531.png b/dist/v-1549282893552/emojis/1f531.png similarity index 100% rename from dist/v-1547534999795/emojis/1f531.png rename to dist/v-1549282893552/emojis/1f531.png diff --git a/dist/v-1547534999795/emojis/1f532.png b/dist/v-1549282893552/emojis/1f532.png similarity index 100% rename from dist/v-1547534999795/emojis/1f532.png rename to dist/v-1549282893552/emojis/1f532.png diff --git a/dist/v-1547534999795/emojis/1f533.png b/dist/v-1549282893552/emojis/1f533.png similarity index 100% rename from dist/v-1547534999795/emojis/1f533.png rename to dist/v-1549282893552/emojis/1f533.png diff --git a/dist/v-1547534999795/emojis/1f534.png b/dist/v-1549282893552/emojis/1f534.png similarity index 100% rename from dist/v-1547534999795/emojis/1f534.png rename to dist/v-1549282893552/emojis/1f534.png diff --git a/dist/v-1547534999795/emojis/1f535.png b/dist/v-1549282893552/emojis/1f535.png similarity index 100% rename from dist/v-1547534999795/emojis/1f535.png rename to dist/v-1549282893552/emojis/1f535.png diff --git a/dist/v-1547534999795/emojis/1f536.png b/dist/v-1549282893552/emojis/1f536.png similarity index 100% rename from dist/v-1547534999795/emojis/1f536.png rename to dist/v-1549282893552/emojis/1f536.png diff --git a/dist/v-1547534999795/emojis/1f537.png b/dist/v-1549282893552/emojis/1f537.png similarity index 100% rename from dist/v-1547534999795/emojis/1f537.png rename to dist/v-1549282893552/emojis/1f537.png diff --git a/dist/v-1547534999795/emojis/1f538.png b/dist/v-1549282893552/emojis/1f538.png similarity index 100% rename from dist/v-1547534999795/emojis/1f538.png rename to dist/v-1549282893552/emojis/1f538.png diff --git a/dist/v-1547534999795/emojis/1f539.png b/dist/v-1549282893552/emojis/1f539.png similarity index 100% rename from dist/v-1547534999795/emojis/1f539.png rename to dist/v-1549282893552/emojis/1f539.png diff --git a/dist/v-1547534999795/emojis/1f53a.png b/dist/v-1549282893552/emojis/1f53a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f53a.png rename to dist/v-1549282893552/emojis/1f53a.png diff --git a/dist/v-1547534999795/emojis/1f53b.png b/dist/v-1549282893552/emojis/1f53b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f53b.png rename to dist/v-1549282893552/emojis/1f53b.png diff --git a/dist/v-1547534999795/emojis/1f53c.png b/dist/v-1549282893552/emojis/1f53c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f53c.png rename to dist/v-1549282893552/emojis/1f53c.png diff --git a/dist/v-1547534999795/emojis/1f53d.png b/dist/v-1549282893552/emojis/1f53d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f53d.png rename to dist/v-1549282893552/emojis/1f53d.png diff --git a/dist/v-1547534999795/emojis/1f549.png b/dist/v-1549282893552/emojis/1f549.png similarity index 100% rename from dist/v-1547534999795/emojis/1f549.png rename to dist/v-1549282893552/emojis/1f549.png diff --git a/dist/v-1547534999795/emojis/1f54a.png b/dist/v-1549282893552/emojis/1f54a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f54a.png rename to dist/v-1549282893552/emojis/1f54a.png diff --git a/dist/v-1547534999795/emojis/1f54b.png b/dist/v-1549282893552/emojis/1f54b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f54b.png rename to dist/v-1549282893552/emojis/1f54b.png diff --git a/dist/v-1547534999795/emojis/1f54c.png b/dist/v-1549282893552/emojis/1f54c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f54c.png rename to dist/v-1549282893552/emojis/1f54c.png diff --git a/dist/v-1547534999795/emojis/1f54d.png b/dist/v-1549282893552/emojis/1f54d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f54d.png rename to dist/v-1549282893552/emojis/1f54d.png diff --git a/dist/v-1547534999795/emojis/1f54e.png b/dist/v-1549282893552/emojis/1f54e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f54e.png rename to dist/v-1549282893552/emojis/1f54e.png diff --git a/dist/v-1547534999795/emojis/1f550.png b/dist/v-1549282893552/emojis/1f550.png similarity index 100% rename from dist/v-1547534999795/emojis/1f550.png rename to dist/v-1549282893552/emojis/1f550.png diff --git a/dist/v-1547534999795/emojis/1f551.png b/dist/v-1549282893552/emojis/1f551.png similarity index 100% rename from dist/v-1547534999795/emojis/1f551.png rename to dist/v-1549282893552/emojis/1f551.png diff --git a/dist/v-1547534999795/emojis/1f552.png b/dist/v-1549282893552/emojis/1f552.png similarity index 100% rename from dist/v-1547534999795/emojis/1f552.png rename to dist/v-1549282893552/emojis/1f552.png diff --git a/dist/v-1547534999795/emojis/1f553.png b/dist/v-1549282893552/emojis/1f553.png similarity index 100% rename from dist/v-1547534999795/emojis/1f553.png rename to dist/v-1549282893552/emojis/1f553.png diff --git a/dist/v-1547534999795/emojis/1f554.png b/dist/v-1549282893552/emojis/1f554.png similarity index 100% rename from dist/v-1547534999795/emojis/1f554.png rename to dist/v-1549282893552/emojis/1f554.png diff --git a/dist/v-1547534999795/emojis/1f555.png b/dist/v-1549282893552/emojis/1f555.png similarity index 100% rename from dist/v-1547534999795/emojis/1f555.png rename to dist/v-1549282893552/emojis/1f555.png diff --git a/dist/v-1547534999795/emojis/1f556.png b/dist/v-1549282893552/emojis/1f556.png similarity index 100% rename from dist/v-1547534999795/emojis/1f556.png rename to dist/v-1549282893552/emojis/1f556.png diff --git a/dist/v-1547534999795/emojis/1f557.png b/dist/v-1549282893552/emojis/1f557.png similarity index 100% rename from dist/v-1547534999795/emojis/1f557.png rename to dist/v-1549282893552/emojis/1f557.png diff --git a/dist/v-1547534999795/emojis/1f558.png b/dist/v-1549282893552/emojis/1f558.png similarity index 100% rename from dist/v-1547534999795/emojis/1f558.png rename to dist/v-1549282893552/emojis/1f558.png diff --git a/dist/v-1547534999795/emojis/1f559.png b/dist/v-1549282893552/emojis/1f559.png similarity index 100% rename from dist/v-1547534999795/emojis/1f559.png rename to dist/v-1549282893552/emojis/1f559.png diff --git a/dist/v-1547534999795/emojis/1f55a.png b/dist/v-1549282893552/emojis/1f55a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f55a.png rename to dist/v-1549282893552/emojis/1f55a.png diff --git a/dist/v-1547534999795/emojis/1f55b.png b/dist/v-1549282893552/emojis/1f55b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f55b.png rename to dist/v-1549282893552/emojis/1f55b.png diff --git a/dist/v-1547534999795/emojis/1f55c.png b/dist/v-1549282893552/emojis/1f55c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f55c.png rename to dist/v-1549282893552/emojis/1f55c.png diff --git a/dist/v-1547534999795/emojis/1f55d.png b/dist/v-1549282893552/emojis/1f55d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f55d.png rename to dist/v-1549282893552/emojis/1f55d.png diff --git a/dist/v-1547534999795/emojis/1f55e.png b/dist/v-1549282893552/emojis/1f55e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f55e.png rename to dist/v-1549282893552/emojis/1f55e.png diff --git a/dist/v-1547534999795/emojis/1f55f.png b/dist/v-1549282893552/emojis/1f55f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f55f.png rename to dist/v-1549282893552/emojis/1f55f.png diff --git a/dist/v-1547534999795/emojis/1f560.png b/dist/v-1549282893552/emojis/1f560.png similarity index 100% rename from dist/v-1547534999795/emojis/1f560.png rename to dist/v-1549282893552/emojis/1f560.png diff --git a/dist/v-1547534999795/emojis/1f561.png b/dist/v-1549282893552/emojis/1f561.png similarity index 100% rename from dist/v-1547534999795/emojis/1f561.png rename to dist/v-1549282893552/emojis/1f561.png diff --git a/dist/v-1547534999795/emojis/1f562.png b/dist/v-1549282893552/emojis/1f562.png similarity index 100% rename from dist/v-1547534999795/emojis/1f562.png rename to dist/v-1549282893552/emojis/1f562.png diff --git a/dist/v-1547534999795/emojis/1f563.png b/dist/v-1549282893552/emojis/1f563.png similarity index 100% rename from dist/v-1547534999795/emojis/1f563.png rename to dist/v-1549282893552/emojis/1f563.png diff --git a/dist/v-1547534999795/emojis/1f564.png b/dist/v-1549282893552/emojis/1f564.png similarity index 100% rename from dist/v-1547534999795/emojis/1f564.png rename to dist/v-1549282893552/emojis/1f564.png diff --git a/dist/v-1547534999795/emojis/1f565.png b/dist/v-1549282893552/emojis/1f565.png similarity index 100% rename from dist/v-1547534999795/emojis/1f565.png rename to dist/v-1549282893552/emojis/1f565.png diff --git a/dist/v-1547534999795/emojis/1f566.png b/dist/v-1549282893552/emojis/1f566.png similarity index 100% rename from dist/v-1547534999795/emojis/1f566.png rename to dist/v-1549282893552/emojis/1f566.png diff --git a/dist/v-1547534999795/emojis/1f567.png b/dist/v-1549282893552/emojis/1f567.png similarity index 100% rename from dist/v-1547534999795/emojis/1f567.png rename to dist/v-1549282893552/emojis/1f567.png diff --git a/dist/v-1547534999795/emojis/1f56f.png b/dist/v-1549282893552/emojis/1f56f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f56f.png rename to dist/v-1549282893552/emojis/1f56f.png diff --git a/dist/v-1547534999795/emojis/1f570.png b/dist/v-1549282893552/emojis/1f570.png similarity index 100% rename from dist/v-1547534999795/emojis/1f570.png rename to dist/v-1549282893552/emojis/1f570.png diff --git a/dist/v-1547534999795/emojis/1f573.png b/dist/v-1549282893552/emojis/1f573.png similarity index 100% rename from dist/v-1547534999795/emojis/1f573.png rename to dist/v-1549282893552/emojis/1f573.png diff --git a/dist/v-1547534999795/emojis/1f574.png b/dist/v-1549282893552/emojis/1f574.png similarity index 100% rename from dist/v-1547534999795/emojis/1f574.png rename to dist/v-1549282893552/emojis/1f574.png diff --git a/dist/v-1547534999795/emojis/1f575-fe0f-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f575-fe0f-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f575-fe0f-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f575-fe0f-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f575-fe0f-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f575-fe0f-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f575-fe0f-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f575-fe0f-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f575.png b/dist/v-1549282893552/emojis/1f575.png similarity index 100% rename from dist/v-1547534999795/emojis/1f575.png rename to dist/v-1549282893552/emojis/1f575.png diff --git a/dist/v-1547534999795/emojis/1f576.png b/dist/v-1549282893552/emojis/1f576.png similarity index 100% rename from dist/v-1547534999795/emojis/1f576.png rename to dist/v-1549282893552/emojis/1f576.png diff --git a/dist/v-1547534999795/emojis/1f577.png b/dist/v-1549282893552/emojis/1f577.png similarity index 100% rename from dist/v-1547534999795/emojis/1f577.png rename to dist/v-1549282893552/emojis/1f577.png diff --git a/dist/v-1547534999795/emojis/1f578.png b/dist/v-1549282893552/emojis/1f578.png similarity index 100% rename from dist/v-1547534999795/emojis/1f578.png rename to dist/v-1549282893552/emojis/1f578.png diff --git a/dist/v-1547534999795/emojis/1f579.png b/dist/v-1549282893552/emojis/1f579.png similarity index 100% rename from dist/v-1547534999795/emojis/1f579.png rename to dist/v-1549282893552/emojis/1f579.png diff --git a/dist/v-1547534999795/emojis/1f57a.png b/dist/v-1549282893552/emojis/1f57a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f57a.png rename to dist/v-1549282893552/emojis/1f57a.png diff --git a/dist/v-1547534999795/emojis/1f587.png b/dist/v-1549282893552/emojis/1f587.png similarity index 100% rename from dist/v-1547534999795/emojis/1f587.png rename to dist/v-1549282893552/emojis/1f587.png diff --git a/dist/v-1547534999795/emojis/1f58a.png b/dist/v-1549282893552/emojis/1f58a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f58a.png rename to dist/v-1549282893552/emojis/1f58a.png diff --git a/dist/v-1547534999795/emojis/1f58b.png b/dist/v-1549282893552/emojis/1f58b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f58b.png rename to dist/v-1549282893552/emojis/1f58b.png diff --git a/dist/v-1547534999795/emojis/1f58c.png b/dist/v-1549282893552/emojis/1f58c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f58c.png rename to dist/v-1549282893552/emojis/1f58c.png diff --git a/dist/v-1547534999795/emojis/1f58d.png b/dist/v-1549282893552/emojis/1f58d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f58d.png rename to dist/v-1549282893552/emojis/1f58d.png diff --git a/dist/v-1547534999795/emojis/1f590.png b/dist/v-1549282893552/emojis/1f590.png similarity index 100% rename from dist/v-1547534999795/emojis/1f590.png rename to dist/v-1549282893552/emojis/1f590.png diff --git a/dist/v-1547534999795/emojis/1f595.png b/dist/v-1549282893552/emojis/1f595.png similarity index 100% rename from dist/v-1547534999795/emojis/1f595.png rename to dist/v-1549282893552/emojis/1f595.png diff --git a/dist/v-1547534999795/emojis/1f596.png b/dist/v-1549282893552/emojis/1f596.png similarity index 100% rename from dist/v-1547534999795/emojis/1f596.png rename to dist/v-1549282893552/emojis/1f596.png diff --git a/dist/v-1547534999795/emojis/1f5a4.png b/dist/v-1549282893552/emojis/1f5a4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5a4.png rename to dist/v-1549282893552/emojis/1f5a4.png diff --git a/dist/v-1547534999795/emojis/1f5a5.png b/dist/v-1549282893552/emojis/1f5a5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5a5.png rename to dist/v-1549282893552/emojis/1f5a5.png diff --git a/dist/v-1547534999795/emojis/1f5a8.png b/dist/v-1549282893552/emojis/1f5a8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5a8.png rename to dist/v-1549282893552/emojis/1f5a8.png diff --git a/dist/v-1547534999795/emojis/1f5b1.png b/dist/v-1549282893552/emojis/1f5b1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5b1.png rename to dist/v-1549282893552/emojis/1f5b1.png diff --git a/dist/v-1547534999795/emojis/1f5b2.png b/dist/v-1549282893552/emojis/1f5b2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5b2.png rename to dist/v-1549282893552/emojis/1f5b2.png diff --git a/dist/v-1547534999795/emojis/1f5bc.png b/dist/v-1549282893552/emojis/1f5bc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5bc.png rename to dist/v-1549282893552/emojis/1f5bc.png diff --git a/dist/v-1547534999795/emojis/1f5c2.png b/dist/v-1549282893552/emojis/1f5c2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5c2.png rename to dist/v-1549282893552/emojis/1f5c2.png diff --git a/dist/v-1547534999795/emojis/1f5c3.png b/dist/v-1549282893552/emojis/1f5c3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5c3.png rename to dist/v-1549282893552/emojis/1f5c3.png diff --git a/dist/v-1547534999795/emojis/1f5c4.png b/dist/v-1549282893552/emojis/1f5c4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5c4.png rename to dist/v-1549282893552/emojis/1f5c4.png diff --git a/dist/v-1547534999795/emojis/1f5d1.png b/dist/v-1549282893552/emojis/1f5d1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5d1.png rename to dist/v-1549282893552/emojis/1f5d1.png diff --git a/dist/v-1547534999795/emojis/1f5d2.png b/dist/v-1549282893552/emojis/1f5d2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5d2.png rename to dist/v-1549282893552/emojis/1f5d2.png diff --git a/dist/v-1547534999795/emojis/1f5d3.png b/dist/v-1549282893552/emojis/1f5d3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5d3.png rename to dist/v-1549282893552/emojis/1f5d3.png diff --git a/dist/v-1547534999795/emojis/1f5dc.png b/dist/v-1549282893552/emojis/1f5dc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5dc.png rename to dist/v-1549282893552/emojis/1f5dc.png diff --git a/dist/v-1547534999795/emojis/1f5dd.png b/dist/v-1549282893552/emojis/1f5dd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5dd.png rename to dist/v-1549282893552/emojis/1f5dd.png diff --git a/dist/v-1547534999795/emojis/1f5de.png b/dist/v-1549282893552/emojis/1f5de.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5de.png rename to dist/v-1549282893552/emojis/1f5de.png diff --git a/dist/v-1547534999795/emojis/1f5e1.png b/dist/v-1549282893552/emojis/1f5e1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5e1.png rename to dist/v-1549282893552/emojis/1f5e1.png diff --git a/dist/v-1547534999795/emojis/1f5e3.png b/dist/v-1549282893552/emojis/1f5e3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5e3.png rename to dist/v-1549282893552/emojis/1f5e3.png diff --git a/dist/v-1547534999795/emojis/1f5e8.png b/dist/v-1549282893552/emojis/1f5e8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5e8.png rename to dist/v-1549282893552/emojis/1f5e8.png diff --git a/dist/v-1547534999795/emojis/1f5ef.png b/dist/v-1549282893552/emojis/1f5ef.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5ef.png rename to dist/v-1549282893552/emojis/1f5ef.png diff --git a/dist/v-1547534999795/emojis/1f5f3.png b/dist/v-1549282893552/emojis/1f5f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5f3.png rename to dist/v-1549282893552/emojis/1f5f3.png diff --git a/dist/v-1547534999795/emojis/1f5fa.png b/dist/v-1549282893552/emojis/1f5fa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5fa.png rename to dist/v-1549282893552/emojis/1f5fa.png diff --git a/dist/v-1547534999795/emojis/1f5fb.png b/dist/v-1549282893552/emojis/1f5fb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5fb.png rename to dist/v-1549282893552/emojis/1f5fb.png diff --git a/dist/v-1547534999795/emojis/1f5fc.png b/dist/v-1549282893552/emojis/1f5fc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5fc.png rename to dist/v-1549282893552/emojis/1f5fc.png diff --git a/dist/v-1547534999795/emojis/1f5fd.png b/dist/v-1549282893552/emojis/1f5fd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5fd.png rename to dist/v-1549282893552/emojis/1f5fd.png diff --git a/dist/v-1547534999795/emojis/1f5fe.png b/dist/v-1549282893552/emojis/1f5fe.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5fe.png rename to dist/v-1549282893552/emojis/1f5fe.png diff --git a/dist/v-1547534999795/emojis/1f5ff.png b/dist/v-1549282893552/emojis/1f5ff.png similarity index 100% rename from dist/v-1547534999795/emojis/1f5ff.png rename to dist/v-1549282893552/emojis/1f5ff.png diff --git a/dist/v-1547534999795/emojis/1f600.png b/dist/v-1549282893552/emojis/1f600.png similarity index 100% rename from dist/v-1547534999795/emojis/1f600.png rename to dist/v-1549282893552/emojis/1f600.png diff --git a/dist/v-1547534999795/emojis/1f601.png b/dist/v-1549282893552/emojis/1f601.png similarity index 100% rename from dist/v-1547534999795/emojis/1f601.png rename to dist/v-1549282893552/emojis/1f601.png diff --git a/dist/v-1547534999795/emojis/1f602.png b/dist/v-1549282893552/emojis/1f602.png similarity index 100% rename from dist/v-1547534999795/emojis/1f602.png rename to dist/v-1549282893552/emojis/1f602.png diff --git a/dist/v-1547534999795/emojis/1f603.png b/dist/v-1549282893552/emojis/1f603.png similarity index 100% rename from dist/v-1547534999795/emojis/1f603.png rename to dist/v-1549282893552/emojis/1f603.png diff --git a/dist/v-1547534999795/emojis/1f604.png b/dist/v-1549282893552/emojis/1f604.png similarity index 100% rename from dist/v-1547534999795/emojis/1f604.png rename to dist/v-1549282893552/emojis/1f604.png diff --git a/dist/v-1547534999795/emojis/1f605.png b/dist/v-1549282893552/emojis/1f605.png similarity index 100% rename from dist/v-1547534999795/emojis/1f605.png rename to dist/v-1549282893552/emojis/1f605.png diff --git a/dist/v-1547534999795/emojis/1f606.png b/dist/v-1549282893552/emojis/1f606.png similarity index 100% rename from dist/v-1547534999795/emojis/1f606.png rename to dist/v-1549282893552/emojis/1f606.png diff --git a/dist/v-1547534999795/emojis/1f607.png b/dist/v-1549282893552/emojis/1f607.png similarity index 100% rename from dist/v-1547534999795/emojis/1f607.png rename to dist/v-1549282893552/emojis/1f607.png diff --git a/dist/v-1547534999795/emojis/1f608.png b/dist/v-1549282893552/emojis/1f608.png similarity index 100% rename from dist/v-1547534999795/emojis/1f608.png rename to dist/v-1549282893552/emojis/1f608.png diff --git a/dist/v-1547534999795/emojis/1f609.png b/dist/v-1549282893552/emojis/1f609.png similarity index 100% rename from dist/v-1547534999795/emojis/1f609.png rename to dist/v-1549282893552/emojis/1f609.png diff --git a/dist/v-1547534999795/emojis/1f60a.png b/dist/v-1549282893552/emojis/1f60a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f60a.png rename to dist/v-1549282893552/emojis/1f60a.png diff --git a/dist/v-1547534999795/emojis/1f60b.png b/dist/v-1549282893552/emojis/1f60b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f60b.png rename to dist/v-1549282893552/emojis/1f60b.png diff --git a/dist/v-1547534999795/emojis/1f60c.png b/dist/v-1549282893552/emojis/1f60c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f60c.png rename to dist/v-1549282893552/emojis/1f60c.png diff --git a/dist/v-1547534999795/emojis/1f60d.png b/dist/v-1549282893552/emojis/1f60d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f60d.png rename to dist/v-1549282893552/emojis/1f60d.png diff --git a/dist/v-1547534999795/emojis/1f60e.png b/dist/v-1549282893552/emojis/1f60e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f60e.png rename to dist/v-1549282893552/emojis/1f60e.png diff --git a/dist/v-1547534999795/emojis/1f60f.png b/dist/v-1549282893552/emojis/1f60f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f60f.png rename to dist/v-1549282893552/emojis/1f60f.png diff --git a/dist/v-1547534999795/emojis/1f610.png b/dist/v-1549282893552/emojis/1f610.png similarity index 100% rename from dist/v-1547534999795/emojis/1f610.png rename to dist/v-1549282893552/emojis/1f610.png diff --git a/dist/v-1547534999795/emojis/1f611.png b/dist/v-1549282893552/emojis/1f611.png similarity index 100% rename from dist/v-1547534999795/emojis/1f611.png rename to dist/v-1549282893552/emojis/1f611.png diff --git a/dist/v-1547534999795/emojis/1f612.png b/dist/v-1549282893552/emojis/1f612.png similarity index 100% rename from dist/v-1547534999795/emojis/1f612.png rename to dist/v-1549282893552/emojis/1f612.png diff --git a/dist/v-1547534999795/emojis/1f613.png b/dist/v-1549282893552/emojis/1f613.png similarity index 100% rename from dist/v-1547534999795/emojis/1f613.png rename to dist/v-1549282893552/emojis/1f613.png diff --git a/dist/v-1547534999795/emojis/1f614.png b/dist/v-1549282893552/emojis/1f614.png similarity index 100% rename from dist/v-1547534999795/emojis/1f614.png rename to dist/v-1549282893552/emojis/1f614.png diff --git a/dist/v-1547534999795/emojis/1f615.png b/dist/v-1549282893552/emojis/1f615.png similarity index 100% rename from dist/v-1547534999795/emojis/1f615.png rename to dist/v-1549282893552/emojis/1f615.png diff --git a/dist/v-1547534999795/emojis/1f616.png b/dist/v-1549282893552/emojis/1f616.png similarity index 100% rename from dist/v-1547534999795/emojis/1f616.png rename to dist/v-1549282893552/emojis/1f616.png diff --git a/dist/v-1547534999795/emojis/1f617.png b/dist/v-1549282893552/emojis/1f617.png similarity index 100% rename from dist/v-1547534999795/emojis/1f617.png rename to dist/v-1549282893552/emojis/1f617.png diff --git a/dist/v-1547534999795/emojis/1f618.png b/dist/v-1549282893552/emojis/1f618.png similarity index 100% rename from dist/v-1547534999795/emojis/1f618.png rename to dist/v-1549282893552/emojis/1f618.png diff --git a/dist/v-1547534999795/emojis/1f619.png b/dist/v-1549282893552/emojis/1f619.png similarity index 100% rename from dist/v-1547534999795/emojis/1f619.png rename to dist/v-1549282893552/emojis/1f619.png diff --git a/dist/v-1547534999795/emojis/1f61a.png b/dist/v-1549282893552/emojis/1f61a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f61a.png rename to dist/v-1549282893552/emojis/1f61a.png diff --git a/dist/v-1547534999795/emojis/1f61b.png b/dist/v-1549282893552/emojis/1f61b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f61b.png rename to dist/v-1549282893552/emojis/1f61b.png diff --git a/dist/v-1547534999795/emojis/1f61c.png b/dist/v-1549282893552/emojis/1f61c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f61c.png rename to dist/v-1549282893552/emojis/1f61c.png diff --git a/dist/v-1547534999795/emojis/1f61d.png b/dist/v-1549282893552/emojis/1f61d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f61d.png rename to dist/v-1549282893552/emojis/1f61d.png diff --git a/dist/v-1547534999795/emojis/1f61e.png b/dist/v-1549282893552/emojis/1f61e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f61e.png rename to dist/v-1549282893552/emojis/1f61e.png diff --git a/dist/v-1547534999795/emojis/1f61f.png b/dist/v-1549282893552/emojis/1f61f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f61f.png rename to dist/v-1549282893552/emojis/1f61f.png diff --git a/dist/v-1547534999795/emojis/1f620.png b/dist/v-1549282893552/emojis/1f620.png similarity index 100% rename from dist/v-1547534999795/emojis/1f620.png rename to dist/v-1549282893552/emojis/1f620.png diff --git a/dist/v-1547534999795/emojis/1f621.png b/dist/v-1549282893552/emojis/1f621.png similarity index 100% rename from dist/v-1547534999795/emojis/1f621.png rename to dist/v-1549282893552/emojis/1f621.png diff --git a/dist/v-1547534999795/emojis/1f622.png b/dist/v-1549282893552/emojis/1f622.png similarity index 100% rename from dist/v-1547534999795/emojis/1f622.png rename to dist/v-1549282893552/emojis/1f622.png diff --git a/dist/v-1547534999795/emojis/1f623.png b/dist/v-1549282893552/emojis/1f623.png similarity index 100% rename from dist/v-1547534999795/emojis/1f623.png rename to dist/v-1549282893552/emojis/1f623.png diff --git a/dist/v-1547534999795/emojis/1f624.png b/dist/v-1549282893552/emojis/1f624.png similarity index 100% rename from dist/v-1547534999795/emojis/1f624.png rename to dist/v-1549282893552/emojis/1f624.png diff --git a/dist/v-1547534999795/emojis/1f625.png b/dist/v-1549282893552/emojis/1f625.png similarity index 100% rename from dist/v-1547534999795/emojis/1f625.png rename to dist/v-1549282893552/emojis/1f625.png diff --git a/dist/v-1547534999795/emojis/1f626.png b/dist/v-1549282893552/emojis/1f626.png similarity index 100% rename from dist/v-1547534999795/emojis/1f626.png rename to dist/v-1549282893552/emojis/1f626.png diff --git a/dist/v-1547534999795/emojis/1f627.png b/dist/v-1549282893552/emojis/1f627.png similarity index 100% rename from dist/v-1547534999795/emojis/1f627.png rename to dist/v-1549282893552/emojis/1f627.png diff --git a/dist/v-1547534999795/emojis/1f628.png b/dist/v-1549282893552/emojis/1f628.png similarity index 100% rename from dist/v-1547534999795/emojis/1f628.png rename to dist/v-1549282893552/emojis/1f628.png diff --git a/dist/v-1547534999795/emojis/1f629.png b/dist/v-1549282893552/emojis/1f629.png similarity index 100% rename from dist/v-1547534999795/emojis/1f629.png rename to dist/v-1549282893552/emojis/1f629.png diff --git a/dist/v-1547534999795/emojis/1f62a.png b/dist/v-1549282893552/emojis/1f62a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f62a.png rename to dist/v-1549282893552/emojis/1f62a.png diff --git a/dist/v-1547534999795/emojis/1f62b.png b/dist/v-1549282893552/emojis/1f62b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f62b.png rename to dist/v-1549282893552/emojis/1f62b.png diff --git a/dist/v-1547534999795/emojis/1f62c.png b/dist/v-1549282893552/emojis/1f62c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f62c.png rename to dist/v-1549282893552/emojis/1f62c.png diff --git a/dist/v-1547534999795/emojis/1f62d.png b/dist/v-1549282893552/emojis/1f62d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f62d.png rename to dist/v-1549282893552/emojis/1f62d.png diff --git a/dist/v-1547534999795/emojis/1f62e.png b/dist/v-1549282893552/emojis/1f62e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f62e.png rename to dist/v-1549282893552/emojis/1f62e.png diff --git a/dist/v-1547534999795/emojis/1f62f.png b/dist/v-1549282893552/emojis/1f62f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f62f.png rename to dist/v-1549282893552/emojis/1f62f.png diff --git a/dist/v-1547534999795/emojis/1f630.png b/dist/v-1549282893552/emojis/1f630.png similarity index 100% rename from dist/v-1547534999795/emojis/1f630.png rename to dist/v-1549282893552/emojis/1f630.png diff --git a/dist/v-1547534999795/emojis/1f631.png b/dist/v-1549282893552/emojis/1f631.png similarity index 100% rename from dist/v-1547534999795/emojis/1f631.png rename to dist/v-1549282893552/emojis/1f631.png diff --git a/dist/v-1547534999795/emojis/1f632.png b/dist/v-1549282893552/emojis/1f632.png similarity index 100% rename from dist/v-1547534999795/emojis/1f632.png rename to dist/v-1549282893552/emojis/1f632.png diff --git a/dist/v-1547534999795/emojis/1f633.png b/dist/v-1549282893552/emojis/1f633.png similarity index 100% rename from dist/v-1547534999795/emojis/1f633.png rename to dist/v-1549282893552/emojis/1f633.png diff --git a/dist/v-1547534999795/emojis/1f634.png b/dist/v-1549282893552/emojis/1f634.png similarity index 100% rename from dist/v-1547534999795/emojis/1f634.png rename to dist/v-1549282893552/emojis/1f634.png diff --git a/dist/v-1547534999795/emojis/1f635.png b/dist/v-1549282893552/emojis/1f635.png similarity index 100% rename from dist/v-1547534999795/emojis/1f635.png rename to dist/v-1549282893552/emojis/1f635.png diff --git a/dist/v-1547534999795/emojis/1f636.png b/dist/v-1549282893552/emojis/1f636.png similarity index 100% rename from dist/v-1547534999795/emojis/1f636.png rename to dist/v-1549282893552/emojis/1f636.png diff --git a/dist/v-1547534999795/emojis/1f637.png b/dist/v-1549282893552/emojis/1f637.png similarity index 100% rename from dist/v-1547534999795/emojis/1f637.png rename to dist/v-1549282893552/emojis/1f637.png diff --git a/dist/v-1547534999795/emojis/1f638.png b/dist/v-1549282893552/emojis/1f638.png similarity index 100% rename from dist/v-1547534999795/emojis/1f638.png rename to dist/v-1549282893552/emojis/1f638.png diff --git a/dist/v-1547534999795/emojis/1f639.png b/dist/v-1549282893552/emojis/1f639.png similarity index 100% rename from dist/v-1547534999795/emojis/1f639.png rename to dist/v-1549282893552/emojis/1f639.png diff --git a/dist/v-1547534999795/emojis/1f63a.png b/dist/v-1549282893552/emojis/1f63a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f63a.png rename to dist/v-1549282893552/emojis/1f63a.png diff --git a/dist/v-1547534999795/emojis/1f63b.png b/dist/v-1549282893552/emojis/1f63b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f63b.png rename to dist/v-1549282893552/emojis/1f63b.png diff --git a/dist/v-1547534999795/emojis/1f63c.png b/dist/v-1549282893552/emojis/1f63c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f63c.png rename to dist/v-1549282893552/emojis/1f63c.png diff --git a/dist/v-1547534999795/emojis/1f63d.png b/dist/v-1549282893552/emojis/1f63d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f63d.png rename to dist/v-1549282893552/emojis/1f63d.png diff --git a/dist/v-1547534999795/emojis/1f63e.png b/dist/v-1549282893552/emojis/1f63e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f63e.png rename to dist/v-1549282893552/emojis/1f63e.png diff --git a/dist/v-1547534999795/emojis/1f63f.png b/dist/v-1549282893552/emojis/1f63f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f63f.png rename to dist/v-1549282893552/emojis/1f63f.png diff --git a/dist/v-1547534999795/emojis/1f640.png b/dist/v-1549282893552/emojis/1f640.png similarity index 100% rename from dist/v-1547534999795/emojis/1f640.png rename to dist/v-1549282893552/emojis/1f640.png diff --git a/dist/v-1547534999795/emojis/1f641.png b/dist/v-1549282893552/emojis/1f641.png similarity index 100% rename from dist/v-1547534999795/emojis/1f641.png rename to dist/v-1549282893552/emojis/1f641.png diff --git a/dist/v-1547534999795/emojis/1f642.png b/dist/v-1549282893552/emojis/1f642.png similarity index 100% rename from dist/v-1547534999795/emojis/1f642.png rename to dist/v-1549282893552/emojis/1f642.png diff --git a/dist/v-1547534999795/emojis/1f643.png b/dist/v-1549282893552/emojis/1f643.png similarity index 100% rename from dist/v-1547534999795/emojis/1f643.png rename to dist/v-1549282893552/emojis/1f643.png diff --git a/dist/v-1547534999795/emojis/1f644.png b/dist/v-1549282893552/emojis/1f644.png similarity index 100% rename from dist/v-1547534999795/emojis/1f644.png rename to dist/v-1549282893552/emojis/1f644.png diff --git a/dist/v-1547534999795/emojis/1f645-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f645-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f645-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f645-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f645-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f645-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f645-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f645-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f645.png b/dist/v-1549282893552/emojis/1f645.png similarity index 100% rename from dist/v-1547534999795/emojis/1f645.png rename to dist/v-1549282893552/emojis/1f645.png diff --git a/dist/v-1547534999795/emojis/1f646-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f646-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f646-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f646-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f646-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f646-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f646-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f646-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f646.png b/dist/v-1549282893552/emojis/1f646.png similarity index 100% rename from dist/v-1547534999795/emojis/1f646.png rename to dist/v-1549282893552/emojis/1f646.png diff --git a/dist/v-1547534999795/emojis/1f647-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f647-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f647-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f647-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f647-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f647-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f647-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f647-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f647.png b/dist/v-1549282893552/emojis/1f647.png similarity index 100% rename from dist/v-1547534999795/emojis/1f647.png rename to dist/v-1549282893552/emojis/1f647.png diff --git a/dist/v-1547534999795/emojis/1f648.png b/dist/v-1549282893552/emojis/1f648.png similarity index 100% rename from dist/v-1547534999795/emojis/1f648.png rename to dist/v-1549282893552/emojis/1f648.png diff --git a/dist/v-1547534999795/emojis/1f649.png b/dist/v-1549282893552/emojis/1f649.png similarity index 100% rename from dist/v-1547534999795/emojis/1f649.png rename to dist/v-1549282893552/emojis/1f649.png diff --git a/dist/v-1547534999795/emojis/1f64a.png b/dist/v-1549282893552/emojis/1f64a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64a.png rename to dist/v-1549282893552/emojis/1f64a.png diff --git a/dist/v-1547534999795/emojis/1f64b-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f64b-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64b-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f64b-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f64b-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f64b-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64b-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f64b-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f64b.png b/dist/v-1549282893552/emojis/1f64b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64b.png rename to dist/v-1549282893552/emojis/1f64b.png diff --git a/dist/v-1547534999795/emojis/1f64c.png b/dist/v-1549282893552/emojis/1f64c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64c.png rename to dist/v-1549282893552/emojis/1f64c.png diff --git a/dist/v-1547534999795/emojis/1f64d-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f64d-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64d-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f64d-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f64d-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f64d-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64d-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f64d-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f64d.png b/dist/v-1549282893552/emojis/1f64d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64d.png rename to dist/v-1549282893552/emojis/1f64d.png diff --git a/dist/v-1547534999795/emojis/1f64e-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f64e-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64e-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f64e-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f64e-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f64e-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64e-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f64e-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f64e.png b/dist/v-1549282893552/emojis/1f64e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64e.png rename to dist/v-1549282893552/emojis/1f64e.png diff --git a/dist/v-1547534999795/emojis/1f64f.png b/dist/v-1549282893552/emojis/1f64f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f64f.png rename to dist/v-1549282893552/emojis/1f64f.png diff --git a/dist/v-1547534999795/emojis/1f680.png b/dist/v-1549282893552/emojis/1f680.png similarity index 100% rename from dist/v-1547534999795/emojis/1f680.png rename to dist/v-1549282893552/emojis/1f680.png diff --git a/dist/v-1547534999795/emojis/1f681.png b/dist/v-1549282893552/emojis/1f681.png similarity index 100% rename from dist/v-1547534999795/emojis/1f681.png rename to dist/v-1549282893552/emojis/1f681.png diff --git a/dist/v-1547534999795/emojis/1f682.png b/dist/v-1549282893552/emojis/1f682.png similarity index 100% rename from dist/v-1547534999795/emojis/1f682.png rename to dist/v-1549282893552/emojis/1f682.png diff --git a/dist/v-1547534999795/emojis/1f683.png b/dist/v-1549282893552/emojis/1f683.png similarity index 100% rename from dist/v-1547534999795/emojis/1f683.png rename to dist/v-1549282893552/emojis/1f683.png diff --git a/dist/v-1547534999795/emojis/1f684.png b/dist/v-1549282893552/emojis/1f684.png similarity index 100% rename from dist/v-1547534999795/emojis/1f684.png rename to dist/v-1549282893552/emojis/1f684.png diff --git a/dist/v-1547534999795/emojis/1f685.png b/dist/v-1549282893552/emojis/1f685.png similarity index 100% rename from dist/v-1547534999795/emojis/1f685.png rename to dist/v-1549282893552/emojis/1f685.png diff --git a/dist/v-1547534999795/emojis/1f686.png b/dist/v-1549282893552/emojis/1f686.png similarity index 100% rename from dist/v-1547534999795/emojis/1f686.png rename to dist/v-1549282893552/emojis/1f686.png diff --git a/dist/v-1547534999795/emojis/1f687.png b/dist/v-1549282893552/emojis/1f687.png similarity index 100% rename from dist/v-1547534999795/emojis/1f687.png rename to dist/v-1549282893552/emojis/1f687.png diff --git a/dist/v-1547534999795/emojis/1f688.png b/dist/v-1549282893552/emojis/1f688.png similarity index 100% rename from dist/v-1547534999795/emojis/1f688.png rename to dist/v-1549282893552/emojis/1f688.png diff --git a/dist/v-1547534999795/emojis/1f689.png b/dist/v-1549282893552/emojis/1f689.png similarity index 100% rename from dist/v-1547534999795/emojis/1f689.png rename to dist/v-1549282893552/emojis/1f689.png diff --git a/dist/v-1547534999795/emojis/1f68a.png b/dist/v-1549282893552/emojis/1f68a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f68a.png rename to dist/v-1549282893552/emojis/1f68a.png diff --git a/dist/v-1547534999795/emojis/1f68b.png b/dist/v-1549282893552/emojis/1f68b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f68b.png rename to dist/v-1549282893552/emojis/1f68b.png diff --git a/dist/v-1547534999795/emojis/1f68c.png b/dist/v-1549282893552/emojis/1f68c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f68c.png rename to dist/v-1549282893552/emojis/1f68c.png diff --git a/dist/v-1547534999795/emojis/1f68d.png b/dist/v-1549282893552/emojis/1f68d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f68d.png rename to dist/v-1549282893552/emojis/1f68d.png diff --git a/dist/v-1547534999795/emojis/1f68e.png b/dist/v-1549282893552/emojis/1f68e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f68e.png rename to dist/v-1549282893552/emojis/1f68e.png diff --git a/dist/v-1547534999795/emojis/1f68f.png b/dist/v-1549282893552/emojis/1f68f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f68f.png rename to dist/v-1549282893552/emojis/1f68f.png diff --git a/dist/v-1547534999795/emojis/1f690.png b/dist/v-1549282893552/emojis/1f690.png similarity index 100% rename from dist/v-1547534999795/emojis/1f690.png rename to dist/v-1549282893552/emojis/1f690.png diff --git a/dist/v-1547534999795/emojis/1f691.png b/dist/v-1549282893552/emojis/1f691.png similarity index 100% rename from dist/v-1547534999795/emojis/1f691.png rename to dist/v-1549282893552/emojis/1f691.png diff --git a/dist/v-1547534999795/emojis/1f692.png b/dist/v-1549282893552/emojis/1f692.png similarity index 100% rename from dist/v-1547534999795/emojis/1f692.png rename to dist/v-1549282893552/emojis/1f692.png diff --git a/dist/v-1547534999795/emojis/1f693.png b/dist/v-1549282893552/emojis/1f693.png similarity index 100% rename from dist/v-1547534999795/emojis/1f693.png rename to dist/v-1549282893552/emojis/1f693.png diff --git a/dist/v-1547534999795/emojis/1f694.png b/dist/v-1549282893552/emojis/1f694.png similarity index 100% rename from dist/v-1547534999795/emojis/1f694.png rename to dist/v-1549282893552/emojis/1f694.png diff --git a/dist/v-1547534999795/emojis/1f695.png b/dist/v-1549282893552/emojis/1f695.png similarity index 100% rename from dist/v-1547534999795/emojis/1f695.png rename to dist/v-1549282893552/emojis/1f695.png diff --git a/dist/v-1547534999795/emojis/1f696.png b/dist/v-1549282893552/emojis/1f696.png similarity index 100% rename from dist/v-1547534999795/emojis/1f696.png rename to dist/v-1549282893552/emojis/1f696.png diff --git a/dist/v-1547534999795/emojis/1f697.png b/dist/v-1549282893552/emojis/1f697.png similarity index 100% rename from dist/v-1547534999795/emojis/1f697.png rename to dist/v-1549282893552/emojis/1f697.png diff --git a/dist/v-1547534999795/emojis/1f698.png b/dist/v-1549282893552/emojis/1f698.png similarity index 100% rename from dist/v-1547534999795/emojis/1f698.png rename to dist/v-1549282893552/emojis/1f698.png diff --git a/dist/v-1547534999795/emojis/1f699.png b/dist/v-1549282893552/emojis/1f699.png similarity index 100% rename from dist/v-1547534999795/emojis/1f699.png rename to dist/v-1549282893552/emojis/1f699.png diff --git a/dist/v-1547534999795/emojis/1f69a.png b/dist/v-1549282893552/emojis/1f69a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f69a.png rename to dist/v-1549282893552/emojis/1f69a.png diff --git a/dist/v-1547534999795/emojis/1f69b.png b/dist/v-1549282893552/emojis/1f69b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f69b.png rename to dist/v-1549282893552/emojis/1f69b.png diff --git a/dist/v-1547534999795/emojis/1f69c.png b/dist/v-1549282893552/emojis/1f69c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f69c.png rename to dist/v-1549282893552/emojis/1f69c.png diff --git a/dist/v-1547534999795/emojis/1f69d.png b/dist/v-1549282893552/emojis/1f69d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f69d.png rename to dist/v-1549282893552/emojis/1f69d.png diff --git a/dist/v-1547534999795/emojis/1f69e.png b/dist/v-1549282893552/emojis/1f69e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f69e.png rename to dist/v-1549282893552/emojis/1f69e.png diff --git a/dist/v-1547534999795/emojis/1f69f.png b/dist/v-1549282893552/emojis/1f69f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f69f.png rename to dist/v-1549282893552/emojis/1f69f.png diff --git a/dist/v-1547534999795/emojis/1f6a0.png b/dist/v-1549282893552/emojis/1f6a0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a0.png rename to dist/v-1549282893552/emojis/1f6a0.png diff --git a/dist/v-1547534999795/emojis/1f6a1.png b/dist/v-1549282893552/emojis/1f6a1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a1.png rename to dist/v-1549282893552/emojis/1f6a1.png diff --git a/dist/v-1547534999795/emojis/1f6a2.png b/dist/v-1549282893552/emojis/1f6a2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a2.png rename to dist/v-1549282893552/emojis/1f6a2.png diff --git a/dist/v-1547534999795/emojis/1f6a3-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f6a3-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a3-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f6a3-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f6a3-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f6a3-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a3-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f6a3-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f6a3.png b/dist/v-1549282893552/emojis/1f6a3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a3.png rename to dist/v-1549282893552/emojis/1f6a3.png diff --git a/dist/v-1547534999795/emojis/1f6a4.png b/dist/v-1549282893552/emojis/1f6a4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a4.png rename to dist/v-1549282893552/emojis/1f6a4.png diff --git a/dist/v-1547534999795/emojis/1f6a5.png b/dist/v-1549282893552/emojis/1f6a5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a5.png rename to dist/v-1549282893552/emojis/1f6a5.png diff --git a/dist/v-1547534999795/emojis/1f6a6.png b/dist/v-1549282893552/emojis/1f6a6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a6.png rename to dist/v-1549282893552/emojis/1f6a6.png diff --git a/dist/v-1547534999795/emojis/1f6a7.png b/dist/v-1549282893552/emojis/1f6a7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a7.png rename to dist/v-1549282893552/emojis/1f6a7.png diff --git a/dist/v-1547534999795/emojis/1f6a8.png b/dist/v-1549282893552/emojis/1f6a8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a8.png rename to dist/v-1549282893552/emojis/1f6a8.png diff --git a/dist/v-1547534999795/emojis/1f6a9.png b/dist/v-1549282893552/emojis/1f6a9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6a9.png rename to dist/v-1549282893552/emojis/1f6a9.png diff --git a/dist/v-1547534999795/emojis/1f6aa.png b/dist/v-1549282893552/emojis/1f6aa.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6aa.png rename to dist/v-1549282893552/emojis/1f6aa.png diff --git a/dist/v-1547534999795/emojis/1f6ab.png b/dist/v-1549282893552/emojis/1f6ab.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6ab.png rename to dist/v-1549282893552/emojis/1f6ab.png diff --git a/dist/v-1547534999795/emojis/1f6ac.png b/dist/v-1549282893552/emojis/1f6ac.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6ac.png rename to dist/v-1549282893552/emojis/1f6ac.png diff --git a/dist/v-1547534999795/emojis/1f6ad.png b/dist/v-1549282893552/emojis/1f6ad.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6ad.png rename to dist/v-1549282893552/emojis/1f6ad.png diff --git a/dist/v-1547534999795/emojis/1f6ae.png b/dist/v-1549282893552/emojis/1f6ae.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6ae.png rename to dist/v-1549282893552/emojis/1f6ae.png diff --git a/dist/v-1547534999795/emojis/1f6af.png b/dist/v-1549282893552/emojis/1f6af.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6af.png rename to dist/v-1549282893552/emojis/1f6af.png diff --git a/dist/v-1547534999795/emojis/1f6b0.png b/dist/v-1549282893552/emojis/1f6b0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b0.png rename to dist/v-1549282893552/emojis/1f6b0.png diff --git a/dist/v-1547534999795/emojis/1f6b1.png b/dist/v-1549282893552/emojis/1f6b1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b1.png rename to dist/v-1549282893552/emojis/1f6b1.png diff --git a/dist/v-1547534999795/emojis/1f6b2.png b/dist/v-1549282893552/emojis/1f6b2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b2.png rename to dist/v-1549282893552/emojis/1f6b2.png diff --git a/dist/v-1547534999795/emojis/1f6b3.png b/dist/v-1549282893552/emojis/1f6b3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b3.png rename to dist/v-1549282893552/emojis/1f6b3.png diff --git a/dist/v-1547534999795/emojis/1f6b4-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f6b4-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b4-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f6b4-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f6b4-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f6b4-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b4-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f6b4-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f6b4.png b/dist/v-1549282893552/emojis/1f6b4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b4.png rename to dist/v-1549282893552/emojis/1f6b4.png diff --git a/dist/v-1547534999795/emojis/1f6b5-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f6b5-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b5-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f6b5-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f6b5-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f6b5-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b5-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f6b5-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f6b5.png b/dist/v-1549282893552/emojis/1f6b5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b5.png rename to dist/v-1549282893552/emojis/1f6b5.png diff --git a/dist/v-1547534999795/emojis/1f6b6-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f6b6-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b6-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f6b6-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f6b6-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f6b6-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b6-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f6b6-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f6b6.png b/dist/v-1549282893552/emojis/1f6b6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b6.png rename to dist/v-1549282893552/emojis/1f6b6.png diff --git a/dist/v-1547534999795/emojis/1f6b7.png b/dist/v-1549282893552/emojis/1f6b7.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b7.png rename to dist/v-1549282893552/emojis/1f6b7.png diff --git a/dist/v-1547534999795/emojis/1f6b8.png b/dist/v-1549282893552/emojis/1f6b8.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b8.png rename to dist/v-1549282893552/emojis/1f6b8.png diff --git a/dist/v-1547534999795/emojis/1f6b9.png b/dist/v-1549282893552/emojis/1f6b9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6b9.png rename to dist/v-1549282893552/emojis/1f6b9.png diff --git a/dist/v-1547534999795/emojis/1f6ba.png b/dist/v-1549282893552/emojis/1f6ba.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6ba.png rename to dist/v-1549282893552/emojis/1f6ba.png diff --git a/dist/v-1547534999795/emojis/1f6bb.png b/dist/v-1549282893552/emojis/1f6bb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6bb.png rename to dist/v-1549282893552/emojis/1f6bb.png diff --git a/dist/v-1547534999795/emojis/1f6bc.png b/dist/v-1549282893552/emojis/1f6bc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6bc.png rename to dist/v-1549282893552/emojis/1f6bc.png diff --git a/dist/v-1547534999795/emojis/1f6bd.png b/dist/v-1549282893552/emojis/1f6bd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6bd.png rename to dist/v-1549282893552/emojis/1f6bd.png diff --git a/dist/v-1547534999795/emojis/1f6be.png b/dist/v-1549282893552/emojis/1f6be.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6be.png rename to dist/v-1549282893552/emojis/1f6be.png diff --git a/dist/v-1547534999795/emojis/1f6bf.png b/dist/v-1549282893552/emojis/1f6bf.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6bf.png rename to dist/v-1549282893552/emojis/1f6bf.png diff --git a/dist/v-1547534999795/emojis/1f6c0.png b/dist/v-1549282893552/emojis/1f6c0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6c0.png rename to dist/v-1549282893552/emojis/1f6c0.png diff --git a/dist/v-1547534999795/emojis/1f6c1.png b/dist/v-1549282893552/emojis/1f6c1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6c1.png rename to dist/v-1549282893552/emojis/1f6c1.png diff --git a/dist/v-1547534999795/emojis/1f6c2.png b/dist/v-1549282893552/emojis/1f6c2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6c2.png rename to dist/v-1549282893552/emojis/1f6c2.png diff --git a/dist/v-1547534999795/emojis/1f6c3.png b/dist/v-1549282893552/emojis/1f6c3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6c3.png rename to dist/v-1549282893552/emojis/1f6c3.png diff --git a/dist/v-1547534999795/emojis/1f6c4.png b/dist/v-1549282893552/emojis/1f6c4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6c4.png rename to dist/v-1549282893552/emojis/1f6c4.png diff --git a/dist/v-1547534999795/emojis/1f6c5.png b/dist/v-1549282893552/emojis/1f6c5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6c5.png rename to dist/v-1549282893552/emojis/1f6c5.png diff --git a/dist/v-1547534999795/emojis/1f6cb.png b/dist/v-1549282893552/emojis/1f6cb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6cb.png rename to dist/v-1549282893552/emojis/1f6cb.png diff --git a/dist/v-1547534999795/emojis/1f6cc.png b/dist/v-1549282893552/emojis/1f6cc.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6cc.png rename to dist/v-1549282893552/emojis/1f6cc.png diff --git a/dist/v-1547534999795/emojis/1f6cd.png b/dist/v-1549282893552/emojis/1f6cd.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6cd.png rename to dist/v-1549282893552/emojis/1f6cd.png diff --git a/dist/v-1547534999795/emojis/1f6ce.png b/dist/v-1549282893552/emojis/1f6ce.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6ce.png rename to dist/v-1549282893552/emojis/1f6ce.png diff --git a/dist/v-1547534999795/emojis/1f6cf.png b/dist/v-1549282893552/emojis/1f6cf.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6cf.png rename to dist/v-1549282893552/emojis/1f6cf.png diff --git a/dist/v-1547534999795/emojis/1f6d0.png b/dist/v-1549282893552/emojis/1f6d0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6d0.png rename to dist/v-1549282893552/emojis/1f6d0.png diff --git a/dist/v-1547534999795/emojis/1f6d1.png b/dist/v-1549282893552/emojis/1f6d1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6d1.png rename to dist/v-1549282893552/emojis/1f6d1.png diff --git a/dist/v-1547534999795/emojis/1f6d2.png b/dist/v-1549282893552/emojis/1f6d2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6d2.png rename to dist/v-1549282893552/emojis/1f6d2.png diff --git a/dist/v-1547534999795/emojis/1f6e0.png b/dist/v-1549282893552/emojis/1f6e0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6e0.png rename to dist/v-1549282893552/emojis/1f6e0.png diff --git a/dist/v-1547534999795/emojis/1f6e1.png b/dist/v-1549282893552/emojis/1f6e1.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6e1.png rename to dist/v-1549282893552/emojis/1f6e1.png diff --git a/dist/v-1547534999795/emojis/1f6e2.png b/dist/v-1549282893552/emojis/1f6e2.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6e2.png rename to dist/v-1549282893552/emojis/1f6e2.png diff --git a/dist/v-1547534999795/emojis/1f6e3.png b/dist/v-1549282893552/emojis/1f6e3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6e3.png rename to dist/v-1549282893552/emojis/1f6e3.png diff --git a/dist/v-1547534999795/emojis/1f6e4.png b/dist/v-1549282893552/emojis/1f6e4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6e4.png rename to dist/v-1549282893552/emojis/1f6e4.png diff --git a/dist/v-1547534999795/emojis/1f6e5.png b/dist/v-1549282893552/emojis/1f6e5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6e5.png rename to dist/v-1549282893552/emojis/1f6e5.png diff --git a/dist/v-1547534999795/emojis/1f6e9.png b/dist/v-1549282893552/emojis/1f6e9.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6e9.png rename to dist/v-1549282893552/emojis/1f6e9.png diff --git a/dist/v-1547534999795/emojis/1f6eb.png b/dist/v-1549282893552/emojis/1f6eb.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6eb.png rename to dist/v-1549282893552/emojis/1f6eb.png diff --git a/dist/v-1547534999795/emojis/1f6ec.png b/dist/v-1549282893552/emojis/1f6ec.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6ec.png rename to dist/v-1549282893552/emojis/1f6ec.png diff --git a/dist/v-1547534999795/emojis/1f6f0.png b/dist/v-1549282893552/emojis/1f6f0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6f0.png rename to dist/v-1549282893552/emojis/1f6f0.png diff --git a/dist/v-1547534999795/emojis/1f6f3.png b/dist/v-1549282893552/emojis/1f6f3.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6f3.png rename to dist/v-1549282893552/emojis/1f6f3.png diff --git a/dist/v-1547534999795/emojis/1f6f4.png b/dist/v-1549282893552/emojis/1f6f4.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6f4.png rename to dist/v-1549282893552/emojis/1f6f4.png diff --git a/dist/v-1547534999795/emojis/1f6f5.png b/dist/v-1549282893552/emojis/1f6f5.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6f5.png rename to dist/v-1549282893552/emojis/1f6f5.png diff --git a/dist/v-1547534999795/emojis/1f6f6.png b/dist/v-1549282893552/emojis/1f6f6.png similarity index 100% rename from dist/v-1547534999795/emojis/1f6f6.png rename to dist/v-1549282893552/emojis/1f6f6.png diff --git a/dist/v-1547534999795/emojis/1f910.png b/dist/v-1549282893552/emojis/1f910.png similarity index 100% rename from dist/v-1547534999795/emojis/1f910.png rename to dist/v-1549282893552/emojis/1f910.png diff --git a/dist/v-1547534999795/emojis/1f911.png b/dist/v-1549282893552/emojis/1f911.png similarity index 100% rename from dist/v-1547534999795/emojis/1f911.png rename to dist/v-1549282893552/emojis/1f911.png diff --git a/dist/v-1547534999795/emojis/1f912.png b/dist/v-1549282893552/emojis/1f912.png similarity index 100% rename from dist/v-1547534999795/emojis/1f912.png rename to dist/v-1549282893552/emojis/1f912.png diff --git a/dist/v-1547534999795/emojis/1f913.png b/dist/v-1549282893552/emojis/1f913.png similarity index 100% rename from dist/v-1547534999795/emojis/1f913.png rename to dist/v-1549282893552/emojis/1f913.png diff --git a/dist/v-1547534999795/emojis/1f914.png b/dist/v-1549282893552/emojis/1f914.png similarity index 100% rename from dist/v-1547534999795/emojis/1f914.png rename to dist/v-1549282893552/emojis/1f914.png diff --git a/dist/v-1547534999795/emojis/1f915.png b/dist/v-1549282893552/emojis/1f915.png similarity index 100% rename from dist/v-1547534999795/emojis/1f915.png rename to dist/v-1549282893552/emojis/1f915.png diff --git a/dist/v-1547534999795/emojis/1f916.png b/dist/v-1549282893552/emojis/1f916.png similarity index 100% rename from dist/v-1547534999795/emojis/1f916.png rename to dist/v-1549282893552/emojis/1f916.png diff --git a/dist/v-1547534999795/emojis/1f917.png b/dist/v-1549282893552/emojis/1f917.png similarity index 100% rename from dist/v-1547534999795/emojis/1f917.png rename to dist/v-1549282893552/emojis/1f917.png diff --git a/dist/v-1547534999795/emojis/1f918.png b/dist/v-1549282893552/emojis/1f918.png similarity index 100% rename from dist/v-1547534999795/emojis/1f918.png rename to dist/v-1549282893552/emojis/1f918.png diff --git a/dist/v-1547534999795/emojis/1f919.png b/dist/v-1549282893552/emojis/1f919.png similarity index 100% rename from dist/v-1547534999795/emojis/1f919.png rename to dist/v-1549282893552/emojis/1f919.png diff --git a/dist/v-1547534999795/emojis/1f91a.png b/dist/v-1549282893552/emojis/1f91a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f91a.png rename to dist/v-1549282893552/emojis/1f91a.png diff --git a/dist/v-1547534999795/emojis/1f91b.png b/dist/v-1549282893552/emojis/1f91b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f91b.png rename to dist/v-1549282893552/emojis/1f91b.png diff --git a/dist/v-1547534999795/emojis/1f91c.png b/dist/v-1549282893552/emojis/1f91c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f91c.png rename to dist/v-1549282893552/emojis/1f91c.png diff --git a/dist/v-1547534999795/emojis/1f91d.png b/dist/v-1549282893552/emojis/1f91d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f91d.png rename to dist/v-1549282893552/emojis/1f91d.png diff --git a/dist/v-1547534999795/emojis/1f91e.png b/dist/v-1549282893552/emojis/1f91e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f91e.png rename to dist/v-1549282893552/emojis/1f91e.png diff --git a/dist/v-1547534999795/emojis/1f920.png b/dist/v-1549282893552/emojis/1f920.png similarity index 100% rename from dist/v-1547534999795/emojis/1f920.png rename to dist/v-1549282893552/emojis/1f920.png diff --git a/dist/v-1547534999795/emojis/1f921.png b/dist/v-1549282893552/emojis/1f921.png similarity index 100% rename from dist/v-1547534999795/emojis/1f921.png rename to dist/v-1549282893552/emojis/1f921.png diff --git a/dist/v-1547534999795/emojis/1f922.png b/dist/v-1549282893552/emojis/1f922.png similarity index 100% rename from dist/v-1547534999795/emojis/1f922.png rename to dist/v-1549282893552/emojis/1f922.png diff --git a/dist/v-1547534999795/emojis/1f923.png b/dist/v-1549282893552/emojis/1f923.png similarity index 100% rename from dist/v-1547534999795/emojis/1f923.png rename to dist/v-1549282893552/emojis/1f923.png diff --git a/dist/v-1547534999795/emojis/1f924.png b/dist/v-1549282893552/emojis/1f924.png similarity index 100% rename from dist/v-1547534999795/emojis/1f924.png rename to dist/v-1549282893552/emojis/1f924.png diff --git a/dist/v-1547534999795/emojis/1f925.png b/dist/v-1549282893552/emojis/1f925.png similarity index 100% rename from dist/v-1547534999795/emojis/1f925.png rename to dist/v-1549282893552/emojis/1f925.png diff --git a/dist/v-1547534999795/emojis/1f926-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f926-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f926-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f926-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f926-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f926-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f926-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f926-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f926.png b/dist/v-1549282893552/emojis/1f926.png similarity index 100% rename from dist/v-1547534999795/emojis/1f926.png rename to dist/v-1549282893552/emojis/1f926.png diff --git a/dist/v-1547534999795/emojis/1f927.png b/dist/v-1549282893552/emojis/1f927.png similarity index 100% rename from dist/v-1547534999795/emojis/1f927.png rename to dist/v-1549282893552/emojis/1f927.png diff --git a/dist/v-1547534999795/emojis/1f930.png b/dist/v-1549282893552/emojis/1f930.png similarity index 100% rename from dist/v-1547534999795/emojis/1f930.png rename to dist/v-1549282893552/emojis/1f930.png diff --git a/dist/v-1547534999795/emojis/1f933.png b/dist/v-1549282893552/emojis/1f933.png similarity index 100% rename from dist/v-1547534999795/emojis/1f933.png rename to dist/v-1549282893552/emojis/1f933.png diff --git a/dist/v-1547534999795/emojis/1f934.png b/dist/v-1549282893552/emojis/1f934.png similarity index 100% rename from dist/v-1547534999795/emojis/1f934.png rename to dist/v-1549282893552/emojis/1f934.png diff --git a/dist/v-1547534999795/emojis/1f935.png b/dist/v-1549282893552/emojis/1f935.png similarity index 100% rename from dist/v-1547534999795/emojis/1f935.png rename to dist/v-1549282893552/emojis/1f935.png diff --git a/dist/v-1547534999795/emojis/1f936.png b/dist/v-1549282893552/emojis/1f936.png similarity index 100% rename from dist/v-1547534999795/emojis/1f936.png rename to dist/v-1549282893552/emojis/1f936.png diff --git a/dist/v-1547534999795/emojis/1f937-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f937-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f937-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f937-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f937-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f937-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f937-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f937-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f937.png b/dist/v-1549282893552/emojis/1f937.png similarity index 100% rename from dist/v-1547534999795/emojis/1f937.png rename to dist/v-1549282893552/emojis/1f937.png diff --git a/dist/v-1547534999795/emojis/1f938-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f938-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f938-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f938-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f938-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f938-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f938-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f938-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f938.png b/dist/v-1549282893552/emojis/1f938.png similarity index 100% rename from dist/v-1547534999795/emojis/1f938.png rename to dist/v-1549282893552/emojis/1f938.png diff --git a/dist/v-1547534999795/emojis/1f939-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f939-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f939-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f939-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f939-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f939-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f939-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f939-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f939.png b/dist/v-1549282893552/emojis/1f939.png similarity index 100% rename from dist/v-1547534999795/emojis/1f939.png rename to dist/v-1549282893552/emojis/1f939.png diff --git a/dist/v-1547534999795/emojis/1f93a.png b/dist/v-1549282893552/emojis/1f93a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93a.png rename to dist/v-1549282893552/emojis/1f93a.png diff --git a/dist/v-1547534999795/emojis/1f93c-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f93c-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93c-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f93c-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f93c-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f93c-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93c-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f93c-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f93c.png b/dist/v-1549282893552/emojis/1f93c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93c.png rename to dist/v-1549282893552/emojis/1f93c.png diff --git a/dist/v-1547534999795/emojis/1f93d-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f93d-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93d-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f93d-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f93d-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f93d-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93d-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f93d-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f93d.png b/dist/v-1549282893552/emojis/1f93d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93d.png rename to dist/v-1549282893552/emojis/1f93d.png diff --git a/dist/v-1547534999795/emojis/1f93e-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/1f93e-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93e-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/1f93e-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f93e-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/1f93e-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93e-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/1f93e-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/1f93e.png b/dist/v-1549282893552/emojis/1f93e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f93e.png rename to dist/v-1549282893552/emojis/1f93e.png diff --git a/dist/v-1547534999795/emojis/1f940.png b/dist/v-1549282893552/emojis/1f940.png similarity index 100% rename from dist/v-1547534999795/emojis/1f940.png rename to dist/v-1549282893552/emojis/1f940.png diff --git a/dist/v-1547534999795/emojis/1f941.png b/dist/v-1549282893552/emojis/1f941.png similarity index 100% rename from dist/v-1547534999795/emojis/1f941.png rename to dist/v-1549282893552/emojis/1f941.png diff --git a/dist/v-1547534999795/emojis/1f942.png b/dist/v-1549282893552/emojis/1f942.png similarity index 100% rename from dist/v-1547534999795/emojis/1f942.png rename to dist/v-1549282893552/emojis/1f942.png diff --git a/dist/v-1547534999795/emojis/1f943.png b/dist/v-1549282893552/emojis/1f943.png similarity index 100% rename from dist/v-1547534999795/emojis/1f943.png rename to dist/v-1549282893552/emojis/1f943.png diff --git a/dist/v-1547534999795/emojis/1f944.png b/dist/v-1549282893552/emojis/1f944.png similarity index 100% rename from dist/v-1547534999795/emojis/1f944.png rename to dist/v-1549282893552/emojis/1f944.png diff --git a/dist/v-1547534999795/emojis/1f945.png b/dist/v-1549282893552/emojis/1f945.png similarity index 100% rename from dist/v-1547534999795/emojis/1f945.png rename to dist/v-1549282893552/emojis/1f945.png diff --git a/dist/v-1547534999795/emojis/1f947.png b/dist/v-1549282893552/emojis/1f947.png similarity index 100% rename from dist/v-1547534999795/emojis/1f947.png rename to dist/v-1549282893552/emojis/1f947.png diff --git a/dist/v-1547534999795/emojis/1f948.png b/dist/v-1549282893552/emojis/1f948.png similarity index 100% rename from dist/v-1547534999795/emojis/1f948.png rename to dist/v-1549282893552/emojis/1f948.png diff --git a/dist/v-1547534999795/emojis/1f949.png b/dist/v-1549282893552/emojis/1f949.png similarity index 100% rename from dist/v-1547534999795/emojis/1f949.png rename to dist/v-1549282893552/emojis/1f949.png diff --git a/dist/v-1547534999795/emojis/1f94a.png b/dist/v-1549282893552/emojis/1f94a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f94a.png rename to dist/v-1549282893552/emojis/1f94a.png diff --git a/dist/v-1547534999795/emojis/1f94b.png b/dist/v-1549282893552/emojis/1f94b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f94b.png rename to dist/v-1549282893552/emojis/1f94b.png diff --git a/dist/v-1547534999795/emojis/1f950.png b/dist/v-1549282893552/emojis/1f950.png similarity index 100% rename from dist/v-1547534999795/emojis/1f950.png rename to dist/v-1549282893552/emojis/1f950.png diff --git a/dist/v-1547534999795/emojis/1f951.png b/dist/v-1549282893552/emojis/1f951.png similarity index 100% rename from dist/v-1547534999795/emojis/1f951.png rename to dist/v-1549282893552/emojis/1f951.png diff --git a/dist/v-1547534999795/emojis/1f952.png b/dist/v-1549282893552/emojis/1f952.png similarity index 100% rename from dist/v-1547534999795/emojis/1f952.png rename to dist/v-1549282893552/emojis/1f952.png diff --git a/dist/v-1547534999795/emojis/1f953.png b/dist/v-1549282893552/emojis/1f953.png similarity index 100% rename from dist/v-1547534999795/emojis/1f953.png rename to dist/v-1549282893552/emojis/1f953.png diff --git a/dist/v-1547534999795/emojis/1f954.png b/dist/v-1549282893552/emojis/1f954.png similarity index 100% rename from dist/v-1547534999795/emojis/1f954.png rename to dist/v-1549282893552/emojis/1f954.png diff --git a/dist/v-1547534999795/emojis/1f955.png b/dist/v-1549282893552/emojis/1f955.png similarity index 100% rename from dist/v-1547534999795/emojis/1f955.png rename to dist/v-1549282893552/emojis/1f955.png diff --git a/dist/v-1547534999795/emojis/1f956.png b/dist/v-1549282893552/emojis/1f956.png similarity index 100% rename from dist/v-1547534999795/emojis/1f956.png rename to dist/v-1549282893552/emojis/1f956.png diff --git a/dist/v-1547534999795/emojis/1f957.png b/dist/v-1549282893552/emojis/1f957.png similarity index 100% rename from dist/v-1547534999795/emojis/1f957.png rename to dist/v-1549282893552/emojis/1f957.png diff --git a/dist/v-1547534999795/emojis/1f958.png b/dist/v-1549282893552/emojis/1f958.png similarity index 100% rename from dist/v-1547534999795/emojis/1f958.png rename to dist/v-1549282893552/emojis/1f958.png diff --git a/dist/v-1547534999795/emojis/1f959.png b/dist/v-1549282893552/emojis/1f959.png similarity index 100% rename from dist/v-1547534999795/emojis/1f959.png rename to dist/v-1549282893552/emojis/1f959.png diff --git a/dist/v-1547534999795/emojis/1f95a.png b/dist/v-1549282893552/emojis/1f95a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f95a.png rename to dist/v-1549282893552/emojis/1f95a.png diff --git a/dist/v-1547534999795/emojis/1f95b.png b/dist/v-1549282893552/emojis/1f95b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f95b.png rename to dist/v-1549282893552/emojis/1f95b.png diff --git a/dist/v-1547534999795/emojis/1f95c.png b/dist/v-1549282893552/emojis/1f95c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f95c.png rename to dist/v-1549282893552/emojis/1f95c.png diff --git a/dist/v-1547534999795/emojis/1f95d.png b/dist/v-1549282893552/emojis/1f95d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f95d.png rename to dist/v-1549282893552/emojis/1f95d.png diff --git a/dist/v-1547534999795/emojis/1f95e.png b/dist/v-1549282893552/emojis/1f95e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f95e.png rename to dist/v-1549282893552/emojis/1f95e.png diff --git a/dist/v-1547534999795/emojis/1f980.png b/dist/v-1549282893552/emojis/1f980.png similarity index 100% rename from dist/v-1547534999795/emojis/1f980.png rename to dist/v-1549282893552/emojis/1f980.png diff --git a/dist/v-1547534999795/emojis/1f981.png b/dist/v-1549282893552/emojis/1f981.png similarity index 100% rename from dist/v-1547534999795/emojis/1f981.png rename to dist/v-1549282893552/emojis/1f981.png diff --git a/dist/v-1547534999795/emojis/1f982.png b/dist/v-1549282893552/emojis/1f982.png similarity index 100% rename from dist/v-1547534999795/emojis/1f982.png rename to dist/v-1549282893552/emojis/1f982.png diff --git a/dist/v-1547534999795/emojis/1f983.png b/dist/v-1549282893552/emojis/1f983.png similarity index 100% rename from dist/v-1547534999795/emojis/1f983.png rename to dist/v-1549282893552/emojis/1f983.png diff --git a/dist/v-1547534999795/emojis/1f984.png b/dist/v-1549282893552/emojis/1f984.png similarity index 100% rename from dist/v-1547534999795/emojis/1f984.png rename to dist/v-1549282893552/emojis/1f984.png diff --git a/dist/v-1547534999795/emojis/1f985.png b/dist/v-1549282893552/emojis/1f985.png similarity index 100% rename from dist/v-1547534999795/emojis/1f985.png rename to dist/v-1549282893552/emojis/1f985.png diff --git a/dist/v-1547534999795/emojis/1f986.png b/dist/v-1549282893552/emojis/1f986.png similarity index 100% rename from dist/v-1547534999795/emojis/1f986.png rename to dist/v-1549282893552/emojis/1f986.png diff --git a/dist/v-1547534999795/emojis/1f987.png b/dist/v-1549282893552/emojis/1f987.png similarity index 100% rename from dist/v-1547534999795/emojis/1f987.png rename to dist/v-1549282893552/emojis/1f987.png diff --git a/dist/v-1547534999795/emojis/1f988.png b/dist/v-1549282893552/emojis/1f988.png similarity index 100% rename from dist/v-1547534999795/emojis/1f988.png rename to dist/v-1549282893552/emojis/1f988.png diff --git a/dist/v-1547534999795/emojis/1f989.png b/dist/v-1549282893552/emojis/1f989.png similarity index 100% rename from dist/v-1547534999795/emojis/1f989.png rename to dist/v-1549282893552/emojis/1f989.png diff --git a/dist/v-1547534999795/emojis/1f98a.png b/dist/v-1549282893552/emojis/1f98a.png similarity index 100% rename from dist/v-1547534999795/emojis/1f98a.png rename to dist/v-1549282893552/emojis/1f98a.png diff --git a/dist/v-1547534999795/emojis/1f98b.png b/dist/v-1549282893552/emojis/1f98b.png similarity index 100% rename from dist/v-1547534999795/emojis/1f98b.png rename to dist/v-1549282893552/emojis/1f98b.png diff --git a/dist/v-1547534999795/emojis/1f98c.png b/dist/v-1549282893552/emojis/1f98c.png similarity index 100% rename from dist/v-1547534999795/emojis/1f98c.png rename to dist/v-1549282893552/emojis/1f98c.png diff --git a/dist/v-1547534999795/emojis/1f98d.png b/dist/v-1549282893552/emojis/1f98d.png similarity index 100% rename from dist/v-1547534999795/emojis/1f98d.png rename to dist/v-1549282893552/emojis/1f98d.png diff --git a/dist/v-1547534999795/emojis/1f98e.png b/dist/v-1549282893552/emojis/1f98e.png similarity index 100% rename from dist/v-1547534999795/emojis/1f98e.png rename to dist/v-1549282893552/emojis/1f98e.png diff --git a/dist/v-1547534999795/emojis/1f98f.png b/dist/v-1549282893552/emojis/1f98f.png similarity index 100% rename from dist/v-1547534999795/emojis/1f98f.png rename to dist/v-1549282893552/emojis/1f98f.png diff --git a/dist/v-1547534999795/emojis/1f990.png b/dist/v-1549282893552/emojis/1f990.png similarity index 100% rename from dist/v-1547534999795/emojis/1f990.png rename to dist/v-1549282893552/emojis/1f990.png diff --git a/dist/v-1547534999795/emojis/1f991.png b/dist/v-1549282893552/emojis/1f991.png similarity index 100% rename from dist/v-1547534999795/emojis/1f991.png rename to dist/v-1549282893552/emojis/1f991.png diff --git a/dist/v-1547534999795/emojis/1f9c0.png b/dist/v-1549282893552/emojis/1f9c0.png similarity index 100% rename from dist/v-1547534999795/emojis/1f9c0.png rename to dist/v-1549282893552/emojis/1f9c0.png diff --git a/dist/v-1547534999795/emojis/203c.png b/dist/v-1549282893552/emojis/203c.png similarity index 100% rename from dist/v-1547534999795/emojis/203c.png rename to dist/v-1549282893552/emojis/203c.png diff --git a/dist/v-1547534999795/emojis/2049.png b/dist/v-1549282893552/emojis/2049.png similarity index 100% rename from dist/v-1547534999795/emojis/2049.png rename to dist/v-1549282893552/emojis/2049.png diff --git a/dist/v-1547534999795/emojis/2122.png b/dist/v-1549282893552/emojis/2122.png similarity index 100% rename from dist/v-1547534999795/emojis/2122.png rename to dist/v-1549282893552/emojis/2122.png diff --git a/dist/v-1547534999795/emojis/2139.png b/dist/v-1549282893552/emojis/2139.png similarity index 100% rename from dist/v-1547534999795/emojis/2139.png rename to dist/v-1549282893552/emojis/2139.png diff --git a/dist/v-1547534999795/emojis/2194.png b/dist/v-1549282893552/emojis/2194.png similarity index 100% rename from dist/v-1547534999795/emojis/2194.png rename to dist/v-1549282893552/emojis/2194.png diff --git a/dist/v-1547534999795/emojis/2195.png b/dist/v-1549282893552/emojis/2195.png similarity index 100% rename from dist/v-1547534999795/emojis/2195.png rename to dist/v-1549282893552/emojis/2195.png diff --git a/dist/v-1547534999795/emojis/2196.png b/dist/v-1549282893552/emojis/2196.png similarity index 100% rename from dist/v-1547534999795/emojis/2196.png rename to dist/v-1549282893552/emojis/2196.png diff --git a/dist/v-1547534999795/emojis/2197.png b/dist/v-1549282893552/emojis/2197.png similarity index 100% rename from dist/v-1547534999795/emojis/2197.png rename to dist/v-1549282893552/emojis/2197.png diff --git a/dist/v-1547534999795/emojis/2198.png b/dist/v-1549282893552/emojis/2198.png similarity index 100% rename from dist/v-1547534999795/emojis/2198.png rename to dist/v-1549282893552/emojis/2198.png diff --git a/dist/v-1547534999795/emojis/2199.png b/dist/v-1549282893552/emojis/2199.png similarity index 100% rename from dist/v-1547534999795/emojis/2199.png rename to dist/v-1549282893552/emojis/2199.png diff --git a/dist/v-1547534999795/emojis/21a9.png b/dist/v-1549282893552/emojis/21a9.png similarity index 100% rename from dist/v-1547534999795/emojis/21a9.png rename to dist/v-1549282893552/emojis/21a9.png diff --git a/dist/v-1547534999795/emojis/21aa.png b/dist/v-1549282893552/emojis/21aa.png similarity index 100% rename from dist/v-1547534999795/emojis/21aa.png rename to dist/v-1549282893552/emojis/21aa.png diff --git a/dist/v-1547534999795/emojis/231a.png b/dist/v-1549282893552/emojis/231a.png similarity index 100% rename from dist/v-1547534999795/emojis/231a.png rename to dist/v-1549282893552/emojis/231a.png diff --git a/dist/v-1547534999795/emojis/231b.png b/dist/v-1549282893552/emojis/231b.png similarity index 100% rename from dist/v-1547534999795/emojis/231b.png rename to dist/v-1549282893552/emojis/231b.png diff --git a/dist/v-1547534999795/emojis/2328.png b/dist/v-1549282893552/emojis/2328.png similarity index 100% rename from dist/v-1547534999795/emojis/2328.png rename to dist/v-1549282893552/emojis/2328.png diff --git a/dist/v-1547534999795/emojis/23cf.png b/dist/v-1549282893552/emojis/23cf.png similarity index 100% rename from dist/v-1547534999795/emojis/23cf.png rename to dist/v-1549282893552/emojis/23cf.png diff --git a/dist/v-1547534999795/emojis/23e9.png b/dist/v-1549282893552/emojis/23e9.png similarity index 100% rename from dist/v-1547534999795/emojis/23e9.png rename to dist/v-1549282893552/emojis/23e9.png diff --git a/dist/v-1547534999795/emojis/23ea.png b/dist/v-1549282893552/emojis/23ea.png similarity index 100% rename from dist/v-1547534999795/emojis/23ea.png rename to dist/v-1549282893552/emojis/23ea.png diff --git a/dist/v-1547534999795/emojis/23eb.png b/dist/v-1549282893552/emojis/23eb.png similarity index 100% rename from dist/v-1547534999795/emojis/23eb.png rename to dist/v-1549282893552/emojis/23eb.png diff --git a/dist/v-1547534999795/emojis/23ec.png b/dist/v-1549282893552/emojis/23ec.png similarity index 100% rename from dist/v-1547534999795/emojis/23ec.png rename to dist/v-1549282893552/emojis/23ec.png diff --git a/dist/v-1547534999795/emojis/23ed.png b/dist/v-1549282893552/emojis/23ed.png similarity index 100% rename from dist/v-1547534999795/emojis/23ed.png rename to dist/v-1549282893552/emojis/23ed.png diff --git a/dist/v-1547534999795/emojis/23ee.png b/dist/v-1549282893552/emojis/23ee.png similarity index 100% rename from dist/v-1547534999795/emojis/23ee.png rename to dist/v-1549282893552/emojis/23ee.png diff --git a/dist/v-1547534999795/emojis/23ef.png b/dist/v-1549282893552/emojis/23ef.png similarity index 100% rename from dist/v-1547534999795/emojis/23ef.png rename to dist/v-1549282893552/emojis/23ef.png diff --git a/dist/v-1547534999795/emojis/23f0.png b/dist/v-1549282893552/emojis/23f0.png similarity index 100% rename from dist/v-1547534999795/emojis/23f0.png rename to dist/v-1549282893552/emojis/23f0.png diff --git a/dist/v-1547534999795/emojis/23f1.png b/dist/v-1549282893552/emojis/23f1.png similarity index 100% rename from dist/v-1547534999795/emojis/23f1.png rename to dist/v-1549282893552/emojis/23f1.png diff --git a/dist/v-1547534999795/emojis/23f2.png b/dist/v-1549282893552/emojis/23f2.png similarity index 100% rename from dist/v-1547534999795/emojis/23f2.png rename to dist/v-1549282893552/emojis/23f2.png diff --git a/dist/v-1547534999795/emojis/23f3.png b/dist/v-1549282893552/emojis/23f3.png similarity index 100% rename from dist/v-1547534999795/emojis/23f3.png rename to dist/v-1549282893552/emojis/23f3.png diff --git a/dist/v-1547534999795/emojis/23f8.png b/dist/v-1549282893552/emojis/23f8.png similarity index 100% rename from dist/v-1547534999795/emojis/23f8.png rename to dist/v-1549282893552/emojis/23f8.png diff --git a/dist/v-1547534999795/emojis/23f9.png b/dist/v-1549282893552/emojis/23f9.png similarity index 100% rename from dist/v-1547534999795/emojis/23f9.png rename to dist/v-1549282893552/emojis/23f9.png diff --git a/dist/v-1547534999795/emojis/23fa.png b/dist/v-1549282893552/emojis/23fa.png similarity index 100% rename from dist/v-1547534999795/emojis/23fa.png rename to dist/v-1549282893552/emojis/23fa.png diff --git a/dist/v-1547534999795/emojis/24c2.png b/dist/v-1549282893552/emojis/24c2.png similarity index 100% rename from dist/v-1547534999795/emojis/24c2.png rename to dist/v-1549282893552/emojis/24c2.png diff --git a/dist/v-1547534999795/emojis/25aa.png b/dist/v-1549282893552/emojis/25aa.png similarity index 100% rename from dist/v-1547534999795/emojis/25aa.png rename to dist/v-1549282893552/emojis/25aa.png diff --git a/dist/v-1547534999795/emojis/25ab.png b/dist/v-1549282893552/emojis/25ab.png similarity index 100% rename from dist/v-1547534999795/emojis/25ab.png rename to dist/v-1549282893552/emojis/25ab.png diff --git a/dist/v-1547534999795/emojis/25b6.png b/dist/v-1549282893552/emojis/25b6.png similarity index 100% rename from dist/v-1547534999795/emojis/25b6.png rename to dist/v-1549282893552/emojis/25b6.png diff --git a/dist/v-1547534999795/emojis/25c0.png b/dist/v-1549282893552/emojis/25c0.png similarity index 100% rename from dist/v-1547534999795/emojis/25c0.png rename to dist/v-1549282893552/emojis/25c0.png diff --git a/dist/v-1547534999795/emojis/25fb.png b/dist/v-1549282893552/emojis/25fb.png similarity index 100% rename from dist/v-1547534999795/emojis/25fb.png rename to dist/v-1549282893552/emojis/25fb.png diff --git a/dist/v-1547534999795/emojis/25fc.png b/dist/v-1549282893552/emojis/25fc.png similarity index 100% rename from dist/v-1547534999795/emojis/25fc.png rename to dist/v-1549282893552/emojis/25fc.png diff --git a/dist/v-1547534999795/emojis/25fd.png b/dist/v-1549282893552/emojis/25fd.png similarity index 100% rename from dist/v-1547534999795/emojis/25fd.png rename to dist/v-1549282893552/emojis/25fd.png diff --git a/dist/v-1547534999795/emojis/25fe.png b/dist/v-1549282893552/emojis/25fe.png similarity index 100% rename from dist/v-1547534999795/emojis/25fe.png rename to dist/v-1549282893552/emojis/25fe.png diff --git a/dist/v-1547534999795/emojis/2600.png b/dist/v-1549282893552/emojis/2600.png similarity index 100% rename from dist/v-1547534999795/emojis/2600.png rename to dist/v-1549282893552/emojis/2600.png diff --git a/dist/v-1547534999795/emojis/2601.png b/dist/v-1549282893552/emojis/2601.png similarity index 100% rename from dist/v-1547534999795/emojis/2601.png rename to dist/v-1549282893552/emojis/2601.png diff --git a/dist/v-1547534999795/emojis/2602.png b/dist/v-1549282893552/emojis/2602.png similarity index 100% rename from dist/v-1547534999795/emojis/2602.png rename to dist/v-1549282893552/emojis/2602.png diff --git a/dist/v-1547534999795/emojis/2603.png b/dist/v-1549282893552/emojis/2603.png similarity index 100% rename from dist/v-1547534999795/emojis/2603.png rename to dist/v-1549282893552/emojis/2603.png diff --git a/dist/v-1547534999795/emojis/2604.png b/dist/v-1549282893552/emojis/2604.png similarity index 100% rename from dist/v-1547534999795/emojis/2604.png rename to dist/v-1549282893552/emojis/2604.png diff --git a/dist/v-1547534999795/emojis/260e.png b/dist/v-1549282893552/emojis/260e.png similarity index 100% rename from dist/v-1547534999795/emojis/260e.png rename to dist/v-1549282893552/emojis/260e.png diff --git a/dist/v-1547534999795/emojis/2611.png b/dist/v-1549282893552/emojis/2611.png similarity index 100% rename from dist/v-1547534999795/emojis/2611.png rename to dist/v-1549282893552/emojis/2611.png diff --git a/dist/v-1547534999795/emojis/2614.png b/dist/v-1549282893552/emojis/2614.png similarity index 100% rename from dist/v-1547534999795/emojis/2614.png rename to dist/v-1549282893552/emojis/2614.png diff --git a/dist/v-1547534999795/emojis/2615.png b/dist/v-1549282893552/emojis/2615.png similarity index 100% rename from dist/v-1547534999795/emojis/2615.png rename to dist/v-1549282893552/emojis/2615.png diff --git a/dist/v-1547534999795/emojis/2618.png b/dist/v-1549282893552/emojis/2618.png similarity index 100% rename from dist/v-1547534999795/emojis/2618.png rename to dist/v-1549282893552/emojis/2618.png diff --git a/dist/v-1547534999795/emojis/261d.png b/dist/v-1549282893552/emojis/261d.png similarity index 100% rename from dist/v-1547534999795/emojis/261d.png rename to dist/v-1549282893552/emojis/261d.png diff --git a/dist/v-1547534999795/emojis/2620.png b/dist/v-1549282893552/emojis/2620.png similarity index 100% rename from dist/v-1547534999795/emojis/2620.png rename to dist/v-1549282893552/emojis/2620.png diff --git a/dist/v-1547534999795/emojis/2622.png b/dist/v-1549282893552/emojis/2622.png similarity index 100% rename from dist/v-1547534999795/emojis/2622.png rename to dist/v-1549282893552/emojis/2622.png diff --git a/dist/v-1547534999795/emojis/2623.png b/dist/v-1549282893552/emojis/2623.png similarity index 100% rename from dist/v-1547534999795/emojis/2623.png rename to dist/v-1549282893552/emojis/2623.png diff --git a/dist/v-1547534999795/emojis/2626.png b/dist/v-1549282893552/emojis/2626.png similarity index 100% rename from dist/v-1547534999795/emojis/2626.png rename to dist/v-1549282893552/emojis/2626.png diff --git a/dist/v-1547534999795/emojis/262a.png b/dist/v-1549282893552/emojis/262a.png similarity index 100% rename from dist/v-1547534999795/emojis/262a.png rename to dist/v-1549282893552/emojis/262a.png diff --git a/dist/v-1547534999795/emojis/262e.png b/dist/v-1549282893552/emojis/262e.png similarity index 100% rename from dist/v-1547534999795/emojis/262e.png rename to dist/v-1549282893552/emojis/262e.png diff --git a/dist/v-1547534999795/emojis/262f.png b/dist/v-1549282893552/emojis/262f.png similarity index 100% rename from dist/v-1547534999795/emojis/262f.png rename to dist/v-1549282893552/emojis/262f.png diff --git a/dist/v-1547534999795/emojis/2638.png b/dist/v-1549282893552/emojis/2638.png similarity index 100% rename from dist/v-1547534999795/emojis/2638.png rename to dist/v-1549282893552/emojis/2638.png diff --git a/dist/v-1547534999795/emojis/2639.png b/dist/v-1549282893552/emojis/2639.png similarity index 100% rename from dist/v-1547534999795/emojis/2639.png rename to dist/v-1549282893552/emojis/2639.png diff --git a/dist/v-1547534999795/emojis/263a.png b/dist/v-1549282893552/emojis/263a.png similarity index 100% rename from dist/v-1547534999795/emojis/263a.png rename to dist/v-1549282893552/emojis/263a.png diff --git a/dist/v-1547534999795/emojis/2640.png b/dist/v-1549282893552/emojis/2640.png similarity index 100% rename from dist/v-1547534999795/emojis/2640.png rename to dist/v-1549282893552/emojis/2640.png diff --git a/dist/v-1547534999795/emojis/2642.png b/dist/v-1549282893552/emojis/2642.png similarity index 100% rename from dist/v-1547534999795/emojis/2642.png rename to dist/v-1549282893552/emojis/2642.png diff --git a/dist/v-1547534999795/emojis/2648.png b/dist/v-1549282893552/emojis/2648.png similarity index 100% rename from dist/v-1547534999795/emojis/2648.png rename to dist/v-1549282893552/emojis/2648.png diff --git a/dist/v-1547534999795/emojis/2649.png b/dist/v-1549282893552/emojis/2649.png similarity index 100% rename from dist/v-1547534999795/emojis/2649.png rename to dist/v-1549282893552/emojis/2649.png diff --git a/dist/v-1547534999795/emojis/264a.png b/dist/v-1549282893552/emojis/264a.png similarity index 100% rename from dist/v-1547534999795/emojis/264a.png rename to dist/v-1549282893552/emojis/264a.png diff --git a/dist/v-1547534999795/emojis/264b.png b/dist/v-1549282893552/emojis/264b.png similarity index 100% rename from dist/v-1547534999795/emojis/264b.png rename to dist/v-1549282893552/emojis/264b.png diff --git a/dist/v-1547534999795/emojis/264c.png b/dist/v-1549282893552/emojis/264c.png similarity index 100% rename from dist/v-1547534999795/emojis/264c.png rename to dist/v-1549282893552/emojis/264c.png diff --git a/dist/v-1547534999795/emojis/264d.png b/dist/v-1549282893552/emojis/264d.png similarity index 100% rename from dist/v-1547534999795/emojis/264d.png rename to dist/v-1549282893552/emojis/264d.png diff --git a/dist/v-1547534999795/emojis/264e.png b/dist/v-1549282893552/emojis/264e.png similarity index 100% rename from dist/v-1547534999795/emojis/264e.png rename to dist/v-1549282893552/emojis/264e.png diff --git a/dist/v-1547534999795/emojis/264f.png b/dist/v-1549282893552/emojis/264f.png similarity index 100% rename from dist/v-1547534999795/emojis/264f.png rename to dist/v-1549282893552/emojis/264f.png diff --git a/dist/v-1547534999795/emojis/2650.png b/dist/v-1549282893552/emojis/2650.png similarity index 100% rename from dist/v-1547534999795/emojis/2650.png rename to dist/v-1549282893552/emojis/2650.png diff --git a/dist/v-1547534999795/emojis/2651.png b/dist/v-1549282893552/emojis/2651.png similarity index 100% rename from dist/v-1547534999795/emojis/2651.png rename to dist/v-1549282893552/emojis/2651.png diff --git a/dist/v-1547534999795/emojis/2652.png b/dist/v-1549282893552/emojis/2652.png similarity index 100% rename from dist/v-1547534999795/emojis/2652.png rename to dist/v-1549282893552/emojis/2652.png diff --git a/dist/v-1547534999795/emojis/2653.png b/dist/v-1549282893552/emojis/2653.png similarity index 100% rename from dist/v-1547534999795/emojis/2653.png rename to dist/v-1549282893552/emojis/2653.png diff --git a/dist/v-1547534999795/emojis/2660.png b/dist/v-1549282893552/emojis/2660.png similarity index 100% rename from dist/v-1547534999795/emojis/2660.png rename to dist/v-1549282893552/emojis/2660.png diff --git a/dist/v-1547534999795/emojis/2663.png b/dist/v-1549282893552/emojis/2663.png similarity index 100% rename from dist/v-1547534999795/emojis/2663.png rename to dist/v-1549282893552/emojis/2663.png diff --git a/dist/v-1547534999795/emojis/2665.png b/dist/v-1549282893552/emojis/2665.png similarity index 100% rename from dist/v-1547534999795/emojis/2665.png rename to dist/v-1549282893552/emojis/2665.png diff --git a/dist/v-1547534999795/emojis/2666.png b/dist/v-1549282893552/emojis/2666.png similarity index 100% rename from dist/v-1547534999795/emojis/2666.png rename to dist/v-1549282893552/emojis/2666.png diff --git a/dist/v-1547534999795/emojis/2668.png b/dist/v-1549282893552/emojis/2668.png similarity index 100% rename from dist/v-1547534999795/emojis/2668.png rename to dist/v-1549282893552/emojis/2668.png diff --git a/dist/v-1547534999795/emojis/267b.png b/dist/v-1549282893552/emojis/267b.png similarity index 100% rename from dist/v-1547534999795/emojis/267b.png rename to dist/v-1549282893552/emojis/267b.png diff --git a/dist/v-1547534999795/emojis/267f.png b/dist/v-1549282893552/emojis/267f.png similarity index 100% rename from dist/v-1547534999795/emojis/267f.png rename to dist/v-1549282893552/emojis/267f.png diff --git a/dist/v-1547534999795/emojis/2692.png b/dist/v-1549282893552/emojis/2692.png similarity index 100% rename from dist/v-1547534999795/emojis/2692.png rename to dist/v-1549282893552/emojis/2692.png diff --git a/dist/v-1547534999795/emojis/2693.png b/dist/v-1549282893552/emojis/2693.png similarity index 100% rename from dist/v-1547534999795/emojis/2693.png rename to dist/v-1549282893552/emojis/2693.png diff --git a/dist/v-1547534999795/emojis/2694.png b/dist/v-1549282893552/emojis/2694.png similarity index 100% rename from dist/v-1547534999795/emojis/2694.png rename to dist/v-1549282893552/emojis/2694.png diff --git a/dist/v-1547534999795/emojis/2695.png b/dist/v-1549282893552/emojis/2695.png similarity index 100% rename from dist/v-1547534999795/emojis/2695.png rename to dist/v-1549282893552/emojis/2695.png diff --git a/dist/v-1547534999795/emojis/2696.png b/dist/v-1549282893552/emojis/2696.png similarity index 100% rename from dist/v-1547534999795/emojis/2696.png rename to dist/v-1549282893552/emojis/2696.png diff --git a/dist/v-1547534999795/emojis/2697.png b/dist/v-1549282893552/emojis/2697.png similarity index 100% rename from dist/v-1547534999795/emojis/2697.png rename to dist/v-1549282893552/emojis/2697.png diff --git a/dist/v-1547534999795/emojis/2699.png b/dist/v-1549282893552/emojis/2699.png similarity index 100% rename from dist/v-1547534999795/emojis/2699.png rename to dist/v-1549282893552/emojis/2699.png diff --git a/dist/v-1547534999795/emojis/269b.png b/dist/v-1549282893552/emojis/269b.png similarity index 100% rename from dist/v-1547534999795/emojis/269b.png rename to dist/v-1549282893552/emojis/269b.png diff --git a/dist/v-1547534999795/emojis/269c.png b/dist/v-1549282893552/emojis/269c.png similarity index 100% rename from dist/v-1547534999795/emojis/269c.png rename to dist/v-1549282893552/emojis/269c.png diff --git a/dist/v-1547534999795/emojis/26a0.png b/dist/v-1549282893552/emojis/26a0.png similarity index 100% rename from dist/v-1547534999795/emojis/26a0.png rename to dist/v-1549282893552/emojis/26a0.png diff --git a/dist/v-1547534999795/emojis/26a1.png b/dist/v-1549282893552/emojis/26a1.png similarity index 100% rename from dist/v-1547534999795/emojis/26a1.png rename to dist/v-1549282893552/emojis/26a1.png diff --git a/dist/v-1547534999795/emojis/26aa.png b/dist/v-1549282893552/emojis/26aa.png similarity index 100% rename from dist/v-1547534999795/emojis/26aa.png rename to dist/v-1549282893552/emojis/26aa.png diff --git a/dist/v-1547534999795/emojis/26ab.png b/dist/v-1549282893552/emojis/26ab.png similarity index 100% rename from dist/v-1547534999795/emojis/26ab.png rename to dist/v-1549282893552/emojis/26ab.png diff --git a/dist/v-1547534999795/emojis/26b0.png b/dist/v-1549282893552/emojis/26b0.png similarity index 100% rename from dist/v-1547534999795/emojis/26b0.png rename to dist/v-1549282893552/emojis/26b0.png diff --git a/dist/v-1547534999795/emojis/26b1.png b/dist/v-1549282893552/emojis/26b1.png similarity index 100% rename from dist/v-1547534999795/emojis/26b1.png rename to dist/v-1549282893552/emojis/26b1.png diff --git a/dist/v-1547534999795/emojis/26bd.png b/dist/v-1549282893552/emojis/26bd.png similarity index 100% rename from dist/v-1547534999795/emojis/26bd.png rename to dist/v-1549282893552/emojis/26bd.png diff --git a/dist/v-1547534999795/emojis/26be.png b/dist/v-1549282893552/emojis/26be.png similarity index 100% rename from dist/v-1547534999795/emojis/26be.png rename to dist/v-1549282893552/emojis/26be.png diff --git a/dist/v-1547534999795/emojis/26c4.png b/dist/v-1549282893552/emojis/26c4.png similarity index 100% rename from dist/v-1547534999795/emojis/26c4.png rename to dist/v-1549282893552/emojis/26c4.png diff --git a/dist/v-1547534999795/emojis/26c5.png b/dist/v-1549282893552/emojis/26c5.png similarity index 100% rename from dist/v-1547534999795/emojis/26c5.png rename to dist/v-1549282893552/emojis/26c5.png diff --git a/dist/v-1547534999795/emojis/26c8.png b/dist/v-1549282893552/emojis/26c8.png similarity index 100% rename from dist/v-1547534999795/emojis/26c8.png rename to dist/v-1549282893552/emojis/26c8.png diff --git a/dist/v-1547534999795/emojis/26ce.png b/dist/v-1549282893552/emojis/26ce.png similarity index 100% rename from dist/v-1547534999795/emojis/26ce.png rename to dist/v-1549282893552/emojis/26ce.png diff --git a/dist/v-1547534999795/emojis/26cf.png b/dist/v-1549282893552/emojis/26cf.png similarity index 100% rename from dist/v-1547534999795/emojis/26cf.png rename to dist/v-1549282893552/emojis/26cf.png diff --git a/dist/v-1547534999795/emojis/26d1.png b/dist/v-1549282893552/emojis/26d1.png similarity index 100% rename from dist/v-1547534999795/emojis/26d1.png rename to dist/v-1549282893552/emojis/26d1.png diff --git a/dist/v-1547534999795/emojis/26d3.png b/dist/v-1549282893552/emojis/26d3.png similarity index 100% rename from dist/v-1547534999795/emojis/26d3.png rename to dist/v-1549282893552/emojis/26d3.png diff --git a/dist/v-1547534999795/emojis/26d4.png b/dist/v-1549282893552/emojis/26d4.png similarity index 100% rename from dist/v-1547534999795/emojis/26d4.png rename to dist/v-1549282893552/emojis/26d4.png diff --git a/dist/v-1547534999795/emojis/26e9.png b/dist/v-1549282893552/emojis/26e9.png similarity index 100% rename from dist/v-1547534999795/emojis/26e9.png rename to dist/v-1549282893552/emojis/26e9.png diff --git a/dist/v-1547534999795/emojis/26ea.png b/dist/v-1549282893552/emojis/26ea.png similarity index 100% rename from dist/v-1547534999795/emojis/26ea.png rename to dist/v-1549282893552/emojis/26ea.png diff --git a/dist/v-1547534999795/emojis/26f0.png b/dist/v-1549282893552/emojis/26f0.png similarity index 100% rename from dist/v-1547534999795/emojis/26f0.png rename to dist/v-1549282893552/emojis/26f0.png diff --git a/dist/v-1547534999795/emojis/26f1.png b/dist/v-1549282893552/emojis/26f1.png similarity index 100% rename from dist/v-1547534999795/emojis/26f1.png rename to dist/v-1549282893552/emojis/26f1.png diff --git a/dist/v-1547534999795/emojis/26f2.png b/dist/v-1549282893552/emojis/26f2.png similarity index 100% rename from dist/v-1547534999795/emojis/26f2.png rename to dist/v-1549282893552/emojis/26f2.png diff --git a/dist/v-1547534999795/emojis/26f3.png b/dist/v-1549282893552/emojis/26f3.png similarity index 100% rename from dist/v-1547534999795/emojis/26f3.png rename to dist/v-1549282893552/emojis/26f3.png diff --git a/dist/v-1547534999795/emojis/26f4.png b/dist/v-1549282893552/emojis/26f4.png similarity index 100% rename from dist/v-1547534999795/emojis/26f4.png rename to dist/v-1549282893552/emojis/26f4.png diff --git a/dist/v-1547534999795/emojis/26f5.png b/dist/v-1549282893552/emojis/26f5.png similarity index 100% rename from dist/v-1547534999795/emojis/26f5.png rename to dist/v-1549282893552/emojis/26f5.png diff --git a/dist/v-1547534999795/emojis/26f7.png b/dist/v-1549282893552/emojis/26f7.png similarity index 100% rename from dist/v-1547534999795/emojis/26f7.png rename to dist/v-1549282893552/emojis/26f7.png diff --git a/dist/v-1547534999795/emojis/26f8.png b/dist/v-1549282893552/emojis/26f8.png similarity index 100% rename from dist/v-1547534999795/emojis/26f8.png rename to dist/v-1549282893552/emojis/26f8.png diff --git a/dist/v-1547534999795/emojis/26f9-fe0f-200d-2640-fe0f.png b/dist/v-1549282893552/emojis/26f9-fe0f-200d-2640-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/26f9-fe0f-200d-2640-fe0f.png rename to dist/v-1549282893552/emojis/26f9-fe0f-200d-2640-fe0f.png diff --git a/dist/v-1547534999795/emojis/26f9-fe0f-200d-2642-fe0f.png b/dist/v-1549282893552/emojis/26f9-fe0f-200d-2642-fe0f.png similarity index 100% rename from dist/v-1547534999795/emojis/26f9-fe0f-200d-2642-fe0f.png rename to dist/v-1549282893552/emojis/26f9-fe0f-200d-2642-fe0f.png diff --git a/dist/v-1547534999795/emojis/26f9.png b/dist/v-1549282893552/emojis/26f9.png similarity index 100% rename from dist/v-1547534999795/emojis/26f9.png rename to dist/v-1549282893552/emojis/26f9.png diff --git a/dist/v-1547534999795/emojis/26fa.png b/dist/v-1549282893552/emojis/26fa.png similarity index 100% rename from dist/v-1547534999795/emojis/26fa.png rename to dist/v-1549282893552/emojis/26fa.png diff --git a/dist/v-1547534999795/emojis/26fd.png b/dist/v-1549282893552/emojis/26fd.png similarity index 100% rename from dist/v-1547534999795/emojis/26fd.png rename to dist/v-1549282893552/emojis/26fd.png diff --git a/dist/v-1547534999795/emojis/2702.png b/dist/v-1549282893552/emojis/2702.png similarity index 100% rename from dist/v-1547534999795/emojis/2702.png rename to dist/v-1549282893552/emojis/2702.png diff --git a/dist/v-1547534999795/emojis/2705.png b/dist/v-1549282893552/emojis/2705.png similarity index 100% rename from dist/v-1547534999795/emojis/2705.png rename to dist/v-1549282893552/emojis/2705.png diff --git a/dist/v-1547534999795/emojis/2708.png b/dist/v-1549282893552/emojis/2708.png similarity index 100% rename from dist/v-1547534999795/emojis/2708.png rename to dist/v-1549282893552/emojis/2708.png diff --git a/dist/v-1547534999795/emojis/2709.png b/dist/v-1549282893552/emojis/2709.png similarity index 100% rename from dist/v-1547534999795/emojis/2709.png rename to dist/v-1549282893552/emojis/2709.png diff --git a/dist/v-1547534999795/emojis/270a.png b/dist/v-1549282893552/emojis/270a.png similarity index 100% rename from dist/v-1547534999795/emojis/270a.png rename to dist/v-1549282893552/emojis/270a.png diff --git a/dist/v-1547534999795/emojis/270b.png b/dist/v-1549282893552/emojis/270b.png similarity index 100% rename from dist/v-1547534999795/emojis/270b.png rename to dist/v-1549282893552/emojis/270b.png diff --git a/dist/v-1547534999795/emojis/270c.png b/dist/v-1549282893552/emojis/270c.png similarity index 100% rename from dist/v-1547534999795/emojis/270c.png rename to dist/v-1549282893552/emojis/270c.png diff --git a/dist/v-1547534999795/emojis/270d.png b/dist/v-1549282893552/emojis/270d.png similarity index 100% rename from dist/v-1547534999795/emojis/270d.png rename to dist/v-1549282893552/emojis/270d.png diff --git a/dist/v-1547534999795/emojis/270f.png b/dist/v-1549282893552/emojis/270f.png similarity index 100% rename from dist/v-1547534999795/emojis/270f.png rename to dist/v-1549282893552/emojis/270f.png diff --git a/dist/v-1547534999795/emojis/2712.png b/dist/v-1549282893552/emojis/2712.png similarity index 100% rename from dist/v-1547534999795/emojis/2712.png rename to dist/v-1549282893552/emojis/2712.png diff --git a/dist/v-1547534999795/emojis/2714.png b/dist/v-1549282893552/emojis/2714.png similarity index 100% rename from dist/v-1547534999795/emojis/2714.png rename to dist/v-1549282893552/emojis/2714.png diff --git a/dist/v-1547534999795/emojis/2716.png b/dist/v-1549282893552/emojis/2716.png similarity index 100% rename from dist/v-1547534999795/emojis/2716.png rename to dist/v-1549282893552/emojis/2716.png diff --git a/dist/v-1547534999795/emojis/271d.png b/dist/v-1549282893552/emojis/271d.png similarity index 100% rename from dist/v-1547534999795/emojis/271d.png rename to dist/v-1549282893552/emojis/271d.png diff --git a/dist/v-1547534999795/emojis/2721.png b/dist/v-1549282893552/emojis/2721.png similarity index 100% rename from dist/v-1547534999795/emojis/2721.png rename to dist/v-1549282893552/emojis/2721.png diff --git a/dist/v-1547534999795/emojis/2728.png b/dist/v-1549282893552/emojis/2728.png similarity index 100% rename from dist/v-1547534999795/emojis/2728.png rename to dist/v-1549282893552/emojis/2728.png diff --git a/dist/v-1547534999795/emojis/2733.png b/dist/v-1549282893552/emojis/2733.png similarity index 100% rename from dist/v-1547534999795/emojis/2733.png rename to dist/v-1549282893552/emojis/2733.png diff --git a/dist/v-1547534999795/emojis/2734.png b/dist/v-1549282893552/emojis/2734.png similarity index 100% rename from dist/v-1547534999795/emojis/2734.png rename to dist/v-1549282893552/emojis/2734.png diff --git a/dist/v-1547534999795/emojis/2744.png b/dist/v-1549282893552/emojis/2744.png similarity index 100% rename from dist/v-1547534999795/emojis/2744.png rename to dist/v-1549282893552/emojis/2744.png diff --git a/dist/v-1547534999795/emojis/2747.png b/dist/v-1549282893552/emojis/2747.png similarity index 100% rename from dist/v-1547534999795/emojis/2747.png rename to dist/v-1549282893552/emojis/2747.png diff --git a/dist/v-1547534999795/emojis/274c.png b/dist/v-1549282893552/emojis/274c.png similarity index 100% rename from dist/v-1547534999795/emojis/274c.png rename to dist/v-1549282893552/emojis/274c.png diff --git a/dist/v-1547534999795/emojis/274e.png b/dist/v-1549282893552/emojis/274e.png similarity index 100% rename from dist/v-1547534999795/emojis/274e.png rename to dist/v-1549282893552/emojis/274e.png diff --git a/dist/v-1547534999795/emojis/2753.png b/dist/v-1549282893552/emojis/2753.png similarity index 100% rename from dist/v-1547534999795/emojis/2753.png rename to dist/v-1549282893552/emojis/2753.png diff --git a/dist/v-1547534999795/emojis/2754.png b/dist/v-1549282893552/emojis/2754.png similarity index 100% rename from dist/v-1547534999795/emojis/2754.png rename to dist/v-1549282893552/emojis/2754.png diff --git a/dist/v-1547534999795/emojis/2755.png b/dist/v-1549282893552/emojis/2755.png similarity index 100% rename from dist/v-1547534999795/emojis/2755.png rename to dist/v-1549282893552/emojis/2755.png diff --git a/dist/v-1547534999795/emojis/2757.png b/dist/v-1549282893552/emojis/2757.png similarity index 100% rename from dist/v-1547534999795/emojis/2757.png rename to dist/v-1549282893552/emojis/2757.png diff --git a/dist/v-1547534999795/emojis/2763.png b/dist/v-1549282893552/emojis/2763.png similarity index 100% rename from dist/v-1547534999795/emojis/2763.png rename to dist/v-1549282893552/emojis/2763.png diff --git a/dist/v-1547534999795/emojis/2764.png b/dist/v-1549282893552/emojis/2764.png similarity index 100% rename from dist/v-1547534999795/emojis/2764.png rename to dist/v-1549282893552/emojis/2764.png diff --git a/dist/v-1547534999795/emojis/2795.png b/dist/v-1549282893552/emojis/2795.png similarity index 100% rename from dist/v-1547534999795/emojis/2795.png rename to dist/v-1549282893552/emojis/2795.png diff --git a/dist/v-1547534999795/emojis/2796.png b/dist/v-1549282893552/emojis/2796.png similarity index 100% rename from dist/v-1547534999795/emojis/2796.png rename to dist/v-1549282893552/emojis/2796.png diff --git a/dist/v-1547534999795/emojis/2797.png b/dist/v-1549282893552/emojis/2797.png similarity index 100% rename from dist/v-1547534999795/emojis/2797.png rename to dist/v-1549282893552/emojis/2797.png diff --git a/dist/v-1547534999795/emojis/27a1.png b/dist/v-1549282893552/emojis/27a1.png similarity index 100% rename from dist/v-1547534999795/emojis/27a1.png rename to dist/v-1549282893552/emojis/27a1.png diff --git a/dist/v-1547534999795/emojis/27b0.png b/dist/v-1549282893552/emojis/27b0.png similarity index 100% rename from dist/v-1547534999795/emojis/27b0.png rename to dist/v-1549282893552/emojis/27b0.png diff --git a/dist/v-1547534999795/emojis/27bf.png b/dist/v-1549282893552/emojis/27bf.png similarity index 100% rename from dist/v-1547534999795/emojis/27bf.png rename to dist/v-1549282893552/emojis/27bf.png diff --git a/dist/v-1547534999795/emojis/2934.png b/dist/v-1549282893552/emojis/2934.png similarity index 100% rename from dist/v-1547534999795/emojis/2934.png rename to dist/v-1549282893552/emojis/2934.png diff --git a/dist/v-1547534999795/emojis/2935.png b/dist/v-1549282893552/emojis/2935.png similarity index 100% rename from dist/v-1547534999795/emojis/2935.png rename to dist/v-1549282893552/emojis/2935.png diff --git a/dist/v-1547534999795/emojis/2b05.png b/dist/v-1549282893552/emojis/2b05.png similarity index 100% rename from dist/v-1547534999795/emojis/2b05.png rename to dist/v-1549282893552/emojis/2b05.png diff --git a/dist/v-1547534999795/emojis/2b06.png b/dist/v-1549282893552/emojis/2b06.png similarity index 100% rename from dist/v-1547534999795/emojis/2b06.png rename to dist/v-1549282893552/emojis/2b06.png diff --git a/dist/v-1547534999795/emojis/2b07.png b/dist/v-1549282893552/emojis/2b07.png similarity index 100% rename from dist/v-1547534999795/emojis/2b07.png rename to dist/v-1549282893552/emojis/2b07.png diff --git a/dist/v-1547534999795/emojis/2b1b.png b/dist/v-1549282893552/emojis/2b1b.png similarity index 100% rename from dist/v-1547534999795/emojis/2b1b.png rename to dist/v-1549282893552/emojis/2b1b.png diff --git a/dist/v-1547534999795/emojis/2b1c.png b/dist/v-1549282893552/emojis/2b1c.png similarity index 100% rename from dist/v-1547534999795/emojis/2b1c.png rename to dist/v-1549282893552/emojis/2b1c.png diff --git a/dist/v-1547534999795/emojis/2b50.png b/dist/v-1549282893552/emojis/2b50.png similarity index 100% rename from dist/v-1547534999795/emojis/2b50.png rename to dist/v-1549282893552/emojis/2b50.png diff --git a/dist/v-1547534999795/emojis/2b55.png b/dist/v-1549282893552/emojis/2b55.png similarity index 100% rename from dist/v-1547534999795/emojis/2b55.png rename to dist/v-1549282893552/emojis/2b55.png diff --git a/dist/v-1547534999795/emojis/3030.png b/dist/v-1549282893552/emojis/3030.png similarity index 100% rename from dist/v-1547534999795/emojis/3030.png rename to dist/v-1549282893552/emojis/3030.png diff --git a/dist/v-1547534999795/emojis/303d.png b/dist/v-1549282893552/emojis/303d.png similarity index 100% rename from dist/v-1547534999795/emojis/303d.png rename to dist/v-1549282893552/emojis/303d.png diff --git a/dist/v-1547534999795/emojis/3297.png b/dist/v-1549282893552/emojis/3297.png similarity index 100% rename from dist/v-1547534999795/emojis/3297.png rename to dist/v-1549282893552/emojis/3297.png diff --git a/dist/v-1547534999795/emojis/3299.png b/dist/v-1549282893552/emojis/3299.png similarity index 100% rename from dist/v-1547534999795/emojis/3299.png rename to dist/v-1549282893552/emojis/3299.png diff --git a/dist/v-1547534999795/emojis/emojis-data.json b/dist/v-1549282893552/emojis/emojis-data.json similarity index 100% rename from dist/v-1547534999795/emojis/emojis-data.json rename to dist/v-1549282893552/emojis/emojis-data.json diff --git a/dist/v-1547534999795/fonts/OpenSans-Bold.ttf b/dist/v-1549282893552/fonts/OpenSans-Bold.ttf similarity index 100% rename from dist/v-1547534999795/fonts/OpenSans-Bold.ttf rename to dist/v-1549282893552/fonts/OpenSans-Bold.ttf diff --git a/dist/v-1547534999795/fonts/OpenSans-CondLight.eot b/dist/v-1549282893552/fonts/OpenSans-CondLight.eot similarity index 100% rename from dist/v-1547534999795/fonts/OpenSans-CondLight.eot rename to dist/v-1549282893552/fonts/OpenSans-CondLight.eot diff --git a/dist/v-1547534999795/fonts/OpenSans-CondLight.svg b/dist/v-1549282893552/fonts/OpenSans-CondLight.svg similarity index 100% rename from dist/v-1547534999795/fonts/OpenSans-CondLight.svg rename to dist/v-1549282893552/fonts/OpenSans-CondLight.svg diff --git a/dist/v-1547534999795/fonts/OpenSans-CondLight.ttf b/dist/v-1549282893552/fonts/OpenSans-CondLight.ttf similarity index 100% rename from dist/v-1547534999795/fonts/OpenSans-CondLight.ttf rename to dist/v-1549282893552/fonts/OpenSans-CondLight.ttf diff --git a/dist/v-1547534999795/fonts/OpenSans-CondLight.woff b/dist/v-1549282893552/fonts/OpenSans-CondLight.woff similarity index 100% rename from dist/v-1547534999795/fonts/OpenSans-CondLight.woff rename to dist/v-1549282893552/fonts/OpenSans-CondLight.woff diff --git a/dist/v-1547534999795/fonts/OpenSans-Light.ttf b/dist/v-1549282893552/fonts/OpenSans-Light.ttf similarity index 100% rename from dist/v-1547534999795/fonts/OpenSans-Light.ttf rename to dist/v-1549282893552/fonts/OpenSans-Light.ttf diff --git a/dist/v-1547534999795/fonts/OpenSans-Regular.ttf b/dist/v-1549282893552/fonts/OpenSans-Regular.ttf similarity index 100% rename from dist/v-1547534999795/fonts/OpenSans-Regular.ttf rename to dist/v-1549282893552/fonts/OpenSans-Regular.ttf diff --git a/dist/v-1547534999795/fonts/OpenSans-Semibold.ttf b/dist/v-1549282893552/fonts/OpenSans-Semibold.ttf similarity index 100% rename from dist/v-1547534999795/fonts/OpenSans-Semibold.ttf rename to dist/v-1549282893552/fonts/OpenSans-Semibold.ttf diff --git a/dist/v-1547534999795/fonts/taiga.eot b/dist/v-1549282893552/fonts/taiga.eot similarity index 100% rename from dist/v-1547534999795/fonts/taiga.eot rename to dist/v-1549282893552/fonts/taiga.eot diff --git a/dist/v-1547534999795/fonts/taiga.svg b/dist/v-1549282893552/fonts/taiga.svg similarity index 100% rename from dist/v-1547534999795/fonts/taiga.svg rename to dist/v-1549282893552/fonts/taiga.svg diff --git a/dist/v-1547534999795/fonts/taiga.ttf b/dist/v-1549282893552/fonts/taiga.ttf similarity index 100% rename from dist/v-1547534999795/fonts/taiga.ttf rename to dist/v-1549282893552/fonts/taiga.ttf diff --git a/dist/v-1547534999795/fonts/taiga.woff b/dist/v-1549282893552/fonts/taiga.woff similarity index 100% rename from dist/v-1547534999795/fonts/taiga.woff rename to dist/v-1549282893552/fonts/taiga.woff diff --git a/dist/v-1547534999795/images/attachment-gallery.png b/dist/v-1549282893552/images/attachment-gallery.png similarity index 100% rename from dist/v-1547534999795/images/attachment-gallery.png rename to dist/v-1549282893552/images/attachment-gallery.png diff --git a/dist/v-1547534999795/images/bg.png b/dist/v-1549282893552/images/bg.png similarity index 100% rename from dist/v-1547534999795/images/bg.png rename to dist/v-1549282893552/images/bg.png diff --git a/dist/v-1547534999795/images/discover.png b/dist/v-1549282893552/images/discover.png similarity index 100% rename from dist/v-1547534999795/images/discover.png rename to dist/v-1549282893552/images/discover.png diff --git a/dist/v-1547534999795/images/empty/empty_contact.png b/dist/v-1549282893552/images/empty/empty_contact.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_contact.png rename to dist/v-1549282893552/images/empty/empty_contact.png diff --git a/dist/v-1547534999795/images/empty/empty_des.png b/dist/v-1549282893552/images/empty/empty_des.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_des.png rename to dist/v-1549282893552/images/empty/empty_des.png diff --git a/dist/v-1547534999795/images/empty/empty_field.png b/dist/v-1549282893552/images/empty/empty_field.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_field.png rename to dist/v-1549282893552/images/empty/empty_field.png diff --git a/dist/v-1547534999795/images/empty/empty_like.png b/dist/v-1549282893552/images/empty/empty_like.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_like.png rename to dist/v-1549282893552/images/empty/empty_like.png diff --git a/dist/v-1547534999795/images/empty/empty_mex.png b/dist/v-1549282893552/images/empty/empty_mex.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_mex.png rename to dist/v-1549282893552/images/empty/empty_mex.png diff --git a/dist/v-1547534999795/images/empty/empty_moon.png b/dist/v-1549282893552/images/empty/empty_moon.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_moon.png rename to dist/v-1549282893552/images/empty/empty_moon.png diff --git a/dist/v-1547534999795/images/empty/empty_sprint.png b/dist/v-1549282893552/images/empty/empty_sprint.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_sprint.png rename to dist/v-1549282893552/images/empty/empty_sprint.png diff --git a/dist/v-1547534999795/images/empty/empty_tex.png b/dist/v-1549282893552/images/empty/empty_tex.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_tex.png rename to dist/v-1549282893552/images/empty/empty_tex.png diff --git a/dist/v-1547534999795/images/empty/empty_upvote.png b/dist/v-1549282893552/images/empty/empty_upvote.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_upvote.png rename to dist/v-1549282893552/images/empty/empty_upvote.png diff --git a/dist/v-1547534999795/images/empty/empty_watch.png b/dist/v-1549282893552/images/empty/empty_watch.png similarity index 100% rename from dist/v-1547534999795/images/empty/empty_watch.png rename to dist/v-1549282893552/images/empty/empty_watch.png diff --git a/dist/v-1547534999795/images/epics-empty.png b/dist/v-1549282893552/images/epics-empty.png similarity index 100% rename from dist/v-1547534999795/images/epics-empty.png rename to dist/v-1549282893552/images/epics-empty.png diff --git a/dist/v-1547534999795/images/favicon.png b/dist/v-1549282893552/images/favicon.png similarity index 100% rename from dist/v-1547534999795/images/favicon.png rename to dist/v-1549282893552/images/favicon.png diff --git a/dist/v-1547534999795/images/import-logos/asana.png b/dist/v-1549282893552/images/import-logos/asana.png similarity index 100% rename from dist/v-1547534999795/images/import-logos/asana.png rename to dist/v-1549282893552/images/import-logos/asana.png diff --git a/dist/v-1547534999795/images/import-logos/github.png b/dist/v-1549282893552/images/import-logos/github.png similarity index 100% rename from dist/v-1547534999795/images/import-logos/github.png rename to dist/v-1549282893552/images/import-logos/github.png diff --git a/dist/v-1547534999795/images/import-logos/jira.png b/dist/v-1549282893552/images/import-logos/jira.png similarity index 100% rename from dist/v-1547534999795/images/import-logos/jira.png rename to dist/v-1549282893552/images/import-logos/jira.png diff --git a/dist/v-1547534999795/images/import-logos/trello.png b/dist/v-1549282893552/images/import-logos/trello.png similarity index 100% rename from dist/v-1547534999795/images/import-logos/trello.png rename to dist/v-1549282893552/images/import-logos/trello.png diff --git a/dist/v-1547534999795/images/invitation_bg.jpg b/dist/v-1549282893552/images/invitation_bg.jpg similarity index 100% rename from dist/v-1547534999795/images/invitation_bg.jpg rename to dist/v-1549282893552/images/invitation_bg.jpg diff --git a/dist/v-1547534999795/images/logo-color.png b/dist/v-1549282893552/images/logo-color.png similarity index 100% rename from dist/v-1547534999795/images/logo-color.png rename to dist/v-1549282893552/images/logo-color.png diff --git a/dist/v-1547534999795/images/logo.png b/dist/v-1549282893552/images/logo.png similarity index 100% rename from dist/v-1547534999795/images/logo.png rename to dist/v-1549282893552/images/logo.png diff --git a/dist/v-1547534999795/images/looking-for-people.png b/dist/v-1549282893552/images/looking-for-people.png similarity index 100% rename from dist/v-1547534999795/images/looking-for-people.png rename to dist/v-1549282893552/images/looking-for-people.png diff --git a/dist/v-1547534999795/images/markitup/bg-container.png b/dist/v-1549282893552/images/markitup/bg-container.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-container.png rename to dist/v-1549282893552/images/markitup/bg-container.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor-bbcode.png b/dist/v-1549282893552/images/markitup/bg-editor-bbcode.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor-bbcode.png rename to dist/v-1549282893552/images/markitup/bg-editor-bbcode.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor-dotclear.png b/dist/v-1549282893552/images/markitup/bg-editor-dotclear.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor-dotclear.png rename to dist/v-1549282893552/images/markitup/bg-editor-dotclear.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor-html.png b/dist/v-1549282893552/images/markitup/bg-editor-html.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor-html.png rename to dist/v-1549282893552/images/markitup/bg-editor-html.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor-json.png b/dist/v-1549282893552/images/markitup/bg-editor-json.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor-json.png rename to dist/v-1549282893552/images/markitup/bg-editor-json.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor-markdown.png b/dist/v-1549282893552/images/markitup/bg-editor-markdown.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor-markdown.png rename to dist/v-1549282893552/images/markitup/bg-editor-markdown.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor-textile.png b/dist/v-1549282893552/images/markitup/bg-editor-textile.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor-textile.png rename to dist/v-1549282893552/images/markitup/bg-editor-textile.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor-wiki.png b/dist/v-1549282893552/images/markitup/bg-editor-wiki.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor-wiki.png rename to dist/v-1549282893552/images/markitup/bg-editor-wiki.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor-xml.png b/dist/v-1549282893552/images/markitup/bg-editor-xml.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor-xml.png rename to dist/v-1549282893552/images/markitup/bg-editor-xml.png diff --git a/dist/v-1547534999795/images/markitup/bg-editor.png b/dist/v-1549282893552/images/markitup/bg-editor.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bg-editor.png rename to dist/v-1549282893552/images/markitup/bg-editor.png diff --git a/dist/v-1547534999795/images/markitup/body.png b/dist/v-1549282893552/images/markitup/body.png similarity index 100% rename from dist/v-1547534999795/images/markitup/body.png rename to dist/v-1549282893552/images/markitup/body.png diff --git a/dist/v-1547534999795/images/markitup/bold.png b/dist/v-1549282893552/images/markitup/bold.png similarity index 100% rename from dist/v-1547534999795/images/markitup/bold.png rename to dist/v-1549282893552/images/markitup/bold.png diff --git a/dist/v-1547534999795/images/markitup/clean.png b/dist/v-1549282893552/images/markitup/clean.png similarity index 100% rename from dist/v-1547534999795/images/markitup/clean.png rename to dist/v-1549282893552/images/markitup/clean.png diff --git a/dist/v-1547534999795/images/markitup/code.png b/dist/v-1549282893552/images/markitup/code.png similarity index 100% rename from dist/v-1547534999795/images/markitup/code.png rename to dist/v-1549282893552/images/markitup/code.png diff --git a/dist/v-1547534999795/images/markitup/h1.png b/dist/v-1549282893552/images/markitup/h1.png similarity index 100% rename from dist/v-1547534999795/images/markitup/h1.png rename to dist/v-1549282893552/images/markitup/h1.png diff --git a/dist/v-1547534999795/images/markitup/h2.png b/dist/v-1549282893552/images/markitup/h2.png similarity index 100% rename from dist/v-1547534999795/images/markitup/h2.png rename to dist/v-1549282893552/images/markitup/h2.png diff --git a/dist/v-1547534999795/images/markitup/h3.png b/dist/v-1549282893552/images/markitup/h3.png similarity index 100% rename from dist/v-1547534999795/images/markitup/h3.png rename to dist/v-1549282893552/images/markitup/h3.png diff --git a/dist/v-1547534999795/images/markitup/h4.png b/dist/v-1549282893552/images/markitup/h4.png similarity index 100% rename from dist/v-1547534999795/images/markitup/h4.png rename to dist/v-1549282893552/images/markitup/h4.png diff --git a/dist/v-1547534999795/images/markitup/h5.png b/dist/v-1549282893552/images/markitup/h5.png similarity index 100% rename from dist/v-1547534999795/images/markitup/h5.png rename to dist/v-1549282893552/images/markitup/h5.png diff --git a/dist/v-1547534999795/images/markitup/h6.png b/dist/v-1549282893552/images/markitup/h6.png similarity index 100% rename from dist/v-1547534999795/images/markitup/h6.png rename to dist/v-1549282893552/images/markitup/h6.png diff --git a/dist/v-1547534999795/images/markitup/handle.png b/dist/v-1549282893552/images/markitup/handle.png similarity index 100% rename from dist/v-1547534999795/images/markitup/handle.png rename to dist/v-1549282893552/images/markitup/handle.png diff --git a/dist/v-1547534999795/images/markitup/help.png b/dist/v-1549282893552/images/markitup/help.png similarity index 100% rename from dist/v-1547534999795/images/markitup/help.png rename to dist/v-1549282893552/images/markitup/help.png diff --git a/dist/v-1547534999795/images/markitup/image.png b/dist/v-1549282893552/images/markitup/image.png similarity index 100% rename from dist/v-1547534999795/images/markitup/image.png rename to dist/v-1549282893552/images/markitup/image.png diff --git a/dist/v-1547534999795/images/markitup/italic.png b/dist/v-1549282893552/images/markitup/italic.png similarity index 100% rename from dist/v-1547534999795/images/markitup/italic.png rename to dist/v-1549282893552/images/markitup/italic.png diff --git a/dist/v-1547534999795/images/markitup/jaysalvat.png b/dist/v-1549282893552/images/markitup/jaysalvat.png similarity index 100% rename from dist/v-1547534999795/images/markitup/jaysalvat.png rename to dist/v-1549282893552/images/markitup/jaysalvat.png diff --git a/dist/v-1547534999795/images/markitup/link.png b/dist/v-1549282893552/images/markitup/link.png similarity index 100% rename from dist/v-1547534999795/images/markitup/link.png rename to dist/v-1549282893552/images/markitup/link.png diff --git a/dist/v-1547534999795/images/markitup/list-bullet.png b/dist/v-1549282893552/images/markitup/list-bullet.png similarity index 100% rename from dist/v-1547534999795/images/markitup/list-bullet.png rename to dist/v-1549282893552/images/markitup/list-bullet.png diff --git a/dist/v-1547534999795/images/markitup/list-numeric.png b/dist/v-1549282893552/images/markitup/list-numeric.png similarity index 100% rename from dist/v-1547534999795/images/markitup/list-numeric.png rename to dist/v-1549282893552/images/markitup/list-numeric.png diff --git a/dist/v-1547534999795/images/markitup/markitup.png b/dist/v-1549282893552/images/markitup/markitup.png similarity index 100% rename from dist/v-1547534999795/images/markitup/markitup.png rename to dist/v-1549282893552/images/markitup/markitup.png diff --git a/dist/v-1547534999795/images/markitup/menu.png b/dist/v-1549282893552/images/markitup/menu.png similarity index 100% rename from dist/v-1547534999795/images/markitup/menu.png rename to dist/v-1549282893552/images/markitup/menu.png diff --git a/dist/v-1547534999795/images/markitup/picture.png b/dist/v-1549282893552/images/markitup/picture.png similarity index 100% rename from dist/v-1547534999795/images/markitup/picture.png rename to dist/v-1549282893552/images/markitup/picture.png diff --git a/dist/v-1547534999795/images/markitup/preview.png b/dist/v-1549282893552/images/markitup/preview.png similarity index 100% rename from dist/v-1547534999795/images/markitup/preview.png rename to dist/v-1549282893552/images/markitup/preview.png diff --git a/dist/v-1547534999795/images/markitup/preview_ico.png b/dist/v-1549282893552/images/markitup/preview_ico.png similarity index 100% rename from dist/v-1547534999795/images/markitup/preview_ico.png rename to dist/v-1549282893552/images/markitup/preview_ico.png diff --git a/dist/v-1547534999795/images/markitup/quotes.png b/dist/v-1549282893552/images/markitup/quotes.png similarity index 100% rename from dist/v-1547534999795/images/markitup/quotes.png rename to dist/v-1549282893552/images/markitup/quotes.png diff --git a/dist/v-1547534999795/images/markitup/stroke.png b/dist/v-1549282893552/images/markitup/stroke.png similarity index 100% rename from dist/v-1547534999795/images/markitup/stroke.png rename to dist/v-1549282893552/images/markitup/stroke.png diff --git a/dist/v-1547534999795/images/markitup/submenu.png b/dist/v-1549282893552/images/markitup/submenu.png similarity index 100% rename from dist/v-1547534999795/images/markitup/submenu.png rename to dist/v-1549282893552/images/markitup/submenu.png diff --git a/dist/v-1547534999795/images/menu-vert.png b/dist/v-1549282893552/images/menu-vert.png similarity index 100% rename from dist/v-1547534999795/images/menu-vert.png rename to dist/v-1549282893552/images/menu-vert.png diff --git a/dist/v-1547534999795/images/menu.png b/dist/v-1549282893552/images/menu.png similarity index 100% rename from dist/v-1547534999795/images/menu.png rename to dist/v-1549282893552/images/menu.png diff --git a/dist/v-1547534999795/images/monster-fight.png b/dist/v-1549282893552/images/monster-fight.png similarity index 100% rename from dist/v-1547534999795/images/monster-fight.png rename to dist/v-1549282893552/images/monster-fight.png diff --git a/dist/v-1547534999795/images/notification-decoration.png b/dist/v-1549282893552/images/notification-decoration.png similarity index 100% rename from dist/v-1547534999795/images/notification-decoration.png rename to dist/v-1549282893552/images/notification-decoration.png diff --git a/dist/v-1547534999795/images/project-logos/project-logo-01.png b/dist/v-1549282893552/images/project-logos/project-logo-01.png similarity index 100% rename from dist/v-1547534999795/images/project-logos/project-logo-01.png rename to dist/v-1549282893552/images/project-logos/project-logo-01.png diff --git a/dist/v-1547534999795/images/project-logos/project-logo-02.png b/dist/v-1549282893552/images/project-logos/project-logo-02.png similarity index 100% rename from dist/v-1547534999795/images/project-logos/project-logo-02.png rename to dist/v-1549282893552/images/project-logos/project-logo-02.png diff --git a/dist/v-1547534999795/images/project-logos/project-logo-03.png b/dist/v-1549282893552/images/project-logos/project-logo-03.png similarity index 100% rename from dist/v-1547534999795/images/project-logos/project-logo-03.png rename to dist/v-1549282893552/images/project-logos/project-logo-03.png diff --git a/dist/v-1547534999795/images/project-logos/project-logo-04.png b/dist/v-1549282893552/images/project-logos/project-logo-04.png similarity index 100% rename from dist/v-1547534999795/images/project-logos/project-logo-04.png rename to dist/v-1549282893552/images/project-logos/project-logo-04.png diff --git a/dist/v-1547534999795/images/project-logos/project-logo-05.png b/dist/v-1549282893552/images/project-logos/project-logo-05.png similarity index 100% rename from dist/v-1547534999795/images/project-logos/project-logo-05.png rename to dist/v-1549282893552/images/project-logos/project-logo-05.png diff --git a/dist/v-1547534999795/images/quote.png b/dist/v-1549282893552/images/quote.png similarity index 100% rename from dist/v-1547534999795/images/quote.png rename to dist/v-1549282893552/images/quote.png diff --git a/dist/v-1547534999795/images/tribe-logo.png b/dist/v-1549282893552/images/tribe-logo.png similarity index 100% rename from dist/v-1547534999795/images/tribe-logo.png rename to dist/v-1549282893552/images/tribe-logo.png diff --git a/dist/v-1547534999795/images/unnamed.png b/dist/v-1549282893552/images/unnamed.png similarity index 100% rename from dist/v-1547534999795/images/unnamed.png rename to dist/v-1549282893552/images/unnamed.png diff --git a/dist/v-1547534999795/images/user-avatars/user-avatar-01.png b/dist/v-1549282893552/images/user-avatars/user-avatar-01.png similarity index 100% rename from dist/v-1547534999795/images/user-avatars/user-avatar-01.png rename to dist/v-1549282893552/images/user-avatars/user-avatar-01.png diff --git a/dist/v-1547534999795/images/user-avatars/user-avatar-02.png b/dist/v-1549282893552/images/user-avatars/user-avatar-02.png similarity index 100% rename from dist/v-1547534999795/images/user-avatars/user-avatar-02.png rename to dist/v-1549282893552/images/user-avatars/user-avatar-02.png diff --git a/dist/v-1547534999795/images/user-avatars/user-avatar-03.png b/dist/v-1549282893552/images/user-avatars/user-avatar-03.png similarity index 100% rename from dist/v-1547534999795/images/user-avatars/user-avatar-03.png rename to dist/v-1549282893552/images/user-avatars/user-avatar-03.png diff --git a/dist/v-1547534999795/images/user-avatars/user-avatar-04.png b/dist/v-1549282893552/images/user-avatars/user-avatar-04.png similarity index 100% rename from dist/v-1547534999795/images/user-avatars/user-avatar-04.png rename to dist/v-1549282893552/images/user-avatars/user-avatar-04.png diff --git a/dist/v-1547534999795/images/user-avatars/user-avatar-05.png b/dist/v-1549282893552/images/user-avatars/user-avatar-05.png similarity index 100% rename from dist/v-1547534999795/images/user-avatars/user-avatar-05.png rename to dist/v-1549282893552/images/user-avatars/user-avatar-05.png diff --git a/dist/v-1547534999795/images/user-noimage.png b/dist/v-1549282893552/images/user-noimage.png similarity index 100% rename from dist/v-1547534999795/images/user-noimage.png rename to dist/v-1549282893552/images/user-noimage.png diff --git a/dist/v-1547534999795/js/app-loader.js b/dist/v-1549282893552/js/app-loader.js similarity index 96% rename from dist/v-1547534999795/js/app-loader.js rename to dist/v-1549282893552/js/app-loader.js index ee0dba3..123f93f 100644 --- a/dist/v-1547534999795/js/app-loader.js +++ b/dist/v-1549282893552/js/app-loader.js @@ -1 +1 @@ -(function(){var n,t,e,i;window._version="v-1547534999795",window.taigaConfig={api:"http://localhost:8000/api/v1/",eventsUrl:null,tribeHost:null,eventsMaxMissedHeartbeats:5,eventsHeartbeatIntervalTime:6e4,debug:!0,defaultLanguage:"en",themes:["taiga","material-design","high-contrast"],defaultTheme:"taiga",publicRegisterEnabled:!0,feedbackEnabled:!0,supportUrl:null,privacyPolicyUrl:null,termsOfServiceUrl:null,maxUploadFileSize:null,importers:[],contribPlugins:[]},window.taigaContribPlugins=[],window._decorators=[],window.addDecorator=function(n,t){return window._decorators.push({provider:n,decorator:t})},window.getDecorators=function(){return window._decorators},e=function(n){return $("head").append('')},n=function(n){return new Promise(function(t,i){var o,r;return r=function(n){var i,o,r,a;if(n.isPack)for(a=n.plugins,i=0,r=a.length;i0?t(window.taigaConfig.contribPlugins).then(function(){return ljs.load("/"+window._version+"/js/app.js",function(){return n.then(function(){return angular.bootstrap(document,["taiga"])})})}):ljs.load("/"+window._version+"/js/app.js",function(){return n.then(function(){return angular.bootstrap(document,["taiga"])})})})}).call(this); \ No newline at end of file +(function(){var n,t,e,i;window._version="v-1549282893552",window.taigaConfig={api:"http://localhost:8000/api/v1/",eventsUrl:null,tribeHost:null,eventsMaxMissedHeartbeats:5,eventsHeartbeatIntervalTime:6e4,debug:!0,defaultLanguage:"en",themes:["taiga","material-design","high-contrast"],defaultTheme:"taiga",publicRegisterEnabled:!0,feedbackEnabled:!0,supportUrl:null,privacyPolicyUrl:null,termsOfServiceUrl:null,maxUploadFileSize:null,importers:[],contribPlugins:[]},window.taigaContribPlugins=[],window._decorators=[],window.addDecorator=function(n,t){return window._decorators.push({provider:n,decorator:t})},window.getDecorators=function(){return window._decorators},e=function(n){return $("head").append('')},n=function(n){return new Promise(function(t,i){var o,r;return r=function(n){var i,o,r,a;if(n.isPack)for(a=n.plugins,i=0,r=a.length;i0?t(window.taigaConfig.contribPlugins).then(function(){return ljs.load("/"+window._version+"/js/app.js",function(){return n.then(function(){return angular.bootstrap(document,["taiga"])})})}):ljs.load("/"+window._version+"/js/app.js",function(){return n.then(function(){return angular.bootstrap(document,["taiga"])})})})}).call(this); \ No newline at end of file diff --git a/dist/v-1549282893552/js/app.js b/dist/v-1549282893552/js/app.js new file mode 100644 index 0000000..6eab37e --- /dev/null +++ b/dist/v-1549282893552/js/app.js @@ -0,0 +1,25 @@ +(function(){var t,e,r,n,i,o,s,a;this.taiga=a={},a.emojis=window.emojis,this.taigaContribPlugins=this.taigaContribPlugins||window.taigaContribPlugins||[],a.generateHash=function(t){return null==t&&(t=[]),t=_.map(t,function(t){return JSON.stringify(t)}),hex_sha1(t.join(":"))},a.generateUniqueSessionIdentifier=function(){var t,e;return t=(new Date).getTime(),e=Math.floor(150994944*Math.random()),a.generateHash([t,e])},a.sessionId=a.generateUniqueSessionIdentifier(),t=function(t,e,r,n,i,o,s,c,u){var l,p,d,f,h,g,m,v,y;return u.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/),g=t.when,t.when=function(e,r){return r.resolve||(r.resolve={}),angular.extend(r.resolve,{languageLoad:["$q","$translate",function(t,e){var r;return r=t.defer(),e().then(function(){return r.resolve()}),r.promise}],projectLoaded:["$q","tgProjectService","$route",function(t,e,r){var n,i;return n=t.defer(),e.setSection(null!=(i=r.current.$$route)?i.section:void 0),r.current.params.pslug?e.setProjectBySlug(r.current.params.pslug).then(n.resolve):(e.cleanProject(),n.resolve()),n.promise}]}),g.call(t,e,r)},t.when("/",{templateUrl:"home/home.html",controller:"Home",controllerAs:"vm",loader:!0,title:"HOME.PAGE_TITLE",loader:!0,description:"HOME.PAGE_DESCRIPTION",joyride:"dashboard"}),t.when("/discover",{templateUrl:"discover/discover-home/discover-home.html",controller:"DiscoverHome",controllerAs:"vm",title:"PROJECT.NAVIGATION.DISCOVER",loader:!0}),t.when("/discover/search",{templateUrl:"discover/discover-search/discover-search.html",title:"PROJECT.NAVIGATION.DISCOVER",loader:!0,controller:"DiscoverSearch",controllerAs:"vm",reloadOnSearch:!1}),t.when("/projects/",{templateUrl:"projects/listing/projects-listing.html",access:{requiresLogin:!0},title:"PROJECTS.PAGE_TITLE",description:"PROJECTS.PAGE_DESCRIPTION",loader:!0,controller:"ProjectsListing",controllerAs:"vm"}),t.when("/project/new",{title:"PROJECT.CREATE.TITLE",templateUrl:"projects/create/create-project.html",loader:!0,controller:"CreateProjectCtrl",controllerAs:"vm"}),t.when("/project/new/scrum",{title:"PROJECT.CREATE.TITLE",template:'',loader:!0}),t.when("/project/new/kanban",{title:"PROJECT.CREATE.TITLE",template:'',loader:!0}),t.when("/project/new/duplicate",{title:"PROJECT.CREATE.TITLE",template:"",loader:!0}),t.when("/project/new/import/:platform?",{title:"PROJECT.CREATE.TITLE",template:"",loader:!0}),t.when("/project/:pslug/",{template:"",loader:!0,controller:"ProjectRouter"}),t.when("/project/:pslug/timeline",{templateUrl:"projects/project/project.html",loader:!0,controller:"Project",controllerAs:"vm",section:"project-timeline"}),t.when("/project/:pslug/t/:ref",{loader:!0,controller:"DetailController",template:""}),t.when("/project/:pslug/search",{templateUrl:"search/search.html",reloadOnSearch:!1,section:"search",loader:!0}),t.when("/project/:pslug/epics",{section:"epics",templateUrl:"epics/dashboard/epics-dashboard.html",loader:!0,controller:"EpicsDashboardCtrl",controllerAs:"vm"}),t.when("/project/:pslug/epic/:epicref",{templateUrl:"epic/epic-detail.html",loader:!0,section:"epics"}),t.when("/project/:pslug/backlog",{templateUrl:"backlog/backlog.html",loader:!0,section:"backlog",joyride:"backlog"}),t.when("/project/:pslug/kanban",{templateUrl:"kanban/kanban.html",loader:!0,section:"kanban",joyride:"kanban"}),t.when("/project/:pslug/taskboard/:sslug",{templateUrl:"taskboard/taskboard.html",loader:!0,section:"backlog"}),t.when("/project/:pslug/us/:usref",{templateUrl:"us/us-detail.html",loader:!0,section:"backlog-kanban"}),t.when("/project/:pslug/task/:taskref",{templateUrl:"task/task-detail.html",loader:!0,section:"backlog-kanban"}),t.when("/project/:pslug/wiki",{redirectTo:function(t){return"/project/"+t.pslug+"/wiki/home"}}),t.when("/project/:pslug/wiki-list",{templateUrl:"wiki/wiki-list.html",loader:!0,section:"wiki"}),t.when("/project/:pslug/wiki/:slug",{templateUrl:"wiki/wiki.html",loader:!0,section:"wiki"}),t.when("/project/:pslug/team",{templateUrl:"team/team.html",loader:!0,section:"team"}),t.when("/project/:pslug/issues",{templateUrl:"issue/issues.html",loader:!0,section:"issues"}),t.when("/project/:pslug/issue/:issueref",{templateUrl:"issue/issues-detail.html",loader:!0,section:"issues"}),t.when("/project/:pslug/admin/project-profile/details",{templateUrl:"admin/admin-project-profile.html",section:"admin"}),t.when("/project/:pslug/admin/project-profile/default-values",{templateUrl:"admin/admin-project-default-values.html",section:"admin"}),t.when("/project/:pslug/admin/project-profile/modules",{templateUrl:"admin/admin-project-modules.html",section:"admin"}),t.when("/project/:pslug/admin/project-profile/export",{templateUrl:"admin/admin-project-export.html",section:"admin"}),t.when("/project/:pslug/admin/project-profile/reports",{templateUrl:"admin/admin-project-reports.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/status",{templateUrl:"admin/admin-project-values-status.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/points",{templateUrl:"admin/admin-project-values-points.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/priorities",{templateUrl:"admin/admin-project-values-priorities.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/severities",{templateUrl:"admin/admin-project-values-severities.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/types",{templateUrl:"admin/admin-project-values-types.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/custom-fields",{templateUrl:"admin/admin-project-values-custom-fields.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/tags",{templateUrl:"admin/admin-project-values-tags.html",section:"admin"}),t.when("/project/:pslug/admin/project-values/due-dates",{templateUrl:"admin/admin-project-values-due-dates.html",section:"admin"}),t.when("/project/:pslug/admin/memberships",{templateUrl:"admin/admin-memberships.html",section:"admin"}),t.when("/project/:pslug/admin/roles",{templateUrl:"admin/admin-roles.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/webhooks",{templateUrl:"admin/admin-third-parties-webhooks.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/github",{templateUrl:"admin/admin-third-parties-github.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/gitlab",{templateUrl:"admin/admin-third-parties-gitlab.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/bitbucket",{templateUrl:"admin/admin-third-parties-bitbucket.html",section:"admin"}),t.when("/project/:pslug/admin/third-parties/gogs",{templateUrl:"admin/admin-third-parties-gogs.html",section:"admin"}),t.when("/project/:pslug/admin/contrib/:plugin",{templateUrl:"contrib/main.html"}),t.when("/project/:pslug/transfer/:token",{templateUrl:"projects/transfer/transfer-page.html",loader:!0,controller:"Project",controllerAs:"vm"}),t.when("/user-settings/user-profile",{templateUrl:"user/user-profile.html"}),t.when("/user-settings/user-change-password",{templateUrl:"user/user-change-password.html"}),t.when("/user-settings/user-project-settings",{templateUrl:"user/user-project-settings.html"}),t.when("/user-settings/mail-notifications",{templateUrl:"user/mail-notifications.html"}),t.when("/user-settings/live-notifications",{templateUrl:"user/live-notifications.html"}),t.when("/user-settings/web-notifications",{templateUrl:"user/web-notifications.html"}),t.when("/change-email/:email_token",{templateUrl:"user/change-email.html"}),t.when("/cancel-account/:cancel_token",{templateUrl:"user/cancel-account.html"}),t.when("/user-settings/contrib/:plugin",{templateUrl:"contrib/user-settings.html"}),t.when("/profile",{templateUrl:"profile/profile.html",loader:!0,access:{requiresLogin:!0},controller:"Profile",controllerAs:"vm"}),t.when("/notifications",{templateUrl:"notifications/notifications.html",loader:!0,access:{requiresLogin:!0},controller:"Notifications",controllerAs:"vm"}),t.when("/profile/:slug",{templateUrl:"profile/profile.html",loader:!0,controller:"Profile",controllerAs:"vm"}),t.when("/login",{templateUrl:"auth/login.html",title:"LOGIN.PAGE_TITLE",description:"LOGIN.PAGE_DESCRIPTION",disableHeader:!0,controller:"LoginPage"}),t.when("/register",{templateUrl:"auth/register.html",title:"REGISTER.PAGE_TITLE",description:"REGISTER.PAGE_DESCRIPTION",disableHeader:!0}),t.when("/forgot-password",{templateUrl:"auth/forgot-password.html",title:"FORGOT_PASSWORD.PAGE_TITLE",description:"FORGOT_PASSWORD.PAGE_DESCRIPTION",disableHeader:!0}),t.when("/change-password/:token",{templateUrl:"auth/change-password-from-recovery.html",title:"CHANGE_PASSWORD.PAGE_TITLE",description:"CHANGE_PASSWORD.PAGE_TITLE",disableHeader:!0}),t.when("/invitation/:token",{templateUrl:"auth/invitation.html",title:"INVITATION.PAGE_TITLE",description:"INVITATION.PAGE_DESCRIPTION",disableHeader:!0}),t.when("/external-apps",{templateUrl:"external-apps/external-app.html",title:"EXTERNAL_APP.PAGE_TITLE",description:"EXTERNAL_APP.PAGE_DESCRIPTION",controller:"ExternalApp",controllerAs:"vm",disableHeader:!0,mobileViewport:!0}),t.when("/blocked-project/:pslug/",{templateUrl:"projects/project/blocked-project.html",loader:!0}),t.when("/error",{templateUrl:"error/error.html"}),t.when("/not-found",{templateUrl:"error/not-found.html"}),t.when("/permission-denied",{templateUrl:"error/permission-denied.html"}),t.otherwise({templateUrl:"error/not-found.html"}),e.html5Mode({enabled:!0,requireBase:!1}),f={"Content-Type":"application/json","Accept-Language":window.taigaConfig.defaultLanguage||"en","X-Session-Id":a.sessionId},r.defaults.headers["delete"]=f,r.defaults.headers.patch=f,r.defaults.headers.post=f,r.defaults.headers.put=f,r.defaults.headers.get={"X-Session-Id":a.sessionId},r.useApplyAsync(!0),i.setSessionId(a.sessionId),l=function(t,e,r,n,i){var o;return o=function(o){var s,a;return 0===o.status||o.status===-1&&!o.config.cancelable?(n.closeAll(),i.error()):401===o.status&&e.url().indexOf("/login")===-1&&(s=e.url(),a=e.search(),a.force_next?e.url(r.resolve("login")).search("force_next",a.force_next):e.url(r.resolve("login")).search({unauthorized:!0,next:s})),t.reject(o)},{responseError:o}},n.factory("authHttpIntercept",["$q","$location","$tgNavUrls","lightboxService","tgErrorHandlingService",l]),r.interceptors.push("authHttpIntercept"),h=function(t,e){return{request:function(t){return e.logRequest(),t},requestError:function(r){return e.logResponse(),t.reject(r)},responseError:function(r){return e.logResponse(),t.reject(r)},response:function(t){return e.logResponse(),t}}},n.factory("loaderIntercept",["$q","tgLoader",h]),r.interceptors.push("loaderIntercept"),y=function(t){var e;return e=function(e){var r;return 400===e.status&&e.data.version&&(r=angular.element("body").injector(),r.invoke(["$tgConfirm","$translate",function(t){return function(t,e){var r;return r=e.instant("ERROR.VERSION_ERROR"),t.notify("error",r,null,1e4)}}(this)])),t.reject(e)},{responseError:e}},n.factory("versionCheckHttpIntercept",["$q",y]),r.interceptors.push("versionCheckHttpIntercept"),p=function(t,e){var r,n,i;return r=function(){return e.block()},i=function(t){return t.data.blocked_code&&r(),t},n=function(e){return 451===e.status&&r(),t.reject(e)},{response:i,responseError:n}},n.factory("blockingIntercept",["$q","tgErrorHandlingService",p]),r.interceptors.push("blockingIntercept"),o.debugInfoEnabled(window.taigaConfig.debugInfo||!1),localStorage.userInfo&&(v=JSON.parse(localStorage.userInfo)),m=(null!=v?v.lang:void 0)||window.taigaConfig.defaultLanguage||"en",c.addPart("taiga"),s.useLoader("$translatePartialLoader",{urlTemplate:"/"+window._version+"/locales/{part}/locale-{lang}.json"}).useSanitizeValueStrategy("escapeParameters").addInterpolation("$translateMessageFormatInterpolation").preferredLanguage(m),s.fallbackLanguage(m),d=window.getDecorators(),_.each(d,function(t){return n.decorator(t.provider,t.decorator)})},e=function(t,e){var r;return moment.locale(t),"en"!==t&&ljs.load("/"+window._version+"/locales/moment-locales/"+t+".js"),r={defaultMessage:e.instant("COMMON.FORM_ERRORS.DEFAULT_MESSAGE"),type:{email:e.instant("COMMON.FORM_ERRORS.TYPE_EMAIL"),url:e.instant("COMMON.FORM_ERRORS.TYPE_URL"),urlstrict:e.instant("COMMON.FORM_ERRORS.TYPE_URLSTRICT"),number:e.instant("COMMON.FORM_ERRORS.TYPE_NUMBER"),digits:e.instant("COMMON.FORM_ERRORS.TYPE_DIGITS"),dateIso:e.instant("COMMON.FORM_ERRORS.TYPE_DATEISO"),alphanum:e.instant("COMMON.FORM_ERRORS.TYPE_ALPHANUM"),phone:e.instant("COMMON.FORM_ERRORS.TYPE_PHONE")},notnull:e.instant("COMMON.FORM_ERRORS.NOTNULL"),notblank:e.instant("COMMON.FORM_ERRORS.NOT_BLANK"),required:e.instant("COMMON.FORM_ERRORS.REQUIRED"),regexp:e.instant("COMMON.FORM_ERRORS.REGEXP"),min:e.instant("COMMON.FORM_ERRORS.MIN"),max:e.instant("COMMON.FORM_ERRORS.MAX"),range:e.instant("COMMON.FORM_ERRORS.RANGE"),minlength:e.instant("COMMON.FORM_ERRORS.MIN_LENGTH"),maxlength:e.instant("COMMON.FORM_ERRORS.MAX_LENGTH"),rangelength:e.instant("COMMON.FORM_ERRORS.RANGE_LENGTH"),mincheck:e.instant("COMMON.FORM_ERRORS.MIN_CHECK"),maxcheck:e.instant("COMMON.FORM_ERRORS.MAX_CHECK"),rangecheck:e.instant("COMMON.FORM_ERRORS.RANGE_CHECK"),equalto:e.instant("COMMON.FORM_ERRORS.EQUAL_TO"),linewidth:e.instant("COMMON.FORM_ERRORS.LINEWIDTH"),pikaday:e.instant("COMMON.FORM_ERRORS.PIKADAY")},checksley.updateMessages("default",r)},r=function(t,r,n,i,o,s,c,u,l,p,d,f,h,g,m){var v,y,b;return t.debug("Initialize application"),r.$on("$translatePartialLoaderStructureChanged",function(){return s.refresh()}),b={linewidth:function(t,e){var r,n;return r=a.nl2br(t).split("
    "),n=_.every(r,function(t){return t.length-1}),Promise.setScheduler(function(t){return r.$evalAsync(t)}),i.setupConnection(),n.isAuthenticated()&&(y=n.getUser(),n.showTerms()),o.initialize(),r.$on("$locationChangeStart",function(t){var e;if(f.init(),(null!=(e=m.project)?e.get("blocked_code"):void 0)&&(m.setProject(null),f.block()),h.getLightboxOpen().length)return t.preventDefault(),h.closeAll()}),v=r.$on("$routeChangeStart",function(t,e){return e.loader&&p.start(!0),v()}),r.$on("$routeChangeSuccess",function(t,e){var r,i;return e.loader&&p.start(!0),e.access&&e.access.requiresLogin&&(n.isAuthenticated()||c.path(u.resolve("login"))),(e.title||e.description)&&(i=s.instant(e.title||""),r=s.instant(e.description||""),l.setAll(i,r)),e.mobileViewport?l.addMobileViewport():l.removeMobileViewport(),e.disableHeader?d.disableHeader():d.enableHeader()})},angular.module("infinite-scroll").value("THROTTLE_MILLISECONDS",500),s=_.filter(this.taigaContribPlugins,function(t){return t.module}),o=_.map(s,function(t){return t.module}),i=["taigaBase","taigaCommon","taigaResources","taigaResources2","taigaAuth","taigaEvents","taigaHome","taigaNavigationBar","taigaProjects","taigaRelatedTasks","taigaBacklog","taigaTaskboard","taigaKanban","taigaIssues","taigaUserStories","taigaTasks","taigaTeam","taigaWiki","taigaSearch","taigaAdmin","taigaProject","taigaUserSettings","taigaFeedback","taigaPlugins","taigaIntegrations","taigaComponents","taigaProfile","taigaHome","taigaUserTimeline","taigaExternalApps","taigaDiscover","taigaHistory","taigaNotifications","taigaWikiHistory","taigaEpics","taigaUtils","templates","ngSanitize","ngRoute","ngAnimate","ngAria","pascalprecht.translate","infinite-scroll","tgRepeat"].concat(o),n=angular.module("taiga",i),n.config(["$routeProvider","$locationProvider","$httpProvider","$provide","$tgEventsProvider","$compileProvider","$translateProvider","$translatePartialLoaderProvider","$animateProvider",t]),n.run(["$log","$rootScope","$tgAuth","$tgEvents","$tgAnalytics","$translate","$tgLocation","$tgNavUrls","tgAppMetaService","tgLoader","tgNavigationBarService","tgErrorHandlingService","lightboxService","$tgConfig","tgProjectService",r])}).call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty,o=function(t,e){return function(){return t.apply(e,arguments)}};t=function(){function t(){}return t}(),r=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return n(e,t),e}(t),e=function(t){function e(){return this.onInitialDataError=o(this.onInitialDataError,this),e.__super__.constructor.apply(this,arguments)}return n(e,t),e.prototype.onInitialDataError=function(t){return t&&(404===t.status?this.errorHandlingService.notfound():403===t.status&&this.errorHandlingService.permissionDenied()),this.q.reject(t)},e}(t),this.taiga.Base=t,this.taiga.Service=r,this.taiga.Controller=e}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k,$,I,T,E,C,P,w,A,O,R,M,U=[].indexOf||function(t){for(var e=0,r=this.length;e\r\n]?)(\r\n|\n\r|\r|\n)/g,"$1"+e+"$2")}}(this),r=function(t){return function(t){var e,r;return e=_.keys(t),r=[],_.forIn(t,function(t,n){if(U.call(e,n)<0&&_.isFunction(t))return r.push(n)}),_.bindAll(t,r)}}(this),n=function(t){return function(t,e,r){var n,i;return i=t.$eval(e),void 0!==i?r(i):(n=null,n=t.$watch(e,function(t){if(void 0!==t)return r(t),n?n():void 0}))}}(this),m=function(){var t,e,r,n,i,o,s,a;for(e=arguments[0],o=2<=arguments.length?N.call(arguments,1):[],t=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return D(e,t),e}(e),r=o.length-1;r>=0;r+=-1){i=o[r],a=i.prototype;for(s in a)n=a[s],t.prototype[s]=n}return t},O=function(t,e){return _.trim(t,e)},I=function(t){return t.toString().toLowerCase().trim().replace(/\s+/g,"-").replace(/&/g,"-and-").replace(/[^\w\-]+/g,"").replace(/\-\-+/g,"-")},M=function(t){return t?_.capitalize(t.replace(/-/g," ")):t},A=function(t,e){var r,n;return r=t.data("nextTextPosition"),(null==r||r>=e.length)&&(r=0),n=e[r],t.data("nextTextPosition",r+1),t.text(n)},p=function(t,e){var r,n,i,o;for(o={},r=0,i=t.length;re&&(n=n.substring(0,e+1),n=n.substring(0,Math.min(n.length,n.lastIndexOf(" "))),n+=r),n):t},$=function(t,e){var r,n,i;return null==e&&(e=1),isNaN(parseFloat(t))||!isFinite(t)?"-":0===t?"0 bytes":(i=["bytes","KB","MB","GB","TB","PB"],r=Math.floor(Math.log(t)/Math.log(1024)),r>5&&(r=5),n=(t/Math.pow(1024,r)).toFixed(e),n+" "+i[r])},E=function(t,e){var r;return e?(r=new RegExp("<(?!"+e+"s*/?)[^>]+>","gi"),String(t).replace(r,"")):String(t).replace(/<\/?[^>]+>/g,"")},j=function(t,e,r){var n;return n=new RegExp("<("+e+")>","gi"),t=t.replace(n,"<"+r+">"),n=new RegExp("","gi"),t=t.replace(n,"")},a=function(t){return function(t,e,r){return Object.defineProperty(t,e,{get:function(){var t;if(!_.isFunction(r))throw"defineImmutableProperty third param must be a function";if(t=r(),t&&_.isObject(t)&&void 0===t.size)throw"defineImmutableProperty must return immutable data";return t}})}}(this),_.mixin({removeKeys:function(t,e){return _.chain([e]).flatten().reduce(function(t,e){return delete t[e],t},t).value()},cartesianProduct:function(){return _.reduceRight(arguments,function(t,e){return _.flatten(_.map(t,function(t){return _.map(e,function(e){return[e].concat(t)})}),!0)},[[]])}}),f=function(t){return null!==t.match(/\.(jpe?g|png|gif|gifv|webm|svg|psd)/i)},d=function(t){return null!=t&&null!==t.match(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/)},h=function(t){return null!==t.match(/\.(pdf)/i)},b=function(t,e){var r;return r={},e.forEach(function(e,n){if(e!==t.get(n))return e.toJS?r[n]=e.toJS():r[n]=e}),r},t=["#fce94f","#edd400","#c4a000","#8ae234","#73d216","#4e9a06","#d3d7cf","#fcaf3e","#f57900","#ce5c00","#729fcf","#3465a4","#204a87","#888a85","#ad7fa8","#75507b","#5c3566","#ef2929","#cc0000","#a40000","#222222"],l=function(){return _.sample(t)},c=function(){return _.clone(t)},u=function(t,e,r){var n,i;for(r||(r=1),i=[],n=null;n=e.exec(t);)r===-1?i.push(n):i.push(n[r]);return i},S=function(t,e){var r;return r=e-t,t+Math.floor(Math.random()*(r+1))},y=function(t){var e;return e=t,e=e.replace("Á","A").replace("Ä","A").replace("À","A"),e=e.replace("É","E").replace("Ë","E").replace("È","E"),e=e.replace("Í","I").replace("Ï","I").replace("Ì","I"),e=e.replace("Ó","O").replace("Ö","O").replace("Ò","O"),e=e.replace("Ú","U").replace("Ü","U").replace("Ù","U")},C=this.taiga,C.addClass=e,C.nl2br=v,C.bindMethods=r,C.bindOnce=n,C.mixOf=m,C.trim=O,C.slugify=I,C.unslugify=M,C.toggleText=A,C.groupBy=p,C.timeout=P,C.cancelTimeout=i,C.scopeDefer=k,C.toString=w,C.joinStr=g,C.truncate=R,C.debounce=o,C.debounceLeading=s,C.startswith=T,C.sizeFormat=$,C.stripTags=E,C.replaceTags=j,C.defineImmutableProperty=a,C.isImage=f,C.isEmail=d,C.isPdf=h,C.patch=b,C.getRandomDefaultColor=l,C.getDefaulColorList=c,C.getMatches=u,C.randomInt=S,C.normalizeString=y}.call(this),function(){var t,e,r,n,i,o,s,a;o=this.taiga,n=this.taiga.groupBy,i=this.taiga.joinStr,a=this.taiga.trim,s=this.taiga.toString,e=function(){function t(){}return t.prototype.fillUsersAndRoles=function(t,e){var r,i;return r=_.filter(t,function(t){return function(t){return t.is_active}}(this)),this.scope.activeUsers=_.sortBy(r,"full_name_display"),this.scope.activeUsersById=n(this.scope.activeUsers,function(t){return t.id}),this.scope.users=_.sortBy(t,"full_name_display"),this.scope.usersById=n(t,function(t){return t.id}),this.scope.roles=_.sortBy(e,"order"),i=_(this.scope.project.members).map("role").uniq().value(),this.scope.computableRoles=_(e).filter("computable").filter(function(t){return _.includes(i,t.id)}).value()},t.prototype.loadUsersAndRoles=function(){var t;return t=this.q.all([this.rs.projects.usersList(this.scope.projectId),this.rs.projects.rolesList(this.scope.projectId)]),t.then(function(t){return function(e){var r,n;return n=e[0],r=e[1],t.fillUsersAndRoles(n,r),e}}(this))},t}(),o.PageMixin=e,t=function(){function t(){}return t.prototype.excludePrefix="exclude_",t.prototype.selectFilter=function(t,e,r,n){var s,c,u;if(null==r&&(r=!1),null==n&&(n="include"),u=this.location.search(),"exclude"===n&&(t=this.excludePrefix.concat(t)),void 0!==u[t]&&"page"!==t&&(s=_.map(o.toString(u[t]).split(","),function(t){return a(t)}),s.push(o.toString(e)),s=_.compact(s),e=i(",",_.uniq(s))),!this.location.isInCurrentRouteParams(t,e))return c=r?this.location:this.location.noreload(this.scope),c.search(t,e)},t.prototype.replaceFilter=function(t,e,r){var n;if(null==r&&(r=!1),!this.location.isInCurrentRouteParams(t,e))return n=r?this.location:this.location.noreload(this.scope),n.search(t,e)},t.prototype.replaceAllFilters=function(t,e){var r;return null==e&&(e=!1),r=e?this.location:this.location.noreload(this.scope),r.search(t)},t.prototype.unselectFilter=function(t,e,r,n){var s,c,u,l;if(null==r&&(r=!1),null==n&&(n="include"),u=this.location.search(),"exclude"===n&&(t=this.excludePrefix.concat(t)),void 0!==u[t])return void 0!==e&&null!==e||delete u[t],l=_.map(o.toString(u[t]).split(","),function(t){return a(t)}),c=_.reject(l,function(t){return t===o.toString(e)}),c=_.compact(c),e=_.isEmpty(c)?null:i(",",_.uniq(c)),s=r?this.location:this.location.noreload(this.scope),s.search(t,e)},t.prototype.applyStoredFilters=function(t,e){var r;return!(!_.isEmpty(this.location.search())||(r=this.getFilters(t,e),!Object.keys(r).length))&&(this.location.search(r),this.location.replace(),!0)},t.prototype.storeFilters=function(t,e,r){var n,i;return i=t+":"+r,n=o.generateHash([t,i]),this.storage.set(n,e)},t.prototype.getFilters=function(t,e){var r,n;return n=t+":"+e,r=o.generateHash([t,n]),this.storage.get(r)||{}},t.prototype.formatSelectedFilters=function(t,e,r,n){var i,o,s,a,c;return null==n&&(n="include"),a=r.split(","),s=_.filter(e,function(t){return a.indexOf(_.toString(t.id))!==-1}),o=_.filter(a,function(t){return!_.find(s,function(e){return _.toString(e.id)===t})}),i=_.map(o,function(e){return{id:e,key:t+":"+e,dataType:t,name:e,mode:n}}),c=_.map(s,function(e){return{id:e.id,key:t+":"+e.id,dataType:t,name:e.name,color:e.color,mode:n}}),i.concat(c)},t}(),o.FiltersMixin=t,r=function(){function t(){}return t.prototype.excludePrefix="exclude_",t.prototype.filterCategories=["tags","status","assigned_users","assigned_to","owner","epic","role"],t.prototype.changeQ=function(t){return this.replaceFilter("q",t),this.filtersReloadContent(),this.generateFilters()},t.prototype.removeFilter=function(t){return this.unselectFilter(t.dataType,t.id,!1,t.mode),this.filtersReloadContent(),this.generateFilters()},t.prototype.addFilter=function(t){return this.selectFilter(t.category.dataType,t.filter.id,!1,t.mode),this.filtersReloadContent(),this.generateFilters()},t.prototype.selectCustomFilter=function(t){return this.replaceAllFilters(t.filter),this.filtersReloadContent(),this.generateFilters()},t.prototype.saveCustomFilter=function(t){var e,r,n,i,o,s,a;for(r={},a=this.location.search(),s=this.filterCategories,n=0,o=s.length;n0}),a.assigned_users=_.map(s.assigned_users,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.full_name||"Unassigned",t}),a.assigned_to=_.map(s.assigned_to,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.full_name||"Unassigned",t}),a.role=_.map(s.roles,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.name||"Unassigned",t}),a.owner=_.map(s.owners,function(t){return t.id=t.id.toString(),t.name=t.full_name,t}),a.epic=_.map(s.epics,function(t){return t.id?(t.id=t.id.toString(),t.name="#"+t.ref+" "+t.subject):(t.id="null",t.name="Not in an epic"),t}),t.selectedFilters=[],l=t.filterCategories,c=0,u=l.length;c-1,{i18n:{previousMonth:t.instant("COMMON.PICKERDATE.PREV_MONTH"),nextMonth:t.instant("COMMON.PICKERDATE.NEXT_MONTH"),months:[t.instant("COMMON.PICKERDATE.MONTHS.JAN"),t.instant("COMMON.PICKERDATE.MONTHS.FEB"),t.instant("COMMON.PICKERDATE.MONTHS.MAR"),t.instant("COMMON.PICKERDATE.MONTHS.APR"),t.instant("COMMON.PICKERDATE.MONTHS.MAY"),t.instant("COMMON.PICKERDATE.MONTHS.JUN"),t.instant("COMMON.PICKERDATE.MONTHS.JUL"),t.instant("COMMON.PICKERDATE.MONTHS.AUG"),t.instant("COMMON.PICKERDATE.MONTHS.SEP"),t.instant("COMMON.PICKERDATE.MONTHS.OCT"),t.instant("COMMON.PICKERDATE.MONTHS.NOV"),t.instant("COMMON.PICKERDATE.MONTHS.DEC")],weekdays:[t.instant("COMMON.PICKERDATE.WEEK_DAYS.SUN"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.MON"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.TUE"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.WED"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.THU"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.FRI"),t.instant("COMMON.PICKERDATE.WEEK_DAYS.SAT")],weekdaysShort:[t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI"),t.instant("COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT")]},isRTL:n,firstDay:parseInt(t.instant("COMMON.PICKERDATE.FIRST_DAY_OF_WEEK"),10),format:t.instant("COMMON.PICKERDATE.FORMAT")}}}},g.factory("tgDatePickerConfigService",["$translate","$tgConfig","$tgAuth",s]),p=function(t,e){var r;return r=function(){return t.getSelection?t.getSelection().toString():e.selection?e.selection.createRange().text:""},{get:r}},g.factory("$selectedText",["$window","$document",p]),n=function(t){var e,r;return r=function(t,e,r){if(e&&r&&e.get("my_permissions").indexOf(r)>-1)return t.removeClass("hidden")},e=function(e,n,i){var o,s,a;return n.addClass("hidden"),o=i.tgCheckPermission,a=e.$watch(function(){return t.project},function(){if(t.project)return r(n,t.project,o),a()}),s=i.$observe("tgCheckPermission",function(e){if(e)return r(n,t.project,e),s()}),e.$on("$destroy",function(){return n.off()})},{link:e}},n.$inject=["tgProjectService"],g.directive("tgCheckPermission",n),i=function(){var t,e;return e="tgClassPermission",t=function(t,r,n){var i,o,s;return i=function(t,e,n){var i;return i="!"===n[0],i&&(n=n.slice(1)),i&&t.my_permissions.indexOf(n)===-1?r.addClass(e):i||t.my_permissions.indexOf(n)===-1?r.removeClass(e):r.addClass(e)},o=function(r){var o,a,c,u;if(r){s(),a=t.$eval(n[e]),u=[];for(o in a)c=a[o],u.push(i(r,o,c));return u}},s=t.$watch("project",o)},{link:t}},g.directive("tgClassPermission",i),t=function(){var t,e,r,n;return e=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,r=function(t){return function(t){var i;if(i=n.shift(),i(),n.length)return e(r)}}(this),n=[],t=function(){var t,i,o,s;for(s=[],i=0,o=arguments.length;i-1?t.resolve("project-backlog",r):e.is_kanban_activated&&e.my_permissions.indexOf("view_us")>-1?t.resolve("project-kanban",r):e.is_wiki_activated&&e.my_permissions.indexOf("view_wiki_pages")>-1?t.resolve("project-wiki",r):e.is_issues_activated&&e.my_permissions.indexOf("view_issues")>-1?t.resolve("project-issues",r):t.resolve("project",r)},{get:e}},g.factory("$projectUrl",["$tgNavUrls",c]),u=function(t){var e,r,n;return e=t.defer(),e.resolve(),r=e.promise,n={bindAdd:function(t){return function(e){return function(){var n;return n=1<=arguments.length?v.call(arguments,0):[],r=r.then(function(){return e.apply(t,n)})}}}(this),add:function(t){return function(t){return r=r?r.then(t):t(),n}}(this)}},g.factory("$tgQqueue",["$q",u]),l=function(t){function e(t,e,r,n){this.qqueue=t,this.repo=e,this.q=r,this.model=n}return y(e,t),e.$inject=["$tgQqueue","$tgRepo","$q","$tgModel"],e.prototype.setObject=function(t,e){this.scope=t,this.prop=e},e.prototype.clone=function(){var t,e;return t=_.cloneDeep(this.scope[this.prop]._attrs),e=this.model.make_model(this.scope[this.prop]._name,t)},e.prototype.getObj=function(){return this.scope[this.prop]},e.prototype.save=function(t){var e;return e=this.q.defer(),this.qqueue.add(function(r){return function(){var n,i,o,s,a;return s=r.getObj(),i=s.comment,s.comment="",n=r.clone(),o=_.omit(s._modifiedAttrs,["version"]),n=_.assign(n,o),t(n),i.length&&(n.comment=i),a=function(){return r.scope[r.prop]=n,e.resolve.apply(null,arguments)},r.repo.save(n).then(a,e.reject)}}(this)),e.promise},e}(m.Service),g.service("$tgQueueModelTransformation",l),f=function(t){return{get:function(e){return function(e,r){var n;return null==r&&(r=!1),n=t.get(e),r&&(n=_.template(n)),n}}(this)}},g.factory("$tgTemplate",["$templateCache",f]),r=function(){var t;return t="",{template:t}},g.directive("tgCapslock",[r]),a=function(){var t,e;return e='\n \n',t=function(t,e,r){},{scope:{onClose:"&"},link:t,template:e}},g.directive("tgLightboxClose",[a]),d=function(){var t;return t='\n \n {{svgTitle}}\n {{svgTitleTranslate | translate: svgTitleTranslateValues}}\n \n',{scope:{svgIcon:"@",svgTitle:"@",svgTitleTranslate:"@",svgTitleTranslateValues:"=",svgFill:"="},template:t}},g.directive("tgSvg",[d]),e=function(t,e,r){return{restrict:"A",link:function(r,n,i){var o;return i.ngShow?(o=e(i.ngShow),r.$watch(o,function(e){if(e===!0)return t(function(){return n[0].focus()})})):t(function(){return n[0].focus()})}}},g.directive("tgAutofocus",["$timeout","$parse","animationFrame",e]),g.directive("tgPreloadImage",function(){var t,e,r;return e="loading...",r="
    \n \n
    ",t=function(t,e){var r;return r=new Image,r.onload=e,r.src=t,r},{template:r,transclude:!0,replace:!0,link:function(r,n,i){var o,s,a;return o=n.find("img:last"),a=null,s=function(){if(n.find(".loading-spinner").remove(),o.show(),a)return clearTimeout(a),a=null},i.$observe("preloadSrc",function(r){return a&&clearTimeout(a),n.find(".loading-spinner").remove(),a=setTimeout(function(){return n.prepend(e)},200),o.hide(),t(r,s)})}}}),o=function(){var t;return t=function(t,e,r){return e.on("click",function(t){if(t.ctrlKey||t.metaKey)return t.preventDefault()})},{link:t}},g.directive("tgCtrlClickDisable",o)}.call(this),function(){var t,e,r,n,i,o,s,a,c;a=this.taiga,o=this.taiga.mixOf,c=this.taiga.toString,i=this.taiga.joinStr,n=this.taiga.groupBy,r=this.taiga.bindOnce,e=this.taiga.bindMethods,s=angular.module("taigaCommon"),t=function(){function t(t,e,r,n,i){this.params=t,this.repo=e,this.projectService=r,this.navurls=n,this.location=i,this.repo.resolve({pslug:this.params.pslug,ref:this.params.ref}).then(function(t){return function(e){var r;return e.issue?r=t.navurls.resolve("project-issues-detail",{project:t.projectService.project.get("slug"),ref:t.params.ref}):e.task?r=t.navurls.resolve("project-tasks-detail",{project:t.projectService.project.get("slug"),ref:t.params.ref}):e.us?r=t.navurls.resolve("project-userstories-detail",{project:t.projectService.project.get("slug"),ref:t.params.ref}):e.epic?r=t.navurls.resolve("project-epics-detail",{project:t.projectService.project.get("slug"),ref:t.params.ref}):e.wikipage&&(r=t.navurls.resolve("project-wiki-page",{project:t.projectService.project.get("slug"),slug:t.params.ref})),t.location.path(r)}}(this))}return t.$inject=["$routeParams","$tgRepo","tgProjectService","$tgNavUrls","$location"],t}(),s.controller("DetailController",t)}.call(this),function(){var t;t=angular.module("taigaEpics",[])}.call(this),function(){var t,e,r,n,i,o,s=function(t,e){return function(){return t.apply(e,arguments)}};o=this.taiga,i=this.taiga.startswith,r=this.taiga.bindMethods,n=angular.module("taigaEvents",[]),e=function(){function t(t,e,n,i,o,a){this.win=t,this.log=e,this.config=n,this.auth=i,this.liveAnnouncementService=o,this.rootScope=a,this.processMessage=s(this.processMessage,this),r(this)}return t.prototype.initialize=function(t){if(this.sessionId=t,this.subscriptions={},this.connected=!1,this.error=!1,this.pendingMessages=[],this.missedHeartbeats=0,this.heartbeatInterval=null,void 0===this.win.WebSocket)return this.log.info("WebSockets not supported on your browser")},t.prototype.setupConnection=function(){var t,e,r,n;if(this.stopExistingConnection(),n=this.config.get("eventsUrl"))return i(n,"ws:")||i(n,"wss:")||(t=this.win.location,r="https:"===t.protocol?"wss:":"ws:",e=_.trimStart(n,"/"),n=r+"//"+t.host+"/"+e),this.error=!1,this.ws=new this.win.WebSocket(n),this.ws.addEventListener("open",this.onOpen),this.ws.addEventListener("message",this.onMessage),this.ws.addEventListener("error",this.onError),this.ws.addEventListener("close",this.onClose)},t.prototype.stopExistingConnection=function(){if(void 0!==this.ws)return this.ws.removeEventListener("open",this.onOpen),this.ws.removeEventListener("close",this.onClose),this.ws.removeEventListener("error",this.onError),this.ws.removeEventListener("message",this.onMessage),this.stopHeartBeatMessages(),this.ws.close(),delete this.ws},t.prototype.notifications=function(){return this.subscribe(null,"notifications",function(t){return function(e){return t.liveAnnouncementService.show(e.title,e.desc),t.rootScope.$digest()}}(this))},t.prototype.liveNotifications=function(){var t,e;if(null!=this.auth.userData)return e=this.auth.userData.get("id"),t=function(t){return function(){return t.subscribe(null,"live_notifications."+e,function(t){var e;if(e=new Notification(t.title,{icon:"/"+window._version+"/images/favicon.png",body:t.body,tag:t.id}),e.onshow=function(){if(t.timeout&&t.timeout>0)return setTimeout(function(){return e.close()},t.timeout)},t.url)return e.onclick=function(){return window.open(t.url)}})}}(this),Notification?"granted"===Notification.permission?t():"denied"!==Notification.permission?Notification.requestPermission(function(e){return function(e){if("granted"===e)return t()}}(this)):void 0:console.log("This browser does not support desktop notification")},t.prototype.webNotifications=function(){var t,e,r;if(null!=this.auth.userData)return r=this.auth.userData.get("id"),e="web_notifications."+r,t=o.randomInt(700,1e3),this.subscribe(null,e,function(t){return function(e){return t.rootScope.$broadcast("notifications:new")}}(this))},t.prototype.startHeartBeatMessages=function(){var t,e,r;if(!this.heartbeatInterval)return e=this.config.get("eventsMaxMissedHeartbeats",5),t=this.config.get("eventsHeartbeatIntervalTime",6e4),r=this.config.get("eventsReconnectTryInterval",1e4),this.missedHeartbeats=0,this.heartbeatInterval=setInterval(function(t){return function(){var r;try{if(t.missedHeartbeats>=e)throw new Error("Too many missed heartbeats PINGs.");return t.missedHeartbeats++,t.sendMessage({cmd:"ping"}),t.log.debug("HeartBeat send PING")}catch(n){return r=n,t.log.error("HeartBeat error: "+r.message),t.setupConnection()}}}(this),t),this.log.debug("HeartBeat enabled")},t.prototype.stopHeartBeatMessages=function(){if(this.heartbeatInterval)return clearInterval(this.heartbeatInterval),this.heartbeatInterval=null,this.log.debug("HeartBeat disabled")},t.prototype.processHeartBeatPongMessage=function(t){return this.missedHeartbeats=0,this.log.debug("HeartBeat recived PONG")},t.prototype.serialize=function(t){return _.isObject(t)?JSON.stringify(t):t},t.prototype.sendMessage=function(t){var e,r,n,i,o;if(this.pendingMessages.push(t),this.connected){for(n=_.map(this.pendingMessages,this.serialize),this.pendingMessages=[],o=[],e=0,r=n.length;e\n
    <%- name %>
    '),i=function(i,c,u){var l,p,d,f,h;return h=function(t){var e,o,a;return o={name:r.instant("COMMON.ASSIGNED_TO.NOT_ASSIGNED")},a=i.usersById[t.assigned_to],e=n.getAvatar(a),o.imgurl=e.url,o.bg=e.bg,a&&(o.name=a.full_name_display),c.find(".avatar").html(s(o)),c.find(".task-assignedto").attr("title",o.name)},l=c.controller(),f=i.$eval(u.tgRelatedTaskAssignedToInlineEdition),d=i.$eval(u.notAutoSave),p=!d,i.$watch(u.tgRelatedTaskAssignedToInlineEdition,function(){return f=i.$eval(u.tgRelatedTaskAssignedToInlineEdition),h(f)}),h(f),c.on("click",".task-assignedto",function(t){return e.$broadcast("assigned-to:add",f)}),a.bindOnce(i,"project",function(t){if(t.my_permissions.indexOf("modify_task")===-1)return c.unbind("click"),c.find("a").addClass("not-clickable")}),i.$on("assigned-to:added",o(2e3,function(e){return function(e,r,n){if(n.id===f.id)return n.assigned_to=r,p&&t.save(n).then(function(){return i.$emit("related-tasks:assigned-to-changed")}),h(n)}}(this))),i.$on("$destroy",function(){return c.off()})},{link:i}},s.directive("tgRelatedTaskAssignedToInlineEdition",["$tgRepo","$rootScope","$translate","tgAvatarService",t])}.call(this),function(){var t,e,r,n,i,o,s=function(t,e){function r(){this.constructor=t}for(var n in e)a.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},a={}.hasOwnProperty;i=this.taiga,t=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return s(e,t),e}(i.Service),o={auth:"/auth","auth-register":"/auth/register",invitations:"/invitations",users:"/users",by_username:"/users/by_username","users-password-recovery":"/users/password_recovery","users-change-password-from-recovery":"/users/change_password_from_recovery","users-change-password":"/users/change_password","users-change-email":"/users/change_email","users-cancel-account":"/users/cancel","users-export":"/users/export","user-stats":"/users/%s/stats","user-liked":"/users/%s/liked","user-voted":"/users/%s/voted","user-watched":"/users/%s/watched","user-contacts":"/users/%s/contacts","user-me":"/users/me",permissions:"/permissions","notify-policies":"/notify-policies",notifications:"/web-notifications","user-project-settings":"/user-project-settings","user-storage":"/user-storage",memberships:"/memberships","bulk-create-memberships":"/memberships/bulk_create",roles:"/roles",permissions:"/permissions",resolver:"/resolver",projects:"/projects","project-templates":"/project-templates","project-modules":"/projects/%s/modules","bulk-update-projects-order":"/projects/bulk_update_order","project-like":"/projects/%s/like","project-unlike":"/projects/%s/unlike","project-watch":"/projects/%s/watch","project-unwatch":"/projects/%s/unwatch","project-contact":"contact","project-transfer-validate-token":"/projects/%s/transfer_validate_token","project-transfer-accept":"/projects/%s/transfer_accept","project-transfer-reject":"/projects/%s/transfer_reject","project-transfer-request":"/projects/%s/transfer_request","project-transfer-start":"/projects/%s/transfer_start","epic-statuses":"/epic-statuses","userstory-statuses":"/userstory-statuses","userstory-due-dates":"/userstory-due-dates","userstory-due-dates-create-default":"/userstory-due-dates/create_default",points:"/points","task-statuses":"/task-statuses","task-due-dates":"/task-due-dates","task-due-dates-create-default":"/task-due-dates/create_default","issue-statuses":"/issue-statuses","issue-due-dates":"/issue-due-dates","issue-due-dates-create-default":"/issue-due-dates/create_default","issue-types":"/issue-types",priorities:"/priorities",severities:"/severities",milestones:"/milestones","move-userstories-to-milestone":"/milestones/%s/move_userstories_to_sprint","move-tasks-to-milestone":"/milestones/%s/move_tasks_to_sprint","move-issues-to-milestone":"/milestones/%s/move_issues_to_sprint",epics:"/epics","epic-upvote":"/epics/%s/upvote","epic-downvote":"/epics/%s/downvote","epic-watch":"/epics/%s/watch","epic-unwatch":"/epics/%s/unwatch","epic-related-userstories":"/epics/%s/related_userstories","epic-related-userstories-bulk-create":"/epics/%s/related_userstories/bulk_create",userstories:"/userstories","bulk-create-us":"/userstories/bulk_create","bulk-update-us-backlog-order":"/userstories/bulk_update_backlog_order","bulk-update-us-milestone":"/userstories/bulk_update_milestone","bulk-update-us-miles-order":"/userstories/bulk_update_sprint_order","bulk-update-us-kanban-order":"/userstories/bulk_update_kanban_order","userstories-filters":"/userstories/filters_data","userstory-upvote":"/userstories/%s/upvote","userstory-downvote":"/userstories/%s/downvote","userstory-watch":"/userstories/%s/watch","userstory-unwatch":"/userstories/%s/unwatch",tasks:"/tasks","bulk-create-tasks":"/tasks/bulk_create","bulk-update-task-taskboard-order":"/tasks/bulk_update_taskboard_order","bulk-update-task-milestone":"/tasks/bulk_update_milestone","task-upvote":"/tasks/%s/upvote","task-downvote":"/tasks/%s/downvote","task-watch":"/tasks/%s/watch","task-unwatch":"/tasks/%s/unwatch","task-filters":"/tasks/filters_data",issues:"/issues","bulk-create-issues":"/issues/bulk_create","bulk-update-issue-milestone":"/issues/bulk_update_milestone","issues-filters":"/issues/filters_data","issue-upvote":"/issues/%s/upvote","issue-downvote":"/issues/%s/downvote","issue-watch":"/issues/%s/watch","issue-unwatch":"/issues/%s/unwatch",wiki:"/wiki","wiki-restore":"/wiki/%s/restore","wiki-links":"/wiki-links","history/epic":"/history/epic","history/us":"/history/userstory","history/issue":"/history/issue","history/task":"/history/task","history/wiki":"/history/wiki","attachments/epic":"/epics/attachments","attachments/us":"/userstories/attachments","attachments/issue":"/issues/attachments","attachments/task":"/tasks/attachments","attachments/wiki_page":"/wiki/attachments","custom-attributes/epic":"/epic-custom-attributes","custom-attributes/userstory":"/userstory-custom-attributes","custom-attributes/task":"/task-custom-attributes","custom-attributes/issue":"/issue-custom-attributes","custom-attributes-values/epic":"/epics/custom-attributes-values","custom-attributes-values/userstory":"/userstories/custom-attributes-values","custom-attributes-values/task":"/tasks/custom-attributes-values","custom-attributes-values/issue":"/issues/custom-attributes-values",webhooks:"/webhooks","webhooks-test":"/webhooks/%s/test",webhooklogs:"/webhooklogs","webhooklogs-resend":"/webhooklogs/%s/resend","epics-csv":"/epics/csv?uuid=%s","userstories-csv":"/userstories/csv?uuid=%s","tasks-csv":"/tasks/csv?uuid=%s","issues-csv":"/issues/csv?uuid=%s","timeline-profile":"/timeline/profile","timeline-user":"/timeline/user","timeline-project":"/timeline/project",search:"/search",exporter:"/exporter",importer:"/importer/load_dump",feedback:"/feedback",locales:"/locales",applications:"/applications","application-tokens":"/application-tokens","stats-discover":"/stats/discover","importers-trello-auth-url":"/importers/trello/auth_url","importers-trello-authorize":"/importers/trello/authorize","importers-trello-list-projects":"/importers/trello/list_projects","importers-trello-list-users":"/importers/trello/list_users","importers-trello-import-project":"/importers/trello/import_project","importers-jira-auth-url":"/importers/jira/auth_url","importers-jira-authorize":"/importers/jira/authorize","importers-jira-list-projects":"/importers/jira/list_projects","importers-jira-list-users":"/importers/jira/list_users","importers-jira-import-project":"/importers/jira/import_project","importers-github-auth-url":"/importers/github/auth_url","importers-github-authorize":"/importers/github/authorize","importers-github-list-projects":"/importers/github/list_projects","importers-github-list-users":"/importers/github/list_users","importers-github-import-project":"/importers/github/import_project","importers-asana-auth-url":"/importers/asana/auth_url","importers-asana-authorize":"/importers/asana/authorize","importers-asana-list-projects":"/importers/asana/list_projects","importers-asana-list-users":"/importers/asana/list_users","importers-asana-import-project":"/importers/asana/import_project"},r=function(t,e){return t.debug("Initialize api urls"),e.update(o)},e=function(t,e){var r,n,i,o,s;for(t.debug("Initialize resources"),o=_.toArray(arguments).slice(2),s=[],r=0,n=o.length;rn){n=a.length,s.name=i,s.value=a;break}return 0===n?s:s},h=function(t){var e,r,n;r=[];for(e in t)n=t[e],m.find("li."+e).show(),r.push(m.find("li."+e+" .num").html(n.length));return r},f=function(t){return m.find("a.active").removeClass("active"),m.find("li."+t.name+" a").addClass("active"),u=!1,c=t.name},v={epics:r.get("search-epics"),issues:r.get("search-issues"),tasks:r.get("search-tasks"),userstories:r.get("search-userstories"),wikipages:r.get("search-wikipages")},g=function(r){var i,o,s,a,c;return o=n.find(".search-result-table").children(),s=o.scope(),s&&(s.$destroy(),o.remove()),a=t.$new(),a[r.name]=r.value,c=angular.element.parseHTML(l(v[r.name])),i=e(c)(a),n.find(".search-result-table").html(i)},t.$watch("searchResults",function(t){var e;if(p=t)return e=d(t),h(t),g(e),f(e)}),t.$watch("searchTerm",function(t){return void 0!==t&&i.search("text",t),o.trackPage(i.url(),"Search")}),n.on("click",".search-filter li > a",function(e){var r,n,i,o;return e.preventDefault(),o=angular.element(e.currentTarget),i=o.parent().data("name"),n=p?p[i]:[],r={name:i,value:n},t.$apply(function(){return g(r),f(r)})})},s=function(t,e,r){var i,o;return i=e.controller(),a(t,e,r,i),o=n.text,t.$watch("projectId",function(e){if(null!=e)return t.searchTerm=o})},{link:s}},c.directive("tgSearch",["$log","$compile","$templateCache","$routeParams","$tgLocation","$tgAnalytics",r])}.call(this),function(){var t;t=angular.module("taigaTaskboard",[])}.call(this),function(){var t;t=angular.module("taigaTasks",[])}.call(this),function(){var t;t=angular.module("taigaTeam",[])}.call(this),function(){var t;t=angular.module("taigaUserSettings",[])}.call(this),function(){var t;t=angular.module("taigaUserStories",[])}.call(this),function(){var t;t=angular.module("taigaWiki",[])}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=this.taiga,e=angular.module("taigaCommon"),t=function(t){function e(t,e,r,n,i,o){var s;this.rootscope=t,this.log=e,this.config=r,this.win=n,this.doc=i,this.location=o,this.initialized=!1,s=this.config.get("analytics",{}),this.accountId=s.accountId,this.pageEvent=s.pageEvent||"$routeChangeSuccess",this.trackRoutes=s.trackRoutes||!0,this.ignoreFirstPageLoad=s.ignoreFirstPageLoad||!1}return n(e,t),e.$inject=["$rootScope","$log","$tgConfig","$window","$document","$location"],e.prototype.initialize=function(){return this.accountId?(this.injectAnalytics(),this.win.ga("create",this.accountId,"auto"),this.win.ga("require","ec"),this.win.ga("require","displayfeatures"),this.trackRoutes&&!this.ignoreFirstPageLoad&&this.win.ga("send","pageview",this.getUrl()),this.trackRoutes&&this.rootscope.$on(this.pageEvent,function(t){return function(){return t.trackPage(t.getUrl(),"Taiga")}}(this)),this.initialized=!0,this.setUserId()):void this.log.debug("Analytics: no acount id provided. Disabling.")},e.prototype.setUserId=function(){var t,e;if(this.initialized&&this.win.ga)return this.win.ga("set","userId",null!=(t=this.rootscope)&&null!=(e=t.user)?e.uuid:void 0)},e.prototype.getUrl=function(){return this.location.path()},e.prototype.injectAnalytics=function(){var t;return(t=function(t,e,r,n,i,o,s){t.GoogleAnalyticsObject=i,t[i]=t[i]||function(){(t[i].q=t[i].q||[]).push(arguments)},t[i].l=1*new Date,o=e.createElement(r),s=e.getElementsByTagName(r)[0],o.async=1,o.src=n,s.parentNode.insertBefore(o,s)})(window,document,"script","//www.google-analytics.com/analytics.js","ga")},e.prototype.trackPage=function(t,e){if(this.initialized&&this.win.ga)return e=e||this.doc[0].title,this.win.ga("send","pageview",{page:t,title:e})},e.prototype.trackEvent=function(t,e,r,n){if(this.initialized&&this.win.ga)return this.win.ga("send","event",t,e,r,n)},e.prototype.ecViewPlan=function(t){if(this.initialized&&this.win.ga)return this.win.ga("ec:addProduct",{id:t.plan_id,name:t.name,category:"plans",quantity:1,position:1}),this.win.ga("ec:setAction","detail"),this.trackEvent("ecommerce","view-product-detail",t.name,t.plan_id)},e.prototype.ecClickPlan=function(t){if(this.initialized&&this.win.ga)return this.win.ga("ec:addProduct",{id:t.plan_id,name:t.name,category:"plans",quantity:1,position:1}),this.win.ga("ec:setAction","click"),this.trackEvent("ecommerce","click-product",t.name,t.plan_id)},e.prototype.ecListPlans=function(t,e){var r,n,i,o,s;if(o=t[0],this.initialized&&this.win.ga){for(s=1,r=0,n=o.length;r"+t+""))}),u.on("click.confirm-dialog","a.button-green",i(2e3,function(t){return function(e){var r,n;return e.preventDefault(),n=angular.element(e.currentTarget),r=t.loading().target(n).start(),c.resolve({selected:a.val(),finish:function(e){if(null==e&&(e=!0),r.finish(),e)return t.hide(u)}})}}(this))),u.on("click.confirm-dialog",".button-red",function(t){return function(e){return e.preventDefault(),c.reject(),t.hide(u)}}(this)),this.lightboxService.open(u),c.promise},o.prototype.error=function(t){var e,r;return e=this.q.defer(),r=angular.element(".lightbox-generic-error"),r.find(".title").html(t),r.on("click.confirm-dialog",".button-green",function(t){return function(n){return n.preventDefault(),e.resolve(),t.hide(r)}}(this)),r.on("click.confirm-dialog",".close",function(t){return function(n){return n.preventDefault(),e.resolve(),t.hide(r)}}(this)),this.lightboxService.open(r),e.promise},o.prototype.success=function(t,e,r,n){var i,o,a,c,u;return i=this.q.defer(),a=angular.element(".lightbox-generic-success"),a.find("img").remove(),a.find("svg").remove(),r&&("img"===r.type?o=$("").addClass("lb-icon").attr("src",r.name):"svg"===r.type&&(o=document.createElement("div"),s.addClass(o,"icon"),s.addClass(o,r.name),s.addClass(o,"lb-icon"),c=document.createElementNS("http://www.w3.org/2000/svg","svg"),u=document.createElementNS("http://www.w3.org/2000/svg","use"),u.setAttributeNS("http://www.w3.org/1999/xlink","href","#"+r.name),o.appendChild(c).appendChild(u)),o&&a.find("section").prepend(o)),t&&a.find(".title").html(t),e&&a.find(".message").html(e),n&&(a.find(".button-green").html(n),a.find(".button-green").attr("title",n)),a.on("click.confirm-dialog",".button-green",function(t){return function(e){return e.preventDefault(),i.resolve(),t.hide(a)}}(this)),a.on("click.confirm-dialog",".close",function(t){return function(e){return e.preventDefault(),i.resolve(),t.hide(a)}}(this)),this.lightboxService.open(a),i.promise},o.prototype.loader=function(t,e,r){var n;return null==r&&(r=!1),n=angular.element(".lightbox-generic-loading"),t&&n.find(".title").html(t),e&&n.find(".message").html(e),r&&n.find(".spin").removeClass("hidden"),{start:function(t){return function(){return t.lightboxService.open(n)}}(this),stop:function(t){return function(){return t.lightboxService.close(n)}}(this),update:function(t){return function(t,e,r,i){return e&&n.find(".title").html(e),r&&n.find(".message").html(r),i?(n.find(".spin").addClass("hidden"),n.find(".progress-bar-wrapper").removeClass("hidden"),n.find(".progress-bar-wrapper > .bar").width(i+"%"),n.find(".progress-bar-wrapper > span").html(i+"%").css("left",i-9+"%")):(n.find(".spin").removeClass("hidden"),n.find(".progress-bar-wrapper").addClass("hidden"))}}(this)}},o.prototype.notify=function(t,r,i,o){var s,c,u;if(u=".notification-message-"+t,c=angular.element(u),!c.hasClass("active"))return i?c.find("h4").html(i):c.find("h4").html(this.translate.instant(e[t].title)),r?c.find("p").html(r):c.find("p").html(this.translate.instant(e[t].message)),s=angular.element("body"),s.find(".notification-message .notification-light").removeClass("active").addClass("inactive"),s.find(u).removeClass("inactive").addClass("active"),this.tsem&&n(this.tsem),o||(o="error"===t||"light-error"===t?3500:1500),this.tsem=a(o,function(t){return function(){return s.find(u).removeClass("active").addClass("inactive").one("animationend",function(){return $(this).removeClass("inactive")}),delete t.tsem}}(this)),c.on("click",".icon-close, .close",function(t){return function(t){return s.find(u).removeClass("active").addClass("inactive")}}(this))},o}(s.Service),o=angular.module("taigaCommon"),o.service("$tgConfirm",t)}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y=function(t,e){function r(){this.constructor=t}for(var n in e)b.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},b={}.hasOwnProperty;v=this.taiga,d=this.taiga.bindMethods,f=this.taiga.bindOnce,h=this.taiga.debounce,g=v.generateHash,m=angular.module("taigaCommon"),u="text",c="url",s="multiline",i="date",p="url",o="dropdown",t="checkbox",a="number",l=[{key:u,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT"},{key:s,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI"},{key:i,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE"},{key:p,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL"},{key:c,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT"},{key:o,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DROPDOWN"},{key:t,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_CHECKBOX"},{key:a,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_NUMBER"}],r=function(t){function e(t,e,r,n,i,o){this.scope=t,this.rootscope=e,this.repo=r,this.rs=n,this.confirm=i,this.q=o,d(this),this.type=null,this.objectId=null,this.projectId=null,this.customAttributes=[],this.customAttributesValues=null}return y(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgResources","$tgConfirm","$q"],e.prototype.initialize=function(t,e){return this.project=this.scope.project,this.type=t,this.objectId=e,this.projectId=this.scope.projectId},e.prototype.loadCustomAttributesValues=function(){return this.objectId?this.rs.customAttributesValues[this.type].get(this.objectId).then(function(t){return function(e){return t.customAttributes=t.project[t.type+"_custom_attributes"],t.customAttributesValues=e,e}}(this)):this.customAttributesValues},e.prototype.getAttributeValue=function(t){var e;return e=_.clone(t,!1),e.value=this.customAttributesValues.attributes_values[t.id],e},e.prototype.updateAttributeValue=function(t){var e,r,n;return n=function(t){return function(){return t.rootscope.$broadcast("custom-attributes-values:edit")}}(this),r=function(t){return function(e){return t.confirm.notify("error"),t.q.reject()}}(this),e=_.clone(this.customAttributesValues.attributes_values,!0),e[t.id]=t.value,this.customAttributesValues.attributes_values=e,this.customAttributesValues.id=this.objectId,this.repo.save(this.customAttributesValues).then(n,r)},e}(v.Controller),n=function(t,e){var n,i,o,s;return o=t.get("custom-attributes/custom-attributes-values.html",!0),n=function(t){return g(["custom-attributes-collapsed",t])},i=function(t,r,i,o){var s,a,c;return s=o[0],a=o[1],c=n(i.type),t.collapsed=e.get(c)||!1,f(t,i.ngModel,function(t){return s.initialize(i.type,t.id),s.loadCustomAttributesValues()}),t.toggleCollapse=function(){return t.collapsed=!t.collapsed,e.set(c,t.collapsed)},t.$on("$destroy",function(){return r.off()})},s=function(t,e){return o({requiredEditionPerm:e.requiredEditionPerm})},{require:["tgCustomAttributesValues","ngModel"],controller:r,controllerAs:"ctrl",restrict:"AE",scope:!0,link:i,template:s}},m.directive("tgCustomAttributesValues",["$tgTemplate","$tgStorage","$translate",n]),e=function(e,r,n,s,c,u){var l,p,d;return p=e.get("custom-attributes/custom-attribute-value.html",!0),d=e.get("custom-attributes/custom-attribute-value-edit.html",!0),l=function(e,l,f,g){var m,v,y,b,S,j;return y=s.instant("COMMON.PICKERDATE.FORMAT"),b=function(t,r){var o,s,f,h,g,m;return null==r&&(r=!1),t.type===i&&t.value&&(m=moment(t.value,"YYYY-MM-DD").format(y)),m=t.type===a&&t.value?parseFloat(t.value):t.value,f=v(),o={id:t.id,name:t.name,description:t.description,value:m,type:t.type,isEditable:f},g=e.$new(),g.attributeHtml=u.getHTML(m),g.extra=t.extra,g.model=m,!f||!r&&m?(h=p(o),h=n(h)(g),l.html(h)):(h=d(o),h=n(h)(g),l.html(h),t.type===i?(s=c.get(),_.merge(s,{field:l.find("input[name=value]")[0],onSelect:function(t){return function(t){var e;return e=t}}(this),onOpen:function(t){return function(){if("undefined"!=typeof selectedDate&&null!==selectedDate)return l.picker.setDate(selectedDate)}}(this)}),l.picker=new Pikaday(s)):void 0)},v=function(){var t,r;return t=e.project.my_permissions,r=f.requiredEditionPerm,t.indexOf(r)>-1},e.saveCustomRichText=function(t){return function(t,e){return m.value=t,g.updateAttributeValue(m).then(function(){return e(),b(m,!1)})}}(this),e.cancelCustomRichText=function(t){return function(){return b(m,!1),null}}(this),j=h(2e3,function(r){return function(r){var n,s;if(r.preventDefault(),n=l.find("form").checksley(),n.validate())return m.type===o?(s=l.find("select[name='value']"),m.value=s.val()):m.type===t?(s=l.find("input[name=value]"),m.value=s[0].checked):(s=l.find("input[name=value], textarea[name='value']"),m.value=s.val(),m.type===i&&moment(m.value,y).isValid()&&(m.value=moment(m.value,y).format("YYYY-MM-DD")),m.type===a&&(m.value=parseFloat(m.value))),e.$apply(function(){return g.updateAttributeValue(m).then(function(){return b(m,!1)})})}}(this)),S=function(){return l.find("input[name='value'], textarea[name='value']").focus().select()},m=e.$eval(f.tgCustomAttributeValue),null!==m.value&&void 0!==m.value||(m.value=""),e.customAttributeValue=m,b(m),l.on("click",".js-value-view-mode span a",function(t){return t.stopPropagation()}),l.on("click",".js-value-view-mode",function(){if(v()&&!r.get().length)return b(m,!0),S()}),l.on("click",".js-edit-description",function(t){return t.preventDefault(),b(m,!0),S()}),l.on("keyup","input[name=value], textarea[name='value']",function(t){return 13===t.keyCode&&"textarea"!==t.currentTarget.type?j(t):27===t.keyCode?b(m,!1):void 0}),l.on("submit","form",j),l.on("click",".js-save-description",j),e.$on("$destroy",function(){return l.off()})},{link:l,require:"^tgCustomAttributesValues",restrict:"AE"}},m.directive("tgCustomAttributeValue",["$tgTemplate","$selectedText","$compile","$translate","tgDatePickerConfigService","tgWysiwygService",e])}.call(this),function(){var t,e,r,n=function(t,e){return function(){return t.apply(e,arguments)}},i=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;r=this.taiga,e=angular.module("taigaCommon"),t=function(t){function e(){this.replaceEmojiNameByHtmlImgs=n(this.replaceEmojiNameByHtmlImgs,this),this.replaceEmojiNameByImgs=n(this.replaceEmojiNameByImgs,this),this.replaceImgsByEmojiName=n(this.replaceImgsByEmojiName,this),this.getEmojiByName=n(this.getEmojiByName,this),this.getEmojiById=n(this.getEmojiById,this),this.searchByName=n(this.searchByName,this),this.emojis=_.map(r.emojis,function(t){return t.image="/"+window._version+"/emojis/"+t.image,t}),this.emojisById=_.keyBy(this.emojis,"id"),this.emojisByName=_.keyBy(this.emojis,"name")}return i(e,t),e.$inject=[],e.prototype.searchByName=function(t){return _.filter(this.emojis,function(e){return e.name.indexOf(t)!==-1})},e.prototype.getEmojiById=function(t){return this.emojisById[t]},e.prototype.getEmojiByName=function(t){return this.emojisByName[t]},e.prototype.replaceImgsByEmojiName=function(t){var e,n,i,o,s,a;for(i=r.getMatches(t,/emojis\/([^"]+).png"/gi),o=0,s=i.length;o]+>","g"),e=this.getEmojiById(n),t=t.replace(a,":"+e.name+":");return t},e.prototype.replaceEmojiNameByImgs=function(t){var e,n,i,o,s,a;for(i=r.getMatches(t,/:([\w +-]*):/g),o=0,s=i.length;o'));return t},e}(r.Service),e.service("$tgEmojis",t)}.call(this),function(){var t,e,r,n,i,o,s=function(t,e){return function(){return t.apply(e,arguments)}};o=this.taiga,n=this.taiga.groupBy,i=angular.module("taigaCommon"),e=function(t,e,r,n,i){var o;return o=function(e,r,o,s){return e.$watch(o.ngModel,function(o){var a;if(o)return a=t.create(r,o,e.project),a.onSelectedPointForRole=function(t,r,n){return o.points=n,a.render(),e.$apply(function(){return s.$setViewValue(o)})},a.render=function(){var t,r,o,s;return t={totalPoints:this.calculateTotalPoints(),roles:this.calculateRoles(),editable:this.isEditable,loading:!1},o="common/estimation/us-estimation-points-per-role.html",s=n.get(o,!0),r=s(t),r=i(r)(e),this.$el.html(r)},a.render()}),e.$on("$destroy",function(){return r.off()})},{link:o,restrict:"EA",require:"ngModel"}},i.directive("tgLbUsEstimation",["$tgEstimationsService","$rootScope","$tgRepo","$tgTemplate","$compile",e]),r=function(t,e,r,n,i,o,s){var a;return a=function(r,a,c,u){var l;return l=function(t){var e,r;return r=o.save(function(e){return function(e){return e.points=t,e}}(this)),e=function(t){return function(){return s.notify("error")}}(this),r.then(null,e)},r.$watchCollection(function(){return u.$modelValue&&u.$modelValue.points},function(){var o,s;if(s=u.$modelValue)return o=t.create(a,s,r.project),o.onSelectedPointForRole=function(t,r,n){return o.loading=t,o.render(),l(n).then(function(){return o.loading=!1,e.$broadcast("object:updated"),o.render()})},o.render=function(){var t,e,s,a;return t={totalPoints:this.calculateTotalPoints(),roles:this.calculateRoles(),editable:this.isEditable,loading:o.loading},s="common/estimation/us-estimation-points-per-role.html",a=n.get(s,!0),e=a(t),e=i(e)(r),this.$el.html(e)},o.render()}),r.$on("$destroy",function(){return a.off()})},{link:a,restrict:"EA",require:"ngModel"}},i.directive("tgUsEstimation",["$tgEstimationsService","$rootScope","$tgRepo","$tgTemplate","$compile","$tgQueueModelTransformation","$tgConfirm",r]),t=function(t,e,r,i,o){var a,c,u;return u=t.get("common/estimation/us-estimation-points.html",!0),a=function(){function t(t,e,r){this.$el=t,this.us=e,this.project=r,this.bindClickEvents=s(this.bindClickEvents,this),this.isEditable=this.project.my_permissions.indexOf("modify_us")!==-1,this.roles=this.project.roles,this.points=this.project.points,this.loading=!1,this.pointsById=n(this.points,function(t){return t.id}),this.onSelectedPointForRole=function(t,e){},this.render=function(){}}return t.prototype.save=function(t,n){var s;return s=i.defer(),o.add(function(t){return function(){var n,i;return i=function(){return s.resolve(),t.render()},n=function(){return r.notify("error"),t.us.revert(),t.render(),s.reject()},e.save(t.us).then(i,n)}}(this)),s.promise},t.prototype.calculateTotalPoints=function(){var t,e;return e=_.map(this.us.points,function(t){return function(e,r){var n;return null!=(n=t.pointsById[e])?n.value:void 0}}(this)),0===e.length?"?":(t=_.filter(e,function(t){return null!=t}),0===t.length?"?":_.reduce(t,function(t,e){return t+e}))},t.prototype.calculateRoles=function(){var t,e;return t=_.filter(this.project.roles,"computable"),e=_.map(t,function(t){return function(e){var r,n;return r=t.us.points[e.id],n=t.pointsById[r],e=_.clone(e,!0),e.points=null!=n&&null!=n.name?n.name:"?",e}}(this))},t.prototype.bindClickEvents=function(){return this.$el.on("click",".total.clickable",function(t){return function(e){var r,n;return e.preventDefault(),e.stopPropagation(),n=angular.element(e.currentTarget),r=n.data("role-id"),t.renderPointsSelector(r,n),n.siblings().removeClass("active"),n.addClass("active")}}(this)),this.$el.on("click",".point",function(t){return function(e){var r,n,i,o;return e.preventDefault(),e.stopPropagation(),o=angular.element(e.currentTarget),i=o.data("role-id"),r=o.data("point-id"),t.$el.find(".popover").popover().close(),n=_.clone(t.us.points,!0),n[i]=r,t.onSelectedPointForRole(i,r,n)}}(this))},t.prototype.renderPointsSelector=function(t,e){var r,n,i,o,s;if(o=_.map(this.points,function(e){return function(r){return r=_.clone(r,!0),r.selected=e.us.points[t]!==r.id,r}}(this)),i=5,r=_.some(o,function(t){return function(t){return t.name.length>i}}(this)),n=u({points:o,roleId:t,horizontal:r}),this.$el.find(".popover").popover().close(),this.$el.find(".pop-points-open").remove(),null!=e?this.$el.find(e).append(n):this.$el.append(n),this.$el.find(".pop-points-open").popover().open(function(){return $(this).removeClass("active").closest("li").removeClass("active")}),this.$el.find(".pop-points-open").show(),s=this.$el.find(".pop-points-open"),s.offset().top+s.height()>document.body.clientHeight)return s.addClass("pop-bottom")},t}(),c=function(t,e,r){var n;return t.unbind("click"),n=new a(t,e,r),n.isEditable&&n.bindClickEvents(),n},{create:c}},i.factory("$tgEstimationsService",["$tgTemplate","$tgRepo","$tgConfirm","$q","$tgQqueue",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h;l=this.taiga,s=angular.module("taigaCommon"),r=function(){return function(t,e){return t===[null,void 0]?e:t}},s.filter("default",r),h=function(t){return function(e){return e?t.instant("COMMON.YES"):t.instant("COMMON.NO")}},s.filter("yesNo",["$translate",h]),f=function(){return l.unslugify},s.filter("unslugify",f),a=function(){return function(t,e){return t?moment(t).format(e):""}},s.filter("momentFormat",a),c=function(){return function(t,e){return t?moment(t).fromNow(e||!1):""}},s.filter("momentFromNow",c),u=function(t){return function(){return t.taiga.sizeFormat}}(this),s.filter("sizeFormat",u),d=function(){var t,e;return e=function(t){return t.toJS()},t=_.memoize(e),function(e){return e instanceof Immutable.List?t(e):e}},s.filter("toMutable",d),t=function(t){return function(e,r){var n;return(null!=r?r.startsWith("#"):void 0)?(n=r.substr(1),_.filter(e,function(t){return function(t){return String(t.ref).startsWith(n)}}(this))):t(e,r)}},s.filter("byRef",["filterFilter",t]),e=function(){return function(t,e){var r,n,i,o,s,a,c,u;for(t=new String(t).replace(/[^0-9a-f]/gi,""),t.length<6&&(t=t[0]+t[0]+t[1]+t[1]+t[2]+t[2]),e=e||0,a="#",n=0,i=0,r=0,u=255,c=[0,1,2],o=0,s=c.length;o/g,""):""}},s.filter("textToHTML",["$filter",p])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k=function(t,e){function r(){this.constructor=t}for(var n in e)I.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},I={}.hasOwnProperty,T=[].indexOf||function(t){for(var e=0,r=this.length;e5},c=f(r),c=n(c)(s),a.find(".assigned-to-list").html(c)},u=function(){return e.stop(),t.close(a)},s.$on("assigned-to:add",function(r,n){var i;return p=n,i=n.assigned_to,d=s.usersById[i],l(d),t.open(a).then(function(){return a.find("input").focus(),e.init(a)})}),s.$watch("usersSearch",function(t){if(null!=t)return l(d,t),a.find("input").focus()}),a.on("click",".user-list-single",function(t){var e;return t.preventDefault(),e=angular.element(t.currentTarget),u(),s.$apply(function(){return s.$broadcast("assigned-to:added",e.data("user-id"),p),s.usersSearch=null})}),a.on("click",".remove-assigned-to",function(t){return t.preventDefault(),t.stopPropagation(),u(),s.$apply(function(){return s.usersSearch=null,s.$broadcast("assigned-to:added",null,p)})}),a.on("click",".close",function(t){return t.preventDefault(),u(),s.$apply(function(){return s.usersSearch=null})}),s.$on("$destroy",function(){return a.off()})},{templateUrl:"common/lightbox/lightbox-assigned-to.html",link:s}},v.directive("tgLbAssignedto",["lightboxService","lightboxKeyboardNavigationService","$tgTemplate","$compile","tgAvatarService","tgUserListService",t]),e=function(t,e,r,n,i,o,s){var a;return a=function(t,a,c){var u,l,p,d,f;return d=[],p=null,f=n.get("common/lightbox/lightbox-assigned-users-users.html",!0),l=function(e,r){var n,c,u,l,p;return l=s.searchUsers(r),u=[],_.map(l,function(t){var r;if(r=t.id,T.call(e,r)>=0)return t.avatar=o.getAvatar(t),u.push(t)}),p=[],_.map(l,function(t){var r;if(r=t.id,T.call(e,r)<0)return t.avatar=o.getAvatar(t),p.push(t)}),n={selected:u,users:_.slice(p,0,5),showMore:l.length>5},c=f(n),c=i(c)(t),a.find(".assigned-to-list").html(c)},u=function(){return r.stop(),e.close(a)},t.$on("assigned-user:add",function(t,n){return p=n,d=n.assigned_users,l(d),e.open(a).then(function(){return a.find("input").focus(),r.init(a)})}),t.$watch("usersSearch",function(t){if(null!=t)return l(d,t),a.find("input").focus()}),a.on("click",".user-list-single",h(200,function(e){var r;return u(),e.preventDefault(),r=angular.element(e.currentTarget),t.$apply(function(){return t.usersSearch=null,t.$broadcast("assigned-user:added",r.data("user-id"),p)})})),a.on("click",".remove-assigned-to",function(e){var r;return e.preventDefault(),r=angular.element(e.currentTarget),e.stopPropagation(),t.$apply(function(){return t.usersSearch=null,t.$broadcast("assigned-user:deleted",r.data("user-id"),p)}),u()}),a.on("click",".close",function(t){return t.preventDefault(),u()}),t.$on("$destroy",function(){return a.off()})},{templateUrl:"common/lightbox/lightbox-assigned-users.html",link:a}},v.directive("tgLbAssignedUsers",["$tgRepo","lightboxService","lightboxKeyboardNavigationService","$tgTemplate","$compile","tgAvatarService","tgUserListService",e]),d=function(t,e,r,n,i,o){ +var s;return s=function(t,s,a){var c,u,l,p,d;return p=null,d=n.get("common/lightbox/lightbox-assigned-to-users.html",!0),u=function(e){var r,n;return null==e&&(e=""),r=function(t,e){var r;return(!p||!_.find(p.watchers,function(t){return t===e.id}))&&(r=e.full_name_display.toUpperCase(),t=t.toUpperCase(),_.includes(r,t))},n=_.clone(t.activeUsers,!0),n=_.filter(n,_.partial(r,e))},l=function(e){var r,n,a;return a=_.slice(e,0,5),a=_.map(a,function(t){return t.avatar=o.getAvatar(t),t}),r={selected:!1,users:a,showMore:e.length>5},n=d(r),n=i(n)(t),s.find(".ticket-watchers").html(n)},c=function(){return r.stop(),e.close(s)},t.$on("watcher:add",function(t,n){var i;return p=n,i=u(),l(i),e.open(s).then(function(){return s.find("input").focus(),r.init(s)})}),t.$watch("usersSearch",function(t){var e;if(null!=t)return e=u(t),l(e),s.find("input").focus()}),s.on("click",".user-list-single",h(200,function(e){var r;return c(),e.preventDefault(),r=angular.element(e.currentTarget),t.$apply(function(){return t.usersSearch=null,t.$broadcast("watcher:added",r.data("user-id"))})})),s.on("click",".close",function(e){return e.preventDefault(),c(),t.$apply(function(){return t.usersSearch=null})}),t.$on("$destroy",function(){return s.off()})},{templateUrl:"common/lightbox/lightbox-users.html",link:s}},v.directive("tgLbWatchers",["$tgRepo","lightboxService","lightboxKeyboardNavigationService","$tgTemplate","$compile","tgAvatarService",d]),c=function(t,e,r){var n;return n=function(e,r,n){return t.open(r)},{templateUrl:"common/lightbox/lightbox-leave-project-warning.html",link:n,scope:!0}},v.directive("tgLightboxLeaveProjectWarning",["lightboxService",c]),p=function(t,e,r,n,i,o){var s;return s=function(s,a,c){var u,l,p;return u=n.instant("COMMON.PICKERDATE.FORMAT"),e.open(a),s.object.due_date&&(s.new_due_date=moment(s.object.due_date).format(u)),a.on("click",".suggestion",function(t){var e,r,n,i;return r=angular.element(t.currentTarget),e=r.data("quantity"),n=r.data("unit"),i=moment().add(e,n).format(u),a.find(".due-date").val(i)}),p=function(){var n,c,l;return n=r().target(a.find(".submit-button")).start(),s.notAutoSave?(c=$(".due-date").val(),s.object.due_date=c?moment(c,u).format("YYYY-MM-DD"):null,s.$apply(),n.finish(),void e.close(a)):(l=o.save(function(t){return c=$(".due-date").val(),t.due_date=c?moment(c,u).format("YYYY-MM-DD"):null,t}),l.then(function(){return i.notify("success")}),l.then(null,function(){return i.notify("error")}),l["finally"](function(){return n.finish(),e.close(a),t.$broadcast("object:updated")}))},a.on("click",".submit-button",function(t){return t.preventDefault(),p()}),l=function(){var t,r,o;return o=n.instant("LIGHTBOX.DELETE_DUE_DATE.TITLE"),r=n.instant("LIGHTBOX.DELETE_DUE_DATE.SUBTITLE"),t=moment(s.object.due_date).format(u),i.askOnDelete(o,t,r).then(function(t){return t.finish(),$(".due-date").val(null),s.object.due_date_reason=null,s.notAutoSave?(s.object.due_date=null,e.close(a)):p()})},a.on("click",".delete-due-date",function(t){return t.preventDefault(),l()})},{templateUrl:"common/lightbox/lightbox-due-date.html",link:s,scope:!0}},v.directive("tgLbSetDueDate",["$rootScope","lightboxService","$tgLoading","$translate","$tgConfirm","$tgQueueModelTransformation",p]),m=this.taiga.groupBy,o=function(t,e,r,n,i,o,s,a,c,u,l,p,d){var f;return f=function(f,g,v){var y,b,S,k,$,I,E,C,P,w,A,O,R,M,U,N,D,x,L,F,B;return D=null,R=null,P=null,b=Immutable.List(),S=Immutable.List(),x={us:{objName:"User Story",model:"userstories",params:{include_attachments:!0,include_tasks:!0},data:function(t){return{translationID:"US",translationIDPlural:"US",statusList:_.sortBy(t.us_statuses,"order")}},initialData:function(t){return{project:t.project.id,subject:"",description:"",tags:[],points:{},status:t.statusId?t.statusId:t.project.default_us_status,is_archived:!1}}},task:{objName:"Task",model:"tasks",params:{include_attachments:!0},data:function(t){return{translationID:"TASK",translationIDPlural:"TASKS",statusList:_.sortBy(t.task_statuses,"order")}},initialData:function(t){return{project:t.project.id,subject:"",description:"",assigned_to:null,tags:[],milestone:t.sprintId,status:t.project.default_task_status,user_story:t.usId,is_archived:!1}}},issue:{objName:"Issue",model:"issues",params:{include_attachments:!0},data:function(t){return{translationID:"ISSUE",translationIDPlural:"ISSUES",project:t,statusList:_.sortBy(t.issue_statuses,"order"),typeById:m(t.issue_types,function(t){return t.id}),typeList:_.sortBy(t.issue_types,"order"),severityById:m(t.severities,function(t){return t.id}),severityList:_.sortBy(t.severities,"order"),priorityById:m(t.priorities,function(t){return t.id}),priorityList:_.sortBy(t.priorities,"order"),milestonesById:m(t.milestones,function(t){return t.id})}},initialData:function(t){return{assigned_to:null,milestone:t.sprintId,priority:t.project.default_priority,project:t.project.id,severity:t.project.default_severity,status:t.project.default_issue_status,subject:"",tags:[],type:t.project.default_issue_type}}}},f.setMode=function(t){return f.mode=t},f.$on("genericform:new",function(t,e){return w(e),f.mode="new",f.getOrCreate=!1,O(e)}),f.$on("genericform:new-or-existing",function(t,e){return w(e),f.mode="add-existing",f.getOrCreate=!0,f.existingFilterText="",n[D.model].listInAllProjects({project:f.project.id},!0).then(function(t){return f.existingItems=angular.copy(t)}),O(e)}),f.$on("genericform:edit",function(t,e){return w(e),f.mode="edit",f.getOrCreate=!1,O(e)}),w=function(e){return _.map(e,function(t,e){return f[e]=t}),f.objType&&x[f.objType]?D=x[f.objType]:t.error("Invalid objType `"+f.objType+"` for `genericform` event")},O=function(t){return f.objName=D.objName,"edit"===f.mode?(f.obj=t.obj,f.attachments=Immutable.fromJS(t.attachments)):(f.obj=r.make_model(D.model,D.initialData(t)),f.attachments=Immutable.List()),_.map(D.data(f.project),function(t,e){return f[e]=t}),P&&P.reset(),U(),L(f.obj.status),M(),f.lightboxOpen=!0,o.open(g,null,null,!0)},U=function(){return b=Immutable.List(),S=Immutable.List()},f.addAttachment=function(t){return b=b.push(t)},f.deleteAttachment=function(t){if(b=b.filter(function(e){return e.get("name")!==t.get("name")}),t.get("id"))return S=S.push(t)},f.addTag=function(t,e){var r,n,i,o,s;if(s=j(t.toLowerCase()),o=f.project.tags,i=f.project.tags_colors,null==o&&(o=[]),null==i&&(i={}),T.call(o,s)<0&&o.push(s),i[t]=e||null,f.project.tags=o,n=_.clone(f.obj.tags),r=_.find(n,function(t){return t[0]===s}),!r)return n.push([s,e]),f.obj.tags=n},f.deleteTag=function(t){var e,r,n;return n=j(t[0].toLowerCase()),r=f.project.tags,e=_.clone(f.obj.tags),_.remove(e,function(t){return t[0]===n}),f.obj.tags=e,_.pull(f.obj.tags,n)},I=function(t){var e;return e=_.map(b.toJS(),function(e){return l.upload(e.file,t.id,f.obj.project,f.objType)}),u.all(e)},E=function(t){var e;return e=_.map(S.toJS(),function(t){return l["delete"](f.objType,t.id)}),u.all(e)},y=function(t){var e,r,n;return e=s().target(g.find(".add-existing-button")).start(),t.milestone?F(t):(n=function(){return $(),i.$broadcast(f.objType+"form:add:success",t)},r=function(){return $()},N(t,n,r))},F=function(t){var e,r,n,s;return n=f.milestonesById[t.milestone].name,r=f.milestonesById[f.relatedObjectId].name,s=a.instant("ISSUES.CONFIRM_CHANGE_FROM_SPRINT.TITLE"),e=a.instant("ISSUES.CONFIRM_CHANGE_FROM_SPRINT.MESSAGE",{issue:t.subject,oldSprintName:n,newSprintName:r}),c.ask(s,null,e).then(function(e){var r,n;return n=function(){return e.finish(),o.closeAll(),f.lightboxOpen=!1,i.$broadcast(f.objType+"form:add:success",t)},r=function(){return e.finish(!1),c.notify("error")},N(t,n,r)})},N=function(t,r,n){return t.setAttr(f.relatedField,f.relatedObjectId),e.save(t,!0).then(r,n)},A=function(t){return t&&t[f.relatedField]===f.relatedObjectId},f.isDisabledExisting=function(t){return A(t)},f.addExistingToSprint=function(t){return y(t)},B=h(2e3,function(t){var r,o,u,l;if(P=g.find("form").checksley(),P.validate())return o=s().target(g.find(".submit-button")).start(),"new"===f.mode?(l=e.create(D.model,f.obj),r=f.objType+"form:new:success"):(f.obj.due_date instanceof moment&&(u=a.instant("COMMON.PICKERDATE.FORMAT"),f.obj.due_date=f.obj.due_date.format("YYYY-MM-DD")),l=e.save(f.obj,!0),r=f.objType+"form:edit:success"),l.then(function(t){return E(t).then(function(){return I(t).then(function(){if(o.finish(),$(),t.ref)return n[D.model].getByRef(t.project,t.ref,D.params).then(function(t){return i.$broadcast(r,t)})})})}),l.then(null,function(t){if(o.finish(),P.setErrors(t),t._error_message)return c.notify("error",t._error_message)})}),k=function(){return f.obj.isModified()?c.ask(a.instant("LIGHTBOX.CREATE_EDIT.CONFIRM_CLOSE")).then(function(t){return t.finish(),$()}):($(),f.$apply(function(){return f.obj.revert()}))},$=function(){return o.closeAll(),f.lightboxOpen=!1},C=angular.element(document),C.on("keydown.lightbox-create-edit",function(t){var e;if(f.lightboxOpen&&(t.stopPropagation(),e=t.keyCode?t.keyCode:t.which,27===e))return k()}),g.on("submit","form",B),g.find(".close").on("click",function(t){return t.preventDefault(),t.stopPropagation(),k()}),g.on("click",".status-dropdown",function(t){return t.preventDefault(),t.stopPropagation(),g.find(".pop-status").popover().open()}),g.on("click",".status",function(t){return t.preventDefault(),t.stopPropagation(),L(angular.element(t.currentTarget).data("status-id")),f.$apply(),f.$broadcast("status:changed",f.obj.status),g.find(".pop-status").popover().close()}),g.on("click",".team-requirement",function(t){return f.obj.team_requirement=!f.obj.team_requirement,f.$apply()}),g.on("click",".client-requirement",function(t){return f.obj.client_requirement=!f.obj.client_requirement,f.$apply()}),g.on("click",".is-blocked",function(t){return f.obj.is_blocked=!f.obj.is_blocked,f.$apply()}),g.on("click",".iocaine",function(t){return f.obj.is_iocaine=!f.obj.is_iocaine,f.$broadcast("isiocaine:changed",f.obj)}),f.isTeamRequirement=function(){var t;return null!=(t=f.obj)?t.team_requirement:void 0},f.isClientRequirement=function(){var t;return null!=(t=f.obj)?t.client_requirement:void 0},L=function(t){return f.obj.status=t,f.selectedStatus=_.find(f.statusList,function(e){return e.id===t}),f.obj.is_closed=f.selectedStatus.is_closed},M=function(t){var e,r,n;return r=p.get("common/lightbox/lightbox-create-edit/lb-create-edit.html"),n=f.$new(),e=d(r)(n),g.html(e)}},{link:f}},v.directive("tgLbCreateEdit",["$log","$tgRepo","$tgModel","$tgResources","$rootScope","lightboxService","$tgLoading","$translate","$tgConfirm","$q","tgAttachmentsService","$tgTemplate","$compile",o]),g=this.taiga.debounceLeading,l=function(t,e,r,n,i,o,s,a){var c;return c=function(o,c,u){var l,p,d,f,h,m;return m=null,o.projects=null,o.projectEpics=Immutable.List(),o.loading=!1,o.selectedProject=o.project.id,f=c.find(".new-epic-form").checksley(),l=c.find(".existing-epic-form").checksley(),d=function(){if(null===o.projects)return o.projects=n.projects.get("unblocked")},p=function(t,e){return i.epics.listInAllProjects({is_epics_activated:!0,project__blocked_code:"null",project:t,q:e},!0).then(function(t){var e,r;return e=[],m.epics&&(e=m.epics.map(function(t){return t.id})),r=t.filter(function(t){return e.indexOf(t.get("id"))===-1}),o.projectEpics=r})},h=function(t){return o.selectedEpic=null,o.searchEpic="",p(t,o.searchEpic)},c.on("click",".close",function(t){return t.preventDefault(),r.close(c)}),o.$on("relate-to-epic:add",function(t,e){return m=e,o.selectedEpic=null,o.searchEpic="",d(),p(o.selectedProject,o.searchEpic).then(function(){return r.open(c).then(function(){return c.find("input").focus})})}),o.$on("$destroy",function(){return c.off()}),o.selectProject=function(t){return h(t)},o.onUpdateSearchEpic=g(300,function(){return o.selectedEpic=null,p(o.selectedProject,o.searchEpic)}),o.saveRelatedEpic=function(n,s){var u,p,d;if(l.validate())return o.loading=!0,u=function(t){return o.loading=!1,e.notify("error"),l.setErrors(t)},p=function(e){return a.trackEvent("user story related epic","create","create related epic on user story",1),o.loading=!1,t.$broadcast("related-epics:changed",m),r.close(c)},d=m.id,i.epics.addRelatedUserstory(n,d).then(p,u)},o.createEpic=function(n,u){var l,p,d;if(f.validate())return this.loading=!0,p=function(t){return o.loading=!1,e.notify("error"),f.setErrors(errors)},d=function(){return a.trackEvent("user story related epic","create","create related epic on user story",1),o.loading=!1,t.$broadcast("related-epics:changed",m),r.close(c)},l=function(t){var e,r;return e=t.get("id"),r=m.id,i.epics.addRelatedUserstory(e,r).then(d,p)},s.createEpic({subject:u},null,n).then(l,p)}},{templateUrl:"common/lightbox/lightbox-relate-to-epic.html",link:c}},v.directive("tgLbRelatetoepic",["$rootScope","$tgConfirm","lightboxService","tgCurrentUserService","tgResources","$tgResources","tgEpicsService","$tgAnalytics",l])}.call(this),function(){var t,e,r,n,i,o;i=this.taiga,n=this.taiga.sizeFormat,o=this.taiga.timeout,r=angular.module("taigaCommon"),e=function(t,e){var r;return r=function(e,r,n){return t.onStart(function(){return $(document.body).addClass("loader-active"),r.addClass("active")}),t.onEnd(function(){return $(document.body).removeClass("loader-active"),r.removeClass("active")})},{link:r}},r.directive("tgLoader",["tgLoader","$rootScope",e]),t=function(t){var e,r,n,i,s,a,c,u;return r={minTime:300},i=!1,u=0,a=0,n=0,s=function(e){var s,c,l;return null==e&&(e=!1),u&&(l=0,e||(c=(new Date).getTime(),s=c-u,s",function(){var r;return r={settings:{target:null,scope:null,classes:[],timeout:0,template:null},target:function(t){return r.settings.target=t,r},scope:function(t){return r.settings.scope=t,r},template:function(t){return r.settings.template=t,r},removeClasses:function(){var t;return t=1<=arguments.length?n.call(arguments,0):[],r.settings.classes=t,r},timeout:function(t){return r.settings.timeout=t,r},start:function(){var t,n;return t=r.settings.target,r.settings.classes.map(function(e){return t.removeClass(e)}),t.hasClass("loading")||r.settings.template||(r.settings.template=t.html()),n=setTimeout(function(){if(!t.hasClass("loading"))return t.addClass("loading"),t.html(e)},r.settings.timeout),r.settings.timeoutId=n,r},finish:function(){var e,n,i;return n=r.settings.target,i=r.settings.timeoutId,i&&(clearTimeout(i),e=r.settings.classes,e.map(function(t){return r.settings.target.addClass(t)}),n.html(r.settings.template),n.removeClass("loading"),r.settings.scope&&t(n.contents())(r.settings.scope)),r}}}},e.$inject=["$compile"],r.factory("$tgLoading",e),t=function(t){var e;return e=function(e,r,n){var i,o;return i=null,o=r.html(),e.$watch(n.tgLoading,function(n){return function(n){return n?i=t().target(r).timeout(100).template(o).scope(e).start():i?i.finish():void 0}}(this))},{priority:99999,link:e}},r.directive("tgLoading",["$tgLoading",t])}.call(this),function(){var t,e,r,n,i,o;o=this.taiga,r=this.taiga.bindOnce,n=this.taiga.debounce,i=angular.module("taigaCommon"),e=function(t,e){var i,o;return o=e.get("common/popover/popover-us-status.html",!0),i=function(e,i,s){var a,c,u;return a=i.controller(),c=function(t){var r,n,o;if(o=i.find(".us-status"),n=i.find(".us-status .us-status-bind"),r=e.usStatusById,r[t.status])return n.text(r[t.status].name),o.css("color",r[t.status].color)},i.on("click",".us-status",function(t){return t.preventDefault(),t.stopPropagation(),i.find(".pop-status").popover().open()}),i.on("click",".status",n(2e3,function(r){var n,o;return r.preventDefault(),r.stopPropagation(),n=angular.element(r.currentTarget),o=e.$eval(s.tgUsStatus),o.status=n.data("status-id"),c(o),i.find(".pop-status").popover().close(),e.$apply(function(){return t.save(o).then(function(){return e.$eval(s.onUpdate)})})})),e.$on("userstories:loaded",function(){return c(e.$eval(s.tgUsStatus))}),e.$on("$destroy",function(){return i.off()}),u=e.$eval(s.tgUsStatus),c(u),r(e,"project",function(t){var r;if(r=o({statuses:t.us_statuses}),i.append(r),e.project.my_permissions.indexOf("modify_us")===-1)return i.unbind("click"),i.find("a").addClass("not-clickable")})},{link:i}},i.directive("tgUsStatus",["$tgRepo","$tgTemplate",e]),t=function(t,e){var r,i,s;return i=e.get("common/popover/popover-related-task-status.html",!0),s=function(t,e,r){var n,i;if(i=t.find(".us-status"),n=t.find(".task-status .task-status-bind"),r[e.status])return n.text(r[e.status].name),i.css("color",r[e.status].color)},r=function(e,r,a){var c,u,l,p;return c=r.controller(),p=e.$eval(a.tgRelatedTaskStatus),l=e.$eval(a.notAutoSave),u=!l,r.on("click",".task-status",function(t){return t.preventDefault(),t.stopPropagation(),r.find(".pop-status").popover().open()}),r.on("click",".status",n(2e3,function(n){var i;if(n.preventDefault(),n.stopPropagation(),i=angular.element(n.currentTarget),p.status=i.data("status-id"),r.find(".pop-status").popover().close(),s(r,p,e.taskStatusById),u)return e.$apply(function(){return t.save(p).then(function(){return e.$eval(a.onUpdate),e.$emit("related-tasks:status-changed")})})})),e.$watch(a.tgRelatedTaskStatus,function(){return p=e.$eval(a.tgRelatedTaskStatus),s(r,p,e.taskStatusById)}),o.bindOnce(e,"project",function(t){if(r.append(i({statuses:t.task_statuses})),s(r,p,e.taskStatusById),t.my_permissions.indexOf("modify_task")===-1)return r.unbind("click"),r.find("a").addClass("not-clickable")}),e.$on("$destroy",function(){return r.off()})},{link:r}},i.directive("tgRelatedTaskStatus",["$tgRepo","$tgTemplate",t]),$.fn.popover=function(){var t,e,r,n,i,o;return t=this,i=function(e){return function(){var e,r,n,i,o,s,a,c,u,l;return t.css({display:"block",visibility:"hidden"}),i=$(window).scrollTop(),e=i+$(window).height(),o=$(window).width(),n=o,r=0,u=t.offset().top,s=u+t.height(),l=t.width(),a=t.offset().left,c=t.offset().left+l,t.css({display:"none",visibility:"visible"}),s<=e&&u>=i&&a>=r&&c<=n}}(this),n=function(e){return function(e){return e&&e.call(t),t.fadeOut(function(){return t.removeClass("active").removeClass("fix")}),t.off("popup:close")}}(this),r=function(t){return function(){return $(".popover.active").each(function(){return $(this).trigger("popup:close")})}}(this),o=function(o){return function(o){return t.hasClass("active")?e():(r(),i()||t.addClass("fix"),t.fadeIn(function(){return t.addClass("active"),$(document.body).off("popover"),$(document.body).one("click.popover",function(){return r()})}),t.on("popup:close",function(t){return n(o)}))}}(this),e=function(e){return function(){return t.trigger("popup:close")}}(this),{open:o,close:e,closeAll:r}}}.call(this),function(){var t,e,r;r=this.taiga,e=angular.module("taigaCommon"),t=function(t,e){var r;return this.config=e,r=this.config.get("ravenConfig",null),r?(t.debug("Using the RavenJS exception handler."),Raven.config(r).install(),function(e,r){return t.error.apply(t,arguments),Raven.captureException(e)}):(t.debug("Using the default logging exception handler."),function(e,r){return t.error.apply(t,arguments)})},e.factory("$exceptionHandler",["$log","$tgConfig",t])}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=angular.module("taigaCommon"),t=function(t){function e(t,r){this.translate=t,this.currentUserService=r,e.__super__.constructor.call(this),_.map(n,function(t){return function(e){return e.title=t.translate.instant("PROJECT.SECTION."+e.title)}}(this))}var n;return r(e,t),e.$inject=["$translate","tgCurrentUserService"],n={1:{id:1,title:"TIMELINE",path:"timeline",enabled:""},2:{id:2,title:"EPICS",path:"epics",enabled:"is_epics_activated"},3:{id:3,title:"BACKLOG",path:"backlog",enabled:"is_backlog_activated"},4:{id:4,title:"KANBAN",path:"kanban",enabled:"is_kanban_activated"},5:{id:5,title:"ISSUES",path:"issues",enabled:"is_issues_activated"},6:{id:6,title:"WIKI",path:"wiki",enabled:"is_wiki_activated"}},e.prototype.list=function(){return n},e.prototype.getPath=function(t,e){var r,i,o,s,a;return r="timeline",(o=null!=(s=this.currentUserService.projects)?s.get("all"):void 0)&&(i=o.find(function(e){return e.get("slug")===t}))?(e||(e=i.get("my_homepage")),a=_.find(n,{id:e}),a&&(null!=i?i.get(a.enabled):void 0)!==!1?a.path:r):r},e}(taiga.Service),e.service("$tgSections",t)}.call(this),function(){var e,r,n,i,o,s,a,c=[].indexOf||function(t){for(var e=0,r=this.length;e\n <% if (tag[1] !== null) { %>\n \n <%= emojify(tag[0]) %>\n \n <% } %>\n<% }) %>\n<% _.each(tags, function(tag) { %>\n <% if (tag[1] === null) { %>\n \n <%= emojify(tag[0]) %>\n \n <% } %>\n<% }) %>'),e=function(e,n,i,o){var s;return s=function(e){var i;return i=r({tags:e,emojify:function(e){return t.replaceEmojiNameByHtmlImgs(_.escape(e))}}),n.html(i)},e.$watch(i.tgColorizeBacklogTags,function(t){if(null!=t)return s(t)}),e.$on("$destroy",function(){return n.off()})},{link:e}},o.directive("tgColorizeBacklogTags",["$tgEmojis",e]),r=function(e,r,n){var o,s,u,l,p;return s=13,o=188,p=r.get("common/tag/lb-tag-line-tags.html",!0),u=null,l=function(e,r,o,l){var d,f,h,g,m,v,y,b;return b=_.has(o,"withoutColors"),g=function(i,o){var s,a,c;return null==o&&(o=[]),s=b?null:o[t],a={tags:_.map(i,function(t){return{name:t,style:s?"border-left: 5px solid "+s:""}})},c=n(p(a))(e),r.find(".tags-container").html(c)},y=function(){return r.find(".save").removeClass("hidden")},h=function(){return r.find(".save").addClass("hidden")},m=function(){return r.find("input").val(""),u.close()},d=function(t){var r;if(t=a(t.toLowerCase()),0!==t.length)return r=_.clone(l.$modelValue,!1),null==r&&(r=[]),c.call(r,t)<0&&r.push(t),e.$apply(function(){return l.$setViewValue(r)}),h()},f=function(t){var r;if(t=a(t.toLowerCase()),0!==t.length)return r=_.clone(l.$modelValue,!1),r=_.pull(r,t),e.$apply(function(){return l.$setViewValue(r)})},v=function(){var t;return t=r.find("input").val(),d(t),m()},r.on("keypress","input",function(t){var e;return e=angular.element(t.currentTarget),t.keyCode===s?(t.preventDefault(),v()):","===String.fromCharCode(t.keyCode)?(t.preventDefault(),v()):e.val().length?y():h()}),r.on("click",".save",function(t){return t.preventDefault(),v()}),r.on("click",".remove-tag",function(t){var e,r;return t.preventDefault(),e=angular.element(t.currentTarget),r=e.siblings(".tag-name").text(),f(r)}),i(e,"project",function(t){var e;return e=r.find("input"),u=new Awesomplete(e[0],{list:_.keys(t.tags_colors)}),e.on("awesomplete-selectcomplete",function(){return d(e.val()),e.val("")})}),e.$watch(o.ngModel,function(t){var r,n;return n=(null!=(r=e.project)?r.tags_colors:void 0)||[],g(t,n)}),e.$on("$destroy",function(){return r.off()})},{link:l,require:"ngModel",templateUrl:"common/tag/lb-tag-line.html"}},o.directive("tgLbTagLine",["$tgResources","$tgTemplate","$compile",r])}.call(this),function(){var t,e,r,n,i;i=this.taiga,e=this.taiga.bindOnce,r=this.taiga.debounce,n=angular.module("taigaBacklog"),t=function(t,e,n,i,o,s,a){var c;return c=function(n,c,u){var l,p,d,f,h,g,m,v;return f=!1,l=!0,p=null,n.newSprint={},v=null,g=function(){return p&&p.reset(),n.newSprint={project:null,name:null,estimated_start:null,estimated_finish:null}},m=r(2e3,function(r){return function(r){var u,d,h,g,m,y,b,S,j;return r.preventDefault(),j=angular.element(r.currentTarget),y=a.instant("COMMON.PICKERDATE.FORMAT"),S=c.find(".submit-button"),p=c.find("form").checksley(),p.validate()?(f=!1,u=null,g=$(".date-start").val(),h=$(".date-end").val(),l?(m=angular.copy(n.newSprint),m.estimated_start=moment(g,y).format("YYYY-MM-DD"),m.estimated_finish=moment(h,y).format("YYYY-MM-DD"),b=t.create("milestones",m),u="sprintform:create:success"):(m=n.newSprint.realClone(),m.estimated_start=moment(g,y).format("YYYY-MM-DD"),m.estimated_finish=moment(h,y).format("YYYY-MM-DD"),b=t.save(m),u="sprintform:edit:success"),d=s().target(S).start(),b.then(function(t){return d.finish(),l&&(n.sprintsCounter+=1),n.sprints=_.map(n.sprints,function(e){return e.id===t.id?t:e}),"sprintform:create:success"===u&&v?i.$broadcast(u,t,v):i.$broadcast(u,t),o.close(c)}),b.then(null,function(t){return d.finish(),p.setErrors(t),t._error_message?e.notify("light-error",t._error_message):t.__all__?e.notify("light-error",t.__all__[0]):void 0})):(f=!0,void c.find(".last-sprint-name").addClass("disappear"))}}(this)),h=function(){var r,s;return s=a.instant("LIGHTBOX.DELETE_SPRINT.TITLE"),r=n.newSprint.name,e.askOnDelete(s,r).then(function(r){return function(r){var s,a;return a=function(){return r.finish(),n.milestonesCounter-=1,o.close(c),i.$broadcast("sprintform:remove:success",n.newSprint)},s=function(){return r.finish(!1),e.notify("error")},t.remove(n.newSprint).then(a,s)}}(this))},d=function(){var t,e;return t=_.filter(n.sprints,function(t){return!t.closed}),e=_.sortBy(t,function(t){return moment(t.estimated_finish,"YYYY-MM-DD").format("X")}),e[e.length-1]},n.$on("sprintform:create",function(t,e,r){var i,s,u,f,h,m;return v=r,g(),p=c.find("form").checksley(),p.reset(),l=!0,h=a.instant("COMMON.PICKERDATE.FORMAT"),n.newSprint.project=e,n.newSprint.name=null,n.newSprint.slug=null,u=d(),s=moment(),u?s=moment(u.estimated_finish):n.newSprint.estimated_start&&(s=moment(n.newSprint.estimated_start)),n.newSprint.estimated_start=s.format(h),i=moment().add(2,"weeks"),u?i=moment(u.estimated_finish).add(2,"weeks"):n.newSprint.estimated_finish&&(i=moment(n.newSprint.estimated_finish)),n.newSprint.estimated_finish=i.format(h),f=c.find(".last-sprint-name"),null!=(null!=u?u.name:void 0)&&(m=a.instant("LIGHTBOX.ADD_EDIT_SPRINT.LAST_SPRINT_NAME",{lastSprint:u.name}),f.html(m)),c.find(".delete-sprint").addClass("hidden"),m=a.instant("LIGHTBOX.ADD_EDIT_SPRINT.TITLE"),c.find(".title").text(m),m=a.instant("COMMON.CREATE"),c.find(".button-green").text(m),o.open(c),c.find(".sprint-name").focus(),c.find(".last-sprint-name").removeClass("disappear")}),n.$on("sprintform:edit",function(t,e){var r,i,s;return g(),l=!1,i=a.instant("COMMON.PICKERDATE.FORMAT"),n.$apply(function(){return n.newSprint=e.realClone(),n.newSprint.estimated_start=moment(n.newSprint.estimated_start).format(i),n.newSprint.estimated_finish=moment(n.newSprint.estimated_finish).format(i)}),c.find(".delete-sprint").removeClass("hidden"),r=a.instant("BACKLOG.EDIT_SPRINT"),c.find(".title").text(r),s=a.instant("COMMON.SAVE"),c.find(".button-green").text(s),o.open(c),c.find(".sprint-name").focus().select(),c.find(".last-sprint-name").addClass("disappear")}),c.on("keyup",".sprint-name",function(t){return c.find(".sprint-name").val().length>0||f?c.find(".last-sprint-name").addClass("disappear"):c.find(".last-sprint-name").removeClass("disappear")}),c.on("submit","form",m),c.on("click",".delete-sprint",function(t){return t.preventDefault(),h()}),n.$on("$destroy",function(){return c.off()}),g()},{link:c}},n.directive("tgLbCreateEditSprint",["$tgRepo","$tgConfirm","$tgResources","$rootScope","lightboxService","$tgLoading","$translate",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v=function(t,e){function r(){this.constructor=t}for(var n in e)y.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},y={}.hasOwnProperty;h=this.taiga,p=this.taiga.mixOf,m=this.taiga.toggleText,f=this.taiga.scopeDefer,c=this.taiga.bindOnce,l=this.taiga.groupBy,g=this.taiga.timeout,a=this.taiga.bindMethods,u=this.taiga.generateHash,d=angular.module("taigaBacklog"),t=function(t){function e(t,e,r,n,i,o,s,c,u,l,p,d,f,h,g,m,v,y,_,b){var S;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=c,this.appMetaService=u,this.navUrls=l,this.events=p,this.analytics=d,this.translate=f,this.loading=h,this.rs2=g,this.modelTransform=m,this.errorHandlingService=v,this.storage=y,this.filterRemoteStorageService=_,this.projectService=b,a(this),this.backlogOrder={},this.milestonesOrder={},this.page=1,this.disablePagination=!1,this.firstLoadComplete=!1,this.scope.userstories=[],this.applyStoredFilters(this.params.pslug,"backlog-filters")||(this.scope.sectionName=this.translate.instant("BACKLOG.SECTION_NAME"),this.showTags=!1,this.activeFilters=!1,this.scope.showGraphPlaceholder=null,this.displayVelocity=!1,this.initializeEventHandlers(),S=this.loadInitialData(),S.then(function(t){return function(){var e,r;if(t.firstLoadComplete=!0,r=t.translate.instant("BACKLOG.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.translate.instant("BACKLOG.PAGE_DESCRIPTION",{projectName:t.scope.project.name,projectDescription:t.scope.project.description}),t.appMetaService.setAll(r,e),t.rs.userstories.getShowTags(t.scope.projectId))return t.showTags=!0,t.scope.$broadcast("showTags",t.showTags)}}(this)),S.then(null,this.onInitialDataError.bind(this)))}return v(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","tgAppMetaService","$tgNavUrls","$tgEvents","$tgAnalytics","$translate","$tgLoading","tgResources","$tgQueueModelTransformation","tgErrorHandlingService","$tgStorage","tgFilterRemoteStorageService","tgProjectService"],e.prototype.storeCustomFiltersName="backlog-custom-filters",e.prototype.storeFiltersName="backlog-filters",e.prototype.backlogOrder={},e.prototype.milestonesOrder={},e.prototype.filtersReloadContent=function(){return this.loadUserstories(!0)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("usform:bulk:success",function(t){return function(){return t.loadUserstories(!0),t.loadProjectStats(),t.confirm.notify("success"),t.analytics.trackEvent("userstory","create","bulk create userstory on backlog",1)}}(this)),this.scope.$on("sprintform:create:success",function(t){return function(e,r,n){return t.loadSprints().then(function(){return t.scope.$broadcast("sprintform:create:success:callback",n)}),t.loadProjectStats(),t.confirm.notify("success"),t.analytics.trackEvent("sprint","create","create sprint on backlog",1)}}(this)),this.scope.$on("usform:new:success",function(t){return function(){return t.loadUserstories(!0),t.loadProjectStats(),t.rootscope.$broadcast("filters:update"),t.confirm.notify("success"),t.analytics.trackEvent("userstory","create","create userstory on backlog",1)}}(this)),this.scope.$on("sprintform:edit:success",function(t){return function(){return t.loadProjectStats()}}(this)),this.scope.$on("sprintform:remove:success",function(t){return function(e,r){return t.loadSprints(),t.loadProjectStats(),t.loadUserstories(!0),r.closed&&t.loadClosedSprints(),t.rootscope.$broadcast("filters:update")}}(this)),this.scope.$on("usform:edit:success",function(t){ +return function(e,r){var n;return n=_.findIndex(t.scope.userstories,function(t){return t.id===r.id}),t.scope.userstories[n]=r,t.rootscope.$broadcast("filters:update")}}(this)),this.scope.$on("sprint:us:move",this.moveUs),this.scope.$on("sprint:us:moved",function(t){return function(){return t.loadSprints(),t.loadProjectStats()}}(this)),this.scope.$on("backlog:load-closed-sprints",this.loadClosedSprints),this.scope.$on("backlog:unload-closed-sprints",this.unloadClosedSprints)},e.prototype.initializeSubscription=function(){var t,e;return t="changes.project."+this.scope.projectId+".userstories",this.events.subscribe(this.scope,t,function(t){return function(e){return t.loadAllPaginatedUserstories(),t.loadSprints()}}(this)),e="changes.project."+this.scope.projectId+".milestones",this.events.subscribe(this.scope,e,function(t){return function(e){return t.loadSprints()}}(this))},e.prototype.toggleShowTags=function(){return this.scope.$apply(function(t){return function(){return t.showTags=!t.showTags,t.rs.userstories.storeShowTags(t.scope.projectId,t.showTags)}}(this))},e.prototype.toggleActiveFilters=function(){return this.activeFilters=!this.activeFilters},e.prototype.toggleVelocityForecasting=function(){return this.displayVelocity=!this.displayVelocity,this.displayVelocity?this.scope.visibleUserStories=_.map(this.forecastedStories,function(t){return t.ref}):this.scope.visibleUserStories=_.map(this.scope.userstories,function(t){return t.ref}),f(this.scope,function(t){return function(){return t.scope.$broadcast("userstories:loaded")}}(this))},e.prototype.loadProjectStats=function(){return this.rs.projects.stats(this.scope.projectId).then(function(t){return function(e){var r;return t.scope.stats=e,r=e.total_points?e.total_points:e.defined_points,r?t.scope.stats.completedPercentage=Math.round(100*e.closed_points/r):t.scope.stats.completedPercentage=0,t.scope.showGraphPlaceholder=!(null!=e.total_points&&null!=e.total_milestones),t.calculateForecasting(),e}}(this))},e.prototype.setMilestonesOrder=function(t){var e,r,n,i,o;for(i=[],r=0,n=t.length;r0&&t>s.speed));r++)o.push(void 0);return o},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_backlog_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.closedMilestones=!!t.total_closed_milestones,this.scope.$emit("project:loaded",t),this.scope.points=_.sortBy(t.points,"order"),this.scope.pointsById=l(t.points,function(t){return t.id}),this.scope.usStatusById=l(t.us_statuses,function(t){return t.id}),this.scope.usStatusList=_.sortBy(t.us_statuses,"id"),t},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.initializeSubscription(),this.loadBacklog().then(function(t){return function(){var e;return t.generateFilters(e="null")}}(this)).then(function(t){return function(){return t.scope.$emit("backlog:loaded")}}(this))},e.prototype.prepareBulkUpdateData=function(t,e){return null==e&&(e="backlog_order"),_.map(t,function(t){return{us_id:t.id,order:t[e]}})},e.prototype.moveUs=function(t,e,r,n){var i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k,$,I,T,E,C,P,w,A,O,R,M,U,N,D,x,L,F,B,H,q,G,V;if(E=e[0].milestone,M=e[0].project,E&&(q=this.scope.sprintsById[E]||this.scope.closedSprintsById[E]),n&&(I=this.scope.sprintsById[n]||this.scope.closedSprintsById[n]),s=n!==E?n:E,w=null,P="",n!==E)if(null===n){for(l=u=0,d=e.length;u1&&(H=_.map(R,function(t){return{us_id:t.id,order:w[t.id]}}))):G=0,k=[],l=j=0,h=e.length;j1&&n!==E)a=k.concat(H,F),U=this.rs.userstories.bulkUpdateMilestone(M,n,a);else if(e.length>1)a=k.concat(H,F),U=this.rs.userstories.bulkUpdateBacklogOrder(M,a);else{for(B={},N=0,y=H.length;N=n&&t<=r})},e}(p(h.Controller,h.PageMixin,h.FiltersMixin,h.UsFiltersMixin)),d.controller("BacklogController",t),e=function(t,e,r,n){var i,o,s,a,c,u,l,p;return i=_.template('
    <%- text %>
    '),s=function(t,e,n,o){var s,a,c,u;return c=function(){var r,n,i,o,a,c,l,p,d,f;if(t.displayVelocity&&u(),null!=t.stats&&null!=t.stats.total_points&&0!==t.stats.total_points&&null==t.displayVelocity){if(u(),p=t.stats,d=p.total_points,r=p.assigned_points,!t.userstories)return;for(c=t.userstories,l=[],i=o=0,a=c.length;od){n=e.find(".backlog-table-body .us-item-row")[i],s(n);break}l.push(void 0)}return l}},u=function(){return e.find(".doom-line").remove()},s=function(t){var e;return e=r.instant("BACKLOG.DOOMLINE"),$(t).before(i({text:e}))},a=function(){var t;return t=e.find(".backlog-table-body .us-item-row"),_.map(t,function(t){return angular.element(t)})},t.$on("userstories:loaded",c),t.$on("userstories:forecast",u),t.$watch("stats",c)},c=function(t,r,i,o){var s,a,c,u,l,d,f;return a=function(){var e;return e=r.find(".backlog-table-body input:checkbox:checked"),_.map(e,function(e){var r;return e=$(e).closest(".tg-scope"),r=e.scope(),r.us.milestone=t.sprints[0].id,r.us})},d=function(e,i){var s,a,c,u;return u=_(t.userstories),t.userstories=u.without.apply(u,e).value(),a=_.map(e,function(t,e){return t.total_points}),c=_.reduce(a,function(t,e){return t+e}),i.user_stories=_.union(i.user_stories,e),i.total_points+=c,s=_.map(e,function(t){return{us_id:t.id,order:t.sprint_order}}),n.userstories.bulkUpdateMilestone(t.project.id,t.sprints[0].id,s).then(function(t){return function(){return o.loadSprints(),o.loadProjectStats(),o.toggleVelocityForecasting(),o.calculateForecasting()}}(this)),r.find(".move-to-sprint").hide()},u=function(e){return d(e,t.currentSprint)},l=function(e){return d(e,t.sprints[0])},t.$on("sprintform:create:success:callback",function(t,e){return _.partial(u,e)()}),f=!1,c=null,s=function(e){var n,i;return c=e.closest(".us-item-row"),e.closest(".us-item-row").toggleClass("ui-multisortable-multiple"),n=r.find(".move-to-sprint"),i=r.find(".backlog-table-body input:checkbox:checked"),i.length>0&&t.sprints.length>0?n.show():n.hide()},$(window).on("keydown.shift-pressed keyup.shift-pressed",function(t){return f=!!t.shiftKey,!0}),r.on("change",".backlog-table-body input:checkbox",function(t){var e,r,n,i,o;return c&&f&&(r=[],e=$(t.currentTarget).closest(".us-item-row"),n=c.nextAll(),i=c.prevAll(),_.some(n,function(t){return t===e[0]})?r=c.nextUntil(e):_.some(i,function(t){return t===e[0]})&&(r=c.prevUntil(e)),_.map(r,function(t){var e;return e=$(t).find("input:checkbox"),e.prop("checked",!0),s(e)})),o=angular.element(t.currentTarget),o.closest(".us-item-row").toggleClass("is-checked"),s(o)}),r.on("click","#move-to-latest-sprint",function(e){return function(e){var r;return r=a(),t.$apply(_.partial(l,r))}}(this)),r.on("click","#move-to-current-sprint",function(e){return function(e){var r;return r=a(),t.$apply(_.partial(u,r))}}(this)),r.on("click","#show-tags",function(t){return t.preventDefault(),o.toggleShowTags(),p(o)}),r.on("click",".forecasting-add-sprint",function(r){var n,i;return i=o.forecastedStories,t.currentSprint?(n=_.map(i,function(e,r){return e.milestone=t.currentSprint.id,e.order=r,e}),t.$apply(_.partial(u,n))):(n=_.map(i,function(t,e){return t.order=e,t}),e.$broadcast("sprintform:create",t.projectId,n))})},p=function(t){var e,n;return e=angular.element("#show-tags"),t.showTags?(e.addClass("active"),n=r.instant("BACKLOG.TAGS.HIDE"),e.text(n)):(e.removeClass("active"),n=r.instant("BACKLOG.TAGS.SHOW"),e.text(n))},u=function(t,e,r){var n;return n=e.find("sidebar.backlog-filter"),n.addClass("active"),r.activeFilters=!0},l=function(t,n,i){var o,s,a,c;return a=n.find("sidebar.backlog-filter"),a.one("transitionend",function(){return g(150,function(){return e.$broadcast("resize"),$(".burndown").css("visibility","visible")})}),c=angular.element("#show-filters-button"),$(".burndown").css("visibility","hidden"),a.toggleClass("active"),c.toggleClass("active"),o=r.instant("BACKLOG.FILTERS.HIDE"),s=r.instant("BACKLOG.FILTERS.SHOW"),m(c,[o,s]),i.toggleActiveFilters()},a=function(t,e,r,n){return t.filtersSearch={},e.on("click","#show-filters-button",function(r){return r.preventDefault(),t.$apply(function(){return l(t,e,n)})})},o=function(t,e,r,n){var i,o;return i=e.controller(),c(t,e,r,i),a(t,e,r,i),s(t,e,r,i),o=i.location.search(),(o.status||o.tags||o.q||o.assigned_to||o.owner)&&u(t,e,i),t.$on("showTags",function(){return p(i)}),t.$on("$destroy",function(){return e.off(),$(window).off(".shift-pressed")})},{link:o}},d.directive("tgBacklog",["$tgRepo","$rootScope","$translate","$tgResources",e]),s=function(t,e,r,n){var i,o;return o=e.get("backlog/us-role-points-popover.html",!0),i=function(e,i,s){return c(e,"project",function(t){var n,s;return s=_.filter(t.roles,"computable"),n=_.size(s),n>1?i.append(r(o({roles:s}))(e)):(i.find(".icon-arrow-down").remove(),i.find(".header-points").addClass("not-clickable"))}),e.$on("uspoints:select",function(t,e,r){return i.find(".popover").popover().close(),i.find(".header-points").html(r+"/Total")}),e.$on("uspoints:clear-selection",function(t,e){var r;return i.find(".popover").popover().close(),r=n.instant("COMMON.FIELDS.POINTS"),i.find(".header-points").text(r)}),i.on("click",function(t){var e;return e=angular.element(t.target),(e.is("span")||e.is("div"))&&t.stopPropagation(),i.find(".popover").popover().open()}),i.on("click",".clear-selection",function(e){return e.preventDefault(),e.stopPropagation(),t.$broadcast("uspoints:clear-selection")}),i.on("click",".role",function(e){var r,n;return e.preventDefault(),e.stopPropagation(),n=angular.element(e.currentTarget),r=n.scope(),t.$broadcast("uspoints:select",n.data("role-id"),n.text())}),e.$on("$destroy",function(){return i.off()})},{link:i}},d.directive("tgUsRolePointsSelector",["$rootScope","$tgTemplate","$compile","$translate",s]),o=function(t,e,r){var n,i;return i=r.get("common/estimation/us-points-roles-popover.html",!0),n=function(e,n,o){var s,a,c,u,l,p,d;return s=n.controller(),d=null,p=null,u=null,c=null,e.$on("uspoints:select",function(t,r,n){var i;return i=e.$eval(o.tgBacklogUsPoints),p=r,c.render()}),e.$on("uspoints:clear-selection",function(t){var r;return r=e.$eval(o.tgBacklogUsPoints),p=null,c.render()}),e.$watch(o.tgBacklogUsPoints,function(i){var o;if(i)return c=t.create(n,i,e.project),o=c.calculateRoles(),0===o.length?(n.find(".icon-arrow-bottom").remove(),n.find("a.us-points").addClass("not-clickable")):1===o.length&&(p=_.keys(i.points)[0]),c.isEditable&&a(),c.onSelectedPointForRole=function(t,e,r){return i.points=r,c.render(),this.save(t,e).then(function(){return s.loadProjectStats()})},c.render=function(){var t,e,n,i,s,a,c,u,l;return l=this.calculateTotalPoints(),null==p||1===o.length?(c=l,u=l):(i=this.us.points[p],s=this.pointsById[i],c=s.name+" / "+l+"",u=s.name+" / "+l),t={totalPoints:l,roles:this.calculateRoles(),editable:this.isEditable,text:c,title:u},n="common/estimation/us-estimation-total.html",a=r.get(n,!0),e=a(t),this.$el.html(e)},c.render()}),l=function(){var t,e;return e=c.calculateRoles(),t=i({roles:e}),n.append(t),n.find(".pop-role").popover().open(function(){return $(this).remove()})},a=function(){return n.on("click","a.us-points",function(t){var r;return t.preventDefault(),t.stopPropagation(),r=e.$eval(o.tgBacklogUsPoints),d=p,null!=p?c.renderPointsSelector(p):l()}),n.on("click",".role",function(t){var r,i,s;return t.preventDefault(),t.stopPropagation(),i=angular.element(t.currentTarget),s=e.$eval(o.tgBacklogUsPoints),d=i.data("role-id"),r=n.find(".pop-role"),r.find("a").removeClass("active"),r.find("a[data-role-id='"+d+"']").addClass("active"),c.renderPointsSelector(d)})},e.$on("$destroy",function(){return n.off()})},{link:n}},d.directive("tgBacklogUsPoints",["$tgEstimationsService","$tgRepo","$tgTemplate",o]),i=function(t){var e,r,n;return e=function(){return $(".js-burndown-graph").removeClass("shown"),$(".js-toggle-burndown-visibility-button").removeClass("active"),$(".js-burndown-graph").removeClass("open")},n=function(t){return $(".js-toggle-burndown-visibility-button").addClass("active"),t?$(".js-burndown-graph").addClass("shown"):$(".js-burndown-graph").addClass("open")},r=function(r,i,o){var s,a,c;return s=!0,a=u(["is-burndown-grpahs-collapsed"]),r.isBurndownGraphCollapsed=t.get(a)||!1,c=function(){return r.isBurndownGraphCollapsed?e(s):n(s),s=!1},r.$watch("showGraphPlaceholder",function(){if(null!=r.showGraphPlaceholder)return r.isBurndownGraphCollapsed=r.isBurndownGraphCollapsed||r.showGraphPlaceholder,c()}),i.on("click",".js-toggle-burndown-visibility-button",function(){return r.isBurndownGraphCollapsed=!r.isBurndownGraphCollapsed,t.set(a,r.isBurndownGraphCollapsed),c()}),r.$on("$destroy",function(){return i.off()})},{link:r}},d.directive("tgToggleBurndownVisibility",["$tgStorage",i]),r=function(t){var e,r;return r=function(e,r){var n,i,o,s,a,c,u,l,p,d,f;return d=e.width(),e.height(d/6),a=function(){l=[];for(var t=0,e=r.milestones.length-1;0<=e?t<=e:t>=e;0<=e?t++:t--)l.push(t);return l}.apply(this),o=[],f=_.map(r.milestones,function(t){return 0}),o.push({data:_.zip(a,f),lines:{fillColor:"rgba(0,0,0,0)"},points:{show:!1}}),c=_.map(r.milestones,function(t){return t.optimal}),o.push({data:_.zip(a,c),lines:{fillColor:"rgba(120,120,120,0.2)"}}),s=_.filter(_.map(r.milestones,function(t){return t.evolution}),function(t){return null!=t}),o.push({data:_.zip(a,s),lines:{fillColor:"rgba(102,153,51,0.3)"}}),n=_.map(r.milestones,function(t){return-t["team-increment"]-t["client-increment"]}),o.push({data:_.zip(a,n),lines:{fillColor:"rgba(255,51,51,0.3)"}}),p=_.map(r.milestones,function(t){return-t["team-increment"]}),o.push({data:_.zip(a,p),lines:{fillColor:"rgba(153,51,51,0.3)"}}),i=["rgba(0,0,0,1)","rgba(120,120,120,0.2)","rgba(102,153,51,1)","rgba(153,51,51,1)","rgba(255,51,51,1)"],u={grid:{borderWidth:{top:0,right:1,left:0,bottom:0},borderColor:"#ccc",hoverable:!0},xaxis:{ticks:r.milestones.length,axisLabel:t.instant("BACKLOG.CHART.XAXIS_LABEL"),axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5,tickFormatter:function(t,e){return""}},yaxis:{axisLabel:t.instant("BACKLOG.CHART.YAXIS_LABEL"),axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5},series:{shadowSize:0,lines:{show:!0,fill:!0},points:{show:!0,fill:!0,radius:4,lineWidth:2}},colors:i,tooltip:!0,tooltipOpts:{content:function(e,n,i,o){var s;return 1===o.seriesIndex?(s={sprintName:r.milestones[n].name,value:Math.abs(i)},t.instant("BACKLOG.CHART.OPTIMAL",s)):2===o.seriesIndex?(s={sprintName:r.milestones[n].name,value:Math.abs(i)},t.instant("BACKLOG.CHART.REAL",s)):3===o.seriesIndex?(s={sprintName:r.milestones[n].name,value:Math.abs(i)},t.instant("BACKLOG.CHART.INCREMENT_CLIENT",s)):(s={sprintName:r.milestones[n].name,value:Math.abs(i)},t.instant("BACKLOG.CHART.INCREMENT_TEAM",s))}}},e.empty(),e.plot(o,u).data("plot")},e=function(t,e,n){var i;return i=angular.element(e),t.$watch("stats",function(e){if(null!=t.stats)return r(i,t.stats),t.$on("resize",function(){return r(i,t.stats)})}),t.$on("$destroy",function(){return e.off()})},{link:e}},d.directive("tgBurndownBacklogGraph",["$translate",r]),n=function(t,e){var r,n,i,o;return o=t.get("backlog/progress-bar.html",!0),i=function(t,r,n,i){var s;return s=o({projectPointsPercentaje:n,closedPointsPercentaje:i}),s=e(s)(t),r.html(s)},r=function(t){var e;return e=_.max([0,t]),e=_.min([100,e]),Math.round(e)},n=function(t,e,n){var o;return o=angular.element(e),t.$watch(n.tgBacklogProgressBar,function(n){var o,s,a,c,u;if(null!=n)return u=n.total_points?n.total_points:n.defined_points,a=n.defined_points,o=n.closed_points,a>u?(c=100*u/a,s=100*o/a):(c=100,s=100*o/u),c=r(c-3),s=r(s-3),i(t,e,c,s)}),t.$on("$destroy",function(){return e.off()})},{link:n}},d.directive("tgBacklogProgressBar",["$tgTemplate","$compile",n])}.call(this),function(){var t,e,r,n,i;i=this.taiga,e=this.taiga.bindOnce,n=angular.module("taigaBacklog"),r=function(t){return $(t).scope().$destroy(),$(t).off(),$(t).remove()},t=function(){var t;return t=function(t,n,i){return e(t,"project",function(e){var i,o,s;if(e.my_permissions.indexOf("modify_us")>-1)return o=!1,i=dragula([n[0],$(".js-empty-backlog")[0]],{copySortSource:!1,copy:!1,isContainer:function(t){return t.classList.contains("sprint-table")},moves:function(t){return!!$(t).hasClass("row")}}),i.on("drag",function(t,e){var r,n;return n=$(t).parent(),o=n.hasClass("backlog-table-body"),$(document.body).addClass("drag-active"),r=$(t).find("input[type='checkbox']").is(":checked"),window.dragMultiple.start(t,e)}),i.on("cloned",function(t){return $(t).addClass("multiple-drag-mirror")}),i.on("dragend",function(e){var n,i,s,a,c,u,l,p;return c=$(e).parent(),$(".doom-line").remove(),c=$(e).parent(),a=c.hasClass("backlog-table-body")||c.hasClass("js-empty-backlog"),u=o||a?o===a:$(e).scope().sprint.id===c.scope().sprint.id,n=window.dragMultiple.stop(),$(document.body).removeClass("drag-active"),l=null,i=n.length?n[0]:e,a?s=$(i).index(".backlog-table-body .row"):(s=$(i).index(),l=c.scope().sprint.id),u?p=n.length?_.map(n,function(t){return t=$(t).scope().us}):[$(e).scope().us]:(p=n.length?_.map(n,function(t){return t=$(t).scope().us}):[$(e).scope().us],n.length?_.each(n,function(t){return r(t)}):r(e)),t.$emit("sprint:us:move",p,s,l)}),s=autoScroll([window],{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&i.dragging}}),t.$on("$destroy",function(){return n.off(),i.destroy()})})},{link:t}},n.directive("tgBacklogSortable",t)}.call(this),function(){var t,e,r,n,i;i=this.taiga,n=angular.module("taigaBacklog"),t=function(t,e){var r,n,i,o;return i=50,n={duration:500,easing:"linear"},o=function(t){return function(t){var e,r;return r=t.find(".sprint-table"),e=t.find(".compact-sprint"),e.toggleClass("active"),r.toggleClass("open")}}(this),r=function(t,r,i){return t.$watch(i.tgBacklogSprint,function(e){return e=t.$eval(i.tgBacklogSprint),e.closed?r.addClass("sprint-closed"):o(r)}),r.on("click",".sprint-name > .compact-sprint",function(t){return t.preventDefault(),o(r),r.find(".sprint-table").slideToggle(n)}),r.on("click",".edit-sprint",function(r){var n;return r.preventDefault(),n=t.$eval(i.tgBacklogSprint),e.$broadcast("sprintform:edit",n)}),t.$on("$destroy",function(){return r.off()})},{link:r}},n.directive("tgBacklogSprint",["$tgRepo","$rootScope",t]),e=function(t,e,r,n){var i,o;return o=e.get("backlog/sprint-header.html"),i=function(e,i,s,a){var c,u,l,p;return l=n.instant("BACKLOG.SPRINTS.DATE"),c=function(){return e.project.my_permissions.indexOf("modify_milestone")!==-1},u=function(){return e.project.my_permissions.indexOf("view_milestones")!==-1},p=function(n){var s,a,p,d,f,h,g;return h=t.resolve("project-taskboard",{project:e.project.slug,sprint:n.slug}),f=moment(n.estimated_start).format(l),d=moment(n.estimated_finish).format(l),p=f+"-"+d,a={name:n.name,taskboardUrl:h,estimatedDateRange:p,closedPoints:n.closed_points||0,totalPoints:n.total_points||0,isVisible:u(),isEditable:c()},g=e.$new(),_.assign(g,a),s=r(o)(g),i.html(s)},e.$watch("sprint",function(t){return p(t)}),e.$on("$destroy",function(){return i.off()})},{link:i,restrict:"EA"}},n.directive("tgBacklogSprintHeader",["$tgNavUrls","$tgTemplate","$compile","$translate",e]),r=function(t,e,r){var n,i;return n=!0,i=function(i,o,s){var a,c;return c=$("
    "),o.after(c),a=null,o.on("click",function(r){return r.preventDefault(),n=!n,a=e().target(c).start(),n?t.$broadcast("backlog:unload-closed-sprints"):t.$broadcast("backlog:load-closed-sprints")}),i.$on("$destroy",function(){return o.off()}),i.$on("closed-sprints:reloaded",function(t,e){var n,i;return a.finish(),n=e.length>0?"BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS":"BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS",i=r.instant(n),o.find(".text").text(i)})},{link:i}},n.directive("tgBacklogToggleClosedSprintsVisualization",["$rootScope","$tgLoading","$translate",r])}.call(this),function(){var t,e,r,n,i,o,s,a,c;s=this.taiga,n=this.taiga.mixOf,c=this.taiga.toggleText,o=this.taiga.scopeDefer,e=this.taiga.bindOnce,r=this.taiga.groupBy,a=this.taiga.timeout,i=angular.module("taigaTaskboard"),t=function(t){var e,r;return r=function(e,r){var n,i,o,s;return s=e.width(),e.height(240),i=_.map(r,function(t){return moment.utc(t.day)}),n=[],n.unshift({data:_.zip(i,_.map(r,function(t){return t.optimal_points})),lines:{fillColor:"rgba(120,120,120,0.2)"}}),n.unshift({data:_.zip(i,_.map(r,function(t){return t.open_points})),lines:{fillColor:"rgba(102,153,51,0.3)"}}),o={grid:{borderWidth:{top:0,right:1,left:0,bottom:0},borderColor:"#ccc",hoverable:!0},xaxis:{tickSize:[1,"day"],min:i[0],max:_.last(i),mode:"time",daysNames:i,axisLabel:t.instant("TASKBOARD.CHARTS.XAXIS_LABEL"),axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5},yaxis:{min:0,axisLabel:t.instant("TASKBOARD.CHARTS.YAXIS_LABEL"),axisLabelUseCanvas:!0,axisLabelFontSizePixels:12,axisLabelFontFamily:"Verdana, Arial, Helvetica, Tahoma, sans-serif",axisLabelPadding:5},series:{shadowSize:0,lines:{show:!0,fill:!0},points:{show:!0,fill:!0,radius:4,lineWidth:2}},colors:["rgba(102,153,51,1)","rgba(120,120,120,0.2)"],tooltip:!0,tooltipOpts:{content:function(e,r,n,i){var o,s;return o=moment(r).format(t.instant("TASKBOARD.CHARTS.DATE")),s=Math.round(n),1===i.seriesIndex?t.instant("TASKBOARD.CHARTS.OPTIMAL",{formattedDate:o,roundedValue:s}):t.instant("TASKBOARD.CHARTS.REAL",{formattedDate:o,roundedValue:s})}}},e.empty(),e.plot(n,o).data("plot")},e=function(t,e,n){var i;return i=angular.element(e),t.$on("resize",function(){if(t.stats)return r(i,t.stats.days)}),t.$on("taskboard:graph:toggle-visibility",function(){return e.parent().toggleClass("open"),a(100,function(){if(t.stats)return r(i,t.stats.days)})}),t.$watch("stats",function(e){if(null!=t.stats)return r(i,t.stats.days)}),t.$on("$destroy",function(){return e.off()})},{link:e}},i.directive("tgSprintGraph",["$translate",t])}.call(this),function(){var t,e,r,n,i,o;i=this.taiga,e=this.taiga.bindOnce,r=this.taiga.debounce,o=this.taiga.trim,n=angular.module("taigaTaskboard"),t=function(t,e,n,i,o,s){var a;return a=function(t,a,c){var u,l;return t.form={data:"",usId:null},u=r(2e3,function(r){return function(r){var c,u,p,d,f,h,g;if(r.preventDefault(),p=a.find("form").checksley(),p.validate())return c=i().target(l).start(),u=t.form.data,d=t.projectId,h=t.form.sprintId,g=t.form.usId,f=e.tasks.bulkCreate(d,h,g,u),f.then(function(t){return t=_.map(t,function(t){return function(t){return s.make_model("tasks",t)}}(this)),c.finish(),n.$broadcast("taskform:bulk:success",t),o.close(a)}),f.then(null,function(){return c.finish()})}}(this)),t.$on("taskform:bulk",function(e,r,n){return o.open(a),t.form={data:"",sprintId:r,usId:n}}),l=a.find(".submit-button"),a.on("submit","form",u),t.$on("$destroy",function(){return a.off()})},{link:a}},n.directive("tgLbCreateBulkTasks",["$tgRepo","$tgResources","$rootScope","$tgLoading","lightboxService","$tgModel",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f=function(t,e){function r(){this.constructor=t}for(var n in e)h.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},h={}.hasOwnProperty;l=this.taiga,d=this.taiga.toggleText,a=this.taiga.mixOf,s=this.taiga.groupBy,i=this.taiga.bindOnce,u=this.taiga.scopeDefer,p=this.taiga.timeout,n=this.taiga.bindMethods,o=this.taiga.debounceLeading,c=angular.module("taigaTaskboard"),t=function(t){function e(t,e,r,i,o,s,a,c,u,p,d,f,h,g,m,v,y,_,b){this.scope=t,this.rootscope=e,this.repo=r,this.confirm=i,this.rs=o,this.rs2=s,this.params=a,this.q=c,this.appMetaService=u,this.location=p,this.navUrls=d,this.events=f,this.analytics=h,this.translate=g,this.errorHandlingService=m,this.taskboardTasksService=v,this.taskboardIssuesService=y,this.storage=_,this.filterRemoteStorageService=b,n(this),this.taskboardTasksService.reset(),this.scope.userstories=[],this.openFilter=!1,this.applyStoredFilters(this.params.pslug,"tasks-filters")||(this.scope.sectionName=this.translate.instant("TASKBOARD.SECTION_NAME"),this.initializeEventHandlers(),l.defineImmutableProperty(this.scope,"usTasks",function(t){return function(){return t.taskboardTasksService.usTasks}}(this)),l.defineImmutableProperty(this.scope,"milestoneIssues",function(t){return function(){return t.taskboardIssuesService.milestoneIssues}}(this)))}return f(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","tgResources","$routeParams","$q","tgAppMetaService","$tgLocation","$tgNavUrls","$tgEvents","$tgAnalytics","$translate","tgErrorHandlingService","tgTaskboardTasks","tgTaskboardIssues","$tgStorage","tgFilterRemoteStorageService"],e.prototype.excludePrefix="exclude_",e.prototype.filterCategories=["tags","status","assigned_to","owner","role"],e.prototype.firstLoad=function(){var t;return t=this.loadInitialData(),t.then(function(t){return function(){ +return t._setMeta()}}(this)),t.then(null,this.onInitialDataError.bind(this))},e.prototype.setZoom=function(t,e){var r;return this.zoomLevel===t?null:(this.isFirstLoad=!this.zoomLevel,r=this.zoomLevel,this.zoomLevel=t,this.zoom=e,this.isFirstLoad?this.firstLoad().then(function(t){return function(){return t.isFirstLoad=!1,t.taskboardTasksService.resetFolds()}}(this)):this.zoomLevel>1&&r<=1&&(this.zoomLoading=!0,this.q.all([this.loadTasks(),this.loadIssues()]).then(function(t){return function(){return t.zoomLoading=!1,t.taskboardTasksService.resetFolds()}}(this))),"0"===this.zoomLevel?this.rootscope.$broadcast("sprint:zoom0"):void 0)},e.prototype.changeQ=function(t){return this.replaceFilter("q",t),this.loadTasks(),this.generateFilters()},e.prototype.removeFilter=function(t){return this.unselectFilter(t.dataType,t.id,!1,t.mode),this.loadTasks(),this.generateFilters()},e.prototype.addFilter=function(t){return this.selectFilter(t.category.dataType,t.filter.id,!1,t.mode),this.loadTasks(),this.generateFilters()},e.prototype.selectCustomFilter=function(t){return this.replaceAllFilters(t.filter),this.loadTasks(),this.generateFilters()},e.prototype.removeCustomFilter=function(t){return this.filterRemoteStorageService.getFilters(this.scope.projectId,"tasks-custom-filters").then(function(e){return function(r){return delete r[t.id],e.filterRemoteStorageService.storeFilters(e.scope.projectId,r,"tasks-custom-filters").then(e.generateFilters)}}(this))},e.prototype.isFilterDataTypeSelected=function(t){var e,r,n,i;for(i=this.selectedFilters,r=0,n=i.length;r0}),a.assigned_to=_.map(s.assigned_to,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.full_name||"Unassigned",t}),a.role=_.map(s.roles,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.name||"Unassigned",t}),a.owner=_.map(s.owners,function(t){return t.id=t.id.toString(),t.name=t.full_name,t}),e.selectedFilters=[],l=e.filterCategories,c=0,u=l.length;c1&&(t.include_attachments=1),t=_.merge(t,this.location.search()),this.rs.issues.listInProject(this.scope.projectId,this.scope.sprintId,t).then(function(t){return function(e){return t.taskboardIssuesService.init(t.scope.project,t.scope.usersById,t.scope.issueStatusById),t.taskboardIssuesService.set(e),t.scope.taskBoardLoading=!1}}(this))},e.prototype.loadTasks=function(){var t;return t={},this.zoomLevel>1&&(t.include_attachments=1),t=_.merge(t,this.location.search()),this.rs.tasks.list(this.scope.projectId,this.scope.sprintId,null,t).then(function(t){return function(e){return t.taskboardTasksService.init(t.scope.project,t.scope.usersById),t.taskboardTasksService.set(e)}}(this))},e.prototype.loadTaskboard=function(){return this.q.all([this.refreshTagsColors(),this.loadSprintStats(),this.loadSprint().then(function(t){return function(){return t.loadTasks(),t.loadIssues()}}(this))])},e.prototype.loadInitialData=function(){var t,e;return t={pslug:this.params.pslug,sslug:this.params.sslug},e=this.repo.resolve(t).then(function(t){return function(e){return t.scope.projectId=e.project,t.scope.sprintId=e.milestone,t.initializeSubscription(),e}}(this)),e.then(function(t){return function(){return t.loadProject()}}(this)).then(function(t){return function(){return t.generateFilters(),t.loadTaskboard().then(function(){return t.setRolePoints()})}}(this))},e.prototype.showPlaceHolder=function(t,e){return!(this.taskboardTasksService.tasksRaw.length||this.scope.taskStatusList[0].id!==t||this.scope.userstories.length&&this.scope.userstories[0].id!==e)},e.prototype.editTask=function(t){var e;return e=this.taskboardTasksService.getTask(t),e=e.set("loading-edit",!0),this.taskboardTasksService.replace(e),this.rs.tasks.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){return t.rs2.attachments.list("task",e.get("id"),e.getIn(["model","project"])).then(function(n){return t.rootscope.$broadcast("genericform:edit",{objType:"task",obj:r,project:t.scope.project,sprintId:t.scope.sprintId,attachments:n.toJS()}),e=e.set("loading-edit",!1),t.taskboardTasksService.replace(e)})}}(this))},e.prototype.editIssue=function(t){var e;return e=this.taskboardIssuesService.getIssue(t),e=e.set("loading-edit",!0),this.rs.issues.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){return t.rs2.attachments.list("issue",e.get("id"),e.getIn(["model","project"])).then(function(n){return t.rootscope.$broadcast("genericform:edit",{objType:"issue",obj:r,project:t.scope.project,sprintId:t.scope.sprintId,attachments:n.toJS()}),e=e.set("loading-edit",!1)})}}(this))},e.prototype.deleteTask=function(t){var e;return e=this.taskboardTasksService.getTask(t),e=e.set("loading-delete",!0),this.rs.tasks.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){var n,i;return e=e.set("loading-delete",!1),i=t.translate.instant("TASK.TITLE_DELETE_ACTION"),n=r.subject,t.confirm.askOnDelete(i,n).then(function(e){var n;return n=t.repo.remove(r),n.then(function(){return t.scope.$broadcast("taskboard:task:deleted"),e.finish()}),n.then(null,function(){return e.finish(!1),this.confirm.notify("error")})})}}(this))},e.prototype.deleteIssue=function(t){var e;return e=this.taskboardIssuesService.getIssue(t),e=e.set("loading-delete",!0),this.rs.issues.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){var n,i;return e=e.set("loading-delete",!1),i=t.translate.instant("ISSUES.ACTION_DELETE"),n=r.subject,t.confirm.askOnDelete(i,n).then(function(e){var n;return n=t.repo.remove(r),n.then(function(){return t.scope.$broadcast("taskboard:issue:deleted"),e.finish()}),n.then(null,function(){return e.finish(!1),this.confirm.notify("error")})})}}(this))},e.prototype.removeIssueFromSprint=function(t){var e;return e=this.taskboardIssuesService.getIssue(t),e=e.set("loading-delete",!0),this.rs.issues.getByRef(e.getIn(["model","project"]),e.getIn(["model","ref"])).then(function(t){return function(r){var n,i;return e=e.set("loading-delete",!1),i=t.translate.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.TITLE"),n=t.translate.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE"),n=t.translate.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE",{sprintName:t.scope.sprint.name}),t.confirm.ask(i,null,n).then(function(e){var n;return r.milestone=null,n=t.repo.save(r),n.then(function(){return t.taskboardIssuesService.remove(r),e.finish()}),n.then(null,function(){return e.finish(!1),this.confirm.notify("error")})})}}(this))},e.prototype.taskMove=function(t,e,r,n,i,o){var s,a,c,u;return this.scope.movingTask=!0,e=this.taskboardTasksService.getTaskModel(e.get("id")),s=this.taskboardTasksService.move(e.id,n,i,o),c={status__is_archived:!1,include_attachments:!0},a={headers:{"set-orders":JSON.stringify(s.set_orders)}},u=this.repo.save(e,!0,c,a,!0).then(function(t){return function(e){var r;if(e[0].user_story&&t.reloadUserStory(e[0].user_story),t.scope.movingTask=!1,r=e[1],r&&r["taiga-info-order-updated"]&&(o=JSON.parse(r["taiga-info-order-updated"]),t.taskboardTasksService.assignOrders(o)),t.loadSprintStats(),t.generateFilters(),t.isFilterDataTypeSelected("status"))return t.loadTasks()}}(this))},e.prototype.reloadUserStory=function(t){return this.rs.userstories.get(this.scope.project.id,t).then(function(t){return function(e){return t.scope.userstories=_.map(t.scope.userstories,function(t){return t.id===e.id?e:t})}}(this))},e.prototype.addNewTask=function(t,e){switch(t){case"standard":return this.rootscope.$broadcast("genericform:new",{objType:"task",project:this.scope.project,sprintId:this.scope.sprintId,usId:null!=e?e.id:void 0});case"bulk":return this.rootscope.$broadcast("taskform:bulk",this.scope.sprintId,null!=e?e.id:void 0)}},e.prototype.addNewIssue=function(t,e){switch(t){case"standard":return this.rootscope.$broadcast("genericform:new-or-existing",{objType:"issue",project:this.scope.project,sprintId:this.scope.sprintId,relatedField:"milestone",relatedObjectId:this.scope.sprintId,targetName:this.scope.sprint.name});case"standard":return this.rootscope.$broadcast("taskform:new",this.scope.sprintId,null!=e?e.id:void 0);case"bulk":return this.rootscope.$broadcast("issueform:bulk",this.scope.projectId,this.scope.sprintId)}},e.prototype.toggleFold=function(t,e){return"issues"===e?this.taskboardIssuesService.toggleFold(t):"tasks"===e?this.taskboardTasksService.toggleFold(t):void 0},e.prototype.changeTaskAssignedTo=function(t){var e;return e=this.taskboardTasksService.getTaskModel(t),this.rootscope.$broadcast("assigned-to:add",e)},e.prototype.changeIssueAssignedTo=function(t){var e;return e=this.taskboardIssuesService.getIssueModel(t),this.rootscope.$broadcast("assigned-to:add",e)},e.prototype.setRolePoints=function(){var t,e,r,n;return t=_.filter(this.scope.project.roles,"computable"),r=function(e){return function(e){return e=parseInt(e,10),_.find(t,function(t){return t.id===e})}}(this),e=function(t){return function(e){var r;return r=parseInt(e,10),_.find(t.scope.project.points,function(t){return t.id===e})}}(this),n=_.reduce(this.scope.userstories,function(t){return function(t,n,i){return _.forOwn(n.points,function(n,i){var o,s;return s=r(i),o=e(n),t[s.id]||(t[s.id]=s,t[s.id].points=0),t[s.id].points+=o.value}),t}}(this),{}),this.scope.pointsByRole=Object.keys(n).map(function(t){return n[t]})},e}(a(l.Controller,l.PageMixin,l.FiltersMixin)),c.controller("TaskboardController",t),e=function(t){var e;return e=function(e,r,n){var i,o;return i=r.controller(),r.on("click",".toggle-analytics-visibility",function(e){var r;return e.preventDefault(),r=angular.element(e.currentTarget),r.toggleClass("active"),t.$broadcast("taskboard:graph:toggle-visibility")}),o=r.find(".taskboard-table-body"),o.on("scroll",function(t){var e,n;return n=angular.element(t.currentTarget),e=r.find(".taskboard-table-header .taskboard-table-inner"),e.css("left",-1*n.scrollLeft())}),e.$on("$destroy",function(){return r.off()})},{link:e}},c.directive("tgTaskboard",["$rootScope",e]),r=function(t){var e,r,n;return e=40,n=300,r=function(r,i,o){var s,a,c,u,l;return r.$on("sprint:zoom0",function(t){return function(){return c()}}(this)),r.$on("sprint:task:moved",function(t){return function(){return c()}}(this)),r.$watch("usTasks",function(){if(r.project)return r.statusesFolded=t.tasks.getStatusColumnModes(r.project.id),r.usFolded=t.tasks.getUsRowModes(r.project.id,r.sprintId),c()}),r.foldStatus=function(e){return r.statusesFolded[e.id]=!r.statusesFolded[e.id],t.tasks.storeStatusColumnModes(r.projectId,r.statusesFolded),c()},r.foldUs=function(e){return r.usFolded[e]=!r.usFolded[e],t.tasks.storeUsRowModes(r.projectId,r.sprintId,r.usFolded),c()},s=function(t){return function(t,n){var i,o,s;return i=t?r.usTasks.getIn([t.toString(),n.toString()]).size:r.usTasks.getIn(["null",n.toString()]).size,r.statusesFolded[n]?(i&&r.usFolded[t]?(o=Math.round(Math.sqrt(i)),s=e*o):s=e,s):0}}(this),l=function(t){return function(t,e){var o;return o=i.find(".squish-status-"+t),e?o.css("max-width",e):"0"===r.ctrl.zoomLevel?o.css("max-width",148):o.css("max-width",n)}}(this),u=function(t){return function(){var t,e,n,o,s;return t=[],e=i.find(".task-colum-name"),t=_.map(e,function(t){return $(t).outerWidth(!0)}),s=_.reduce(t,function(t,e){return t+e}),i.find(".taskboard-table-inner").css("width",s),o=i.find(".issues-row .taskboard-row-title-box").outerWidth(!0),i.find(".issues-row").css("width",s-t.pop()),n="0"===r.ctrl.zoomLevel?128:280,i.find(".issues-row .taskboard-cards-box .card").css("max-width",n)}}(this),a=function(t){return function(t){var e;return e=s(null,t),_.forEach(r.userstories,function(r){var n;if(n=s(r.id,t),n>e)return e=n}),l(t,e)}}(this),c=function(t){return function(){_.forEach(r.taskStatusList,function(t){return a(t.id)}),u()}}(this)},{link:r}},c.directive("tgTaskboardSquishColumn",["$tgResources",r])}.call(this),function(){var t,e,r,n,i,o,s,a;s=this.taiga,n=this.taiga.mixOf,a=this.taiga.toggleText,o=this.taiga.scopeDefer,e=this.taiga.bindOnce,r=this.taiga.groupBy,i=angular.module("taigaBacklog"),t=function(t,e,r,n){var i;return i=function(t,e,i){var o;return o=t.$watch("usTasks",function(i){var s,a,c,u,l,p,d,f,h;if(i&&i.size&&(o(),t.project.my_permissions.indexOf("modify_task")>-1))return d=null,p=null,l=null,h=e,u=function(){var t;return t=n.instant("BACKLOG.SORTABLE_FILTER_ERROR"),$tgConfirm.notify("error",t)},a=function(t){return t.scope().$destroy(),t.off(),t.remove()},s=_.map(e.find(".taskboard-column"),function(t){return t}),c=dragula(s,{copySortSource:!1,copy:!1,accepts:function(t,e){return!$(e).hasClass("taskboard-row-title-box")},moves:function(t){return $(t).is("tg-card")}}),c.on("drag",function(t){if(d=$(t).parent().scope(),e.hasClass("active-filters"))return u(),setTimeout(function(){return c.cancel(!0)},0),!1}),c.on("dragend",function(e){var n,i,o,s,c,u,f;return f=$(e).parent(),l=$(e),i=l.scope().task,n=l.index(),p=f.scope(),u=d.us?d.us.id:null,c=d.st.id,s=p.us?p.us.id:null,o=p.st.id,o===c&&s===u||a(l),t.$apply(function(){return r.$broadcast("taskboard:task:move",i,i.getIn(["model","status"]),s,o,n)})}),f=autoScroll([$(".taskboard-table-body")[0]],{margin:100,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&c.dragging}}),t.$on("$destroy",function(){return e.off(),c.destroy()})})},{link:i}},i.directive("tgTaskboardSortable",["$tgRepo","$tgResources","$rootScope","$translate",t])}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga.groupBy,t=function(t){function e(){this.reset()}return r(e,t),e.$inject=[],e.prototype.reset=function(){return this.foldStatusChanged={},this.issuesRaw=[]},e.prototype.init=function(t,e,r){return this.issueStatusById=r,this.project=t,this.usersById=e},e.prototype.resetFolds=function(){return this.foldStatusChanged={},this.refresh()},e.prototype.toggleFold=function(t){return this.foldStatusChanged[t]=!this.foldStatusChanged[t],this.refresh()},e.prototype.add=function(t){return this.issuesRaw=this.issuesRaw.concat(t),this.refresh()},e.prototype.remove=function(t){var e,r,n;n=this.issuesRaw;for(r in n)if(e=n[r],t.id===e.id)return this.issuesRaw.splice(r,1),void this.refresh()},e.prototype.set=function(t){return this.issuesRaw=t,this.refresh()},e.prototype.getIssue=function(t){return this.milestoneIssues.find(function(e){return e.get("id")===t})},e.prototype.getIssueModel=function(t){return _.find(this.issuesRaw,function(e){return e.id===t})},e.prototype.replaceModel=function(t){return this.issuesRaw=_.map(this.issuesRaw,function(e){return t.id===e.id?t:e}),this.refresh()},e.prototype.refresh=function(){var t,e,r,n,i,o;for(n=[],o=this.issuesRaw,t=0,i=o.length;t1)for(s=0,l=f.length;s1)for(o=0,f=b.length;o1&&(k=_.map(b,function(t){return function(e){return{us_id:e.id,order:t.order[e.id]}}}(this)))}}else{for($=0,p=u=0,h=n.length;u1&&r<=1?(this.zoomLoading=!0,this.loadUserstories().then(function(t){return function(){return t.zoomLoading=!1,t.kanbanUserstoriesService.resetFolds()}}(this))):void 0)},e.prototype.filtersReloadContent=function(){return this.loadUserstories().then(function(t){return function(){var e,r,n,i,o;if(n=_.difference(t.kanbanUserstoriesService.archivedStatus,t.kanbanUserstoriesService.statusHide),n.length){for(i=[],e=0,r=n.length;e0&&(r.assigned_to=n[0]),0===n.length&&(r.assigned_to=null),this.kanbanUserstoriesService.replaceModel(r),this.repo.save(r).then(function(t){return function(){if(t.generateFilters(),t.isFilterDataTypeSelected("assigned_users")||t.isFilterDataTypeSelected("role"))return t.filtersReloadContent()}}(this))},e.prototype.refreshTagsColors=function(){return this.rs.projects.tagsColors(this.scope.projectId).then(function(t){return function(e){return t.scope.project.tags_colors=e._attrs}}(this))},e.prototype.loadUserstories=function(){var t,e;return t={status__is_archived:!1},this.zoomLevel>1&&(t.include_attachments=1,t.include_tasks=1),t=_.merge(t,this.location.search()),e=this.rs.userstories.listAll(this.scope.projectId,t).then(function(t){return function(e){return t.kanbanUserstoriesService.init(t.scope.project,t.scope.usersById),t.kanbanUserstoriesService.set(e),d(t.scope,function(){return t.scope.$broadcast("userstories:loaded",e)}),e}}(this)),e.then(function(t){return function(){return t.scope.$broadcast("redraw:wip")}}(this)),e},e.prototype.loadUserStoriesForStatus=function(t,e){var r,n;if(r=this.location.search().status,!r||(r=r.split(",").map(function(t){return parseInt(t,10)}),r.indexOf(e)!==-1))return n={status:e,include_attachments:!0,include_tasks:!0},n=_.merge(n,this.location.search()),this.rs.userstories.listAll(this.scope.projectId,n).then(function(t){return function(r){return t.scope.$broadcast("kanban:shown-userstories-for-status",e,r),r}}(this))},e.prototype.hideUserStoriesForStatus=function(t,e){return this.scope.$broadcast("kanban:hidden-userstories-for-status",e)},e.prototype.loadKanban=function(){return this.q.all([this.refreshTagsColors(),this.loadUserstories()])},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_kanban_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.projectId=t.id,this.scope.points=_.sortBy(t.points,"order"),this.scope.pointsById=u(t.points,function(t){return t.id}),this.scope.usStatusById=u(t.us_statuses,function(t){return t.id}),this.scope.usStatusList=_.sortBy(t.us_statuses,"order"),this.scope.$emit("project:loaded",t),t},e.prototype.initializeSubscription=function(){var t,e;return e="changes.project."+this.scope.projectId+".userstories",t=f.randomInt(700,1e3),this.events.subscribe(this.scope,e,c(t,function(t){return function(e){return t.loadUserstories()}}(this)))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.initializeSubscription(),this.loadKanban(),this.generateFilters()},e.prototype.prepareBulkUpdateData=function(t,e){return null==e&&(e="kanban_order"),_.map(t,function(t){return{us_id:t.id,order:t[e]}})},e.prototype.moveUs=function(t,e,r,n){var i,o;return this.cleanSelectedUss(),e=_.map(e,function(t){return function(e){return t.kanbanUserstoriesService.getUsModel(e.id)}}(this)),i=this.kanbanUserstoriesService.move(e,r,n),o=this.rs.userstories.bulkUpdateKanbanOrder(this.scope.projectId,r,i.bulkOrders),o.then(function(t){return function(){var r,n,s;return r={headers:{"set-orders":JSON.stringify(i.setOrders)}},n={include_attachments:!0,include_tasks:!0},s=_.map(e,function(e){return t.repo.save(e,!0,n,r,!0)}),o=t.q.all(s),o.then(function(e){var r,n;return r=e[1],r&&r["taiga-info-order-updated"]&&(n=JSON.parse(r["taiga-info-order-updated"]),t.kanbanUserstoriesService.assignOrders(n)),t.scope.$broadcast("redraw:wip"),t.generateFilters(),t.isFilterDataTypeSelected("status")&&t.filtersReloadContent(),o})}}(this))},e}(l(f.Controller,f.PageMixin,f.FiltersMixin,f.UsFiltersMixin)),p.controller("KanbanController",r),n=function(t,e){var r;return r=function(t,e,r){var n;return n=e.find(".kanban-table-body"),n.on("scroll",function(t){var r,n;return n=angular.element(t.currentTarget),r=e.find(".kanban-table-header .kanban-table-inner"),r.css("left",-1*n.scrollLeft())}),t.$on("$destroy",function(){return e.off()})},{link:r}},p.directive("tgKanban",["$tgRepo","$rootScope",n]),t=function(t,e,r){var n,i,o;return o=e.instant("KANBAN.ACTION_SHOW_ARCHIVED"),n=e.instant("KANBAN.ACTION_HIDE_ARCHIVED"),i=function(e,i,s){var a,c;return c=e.$eval(s.tgKanbanArchivedStatusHeader),a=!0,r.addArchivedStatus(c.id),r.hideStatus(c.id),e["class"]="icon-watch",e.title=o,i.on("click",function(i){return a=!a,e.$apply(function(){return a?(e["class"]="icon-watch",e.title=o,t.$broadcast("kanban:hide-userstories-for-status",c.id),r.hideStatus(c.id)):(e["class"]="icon-unwatch",e.title=n,t.$broadcast("kanban:show-userstories-for-status",c.id),r.showStatus(c.id))})}),e.$on("$destroy",function(){return i.off()})},{link:i}},p.directive("tgKanbanArchivedStatusHeader",["$rootScope","$translate","tgKanbanUserstories",t]),e=function(t,e){var r,n;return n=[],r=function(r,n,i){var o,s,a;return o=t.instant("KANBAN.HIDDEN_USER_STORIES"),s=r.$eval(i.tgKanbanArchivedStatusIntro),n.text(o),a=function(t){return t?n.text(""):n.text(o)},r.$on("kanban:us:move",function(t,r,n,i,o){var s;return s=!!e.getStatus(i).length,a(s)}),r.$on("kanban:shown-userstories-for-status",function(t,r,n){var i;if(r===s.id)return e.deleteStatus(r),e.add(n),i=!!e.getStatus(r).length,a(i)}),r.$on("kanban:hidden-userstories-for-status",function(t,e){if(e===s.id)return a(!1)}),r.$on("$destroy",function(){return n.off()})},{link:r}},p.directive("tgKanbanArchivedStatusIntro",["$translate","tgKanbanUserstories",e]),i=function(t,e){var r;return r=function(r,n,i){var o,s;return r.foldStatus=function(e){r.folds[e.id]=!r.folds[e.id],t.kanban.storeStatusColumnModes(r.projectId,r.folds),s()},s=function(){var t,e;return t=_.map(r.usStatusList,function(t){return r.folds[t.id]?40:310}),e=_.reduce(t,function(t,e){return t+e}),n.find(".kanban-table-inner").css("width",e)},o=r.$watch("usByStatus",function(n){if(n.size)return r.folds=t.kanban.getStatusColumnModes(e.project.get("id")),s(),o()})},{link:r}},p.directive("tgKanbanSquishColumn",["$tgResources","tgProjectService",i]),o=function(t){var e;return e=function(e,r,n){var i,o;return o=e.$eval(n.tgKanbanWipLimit),i=function(e){return function(){return r.find(".kanban-wip-limit").remove(),t(function(){var t;if(t=r.find("tg-card")[o.wip_limit])return angular.element(t).before("
    ")})}}(this),o&&!o.is_archived&&(e.$on("redraw:wip",i),e.$on("kanban:us:move",i),e.$on("usform:new:success",i),e.$on("usform:bulk:success",i)),e.$on("$destroy",function(){return r.off()})},{link:e}},p.directive("tgKanbanWipLimit",["$timeout",o])}.call(this),function(){var t,e,r,n,i,o,s,a,c;s=this.taiga,n=this.taiga.mixOf,c=this.taiga.toggleText,o=this.taiga.scopeDefer,e=this.taiga.bindOnce,r=this.taiga.groupBy,a=this.taiga.timeout,i=angular.module("taigaKanban"),t=function(t,e,r){var n;return n=function(t,e,n){var i;return i=t.$watch("usByStatus",function(n){var o,s,a,c,u,l,p;if(n&&n.size&&(i(),t.project.my_permissions.indexOf("modify_us")>-1))return u=null,c=null,p=e,s=function(t){return t.scope().$destroy(),t.off(),t.remove()},o=_.map(e.find(".taskboard-column"),function(t){return t}),a=dragula(o,{copySortSource:!1,copy:!1,moves:function(t){return $(t).is("tg-card")}}),a.on("drag",function(t){return window.dragMultiple.start(t,o)}),a.on("cloned",function(t,e){return $(t).addClass("multiple-drag-mirror")}),a.on("dragend",function(e){var n,i,o,a,l,p,d,f;return d=$(e).parent(),u=d.scope(),p=u.s.id,n=window.dragMultiple.stop(),n.length||(n=[e]),o=n[0],a=$(d).find("tg-card").index(o),l=u.s.id,f=_.map(n,function(t){return $(t).scope().us}),i=_.map(f,function(t){return{id:t.get("id"),oldStatusId:t.getIn(["model","status"])}}),t.$apply(function(){return _.each(f,function(t){return function(t,e){var r,i;if(r=t.getIn(["model","status"]),i=l===r,!i)return c=$(n[e]),s(c)}}(this)),r.$broadcast("kanban:us:move",i,l,a)})}),l=autoScroll(o,{margin:100,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&a.dragging}}),t.$on("$destroy",function(){return e.off(),a.destroy()})})},{link:n}},i.directive("tgKanbanSortable",["$tgRepo","$tgResources","$rootScope",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p=function(t,e){function r(){this.constructor=t}for(var n in e)d.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},d={}.hasOwnProperty;u=this.taiga,a=this.taiga.mixOf,l=this.taiga.toString,s=this.taiga.joinStr,o=this.taiga.groupBy,i=this.taiga.bindOnce,n=this.taiga.bindMethods,c=angular.module("taigaEpics"),t=function(t){function e(t,e,r,i,o,s,a,c,u,l,p,d,f,h,g,m,v){var y;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=i,this.rs=o,this.rs2=s,this.params=a,this.q=c,this.location=u,this.log=l,this.appMetaService=p,this.analytics=d,this.navUrls=f,this.translate=h,this.modelTransform=g,this.errorHandlingService=m,this.projectService=v,n(this),this.scope.epicRef=this.params.epicref,this.scope.sectionName=this.translate.instant("EPIC.SECTION_NAME"),this.initializeEventHandlers(),y=this.loadInitialData(),y.then(function(t){return function(){return t._setMeta(),t.initializeOnDeleteGoToUrl()}}(this)),y.then(null,this.onInitialDataError.bind(this))}return p(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","tgResources","$routeParams","$q","$tgLocation","$log","tgAppMetaService","$tgAnalytics","$tgNavUrls","$translate","$tgQueueModelTransformation","tgErrorHandlingService","tgProjectService"],e.prototype._setMeta=function(){var t,e,r;return r=this.translate.instant("EPIC.PAGE_TITLE",{epicRef:"#"+this.scope.epic.ref,epicSubject:this.scope.epic.subject,projectName:this.scope.project.name}),t=this.translate.instant("EPIC.PAGE_DESCRIPTION",{epicStatus:(null!=(e=this.scope.statusById[this.scope.epic.status])?e.name:void 0)||"--",epicDescription:angular.element(this.scope.epic.description_html||"").text()}),this.appMetaService.setAll(r,t)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("attachment:create",function(t){return function(){return t.analytics.trackEvent("attachment","create","create attachment on epic",1)}}(this)),this.scope.$on("comment:new",function(t){return function(){return t.loadEpic()}}(this)),this.scope.$on("custom-attributes-values:edit",function(t){return function(){return t.rootscope.$broadcast("object:updated")}}(this))},e.prototype.initializeOnDeleteGoToUrl=function(){var t;return t={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-epics",t)},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.immutableProject=this.projectService.project,this.scope.$emit("project:loaded",t),this.scope.statusList=t.epic_statuses,this.scope.statusById=o(t.epic_statuses,function(t){return t.id}),t},e.prototype.loadEpic=function(){return this.rs.epics.getByRef(this.scope.projectId,this.params.epicref).then(function(t){return function(e){var r,n,i;if(t.scope.epic=e,t.scope.immutableEpic=Immutable.fromJS(e._attrs),t.scope.epicId=e.id,t.scope.commentModel=e,t.modelTransform.setObject(t.scope,"epic"),null!=(null!=(n=t.scope.epic.neighbors.previous)?n.ref:void 0)&&(r={project:t.scope.project.slug,ref:t.scope.epic.neighbors.previous.ref},t.scope.previousUrl=t.navUrls.resolve("project-epics-detail",r)),null!=(null!=(i=t.scope.epic.neighbors.next)?i.ref:void 0))return r={project:t.scope.project.slug,ref:t.scope.epic.neighbors.next.ref},t.scope.nextUrl=t.navUrls.resolve("project-epics-detail",r)}}(this))},e.prototype.loadUserstories=function(){return this.rs2.userstories.listInEpic(this.scope.epicId).then(function(t){return function(e){return t.scope.userstories=e}}(this))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.loadEpic().then(function(t){return function(){return t.loadUserstories()}}(this))},e.prototype.onUpvote=function(){var t,e;return e=function(t){return function(){return t.loadEpic(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.epics.upvote(this.scope.epicId).then(e,t)},e.prototype.onDownvote=function(){var t,e;return e=function(t){return function(){return t.loadEpic(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.epics.downvote(this.scope.epicId).then(e,t)},e.prototype.onWatch=function(){var t,e;return e=function(t){return function(){return t.loadEpic(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.epics.watch(this.scope.epicId).then(e,t)},e.prototype.onUnwatch=function(){var t,e;return e=function(t){return function(){return t.loadEpic(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.epics.unwatch(this.scope.epicId).then(e,t)},e.prototype.onSelectColor=function(t){var e,r,n;return r=function(t){return function(){return t.rootscope.$broadcast("object:updated"),t.confirm.notify("success")}}(this),e=function(t){return function(){return t.confirm.notify("error")}}(this),n=this.modelTransform.save(function(e){return e.color=t,e}),n.then(r,e)},e}(a(u.Controller,u.PageMixin)),c.controller("EpicDetailController",t),r=function(t,e){var r,n;return n=t.get("common/components/status-display.html",!0),r=function(t,r,i){var o;return o=function(i){var o,s;return s=t.statusById[i.status],o=n({is_closed:s.is_closed,status:s}),o=e(o)(t),r.html(o)},t.$watch(i.ngModel,function(t){if(null!=t)return o(t)}),t.$on("$destroy",function(){return r.off()})},{link:r,restrict:"EA",require:"ngModel"}},c.directive("tgEpicStatusDisplay",["$tgTemplate","$compile",r]),e=function(t,e,r,n,i,o,s,a){var c,u;return u=a.get("common/components/status-button.html",!0),c=function(e,s,a,c){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_epic")!==-1},p=function(t){return function(t){var r,n;return n=e.statusById[t.status],r=o(u({status:n,statuses:e.statusList,editable:l()}))(e),s.html(r)}}(this),d=function(e){var o,a,c,u;return o=n().target(s).start(),u=i.save(function(t){return t.status=e,t}),c=function(){return t.$broadcast("object:updated"),o.finish()},a=function(){return r.notify("error"),o.finish()},u.then(c,a)},s.on("click",".js-edit-status",function(t){if(t.preventDefault(),t.stopPropagation(),l())return s.find(".pop-status").popover().open()}),s.on("click",".status",function(t){var e;if(t.preventDefault(),t.stopPropagation(),l())return e=angular.element(t.currentTarget),$.fn.popover().closeAll(),d(e.data("status-id"))}),e.$watch(function(){var t;return null!=(t=c.$modelValue)?t.status:void 0},function(){var t;if(t=c.$modelValue)return p(t)}),e.$on("$destroy",function(){return s.off()})},{link:c,restrict:"EA",require:"ngModel"}},c.directive("tgEpicStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$compile","$translate","$tgTemplate",e])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v=function(t,e){function r(){this.constructor=t}for(var n in e)y.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},y={}.hasOwnProperty;g=this.taiga,d=this.taiga.mixOf,m=this.taiga.toString,p=this.taiga.joinStr,l=this.taiga.groupBy,u=this.taiga.bindOnce,c=this.taiga.bindMethods,h=this.taiga.normalizeString,f=angular.module("taigaIssues"),e=function(t){function e(t,e,r,n,i,o,s,a,u,l,p,d,f,h,g,m){var v;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.log=u,this.appMetaService=l,this.analytics=p,this.navUrls=d,this.translate=f,this.modelTransform=h,this.errorHandlingService=g,this.projectService=m,c(this),this.scope.issueRef=this.params.issueref,this.scope.sectionName=this.translate.instant("ISSUES.SECTION_NAME"),this.initializeEventHandlers(),v=this.loadInitialData(),v.then(function(t){return function(){return t._setMeta(),t.initializeOnDeleteGoToUrl()}}(this)),v.then(null,this.onInitialDataError.bind(this))}return v(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","tgAppMetaService","$tgAnalytics","$tgNavUrls","$translate","$tgQueueModelTransformation","tgErrorHandlingService","tgProjectService"],e.prototype._setMeta=function(){var t,e,r,n,i,o;return o=this.translate.instant("ISSUE.PAGE_TITLE",{issueRef:"#"+this.scope.issue.ref,issueSubject:this.scope.issue.subject,projectName:this.scope.project.name}),t=this.translate.instant("ISSUE.PAGE_DESCRIPTION",{issueStatus:(null!=(e=this.scope.statusById[this.scope.issue.status])?e.name:void 0)||"--",issueType:(null!=(r=this.scope.typeById[this.scope.issue.type])?r.name:void 0)||"--",issueSeverity:(null!=(n=this.scope.severityById[this.scope.issue.severity])?n.name:void 0)||"--",issuePriority:(null!=(i=this.scope.priorityById[this.scope.issue.priority])?i.name:void 0)||"--",issueDescription:angular.element(this.scope.issue.description_html||"").text()}),this.appMetaService.setAll(o,t)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("attachment:create",function(t){return function(){return t.analytics.trackEvent("attachment","create","create attachment on issue",1)}}(this)),this.scope.$on("promote-issue-to-us:success",function(t){return function(){return t.analytics.trackEvent("issue","promoteToUserstory","promote issue to userstory",1),t.rootscope.$broadcast("object:updated"),t.loadIssue()}}(this)),this.scope.$on("comment:new",function(t){return function(){return t.loadIssue()}}(this)),this.scope.$on("custom-attributes-values:edit",function(t){return function(){return t.rootscope.$broadcast("object:updated")}}(this)),this.scope.$on("assign-sprint-to-issue:success",function(t){return function(e,r){return t.scope.issue.milestone=r,t.rootscope.$broadcast("object:updated"),r?t.loadSprint():t.scope.sprint=null}}(this))},e.prototype.initializeOnDeleteGoToUrl=function(){var t;return t={project:this.scope.project.slug},this.scope.project.is_issues_activated?this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-issues",t):this.scope.onDeleteGoToUrl=this.navUrls.resolve("project",t)},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.statusList=t.issue_statuses,this.scope.statusById=l(t.issue_statuses,function(t){return t.id}),this.scope.typeById=l(t.issue_types,function(t){return t.id}),this.scope.typeList=_.sortBy(t.issue_types,"order"),this.scope.severityList=t.severities,this.scope.severityById=l(t.severities,function(t){return t.id}),this.scope.priorityList=t.priorities,this.scope.priorityById=l(t.priorities,function(t){return t.id}),t},e.prototype.loadIssue=function(){return this.rs.issues.getByRef(this.scope.projectId,this.params.issueref).then(function(t){return function(e){var r,n,i;if(t.scope.issue=e,t.scope.issueId=e.id,t.scope.commentModel=e,t.modelTransform.setObject(t.scope,"issue"),null!=(null!=(n=t.scope.issue.neighbors.previous)?n.ref:void 0)&&(r={project:t.scope.project.slug,ref:t.scope.issue.neighbors.previous.ref},t.scope.previousUrl=t.navUrls.resolve("project-issues-detail",r)),null!=(null!=(i=t.scope.issue.neighbors.next)?i.ref:void 0))return r={project:t.scope.project.slug,ref:t.scope.issue.neighbors.next.ref},t.scope.nextUrl=t.navUrls.resolve("project-issues-detail",r)}}(this))},e.prototype.loadSprint=function(){if(this.scope.issue.milestone)return this.rs.sprints.get(this.scope.issue.project,this.scope.issue.milestone).then(function(t){return function(e){return t.scope.sprint=e,e}}(this))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.loadIssue().then(function(t){return function(){return t.loadSprint()}}(this))},e.prototype.onUpvote=function(){var t,e;return e=function(t){return function(){return t.loadIssue(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.issues.upvote(this.scope.issueId).then(e,t)},e.prototype.onDownvote=function(){var t,e;return e=function(t){return function(){return t.loadIssue(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.issues.downvote(this.scope.issueId).then(e,t)},e.prototype.onWatch=function(){var t,e;return e=function(t){return function(){return t.loadIssue(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.issues.watch(this.scope.issueId).then(e,t)},e.prototype.onUnwatch=function(){var t,e;return e=function(t){return function(){return t.loadIssue(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.issues.unwatch(this.scope.issueId).then(e,t)},e}(d(g.Controller,g.PageMixin)),f.controller("IssueDetailController",e),o=function(t,e){var r,n;return n=t.get("common/components/status-display.html",!0),r=function(t,r,i){var o;return o=function(i){var o,s;return s=t.statusById[i.status],o=n({is_closed:s.is_closed,status:s}),o=e(o)(t),r.html(o)},t.$watch(i.ngModel,function(t){if(null!=t)return o(t)}),t.$on("$destroy",function(){return r.off()})},{link:r,restrict:"EA",require:"ngModel"}},f.directive("tgIssueStatusDisplay",["$tgTemplate","$compile",o]),i=function(t,e,r,n,i,o,s){var a,c;return c=o.get("common/components/status-button.html",!0),a=function(e,o,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_issue")!==-1},p=function(t){return function(t){var r,n;return n=e.statusById[t.status],r=c({status:n,statuses:e.statusList,editable:l()}),r=s(r)(e),o.html(r)}}(this),d=function(e){var s,a,c,u;return $.fn.popover().closeAll(),s=n().target(o).start(),u=i.save(function(t){return t.status=e,t}),c=function(){return t.$broadcast("object:updated"),s.finish()},a=function(){return r.notify("error"),s.finish()},u.then(c,a)},o.on("click",".js-edit-status",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-status").popover().open()}),o.on("click",".status",function(t){var e;if(t.preventDefault(),t.stopPropagation(),l())return e=angular.element(t.currentTarget),d(e.data("status-id"))}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.status:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},f.directive("tgIssueStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",i]),s=function(t,e,r,n,i,o,s){var a,c;return c=o.get("issue/issue-type-button.html",!0),a=function(e,o,a,u){var l,p,d,f;return p=e.$eval(a.notAutoSave),l=function(){return e.project.my_permissions.indexOf("modify_issue")!==-1},d=function(t){var r,n;return n=e.typeById[t.type],r=c({type:n,typees:e.typeList,editable:l()}),r=s(r)(e),o.html(r)},f=function(s){var a,c,l,d;return $.fn.popover().closeAll(),p?(u.$modelValue.type=s,void e.$apply()):(a=n().target(o.find(".level-name")).start(),d=i.save(function(t){return t.type=s,t}),l=function(){return t.$broadcast("object:updated"),a.finish()},c=function(){return r.notify("error"),a.finish()},d.then(l,c))},o.on("click",".type-data",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-type").popover().open()}),o.on("click",".type",function(t){var e,r;if(t.preventDefault(),t.stopPropagation(),l())return e=angular.element(t.currentTarget),r=e.data("type-id"),f(r)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.type:void 0},function(){var t;if(t=u.$modelValue)return d(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},f.directive("tgIssueTypeButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",s]),n=function(t,e,r,n,i,o,s){var a,c;return c=o.get("issue/issue-severity-button.html",!0),a=function(e,o,a,u){var l,p,d,f;return p=e.$eval(a.notAutoSave),l=function(){return e.project.my_permissions.indexOf("modify_issue")!==-1},d=function(t){var r,n;return n=e.severityById[t.severity],r=c({severity:n,severityes:e.severityList,editable:l()}),r=s(r)(e),o.html(r)},f=function(s){var a,c,l,d;return $.fn.popover().closeAll(),p?(u.$modelValue.severity=s,void e.$apply()):(a=n().target(o.find(".level-name")).start(),d=i.save(function(t){return t.severity=s,t}),l=function(){return t.$broadcast("object:updated"),a.finish()},c=function(){ +return r.notify("error"),a.finish()},d.then(l,c))},o.on("click",".severity-data",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-severity").popover().open()}),o.on("click",".severity",function(t){var e,r;if(t.preventDefault(),t.stopPropagation(),l())return r=angular.element(t.currentTarget),e=r.data("severity-id"),f(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.severity:void 0},function(){var t;if(t=u.$modelValue)return d(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},f.directive("tgIssueSeverityButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",n]),r=function(t,e,r,n,i,o,s){var a,c;return c=o.get("issue/issue-priority-button.html",!0),a=function(e,o,a,u){var l,p,d,f;return p=e.$eval(a.notAutoSave),l=function(){return e.project.my_permissions.indexOf("modify_issue")!==-1},d=function(t){var r,n;return n=e.priorityById[t.priority],r=c({priority:n,priorityes:e.priorityList,editable:l()}),r=s(r)(e),o.html(r)},f=function(s){var a,c,l,d;return $.fn.popover().closeAll(),p?(u.$modelValue.priority=s,void e.$apply()):(a=n().target(o.find(".level-name")).start(),d=i.save(function(t){return t.priority=s,t}),l=function(){return t.$broadcast("object:updated"),a.finish()},c=function(){return r.notify("error"),a.finish()},d.then(l,c))},o.on("click",".priority-data",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-priority").popover().open()}),o.on("click",".priority",function(t){var e,r;if(t.preventDefault(),t.stopPropagation(),l())return r=angular.element(t.currentTarget),e=r.data("priority-id"),f(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.priority:void 0},function(){var t;if(t=u.$modelValue)return d(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},f.directive("tgIssuePriorityButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",r]),a=function(t,e,r,n){var i;return i=function(i,o,s,a){var c;return c=function(n){return function(n,i){var o,s,a;return o={generated_from_issue:n.id,project:n.project,subject:n.subject,description:n.description,tags:n.tags,is_blocked:n.is_blocked,blocked_note:n.blocked_note,due_date:n.due_date},a=function(){return i.finish(),r.notify("success"),t.$broadcast("promote-issue-to-us:success")},s=function(){return i.finish(),r.notify("error")},e.create("userstories",o).then(a,s)}}(this),o.on("click","a",function(t){var e,i,o,s;return t.preventDefault(),e=a.$modelValue,s=n.instant("ISSUES.CONFIRM_PROMOTE.TITLE"),i=n.instant("ISSUES.CONFIRM_PROMOTE.MESSAGE"),o=e.subject,r.ask(s,o,i).then(function(t){return function(t){return c(e,t)}}(this))}),i.$on("$destroy",function(){return o.off()})},{restrict:"AE",require:"ngModel",templateUrl:"issue/promote-issue-to-us-button.html",link:i}},f.directive("tgPromoteIssueToUsButton",["$rootScope","$tgRepo","$tgConfirm","$translate",a]),t=function(t,e,r,n,i,o,s,a){var c;return c=function(r,c,u,l){var p,d,f;return p=[],f=null,r.$watch(u.ngModel,function(t){if(t)return t.milestone?(c.find(".assign-issue-button.button-unset").removeClass("is-active"),c.find(".assign-issue-button.button-set").addClass("is-active")):(c.find(".assign-issue-button.button-set").removeClass("is-active"),c.find(".assign-issue-button.button-unset").addClass("is-active"))}),c.on("click",".assign-issue-button.button-unset",function(t){var n;return t.preventDefault(),t.stopPropagation(),n=i.instant("ISSUES.ACTION_ATTACH_SPRINT"),f=l.$modelValue,e.sprints.list(r.projectId,null).then(function(t){return r.milestones=t.milestones,r.selectedSprint=f.milestone,p=angular.copy(r.milestones),o.open(c.find(".lightbox-assign-sprint-to-issue"))})}),c.on("click",".assign-issue-button.button-set",function(n){return n.preventDefault(),n.stopPropagation(),f=l.$modelValue,e.sprints.list(r.projectId,null).then(function(e){var r,n,u;return r=_.find(e.milestones,{id:f.milestone}),u=i.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.TITLE"),n=i.instant("ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE",{sprintName:r.name}),a.ask(u,null,n).then(function(e){var r,n,i;return n=function(){return t.$broadcast("assign-sprint-to-issue:success",null),e.finish(),o.close(c)},r=function(){return e.finish(!1),a.notify("error")},i=s.save(function(t){return t.setAttr("milestone",null),t}),i.then(n,r)})})}),r.$on("$destroy",function(){return c.off()}),d=function(t,e){return e=h(e.toUpperCase()),t=h(t.toUpperCase()),_.includes(e,t)},r.filterMilestones=function(t){return r.milestones=p.filter(function(e){return d(t,e.name)})},r.saveIssueToSprint=function(e,r){var i,a;return i=n().target($(r.currentTarget)).start(),f.setAttr("milestone",e.id),a=s.save(function(t){return f.setAttr("milestone",e.id),t}),a.then(function(){return i.finish(),o.close(c.find(".lightbox-assign-sprint-to-issue")),t.$broadcast("assign-sprint-to-issue:success",e.id)})}},{link:c,restrict:"EA",require:"ngModel",templateUrl:"issue/assign-sprint-to-issue-button.html"}},f.directive("tgAssignSprintToIssueButton",["$rootScope","$tgResources","$tgRepo","$tgLoading","$translate","lightboxService","$tgQueueModelTransformation","$tgConfirm",t])}.call(this),function(){var t,e,r,n,i,o;i=this.taiga,e=this.taiga.bindOnce,r=this.taiga.debounce,o=this.taiga.trim,n=angular.module("taigaIssues"),t=function(t,e,n,i,o,s,a){var c;return c=function(t,c,u){var l,p,d;return l=null,t.$on("issueform:bulk",function(e,r,n,i){return l&&l.reset(),s.open(c),t["new"]={projectId:r,milestoneId:n,bulk:""}}),p=r(2e3,function(r){var u,p,f,h,g;if(r.preventDefault(),l=c.find("form").checksley(),l.validate())return u=o().target(d).start(),p=t["new"].bulk,h=t["new"].projectId,f=t["new"].milestoneId,g=e.issues.bulkCreate(h,f,p),g.then(function(t){return t=_.map(t.data,function(t){return a.make_model("issues",t)}),u.finish(),i.$broadcast("issueform:new:success",t),s.close(c),n.notify("success")}),g.then(null,function(){return u.finish(),n.notify("error")})}),d=c.find(".submit-button"),c.on("submit","form",p),t.$on("$destroy",function(){return c.off()})},{link:c}},n.directive("tgLbCreateBulkIssues",["$tgRepo","$tgResources","$tgConfirm","$rootScope","$tgLoading","lightboxService","$tgModel",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g=function(t,e){return function(){return t.apply(e,arguments)}},m=function(t,e){function r(){this.constructor=t}for(var n in e)v.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},v={}.hasOwnProperty;d=this.taiga,u=this.taiga.mixOf,h=this.taiga.trim,f=this.taiga.toString,c=this.taiga.joinStr,a=this.taiga.groupBy,o=this.taiga.bindOnce,s=this.taiga.debounceLeading,p=this.taiga.startswith,i=this.taiga.bindMethods,s=this.taiga.debounceLeading,l=angular.module("taigaIssues"),r=function(t){function e(t,e,r,n,o,s,a,c,u,l,p,d,f,h,m,v,y,_){var b;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=o,this.urls=s,this.params=a,this.q=c,this.location=u,this.appMetaService=l,this.navUrls=p,this.events=d,this.analytics=f,this.translate=h,this.errorHandlingService=m,this.storage=v,this.filterRemoteStorageService=y,this.projectService=_,this.loadIssues=g(this.loadIssues,this),i(this),this.scope.sectionName=this.translate.instant("PROJECT.SECTION.ISSUES"),this.voting=!1,this.applyStoredFilters(this.params.pslug,this.filtersHashSuffix)||(b=this.loadInitialData(),b.then(function(t){return function(){var e,r;return r=t.translate.instant("ISSUES.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.translate.instant("ISSUES.PAGE_DESCRIPTION",{projectName:t.scope.project.name,projectDescription:t.scope.project.description}),t.appMetaService.setAll(r,e)}}(this)),b.then(null,this.onInitialDataError.bind(this)),this.scope.$on("issueform:new:success",function(t){return function(){return t.analytics.trackEvent("issue","create","create issue on issues list",1),t.loadIssues()}}(this)),this.scope.$on("assigned-to:changed",function(t){return function(){if(t.generateFilters(),t.isFilterDataTypeSelected("assigned_to")||t.isFilterDataTypeSelected("role")||t.isOrderedBy("assigned_to")||t.isOrderedBy("modified"))return t.loadIssues()}}(this)),this.scope.$on("status:changed",function(t){return function(){if(t.generateFilters(),t.isFilterDataTypeSelected("status")||t.isOrderedBy("status")||t.isOrderedBy("modified"))return t.loadIssues()}}(this)))}return m(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$tgUrls","$routeParams","$q","$tgLocation","tgAppMetaService","$tgNavUrls","$tgEvents","$tgAnalytics","$translate","tgErrorHandlingService","$tgStorage","tgFilterRemoteStorageService","tgProjectService","tgUserActivityService"],e.prototype.filtersHashSuffix="issues-filters",e.prototype.myFiltersHashSuffix="issues-my-filters",e.prototype.excludePrefix="exclude_",e.prototype.filterCategories=["tags","status","type","severity","priority","assigned_to","owner","role"],e.prototype.isOrderedBy=function(t){var e;return e=new RegExp("-*"+t),e.test(this.location.search().order_by)},e.prototype.changeQ=function(t){return this.unselectFilter("page"),this.replaceFilter("q",t),this.loadIssues(),this.generateFilters()},e.prototype.removeFilter=function(t){return this.unselectFilter("page"),this.unselectFilter(t.dataType,t.id,!1,t.mode),this.loadIssues(),this.generateFilters()},e.prototype.addFilter=function(t){return this.unselectFilter("page"),this.selectFilter(t.category.dataType,t.filter.id,!1,t.mode),this.loadIssues(),this.generateFilters()},e.prototype.selectCustomFilter=function(t){var e;return e=this.location.search().order_by,e&&(t.filter.order_by=e),this.unselectFilter("page"),this.replaceAllFilters(t.filter),this.loadIssues(),this.generateFilters()},e.prototype.removeCustomFilter=function(t){return this.filterRemoteStorageService.getFilters(this.scope.projectId,this.myFiltersHashSuffix).then(function(e){return function(r){return delete r[t.id],e.filterRemoteStorageService.storeFilters(e.scope.projectId,r,e.myFiltersHashSuffix).then(e.generateFilters)}}(this))},e.prototype.isFilterDataTypeSelected=function(t){var e,r,n,i;for(i=this.selectedFilters,r=0,n=i.length;r0}),a.assigned_to=_.map(s.assigned_to,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.full_name||"Unassigned",t}),a.owner=_.map(s.owners,function(t){return t.id=t.id.toString(),t.name=t.full_name,t}),a.role=_.map(s.roles,function(t){return t.id?t.id=t.id.toString():t.id="null",t.name=t.name||"Unassigned",t}),e.selectedFilters=[],l=e.filterCategories,c=0,u=l.length;c1,h.showNext=!(t.page===f),e=t.page,i=d=1,m=f;1<=m?d<=m:d>=m;i=1<=m?++d:--d)i===e+s&&f>e+s+u?g.push({classes:"dots",type:"dots"}):i===e-l&&e>c+l?g.push({classes:"dots",type:"dots"}):i>e+s&&i<=f-u||ic||(i===e?g.push({classes:"active",num:i,type:"page-active"}):g.push({classes:"page",num:i,type:"page"}));return r=a(h),r=n(r)(t),o.html(r)},t.$watch("issues",function(t){if(t)return d()}),e.on("click",".issues-paginator a.next",function(e){return e.preventDefault(),t.$apply(function(){return i.selectFilter("page",t.page+1),i.loadIssues()})}),e.on("click",".issues-paginator a.previous",function(e){return e.preventDefault(),t.$apply(function(){return i.selectFilter("page",t.page-1),i.loadIssues()})}),e.on("click",".issues-paginator li.page > a",function(e){var r,n;return e.preventDefault(),n=angular.element(e.currentTarget),r=n.data("pagenum"),t.$apply(function(){return i.selectFilter("page",r),i.loadIssues()})})},o=function(t,r,i,o){var s,a,c,u;return a=o.getOrderBy(),a&&(c=p(a,"-")?"icon-arrow-up":"icon-arrow-down",s=r.find(".row.title > div[data-fieldname='"+h(a,"-")+"']"),u=$("").attr("svg-icon",c),s.append(u),n(s.contents())(t)),r.on("click",".row.title > div",function(i){var s,l,d;return d=angular.element(i.currentTarget),a=o.getOrderBy(),l=d.data("fieldname"),"total_voters"===l&&"-total_voters"!==a&&(a="total_voters"),s=a===l?"-"+l:l,t.$apply(function(){return o.replaceFilter("order_by",s),o.storeFilters(o.params.pslug,e.search(),o.filtersHashSuffix),o.loadIssues().then(function(){return r.find(".row.title > div > tg-svg").remove(),c=p(s,"-")?"icon-arrow-up":"icon-arrow-down",u=$("").attr("svg-icon",c),d.append(u),n(d.contents())(t)})})})},i=function(t,e,r){var n;return n=e.controller(),o(t,e,r,n),s(t,e,r,n),t.$on("$destroy",function(){return e.off()})},{link:i}},l.directive("tgIssues",["$log","$tgLocation","$tgTemplate","$compile",n]),e=function(t,e,r){var n,i,o;return i=e.get("issue/issue-status-inline-edition-selection.html",!0),o=function(t,e,r){var n,i,o;if(i=t.find(".issue-status"),n=t.find(".issue-status .issue-status-bind"),o=r[e.status])return n.text(o.name),n.prop("title",o.name),i.css("color",o.color)},n=function(e,n,s){var a,c;return a=n.controller(),c=e.$eval(s.tgIssueStatusInlineEdition),n.on("click",".issue-status",function(t){return t.preventDefault(),t.stopPropagation(),n.find(".pop-status").popover().open()}),n.on("click",".status",function(i){var s;return i.preventDefault(),i.stopPropagation(),s=angular.element(i.currentTarget),c.status=s.data("status-id"),n.find(".pop-status").popover().close(),o(n,c,e.issueStatusById),e.$apply(function(){return t.save(c).then(function(t){return r.$broadcast("status:changed",t)})})}),d.bindOnce(e,"project",function(t){if(n.append(i({statuses:t.issue_statuses})),o(n,c,e.issueStatusById),t.my_permissions.indexOf("modify_issue")===-1)return n.unbind("click"),n.find("a").addClass("not-clickable")}),e.$watch(s.tgIssueStatusInlineEdition,function(t){return function(t){return o(n,t,e.issueStatusById)}}(this)),e.$on("$destroy",function(){return n.off()})},{link:n}},l.directive("tgIssueStatusInlineEdition",["$tgRepo","$tgTemplate","$rootScope",e]),t=function(t,e,r,n){var i,o;return o=_.template('<%- name %>\n
    <%- name %>
    '),i=function(i,s,a){var c,u,l;return l=function(t){var e,a,c;return a={name:r.instant("COMMON.ASSIGNED_TO.NOT_ASSIGNED"),imgurl:"/"+window._version+"/images/unnamed.png"},c=i.usersById[t.assigned_to],e=n.getAvatar(c),a.imgurl=e.url,a.bg=null,c&&(a.name=c.full_name_display,a.bg=e.bg),s.find(".avatar").html(o(a)),s.find(".issue-assignedto").attr("title",a.name)},c=s.controller(),u=i.$eval(a.tgIssueAssignedToInlineEdition),l(u),s.on("click",".issue-assignedto",function(t){return e.$broadcast("assigned-to:add",u)}),d.bindOnce(i,"project",function(t){if(t.my_permissions.indexOf("modify_issue")===-1)return s.unbind("click"),s.find("a").addClass("not-clickable")}),i.$on("assigned-to:added",function(r,n,i){if(i.id===u.id)return i.assigned_to=n,t.save(u).then(function(){return l(i),e.$broadcast("assigned-to:changed",i)})}),i.$watch(a.tgIssueAssignedToInlineEdition,function(t){return l(t)}),i.$on("$destroy",function(){return s.off()})},{link:i}},l.directive("tgIssueAssignedToInlineEdition",["$tgRepo","$rootScope","$translate","tgAvatarService",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p=function(t,e){function r(){this.constructor=t}for(var n in e)d.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},d={}.hasOwnProperty;l=this.taiga,c=this.taiga.mixOf,a=this.taiga.groupBy,s=this.taiga.bindOnce,o=this.taiga.bindMethods,u=angular.module("taigaUserStories"),i=function(t){function e(t,e,r,n,i,s,a,c,u,l,p,d,f,h,g,m,v,y){var _;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=s,this.q=a,this.location=c,this.log=u,this.appMetaService=l,this.navUrls=p,this.analytics=d,this.translate=f,this.modelTransform=h,this.errorHandlingService=g,this.configService=m,this.projectService=v,this.wysiwigService=y,o(this),this.scope.usRef=this.params.usref,this.scope.sectionName=this.translate.instant("US.SECTION_NAME"),this.scope.tribeEnabled=this.configService.config.tribeHost,this.initializeEventHandlers(),_=this.loadInitialData(),_.then(function(t){return function(){return t._setMeta(),t.initializeOnDeleteGoToUrl()}}(this)),_.then(null,this.onInitialDataError.bind(this))}return p(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","tgAppMetaService","$tgNavUrls","$tgAnalytics","$translate","$tgQueueModelTransformation","tgErrorHandlingService","$tgConfig","tgProjectService","tgWysiwygService"],e.prototype._setMeta=function(){var t,e,r,n,i,o;return o=this.scope.tasks.length,t=_.filter(this.scope.tasks,function(t){return function(e){return t.scope.taskStatusById[e.status].is_closed}}(this)).length,r=o>0?Math.round(100*t/o):0,i=this.translate.instant("US.PAGE_TITLE",{userStoryRef:"#"+this.scope.us.ref,userStorySubject:this.scope.us.subject,projectName:this.scope.project.name}),e=this.translate.instant("US.PAGE_DESCRIPTION",{userStoryStatus:(null!=(n=this.scope.statusById[this.scope.us.status])?n.name:void 0)||"--",userStoryPoints:this.scope.us.total_points,userStoryDescription:angular.element(this.wysiwigService.getHTML(this.scope.us.description)||"").text(),userStoryClosedTasks:t,userStoryTotalTasks:o,userStoryProgressPercentage:r}),this.appMetaService.setAll(i,e)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("related-tasks:update",function(t){return function(){var e;if(t.loadTasks(),t.scope.tasks=_.clone(t.scope.tasks,!1),e=_.every(t.scope.tasks,function(t){return t.is_closed}),t.scope.us.is_closed!==e)return t.loadUs()}}(this)),this.scope.$on("attachment:create",function(t){return function(){return t.analytics.trackEvent("attachment","create","create attachment on userstory",1)}}(this)),this.scope.$on("task:reorder",function(t){return function(e,r,n){return t.reorderTask(r,n)}}(this)),this.scope.$on("comment:new",function(t){return function(){return t.loadUs()}}(this))},e.prototype.initializeOnDeleteGoToUrl=function(){var t;return t={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.navUrls.resolve("project",t),this.scope.project.is_backlog_activated?this.scope.us.milestone?(t.sprint=this.scope.sprint.slug,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-taskboard",t)):this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-backlog",t):this.scope.project.is_kanban_activated?this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-kanban",t):void 0},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.statusList=t.us_statuses,this.scope.statusById=a(t.us_statuses,function(t){return t.id}),this.scope.taskStatusById=a(t.task_statuses,function(t){return t.id}),this.scope.pointsList=_.sortBy(t.points,"order"),this.scope.pointsById=a(this.scope.pointsList,function(t){return t.id}),t},e.prototype.loadUs=function(){var t,e,r,n;return t=_.pick(this.location.search(),"milestone","no-milestone","kanban-status"),r=t.milestone,r&&this.rs.userstories.storeQueryParams(this.scope.projectId,{milestone:r,order_by:"sprint_order"}),n=t["no-milestone"],n&&this.rs.userstories.storeQueryParams(this.scope.projectId,{milestone:"null",order_by:"backlog_order"}),e=t["kanban-status"],e&&this.rs.userstories.storeQueryParams(this.scope.projectId,{status:e,order_by:"kanban_order"}),this.rs.userstories.getByRef(this.scope.projectId,this.params.usref).then(function(t){return function(e){return t.scope.us=e,t.scope.usId=e.id,t.scope.commentModel=e,t.modelTransform.setObject(t.scope,"us"),e}}(this))},e.prototype.loadSprint=function(){if(this.scope.us.milestone)return this.rs.sprints.get(this.scope.us.project,this.scope.us.milestone).then(function(t){return function(e){return t.scope.sprint=e,e}}(this))},e.prototype.loadTasks=function(){return this.rs.tasks.list(this.scope.projectId,null,this.scope.usId).then(function(t){return function(e){return t.scope.tasks=e,e}}(this))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.loadUs().then(function(t){return function(){return t.q.all([t.loadSprint(),t.loadTasks()])}}(this))},e.prototype.onUpvote=function(){var t,e;return e=function(t){return function(){return t.loadUs(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.userstories.upvote(this.scope.usId).then(e,t)},e.prototype.onDownvote=function(){var t,e;return e=function(t){return function(){return t.loadUs(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.userstories.downvote(this.scope.usId).then(e,t)},e.prototype.onWatch=function(){var t,e;return e=function(t){return function(){return t.loadUs(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.userstories.watch(this.scope.usId).then(e,t)},e.prototype.onUnwatch=function(){var t,e;return e=function(t){return function(){return t.loadUs(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.userstories.unwatch(this.scope.usId).then(e,t)},e.prototype.onTribeInfo=function(){var t,e,r,n;return r=this.translate.instant("US.TRIBE.PUBLISH_MORE_INFO_TITLE"),t=$("").attr({src:"/"+window._version+"/images/monster-fight.png",alt:this.translate.instant("US.TRIBE.PUBLISH_MORE_INFO_TITLE")}),n=this.translate.instant("US.TRIBE.PUBLISH_MORE_INFO_TEXT"),e=$("
    ").append(t).append(n),this.confirm.success(r,e)},e.prototype.reorderTask=function(t,e){var r,n,i,o,s,a,c,u,l;return s={},this.scope.tasks.forEach(function(t){return s[t.id]=t.us_order}),l=this.scope.tasks.filter(function(e){return e.id!==t.id}),n=l.slice(0,e),r=l.slice(e),a=n[n.length-1],o=a?a.us_order+1:0,s[t.id]=o,c=n.filter(function(t){return t.us_order===a.us_order}),u=_.fromPairs(c.map(function(t){return[t.id,t.us_order]})),r.forEach(function(t){return s[t.id]=t.us_order+1}),this.scope.tasks=_.map(this.scope.tasks,function(t){return t.us_order=s[t.id],t}),this.scope.tasks=_.sortBy(this.scope.tasks,"us_order"),i={us_order:o,version:t.version},this.rs.tasks.reorder(t.id,i,u).then(function(t){return function(e){return t.scope.tasks=_.map(t.scope.tasks,function(t){return t.id===e.id?e:t}),t.rootscope.$broadcast("related-tasks:reordered")}}(this))},e}(c(l.Controller,l.PageMixin)),u.controller("UserStoryDetailController",i),r=function(t,e){var r,n;return n=t.get("common/components/status-display.html",!0),r=function(t,r,i){var o;return o=function(i){var o,s;return s=t.statusById[i.status],o=n({is_closed:i.is_closed,status:s}),o=e(o)(t),r.html(o)},t.$watch(i.ngModel,function(t){if(null!=t)return o(t)}),t.$on("$destroy",function(){return r.off()})},{link:r,restrict:"EA",require:"ngModel"}},u.directive("tgUsStatusDisplay",["$tgTemplate","$compile",r]),e=function(t,e,r,n,i,o,s){var a,c;return c=o.get("common/components/status-button.html",!0),a=function(e,o,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_us")!==-1},p=function(t){return function(t){var r,n;return n=e.statusById[t.status],r=c({status:n,statuses:e.statusList,editable:l()}),o.html(r),s(o.contents())(e)}}(this),d=function(e){return function(e){var s,a,c,u;return o.find(".pop-status").popover().close(),s=n().target(o.find(".js-edit-status")).start(),u=i.save(function(t){return t.status=e,t}),c=function(){return t.$broadcast("object:updated"),s.finish()},a=function(){return r.notify("error"),s.finish()},u.then(c,a)}}(this),o.on("click",".js-edit-status",function(t){if(t.preventDefault(),t.stopPropagation(),l())return o.find(".pop-status").popover().open()}),o.on("click",".status",function(t){var e,r;if(t.preventDefault(),t.stopPropagation(),l())return r=angular.element(t.currentTarget),e=r.data("status-id"),d(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.status:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},u.directive("tgUsStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",e]),n=function(t,e,r,n,i,o,s){var a,c;return c=o.get("us/us-team-requirement-button.html",!0),a=function(e,o,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_us")!==-1},p=function(t){var r,n;return r={canEdit:l(),isRequired:t.team_requirement},n=c(r),n=s(n)(e),o.html(n)},d=function(e){var s,a;return s=n().target(o.find("label")).start(),a=i.save(function(t){return t.team_requirement=e,t}),a.then(function(e){return function(){return s.finish(),t.$broadcast("object:updated")}}(this)),a.then(null,function(){return s.finish(),r.notify("error")})},o.on("click",".team-requirement",function(t){var e;if(l())return e=!u.$modelValue.team_requirement,d(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.team_requirement:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},u.directive("tgUsTeamRequirementButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",n]),t=function(t,e,r,n,i,o,s){var a,c;return c=o.get("us/us-client-requirement-button.html",!0),a=function(e,o,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_us")!==-1},p=function(t){var r,n;return r={canEdit:l(),isRequired:t.client_requirement},n=s(c(r))(e),o.html(n)},d=function(e){var s,a;return s=n().target(o.find("label")).start(),a=i.save(function(t){return t.client_requirement=e,t}),a.then(function(e){return function(){return s.finish(),t.$broadcast("object:updated")}}(this)),a.then(null,function(){return r.notify("error")})},o.on("click",".client-requirement",function(t){var e;if(l())return e=!u.$modelValue.client_requirement,d(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.client_requirement:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return o.off()})},{link:a,restrict:"EA",require:"ngModel"}},u.directive("tgUsClientRequirementButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$compile",t])}.call(this),function(){ +var t,e,r,n,i,o,s,a,c,u=function(t,e){function r(){this.constructor=t}for(var n in e)l.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},l={}.hasOwnProperty;c=this.taiga,s=this.taiga.mixOf,o=this.taiga.groupBy,i=this.taiga.bindMethods,a=angular.module("taigaTasks"),t=function(t){function e(t,e,r,n,o,s,a,c,u,l,p,d,f,h,g,m){var v;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=o,this.params=s,this.q=a,this.location=c,this.log=u,this.appMetaService=l,this.navUrls=p,this.analytics=d,this.translate=f,this.modelTransform=h,this.errorHandlingService=g,this.projectService=m,i(this),this.scope.taskRef=this.params.taskref,this.scope.sectionName=this.translate.instant("TASK.SECTION_NAME"),this.initializeEventHandlers(),v=this.loadInitialData(),v.then(function(t){return function(){return t._setMeta(),t.initializeOnDeleteGoToUrl()}}(this)),v.then(null,this.onInitialDataError.bind(this))}return u(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$log","tgAppMetaService","$tgNavUrls","$tgAnalytics","$translate","$tgQueueModelTransformation","tgErrorHandlingService","tgProjectService"],e.prototype._setMeta=function(){var t,e,r;return r=this.translate.instant("TASK.PAGE_TITLE",{taskRef:"#"+this.scope.task.ref,taskSubject:this.scope.task.subject,projectName:this.scope.project.name}),t=this.translate.instant("TASK.PAGE_DESCRIPTION",{taskStatus:(null!=(e=this.scope.statusById[this.scope.task.status])?e.name:void 0)||"--",taskDescription:angular.element(this.scope.task.description_html||"").text()}),this.appMetaService.setAll(r,t)},e.prototype.initializeEventHandlers=function(){return this.scope.$on("attachment:create",function(t){return function(){return t.analytics.trackEvent("attachment","create","create attachment on task",1)}}(this)),this.scope.$on("custom-attributes-values:edit",function(t){return function(){return t.rootscope.$broadcast("object:updated")}}(this)),this.scope.$on("comment:new",function(t){return function(){return t.loadTask()}}(this))},e.prototype.initializeOnDeleteGoToUrl=function(){var t;if(t={project:this.scope.project.slug},this.scope.onDeleteGoToUrl=this.navUrls.resolve("project",t),this.scope.project.is_backlog_activated){if(this.scope.task.milestone)return t.sprint=this.scope.sprint.slug,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-taskboard",t);if(this.scope.task.us)return t.ref=this.scope.us.ref,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-userstories-detail",t)}else if(this.scope.project.is_kanban_activated&&this.scope.us)return t.ref=this.scope.us.ref,this.scope.onDeleteGoToUrl=this.navUrls.resolve("project-userstories-detail",t)},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.statusList=t.task_statuses,this.scope.statusById=o(t.task_statuses,function(t){return t.id}),t},e.prototype.loadTask=function(){return this.rs.tasks.getByRef(this.scope.projectId,this.params.taskref).then(function(t){return function(e){var r,n,i;return t.scope.task=e,t.scope.taskId=e.id,t.scope.commentModel=e,t.modelTransform.setObject(t.scope,"task"),null!=(null!=(n=t.scope.task.neighbors.previous)?n.ref:void 0)&&(r={project:t.scope.project.slug,ref:t.scope.task.neighbors.previous.ref},t.scope.previousUrl=t.navUrls.resolve("project-tasks-detail",r)),null!=(null!=(i=t.scope.task.neighbors.next)?i.ref:void 0)&&(r={project:t.scope.project.slug,ref:t.scope.task.neighbors.next.ref},t.scope.nextUrl=t.navUrls.resolve("project-tasks-detail",r)),e}}(this))},e.prototype.loadSprint=function(){if(this.scope.task.milestone)return this.rs.sprints.get(this.scope.task.project,this.scope.task.milestone).then(function(t){return function(e){return t.scope.sprint=e,e}}(this))},e.prototype.loadUserStory=function(){if(this.scope.task.user_story)return this.rs.userstories.get(this.scope.task.project,this.scope.task.user_story).then(function(t){return function(e){return t.scope.us=e,e}}(this))},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.fillUsersAndRoles(t.members,t.roles),this.loadTask().then(function(t){return function(){return t.q.all([t.loadSprint(),t.loadUserStory()])}}(this))},e.prototype.onUpvote=function(){var t,e;return e=function(t){return function(){return t.loadTask(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.tasks.upvote(this.scope.taskId).then(e,t)},e.prototype.onDownvote=function(){var t,e;return e=function(t){return function(){return t.loadTask(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.tasks.downvote(this.scope.taskId).then(e,t)},e.prototype.onWatch=function(){var t,e;return e=function(t){return function(){return t.loadTask(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.tasks.watch(this.scope.taskId).then(e,t)},e.prototype.onUnwatch=function(){var t,e;return e=function(t){return function(){return t.loadTask(),t.rootscope.$broadcast("object:updated")}}(this),t=function(t){return function(){return t.confirm.notify("error")}}(this),this.rs.tasks.unwatch(this.scope.taskId).then(e,t)},e}(s(c.Controller,c.PageMixin)),a.controller("TaskDetailController",t),n=function(t,e){var r,n;return n=t.get("common/components/status-display.html",!0),r=function(t,r,i){var o;return o=function(i){var o,s;return s=t.statusById[i.status],o=n({is_closed:s.is_closed,status:s}),o=e(o)(t),r.html(o)},t.$watch(i.ngModel,function(t){if(null!=t)return o(t)}),t.$on("$destroy",function(){return r.off()})},{link:r,restrict:"EA",require:"ngModel"}},a.directive("tgTaskStatusDisplay",["$tgTemplate","$compile",n]),r=function(t,e,r,n,i,o,s,a){var c,u;return u=a.get("common/components/status-button.html",!0),c=function(e,s,a,c){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_task")!==-1},p=function(t){return function(t){var r,n;return n=e.statusById[t.status],r=o(u({status:n,statuses:e.statusList,editable:l()}))(e),s.html(r)}}(this),d=function(e){var o,a,c,u;return o=n().target(s).start(),u=i.save(function(t){return t.status=e,t}),c=function(){return t.$broadcast("object:updated"),o.finish()},a=function(){return r.notify("error"),o.finish()},u.then(c,a)},s.on("click",".js-edit-status",function(t){if(t.preventDefault(),t.stopPropagation(),l())return s.find(".pop-status").popover().open()}),s.on("click",".status",function(t){var e;if(t.preventDefault(),t.stopPropagation(),l())return e=angular.element(t.currentTarget),$.fn.popover().closeAll(),d(e.data("status-id"))}),e.$watch(function(){var t;return null!=(t=c.$modelValue)?t.status:void 0},function(){var t;if(t=c.$modelValue)return p(t)}),e.$on("$destroy",function(){return s.off()})},{link:c,restrict:"EA",require:"ngModel"}},a.directive("tgTaskStatusButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$compile","$translate","$tgTemplate",r]),e=function(t,e,r,n,i,o,s){var a,c;return c=s.get("issue/iocaine-button.html",!0),a=function(e,s,a,u){var l,p,d;return l=function(){return e.project.my_permissions.indexOf("modify_task")!==-1},p=function(t){var r,n;return l()||t.is_iocaine?(r={isIocaine:t.is_iocaine,isEditable:l()},n=o(c(r))(e),s.html(n)):void s.html("")},d=function(e){var o,a;return o=n().target(s.find("label")).start(),a=i.save(function(t){return t.is_iocaine=e,t}),a.then(function(){return t.$broadcast("object:updated")}),a.then(null,function(){return r.notify("error")}),a["finally"](function(){return o.finish()})},s.on("click",".is-iocaine",function(t){var e;if(l())return e=!u.$modelValue.is_iocaine,d(e)}),e.$watch(function(){var t;return null!=(t=u.$modelValue)?t.is_iocaine:void 0},function(){var t;if(t=u.$modelValue)return p(t)}),e.$on("$destroy",function(){return s.off()})},{link:a,restrict:"EA",require:"ngModel"}},a.directive("tgTaskIsIocaineButton",["$rootScope","$tgRepo","$tgConfirm","$tgLoading","$tgQueueModelTransformation","$compile","$tgTemplate",e])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l=function(t,e){function r(){this.constructor=t}for(var n in e)p.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},p={}.hasOwnProperty;u=this.taiga,a=this.taiga.mixOf,c=angular.module("taigaTeam"),e=function(t){function e(t,e,r,n,i,o,s,a,c,u,l,p,d){var f;this.scope=t,this.rootscope=e,this.repo=r,this.rs=n,this.params=i,this.q=o,this.location=s,this.navUrls=a,this.appMetaService=c,this.auth=u,this.translate=l,this.projectService=p,this.errorHandlingService=d,this.scope.sectionName="TEAM.SECTION_NAME",f=this.loadInitialData(),f.then(function(t){return function(){var e,r;return r=t.translate.instant("TEAM.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.translate.instant("TEAM.PAGE_DESCRIPTION",{projectName:t.scope.project.name,projectDescription:t.scope.project.description}),t.appMetaService.setAll(r,e)}}(this)),f.then(null,this.onInitialDataError.bind(this))}return l(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgResources","$routeParams","$q","$location","$tgNavUrls","tgAppMetaService","$tgAuth","$translate","tgProjectService","tgErrorHandlingService"],e.prototype.setRole=function(t){return t?this.scope.filtersRole=t:this.scope.filtersRole=null},e.prototype.loadMembers=function(){var t,e,r,n,i;for(i=this.auth.getUser(),this.scope.totals={},n=this.scope.activeUsers,t=0,e=n.length;t=0)})}},c.filter("membersFilter",s)}.call(this),function(){var t,e,r,n,i,o,s,a,c,u=function(t,e){return function(){return t.apply(e,arguments)}},l=function(t,e){function r(){this.constructor=t}for(var n in e)p.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},p={}.hasOwnProperty;c=this.taiga,s=this.taiga.mixOf,o=this.taiga.groupBy,n=this.taiga.bindOnce,i=this.taiga.debounce,a=angular.module("taigaWiki"),t=function(t){function e(t,e,r,n,i,o,s,a,c,l,p,d,f,h,g,m,v){var y;this.scope=t,this.rootscope=e,this.repo=r,this.model=n,this.confirm=i,this.rs=o,this.params=s,this.q=a,this.location=c,this.filter=l,this.log=p,this.appMetaService=d,this.navUrls=f,this.analytics=h,this.translate=g,this.errorHandlingService=m,this.projectService=v,this.moveLink=u(this.moveLink,this),this.loadWiki=u(this.loadWiki,this),this.scope.$on("wiki:links:move",this.moveLink),this.scope.$on("wikipage:add",this.loadWiki),this.scope.projectSlug=this.params.pslug,this.scope.wikiSlug=this.params.slug,this.scope.sectionName="Wiki",this.scope.linksVisible=!1,y=this.loadInitialData(),y.then(function(t){return function(){return t._setMeta()}}(this)),y.then(null,this.onInitialDataError.bind(this))}return l(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgModel","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$filter","$log","tgAppMetaService","$tgNavUrls","$tgAnalytics","$translate","tgErrorHandlingService","tgProjectService"],e.prototype._setMeta=function(){var t,e,r,n,i;return i=this.translate.instant("WIKI.PAGE_TITLE",{wikiPageName:this.scope.wikiSlug,projectName:this.scope.project.name}),t=this.translate.instant("WIKI.PAGE_DESCRIPTION",{wikiPageContent:angular.element((null!=(e=this.scope.wiki)?e.html:void 0)||"").text(),totalEditions:(null!=(r=this.scope.wiki)?r.editions:void 0)||0,lastModifiedDate:moment(null!=(n=this.scope.wiki)?n.modified_date:void 0).format(this.translate.instant("WIKI.DATETIME"))}),this.appMetaService.setAll(i,t)},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_wiki_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadWiki=function(){var t;return t=this.rs.wiki.getBySlug(this.scope.projectId,this.params.slug),t.then(function(t){return function(e){return t.scope.wiki=e,t.scope.wikiId=e.id,t.scope.wiki}}(this)),t.then(null,function(t){return function(e){var r;return t.scope.wikiId=null,t.scope.project.my_permissions.indexOf("add_wiki_page")===-1?null:(r={project:t.scope.projectId,slug:t.scope.wikiSlug,content:""},t.scope.wiki=t.model.make_model("wiki",r),t.scope.wiki)}}(this))},e.prototype.loadWikiLinks=function(){return this.rs.wiki.listLinks(this.scope.projectId).then(function(t){return function(e){var r,n,i,o,s;for(t.scope.wikiLinks=e,o=t.scope.wikiLinks,r=0,n=o.length;r\n \n \n\n
    \n\n \n {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}}\n
    \n
    "}},a.directive("tgWikiWysiwyg",["$tgQueueModelTransformation","$rootScope","$tgConfirm","tgAttachmentsFullService","$tgQqueue","$tgRepo","$tgAnalytics","tgActivityService",r])}.call(this),function(){var t,e,r,n,i,o;o=this.taiga,n=this.taiga.mixOf,r=this.taiga.groupBy,e=this.taiga.bindOnce,i=angular.module("taigaWiki"),t=function(t,r,n,i,o,s,a,c,u){var l,p,d;return d=a.get("wiki/wiki-nav.html",!0),p=function(n,a,l){var p,f,h,g;return p=a.controller(),null==l.ngModel?r.error("WikiNavDirective: no ng-model attr is defined"):(f=n.project.my_permissions.indexOf("add_wiki_link")>-1,h=null,g=function(e){var r,l,m,v,y;return f=n.project.my_permissions.indexOf("add_wiki_link")>-1,r=n.project.my_permissions.indexOf("delete_wiki_link")>-1,l=d({wikiLinks:e,projectSlug:n.projectSlug,addWikiLinkPermission:f,deleteWikiLinkPermission:r}),l=c(l)(n),a.off(),f&&h&&h.destroy(),a.html(l),f&&(m=null,y=a.find(".sortable"),h=dragula([y[0]],{direction:"vertical",copySortSource:!1,copy:!1,mirrorContainer:y[0],moves:function(t){return $(t).is("li")}}),h.on("dragend",function(t){var e;return m=$(t),t=m.scope().link,e=m.index(),n.$emit("wiki:links:move",t,e)}),v=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&h.dragging}})),a.on("click",".add-button",function(t){return t.preventDefault(),a.find(".new").removeClass("hidden"),a.find(".new input").focus(),a.find(".add-button").hide()}),a.on("click",".js-delete-link",function(e){var r,o,s,a;return e.preventDefault(),e.stopPropagation(),s=angular.element(e.currentTarget),r=s.parents(".wiki-link").data("id"),a=u.instant("WIKI.DELETE_LINK_TITLE"),o=n.wikiLinks[r].title,i.askOnDelete(a,o).then(function(e){return function(e){var o;return o=t.remove(n.wikiLinks[r]),o.then(function(){return o=p.loadWikiLinks(),o.then(function(){return e.finish(),g(n.wikiLinks)}),o.then(null,function(){return e.finish()})}),o.then(null,function(){return e.finish(!1),i.notify("error")})}}(this))}),a.on("keyup",".new input",function(e){var r,c,u,l;return e.preventDefault(),13===e.keyCode?(l=angular.element(e.currentTarget),c=l.val(),r=s().target(a.find(".new")).start(),u=t.create("wiki-links",{project:n.projectId,title:c}),u.then(function(){var t;return o.trackEvent("wikilink","create","create wiki link",1),t=p.loadWikiLinks(),t.then(function(){return r.finish(),a.find(".new").addClass("hidden"),a.find(".new input").val(""),a.find(".add-button").show(),g(n.wikiLinks)}),t.then(null,function(){return r.finish(),a.find(".new").addClass("hidden"),a.find(".new input").val(""),a.find(".add-button").show(),i.notify("error","Error loading wiki links")})}),u.then(null,function(t){var e;return r.finish(),a.find(".new input").val(c),a.find(".new input").focus().select(),null!=(null!=t&&null!=(e=t.__all__)?e[0]:void 0)?i.notify("error","The link already exists"):i.notify("error")})):27===e.keyCode?(l=angular.element(e.currentTarget),a.find(".new").addClass("hidden"),a.find(".new input").val(""),a.find(".add-button").show()):void 0})},e(n,l.ngModel,g))},l=function(t,e,r){return p(t,e,r),t.$on("$destroy",function(){return e.off()})},{link:l}},i.directive("tgWikiNav",["$tgRepo","$log","$tgLocation","$tgConfirm","$tgAnalytics","$tgLoading","$tgTemplate","$compile","$translate",t])}.call(this),function(){var t,e,r,n,i=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;n=this.taiga,e=this.taiga.mixOf,r=angular.module("taigaWiki"),t=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){var p;this.scope=t,this.rootscope=e,this.repo=r,this.model=n,this.confirm=i,this.rs=o,this.params=s,this.q=a,this.navUrls=c,this.errorHandlingService=u,this.projectService=l,this.scope.projectSlug=this.params.pslug,this.scope.wikiSlug=this.params.slug,this.scope.sectionName="Wiki",this.scope.linksVisible=!1,p=this.loadInitialData(),p.then(null,this.onInitialDataError.bind(this))}return i(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgModel","$tgConfirm","$tgResources","$routeParams","$q","$tgNavUrls","tgErrorHandlingService","tgProjectService"],e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.is_wiki_activated||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadWikiPages=function(){var t;return t=this.rs.wiki.list(this.scope.projectId).then(function(t){return function(e){return t.scope.wikipages=e}}(this))},e.prototype.loadWikiLinks=function(){return this.rs.wiki.listLinks(this.scope.projectId).then(function(t){return function(e){var r,n,i,o,s;for(t.scope.wikiLinks=e,o=t.scope.wikiLinks,r=0,n=o.length;rt.total_memberships,this.scope.$emit("project:loaded",t),t},e.prototype.loadMembers=function(){var t;return t=this.getUrlFilters(),this.rs.memberships.list(this.scope.projectId,t).then(function(t){return function(e){return t.scope.memberships=_.filter(e.models,function(t){return null===t.user||t.is_user_active}),_.map(t.scope.memberships,function(e){if(e.is_owner)return t.scope.projectOwnerEmail=e.user_email}),t.scope.page=e.current,t.scope.count=e.count,t.scope.paginatedBy=e.paginatedBy,e}}(this))},e.prototype.loadInitialData=function(){return this.loadProject(),this.q.all([this.loadMembers(),this.auth.refresh()])},e.prototype.getUrlFilters=function(){var t;return t=_.pick(this.location.search(),"page"),t.page||(t.page=1),t},e.prototype.addNewMembers=function(){return this.lightboxFactory.create("tg-lb-add-members",{"class":"lightbox lightbox-add-member",project:"project"},{project:this.scope.project})},e.prototype.showLimitUsersWarningMessage=function(){var t,e,r;return r=this.translate.instant("ADMIN.MEMBERSHIPS.LIMIT_USERS_WARNING"),e=this.translate.instant("ADMIN.MEMBERSHIPS.LIMIT_USERS_WARNING_MESSAGE",{members:this.scope.project.max_memberships}),t="/"+window._version+"/svg/icons/team-question.svg",this.confirm.success(r,e,{name:t,type:"img"})},e}(c(l.Controller,l.PageMixin,l.FiltersMixin)),u.controller("MembershipsController",t),e=function(t,e){var r,n,i;return i=t.get("admin/admin-membership-paginator.html",!0),n=function(t,r,n,o){var s,a,c,u,l,p,d;return a=2,l=4,c=2,u=2,s=r.find(".memberships-paginator"),p=function(){var e;return e=t.count/t.paginatedBy,e=parseInt(e,10)1,h.showNext=!(t.page===f),r=t.page,o=d=1,m=f;1<=m?d<=m:d>=m;o=1<=m?++d:--d)o===r+a&&f>r+a+u?g.push({classes:"dots",type:"dots"}):o===r-l&&r>c+l?g.push({classes:"dots",type:"dots"}):o>r+a&&o<=f-u||oc||(o===r?g.push({classes:"active",num:o,type:"page-active"}):g.push({classes:"page",num:o,type:"page" +}));return n=i(h),n=e(n)(t),s.html(n),s.show()},t.$watch("memberships",function(t){if(t)return d()}),r.on("click",".memberships-paginator a.next",function(e){return e.preventDefault(),t.$apply(function(){return o.selectFilter("page",t.page+1),o.loadMembers()})}),r.on("click",".memberships-paginator a.previous",function(e){return e.preventDefault(),t.$apply(function(){return o.selectFilter("page",t.page-1),o.loadMembers()})}),r.on("click",".memberships-paginator li.page > a",function(e){var r,n;return e.preventDefault(),n=angular.element(e.currentTarget),r=n.data("pagenum"),t.$apply(function(){return o.selectFilter("page",r),o.loadMembers()})})},r=function(t,e,r){var i;return i=e.controller(),n(t,e,r,i),t.$on("$destroy",function(){return e.off()})},{link:r}},u.directive("tgMemberships",["$tgTemplate","$compile",e]),i=function(t,e,r,n,i){var o,s;return s=e.get("admin/memberships-row-avatar.html",!0),o=function(e,o,a){var c,u,l;return u=r.instant("ADMIN.MEMBERSHIP.STATUS_PENDING"),l=function(t){var r,a,c;return r=i.getAvatar(t),a={full_name:t.full_name?t.full_name:"",email:t.user_email?t.user_email:t.email,imgurl:r.url,bg:r.bg,pending:t.is_user_active?"":u,isOwner:t.is_owner},c=s(a),c=n(c)(e),o.html(c)},null==a.tgMembershipsRowAvatar?t.error("MembershipsRowAvatarDirective: the directive need a member"):(c=e.$eval(a.tgMembershipsRowAvatar),l(c),e.$on("$destroy",function(){return o.off()}))},{link:o}},u.directive("tgMembershipsRowAvatar",["$log","$tgTemplate","$translate","$compile","tgAvatarService",i]),n=function(t,e,r,n,i){var o,s;return s=n.get("admin/admin-memberships-row-checkbox.html",!0),o=function(n,o,a){var c,u,l;return n.$on("$destroy",function(){return o.off()}),null==a.tgMembershipsRowAdminCheckbox?t.error("MembershipsRowAdminCheckboxDirective: the directive need a member"):(u=n.$eval(a.tgMembershipsRowAdminCheckbox),u.is_owner?void o.find(".js-check").remove():(l=function(t){var e,r;return e={inputId:"is-admin-"+t.id},r=s(e),r=i(r)(n),o.html(r)},o.on("click",":checkbox",function(t){return function(t){var n,i,s;return i=function(){return r.notify("success")},n=function(t){return u.revert(),o.find(":checkbox").prop("checked",u.is_admin),r.notify("error",t.is_admin[0])},s=angular.element(t.currentTarget),u.is_admin=s.prop("checked"),e.save(u).then(i,n)}}(this)),c=l(u),u.is_admin?o.find(":checkbox").prop("checked",!0):void 0))},{link:o}},u.directive("tgMembershipsRowAdminCheckbox",["$log","$tgRepo","$tgConfirm","$tgTemplate","$compile",n]),o=function(t,e,r){var n,i;return i=_.template(''),n=function(n,o,s){var a,c,u,l;return l=function(t){var e,r;return e={roleList:n.project.roles,selectedRole:t.role},r=i(e),o.html(r)},null==s.tgMembershipsRowRoleSelector?t.error("MembershipsRowRoleSelectorDirective: the directive need a member"):(a=o.controller(),u=n.$eval(s.tgMembershipsRowRoleSelector),c=l(u),o.on("change","select",function(t){return function(t){var n,i,o,s;if(o=function(){return r.notify("success")},i=function(){return r.notify("error")},s=angular.element(t.currentTarget),n=parseInt(s.val(),10),u.role!==n)return u.role=n,e.save(u).then(o,i)}}(this)),n.$on("$destroy",function(){return o.off()}))},{link:n}},u.directive("tgMembershipsRowRoleSelector",["$log","$tgRepo","$tgConfirm",o]),r=function(t,e,r,n,i,o,s,a,c,u){var l,p,d;return l='
    \n
    \n\n \n',d='\n\n\n \n',p=function(p,f,h){var g,m,v,y;return y=function(t){var e;return e=t.user?i(l)(p):i(d)(p),f.html(e)},null==h.tgMembershipsRowActions?t.error("MembershipsRowActionsDirective: the directive need a member"):(g=f.controller(),v=p.$eval(h.tgMembershipsRowActions),y(v),f.on("click",".js-resend",function(t){var e,i;return t.preventDefault(),i=function(){var t;return t=o.instant("ADMIN.MEMBERSHIP.SUCCESS_SEND_INVITATION",{email:p.member.email}),n.notify("success",t)},e=function(){var t;return t=o.instant("ADMIM.MEMBERSHIP.ERROR_SEND_INVITATION"),n.notify("error",t)},r.memberships.resendInvitation(p.member.id).then(i,e)}),m=function(){var t,r,i;return i=o.instant("ADMIN.MEMBERSHIP.DELETE_MEMBER"),t=o.instant("ADMIN.MEMBERSHIP.DEFAULT_DELETE_MESSAGE",{email:v.email}),r=v.user?v.full_name:t,n.askOnDelete(i,r).then(function(t){var i,c;return c=function(e){return function(){var e;return t.finish(),v.user!==p.user.id?(p.page>1&&p.count-1<=p.paginatedBy&&g.selectFilter("page",p.page-1),u.fetchProject().then(function(){return g.loadInitialData()})):s.path(a.resolve("home")),e=o.instant("ADMIN.MEMBERSHIP.SUCCESS_DELETE",{message:r}),n.notify("success",e,null,5e3)}}(this),i=function(e){return function(){var e;return t.finish(!1),e=o.instant("ADMIN.MEMBERSHIP.ERROR_DELETE",{message:r}),n.notify("error",e)}}(this),e.remove(v).then(c,i)})},f.on("click",".delete",function(t){var e;return t.preventDefault(),p.project.owner.id===v.user?(e=p.user.id===v.user,c.create("tg-lightbox-leave-project-warning",{"class":"lightbox lightbox-leave-project-warning"},{isCurrentUser:e,project:p.project})):m()}),p.$on("$destroy",function(){return f.off()}))},{link:p}},u.directive("tgMembershipsRowActions",["$log","$tgRepo","$tgResources","$tgConfirm","$compile","$translate","$tgLocation","$tgNavUrls","tgLightboxFactory","tgProjectService",r]),s=function(){return{templateUrl:"admin/no-more-memberships-explanation.html",scope:{project:"=",ownerEmail:"="}}},u.directive("tgNoMoreMembershipsExplanation",[s])}.call(this),function(){var t,e;t=function(){var t;return t=function(t,e,r){var n;return n=r.tgAdminNavigation,e.find(".active").removeClass("active"),e.find("#adminmenu-"+n+" a").addClass("active"),t.$on("$destroy",function(){return e.off()})},{link:t}},e=angular.module("taigaAdmin"),e.directive("tgAdminNavigation",t)}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k,$,I,T,E,C,P,w=function(t,e){function r(){this.constructor=t}for(var n in e)A.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},A={}.hasOwnProperty,O=function(t,e){return function(){return t.apply(e,arguments)}};E=this.taiga,$=this.taiga.mixOf,T=this.taiga.scopeDefer,P=this.taiga.trim,C=this.taiga.toString,k=this.taiga.joinStr,j=this.taiga.groupBy,b=this.taiga.bindOnce,S=this.taiga.debounce,I=angular.module("taigaAdmin"),v=function(t){function e(t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g){var m;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.appMetaService=u,this.translate=l,this.tgAuth=p,this.currentUserService=d,this.errorHandlingService=f,this.projectService=h,this.model=g,this.scope.project={},this.scope.projectTags=[],m=this.loadInitialData(),m.then(function(t){return function(){var e,r,n;return r=t.translate.instant(t.scope.sectionName),n=t.translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE",{sectionName:r,projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(n,e),t.fillUsersAndRoles(t.scope.project.members,t.scope.project.roles)}}(this)),m.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:loaded",function(t){return function(){var e,r,n;return r=t.translate.instant(t.scope.sectionName),n=t.translate.instant("ADMIN.PROJECT_PROFILE.PAGE_TITLE",{sectionName:r,projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(n,e)}}(this))}return w(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","tgAppMetaService","$translate","$tgAuth","tgCurrentUserService","tgErrorHandlingService","tgProjectService","$tgModel"],e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t=this.model.make_model("projects",t),t.i_am_admin||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.epicStatusList=_.sortBy(t.epic_statuses,"order"),this.scope.usStatusList=_.sortBy(t.us_statuses,"order"),this.scope.pointsList=_.sortBy(t.points,"order"),this.scope.taskStatusList=_.sortBy(t.task_statuses,"order"),this.scope.issueTypesList=_.sortBy(t.issue_types,"order"),this.scope.issueStatusList=_.sortBy(t.issue_statuses,"order"),this.scope.prioritiesList=_.sortBy(t.priorities,"order"),this.scope.severitiesList=_.sortBy(t.severities,"order"),T(this.scope,function(e){return function(){return e.scope.$emit("project:loaded",t)}}(this)),this.scope.projectTags=_.map(this.scope.project.tags,function(t){return function(e){return[e,t.scope.project.tags_colors[e]]}}(this)),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.tgAuth.refresh()},e.prototype.openDeleteLightbox=function(){return this.rootscope.$broadcast("deletelightbox:new",this.scope.project)},e.prototype.addTag=function(t,e){var r;return r=_.clone(this.scope.project.tags),r.push(t),this.scope.projectTags.push([t,null]),this.scope.project.tags=r},e.prototype.deleteTag=function(t){var e;return e=_.clone(this.scope.project.tags),_.pull(e,t[0]),_.remove(this.scope.projectTags,function(e){return function(e){return e[0]===t[0]}}(this)),this.scope.project.tags=e},e}($(E.Controller,E.PageMixin)),I.controller("ProjectProfileController",v),y=function(t,e,r,n,i,o,s,a){var c;return c=function(c,u,l){var p,d,f,h;return p=u.controller(),d=u.find("form").checksley({onlyOneErrorElement:!0}),f=S(2e3,function(u){return function(u){var l,f,g;if(u.preventDefault(),d.validate())return l=r().target(h).start(),f=c.project.isAttributeModified("is_private"),g=t.save(c.project),g.then(function(){var t;return l.finish(),f&&c.project.is_private?a.trackEvent("project-privacy-changed","from-public-to-private","Change project privacy from public to private",1):f&&!c.project.is_private&&a.trackEvent("project-privacy-changed","from-private-to-public","Change project privacy from private to public",1),e.notify("success"),t=n.resolve("project-admin-project-profile-details",{project:c.project.slug}),i.path(t),o.fetchProject().then(function(t){return function(){return p.loadInitialData()}}(this)),s.loadProjects()}),g.then(null,function(t){if(l.finish(),d.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),h=u.find(".submit-button"),u.on("submit","form",f)},{link:c}},I.directive("tgProjectProfile",["$tgRepo","$tgConfirm","$tgLoading","$tgNavUrls","$tgLocation","tgProjectService","tgCurrentUserService","$tgAnalytics",y]),d=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=S(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=n().target(u).start(),c=e.save(i.project),c.then(function(){return s.finish(),r.notify("success"),t.$broadcast("admin:project-default-values:updated")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return r.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c),i.$on("$destroy",function(){return o.off()})},{link:i}},I.directive("tgProjectDefaultValues",["$rootScope","$tgRepo","$tgConfirm","$tgLoading",d]),m=function(t,e,r,n){var i;return i=function(n,i,o){var s;return s=function(o){return function(){var o,s;if(o=i.find("form").checksley(),o.initializeFields(),o.reset(),o.validate())return s=e.save(n.project),s.then(function(){return n.$emit("project:loaded",n.project),t.$broadcast("admin:project-modules:updated"),r.notify("success")}),s.then(null,function(t){if(o.setErrors(t),t._error_message)return r.notify("error",t._error_message)})}}(this),i.on("change",".module-activation.module-direct-active input",function(t){return t.preventDefault(),n.$applyAsync(s)}),i.on("submit","form",function(t){return t.preventDefault(),s()}),i.on("click",".save",function(t){return t.preventDefault(),s()}),i.on("keydown",".videoconference-attributes input",function(t){return 32!==t.which}),n.$watch("project.videoconferences",function(t,e){if(null!=t&&null!=e&&t!==e)return n.project.videoconferences_extra_data=""}),n.$watch("isVideoconferenceActivated",function(t,e){if(t===!1&&(n.project.videoconferences=null,n.project.videoconferences_extra_data="",e===!0))return s()}),n.$watch("project",function(t){return null!=t.videoconferences?n.isVideoconferenceActivated=!0:n.isVideoconferenceActivated=!1})},{link:i}},I.directive("tgProjectModules",["$rootScope","$tgRepo","$tgConfirm","$tgLoading",m]),f=function(t,e,r,n,i){var o;return o=function(o,s,a){var c,u,l,p,d,f,h,g,m,v,y,_,b,j,k,$,I,T,E,C,P,w,A,O,R,M;return u=s.find(".admin-project-export-buttons"),T=function(){return u.removeClass("hidden")},p=function(){return u.addClass("hidden")},m=s.find(".admin-project-export-result"),A=function(){return m.removeClass("hidden")},d=function(){return m.addClass("hidden")},R=s.find(".spin"),O=function(){return R.removeClass("hidden")},f=function(){return R.addClass("hidden")},y=s.find(".result-title"),g=n.instant("ADMIN.PROJECT_EXPORT.LOADING_TITLE"),h=n.instant("ADMIN.PROJECT_EXPORT.LOADING_MESSAGE"),l=function(){return y.html(n.instant("ADMIN.PROJECT_EXPORT.DUMP_READY"))},c=function(){return y.html(n.instant("ADMIN.PROJECT_EXPORT.ASYNC_MESSAGE"))},M=function(t){return y.html(n.instant("ADMIN.PROJECT_EXPORT.SYNC_MESSAGE",{url:t}))},k=function(){return y.html(g)},b=function(){return y.html(h)},I=function(){return y.html(l)},v=s.find(".result-message "),j=function(){return v.html(h)},_=function(){return v.html(c)},$=function(t){return v.html(M(t))},w=function(){return O(),k(),j(),p(),A()},C=function(){return f(),b(),_()},P=function(t){return f(),I(),$(t)},E=function(){return f(),d(),T()},s.on("click","a.button-export",S(2e3,function(s){return function(s){var a,c;return s.preventDefault(),c=function(e){var r;return i.trackEvent("exporter","export-project","Exported project",1),202===e.status?C():(r=e.data.url,P(r),t.open(r,"_blank"))},a=function(t){var e,i;return E(),e=n.instant("ADMIN.PROJECT_EXPORT.ERROR"),429===t.status?e=n.instant("ADMIN.PROJECT_EXPORT.ERROR_BUSY"):(null!=(i=t.data)?i._error_message:void 0)&&(e=n.instant("ADMIN.PROJECT_EXPORT.ERROR_BUSY",{message:t.data._error_message})),r.notify("error",e)},w(),e.projects["export"](o.projectId).then(c,a)}}(this)))},{link:o}},I.directive("tgProjectExport",["$window","$tgResources","$tgConfirm","$translate","$tgAnalytics",f]),i=function(t){function e(t,e,r,n,i,o){this.scope=t,this.rootscope=e,this.urls=r,this.confirm=n,this.rs=i,this.translate=o,this._deleteUuid=O(this._deleteUuid,this),this._generateUuid=O(this._generateUuid,this),this.setCsvUuid=O(this.setCsvUuid,this),this.rootscope.$on("project:loaded",this.setCsvUuid),this.scope.$watch("csvUuid",function(t){return function(e){return e?t.scope.csvUrl=t.urls.resolveAbsolute(t.type+"-csv",e):t.scope.csvUrl=""}}(this))}return w(e,t),e.$inject=["$scope","$rootScope","$tgUrls","$tgConfirm","$tgResources","$translate"],e.prototype.setCsvUuid=function(){return this.scope.csvUuid=this.scope.project[this.type+"_csv_uuid"]},e.prototype._generateUuid=function(t){var e;return null==t&&(t=null),e=this.rs.projects["regenerate_"+this.type+"_csv_uuid"](this.scope.projectId),e.then(function(t){return function(e){var r;return t.scope.csvUuid=null!=(r=e.data)?r.uuid:void 0}}(this)),e.then(null,function(t){return function(){return t.confirm.notify("error")}}(this)),e["finally"](function(){if(t)return t.finish()}),e},e.prototype._deleteUuid=function(t){var e;return null==t&&(t=null),e=this.rs.projects["delete_"+this.type+"_csv_uuid"](this.scope.projectId),e.then(function(t){return function(e){var r;return t.scope.csvUuid=null!=(r=e.data)?r.uuid:void 0}}(this)),e.then(null,function(t){return function(){return t.confirm.notify("error")}}(this)),e["finally"](function(){if(t)return t.finish()}),e},e.prototype.regenerateUuid=function(){var t,e;return this.scope.csvUuid?(e=this.translate.instant("ADMIN.REPORTS.REGENERATE_TITLE"),t=this.translate.instant("ADMIN.REPORTS.REGENERATE_SUBTITLE"),this.confirm.ask(e,t).then(this._generateUuid)):this._generateUuid()},e.prototype.deleteUuid=function(){var t,e;return this.scope.csvUuid?(e=this.translate.instant("ADMIN.REPORTS.DELETE_TITLE"),t=this.translate.instant("ADMIN.REPORTS.DELETE_SUBTITLE"),this.confirm.ask(e,t).then(this._deleteUuid)):this._deleteUuid()},e}(E.Controller),o=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return w(e,t),e.prototype.type="epics",e}(i),c=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return w(e,t),e.prototype.type="userstories",e}(i),a=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return w(e,t),e.prototype.type="tasks",e}(i),s=function(t){function e(){return e.__super__.constructor.apply(this,arguments)}return w(e,t),e.prototype.type="issues",e}(i),I.controller("CsvExporterEpicsController",o),I.controller("CsvExporterUserstoriesController",c),I.controller("CsvExporterTasksController",a),I.controller("CsvExporterIssuesController",s),n=function(t){var e;return e=function(t){return t.sectionTitle="ADMIN.CSV.SECTION_TITLE_EPIC"},{controller:"CsvExporterEpicsController",controllerAs:"ctrl",templateUrl:"admin/project-csv.html",link:e,scope:!0}},I.directive("tgCsvEpic",["$translate",n]),p=function(t){var e;return e=function(t){return t.sectionTitle="ADMIN.CSV.SECTION_TITLE_US"},{controller:"CsvExporterUserstoriesController",controllerAs:"ctrl",templateUrl:"admin/project-csv.html",link:e,scope:!0}},I.directive("tgCsvUs",["$translate",p]),l=function(t){var e;return e=function(t){return t.sectionTitle="ADMIN.CSV.SECTION_TITLE_TASK"},{controller:"CsvExporterTasksController",controllerAs:"ctrl",templateUrl:"admin/project-csv.html",link:e,scope:!0}},I.directive("tgCsvTask",["$translate",l]),u=function(t){var e;return e=function(t){return t.sectionTitle="ADMIN.CSV.SECTION_TITLE_ISSUE"},{controller:"CsvExporterIssuesController",controllerAs:"ctrl",templateUrl:"admin/project-csv.html",link:e,scope:!0}},I.directive("tgCsvIssue",["$translate",u]),h=function(t,e,r,n){var i;return i=function(t,i,o){var s,a,c;return c=function(){return i.find(".size-info").addClass("active")},a=function(r){var o;return o=e.make_model("projects",r.data),t.project=o,i.find(".loading-overlay").removeClass("active"),n.notify("success")},s=function(t){return 413===t.status&&c(),i.find(".loading-overlay").removeClass("active"),n.notify("error",t.data._error_message)},i.on("click",".js-change-logo",function(){return i.find("#logo-field").click()}),i.on("change","#logo-field",function(e){if(t.logoAttachment)return i.find(".loading-overlay").addClass("active"),r.projects.changeLogo(t.project.id,t.logoAttachment).then(a,s)}),i.on("click","a.js-use-default-logo",function(e){return i.find(".loading-overlay").addClass("active"),r.projects.removeLogo(t.project.id).then(a,s)}),t.$on("$destroy",function(){return i.off()})},{link:i}},I.directive("tgProjectLogo",["$tgAuth","$tgModel","$tgResources","$tgConfirm",h]),g=function(t){var e;return e=function(e,r,n){var i,o;return i=t(n.tgProjectLogoModel),o=i.assign,r.bind("change",function(){return e.$apply(function(){return o(e,r[0].files[0])})})},{link:e}},I.directive("tgProjectLogoModel",["$parse",g]),r=function(){return{scope:{project:"="},templateUrl:"admin/admin-project-restrictions.html"}},I.directive("tgAdminProjectRestrictions",[r]),e=function(t){return{link:function(e){return e.requestOwnership=function(){return t.create("tg-lb-request-ownership",{"class":"lightbox lightbox-request-ownership"},{projectId:e.projectId})}},scope:{projectId:"=",owner:"="},templateUrl:"admin/admin-project-request-ownership.html"}},I.directive("tgAdminProjectRequestOwnership",["tgLightboxFactory",e]),t=function(t){return{link:function(e){return e.changeOwner=function(){return t.create("tg-lb-change-owner",{"class":"lightbox lightbox-select-user","project-id":"projectId","active-users":"activeUsers","current-owner-id":"currentOwnerId"},{projectId:e.projectId,activeUsers:e.activeUsers,currentOwnerId:e.owner.id,members:e.members})}},scope:{activeUsers:"=",projectId:"=",owner:"=",members:"="},templateUrl:"admin/admin-project-change-owner.html"}},I.directive("tgAdminProjectChangeOwner",["tgLightboxFactory",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b,S,j,k,I,T,E,C,P,w,A=function(t,e){function r(){this.constructor=t}for(var n in e)O.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},O={}.hasOwnProperty,R=function(t,e){return function(){return t.apply(e,arguments)}};C=this.taiga,T=this.taiga.mixOf,w=this.taiga.trim,P=this.taiga.toString,I=this.taiga.joinStr,k=this.taiga.groupBy,b=this.taiga.bindOnce,S=this.taiga.debounce,j=this.taiga.getDefaulColorList,E=angular.module("taigaAdmin"),h=function(t){function e(t,e,r,n,i,o,s,a,c,u,l,p,d){var f,h,g;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.appMetaService=u,this.translate=l,this.errorHandlingService=p,this.projectService=d,this.scope.project={},this.loadInitialData(),h=this.translate.instant(this.scope.sectionName),g=this.translate.instant("ADMIN.PROJECT_VALUES.PAGE_TITLE",{sectionName:h,projectName:this.scope.project.name}),f=this.scope.project.description,this.appMetaService.setAll(g,f)}return A(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","tgAppMetaService","$translate","tgErrorHandlingService","tgProjectService"],e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.i_am_admin||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){var t;return t=this.loadProject()},e}(T(C.Controller,C.PageMixin)),E.controller("ProjectValuesSectionController",h),d=function(t){function e(t,e,r,n,i){var o;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.moveValue=R(this.moveValue,this),this.loadValues=R(this.loadValues,this),this.scope.$on("admin:project-values:move",this.moveValue),o=this.scope.$watch("resource",function(t){return function(e){if(e)return t.loadValues(),o()}}(this))}return A(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources"],e.prototype.loadValues=function(){return this.rs[this.scope.resource].listValues(this.scope.projectId,this.scope.type).then(function(t){return function(e){return e.length&&(t.scope.values=e,t.scope.maxValueOrder=_.maxBy(e,"order").order),e}}(this))},e.prototype.moveValue=function(t,e,r){var n,i;return i=this.scope.values,n=i.indexOf(e),i.splice(n,1),i.splice(r,0,e),_.each(i,function(t,e){return t.order=e}),this.repo.saveAll(i).then(function(t){return function(){return t.rootscope.$broadcast("admin:project-values:updated")}}(this))},e}(C.Controller),E.controller("ProjectValuesController",d),u=function(t){function e(){return this.displayValues=R(this.displayValues,this),this.createDefaultValues=R(this.createDefaultValues,this),this.loadValues=R(this.loadValues,this),e.__super__.constructor.apply(this,arguments)}return A(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources"],e.prototype.loadValues=function(){return this.rs[this.scope.resource].listValues(this.scope.projectId,this.scope.type).then(function(t){return function(e){return e.length?(t.scope.maxValueOrder=_.maxBy(e,"order").order,t.displayValues(e)):t.createDefaultValues(),e}}(this))},e.prototype.createDefaultValues=function(){if(null!=this.rs[this.scope.resource].createDefaultValues)return this.rs[this.scope.resource].createDefaultValues(this.scope.projectId,this.scope.type).then(function(t){return function(e){var r;return t.rootscope.$broadcast("admin:project-values:updated"),r=e.data,r.length&&(t.scope.maxValueOrder=_.maxBy(r,"order").order,t.displayValues(r)),r}}(this))},e.prototype.displayValues=function(t){return _.each(t,function(t,e){return t.days_to_due_abs=null!==t.days_to_due?Math.abs(t.days_to_due):null,t.sign=t.days_to_due>=0?1:-1}),this.scope.values=t},e}(d),E.controller("ProjectDueDatesValuesController",u),f=function(t,e,r,n,i,o,s,a){var c,u,l;return u=function(t,e,r){var n,i,o,s,a,c;return s=null,o=null,i=null,c=e.find(".sortable"),n=dragula([c[0]],{direction:"vertical",copySortSource:!1,copy:!1,mirrorContainer:c[0],moves:function(t){return $(t).is("div[tg-bind-scope]")}}),n.on("dragend",function(e){var r,n;return i=$(e),n=i.scope().value,r=i.index(),t.$broadcast("admin:project-values:move",n,r)}),a=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&n.dragging}}),t.$on("$destroy",function(){return e.off(),n.destroy()})},l=function(t,n,i){var c,u,l,p,d,f,h,g,m;return c=n.controller(),m=i.type,f=i.objname,p=function(){return t.newValue={name:"",is_closed:!1,is_archived:!1}},d=function(){return t.addNewElementText=o.instant("ADMIN.PROJECT_VALUES_"+f.toUpperCase()+".ACTION_ADD")},p(),d(),s.$on("$translateChangeEnd",function(){return t.$evalAsync(d)}),l=function(t){return function(t){var e;if(null==t&&(t=!1),e=n.find(".table-main"),$(document.body).scrollTop(e.offset().top+e.height()),t)return n.find(".new-value input:visible").first().focus()}}(this),g=function(t){var r,n,i,o;if(n=t.parents("form"),r=n.checksley(),r.validate())return o=n.scope().value,i=e.save(o),i.then(function(){var e;return e=t.parents(".row.table-main"),e.addClass("hidden"),e.siblings(".visualization").removeClass("hidden"),s.$broadcast("admin:project-values:updated"),a.fetchProject()}),i.then(null,function(t){return r.setErrors(t)})},h=function(r){var n,i,o;if(i=r.parents("form"),n=i.checksley(),n.validate())return t.newValue.project=t.project.id,t.newValue.order=t.maxValueOrder?t.maxValueOrder+1:1,o=e.create(m,t.newValue),o.then(function(e){return r.addClass("hidden"),t.values.push(e),t.maxValueOrder=e.order,p(),s.$broadcast("admin:project-values:updated")}),o.then(null,function(t){return n.setErrors(t)})},u=function(e){var r,n,i;return n=e.parents(".row.table-main"),r=e.parents("form"),i=r.scope().value,t.$apply(function(){return n.addClass("hidden"),i.revert(),n.siblings(".visualization").removeClass("hidden")})},n.on("click",".show-add-new",function(t){return t.preventDefault(),n.find(".new-value").removeClass("hidden"),l(!0)}),n.on("click",".add-new",S(2e3,function(t){var e;return t.preventDefault(),e=n.find(".new-value"),h(e)})),n.on("click",".delete-new",function(t){return t.preventDefault(),n.find(".new-value").addClass("hidden"),p()}),n.on("click",".edit-value",function(t){var e,r,n;return t.preventDefault(),n=angular.element(t.currentTarget),r=n.parents(".row.table-main"),r.addClass("hidden"),e=r.siblings(".edition"),e.removeClass("hidden"),e.find("input:visible").first().focus().select()}),n.on("keyup",".new-value input",function(t){var e;return 13===t.keyCode?(e=n.find(".new-value"),h(e)):27===t.keyCode?(n.find(".new-value").addClass("hidden"),p()):void 0}),n.on("click",".save",function(t){var e;return t.preventDefault(),e=angular.element(t.currentTarget),g(e)}),n.on("click",".cancel",function(t){var e;return t.preventDefault(),e=angular.element(t.currentTarget),u(e)}),n.on("click",".delete-value",function(n){var i,a,u,l,p,d,f;return n.preventDefault(),l=angular.element(n.currentTarget),a=l.parents("form"),f=a.scope().value,i={},_.each(t.values,function(t){if(f.id!==t.id)return i[t.id]=t.name}),u=f.name,0===_.keys(i).length?r.error(o.instant("ADMIN.PROJECT_VALUES.ERROR_DELETE_ALL")):(d=o.instant("ADMIN.COMMON.TITLE_ACTION_DELETE_VALUE"),p=o.instant("ADMIN.PROJECT_VALUES.REPLACEMENT"),r.askChoice(d,u,i,p).then(function(t){var n,i;return i=function(){return c.loadValues()["finally"](function(){return s.$broadcast("admin:project-values:updated"),t.finish()})},n=function(){return r.notify("error")},e.remove(f,{moveTo:t.selected}).then(i,n)}))})},c=function(t,e,r){return u(t,e,r),l(t,e,r),t.$on("$destroy",function(){return e.off()})},{link:c}},E.directive("tgProjectValues",["$log","$tgRepo","$tgConfirm","$tgLocation","animationFrame","$translate","$rootScope","tgProjectService",f]),c=function(t,e,r,n,i,o,s,a){var c,u;return u=f(t,e,r,n,i,o,s,a),c=function(t,n,i,a){var c,u,l,p,d;return a=n.controller(),d=i.type,l=function(){return t.newValue={name:"",days_to_due:0,sign:1}},l(),c=function(t){return t.days_to_due=t.days_to_due_abs*t.sign},u=function(t){var e,r,n;return n=angular.element(t.currentTarget),r=n.parents(".row.table-main"),e=n.parents("form"),e.scope().value?e.scope().value:e.scope().newValue},p=function(r){var n,i,o;if(i=r.parents("form"),n=i.checksley(),n.validate())return t.newValue.project=t.project.id,t.newValue.order=t.maxValueOrder?t.maxValueOrder+1:1,o=e.create(d,t.newValue),o.then(function(e){return r.addClass("hidden"),e.sign=t.newValue.sign,e.days_to_due_abs=t.newValue.days_to_due_abs,t.values.push(e),s.$broadcast("admin:project-values:updated"),l()}),o.then(null,function(t){return n.setErrors(t)})},n.on("input",".days-to-due-abs",function(e){var r;return e.preventDefault(),r=u(e),t.$apply(function(){return c(r)})}),n.on("click",".days-to-due-sign",function(e){var r;return e.preventDefault(),r=u(e),t.$apply(function(){return r.sign=r.sign*-1,c(r)})}),n.on("click",".add-new-due-date",S(2e3,function(t){var e;return t.preventDefault(),e=n.find(".new-value"),p(e)})),n.on("click",".delete-due-date",function(t){var n,i,c,u,l;return t.preventDefault(),c=angular.element(t.currentTarget),n=c.parents("form"),l=n.scope().value,u=o.instant("LIGHTBOX.ADMIN_DUE_DATES.TITLE_ACTION_DELETE_DUE_DATE"),i=o.instant("LIGHTBOX.ADMIN_DUE_DATES.SUBTITLE_ACTION_DELETE_DUE_DATE",{due_date_status_name:l.name}),r.ask(u,i).then(function(t){var n,i;return i=function(){return a.loadValues()["finally"](function(){return s.$broadcast("admin:project-values:updated"),t.finish()})},n=function(){return r.notify("error")},e.remove(l).then(i,n)})})},{link:function(t,e,r){return u.link(t,e,r),c(t,e,r)}}},E.directive("tgProjectDueDatesValues",["$log","$tgRepo","$tgConfirm","$tgLocation","animationFrame","$translate","$rootScope","tgProjectService",c]),e=function(){var t;return t=function(t,e,r,n){var i;return t.colorList=j(),t.allowEmpty=!1,r.tgAllowEmpty&&(t.allowEmpty=!0),i=e.controller(),t.$watch(r.ngModel,function(e){return t.color=e.color}),e.on("click",".current-color",function(t){var r,n;return t.preventDefault(),t.stopPropagation(),n=angular.element(t.currentTarget),$(".select-color").hide(),n.siblings(".select-color").show(),r=angular.element("body"),r.on("click",function(t){return function(t){if(0===angular.element(t.target).parent(".select-color").length)return e.find(".select-color").hide(),r.unbind("click")}}(this))}),e.on("click",".select-color .color",function(r){var i;return r.preventDefault(),i=angular.element(r.currentTarget),t.$apply(function(){return n.$modelValue.color=i.data("color")}),e.find(".select-color").hide()}),e.on("click",".select-color .selected-color",function(r){return r.preventDefault(),t.$apply(function(){return n.$modelValue.color=t.color}),e.find(".select-color").hide()}),e.on("keyup","input",function(r){return r.stopPropagation(),13===r.keyCode?(t.$apply(function(){return n.$modelValue.color=t.color}),e.find(".select-color").hide()):27===r.keyCode?e.find(".select-color").hide():void 0}),t.$on("$destroy",function(){return e.off()})},{link:t,require:"ngModel"}},E.directive("tgColorSelection",e),m="text",i="multiline", +g="richtext",r="date",y="url",n="dropdown",t="checkbox",o="number",v=[{key:m,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT"},{key:i,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI"},{key:g,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT"},{key:r,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE"},{key:y,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL"},{key:n,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DROPDOWN"},{key:t,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_CHECKBOX"},{key:o,name:"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_NUMBER"}],s=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){var p,d,f;this.scope=t,this.rootscope=e,this.repo=r,this.rs=n,this.params=i,this.q=o,this.location=s,this.navUrls=a,this.appMetaService=c,this.translate=u,this.projectService=l,this.moveCustomAttributes=R(this.moveCustomAttributes,this),this.deleteCustomAttribute=R(this.deleteCustomAttribute,this),this.saveCustomAttribute=R(this.saveCustomAttribute,this),this.createCustomAttribute=R(this.createCustomAttribute,this),this.loadCustomAttributes=R(this.loadCustomAttributes,this),this._onCustomAttributesModified=R(this._onCustomAttributesModified,this),this.scope.TYPE_CHOICES=v,this.scope.project=this.projectService.project.toJS(),this.scope.projectId=this.scope.project.id,d=this.translate.instant(this.scope.sectionName),f=this.translate.instant("ADMIN.CUSTOM_ATTRIBUTES.PAGE_TITLE",{sectionName:d,projectName:this.scope.project.name}),p=this.scope.project.description,this.appMetaService.setAll(f,p),this.scope.init=function(t){return function(e){return t.scope.type=e,t.loadCustomAttributes()}}(this)}return A(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","tgAppMetaService","$translate","tgProjectService"],e.prototype._parseAttributesExtra=function(){return this.scope.customAttributes=_.map(this.scope.customAttributes,function(t){return function(e){return t._parseAttributeExtra(e)}}(this))},e.prototype._parseAttributeExtra=function(t){return"dropdown"!==t.type||t.extra||(t.extra=[""]),t},e.prototype._onCustomAttributesModified=function(){return this.rootscope.$broadcast("admin:project-custom-attributes:updated")},e.prototype.loadCustomAttributes=function(){return this.rs.customAttributes[this.scope.type].list(this.scope.projectId).then(function(t){return function(e){var r;return t.scope.customAttributes=e,t.scope.maxOrder=null!=(r=_.maxBy(e,"order"))?r.order:void 0,t._parseAttributesExtra(),e}}(this))},e.prototype.createCustomAttribute=function(t){return this.repo.create("custom-attributes/"+this.scope.type,t).then(function(t){return function(){return t._onCustomAttributesModified()}}(this))},e.prototype.saveCustomAttribute=function(t){return this.repo.save(t).then(function(t){return function(){return t._onCustomAttributesModified()}}(this))},e.prototype.deleteCustomAttribute=function(t){return this.repo.remove(t).then(function(t){return function(){return t._onCustomAttributesModified()}}(this))},e.prototype.moveCustomAttributes=function(t,e){var r,n;return r=this.scope.customAttributes,n=r.indexOf(t),r.splice(n,1),r.splice(e,0,t),_.each(r,function(t,e){return t.order=e}),this.repo.saveAll(r).then(function(t){return function(){return t._onCustomAttributesModified()}}(this))},e}(T(C.Controller,C.PageMixin)),E.controller("ProjectCustomAttributesController",s),a=function(t,e,r,n){var i;return i=function(t,r,i){var o,s,a,c,u,l,p,d,f,h,g,m,v,y,_,b,j,k,I,T,E,C,P,w;return o=r.controller(),t.$on("$destroy",function(){return r.off()}),t.isExtraVisible={},a=function(t,e){var r;return t.preventDefault(),r=angular.element(t.currentTarget).closest("form"),e(r)},_=function(){var t,n,i,s,a,c,u;for(u=r.find(".js-sortable"),t=dragula([u[0]],{direction:"vertical",copySortSource:!1,copy:!1,mirrorContainer:u[0],moves:function(t,e,r){var n;return n=$(r).closest(".js-child-sortable"),!n[0]&&$(t).is("div[tg-bind-scope]")}}),t.on("dragend",function(t){var e,r,n;return r=$(t),e=r.scope().attr,n=r.index(),o.moveCustomAttributes(e,n)}),c=r.find(".js-child-sortable"),a=[],i=0,s=c.length;i\n
    \n
    <%- category.activePermissions %>/<%- category.permissions.length %>
    \n <% _.each(category.permissions, function(permission) { %>\n
    \n <% }) %>\n
    \n'),o=_.template('
    \n
    \n
    \n
    \n
    \n <% _.each(category.permissions, function(permission) { %>\n
    \n \n
    \n disabled="disabled" <% } %>\n <% if(permission.active) { %> checked="checked" <% } %>/>\n
    \n \n \n
    \n
    \n <% }) %>\n
    \n
    \n
    '),i=_.template('
    '),a=function(a,u,l){var p,d,f,g,m;return p=u.controller(),d=function(t){var e,r,n,i,o,s,c,u,l,p;return s=function(e){return _.map(e,function(e){var r;return _.extend({},e,{active:(r=e.key,h.call(t.permissions,r)>=0)})})},n=function(t,e,r){return!(e.external_user&&!r.is_private&&0===t.key.indexOf("view_"))},c=function(e){return _.map(e,function(e){return e.permissions=e.permissions.map(function(e){return e.editable=n(e,t,a.project),e}),_.extend({},e,{activePermissions:_.filter(e.permissions,"active").length})})},e=[],r=[{key:"view_epics",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.VIEW_EPICS"},{key:"add_epic",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.ADD_EPICS"},{key:"modify_epic",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.MODIFY_EPICS"},{key:"comment_epic",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.COMMENT_EPICS"},{key:"delete_epic",name:"COMMON.PERMISIONS_CATEGORIES.EPICS.DELETE_EPICS"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.EPICS.NAME",permissions:s(r)}),o=[{key:"view_milestones",name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.VIEW_SPRINTS"},{key:"add_milestone",name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.ADD_SPRINTS"},{key:"modify_milestone",name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.MODIFY_SPRINTS"},{key:"delete_milestone",name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.DELETE_SPRINTS"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.SPRINTS.NAME",permissions:s(o)}),l=[{key:"view_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.VIEW_USER_STORIES"},{key:"add_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.ADD_USER_STORIES"},{key:"modify_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.MODIFY_USER_STORIES"},{key:"comment_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.COMMENT_USER_STORIES"},{key:"delete_us",name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.DELETE_USER_STORIES"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.NAME",permissions:s(l)}),u=[{key:"view_tasks",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.VIEW_TASKS"},{key:"add_task",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.ADD_TASKS"},{key:"modify_task",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.MODIFY_TASKS"},{key:"comment_task",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.COMMENT_TASKS"},{key:"delete_task",name:"COMMON.PERMISIONS_CATEGORIES.TASKS.DELETE_TASKS"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.TASKS.NAME",permissions:s(u)}),i=[{key:"view_issues",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.VIEW_ISSUES"},{key:"add_issue",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.ADD_ISSUES"},{key:"modify_issue",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.MODIFY_ISSUES"},{key:"comment_issue",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.COMMENT_ISSUES"},{key:"delete_issue",name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.DELETE_ISSUES"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.ISSUES.NAME",permissions:s(i)}),p=[{key:"view_wiki_pages",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_PAGES"},{key:"add_wiki_page",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_PAGES"},{key:"modify_wiki_page",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.MODIFY_WIKI_PAGES"},{key:"delete_wiki_page",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_PAGES"},{key:"view_wiki_links",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_LINKS"},{key:"add_wiki_link",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_LINKS"},{key:"delete_wiki_link",name:"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_LINKS"}],e.push({name:"COMMON.PERMISIONS_CATEGORIES.WIKI.NAME",permissions:s(p)}),c(e)},m=function(t,e){return t.find(".resume").html(n(c({category:e}))(a))},f=function(t,e){var r;return r=o({category:t,index:e}),r=angular.element(r),m(r,t),n(r)(a)},g=function(){var n;return u.off(),n=i(),_.each(d(a.role),function(t,e){return n=angular.element(n).append(f(t,e))}),u.html(n),u.on("click",".resume",function(t){var e;return t.preventDefault(),e=angular.element(t.currentTarget),e.toggleClass("open-drawer"),e.next().toggleClass("open")}),u.on("change",".category-item input",function(n){var i,o,s,c;return i=function(){var t;return t=_.filter(u.find(".category-item input"),function(t){return angular.element(t).is(":checked")}),t=_.sortBy(_.map(t,function(t){var e;return e=angular.element(t).parents(".category-item").data("id")})),t.length&&t.push("view_project"),t},c=angular.element(n.currentTarget),a.role.permissions=i(),s=function(){var e,n;return e=d(a.role),n=c.parents(".category-config").data("id"),m(c.parents(".category-config"),e[n]),t.$broadcast("projects:reload"),r.notify("success"),p.forceLoadProject()},o=function(){return r.notify("error"),c.prop("checked",!c.prop("checked")),a.role.permissions=i()},a.role.external_user?(a.project.public_permissions=a.role.permissions,a.project.anon_permissions=a.role.permissions.filter(function(t){return 0===t.indexOf("view_")}),e.save(a.project).then(s,o)):e.save(a.role).then(s,o)})},a.$on("$destroy",function(){return u.off()}),a.$on("role:changed",function(){return g()}),s(a,l.ngModel,g)},{link:a}},u.directive("tgRolePermissions",["$rootScope","$tgRepo","$tgConfirm","$compile",r])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y,b=function(t,e){function r(){this.constructor=t}for(var n in e)S.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},S={}.hasOwnProperty;v=this.taiga,g=this.taiga.mixOf,f=this.taiga.bindMethods,h=this.taiga.debounce,y=this.taiga.timeout,m=angular.module("taigaAdmin"),d=function(t){function e(t,e,r,n,i,o,s,a,c,u){var l;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.location=i,this.navUrls=o,this.appMetaService=s,this.translate=a,this.errorHandlingService=c,this.projectService=u,f(this),this.scope.sectionName="ADMIN.WEBHOOKS.SECTION_NAME",this.scope.project={},l=this.loadInitialData(),l.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.WEBHOOKS.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),l.then(null,this.onInitialDataError.bind(this)),this.scope.$on("webhooks:reload",this.loadWebhooks)}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","$tgLocation","$tgNavUrls","tgAppMetaService","$translate","tgErrorHandlingService","tgProjectService"],e.prototype.loadWebhooks=function(){return this.rs.webhooks.list(this.scope.projectId).then(function(t){return function(e){return t.scope.webhooks=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),t.i_am_admin||this.errorHandlingService.permissionDenied(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.loadWebhooks()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),m.controller("WebhooksController",d),p=function(t,e,r,n,i){var o;return o=function(n,o,s){var a,c,u,l,p,d,f,g;return g=n.$eval(s.tgWebhook),d=function(){var e;return e=i.instant("ADMIN.WEBHOOKS.DATE"),t.webhooklogs.list(g.id).then(function(t){return function(t){var r,n,i,o;for(r=0,n=t.length;r=1)return a.addClass("hidden")})}),s.on("click",function(t){return a.removeClass("hidden"),a.find("input")[0].focus()})},{link:o}},m.directive("tgNewWebhook",["$tgResources","$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",c]),r=function(t){function e(t,e,r,n,i,o,s){var a;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.appMetaService=i,this.translate=o,this.projectService=s,f(this),this.scope.sectionName=this.translate.instant("ADMIN.GITHUB.SECTION_NAME"),this.scope.project={},a=this.loadInitialData(),a.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.GITHUB.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),a.then(null,this.onInitialDataError.bind(this))}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","tgAppMetaService","$translate","tgProjectService"],e.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"github").then(function(t){return function(e){return t.scope.github=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){var t;return t=this.loadProject(),this.loadModules()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),m.controller("GithubController",r),i=function(t){function e(t,e,r,n,i,o,s){var a;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.appMetaService=i,this.translate=o,this.projectService=s,f(this),this.scope.sectionName=this.translate.instant("ADMIN.GITLAB.SECTION_NAME"),this.scope.project={},a=this.loadInitialData(),a.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.GITLAB.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),a.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:modules:reload",function(t){return function(){return t.loadModules()}}(this))}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","tgAppMetaService","$translate","tgProjectService"],e.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"gitlab").then(function(t){return function(e){return t.scope.gitlab=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.loadModules()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),m.controller("GitlabController",i),t=function(t){function e(t,e,r,n,i,o,s){var a;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.appMetaService=i,this.translate=o,this.projectService=s,f(this),this.scope.sectionName=this.translate.instant("ADMIN.BITBUCKET.SECTION_NAME"),this.scope.project={},a=this.loadInitialData(),a.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.BITBUCKET.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),a.then(null,this.onInitialDataError.bind(this)),this.scope.$on("project:modules:reload",function(t){return function(){return t.loadModules()}}(this))}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","tgAppMetaService","$translate","tgProjectService"],e.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"bitbucket").then(function(t){return function(e){return t.scope.bitbucket=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.loadModules()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),m.controller("BitbucketController",t),u=function(t,e){var r;return r=function(r,n,i){return n.on("click",".select-input-content",function(){var r;if(r=n.find("input"),r.val())return r.select(),document.execCommand("copy"),e.notify("success",t.instant("COMMON.COPIED_TO_CLIPBOARD"))})},{link:r}},m.directive("tgSelectInputText",["$translate","$tgConfirm",u]),n=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=h(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=r().target(u).start(),c=t.saveAttribute(i.github,"github"),c.then(function(){return n.trackEvent("github-webhook","created-or-changed","Create or changed github webhook",1),s.finish(),e.notify("success")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c)},{link:i}},m.directive("tgGithubWebhooks",["$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",n]),o=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=h(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=r().target(u).start(),c=t.saveAttribute(i.gitlab,"gitlab"),c.then(function(){return n.trackEvent("gitlab-webhook","created-or-changed","Create or changed gitlab webhook",1),s.finish(),e.notify("success"),i.$emit("project:modules:reload")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c)},{link:i}},m.directive("tgGitlabWebhooks",["$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",o]),e=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=h(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=r().target(u).start(),c=t.saveAttribute(i.bitbucket,"bitbucket"),c.then(function(){return n.trackEvent("bitbucket-webhook","created-or-changed","Create or changed bitbucket webhook",1),s.finish(),e.notify("success"),i.$emit("project:modules:reload")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c)},{link:i}},m.directive("tgBitbucketWebhooks",["$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",e]),l=function(){var t;return t=function(t,e,r,n){return n.$parsers.push(function(t){return t=$.trim(t),""===t?[]:t.split(",")})},{link:t,restrict:"EA",require:"ngModel"}},m.directive("tgValidOriginIps",l),s=function(t){function e(t,e,r,n,i,o,s){var a;this.scope=t,this.repo=e,this.rs=r,this.params=n,this.appMetaService=i,this.translate=o,this.projectService=s,f(this),this.scope.sectionName=this.translate.instant("ADMIN.GOGS.SECTION_NAME"),this.scope.project={},a=this.loadInitialData(),a.then(function(t){return function(){var e,r;return r=t.translate.instant("ADMIN.GOGS.PAGE_TITLE",{projectName:t.scope.project.name}),e=t.scope.project.description,t.appMetaService.setAll(r,e)}}(this)),a.then(null,this.onInitialDataError.bind(this))}return b(e,t),e.$inject=["$scope","$tgRepo","$tgResources","$routeParams","tgAppMetaService","$translate","tgProjectService"],e.prototype.loadModules=function(){return this.rs.modules.list(this.scope.projectId,"gogs").then(function(t){return function(e){return t.scope.gogs=e}}(this))},e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject(),this.loadModules()},e}(g(v.Controller,v.PageMixin,v.FiltersMixin)),a=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return a=o.find("form").checksley({onlyOneErrorElement:!0}),c=h(2e3,function(o){return function(o){var s,c;if(o.preventDefault(),a.validate())return s=r().target(u).start(),c=t.saveAttribute(i.gogs,"gogs"),c.then(function(){return n.trackEvent("gogs-webhook","create-or-change","Create or change gogs webhook",1),s.finish(),e.notify("success"),i.$emit("project:modules:reload")}),c.then(null,function(t){if(s.finish(),a.setErrors(t),t._error_message)return e.notify("error",t._error_message)})}}(this)),u=o.find(".submit-button"),o.on("submit","form",c),o.on("click",".submit-button",c)},{link:i}},m.controller("GogsController",s),m.directive("tgGogsWebhooks",["$tgRepo","$tgConfirm","$tgLoading","$tgAnalytics",a])}.call(this),function(){var t,e,r,n,i,o;i=this.taiga,e=this.taiga.bindOnce,o=this.taiga.timeout,r=this.taiga.debounce,n=angular.module("taigaProject"),t=function(t,e,r,n,i,o,s,a,c,u){var l;return l=function(r,l,p){var d,f;return d=null,r.$on("deletelightbox:new",function(t,e){return s.open(l),d=e}),r.$on("$destroy",function(){return l.off()}),f=function(){var r;return a.start(),s.close(l),r=t.remove(d),r.then(function(t){return u.trackEvent("projects","delete","Delete project",1),a.pageLoaded(),e.$broadcast("projects:reload"),n.path(i.resolve("home")),o.notify("success"),c.loadProjects()}),r.then(null,function(){return o.notify("error"),s.close(l)})},l.on("click",".button-red",function(t){return t.preventDefault(),s.close(l)}),l.on("click",".button-green",function(t){return t.preventDefault(),f()})},{link:l}},n.directive("tgLbDeleteProject",["$tgRepo","$rootScope","$tgAuth","$tgLocation","$tgNavUrls","$tgConfirm","lightboxService","tgLoader","tgCurrentUserService","$tgAnalytics",t])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u,l;u=this.taiga.bindOnce,r=function(){var t;return t=function(t,e,r){return u(t,r.tgBoBind,function(t){return e.text(t)})},{link:t}},i=function(){var t;return t=function(t,e,r){return u(t,r.tgBoHtml,function(t){return e.html(t)})},{link:t}},o=function(){var t;return t=function(t,e,r){return u(t,r.tgBoRef,function(t){return e.html("#"+t+" ")})},{link:t}},s=function(){var t;return t=function(t,e,r){return u(t,r.tgBoSrc,function(t){return e.attr("src",t)})},{link:t}},n=function(){var t;return t=function(t,e,r){return u(t,r.tgBoHref,function(t){return e.attr("href",t)})},{link:t}},e=function(){var t;return t=function(t,e,r){return u(t,r.tgBoAlt,function(t){return e.attr("alt",t)})},{link:t}},a=function(){var t;return t=function(t,e,r){return u(t,r.tgBoTitle,function(t){return e.attr("title",t)})},{link:t}},c=function(){var t;return t=function(t,e,r){return t.$watch(r.tgTitleHtml,function(t){if(null!=t)return e.attr("title",t)})},{link:t}},t=function(){var t;return t=function(t,e,r){return t.$watch(r.tgBindHtml,function(t){if(null!=t)return e.html(t)})},{link:t}},l=angular.module("taigaBase"),l.directive("tgBoBind",r),l.directive("tgBoHtml",i),l.directive("tgBoRef",o),l.directive("tgBoSrc",s),l.directive("tgBoHref",n),l.directive("tgBoAlt",e),l.directive("tgBoTitle",a),l.directive("tgBindTitle",c),l.directive("tgBindHtml",t)}.call(this),function(){var t,e;t=function(){function t(){this.config=window.taigaConfig}return t.prototype.get=function(t,e){return null==e&&(e=null),_.has(this.config,t)?this.config[t]:e},t}(),e=angular.module("taigaBase"),e.service("$tgConfig",t)}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=angular.module("taigaBase"),t=function(t){function e(t,e,r,n,i,o,s){this.rootScope=t,this.scope=e,this.params=r,this.repo=n,this.rs=i,this.confirm=o,this.projectService=s,this.scope.currentPlugin=_.head(_.filter(this.rootScope.adminPlugins,{slug:this.params.plugin})),this.scope.projectSlug=this.params.pslug,this.loadInitialData()}return n(e,t),e.$inject=["$rootScope","$scope","$routeParams","$tgRepo","$tgResources","$tgConfirm","tgProjectService"],e.prototype.loadProject=function(){var t;return t=this.projectService.project.toJS(),this.scope.projectId=t.id,this.scope.project=t,this.scope.$emit("project:loaded",t),this.scope.$broadcast("project:loaded",t),t},e.prototype.loadInitialData=function(){return this.loadProject()},e}(taiga.Controller),r.controller("ContribController",t),e=function(t){function e(t,e,r){this.rootScope=t,this.scope=e,this.params=r,this.scope.currentPlugin=_.head(_.filter(this.rootScope.userSettingsPlugins,{slug:this.params.plugin}))}return n(e,t),e.$inject=["$rootScope","$scope","$routeParams"],e}(taiga.Controller),r.controller("ContribUserSettingsController",e)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga,t=function(t){function e(t,e){this.storage=t,this.params=e}return r(e,t),e.$inject=["$tgStorage","$routeParams"],e.prototype.generateHash=function(t){return null==t&&(t=[]),t=_.map(t,function(t){return JSON.stringify(t)}),hex_sha1(t.join(":"))},e}(e.Service)}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=this.taiga,t=function(t){function e(t,r,n,i,o,s){this.http=t,this.q=r,this.storage=n,this.rootScope=i,this.cacheFactory=o,this.translate=s,e.__super__.constructor.call(this),this.cache=this.cacheFactory("httpget")}return n(e,t),e.$inject=["$http","$q","$tgStorage","$rootScope","$cacheFactory","$translate"],e.prototype.headers=function(){var t,e,r;return t={},r=this.storage.get("token"),r&&(t.Authorization="Bearer "+r),e=this.translate.preferredLanguage(),e&&(t["Accept-Language"]=e),t},e.prototype.request=function(t){return t.headers=_.assign({},t.headers||{},this.headers()),this.http(t)},e.prototype.get=function(t,e,r){return r=_.assign({method:"GET",url:t},r),e&&(r.params=e),r.cache=this.cache,this.request(r)["finally"](function(t){return function(e){return t.cache.removeAll()}}(this))},e.prototype.post=function(t,e,r,n){return n=_.assign({method:"POST",url:t},n),e&&(n.data=e),r&&(n.params=r),this.request(n)},e.prototype.put=function(t,e,r,n){return n=_.assign({method:"PUT",url:t},n),e&&(n.data=e),r&&(n.params=r),this.request(n)},e.prototype.patch=function(t,e,r,n){return n=_.assign({method:"PATCH",url:t},n),e&&(n.data=e),r&&(n.params=r),this.request(n)},e.prototype["delete"]=function(t,e,r,n){return n=_.assign({method:"DELETE",url:t},n),e&&(n.data=e),r&&(n.params=r),this.request(n)},e}(r.Service),e=angular.module("taigaBase"),e.service("$tgHttp",t)}.call(this),function(){var t,e;t=function(t,e,r){return t.noreload=function(r){var n,i;return n=e.current,i=r.$on("$locationChangeSuccess",function(){return e.current=n,i()}),t},t.isInCurrentRouteParams=function(e,r){var n;return n=t.search()||{},n[e]===r},t},e=angular.module("taigaBase"),e.factory("$tgLocation",["$location","$route","$rootScope",t])}.call(this),function(){var t,e,r,n,i,o=[].indexOf||function(t){for(var e=0,r=this.length;ef?(p=a.instant("PROJECT.IMPORT.ERROR_MAX_SIZE_EXCEEDED",{fileName:e.name,fileSize:r(e.size),maxFileSize:r(f)}),h={status:413,data:{_error_message:p}},l.reject(h),l.promise):(v=function(t){return function(t){var e,i;return i=Math.round(t.loaded/t.total*100),e=a.instant("PROJECT.IMPORT.UPLOAD_IN_PROGRESS_MESSAGE",{uploadedSize:r(t.loaded),totalSize:r(t.total)}),n("in-progress",null,e,i)}}(this),g=function(t){return function(t){return n("done",a.instant("PROJECT.IMPORT.TITLE"),a.instant("PROJECT.IMPORT.DESCRIPTION"))}}(this),m=function(t){return function(t){return n("error")}}(this),c=function(t){return function(t){var e;h={};try{h.data=JSON.parse(t.target.responseText)}catch(r){h.data={}}return h.status=t.target.status,t.target.getResponseHeader("Taiga-Info-Project-Is-Private")&&(h.headers={isPrivate:"True"===t.target.getResponseHeader("Taiga-Info-Project-Is-Private"),memberships:parseInt(t.target.getResponseHeader("Taiga-Info-Project-Memberships"))}),201!==(e=h.status)&&202!==e||l.resolve(h),l.reject(h)}}(this),d=function(t){return function(t){return l.reject("fail")}}(this),u=new FormData,u.append("dump",e),y=new XMLHttpRequest,y.upload.addEventListener("progress",v,!1),y.upload.addEventListener("load",g,!1),y.upload.addEventListener("error",m,!1),y.upload.addEventListener("abort",m,!1),y.addEventListener("load",c,!1),y.addEventListener("error",d,!1),y.open("POST",i.resolve("importer")),y.setRequestHeader("Authorization","Bearer "+o.getToken()),y.setRequestHeader("Accept","application/json"),y.send(u),l.promise)},c.changeLogo=function(e,o){var a,c,u,l,p,d;return u=t.get("maxUploadFileSize",null),u&&o.size>u?(p={status:413,data:{_error_message:"'"+o.name+"' ("+r(o.size)+") is too heavy for our oompa loompas, try it with a smaller than ("+r(u)+")"}},c=s.defer(),c.reject(p),c.promise):(a=new FormData,a.append("logo",o),l={transformRequest:angular.identity,headers:{"Content-Type":void 0}},d=i.resolve("projects")+"/"+e+"/change_logo",n.post(d,a,{},l))},c.removeLogo=function(t){var e;return e=i.resolve("projects")+"/"+t+"/remove_logo",n.post(e)},function(t){return t.projects=c}},t=angular.module("taigaResources"),t.factory("$tgProjectsResourcesProvider",["$tgConfig","$tgRepo","$tgHttp","$tgUrls","$tgAuth","$q","$translate",e])}.call(this),function(){var t,e,r;r=this.taiga,e=function(t,e,r){var n;return n={},n.get=function(e){return t.queryOne("roles",e)},n.list=function(e){return t.queryMany("roles",{project:e})},function(t){return t.roles=n}},t=angular.module("taigaResources"),t.factory("$tgRolesResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",e])}.call(this),function(){var t,e,r;r=this.taiga,e=function(t,e,r,n){var i;return i={},i["do"]=function(t,i){var o,s,a,c;return o=n.defer(),c=e.resolve("search"),s={url:c,method:"GET",timeout:o.promise,cancelable:!0,params:{project:t,text:i,get_all:!1}},a=r.request(s).then(function(t){return t.data}),a.abort=function(){return o.resolve()},a["finally"]=function(){return a.abort=angular.noop,o=a=null},a},function(t){return t.search=i}},t=angular.module("taigaResources"),t.factory("$tgSearchResourcesProvider",["$tgRepo","$tgUrls","$tgHttp","$q",e])}.call(this),function(){var t,e,r,n;n=this.taiga,t=n.generateHash,r=function(t,e,r,n,i){var o;return o={},o.get=function(r,n){return t.queryOne("milestones",n).then(function(t){var r;return r=t.user_stories,r=_.map(r,function(t){return e.make_model("userstories",t)}),t._attrs.user_stories=r,t})},o.stats=function(e,r){return t.queryOneRaw("milestones",r+"/stats")},o.list=function(r,n){var i;return i={project:r},i=_.extend({},i,n||{}),t.queryMany("milestones",i,{},!0).then(function(t){return function(t){var r,n,i,o,s,a;for(s=t[0],r=t[1],n=0,i=s.length;nc?(l={status:413,data:{_error_message:"'"+e.name+"' ("+r(e.size)+") is too heavy for our oompa loompas, try it with a smaller than ("+r(c)+")"}},a=o.defer(),a.reject(l),a.promise):(s=new FormData,s.append("avatar",e),u={transformRequest:angular.identity,headers:{"Content-Type":void 0}},p=i.resolve("users")+"/change_avatar",n.post(p,s,{},u))},s.removeAvatar=function(){var t;return t=i.resolve("users")+"/remove_avatar",n.post(t)},s.changePassword=function(t,e){var r,o;return o=i.resolve("users")+"/change_password",r={current_password:t,password:e},n.post(o,r)},function(t){return t.userSettings=s}},t=angular.module("taigaResources"),t.factory("$tgUserSettingsResourcesProvider",["$tgConfig","$tgRepo","$tgHttp","$tgUrls","$q",e])}.call(this),function(){var t,e,r,n;n=this.taiga,r=this.taiga.sizeFormat,e=function(t,e){var r;return r={},r.contacts=function(r,n){var i,o;return null==n&&(n={}),o=e.resolve("user-contacts",r),i={headers:{}},n.enablePagination||(i.headers["x-disable-pagination"]="1"),t.get(o,{},i).then(function(t){return t.data})},function(t){return t.users=r}},t=angular.module("taigaResources"),t.factory("$tgUsersResourcesProvider",["$tgHttp","$tgUrls","$q",e])}.call(this),function(){var t,e,r,n;n=this.taiga,t=n.generateHash,r=function(e,r,n,i,o){var s,a;return a={},s="userstories-queryparams",a.get=function(t,r,n){var i;return i=a.getQueryParams(t),i.project=t,i=_.extend({},i,n),e.queryOne("userstories",r,i)},a.getByRef=function(t,r,n){var i;return null==n&&(n={}),i=a.getQueryParams(t),i.project=t,i.ref=r,i=_.extend({},i,n),e.queryOne("userstories","by_ref",i)},a.listInAllProjects=function(t){return e.queryMany("userstories",t)},a.filtersData=function(t){return e.queryOneRaw("userstories-filters",null,t)},a.listUnassigned=function(t,r,n){var i;return i={project:t,milestone:"null"},i=_.extend({},i,r||{}),a.storeQueryParams(t,i),e.queryMany("userstories",_.extend(i,{page_size:n}),{enablePagination:!0},!0)},a.listAll=function(t,r){var n;return n={project:t},n=_.extend({},n,r||{}),a.storeQueryParams(t,n),e.queryMany("userstories",n)},a.bulkCreate=function(t,e,i){var o,s;return o={project_id:t,status_id:e,bulk_stories:i},s=n.resolve("bulk-create-us"),r.post(s,o)},a.upvote=function(t){var e;return e=n.resolve("userstory-upvote",t),r.post(e)},a.downvote=function(t){var e;return e=n.resolve("userstory-downvote",t),r.post(e)},a.watch=function(t){var e;return e=n.resolve("userstory-watch",t),r.post(e)},a.unwatch=function(t){var e;return e=n.resolve("userstory-unwatch",t),r.post(e)},a.bulkUpdateBacklogOrder=function(t,e){var i,o;return o=n.resolve("bulk-update-us-backlog-order"),i={project_id:t,bulk_stories:e},r.post(o,i)},a.bulkUpdateMilestone=function(t,e,i){var o,s;return s=n.resolve("bulk-update-us-milestone"),o={project_id:t,milestone_id:e,bulk_stories:i},r.post(s,o)},a.bulkUpdateKanbanOrder=function(t,e,i){var o,s;return s=n.resolve("bulk-update-us-kanban-order"),o={project_id:t,status_id:e,bulk_stories:i},r.post(s,o)},a.listValues=function(t,r){var n;return n={project:t},a.storeQueryParams(t,n),e.queryMany(r,n)},a.createDefaultValues=function(t,e){var i,o;return i={project_id:t},o=n.resolve(e+"-create-default"),r.post(o,i)},a.storeQueryParams=function(e,r){var n,o;return o=e+":"+s,n=t([e,o]),i.set(n,r)},a.getQueryParams=function(e){var r,n;return n=e+":"+s,r=t([e,n]),i.get(r)||{}},a.storeShowTags=function(e,r){var n;return n=t([e,"showTags"]),i.set(n,r)},a.getShowTags=function(e){var r;return r=t([e,"showTags"]),i.get(r)||null},function(t){return t.userstories=a}},e=angular.module("taigaResources"),e.factory("$tgUserstoriesResourcesProvider",["$tgRepo","$tgHttp","$tgUrls","$tgStorage","$q",r])}.call(this),function(){var t,e;e=function(t,e,r){var n;return n={},n.list=function(e){var r;return r={webhook:e},t.queryMany("webhooklogs",r)},n.resend=function(t){var n;return n=e.resolve("webhooklogs-resend",t),r.post(n)},function(t){return t.webhooklogs=n}},t=angular.module("taigaResources"),t.factory("$tgWebhookLogsResourcesProvider",["$tgRepo","$tgUrls","$tgHttp",e])}.call(this),function(){var t,e;e=function(t,e,r){var n;return n={},n.list=function(e){var r;return r={project:e},t.queryMany("webhooks",r)},n.test=function(t){var n;return n=e.resolve("webhooks-test",t),r.post(n)},function(t){return t.webhooks=n}},t=angular.module("taigaResources"),t.factory("$tgWebhooksResourcesProvider",["$tgRepo","$tgUrls","$tgHttp",e])}.call(this),function(){var t,e,r;r=this.taiga,e=function(t,e,r){var n;return n={},n.get=function(e){return t.queryOne("wiki",e)},n.getBySlug=function(e,r){return t.queryOne("wiki","by_slug?project="+e+"&slug="+r)},n.list=function(e){return t.queryMany("wiki",{project:e})},n.listLinks=function(e){return t.queryMany("wiki-links",{project:e})},function(t){return t.wiki=n}},t=angular.module("taigaResources"),t.factory("$tgWikiResourcesProvider",["$tgRepo","$tgHttp","$tgUrls",e])}.call(this),function(){var t,e,r,n,i,o,s=function(t,e){function r(){this.constructor=t}for(var n in e)a.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},a={}.hasOwnProperty;o=this.taiga,n=this.taiga.mixOf,r=this.taiga.debounce,i=angular.module("taigaUserSettings"),t=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.auth=u,this.translate=l,this.scope.sectionName=this.translate.instant("CHANGE_PASSWORD.SECTION_NAME"),this.scope.user=this.auth.getUser()}return s(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth","$translate"],e}(n(o.Controller,o.PageMixin)),i.controller("UserChangePasswordController",t),e=function(t,e,n,i){var o;return o=function(o,s,a,c){var u,l,p;return u=new checksley.Form(s.find("form")),l=r(2e3,function(r){return function(r){var s,a;if(r.preventDefault(),u.validate())return o.newPassword1!==o.newPassword2?void e.notify("error",i.instant("CHANGE_PASSWORD.ERROR_PASSWORD_MATCH")):(s=n().target(p).start(),a=t.userSettings.changePassword(o.currentPassword,o.newPassword1),a.then(function(){return s.finish(),e.notify("success")}),a.then(null,function(t){return s.finish(),e.notify("error",t.data._error_message)}))}}(this)),p=s.find(".submit-button"),s.on("submit","form",l),o.$on("$destroy",function(){return s.off()})},{link:o}},i.directive("tgUserChangePassword",["$tgResources","$tgConfirm","$tgLoading","$translate",e])}.call(this),function(){var t,e,r,n,i;i=this.taiga,e=this.taiga.bindOnce,r=this.taiga.debounce,n=angular.module("taigaUserSettings"),t=function(t,e,n,i,o,s,a){var c;return c=function(e,c,u){var l,p;return e.$on("deletelightbox:new",function(t,e){return s.open(c)}),e.$on("$destroy",function(){return c.off()}),l=function(){var r,u;return r=a().target(p).start(),u=t.remove(e.user),u.then(function(t){return r.finish(),s.close(c),n.logout(),i.path(o.resolve("login"))}),u.then(null,function(){return r.finish(),console.log("FAIL")})},c.on("click",".button-green",function(t){return t.preventDefault(),s.close(c)}),c.on("click",".button-red",r(2e3,function(t){return t.preventDefault(),l()})),p=c.find(".button-red")},{link:c,templateUrl:"user/lightbox/lightbox-delete-account.html"}},n.directive("tgLbDeleteUser",["$tgRepo","$rootScope","$tgAuth","$tgLocation","$tgNavUrls","lightboxService","$tgLoading",t])}.call(this),function(){var t,e,r,n,i,o,s,a=function(t,e){function r(){this.constructor=t}for(var n in e)c.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},c={}.hasOwnProperty;s=this.taiga,i=this.taiga.mixOf,n=this.taiga.bindOnce,o=angular.module("taigaUserSettings"),t=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){var p;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.auth=u,this.errorHandlingService=l,this.scope.sectionName="USER_SETTINGS.NOTIFICATIONS.LIVE_SECTION_NAME",this.scope.user=this.auth.getUser(),p=this.loadInitialData(),p.then(null,this.onInitialDataError.bind(this))}return a(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth","tgErrorHandlingService"],e.prototype.loadInitialData=function(){return this.rs.notifyPolicies.list().then(function(t){return function(e){return t.scope.notifyPolicies=e,e}}(this))},e}(i(s.Controller,s.PageMixin)),o.controller("UserLiveNotificationsController",t),e=function(){var t;return t=function(t,e,r){return t.$on("$destroy",function(){return e.off()})},{link:t}},o.directive("tgUserLiveNotifications",e),r=function(t,e,r){var i,o;return o=_.template('<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
    \n
    <%- notifyPolicy.project_name %>
    \n
    \n
    \n checked="checked"<% } %>/>\n \n
    \n
    \n
    \n
    \n checked="checked"<% } %> />\n \n
    \n
    \n
    \n
    \n checked="checked"<% } %> />\n \n
    \n
    \n
    \n<% }) %>'),i=function(i,s,a){var c;return c=function(){var n,a;return s.off(),n={notifyPolicies:i.notifyPolicies},a=o(n),s.html(r(a)(i)),s.on("change","input[type=radio]",function(r){var n,o,s,a,c,u;return u=angular.element(r.currentTarget),a=u.parents(".policy-table-row").data("index"),s=i.notifyPolicies[a],c=s.live_notify_level,s.live_notify_level=parseInt(u.val(),10),o=function(){return e.notify("success")},n=function(){return e.notify("error"),u.parents(".policy-table-row").find("input[value="+c+"]").prop("checked",!0)},t.save(s).then(o,n)})},i.$on("$destroy",function(){return s.off()}),n(i,a.ngModel,c)},{link:i}},o.directive("tgUserLiveNotificationsList",["$tgRepo","$tgConfirm","$compile",r])}.call(this),function(){var t,e,r,n,i,o,s,a,c,u=function(t,e){function r(){this.constructor=t}for(var n in e)l.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},l={}.hasOwnProperty;c=this.taiga,o=this.taiga.mixOf,a=this.taiga.sizeFormat,s=angular.module("taigaUserSettings"),i=this.taiga.debounce,n=function(t){function e(t,e,r,n,i,o,s,c,u,l,p,d,f,h){var g,m,v;this.scope=t,this.rootscope=e,this.config=r,this.repo=n,this.confirm=i,this.rs=o,this.params=s,this.q=c,this.location=u,this.navUrls=l,this.auth=p,this.translate=d,this.errorHandlingService=f,this.window=h,this.scope.sectionName="USER_SETTINGS.MENU.SECTION_TITLE",this.scope.project={},this.scope.user=this.auth.getUser(),this.scope.user||this.errorHandlingService.permissionDenied(),this.scope.lang=this.getLan(),this.scope.theme=this.getTheme(),g=this.config.get("maxUploadFileSize",null),g&&(v=this.translate.instant("USER_SETTINGS.AVATAR_MAX_SIZE",{maxFileSize:a(g)}),this.scope.maxFileSizeMsg=v),m=this.loadInitialData(),m.then(null,this.onInitialDataError.bind(this))}return u(e,t),e.$inject=["$scope","$rootScope","$tgConfig","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth","$translate","tgErrorHandlingService","$window"],e.prototype.loadInitialData=function(){return this.scope.availableThemes=this.config.get("themes",[]),this.rs.locales.list().then(function(t){return function(e){return t.scope.locales=e,e}}(this))},e.prototype.openDeleteLightbox=function(){return this.rootscope.$broadcast("deletelightbox:new",this.scope.user)},e.prototype.getLan=function(){return this.scope.user.lang||this.translate.preferredLanguage()},e.prototype.getTheme=function(){return this.scope.user.theme||this.config.get("defaultTheme")||"taiga"},e.prototype.exportProfile=function(){var t,e;return e=function(t){var e;return e=t.data.url,this.window.open(e,"_blank")},t=function(t){return function(e){var r;if(null!=(r=e.data)?r._error_message:void 0)return t.confirm.notify("error",e.data._error_message)}}(this),this.auth.exportProfile().then(e,t)},e}(o(c.Controller,c.PageMixin)),s.controller("UserSettingsController",n),r=function(t,e,r,n){var o;return o=function(o,s,a){var c;return c=i(2e3,function(i){return function(i){var a,c,u,l;if(i.preventDefault(),c=s.find("form").checksley(),c.validate())return a=o.user.isAttributeModified("email"),o.user.lang=o.lang,o.user.theme=o.theme,l=function(r){var i;return e.setUser(r),a?(i=n.instant("USER_PROFILE.CHANGE_EMAIL_SUCCESS"),t.success(i)):t.notify("success")},u=function(e){return c.setErrors(e),t.notify("error",e._error_message)},r.save(o.user).then(l,u)}}(this)),s.on("submit","form",c),o.$on("$destroy",function(){return s.off()})},{link:o}},s.directive("tgUserProfile",["$tgConfirm","$tgAuth","$tgRepo","$translate",r]),e=function(t,e,r,n){var i;return i=function(i,o,s){var a,c,u;return u=function(){return o.find(".size-info").removeClass("hidden")},c=function(r){var s;return s=e.make_model("users",r.data),t.setUser(s),i.user=s,o.find(".loading-overlay").removeClass("active"),n.notify("success")},a=function(t){return 413===t.status&&u(),o.find(".loading-overlay").removeClass("active"),n.notify("error",t.data._error_message)},o.on("click",".js-change-avatar",function(){return o.find("#avatar-field").click()}),o.on("change","#avatar-field",function(t){if(i.avatarAttachment)return o.find(".loading-overlay").addClass("active"),r.userSettings.changeAvatar(i.avatarAttachment).then(c,a)}),o.on("click","a.js-use-gravatar",function(t){return o.find(".loading-overlay").addClass("active"),r.userSettings.removeAvatar().then(c,a)}),i.$on("$destroy",function(){return o.off()})},{link:i}},s.directive("tgUserAvatar",["$tgAuth","$tgModel","$tgResources","$tgConfirm",e]),t=function(t){var e;return e=function(e,r,n){var i,o;return i=t(n.tgAvatarModel),o=i.assign,r.bind("change",function(){return e.$apply(function(){return o(e,r[0].files[0])})})},{link:e}},s.directive("tgAvatarModel",["$parse",t])}.call(this),function(){var t,e;t=function(){var t;return t=function(t,e,r){ +var n;return n=r.tgUserSettingsNavigation,e.find(".active").removeClass("active"),e.find("#usersettingsmenu-"+n+" a").addClass("active"),t.$on("$destroy",function(){return e.off()})},{link:t}},e=angular.module("taigaUserSettings"),e.directive("tgUserSettingsNavigation",t)}.call(this),function(){var t,e,r,n,i,o,s,a=function(t,e){function r(){this.constructor=t}for(var n in e)c.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},c={}.hasOwnProperty;s=this.taiga,i=this.taiga.mixOf,n=this.taiga.bindOnce,o=angular.module("taigaUserSettings"),t=function(t){function e(t,e,r,n,i,o,s,a,c,u,l){var p;this.scope=t,this.rootscope=e,this.repo=r,this.confirm=n,this.rs=i,this.params=o,this.q=s,this.location=a,this.navUrls=c,this.auth=u,this.errorHandlingService=l,this.scope.sectionName="USER_SETTINGS.NOTIFICATIONS.SECTION_NAME",this.scope.user=this.auth.getUser(),p=this.loadInitialData(),p.then(null,this.onInitialDataError.bind(this))}return a(e,t),e.$inject=["$scope","$rootScope","$tgRepo","$tgConfirm","$tgResources","$routeParams","$q","$tgLocation","$tgNavUrls","$tgAuth","tgErrorHandlingService"],e.prototype.loadInitialData=function(){return this.rs.notifyPolicies.list().then(function(t){return function(e){return t.scope.notifyPolicies=e,e}}(this))},e}(i(s.Controller,s.PageMixin)),o.controller("UserNotificationsController",t),e=function(){var t;return t=function(t,e,r){return t.$on("$destroy",function(){return e.off()})},{link:t}},o.directive("tgUserNotifications",e),r=function(t,e,r){var i,o;return o=_.template('<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
    \n
    <%- notifyPolicy.project_name %>
    \n
    \n
    \n checked="checked"<% } %>/>\n \n
    \n
    \n
    \n
    \n checked="checked"<% } %> />\n \n
    \n
    \n
    \n
    \n checked="checked"<% } %> />\n \n
    \n
    \n
    \n<% }) %>'),i=function(i,s,a){var c;return c=function(){var n,a;return s.off(),n={notifyPolicies:i.notifyPolicies},a=o(n),s.html(r(a)(i)),s.on("change","input[type=radio]",function(r){var n,o,s,a,c,u;return u=angular.element(r.currentTarget),a=u.parents(".policy-table-row").data("index"),s=i.notifyPolicies[a],c=s.notify_level,s.notify_level=parseInt(u.val(),10),o=function(){return e.notify("success")},n=function(){return e.notify("error"),u.parents(".policy-table-row").find("input[value="+c+"]").prop("checked",!0)},t.save(s).then(o,n)})},i.$on("$destroy",function(){return s.off()}),n(i,a.ngModel,c)},{link:i}},o.directive("tgUserNotificationsList",["$tgRepo","$tgConfirm","$compile",r])}.call(this),function(){var t,e,r,n,i,o=function(t,e){function r(){this.constructor=t}for(var n in e)s.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},s={}.hasOwnProperty,a=[].indexOf||function(t){for(var e=0,r=this.length;e=0})},e}(r(i.Controller,i.PageMixin)),n.controller("UserProjectSettingsController",t)}.call(this),function(){var t,e,r,n,i,o,s,a=function(t,e){function r(){this.constructor=t}for(var n in e)c.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},c={}.hasOwnProperty;s=this.taiga,i=this.taiga.mixOf,n=this.taiga.bindOnce,o=angular.module("taigaUserSettings"),t=function(t){function e(t,e,r){var n;this.scope=t,this.rs=e,this.auth=r,this.scope.sectionName="USER_SETTINGS.EVENTS.SECTION_NAME",this.scope.user=this.auth.getUser(),n=this.loadInitialData(),n.then(null,this.onInitialDataError.bind(this))}return a(e,t),e.$inject=["$scope","$tgResources","$tgAuth"],e.prototype.loadInitialData=function(){return this.rs.notifyPolicies.list().then(function(t){return function(e){return t.scope.notifyPolicies=e,e}}(this))},e}(i(s.Controller,s.PageMixin)),o.controller("UserWebNotificationsController",t),e=function(){var t;return t=function(t,e,r){return t.$on("$destroy",function(){return e.off()})},{link:t}},o.directive("tgUserWebNotifications",e),r=function(t,e,r){var i,o;return o=_.template('<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\n
    \n
    <%- notifyPolicy.project_name %>
    \n
    \n
    \n checked="checked" <% } %>\n name="policy-<%- notifyPolicy.id %>" id="policy-<%- notifyPolicy.id %>"/>\n
    \n \n \n
    \n
    \n
    \n<% }) %>'),i=function(i,s,a){var c;return c=function(){var n,a;return s.off(),n={notifyPolicies:i.notifyPolicies},a=o(n),s.html(r(a)(i)),s.on("click",".check",function(r){var n,o,s,a,c;return c=angular.element(r.currentTarget),a=c.data("index"),s=i.notifyPolicies[a],s.web_notify_level=!s.web_notify_level,o=function(){return e.notify("success"),c.find("input").prop("checked",s.web_notify_level)},n=function(){return e.notify("error")},t.save(s).then(o,n)})},i.$on("$destroy",function(){return s.off()}),n(i,a.ngModel,c)},{link:i}},o.directive("tgUserWebNotificationsList",["$tgRepo","$tgConfirm","$compile",r])}.call(this),function(){angular.module("taigaComponents",[])}.call(this),function(){var t;t=angular.module("taigaDiscover",[])}.call(this),function(){var t;t=angular.module("taigaExternalApps",[])}.call(this),function(){angular.module("taigaHistory",[])}.call(this),function(){var t;t=angular.module("taigaHome",[])}.call(this),function(){angular.module("taigaNavigationBar",[])}.call(this),function(){angular.module("taigaNotifications",[])}.call(this),function(){var t;t=angular.module("taigaProfile",[])}.call(this),function(){angular.module("taigaProjects",[])}.call(this),function(){angular.module("taigaResources2",[])}.call(this),function(){angular.module("taigaUserTimeline",[])}.call(this),function(){var t;t=angular.module("taigaUtils",[])}.call(this),function(){angular.module("taigaWikiHistory",[])}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r){},{templateUrl:"components/assigned-to/assigned-item/assigned-item.html",scope:{member:"="},link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAssignedItem",t)}.call(this),function(){var t;t=function(){function t(){this.assigned&&this._getAssignedMember(),this._filterAssignedMember()}return t.$inject=[],t.prototype._getAssignedMember=function(){return this.assignedMember=_.filter(this.project.members,function(t){return function(e){return e.id===t.assigned.get("id")}}(this))},t.prototype._filterAssignedMember=function(){return this.assigned?this.nonAssignedMembers=_.filter(this.project.members,function(t){return function(e){return e.id!==t.assigned.get("id")}}(this)):this.nonAssignedMembers=this.project.members},t}(),angular.module("taigaComponents").controller("AssignedToSelectorCtrl",t)}.call(this),function(){var t;t=function(){return{controller:"AssignedToSelectorCtrl",controllerAs:"vm",bindToController:!0,templateUrl:"components/assigned-to/assigned-to-selector/assigned-to-selector.html",scope:{assigned:"=",project:"=",onRemoveAssigned:"&",onAssignTo:"&"}}},t.$inject=[],angular.module("taigaComponents").directive("tgAssignedToSelector",t)}.call(this),function(){var t;t=function(){function t(t,e){this.lightboxFactory=t,this.lightboxService=e,this.has_permissions=_.includes(this.project.my_permissions,"modify_epic")}return t.$inject=["tgLightboxFactory","lightboxService"],t.prototype._closeAndRemoveAssigned=function(){return this.lightboxService.closeAll(),this.onRemoveAssigned()},t.prototype._closeAndAssign=function(t){return this.lightboxService.closeAll(),this.onAssignTo({member:t})},t.prototype.onSelectAssignedTo=function(t,e){return this.lightboxFactory.create("tg-assigned-to-selector",{"class":"lightbox lightbox-assigned-to-selector open",assigned:"assigned",project:"project","on-remove-assigned":"onRemoveAssigned()","on-assign-to":"assignTo(member)"},{assigned:this.assignedTo,project:this.project,onRemoveAssigned:this._closeAndRemoveAssigned.bind(this),assignTo:this._closeAndAssign.bind(this)})},t}(),angular.module("taigaComponents").controller("AssignedToCtrl",t)}.call(this),function(){var t;t=function(){return{controller:"AssignedToCtrl",controllerAs:"vm",bindToController:!0,templateUrl:"components/assigned-to/assigned-to.html",scope:{assignedTo:"=",project:"=",onRemoveAssigned:"&",onAssignTo:"&"}}},t.$inject=[],angular.module("taigaComponents").directive("tgAssignedToComponent",t)}.call(this),function(){var t;t=function(t,e,r,n,i,o,s,a,c,u,l){var p;return p=function(t,e,r,n){var i,o,a;return i=function(){var e,n;return(null!=(e=t.project)&&null!=(n=e.my_permissions)?n.indexOf(r.requiredPerm):void 0)!==-1},a=function(e){var r,i,o;return r=n.$modelValue.assigned_to,i=l.searchUsers(e),r&&(i=_.reject(i,{id:r})),o=_.slice(i,0,5),o=_.map(o,function(t){return t.avatar=u.getAvatar(t)}),t.users=_.slice(i,0,5),t.showMore=i.length>5},o=function(e){var r;return(null!=e?e.assigned_to:void 0)?(t.selected=e.assigned_to,r=t.usersById[t.selected],t.fullName=null!=r?r.full_name_display:void 0,t.isUnassigned=!1,t.avatar=u.getAvatar(r),t.bg=t.avatar.bg,t.isIocaine=null!=e?e.is_iocaine:void 0):(t.fullName=s.instant("COMMON.ASSIGNED_TO.ASSIGN"),t.isUnassigned=!0,t.avatar=u.getAvatar(null),t.bg=null,t.isIocaine=!1),t.fullNameVisible=!(t.isUnassigned&&!c.isAuthenticated()),t.isEditable=i()},e.on("click",".users-search",function(t){return t.stopPropagation()}),e.on("click",".users-dropdown",function(r){return r.preventDefault(),r.stopPropagation(),t.usersSearch="",a(),t.$apply(),e.find(".pop-users").popover().open()}),t.selfAssign=function(){return n.$modelValue.assigned_to=c.getUser().get("id"),o(n.$modelValue)},t.unassign=function(){return n.$modelValue.assigned_to=null,o()},t.$watch("usersSearch",function(t){if(null!=t)return a(t),e.find("input").focus()}),e.on("click",".user-list-single",function(e){var r;return e.preventDefault(),r=angular.element(e.currentTarget),n.$modelValue.assigned_to=r.data("user-id"),o(n.$modelValue),t.$apply()}),t.$watch(r.ngModel,function(t){return o(t)}),t.$on("isiocaine:changed",function(t,e){return o(e)}),t.$on("$destroy",function(){return e.off()})},{link:p,templateUrl:"common/components/assigned-to-inline.html",require:"ngModel"}},angular.module("taigaComponents").directive("tgAssignedToInline",["$rootScope","$tgConfirm","$tgRepo","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$translate","$compile","tgCurrentUserService","tgAvatarService","tgUserListService",t])}.call(this),function(){var t;t=function(t,e,r,n,i,o,s,a,c,u){var l,p;return p=o.get("common/components/assigned-to.html",!0),l=function(r,l,d,f){var h,g,m;return h=function(){var t,e;return(null!=(t=r.project)&&null!=(e=t.my_permissions)?e.indexOf(d.requiredPerm):void 0)!==-1},m=function(r){var o,s,a;return s=f.$modelValue.clone(),s.assigned_to=r,o=n().target(l).start(),a=i.save(function(t){return t.assigned_to=r,t}),a.then(function(e){return o.finish(),t.$broadcast("object:updated")}),a.then(null,function(){return e.notify("error"),o.finish()}),a},g=function(){var t,e;return p=o.get("common/components/assigned-to.html"),e=r.$new(),t=a(p)(e),l.html(t)},r.assign=function(){return t.$broadcast("assigned-to:add",f.$modelValue)},r.unassign=function(){var t;return t=s.instant("COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED"),e.ask(t).then(function(t){return t.finish(),m(null)})},r.selfAssign=function(){var t;return t=c.getUser().get("id"),m(t)},r.$on("assigned-to:added",function(t,e,r){if(r.id===f.$modelValue.id)return m(e)}),r.$watch(d.ngModel,function(t){var e;return(null!=t?t.assigned_to:void 0)?(r.selected=t.assigned_to,e=r.usersById[r.selected],r.fullName=null!=e?e.full_name_display:void 0,r.isUnassigned=!1,r.avatar=u.getAvatar(e),r.bg=r.avatar.bg,r.isIocaine=null!=t?t.is_iocaine:void 0):(r.fullName=s.instant("COMMON.ASSIGNED_TO.ASSIGN"),r.isUnassigned=!0,r.avatar=u.getAvatar(null),r.bg=null,r.isIocaine=!1),r.fullNameVisible=!(r.isUnassigned&&!c.isAuthenticated()),r.isEditable=h(),g()}),r.$on("$destroy",function(){return l.off()})},{link:l,require:"ngModel"}},angular.module("taigaComponents").directive("tgAssignedTo",["$rootScope","$tgConfirm","$tgRepo","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$translate","$compile","tgCurrentUserService","tgAvatarService",t])}.call(this),function(){var t,e=[].indexOf||function(t){for(var e=0,r=this.length;e0},f=function(r){var n,i,o;return i=p.searchUsers(r),n=[],_.map(i,function(t){var r;if(r=t.id,e.call(s,r)>=0)return t.avatar=l.getAvatar(t),n.push(t)}),o=[],_.map(i,function(t){var r;if(r=t.id,e.call(s,r)<0)return t.avatar=l.getAvatar(t),o.push(t)}),t.selected=_.slice(n,0,5),t.selected.length<5?t.users=_.slice(o,0,5-t.selected.length):t.users=[],t.showMore=i.length>5},d=function(){var e;return e=_.map(s,function(e){return t.usersById[e]}),e=_.filter(e,function(t){return!!t}),t.hiddenUsers=s.length>3?s.length-3:0,t.assignedUsers=_.slice(e,0,3),t.isAssigned=c()},o=function(){return _.map(s,function(e){if(!t.usersById[e])return s.splice(s.indexOf(e),1)}),0===s.length?a=null:s.indexOf(a)!==-1&&a||(a=s[0]),i.$modelValue.setAttr("assigned_users",s),i.$modelValue.assigned_to=a},r.on("click",".users-dropdown",function(e){return e.preventDefault(),e.stopPropagation(),t.usersSearch=null,f(),t.$apply(),r.find(".pop-users").popover().open()}),t.assign=function(t){return s.push(t.id),d(),o()},t.selfAssign=function(){return s.push(u.getUser().get("id")),d(),o()},t.unassign=function(t){var e;return e=s.indexOf(t.id),s.splice(e,1),d(),o()},r.on("click",".users-search",function(t){return t.stopPropagation()}),t.$watch("usersSearch",function(t){if(null!=t)return f(t),r.find("input").focus()}),t.$watch(n.ngModel,function(t){var e;if(null!=t)return s=[],e=null,null!=t.assigned_users&&(s=t.assigned_users),e=t.assigned_to,d()}),t.$on("$destroy",function(){return r.off()})},{scope:!0,link:d,templateUrl:"common/components/assigned-users-inline.html",require:"ngModel"}},angular.module("taigaComponents").directive("tgAssignedUsersInline",["$rootScope","$tgConfirm","$tgRepo","$tgLoading","$tgQueueModelTransformation","$tgTemplate","$translate","$compile","tgCurrentUserService","tgAvatarService","tgUserListService",t])}.call(this),function(){var t,e=[].indexOf||function(t){for(var e=0,r=this.length;e0},g=function(e,o){var s;return s=i.save(function(t){return t.assigned_users=e,t.assigned_to||(t.assigned_to=o),t}),s.then(function(){var r;return e=_.map(e,function(t){return n.usersById[t]}),h(e),r=t.$broadcast("object:updated")}),s.then(null,function(){return r.notify("error")})},f=function(){var e;return e=_.clone(u.$modelValue,!1),t.$broadcast("assigned-user:add",e)},n.selfAssign=function(){var t,e;if(d())return e=c.getUser().get("id"),t=_.clone(u.$modelValue.assigned_users,!1),t.push(e),t=_.uniq(t),g(t,e)},n.unassign=function(t){var e,i,o;if(d())return e=t.id,o=a.instant("COMMON.ASSIGNED_USERS.TITLE_LIGHTBOX_DELETE_ASSIGNED"),i=n.usersById[e].full_name_display,r.askOnDelete(o,i).then(function(t){var r;return t.finish(),r=_.clone(u.$modelValue.assigned_users,!1),r=_.pull(r,e),l(r)})},l=function(o){var s;return s=i.save(function(t){var r;return t.assigned_users=o,r=t.assigned_to,e.call(o,r)<0&&o.length>0&&(t.assigned_to=o[0]),0===o.length&&(t.assigned_to=null),t}),s.then(function(){var e,r;return r=i.getObj(),e=_.map(r.assignedUsers,function(t){return n.usersById[t]}),h(e),t.$broadcast("object:updated")}),s.then(null,function(){return item.revert(),r.notify("error")})},h=function(t){return n.assignedUsers=t,n.isEditable=d(),n.isAssigned=p(),n.openAssignedUsers=f},n.$on("assigned-user:deleted",function(t,e){var r;return r=_.clone(u.$modelValue.assigned_users,!1),r=_.pull(r,e),r=_.uniq(r),l(r)}),n.$on("assigned-user:added",function(t,e){var r;return r=_.clone(u.$modelValue.assigned_users,!1),r.push(e),r=_.uniq(r),g(r,e)}),n.$watch(s.ngModel,function(t){var e;if(null!=t)return e=_.map(t.assigned_users,function(t){return n.usersById[t]}),e=_.filter(e,function(t){return!!t}),h(e)}),n.$on("$destroy",function(){return o.off()})},{scope:!0,templateUrl:"common/components/assigned-users.html",link:u,require:"ngModel"}},angular.module("taigaComponents").directive("tgAssignedUsers",["$rootScope","$tgConfirm","$tgRepo","$tgQueueModelTransformation","$tgTemplate","$compile","$translate","tgCurrentUserService",t])}.call(this),function(){var t;t=function(t,e,r){var n;return n=function(n,i,o){var s;return s=t(o.tgAttachmentLink)(n),i.on("click",function(t){return taiga.isImage(s.getIn(["file","name"]))?(t.preventDefault(),n.$apply(function(){return r.open($("tg-attachments-preview")),e.fileId=s.getIn(["file","id"])})):taiga.isPdf(s.getIn(["file","name"]))?(t.preventDefault(),window.open(s.getIn(["file","url"]))):void 0}),n.$on("$destroy",function(){return i.off()})},{link:n}},t.$inject=["$parse","tgAttachmentsPreviewService","lightboxService"],angular.module("taigaComponents").directive("tgAttachmentLink",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{scope:{},bindToController:{attachment:"=",onDelete:"&",onUpdate:"&",type:"="},controller:"Attachment",controllerAs:"vm",templateUrl:"components/attachment/attachment-gallery.html",link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAttachmentGallery",t)}.call(this),function(){var t;t=function(){function t(t,e){this.attachmentsService=t,this.translate=e,this.form={},this.form.description=this.attachment.getIn(["file","description"]),this.form.is_deprecated=this.attachment.get(["file","is_deprecated"]),this.title=this.translate.instant("ATTACHMENT.TITLE",{fileName:this.attachment.get("name"),date:moment(this.attachment.get("created_date")).format(this.translate.instant("ATTACHMENT.DATE"))})}return t.$inject=["tgAttachmentsService","$translate"],t.prototype.editMode=function(t){var e;return e=this.attachment.set("editable",t),this.onUpdate({attachment:e})},t.prototype["delete"]=function(){return this.onDelete({attachment:this.attachment})},t.prototype.save=function(){var t;return t=this.attachment.set("loading",!0),this.onUpdate({attachment:t}),t=this.attachment.merge({editable:!1,loading:!1}),t=t.mergeIn(["file"],{description:this.form.description,is_deprecated:!!this.form.is_deprecated}),this.onUpdate({attachment:t})},t}(),angular.module("taigaComponents").controller("Attachment",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{scope:{},bindToController:{attachment:"=",onDelete:"&",onUpdate:"&",type:"="},controller:"Attachment",controllerAs:"vm",templateUrl:"components/attachment/attachment.html",link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAttachment",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i;return i=t(n.tgAttachmentsDrop),r.on("dragover",function(t){return t.preventDefault(),!1}),r.on("drop",function(t){var r;return t.stopPropagation(),t.preventDefault(),r=t.dataTransfer||t.originalEvent&&t.originalEvent.dataTransfer,e.$apply(function(){return i(e,{files:r.files})})}),e.$on("$destroy",function(){return r.off()})},{link:e}},t.$inject=["$parse"],angular.module("taigaComponents").directive("tgAttachmentsDrop",t)}.call(this),function(){var t,e;e=this.taiga.sizeFormat,t=function(){function t(t,r,n,i,o,s,a){this.translate=t,this.confirm=r,this.config=n,this.storage=i,this.attachmentsFullService=o,this.projectService=s,this.attachmentsPreviewService=a,this.mode=this.storage.get("attachment-mode","list"),this.maxFileSize=this.config.get("maxUploadFileSize",null),this.maxFileSize&&(this.maxFileSize=e(this.maxFileSize)),this.maxFileSizeMsg=this.maxFileSize?this.translate.instant("ATTACHMENT.MAX_UPLOAD_SIZE",{maxFileSize:this.maxFileSize}):"",taiga.defineImmutableProperty(this,"attachments",function(t){return function(){return t.attachmentsFullService.attachments}}(this)),taiga.defineImmutableProperty(this,"deprecatedsCount",function(t){return function(){return t.attachmentsFullService.deprecatedsCount}}(this)),taiga.defineImmutableProperty(this,"attachmentsVisible",function(t){return function(){return t.attachmentsFullService.attachmentsVisible}}(this)),taiga.defineImmutableProperty(this,"deprecatedsVisible",function(t){return function(){return t.attachmentsFullService.deprecatedsVisible}}(this))}return t.$inject=["$translate","$tgConfirm","$tgConfig","$tgStorage","tgAttachmentsFullService","tgProjectService","tgAttachmentsPreviewService"],t.prototype.uploadingAttachments=function(){return this.attachmentsFullService.uploadingAttachments},t.prototype.addAttachment=function(t){var e;return e="list"===this.mode,this.attachmentsFullService.addAttachment(this.projectId,this.objId,this.type,t,e)},t.prototype.setMode=function(t){return this.mode=t,this.storage.set("attachment-mode",t)},t.prototype.toggleDeprecatedsVisible=function(){return this.attachmentsFullService.toggleDeprecatedsVisible()},t.prototype.addAttachments=function(t){return _.forEach(t,function(t){return function(e){return t.addAttachment(e)}}(this))},t.prototype.loadAttachments=function(){return this.attachmentsFullService.loadAttachments(this.type,this.objId,this.projectId)},t.prototype.deleteAttachment=function(t){var e,r;return this.attachmentsPreviewService.fileId=null,r=this.translate.instant("ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT"),e=this.translate.instant("ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT",{fileName:t.getIn(["file","name"])}),this.confirm.askOnDelete(r,e).then(function(r){return function(n){var i,o;return i=function(){return e=r.translate.instant("ATTACHMENT.ERROR_DELETE_ATTACHMENT",{errorMessage:e}),r.confirm.notify("error",null,e),n.finish(!1)},o=function(){return n.finish()},r.attachmentsFullService.deleteAttachment(t,r.type).then(o,i)}}(this))},t.prototype.reorderAttachment=function(t,e){return this.attachmentsFullService.reorderAttachment(this.type,t,e)},t.prototype.updateAttachment=function(t){return this.attachmentsFullService.updateAttachment(t,this.type)},t.prototype._isEditable=function(){return!!this.projectService.project&&this.projectService.hasPermission(this.editPermission)},t.prototype.showAttachments=function(){return this._isEditable()||this.attachmentsFullService.attachments.size},t}(),angular.module("taigaComponents").controller("AttachmentsFull",t)}.call(this),function(){var t,e;e=this.taiga.bindOnce,t=function(){var t;return t=function(t,r,n,i){return e(t,"vm.objId",function(t){return i.loadAttachments()})},{scope:{},bindToController:{type:"@",objId:"=",projectId:"=",editPermission:"@"},controller:"AttachmentsFull",controllerAs:"vm",templateUrl:"components/attachments-full/attachments-full.html",link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAttachmentsFull",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t,e){this.attachmentsService=t,this.rootScope=e,this._attachments=Immutable.List(),this._deprecatedsCount=0,this._attachmentsVisible=Immutable.List(),this._deprecatedsVisible=!1,this.uploadingAttachments=[],taiga.defineImmutableProperty(this,"attachments",function(t){return function(){return t._attachments}}(this)),taiga.defineImmutableProperty(this,"deprecatedsCount",function(t){return function(){return t._deprecatedsCount}}(this)),taiga.defineImmutableProperty(this,"attachmentsVisible",function(t){return function(){return t._attachmentsVisible}}(this)),taiga.defineImmutableProperty(this,"deprecatedsVisible",function(t){return function(){return t._deprecatedsVisible}}(this))}return e(r,t),r.$inject=["tgAttachmentsService","$rootScope"],r.prototype.toggleDeprecatedsVisible=function(){return this._deprecatedsVisible=!this._deprecatedsVisible,this.regenerate()},r.prototype.regenerate=function(){return this._deprecatedsCount=this._attachments.count(function(t){return t.getIn(["file","is_deprecated"])}),this._deprecatedsVisible?this._attachmentsVisible=this._attachments:this._attachmentsVisible=this._attachments.filter(function(t){return!t.getIn(["file","is_deprecated"])})},r.prototype.addAttachment=function(t,e,r,n,i,o){return null==i&&(i=!0),null==o&&(o=!1),new Promise(function(s){return function(a,c){var u;return s.attachmentsService.validate(n)?(s.uploadingAttachments.push(n),u=s.attachmentsService.upload(n,e,t,r,o),u.then(function(t){var e;return s.uploadingAttachments=s.uploadingAttachments.filter(function(e){return e.name!==t.get("name")}),e=Immutable.Map(),e=e.merge({file:t,editable:i,loading:!1,from_comment:o}),s._attachments=s._attachments.push(e),s.regenerate(),s.rootScope.$broadcast("attachment:create"),a(e)})):c(new Error(n))}}(this))},r.prototype.loadAttachments=function(t,e,r){return this.attachmentsService.list(t,e,r).then(function(t){return function(e){return t._attachments=e.map(function(t){var e;return e=Immutable.Map(),e.merge({loading:!1,editable:!1,file:t})}),t.regenerate()}}(this))},r.prototype.deleteAttachment=function(t,e){var r;return r=function(e){return function(){return e._attachments=e._attachments.filter(function(e){return e!==t}),e.regenerate()}}(this),this.attachmentsService["delete"](e,t.getIn(["file","id"])).then(r)},r.prototype.reorderAttachment=function(t,e,r){var n,i,o;if(i=this.attachments.findIndex(function(t){return t===e}),i!==r)return n=this.attachments.remove(i),n=n.splice(r,0,e),n=n.map(function(t,e){return t.setIn(["file","order"],e+1)}),o=[],n.forEach(function(e){return function(r){var n;return n={order:r.getIn(["file","order"])},o.push(e.attachmentsService.patch(r.getIn(["file","id"]),t,n))}}(this)),Promise.all(o).then(function(t){return function(){return t._attachments=n,t.regenerate()}}(this))},r.prototype.updateAttachment=function(t,e){var r,n,i;return r=this._attachments.findIndex(function(e){return e.getIn(["file","id"])===t.getIn(["file","id"])}),n=this._attachments.get(r),i=taiga.patch(n.get("file"),t.get("file")),t.get("loading")?(this._attachments=this._attachments.set(r,t),this.regenerate()):this.attachmentsService.patch(t.getIn(["file","id"]),e,i).then(function(e){return function(){return e._attachments=e._attachments.set(r,t),e.regenerate()}}(this))},r}(taiga.Service),angular.module("taigaComponents").service("tgAttachmentsFullService",t)}.call(this),function(){var t;t=function(){function t(t){this.attachmentsPreviewService=t,taiga.defineImmutableProperty(this,"current",function(t){return function(){return t.attachmentsPreviewService.fileId?t.getCurrent():null}}(this))}return t.$inject=["tgAttachmentsPreviewService"],t.prototype.hasPagination=function(){var t;return t=this.attachments.filter(function(t){return function(t){return taiga.isImage(t.getIn(["file","name"]))}}(this)),t.size>1},t.prototype.getCurrent=function(){var t,e;return t=this.attachments.find(function(t){return function(e){return t.attachmentsPreviewService.fileId===e.getIn(["file","id"])}}(this)),e=t.get("file")},t.prototype.getIndex=function(){return this.attachments.findIndex(function(t){return function(e){return t.attachmentsPreviewService.fileId===e.getIn(["file","id"])}}(this))},t.prototype.next=function(){var t,e;return t=this.getIndex(),e=this.attachments.slice(t+1).find(function(t){return taiga.isImage(t.getIn(["file","name"]))}),e||(e=this.attachments.find(function(t){return taiga.isImage(t.getIn(["file","name"]))})),this.attachmentsPreviewService.fileId=e.getIn(["file","id"])},t.prototype.previous=function(){var t,e;return t=this.getIndex(),e=this.attachments.slice(0,t).findLast(function(t){return taiga.isImage(t.getIn(["file","name"]))}),e||(e=this.attachments.findLast(function(t){return taiga.isImage(t.getIn(["file","name"]))})),this.attachmentsPreviewService.fileId=e.getIn(["file","id"])},t}(),angular.module("taigaComponents").controller("AttachmentsPreview",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(t,r,n,i){return $(document.body).on("keydown.image-preview",function(r){return e.fileId&&(39===r.keyCode?i.next():37===r.keyCode&&i.previous()),t.$digest()}),t.$on("$destroy",function(){return $(document.body).off(".image-preview")})},{scope:{},controller:"AttachmentsPreview",templateUrl:"components/attachments-preview/attachments-preview.html",link:r,controllerAs:"vm",bindToController:{attachments:"="}}},angular.module("taigaComponents").directive("tgAttachmentsPreview",["lightboxService","tgAttachmentsPreviewService",t])}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(){}return e(r,t),r.$inject=[],r}(taiga.Service),angular.module("taigaComponents").service("tgAttachmentsPreviewService",t)}.call(this),function(){var t;t=function(){function t(t){this.attachmentsService=t}return t.$inject=["tgAttachmentsService"],t.prototype.addAttachment=function(t){var e;if(e=Immutable.fromJS({file:t,name:t.name,size:t.size}),this.attachmentsService.validate(t)&&(this.attachments=this.attachments.push(e), +this.onAdd))return this.onAdd({attachment:e})},t.prototype.addAttachments=function(t){return _.forEach(t,this.addAttachment.bind(this))},t.prototype.deleteAttachment=function(t){if(this.attachments=this.attachments.filter(function(e){return e!==t}),this.onDelete)return this.onDelete({attachment:t})},t}(),angular.module("taigaComponents").controller("AttachmentsSimple",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{scope:{},bindToController:{attachments:"=",onAdd:"&",onDelete:"&"},controller:"AttachmentsSimple",controllerAs:"vm",templateUrl:"components/attachments-simple/attachments-simple.html",link:t}},t.$inject=[],angular.module("taigaComponents").directive("tgAttachmentsSimple",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i,o,s;return i=t(n.tgAttachmentsSortable),o=dragula([r[0]],{copySortSource:!1,copy:!1,mirrorContainer:r[0],moves:function(t){return $(t).is("div[tg-bind-scope]")}}),o.on("dragend",function(t){var r,n;return t=$(t),r=t.scope().attachment,n=t.index(),e.$apply(function(){return i(e,{attachment:r,index:n})})}),s=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&o.dragging}}),e.$on("$destroy",function(){return r.off(),o.destroy()})},{link:e}},t.$inject=["$parse"],angular.module("taigaComponents").directive("tgAttachmentsSortable",t)}.call(this),function(){var t;t=function(t){return{link:function(e,r){return t(function(){return r[0].select()})}}},t.$inject=["$timeout"],angular.module("taigaComponents").directive("tgAutoSelect",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i;return i=n.tgAvatarBig?"avatarBig":"avatar",e.$watch(i,function(e){var n;return n=t.getAvatar(e,i),r.attr("src",n.url),r.attr("title",""+n.username),r.attr("alt",""+n.username),r.css("background",n.bg||"")})},{link:e,scope:{avatar:"=tgAvatar",avatarBig:"=tgAvatarBig"}}},t.$inject=["tgAvatarService"],angular.module("taigaComponents").directive("tgAvatar",t),angular.module("taigaComponents").directive("tgAvatarBig",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(t,e,r,n,i){var o,s;return o=function(i,o,s){var a;return i.$watch("epics",function(t){return a(t)}),i.$on("related-epics:changed",function(t,e){return r.userstories.getByRef(e.project,e.ref,{}).then(function(t){return i.item.epics=t.epics,a(t.epics)})}),i.removeEpicRelationship=function(r){var o,s;return s=t.instant("LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.TITLE"),o=t.instant("LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.MESSAGE",{epicSubject:r.get("subject")}),e.ask(s,null,o).then(function(t){var o,s,a,c;return a=function(){return t.finish(),i.$broadcast("related-epics:changed",i.item)},s=function(){return t.finish(!1),e.notify("error")},o=r.get("id"),c=i.item.id,n.epics.deleteRelatedUserstory(o,c).then(a,s)})},a=function(t){if(i.epicsLength=0,i.immutable_epics=[],t&&!t.isIterable)return i.epicsLength=t.length,i.immutable_epics=Immutable.fromJS(t)}},s=function(t,e){return e.format?"components/belong-to-epics/belong-to-epics-"+e.format+".html":"components/belong-to-epics/belong-to-epics-pill.html"},{link:o,scope:{epics:"=",item:"="},templateUrl:s}},e.directive("tgBelongToEpics",["$translate","$tgConfirm","$tgResources","tgResources","lightboxService",t])}.call(this),function(){var t;t=function(t,e,r,n,i){return{restrict:"A",compile:function(o,s){var a,c;return a=e(s.tgBindCode),c=e(s.tgBindCode,function(t){return(t||"").toString()}),r.$$addBindingClass(o),function(e,o,s){return r.$$addBindingInfo(o,s.tgBindCode),e.$watch(c,function(){var r;return r=n.getHTML(a(e)),o.html(t.getTrustedHtml(r)||""),i.addHightlighter(o)})}}}},angular.module("taigaComponents").directive("tgBindCode",["$sce","$parse","$compile","tgWysiwygService","tgWysiwygCodeHightlighterService",t])}.call(this),function(){var t;t=function(){return{scope:{levels:"=",value:"="},templateUrl:"components/board-zoom/board-zoom.html"}},angular.module("taigaComponents").directive("tgBoardZoom",[t])}.call(this),function(){var t;t=function(){function t(){this.index=0}return t.$inject=[],t.prototype.next=function(){if(this.index++,this.index>=this.images.size)return this.index=0},t.prototype.previous=function(){if(this.index--,this.index<0)return this.index=this.images.size-1},t}(),angular.module("taigaComponents").controller("CardSlideshow",t)}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(){return{controller:"CardSlideshow",templateUrl:"components/card-slideshow/card-slideshow.html",bindToController:!0,controllerAs:"vm",scope:{images:"="}}},e.directive("tgCardSlideshow",t)}.call(this),function(){var t;t=function(){function t(){}return t.$inject=[],t.prototype.visible=function(t){return this.zoom.indexOf(t)!==-1},t.prototype.hasTasks=function(){var t;return t=this.item.getIn(["model","tasks"]),t&&t.size>0},t.prototype.hasMultipleAssignedUsers=function(){var t;return t=this.item.getIn(["model","assigned_users"]),t&&t.size>1},t.prototype.hasVisibleAttachments=function(){return this.item.get("images").size>0},t.prototype.toggleFold=function(){return this.onToggleFold({id:this.item.get("id")})},t.prototype.getClosedTasks=function(){return this.item.getIn(["model","tasks"]).filter(function(t){return t.get("is_closed")})},t.prototype.closedTasksPercent=function(){return 100*this.getClosedTasks().size/this.item.getIn(["model","tasks"]).size},t.prototype.getModifyPermisionKey=function(){return"task"===this.type?"modify_task":"modify_us"},t.prototype.getDeletePermisionKey=function(){return"task"===this.type?"delete_task":"delete_us"},t.prototype._setVisibility=function(){var t;return t={related:this.visible("related_tasks"),slides:this.visible("attachments")},_.isUndefined(this.item.get("foldStatusChanged"))||(this.visible("related_tasks")&&this.visible("attachments")?(t.related=!this.item.get("foldStatusChanged"),t.slides=!this.item.get("foldStatusChanged")):this.visible("attachments")?(t.related=this.item.get("foldStatusChanged"),t.slides=this.item.get("foldStatusChanged")):this.visible("related_tasks")||this.visible("attachments")||(t.related=this.item.get("foldStatusChanged"),t.slides=this.item.get("foldStatusChanged"))),this.item.getIn(["model","tasks"])&&this.item.getIn(["model","tasks"]).size||(t.related=!1),this.item.get("images")&&this.item.get("images").size||(t.slides=!1),t},t.prototype.isRelatedTasksVisible=function(){var t;return t=this._setVisibility(),t.related},t.prototype.isSlideshowVisible=function(){var t;return t=this._setVisibility(),t.slides},t.prototype.getNavKey=function(){return"task"===this.type?"project-tasks-detail":"issue"===this.type?"project-issues-detail":"project-userstories-detail"},t}(),angular.module("taigaComponents").controller("Card",t)}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(){return{link:function(t){},controller:"Card",controllerAs:"vm",bindToController:!0,templateUrl:"components/card/card.html",scope:{onToggleFold:"&",onClickAssignedTo:"&",onClickEdit:"&",onClickRemove:"&",onClickDelete:"&",project:"=",item:"=",zoom:"=",zoomLevel:"=",archived:"=",type:"@"}}},e.directive("tgCard",t)}.call(this),function(){var t;t=function(){return{link:function(t,e){return e.on("click",function(t){var r;if(!$(t.target).is("input"))return t.preventDefault(),r=e.find('input[type="file"]'),r.val(""),r.trigger("click")}),t.$on("$destroy",function(){return e.off()})}}},angular.module("taigaComponents").directive("tgClickInputFile",[t])}.call(this),function(){var t,e,r;r=this.taiga,e=r.getDefaulColorList,t=function(){function t(t){this.projectService=t,this.colorList=e(),this.checkIsColorRequired(),this.displayColorList=!1}return t.$inject=["tgProjectService"],t.prototype.userCanChangeColor=function(){return!this.requiredPerm||this.projectService.hasPermission(this.requiredPerm)},t.prototype.checkIsColorRequired=function(){if(!this.isColorRequired)return this.colorList=_.dropRight(this.colorList)},t.prototype.setColor=function(t){return this.color=t,this.customColor=t},t.prototype.resetColor=function(){if(this.isColorRequired&&!this.color)return this.color=this.initColor},t.prototype.toggleColorList=function(){return this.displayColorList=!this.displayColorList,this.customColor=this.color,this.resetColor()},t.prototype.onSelectDropdownColor=function(t){return this.color=t,this.onSelectColor({color:t}),this.toggleColorList()},t.prototype.onKeyDown=function(t){if(13===t.which)return!this.customColor&&this.isColorRequired||this.onSelectDropdownColor(this.customColor),t.preventDefault()},t}(),angular.module("taigaComponents").controller("ColorSelectorCtrl",t)}.call(this),function(){var t,e;e=this.taiga.bindOnce,t=function(t){var e;return e=function(e,r,n,i){var o,s,a;return o=null,s=function(){return t.cancel(o),o=null},a=function(){if(!o)return o=t(function(){return i.displayColorList=!1,i.resetColor()},400)},r.find(".color-selector").mouseenter(s).mouseleave(a),r.find(".color-selector-dropdown").mouseenter(s).mouseleave(a),e.$watch("vm.initColor",function(t){return i.setColor(t)})},{link:e,templateUrl:"components/color-selector/color-selector.html",controller:"ColorSelectorCtrl",controllerAs:"vm",bindToController:{isColorRequired:"=",onSelectColor:"&",initColor:"=",requiredPerm:"@"},scope:{}}},t.$inject=["$timeout"],angular.module("taigaComponents").directive("tgColorSelector",t)}.call(this),function(){var t,e;e=angular.module("taigaUserStories"),t=function(){function t(t,e,r,n,i){this.rootScope=t,this.confirm=e,this.modelTransform=r,this.navUrls=n,this.window=i,this.editMode=!1,this.loadingSubject=!1,this.originalSubject=this.item.subject,this.objType={tasks:"task",issues:"issue",userstories:"us"}[this.item._name]}return t.$inject=["$rootScope","$tgConfirm","$tgQueueModelTransformation","$tgNavUrls","$window"],t.prototype._checkNav=function(){var t,e,r;if(null!=(null!=(e=this.item.neighbors.previous)?e.ref:void 0)&&(t={project:this.project.slug,ref:this.item.neighbors.previous.ref},this.previousUrl=this.navUrls.resolve("project-"+this.item._name+"-detail",t)),null!=(null!=(r=this.item.neighbors.next)?r.ref:void 0))return t={project:this.project.slug,ref:this.item.neighbors.next.ref},this.nextUrl=this.navUrls.resolve("project-"+this.item._name+"-detail",t)},t.prototype._checkPermissions=function(){return this.permissions={canEdit:_.includes(this.project.my_permissions,this.requiredPerm)}},t.prototype.cancelEdit=function(){return this.editMode=!1,this.item.subject=this.originalSubject},t.prototype.editSubject=function(t){var e;if(e=this.window.getSelection(),"Range"!==e.type&&(t&&(this.editMode=!0),!t))return this.editMode=!1},t.prototype.onKeyDown=function(t){if(13===t.which&&this.saveSubject(),27===t.which)return this.item.subject=this.originalSubject,this.editSubject(!1)},t.prototype.saveSubject=function(){var t,e,r,n;return r=function(t){return function(){return t.loadingSubject=!1,t.rootScope.$broadcast("object:updated"),t.confirm.notify("success"),t.originalSubject=t.item.subject}}(this),e=function(t){return function(){return t.loadingSubject=!1,t.confirm.notify("error")}}(this),this.editMode=!1,this.loadingSubject=!0,t=this.item,n=this.modelTransform.save(function(t){return t}),n.then(r,e)},t.prototype.relateToEpic=function(t){return this.rootScope.$broadcast("relate-to-epic:add",t)},t}(),e.controller("StoryHeaderCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaUserStories"),t=function(){var t;return this.$inject=[],t=function(t,e,r,n){return n._checkPermissions(),n._checkNav()},{link:t,controller:"StoryHeaderCtrl",bindToController:!0,scope:{item:"=",project:"=",requiredPerm:"@"},controllerAs:"vm",templateUrl:"components/detail/header/detail-header.html"}},e.directive("tgDetailHeader",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.translate=t,this.tgLightboxFactory=e,this.projectService=r,this.rootscope=n,this.defaultConfig=[{color:"#9dce0a",name:"normal due",days_to_due:null,by_default:!0},{color:"#ff9900",name:"due soon",days_to_due:14,by_default:!1},{color:"#ff8a84",name:"past due",days_to_due:0,by_default:!1}]}return t.$inject=["$translate","tgLightboxFactory","tgProjectService","$rootScope"],t.prototype.visible=function(){return"button"===this.format||null!=this.dueDate},t.prototype.disabled=function(){return this.isClosed},t.prototype.color=function(){var t;return(null!=(t=this.getStatus())?t.color:void 0)||null},t.prototype.title=function(){return this.dueDate?this._formatTitle():"button"===this.format?this.translate.instant("COMMON.DUE_DATE.TITLE_ACTION_SET_DUE_DATE"):""},t.prototype.getStatus=function(t){var e;return this.dueDate?(e=this.projectService.project.toJS(),t=e[this.objType+"_duedates"],t||(t=this.defaultConfig),this._getAppearance(t)):null},t.prototype._getDefaultAppearance=function(t){var e;return e=null,_.map(t,function(t){if(t.by_default===!0)return e=t}),e},t.prototype._getAppearance=function(t){var e,r,n;return e=this._getDefaultAppearance(t),t=_.sortBy(t,function(t){return-t.days_to_due}),r=moment(this.dueDate),n=moment(),_.map(t,function(t){var i;if(null!==t.days_to_due)return i=moment(r-moment.duration(t.days_to_due,"days")),n>=i?e=t:void 0}),e},t.prototype._formatTitle=function(){var t,e,r;return e=this.translate.instant("COMMON.PICKERDATE.FORMAT"),t=moment(this.dueDate).format(e),r=this.getStatus(),(null!=r?r.name:void 0)?t+" ("+r.name+")":t},t.prototype.setDueDate=function(){if(!this.disabled())return this.tgLightboxFactory.create("tg-lb-set-due-date",{"class":"lightbox lightbox-set-due-date"},{object:this.item,notAutoSave:this.notAutoSave})},t}(),angular.module("taigaComponents").controller("DueDateCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(t,e){return{link:function(t,r,n,i){var o;return t.open=!1,o=e.get(),_.merge(o,{field:r.find(".due-date-button")[0],container:r.find(".date-picker-container")[0],bound:!0,onClose:function(){return t.open=!1,t.$apply()},onSelect:function(){return i.dueDate=this.getMoment().format("YYYY-MM-DD")}}),r.picker=new Pikaday(o),r.on("click",".due-date-button",function(e){return t.open?void r.picker.hide():(!r.picker.getDate()&&i.dueDate&&r.picker.setDate(moment(i.dueDate).format("YYYY-MM-DD")),r.picker.show(),t.open=!0,t.$apply())}),r.on("click",".date-picker-clean",function(e){return e.preventDefault(),e.stopPropagation(),i.dueDate=null,r.picker.setDate(i.dueDate),t.open=!1,r.picker.hide(),t.$apply()}),t.$on("status:changed",function(t,e){return i.isClosed=i.item.is_closed})},controller:"DueDateCtrl",controllerAs:"vm",bindToController:!0,templateUrl:"components/due-date/due-date-popover.html",scope:{dueDate:"=",isClosed:"=",item:"=",objType:"@",format:"@",notAutoSave:"="}}},e.directive("tgDueDatePopover",["$translate","tgDatePickerConfigService",t])}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(t,e){var r;return r=function(t,e){return e.format?"components/due-date/due-date-"+e.format+".html":"components/due-date/due-date-icon.html"},{link:function(r,n,i,o){var s;if(s=function(){var i,s;return s=t.instant("COMMON.PICKERDATE.FORMAT"),o.dueDate&&(o.dueDate=moment(o.dueDate,s)),n.on("click",".date-picker-popover-trigger",function(t){if(!o.disabled())return t.preventDefault(),t.stopPropagation(),n.find(".date-picker-popover").popover().open()}),n.on("click",".date-picker-clean",function(t){return t.preventDefault(),t.stopPropagation(),o.dueDate=null,r.$apply(),n.find(".date-picker-popover").popover().close()}),i=e.get(),_.merge(i,{field:n.find("input.due-date")[0],container:n.find(".date-picker-container")[0],bound:!1,onSelect:function(){return o.dueDate=this.getMoment().format("YYYY-MM-DD"),n.find(".date-picker-popover").popover().close(),r.$apply()}}),n.picker=new Pikaday(i)},"button-popover"===i.format)return s()},controller:"DueDateCtrl",controllerAs:"vm",bindToController:!0,templateUrl:r,scope:{dueDate:"=",isClosed:"=",item:"=",objType:"@",format:"@",notAutoSave:"="}}},e.directive("tgDueDate",["$translate","tgDatePickerConfigService",t])}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n,i){var o;return o=t(n.tgFileChange),r.on("change",function(t){return e.$apply(function(){return o(e,{files:t.currentTarget.files})})}),e.$on("$destroy",function(){return r.off()})},{restrict:"A",link:e}},t.$inject=["$parse"],angular.module("taigaComponents").directive("tgFileChange",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=taiga.generateHash,t=function(t){function n(t,e,r){this.q=t,this.urls=e,this.http=r}return r(n,t),n.$inject=["$q","$tgUrls","$tgHttp"],n.prototype.storeFilters=function(t,r,n){var i,o,s,a,c;return i=this.q.defer(),c=this.urls.resolve("user-storage"),s=t+":"+n,o=e([t,s]),_.isEmpty(r)?(a=this.http["delete"](c+"/"+o,{key:o,value:r}),a.then(function(){return i.resolve()}),a.then(null,function(){return i.reject()})):(a=this.http.put(c+"/"+o,{key:o,value:r}),a.then(function(t){return i.resolve()}),a.then(null,function(t){return function(e){var n;return n=t.http.post(""+c,{key:o,value:r}),n.then(function(){return i.resolve()}),n.then(null,function(){return i.reject()})}}(this))),i.promise},n.prototype.getFilters=function(t,r){var n,i,o,s,a;return n=this.q.defer(),a=this.urls.resolve("user-storage"),o=t+":"+r,i=e([t,o]),s=this.http.get(a+"/"+i),s.then(function(t){return n.resolve(t.data.value)}),s.then(null,function(t){return n.resolve({})}),n.promise},n}(taiga.Service),angular.module("taigaComponents").service("tgFilterRemoteStorageService",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){var i;return i=$("tg-filter"),t.$watch(r.ngIf,function(t){var r,n;if(t)return i.find(".filter-list").hide(),n=i.height(),r=0,i.children().each(function(){return r+=$(this).outerHeight(!0)}),$(e.context.nextSibling).css({display:"block"})})},{priority:900,link:t}},angular.module("taigaComponents").directive("tgFilterSlideDown",[t])}.call(this),function(){var t;t=function(){function t(t){this.translate=t,this.opened=null,this.filterModeOptions=["include","exclude"],this.filterModeLabels={include:this.translate.instant("COMMON.FILTERS.ADVANCED_FILTERS.INCLUDE"),exclude:this.translate.instant("COMMON.FILTERS.ADVANCED_FILTERS.EXCLUDE")},this.filterMode="include",this.showAdvancedFilter=!1,this.customFilterForm=!1,this.customFilterName=""}return t.$inject=["$translate"],t.prototype.toggleAdvancedFilter=function(){return this.showAdvancedFilter=!this.showAdvancedFilter},t.prototype.toggleFilterCategory=function(t){return this.opened===t?this.opened=null:this.opened=t},t.prototype.isOpen=function(t){return this.opened===t},t.prototype.saveCustomFilter=function(){return this.onSaveCustomFilter({name:this.customFilterName}),this.customFilterForm=!1,this.opened="custom-filter",this.customFilterName=""},t.prototype.changeQ=function(){return this.onChangeQ({q:this.q})},t.prototype.unselectFilter=function(t){return this.onRemoveFilter({filter:t})},t.prototype.unselectFilter=function(t){return this.onRemoveFilter({filter:t})},t.prototype.selectFilter=function(t,e){return e={category:t,filter:e,mode:this.filterMode},this.onAddFilter({filter:e})},t.prototype.removeCustomFilter=function(t){return this.onRemoveCustomFilter({filter:t})},t.prototype.selectCustomFilter=function(t){return this.onSelectCustomFilter({filter:t})},t.prototype.isFilterSelected=function(t,e){return!!_.find(this.selectedFilters,function(r){return e.id===r.id&&t.dataType===r.dataType})},t}(),angular.module("taigaComponents").controller("Filter",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){var i;return i=t.$watch("vm.defaultQ",function(e){return e&&!t.vm.filtersForm.$dirty?(t.vm.q=e,i()):t.vm.filtersForm.$dirty?i():void 0}),r.$observe("open",function(r){return r=t.$eval(r),r?e.addClass("open"):e.removeClass("open")})},{scope:{onChangeQ:"&",onAddFilter:"&",onSelectCustomFilter:"&",onRemoveFilter:"&",onRemoveCustomFilter:"&",onSaveCustomFilter:"&",customFilters:"<",defaultQ:"=q",filters:"<",customFilters:"<",selectedFilters:"<"},bindToController:!0,controller:"Filter",controllerAs:"vm",templateUrl:"components/filter/filter.html",link:t}},angular.module("taigaComponents").directive("tgFilter",[t])}.call(this),function(){var t,e;e=this.taiga,t=function(t,e,r,n,i){var o;return o=function(n,o,s,a){var c,u,l;return l=null,u=introJs(),u.oncomplete(function(){return $("html,body").scrollTop(0)}),u.onexit(function(){return e.disableJoyRide()}),c=function(t,e){if(e[t.joyride])return u.setOptions({exitOnEsc:!1,exitOnOverlayClick:!1,showStepNumbers:!1,nextLabel:i.instant("JOYRIDE.NAV.NEXT")+" →",prevLabel:"← "+i.instant("JOYRIDE.NAV.BACK"),skipLabel:i.instant("JOYRIDE.NAV.SKIP"),doneLabel:i.instant("JOYRIDE.NAV.DONE"),disableInteraction:!0}),u.setOption("steps",r.get(t.joyride)),u.start()},t.$on("$routeChangeSuccess",function(r,n){return n.joyride&&e.isAuthenticated()?(u.oncomplete(function(){return e.disableJoyRide(n.joyride)}),n.loader?l=t.$on("loader:end",function(){return e.loadJoyRideConfig().then(function(t){return c(n,t)}),l()}):e.loadJoyRideConfig().then(function(t){return c(n,t)})):(u.exit(),void(l&&l()))})},{scope:{},link:o}},t.$inject=["$rootScope","tgCurrentUserService","tgJoyRideService","$location","$translate"],angular.module("taigaComponents").directive("tgJoyRide",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t,e){this.translate=t,this.checkPermissionsService=e}return e(r,t),r.$inject=["$translate","tgCheckPermissionsService"],r.prototype.getConfig=function(){return{dashboard:function(t){return function(){var e;return e=[{element:".project-list > section:not(.ng-hide)",position:"left",joyride:{title:t.translate.instant("JOYRIDE.DASHBOARD.STEP1.TITLE"),text:t.translate.instant("JOYRIDE.DASHBOARD.STEP1.TEXT")}},{element:".working-on-container",position:"right",joyride:{title:t.translate.instant("JOYRIDE.DASHBOARD.STEP2.TITLE"),text:t.translate.instant("JOYRIDE.DASHBOARD.STEP2.TEXT")}},{element:".watching-container",position:"right",joyride:{title:t.translate.instant("JOYRIDE.DASHBOARD.STEP3.TITLE"),text:[t.translate.instant("JOYRIDE.DASHBOARD.STEP3.TEXT1"),t.translate.instant("JOYRIDE.DASHBOARD.STEP3.TEXT2")]}}],$(".project-list .create-project-button").is(":hidden")||e.push({element:".project-list .create-project-button",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.DASHBOARD.STEP4.TITLE"),text:[t.translate.instant("JOYRIDE.DASHBOARD.STEP4.TEXT1"),t.translate.instant("JOYRIDE.DASHBOARD.STEP4.TEXT2")]}}),e}}(this),backlog:function(t){return function(){var e;return e=[{element:".summary",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.BACKLOG.STEP1.TITLE"),text:[t.translate.instant("JOYRIDE.BACKLOG.STEP1.TEXT1"),t.translate.instant("JOYRIDE.BACKLOG.STEP1.TEXT2")]}},{element:".backlog-table-empty",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.BACKLOG.STEP2.TITLE"),text:t.translate.instant("JOYRIDE.BACKLOG.STEP2.TEXT")}},{element:".sprints",position:"left",joyride:{title:t.translate.instant("JOYRIDE.BACKLOG.STEP3.TITLE"),text:t.translate.instant("JOYRIDE.BACKLOG.STEP3.TEXT")}}],t.checkPermissionsService.check("add_us")&&e.push({element:".new-us",position:"rigth",joyride:{title:t.translate.instant("JOYRIDE.BACKLOG.STEP4.TITLE"),text:t.translate.instant("JOYRIDE.BACKLOG.STEP4.TEXT")}}),e}}(this),kanban:function(t){return function(){var e;return e=[{element:".kanban-table-inner",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.KANBAN.STEP1.TITLE"),text:t.translate.instant("JOYRIDE.KANBAN.STEP1.TEXT")}},{element:".card-placeholder",position:"right",joyride:{title:t.translate.instant("JOYRIDE.KANBAN.STEP2.TITLE"),text:t.translate.instant("JOYRIDE.KANBAN.STEP2.TEXT")}}],t.checkPermissionsService.check("add_us")&&e.push({element:".add-action",position:"bottom",joyride:{title:t.translate.instant("JOYRIDE.KANBAN.STEP3.TITLE"),text:[t.translate.instant("JOYRIDE.KANBAN.STEP3.TEXT1"),t.translate.instant("JOYRIDE.KANBAN.STEP3.TEXT2")]}}),e}}(this)}},r.prototype.get=function(t){var e,r;return r=this.getConfig(),e=r[t].call(this),_.map(e,function(t){var e;return e="",t.joyride.title&&(e+="

    "+t.joyride.title+"

    "),_.isArray(t.joyride.text)?_.forEach(t.joyride.text,function(t){return e+="

    "+t+"

    "}):e+="

    "+t.joyride.text+"

    ",t.intro=e,t})},r}(taiga.Service),angular.module("taigaComponents").service("tgJoyRideService",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i,o){var s,a,c;return r.zoomIndex=t.get("kanban_zoom")||2,r.levels=5,c=[["ref"],["subject"],["owner","tags","extra_info","unfold"],["attachments"],["related_tasks","empty_extra_info"]],s=function(e){return null==e&&(e=0),t.get("kanban_zoom")!==e&&t.set("kanban_zoom",e),_.reduce(c,function(t,r,n){return n<=e&&(t=t.concat(r)),t})},r.$watch("zoomIndex",function(t){var e;return e=s(t),r.onZoomChange({zoomLevel:t,zoom:e})}),a=r.$watch(function(){return e.project},function(t){if(t)return t.get("my_permissions").indexOf("view_tasks")===-1&&(r.levels=4),a()})},{scope:{onZoomChange:"&"},template:'',link:r}},angular.module("taigaComponents").directive("tgKanbanBoardZoom",["$tgStorage","tgProjectService",t])}.call(this),function(){var t;t=function(t){var e;return e=function(t,e,r){},{restrict:"AE",scope:{},controllerAs:"vm",controller:function(){return this.close=function(){return t.open=!1},Object.defineProperties(this,{open:{get:function(){return t.open}},title:{get:function(){return t.title}},desc:{get:function(){return t.desc}}})},link:e,templateUrl:"components/live-announcement/live-announcement.html"}},t.$inject=["tgLiveAnnouncementService"],angular.module("taigaComponents").directive("tgLiveAnnouncement",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(){this.open=!1,this.title="",this.desc=""}return e(r,t),r.prototype.show=function(t,e){return this.open=!0,this.title=t,this.desc=e},r}(taiga.Service),angular.module("taigaComponents").service("tgLiveAnnouncementService",t)}.call(this),function(){var t,e;e=angular.module("taigaComponents"),t=function(){function t(t,e,r,n,i,o,s){this.rootScope=t,this.scope=e,this.rs=r,this.projectService=n,this.translate=i,this.lightboxService=o,this.confirm=s,this.projectId=this.projectService.project.get("id"),this.loading=!1,this.someSelected=!1,this.selectedSprintId=null,this.typesSelected={uss:!1,tasks:!1,issues:!1},this.itemsToMove={},this._loadSprints(),this.scope.$watch("vm.openItems",function(t){return function(e){if(e)return t._init(e)}}(this))}return t.$inject=["$rootScope","$scope","$tgResources","tgProjectService","$translate","lightboxService","$tgConfirm"],t.prototype._init=function(t){var e,r,n;return this.hasManyItemTypes=_.size(this.openItems)>1,this.ussCount=parseInt(null!=(e=t.uss)?e.length:void 0),this.updateSelected("uss",this.ussCount>0),this.tasksCount=parseInt(null!=(r=t.tasks)?r.length:void 0),this.updateSelected("tasks",this.tasksCount>0),this.issuesCount=parseInt(null!=(n=t.issues)?n.length:void 0),this.updateSelected("issues",this.issuesCount>0)},t.prototype._loadSprints=function(){return this.rs.sprints.list(this.projectId,{closed:!1}).then(function(t){return function(e){return t.sprints=_.filter(e.milestones,function(e){return e.id!==t.sprint.id})}}(this))},t.prototype.updateSelected=function(t,e){return this.typesSelected[t]=e,this.someSelected=_.some(this.typesSelected),e===!0?this.itemsToMove[t]=this.openItems[t]:this.itemsToMove[t]?delete this.itemsToMove[t]:void 0},t.prototype.submit=function(){var t;return t={},_.map(this.openItems,function(e){return function(r,n){if(!e.itemsToMove[n])return t[n]=!0}}(this)),this.loading=!0,this.moveItems().then(function(e){return function(){if(e.rootScope.$broadcast("taskboard:items:move",e.typesSelected),e.lightboxService.closeAll(),e.loading=!1,_.size(t)>0)return e.displayWarning(t)}}(this))},t.prototype.moveItems=function(){var t;return t=[],this.itemsToMove.uss&&t.push(this.rs.sprints.moveUserStoriesMilestone(this.sprint.id,this.projectId,this.selectedSprintId,this.itemsToMove.uss)),this.itemsToMove.tasks&&t.push(this.rs.sprints.moveTasksMilestone(this.sprint.id,this.projectId,this.selectedSprintId,this.itemsToMove.tasks)),this.itemsToMove.issues&&t.push(this.rs.sprints.moveIssuesMilestone(this.sprint.id,this.projectId,this.selectedSprintId,this.itemsToMove.issues)),Promise.all(t)},t.prototype.displayWarning=function(t){var e,r,n,i,o;return e=this.translate.instant("COMMON.I_GET_IT"),1===_.size(t)&&t.issues===!0?(i=this.translate.instant("TASKBOARD.MOVE_TO_SPRINT.WARNING_ISSUES_NOT_MOVED_TITLE"),r=this.translate.instant("TASKBOARD.MOVE_TO_SPRINT.WARNING_ISSUES_NOT_MOVED")):(o=0,_.map(this.itemsToMove,function(t,e){return o+=t.length}),i=this.translate.instant("TASKBOARD.MOVE_TO_SPRINT.WARNING_SPRINT_STILL_OPEN_TITLE",{total:o},"messageformat"),r=this.translate.instant("TASKBOARD.MOVE_TO_SPRINT.WARNING_SPRINT_STILL_OPEN",{sprintName:null!=(n=this.sprint)?n.name:void 0})),this.confirm.success(i,r,null,e)},t}(),e.controller("MoveToSprintLbCtrl",t)}.call(this),function(){var t,e;t=angular.module("taigaComponents"),e=function(t){var e;return e=function(e,r,n,i){return t.open(r)},{scope:{},bindToController:{openItems:"=",sprint:"="},templateUrl:"components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.html",controller:"MoveToSprintLbCtrl",controllerAs:"vm",link:e}},e.$inject=["lightboxService"],t.directive("tgLbMoveToSprint",e)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,e,r){this.scope=t,this.lightboxFactory=e,this.projectService=r,this.permissions=this.projectService.project.get("my_permissions"),this.hasOpenItems=!1,this.disabled=!1,this.openItems={uss:[],tasks:[],issues:[]},this.scope.$watch("vm.uss",function(t){return function(){return t.getOpenUss()}}(this)),this.scope.$watch("vm.unnasignedTasks",function(t){return function(){return t.getOpenStorylessTasks()}}(this)),this.scope.$watch("vm.issues",function(t){return function(){return t.getOpenIssues()}}(this))}return t.$inject=["$scope","tgLightboxFactory","tgProjectService"],t.prototype.checkOpenItems=function(){return _.some(Object.keys(this.openItems),function(t){return function(e){return t.openItems[e].length>0}}(this))},t.prototype.openLightbox=function(){var t;if(this.disabled===!1&&this.hasOpenItems)return t={},_.map(this.openItems,function(e,r){if(e.length)return t[r]=e}),this.lightboxFactory.create("tg-lb-move-to-sprint",{"class":"lightbox lightbox-move-to-sprint",sprint:"sprint","open-items":"openItems"},{sprint:this.sprint,openItems:t})},t.prototype.getOpenUss=function(){if(this.uss&&this.permissions.indexOf("modify_us")!==-1)return this.openItems.uss=[],this.uss.map(function(t){return function(e){if(e.is_closed===!1)return t.openItems.uss.push({us_id:e.id,order:e.sprint_order})}}(this)),this.hasOpenItems=this.checkOpenItems()},t.prototype.getOpenStorylessTasks=function(){if(this.unnasignedTasks&&this.permissions.indexOf("modify_task")!==-1)return this.openItems.tasks=[],this.unnasignedTasks.map(function(t){return function(e){return e.map(function(e){if(e.get("model").get("is_closed")===!1)return t.openItems.tasks.push({task_id:e.get("model").get("id"),order:e.get("model").get("taskboard_order")})})}}(this)),this.hasOpenItems=this.checkOpenItems()},t.prototype.getOpenIssues=function(){if(this.issues&&this.permissions.indexOf("modify_issue")!==-1)return this.openItems.issues=[], +this.issues.map(function(t){return function(e){if(e.get("status").get("is_closed")===!1)return t.openItems.issues.push({issue_id:e.get("id")})}}(this)),this.hasOpenItems=this.checkOpenItems()},t}(),angular.module("taigaComponents").controller("MoveToSprintCtrl",t)}.call(this),function(){var t,e;t=angular.module("taigaComponents"),e=function(t){return{controller:"MoveToSprintCtrl",controllerAs:"vm",bindToController:!0,templateUrl:"components/move-to-sprint/move-to-sprint.html",scope:{sprint:"=",uss:"=",unnasignedTasks:"=",issues:"=",disabled:"="}}},e.$inject=["tgTaskboardTasks"],t.directive("tgMoveToSprint",[e])}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){return e.$watch("project",function(e){var n,i;if(e=Immutable.fromJS(e))return i=e.get("logo_big_url"),i?(r.attr("src",i),r.css("background","")):(n=t.getDefaultProjectLogo(e.get("slug"),e.get("id")),r.attr("src",n.src),r.css("background",n.color))})},{link:e,scope:{project:"=tgProjectLogoBigSrc"}}},t.$inject=["tgProjectLogoService"],angular.module("taigaComponents").directive("tgProjectLogoBigSrc",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){return e.$watch("project",function(e){var n,i;if(e=Immutable.fromJS(e))return i=e.get("logo_small_url"),i?(r.attr("src",i),r.css("background","")):(n=t.getDefaultProjectLogo(e.get("slug"),e.get("id")),r.attr("src",n.src),r.css("background",n.color))})},{link:e,scope:{project:"=tgProjectLogoSmallSrc"}}},t.$inject=["tgProjectLogoService"],angular.module("taigaComponents").directive("tgProjectLogoSmallSrc",t)}.call(this),function(){var t;t=function(){function t(t,e){this.projectService=t,this.lightboxFactory=e,this.project=null,this.menu=Immutable.Map()}return t.$inject=["tgProjectService","tgLightboxFactory"],t.prototype.show=function(){var t;return this.project=this.projectService.project,this.sprints=null!=(t=this.project.get("milestones"))?t.toJS():void 0,this.active=this._getActiveSection(),this._setVideoConference(),this._setMenuPermissions()},t.prototype.hide=function(){return this.project=null,this.menu={}},t.prototype.search=function(){return this.lightboxFactory.create("tg-search-box",{"class":"lightbox lightbox-search"})},t.prototype._setVideoConference=function(){var t;if(t=this._videoConferenceUrl())return this.project=this.project.set("videoconferenceUrl",t)},t.prototype._setMenuPermissions=function(){if(this.menu=Immutable.Map({epics:!1,backlog:!1,kanban:!1,issues:!1,wiki:!1}),this.project.get("is_epics_activated")&&this.project.get("my_permissions").indexOf("view_epics")!==-1&&(this.menu=this.menu.set("epics",!0)),this.project.get("is_backlog_activated")&&this.project.get("my_permissions").indexOf("view_us")!==-1&&(this.menu=this.menu.set("backlog",!0)),this.project.get("is_kanban_activated")&&this.project.get("my_permissions").indexOf("view_us")!==-1&&(this.menu=this.menu.set("kanban",!0)),this.project.get("is_issues_activated")&&this.project.get("my_permissions").indexOf("view_issues")!==-1&&(this.menu=this.menu.set("issues",!0)),this.project.get("is_wiki_activated")&&this.project.get("my_permissions").indexOf("view_wiki_pages")!==-1)return this.menu=this.menu.set("wiki",!0)},t.prototype._getActiveSection=function(){var t,e,r,n,i;return n=this.projectService.section,i=this.projectService.sectionsBreadcrumb,t=i.lastIndexOf("backlog"),e=i.lastIndexOf("kanban"),t===-1&&e===-1||(r=e===-1||t>e?"backlog":"kanban"),"backlog-kanban"===n&&("backlog"===r||"kanban"===r?n=r:this.project.get("is_backlog_activated")&&!this.project.get("is_kanban_activated")?n="backlog":!this.project.get("is_backlog_activated")&&this.project.get("is_kanban_activated")&&(n="kanban")),n},t.prototype._videoConferenceUrl=function(){var t,e;if("appear-in"===this.project.get("videoconferences"))t="https://appear.in/";else if("talky"===this.project.get("videoconferences"))t="https://talky.io/";else{if("jitsi"!==this.project.get("videoconferences"))return"custom"===this.project.get("videoconferences")?this.project.get("videoconferences_extra_data"):"";t="https://meet.jit.si/"}return e=this.project.get("videoconferences_extra_data")?this.project.get("slug")+"-"+taiga.slugify(this.project.get("videoconferences_extra_data")):this.project.get("slug"),"jitsi"===this.project.get("videoconferences")&&(e=e.replace(/-/g,"")),t+e},t}(),angular.module("taigaComponents").controller("ProjectMenu",t)}.call(this),function(){var t,e;e=this.taiga,t=function(t,e){var r;return r=function(e,r,n,i){var o;return o=function(){return t.project?i.show():i.hide()},e.$watch(function(){return t.project},o),e.vm.fixed=!1,$(window).on("scroll",function(){var t;return t=$(window).scrollTop(),t>100&&e.vm.fixed===!1?(e.vm.fixed=!0,e.$digest()):t<100&&e.vm.fixed===!0?(e.vm.fixed=!1,e.$digest()):void 0})},{scope:{},controller:"ProjectMenu",controllerAs:"vm",templateUrl:"components/project-menu/project-menu.html",link:r}},t.$inject=["tgProjectService","tgLightboxFactory"],angular.module("taigaComponents").directive("tgProjectMenu",t)}.call(this),function(){var t,e,r,n;e=angular.module("taigaComponents"),r=this.taiga.normalizeString,t=this.taiga.groupBy,n=function(e){var n;return n=function(n,i,o,s){var a,c,u,l,p,d,f;return n.templateUrl="components/search-list/search-list-"+n.itemType+"-choice.html",n.currentSelected=null,c=!1,a=[],l={},"issue"===n.itemType&&(n.milestonesById=t(n.project.milestones,function(t){return t.id})),n.filterClosed&&(n.showClosed=!1,"sprint"===n.itemType&&(n.textShowClosed=e.instant("BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS"),n.textHideClosed=e.instant("BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS"))),i.on("click",".choice",function(t){var e,r,i;return e=parseInt($(t.currentTarget).data("choice-id")),i=(null!=(r=o.ngModel)?r.id:void 0)!==e?l[e]:null,s.$setViewValue(i),n.currentSelected=i,n.$apply()}),u=function(t,e){return _.includes(p(e),p(t))},p=function(t){return"string"!=typeof t&&(t=t.toString()),r(t.toUpperCase())},f=function(){return n.currentSelected=null,s.$setViewValue(null)},d=function(){return f(),n.searchText="",a=angular.copy(n.items),l=t(a,function(t){return t.id})},n.isVisible=function(t){var e;return!(n.filterClosed&&!n.showClosed)||("sprint"!==n.itemType||!t.closed&&!t.is_closed||((null!=(e=n.currentSelected)?e.id:void 0)===t.id&&f(),!1))},n.toggleShowClosed=function(t){return n.showClosed=!n.showClosed},n.filterItems=function(t){if(n.filtering=!0,n.items=_.filter(a,function(e){var r;return r=e.getAttrs(),Array.isArray(n.filterBy)?_.some(n.filterBy,function(e){return u(t,r[e])}):u(t,r[n.filterBy])}),!_.find(n.items,n.currentSelected))return f()},n.$watch("items",function(t){if(!n.filtering&&t)return d()})},{link:n,templateUrl:"components/search-list/search-list.html",require:"ngModel",scope:{label:"@",placeholder:"@",project:"=",filterBy:"=",items:"=",itemType:"@",filterClosed:"=",itemDisabled:"="}}},e.directive("tgSearchList",["$translate",n])}.call(this),function(){var t,e;e=angular.module("taigaCommon"),t=function(){var t,e,r,n;return r=function(t){var e,r,n;return t.addClass("selected"),n=t.position().top+t.outerHeight(),e=t.parent().outerHeight(),n>e?(r=n-e,t.parent().scrollTop(t.parent().scrollTop()+r)):t.position().top<0?t.parent().scrollTop(t.parent().scrollTop()+t.position().top):void 0},t=function(t,e,n){var i,o,s;if(i=t.find(".selected"),40===e){if(!i.length)return r(t.find("li:first"));if(o=i.next("li"),o.length)return i.removeClass("selected"),r(o)}else if(38===e){if(!i.length)return r(t.find("li:last"));if(s=i.prev("li"),s.length)return i.removeClass("selected"),r(s)}},n=function(){return $(document).off(".tags-keyboard-navigation")},e=function(e,r){return n(),$(r).parent().on("keydown.tags-keyboard-navigation",function(n){return function(n){var i;if(i=n.keyCode?n.keyCode:n.which,40===i||38===i)return n.preventDefault(),t(r,i,e)}}(this)),e.$on("$destroy",n)},{link:e,templateUrl:"components/tags/tag-dropdown/tag-dropdown.html",scope:{onSelectTag:"&",colorArray:"=",tag:"="}}},e.directive("tgTagsDropdown",t)}.call(this),function(){var t,e,r;r=this.taiga.trim,e=angular.module("taigaCommon"),t=function(){function t(t){this.tagLineService=t,this.disableColorSelection=!1,this.newTag={name:"",color:null},this.colorArray=[],this.addTag=!1}return t.$inject=["tgTagLineService"],t.prototype.checkPermissions=function(){return this.tagLineService.checkPermissions(this.project.my_permissions,this.permissions)},t.prototype._createColorsArray=function(t){return this.colorArray=this.tagLineService.createColorsArray(t)},t.prototype.displayTagInput=function(){return this.addTag=!0},t.prototype.addNewTag=function(t,e){if(this.newTag.name="",this.newTag.color=null,t.length)return this.disableColorSelection?t.length?this.onAddTag({name:t,color:e}):void 0:(this.project.tags_colors[t]&&(e=this.project.tags_colors[t]),this.onAddTag({name:t,color:e}))},t.prototype.selectColor=function(t){return this.newTag.color=t},t}(),e.controller("TagLineCommonCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaCommon"),t=function(){var t;return t=function(t,e,r,n){var i;return _.isUndefined(r.disableColorSelection)||(n.disableColorSelection=!0),i=t.$watch("vm.project",function(t){if(t&&Object.keys(t).length)return i(),n.disableColorSelection?void 0:n.colorArray=n._createColorsArray(n.project.tags_colors)}),e.on("keydown",".tag-input",function(r){var i;return 27===r.keyCode?(n.addTag=!1,n.newTag.name="",n.newTag.color="",r.stopPropagation()):13===r.keyCode&&(r.preventDefault(),e.find(".tags-dropdown .selected").length?(i=$(".tags-dropdown .selected .tags-dropdown-name").text(),n.addNewTag(i,null)):n.addNewTag(n.newTag.name,n.newTag.color)),t.$apply()})},{link:t,scope:{permissions:"@",loadingAddTag:"=",loadingRemoveTag:"=",tags:"=",project:"=",onAddTag:"&",onDeleteTag:"&"},templateUrl:"components/tags/tag-line-common/tag-line-common.html",controller:"TagLineCommonCtrl",controllerAs:"vm",bindToController:!0}},e.directive("tgTagLineCommon",t)}.call(this),function(){var t,e,r;r=this.taiga.trim,e=angular.module("taigaCommon"),t=function(){function t(t,e,r){this.rootScope=t,this.confirm=e,this.modelTransform=r,this.loadingAddTag=!1}return t.$inject=["$rootScope","$tgConfirm","$tgQueueModelTransformation"],t.prototype.onDeleteTag=function(t){var e,n,i,o;return this.loadingRemoveTag=t[0],n=function(t){return function(e){return t.rootScope.$broadcast("object:updated"),t.loadingRemoveTag=!1,e}}(this),e=function(t){return function(){return t.confirm.notify("error"),t.loadingRemoveTag=!1}}(this),i=r(t[0].toLowerCase()),o=this.modelTransform.save(function(t){var e;return e=_.clone(t.tags),_.remove(e,function(t){return t[0]===i}),t.tags=e,t}),o.then(n,e)},t.prototype.onAddTag=function(t,e){var n,i,o;return this.loadingAddTag=!0,i=function(t){return function(e){return t.rootScope.$broadcast("object:updated"),t.rootScope.$broadcast("tags:updated"),t.addTag=!1,t.loadingAddTag=!1,e}}(this),n=function(t){return function(){return t.loadingAddTag=!1,t.confirm.notify("error")}}(this),o=this.modelTransform.save(function(n){return function(n){var i,o;return o=r(t.toLowerCase()),i=_.clone(n.tags),i.push([t,e]),n.tags=i,n}}(this)),o.then(i,n)},t}(),e.controller("TagLineCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaCommon"),t=function(){return{scope:{item:"=",permissions:"@",project:"="},templateUrl:"components/tags/tag-line-detail/tag-line-detail.html",controller:"TagLineCtrl",controllerAs:"vm",bindToController:!0}},e.directive("tgTagLine",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=angular.module("taigaCommon"),t=function(t){function e(){}return r(e,t),e.$inject=[],e.prototype.checkPermissions=function(t,e){return _.includes(t,e)},e.prototype.createColorsArray=function(t){return _.map(t,function(t,e){return[e,t]})},e}(taiga.Service),e.service("tgTagLineService",t)}.call(this),function(){var t,e;e=angular.module("taigaCommon"),t=function(){return{templateUrl:"components/tags/tag/tag.html",scope:{tag:"<",loadingRemoveTag:"<",onDeleteTag:"&",hasPermissions:"@"}}},e.directive("tgTag",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n,i){var o,s;return e.zoomIndex=t.get("taskboard_zoom")||2,e.levels=4,s=[["ref"],["subject"],["owner","tags","extra_info","unfold"],["attachments","empty_extra_info"],["related_tasks"]],o=function(e){return null==e&&(e=0),t.get("taskboard_zoom")!==e&&t.set("taskboard_zoom",e),_.reduce(s,function(t,r,n){return n<=e&&(t=t.concat(r)),t})},e.$watch("zoomIndex",function(t){var r;return r=o(t),e.onZoomChange({zoomLevel:t,zoom:r})})},{scope:{onZoomChange:"&"},template:'',link:e}},angular.module("taigaComponents").directive("tgTaskboardZoom",["$tgStorage",t])}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i){var o,s,a;if(e.hasPermission("modify_task"))return o=t(i.tgTasksSortable),s=dragula([n[0]],{copySortSource:!1,copy:!1,mirrorContainer:n[0],moves:function(t){return $(t).is("div.single-related-task.js-related-task")}}),s.on("dragend",function(t){var e,n,i;return e=$(t),i=e.scope().task,n=e.index(),r.$apply(function(){return o(r,{task:i,newIndex:n})})}),a=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&s.dragging}}),r.$on("$destroy",function(){return n.off(),s.destroy()})},{link:r}},t.$inject=["$parse","tgProjectService"],angular.module("taigaComponents").directive("tgTasksSortable",t)}.call(this),function(){var t;t=function(t,e,r,n,i){var o;return o=function(t,e,r){return t.privacyPolicyUrl=n.get("privacyPolicyUrl"),t.termsOfServiceUrl=n.get("termsOfServiceUrl"),t.GDPRUrl=n.get("GDPRUrl")},{restrict:"AE",scope:{},controllerAs:"vm",controller:function(){return this.close=function(){var n,o,s;return t.open=!1,o=r.getUser(),void 0===o.read_new_terms&&(s=o.getAttrs(),s.read_new_terms=!1,o=i.make_model("users",s)),o.read_new_terms=!0,n=function(t){return r.setUser(t)},e.save(o).then(n)},Object.defineProperties(this,{open:{get:function(){return t.open}}})},link:o,templateUrl:"components/terms-announcement/terms-announcement.html"}},t.$inject=["tgTermsAnnouncementService","$tgRepo","$tgAuth","$tgConfig","$tgModel"],angular.module("taigaComponents").directive("tgTermsAnnouncement",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(){this.open=!1}return e(r,t),r.prototype.show=function(){return this.open=!0},r}(taiga.Service),angular.module("taigaComponents").service("tgTermsAnnouncementService",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){return e.privacyPolicyUrl=t.get("privacyPolicyUrl"),e.termsOfServiceUrl=t.get("termsOfServiceUrl"),e.target=!1,e.privacyPolicyUrl&&e.termsOfServiceUrl||(e.target=!0),r.on("change","input[name='accepted_terms']",function(t){var r;return r=angular.element(t.currentTarget),e.target=r.is(":checked"),e.$apply()})},{restrict:"AE",link:e,scope:{target:"="},templateUrl:"components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html"}},angular.module("taigaComponents").directive("tgTermsOfServiceAndPrivacyPolicyNotice",["$tgConfig",t])}.call(this),function(){var t,e,r;e=this.taiga.timeout,t=angular.module("taigaComponents"),r=function(t,r){var n,i,o;return o=[{contentType:"icon",icon:"icon-project",message:"PROJECTS_ORDER"},{contentType:"icon",icon:"icon-upvote",message:"VOTING"},{contentType:"icon",icon:"icon-attach",message:"ISSUES_TO_SPRINT"},{contentType:"icon",icon:"icon-clock",message:"DUE_DATE"},{contentType:"icon",icon:"icon-iocaine",message:"IOCAIN"},{contentType:"icon",icon:"icon-blocked-project",message:"BLOCKED"},{contentType:"icon",icon:"icon-promote",message:"PROMOTE"},{contentType:"icon",icon:"icon-bulk",message:"BULK"},{contentType:"range",message:"ZOOM"},{contentType:"icon",icon:"icon-settings",message:"CUSTOM_FIELDS"},{contentType:"arrows",message:"SLIDE_ARROWS"}],i=function(t){return Math.floor(Math.random()*t)+1},n=function(r,n,s){var a,c;return r.tipLoaded=!1,c=null,t.onStart(function(){return c=e(1e3,function(){return a()})}),t.onEnd(function(){return clearTimeout(c),r.tipLoaded=!1}),a=function(){var t;return r.tipLoaded=!0,t=o[i(o.length-1)],r.tip={contentType:t.contentType,message:"TIPS.TIP_"+t.message,icon:t.icon,color:"tip-color-"+i(5)}}},{link:n,scope:!0,templateUrl:"components/tips/tip.html"}},t.directive("tgTips",["tgLoader","$translate",r])}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i){return r.vm={},r.vm.tribeHost=t.config.tribeHost,r.vm.url=e.protocol()+"://"+e.host(),"http"===e.protocol()&&80!==e.port()?r.vm.url=r.vm.url+":"+e.port():"https"===e.protocol()&&443!==e.port()?r.vm.url=r.vm.url+":"+e.port():void 0},{scope:{usId:"=",projectSlug:"="},controllerAs:"vm",templateUrl:"components/tribe-button/tribe-button.html",link:r}},t.$inject=["$tgConfig","$tgLocation"],angular.module("taigaComponents").directive("tgTribeButton",t)}.call(this),function(){var t;t=function(t){var e,r;return r=function(e,r,n){return e.vm={},e.vm.tribeHost=t.config.tribeHost,e.vm.show=function(){return e.vm.open=!0},e.vm.hide=function(t){return e.vm.open=!1}},e={templateUrl:"components/tribe-button/tribe-linked.html",scope:{gigTitle:"=",gigId:"="},link:r}},t.$inject=["$tgConfig"],angular.module("taigaComponents").directive("tgTribeLinked",t)}.call(this),function(){var t;t=function(){function t(t){this.currentUserService=t,this.user=this.currentUserService.getUser(),this.isMouseOver=!1,this.loading=!1}return t.$inject=["tgCurrentUserService"],t.prototype.showTextWhenMouseIsOver=function(){return this.isMouseOver=!0},t.prototype.showTextWhenMouseIsLeave=function(){return this.isMouseOver=!1},t.prototype.toggleVote=function(){var t;return this.loading=!0,t=this.item.is_voter?this._downvote():this._upvote(),t["finally"](function(t){return function(){return t.loading=!1}}(this)),t},t.prototype._upvote=function(){return this.onUpvote().then(function(t){return function(){return t.showTextWhenMouseIsLeave()}}(this))},t.prototype._downvote=function(){return this.onDownvote()},t}(),angular.module("taigaComponents").controller("VoteButton",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"VoteButton",bindToController:{item:"=",onUpvote:"=",onDownvote:"="},controllerAs:"vm",templateUrl:"components/vote-button/vote-button.html"}},angular.module("taigaComponents").directive("tgVoteButton",t)}.call(this),function(){var t;t=function(){function t(t,e){this.currentUserService=t,this.rootScope=e,this.user=this.currentUserService.getUser(),this.isMouseOver=!1,this.loading=!1}return t.$inject=["tgCurrentUserService","$rootScope"],t.prototype.showTextWhenMouseIsOver=function(){return this.isMouseOver=!0},t.prototype.showTextWhenMouseIsLeave=function(){return this.isMouseOver=!1},t.prototype.openWatchers=function(){return this.rootScope.$broadcast("watcher:add",this.item)},t.prototype.getPerms=function(){var t,e;return this.item?(t=this.item._name,e={userstories:"modify_us",issues:"modify_issue",tasks:"modify_task",epics:"modify_epic"},e[t]):""},t.prototype.toggleWatch=function(){var t;return this.loading=!0,t=this.item.is_watcher?this._unwatch():this._watch(),t["finally"](function(t){return function(){return t.loading=!1}}(this)),t},t.prototype._watch=function(){return this.onWatch().then(function(t){return function(){return t.showTextWhenMouseIsLeave()}}(this))},t.prototype._unwatch=function(){return this.onUnwatch()},t}(),angular.module("taigaComponents").controller("WatchButton",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"WatchButton",bindToController:{item:"=",onWatch:"=",onUnwatch:"="},controllerAs:"vm",templateUrl:function(t,e){return"components/watch-button/watch-button-"+e.environment+".html"}}},angular.module("taigaComponents").directive("tgWatchButton",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i,o;return i={epics:"epic",userstories:"us",issues:"issue",tasks:"task"},o=function(r,n){return t.addAttachment(e.vm.projectId,e.vm.comment.comment.id,i[e.vm.comment.comment._name],r,!0,!0).then(function(t){return n(t.getIn(["file","name"]),t.getIn(["file","url"]))})},e.uploadFiles=function(t,e){var r,n,i,s;for(s=[],n=0,i=t.length;n\n \n \n"}},angular.module("taigaComponents").directive("tgCommentEditWysiwyg",["tgAttachmentsFullService",t])}.call(this),function(){var t;t=function(t,e,r){var n;return n=function(n,i,o){var s,a;return n.editableDescription=!1,n.saveComment=function(r,i){var o;return n.content="",n.vm.type.comment=r,o=t.save(function(t){}),o.then(function(){return n.vm.onAddComment&&n.vm.onAddComment(),e.$broadcast("object:updated")}),o["finally"](i)},s={epics:"epic",userstories:"us",issues:"issue",tasks:"task"},a=function(t,e){return r.addAttachment(n.vm.projectId,n.vm.type.id,s[n.vm.type._name],t,!0,!0).then(function(t){return e(t.getIn(["file","name"]),t.getIn(["file","url"]))})},n.onChange=function(t){return n.vm.type.comment=t},n.uploadFiles=function(t,e){var r,n,i,o;for(o=[],n=0,i=t.length;n\n \n \n"}},angular.module("taigaComponents").directive("tgCommentWysiwyg",["$tgQueueModelTransformation","$rootScope","tgAttachmentsFullService",t])}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n){var i,o;return i={userstories:"us",issues:"issue",tasks:"task"},o=function(r,n){return t.addAttachment(e.vm.projectId,e.vm.comment.comment.id,i[e.vm.comment.comment._name],r).then(function(t){return n(t.getIn(["file","name"]),t.getIn(["file","url"]))})},e.uploadFiles=function(t,e){var r,n,i,s;for(s=[],n=0,i=t.length;n\n \n \n"}},angular.module("taigaComponents").directive("tgCustomFieldEditWysiwyg",["tgAttachmentsFullService",t])}.call(this),function(){var t;t=function(t,e,r,n,i){var o;return o=function(i,o,s){var a;return i.editableDescription=!1,i.saveDescription=function(n,i){var o;return o=t.save(function(t){return t.description=n,t}),o.then(function(){return r.notify("success"),e.$broadcast("object:updated")}),o.then(null,function(){return r.notify("error")}),o["finally"](i)},a=function(t,e){return n.addAttachment(i.project.id,i.item.id,s.type,t).then(function(t){return e(t.getIn(["file","name"]),t.getIn(["file","url"]))})},i.uploadFiles=function(t,e){var r,n,i,o;for(o=[],n=0,i=t.length;n\n \n \n\n \n\n \n {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}}\n \n"}},angular.module("taigaComponents").directive("tgItemWysiwyg",["$tgQueueModelTransformation","$rootScope","$tgConfirm","tgAttachmentsFullService","$translate",t])}.call(this),function(){var t;t=function(){function t(){Prism.plugins.customClass.prefix("prism-"),Prism.plugins.customClass.map({})}return t.prototype.getLanguages=function(){return new Promise(function(t){return function(e,r){return t.languages?e(t.languages):t.loadPromise?t.loadPromise.then(function(){return e(t.languages)}):t.loadPromise=$.getJSON("/"+window._version+"/prism/prism-languages.json").then(function(r){return t.loadPromise=null,t.languages=_.map(r,function(t){return t.url="/"+window._version+"/prism/"+t.file,t}),e(t.languages)})}}(this))},t.prototype.getLanguageInClassList=function(t){var e;return e=_.find(this.languages,function(e){return!!_.find(t,function(t){return"language-"+e.name===t})}),e?e.name:null},t.prototype.loadLanguage=function(t){return new Promise(function(e){return Prism.languages[t]?e():ljs.load("/"+window._version+"/prism/prism-"+t+".min.js",e)})},t.prototype.replaceCodeBrToNl=function(t){return $(t).find("br").replaceWith("\n")},t.prototype.hightlightCode=function(t){var e;if(this.replaceCodeBrToNl(t),e=this.getLanguageInClassList(t.classList))return this.loadLanguage(e).then(function(){return Prism.highlightElement(t)})},t.prototype.addHightlighter=function(t){var e;return e=$(t).find("code"),e.each(function(t){return function(e,r){return t.hightlightCode(r)}}(this))},t}(),angular.module("taigaComponents").service("tgWysiwygCodeHightlighterService",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n,i){return e.$watch("visible",function(n){return n&&!r.hasClass("open")?(e.open=!0,t.open(r,null,e.onClose),e.$applyAsync(function(){var t;if(t=r[0].querySelector("textarea"))return t.select()})):!n&&r.hasClass("open")?(e.open=!1,t.close(r)):void 0})},{scope:{languages:"<",codeLanguage:"<",code:"<",visible:"<",onClose:"&",onSave:"&"},link:e,templateUrl:"components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.html"}},angular.module("taigaComponents").directive("tgWysiwygCodeLightbox",["lightboxService",t])}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.projectService=t,this.wysiwygService=e,this.navurls=r,this.rs=n,this.cancelablePromise=null,this.projectSlug=this.projectService.project.get("slug")}return t.$inject=["tgProjectService","tgWysiwygService","$tgNavUrls","$tgResources"],t.prototype.search=function(t){return new Promise(function(e){return function(r){return"#".indexOf(t[0])!==-1?e.searchItem(t.replace("#","")).then(r):"@".indexOf(t[0])!==-1?e.searchUser(t.replace("@",""),r):":".indexOf(t[0])!==-1?e.searchEmoji(t.replace(":",""),r):void 0}}(this))},t.prototype.searchItem=function(t){return new Promise(function(e){return function(r,n){var i;return t=taiga.slugify(t),i=function(e){return["subject","ref"].some(function(r){return taiga.slugify(e[r]).indexOf(t)>=0})},e.rs.search["do"](e.projectService.project.get("id"),t).then(function(t){var n,o,s,a,c,u,l;if(c=[],t.count&&t.count!==t.wikipages.length){for(l={issues:"project-issues-detail",userstories:"project-userstories-detail",tasks:"project-tasks-detail"},a=["issues","tasks","userstories"],n=0,s=a.length;n=0||e[r].indexOf(t)>=0})}),r=r.slice(0,10).map(function(t){return function(e){return e.url=t.navurls.resolve("user-profile",{project:t.projectSlug,username:e.username}),e}}(this)),e(r)},t.prototype.searchEmoji=function(t,e){var r;return r=this.wysiwygService.searchEmojiByName(t),r=r.slice(0,10),e(r)},t}(),angular.module("taigaComponents").service("tgWysiwygMentionService",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.bindOnce,t=function(t,e,n,i,o,s,a,c,u,l){var p,d,f,h,g,m,v,y,b,S,j,k;return k=function(){if(window.getSelection){if(window.getSelection().empty)return window.getSelection().empty()}else{if(window.getSelection().removeAllRanges)return window.getSelection().removeAllRanges();if(document.selection)return document.selection.empty()}},m=function(t){return $(t.endContainer).parentsUntil(".editor","code")},v=function(t){return!!m(t).length},j=function(t,e){var r,n,i;return r=$(t).is("code")?t:$(t).closest("code")[0],i=r.parentNode,n=document.createElement("p"),n.innerText=r.innerText,i.parentNode.replaceChild(n,i),e.checkContentChanged(e.elements[0])},h=function(t,e){var r,n,i,o;return i=document.createElement("pre"),r=document.createElement("code"),t.startContainer.parentNode.nextSibling||$("
    ").insertAfter(t.startContainer.parentNode),o=t.endContainer.parentNode.nextSibling,n=t.extractContents(),r.appendChild(n),i.appendChild(r),o.parentNode.insertBefore(i,o),S(e),e.checkContentChanged(e.elements[0])},S=function(e){var r,n,i,o,s,a,c,u,l,p;if(e){for(l=e.elements[0].children,r=0,i=l.length;rRTL",this.button.title="RTL",this.on(this.button,"click",this.handleClick.bind(this))},getButton:function(){return this.button},handleClick:function(t){var e;return e=MediumEditor.selection.getSelectionRange(document),"right"===e.commonAncestorContainer.parentNode.style.textAlign?document.execCommand("justifyLeft",!1):document.execCommand("justifyRight",!1)}}),g=function(t){return'\n \n'},d=MediumEditor.extensions.button.extend({name:"code",init:function(){var t;return t=_.find(this.base.options.toolbar.buttons,function(t){return"code"===t.name}),this.button=this.document.createElement("button"),this.button.classList.add("medium-editor-action"),this.button.innerHTML=t.contentDefault||"Code",this.button.title="Code",this.on(this.button,"click",this.handleClick.bind(this)); +},getButton:function(){return this.button},tagNames:["code"],handleClick:function(t){var e,r;if(e=MediumEditor.selection.getSelectionRange(self.document),v(e,this.base)?j(e.endContainer,this.base):(h(e,this.base),k()),r=this.base.getExtensionByName("toolbar"))return r.hideToolbar()}}),f=MediumEditor.extensions.paste.extend({doPaste:function(t,e,r){var n;return n=MediumEditor.util.htmlEntities(e),MediumEditor.util.insertHTMLCommand(this.document,n)}}),b=MediumEditor.util.isBlockContainer,MediumEditor.util.isBlockContainer=function(t){var e;return t?(e=t.tagName?t.tagName:t.parentNode.tagName,"code"===e.toLowerCase()||b(t)):b(t)},y=function(o,h,m){var v,y,b,k,I,T,E,C,P,w,A,O,R,M,U,N,D,x,L,F,B,H;return R=null,E=h.find(".medium"),T=h.find(".markdown"),b=null,w=!!m.$attr.editonly,M=!!m.$attr.notPersist,o.required=!!m.$attr.required,o.editMode=w||!1,o.mode=n.get("editor-mode","html"),o.markdown="",o.codeEditorVisible=!1,o.codeLans=[],a.getLanguages().then(function(t){return o.codeLans=t}),D=function(t){return o.editMode=t},x=function(t){var e;if(e=i.getHTML(t),E.html(e),a.addHightlighter(R.elements[0]),o.editMode)return S(R)},o.saveSnippet=function(t,e){var r;return o.codeEditorVisible=!1,b.innerText=e,r=b.parentNode,"remove-formating"===t?(b.className="",r.className="",j(b,R)):_.trim(e).length?(t?(b.className="language-"+t,r.className="language-"+t):(b.className="",r.className=""),a.hightlightCode(b),R.checkContentChanged(R.elements[0])):(b.parentNode.parentNode.removeChild(b.parentNode),R.checkContentChanged(R.elements[0])),L(),null},o.setMode=function(t){return n.set("editor-mode",t),"markdown"===t?B():x(o.markdown),o.mode=t,R.trigger("editableBlur",{},E[0])},o.save=function(t){t&&t.preventDefault(),"html"===o.mode&&B(),x(o.markdown),o.required&&!o.markdown.length||(o.saving=!0,o.outdated=!1,o.onSave({text:o.markdown,cb:N}))},o.cancel=function(t){t&&t.preventDefault(),w||D(!1),M?y():"html"===o.mode&&x(o.content||null),o.markdown=o.content,I(),R.trigger("blur",{},E[0]),o.outdated=!1,S(R),o.onCancel()},y=function(){return o.markdown="",E.html("")},N=function(){return o.saving=!1,w||D(!1),M&&y(),I(),R.trigger("blur",{},E[0]),u.trackEvent("develop","save wysiwyg",o.mode,1)},H=function(t,e){return r.isImage(t)?R.pasteHTML("
    "):(t=$("
    ").text(t).html(),R.pasteHTML(""+t+"
    "))},A=function(){var t;return t=n.get(o.storageKey),!(!t||!t.version||t.version===o.version)},P=function(){var t;return t=n.get(o.storageKey),!!t},C=function(){var t;return t=n.get(o.storageKey),t?t.text:o.content},I=function(){return n.remove(o.storageKey)},o.cancelWithConfirmation=function(){var r,n;return o.content===o.markdown?(o.cancel(),document.activeElement.blur(),document.body.click(),null):(n=t.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_TITLE"),r=t.instant("COMMON.CONFIRM_CLOSE_EDIT_MODE_MESSAGE"),e.ask(n,null,r).then(function(t){return o.cancel(),t.finish()}))},U=function(){var t;return t=$("
    ").html(E.html()),t.find("code br").replaceWith("\n"),t.html()},B=function(){var t;return t=U(),o.markdown=i.getMarkdown(t)},O=function(t){var e;if(o.storageKey)return e={},e.version=o.version||0,e.text=t,n.set(o.storageKey,e)},v=function(){return"html"===o.mode&&B(),O(o.markdown),o.onChange({markdown:o.markdown})},L=_.throttle(v,200),k=function(t,e){var r;return null==e&&(e=!1),t.length&&(r=i.getHTML(t),E.html(r)),R=new MediumEditor(E[0],{imageDragging:!1,placeholder:{text:o.placeholder},toolbar:{buttons:[{name:"bold",contentDefault:g("editor-bold")},{name:"italic",contentDefault:g("editor-italic")},{name:"strikethrough",contentDefault:g("editor-cross-out")},{name:"anchor",contentDefault:g("editor-link")},{name:"image",contentDefault:g("editor-image")},{name:"orderedlist",contentDefault:g("editor-list-n")},{name:"unorderedlist",contentDefault:g("editor-list-o")},{name:"h1",contentDefault:g("editor-h1")},{name:"h2",contentDefault:g("editor-h2")},{name:"h3",contentDefault:g("editor-h3")},{name:"quote",contentDefault:g("editor-quote")},{name:"removeFormat",contentDefault:g("editor-no-format")},{name:"rtl",contentDefault:g("editor-rtl")},{name:"code",contentDefault:g("editor-code")}]},extensions:{paste:new f,code:new d,autolist:new AutoList,alignright:new p,mediumMention:new MentionExtension({getItems:function(t,e){return c.search(t).then(e)}})}}),o.changeMarkdown=L,R.subscribe("editableInput",function(t){return o.$applyAsync(L)}),R.subscribe("editableClick",function(t){var e;if(e=new RegExp("^(?:[a-z]+:)?//","i"),t.target.href)return e.test(t.target.getAttribute("href"))||"_blank"===t.target.getAttribute("target")?(t.stopPropagation(),window.open(t.target.href)):l.url(t.target.href)}),R.subscribe("editableDrop",function(t){return o.onUploadFile({files:t.dataTransfer.files,cb:H})}),R.subscribe("editableKeydown",function(t){var e,r;return e=t.keyCode?t.keyCode:t.which,r=$(".medium-mention"),40!==e&&38!==e||!r.length?o.editMode&&27===e?(t.stopPropagation(),o.$applyAsync(o.cancelWithConfirmation)):27===e?E.blur():void 0:(t.stopPropagation(),void t.preventDefault())}),D(e),o.$applyAsync(function(){return a.addHightlighter(R.elements[0]),S(R)})},$(E[0]).on("mousedown",function(t){return t.target.href?(t.preventDefault(),t.stopPropagation()):o.$applyAsync(function(){if(!o.editMode)return D(!0),S(R)})}),$(E[0]).on("dblclick","pre",function(t){return o.$applyAsync(function(){return o.codeEditorVisible=!0,b=t.currentTarget.querySelector("code"),o.currentCodeLanguage=a.getLanguageInClassList(b.classList),o.code=b.innerText})}),F=o.$watch("content",function(t){var e;if(!_.isUndefined(t)){if(o.outdated=A(),!R&&P()&&D(!0),(o.markdown.length||t.length)&&o.markdown===t)return;return t=C(),o.markdown=t,R&&R.destroy(),s.open()?e=s.onEnd(function(){return k(t,o.editMode),e()}):k(t,o.editMode),F()}}),o.$on("$destroy",function(){if(R)return E.length&&$(E[0]).off(),R.destroy()})},{templateUrl:"common/components/wysiwyg-toolbar.html",scope:{placeholder:"@",version:"<",storageKey:"<",content:"<",onCancel:"&",onSave:"&",onUploadFile:"&",onChange:"&"},link:y}},angular.module("taigaComponents").directive("tgWysiwyg",["$translate","$tgConfirm","$tgStorage","tgWysiwygService","animationFrame","tgLoader","tgWysiwygCodeHightlighterService","tgWysiwygMentionService","$tgAnalytics","$location",t])}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.wysiwygCodeHightlighterService=t,this.projectService=e,this.navurls=r,this.emojis=n}return t.$inject=["tgWysiwygCodeHightlighterService","tgProjectService","$tgNavUrls","$tgEmojis"],t.prototype.searchEmojiByName=function(t){return this.emojis.searchByName(t)},t.prototype.pipeLinks=function(t){return t.replace(/\[\[(.*?)\]\]/g,function(t,e,r,n){var i,o,s;return o=e.split("|"),i=o[0],s=o[1]||o[0],"["+s+"]("+i+")"})},t.prototype.replaceUrls=function(t){var e,r,n,i,o;for(e=document.createElement("html"),e.innerHTML=t,o=e.querySelectorAll("a"),r=0,n=o.length;r(.*?)
    <\/li>/g,"
  • $1
  • ")},t.prototype.getMarkdown=function(t){var e,r,n;return e={filter:["html","body","span","div"],replacement:function(t){return t}},r={filter:function(t){return function(t){return"PRE"===t.nodeName&&t.firstChild&&"CODE"===t.firstChild.nodeName}}(this),replacement:function(t){return function(e,r){var n;return n=t.wysiwygCodeHightlighterService.getLanguageInClassList(r.firstChild.classList),n||(n=""),"\n\n```"+n+"\n"+_.trim(r.firstChild.textContent)+"\n```\n\n"}}(this)},t=t.replace(/ (<\/.*>)/g,"$1"),t=this.emojis.replaceImgsByEmojiName(t),t=this.replaceUrls(t),t=this.removeTrailingListBr(t),n=toMarkdown(t,{gfm:!0,converters:[e,r]})},t.prototype.parseMentionMatches=function(t){var e,r,n,i,o,s,a;for(s="twitter",a=this.tagBuilder,r=[],o=/@[^\s]{1,50}[^.\s]/g,e=o.exec(t);null!==e;)n=e.index,i=t.charAt(n-1),e.index===o.lastIndex&&o.lastIndex++,e.forEach(function(t,e){return r.push(new Autolinker.match.Mention({tagBuilder:a,matchedText:t,offset:n,serviceName:s,mention:t.slice(1)}))}),e=o.exec(t);return r},t.prototype.autoLinkHTML=function(t){var e,r;return r=String(Autolinker.matcher.Mention.prototype.matcherRegexes.twitter),r.indexOf(".")===-1&&(r="@[^s]{1,50}[^.s]"),e=new Autolinker({mention:"twitter",hashtag:"twitter",replaceFn:function(t){return function(e){var r,n;return"mention"===e.getType()?(r=t.navurls.resolve("user-profile",{project:t.projectService.project.get("slug"),username:e.getMention()}),'@'+e.getMention()+""):"hashtag"===e.getType()?(n=t.navurls.resolve("project-detail-ref",{project:t.projectService.project.get("slug"),ref:e.getHashtag()}),'#'+e.getHashtag()+""):void 0}}(this)}),Autolinker.matcher.Mention.prototype.parseMatches=this.parseMentionMatches.bind(e),e.link(t)},t.prototype.getHTML=function(t){var e,r,n;return t&&t.length?(r={breaks:!0},t=this.emojis.replaceEmojiNameByImgs(t),t=this.pipeLinks(t),e=window.markdownit({breaks:!0}),e.use(window.markdownitLazyHeaders),n=e.render(t),n=this.searchWikiLinks(n),n=this.autoLinkHTML(n)):""},t}(),angular.module("taigaComponents").service("tgWysiwygService",t)}.call(this),function(){var t;t=function(){function t(t){this.translate=t,this.is_open=!1,this.texts={week:this.translate.instant("DISCOVER.FILTERS.WEEK"),month:this.translate.instant("DISCOVER.FILTERS.MONTH"),year:this.translate.instant("DISCOVER.FILTERS.YEAR"),all:this.translate.instant("DISCOVER.FILTERS.ALL_TIME")}}return t.$inject=["$translate"],t.prototype.currentText=function(){return this.texts[this.currentOrderBy]},t.prototype.open=function(){return this.is_open=!0},t.prototype.close=function(){return this.is_open=!1},t.prototype.orderBy=function(t){return this.currentOrderBy=t,this.is_open=!1,this.onChange({orderBy:this.currentOrderBy})},t}(),angular.module("taigaDiscover").controller("DiscoverHomeOrderBy",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r){},{controller:"DiscoverHomeOrderBy",controllerAs:"vm",bindToController:!0,templateUrl:"discover/components/discover-home-order-by/discover-home-order-by.html",scope:{currentOrderBy:"=orderBy",onChange:"&"},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgDiscoverHomeOrderBy",t)}.call(this),function(){var t;t=function(){function t(t){this.discoverProjectsService=t,taiga.defineImmutableProperty(this,"projects",function(t){return function(){return t.discoverProjectsService.projectsCount}}(this)),this.discoverProjectsService.fetchStats()}return t.$inject=["tgDiscoverProjectsService"],t.prototype.selectFilter=function(t){return this.onChange({filter:t,q:this.q})},t.prototype.submitFilter=function(){return this.onChange({filter:this.filter,q:this.q})},t}(),angular.module("taigaDiscover").controller("DiscoverSearchBar",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{controller:"DiscoverSearchBar",controllerAs:"vm",templateUrl:"discover/components/discover-search-bar/discover-search-bar.html",bindToController:!0,scope:{q:"=",filter:"=",onChange:"&"},compile:function(t,e){if(!e.q)return e.q=""},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgDiscoverSearchBar",t)}.call(this),function(){var t;t=function(){function t(){this.like_is_open=0===this.orderBy.indexOf("-total_fans"),this.activity_is_open=0===this.orderBy.indexOf("-total_activity")}return t.$inject=[],t.prototype.openLike=function(){return this.like_is_open=!0,this.activity_is_open=!1,this.setOrderBy("-total_fans_last_week")},t.prototype.openActivity=function(){return this.activity_is_open=!0,this.like_is_open=!1,this.setOrderBy("-total_activity_last_week")},t.prototype.setOrderBy=function(t){return null==t&&(t=""),t||(this.like_is_open=!1,this.activity_is_open=!1),this.onChange({orderBy:t})},t}(),angular.module("taigaDiscover").controller("DiscoverSearchListHeader",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r){},{controller:"DiscoverSearchListHeader",controllerAs:"vm",bindToController:!0,templateUrl:"discover/components/discover-search-list-header/discover-search-list-header.html",scope:{onChange:"&",orderBy:"="},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgDiscoverSearchListHeader",t)}.call(this),function(){var t;t=function(){function t(t){this.discoverProjectsService=t,taiga.defineImmutableProperty(this,"featured",function(t){return function(){return t.discoverProjectsService.featured}}(this)),this.discoverProjectsService.fetchFeatured()}return t.$inject=["tgDiscoverProjectsService"],t}(),angular.module("taigaDiscover").controller("FeaturedProjects",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r){},{controller:"FeaturedProjects",controllerAs:"vm",templateUrl:"discover/components/featured-projects/featured-projects.html",scope:{},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgFeaturedProjects",t)}.call(this),function(){var t;t=function(){return{templateUrl:"discover/components/highlighted/highlighted.html",scope:{loading:"=",highlighted:"=",orderBy:"="}}},t.$inject=[],angular.module("taigaDiscover").directive("tgHighlighted",t)}.call(this),function(){var t;t=function(){function t(t){this.discoverProjectsService=t,taiga.defineImmutableProperty(this,"highlighted",function(t){return function(){return t.discoverProjectsService.mostActive}}(this)),this.currentOrderBy="week",this.order_by=this.getOrderBy()}return t.$inject=["tgDiscoverProjectsService"],t.prototype.fetch=function(){return this.loading=!0,this.order_by=this.getOrderBy(),this.discoverProjectsService.fetchMostActive({order_by:this.order_by}).then(function(t){return function(){return t.loading=!1}}(this))},t.prototype.orderBy=function(t){return this.currentOrderBy=t,this.fetch()},t.prototype.getOrderBy=function(t){return"all"===this.currentOrderBy?"-total_activity":"-total_activity_last_"+this.currentOrderBy},t}(),angular.module("taigaDiscover").controller("MostActive",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.fetch()},{controller:"MostActive",controllerAs:"vm",templateUrl:"discover/components/most-active/most-active.html",scope:{},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgMostActive",t)}.call(this),function(){var t;t=function(){function t(t){this.discoverProjectsService=t,taiga.defineImmutableProperty(this,"highlighted",function(t){return function(){return t.discoverProjectsService.mostLiked}}(this)),this.currentOrderBy="week",this.order_by=this.getOrderBy()}return t.$inject=["tgDiscoverProjectsService"],t.prototype.fetch=function(){return this.loading=!0,this.order_by=this.getOrderBy(),this.discoverProjectsService.fetchMostLiked({order_by:this.order_by}).then(function(t){return function(){return t.loading=!1}}(this))},t.prototype.orderBy=function(t){return this.currentOrderBy=t,this.fetch()},t.prototype.getOrderBy=function(){return"all"===this.currentOrderBy?"-total_fans":"-total_fans_last_"+this.currentOrderBy},t}(),angular.module("taigaDiscover").controller("MostLiked",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.fetch()},{controller:"MostLiked",controllerAs:"vm",templateUrl:"discover/components/most-liked/most-liked.html",scope:{},link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgMostLiked",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n){var i,o;this.location=t,this.navUrls=e,this.appMetaService=r,this.translate=n,o=this.translate.instant("DISCOVER.PAGE_TITLE"),i=this.translate.instant("DISCOVER.PAGE_DESCRIPTION"),this.appMetaService.setAll(o,i)}return t.$inject=["$tgLocation","$tgNavUrls","tgAppMetaService","$translate"],t.prototype.onSubmit=function(t){var e;return e=this.navUrls.resolve("discover-search"),this.location.search("text",t).path(e)},t}(),angular.module("taigaDiscover").controller("DiscoverHome",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n,i,o,s){var a,c;this.routeParams=t,this.discoverProjectsService=e,this.route=r,this.location=n,this.analytics=i,this.appMetaService=o,this.translate=s,this.page=1,taiga.defineImmutableProperty(this,"searchResult",function(t){return function(){return t.discoverProjectsService.searchResult}}(this)),taiga.defineImmutableProperty(this,"nextSearchPage",function(t){return function(){return t.discoverProjectsService.nextSearchPage}}(this)),this.q=this.routeParams.text,this.filter=this.routeParams.filter||"all",this.orderBy=this.routeParams.order_by||"",this.loadingGlobal=!1,this.loadingList=!1,this.loadingPagination=!1,c=this.translate.instant("DISCOVER.SEARCH.PAGE_TITLE"),a=this.translate.instant("DISCOVER.SEARCH.PAGE_DESCRIPTION"),this.appMetaService.setAll(c,a),this.analytics.trackPage(this.location.url(),"Discover Search")}return t.$inject=["$routeParams","tgDiscoverProjectsService","$route","$tgLocation","$tgAnalytics","tgAppMetaService","$translate"],t.prototype.fetch=function(){return this.page=1,this.discoverProjectsService.resetSearchList(),this.search()},t.prototype.fetchByGlobalSearch=function(){if(!this.loadingGlobal)return this.loadingGlobal=!0,this.fetch().then(function(t){return function(){return t.loadingGlobal=!1}}(this))},t.prototype.fetchByOrderBy=function(){if(!this.loadingList)return this.loadingList=!0,this.fetch().then(function(t){return function(){return t.loadingList=!1}}(this))},t.prototype.showMore=function(){if(!this.loadingPagination)return this.loadingPagination=!0,this.page++,this.search().then(function(t){return function(){return t.loadingPagination=!1}}(this))},t.prototype.search=function(){var t,e;return t=this.getFilter(),e={page:this.page,q:this.q,order_by:this.orderBy},_.assign(e,t),this.discoverProjectsService.fetchSearch(e)},t.prototype.getFilter=function(){return"people"===this.filter?{is_looking_for_people:!0}:"scrum"===this.filter?{is_backlog_activated:!0}:"kanban"===this.filter?{is_kanban_activated:!0}:{}},t.prototype.onChangeFilter=function(t,e){return this.filter=t,this.q=e,this.route.updateParams({filter:this.filter,text:this.q}),this.analytics.trackPage(this.location.url(),"Discover Search"),this.fetchByGlobalSearch()},t.prototype.onChangeOrder=function(t){return this.orderBy=t,this.route.updateParams({order_by:t}),this.analytics.trackPage(this.location.url(),"Discover Search"),this.fetchByOrderBy()},t}(),angular.module("taigaDiscover").controller("DiscoverSearch",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.fetch()},{controller:"DiscoverSearch",controllerAs:"vm",link:t}},t.$inject=[],angular.module("taigaDiscover").directive("tgDiscoverSearch",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga,t=function(t){function n(t,r){this.rs=t,this.projectsService=r,this._mostLiked=Immutable.List(),this._mostActive=Immutable.List(),this._featured=Immutable.List(),this._searchResult=Immutable.List(),this._projectsCount=0,this.decorate=this.projectsService._decorate.bind(this.projectsService),e.defineImmutableProperty(this,"mostLiked",function(t){return function(){return t._mostLiked}}(this)),e.defineImmutableProperty(this,"mostActive",function(t){return function(){return t._mostActive}}(this)),e.defineImmutableProperty(this,"featured",function(t){return function(){return t._featured}}(this)),e.defineImmutableProperty(this,"searchResult",function(t){return function(){return t._searchResult}}(this)),e.defineImmutableProperty(this,"nextSearchPage",function(t){return function(){return t._nextSearchPage}}(this)),e.defineImmutableProperty(this,"projectsCount",function(t){return function(){return t._projectsCount}}(this))}var i;return r(n,t),n.$inject=["tgResources","tgProjectsService"],i={discover_mode:!0},n.prototype.fetchMostLiked=function(t){var e;return e=_.extend({},i,t),this.rs.projects.getProjects(e,!1).then(function(t){return function(e){var r,n;return r=e.data.slice(0,5),n=Immutable.fromJS(r),n=n.map(t.decorate),t._mostLiked=n}}(this))},n.prototype.fetchMostActive=function(t){var e;return e=_.extend({},i,t),this.rs.projects.getProjects(e,!1).then(function(t){return function(e){var r,n;return r=e.data.slice(0,5),n=Immutable.fromJS(r),n=n.map(t.decorate),t._mostActive=n}}(this))},n.prototype.fetchFeatured=function(){var t;return t=_.extend({},i),t.is_featured=!0,this.rs.projects.getProjects(t,!1).then(function(t){return function(e){var r,n;return r=e.data.slice(0,4),n=Immutable.fromJS(r),n=n.map(t.decorate),t._featured=n}}(this))},n.prototype.resetSearchList=function(){return this._searchResult=Immutable.List()},n.prototype.fetchStats=function(){return this.rs.stats.discover().then(function(t){return function(e){return t._projectsCount=e.getIn(["projects","total"])}}(this))},n.prototype.fetchSearch=function(t){var e;return e=_.extend({},i,t),this.rs.projects.getProjects(e).then(function(t){return function(e){var r;return t._nextSearchPage=!!e.headers("X-Pagination-Next"),r=Immutable.fromJS(e.data),r=r.map(t.decorate),t._searchResult=t._searchResult.concat(r)}}(this))},n}(e.Service),angular.module("taigaDiscover").service("tgDiscoverProjectsService",t)}.call(this),function(){var t,e,r,n;r=this.taiga,n=r.trim,e=r.getRandomDefaultColor,t=function(){function t(t,r,n,i){this.confirm=t,this.projectService=r,this.epicsService=n,this.analytics=i,this.project=this.projectService.project.toJS(),this.newEpic={color:e(),status:this.project.default_epic_status,tags:[]},this.attachments=Immutable.List(),this.loading=!1}return t.$inject=["$tgConfirm","tgProjectService","tgEpicsService","$tgAnalytics"],t.prototype.createEpic=function(){if(this.validateForm())return this.loading=!0,this.epicsService.createEpic(this.newEpic,this.attachments).then(function(t){return function(e){return t.analytics.trackEvent("epic","create","create epic",1),t.onCreateEpic(),t.loading=!1}}(this))["catch"](function(t){return function(e){if(t.loading=!1,t.setFormErrors(e.data),e.data._error_message)return t.confirm.notify("error",e.data._error_message)}}(this))},t.prototype.selectColor=function(t){return this.newEpic.color=t},t.prototype.addTag=function(t,e){if(t=n(t.toLowerCase()),!_.find(this.newEpic.tags,function(e){return e[0]===t}))return this.newEpic.tags.push([t,e])},t.prototype.deleteTag=function(t){return _.remove(this.newEpic.tags,function(e){return e[0]===t[0]})},t.prototype.addAttachment=function(t){return this.attachments.push(t)},t}(),angular.module("taigaEpics").controller("CreateEpicCtrl",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){var i;return i=e.find("form").checksley(),n.validateForm=function(t){return function(){return i.validate()}}(this),n.setFormErrors=function(t){return function(t){return i.setErrors(t)}}(this)},{link:t,templateUrl:"epics/create-epic/create-epic.html",controller:"CreateEpicCtrl",controllerAs:"vm",bindToController:{onCreateEpic:"&"},scope:{}}},angular.module("taigaEpics").directive("tgCreateEpic",t)}.call(this),function(){var t;t=function(){function t(t,e,r){this.confirm=t,this.projectService=e,this.epicsService=r,this.displayUserStories=!1,this.displayAssignedTo=!1,this.displayStatusList=!1,this.loadingStatus=!1,this.project=this.projectService.project.toJS(),this._calculateProgressBar()}return t.$inject=["$tgConfirm","tgProjectService","tgEpicsService"],t.prototype._calculateProgressBar=function(){var t,e;return this.epic.getIn(["status_extra_info","is_closed"])===!0?this.percentage="100%":(t=this.epic.getIn(["user_stories_counts","progress"]),e=this.epic.getIn(["user_stories_counts","total"]),0===e?this.percentage="0%":this.percentage=100*t/e+"%")},t.prototype.canEditEpics=function(){return this.projectService.hasPermission("modify_epic")},t.prototype.toggleUserStoryList=function(){return this.displayUserStories?this.displayUserStories=!1:this.epicsService.listRelatedUserStories(this.epic).then(function(t){return function(e){return t.epicStories=e,t.displayUserStories=!0}}(this))["catch"](function(t){return function(){return t.confirm.notify("error")}}(this))},t.prototype.updateStatus=function(t){return this.displayStatusList=!1,this.loadingStatus=!0,this.epicsService.updateEpicStatus(this.epic,t)["catch"](function(t){return function(){return t.confirm.notify("error")}}(this))["finally"](function(t){return function(){return t.loadingStatus=!1}}(this))},t.prototype.updateAssignedTo=function(t){return this.assignLoader=!0,this.epicsService.updateEpicAssignedTo(this.epic,(null!=t?t.id:void 0)||null)["catch"](function(t){return function(){return t.confirm.notify("error")}}(this)).then(function(t){return function(){return t.assignLoader=!1}}(this))},t}(),angular.module("taigaEpics").controller("EpicRowCtrl",t)}.call(this),function(){var t;t=function(){return{templateUrl:"epics/dashboard/epic-row/epic-row.html",controller:"EpicRowCtrl",controllerAs:"vm",bindToController:!0,scope:{epic:"=",column:"="}}},angular.module("taigaEpics").directive("tgEpicRow",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,r,n,i,o,s,a,c,u){this.params=t,this.errorHandlingService=r,this.lightboxFactory=n,this.lightboxService=i,this.confirm=o,this.projectService=s,this.epicsService=a,this.appMetaService=c,this.translate=u,this.sectionName="EPICS.SECTION_NAME",e.defineImmutableProperty(this,"project",function(t){return function(){return t.projectService.project}}(this)),e.defineImmutableProperty(this,"epics",function(t){return function(){return t.epicsService.epics}}(this)),this.appMetaService.setfn(this._setMeta.bind(this))}return t.$inject=["$routeParams","tgErrorHandlingService","tgLightboxFactory","lightboxService","$tgConfirm","tgProjectService","tgEpicsService","tgAppMetaService","$translate"],t.prototype._setMeta=function(){var t;return this.project?(t={projectName:this.project.get("name"),projectDescription:this.project.get("description")},{title:this.translate.instant("EPICS.PAGE_TITLE",t),description:this.translate.instant("EPICS.PAGE_DESCRIPTION",t)}):null},t.prototype.loadInitialData=function(){return this.epicsService.clear(),this.projectService.setProjectBySlug(this.params.pslug).then(function(t){return function(){return t.projectService.isEpicsDashboardEnabled()?t.projectService.hasPermission("view_epics")?t.epicsService.fetchEpics():t.errorHandlingService.permissionDenied():t.errorHandlingService.notFound()}}(this))},t.prototype.canCreateEpics=function(){return this.projectService.hasPermission("add_epic")},t.prototype.onCreateEpic=function(){var t;return t=function(t){return function(){t.lightboxService.closeAll(),t.confirm.notify("success")}}(this),this.lightboxFactory.create("tg-create-epic",{"class":"lightbox lightbox-create-epic open","on-create-epic":"onCreateEpic()"},{onCreateEpic:t.bind(this)})},t}(),angular.module("taigaEpics").controller("EpicsDashboardCtrl",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i){var o,s,a;if(e.hasPermission("modify_epic"))return o=t(i.tgEpicsSortable),s=dragula([n[0]],{copySortSource:!1,copy:!1,mirrorContainer:n[0],moves:function(t){return $(t).is("div.epics-table-body-row")}}),s.on("dragend",function(t){var e,n,i;return n=$(t),e=n.scope().epic,i=n.index(),r.$apply(function(){return o(r,{epic:e,newIndex:i})})}),a=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&s.dragging}}),r.$on("$destroy",function(){return n.off(),s.destroy()})},{link:r}},t.$inject=["$parse","tgProjectService"],angular.module("taigaComponents").directive("tgEpicsSortable",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.generateHash,t=function(){function t(t,n,i,o,s){this.confirm=t,this.epicsService=n,this.timeout=i,this.storage=o,this.projectService=s,this.hash=e([this.projectService.project.get("id"),"epics"]),this.displayOptions=!1,this.displayVotes=!0,this.column=this.storage.get(this.hash,{votes:!0,name:!0,project:!0,sprint:!0,assigned:!0,status:!0,progress:!0}),r.defineImmutableProperty(this,"epics",function(t){return function(){return t.epicsService.epics}}(this)),r.defineImmutableProperty(this,"disabledEpicsPagination",function(t){return function(){return t.epicsService._disablePagination}}(this)),r.defineImmutableProperty(this,"loadingEpics",function(t){return function(){return t.epicsService._loadingEpics}}(this))}return t.$inject=["$tgConfirm","tgEpicsService","$timeout","$tgStorage","tgProjectService"],t.prototype.toggleEpicTableOptions=function(){return this.displayOptions=!this.displayOptions},t.prototype.reorderEpic=function(t,e){return t.get("epics_order")===e?null:this.epicsService.reorderEpic(t,e).then(null,function(t){return function(){return t.confirm.notify("error")}}(this))},t.prototype.nextPage=function(){return this.epicsService.nextPage()},t.prototype.hoverEpicTableOption=function(){if(this.timer)return this.timeout.cancel(this.timer)},t.prototype.hideEpicTableOption=function(){return this.timer=this.timeout(function(t){return function(){return t.displayOptions=!1}}(this),400)},t.prototype.updateViewOptions=function(){return this.storage.set(this.hash,this.column)},t}(),angular.module("taigaEpics").controller("EpicsTableCtrl",t)}.call(this),function(){var t;t=function(){return{templateUrl:"epics/dashboard/epics-table/epics-table.html",controller:"EpicsTableCtrl",controllerAs:"vm",scope:{}}},angular.module("taigaEpics").directive("tgEpicsTable",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){function t(){this._calculateProgressBar()}return t.$inject=[],t.prototype._calculateProgressBar=function(){var t,e;return this.story.get("is_closed")===!0?this.percentage="100%":(t=this.story.get("tasks").size,e=this.story.get("tasks").filter(function(t){return t.get("is_closed")}).size,0===t?this.percentage="0%":this.percentage=100*e/t+"%")},t}(),e.controller("StoryRowCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){return{templateUrl:"epics/dashboard/story-row/story-row.html",controller:"StoryRowCtrl",controllerAs:"vm",bindToController:!0,scope:{story:"=",column:"="}}},e.directive("tgStoryRow",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,r,n,i){this.projectService=t,this.attachmentsService=r,this.resources=n,this.xhrError=i,this.clear(),e.defineImmutableProperty(this,"epics",function(t){return function(){return t._epics}}(this))}return t.$inject=["tgProjectService","tgAttachmentsService","tgResources","tgXhrErrorService"],t.prototype.clear=function(){return this._loadingEpics=!1,this._disablePagination=!1,this._page=1,this._epics=Immutable.List()},t.prototype.fetchEpics=function(t){return null==t&&(t=!1),this._loadingEpics=!0,this._disablePagination=!0,this.resources.epics.list(this.projectService.project.get("id"),this._page).then(function(e){return function(r){return t?(e.clear(),e._epics=r.list):e._epics=e._epics.concat(r.list),e._loadingEpics=!1,e._disablePagination=!r.headers("x-pagination-next")}}(this))["catch"](function(t){return function(e){return t.xhrError.response(e)}}(this))},t.prototype.nextPage=function(){return this._page++,this.fetchEpics()},t.prototype.listRelatedUserStories=function(t){return this.resources.userstories.listInEpic(t.get("id"))},t.prototype.createEpic=function(t,e,r){ +return r?t.project=r:t.project=this.projectService.project.get("id"),this.resources.epics.post(t).then(function(t){return function(r){var n;return e?(n=_.map(e.toJS(),function(e){return t.attachmentsService.upload(e.file,r.get("id"),r.get("project"),"epic")}),Promise.all(n).then(t.fetchEpics.bind(t,!0))):r}}(this))},t.prototype.reorderEpic=function(t,e){var r,n,i,o,s,a,c,u,l;return s={},this._epics.forEach(function(t){return s[t.get("id")]=t.get("epics_order")}),l=this.epics.filter(function(e){return function(e){return e.get("id")!==t.get("id")}}(this)),n=l.slice(0,e),r=l.slice(e),a=n.last(),o=a?a.get("epics_order")+1:0,s[t.get("id")]=o,c=n.filter(function(t){return function(t){return t.get("epics_order")===a.get("epics_order")}}(this)),u=_.fromPairs(c.map(function(t){return function(t){return[t.get("id"),t.get("epics_order")]}}(this)).toJS()),r.forEach(function(t){return s[t.get("id")]=t.get("epics_order")+1}),this._epics=this._epics.map(function(t){return t.set("epics_order",s[t.get("id")])}),this._epics=this._epics.sortBy(function(t){return t.get("epics_order")}),i={epics_order:o,version:t.get("version")},this.resources.epics.reorder(t.get("id"),i,u).then(function(t){return function(e){return t._epics=t._epics.map(function(t){return t.get("id")===e.get("id")?e:t})}}(this))},t.prototype.reorderRelatedUserstory=function(t,e,r,n){var i,o,s,a,c,u,l,p,d;return d=e.filter(function(t){return function(t){return t.get("id")!==r.get("id")}}(this)),i=d.slice(0,n),c=i.last(),a=c?c.get("epic_order")+1:0,u=i.filter(function(t){return function(t){return t.get("epic_order")===c.get("epic_order")}}(this)),l=_.fromPairs(u.map(function(t){return function(t){return[t.get("id"),t.get("epic_order")]}}(this)).toJS()),o={order:a},s=t.get("id"),p=r.get("id"),this.resources.epics.reorderRelatedUserstory(s,p,o,l).then(function(e){return function(){return e.listRelatedUserStories(t)}}(this))},t.prototype.replaceEpic=function(t){return this._epics=this._epics.map(function(e){return e.get("id")===t.get("id")?t:e})},t.prototype.updateEpicStatus=function(t,e){var r;return r={status:e,version:t.get("version")},this.resources.epics.patch(t.get("id"),r).then(this.replaceEpic.bind(this))},t.prototype.updateEpicAssignedTo=function(t,e){var r;return r={assigned_to:e,version:t.get("version")},this.resources.epics.patch(t.get("id"),r).then(this.replaceEpic.bind(this))},t}(),angular.module("taigaEpics").service("tgEpicsService",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){function t(t,e){this.projectService=t,this.epicsService=e,this.sectionName="Epics",this.showCreateRelatedUserstoriesLightbox=!1}return t.$inject=["tgProjectService","tgEpicsService"],t.prototype.showRelatedUserStoriesSection=function(){var t;return this.projectService.hasPermission("view_epics")||(null!=(t=this.userstories)?t.length:void 0)>0},t.prototype.userCanSort=function(){return this.projectService.hasPermission("modify_epic")},t.prototype.loadRelatedUserstories=function(){return this.epicsService.listRelatedUserStories(this.epic).then(function(t){return function(e){return t.userstories=e}}(this))},t.prototype.reorderRelatedUserstory=function(t,e){return this.epicsService.reorderRelatedUserstory(this.epic,this.userstories,t,e).then(function(t){return function(e){return t.userstories=e}}(this))},t}(),e.controller("RelatedUserStoriesCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){function t(t,e,r,n){this.currentUserService=t,this.rs=e,this.confirm=r,this.analytics=n,this.projects=null,this.projectUserstories=Immutable.List(),this.loading=!1}return t.$inject=["tgCurrentUserService","tgResources","$tgConfirm","$tgAnalytics"],t.prototype.loadProjects=function(){if(null===this.projects)return this.projects=this.currentUserService.projects.get("unblocked")},t.prototype.filterUss=function(t,e){var r;return r=this.rs.userstories.listInAllProjects({project:t,q:e},!0).then(function(t){return function(e){var r,n;return r=t.epicUserstories.map(function(t){return t.get("id")}),n=e.filter(function(t){return r.indexOf(t.get("id"))===-1}),t.projectUserstories=n}}(this))},t.prototype.saveRelatedUserStory=function(t,e){var r,n,i;if(this.validateExistingUserstoryForm())return this.loading=!0,n=function(t){return function(e){return t.loading=!1,t.confirm.notify("error"),t.setExistingUserstoryFormErrors(e)}}(this),i=function(t){return function(){return t.analytics.trackEvent("epic related user story","create","create related user story on epic",1),t.loading=!1,e&&e(),t.loadRelatedUserstories()}}(this),r=this.epic.get("id"),this.rs.epics.addRelatedUserstory(r,t).then(i,n)},t.prototype.bulkCreateRelatedUserStories=function(t,e,r){var n,i,o;if(this.validateNewUserstoryForm())return this.loading=!0,i=function(t){return function(e){return t.loading=!1,t.confirm.notify("error"),t.setNewUserstoryFormErrors(e)}}(this),o=function(t){return function(){return t.analytics.trackEvent("epic related user story","create","create related user story on epic",1),t.loading=!1,r&&r(),t.loadRelatedUserstories()}}(this),n=this.epic.get("id"),this.rs.epics.bulkCreateRelatedUserStories(n,t,e).then(o,i)},t}(),e.controller("RelatedUserstoriesCreateCtrl",t)}.call(this),function(){var t,e,r;r=angular.module("taigaEpics"),e=this.taiga.debounceLeading,t=function(t){var r;return this.lightboxService=t,r=function(t,r,n,i){var o,s;return s=r.find(".new-user-story-form").checksley(),o=r.find(".existing-user-story-form").checksley(),i.validateNewUserstoryForm=function(t){return function(){return s.validate()}}(this),i.setNewUserstoryFormErrors=function(t){return function(t){return s.setErrors(t)}}(this),i.validateExistingUserstoryForm=function(t){return function(){return o.validate()}}(this),i.setExistingUserstoryFormErrors=function(t){return function(t){return o.setErrors(t)}}(this),t.showLightbox=function(e){return i.loadProjects(),t.selectProject(e).then(function(t){return function(){return lightboxService.open(r.find(".lightbox-create-related-user-stories"))}}(this))},t.closeLightbox=function(){return t.selectedUserstory=null,t.searchUserstory="",t.relatedUserstoriesText="",lightboxService.close(r.find(".lightbox-create-related-user-stories"))},t.$watch("vm.project",function(e){if(null!=e)return t.selectedProject=e.get("id")}),t.selectProject=function(e){return t.selectedUserstory=null,t.searchUserstory="",i.filterUss(e,t.searchUserstory)},t.onUpdateSearchUserstory=e(300,function(){return t.selectedUserstory=null,i.filterUss(t.selectedProject,t.searchUserstory)})},{link:r,templateUrl:"epics/related-userstories/related-userstories-create/related-userstories-create.html",controller:"RelatedUserstoriesCreateCtrl",controllerAs:"vm",bindToController:!0,scope:{showCreateRelatedUserstoriesLightbox:"=",project:"=",epic:"=",epicUserstories:"=",loadRelatedUserstories:"&"}}},t.$inject=["lightboxService"],r.directive("tgRelatedUserstoriesCreate",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(t,e){var r;return r=function(r,n,i){var o,s,a;if(e.hasPermission("modify_epic"))return o=t(i.tgRelatedUserstoriesSortable),s=dragula([n[0]],{copySortSource:!1,copy:!1,mirrorContainer:n[0],moves:function(t){return $(t).is("tg-related-userstory-row")}}),s.on("dragend",function(t){var e,n,i;return e=$(t),i=e.scope().us,n=e.index(),r.$apply(function(){return o(r,{us:i,newIndex:n})})}),a=autoScroll(window,{margin:20,pixels:30,scrollWhenOutside:!0,autoScroll:function(){return this.down&&s.dragging}}),r.$on("$destroy",function(){return n.off(),s.destroy()})},{link:r}},t.$inject=["$parse","tgProjectService"],e.directive("tgRelatedUserstoriesSortable",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){return{templateUrl:"epics/related-userstories/related-userstories.html",controller:"RelatedUserStoriesCtrl",controllerAs:"vm",bindToController:!0,scope:{userstories:"=",project:"=",epic:"="}}},t.$inject=[],e.directive("tgRelatedUserstories",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){function t(t,e,r,n){this.avatarService=t,this.translate=e,this.confirm=r,this.rs=n}return t.$inject=["tgAvatarService","$translate","$tgConfirm","tgResources"],t.prototype.setAvatarData=function(){var t;return t=this.userstory.get("assigned_to_extra_info"),this.avatar=this.avatarService.getAvatar(t)},t.prototype.getAssignedToFullNameDisplay=function(){return this.userstory.get("assigned_to")?this.userstory.getIn(["assigned_to_extra_info","full_name_display"]):this.translate.instant("COMMON.ASSIGNED_TO.NOT_ASSIGNED")},t.prototype.onDeleteRelatedUserstory=function(){var t,e;return e=this.translate.instant("LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.TITLE"),t=this.translate.instant("LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.MESSAGE",{epicSubject:this.epic.get("subject")}),this.confirm.ask(e,null,t).then(function(e){return function(r){var n,i,o,s;return i=function(){return t=e.translate.instant("EPIC.ERROR_UNLINK_RELATED_USERSTORY",{errorMessage:t}),e.confirm.notify("error",null,t),r.finish(!1)},o=function(){return e.loadRelatedUserstories(),r.finish()},n=e.epic.get("id"),s=e.userstory.get("id"),e.rs.epics.deleteRelatedUserstory(n,s).then(o,i)}}(this))},t}(),e.controller("RelatedUserstoryRowCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaEpics"),t=function(){var t;return t=function(t,e,r,n){return n.setAvatarData()},{link:t,templateUrl:"epics/related-userstories/related-userstory-row/related-userstory-row.html",controller:"RelatedUserstoryRowCtrl",controllerAs:"vm",bindToController:!0,scope:{userstory:"=",epic:"=",project:"=",loadRelatedUserstories:"&"}}},t.$inject=[],e.directive("tgRelatedUserstoryRow",t)}.call(this),function(){var t,e,r=function(t,e){return function(){return t.apply(e,arguments)}},n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;e=this.taiga,t=function(t){function i(t,n,i,o,s,a,c,u){var l,p;this.routeParams=t,this.externalAppsService=n,this.window=i,this.currentUserService=o,this.location=s,this.navUrls=a,this.xhrError=c,this.loader=u,this.createApplicationToken=r(this.createApplicationToken,this),this._getApplicationToken=r(this._getApplicationToken,this),this._redirect=r(this._redirect,this),this.loader.start(!1),this._applicationId=this.routeParams.application,this._state=this.routeParams.state,this._getApplicationToken(),this._user=this.currentUserService.getUser(),this._application=null,p=encodeURIComponent(this.location.url()),l=this.navUrls.resolve("login"),this.loginWithAnotherUserUrl=l+"?next="+p,e.defineImmutableProperty(this,"user",function(t){return function(){return t._user}}(this)),e.defineImmutableProperty(this,"application",function(t){return function(){return t._application}}(this))}return n(i,t),i.$inject=["$routeParams","tgExternalAppsService","$window","tgCurrentUserService","$location","$tgNavUrls","tgXhrErrorService","tgLoader"],i.prototype._redirect=function(t){var e;return e=t.get("next_url"),this.window.open(e,"_self")},i.prototype._getApplicationToken=function(){return this.externalAppsService.getApplicationToken(this._applicationId,this._state).then(function(t){return function(e){return t._application=e.get("application"),e.get("auth_code")?t._redirect(e):t.loader.pageLoaded()}}(this))["catch"](function(t){return function(e){return t.loader.pageLoaded(),t.xhrError.response(e)}}(this))},i.prototype.cancel=function(){return this.window.history.back()},i.prototype.createApplicationToken=function(){return this.externalAppsService.authorizeApplicationToken(this._applicationId,this._state).then(function(t){return function(e){return t._redirect(e)}}(this))["catch"](function(t){return function(e){return t.xhrError.response(e)}}(this))},i}(e.Controller),angular.module("taigaExternalApps").controller("ExternalApp",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t){this.rs=t}return e(r,t),r.$inject=["tgResources"],r.prototype.getApplicationToken=function(t,e){return this.rs.externalapps.getApplicationToken(t,e)},r.prototype.authorizeApplicationToken=function(t,e){return this.rs.externalapps.authorizeApplicationToken(t,e)},r}(taiga.Service),angular.module("taigaExternalApps").service("tgExternalAppsService",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t){this.lightboxFactory=t}return e(r,t),r.$inject=["tgLightboxFactory"],r.prototype.sendFeedback=function(){return this.lightboxFactory.create("tg-lb-feedback",{"class":"lightbox lightbox-feedback lightbox-generic-form"})},r}(taiga.Service),angular.module("taigaFeedback").service("tgFeedbackService",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,e){this.rs=t,this.xhrError=e,this._contentType=null,this._objectId=null,this.clear()}return t.$inject=["tgResources","tgXhrErrorService"],t.prototype.clear=function(){return this.page=1,this.loadingEntries=!1,this.disablePagination=!1,this.entries=Immutable.List(),this.count=null},t.prototype.fetchEntries=function(t){return null==t&&(t=!1),t&&(this.page=1),this.loadingEntries=!0,this.disablePagination=!0,this.rs.history.getHistory("activity",this._contentType,this._objectId,this.page).then(function(e){return function(r){return t?(e.clear(),e.entries=r.list):e.entries=e.entries.concat(r.list),e.loadingEntries=!1,e.disablePagination=!r.headers("x-pagination-next"),e.count=r.headers("x-pagination-count"),e.entries}}(this))["catch"](function(t){return function(e){return t.xhrError.response(t.entries)}}(this))},t.prototype.nextPage=function(t){return null==t&&(t="comment"),this.page++,this.fetchEntries()},t.prototype.init=function(t,e){return this._contentType=t,this._objectId=e,this.clear()},t}(),angular.module("taigaHistory").service("tgActivityService",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(t,e,r){this.currentUserService=t,this.permissionService=e,this.lightboxFactory=r,this.hiddenDeletedComment=!0}return t.$inject=["tgCurrentUserService","tgCheckPermissionsService","tgLightboxFactory"],t.prototype.showDeletedComment=function(){return this.hiddenDeletedComment=!1},t.prototype.hideDeletedComment=function(){return this.hiddenDeletedComment=!0},t.prototype.checkCancelComment=function(t){if(27===t.keyCode)return this.onEditMode({commentId:this.comment.id})},t.prototype.canEditDeleteComment=function(){if(this.currentUserService.getUser())return this.user=this.currentUserService.getUser(),this.user.get("id")===this.comment.user.pk||this.permissionService.check("modify_project")},t.prototype.saveComment=function(t,e){return this.onEditComment({commentId:this.comment.id,commentData:t,callback:e})},t.prototype.displayCommentHistory=function(){return this.lightboxFactory.create("tg-lb-display-historic",{"class":"lightbox lightbox-display-historic",comment:"comment",name:"name",object:"object"},{comment:this.comment,name:this.name,object:this.object})},t}(),e.controller("CommentCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){return{scope:{name:"@",object:"@",comment:"<",type:"<",loading:"<",editing:"<",deleting:"<",objectId:"<",editMode:"<",onEditMode:"&",onDeleteComment:"&",onRestoreDeletedComment:"&",onEditComment:"&"},templateUrl:"history/comments/comment.html",bindToController:!0,controller:"CommentCtrl",controllerAs:"vm"}},e.directive("tgComment",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(){}return t.$inject=[],t.prototype.initializePermissions=function(){return this.canAddCommentPermission="comment_"+this.name},t}(),e.controller("CommentsCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){var t;return t=function(t,e,r,n){return n.initializePermissions()},{scope:{type:"<",name:"@",object:"@",comments:"<",onEditMode:"&",onDeleteComment:"&",onRestoreDeletedComment:"&",onAddComment:"&",onEditComment:"&",editMode:"<",loading:"<",deleting:"<",editing:"<",projectId:"="},templateUrl:"history/comments/comments.html",bindToController:!0,controller:"CommentsCtrl",controllerAs:"vm",link:t}},e.directive("tgComments",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(t){this.rs=t}return t.$inject=["$tgResources"],t.prototype._loadHistoric=function(){var t,e,r;return r=this.name,e=this.object,t=this.comment.id,this.rs.history.getCommentHistory(r,e,t).then(function(t){return function(e){return t.commentHistoryEntries=e}}(this))},t}(),e.controller("LightboxDisplayHistoricCtrl",t)}.call(this),function(){var t;t=function(t){var e;return e=function(e,r,n,i){return i._loadHistoric(),t.open(r)},{scope:{},bindToController:{name:"=",object:"=",comment:"="},templateUrl:"history/history-lightbox/comment-history-lightbox.html",controller:"LightboxDisplayHistoricCtrl",controllerAs:"vm",link:e}},t.$inject=["lightboxService"],angular.module("taigaHistory").directive("tgLbDisplayHistoric",t)}.call(this),function(){var t;t=function(){return{scope:{entry:"<"},templateUrl:"history/history-lightbox/history-entry.html"}},angular.module("taigaHistory").directive("tgHistoryEntry",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){return{templateUrl:"history/history-tabs/history-tabs.html",scope:{showCommentTab:"&",showActivityTab:"&",onActiveComments:"&",onActiveActivities:"&",onOrderComments:"&",activeTab:"<",commentsNum:"<",activitiesNum:"<",onReverse:"<"}}},e.directive("tgHistoryTabs",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(t,e,r,n,i){this.rs=t,this.repo=e,this.storage=r,this.projectService=n,this.activityService=i,this.editing=null,this.deleting=null,this.editMode={},this.viewComments=!0,this.reverse=this.storage.get("orderComments"),taiga.defineImmutableProperty(this,"disabledActivityPagination",function(t){return function(){return t.activityService.disablePagination}}(this)),taiga.defineImmutableProperty(this,"loadingActivity",function(t){return function(){return t.activityService.loading}}(this))}return t.$inject=["$tgResources","$tgRepo","$tgStorage","tgProjectService","tgActivityService"],t.prototype._loadHistory=function(){return this._loadComments(),this._loadActivity()},t.prototype._loadActivity=function(){return this.activityService.init(this.name,this.id),this.activityService.fetchEntries().then(function(t){return function(e){return t.activitiesNum=t.activityService.count,t.activities=e.toJS()}}(this))},t.prototype._loadComments=function(){return this.rs.history.get(this.name,this.id).then(function(t){return function(e){return t.comments=_.filter(e,function(t){return""!==t.comment}),t.reverse&&t.comments-_.reverse(t.comments),t.commentsNum=t.comments.length}}(this))},t.prototype.nextActivityPage=function(){return this.activityService.nextPage().then(function(t){return function(e){return t.activities=e.toJS()}}(this))},t.prototype.showHistorySection=function(){return this.showCommentTab()||this.showActivityTab()},t.prototype.showCommentTab=function(){return this.commentsNum>0||this.projectService.hasPermission("comment_"+this.name)},t.prototype.showActivityTab=function(){return this.activitiesNum>0},t.prototype.toggleEditMode=function(t){return this.editMode[t]=!this.editMode[t]},t.prototype.onActiveHistoryTab=function(t){return this.viewComments=t},t.prototype.deleteComment=function(t){var e,r,n;return n=this.name,r=this.id,e=t,this.deleting=t,this.rs.history.deleteComment(n,r,e).then(function(t){return function(){return t._loadComments(),t.deleting=null}}(this))},t.prototype.editComment=function(t,e){var r,n,i;return i=this.name,n=this.id,r=t,this.editing=t,this.rs.history.editComment(i,n,r,e).then(function(e){return function(){return e._loadComments(),e.toggleEditMode(t),e.editing=null}}(this))},t.prototype.restoreDeletedComment=function(t){var e,r,n;return n=this.name,r=this.id,e=t,this.editing=t,this.rs.history.undeleteComment(n,r,e).then(function(t){return function(){return t._loadComments(),t.editing=null}}(this))},t.prototype.addComment=function(){return this.editMode={},this.editing=null,this._loadComments()},t.prototype.onOrderComments=function(){return this.reverse=!this.reverse,this.storage.set("orderComments",this.reverse),this._loadComments()},t}(),e.controller("HistorySection",t)}.call(this),function(){var t,e,r;r=angular.module("taigaHistory"),e=this.taiga.bindOnce,t=function(){var t;return t=function(t,e,r,n){return t.$on("object:updated",function(){return n._loadActivity()}),t.$watch("vm.id",function(t){return n._loadHistory()})},{link:t,templateUrl:"history/history.html",controller:"HistorySection",controllerAs:"vm",bindToController:!0,scope:{type:"=",name:"@",id:"=",projectId:"="}}},t.$inject=[],r.directive("tgHistorySection",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){function t(){}return t.$inject=[],t.prototype.diffTags=function(){if("tags"===this.type)return this.diffRemoveTags=_.difference(this.diff[0],this.diff[1]).toString(),this.diffAddTags=_.difference(this.diff[1],this.diff[0]).toString()},t}(),e.controller("ActivitiesDiffCtrl",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){var t;return t=function(t,e,r,n){return n.diffTags()},{scope:{type:"<",diff:"<"},templateUrl:"history/history/history-diff.html",controller:"ActivitiesDiffCtrl",controllerAs:"vm",bindToController:!0,link:t}},e.directive("tgHistoryDiff",t)}.call(this),function(){var t,e;e=angular.module("taigaHistory"),t=function(){var t;return t=function(t,e,r){},{scope:{activities:"<"},templateUrl:"history/history/history.html",link:t}},e.directive("tgHistory",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(t,r,n,i){return t.vm={},t.vm.duty=t.duty,t.vm.type=t.type,t.vm.getDutyType=function(){if(t.vm.duty){if("epics"===t.vm.duty.get("_name"))return e.instant("COMMON.EPIC");if("userstories"===t.vm.duty.get("_name"))return e.instant("COMMON.USER_STORY");if("tasks"===t.vm.duty.get("_name"))return e.instant("COMMON.TASK");if("issues"===t.vm.duty.get("_name"))return e.instant("COMMON.ISSUE")}}},{templateUrl:"home/duties/duty.html",scope:{duty:"=tgDuty",type:"@"},link:r}},t.$inject=["$tgNavUrls","$translate"],angular.module("taigaHome").directive("tgDuty",t)}.call(this),function(){var t;t=function(){function t(t,e,r){this.currentUserService=t,this.location=e,this.navUrls=r,this.currentUserService.getUser()||this.location.path(this.navUrls.resolve("discover"))}return t.$inject=["tgCurrentUserService","$location","$tgNavUrls"],t}(),angular.module("taigaHome").controller("Home",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga.groupBy,t=function(t){function n(t,e,r){this.navurls=t,this.rs=e,this.projectsService=r}return r(n,t),n.$inject=["$tgNavUrls","tgResources","tgProjectsService"],n.prototype._attachProjectInfoToWorkInProgress=function(t,e){var r,n,i,o,s;return r=function(t){return function(r,n){var i,o,s;return o=e.get(String(r.get("project"))),i={project:o.get("slug"),ref:r.get("ref")},s=t.navurls.resolve("project-"+n+"-detail",i),r=r.set("url",s),r=r.set("project",o),r=r.set("_name",n)}}(this),i=function(t,n){return t=t.filter(function(t){return e.get(String(t.get("project")))}),t=t.map(function(t){return r(t,n)})},o=t.get("assignedTo"),o.get("epics")&&(n=i(o.get("epics"),"epics"),o=o.set("epics",n)),o.get("userStories")&&(n=i(o.get("userStories"),"userstories"),o=o.set("userStories",n)),o.get("tasks")&&(n=i(o.get("tasks"),"tasks"),o=o.set("tasks",n)),o.get("issues")&&(n=i(o.get("issues"),"issues"),o=o.set("issues",n)),s=t.get("watching"),s.get("epics")&&(n=i(s.get("epics"),"epics"),s=s.set("epics",n)),s.get("userStories")&&(n=i(s.get("userStories"),"userstories"),s=s.set("userStories",n)),s.get("tasks")&&(n=i(s.get("tasks"),"tasks"),s=s.set("tasks",n)),s.get("issues")&&(n=i(s.get("issues"),"issues"),s=s.set("issues",n)),t=t.set("assignedTo",o),t=t.set("watching",s)},n.prototype.getWorkInProgress=function(t){var r,n,i,o,s,a,c,u,l,p,d,f,h,g,m,v,y;return p=Immutable.Map(),d=this.projectsService.getProjectsByUserId(t).then(function(t){return p=Immutable.fromJS(e(t.toJS(),function(t){return t.id}))}),o=Immutable.Map(),a={status__is_closed:!1,assigned_to:t},l={is_closed:!1,assigned_users:t},u={status__is_closed:!1,assigned_to:t},c={status__is_closed:!1,assigned_to:t},r=this.rs.epics.listInAllProjects(a).then(function(t){return o=o.set("epics",t)}),s=this.rs.userstories.listInAllProjects(l).then(function(t){return o=o.set("userStories",t)}),i=this.rs.tasks.listInAllProjects(u).then(function(t){return o=o.set("tasks",t)}),n=this.rs.issues.listInAllProjects(c).then(function(t){return o=o.set("issues",t)}),a={status__is_closed:!1,watchers:t},l={is_closed:!1,watchers:t},u={status__is_closed:!1,watchers:t},c={status__is_closed:!1,watchers:t},f=Immutable.Map(),h=this.rs.epics.listInAllProjects(a).then(function(t){return f=f.set("epics",t)}),v=this.rs.userstories.listInAllProjects(l).then(function(t){return f=f.set("userStories",t)}),m=this.rs.tasks.listInAllProjects(u).then(function(t){return f=f.set("tasks",t)}),g=this.rs.issues.listInAllProjects(c).then(function(t){return f=f.set("issues",t)}),y=Immutable.Map(),Promise.all([d,r,h,s,v,i,m,n,g]).then(function(t){return function(){return y=y.set("assignedTo",o),y=y.set("watching",f),y=t._attachProjectInfoToWorkInProgress(y,p)}}(this))},n}(taiga.Service),angular.module("taigaHome").service("tgHomeService",t)}.call(this),function(){var t;t=function(t){var e,r;return r=function(e,r,n,i){return e.vm={},taiga.defineImmutableProperty(e.vm,"projects",function(){return t.projects.get("recents")})},e={templateUrl:"home/projects/home-project-list.html",scope:{},link:r}},t.$inject=["tgCurrentUserService"],angular.module("taigaHome").directive("tgHomeProjectList",t)}.call(this),function(){var t;t=function(){function t(t){this.homeService=t,this.assignedTo=Immutable.Map(),this.watching=Immutable.Map()}return t.$inject=["tgHomeService"],t.prototype._setAssignedTo=function(t){var e,r,n,i;if(e=t.get("assignedTo").get("epics"),i=t.get("assignedTo").get("userStories"),n=t.get("assignedTo").get("tasks"),r=t.get("assignedTo").get("issues"),this.assignedTo=i.concat(n).concat(r).concat(e),this.assignedTo.size>0)return this.assignedTo=this.assignedTo.sortBy(function(t){return t.get("modified_date")}).reverse()},t.prototype._setWatching=function(t){var e,r,n,i;if(e=t.get("watching").get("epics"),i=t.get("watching").get("userStories"),n=t.get("watching").get("tasks"),r=t.get("watching").get("issues"),this.watching=i.concat(n).concat(r).concat(e),this.watching.size>0)return this.watching=this.watching.sortBy(function(t){return t.get("modified_date")}).reverse()},t.prototype.getWorkInProgress=function(t){return this.homeService.getWorkInProgress(t).then(function(t){return function(e){return t._setAssignedTo(e),t._setWatching(e)}}(this))},t}(),angular.module("taigaHome").controller("WorkingOn",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(t,r,n,i){var o,s;if(o=e.getUser())return s=o.get("id"),i.getWorkInProgress(s)},{controller:"WorkingOn",controllerAs:"vm",templateUrl:"home/working-on/working-on.html",scope:{},link:r}},t.$inject=["tgHomeService","tgCurrentUserService"],angular.module("taigaHome").directive("tgWorkingOn",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t,e,r,n,i){this.projectService=t,this.rs=e,this.lightboxService=r,this.confirm=n,this.rootScope=i,this.project=this.projectService.project,this.roles=this.projectService.project.get("roles"),this.rolesValues={},this.loading=!1,this.defaultMaxInvites=4}return t.$inject=["tgProjectService","$tgResources","lightboxService","$tgConfirm","$rootScope"],t.prototype._areRolesValidated=function(){return Object.defineProperty(this,"areRolesValidated",{get:function(t){return function(){var e;return e=_.filter(Object.values(t.rolesValues),function(t){return t}),e.length===t.contactsToInvite.size+t.emailsToInvite.size}}(this)})},t.prototype._checkLimitMemberships=function(){var t;return null===this.project.get("max_memberships")?this.membersLimit=this.defaultMaxInvites:(t=Math.max(this.project.get("max_memberships")-this.project.get("total_memberships"),0),this.membersLimit=Math.min(t,this.defaultMaxInvites)),this.showWarningMessage=this.membersLimitn.total?(n.newEvent=!0,e(100,function(){return n.total=r,n.$apply()}),e(2e3,function(){return n.newEvent=!1})):n.total=r}),n.$on("notifications:loading",function(){return n.loading=!0}),n.setAllAsRead=function(){return r.setNotificationsAsRead().then(function(){return t.$emit("notifications:dismiss-all")})}},i={templateUrl:"navigation-bar/dropdown-notifications/dropdown-notifications.html",scope:{active:"="},link:o}},angular.module("taigaNavigationBar").directive("tgDropdownNotifications",["$rootScope","tgNotificationsService","tgCurrentUserService",t])}.call(this),function(){var t;t=function(t,e,r){var n,i;return i=function(n,i,o,s){var a;return n.vm={},taiga.defineImmutableProperty(n.vm,"projects",function(){return e.projects.get("recents")}),n.vm.newProject=function(){return r.newProject()},a=function(){return i.find(".dropdown-project-list ul li a").data("fullUrl","")},t.$on("dropdown-project-list:updated",a)},n={templateUrl:"navigation-bar/dropdown-project-list/dropdown-project-list.html",scope:{active:"="},link:i}},t.$inject=["$rootScope","tgCurrentUserService","tgProjectsService"],angular.module("taigaNavigationBar").directive("tgDropdownProjectList",t)}.call(this),function(){var t;t=function(t,e,r,n,i,o){var s,a;return a=function(s,a,c,u){return s.vm={},s.vm.isFeedbackEnabled=e.get("feedbackEnabled"),s.vm.customSupportUrl=e.get("supportUrl"),taiga.defineImmutableProperty(s.vm,"user",function(){return t.userData}),s.vm.logout=function(){return t.logout(),r.url(n.resolve("discover")),r.search({})},s.vm.sendFeedback=function(){return i.sendFeedback()},s.vm.userSettingsPlugins=_.filter(o.userSettingsPlugins,{userMenu:!0})},s={templateUrl:"navigation-bar/dropdown-user/dropdown-user.html",scope:{},link:a}},t.$inject=["$tgAuth","$tgConfig","$tgLocation","$tgNavUrls","tgFeedbackService","$rootScope"],angular.module("taigaNavigationBar").directive("tgDropdownUser",t)}.call(this),function(){var t;t=function(t,e,r,n,i){var o,s;return s=function(o,s,a,c){return o.vm={},taiga.defineImmutableProperty(o.vm,"projects",function(){return t.projects.get("recents")}),taiga.defineImmutableProperty(o.vm,"isAuthenticated",function(){return t.isAuthenticated()}),taiga.defineImmutableProperty(o.vm,"isEnabledHeader",function(){return e.isEnabledHeader()}),o.vm.publicRegisterEnabled=i.get("publicRegisterEnabled"),o.vm.customSupportUrl=i.get("supportUrl"),o.vm.login=function(){var t;return t=encodeURIComponent(r.url()),r.url(n.resolve("login")),r.search({next:t})},o.$on("$routeChangeSuccess",function(){switch(o.vm.active=null,r.path()){case"/":return o.vm.active="dashboard";case"/discover":return o.vm.active="discover";case"/notifications":return o.vm.active="notifications";case"/projects/":return o.vm.active="projects"}})},o={templateUrl:"navigation-bar/navigation-bar.html",scope:{},link:s}},t.$inject=["tgCurrentUserService","tgNavigationBarService","$tgLocation","$tgNavUrls","$tgConfig"],angular.module("taigaNavigationBar").directive("tgNavigationBar",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(){this.disableHeader()}return e(r,t),r.prototype.enableHeader=function(){return this.enabledHeader=!0},r.prototype.disableHeader=function(){return this.enabledHeader=!1},r.prototype.isEnabledHeader=function(){return this.enabledHeader},r}(taiga.Service),angular.module("taigaNavigationBar").service("tgNavigationBarService",t)}.call(this),function(){var t;t=function(){return{templateUrl:"notifications/notifications-list/notifications-list.html",controller:"Notifications",controllerAs:"vm",bindToController:!0,scope:{infiniteScrollContainer:"@",infiniteScrollDistance:"=",onlyUnread:"=onlyUnread"}}},angular.module("taigaNotifications").directive("tgNotificationsList",t)}.call(this),function(){var t,e,r,n,i=function(t,e){function r(){this.constructor=t}for(var n in e)o.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},o={}.hasOwnProperty;n=this.taiga,r=this.taiga.mixOf,e=this.taiga.debounceLeading,t=function(t){function e(t,e,r,n,i,o,s){this.rootScope=t,this.scope=e,this.notificationsService=r,this.currentUserService=n,this.events=i,this.location=o,this.window=s,this.total=0,this.user=this.currentUserService.getUser(),this.scrollDisabled=!1,this.initList(),this.loadNotifications(),this.rootScope.$on("notifications:dismiss",function(t){return function(e){if(t.onlyUnread)return t.reloadList()}}(this)),this.rootScope.$on("notifications:new",function(t){return function(e){return t.reloadList()}}(this)),this.rootScope.$on("notifications:dismiss-all",function(t){return function(e){return t.reloadList()}}(this))}return i(e,t),e.$inject=["$rootScope","$scope","tgNotificationsService","tgCurrentUserService","$tgEvents","$location","$window"],e.prototype.initList=function(){return this.notificationsList=Immutable.List(),this.list=this.notificationsService.getNotificationsList(this.user.get("id"),null!=this.onlyUnread),this.loading=null==this.list},e.prototype.reloadList=function(){return this.initList(),this.loadNotifications()},e.prototype.loadNotifications=function(){return this.scrollDisabled=!0,this.loading=!0,this.scope.$emit("notifications:loading"),this.list.next().then(function(t){return function(e){return t.notificationsList=t.notificationsList.concat(e.get("items")),e.get("next")&&(t.scrollDisabled=!1),t.total=e.get("total"),t.scope.$emit("notifications:loaded",t.total),t.loading=!1,t.notificationsList}}(this))},e.prototype.setAsRead=function(t,e){return this.notificationsService.setNotificationAsRead(t.get("id")).then(function(t){return function(){return t.location.$$url===e?t.window.location.reload():t.location.path(e),t.rootScope.$broadcast("notifications:dismiss")}}(this))},e.prototype.setAllAsRead=function(){return this.notificationsService.setNotificationsAsRead().then(function(t){return function(){return t.rootScope.$broadcast("notifications:dismiss-all")}}(this))},e}(r(n.Controller,n.PageMixin,n.FiltersMixin)),angular.module("taigaNotifications").controller("Notifications",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga,t=function(t){function e(t,e,r,n,i){this.rs=t,this.userTimelinePaginationSequenceService=e,this.translate=r,this.navUrls=n,this.tgSections=i}var n,i;return r(e,t),e.$inject=["tgResources","tgUserTimelinePaginationSequenceService","$translate","$tgNavUrls","$tgSections"],n=[{check:function(t){return 1===t.get("event_type")},key:"EVENTS.ASSIGNED_YOU",translate_params:["username","obj_name"]},{check:function(t){return 2===t.get("event_type")},key:"EVENTS.MENTIONED_YOU",translate_params:["username","obj_name"]},{check:function(t){return 3===t.get("event_type")},key:"EVENTS.ADDED_YOU_AS_WATCHER",translate_params:["username","obj_name"]},{check:function(t){return 4===t.get("event_type")},key:"EVENTS.ADDED_YOU_AS_MEMBER",translate_params:["username"]},{check:function(t){return 5===t.get("event_type")},key:"EVENTS.COMMENTED",translate_params:["username","obj_name"]},{check:function(t){return 6===t.get("event_type")},key:"EVENTS.MENTIONED_YOU_IN_COMMENT",translate_params:["username","obj_name"]}],i={username:function(t){var e,r,n;return n=t.getIn(["data","user"]),n.get("is_profile_visible")?(e=this.translate.instant("COMMON.SEE_USER_PROFILE",{username:n.get("username")}),r=this.navUrls.resolve("user-profile",{username:t.getIn(["data","user","username"])}),this._getLink(t,r,n.get("name"),"user-link",e)):this._getUsernameSpan(n.get("name"))},project_name:function(t){var e;return e=this.navUrls.resolve("project",{project:t.getIn(["data","project","slug"])}),this._getLink(t,e,t.getIn(["data","project","name"]),"project-link")},obj_name:function(t){var e,r,n;return e=this._getNotificationObject(t),n=this._getDetailObjUrl(t,e.get("content_type")),r="#"+e.get("ref")+" "+e.get("subject"),this._getLink(t,n,r,"object-link")}},e.prototype.getNotificationsList=function(t,e){var r,n;return n=0,r={},r.fetch=function(r){return function(n){return r.rs.users.getNotifications(t,n,e).then(function(t){return t})}}(this),r.map=function(t){return function(e){return t._addNotificationAttributes(e)}}(this),this.userTimelinePaginationSequenceService.generate(r)},e.prototype.setNotificationAsRead=function(t){return this.rs.users.setNotificationAsRead(t)},e.prototype.setNotificationsAsRead=function(){return this.rs.users.setNotificationsAsRead()},e.prototype._getNotificationObject=function(t){if(t.get("data").get("obj"))return t.get("data").get("obj")},e.prototype._getType=function(t){return _.find(n,function(e){return e.check(t)})},e.prototype._addNotificationAttributes=function(t){var e,r,n,i,o,s;return e=t.get("event_type"),s=this._getType(t),o=this._getTitle(t,e,s),t=t.set("title_html",o),n=t.getIn(["data","project","slug"]),r=this.tgSections.getPath(n),i=this.navUrls.resolve("project-"+r,{project:n}),t=t.set("projectUrl",i),t=t.set("obj",this._getNotificationObject(t))},e.prototype._translateTitleParams=function(t,e,r){return i[t].call(this,e,r)},e.prototype._getDetailObjUrl=function(t,e){var r,n;return n={issue:"project-issues-detail",task:"project-tasks-detail",userstory:"project-userstories-detail"},r=this.navUrls.resolve(n[e],{project:t.getIn(["data","project","slug"]),ref:t.getIn(["data","obj","ref"])})},e.prototype._getLink=function(t,e,r,n,i){var o;return i=i||r,o=$("").attr("ng-non-bindable",!0).text(r),$('').attr("title",i).attr("class",n).attr("ng-click",'vm.setAsRead(notification, "'+e+'")').append(o).prop("outerHTML")},e.prototype._getUsernameSpan=function(t){var e;return e=e||t,$("").addClass("username").text(t).prop("outerHTML")},e.prototype._getParams=function(t,e,r){var n;return n={},r.translate_params.forEach(function(r){return function(i){return n[i]=r._translateTitleParams(i,t,e)}}(this)),n},e.prototype._getTitle=function(t,e,r){var n,i,o;return n=this._getParams(t,e,r),i={},Object.keys(n).forEach(function(t){return i[t]="{{"+t+"}}"}),o=this.translate.instant(r.key,i),Object.keys(n).forEach(function(t){var e;return e="{{"+t+"}}",o=o.replace(new RegExp(e,"g"),n[t])}),o},e}(e.Service),angular.module("taigaNotifications").service("tgNotificationsService",t)}.call(this),function(){var t;t=function(){function t(t){this.userService=t,this.loadStats()}return t.$inject=["tgUserService"],t.prototype.loadStats=function(){return this.userService.getStats(this.user.get("id")).then(function(t){return function(e){return t.stats=e}}(this))},t}(),angular.module("taigaProfile").controller("ProfileBar",t)}.call(this),function(){var t;t=function(){return{templateUrl:"profile/profile-bar/profile-bar.html",controller:"ProfileBar",controllerAs:"vm",scope:{user:"=user",isCurrentUser:"=iscurrentuser"},bindToController:!0}},angular.module("taigaProfile").directive("tgProfileBar",t)}.call(this),function(){var t;t=function(){function t(t,e){this.userService=t,this.currentUserService=e,this.currentUser=this.currentUserService.getUser(),this.isCurrentUser=!1,this.currentUser&&this.currentUser.get("id")===this.user.get("id")&&(this.isCurrentUser=!0)}return t.$inject=["tgUserService","tgCurrentUserService"],t.prototype.loadContacts=function(){return this.userService.getContacts(this.user.get("id")).then(function(t){return function(e){return t.contacts=e}}(this))},t}(),angular.module("taigaProfile").controller("ProfileContacts",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.loadContacts()},{templateUrl:"profile/profile-contacts/profile-contacts.html",scope:{user:"="},controllerAs:"vm",controller:"ProfileContacts",link:t,bindToController:!0}},angular.module("taigaProfile").directive("tgProfileContacts",t)}.call(this),function(){var t;t=function(){var t,e;return t=function(t,e,r,n){return t.vm={item:t.item}},e=function(t,e){return"project"===e.itemType?"profile/profile-favs/items/project.html":"profile/profile-favs/items/ticket.html"},{scope:{item:"=tgFavItem"},link:t,templateUrl:e}},angular.module("taigaProfile").directive("tgFavItem",t)}.call(this),function(){var t,e,r,n,i,o=function(t,e){function r(){this.constructor=t}for(var n in e)s.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},s={}.hasOwnProperty;i=this.taiga.debounceLeading,t=function(){function t(){this._init()}return t.prototype._init=function(){return this.enableFilterByAll=!0,this.enableFilterByProjects=!0,this.enableFilterByEpics=!0,this.enableFilterByUserStories=!0,this.enableFilterByTasks=!0,this.enableFilterByIssues=!0,this.enableFilterByTextQuery=!0,this._resetList(),this.q=null,this.type=null},t.prototype._resetList=function(){return this.items=Immutable.List(),this.scrollDisabled=!1,this._page=1},t.prototype._enableLoadingSpinner=function(){return this.isLoading=!0},t.prototype._disableLoadingSpinner=function(){return this.isLoading=!1},t.prototype._enableScroll=function(){return this.scrollDisabled=!1},t.prototype._disableScroll=function(){return this.scrollDisabled=!0},t.prototype._checkIfHasMorePages=function(t){return t?(this._page+=1,this._enableScroll()):this._disableScroll()},t.prototype._checkIfHasNoResults=function(){return this.hasNoResults=0===this.items.size},t.prototype.loadItems=function(){return this._enableLoadingSpinner(),this._disableScroll(),this._getItems(this.user.get("id"),this._page,this.type,this.q).then(function(t){return function(e){return t.items=t.items.concat(e.get("data")),t._checkIfHasMorePages(e.get("next")),t._checkIfHasNoResults(),t._disableLoadingSpinner(),t.items}}(this))["catch"](function(t){return function(){return t._disableLoadingSpinner(),t.items}}(this))},t.prototype.filterByTextQuery=i(500,function(){return this._resetList(),this.loadItems()}),t.prototype.showAll=function(){if(null!==this.type)return this.type=null,this._resetList(),this.loadItems()},t.prototype.showProjectsOnly=function(){if("project"!==this.type)return this.type="project",this._resetList(),this.loadItems()},t.prototype.showEpicsOnly=function(){if("epic"!==this.type)return this.type="epic",this._resetList(),this.loadItems()},t.prototype.showUserStoriesOnly=function(){if("userstory"!==this.type)return this.type="userstory",this._resetList(),this.loadItems()},t.prototype.showTasksOnly=function(){if("task"!==this.type)return this.type="task",this._resetList(),this.loadItems()},t.prototype.showIssuesOnly=function(){if("issue"!==this.type)return this.type="issue",this._resetList(),this.loadItems()},t}(),e=function(t){function e(t){this.userService=t,e.__super__.constructor.call(this),this.tabName="likes",this.enableFilterByAll=!1,this.enableFilterByProjects=!1,this.enableFilterByEpics=!1,this.enableFilterByUserStories=!1,this.enableFilterByTasks=!1,this.enableFilterByIssues=!1,this.enableFilterByTextQuery=!0,this._getItems=this.userService.getLiked}return o(e,t),e.$inject=["tgUserService"],e}(t),angular.module("taigaProfile").controller("ProfileLiked",e),r=function(t){function e(t){this.userService=t,e.__super__.constructor.call(this),this.tabName="upvotes",this.enableFilterByAll=!0,this.enableFilterByProjects=!1,this.enableFilterByEpics=!0,this.enableFilterByUserStories=!0,this.enableFilterByTasks=!0,this.enableFilterByIssues=!0,this.enableFilterByTextQuery=!0,this._getItems=this.userService.getVoted}return o(e,t),e.$inject=["tgUserService"],e}(t),angular.module("taigaProfile").controller("ProfileVoted",r),n=function(t){function e(t){this.userService=t,e.__super__.constructor.call(this),this.tabName="watchers",this._getItems=this.userService.getWatched}return o(e,t),e.$inject=["tgUserService"],e}(t),angular.module("taigaProfile").controller("ProfileWatched",n)}.call(this),function(){var t,e,r,n;n={scope:{},bindToController:{user:"=",type:"@",q:"@",scrollDisabled:"@",isLoading:"@",hasNoResults:"@"},controller:null,controllerAs:"vm",templateUrl:"profile/profile-favs/profile-favs.html"},t=function(){return _.extend({},n,{controller:"ProfileLiked"})},angular.module("taigaProfile").directive("tgProfileLiked",t),e=function(){return _.extend({},n,{controller:"ProfileVoted"})},angular.module("taigaProfile").directive("tgProfileVoted",e),r=function(){return _.extend({},n,{controller:"ProfileWatched"})},angular.module("taigaProfile").directive("tgProfileWatched",r)}.call(this),function(){var t;t=function(){function t(t){var e;this.translate=t,e=Math.floor(Math.random()*this.HINTS.length)+1,this.hint=this.HINTS[e-1],this.hint.linkText=this.hint.linkText||"HINTS.LINK",this.hint.title=this.translate.instant("HINTS.HINT"+e+"_TITLE"),this.hint.text=this.translate.instant("HINTS.HINT"+e+"_TEXT")}return t.prototype.HINTS=[{url:"https://tree.taiga.io/support/admin/import-export-projects/"},{url:"https://tree.taiga.io/support/admin/custom-fields/"},{},{}],t}(),t.$inject=["$translate"],angular.module("taigaProfile").controller("ProfileHints",t)}.call(this),function(){var t;t=function(t){return{scope:{},controller:"ProfileHints",controllerAs:"vm",templateUrl:"profile/profile-hints/profile-hints.html"}},t.$inject=["$translate"],angular.module("taigaProfile").directive("tgProfileHints",t)}.call(this),function(){var t;t=function(){function t(t,e){this.projectsService=t,this.userService=e}return t.$inject=["tgProjectsService","tgUserService"],t.prototype.loadProjects=function(){return this.projectsService.getProjectsByUserId(this.user.get("id")).then(function(t){return function(e){return t.userService.attachUserContactsToProjects(t.user.get("id"),e)}}(this)).then(function(t){return function(e){return t.projects=e}}(this))},t}(),angular.module("taigaProfile").controller("ProfileProjects",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){return n.loadProjects()},{templateUrl:"profile/profile-projects/profile-projects.html",scope:{user:"="},link:t,bindToController:!0,controllerAs:"vm",controller:"ProfileProjects"}},angular.module("taigaProfile").directive("tgProfileProjects",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n,i){if(t.tab={},r.$observe("tgProfileTab",function(e){return t.tab.name=e}),r.$observe("tabTitle",function(e){return t.tab.title=e}),t.tab.icon=r.tabIcon,t.tab.active=!!r.tabActive,t.$eval(r.tabDisabled)!==!0)return n.addTab(t.tab)},{templateUrl:"profile/profile-tab/profile-tab.html",scope:{},require:"^tgProfileTabs",link:t,transclude:!0}},angular.module("taigaProfile").directive("tgProfileTab",t)}.call(this),function(){var t;t=function(){function t(){this.tabs=[]}return t.prototype.addTab=function(t){return this.tabs.push(t)},t.prototype.toggleTab=function(t){return _.map(this.tabs,function(t){return t.active=!1}),t.active=!0},t}(),angular.module("taigaProfile").controller("ProfileTabs",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"ProfileTabs",controllerAs:"vm",templateUrl:"profile/profile-tabs/profile-tabs.html",transclude:!0}},angular.module("taigaProfile").directive("tgProfileTabs",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n,i,o){this.appMetaService=t,this.currentUserService=e,this.routeParams=r,this.userService=n,this.xhrError=i,this.translate=o,this.isCurrentUser=!1,this.routeParams.slug?this.userService.getUserByUserName(this.routeParams.slug).then(function(t){return function(e){return e.get("is_active")?(t.user=e,t.isCurrentUser=!1,t._setMeta(t.user),e):t.xhrError.notFound()}}(this))["catch"](function(t){return function(e){return t.xhrError.response(e)}}(this)):(this.user=this.currentUserService.getUser(),this.isCurrentUser=!0,this._setMeta(this.user))}return t.$inject=["tgAppMetaService","tgCurrentUserService","$routeParams","tgUserService","tgXhrErrorService","$translate"],t.prototype._setMeta=function(t){var e,r,n;return e={userFullName:t.get("full_name_display"),userUsername:t.get("username")},n=this.translate.instant("USER.PROFILE.PAGE_TITLE",e),r=t.get("bio"),this.appMetaService.setAll(n,r)},t}(),angular.module("taigaProfile").controller("Profile",t)}.call(this),function(){var t;t=function(){return{templateUrl:"projects/project/blocked-project-explanation.html"}},angular.module("taigaProjects").directive("tgBlockedProjectExplanation",t)}.call(this),function(){var t;t=function(){function t(t){this.lightboxFactory=t}return t.$inject=["tgLightboxFactory"],t.prototype.launchContactForm=function(){return this.lightboxFactory.create("tg-lb-contact-project",{"class":"lightbox lightbox-contact-project e2e-lightbox-contact-project",project:"project"},{project:this.project})},t}(),angular.module("taigaProjects").controller("ContactProjectButtonCtrl",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"ContactProjectButtonCtrl",bindToController:{project:"=",layout:"@"},controllerAs:"vm",templateUrl:"projects/components/contact-project-button/contact-project-button.html"}},angular.module("taigaProjects").directive("tgContactProjectButton",t)}.call(this),function(){var t;t=function(){function t(t,e,r){this.lightboxService=t,this.rs=e,this.confirm=r,this.contact={}}return t.$inject=["lightboxService","tgResources","$tgConfirm"],t.prototype.contactProject=function(){var t,e,r;return e=this.project.get("id"),t=this.contact.message,r=this.rs.projects.contactProject(e,t),this.sendingFeedback=!0,r.then(function(t){return function(){return t.lightboxService.closeAll(),t.sendingFeedback=!1,t.confirm.notify("success")}}(this))},t}(),angular.module("taigaProjects").controller("ContactProjectLbCtrl",t)}.call(this),function(){var t;t=function(t){var e;return this.inject=["lightboxService"],e=function(e,r){return t.open(r)},{controller:"ContactProjectLbCtrl",bindToController:{project:"="},controllerAs:"vm",templateUrl:"projects/components/lb-contact-project/lb-contact-project.html",link:e}},angular.module("taigaProjects").directive("tgLbContactProject",["lightboxService",t])}.call(this),function(){var t;t=function(){function t(t,e){this.confirm=t,this.likeButtonService=e,this.isMouseOver=!1,this.loading=!1}return t.$inject=["$tgConfirm","tgLikeProjectButtonService"],t.prototype.showTextWhenMouseIsOver=function(){return this.isMouseOver=!0},t.prototype.showTextWhenMouseIsLeave=function(){return this.isMouseOver=!1},t.prototype.toggleLike=function(){var t;return this.loading=!0,t=this.project.get("is_fan")?this._unlike():this._like(),t["finally"](function(t){return function(){return t.loading=!1}}(this)),t},t.prototype._like=function(){return this.likeButtonService.like(this.project.get("id")).then(function(t){return function(){return t.showTextWhenMouseIsLeave()}}(this))["catch"](function(t){return function(){return t.confirm.notify("error")}}(this))},t.prototype._unlike=function(){return this.likeButtonService.unlike(this.project.get("id"))["catch"](function(t){return function(){return t.confirm.notify("error")}}(this))},t}(),angular.module("taigaProjects").controller("LikeProjectButton",t)}.call(this),function(){var t;t=function(){return{scope:{},controller:"LikeProjectButton",bindToController:{project:"="},controllerAs:"vm",templateUrl:"projects/components/like-project-button/like-project-button.html"}},angular.module("taigaProjects").directive("tgLikeProjectButton",t)}.call(this),function(){var t,e,r=function(t,e){function r(){this.constructor=t}for(var i in e)n.call(e,i)&&(t[i]=e[i]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},n={}.hasOwnProperty;e=this.taiga,t=function(t){function e(t,e,r){this.rs=t,this.currentUserService=e,this.projectService=r}return r(e,t),e.$inject=["tgResources","tgCurrentUserService","tgProjectService"],e.prototype._getProjectIndex=function(t){return this.currentUserService.projects.get("all").findIndex(function(e){return e.get("id")===t})},e.prototype._updateProjects=function(t,e){var r,n;if(r=this._getProjectIndex(t),r!==-1)return n=this.currentUserService.projects.get("all").update(r,function(t){var r;return r=t.get("total_fans"),e?r++:r--,t.merge({is_fan:e,total_fans:r})}),this.currentUserService.setProjects(n)},e.prototype._updateCurrentProject=function(t){var e,r;return r=this.projectService.project.get("total_fans"),t?r++:r--,e=this.projectService.project.merge({is_fan:t,total_fans:r}),this.projectService.setProject(e)},e.prototype.like=function(t){return this.rs.projects.likeProject(t).then(function(e){return function(){return e._updateProjects(t,!0),e._updateCurrentProject(!0)}}(this))},e.prototype.unlike=function(t){return this.rs.projects.unlikeProject(t).then(function(e){return function(){return e._updateProjects(t,!1),e._updateCurrentProject(!1)}}(this))},e}(e.Service),angular.module("taigaProjects").service("tgLikeProjectButtonService",t)}.call(this),function(){var t;t=function(t){var e,r;return r=function(e,r,n,i){var o,s,a;return s=null,o=dragula([r[0]],{copySortSource:!1,copy:!1,mirrorContainer:r[0],moves:function(t){return $(t).hasClass("list-itemtype-project")}}),o.on("dragend",function(r){var n,i,o,a,c,u,l;for(s=$(r),a=s.scope().project,i=s.index(),u=_.map(e.projects.toJS(),function(t){return t.id}),u=_.without(u,a.get("id")),u.splice(i,0,a.get("id")),c=[],i=n=0,o=u.length;n=s.get("max_memberships_private_projects"),i&&n?(e="private-space-members",r=s.get("max_memberships_private_projects")):i?e="private-space":n&&(e="private-members",r=s.get("max_memberships_private_projects"))):(o=!this.currentUserService.canCreatePublicProjects().valid,n=null!==s.get("max_memberships_public_projects")&&t.headers.memberships>=s.get("max_memberships_public_projects"),o&&n?(e="public-space-members",r=s.get("max_memberships_public_projects")):o?e="public-space":n&&(e="public-members",r=s.get("max_memberships_public_projects"))),!!e&&{key:e,values:{max_memberships:r,members:t.headers.memberships}})},r}(taiga.Service),angular.module("taigaProjects").service("tgImportProjectService",t)}.call(this),function(){var t;t=function(){function t(){}return t.$inject=[],t.prototype.isDisabled=function(t){return this.invitedMembers.indexOf(t)===-1},t}(),angular.module("taigaProjects").controller("InviteMembersCtrl",t)}.call(this),function(){var t;t=function(){var t;return t=function(t,e,r,n){},{link:t,templateUrl:"projects/create/invite-members/invite-members.html",controller:"InviteMembersCtrl",controllerAs:"vm",bindToController:!0,scope:{invitedMembers:"<",members:"<",onToggleInvitedMember:"&"}}},t.$inject=[],angular.module("taigaProjects").directive("tgInviteMembers",t)}.call(this),function(){var t;t=function(){return{templateUrl:"projects/create/invite-members/single-member/single-member.html",scope:{disabled:"<",avatar:"="}}},t.$inject=[],angular.module("taigaProjects").directive("tgSingleMember",t)}.call(this),function(){var t;t=function(){function t(t){this.currentUserService=t,this.canCreatePublicProjects=this.currentUserService.canCreatePublicProjects(),this.canCreatePrivateProjects=this.currentUserService.canCreatePrivateProjects(),this.projectForm=this.project.toJS(),this.projectForm.is_private=!1,this.projectForm.keepExternalReference=!1,"agile"===this.projectForm.importer_type?this.projectForm.project_type=null:this.projectForm.project_type="scrum",this.projectForm.create_subissues=!0,!this.canCreatePublicProjects.valid&&this.canCreatePrivateProjects.valid&&(this.projectForm.is_private=!0)}return t.$inject=["tgCurrentUserService"],t.prototype.checkUsersLimit=function(){return this.limitMembersPrivateProject=this.currentUserService.canAddMembersPrivateProject(this.members.size),this.limitMembersPublicProject=this.currentUserService.canAddMembersPublicProject(this.members.size)},t.prototype.saveForm=function(){return this.onSaveProjectDetails({project:Immutable.fromJS(this.projectForm)})},t.prototype.canCreateProject=function(){return this.projectForm.is_private?this.canCreatePrivateProjects.valid:this.canCreatePublicProjects.valid},t.prototype.isDisabled=function(){return!this.canCreateProject()},t}(),angular.module("taigaProjects").controller("JiraImportProjectFormCtrl",t)}.call(this),function(){var t;t=function(){return{link:function(t,e,r,n){return t.$watch("vm.members",n.checkUsersLimit.bind(n))},templateUrl:"projects/create/jira-import/jira-import-project-form/jira-import-project-form.html",controller:"JiraImportProjectFormCtrl",controllerAs:"vm",bindToController:!0,scope:{members:"<",project:"<",onSaveProjectDetails:"&",onCancelForm:"&",fetchingUsers:"<"}}},t.$inject=[],angular.module("taigaProjects").directive("tgJiraImportProjectForm",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.jiraImportService=t,this.confirm=e,this.translate=r,this.importProjectService=n,this.step="autorization-jira",this.project=null,taiga.defineImmutableProperty(this,"projects",function(t){return function(){return t.jiraImportService.projects}}(this)),taiga.defineImmutableProperty(this,"members",function(t){return function(){return t.jiraImportService.projectUsers}}(this))}return t.$inject=["tgJiraImportService","$tgConfirm","$translate","tgImportProjectService"],t.prototype.startProjectSelector=function(){return this.step="project-select-jira",this.jiraImportService.fetchProjects()},t.prototype.onSelectProject=function(t){return this.step="project-form-jira",this.project=t,this.fetchingUsers=!0,this.jiraImportService.fetchUsers(this.project.get("id")).then(function(t){return function(){return t.fetchingUsers=!1}}(this))},t.prototype.onSaveProjectDetails=function(t){return this.project=t,this.step="project-members-jira"},t.prototype.onCancelMemberSelection=function(){return this.step="project-form-jira"},t.prototype.startImport=function(t){var e,r,n;return e=this.confirm.loader(this.translate.instant("PROJECT.IMPORT.IN_PROGRESS.TITLE"),this.translate.instant("PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION"),!0),e.start(),r=this.project.get("project_type"),"issues"===r&&this.project.get("create_subissues")&&(r="issues-with-subissues"),n=this.jiraImportService.importProject(this.project.get("name"),this.project.get("description"),this.project.get("id"),t,this.project.get("keepExternalReference"),this.project.get("is_private"),r,this.project.get("importer_type")),this.importProjectService.importPromise(n).then(function(t){return function(){return e.stop()}}(this))},t.prototype.submitUserSelection=function(t){return this.startImport(t),null},t}(),angular.module("taigaProjects").controller("JiraImportCtrl",t)}.call(this),function(){var t;t=function(){return{link:function(t,e,r,n){return n.startProjectSelector()},templateUrl:"projects/create/jira-import/jira-import.html",controller:"JiraImportCtrl",controllerAs:"vm",bindToController:!0,scope:{onCancel:"&"}}},t.$inject=[],angular.module("taigaProjects").directive("tgJiraImport",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t,e){this.resources=t,this.location=e,this.projects=Immutable.List(),this.projectUsers=Immutable.List()}return e(r,t),r.$inject=["tgResources","$location"], +r.prototype.setToken=function(t,e){return this.token=t,this.url=e},r.prototype.fetchProjects=function(){return this.resources.jiraImporter.listProjects(this.url,this.token).then(function(t){return function(e){return t.projects=e}}(this))},r.prototype.fetchUsers=function(t){return this.resources.jiraImporter.listUsers(this.url,this.token,t).then(function(t){return function(e){return t.projectUsers=e}}(this))},r.prototype.importProject=function(t,e,r,n,i,o,s,a){return this.resources.jiraImporter.importProject(this.url,this.token,t,e,r,n,i,o,s,a)},r.prototype.getAuthUrl=function(t){return new Promise(function(e){return function(r,n){return e.resources.jiraImporter.getAuthUrl(t).then(function(t){return e.authUrl=t.data.url,r(e.authUrl)},function(t){return n(t.data._error_message)})}}(this))},r.prototype.authorize=function(t){return new Promise(function(e){return function(r,n){return e.resources.jiraImporter.authorize(t).then(function(t){return e.token=t.data.token,e.url=t.data.url,r(t.data)},function(t){return n(new Error(t.status))})}}(this))},r}(taiga.Service),angular.module("taigaProjects").service("tgJiraImportService",t)}.call(this),function(){var t;t=function(){function t(){}return t.$inject=[],t.prototype.start=function(){return this.mode="search",this.invalid=!1},t.prototype.assignUser=function(){return this.onSelectUser({user:this.user,taigaUser:this.userEmail})},t.prototype.selectUser=function(t){return this.onSelectUser({user:this.user,taigaUser:Immutable.fromJS(t)})},t}(),angular.module("taigaProjects").controller("SelectImportUserLightboxCtrl",t)}.call(this),function(){var t;t=function(t,e){var r;return r=function(r,n,i,o){return r.$watch("vm.visible",function(i){return i&&!n.hasClass("open")?(o.start(),t.open(n,null,r.vm.onClose).then(function(){return n.find("input").focus(),e.init(n)})):!i&&n.hasClass("open")?t.close(n).then(function(){return o.userEmail="",o.usersSearch=""}):void 0})},{controller:"SelectImportUserLightboxCtrl",controllerAs:"vm",bindToController:!0,scope:{user:"<",visible:"<",onClose:"&",onSelectUser:"&",selectableUsers:"<",isPrivate:"<",limitMembersPrivateProject:"<",limitMembersPublicProject:"<",displayEmailSelector:"<"},templateUrl:"projects/create/select-import-user-lightbox/select-import-user-lightbox.html",link:r}},t.$inject=["lightboxService","lightboxKeyboardNavigationService"],angular.module("taigaProjects").directive("tgSelectImportUserLightbox",t)}.call(this),function(){var t;t=function(){function t(t){this.currentUserService=t,this.canCreatePublicProjects=this.currentUserService.canCreatePublicProjects(),this.canCreatePrivateProjects=this.currentUserService.canCreatePrivateProjects(),this.projectForm=this.project.toJS(),this.platformName="Trello",this.projectForm.is_private=!1,this.projectForm.keepExternalReference=!1,!this.canCreatePublicProjects.valid&&this.canCreatePrivateProjects.valid&&(this.projectForm.is_private=!0)}return t.$inject=["tgCurrentUserService"],t.prototype.checkUsersLimit=function(){return this.limitMembersPrivateProject=this.currentUserService.canAddMembersPrivateProject(this.members.size),this.limitMembersPublicProject=this.currentUserService.canAddMembersPublicProject(this.members.size)},t.prototype.saveForm=function(){return this.onSaveProjectDetails({project:Immutable.fromJS(this.projectForm)})},t.prototype.canCreateProject=function(){return this.projectForm.is_private?this.canCreatePrivateProjects.valid:this.canCreatePublicProjects.valid},t.prototype.isDisabled=function(){return!this.canCreateProject()},t}(),angular.module("taigaProjects").controller("TrelloImportProjectFormCtrl",t)}.call(this),function(){var t;t=function(){return{link:function(t,e,r,n){return t.$watch("vm.members",n.checkUsersLimit.bind(n))},templateUrl:"projects/create/trello-import/trello-import-project-form/trello-import-project-form.html",controller:"TrelloImportProjectFormCtrl",controllerAs:"vm",bindToController:!0,scope:{members:"<",project:"<",onSaveProjectDetails:"&",onCancelForm:"&",fetchingUsers:"<"}}},t.$inject=[],angular.module("taigaProjects").directive("tgTrelloImportProjectForm",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n){this.trelloImportService=t,this.confirm=e,this.translate=r,this.importProjectService=n,this.project=null,taiga.defineImmutableProperty(this,"projects",function(t){return function(){return t.trelloImportService.projects}}(this)),taiga.defineImmutableProperty(this,"members",function(t){return function(){return t.trelloImportService.projectUsers}}(this))}return t.$inject=["tgTrelloImportService","$tgConfirm","$translate","tgImportProjectService"],t.prototype.startProjectSelector=function(){return this.trelloImportService.fetchProjects().then(function(t){return function(){return t.step="project-select-trello"}}(this))},t.prototype.onSelectProject=function(t){return this.step="project-form-trello",this.project=t,this.fetchingUsers=!0,this.trelloImportService.fetchUsers(this.project.get("id")).then(function(t){return function(){return t.fetchingUsers=!1}}(this))},t.prototype.onSaveProjectDetails=function(t){return this.project=t,this.step="project-members-trello"},t.prototype.onCancelMemberSelection=function(){return this.step="project-form-trello"},t.prototype.startImport=function(t){var e,r;return e=this.confirm.loader(this.translate.instant("PROJECT.IMPORT.IN_PROGRESS.TITLE"),this.translate.instant("PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION"),!0),e.start(),r=this.trelloImportService.importProject(this.project.get("name"),this.project.get("description"),this.project.get("id"),t,this.project.get("keepExternalReference"),this.project.get("is_private")),this.importProjectService.importPromise(r).then(function(t){return function(){return e.stop()}}(this))},t.prototype.submitUserSelection=function(t){return this.startImport(t),null},t}(),angular.module("taigaProjects").controller("TrelloImportCtrl",t)}.call(this),function(){var t;t=function(){return{link:function(t,e,r,n){return n.startProjectSelector()},templateUrl:"projects/create/trello-import/trello-import.html",controller:"TrelloImportCtrl",controllerAs:"vm",bindToController:!0,scope:{onCancel:"&"}}},t.$inject=[],angular.module("taigaProjects").directive("tgTrelloImport",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t){this.resources=t,this.projects=Immutable.List(),this.projectUsers=Immutable.List(),this.token=null}return e(r,t),r.$inject=["tgResources"],r.prototype.setToken=function(t){return this.token=t},r.prototype.fetchProjects=function(){return this.resources.trelloImporter.listProjects(this.token).then(function(t){return function(e){return t.projects=e}}(this))},r.prototype.fetchUsers=function(t){return this.resources.trelloImporter.listUsers(this.token,t).then(function(t){return function(e){return t.projectUsers=e}}(this))},r.prototype.importProject=function(t,e,r,n,i,o){return this.resources.trelloImporter.importProject(this.token,t,e,r,n,i,o)},r.prototype.getAuthUrl=function(){return new Promise(function(t){return function(e){return t.resources.trelloImporter.getAuthUrl().then(function(r){return t.authUrl=r.data.url,e(t.authUrl)})}}(this))},r.prototype.authorize=function(t){return new Promise(function(e){return function(r,n){return e.resources.trelloImporter.authorize(t).then(function(t){return e.token=t.data.token,r(e.token)},function(t){return n(new Error(t.status))})}}(this))},r}(taiga.Service),angular.module("taigaProjects").service("tgTrelloImportService",t)}.call(this),function(){var t;t=function(t,e){return{link:function(r,n,i){return r.$watch("visible",function(i){return i&&!n.hasClass("open")?t.open(n,r.onClose).then(function(){return n.find("input").focus(),e.init(n)}):!i&&n.hasClass("open")?t.close(n):void 0})},templateUrl:"projects/create/warning-user-import-lightbox/warning-user-import-lightbox.html",scope:{visible:"<",onClose:"&",onConfirm:"&"}}},t.$inject=["lightboxService","lightboxKeyboardNavigationService"],angular.module("taigaProjects").directive("tgWarningUserImportLightbox",t)}.call(this),function(){var t;t=function(){function t(t){this.currentUserService=t,taiga.defineImmutableProperty(this,"projects",function(t){return function(){return t.currentUserService.projects.get("all")}}(this))}return t.$inject=["tgCurrentUserService"],t}(),angular.module("taigaProjects").controller("ProjectsListing",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n,i){this.routeParams=t,this.location=e,this.projectService=r,this.rs=n,this.tgSections=i,this.getProjectHomepage().then(function(t){return function(e){return e?t.location.url("project/"+t.routeParams.pslug+"/"+e):t.gotoDefaultProjectHomepage()}}(this)).then(null,function(){return this.gotoDefaultProjectHomepage()})}return t.$inject=["$routeParams","$location","tgProjectService","$tgResources","$tgSections"],t.prototype.gotoDefaultProjectHomepage=function(){return this.location.url("project/"+this.routeParams.pslug+"/timeline")},t.prototype.getProjectHomepage=function(){var t;return t=this.projectService.project.toJS(),this.rs.userProjectSettings.list({project:t.id}).then(function(e){return function(r){var n;if(n=_.find(r,{project:t.id}))return e.tgSections.getPath(t.slug,n.homepage)}}(this))},t}(),angular.module("taigaProjects").controller("ProjectRouter",t)}.call(this),function(){var t;t=function(){function t(t,e,r,n,i){this.routeParams=t,this.appMetaService=e,this.auth=r,this.translate=n,this.projectService=i,this.user=this.auth.userData,taiga.defineImmutableProperty(this,"project",function(t){return function(){return t.projectService.project}}(this)),taiga.defineImmutableProperty(this,"members",function(t){return function(){return t.projectService.activeMembers}}(this)),this.appMetaService.setfn(this._setMeta.bind(this))}return t.$inject=["$routeParams","tgAppMetaService","$tgAuth","$translate","tgProjectService"],t.prototype._setMeta=function(){var t;return this.project?(t={projectName:this.project.get("name")},{title:this.translate.instant("PROJECT.PAGE_TITLE",t),description:this.project.get("description")}):null},t}(),angular.module("taigaProjects").controller("Project",t)}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=this.taiga,e=this.taiga.groupBy,t=function(t){function e(t,e){this.rs=t,this.projectUrl=e}return n(e,t),e.$inject=["tgResources","$projectUrl"],e.prototype.create=function(t){return this.rs.projects.create(t)},e.prototype.duplicate=function(t,e){return this.rs.projects.duplicate(t,e)},e.prototype.getProjectBySlug=function(t){return this.rs.projects.getProjectBySlug(t).then(function(t){return function(e){return t._decorate(e)}}(this))},e.prototype.getProjectStats=function(t){return this.rs.projects.getProjectStats(t)},e.prototype.getProjectsByUserId=function(t,e){return this.rs.projects.getProjectsByUserId(t,e).then(function(t){return function(e){return e.map(t._decorate.bind(t))}}(this))},e.prototype._decorate=function(t){var e;return e=this.projectUrl.get(t.toJS()),t=t.set("url",e)},e.prototype.bulkUpdateProjectsOrder=function(t){return this.rs.projects.bulkUpdateOrder(t)},e.prototype.transferValidateToken=function(t,e){return this.rs.projects.transferValidateToken(t,e)},e.prototype.transferAccept=function(t,e,r){return this.rs.projects.transferAccept(t,e,r)},e.prototype.transferReject=function(t,e,r){return this.rs.projects.transferReject(t,e,r)},e}(r.Service),angular.module("taigaProjects").service("tgProjectsService",t)}.call(this),function(){var t;t=function(){return{templateUrl:"projects/transfer/cant-own-project-explanation.html"}},angular.module("taigaProjects").directive("tgCantOwnProjectExplanation",t)}.call(this),function(){var t,e;e=angular.module("taigaProjects"),t=function(){function t(t,e,r,n,i,o,s,a,c){this.routeParams=t,this.projectService=e,this.location=r,this.authService=n,this.currentUserService=i,this.navUrls=o,this.translate=s,this.confirmService=a,this.errorHandlingService=c}return t.$inject=["$routeParams","tgProjectsService","$location","$tgAuth","tgCurrentUserService","$tgNavUrls","$translate","$tgConfirm","tgErrorHandlingService"],t.prototype.initialize=function(){return this.projectId=this.project.get("id"),this.token=this.routeParams.token,this.showAddComment=!1,this._refreshUserData()},t.prototype._validateToken=function(){return this.projectService.transferValidateToken(this.projectId,this.token).then(null,function(t){return function(e,r){return t.errorHandlingService.notfound()}}(this))},t.prototype._refreshUserData=function(){return this.authService.refresh().then(function(t){return function(){return t._validateToken(),t._setProjectData(),t._checkOwnerData()}}(this))},t.prototype._setProjectData=function(){return this.canBeOwnedByUser=this.currentUserService.canOwnProject(this.project)},t.prototype._checkOwnerData=function(){var t,e;return t=this.currentUserService.getUser(),this.project.get("is_private")?(this.ownerMessage="ADMIN.PROJECT_TRANSFER.OWNER_MESSAGE.PRIVATE",this.maxProjects=t.get("max_private_projects"),null===this.maxProjects&&(this.maxProjects=this.translate.instant("ADMIN.PROJECT_TRANSFER.UNLIMITED_PROJECTS")),this.currentProjects=t.get("total_private_projects"),e=t.get("max_memberships_private_projects")):(this.ownerMessage="ADMIN.PROJECT_TRANSFER.OWNER_MESSAGE.PUBLIC",this.maxProjects=t.get("max_public_projects"),null===this.maxProjects&&(this.maxProjects=this.translate.instant("ADMIN.PROJECT_TRANSFER.UNLIMITED_PROJECTS")),this.currentProjects=t.get("total_public_projects"),e=t.get("max_memberships_public_projects")),this.validNumberOfMemberships=null===e||this.project.get("total_memberships")<=e},t.prototype.transferAccept=function(t,e){return this.loadingAccept=!0,this.projectService.transferAccept(this.project.get("id"),t,e).then(function(t){return function(){var e;e=t.navUrls.resolve("project-admin-project-profile-details",{project:t.project.get("slug")}),t.loadingAccept=!1,t.location.path(e),t.confirmService.notify("success",t.translate.instant("ADMIN.PROJECT_TRANSFER.ACCEPTED_PROJECT_OWNERNSHIP"),"",5e3)}}(this))},t.prototype.transferReject=function(t,e){return this.loadingReject=!0,this.projectService.transferReject(this.project.get("id"),t,e).then(function(t){return function(){var e;e=t.navUrls.resolve("home",{project:t.project.get("slug")}),t.loadingReject=!1,t.location.path(e),t.confirmService.notify("success",t.translate.instant("ADMIN.PROJECT_TRANSFER.REJECTED_PROJECT_OWNERNSHIP"),"",5e3)}}(this))},t.prototype.addComment=function(){return this.showAddComment=!0},t.prototype.hideComment=function(){return this.showAddComment=!1,this.reason=""},t}(),e.controller("TransferProjectController",t)}.call(this),function(){var t,e;e=angular.module("taigaProjects"),t=function(){var t;return t=function(t,e,r,n){return n.initialize()},{link:t,scope:{},bindToController:{project:"="},templateUrl:"projects/transfer/transfer-project.html",controller:"TransferProjectController",controllerAs:"vm"}},e.directive("tgTransferProject",t)}.call(this),function(){var t,e,r,n;n=this.taiga,r=this.taiga.sizeFormat,t=function(t,e,n,i,o,s){var a;return a={},a.list=function(r,n,i){var o,s,a,c;return c="attachments/"+r,s={object_id:n,project:i},o={headers:{"x-disable-pagination":"1"}},a=t.resolve(c),e.get(a,s,o).then(function(t){return Immutable.fromJS(t.data)})},a["delete"]=function(r,n){var i,o;return o="attachments/"+r,i=t.resolve(o)+("/"+n),e["delete"](i)},a.patch=function(r,n,i){var o,s;return s="attachments/"+r,o=t.resolve(s)+("/"+n),e.patch(o,i)},a.create=function(e,a,c,u,l){var p,d,f,h,g,m,v,y,_,b,S;return b="attachments/"+e,_=t.resolve(b),d=o.defer(),void 0===u?(d.reject(null),d.promise):(f=n.get("maxUploadFileSize",null),f&&u.size>f?(h={status:413,data:{_error_message:"'"+u.name+"' ("+r(u.size)+") is too heavy for our oompa loompas, try it with a smaller than ("+r(f)+")"}},d.reject(h),d.promise):(y=function(t){return function(t){return i.$apply(function(){return u.status="in-progress",u.size=r(t.total),u.progressMessage="upload "+r(t.loaded)+" of "+r(t.total),u.progressPercent=Math.round(t.loaded/t.total*100)+"%"})}}(this),m=function(t){return function(t){return i.$apply(function(){var e,r,n;u.status="done",n=t.target.status;try{e=JSON.parse(t.target.responseText)}catch(i){e={}}return n>=200&&n<400?(e=Immutable.fromJS(e),d.resolve(e)):(h={status:n,data:{_error_message:null!=(r=p.attached_file)?r[0]:void 0}},d.reject(h))})}}(this),v=function(t){return function(t){return i.$apply(function(){return u.status="error",d.reject("fail")})}}(this),p=new FormData,p.append("project",a),p.append("object_id",c),p.append("attached_file",u),p.append("from_comment",l),S=new XMLHttpRequest,S.upload.addEventListener("progress",y,!1),S.addEventListener("load",m,!1),S.addEventListener("error",v,!1),g=s.get("token"),S.open("POST",_),S.setRequestHeader("Authorization","Bearer "+g),S.setRequestHeader("Accept","application/json"),S.send(p),d.promise))},function(){return{attachments:a}}},t.$inject=["$tgUrls","$tgHttp","$tgConfig","$rootScope","$q","$tgStorage"],e=angular.module("taigaResources2"),e.factory("tgAttachmentsResource",t)}.call(this),function(){var t,e;t=function(t,e){var r;return r={},r.listInAllProjects=function(r){var n,i;return i=t.resolve("epics"),n={headers:{"x-disable-pagination":"1"}},e.get(i,r,n).then(function(t){return Immutable.fromJS(t.data)})},r.list=function(r,n){var i,o;return null==n&&(n=0),o=t.resolve("epics"),i={project:r,page:n},e.get(o,i).then(function(t){return{list:Immutable.fromJS(t.data),headers:t.headers}})},r.patch=function(r,n){var i;return i=t.resolve("epics")+("/"+r),e.patch(i,n).then(function(t){return Immutable.fromJS(t.data)})},r.post=function(r){var n;return n=t.resolve("epics"),e.post(n,r).then(function(t){return Immutable.fromJS(t.data)})},r.reorder=function(r,n,i){var o,s;return s=t.resolve("epics")+("/"+r),o={headers:{"set-orders":JSON.stringify(i)}},e.patch(s,n,null,o).then(function(t){return Immutable.fromJS(t.data)})},r.addRelatedUserstory=function(r,n){var i,o;return o=t.resolve("epic-related-userstories",r),i={user_story:n,epic:r},e.post(o,i)},r.reorderRelatedUserstory=function(r,n,i,o){var s,a;return a=t.resolve("epic-related-userstories",r)+("/"+n),s={headers:{"set-orders":JSON.stringify(o)}},e.patch(a,i,null,s)},r.bulkCreateRelatedUserStories=function(r,n,i){var o,s;return s=t.resolve("epic-related-userstories-bulk-create",r),o={bulk_userstories:i,project_id:n},e.post(s,o)},r.deleteRelatedUserstory=function(r,n){var i;return i=t.resolve("epic-related-userstories",r)+("/"+n),e["delete"](i)},function(){return{epics:r}}},t.$inject=["$tgUrls","$tgHttp"],e=angular.module("taigaResources2"),e.factory("tgEpicsResource",t)}.call(this),function(){var t,e;t=function(t,e){var r;return r={},r.getApplicationToken=function(r,n){var i;return i=t.resolve("applications"),i=i+"/"+r+"/token?state="+n,e.get(i).then(function(t){return Immutable.fromJS(t.data)})},r.authorizeApplicationToken=function(r,n){var i,o;return o=t.resolve("application-tokens"),o+="/authorize",i={state:n,application:r},e.post(o,i).then(function(t){return Immutable.fromJS(t.data)})},function(){return{externalapps:r}}},t.$inject=["$tgUrls","$tgHttp"],e=angular.module("taigaResources2"),e.factory("tgExternalAppsResource",t)}.call(this),function(){var t,e;t=function(t,e){var r;return r={},r.getHistory=function(r,n,i,o){var s;return s=t.resolve("history/"+n),e.get(s+"/"+i,{page:o,type:r}).then(function(t){return{list:Immutable.fromJS(t.data),headers:t.headers}})},function(){return{history:r}}},t.$inject=["$tgUrls","$tgHttp"],e=angular.module("taigaResources2"),e.factory("tgHistory",t)}.call(this),function(){var t,e,r,n,i,o;o=this.taiga,n=function(t,e){var r;return r={},r.getAuthUrl=function(r){return r=t.resolve("importers-trello-auth-url"),e.get(r)},r.authorize=function(r){var n;return n=t.resolve("importers-trello-authorize"),e.post(n,{code:r})},r.listProjects=function(r){var n;return n=t.resolve("importers-trello-list-projects"),e.post(n,{token:r}).then(function(t){return Immutable.fromJS(t.data)})},r.listUsers=function(r,n){var i;return i=t.resolve("importers-trello-list-users"),e.post(i,{token:r,project:n}).then(function(t){return Immutable.fromJS(t.data)})},r.importProject=function(r,n,i,o,s,a,c){var u,l;return l=t.resolve("importers-trello-import-project"),u={token:r,name:n,description:i,project:o,users_bindings:s.toJS(),keep_external_reference:a,is_private:c,template:"kanban"},e.post(l,u)},function(){return{trelloImporter:r}}},n.$inject=["$tgUrls","$tgHttp"],r=function(t,e){var r;return r={},r.getAuthUrl=function(r){var n;return n=t.resolve("importers-jira-auth-url")+"?url="+r,e.get(n)},r.authorize=function(r){var n;return n=t.resolve("importers-jira-authorize"),e.post(n,{oauth_verifier:r})},r.listProjects=function(r,n){var i;return i=t.resolve("importers-jira-list-projects"),e.post(i,{url:r,token:n}).then(function(t){return Immutable.fromJS(t.data)})},r.listUsers=function(r,n,i){var o;return o=t.resolve("importers-jira-list-users"),e.post(o,{url:r,token:n,project:i}).then(function(t){return Immutable.fromJS(t.data)})},r.importProject=function(r,n,i,o,s,a,c,u,l,p){var d,f,h;return h=t.resolve("importers-jira-import-project"),f="kanban","kanban"!==l&&(f="scrum"),d={url:r,token:n,name:i,description:o,project:s,users_bindings:a.toJS(),keep_external_reference:c,is_private:u,project_type:l,importer_type:p,template:f},e.post(h,d)},function(){return{jiraImporter:r}}},r.$inject=["$tgUrls","$tgHttp"],e=function(t,e){var r;return r={},r.getAuthUrl=function(r){var n;return n=t.resolve("importers-github-auth-url")+"?uri="+r,e.get(n)},r.authorize=function(r){var n;return n=t.resolve("importers-github-authorize"),e.post(n,{code:r})},r.listProjects=function(r){var n;return n=t.resolve("importers-github-list-projects"),e.post(n,{token:r}).then(function(t){return Immutable.fromJS(t.data)})},r.listUsers=function(r,n){var i;return i=t.resolve("importers-github-list-users"),e.post(i,{token:r,project:n}).then(function(t){return Immutable.fromJS(t.data)})},r.importProject=function(r,n,i,o,s,a,c,u){var l,p;return p=t.resolve("importers-github-import-project"),l={token:r,name:n,description:i,project:o,users_bindings:s.toJS(),keep_external_reference:a,is_private:c,template:u},e.post(p,l)},function(){return{githubImporter:r}}},e.$inject=["$tgUrls","$tgHttp"],t=function(t,e){var r;return r={},r.getAuthUrl=function(){var r;return r=t.resolve("importers-asana-auth-url"),e.get(r)},r.authorize=function(r){var n;return n=t.resolve("importers-asana-authorize"),e.post(n,{code:r})},r.listProjects=function(r){var n;return n=t.resolve("importers-asana-list-projects"),e.post(n,{token:r}).then(function(t){return Immutable.fromJS(t.data)})},r.listUsers=function(r,n){var i;return i=t.resolve("importers-asana-list-users"),e.post(i,{token:r,project:n}).then(function(t){return Immutable.fromJS(t.data)})},r.importProject=function(r,n,i,o,s,a,c,u){var l,p;return p=t.resolve("importers-asana-import-project"),l={token:r,name:n,description:i,project:o,users_bindings:s.toJS(),keep_external_reference:a,is_private:c,template:u},e.post(p,l)},function(){return{asanaImporter:r}}},t.$inject=["$tgUrls","$tgHttp"],i=angular.module("taigaResources2"),i.factory("tgTrelloImportResource",n),i.factory("tgJiraImportResource",r),i.factory("tgGithubImportResource",e),i.factory("tgAsanaImportResource",t)}.call(this),function(){var t,e;t=function(t,e){var r;return r={},r.listInAllProjects=function(r){var n,i;return i=t.resolve("issues"),n={headers:{"x-disable-pagination":"1"}},e.get(i,r,n).then(function(t){return Immutable.fromJS(t.data)})},function(){return{issues:r}}},t.$inject=["$tgUrls","$tgHttp"],e=angular.module("taigaResources2"),e.factory("tgIssuesResource",t)}.call(this),function(){var t,e,r;r=function(){},t=function(t,e,r){var n;return n={},n.create=function(r){var n;return n=t.resolve("projects"),e.post(n,JSON.stringify(r)).then(function(t){return function(t){return Immutable.fromJS(t.data)}}(this))},n.duplicate=function(r,n){var i,o,s;return s=t.resolve("projects"),s=s+"/"+r+"/duplicate",i=n.users.map(function(t){return function(t){return{id:t}}}(this)),o={name:n.name,description:n.description,is_private:n.is_private,users:i},e.post(s,o)},n.getProjects=function(r,n){var i,o;return null==r&&(r={}),null==n&&(n=!0),o=t.resolve("projects"),i={},n||(i={headers:{"x-lazy-pagination":!0}}),e.get(o,r,i)},n.getProjectBySlug=function(r){var n;return n=t.resolve("projects"),n=n+"/by_slug?slug="+r,e.get(n).then(function(t){return Immutable.fromJS(t.data)})},n.getProjectsByUserId=function(r,n){var i,o,s;return null==n&&(n=!1),s=t.resolve("projects"),i={},n||(i.headers={"x-disable-pagination":"1"}),o={member:r,order_by:"user_order"},e.get(s,o,i).then(function(t){return Immutable.fromJS(t.data)})},n.getProjectStats=function(r){var n;return n=t.resolve("projects"),n=n+"/"+r,e.get(n).then(function(t){return Immutable.fromJS(t.data)})},n.bulkUpdateOrder=function(r){var n;return n=t.resolve("bulk-update-projects-order"),e.post(n,r)},n.getTimeline=function(n,i){var o,s;return o={page:i,only_relevant:!0},s=t.resolve("timeline-project"),s=s+"/"+n,e.get(s,o,{headers:{"x-lazy-pagination":!0}}).then(function(t){return t=Immutable.fromJS(t),r(t)})},n.likeProject=function(r){var n;return n=t.resolve("project-like",r),e.post(n)},n.unlikeProject=function(r){var n;return n=t.resolve("project-unlike",r),e.post(n)},n.watchProject=function(r,n){var i,o;return i={notify_level:n,live_notify_level:n},o=t.resolve("project-watch",r),e.post(o,i)},n.unwatchProject=function(r){var n;return n=t.resolve("project-unwatch",r),e.post(n)},n.contactProject=function(r,n){var i,o;return i={project:r,comment:n},o=t.resolve("project-contact"),e.post(o,i)},n.transferValidateToken=function(r,n){var i,o;return i={token:n},o=t.resolve("project-transfer-validate-token",r),e.post(o,i)},n.transferAccept=function(r,n,i){var o,s;return o={token:n,reason:i},s=t.resolve("project-transfer-accept",r),e.post(s,o)},n.transferReject=function(r,n,i){var o,s;return o={token:n,reason:i},s=t.resolve("project-transfer-reject",r),e.post(s,o)},n.transferRequest=function(r){var n;return n=t.resolve("project-transfer-request",r),e.post(n)},n.transferStart=function(r,n,i){var o,s;return o={user:n,reason:i},s=t.resolve("project-transfer-start",r),e.post(s,o)},function(){return{projects:n}}},t.$inject=["$tgUrls","$tgHttp","tgPaginateResponseService"],e=angular.module("taigaResources2"),e.factory("tgProjectsResources",t)}.call(this),function(){var t,e;e=["tgProjectsResources","tgUserResources","tgUsersResources","tgUserstoriesResource","tgTasksResource","tgIssuesResource","tgExternalAppsResource","tgAttachmentsResource","tgStatsResource","tgHistory","tgEpicsResource","tgTrelloImportResource","tgJiraImportResource","tgGithubImportResource","tgAsanaImportResource"],t=function(t){var r,n,i,o,s,a,c,u,l;for(r=0,i=e.length;r"),$("head").append(r)),r.text(e||"")):0===t.indexOf("og:")?(r=$("head meta[property='"+t+"']"),0===r.length&&(r=$(""),$("head").append(r)),r.attr("content",e||"")):(r=$("head meta[name='"+t+"']"),0===r.length&&(r=$(""),$("head").append(r)),r.attr("content",e||""))},t.prototype.setTitle=function(t){return this._set("title",t)},t.prototype.setDescription=function(t){return this._set("description",r(t,250))},t.prototype.setTwitterMetas=function(t,e){return this._set("twitter:card","summary"),this._set("twitter:site","@taigaio"),this._set("twitter:title",t),this._set("twitter:description",r(e,300)),this._set("twitter:image",window.location.origin+"/"+window._version+"/images/logo-color.png")},t.prototype.setOpenGraphMetas=function(t,e){return this._set("og:type","object"),this._set("og:site_name","Taiga - Love your projects"),this._set("og:title",t),this._set("og:description",r(e,300)),this._set("og:image",window.location.origin+"/"+window._version+"/images/logo-color.png"),this._set("og:url",window.location.href)},t.prototype.setAll=function(t,e){return this.setTitle(t),this.setDescription(e),this.setTwitterMetas(t,e),this.setOpenGraphMetas(t,e)},t.prototype.addMobileViewport=function(){return $("head").append('')},t.prototype.removeMobileViewport=function(){return $('head meta[name="viewport"]').remove()},t.prototype.setfn=function(t){return this.listener&&this._listener(),this._listener=this.rootScope.$watchCollection(t,function(t){return function(e){if(e)return t.setAll(e.title,e.description),t._listener()}}(this))},t}(),angular.module("taigaCommon").service("tgAppMetaService",t)}.call(this),function(){var t,e;e=this.taiga.sizeFormat,t=function(){function t(t,r,n,i){this.confirm=t,this.config=r,this.translate=n,this.rs=i,this.maxFileSize=this.getMaxFileSize(),this.maxFileSize&&(this.maxFileSizeFormated=e(this.maxFileSize))}return t.$inject=["$tgConfirm","$tgConfig","$translate","tgResources"],t.prototype.sizeError=function(t){var r;return r=this.translate.instant("ATTACHMENT.ERROR_MAX_SIZE_EXCEEDED",{fileName:t.name,fileSize:e(t.size),maxFileSize:this.maxFileSizeFormated}),this.confirm.notify("error",r)},t.prototype.validate=function(t){return!(this.maxFileSize&&t.size>this.maxFileSize)||(this.sizeError(t),!1)},t.prototype.getMaxFileSize=function(){return this.config.get("maxUploadFileSize",null)},t.prototype.list=function(t,e,r){return this.rs.attachments.list(t,e,r).then(function(t){return function(t){return t.sortBy(function(t){return t.get("order")})}}(this))},t.prototype["delete"]=function(t,e){return this.rs.attachments["delete"](t,e)},t.prototype.saveError=function(t,e){var r;return r="",t&&(r=this.translate.instant("ATTACHMENT.ERROR_UPLOAD_ATTACHMENT",{fileName:t.name,errorMessage:e.data._error_message})),this.confirm.notify("error",r)},t.prototype.upload=function(t,e,r,n,i){var o;return null==i&&(i=!1),o=this.rs.attachments.create(n,r,e,t,i),o.then(null,this.saveError.bind(this,t)),o},t.prototype.patch=function(t,e,r){var n;return n=this.rs.attachments.patch(e,t,r),n.then(null,this.saveError.bind(this,null)),n},t}(),angular.module("taigaCommon").service("tgAttachmentsService",t)}.call(this),function(){var t,e=function(t,e){return(+t%(e=+e)+e)%e};t=function(){function t(t){var e,r;this.config=t,r=["/"+window._version+"/images/user-avatars/user-avatar-01.png","/"+window._version+"/images/user-avatars/user-avatar-02.png","/"+window._version+"/images/user-avatars/user-avatar-03.png","/"+window._version+"/images/user-avatars/user-avatar-04.png","/"+window._version+"/images/user-avatars/user-avatar-05.png"],e=["rgba( 178, 176, 204, 1 )","rgba( 183, 203, 131, 1 )","rgba( 210, 198, 139, 1 )","rgba( 214, 161, 212, 1 )","rgba( 247, 154, 154, 1 )"],this.logos=_.cartesianProduct(r,e)}return t.prototype.getDefault=function(t){var r,n;return r=e(murmurhash3_32_gc(t,42),this.logos.length),n=this.logos[r],{src:n[0],color:n[1]}},t.prototype.getUnnamed=function(){return{url:"/"+window._version+"/images/unnamed.png",username:""}},t.prototype.getAvatar=function(t,e){var r,n,i,o,s,a,c;return t?(r="photo","avatarBig"===e&&(r="big_photo"),s=null,t instanceof Immutable.Map?(n=t.get("gravatar_id"),s=t.get(r),c="@"+t.get("username")):(n=t.gravatar_id,s=t[r],c="@"+t.username),n?s?{url:s,username:c}:location.host.indexOf("localhost")===-1&&this.config.get("gravatar",!0)?(a=location.protocol+"//"+location.host,i=this.getDefault(n),o=encodeURIComponent(a+i.src),{url:"https://www.gravatar.com/avatar/"+n+"?s=200&d="+o,bg:i.color,username:c}):(a=location.protocol+"//"+location.host,i=this.getDefault(n),{url:a+i.src,bg:i.color,username:c}):this.getUnnamed()):this.getUnnamed()},t}(),angular.module("taigaCommon").service("tgAvatarService",["$tgConfig",t])}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t){this.projectService=t}return t.$inject=["tgProjectService"],t.prototype.check=function(t){return!!this.projectService.project&&this.projectService.project.get("my_permissions").indexOf(t)!==-1},t}(),angular.module("taigaCommon").service("tgCheckPermissionsService",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.groupBy,t=function(){function t(t,e,n){this.projectsService=t,this.storageService=e,this.rs=n,this._user=null,this._projects=Immutable.Map(),this._projectsById=Immutable.Map(),this._joyride=null,r.defineImmutableProperty(this,"projects",function(t){return function(){return t._projects}}(this)),r.defineImmutableProperty(this,"projectsById",function(t){return function(){return t._projectsById}}(this))}return t.$inject=["tgProjectsService","$tgStorage","tgResources"],t.prototype.isAuthenticated=function(){return null!==this.getUser()},t.prototype.getUser=function(){var t;return this._user||(t=this.storageService.get("userInfo"),t&&(t=Immutable.fromJS(t),this.setUser(t))),this._user},t.prototype.removeUser=function(){return this._user=null,this._projects=Immutable.Map(),this._projectsById=Immutable.Map(),this._joyride=null},t.prototype.setUser=function(t){return this._user=t,this._loadUserInfo()},t.prototype.bulkUpdateProjectsOrder=function(t){return this.projectsService.bulkUpdateProjectsOrder(t).then(function(t){return function(){return t.loadProjects()}}(this))},t.prototype.loadProjects=function(){return this.projectsService.getProjectsByUserId(this._user.get("id")).then(function(t){return function(e){return t.setProjects(e)}}(this))},t.prototype.disableJoyRide=function(t){if(this.isAuthenticated())return t?this._joyride[t]=!1:this._joyride={backlog:!1,kanban:!1,dashboard:!1},this.rs.user.setUserStorage("joyride",this._joyride)},t.prototype.loadJoyRideConfig=function(){return new Promise(function(t){return function(e){return null!==t._joyride?void e(t._joyride):t.rs.user.getUserStorage("joyride").then(function(r){return t._joyride=r,e(t._joyride)})["catch"](function(){return t._joyride={backlog:!0,kanban:!0,dashboard:!0},t.rs.user.createUserStorage("joyride",t._joyride),e(t._joyride)})}}(this))},t.prototype._loadUserInfo=function(){return Promise.all([this.loadProjects()])},t.prototype.setProjects=function(t){return this._projects=this._projects.set("all",t),this._projects=this._projects.set("recents",t.slice(0,10)),this._projects=this._projects.set("unblocked",t.filter(function(t){return null===t.toJS().blocked_code})),this._projectsById=Immutable.fromJS(e(t.toJS(),function(t){return t.id})),this.projects},t.prototype.canCreatePrivateProjects=function(){var t;return t=this.getUser(),null!==t.get("max_private_projects")&&t.get("total_private_projects")>=t.get("max_private_projects")?{valid:!1,reason:"max_private_projects",type:"private_project",current:t.get("total_private_projects"),max:t.get("max_private_projects")}:{valid:!0}},t.prototype.canCreatePublicProjects=function(){var t;return t=this.getUser(),null!==t.get("max_public_projects")&&t.get("total_public_projects")>=t.get("max_public_projects")?{valid:!1,reason:"max_public_projects",type:"public_project",current:t.get("total_public_projects"),max:t.get("max_public_projects")}:{valid:!0}},t.prototype.canAddMembersPublicProject=function(t){var e;return e=this.getUser(),null!==e.get("max_memberships_public_projects")&&t>e.get("max_memberships_public_projects")?{valid:!1,reason:"max_members_public_projects",type:"public_project",current:t,max:e.get("max_memberships_public_projects")}:{valid:!0}},t.prototype.canAddMembersPrivateProject=function(t){var e;return e=this.getUser(),null!==e.get("max_memberships_private_projects")&&t>e.get("max_memberships_private_projects")?{valid:!1,reason:"max_members_private_projects",type:"private_project",current:t,max:e.get("max_memberships_private_projects")}:{valid:!0}},t.prototype.canOwnProject=function(t){var e,r,n;if(n=this.getUser(),t.get("is_private")){if(r=this.canCreatePrivateProjects(),!r.valid)return r;if(e=this.canAddMembersPrivateProject(t.get("total_memberships")),!e.valid)return e}else{if(r=this.canCreatePublicProjects(),!r.valid)return r;if(e=this.canAddMembersPublicProject(t.get("total_memberships")),!e.valid)return e}return{valid:!0}},t}(),angular.module("taigaCommon").service("tgCurrentUserService",t)}.call(this),function(){var t,e;e=this.taiga,t=function(){function t(t){this.rootScope=t}return t.$inject=["$rootScope"],t.prototype.init=function(){return this.rootScope.errorHandling={}},t.prototype.notfound=function(){return this.rootScope.errorHandling.showingError=!0,this.rootScope.errorHandling.notfound=!0},t.prototype.error=function(){return this.rootScope.errorHandling.showingError=!0,this.rootScope.errorHandling.error=!0},t.prototype.permissionDenied=function(){return this.rootScope.errorHandling.showingError=!0,this.rootScope.errorHandling.permissionDenied=!0},t.prototype.block=function(){return this.rootScope.errorHandling.showingError=!0,this.rootScope.errorHandling.blocked=!0},t}(),angular.module("taigaCommon").service("tgErrorHandlingService",t)}.call(this),function(){var t;t=function(){function t(t,e){this.rootScope=t,this.compile=e}return t.$inject=["$rootScope","$compile"],t.prototype.create=function(t,e,r){var n,i,o;o=this.rootScope.$new(),o=_.merge(o,r),n=$("
    ").attr(t,!0).attr("tg-bind-scope",!0),e&&n.attr(e),n.addClass("remove-on-close"),i=this.compile(n)(o),$(document.body).append(i)},t}(),angular.module("taigaCommon").service("tgLightboxFactory",t)}.call(this),function(){var t;t=function(){return function(t){var e;return e=Immutable.Map({data:t.get("data"),next:!!t.get("headers")("x-pagination-next"),prev:!!t.get("headers")("x-pagination-prev"),current:t.get("headers")("x-pagination-current"),count:t.get("headers")("x-pagination-count")})}},angular.module("taigaCommon").factory("tgPaginateResponseService",t)}.call(this),function(){var t,e=function(t,e){return(+t%(e=+e)+e)%e};t=function(){function t(){var t,e;e=["/"+window._version+"/images/project-logos/project-logo-01.png","/"+window._version+"/images/project-logos/project-logo-02.png","/"+window._version+"/images/project-logos/project-logo-03.png","/"+window._version+"/images/project-logos/project-logo-04.png","/"+window._version+"/images/project-logos/project-logo-05.png"],t=["rgba( 153, 214, 220, 1 )","rgba( 213, 156, 156, 1 )","rgba( 214, 161, 212, 1 )","rgba( 164, 162, 219, 1 )","rgba( 152, 224, 168, 1 )"],this.logos=_.cartesianProduct(e,t)}return t.prototype.getDefaultProjectLogo=function(t,r){var n,i,o;return i=t+"-"+r,n=e(murmurhash3_32_gc(i,42),this.logos.length),o=this.logos[n],{src:o[0],color:o[1]}},t}(),angular.module("taigaCommon").service("tgProjectLogoService",t)}.call(this),function(){var t,e,r=function(t,e){return function(){return t.apply(e,arguments)}};e=this.taiga,t=function(){function t(t,n,i,o,s){this.rootScope=t,this.projectsService=n,this.xhrError=i,this.userActivityService=o,this.interval=s,this.manageProjectSignal=r(this.manageProjectSignal,this),this._project=null,this._section=null,this._sectionsBreadcrumb=Immutable.List(),this._activeMembers=Immutable.List(),e.defineImmutableProperty(this,"project",function(t){return function(){return t._project}}(this)),e.defineImmutableProperty(this,"section",function(t){return function(){return t._section}}(this)),e.defineImmutableProperty(this,"sectionsBreadcrumb",function(t){return function(){return t._sectionsBreadcrumb}}(this)),e.defineImmutableProperty(this,"activeMembers",function(t){return function(){return t._activeMembers}}(this)),window.localStorage.e2e||this.autoRefresh(),this.watchSignals()}return t.$inject=["$rootScope","tgProjectsService","tgXhrErrorService","tgUserActivityService","$interval"],t.prototype.watchSignals=function(){var t,e,r,n,i;for(t=["admin:project-modules:updated","admin:project-roles:updated","admin:project-default-values:updated","admin:project-values:updated","admin:project-values:move","admin:project-custom-attributes:updated","sprintform:create:success","sprintform:edit:success","sprintform:remove:success","tags:updated"],n=[],e=0,r=t.length;e"),$("head").append(e)),e.attr("href","/"+window._version+"/styles/theme-"+t+".css")}}}),angular.module("taigaCommon").service("tgThemeService",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.groupBy,t=function(){function t(t){return this.timeout=t,window.localStorage.e2e?null:(window.addEventListener("mousemove",this.resetTimer.bind(this),!1),window.addEventListener("mousedown",this.resetTimer.bind(this),!1),window.addEventListener("keypress",this.resetTimer.bind(this),!1),window.addEventListener("mousewheel",this.resetTimer.bind(this),!1),window.addEventListener("touchmove",this.resetTimer.bind(this),!1),this.subscriptionsActive=[],this.subscriptionsInactive=[],this.isActive=!0,void this.startTimer())}return t.$inject=["$timeout"],t.prototype.idleTimeout=3e5,t.prototype.startTimer=function(){return this.timerId=this.timeout(this._fireInactive.bind(this),this.idleTimeout)},t.prototype.resetTimer=function(){return this.isActive||this._fireActive(),this.timeout.cancel(this.timerId),this.startTimer(),this.isActive=!0},t.prototype.onActive=function(t){return this.subscriptionsActive.push(t),this._unSubscriptionsActive.bind(this,t)},t.prototype.onInactive=function(t){return this.subscriptionsInactive.push(t),this._unSubscriptionsInactive.bind(this,t)},t.prototype._fireActive=function(){return this.subscriptionsActive.forEach(function(t){return t()})},t.prototype._fireInactive=function(){return this.isActive=!1,this.subscriptionsInactive.forEach(function(t){return t()})},t.prototype._unSubscriptionsActive=function(t){return this.subscriptionsActive=this.subscriptionsActive.filter(function(e){return e!==t})},t.prototype._unSubscriptionsInactive=function(t){return this.subscriptionsInactive=this.subscriptionsInactive.filter(function(e){return e!==t})},t}(),angular.module("taigaCommon").service("tgUserActivityService",t)}.call(this),function(){var t,e,r;r=this.taiga,e=this.taiga.normalizeString,t=function(){function t(t,e){this.currentUserService=t,this.projectService=e}return t.$inject=["tgCurrentUserService","tgProjectService"],t.prototype.filterUsers=function(t,r){var n;return n=r.full_name_display.toUpperCase(),n=e(n),t=t.toUpperCase(),t=e(t),_.includes(n,t)},t.prototype.searchUsers=function(t,e){var r;return this.currentUser=this.currentUserService.getUser(),r=_.clone(this.projectService.activeMembers.toJS(),!0),e&&(r=_.reject(r,{id:e.id})),r=_.sortBy(r,function(t){return function(e){var r;return e.id===(null!=(r=t.currentUser)?r.get("id"):void 0)?0:e.id}}(this)),null!=t&&(r=_.filter(r,_.partial(this.filterUsers,t))),r},t}(),angular.module("taigaCommon").service("tgUserListService",t)}.call(this),function(){var t,e,r,n=function(t,e){function r(){this.constructor=t}for(var n in e)i.call(e,n)&&(t[n]=e[n]);return r.prototype=e.prototype,t.prototype=new r,t.__super__=e.prototype,t},i={}.hasOwnProperty;r=this.taiga,e=r.bindMethods,t=function(t){function r(t){this.rs=t,e(this)}return n(r,t),r.$inject=["tgResources"],r.prototype.getUserByUserName=function(t){return this.rs.users.getUserByUsername(t)},r.prototype.getContacts=function(t,e){return this.rs.users.getContacts(t,e)},r.prototype.getLiked=function(t,e,r,n){return this.rs.users.getLiked(t,e,r,n)},r.prototype.getVoted=function(t,e,r,n){return this.rs.users.getVoted(t,e,r,n)},r.prototype.getWatched=function(t,e,r,n){return this.rs.users.getWatched(t,e,r,n)},r.prototype.getStats=function(t){return this.rs.users.getStats(t)},r.prototype.attachUserContactsToProjects=function(t,e){return this.getContacts(t).then(function(t){return e=e.map(function(e){var r;return r=t.filter(function(t){var r;return r=t.get("id"),e.get("members").indexOf(r)!==-1}),e=e.set("contacts",r)})})},r}(r.Service),angular.module("taigaCommon").service("tgUserService",t)}.call(this),function(){var t,e=function(t,e){function n(){this.constructor=t}for(var i in e)r.call(e,i)&&(t[i]=e[i]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t},r={}.hasOwnProperty;t=function(t){function r(t,e){this.q=t,this.errorHandlingService=e}return e(r,t),r.$inject=["$q","tgErrorHandlingService"],r.prototype.notFound=function(){return this.errorHandlingService.notfound()},r.prototype.permissionDenied=function(){return this.errorHandlingService.permissionDenied()},r.prototype.response=function(t){return t&&(404===t.status?this.notFound():403===t.status&&this.permissionDenied()),this.q.reject(t)},r}(taiga.Service),angular.module("taigaCommon").service("tgXhrErrorService",t)}.call(this),function(){var t;t=function(t,e){var r,n,i;return i=[".jpg",".jpeg",".bmp",".gif",".png"],r=function(t){return t=t.toLowerCase(),_.some(i,function(e){return t.indexOf(e,t-e.length)!==-1})},n=function(n,i){var o,s;return o=r(n.attachment.get("url")),s=o?t.get("user-timeline/user-timeline-attachment/user-timeline-attachment-image.html"):t.get("user-timeline/user-timeline-attachment/user-timeline-attachment.html"),i.html(s),e(i.contents())(n),i.find("img").error(function(){return this.remove()})},{link:n,scope:{attachment:"=tgUserTimelineAttachment"}}},t.$inject=["$tgTemplate","$compile"],angular.module("taigaUserTimeline").directive("tgUserTimelineAttachment",t)}.call(this),function(){var t,e;e=this.taiga.unslugify,t=function(){function t(t,e){this.translate=t,this.sce=e}return t.$inject=["$translate","$sce"],t.prototype._fieldTranslationKey={status:"COMMON.FIELDS.STATUS",subject:"COMMON.FIELDS.SUBJECT",description_diff:"COMMON.FIELDS.DESCRIPTION",points:"COMMON.FIELDS.POINTS",assigned_to:"COMMON.FIELDS.ASSIGNED_TO",assigned_users:"COMMON.FIELDS.ASSIGNED_USERS",severity:"ISSUES.FIELDS.SEVERITY",priority:"ISSUES.FIELDS.PRIORITY",type:"ISSUES.FIELDS.TYPE",is_iocaine:"TASK.FIELDS.IS_IOCAINE",is_blocked:"COMMON.FIELDS.IS_BLOCKED",color:"COMMON.FIELDS.COLOR",due_date:"COMMON.FIELDS.DUE_DATE",due_date_reason:"COMMON.FIELDS.DUE_DATE_REASON",milestone:"COMMON.FIELDS.SPRINT"},t.prototype._params={username:function(t,e){var r,n,i;return i=t.getIn(["data","user"]),i.get("is_profile_visible")?(r=this.translate.instant("COMMON.SEE_USER_PROFILE",{username:i.get("username")}),n="user-profile:username=timeline.getIn(['data', 'user', 'username'])",this._getLink(n,i.get("name"),r)):this._getUsernameSpan(i.get("name"))},field_name:function(t,e){var r;return r=t.getIn(["data","value_diff","key"]),this.translate.instant(this._fieldTranslationKey[r])},project_name:function(t,e){var r;return r="project:project=timeline.getIn(['data', 'project', 'slug'])",this._getLink(r,t.getIn(["data","project","name"]))},new_value:function(t,e){var r,n,i;return _.isArray(t.getIn(["data","value_diff","value"]).toJS())?(i=t.getIn(["data","value_diff","value"]).get(1),null===i&&"assigned_to"===t.getIn(["data","value_diff","key"])&&(i=this.translate.instant("ACTIVITY.VALUES.UNASSIGNED")),null===i&&"assigned_users"===t.getIn(["data","value_diff","key"])?i=this.translate.instant("ACTIVITY.VALUES.UNASSIGNED"):"due_date"===t.getIn(["data","value_diff","key"])&&(i?(n=this.translate.instant("COMMON.PICKERDATE.FORMAT"),i=moment(i,"YYYY-MM-DD").format(n)):i=this.translate.instant("ACTIVITY.VALUES.NOT_SET")),r=i):r=t.getIn(["data","value_diff","value"]).first().get(1),$("").attr("ng-non-bindable",!0).text(r).prop("outerHTML")},sprint_name:function(t,e){var r;return r="project-taskboard:project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['data', 'milestone', 'slug'])",this._getLink(r,t.getIn(["data","milestone","name"]))},us_name:function(t,e){var r,n,i,o;return n=this._getTimelineObj(t,e).get("userstory"),r={obj:"parent_userstory"},o=this._getDetailObjUrl(r),i="#"+n.get("ref")+" "+n.get("subject"),this._getLink(o,i)},related_us_name:function(t,e){var r,n,i;return r=t.getIn(["data","userstory"]),i="project-userstories-detail:project=timeline.getIn(['data', 'userstory', 'project', 'slug']),ref=timeline.getIn(['data', 'userstory', 'ref'])",n="#"+r.get("ref")+" "+r.get("subject"),this._getLink(i,n)},epic_name:function(t,e){var r,n,i;return r=t.getIn(["data","epic"]),i="project-epics-detail:project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['data', 'epic', 'ref'])",n="#"+r.get("ref")+" "+r.get("subject"),this._getLink(i,n)},obj_name:function(t,r){var n,i,o;return n=this._getTimelineObj(t,r),o=this._getDetailObjUrl(r),i="wikipage"===r.obj?e(n.get("slug")):"milestone"===r.obj?n.get("name"):"#"+n.get("ref")+" "+n.get("subject"),this._getLink(o,i)},role_name:function(t,e){return _.escape(t.getIn(["data","value_diff","value"]).keySeq().first())}},t.prototype._translateTitleParams=function(t,e,r){return this._params[t].call(this,e,r)},t.prototype._getTimelineObj=function(t,e){return t.getIn(["data",e.obj])},t.prototype._getDetailObjUrl=function(t){var e;return e={issue:["project-issues-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])"],wikipage:["project-wiki-page",":project=timeline.getIn(['data', 'project', 'slug']),slug=timeline.getIn(['obj', 'slug'])"],task:["project-tasks-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])"],userstory:["project-userstories-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])"],parent_userstory:["project-userstories-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'userstory', 'ref'])"],milestone:["project-taskboard",":project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['obj', 'slug'])"],epic:["project-epics-detail",":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])"]},e[t.obj][0]+e[t.obj][1]},t.prototype._getLink=function(t,e,r){var n;return r=r||e,n=$("").attr("ng-non-bindable",!0).text(e),$("").attr("tg-nav",t).append(n).prop("outerHTML")},t.prototype._getUsernameSpan=function(t){var e;return e=e||t,$("").addClass("username").text(t).prop("outerHTML")},t.prototype._getParams=function(t,e,r){var n;return n={},r.translate_params.forEach(function(r){return function(i){return n[i]=r._translateTitleParams(i,t,e)}}(this)),n},t.prototype.getTitle=function(t,e,r){var n,i,o;return n=this._getParams(t,e,r),i={},Object.keys(n).forEach(function(t){return i[t]="{{"+t+"}}"}),o=this.translate.instant(r.key,i),Object.keys(n).forEach(function(t){var e;return e="{{"+t+"}}",o=o.replace(new RegExp(e,"g"),n[t])}),o},t}(),angular.module("taigaUserTimeline").service("tgUserTimelineItemTitle",t)}.call(this),function(){var t,e;e=function(t,e){var r;return r=[{check:function(t,e){return"membership"===e.obj},key:"TIMELINE.NEW_MEMBER",translate_params:["project_name"],member:function(t){return Immutable.Map({user:t.getIn(["data","user"]),role:t.getIn(["data","role"])})}},{check:function(t,e){return"project"===e.obj&&"create"===e.type},key:"TIMELINE.NEW_PROJECT",translate_params:["username","project_name"],description:function(t){return t.getIn(["data","project","description"])}},{check:function(t,e){return"change"===e.type&&t.hasIn(["data","value_diff"])&&"attachments"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.UPLOAD_ATTACHMENT",translate_params:["username","obj_name"]},{check:function(t,e){return"userstory"===e.obj&&"create"===e.type},key:"TIMELINE.US_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"issue"===e.obj&&"create"===e.type},key:"TIMELINE.ISSUE_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"wikipage"===e.obj&&"create"===e.type},key:"TIMELINE.WIKI_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"task"===e.obj&&"create"===e.type&&!t.getIn(["data","task","userstory"])},key:"TIMELINE.TASK_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"task"===e.obj&&"create"===e.type&&t.getIn(["data","task","userstory"])},key:"TIMELINE.TASK_CREATED_WITH_US",translate_params:["username","project_name","obj_name","us_name"]},{check:function(t,e){return"milestone"===e.obj&&"create"===e.type},key:"TIMELINE.MILESTONE_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"epic"===e.obj&&"create"===e.type},key:"TIMELINE.EPIC_CREATED",translate_params:["username","project_name","obj_name"]},{check:function(t,e){return"relateduserstory"===e.obj&&"create"===e.type},key:"TIMELINE.EPIC_RELATED_USERSTORY_CREATED",translate_params:["username","project_name","related_us_name","epic_name"]},{check:function(t,e){return t.getIn(["data","comment"])&&"userstory"===e.obj},key:"TIMELINE.NEW_COMMENT_US",translate_params:["username","obj_name"],description:function(t){var e;return e=t.getIn(["data","comment_html"]),$($.parseHTML(e)).text()}},{check:function(t,e){return t.getIn(["data","comment"])&&"issue"===e.obj},key:"TIMELINE.NEW_COMMENT_ISSUE",translate_params:["username","obj_name"],description:function(t){var e;return e=t.getIn(["data","comment_html"]),$($.parseHTML(e)).text()}},{check:function(t,e){return t.getIn(["data","comment"])&&"task"===e.obj},key:"TIMELINE.NEW_COMMENT_TASK",translate_params:["username","obj_name"],description:function(t){var e;return e=t.getIn(["data","comment_html"]),$($.parseHTML(e)).text()}},{check:function(t,e){return t.getIn(["data","comment"])&&"epic"===e.obj},key:"TIMELINE.NEW_COMMENT_EPIC",translate_params:["username","obj_name"],description:function(t){var e;return e=t.getIn(["data","comment_html"]),$($.parseHTML(e)).text()}},{check:function(t,e){return t.hasIn(["data","value_diff"])&&"moveInBacklog"===t.getIn(["data","value_diff","key"])&&t.hasIn(["data","value_diff","value","backlog_order"])&&"change"===e.type},key:"TIMELINE.US_MOVED",translate_params:["username","obj_name"]},{check:function(t,e){return!(!t.hasIn(["data","value_diff"])||"moveInBacklog"!==t.getIn(["data","value_diff","key"])||"change"!==e.type||"userstory"!==e.obj)&&null===t.getIn(["data","value_diff","value","milestone"]).get(1)},key:"TIMELINE.US_REMOVED_FROM_MILESTONE",translate_params:["username","obj_name"]},{check:function(t,e){return t.hasIn(["data","value_diff"])&&"moveInBacklog"===t.getIn(["data","value_diff","key"])&&"change"===e.type&&"userstory"===e.obj},key:"TIMELINE.US_ADDED_MILESTONE",translate_params:["username","obj_name","sprint_name"]},{check:function(t,e){return!(!t.hasIn(["data","value_diff"])||"blocked"!==t.getIn(["data","value_diff","key"])||"change"!==e.type)&&t.getIn(["data","value_diff","value","is_blocked"]).get(1)===!0},key:"TIMELINE.BLOCKED",translate_params:["username","obj_name"],description:function(t){var e;return!!t.hasIn(["data","value_diff","value","blocked_note_html"])&&(e=t.getIn(["data","value_diff","value","blocked_note_html"]).get(1),$($.parseHTML(e)).text())}},{check:function(t,e){return!(!t.hasIn(["data","value_diff"])||"blocked"!==t.getIn(["data","value_diff","key"])||"change"!==e.type)&&t.getIn(["data","value_diff","value","is_blocked"]).get(1)===!1},key:"TIMELINE.UNBLOCKED",translate_params:["username","obj_name"]},{check:function(t,e){return"milestone"===e.obj&&"change"===e.type},key:"TIMELINE.MILESTONE_UPDATED",translate_params:["username","obj_name"]},{check:function(t,e){return"wikipage"===e.obj&&"change"===e.type},key:"TIMELINE.WIKI_UPDATED",translate_params:["username","obj_name"]},{check:function(t,e){return"userstory"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"points"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.US_UPDATED_POINTS",translate_params:["username","field_name","obj_name","new_value","role_name"]},{check:function(t,e){return"userstory"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.US_UPDATED",translate_params:["username","field_name","obj_name"]},{check:function(t,e){return"userstory"===e.obj&&"change"===e.type},key:"TIMELINE.US_UPDATED_WITH_NEW_VALUE",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"issue"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.ISSUE_UPDATED",translate_params:["username","field_name","obj_name"]},{check:function(t,e){return"issue"===e.obj&&"change"===e.type},key:"TIMELINE.ISSUE_UPDATED_WITH_NEW_VALUE",translate_params:["username","field_name","obj_name","new_value"] +},{check:function(t,e){return"task"===e.obj&&"change"===e.type&&!t.getIn(["data","task","userstory"])&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.TASK_UPDATED",translate_params:["username","field_name","obj_name"]},{check:function(t,e){return"task"===e.obj&&"change"===e.type&&t.getIn(["data","task","userstory"])&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.TASK_UPDATED_WITH_US",translate_params:["username","field_name","obj_name","us_name"]},{check:function(t,e){return"task"===e.obj&&"change"===e.type&&!t.getIn(["data","task","userstory"])},key:"TIMELINE.TASK_UPDATED_WITH_NEW_VALUE",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"task"===e.obj&&"change"===e.type&&t.getIn(["data","task","userstory"])},key:"TIMELINE.TASK_UPDATED_WITH_US_NEW_VALUE",translate_params:["username","field_name","obj_name","us_name","new_value"]},{check:function(t,e){return"epic"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"description_diff"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.EPIC_UPDATED",translate_params:["username","field_name","obj_name"]},{check:function(t,e){return"epic"===e.obj&&"change"===e.type&&t.hasIn(["data","value_diff"])&&"color"===t.getIn(["data","value_diff","key"])},key:"TIMELINE.EPIC_UPDATED_WITH_NEW_COLOR",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"epic"===e.obj&&"change"===e.type},key:"TIMELINE.EPIC_UPDATED_WITH_NEW_VALUE",translate_params:["username","field_name","obj_name","new_value"]},{check:function(t,e){return"user"===e.obj&&"create"===e.type},key:"TIMELINE.NEW_USER",translate_params:["username"]}],_.find(r,function(r){return r.check(t,e)})},t=function(){function t(){}return t.prototype.getType=function(t,r){return e(t,r)},t}(),angular.module("taigaUserTimeline").service("tgUserTimelineItemType",t)}.call(this),function(){var t;t=function(){return{templateUrl:"user-timeline/user-timeline-item/user-timeline-item.html",scope:{timeline:"=tgUserTimelineItem"}}},angular.module("taigaUserTimeline").directive("tgUserTimelineItem",t)}.call(this),function(){var t;t=function(){var t;return t={},t.generate=function(t){var e,r,n,i;return i=1,r=Immutable.List(),t.minItems=t.minItems||20,n=function(){return r=Immutable.List(),e()},e=function(){return t.fetch(i).then(function(n){var o,s;return i++,o=n.get("data"),t.filter&&(o=t.filter(o)),t.map&&(o=o.map(t.map)),r=r.concat(o),r.size.\n *\n * File: app.coffee\n */\n\n(function() {\n var configure, i18nInit, init, module, modules, pluginsModules, pluginsWithModule, taiga;\n\n this.taiga = taiga = {};\n\n taiga.emojis = window.emojis;\n\n this.taigaContribPlugins = this.taigaContribPlugins || window.taigaContribPlugins || [];\n\n taiga.generateHash = function(components) {\n if (components == null) {\n components = [];\n }\n components = _.map(components, function(x) {\n return JSON.stringify(x);\n });\n return hex_sha1(components.join(\":\"));\n };\n\n taiga.generateUniqueSessionIdentifier = function() {\n var date, randomNumber;\n date = (new Date()).getTime();\n randomNumber = Math.floor(Math.random() * 0x9000000);\n return taiga.generateHash([date, randomNumber]);\n };\n\n taiga.sessionId = taiga.generateUniqueSessionIdentifier();\n\n configure = function($routeProvider, $locationProvider, $httpProvider, $provide, $tgEventsProvider, $compileProvider, $translateProvider, $translatePartialLoaderProvider, $animateProvider) {\n var authHttpIntercept, blockingIntercept, decorators, defaultHeaders, loaderIntercept, originalWhen, preferedLangCode, userInfo, versionCheckHttpIntercept;\n $animateProvider.classNameFilter(/^(?:(?!ng-animate-disabled).)*$/);\n originalWhen = $routeProvider.when;\n $routeProvider.when = function(path, route) {\n route.resolve || (route.resolve = {});\n angular.extend(route.resolve, {\n languageLoad: [\n \"$q\", \"$translate\", function($q, $translate) {\n var deferred;\n deferred = $q.defer();\n $translate().then(function() {\n return deferred.resolve();\n });\n return deferred.promise;\n }\n ],\n projectLoaded: [\n \"$q\", \"tgProjectService\", \"$route\", function($q, projectService, $route) {\n var deferred, ref;\n deferred = $q.defer();\n projectService.setSection((ref = $route.current.$$route) != null ? ref.section : void 0);\n if ($route.current.params.pslug) {\n projectService.setProjectBySlug($route.current.params.pslug).then(deferred.resolve);\n } else {\n projectService.cleanProject();\n deferred.resolve();\n }\n return deferred.promise;\n }\n ]\n });\n return originalWhen.call($routeProvider, path, route);\n };\n $routeProvider.when(\"/\", {\n templateUrl: \"home/home.html\",\n controller: \"Home\",\n controllerAs: \"vm\",\n loader: true,\n title: \"HOME.PAGE_TITLE\",\n loader: true,\n description: \"HOME.PAGE_DESCRIPTION\",\n joyride: \"dashboard\"\n });\n $routeProvider.when(\"/discover\", {\n templateUrl: \"discover/discover-home/discover-home.html\",\n controller: \"DiscoverHome\",\n controllerAs: \"vm\",\n title: \"PROJECT.NAVIGATION.DISCOVER\",\n loader: true\n });\n $routeProvider.when(\"/discover/search\", {\n templateUrl: \"discover/discover-search/discover-search.html\",\n title: \"PROJECT.NAVIGATION.DISCOVER\",\n loader: true,\n controller: \"DiscoverSearch\",\n controllerAs: \"vm\",\n reloadOnSearch: false\n });\n $routeProvider.when(\"/projects/\", {\n templateUrl: \"projects/listing/projects-listing.html\",\n access: {\n requiresLogin: true\n },\n title: \"PROJECTS.PAGE_TITLE\",\n description: \"PROJECTS.PAGE_DESCRIPTION\",\n loader: true,\n controller: \"ProjectsListing\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/project/new\", {\n title: \"PROJECT.CREATE.TITLE\",\n templateUrl: \"projects/create/create-project.html\",\n loader: true,\n controller: \"CreateProjectCtrl\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/project/new/scrum\", {\n title: \"PROJECT.CREATE.TITLE\",\n template: \"\",\n loader: true\n });\n $routeProvider.when(\"/project/new/kanban\", {\n title: \"PROJECT.CREATE.TITLE\",\n template: \"\",\n loader: true\n });\n $routeProvider.when(\"/project/new/duplicate\", {\n title: \"PROJECT.CREATE.TITLE\",\n template: \"\",\n loader: true\n });\n $routeProvider.when(\"/project/new/import/:platform?\", {\n title: \"PROJECT.CREATE.TITLE\",\n template: \"\",\n loader: true\n });\n $routeProvider.when(\"/project/:pslug/\", {\n template: \"\",\n loader: true,\n controller: \"ProjectRouter\"\n });\n $routeProvider.when(\"/project/:pslug/timeline\", {\n templateUrl: \"projects/project/project.html\",\n loader: true,\n controller: \"Project\",\n controllerAs: \"vm\",\n section: \"project-timeline\"\n });\n $routeProvider.when(\"/project/:pslug/t/:ref\", {\n loader: true,\n controller: \"DetailController\",\n template: \"\"\n });\n $routeProvider.when(\"/project/:pslug/search\", {\n templateUrl: \"search/search.html\",\n reloadOnSearch: false,\n section: \"search\",\n loader: true\n });\n $routeProvider.when(\"/project/:pslug/epics\", {\n section: \"epics\",\n templateUrl: \"epics/dashboard/epics-dashboard.html\",\n loader: true,\n controller: \"EpicsDashboardCtrl\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/project/:pslug/epic/:epicref\", {\n templateUrl: \"epic/epic-detail.html\",\n loader: true,\n section: \"epics\"\n });\n $routeProvider.when(\"/project/:pslug/backlog\", {\n templateUrl: \"backlog/backlog.html\",\n loader: true,\n section: \"backlog\",\n joyride: \"backlog\"\n });\n $routeProvider.when(\"/project/:pslug/kanban\", {\n templateUrl: \"kanban/kanban.html\",\n loader: true,\n section: \"kanban\",\n joyride: \"kanban\"\n });\n $routeProvider.when(\"/project/:pslug/taskboard/:sslug\", {\n templateUrl: \"taskboard/taskboard.html\",\n loader: true,\n section: \"backlog\"\n });\n $routeProvider.when(\"/project/:pslug/us/:usref\", {\n templateUrl: \"us/us-detail.html\",\n loader: true,\n section: \"backlog-kanban\"\n });\n $routeProvider.when(\"/project/:pslug/task/:taskref\", {\n templateUrl: \"task/task-detail.html\",\n loader: true,\n section: \"backlog-kanban\"\n });\n $routeProvider.when(\"/project/:pslug/wiki\", {\n redirectTo: function(params) {\n return \"/project/\" + params.pslug + \"/wiki/home\";\n }\n });\n $routeProvider.when(\"/project/:pslug/wiki-list\", {\n templateUrl: \"wiki/wiki-list.html\",\n loader: true,\n section: \"wiki\"\n });\n $routeProvider.when(\"/project/:pslug/wiki/:slug\", {\n templateUrl: \"wiki/wiki.html\",\n loader: true,\n section: \"wiki\"\n });\n $routeProvider.when(\"/project/:pslug/team\", {\n templateUrl: \"team/team.html\",\n loader: true,\n section: \"team\"\n });\n $routeProvider.when(\"/project/:pslug/issues\", {\n templateUrl: \"issue/issues.html\",\n loader: true,\n section: \"issues\"\n });\n $routeProvider.when(\"/project/:pslug/issue/:issueref\", {\n templateUrl: \"issue/issues-detail.html\",\n loader: true,\n section: \"issues\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/details\", {\n templateUrl: \"admin/admin-project-profile.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/default-values\", {\n templateUrl: \"admin/admin-project-default-values.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/modules\", {\n templateUrl: \"admin/admin-project-modules.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/export\", {\n templateUrl: \"admin/admin-project-export.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-profile/reports\", {\n templateUrl: \"admin/admin-project-reports.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/status\", {\n templateUrl: \"admin/admin-project-values-status.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/points\", {\n templateUrl: \"admin/admin-project-values-points.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/priorities\", {\n templateUrl: \"admin/admin-project-values-priorities.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/severities\", {\n templateUrl: \"admin/admin-project-values-severities.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/types\", {\n templateUrl: \"admin/admin-project-values-types.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/custom-fields\", {\n templateUrl: \"admin/admin-project-values-custom-fields.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/tags\", {\n templateUrl: \"admin/admin-project-values-tags.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/project-values/due-dates\", {\n templateUrl: \"admin/admin-project-values-due-dates.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/memberships\", {\n templateUrl: \"admin/admin-memberships.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/roles\", {\n templateUrl: \"admin/admin-roles.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/webhooks\", {\n templateUrl: \"admin/admin-third-parties-webhooks.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/github\", {\n templateUrl: \"admin/admin-third-parties-github.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/gitlab\", {\n templateUrl: \"admin/admin-third-parties-gitlab.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/bitbucket\", {\n templateUrl: \"admin/admin-third-parties-bitbucket.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/third-parties/gogs\", {\n templateUrl: \"admin/admin-third-parties-gogs.html\",\n section: \"admin\"\n });\n $routeProvider.when(\"/project/:pslug/admin/contrib/:plugin\", {\n templateUrl: \"contrib/main.html\"\n });\n $routeProvider.when(\"/project/:pslug/transfer/:token\", {\n templateUrl: \"projects/transfer/transfer-page.html\",\n loader: true,\n controller: \"Project\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/user-settings/user-profile\", {\n templateUrl: \"user/user-profile.html\"\n });\n $routeProvider.when(\"/user-settings/user-change-password\", {\n templateUrl: \"user/user-change-password.html\"\n });\n $routeProvider.when(\"/user-settings/user-project-settings\", {\n templateUrl: \"user/user-project-settings.html\"\n });\n $routeProvider.when(\"/user-settings/mail-notifications\", {\n templateUrl: \"user/mail-notifications.html\"\n });\n $routeProvider.when(\"/user-settings/live-notifications\", {\n templateUrl: \"user/live-notifications.html\"\n });\n $routeProvider.when(\"/user-settings/web-notifications\", {\n templateUrl: \"user/web-notifications.html\"\n });\n $routeProvider.when(\"/change-email/:email_token\", {\n templateUrl: \"user/change-email.html\"\n });\n $routeProvider.when(\"/cancel-account/:cancel_token\", {\n templateUrl: \"user/cancel-account.html\"\n });\n $routeProvider.when(\"/user-settings/contrib/:plugin\", {\n templateUrl: \"contrib/user-settings.html\"\n });\n $routeProvider.when(\"/profile\", {\n templateUrl: \"profile/profile.html\",\n loader: true,\n access: {\n requiresLogin: true\n },\n controller: \"Profile\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/notifications\", {\n templateUrl: \"notifications/notifications.html\",\n loader: true,\n access: {\n requiresLogin: true\n },\n controller: \"Notifications\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/profile/:slug\", {\n templateUrl: \"profile/profile.html\",\n loader: true,\n controller: \"Profile\",\n controllerAs: \"vm\"\n });\n $routeProvider.when(\"/login\", {\n templateUrl: \"auth/login.html\",\n title: \"LOGIN.PAGE_TITLE\",\n description: \"LOGIN.PAGE_DESCRIPTION\",\n disableHeader: true,\n controller: \"LoginPage\"\n });\n $routeProvider.when(\"/register\", {\n templateUrl: \"auth/register.html\",\n title: \"REGISTER.PAGE_TITLE\",\n description: \"REGISTER.PAGE_DESCRIPTION\",\n disableHeader: true\n });\n $routeProvider.when(\"/forgot-password\", {\n templateUrl: \"auth/forgot-password.html\",\n title: \"FORGOT_PASSWORD.PAGE_TITLE\",\n description: \"FORGOT_PASSWORD.PAGE_DESCRIPTION\",\n disableHeader: true\n });\n $routeProvider.when(\"/change-password/:token\", {\n templateUrl: \"auth/change-password-from-recovery.html\",\n title: \"CHANGE_PASSWORD.PAGE_TITLE\",\n description: \"CHANGE_PASSWORD.PAGE_TITLE\",\n disableHeader: true\n });\n $routeProvider.when(\"/invitation/:token\", {\n templateUrl: \"auth/invitation.html\",\n title: \"INVITATION.PAGE_TITLE\",\n description: \"INVITATION.PAGE_DESCRIPTION\",\n disableHeader: true\n });\n $routeProvider.when(\"/external-apps\", {\n templateUrl: \"external-apps/external-app.html\",\n title: \"EXTERNAL_APP.PAGE_TITLE\",\n description: \"EXTERNAL_APP.PAGE_DESCRIPTION\",\n controller: \"ExternalApp\",\n controllerAs: \"vm\",\n disableHeader: true,\n mobileViewport: true\n });\n $routeProvider.when(\"/blocked-project/:pslug/\", {\n templateUrl: \"projects/project/blocked-project.html\",\n loader: true\n });\n $routeProvider.when(\"/error\", {\n templateUrl: \"error/error.html\"\n });\n $routeProvider.when(\"/not-found\", {\n templateUrl: \"error/not-found.html\"\n });\n $routeProvider.when(\"/permission-denied\", {\n templateUrl: \"error/permission-denied.html\"\n });\n $routeProvider.otherwise({\n templateUrl: \"error/not-found.html\"\n });\n $locationProvider.html5Mode({\n enabled: true,\n requireBase: false\n });\n defaultHeaders = {\n \"Content-Type\": \"application/json\",\n \"Accept-Language\": window.taigaConfig.defaultLanguage || \"en\",\n \"X-Session-Id\": taiga.sessionId\n };\n $httpProvider.defaults.headers[\"delete\"] = defaultHeaders;\n $httpProvider.defaults.headers.patch = defaultHeaders;\n $httpProvider.defaults.headers.post = defaultHeaders;\n $httpProvider.defaults.headers.put = defaultHeaders;\n $httpProvider.defaults.headers.get = {\n \"X-Session-Id\": taiga.sessionId\n };\n $httpProvider.useApplyAsync(true);\n $tgEventsProvider.setSessionId(taiga.sessionId);\n authHttpIntercept = function($q, $location, $navUrls, $lightboxService, errorHandlingService) {\n var httpResponseError;\n httpResponseError = function(response) {\n var nextUrl, search;\n if (response.status === 0 || (response.status === -1 && !response.config.cancelable)) {\n $lightboxService.closeAll();\n errorHandlingService.error();\n } else if (response.status === 401 && $location.url().indexOf('/login') === -1) {\n nextUrl = $location.url();\n search = $location.search();\n if (search.force_next) {\n $location.url($navUrls.resolve(\"login\")).search(\"force_next\", search.force_next);\n } else {\n $location.url($navUrls.resolve(\"login\")).search({\n \"unauthorized\": true,\n \"next\": nextUrl\n });\n }\n }\n return $q.reject(response);\n };\n return {\n responseError: httpResponseError\n };\n };\n $provide.factory(\"authHttpIntercept\", [\"$q\", \"$location\", \"$tgNavUrls\", \"lightboxService\", \"tgErrorHandlingService\", authHttpIntercept]);\n $httpProvider.interceptors.push(\"authHttpIntercept\");\n loaderIntercept = function($q, loaderService) {\n return {\n request: function(config) {\n loaderService.logRequest();\n return config;\n },\n requestError: function(rejection) {\n loaderService.logResponse();\n return $q.reject(rejection);\n },\n responseError: function(rejection) {\n loaderService.logResponse();\n return $q.reject(rejection);\n },\n response: function(response) {\n loaderService.logResponse();\n return response;\n }\n };\n };\n $provide.factory(\"loaderIntercept\", [\"$q\", \"tgLoader\", loaderIntercept]);\n $httpProvider.interceptors.push(\"loaderIntercept\");\n versionCheckHttpIntercept = function($q) {\n var httpResponseError;\n httpResponseError = function(response) {\n var $injector;\n if (response.status === 400 && response.data.version) {\n $injector = angular.element(\"body\").injector();\n $injector.invoke([\n \"$tgConfirm\", \"$translate\", (function(_this) {\n return function($confirm, $translate) {\n var versionErrorMsg;\n versionErrorMsg = $translate.instant(\"ERROR.VERSION_ERROR\");\n return $confirm.notify(\"error\", versionErrorMsg, null, 10000);\n };\n })(this)\n ]);\n }\n return $q.reject(response);\n };\n return {\n responseError: httpResponseError\n };\n };\n $provide.factory(\"versionCheckHttpIntercept\", [\"$q\", versionCheckHttpIntercept]);\n $httpProvider.interceptors.push(\"versionCheckHttpIntercept\");\n blockingIntercept = function($q, errorHandlingService) {\n var redirectToBlockedPage, responseError, responseOk;\n redirectToBlockedPage = function() {\n return errorHandlingService.block();\n };\n responseOk = function(response) {\n if (response.data.blocked_code) {\n redirectToBlockedPage();\n }\n return response;\n };\n responseError = function(response) {\n if (response.status === 451) {\n redirectToBlockedPage();\n }\n return $q.reject(response);\n };\n return {\n response: responseOk,\n responseError: responseError\n };\n };\n $provide.factory(\"blockingIntercept\", [\"$q\", \"tgErrorHandlingService\", blockingIntercept]);\n $httpProvider.interceptors.push(\"blockingIntercept\");\n $compileProvider.debugInfoEnabled(window.taigaConfig.debugInfo || false);\n if (localStorage.userInfo) {\n userInfo = JSON.parse(localStorage.userInfo);\n }\n preferedLangCode = (userInfo != null ? userInfo.lang : void 0) || window.taigaConfig.defaultLanguage || \"en\";\n $translatePartialLoaderProvider.addPart('taiga');\n $translateProvider.useLoader('$translatePartialLoader', {\n urlTemplate: '/' + window._version + '/locales/{part}/locale-{lang}.json'\n }).useSanitizeValueStrategy('escapeParameters').addInterpolation('$translateMessageFormatInterpolation').preferredLanguage(preferedLangCode);\n $translateProvider.fallbackLanguage(preferedLangCode);\n decorators = window.getDecorators();\n return _.each(decorators, function(decorator) {\n return $provide.decorator(decorator.provider, decorator.decorator);\n });\n };\n\n i18nInit = function(lang, $translate) {\n var messages;\n moment.locale(lang);\n if (lang !== 'en') {\n ljs.load((\"/\" + window._version + \"/locales/moment-locales/\") + lang + \".js\");\n }\n messages = {\n defaultMessage: $translate.instant(\"COMMON.FORM_ERRORS.DEFAULT_MESSAGE\"),\n type: {\n email: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_EMAIL\"),\n url: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_URL\"),\n urlstrict: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_URLSTRICT\"),\n number: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_NUMBER\"),\n digits: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_DIGITS\"),\n dateIso: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_DATEISO\"),\n alphanum: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_ALPHANUM\"),\n phone: $translate.instant(\"COMMON.FORM_ERRORS.TYPE_PHONE\")\n },\n notnull: $translate.instant(\"COMMON.FORM_ERRORS.NOTNULL\"),\n notblank: $translate.instant(\"COMMON.FORM_ERRORS.NOT_BLANK\"),\n required: $translate.instant(\"COMMON.FORM_ERRORS.REQUIRED\"),\n regexp: $translate.instant(\"COMMON.FORM_ERRORS.REGEXP\"),\n min: $translate.instant(\"COMMON.FORM_ERRORS.MIN\"),\n max: $translate.instant(\"COMMON.FORM_ERRORS.MAX\"),\n range: $translate.instant(\"COMMON.FORM_ERRORS.RANGE\"),\n minlength: $translate.instant(\"COMMON.FORM_ERRORS.MIN_LENGTH\"),\n maxlength: $translate.instant(\"COMMON.FORM_ERRORS.MAX_LENGTH\"),\n rangelength: $translate.instant(\"COMMON.FORM_ERRORS.RANGE_LENGTH\"),\n mincheck: $translate.instant(\"COMMON.FORM_ERRORS.MIN_CHECK\"),\n maxcheck: $translate.instant(\"COMMON.FORM_ERRORS.MAX_CHECK\"),\n rangecheck: $translate.instant(\"COMMON.FORM_ERRORS.RANGE_CHECK\"),\n equalto: $translate.instant(\"COMMON.FORM_ERRORS.EQUAL_TO\"),\n linewidth: $translate.instant(\"COMMON.FORM_ERRORS.LINEWIDTH\"),\n pikaday: $translate.instant(\"COMMON.FORM_ERRORS.PIKADAY\")\n };\n return checksley.updateMessages('default', messages);\n };\n\n init = function($log, $rootscope, $auth, $events, $analytics, $translate, $location, $navUrls, appMetaService, loaderService, navigationBarService, errorHandlingService, lightboxService, $tgConfig, projectService) {\n var un, user, validators;\n $log.debug(\"Initialize application\");\n $rootscope.$on('$translatePartialLoaderStructureChanged', function() {\n return $translate.refresh();\n });\n validators = {\n linewidth: function(val, width) {\n var lines, valid;\n lines = taiga.nl2br(val).split(\"
    \");\n valid = _.every(lines, function(line) {\n return line.length < width;\n });\n return valid;\n },\n pikaday: function(val) {\n var prettyDate;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n return moment(val, prettyDate).isValid();\n },\n url: function(val) {\n var re_weburl;\n re_weburl = new RegExp(\"^\" + \"(?:(?:https?|ftp)://)\" + \"(?:\\\\S+(?::\\\\S*)?@)?\" + \"(?:\" + \"(?!(?:10|127)(?:\\\\.\\\\d{1,3}){3})\" + \"(?!(?:169\\\\.254|192\\\\.168)(?:\\\\.\\\\d{1,3}){2})\" + \"(?!172\\\\.(?:1[6-9]|2\\\\d|3[0-1])(?:\\\\.\\\\d{1,3}){2})\" + \"(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])\" + \"(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}\" + \"(?:\\\\.(?:[1-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))\" + \"|\" + \"(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)\" + \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*\" + \"(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,}))\" + \"\\\\.?\" + \")\" + \"(?::\\\\d{2,5})?\" + \"(?:[/?#]\\\\S*)?\" + \"$\", \"i\");\n return re_weburl.test(val);\n }\n };\n checksley.updateValidators(validators);\n $rootscope.contribPlugins = this.taigaContribPlugins;\n $rootscope.adminPlugins = _.filter(this.taigaContribPlugins, {\n \"type\": \"admin\"\n });\n $rootscope.userSettingsPlugins = _.filter(this.taigaContribPlugins, {\n \"type\": \"userSettings\"\n });\n $rootscope.$on(\"$translateChangeEnd\", function(e, ctx) {\n var lang, rtlLanguages;\n lang = ctx.language;\n i18nInit(lang, $translate);\n rtlLanguages = $tgConfig.get(\"rtlLanguages\", []);\n return $rootscope.isRTL = rtlLanguages.indexOf(lang) > -1;\n });\n Promise.setScheduler(function(cb) {\n return $rootscope.$evalAsync(cb);\n });\n $events.setupConnection();\n if ($auth.isAuthenticated()) {\n user = $auth.getUser();\n $auth.showTerms();\n }\n $analytics.initialize();\n $rootscope.$on('$locationChangeStart', function(event) {\n var ref;\n errorHandlingService.init();\n if ((ref = projectService.project) != null ? ref.get('blocked_code') : void 0) {\n projectService.setProject(null);\n errorHandlingService.block();\n }\n if (lightboxService.getLightboxOpen().length) {\n event.preventDefault();\n return lightboxService.closeAll();\n }\n });\n un = $rootscope.$on('$routeChangeStart', function(event, next) {\n if (next.loader) {\n loaderService.start(true);\n }\n return un();\n });\n return $rootscope.$on('$routeChangeSuccess', function(event, next) {\n var description, title;\n if (next.loader) {\n loaderService.start(true);\n }\n if (next.access && next.access.requiresLogin) {\n if (!$auth.isAuthenticated()) {\n $location.path($navUrls.resolve(\"login\"));\n }\n }\n if (next.title || next.description) {\n title = $translate.instant(next.title || \"\");\n description = $translate.instant(next.description || \"\");\n appMetaService.setAll(title, description);\n }\n if (next.mobileViewport) {\n appMetaService.addMobileViewport();\n } else {\n appMetaService.removeMobileViewport();\n }\n if (next.disableHeader) {\n return navigationBarService.disableHeader();\n } else {\n return navigationBarService.enableHeader();\n }\n });\n };\n\n angular.module('infinite-scroll').value('THROTTLE_MILLISECONDS', 500);\n\n pluginsWithModule = _.filter(this.taigaContribPlugins, function(plugin) {\n return plugin.module;\n });\n\n pluginsModules = _.map(pluginsWithModule, function(plugin) {\n return plugin.module;\n });\n\n modules = [\"taigaBase\", \"taigaCommon\", \"taigaResources\", \"taigaResources2\", \"taigaAuth\", \"taigaEvents\", \"taigaHome\", \"taigaNavigationBar\", \"taigaProjects\", \"taigaRelatedTasks\", \"taigaBacklog\", \"taigaTaskboard\", \"taigaKanban\", \"taigaIssues\", \"taigaUserStories\", \"taigaTasks\", \"taigaTeam\", \"taigaWiki\", \"taigaSearch\", \"taigaAdmin\", \"taigaProject\", \"taigaUserSettings\", \"taigaFeedback\", \"taigaPlugins\", \"taigaIntegrations\", \"taigaComponents\", \"taigaProfile\", \"taigaHome\", \"taigaUserTimeline\", \"taigaExternalApps\", \"taigaDiscover\", \"taigaHistory\", \"taigaNotifications\", \"taigaWikiHistory\", \"taigaEpics\", \"taigaUtils\", \"templates\", \"ngSanitize\", \"ngRoute\", \"ngAnimate\", \"ngAria\", \"pascalprecht.translate\", \"infinite-scroll\", \"tgRepeat\"].concat(pluginsModules);\n\n module = angular.module(\"taiga\", modules);\n\n module.config([\"$routeProvider\", \"$locationProvider\", \"$httpProvider\", \"$provide\", \"$tgEventsProvider\", \"$compileProvider\", \"$translateProvider\", \"$translatePartialLoaderProvider\", \"$animateProvider\", configure]);\n\n module.run([\"$log\", \"$rootScope\", \"$tgAuth\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"tgLoader\", \"tgNavigationBarService\", \"tgErrorHandlingService\", \"lightboxService\", \"$tgConfig\", \"tgProjectService\", init]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: classes.coffee\n */\n\n(function() {\n var TaigaBase, TaigaController, TaigaService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n TaigaBase = (function() {\n function TaigaBase() {}\n\n return TaigaBase;\n\n })();\n\n TaigaService = (function(superClass) {\n extend(TaigaService, superClass);\n\n function TaigaService() {\n return TaigaService.__super__.constructor.apply(this, arguments);\n }\n\n return TaigaService;\n\n })(TaigaBase);\n\n TaigaController = (function(superClass) {\n extend(TaigaController, superClass);\n\n function TaigaController() {\n this.onInitialDataError = bind(this.onInitialDataError, this);\n return TaigaController.__super__.constructor.apply(this, arguments);\n }\n\n TaigaController.prototype.onInitialDataError = function(xhr) {\n if (xhr) {\n if (xhr.status === 404) {\n this.errorHandlingService.notfound();\n } else if (xhr.status === 403) {\n this.errorHandlingService.permissionDenied();\n }\n }\n return this.q.reject(xhr);\n };\n\n return TaigaController;\n\n })(TaigaBase);\n\n this.taiga.Base = TaigaBase;\n\n this.taiga.Service = TaigaService;\n\n this.taiga.Controller = TaigaController;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: utils.coffee\n */\n\n(function() {\n var DEFAULT_COLOR_LIST, addClass, bindMethods, bindOnce, cancelTimeout, debounce, debounceLeading, defineImmutableProperty, getDefaulColorList, getMatches, getRandomDefaultColor, groupBy, isEmail, isImage, isPdf, joinStr, mixOf, nl2br, normalizeString, patch, randomInt, replaceTags, scopeDefer, sizeFormat, slugify, startswith, stripTags, taiga, timeout, toString, toggleText, trim, truncate, unslugify,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n slice = [].slice,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n addClass = function(el, className) {\n if (el.classList) {\n return el.classList.add(className);\n } else {\n return el.className += ' ' + className;\n }\n };\n\n nl2br = (function(_this) {\n return function(str) {\n var breakTag;\n breakTag = '
    ';\n return (str + '').replace(/([^>\\r\\n]?)(\\r\\n|\\n\\r|\\r|\\n)/g, '$1' + breakTag + '$2');\n };\n })(this);\n\n bindMethods = (function(_this) {\n return function(object) {\n var dependencies, methods;\n dependencies = _.keys(object);\n methods = [];\n _.forIn(object, function(value, key) {\n if (indexOf.call(dependencies, key) < 0 && _.isFunction(value)) {\n return methods.push(key);\n }\n });\n return _.bindAll(object, methods);\n };\n })(this);\n\n bindOnce = (function(_this) {\n return function(scope, attr, continuation) {\n var delBind, val;\n val = scope.$eval(attr);\n if (val !== void 0) {\n return continuation(val);\n }\n delBind = null;\n return delBind = scope.$watch(attr, function(val) {\n if (val === void 0) {\n return;\n }\n continuation(val);\n if (delBind) {\n return delBind();\n }\n });\n };\n })(this);\n\n mixOf = function() {\n var Mixed, base, i, method, mixin, mixins, name, ref;\n base = arguments[0], mixins = 2 <= arguments.length ? slice.call(arguments, 1) : [];\n Mixed = (function(superClass) {\n extend(Mixed, superClass);\n\n function Mixed() {\n return Mixed.__super__.constructor.apply(this, arguments);\n }\n\n return Mixed;\n\n })(base);\n for (i = mixins.length - 1; i >= 0; i += -1) {\n mixin = mixins[i];\n ref = mixin.prototype;\n for (name in ref) {\n method = ref[name];\n Mixed.prototype[name] = method;\n }\n }\n return Mixed;\n };\n\n trim = function(data, char) {\n return _.trim(data, char);\n };\n\n slugify = function(data) {\n return data.toString().toLowerCase().trim().replace(/\\s+/g, '-').replace(/&/g, '-and-').replace(/[^\\w\\-]+/g, '').replace(/\\-\\-+/g, '-');\n };\n\n unslugify = function(data) {\n if (data) {\n return _.capitalize(data.replace(/-/g, ' '));\n }\n return data;\n };\n\n toggleText = function(element, texts) {\n var nextTextPosition, text;\n nextTextPosition = element.data('nextTextPosition');\n if ((nextTextPosition == null) || nextTextPosition >= texts.length) {\n nextTextPosition = 0;\n }\n text = texts[nextTextPosition];\n element.data('nextTextPosition', nextTextPosition + 1);\n return element.text(text);\n };\n\n groupBy = function(coll, pred) {\n var i, item, len, result;\n result = {};\n for (i = 0, len = coll.length; i < len; i++) {\n item = coll[i];\n result[pred(item)] = item;\n }\n return result;\n };\n\n timeout = function(wait, continuation) {\n return window.setTimeout(continuation, wait);\n };\n\n cancelTimeout = function(timeoutVar) {\n return window.clearTimeout(timeoutVar);\n };\n\n scopeDefer = function(scope, func) {\n return _.defer((function(_this) {\n return function() {\n return scope.$apply(func);\n };\n })(this));\n };\n\n toString = function(value) {\n if (_.isNumber(value)) {\n return value + \"\";\n } else if (_.isString(value)) {\n return value;\n } else if (_.isPlainObject(value)) {\n return JSON.stringify(value);\n } else if (_.isUndefined(value)) {\n return \"\";\n }\n return value.toString();\n };\n\n joinStr = function(str, coll) {\n return coll.join(str);\n };\n\n debounce = function(wait, func) {\n return _.debounce(func, wait, {\n leading: true,\n trailing: false\n });\n };\n\n debounceLeading = function(wait, func) {\n return _.debounce(func, wait, {\n leading: false,\n trailing: true\n });\n };\n\n startswith = function(str1, str2) {\n return _.startsWith(str1, str2);\n };\n\n truncate = function(str, maxLength, suffix) {\n var out;\n if (suffix == null) {\n suffix = \"...\";\n }\n if ((typeof str !== \"string\") && !(str instanceof String)) {\n return str;\n }\n out = str.slice(0);\n if (out.length > maxLength) {\n out = out.substring(0, maxLength + 1);\n out = out.substring(0, Math.min(out.length, out.lastIndexOf(\" \")));\n out = out + suffix;\n }\n return out;\n };\n\n sizeFormat = function(input, precision) {\n var number, size, units;\n if (precision == null) {\n precision = 1;\n }\n if (isNaN(parseFloat(input)) || !isFinite(input)) {\n return \"-\";\n }\n if (input === 0) {\n return \"0 bytes\";\n }\n units = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\"];\n number = Math.floor(Math.log(input) / Math.log(1024));\n if (number > 5) {\n number = 5;\n }\n size = (input / Math.pow(1024, number)).toFixed(precision);\n return size + \" \" + units[number];\n };\n\n stripTags = function(str, exception) {\n var pattern;\n if (exception) {\n pattern = new RegExp('<(?!' + exception + '\\s*\\/?)[^>]+>', 'gi');\n return String(str).replace(pattern, '');\n } else {\n return String(str).replace(/<\\/?[^>]+>/g, '');\n }\n };\n\n replaceTags = function(str, tags, replace) {\n var pattern;\n pattern = new RegExp('<(' + tags + ')>', 'gi');\n str = str.replace(pattern, '<' + replace + '>');\n pattern = new RegExp('<\\/(' + tags + ')>', 'gi');\n str = str.replace(pattern, '');\n return str;\n };\n\n defineImmutableProperty = (function(_this) {\n return function(obj, name, fn) {\n return Object.defineProperty(obj, name, {\n get: function() {\n var fn_result;\n if (!_.isFunction(fn)) {\n throw \"defineImmutableProperty third param must be a function\";\n }\n fn_result = fn();\n if (fn_result && _.isObject(fn_result)) {\n if (fn_result.size === void 0) {\n throw \"defineImmutableProperty must return immutable data\";\n }\n }\n return fn_result;\n }\n });\n };\n })(this);\n\n _.mixin({\n removeKeys: function(obj, keys) {\n return _.chain([keys]).flatten().reduce(function(obj, key) {\n delete obj[key];\n return obj;\n }, obj).value();\n },\n cartesianProduct: function() {\n return _.reduceRight(arguments, function(a, b) {\n return _.flatten(_.map(a, function(x) {\n return _.map(b, function(y) {\n return [y].concat(x);\n });\n }), true);\n }, [[]]);\n }\n });\n\n isImage = function(name) {\n return name.match(/\\.(jpe?g|png|gif|gifv|webm|svg|psd)/i) !== null;\n };\n\n isEmail = function(name) {\n return (name != null) && name.match(/^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/) !== null;\n };\n\n isPdf = function(name) {\n return name.match(/\\.(pdf)/i) !== null;\n };\n\n patch = function(oldImmutable, newImmutable) {\n var pathObj;\n pathObj = {};\n newImmutable.forEach(function(newValue, key) {\n if (newValue !== oldImmutable.get(key)) {\n if (newValue.toJS) {\n return pathObj[key] = newValue.toJS();\n } else {\n return pathObj[key] = newValue;\n }\n }\n });\n return pathObj;\n };\n\n DEFAULT_COLOR_LIST = ['#fce94f', '#edd400', '#c4a000', '#8ae234', '#73d216', '#4e9a06', '#d3d7cf', '#fcaf3e', '#f57900', '#ce5c00', '#729fcf', '#3465a4', '#204a87', '#888a85', '#ad7fa8', '#75507b', '#5c3566', '#ef2929', '#cc0000', '#a40000', '#222222'];\n\n getRandomDefaultColor = function() {\n return _.sample(DEFAULT_COLOR_LIST);\n };\n\n getDefaulColorList = function() {\n return _.clone(DEFAULT_COLOR_LIST);\n };\n\n getMatches = function(string, regex, index) {\n var match, matches;\n index || (index = 1);\n matches = [];\n match = null;\n while (match = regex.exec(string)) {\n if (index === -1) {\n matches.push(match);\n } else {\n matches.push(match[index]);\n }\n }\n return matches;\n };\n\n randomInt = function(start, end) {\n var interval;\n interval = end - start;\n return start + Math.floor(Math.random() * (interval + 1));\n };\n\n normalizeString = function(string) {\n var normalizedString;\n normalizedString = string;\n normalizedString = normalizedString.replace(\"Á\", \"A\").replace(\"Ä\", \"A\").replace(\"À\", \"A\");\n normalizedString = normalizedString.replace(\"É\", \"E\").replace(\"Ë\", \"E\").replace(\"È\", \"E\");\n normalizedString = normalizedString.replace(\"Í\", \"I\").replace(\"Ï\", \"I\").replace(\"Ì\", \"I\");\n normalizedString = normalizedString.replace(\"Ó\", \"O\").replace(\"Ö\", \"O\").replace(\"Ò\", \"O\");\n normalizedString = normalizedString.replace(\"Ú\", \"U\").replace(\"Ü\", \"U\").replace(\"Ù\", \"U\");\n return normalizedString;\n };\n\n taiga = this.taiga;\n\n taiga.addClass = addClass;\n\n taiga.nl2br = nl2br;\n\n taiga.bindMethods = bindMethods;\n\n taiga.bindOnce = bindOnce;\n\n taiga.mixOf = mixOf;\n\n taiga.trim = trim;\n\n taiga.slugify = slugify;\n\n taiga.unslugify = unslugify;\n\n taiga.toggleText = toggleText;\n\n taiga.groupBy = groupBy;\n\n taiga.timeout = timeout;\n\n taiga.cancelTimeout = cancelTimeout;\n\n taiga.scopeDefer = scopeDefer;\n\n taiga.toString = toString;\n\n taiga.joinStr = joinStr;\n\n taiga.truncate = truncate;\n\n taiga.debounce = debounce;\n\n taiga.debounceLeading = debounceLeading;\n\n taiga.startswith = startswith;\n\n taiga.sizeFormat = sizeFormat;\n\n taiga.stripTags = stripTags;\n\n taiga.replaceTags = replaceTags;\n\n taiga.defineImmutableProperty = defineImmutableProperty;\n\n taiga.isImage = isImage;\n\n taiga.isEmail = isEmail;\n\n taiga.isPdf = isPdf;\n\n taiga.patch = patch;\n\n taiga.getRandomDefaultColor = getRandomDefaultColor;\n\n taiga.getDefaulColorList = getDefaulColorList;\n\n taiga.getMatches = getMatches;\n\n taiga.randomInt = randomInt;\n\n taiga.normalizeString = normalizeString;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/controllerMixins.coffee\n */\n\n(function() {\n var FiltersMixin, PageMixin, UsFiltersMixin, groupBy, joinStr, taiga, toString, trim;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n joinStr = this.taiga.joinStr;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n PageMixin = (function() {\n function PageMixin() {}\n\n PageMixin.prototype.fillUsersAndRoles = function(users, roles) {\n var activeUsers, computableRoles;\n activeUsers = _.filter(users, (function(_this) {\n return function(user) {\n return user.is_active;\n };\n })(this));\n this.scope.activeUsers = _.sortBy(activeUsers, \"full_name_display\");\n this.scope.activeUsersById = groupBy(this.scope.activeUsers, function(e) {\n return e.id;\n });\n this.scope.users = _.sortBy(users, \"full_name_display\");\n this.scope.usersById = groupBy(users, function(e) {\n return e.id;\n });\n this.scope.roles = _.sortBy(roles, \"order\");\n computableRoles = _(this.scope.project.members).map(\"role\").uniq().value();\n return this.scope.computableRoles = _(roles).filter(\"computable\").filter(function(x) {\n return _.includes(computableRoles, x.id);\n }).value();\n };\n\n PageMixin.prototype.loadUsersAndRoles = function() {\n var promise;\n promise = this.q.all([this.rs.projects.usersList(this.scope.projectId), this.rs.projects.rolesList(this.scope.projectId)]);\n return promise.then((function(_this) {\n return function(results) {\n var roles, users;\n users = results[0], roles = results[1];\n _this.fillUsersAndRoles(users, roles);\n return results;\n };\n })(this));\n };\n\n return PageMixin;\n\n })();\n\n taiga.PageMixin = PageMixin;\n\n FiltersMixin = (function() {\n function FiltersMixin() {}\n\n FiltersMixin.prototype.excludePrefix = \"exclude_\";\n\n FiltersMixin.prototype.selectFilter = function(name, value, load, mode) {\n var existing, location, params;\n if (load == null) {\n load = false;\n }\n if (mode == null) {\n mode = \"include\";\n }\n params = this.location.search();\n if (mode === \"exclude\") {\n name = this.excludePrefix.concat(name);\n }\n if (params[name] !== void 0 && name !== \"page\") {\n existing = _.map(taiga.toString(params[name]).split(\",\"), function(x) {\n return trim(x);\n });\n existing.push(taiga.toString(value));\n existing = _.compact(existing);\n value = joinStr(\",\", _.uniq(existing));\n }\n if (!this.location.isInCurrentRouteParams(name, value)) {\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n }\n };\n\n FiltersMixin.prototype.replaceFilter = function(name, value, load) {\n var location;\n if (load == null) {\n load = false;\n }\n if (!this.location.isInCurrentRouteParams(name, value)) {\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n }\n };\n\n FiltersMixin.prototype.replaceAllFilters = function(filters, load) {\n var location;\n if (load == null) {\n load = false;\n }\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(filters);\n };\n\n FiltersMixin.prototype.unselectFilter = function(name, value, load, mode) {\n var location, newValues, params, parsedValues;\n if (load == null) {\n load = false;\n }\n if (mode == null) {\n mode = 'include';\n }\n params = this.location.search();\n if (mode === \"exclude\") {\n name = this.excludePrefix.concat(name);\n }\n if (params[name] === void 0) {\n return;\n }\n if (value === void 0 || value === null) {\n delete params[name];\n }\n parsedValues = _.map(taiga.toString(params[name]).split(\",\"), function(x) {\n return trim(x);\n });\n newValues = _.reject(parsedValues, function(x) {\n return x === taiga.toString(value);\n });\n newValues = _.compact(newValues);\n if (_.isEmpty(newValues)) {\n value = null;\n } else {\n value = joinStr(\",\", _.uniq(newValues));\n }\n location = load ? this.location : this.location.noreload(this.scope);\n return location.search(name, value);\n };\n\n FiltersMixin.prototype.applyStoredFilters = function(projectSlug, key) {\n var filters;\n if (_.isEmpty(this.location.search())) {\n filters = this.getFilters(projectSlug, key);\n if (Object.keys(filters).length) {\n this.location.search(filters);\n this.location.replace();\n return true;\n }\n }\n return false;\n };\n\n FiltersMixin.prototype.storeFilters = function(projectSlug, params, filtersHashSuffix) {\n var hash, ns;\n ns = projectSlug + \":\" + filtersHashSuffix;\n hash = taiga.generateHash([projectSlug, ns]);\n return this.storage.set(hash, params);\n };\n\n FiltersMixin.prototype.getFilters = function(projectSlug, filtersHashSuffix) {\n var hash, ns;\n ns = projectSlug + \":\" + filtersHashSuffix;\n hash = taiga.generateHash([projectSlug, ns]);\n return this.storage.get(hash) || {};\n };\n\n FiltersMixin.prototype.formatSelectedFilters = function(type, list, urlIds, mode) {\n var invalidAppliedTags, invalidTags, selectedFilters, selectedIds, validAppliedTags;\n if (mode == null) {\n mode = \"include\";\n }\n selectedIds = urlIds.split(',');\n selectedFilters = _.filter(list, function(it) {\n return selectedIds.indexOf(_.toString(it.id)) !== -1;\n });\n invalidTags = _.filter(selectedIds, function(it) {\n return !_.find(selectedFilters, function(sit) {\n return _.toString(sit.id) === it;\n });\n });\n invalidAppliedTags = _.map(invalidTags, function(it) {\n return {\n id: it,\n key: type + \":\" + it,\n dataType: type,\n name: it,\n mode: mode\n };\n });\n validAppliedTags = _.map(selectedFilters, function(it) {\n return {\n id: it.id,\n key: type + \":\" + it.id,\n dataType: type,\n name: it.name,\n color: it.color,\n mode: mode\n };\n });\n return invalidAppliedTags.concat(validAppliedTags);\n };\n\n return FiltersMixin;\n\n })();\n\n taiga.FiltersMixin = FiltersMixin;\n\n UsFiltersMixin = (function() {\n function UsFiltersMixin() {}\n\n UsFiltersMixin.prototype.excludePrefix = \"exclude_\";\n\n UsFiltersMixin.prototype.filterCategories = [\"tags\", \"status\", \"assigned_users\", \"assigned_to\", \"owner\", \"epic\", \"role\"];\n\n UsFiltersMixin.prototype.changeQ = function(q) {\n this.replaceFilter(\"q\", q);\n this.filtersReloadContent();\n return this.generateFilters();\n };\n\n UsFiltersMixin.prototype.removeFilter = function(filter) {\n this.unselectFilter(filter.dataType, filter.id, false, filter.mode);\n this.filtersReloadContent();\n return this.generateFilters();\n };\n\n UsFiltersMixin.prototype.addFilter = function(newFilter) {\n this.selectFilter(newFilter.category.dataType, newFilter.filter.id, false, newFilter.mode);\n this.filtersReloadContent();\n return this.generateFilters();\n };\n\n UsFiltersMixin.prototype.selectCustomFilter = function(customFilter) {\n this.replaceAllFilters(customFilter.filter);\n this.filtersReloadContent();\n return this.generateFilters();\n };\n\n UsFiltersMixin.prototype.saveCustomFilter = function(name) {\n var excludeKey, filters, i, key, len, ref, urlfilters;\n filters = {};\n urlfilters = this.location.search();\n ref = this.filterCategories;\n for (i = 0, len = ref.length; i < len; i++) {\n key = ref[i];\n excludeKey = this.excludePrefix.concat(key);\n filters[key] = urlfilters[key];\n filters[excludeKey] = urlfilters[excludeKey];\n }\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, this.storeCustomFiltersName).then((function(_this) {\n return function(userFilters) {\n userFilters[name] = filters;\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, _this.storeCustomFiltersName).then(_this.generateFilters);\n };\n })(this));\n };\n\n UsFiltersMixin.prototype.removeCustomFilter = function(customFilter) {\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, this.storeCustomFiltersName).then((function(_this) {\n return function(userFilters) {\n delete userFilters[customFilter.id];\n _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, _this.storeCustomFiltersName).then(_this.generateFilters);\n return _this.generateFilters();\n };\n })(this));\n };\n\n UsFiltersMixin.prototype.isFilterDataTypeSelected = function(filterDataType) {\n var filter, i, len, ref;\n ref = this.selectedFilters;\n for (i = 0, len = ref.length; i < len; i++) {\n filter = ref[i];\n if (filter['dataType'] === filterDataType) {\n return true;\n }\n }\n return false;\n };\n\n UsFiltersMixin.prototype.generateFilters = function(milestone) {\n var excludeKey, i, key, len, loadFilters, ref, urlfilters;\n this.storeFilters(this.params.pslug, this.location.search(), this.storeFiltersName);\n urlfilters = this.location.search();\n loadFilters = {};\n loadFilters.project = this.scope.projectId;\n loadFilters.q = urlfilters.q;\n ref = this.filterCategories;\n for (i = 0, len = ref.length; i < len; i++) {\n key = ref[i];\n excludeKey = this.excludePrefix.concat(key);\n loadFilters[key] = urlfilters[key];\n loadFilters[excludeKey] = urlfilters[excludeKey];\n }\n loadFilters.milestone = \"null\";\n if (milestone) {\n loadFilters.milestone = milestone;\n }\n return this.q.all([this.rs.userstories.filtersData(loadFilters), this.filterRemoteStorageService.getFilters(this.scope.projectId, this.storeCustomFiltersName)]).then((function(_this) {\n return function(result) {\n var customFiltersRaw, data, dataCollection, j, len1, ref1, selected, tagsWithAtLeastOneElement;\n data = result[0];\n customFiltersRaw = result[1];\n dataCollection = {};\n dataCollection.status = _.map(data.statuses, function(it) {\n it.id = it.id.toString();\n return it;\n });\n dataCollection.tags = _.map(data.tags, function(it) {\n it.id = it.name;\n return it;\n });\n tagsWithAtLeastOneElement = _.filter(dataCollection.tags, function(tag) {\n return tag.count > 0;\n });\n dataCollection.assigned_users = _.map(data.assigned_users, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.full_name || \"Unassigned\";\n return it;\n });\n dataCollection.assigned_to = _.map(data.assigned_to, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.full_name || \"Unassigned\";\n return it;\n });\n dataCollection.role = _.map(data.roles, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.name || \"Unassigned\";\n return it;\n });\n dataCollection.owner = _.map(data.owners, function(it) {\n it.id = it.id.toString();\n it.name = it.full_name;\n return it;\n });\n dataCollection.epic = _.map(data.epics, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n it.name = \"#\" + it.ref + \" \" + it.subject;\n } else {\n it.id = \"null\";\n it.name = \"Not in an epic\";\n }\n return it;\n });\n _this.selectedFilters = [];\n ref1 = _this.filterCategories;\n for (j = 0, len1 = ref1.length; j < len1; j++) {\n key = ref1[j];\n excludeKey = _this.excludePrefix.concat(key);\n if (loadFilters[key]) {\n selected = _this.formatSelectedFilters(key, dataCollection[key], loadFilters[key]);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters[excludeKey]) {\n selected = _this.formatSelectedFilters(key, dataCollection[key], loadFilters[excludeKey], \"exclude\");\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n }\n _this.filterQ = loadFilters.q;\n _this.filters = [\n {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.STATUS\"),\n dataType: \"status\",\n content: dataCollection.status\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.TAGS\"),\n dataType: \"tags\",\n content: dataCollection.tags,\n hideEmpty: true,\n totalTaggedElements: tagsWithAtLeastOneElement.length\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ASSIGNED_USERS\"),\n dataType: \"assigned_users\",\n content: dataCollection.assigned_users\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ROLE\"),\n dataType: \"role\",\n content: dataCollection.role\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.CREATED_BY\"),\n dataType: \"owner\",\n content: dataCollection.owner\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.EPIC\"),\n dataType: \"epic\",\n content: dataCollection.epic\n }\n ];\n _this.customFilters = [];\n return _.forOwn(customFiltersRaw, function(value, key) {\n return _this.customFilters.push({\n id: key,\n name: key,\n filter: value\n });\n });\n };\n })(this));\n };\n\n return UsFiltersMixin;\n\n })();\n\n taiga.UsFiltersMixin = UsFiltersMixin;\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaAdmin\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/auth.coffee\n */\n\n(function() {\n var AuthService, CancelAccountDirective, ChangeEmailDirective, ChangePasswordFromRecoveryDirective, ForgotPasswordDirective, InvitationDirective, LoginDirective, LoginPage, PublicRegisterMessageDirective, RegisterDirective, debounce, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaAuth\", [\"taigaResources\"]);\n\n LoginPage = (function() {\n LoginPage.$inject = ['tgCurrentUserService', '$location', '$tgNavUrls', '$routeParams', '$tgAuth'];\n\n function LoginPage(currentUserService, $location, $navUrls, $routeParams, $auth) {\n var url;\n if (currentUserService.isAuthenticated()) {\n if (!$routeParams['force_login']) {\n url = $navUrls.resolve(\"home\");\n if ($routeParams['next']) {\n url = decodeURIComponent($routeParams['next']);\n $location.search('next', null);\n }\n if ($routeParams['unauthorized']) {\n $auth.clear();\n $auth.removeToken();\n } else {\n $location.url(url);\n }\n }\n }\n }\n\n return LoginPage;\n\n })();\n\n module.controller('LoginPage', LoginPage);\n\n AuthService = (function(superClass) {\n extend(AuthService, superClass);\n\n AuthService.$inject = [\"$rootScope\", \"$tgStorage\", \"$tgModel\", \"$tgResources\", \"$tgHttp\", \"$tgUrls\", \"$tgConfig\", \"$translate\", \"tgCurrentUserService\", \"tgThemeService\", \"$tgAnalytics\", \"tgTermsAnnouncementService\"];\n\n function AuthService(rootscope, storage, model, rs, http, urls, config1, translate, currentUserService1, themeService, analytics, termsAnnouncementService) {\n var userModel;\n this.rootscope = rootscope;\n this.storage = storage;\n this.model = model;\n this.rs = rs;\n this.http = http;\n this.urls = urls;\n this.config = config1;\n this.translate = translate;\n this.currentUserService = currentUserService1;\n this.themeService = themeService;\n this.analytics = analytics;\n this.termsAnnouncementService = termsAnnouncementService;\n AuthService.__super__.constructor.call(this);\n userModel = this.getUser();\n this._currentTheme = this._getUserTheme();\n this.setUserdata(userModel);\n }\n\n AuthService.prototype.setUserdata = function(userModel) {\n if (userModel) {\n this.userData = Immutable.fromJS(userModel.getAttrs());\n this.currentUserService.setUser(this.userData);\n } else {\n this.userData = null;\n }\n return this.analytics.setUserId();\n };\n\n AuthService.prototype._getUserTheme = function() {\n var ref;\n return ((ref = this.rootscope.user) != null ? ref.theme : void 0) || this.config.get(\"defaultTheme\") || \"taiga\";\n };\n\n AuthService.prototype._setTheme = function() {\n var newTheme;\n newTheme = this._getUserTheme();\n if (this._currentTheme !== newTheme) {\n this._currentTheme = newTheme;\n return this.themeService.use(this._currentTheme);\n }\n };\n\n AuthService.prototype._setLocales = function() {\n var lang, ref;\n lang = ((ref = this.rootscope.user) != null ? ref.lang : void 0) || this.config.get(\"defaultLanguage\") || \"en\";\n this.translate.preferredLanguage(lang);\n return this.translate.use(lang);\n };\n\n AuthService.prototype.getUser = function() {\n var user, userData;\n if (this.rootscope.user) {\n return this.rootscope.user;\n }\n userData = this.storage.get(\"userInfo\");\n if (userData) {\n user = this.model.make_model(\"users\", userData);\n this.rootscope.user = user;\n this._setLocales();\n this._setTheme();\n return user;\n } else {\n this._setTheme();\n }\n return null;\n };\n\n AuthService.prototype.setUser = function(user) {\n this.rootscope.auth = user;\n this.storage.set(\"userInfo\", user.getAttrs());\n this.rootscope.user = user;\n this.setUserdata(user);\n this._setLocales();\n return this._setTheme();\n };\n\n AuthService.prototype.clear = function() {\n this.rootscope.auth = null;\n this.rootscope.user = null;\n return this.storage.remove(\"userInfo\");\n };\n\n AuthService.prototype.setToken = function(token) {\n return this.storage.set(\"token\", token);\n };\n\n AuthService.prototype.getToken = function() {\n return this.storage.get(\"token\");\n };\n\n AuthService.prototype.removeToken = function() {\n return this.storage.remove(\"token\");\n };\n\n AuthService.prototype.isAuthenticated = function() {\n if (this.getUser() !== null) {\n return true;\n }\n return false;\n };\n\n AuthService.prototype.refresh = function() {\n var url;\n url = this.urls.resolve(\"user-me\");\n return this.http.get(url).then((function(_this) {\n return function(data, status) {\n var user;\n user = data.data;\n user.token = _this.getUser().auth_token;\n user = _this.model.make_model(\"users\", user);\n _this.setUser(user);\n _this.rootscope.$broadcast(\"auth:refresh\", user);\n return user;\n };\n })(this));\n };\n\n AuthService.prototype.login = function(data, type) {\n var url;\n url = this.urls.resolve(\"auth\");\n data = _.clone(data, false);\n data.type = type ? type : \"normal\";\n this.removeToken();\n return this.http.post(url, data).then((function(_this) {\n return function(data, status) {\n var user;\n user = _this.model.make_model(\"users\", data.data);\n _this.setToken(user.auth_token);\n _this.setUser(user);\n _this.rootscope.$broadcast(\"auth:login\", user);\n return user;\n };\n })(this));\n };\n\n AuthService.prototype.logout = function() {\n this.removeToken();\n this.clear();\n this.currentUserService.removeUser();\n this._setTheme();\n this._setLocales();\n this.rootscope.$broadcast(\"auth:logout\");\n return this.analytics.setUserId();\n };\n\n AuthService.prototype.register = function(data, type, existing) {\n var url;\n url = this.urls.resolve(\"auth-register\");\n data = _.clone(data, false);\n data.type = type ? type : \"public\";\n if (type === \"private\") {\n data.existing = existing ? existing : false;\n }\n this.removeToken();\n return this.http.post(url, data).then((function(_this) {\n return function(response) {\n var user;\n user = _this.model.make_model(\"users\", response.data);\n _this.setToken(user.auth_token);\n _this.setUser(user);\n _this.rootscope.$broadcast(\"auth:register\", user);\n return user;\n };\n })(this));\n };\n\n AuthService.prototype.getInvitation = function(token) {\n return this.rs.invitations.get(token);\n };\n\n AuthService.prototype.acceptInvitiationWithNewUser = function(data) {\n return this.register(data, \"private\", false);\n };\n\n AuthService.prototype.forgotPassword = function(data) {\n var url;\n url = this.urls.resolve(\"users-password-recovery\");\n data = _.clone(data, false);\n this.removeToken();\n return this.http.post(url, data);\n };\n\n AuthService.prototype.changePasswordFromRecovery = function(data) {\n var url;\n url = this.urls.resolve(\"users-change-password-from-recovery\");\n data = _.clone(data, false);\n this.removeToken();\n return this.http.post(url, data);\n };\n\n AuthService.prototype.changeEmail = function(data) {\n var url;\n url = this.urls.resolve(\"users-change-email\");\n data = _.clone(data, false);\n return this.http.post(url, data);\n };\n\n AuthService.prototype.cancelAccount = function(data) {\n var url;\n url = this.urls.resolve(\"users-cancel-account\");\n data = _.clone(data, false);\n return this.http.post(url, data);\n };\n\n AuthService.prototype.exportProfile = function() {\n var url;\n url = this.urls.resolve(\"users-export\");\n return this.http.post(url);\n };\n\n AuthService.prototype.showTerms = function(data) {\n var user;\n user = this.getUser();\n if (!user || user.read_new_terms) {\n return;\n }\n return this.termsAnnouncementService.show();\n };\n\n return AuthService;\n\n })(taiga.Service);\n\n module.service(\"$tgAuth\", AuthService);\n\n PublicRegisterMessageDirective = function($config, $navUrls, $routeParams, templates) {\n var template, templateFn;\n template = templates.get(\"auth/login-text.html\", true);\n templateFn = function() {\n var nextUrl, publicRegisterEnabled, url;\n publicRegisterEnabled = $config.get(\"publicRegisterEnabled\");\n if (!publicRegisterEnabled) {\n return \"\";\n }\n url = $navUrls.resolve(\"register\");\n if ($routeParams['force_next']) {\n nextUrl = encodeURIComponent($routeParams['force_next']);\n url += \"?next=\" + nextUrl;\n }\n return template({\n url: url\n });\n };\n return {\n restrict: \"AE\",\n scope: {},\n template: templateFn\n };\n };\n\n module.directive(\"tgPublicRegisterMessage\", [\"$tgConfig\", \"$tgNavUrls\", \"$routeParams\", \"$tgTemplate\", PublicRegisterMessageDirective]);\n\n LoginDirective = function($auth, $confirm, $location, $config, $routeParams, $navUrls, $events, $translate, $window, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onError, onSuccess, submit;\n form = new checksley.Form($el.find(\"form.login-form\"));\n if ($routeParams['next'] && $routeParams['next'] !== $navUrls.resolve(\"login\")) {\n $scope.nextUrl = decodeURIComponent($routeParams['next']);\n } else {\n $scope.nextUrl = $navUrls.resolve(\"home\");\n }\n if ($routeParams['force_next']) {\n $scope.nextUrl = decodeURIComponent($routeParams['force_next']);\n }\n onSuccess = function(response) {\n $events.setupConnection();\n $analytics.trackEvent(\"auth\", \"login\", \"user login\", 1);\n $auth.showTerms();\n if ($scope.nextUrl.indexOf('http') === 0) {\n return $window.location.href = $scope.nextUrl;\n } else {\n return $location.url($scope.nextUrl);\n }\n };\n onError = function(response) {\n return $confirm.notify(\"light-error\", $translate.instant(\"LOGIN_FORM.ERROR_AUTH_INCORRECT\"));\n };\n $scope.onKeyUp = function(event) {\n var target, value;\n target = angular.element(event.currentTarget);\n value = target.val();\n $scope.iscapsLockActivated = false;\n if (value !== value.toLowerCase()) {\n return $scope.iscapsLockActivated = true;\n }\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var data, loginFormType, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n data = {\n \"username\": $el.find(\"form.login-form input[name=username]\").val(),\n \"password\": $el.find(\"form.login-form input[name=password]\").val()\n };\n loginFormType = $config.get(\"loginFormType\", \"normal\");\n promise = $auth.login(data, loginFormType);\n return promise.then(onSuccess, onError);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n window.prerenderReady = true;\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLogin\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgConfig\", \"$routeParams\", \"$tgNavUrls\", \"$tgEvents\", \"$translate\", \"$window\", \"$tgAnalytics\", LoginDirective]);\n\n RegisterDirective = function($auth, $confirm, $location, $navUrls, $config, $routeParams, $analytics, $translate, $window) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n if (!$config.get(\"publicRegisterEnabled\")) {\n $location.path($navUrls.resolve(\"not-found\"));\n $location.replace();\n }\n $scope.data = {};\n form = $el.find(\"form\").checksley({\n onlyOneErrorElement: true\n });\n if ($routeParams['next'] && $routeParams['next'] !== $navUrls.resolve(\"login\")) {\n $scope.nextUrl = decodeURIComponent($routeParams['next']);\n } else {\n $scope.nextUrl = $navUrls.resolve(\"home\");\n }\n onSuccessSubmit = function(response) {\n $analytics.trackEvent(\"auth\", \"register\", \"user registration\", 1);\n if ($scope.nextUrl.indexOf('http') === 0) {\n return $window.location.href = $scope.nextUrl;\n } else {\n return $location.url($scope.nextUrl);\n }\n };\n onErrorSubmit = function(response) {\n var text;\n if (response.data._error_message) {\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {\n error: response.data._error_message\n });\n $confirm.notify(\"light-error\", text);\n }\n return form.setErrors(response.data);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.register($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return window.prerenderReady = true;\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRegister\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfig\", \"$routeParams\", \"$tgAnalytics\", \"$translate\", \"$window\", RegisterDirective]);\n\n ForgotPasswordDirective = function($auth, $confirm, $location, $navUrls, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n var message, title;\n $location.path($navUrls.resolve(\"login\"));\n title = $translate.instant(\"FORGOT_PASSWORD_FORM.SUCCESS_TITLE\");\n message = $translate.instant(\"FORGOT_PASSWORD_FORM.SUCCESS_TEXT\");\n return $confirm.success(title, message);\n };\n onErrorSubmit = function(response) {\n var text;\n text = $translate.instant(\"FORGOT_PASSWORD_FORM.ERROR\");\n return $confirm.notify(\"light-error\", text);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.forgotPassword($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return window.prerenderReady = true;\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgForgotPassword\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgNavUrls\", \"$translate\", ForgotPasswordDirective]);\n\n ChangePasswordFromRecoveryDirective = function($auth, $confirm, $location, $params, $navUrls, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit, text;\n $scope.data = {};\n if ($params.token != null) {\n $scope.tokenInParams = true;\n $scope.data.token = $params.token;\n } else {\n $location.path($navUrls.resolve(\"login\"));\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.ERROR\");\n $confirm.notify(\"light-error\", text);\n }\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n $location.path($navUrls.resolve(\"login\"));\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.SUCCESS\");\n return $confirm.success(text);\n };\n onErrorSubmit = function(response) {\n text = $translate.instant(\"CHANGE_PASSWORD_RECOVERY_FORM.ERROR\");\n return $confirm.notify(\"light-error\", text);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.changePasswordFromRecovery($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgChangePasswordFromRecovery\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", \"$translate\", ChangePasswordFromRecoveryDirective]);\n\n InvitationDirective = function($auth, $confirm, $location, $config, $params, $navUrls, $analytics, $translate, config) {\n var link;\n link = function($scope, $el, $attrs) {\n var loginForm, onErrorSubmitLogin, onErrorSubmitRegister, onSuccessSubmitLogin, onSuccessSubmitRegister, promise, registerForm, submitLogin, submitRegister, token;\n token = $params.token;\n promise = $auth.getInvitation(token);\n promise.then(function(invitation) {\n $scope.invitation = invitation;\n return $scope.publicRegisterEnabled = config.get(\"publicRegisterEnabled\");\n });\n promise.then(null, function(response) {\n var text;\n $location.path($navUrls.resolve(\"login\"));\n text = $translate.instant(\"INVITATION_LOGIN_FORM.NOT_FOUND\");\n return $confirm.notify(\"light-error\", text);\n });\n $scope.dataLogin = {\n token: token\n };\n loginForm = $el.find(\"form.login-form\").checksley({\n onlyOneErrorElement: true\n });\n onSuccessSubmitLogin = function(response) {\n var text;\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with existing user\", 1);\n $location.path($navUrls.resolve(\"project\", {\n project: $scope.invitation.project_slug\n }));\n text = $translate.instant(\"INVITATION_LOGIN_FORM.SUCCESS\", {\n \"project_name\": $scope.invitation.project_name\n });\n return $confirm.notify(\"success\", text);\n };\n onErrorSubmitLogin = function(response) {\n return $confirm.notify(\"light-error\", response.data._error_message);\n };\n submitLogin = debounce(2000, (function(_this) {\n return function(event) {\n var data, loginFormType;\n event.preventDefault();\n if (!loginForm.validate()) {\n return;\n }\n loginFormType = $config.get(\"loginFormType\", \"normal\");\n data = $scope.dataLogin;\n promise = $auth.login({\n username: data.username,\n password: data.password,\n invitation_token: data.token\n }, loginFormType);\n return promise.then(onSuccessSubmitLogin, onErrorSubmitLogin);\n };\n })(this));\n $el.on(\"submit\", \"form.login-form\", submitLogin);\n $el.on(\"click\", \".button-login\", submitLogin);\n $scope.dataRegister = {\n token: token\n };\n registerForm = $el.find(\"form.register-form\").checksley({\n onlyOneErrorElement: true\n });\n onSuccessSubmitRegister = function(response) {\n var text;\n $analytics.trackEvent(\"auth\", \"invitationAccept\", \"invitation accept with new user\", 1);\n $location.path($navUrls.resolve(\"project\", {\n project: $scope.invitation.project_slug\n }));\n text = $translate.instant(\"INVITATION_LOGIN_FORM.SUCCESS\", {\n \"project_name\": $scope.invitation.project_name\n });\n return $confirm.notify(\"success\", text);\n };\n onErrorSubmitRegister = function(response) {\n var text;\n if (response.data._error_message) {\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {\n error: response.data._error_message\n });\n $confirm.notify(\"light-error\", text);\n }\n return registerForm.setErrors(response.data);\n };\n submitRegister = debounce(2000, (function(_this) {\n return function(event) {\n event.preventDefault();\n if (!registerForm.validate()) {\n return;\n }\n promise = $auth.acceptInvitiationWithNewUser($scope.dataRegister);\n return promise.then(onSuccessSubmitRegister, onErrorSubmitRegister);\n };\n })(this));\n $el.on(\"submit\", \"form.register-form\", submitRegister);\n $el.on(\"click\", \".button-register\", submitRegister);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgInvitation\", [\"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$tgConfig\", \"$routeParams\", \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", \"$tgConfig\", InvitationDirective]);\n\n ChangeEmailDirective = function($repo, $model, $auth, $confirm, $location, $params, $navUrls, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n $scope.data.email_token = $params.email_token;\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n var text;\n if ($auth.isAuthenticated()) {\n $repo.queryOne(\"users\", $auth.getUser().id).then((function(_this) {\n return function(data) {\n $auth.setUser(data);\n $location.path($navUrls.resolve(\"home\"));\n return $location.replace();\n };\n })(this));\n } else {\n $location.path($navUrls.resolve(\"login\"));\n $location.replace();\n }\n text = $translate.instant(\"CHANGE_EMAIL_FORM.SUCCESS\");\n return $confirm.success(text);\n };\n onErrorSubmit = function(response) {\n var text;\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {\n error: response.data._error_message\n });\n return $confirm.notify(\"light-error\", text);\n };\n submit = function() {\n var promise;\n if (!form.validate()) {\n return;\n }\n promise = $auth.changeEmail($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n $el.on(\"submit\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"click\", \"a.button-change-email\", function(event) {\n event.preventDefault();\n return submit();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgChangeEmail\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", \"$translate\", ChangeEmailDirective]);\n\n CancelAccountDirective = function($repo, $model, $auth, $confirm, $location, $params, $navUrls) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, onErrorSubmit, onSuccessSubmit, submit;\n $scope.data = {};\n $scope.data.cancel_token = $params.cancel_token;\n form = $el.find(\"form\").checksley();\n onSuccessSubmit = function(response) {\n var text;\n $auth.logout();\n $location.path($navUrls.resolve(\"home\"));\n text = $translate.instant(\"CANCEL_ACCOUNT.SUCCESS\");\n return $confirm.success(text);\n };\n onErrorSubmit = function(response) {\n var text;\n text = $translate.instant(\"COMMON.GENERIC_ERROR\", {\n error: response.data._error_message\n });\n return $confirm.notify(\"error\", text);\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n promise = $auth.cancelAccount($scope.data);\n return promise.then(onSuccessSubmit, onErrorSubmit);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgCancelAccount\", [\"$tgRepo\", \"$tgModel\", \"$tgAuth\", \"$tgConfirm\", \"$tgLocation\", \"$routeParams\", \"$tgNavUrls\", CancelAccountDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaBacklog\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base.coffee\n */\n\n(function() {\n var TaigaMainDirective, bindOnce, groupBy, init, module, taiga, urls;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaBase\", []);\n\n TaigaMainDirective = function($rootscope, $window) {\n var link;\n link = function($scope, $el, $attrs) {\n return $window.onresize = function() {\n return $rootscope.$broadcast(\"resize\");\n };\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMain\", [\"$rootScope\", \"$window\", TaigaMainDirective]);\n\n urls = {\n \"home\": \"/\",\n \"projects\": \"/projects\",\n \"error\": \"/error\",\n \"not-found\": \"/not-found\",\n \"permission-denied\": \"/permission-denied\",\n \"discover\": \"/discover\",\n \"discover-search\": \"/discover/search\",\n \"login\": \"/login\",\n \"forgot-password\": \"/forgot-password\",\n \"change-password\": \"/change-password/:token\",\n \"change-email\": \"/change-email/:token\",\n \"cancel-account\": \"/cancel-account/:token\",\n \"register\": \"/register\",\n \"invitation\": \"/invitation/:token\",\n \"create-project\": \"/project/new\",\n \"create-project-scrum\": \"/project/new/scrum\",\n \"create-project-kanban\": \"/project/new/kanban\",\n \"create-project-duplicate\": \"/project/new/duplicate\",\n \"create-project-import\": \"/project/new/import\",\n \"create-project-import-platform\": \"/project/new/import/:platform\",\n \"profile\": \"/profile\",\n \"user-profile\": \"/profile/:username\",\n \"blocked-project\": \"/blocked-project/:project\",\n \"project\": \"/project/:project\",\n \"project-detail-ref\": \"/project/:project/t/:ref\",\n \"project-backlog\": \"/project/:project/backlog\",\n \"project-taskboard\": \"/project/:project/taskboard/:sprint\",\n \"project-kanban\": \"/project/:project/kanban\",\n \"project-issues\": \"/project/:project/issues\",\n \"project-epics\": \"/project/:project/epics\",\n \"project-search\": \"/project/:project/search\",\n \"project-timeline\": \"/project/:project/timeline\",\n \"project-epics-detail\": \"/project/:project/epic/:ref\",\n \"project-userstories-detail\": \"/project/:project/us/:ref\",\n \"project-tasks-detail\": \"/project/:project/task/:ref\",\n \"project-issues-detail\": \"/project/:project/issue/:ref\",\n \"project-wiki\": \"/project/:project/wiki\",\n \"project-wiki-list\": \"/project/:project/wiki-list\",\n \"project-wiki-page\": \"/project/:project/wiki/:slug\",\n \"project-team\": \"/project/:project/team\",\n \"project-admin-home\": \"/project/:project/admin/project-profile/details\",\n \"project-admin-project-profile-details\": \"/project/:project/admin/project-profile/details\",\n \"project-admin-project-profile-default-values\": \"/project/:project/admin/project-profile/default-values\",\n \"project-admin-project-profile-modules\": \"/project/:project/admin/project-profile/modules\",\n \"project-admin-project-profile-export\": \"/project/:project/admin/project-profile/export\",\n \"project-admin-project-profile-reports\": \"/project/:project/admin/project-profile/reports\",\n \"project-admin-project-values-status\": \"/project/:project/admin/project-values/status\",\n \"project-admin-project-values-points\": \"/project/:project/admin/project-values/points\",\n \"project-admin-project-values-priorities\": \"/project/:project/admin/project-values/priorities\",\n \"project-admin-project-values-severities\": \"/project/:project/admin/project-values/severities\",\n \"project-admin-project-values-types\": \"/project/:project/admin/project-values/types\",\n \"project-admin-project-values-custom-fields\": \"/project/:project/admin/project-values/custom-fields\",\n \"project-admin-project-values-tags\": \"/project/:project/admin/project-values/tags\",\n \"project-admin-project-values-due-dates\": \"/project/:project/admin/project-values/due-dates\",\n \"project-admin-memberships\": \"/project/:project/admin/memberships\",\n \"project-admin-roles\": \"/project/:project/admin/roles\",\n \"project-admin-third-parties-webhooks\": \"/project/:project/admin/third-parties/webhooks\",\n \"project-admin-third-parties-github\": \"/project/:project/admin/third-parties/github\",\n \"project-admin-third-parties-gitlab\": \"/project/:project/admin/third-parties/gitlab\",\n \"project-admin-third-parties-bitbucket\": \"/project/:project/admin/third-parties/bitbucket\",\n \"project-admin-third-parties-gogs\": \"/project/:project/admin/third-parties/gogs\",\n \"project-admin-contrib\": \"/project/:project/admin/contrib/:plugin\",\n \"user-settings-user-profile\": \"/user-settings/user-profile\",\n \"user-settings-user-change-password\": \"/user-settings/user-change-password\",\n \"user-settings-user-avatar\": \"/user-settings/user-avatar\",\n \"user-settings-user-project-settings\": \"/user-settings/user-project-settings\",\n \"user-settings-mail-notifications\": \"/user-settings/mail-notifications\",\n \"user-settings-live-notifications\": \"/user-settings/live-notifications\",\n \"user-settings-web-notifications\": \"/user-settings/web-notifications\",\n \"user-settings-contrib\": \"/user-settings/contrib/:plugin\",\n \"notifications\": \"/notifications\"\n };\n\n init = function($log, $navurls) {\n $log.debug(\"Initialize navigation urls\");\n return $navurls.update(urls);\n };\n\n module.run([\"$log\", \"$tgNavUrls\", init]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common.coffee\n */\n\n(function() {\n var AnimationFrame, Autofocus, Capslock, CheckPermissionDirective, ClassPermissionDirective, CtrlClickDisable, DataPickerConfig, LightboxClose, ProjectUrl, Qqueue, QueueModelTransformation, SelectedText, Svg, Template, ToggleCommentDirective, module, taiga,\n slice = [].slice,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\", []);\n\n DataPickerConfig = function($translate, $config, $auth) {\n return {\n get: function() {\n var isRTL, lang, rtlLanguages, user;\n user = $auth.getUser();\n lang = (user != null ? user.lang : void 0) || $translate.preferredLanguage();\n rtlLanguages = $config.get(\"rtlLanguages\", []);\n isRTL = rtlLanguages.indexOf(lang) > -1;\n return {\n i18n: {\n previousMonth: $translate.instant(\"COMMON.PICKERDATE.PREV_MONTH\"),\n nextMonth: $translate.instant(\"COMMON.PICKERDATE.NEXT_MONTH\"),\n months: [$translate.instant(\"COMMON.PICKERDATE.MONTHS.JAN\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.FEB\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.MAR\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.APR\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.MAY\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.JUN\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.JUL\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.AUG\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.SEP\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.OCT\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.NOV\"), $translate.instant(\"COMMON.PICKERDATE.MONTHS.DEC\")],\n weekdays: [$translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.SUN\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.MON\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.TUE\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.WED\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.THU\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.FRI\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS.SAT\")],\n weekdaysShort: [$translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.SUN\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.MON\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.TUE\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.WED\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.THU\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.FRI\"), $translate.instant(\"COMMON.PICKERDATE.WEEK_DAYS_SHORT.SAT\")]\n },\n isRTL: isRTL,\n firstDay: parseInt($translate.instant(\"COMMON.PICKERDATE.FIRST_DAY_OF_WEEK\"), 10),\n format: $translate.instant(\"COMMON.PICKERDATE.FORMAT\")\n };\n }\n };\n };\n\n module.factory(\"tgDatePickerConfigService\", [\"$translate\", \"$tgConfig\", \"$tgAuth\", DataPickerConfig]);\n\n SelectedText = function($window, $document) {\n var get;\n get = function() {\n if ($window.getSelection) {\n return $window.getSelection().toString();\n } else if ($document.selection) {\n return $document.selection.createRange().text;\n }\n return \"\";\n };\n return {\n get: get\n };\n };\n\n module.factory(\"$selectedText\", [\"$window\", \"$document\", SelectedText]);\n\n CheckPermissionDirective = function(projectService) {\n var link, render;\n render = function($el, project, permission) {\n if (project && permission) {\n if (project.get('my_permissions').indexOf(permission) > -1) {\n return $el.removeClass('hidden');\n }\n }\n };\n link = function($scope, $el, $attrs) {\n var permission, unObserve, unwatch;\n $el.addClass('hidden');\n permission = $attrs.tgCheckPermission;\n unwatch = $scope.$watch(function() {\n return projectService.project;\n }, function() {\n if (!projectService.project) {\n return;\n }\n render($el, projectService.project, permission);\n return unwatch();\n });\n unObserve = $attrs.$observe(\"tgCheckPermission\", function(permission) {\n if (!permission) {\n return;\n }\n render($el, projectService.project, permission);\n return unObserve();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n CheckPermissionDirective.$inject = [\"tgProjectService\"];\n\n module.directive(\"tgCheckPermission\", CheckPermissionDirective);\n\n ClassPermissionDirective = function() {\n var link, name;\n name = \"tgClassPermission\";\n link = function($scope, $el, $attrs) {\n var checkPermissions, tgClassPermissionWatchAction, unbindWatcher;\n checkPermissions = function(project, className, permission) {\n var negation;\n negation = permission[0] === \"!\";\n if (negation) {\n permission = permission.slice(1);\n }\n if (negation && project.my_permissions.indexOf(permission) === -1) {\n return $el.addClass(className);\n } else if (!negation && project.my_permissions.indexOf(permission) !== -1) {\n return $el.addClass(className);\n } else {\n return $el.removeClass(className);\n }\n };\n tgClassPermissionWatchAction = function(project) {\n var className, classes, permission, results;\n if (project) {\n unbindWatcher();\n classes = $scope.$eval($attrs[name]);\n results = [];\n for (className in classes) {\n permission = classes[className];\n results.push(checkPermissions(project, className, permission));\n }\n return results;\n }\n };\n return unbindWatcher = $scope.$watch(\"project\", tgClassPermissionWatchAction);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgClassPermission\", ClassPermissionDirective);\n\n AnimationFrame = function() {\n var add, animationFrame, performAnimation, tail;\n animationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n performAnimation = (function(_this) {\n return function(time) {\n var fn;\n fn = tail.shift();\n fn();\n if (tail.length) {\n return animationFrame(performAnimation);\n }\n };\n })(this);\n tail = [];\n add = function() {\n var fn, i, len, results;\n results = [];\n for (i = 0, len = arguments.length; i < len; i++) {\n fn = arguments[i];\n tail.push(fn);\n if (tail.length === 1) {\n results.push(animationFrame(performAnimation));\n } else {\n results.push(void 0);\n }\n }\n return results;\n };\n return {\n add: add\n };\n };\n\n module.factory(\"animationFrame\", AnimationFrame);\n\n ToggleCommentDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.find(\"textarea\").on(\"focus\", function() {\n return $el.addClass(\"active\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgToggleComment\", ToggleCommentDirective);\n\n ProjectUrl = function($navurls) {\n var get;\n get = function(project) {\n var ctx;\n if (project.toJS) {\n project = project.toJS();\n }\n ctx = {\n project: project.slug\n };\n if (project.is_backlog_activated && project.my_permissions.indexOf(\"view_us\") > -1) {\n return $navurls.resolve(\"project-backlog\", ctx);\n }\n if (project.is_kanban_activated && project.my_permissions.indexOf(\"view_us\") > -1) {\n return $navurls.resolve(\"project-kanban\", ctx);\n }\n if (project.is_wiki_activated && project.my_permissions.indexOf(\"view_wiki_pages\") > -1) {\n return $navurls.resolve(\"project-wiki\", ctx);\n }\n if (project.is_issues_activated && project.my_permissions.indexOf(\"view_issues\") > -1) {\n return $navurls.resolve(\"project-issues\", ctx);\n }\n return $navurls.resolve(\"project\", ctx);\n };\n return {\n get: get\n };\n };\n\n module.factory(\"$projectUrl\", [\"$tgNavUrls\", ProjectUrl]);\n\n Qqueue = function($q) {\n var deferred, lastPromise, qqueue;\n deferred = $q.defer();\n deferred.resolve();\n lastPromise = deferred.promise;\n qqueue = {\n bindAdd: (function(_this) {\n return function(fn) {\n return function() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return lastPromise = lastPromise.then(function() {\n return fn.apply(_this, args);\n });\n };\n };\n })(this),\n add: (function(_this) {\n return function(fn) {\n if (!lastPromise) {\n lastPromise = fn();\n } else {\n lastPromise = lastPromise.then(fn);\n }\n return qqueue;\n };\n })(this)\n };\n return qqueue;\n };\n\n module.factory(\"$tgQqueue\", [\"$q\", Qqueue]);\n\n QueueModelTransformation = (function(superClass) {\n extend(QueueModelTransformation, superClass);\n\n QueueModelTransformation.$inject = [\"$tgQqueue\", \"$tgRepo\", \"$q\", \"$tgModel\"];\n\n function QueueModelTransformation(qqueue1, repo, q, model1) {\n this.qqueue = qqueue1;\n this.repo = repo;\n this.q = q;\n this.model = model1;\n }\n\n QueueModelTransformation.prototype.setObject = function(scope1, prop) {\n this.scope = scope1;\n this.prop = prop;\n };\n\n QueueModelTransformation.prototype.clone = function() {\n var attrs, model;\n attrs = _.cloneDeep(this.scope[this.prop]._attrs);\n model = this.model.make_model(this.scope[this.prop]._name, attrs);\n return model;\n };\n\n QueueModelTransformation.prototype.getObj = function() {\n return this.scope[this.prop];\n };\n\n QueueModelTransformation.prototype.save = function(transformation) {\n var defered;\n defered = this.q.defer();\n this.qqueue.add((function(_this) {\n return function() {\n var clone, comment, modified, obj, success;\n obj = _this.getObj();\n comment = obj.comment;\n obj.comment = '';\n clone = _this.clone();\n modified = _.omit(obj._modifiedAttrs, ['version']);\n clone = _.assign(clone, modified);\n transformation(clone);\n if (comment.length) {\n clone.comment = comment;\n }\n success = function() {\n _this.scope[_this.prop] = clone;\n return defered.resolve.apply(null, arguments);\n };\n return _this.repo.save(clone).then(success, defered.reject);\n };\n })(this));\n return defered.promise;\n };\n\n return QueueModelTransformation;\n\n })(taiga.Service);\n\n module.service(\"$tgQueueModelTransformation\", QueueModelTransformation);\n\n Template = function($templateCache) {\n return {\n get: (function(_this) {\n return function(name, lodash) {\n var tmp;\n if (lodash == null) {\n lodash = false;\n }\n tmp = $templateCache.get(name);\n if (lodash) {\n tmp = _.template(tmp);\n }\n return tmp;\n };\n })(this)\n };\n };\n\n module.factory(\"$tgTemplate\", [\"$templateCache\", Template]);\n\n Capslock = function() {\n var template;\n template = \"\";\n return {\n template: template\n };\n };\n\n module.directive(\"tgCapslock\", [Capslock]);\n\n LightboxClose = function() {\n var link, template;\n template = \"
    \\n \\n\";\n link = function(scope, elm, attrs) {};\n return {\n scope: {\n onClose: '&'\n },\n link: link,\n template: template\n };\n };\n\n module.directive(\"tgLightboxClose\", [LightboxClose]);\n\n Svg = function() {\n var template;\n template = \"\\n \\n {{svgTitle}}\\n {{svgTitleTranslate | translate: svgTitleTranslateValues}}\\n \\n\";\n return {\n scope: {\n svgIcon: \"@\",\n svgTitle: \"@\",\n svgTitleTranslate: \"@\",\n svgTitleTranslateValues: \"=\",\n svgFill: \"=\"\n },\n template: template\n };\n };\n\n module.directive(\"tgSvg\", [Svg]);\n\n Autofocus = function($timeout, $parse, animationFrame) {\n return {\n restrict: 'A',\n link: function($scope, $element, attrs) {\n var model;\n if (attrs.ngShow) {\n model = $parse(attrs.ngShow);\n return $scope.$watch(model, function(value) {\n if (value === true) {\n return $timeout(function() {\n return $element[0].focus();\n });\n }\n });\n } else {\n return $timeout(function() {\n return $element[0].focus();\n });\n }\n }\n };\n };\n\n module.directive('tgAutofocus', ['$timeout', '$parse', \"animationFrame\", Autofocus]);\n\n module.directive('tgPreloadImage', function() {\n var preload, spinner, template;\n spinner = \"loading...\";\n template = \"
    \\n \\n
    \";\n preload = function(src, onLoad) {\n var image;\n image = new Image();\n image.onload = onLoad;\n image.src = src;\n return image;\n };\n return {\n template: template,\n transclude: true,\n replace: true,\n link: function(scope, el, attrs) {\n var image, onLoad, timeout;\n image = el.find('img:last');\n timeout = null;\n onLoad = function() {\n el.find('.loading-spinner').remove();\n image.show();\n if (timeout) {\n clearTimeout(timeout);\n return timeout = null;\n }\n };\n return attrs.$observe('preloadSrc', function(src) {\n if (timeout) {\n clearTimeout(timeout);\n }\n el.find('.loading-spinner').remove();\n timeout = setTimeout(function() {\n return el.prepend(spinner);\n }, 200);\n image.hide();\n return preload(src, onLoad);\n });\n }\n };\n });\n\n CtrlClickDisable = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.on(\"click\", function($event) {\n if ($event.ctrlKey || $event.metaKey) {\n return $event.preventDefault();\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgCtrlClickDisable\", CtrlClickDisable);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/detail.coffee\n */\n\n(function() {\n var DetailController, bindMethods, bindOnce, groupBy, joinStr, mixOf, module, taiga, toString;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaCommon\");\n\n DetailController = (function() {\n DetailController.$inject = ['$routeParams', '$tgRepo', \"tgProjectService\", \"$tgNavUrls\", \"$location\"];\n\n function DetailController(params, repo, projectService, navurls, location) {\n this.params = params;\n this.repo = repo;\n this.projectService = projectService;\n this.navurls = navurls;\n this.location = location;\n this.repo.resolve({\n pslug: this.params.pslug,\n ref: this.params.ref\n }).then((function(_this) {\n return function(result) {\n var url;\n if (result.issue) {\n url = _this.navurls.resolve('project-issues-detail', {\n project: _this.projectService.project.get('slug'),\n ref: _this.params.ref\n });\n } else if (result.task) {\n url = _this.navurls.resolve('project-tasks-detail', {\n project: _this.projectService.project.get('slug'),\n ref: _this.params.ref\n });\n } else if (result.us) {\n url = _this.navurls.resolve('project-userstories-detail', {\n project: _this.projectService.project.get('slug'),\n ref: _this.params.ref\n });\n } else if (result.epic) {\n url = _this.navurls.resolve('project-epics-detail', {\n project: _this.projectService.project.get('slug'),\n ref: _this.params.ref\n });\n } else if (result.wikipage) {\n url = _this.navurls.resolve('project-wiki-page', {\n project: _this.projectService.project.get('slug'),\n slug: _this.params.ref\n });\n }\n return _this.location.path(url);\n };\n })(this));\n }\n\n return DetailController;\n\n })();\n\n module.controller(\"DetailController\", DetailController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/epics.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaEpics\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/events.coffee\n */\n\n(function() {\n var EventsProvider, EventsService, bindMethods, module, startswith, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n startswith = this.taiga.startswith;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaEvents\", []);\n\n EventsService = (function() {\n function EventsService(win, log, config, auth, liveAnnouncementService1, rootScope) {\n this.win = win;\n this.log = log;\n this.config = config;\n this.auth = auth;\n this.liveAnnouncementService = liveAnnouncementService1;\n this.rootScope = rootScope;\n this.processMessage = bind(this.processMessage, this);\n bindMethods(this);\n }\n\n EventsService.prototype.initialize = function(sessionId) {\n this.sessionId = sessionId;\n this.subscriptions = {};\n this.connected = false;\n this.error = false;\n this.pendingMessages = [];\n this.missedHeartbeats = 0;\n this.heartbeatInterval = null;\n if (this.win.WebSocket === void 0) {\n return this.log.info(\"WebSockets not supported on your browser\");\n }\n };\n\n EventsService.prototype.setupConnection = function() {\n var loc, path, scheme, url;\n this.stopExistingConnection();\n url = this.config.get(\"eventsUrl\");\n if (!url) {\n return;\n }\n if (!startswith(url, \"ws:\") && !startswith(url, \"wss:\")) {\n loc = this.win.location;\n scheme = loc.protocol === \"https:\" ? \"wss:\" : \"ws:\";\n path = _.trimStart(url, \"/\");\n url = scheme + \"//\" + loc.host + \"/\" + path;\n }\n this.error = false;\n this.ws = new this.win.WebSocket(url);\n this.ws.addEventListener(\"open\", this.onOpen);\n this.ws.addEventListener(\"message\", this.onMessage);\n this.ws.addEventListener(\"error\", this.onError);\n return this.ws.addEventListener(\"close\", this.onClose);\n };\n\n EventsService.prototype.stopExistingConnection = function() {\n if (this.ws === void 0) {\n return;\n }\n this.ws.removeEventListener(\"open\", this.onOpen);\n this.ws.removeEventListener(\"close\", this.onClose);\n this.ws.removeEventListener(\"error\", this.onError);\n this.ws.removeEventListener(\"message\", this.onMessage);\n this.stopHeartBeatMessages();\n this.ws.close();\n return delete this.ws;\n };\n\n EventsService.prototype.notifications = function() {\n return this.subscribe(null, 'notifications', (function(_this) {\n return function(data) {\n _this.liveAnnouncementService.show(data.title, data.desc);\n return _this.rootScope.$digest();\n };\n })(this));\n };\n\n EventsService.prototype.liveNotifications = function() {\n var subscribe, userId;\n if (this.auth.userData == null) {\n return;\n }\n userId = this.auth.userData.get('id');\n subscribe = (function(_this) {\n return function() {\n return _this.subscribe(null, \"live_notifications.\" + userId, function(data) {\n var notification;\n notification = new Notification(data.title, {\n icon: \"/\" + window._version + \"/images/favicon.png\",\n body: data.body,\n tag: data.id\n });\n notification.onshow = function() {\n if (data.timeout && data.timeout > 0) {\n return setTimeout(function() {\n return notification.close();\n }, data.timeout);\n }\n };\n if (data.url) {\n return notification.onclick = function() {\n return window.open(data.url);\n };\n }\n });\n };\n })(this);\n if (!Notification) {\n return console.log(\"This browser does not support desktop notification\");\n } else if (Notification.permission === \"granted\") {\n return subscribe();\n } else if (Notification.permission !== 'denied') {\n return Notification.requestPermission((function(_this) {\n return function(permission) {\n if (permission === \"granted\") {\n return subscribe();\n }\n };\n })(this));\n }\n };\n\n EventsService.prototype.webNotifications = function() {\n var randomTimeout, routingKey, userId;\n if (this.auth.userData == null) {\n return;\n }\n userId = this.auth.userData.get('id');\n routingKey = \"web_notifications.\" + userId;\n randomTimeout = taiga.randomInt(700, 1000);\n return this.subscribe(null, routingKey, (function(_this) {\n return function(data) {\n return _this.rootScope.$broadcast(\"notifications:new\");\n };\n })(this));\n };\n\n EventsService.prototype.startHeartBeatMessages = function() {\n var heartbeatIntervalTime, maxMissedHeartbeats, reconnectTryInterval;\n if (this.heartbeatInterval) {\n return;\n }\n maxMissedHeartbeats = this.config.get(\"eventsMaxMissedHeartbeats\", 5);\n heartbeatIntervalTime = this.config.get(\"eventsHeartbeatIntervalTime\", 60000);\n reconnectTryInterval = this.config.get(\"eventsReconnectTryInterval\", 10000);\n this.missedHeartbeats = 0;\n this.heartbeatInterval = setInterval((function(_this) {\n return function() {\n var e;\n try {\n if (_this.missedHeartbeats >= maxMissedHeartbeats) {\n throw new Error(\"Too many missed heartbeats PINGs.\");\n }\n _this.missedHeartbeats++;\n _this.sendMessage({\n cmd: \"ping\"\n });\n return _this.log.debug(\"HeartBeat send PING\");\n } catch (error1) {\n e = error1;\n _this.log.error(\"HeartBeat error: \" + e.message);\n return _this.setupConnection();\n }\n };\n })(this), heartbeatIntervalTime);\n return this.log.debug(\"HeartBeat enabled\");\n };\n\n EventsService.prototype.stopHeartBeatMessages = function() {\n if (!this.heartbeatInterval) {\n return;\n }\n clearInterval(this.heartbeatInterval);\n this.heartbeatInterval = null;\n return this.log.debug(\"HeartBeat disabled\");\n };\n\n EventsService.prototype.processHeartBeatPongMessage = function(data) {\n this.missedHeartbeats = 0;\n return this.log.debug(\"HeartBeat recived PONG\");\n };\n\n EventsService.prototype.serialize = function(message) {\n if (_.isObject(message)) {\n return JSON.stringify(message);\n }\n return message;\n };\n\n EventsService.prototype.sendMessage = function(message) {\n var i, len, messages, msg, results;\n this.pendingMessages.push(message);\n if (!this.connected) {\n return;\n }\n messages = _.map(this.pendingMessages, this.serialize);\n this.pendingMessages = [];\n results = [];\n for (i = 0, len = messages.length; i < len; i++) {\n msg = messages[i];\n results.push(this.ws.send(msg));\n }\n return results;\n };\n\n EventsService.prototype.processMessage = function(data) {\n var routingKey, subscription;\n routingKey = data.routing_key;\n if (this.subscriptions[routingKey] == null) {\n return;\n }\n subscription = this.subscriptions[routingKey];\n if (subscription.scope) {\n return subscription.scope.$apply(function() {\n return subscription.callback(data.data);\n });\n } else {\n return subscription.callback(data.data);\n }\n };\n\n EventsService.prototype.subscribe = function(scope, routingKey, callback) {\n var message, subscription;\n if (this.error) {\n return;\n }\n this.log.debug(\"Subscribe to: \" + routingKey);\n subscription = {\n scope: scope,\n routingKey: routingKey,\n callback: callback\n };\n message = {\n \"cmd\": \"subscribe\",\n \"routing_key\": routingKey\n };\n this.subscriptions[routingKey] = subscription;\n this.sendMessage(message);\n if (scope) {\n return scope.$on(\"$destroy\", (function(_this) {\n return function() {\n return _this.unsubscribe(routingKey);\n };\n })(this));\n }\n };\n\n EventsService.prototype.unsubscribe = function(routingKey) {\n var message;\n if (this.error) {\n return;\n }\n this.log.debug(\"Unsubscribe from: \" + routingKey);\n message = {\n \"cmd\": \"unsubscribe\",\n \"routing_key\": routingKey\n };\n return this.sendMessage(message);\n };\n\n EventsService.prototype.onOpen = function() {\n var message, token;\n this.connected = true;\n this.log.debug(\"WebSocket connection opened\");\n token = this.auth.getToken();\n message = {\n cmd: \"auth\",\n data: {\n token: token,\n sessionId: this.sessionId\n }\n };\n this.sendMessage(message);\n this.startHeartBeatMessages();\n this.notifications();\n this.liveNotifications();\n return this.webNotifications();\n };\n\n EventsService.prototype.onMessage = function(event) {\n var data;\n this.log.debug(\"WebSocket message received: \" + event.data);\n data = JSON.parse(event.data);\n if (data.cmd === \"pong\") {\n return this.processHeartBeatPongMessage(data);\n } else {\n return this.processMessage(data);\n }\n };\n\n EventsService.prototype.onError = function(error) {\n this.log.error(\"WebSocket error: \" + error);\n this.error = true;\n return setTimeout(this.setupConnection, this.reconnectTryInterval);\n };\n\n EventsService.prototype.onClose = function() {\n this.log.debug(\"WebSocket closed.\");\n this.connected = false;\n this.stopHeartBeatMessages();\n return setTimeout(this.setupConnection, this.reconnectTryInterval);\n };\n\n return EventsService;\n\n })();\n\n EventsProvider = (function() {\n function EventsProvider() {}\n\n EventsProvider.prototype.setSessionId = function(sessionId) {\n return this.sessionId = sessionId;\n };\n\n EventsProvider.prototype.$get = function($win, $log, $conf, $auth, liveAnnouncementService, $rootScope) {\n var service;\n service = new EventsService($win, $log, $conf, $auth, liveAnnouncementService, $rootScope);\n service.initialize(this.sessionId);\n return service;\n };\n\n EventsProvider.prototype.$get.$inject = [\"$window\", \"$log\", \"$tgConfig\", \"$tgAuth\", \"tgLiveAnnouncementService\", \"$rootScope\"];\n\n return EventsProvider;\n\n })();\n\n module.provider(\"$tgEvents\", EventsProvider);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/feedback.coffee\n */\n\n(function() {\n var FeedbackDirective, bindOnce, debounce, groupBy, mixOf, module, taiga, trim;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n mixOf = this.taiga.mixOf;\n\n debounce = this.taiga.debounce;\n\n trim = this.taiga.trim;\n\n module = angular.module(\"taigaFeedback\", []);\n\n FeedbackDirective = function($lightboxService, $repo, $confirm, $loading, feedbackService) {\n var directive, link;\n link = function($scope, $el, $attrs) {\n var form, openLightbox, submit, submitButton;\n form = $el.find(\"form\").checksley();\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.create(\"feedback\", $scope.feedback);\n promise.then(function(data) {\n currentLoading.finish();\n $lightboxService.close($el);\n return $confirm.notify(\"success\", \"\\\\o/ we'll be happy to read your\");\n });\n return promise.then(null, function() {\n currentLoading.finish();\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n openLightbox = function() {\n $scope.feedback = {};\n $lightboxService.open($el);\n return $el.find(\"textarea\").focus();\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return openLightbox();\n };\n directive = {\n link: link,\n templateUrl: \"common/lightbox-feedback.html\",\n scope: {}\n };\n return directive;\n };\n\n module.directive(\"tgLbFeedback\", [\"lightboxService\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"tgFeedbackService\", FeedbackDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/integrations.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaIntegrations\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaIssues\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaKanban\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/plugins.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaPlugins\", [\"ngRoute\"]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/projects.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaProject\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/related-tasks.coffee\n */\n\n(function() {\n var RelatedTaskAssignedToInlineEditionDirective, RelatedTaskCreateButtonDirective, RelatedTaskCreateFormDirective, RelatedTaskRowDirective, RelatedTasksDirective, debounce, module, taiga, trim;\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaRelatedTasks\", []);\n\n RelatedTaskRowDirective = function($repo, $compile, $confirm, $rootscope, $loading, $template, $translate, $emojis) {\n var link, templateEdit, templateView;\n templateView = $template.get(\"task/related-task-row.html\", true);\n templateEdit = $template.get(\"task/related-task-row-edit.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var renderEdit, renderView, saveTask;\n this.childScope = $scope.$new();\n saveTask = debounce(2000, function(task) {\n var currentLoading, promise;\n task.subject = $el.find('input').val();\n currentLoading = $loading().target($el.find('.task-name')).start();\n promise = $repo.save(task);\n promise.then((function(_this) {\n return function() {\n currentLoading.finish();\n return $rootscope.$broadcast(\"related-tasks:update\");\n };\n })(this));\n promise.then(null, (function(_this) {\n return function() {\n currentLoading.finish();\n $el.find('input').val(task.subject);\n return $confirm.notify(\"error\");\n };\n })(this));\n return promise;\n });\n renderEdit = function(task) {\n this.childScope.$destroy();\n this.childScope = $scope.$new();\n $el.off();\n $el.html($compile(templateEdit({\n task: task\n }))(childScope));\n $el.find(\".task-name input\").val(task.subject);\n $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return saveTask($model.$modelValue).then(function() {\n return renderView($model.$modelValue);\n });\n } else if (event.keyCode === 27) {\n return renderView($model.$modelValue);\n }\n });\n $el.on(\"click\", \".save-task\", function(event) {\n return saveTask($model.$modelValue).then(function() {\n return renderView($model.$modelValue);\n });\n });\n return $el.on(\"click\", \".cancel-edit\", function(event) {\n return renderView($model.$modelValue);\n });\n };\n renderView = function(task) {\n var perms;\n perms = {\n modify_task: $scope.project.my_permissions.indexOf(\"modify_task\") !== -1,\n delete_task: $scope.project.my_permissions.indexOf(\"delete_task\") !== -1\n };\n $el.html($compile(templateView({\n task: task,\n perms: perms,\n emojify: function(text) {\n return $emojis.replaceEmojiNameByHtmlImgs(_.escape(text));\n }\n }))($scope));\n $el.on(\"click\", \".edit-task\", function() {\n renderEdit($model.$modelValue);\n return $el.find('input').focus().select();\n });\n return $el.on(\"click\", \".delete-task\", function(event) {\n var message, title;\n title = $translate.instant(\"TASK.TITLE_DELETE_ACTION\");\n task = $model.$modelValue;\n message = task.subject;\n return $confirm.askOnDelete(title, message).then(function(askResponse) {\n var promise;\n promise = $repo.remove(task);\n promise.then(function() {\n askResponse.finish();\n return $scope.$emit(\"related-tasks:delete\");\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n });\n });\n });\n };\n $scope.$watch($attrs.ngModel, function(val) {\n if (!val) {\n return;\n }\n return renderView(val);\n });\n $scope.$on(\"related-tasks:assigned-to-changed\", function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n $scope.$on(\"related-tasks:status-changed\", function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgRelatedTaskRow\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\", \"$tgTemplate\", \"$translate\", \"$tgEmojis\", RelatedTaskRowDirective]);\n\n RelatedTaskCreateFormDirective = function($repo, $compile, $confirm, $tgmodel, $loading, $analytics) {\n var link, newTask;\n newTask = {\n subject: \"\",\n assigned_to: null\n };\n link = function($scope, $el, $attrs) {\n var close, createTask, render, reset;\n createTask = function(task) {\n var currentLoading, promise;\n task.subject = $el.find('input').val();\n task.assigned_to = $scope.newTask.assigned_to;\n task.status = $scope.newTask.status;\n $scope.newTask.status = $scope.project.default_task_status;\n $scope.newTask.assigned_to = null;\n currentLoading = $loading().target($el.find('.task-name')).start();\n promise = $repo.create(\"tasks\", task);\n promise.then(function() {\n $analytics.trackEvent(\"task\", \"create\", \"create task on userstory\", 1);\n currentLoading.finish();\n return $scope.$emit(\"related-tasks:add\");\n });\n promise.then(null, function() {\n $el.find('input').val(task.subject);\n currentLoading.finish();\n return $confirm.notify(\"error\");\n });\n return promise;\n };\n close = function() {\n $el.off();\n return $scope.openNewRelatedTask = false;\n };\n reset = function() {\n newTask = {\n subject: \"\",\n assigned_to: null\n };\n newTask[\"status\"] = $scope.project.default_task_status;\n newTask[\"project\"] = $scope.project.id;\n newTask[\"user_story\"] = $scope.us.id;\n return $scope.newTask = $tgmodel.make_model(\"tasks\", newTask);\n };\n render = function() {\n if ($scope.openNewRelatedTask) {\n return;\n }\n $scope.openNewRelatedTask = true;\n return $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return createTask(newTask).then(function() {\n reset();\n return $el.find('input').focus();\n });\n } else if (event.keyCode === 27) {\n return $scope.$apply(function() {\n return close();\n });\n }\n });\n };\n $scope.save = function() {\n return createTask(newTask).then(function() {\n return close();\n });\n };\n taiga.bindOnce($scope, \"us\", reset);\n $scope.$on(\"related-tasks:show-form\", function() {\n return $scope.$apply(render);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n scope: true,\n link: link,\n templateUrl: 'task/related-task-create-form.html'\n };\n };\n\n module.directive(\"tgRelatedTaskCreateForm\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", \"$tgLoading\", \"$tgAnalytics\", RelatedTaskCreateFormDirective]);\n\n RelatedTaskCreateButtonDirective = function($repo, $compile, $confirm, $tgmodel, $template) {\n var link, template;\n template = $template.get(\"common/components/add-button.html\", true);\n link = function($scope, $el, $attrs) {\n $scope.$watch(\"project\", function(val) {\n if (!val) {\n return;\n }\n $el.off();\n if ($scope.project.my_permissions.indexOf(\"add_task\") !== -1) {\n $el.html($compile(template())($scope));\n } else {\n $el.html(\"\");\n }\n return $el.on(\"click\", \".add-button\", function(event) {\n return $scope.$emit(\"related-tasks:add-new-clicked\");\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskCreateButton\", [\"$tgRepo\", \"$compile\", \"$tgConfirm\", \"$tgModel\", \"$tgTemplate\", RelatedTaskCreateButtonDirective]);\n\n RelatedTasksDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var _isEditable, _isVisible, loadTasks;\n loadTasks = function() {\n return $rs.tasks.list($scope.projectId, null, $scope.usId).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n _isVisible = function() {\n if ($scope.project) {\n return $scope.project.my_permissions.indexOf(\"view_tasks\") !== -1;\n }\n return false;\n };\n _isEditable = function() {\n if ($scope.project) {\n return $scope.project.my_permissions.indexOf(\"modify_task\") !== -1;\n }\n return false;\n };\n $scope.reorderTask = function(task, newIndex) {\n return $rootscope.$broadcast('task:reorder', task, newIndex);\n };\n $scope.showRelatedTasks = function() {\n var ref;\n return _isVisible() && (_isEditable() || ((ref = $scope.tasks) != null ? ref.length : void 0));\n };\n $scope.$on(\"related-tasks:add\", function() {\n return loadTasks().then(function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n });\n $scope.$on(\"related-tasks:reordered\", function() {\n return loadTasks();\n });\n $scope.$on(\"related-tasks:delete\", function() {\n return loadTasks().then(function() {\n return $rootscope.$broadcast(\"related-tasks:update\");\n });\n });\n $scope.$on(\"related-tasks:add-new-clicked\", function() {\n return $scope.$broadcast(\"related-tasks:show-form\");\n });\n taiga.bindOnce($scope, \"us\", function(val) {\n return loadTasks();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTasks\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", RelatedTasksDirective]);\n\n RelatedTaskAssignedToInlineEditionDirective = function($repo, $rootscope, $translate, avatarService) {\n var link, template;\n template = _.template(\"\\\" src=\\\"<%- imgurl %>\\\" alt=\\\"<%- name %>\\\"/>\\n
    <%- name %>
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, autoSave, notAutoSave, task, updateRelatedTask;\n updateRelatedTask = function(task) {\n var avatar, ctx, member;\n ctx = {\n name: $translate.instant(\"COMMON.ASSIGNED_TO.NOT_ASSIGNED\")\n };\n member = $scope.usersById[task.assigned_to];\n avatar = avatarService.getAvatar(member);\n ctx.imgurl = avatar.url;\n ctx.bg = avatar.bg;\n if (member) {\n ctx.name = member.full_name_display;\n }\n $el.find(\".avatar\").html(template(ctx));\n return $el.find(\".task-assignedto\").attr('title', ctx.name);\n };\n $ctrl = $el.controller();\n task = $scope.$eval($attrs.tgRelatedTaskAssignedToInlineEdition);\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n autoSave = !notAutoSave;\n $scope.$watch($attrs.tgRelatedTaskAssignedToInlineEdition, function() {\n task = $scope.$eval($attrs.tgRelatedTaskAssignedToInlineEdition);\n return updateRelatedTask(task);\n });\n updateRelatedTask(task);\n $el.on(\"click\", \".task-assignedto\", function(event) {\n return $rootscope.$broadcast(\"assigned-to:add\", task);\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_task\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"assigned-to:added\", debounce(2000, (function(_this) {\n return function(ctx, userId, updatedRelatedTask) {\n if (updatedRelatedTask.id === task.id) {\n updatedRelatedTask.assigned_to = userId;\n if (autoSave) {\n $repo.save(updatedRelatedTask).then(function() {\n return $scope.$emit(\"related-tasks:assigned-to-changed\");\n });\n }\n return updateRelatedTask(updatedRelatedTask);\n }\n };\n })(this)));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\", \"$translate\", \"tgAvatarService\", RelatedTaskAssignedToInlineEditionDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources.coffee\n */\n\n(function() {\n var ResourcesService, initResources, initUrls, module, taiga, urls,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n ResourcesService = (function(superClass) {\n extend(ResourcesService, superClass);\n\n function ResourcesService() {\n return ResourcesService.__super__.constructor.apply(this, arguments);\n }\n\n return ResourcesService;\n\n })(taiga.Service);\n\n urls = {\n \"auth\": \"/auth\",\n \"auth-register\": \"/auth/register\",\n \"invitations\": \"/invitations\",\n \"users\": \"/users\",\n \"by_username\": \"/users/by_username\",\n \"users-password-recovery\": \"/users/password_recovery\",\n \"users-change-password-from-recovery\": \"/users/change_password_from_recovery\",\n \"users-change-password\": \"/users/change_password\",\n \"users-change-email\": \"/users/change_email\",\n \"users-cancel-account\": \"/users/cancel\",\n \"users-export\": \"/users/export\",\n \"user-stats\": \"/users/%s/stats\",\n \"user-liked\": \"/users/%s/liked\",\n \"user-voted\": \"/users/%s/voted\",\n \"user-watched\": \"/users/%s/watched\",\n \"user-contacts\": \"/users/%s/contacts\",\n \"user-me\": \"/users/me\",\n \"permissions\": \"/permissions\",\n \"notify-policies\": \"/notify-policies\",\n \"notifications\": \"/web-notifications\",\n \"user-project-settings\": \"/user-project-settings\",\n \"user-storage\": \"/user-storage\",\n \"memberships\": \"/memberships\",\n \"bulk-create-memberships\": \"/memberships/bulk_create\",\n \"roles\": \"/roles\",\n \"permissions\": \"/permissions\",\n \"resolver\": \"/resolver\",\n \"projects\": \"/projects\",\n \"project-templates\": \"/project-templates\",\n \"project-modules\": \"/projects/%s/modules\",\n \"bulk-update-projects-order\": \"/projects/bulk_update_order\",\n \"project-like\": \"/projects/%s/like\",\n \"project-unlike\": \"/projects/%s/unlike\",\n \"project-watch\": \"/projects/%s/watch\",\n \"project-unwatch\": \"/projects/%s/unwatch\",\n \"project-contact\": \"contact\",\n \"project-transfer-validate-token\": \"/projects/%s/transfer_validate_token\",\n \"project-transfer-accept\": \"/projects/%s/transfer_accept\",\n \"project-transfer-reject\": \"/projects/%s/transfer_reject\",\n \"project-transfer-request\": \"/projects/%s/transfer_request\",\n \"project-transfer-start\": \"/projects/%s/transfer_start\",\n \"epic-statuses\": \"/epic-statuses\",\n \"userstory-statuses\": \"/userstory-statuses\",\n \"userstory-due-dates\": \"/userstory-due-dates\",\n \"userstory-due-dates-create-default\": \"/userstory-due-dates/create_default\",\n \"points\": \"/points\",\n \"task-statuses\": \"/task-statuses\",\n \"task-due-dates\": \"/task-due-dates\",\n \"task-due-dates-create-default\": \"/task-due-dates/create_default\",\n \"issue-statuses\": \"/issue-statuses\",\n \"issue-due-dates\": \"/issue-due-dates\",\n \"issue-due-dates-create-default\": \"/issue-due-dates/create_default\",\n \"issue-types\": \"/issue-types\",\n \"priorities\": \"/priorities\",\n \"severities\": \"/severities\",\n \"milestones\": \"/milestones\",\n \"move-userstories-to-milestone\": \"/milestones/%s/move_userstories_to_sprint\",\n \"move-tasks-to-milestone\": \"/milestones/%s/move_tasks_to_sprint\",\n \"move-issues-to-milestone\": \"/milestones/%s/move_issues_to_sprint\",\n \"epics\": \"/epics\",\n \"epic-upvote\": \"/epics/%s/upvote\",\n \"epic-downvote\": \"/epics/%s/downvote\",\n \"epic-watch\": \"/epics/%s/watch\",\n \"epic-unwatch\": \"/epics/%s/unwatch\",\n \"epic-related-userstories\": \"/epics/%s/related_userstories\",\n \"epic-related-userstories-bulk-create\": \"/epics/%s/related_userstories/bulk_create\",\n \"userstories\": \"/userstories\",\n \"bulk-create-us\": \"/userstories/bulk_create\",\n \"bulk-update-us-backlog-order\": \"/userstories/bulk_update_backlog_order\",\n \"bulk-update-us-milestone\": \"/userstories/bulk_update_milestone\",\n \"bulk-update-us-miles-order\": \"/userstories/bulk_update_sprint_order\",\n \"bulk-update-us-kanban-order\": \"/userstories/bulk_update_kanban_order\",\n \"userstories-filters\": \"/userstories/filters_data\",\n \"userstory-upvote\": \"/userstories/%s/upvote\",\n \"userstory-downvote\": \"/userstories/%s/downvote\",\n \"userstory-watch\": \"/userstories/%s/watch\",\n \"userstory-unwatch\": \"/userstories/%s/unwatch\",\n \"tasks\": \"/tasks\",\n \"bulk-create-tasks\": \"/tasks/bulk_create\",\n \"bulk-update-task-taskboard-order\": \"/tasks/bulk_update_taskboard_order\",\n \"bulk-update-task-milestone\": \"/tasks/bulk_update_milestone\",\n \"task-upvote\": \"/tasks/%s/upvote\",\n \"task-downvote\": \"/tasks/%s/downvote\",\n \"task-watch\": \"/tasks/%s/watch\",\n \"task-unwatch\": \"/tasks/%s/unwatch\",\n \"task-filters\": \"/tasks/filters_data\",\n \"issues\": \"/issues\",\n \"bulk-create-issues\": \"/issues/bulk_create\",\n \"bulk-update-issue-milestone\": \"/issues/bulk_update_milestone\",\n \"issues-filters\": \"/issues/filters_data\",\n \"issue-upvote\": \"/issues/%s/upvote\",\n \"issue-downvote\": \"/issues/%s/downvote\",\n \"issue-watch\": \"/issues/%s/watch\",\n \"issue-unwatch\": \"/issues/%s/unwatch\",\n \"wiki\": \"/wiki\",\n \"wiki-restore\": \"/wiki/%s/restore\",\n \"wiki-links\": \"/wiki-links\",\n \"history/epic\": \"/history/epic\",\n \"history/us\": \"/history/userstory\",\n \"history/issue\": \"/history/issue\",\n \"history/task\": \"/history/task\",\n \"history/wiki\": \"/history/wiki\",\n \"attachments/epic\": \"/epics/attachments\",\n \"attachments/us\": \"/userstories/attachments\",\n \"attachments/issue\": \"/issues/attachments\",\n \"attachments/task\": \"/tasks/attachments\",\n \"attachments/wiki_page\": \"/wiki/attachments\",\n \"custom-attributes/epic\": \"/epic-custom-attributes\",\n \"custom-attributes/userstory\": \"/userstory-custom-attributes\",\n \"custom-attributes/task\": \"/task-custom-attributes\",\n \"custom-attributes/issue\": \"/issue-custom-attributes\",\n \"custom-attributes-values/epic\": \"/epics/custom-attributes-values\",\n \"custom-attributes-values/userstory\": \"/userstories/custom-attributes-values\",\n \"custom-attributes-values/task\": \"/tasks/custom-attributes-values\",\n \"custom-attributes-values/issue\": \"/issues/custom-attributes-values\",\n \"webhooks\": \"/webhooks\",\n \"webhooks-test\": \"/webhooks/%s/test\",\n \"webhooklogs\": \"/webhooklogs\",\n \"webhooklogs-resend\": \"/webhooklogs/%s/resend\",\n \"epics-csv\": \"/epics/csv?uuid=%s\",\n \"userstories-csv\": \"/userstories/csv?uuid=%s\",\n \"tasks-csv\": \"/tasks/csv?uuid=%s\",\n \"issues-csv\": \"/issues/csv?uuid=%s\",\n \"timeline-profile\": \"/timeline/profile\",\n \"timeline-user\": \"/timeline/user\",\n \"timeline-project\": \"/timeline/project\",\n \"search\": \"/search\",\n \"exporter\": \"/exporter\",\n \"importer\": \"/importer/load_dump\",\n \"feedback\": \"/feedback\",\n \"locales\": \"/locales\",\n \"applications\": \"/applications\",\n \"application-tokens\": \"/application-tokens\",\n \"stats-discover\": \"/stats/discover\",\n \"importers-trello-auth-url\": \"/importers/trello/auth_url\",\n \"importers-trello-authorize\": \"/importers/trello/authorize\",\n \"importers-trello-list-projects\": \"/importers/trello/list_projects\",\n \"importers-trello-list-users\": \"/importers/trello/list_users\",\n \"importers-trello-import-project\": \"/importers/trello/import_project\",\n \"importers-jira-auth-url\": \"/importers/jira/auth_url\",\n \"importers-jira-authorize\": \"/importers/jira/authorize\",\n \"importers-jira-list-projects\": \"/importers/jira/list_projects\",\n \"importers-jira-list-users\": \"/importers/jira/list_users\",\n \"importers-jira-import-project\": \"/importers/jira/import_project\",\n \"importers-github-auth-url\": \"/importers/github/auth_url\",\n \"importers-github-authorize\": \"/importers/github/authorize\",\n \"importers-github-list-projects\": \"/importers/github/list_projects\",\n \"importers-github-list-users\": \"/importers/github/list_users\",\n \"importers-github-import-project\": \"/importers/github/import_project\",\n \"importers-asana-auth-url\": \"/importers/asana/auth_url\",\n \"importers-asana-authorize\": \"/importers/asana/authorize\",\n \"importers-asana-list-projects\": \"/importers/asana/list_projects\",\n \"importers-asana-list-users\": \"/importers/asana/list_users\",\n \"importers-asana-import-project\": \"/importers/asana/import_project\"\n };\n\n initUrls = function($log, $urls) {\n $log.debug(\"Initialize api urls\");\n return $urls.update(urls);\n };\n\n initResources = function($log, $rs) {\n var i, len, provider, providers, results;\n $log.debug(\"Initialize resources\");\n providers = _.toArray(arguments).slice(2);\n results = [];\n for (i = 0, len = providers.length; i < len; i++) {\n provider = providers[i];\n results.push(provider($rs));\n }\n return results;\n };\n\n module = angular.module(\"taigaResources\", [\"taigaBase\"]);\n\n module.service(\"$tgResources\", ResourcesService);\n\n module.run([\"$log\", \"$tgUrls\", initUrls]);\n\n module.run([\"$log\", \"$tgResources\", \"$tgProjectsResourcesProvider\", \"$tgCustomAttributesResourcesProvider\", \"$tgCustomAttributesValuesResourcesProvider\", \"$tgMembershipsResourcesProvider\", \"$tgNotifyPoliciesResourcesProvider\", \"$tgInvitationsResourcesProvider\", \"$tgRolesResourcesProvider\", \"$tgUserProjectSettingsResourcesProvider\", \"$tgUserSettingsResourcesProvider\", \"$tgSprintsResourcesProvider\", \"$tgEpicsResourcesProvider\", \"$tgUserstoriesResourcesProvider\", \"$tgTasksResourcesProvider\", \"$tgIssuesResourcesProvider\", \"$tgWikiResourcesProvider\", \"$tgSearchResourcesProvider\", \"$tgMdRenderResourcesProvider\", \"$tgHistoryResourcesProvider\", \"$tgKanbanResourcesProvider\", \"$tgModulesResourcesProvider\", \"$tgWebhooksResourcesProvider\", \"$tgWebhookLogsResourcesProvider\", \"$tgLocalesResourcesProvider\", \"$tgUsersResourcesProvider\", initResources]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/search.coffee\n */\n\n(function() {\n var SearchBoxDirective, SearchController, SearchDirective, bindOnce, debounce, debounceLeading, groupBy, mixOf, module, taiga, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n mixOf = this.taiga.mixOf;\n\n debounceLeading = this.taiga.debounceLeading;\n\n trim = this.taiga.trim;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaSearch\", []);\n\n SearchController = (function(superClass) {\n extend(SearchController, superClass);\n\n SearchController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"tgAppMetaService\", \"$tgNavUrls\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function SearchController(scope1, repo, rs, params, q, location, appMetaService, navUrls, translate, errorHandlingService, projectService1) {\n var description, loadSearchData, title;\n this.scope = scope1;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService1;\n this.scope.sectionName = \"Search\";\n this.loadInitialData();\n title = this.translate.instant(\"SEARCH.PAGE_TITLE\", {\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"SEARCH.PAGE_DESCRIPTION\", {\n projectName: this.scope.project.name,\n projectDescription: this.scope.project.description\n });\n this.appMetaService.setAll(title, description);\n this.scope.searchTerm = null;\n loadSearchData = debounceLeading(100, (function(_this) {\n return function(t) {\n return _this.loadSearchData(t);\n };\n })(this));\n bindOnce(this.scope, \"projectId\", (function(_this) {\n return function(projectId) {\n if (!_this.scope.searchResults && _this.scope.searchTerm) {\n return _this.loadSearchData();\n }\n };\n })(this));\n this.scope.$watch(\"searchTerm\", (function(_this) {\n return function(term) {\n if (term !== void 0 && _this.scope.projectId) {\n return _this.loadSearchData(term);\n }\n };\n })(this));\n }\n\n SearchController.prototype.loadFilters = function() {\n var defered;\n defered = this.q.defer();\n defered.resolve();\n return defered.promise;\n };\n\n SearchController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.epicStatusById = groupBy(project.epic_statuses, function(x) {\n return x.id;\n });\n this.scope.issueStatusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n this.scope.taskStatusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n return project;\n };\n\n SearchController.prototype.loadSearchData = function(term) {\n if (term == null) {\n term = \"\";\n }\n this.scope.loading = true;\n return this._loadSearchData(term).then((function(_this) {\n return function(data) {\n _this.scope.searchResults = data;\n return _this.scope.loading = false;\n };\n })(this));\n };\n\n SearchController.prototype._loadSearchData = function(term) {\n if (term == null) {\n term = \"\";\n }\n if (this._promise) {\n this._promise.abort();\n }\n this._promise = this.rs.search[\"do\"](this.scope.projectId, term);\n return this._promise;\n };\n\n SearchController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.scope.projectId = project.id;\n return this.fillUsersAndRoles(project.members, project.roles);\n };\n\n return SearchController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"SearchController\", SearchController);\n\n SearchBoxDirective = function(projectService, $lightboxService, $navurls, $location, $route) {\n var link;\n link = function($scope, $el, $attrs) {\n var openLightbox, project, submit;\n project = null;\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var form, text, url;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n text = $el.find(\"#search-text\").val();\n url = $navurls.resolve(\"project-search\", {\n project: project.get(\"slug\")\n });\n return $scope.$apply(function() {\n $lightboxService.close($el);\n $location.path(url);\n $location.search(\"text\", text).path(url);\n return $route.reload();\n });\n };\n })(this));\n openLightbox = function() {\n project = projectService.project;\n return $lightboxService.open($el).then(function() {\n return $el.find(\"#search-text\").focus();\n });\n };\n $el.on(\"submit\", \"form\", submit);\n return openLightbox();\n };\n return {\n templateUrl: \"search/lightbox-search.html\",\n link: link\n };\n };\n\n SearchBoxDirective.$inject = [\"tgProjectService\", \"lightboxService\", \"$tgNavUrls\", \"$tgLocation\", \"$route\"];\n\n module.directive(\"tgSearchBox\", SearchBoxDirective);\n\n SearchDirective = function($log, $compile, $templatecache, $routeparams, $location, $analytics) {\n var link, linkTable;\n linkTable = function($scope, $el, $attrs, $ctrl) {\n var activeSectionName, applyAutoTab, currentSearchResults, getActiveSection, markSectionTabActive, renderFilterTabs, renderTableContent, tabsDom, templates;\n applyAutoTab = true;\n activeSectionName = \"userstories\";\n tabsDom = $el.find(\".search-filter\");\n currentSearchResults = null;\n getActiveSection = function(data) {\n var i, len, maxVal, name, ref, selectedSection, value;\n maxVal = 0;\n selectedSection = {};\n selectedSection.name = \"userstories\";\n selectedSection.value = [];\n if (!applyAutoTab) {\n selectedSection.name = activeSectionName;\n selectedSection.value = data[activeSectionName];\n return selectedSection;\n }\n if (data) {\n ref = [\"userstories\", \"epics\", \"issues\", \"tasks\", \"wikipages\"];\n for (i = 0, len = ref.length; i < len; i++) {\n name = ref[i];\n value = data[name];\n if (value.length > maxVal) {\n maxVal = value.length;\n selectedSection.name = name;\n selectedSection.value = value;\n break;\n }\n }\n }\n if (maxVal === 0) {\n return selectedSection;\n }\n return selectedSection;\n };\n renderFilterTabs = function(data) {\n var name, results, value;\n results = [];\n for (name in data) {\n value = data[name];\n tabsDom.find(\"li.\" + name).show();\n results.push(tabsDom.find(\"li.\" + name + \" .num\").html(value.length));\n }\n return results;\n };\n markSectionTabActive = function(section) {\n tabsDom.find(\"a.active\").removeClass(\"active\");\n tabsDom.find(\"li.\" + section.name + \" a\").addClass(\"active\");\n applyAutoTab = false;\n return activeSectionName = section.name;\n };\n templates = {\n epics: $templatecache.get(\"search-epics\"),\n issues: $templatecache.get(\"search-issues\"),\n tasks: $templatecache.get(\"search-tasks\"),\n userstories: $templatecache.get(\"search-userstories\"),\n wikipages: $templatecache.get(\"search-wikipages\")\n };\n renderTableContent = function(section) {\n var element, oldElements, oldScope, scope, template;\n oldElements = $el.find(\".search-result-table\").children();\n oldScope = oldElements.scope();\n if (oldScope) {\n oldScope.$destroy();\n oldElements.remove();\n }\n scope = $scope.$new();\n scope[section.name] = section.value;\n template = angular.element.parseHTML(trim(templates[section.name]));\n element = $compile(template)(scope);\n return $el.find(\".search-result-table\").html(element);\n };\n $scope.$watch(\"searchResults\", function(data) {\n var activeSection;\n currentSearchResults = data;\n if (!currentSearchResults) {\n return;\n }\n activeSection = getActiveSection(data);\n renderFilterTabs(data);\n renderTableContent(activeSection);\n return markSectionTabActive(activeSection);\n });\n $scope.$watch(\"searchTerm\", function(searchTerm) {\n if (searchTerm !== void 0) {\n $location.search(\"text\", searchTerm);\n }\n return $analytics.trackPage($location.url(), \"Search\");\n });\n return $el.on(\"click\", \".search-filter li > a\", function(event) {\n var section, sectionData, sectionName, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n sectionName = target.parent().data(\"name\");\n sectionData = !currentSearchResults ? [] : currentSearchResults[sectionName];\n section = {\n name: sectionName,\n value: sectionData\n };\n return $scope.$apply(function() {\n renderTableContent(section);\n return markSectionTabActive(section);\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, searchText;\n $ctrl = $el.controller();\n linkTable($scope, $el, $attrs, $ctrl);\n searchText = $routeparams.text;\n return $scope.$watch(\"projectId\", function(projectId) {\n if (projectId != null) {\n return $scope.searchTerm = searchText;\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSearch\", [\"$log\", \"$compile\", \"$templateCache\", \"$routeParams\", \"$tgLocation\", \"$tgAnalytics\", SearchDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTaskboard\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/tasks.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTasks\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/team.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaTeam\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaUserSettings\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/userstories.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaUserStories\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaWiki\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/analytics.coffee\n */\n\n(function() {\n var AnalyticsService, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n AnalyticsService = (function(superClass) {\n extend(AnalyticsService, superClass);\n\n AnalyticsService.$inject = [\"$rootScope\", \"$log\", \"$tgConfig\", \"$window\", \"$document\", \"$location\"];\n\n function AnalyticsService(rootscope, log, config, win, doc, location) {\n var conf;\n this.rootscope = rootscope;\n this.log = log;\n this.config = config;\n this.win = win;\n this.doc = doc;\n this.location = location;\n this.initialized = false;\n conf = this.config.get(\"analytics\", {});\n this.accountId = conf.accountId;\n this.pageEvent = conf.pageEvent || \"$routeChangeSuccess\";\n this.trackRoutes = conf.trackRoutes || true;\n this.ignoreFirstPageLoad = conf.ignoreFirstPageLoad || false;\n }\n\n AnalyticsService.prototype.initialize = function() {\n if (!this.accountId) {\n this.log.debug(\"Analytics: no acount id provided. Disabling.\");\n return;\n }\n this.injectAnalytics();\n this.win.ga(\"create\", this.accountId, \"auto\");\n this.win.ga(\"require\", \"ec\");\n this.win.ga(\"require\", \"displayfeatures\");\n if (this.trackRoutes && (!this.ignoreFirstPageLoad)) {\n this.win.ga(\"send\", \"pageview\", this.getUrl());\n }\n if (this.trackRoutes) {\n this.rootscope.$on(this.pageEvent, (function(_this) {\n return function() {\n return _this.trackPage(_this.getUrl(), \"Taiga\");\n };\n })(this));\n }\n this.initialized = true;\n return this.setUserId();\n };\n\n AnalyticsService.prototype.setUserId = function() {\n var ref, ref1;\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n return this.win.ga('set', 'userId', (ref = this.rootscope) != null ? (ref1 = ref.user) != null ? ref1.uuid : void 0 : void 0);\n };\n\n AnalyticsService.prototype.getUrl = function() {\n return this.location.path();\n };\n\n AnalyticsService.prototype.injectAnalytics = function() {\n var fn;\n fn = (function(i,s,o,g,r,a,m){i[\"GoogleAnalyticsObject\"]=r;i[r]=i[r]||function(){\n (i[r].q=i[r].q||[]).push(arguments);},i[r].l=1*new Date();a=s.createElement(o),\n m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m);});\n return fn(window, document, \"script\", \"//www.google-analytics.com/analytics.js\", \"ga\");\n };\n\n AnalyticsService.prototype.trackPage = function(url, title) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n title = title || this.doc[0].title;\n return this.win.ga(\"send\", \"pageview\", {\n \"page\": url,\n \"title\": title\n });\n };\n\n AnalyticsService.prototype.trackEvent = function(category, action, label, value) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n return this.win.ga(\"send\", \"event\", category, action, label, value);\n };\n\n AnalyticsService.prototype.ecViewPlan = function(plan) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan.plan_id,\n 'name': plan.name,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'detail');\n return this.trackEvent(\"ecommerce\", \"view-product-detail\", plan.name, plan.plan_id);\n };\n\n AnalyticsService.prototype.ecClickPlan = function(plan) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan.plan_id,\n 'name': plan.name,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'click');\n return this.trackEvent(\"ecommerce\", \"click-product\", plan.name, plan.plan_id);\n };\n\n AnalyticsService.prototype.ecListPlans = function(arg, page) {\n var i, len, plan, plans, position;\n plans = arg[0];\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n position = 1;\n for (i = 0, len = plans.length; i < len; i++) {\n plan = plans[i];\n this.win.ga('ec:addImpression', {\n 'id': plan.plan_id,\n 'name': plan.name,\n 'list': page,\n 'position': position\n });\n position++;\n }\n return this.trackEvent(\"ecommerce\", \"list-plans\");\n };\n\n AnalyticsService.prototype.ecAddToCart = function(plan_id, plan_name, plan_price) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan_id,\n 'name': plan_name,\n 'price': plan_price,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'add');\n return this.trackEvent('ecommerce', 'add-to-cart', 'Collect Payment Info', null);\n };\n\n AnalyticsService.prototype.ecConfirmChange = function(plan_id, plan_name, plan_price) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan_id,\n 'name': plan_name,\n 'price': plan_price,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'checkout', {\n 'step': 1\n });\n return this.trackEvent(\"ecommerce\", \"start-checkout\", \"start\", 1);\n };\n\n AnalyticsService.prototype.ecPurchase = function(plan_id, plan_name, plan_price) {\n if (!this.initialized) {\n return;\n }\n if (!this.win.ga) {\n return;\n }\n this.win.ga('ec:addProduct', {\n 'id': plan_id,\n 'name': plan_name,\n 'price': plan_price,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'checkout', {\n 'step': 2\n });\n this.trackEvent(\"ecommerce\", \"end-checkout\", \"end\", 2);\n this.win.ga('ec:addProduct', {\n 'id': plan_id,\n 'name': plan_name,\n 'price': plan_price,\n 'category': \"plans\",\n 'quantity': 1,\n 'position': 1\n });\n this.win.ga('ec:setAction', 'purchase', {\n 'id': plan_id,\n 'revenue': plan_price\n });\n return this.trackEvent('ecommerce', 'checkout', 'Plan checkout', null);\n };\n\n return AnalyticsService;\n\n })(taiga.Service);\n\n module.service(\"$tgAnalytics\", AnalyticsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/bind-scope.coffee\n */\n\n(function() {\n var BindScope, module;\n\n module = angular.module(\"taigaCommon\");\n\n BindScope = function(config) {\n var link;\n if (!config.debugInfo) {\n jQuery.fn.scope = function() {\n return this.data('scope');\n };\n }\n link = function($scope, $el) {\n if (!config.debugInfo) {\n return $el.data('scope', $scope).addClass('tg-scope');\n }\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBindScope\", [\"$tgConfig\", BindScope]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/compile-html.directive.coffee\n */\n\n(function() {\n var CompileHtmlDirective;\n\n CompileHtmlDirective = function($compile) {\n var link;\n link = function(scope, element, attrs) {\n return scope.$watch(attrs.tgCompileHtml, function(newValue, oldValue) {\n element.html(newValue);\n return $compile(element.contents())(scope);\n });\n };\n return {\n link: link\n };\n };\n\n CompileHtmlDirective.$inject = [\"$compile\"];\n\n angular.module(\"taigaCommon\").directive(\"tgCompileHtml\", CompileHtmlDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/components.coffee\n */\n\n(function() {\n var BlockButtonDirective, CreatedByDisplayDirective, DateRangeDirective, DateSelectorDirective, DeleteButtonDirective, ListItemAssignedtoDirective, ListItemEpicStatusDirective, ListItemIssueStatusDirective, ListItemPriorityDirective, ListItemSeverityDirective, ListItemTaskStatusDirective, ListItemTypeDirective, ListItemUsStatusDirective, SprintProgressBarDirective, TgMainTitleDirective, TgProgressBarDirective, UserDisplayDirective, WatchersDirective, bindOnce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaCommon\");\n\n DateRangeDirective = function($translate) {\n var link, renderRange;\n renderRange = function($el, first, second) {\n var endDate, initDate, prettyDate;\n prettyDate = $translate.instant(\"BACKLOG.SPRINTS.DATE\");\n initDate = moment(first).format(prettyDate);\n endDate = moment(second).format(prettyDate);\n return $el.html(initDate + \"-\" + endDate);\n };\n link = function($scope, $el, $attrs) {\n var first, ref, second;\n ref = $attrs.tgDateRange.split(\",\"), first = ref[0], second = ref[1];\n return bindOnce($scope, first, function(valFirst) {\n return bindOnce($scope, second, function(valSecond) {\n return renderRange($el, valFirst, valSecond);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgDateRange\", [\"$translate\", DateRangeDirective]);\n\n DateSelectorDirective = function($rootscope, datePickerConfigService) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var initialize, selectedDate, unbind;\n selectedDate = null;\n initialize = function() {\n var datePickerConfig;\n datePickerConfig = datePickerConfigService.get();\n _.merge(datePickerConfig, {\n field: $el[0]\n });\n return $el.picker = new Pikaday(datePickerConfig);\n };\n unbind = $rootscope.$on(\"$translateChangeEnd\", (function(_this) {\n return function(ctx) {\n if ($el.picker) {\n $el.picker.destroy();\n }\n return initialize();\n };\n })(this));\n $attrs.$observe(\"pickerValue\", function(val) {\n $el.val(val);\n if (val != null) {\n if ($el.picker) {\n $el.picker.destroy();\n }\n initialize();\n }\n return $el.picker.setDate(val);\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n unbind();\n return $el.picker.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgDateSelector\", [\"$rootScope\", \"tgDatePickerConfigService\", DateSelectorDirective]);\n\n SprintProgressBarDirective = function() {\n var link, renderProgress;\n renderProgress = function($el, percentage, visual_percentage) {\n if ($el.hasClass(\".current-progress\")) {\n return $el.css(\"width\", percentage + \"%\");\n } else {\n $el.find(\".current-progress\").css(\"width\", visual_percentage + \"%\");\n return $el.find(\".number\").html(percentage + \" %\");\n }\n };\n link = function($scope, $el, $attrs) {\n bindOnce($scope, $attrs.tgSprintProgressbar, function(sprint) {\n var closedPoints, percentage, totalPoints, visual_percentage;\n closedPoints = sprint.closed_points;\n totalPoints = sprint.total_points;\n percentage = 0;\n if (totalPoints !== 0) {\n percentage = Math.round(100 * (closedPoints / totalPoints));\n }\n visual_percentage = 0;\n if (totalPoints !== 0) {\n visual_percentage = Math.round(98 * (closedPoints / totalPoints));\n }\n return renderProgress($el, percentage, visual_percentage);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSprintProgressbar\", SprintProgressBarDirective);\n\n CreatedByDisplayDirective = function($template, $compile, $translate, $navUrls, avatarService) {\n var link;\n link = function($scope, $el, $attrs) {\n bindOnce($scope, $attrs.ngModel, function(model) {\n var avatar, ref;\n if (model != null) {\n avatar = avatarService.getAvatar(model.owner_extra_info);\n $scope.owner = model.owner_extra_info || {\n full_name_display: $translate.instant(\"COMMON.EXTERNAL_USER\")\n };\n $scope.owner.avatar = avatar.url;\n $scope.owner.bg = avatar.bg;\n $scope.url = ((ref = $scope.owner) != null ? ref.is_active : void 0) ? $navUrls.resolve(\"user-profile\", {\n username: $scope.owner.username\n }) : \"\";\n return $scope.date = moment(model.created_date).format($translate.instant(\"COMMON.DATETIME\"));\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n scope: true,\n templateUrl: \"common/components/created-by.html\"\n };\n };\n\n module.directive(\"tgCreatedByDisplay\", [\"$tgTemplate\", \"$compile\", \"$translate\", \"$tgNavUrls\", \"tgAvatarService\", CreatedByDisplayDirective]);\n\n UserDisplayDirective = function($template, $compile, $translate, $navUrls, avatarService) {\n var link;\n link = function($scope, $el, $attrs) {\n var avatar, id;\n id = $attrs.tgUserId;\n $scope.user = $scope.usersById[id] || {\n full_name_display: $translate.instant(\"COMMON.EXTERNAL_USER\")\n };\n avatar = avatarService.getAvatar($scope.usersById[id] || null);\n $scope.user.avatar = avatar.url;\n $scope.user.bg = avatar.bg;\n $scope.url = $scope.user.is_active ? $navUrls.resolve(\"user-profile\", {\n username: $scope.user.username\n }) : \"\";\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n scope: true,\n templateUrl: \"common/components/user-display.html\"\n };\n };\n\n module.directive(\"tgUserDisplay\", [\"$tgTemplate\", \"$compile\", \"$translate\", \"$tgNavUrls\", \"tgAvatarService\", UserDisplayDirective]);\n\n WatchersDirective = function($rootscope, $confirm, $repo, $modelTransform, $template, $compile, $translate) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var deleteWatcher, isEditable, renderWatchers, save;\n isEditable = function() {\n var ref, ref1;\n return ((ref = $scope.project) != null ? (ref1 = ref.my_permissions) != null ? ref1.indexOf($attrs.requiredPerm) : void 0 : void 0) !== -1;\n };\n save = function(watchers) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.watchers = watchers;\n return item;\n });\n transform.then(function() {\n watchers = _.map(watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n renderWatchers(watchers);\n return $rootscope.$broadcast(\"object:updated\");\n });\n return transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n };\n deleteWatcher = function(watcherIds) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.watchers = watcherIds;\n return item;\n });\n transform.then(function() {\n var item, watchers;\n item = $modelTransform.getObj();\n watchers = _.map(item.watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n renderWatchers(watchers);\n return $rootscope.$broadcast(\"object:updated\");\n });\n return transform.then(null, function() {\n item.revert();\n return $confirm.notify(\"error\");\n });\n };\n renderWatchers = function(watchers) {\n $scope.watchers = watchers;\n return $scope.isEditable = isEditable();\n };\n $el.on(\"click\", \".js-delete-watcher\", function(event) {\n var message, target, title, watcherId;\n event.preventDefault();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n watcherId = target.data(\"watcher-id\");\n title = $translate.instant(\"COMMON.WATCHERS.TITLE_LIGHTBOX_DELETE_WARTCHER\");\n message = $scope.usersById[watcherId].full_name_display;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var watcherIds;\n askResponse.finish();\n watcherIds = _.clone($model.$modelValue.watchers, false);\n watcherIds = _.pull(watcherIds, watcherId);\n return deleteWatcher(watcherIds);\n };\n })(this));\n });\n $scope.$on(\"watcher:added\", function(ctx, watcherId) {\n var watchers;\n watchers = _.clone($model.$modelValue.watchers, false);\n watchers.push(watcherId);\n watchers = _.uniq(watchers);\n return save(watchers);\n });\n $scope.$watch($attrs.ngModel, function(item) {\n var watchers;\n if (item == null) {\n return;\n }\n watchers = _.map(item.watchers, function(watcherId) {\n return $scope.usersById[watcherId];\n });\n watchers = _.filter(watchers, function(it) {\n return !!it;\n });\n return renderWatchers(watchers);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n scope: true,\n templateUrl: \"common/components/watchers.html\",\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgWatchers\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", \"$translate\", WatchersDirective]);\n\n BlockButtonDirective = function($rootscope, $loading, $template) {\n var link, template;\n template = $template.get(\"common/components/block-button.html\");\n link = function($scope, $el, $attrs, $model) {\n var isEditable;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n $scope.$watch($attrs.ngModel, function(item) {\n if (!item) {\n return;\n }\n if (isEditable()) {\n $el.find('.item-block').addClass('editable');\n }\n if (item.is_blocked) {\n $el.find('.item-block').removeClass('is-active');\n return $el.find('.item-unblock').addClass('is-active');\n } else {\n $el.find('.item-block').addClass('is-active');\n return $el.find('.item-unblock').removeClass('is-active');\n }\n });\n $el.on(\"click\", \".item-block\", function(event) {\n event.preventDefault();\n return $rootscope.$broadcast(\"block\", $model.$modelValue);\n });\n $el.on(\"click\", \".item-unblock\", function(event) {\n var currentLoading, finish;\n event.preventDefault();\n currentLoading = $loading().target($el.find(\".item-unblock\")).start();\n finish = function() {\n return currentLoading.finish();\n };\n return $rootscope.$broadcast(\"unblock\", $model.$modelValue, finish);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgBlockButton\", [\"$rootScope\", \"$tgLoading\", \"$tgTemplate\", BlockButtonDirective]);\n\n DeleteButtonDirective = function($log, $repo, $confirm, $location, $template) {\n var link, template;\n template = $template.get(\"common/components/delete-button.html\");\n link = function($scope, $el, $attrs, $model) {\n if (!$attrs.onDeleteGoToUrl) {\n return $log.error(\"DeleteButtonDirective requires on-delete-go-to-url set in scope.\");\n }\n if (!$attrs.onDeleteTitle) {\n return $log.error(\"DeleteButtonDirective requires on-delete-title set in scope.\");\n }\n $el.on(\"click\", \".button-delete\", function(event) {\n var subtitle, title;\n title = $attrs.onDeleteTitle;\n subtitle = $model.$modelValue.subject;\n return $confirm.askOnDelete(title, subtitle).then((function(_this) {\n return function(askResponse) {\n var promise;\n promise = $repo.remove($model.$modelValue);\n promise.then(function() {\n var url;\n askResponse.finish();\n url = $scope.$eval($attrs.onDeleteGoToUrl);\n return $location.path(url);\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n template: template\n };\n };\n\n module.directive(\"tgDeleteButton\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgTemplate\", DeleteButtonDirective]);\n\n ListItemEpicStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var epic;\n epic = $scope.$eval($attrs.tgListitemEpicStatus);\n return bindOnce($scope, \"epicStatusById\", function(epicStatusById) {\n return $el.html(epicStatusById[epic.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemEpicStatus\", ListItemEpicStatusDirective);\n\n ListItemUsStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var us;\n us = $scope.$eval($attrs.tgListitemUsStatus);\n return bindOnce($scope, \"usStatusById\", function(usStatusById) {\n return $el.html(usStatusById[us.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemUsStatus\", ListItemUsStatusDirective);\n\n ListItemTaskStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var task;\n task = $scope.$eval($attrs.tgListitemTaskStatus);\n return bindOnce($scope, \"taskStatusById\", function(taskStatusById) {\n return $el.html(taskStatusById[task.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemTaskStatus\", ListItemTaskStatusDirective);\n\n ListItemAssignedtoDirective = function($template, $translate, avatarService) {\n var link, template;\n template = $template.get(\"common/components/list-item-assigned-to-avatar.html\", true);\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, \"usersById\", function(usersById) {\n var avatar, ctx, item, member;\n item = $scope.$eval($attrs.tgListitemAssignedto);\n ctx = {\n name: $translate.instant(\"COMMON.ASSIGNED_TO.NOT_ASSIGNED\")\n };\n member = usersById[item.assigned_to];\n avatar = avatarService.getAvatar(member);\n ctx.imgurl = avatar.url;\n ctx.bg = avatar.bg;\n if (member) {\n ctx.name = member.full_name_display;\n }\n return $el.html(template(ctx));\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemAssignedto\", [\"$tgTemplate\", \"$translate\", \"tgAvatarService\", ListItemAssignedtoDirective]);\n\n ListItemIssueStatusDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemIssueStatus);\n return bindOnce($scope, \"issueStatusById\", function(issueStatusById) {\n return $el.html(issueStatusById[issue.status].name);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgListitemIssueStatus\", ListItemIssueStatusDirective);\n\n ListItemTypeDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var render;\n render = function(issueTypeById, issue) {\n var domNode, type;\n type = issueTypeById[issue.type];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", type.color);\n return domNode.attr(\"title\", type.name);\n };\n bindOnce($scope, \"issueTypeById\", function(issueTypeById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemType);\n return render(issueTypeById, issue);\n });\n return $scope.$watch($attrs.tgListitemType, function(issue) {\n return render($scope.issueTypeById, issue);\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/level.html\"\n };\n };\n\n module.directive(\"tgListitemType\", ListItemTypeDirective);\n\n ListItemPriorityDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var render;\n render = function(priorityById, issue) {\n var domNode, priority;\n priority = priorityById[issue.priority];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", priority.color);\n return domNode.attr(\"title\", priority.name);\n };\n bindOnce($scope, \"priorityById\", function(priorityById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemPriority);\n return render(priorityById, issue);\n });\n return $scope.$watch($attrs.tgListitemPriority, function(issue) {\n return render($scope.priorityById, issue);\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/level.html\"\n };\n };\n\n module.directive(\"tgListitemPriority\", ListItemPriorityDirective);\n\n ListItemSeverityDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var render;\n render = function(severityById, issue) {\n var domNode, severity;\n severity = severityById[issue.severity];\n domNode = $el.find(\".level\");\n domNode.css(\"background-color\", severity.color);\n return domNode.attr(\"title\", severity.name);\n };\n bindOnce($scope, \"severityById\", function(severityById) {\n var issue;\n issue = $scope.$eval($attrs.tgListitemSeverity);\n return render(severityById, issue);\n });\n return $scope.$watch($attrs.tgListitemSeverity, function(issue) {\n return render($scope.severityById, issue);\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/level.html\"\n };\n };\n\n module.directive(\"tgListitemSeverity\", ListItemSeverityDirective);\n\n TgProgressBarDirective = function($template) {\n var link, render, template;\n template = $template.get(\"common/components/progress-bar.html\", true);\n render = function(el, percentage) {\n return el.html(template({\n percentage: percentage\n }));\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch($attrs.tgProgressBar, function(percentage) {\n percentage = _.max([0, percentage]);\n percentage = _.min([100, percentage]);\n return render($el, percentage);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProgressBar\", [\"$tgTemplate\", TgProgressBarDirective]);\n\n TgMainTitleDirective = function($translate) {\n var link;\n link = function($scope, $el, $attrs) {\n $attrs.$observe(\"i18nSectionName\", function(i18nSectionName) {\n return $scope.sectionName = i18nSectionName;\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/main-title.html\",\n scope: {\n projectName: \"=projectName\"\n }\n };\n };\n\n module.directive(\"tgMainTitle\", [\"$translate\", TgMainTitleDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/confirm.coffee\n */\n\n(function() {\n var ConfirmService, NOTIFICATION_MSG, bindMethods, cancelTimeout, debounce, module, taiga, timeout,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n timeout = this.taiga.timeout;\n\n cancelTimeout = this.taiga.cancelTimeout;\n\n debounce = this.taiga.debounce;\n\n bindMethods = this.taiga.bindMethods;\n\n NOTIFICATION_MSG = {\n \"success\": {\n title: \"NOTIFICATION.OK\",\n message: \"NOTIFICATION.SAVED\"\n },\n \"error\": {\n title: \"NOTIFICATION.WARNING\",\n message: \"NOTIFICATION.WARNING_TEXT\"\n },\n \"light-error\": {\n title: \"NOTIFICATION.WARNING\",\n message: \"NOTIFICATION.WARNING_TEXT\"\n }\n };\n\n ConfirmService = (function(superClass) {\n extend(ConfirmService, superClass);\n\n ConfirmService.$inject = [\"$q\", \"lightboxService\", \"$tgLoading\", \"$translate\", \"$filter\"];\n\n function ConfirmService(q, lightboxService, loading, translate, filter) {\n this.q = q;\n this.lightboxService = lightboxService;\n this.loading = loading;\n this.translate = translate;\n this.filter = filter;\n bindMethods(this);\n }\n\n ConfirmService.prototype.hide = function(el) {\n if (el) {\n this.lightboxService.close(el);\n return el.off(\".confirm-dialog\");\n }\n };\n\n ConfirmService.prototype.ask = function(title, subtitle, message, lightboxSelector) {\n var defered, el, onEsc;\n if (lightboxSelector == null) {\n lightboxSelector = \".lightbox-generic-ask\";\n }\n defered = this.q.defer();\n el = angular.element(lightboxSelector);\n el.find(\".title\").text(title || '');\n el.find(\".subtitle\").text(subtitle || '');\n if (message) {\n message = this.filter('textToHTML')(message);\n }\n el.find(\".message\").html(message || '');\n el.on(\"click.confirm-dialog\", \".button-green\", debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n currentLoading = _this.loading().target(target).start();\n return defered.resolve({\n finish: function(ok) {\n if (ok == null) {\n ok = true;\n }\n currentLoading.finish();\n if (ok) {\n return _this.hide(el);\n }\n }\n });\n };\n })(this)));\n el.on(\"click.confirm-dialog\", \".button-red\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.reject();\n return _this.hide(el);\n };\n })(this));\n onEsc = (function(_this) {\n return function() {\n return _this.hide(el);\n };\n })(this);\n this.lightboxService.open(el, null, onEsc);\n return defered.promise;\n };\n\n ConfirmService.prototype.askOnDelete = function(title, message, subtitle) {\n if (subtitle == null) {\n subtitle = this.translate.instant(\"NOTIFICATION.ASK_DELETE\");\n }\n return this.ask(title, subtitle, message);\n };\n\n ConfirmService.prototype.askChoice = function(title, subtitle, choices, replacement, warning, lightboxSelector) {\n var choicesField, defered, el;\n if (lightboxSelector == null) {\n lightboxSelector = \".lightbox-ask-choice\";\n }\n defered = this.q.defer();\n el = angular.element(lightboxSelector);\n el.find(\".title\").text(title);\n el.find(\".subtitle\").text(subtitle);\n if (replacement) {\n el.find(\".replacement\").text(replacement);\n } else {\n el.find(\".replacement\").remove();\n }\n if (warning) {\n el.find(\".warning\").text(warning);\n } else {\n el.find(\".warning\").remove();\n }\n choicesField = el.find(\".choices\");\n choicesField.html('');\n _.each(choices, function(value, key) {\n value = _.escape(value);\n return choicesField.append(angular.element(\"\"));\n });\n el.on(\"click.confirm-dialog\", \"a.button-green\", debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n currentLoading = _this.loading().target(target).start();\n return defered.resolve({\n selected: choicesField.val(),\n finish: function(ok) {\n if (ok == null) {\n ok = true;\n }\n currentLoading.finish();\n if (ok) {\n return _this.hide(el);\n }\n }\n });\n };\n })(this)));\n el.on(\"click.confirm-dialog\", \".button-red\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.reject();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.error = function(message) {\n var defered, el;\n defered = this.q.defer();\n el = angular.element(\".lightbox-generic-error\");\n el.find(\".title\").html(message);\n el.on(\"click.confirm-dialog\", \".button-green\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n el.on(\"click.confirm-dialog\", \".close\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.success = function(title, message, icon, action) {\n var defered, detailImage, el, svgContainer, useSVG;\n defered = this.q.defer();\n el = angular.element(\".lightbox-generic-success\");\n el.find(\"img\").remove();\n el.find(\"svg\").remove();\n if (icon) {\n if (icon.type === \"img\") {\n detailImage = $('').addClass('lb-icon').attr('src', icon.name);\n } else if (icon.type === \"svg\") {\n detailImage = document.createElement(\"div\");\n taiga.addClass(detailImage, \"icon\");\n taiga.addClass(detailImage, icon.name);\n taiga.addClass(detailImage, \"lb-icon\");\n svgContainer = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n useSVG = document.createElementNS('http://www.w3.org/2000/svg', 'use');\n useSVG.setAttributeNS('http://www.w3.org/1999/xlink', 'href', '#' + icon.name);\n detailImage.appendChild(svgContainer).appendChild(useSVG);\n }\n if (detailImage) {\n el.find('section').prepend(detailImage);\n }\n }\n if (title) {\n el.find(\".title\").html(title);\n }\n if (message) {\n el.find(\".message\").html(message);\n }\n if (action) {\n el.find(\".button-green\").html(action);\n el.find(\".button-green\").attr('title', action);\n }\n el.on(\"click.confirm-dialog\", \".button-green\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n el.on(\"click.confirm-dialog\", \".close\", (function(_this) {\n return function(event) {\n event.preventDefault();\n defered.resolve();\n return _this.hide(el);\n };\n })(this));\n this.lightboxService.open(el);\n return defered.promise;\n };\n\n ConfirmService.prototype.loader = function(title, message, spin) {\n var el;\n if (spin == null) {\n spin = false;\n }\n el = angular.element(\".lightbox-generic-loading\");\n if (title) {\n el.find(\".title\").html(title);\n }\n if (message) {\n el.find(\".message\").html(message);\n }\n if (spin) {\n el.find(\".spin\").removeClass(\"hidden\");\n }\n return {\n start: (function(_this) {\n return function() {\n return _this.lightboxService.open(el);\n };\n })(this),\n stop: (function(_this) {\n return function() {\n return _this.lightboxService.close(el);\n };\n })(this),\n update: (function(_this) {\n return function(status, title, message, percent) {\n if (title) {\n el.find(\".title\").html(title);\n }\n if (message) {\n el.find(\".message\").html(message);\n }\n if (percent) {\n el.find(\".spin\").addClass(\"hidden\");\n el.find(\".progress-bar-wrapper\").removeClass(\"hidden\");\n el.find(\".progress-bar-wrapper > .bar\").width(percent + '%');\n return el.find(\".progress-bar-wrapper > span\").html(percent + '%').css('left', (percent - 9) + '%');\n } else {\n el.find(\".spin\").removeClass(\"hidden\");\n return el.find(\".progress-bar-wrapper\").addClass(\"hidden\");\n }\n };\n })(this)\n };\n };\n\n ConfirmService.prototype.notify = function(type, message, title, time) {\n var body, el, selector;\n selector = \".notification-message-\" + type;\n el = angular.element(selector);\n if (el.hasClass(\"active\")) {\n return;\n }\n if (title) {\n el.find(\"h4\").html(title);\n } else {\n el.find(\"h4\").html(this.translate.instant(NOTIFICATION_MSG[type].title));\n }\n if (message) {\n el.find(\"p\").html(message);\n } else {\n el.find(\"p\").html(this.translate.instant(NOTIFICATION_MSG[type].message));\n }\n body = angular.element(\"body\");\n body.find(\".notification-message .notification-light\").removeClass('active').addClass('inactive');\n body.find(selector).removeClass('inactive').addClass('active');\n if (this.tsem) {\n cancelTimeout(this.tsem);\n }\n if (!time) {\n time = type === 'error' || type === 'light-error' ? 3500 : 1500;\n }\n this.tsem = timeout(time, (function(_this) {\n return function() {\n body.find(selector).removeClass('active').addClass('inactive').one('animationend', function() {\n return $(this).removeClass('inactive');\n });\n return delete _this.tsem;\n };\n })(this));\n return el.on(\"click\", \".icon-close, .close\", (function(_this) {\n return function(event) {\n return body.find(selector).removeClass('active').addClass('inactive');\n };\n })(this));\n };\n\n return ConfirmService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaCommon\");\n\n module.service(\"$tgConfirm\", ConfirmService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/custom-field-values.coffee\n */\n\n(function() {\n var CHECKBOX_TYPE, CustomAttributeValueDirective, CustomAttributesValuesController, CustomAttributesValuesDirective, DATE_TYPE, DROPDOWN_TYPE, MULTILINE_TYPE, NUMBER_TYPE, RICHTEXT_TYPE, TEXT_TYPE, TYPE_CHOICES, URL_TYPE, bindMethods, bindOnce, debounce, generateHash, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n bindMethods = this.taiga.bindMethods;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n generateHash = taiga.generateHash;\n\n module = angular.module(\"taigaCommon\");\n\n TEXT_TYPE = \"text\";\n\n RICHTEXT_TYPE = \"url\";\n\n MULTILINE_TYPE = \"multiline\";\n\n DATE_TYPE = \"date\";\n\n URL_TYPE = \"url\";\n\n DROPDOWN_TYPE = \"dropdown\";\n\n CHECKBOX_TYPE = \"checkbox\";\n\n NUMBER_TYPE = \"number\";\n\n TYPE_CHOICES = [\n {\n key: TEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT\"\n }, {\n key: MULTILINE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI\"\n }, {\n key: DATE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE\"\n }, {\n key: URL_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL\"\n }, {\n key: RICHTEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT\"\n }, {\n key: DROPDOWN_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DROPDOWN\"\n }, {\n key: CHECKBOX_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_CHECKBOX\"\n }, {\n key: NUMBER_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_NUMBER\"\n }\n ];\n\n CustomAttributesValuesController = (function(superClass) {\n extend(CustomAttributesValuesController, superClass);\n\n CustomAttributesValuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$q\"];\n\n function CustomAttributesValuesController(scope1, rootscope, repo, rs, confirm, q) {\n this.scope = scope1;\n this.rootscope = rootscope;\n this.repo = repo;\n this.rs = rs;\n this.confirm = confirm;\n this.q = q;\n bindMethods(this);\n this.type = null;\n this.objectId = null;\n this.projectId = null;\n this.customAttributes = [];\n this.customAttributesValues = null;\n }\n\n CustomAttributesValuesController.prototype.initialize = function(type, objectId) {\n this.project = this.scope.project;\n this.type = type;\n this.objectId = objectId;\n return this.projectId = this.scope.projectId;\n };\n\n CustomAttributesValuesController.prototype.loadCustomAttributesValues = function() {\n if (!this.objectId) {\n return this.customAttributesValues;\n }\n return this.rs.customAttributesValues[this.type].get(this.objectId).then((function(_this) {\n return function(customAttributesValues) {\n _this.customAttributes = _this.project[_this.type + \"_custom_attributes\"];\n _this.customAttributesValues = customAttributesValues;\n return customAttributesValues;\n };\n })(this));\n };\n\n CustomAttributesValuesController.prototype.getAttributeValue = function(attribute) {\n var attributeValue;\n attributeValue = _.clone(attribute, false);\n attributeValue.value = this.customAttributesValues.attributes_values[attribute.id];\n return attributeValue;\n };\n\n CustomAttributesValuesController.prototype.updateAttributeValue = function(attributeValue) {\n var attributesValues, onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"custom-attributes-values:edit\");\n };\n })(this);\n onError = (function(_this) {\n return function(response) {\n _this.confirm.notify(\"error\");\n return _this.q.reject();\n };\n })(this);\n attributesValues = _.clone(this.customAttributesValues.attributes_values, true);\n attributesValues[attributeValue.id] = attributeValue.value;\n this.customAttributesValues.attributes_values = attributesValues;\n this.customAttributesValues.id = this.objectId;\n return this.repo.save(this.customAttributesValues).then(onSuccess, onError);\n };\n\n return CustomAttributesValuesController;\n\n })(taiga.Controller);\n\n CustomAttributesValuesDirective = function($templates, $storage) {\n var collapsedHash, link, template, templateFn;\n template = $templates.get(\"custom-attributes/custom-attributes-values.html\", true);\n collapsedHash = function(type) {\n return generateHash([\"custom-attributes-collapsed\", type]);\n };\n link = function($scope, $el, $attrs, $ctrls) {\n var $ctrl, $model, hash;\n $ctrl = $ctrls[0];\n $model = $ctrls[1];\n hash = collapsedHash($attrs.type);\n $scope.collapsed = $storage.get(hash) || false;\n bindOnce($scope, $attrs.ngModel, function(value) {\n $ctrl.initialize($attrs.type, value.id);\n return $ctrl.loadCustomAttributesValues();\n });\n $scope.toggleCollapse = function() {\n $scope.collapsed = !$scope.collapsed;\n return $storage.set(hash, $scope.collapsed);\n };\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n templateFn = function($el, $attrs) {\n return template({\n requiredEditionPerm: $attrs.requiredEditionPerm\n });\n };\n return {\n require: [\"tgCustomAttributesValues\", \"ngModel\"],\n controller: CustomAttributesValuesController,\n controllerAs: \"ctrl\",\n restrict: \"AE\",\n scope: true,\n link: link,\n template: templateFn\n };\n };\n\n module.directive(\"tgCustomAttributesValues\", [\"$tgTemplate\", \"$tgStorage\", \"$translate\", CustomAttributesValuesDirective]);\n\n CustomAttributeValueDirective = function($template, $selectedText, $compile, $translate, datePickerConfigService, wysiwygService) {\n var link, template, templateEdit;\n template = $template.get(\"custom-attributes/custom-attribute-value.html\", true);\n templateEdit = $template.get(\"custom-attributes/custom-attribute-value-edit.html\", true);\n link = function($scope, $el, $attrs, $ctrl) {\n var attributeValue, isEditable, prettyDate, render, setFocusAndSelectOnInputField, submit;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n render = function(attributeValue, edit) {\n var ctx, datePickerConfig, editable, html, scope, value;\n if (edit == null) {\n edit = false;\n }\n if (attributeValue.type === DATE_TYPE && attributeValue.value) {\n value = moment(attributeValue.value, \"YYYY-MM-DD\").format(prettyDate);\n }\n if (attributeValue.type === NUMBER_TYPE && attributeValue.value) {\n value = parseFloat(attributeValue.value);\n } else {\n value = attributeValue.value;\n }\n editable = isEditable();\n ctx = {\n id: attributeValue.id,\n name: attributeValue.name,\n description: attributeValue.description,\n value: value,\n type: attributeValue.type,\n isEditable: editable\n };\n scope = $scope.$new();\n scope.attributeHtml = wysiwygService.getHTML(value);\n scope.extra = attributeValue.extra;\n scope.model = value;\n if (editable && (edit || !value)) {\n html = templateEdit(ctx);\n html = $compile(html)(scope);\n $el.html(html);\n if (attributeValue.type === DATE_TYPE) {\n datePickerConfig = datePickerConfigService.get();\n _.merge(datePickerConfig, {\n field: $el.find(\"input[name=value]\")[0],\n onSelect: (function(_this) {\n return function(date) {\n var selectedDate;\n return selectedDate = date;\n };\n })(this),\n onOpen: (function(_this) {\n return function() {\n if (typeof selectedDate !== \"undefined\" && selectedDate !== null) {\n return $el.picker.setDate(selectedDate);\n }\n };\n })(this)\n });\n return $el.picker = new Pikaday(datePickerConfig);\n }\n } else {\n html = template(ctx);\n html = $compile(html)(scope);\n return $el.html(html);\n }\n };\n isEditable = function() {\n var permissions, requiredEditionPerm;\n permissions = $scope.project.my_permissions;\n requiredEditionPerm = $attrs.requiredEditionPerm;\n return permissions.indexOf(requiredEditionPerm) > -1;\n };\n $scope.saveCustomRichText = (function(_this) {\n return function(markdown, callback) {\n attributeValue.value = markdown;\n return $ctrl.updateAttributeValue(attributeValue).then(function() {\n callback();\n return render(attributeValue, false);\n });\n };\n })(this);\n $scope.cancelCustomRichText = (function(_this) {\n return function() {\n render(attributeValue, false);\n return null;\n };\n })(this);\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var form, formControl;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n if (attributeValue.type === DROPDOWN_TYPE) {\n formControl = $el.find(\"select[name='value']\");\n attributeValue.value = formControl.val();\n } else if (attributeValue.type === CHECKBOX_TYPE) {\n formControl = $el.find(\"input[name=value]\");\n attributeValue.value = formControl[0].checked;\n } else {\n formControl = $el.find(\"input[name=value], textarea[name='value']\");\n attributeValue.value = formControl.val();\n if (attributeValue.type === DATE_TYPE && moment(attributeValue.value, prettyDate).isValid()) {\n attributeValue.value = moment(attributeValue.value, prettyDate).format(\"YYYY-MM-DD\");\n }\n if (attributeValue.type === NUMBER_TYPE) {\n attributeValue.value = parseFloat(attributeValue.value);\n }\n }\n return $scope.$apply(function() {\n return $ctrl.updateAttributeValue(attributeValue).then(function() {\n return render(attributeValue, false);\n });\n });\n };\n })(this));\n setFocusAndSelectOnInputField = function() {\n return $el.find(\"input[name='value'], textarea[name='value']\").focus().select();\n };\n attributeValue = $scope.$eval($attrs.tgCustomAttributeValue);\n if (attributeValue.value === null || attributeValue.value === void 0) {\n attributeValue.value = \"\";\n }\n $scope.customAttributeValue = attributeValue;\n render(attributeValue);\n $el.on(\"click\", \".js-value-view-mode span a\", function(event) {\n return event.stopPropagation();\n });\n $el.on(\"click\", \".js-value-view-mode\", function() {\n if (!isEditable()) {\n return;\n }\n if ($selectedText.get().length) {\n return;\n }\n render(attributeValue, true);\n return setFocusAndSelectOnInputField();\n });\n $el.on(\"click\", \".js-edit-description\", function(event) {\n event.preventDefault();\n render(attributeValue, true);\n return setFocusAndSelectOnInputField();\n });\n $el.on(\"keyup\", \"input[name=value], textarea[name='value']\", function(event) {\n if (event.keyCode === 13 && event.currentTarget.type !== \"textarea\") {\n return submit(event);\n } else if (event.keyCode === 27) {\n return render(attributeValue, false);\n }\n });\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".js-save-description\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"^tgCustomAttributesValues\",\n restrict: \"AE\"\n };\n };\n\n module.directive(\"tgCustomAttributeValue\", [\"$tgTemplate\", \"$selectedText\", \"$compile\", \"$translate\", \"tgDatePickerConfigService\", \"tgWysiwygService\", CustomAttributeValueDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/emojis.coffee\n */\n\n(function() {\n var EmojisService, module, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n EmojisService = (function(superClass) {\n extend(EmojisService, superClass);\n\n EmojisService.$inject = [];\n\n function EmojisService() {\n this.replaceEmojiNameByHtmlImgs = bind(this.replaceEmojiNameByHtmlImgs, this);\n this.replaceEmojiNameByImgs = bind(this.replaceEmojiNameByImgs, this);\n this.replaceImgsByEmojiName = bind(this.replaceImgsByEmojiName, this);\n this.getEmojiByName = bind(this.getEmojiByName, this);\n this.getEmojiById = bind(this.getEmojiById, this);\n this.searchByName = bind(this.searchByName, this);\n this.emojis = _.map(taiga.emojis, function(it) {\n it.image = (\"/\" + window._version + \"/emojis/\") + it.image;\n return it;\n });\n this.emojisById = _.keyBy(this.emojis, 'id');\n this.emojisByName = _.keyBy(this.emojis, 'name');\n }\n\n EmojisService.prototype.searchByName = function(name) {\n return _.filter(this.emojis, function(it) {\n return it.name.indexOf(name) !== -1;\n });\n };\n\n EmojisService.prototype.getEmojiById = function(id) {\n return this.emojisById[id];\n };\n\n EmojisService.prototype.getEmojiByName = function(name) {\n return this.emojisByName[name];\n };\n\n EmojisService.prototype.replaceImgsByEmojiName = function(html) {\n var emoji, emojiId, emojiIds, i, len, regexImgs;\n emojiIds = taiga.getMatches(html, /emojis\\/([^\"]+).png\"/gi);\n for (i = 0, len = emojiIds.length; i < len; i++) {\n emojiId = emojiIds[i];\n regexImgs = new RegExp(']+\\>', 'g');\n emoji = this.getEmojiById(emojiId);\n html = html.replace(regexImgs, ':' + emoji.name + ':');\n }\n return html;\n };\n\n EmojisService.prototype.replaceEmojiNameByImgs = function(text) {\n var emoji, emojiId, emojiIds, i, len, regexImgs;\n emojiIds = taiga.getMatches(text, /:([\\w +-]*):/g);\n for (i = 0, len = emojiIds.length; i < len; i++) {\n emojiId = emojiIds[i];\n regexImgs = new RegExp(':' + emojiId + ':', 'g');\n emoji = this.getEmojiByName(emojiId);\n if (emoji) {\n text = text.replace(regexImgs, '![alt](' + emoji.image + ')');\n }\n }\n return text;\n };\n\n EmojisService.prototype.replaceEmojiNameByHtmlImgs = function(text) {\n var emoji, emojiId, emojiIds, i, len, regexImgs;\n emojiIds = taiga.getMatches(text, /:([\\w +-]*):/g);\n for (i = 0, len = emojiIds.length; i < len; i++) {\n emojiId = emojiIds[i];\n regexImgs = new RegExp(':' + _.escapeRegExp(emojiId) + ':', 'g');\n emoji = this.getEmojiByName(emojiId);\n if (emoji) {\n text = text.replace(regexImgs, '');\n }\n }\n return text;\n };\n\n return EmojisService;\n\n })(taiga.Service);\n\n module.service(\"$tgEmojis\", EmojisService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/estimation.coffee\n */\n\n(function() {\n var EstimationsService, LbUsEstimationDirective, UsEstimationDirective, groupBy, module, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n module = angular.module(\"taigaCommon\");\n\n LbUsEstimationDirective = function($tgEstimationsService, $rootScope, $repo, $template, $compile) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n $scope.$watch($attrs.ngModel, function(us) {\n var estimationProcess;\n if (us) {\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project);\n estimationProcess.onSelectedPointForRole = function(roleId, pointId, points) {\n us.points = points;\n estimationProcess.render();\n return $scope.$apply(function() {\n return $model.$setViewValue(us);\n });\n };\n estimationProcess.render = function() {\n var ctx, html, mainTemplate, template;\n ctx = {\n totalPoints: this.calculateTotalPoints(),\n roles: this.calculateRoles(),\n editable: this.isEditable,\n loading: false\n };\n mainTemplate = \"common/estimation/us-estimation-points-per-role.html\";\n template = $template.get(mainTemplate, true);\n html = template(ctx);\n html = $compile(html)($scope);\n return this.$el.html(html);\n };\n return estimationProcess.render();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgLbUsEstimation\", [\"$tgEstimationsService\", \"$rootScope\", \"$tgRepo\", \"$tgTemplate\", \"$compile\", LbUsEstimationDirective]);\n\n UsEstimationDirective = function($tgEstimationsService, $rootScope, $repo, $template, $compile, $modelTransform, $confirm) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var save;\n save = function(points) {\n var onError, transform;\n transform = $modelTransform.save((function(_this) {\n return function(us) {\n us.points = points;\n return us;\n };\n })(this));\n onError = (function(_this) {\n return function() {\n return $confirm.notify(\"error\");\n };\n })(this);\n return transform.then(null, onError);\n };\n $scope.$watchCollection(function() {\n return $model.$modelValue && $model.$modelValue.points;\n }, function() {\n var estimationProcess, us;\n us = $model.$modelValue;\n if (us) {\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project);\n estimationProcess.onSelectedPointForRole = function(roleId, pointId, points) {\n estimationProcess.loading = roleId;\n estimationProcess.render();\n return save(points).then(function() {\n estimationProcess.loading = false;\n $rootScope.$broadcast(\"object:updated\");\n return estimationProcess.render();\n });\n };\n estimationProcess.render = function() {\n var ctx, html, mainTemplate, template;\n ctx = {\n totalPoints: this.calculateTotalPoints(),\n roles: this.calculateRoles(),\n editable: this.isEditable,\n loading: estimationProcess.loading\n };\n mainTemplate = \"common/estimation/us-estimation-points-per-role.html\";\n template = $template.get(mainTemplate, true);\n html = template(ctx);\n html = $compile(html)($scope);\n return this.$el.html(html);\n };\n return estimationProcess.render();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsEstimation\", [\"$tgEstimationsService\", \"$rootScope\", \"$tgRepo\", \"$tgTemplate\", \"$compile\", \"$tgQueueModelTransformation\", \"$tgConfirm\", UsEstimationDirective]);\n\n EstimationsService = function($template, $repo, $confirm, $q, $qqueue) {\n var EstimationProcess, create, pointsTemplate;\n pointsTemplate = $template.get(\"common/estimation/us-estimation-points.html\", true);\n EstimationProcess = (function() {\n function EstimationProcess($el1, us1, project1) {\n this.$el = $el1;\n this.us = us1;\n this.project = project1;\n this.bindClickEvents = bind(this.bindClickEvents, this);\n this.isEditable = this.project.my_permissions.indexOf(\"modify_us\") !== -1;\n this.roles = this.project.roles;\n this.points = this.project.points;\n this.loading = false;\n this.pointsById = groupBy(this.points, function(x) {\n return x.id;\n });\n this.onSelectedPointForRole = function(roleId, pointId) {};\n this.render = function() {};\n }\n\n EstimationProcess.prototype.save = function(roleId, pointId) {\n var deferred;\n deferred = $q.defer();\n $qqueue.add((function(_this) {\n return function() {\n var onError, onSuccess;\n onSuccess = function() {\n deferred.resolve();\n return _this.render();\n };\n onError = function() {\n $confirm.notify(\"error\");\n _this.us.revert();\n _this.render();\n return deferred.reject();\n };\n return $repo.save(_this.us).then(onSuccess, onError);\n };\n })(this));\n return deferred.promise;\n };\n\n EstimationProcess.prototype.calculateTotalPoints = function() {\n var notNullValues, values;\n values = _.map(this.us.points, (function(_this) {\n return function(v, k) {\n var ref;\n return (ref = _this.pointsById[v]) != null ? ref.value : void 0;\n };\n })(this));\n if (values.length === 0) {\n return \"?\";\n }\n notNullValues = _.filter(values, function(v) {\n return v != null;\n });\n if (notNullValues.length === 0) {\n return \"?\";\n }\n return _.reduce(notNullValues, function(acc, num) {\n return acc + num;\n });\n };\n\n EstimationProcess.prototype.calculateRoles = function() {\n var computableRoles, roles;\n computableRoles = _.filter(this.project.roles, \"computable\");\n roles = _.map(computableRoles, (function(_this) {\n return function(role) {\n var pointId, pointObj;\n pointId = _this.us.points[role.id];\n pointObj = _this.pointsById[pointId];\n role = _.clone(role, true);\n role.points = (pointObj != null) && (pointObj.name != null) ? pointObj.name : \"?\";\n return role;\n };\n })(this));\n return roles;\n };\n\n EstimationProcess.prototype.bindClickEvents = function() {\n this.$el.on(\"click\", \".total.clickable\", (function(_this) {\n return function(event) {\n var roleId, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n roleId = target.data(\"role-id\");\n _this.renderPointsSelector(roleId, target);\n target.siblings().removeClass('active');\n return target.addClass('active');\n };\n })(this));\n return this.$el.on(\"click\", \".point\", (function(_this) {\n return function(event) {\n var pointId, points, roleId, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n roleId = target.data(\"role-id\");\n pointId = target.data(\"point-id\");\n _this.$el.find(\".popover\").popover().close();\n points = _.clone(_this.us.points, true);\n points[roleId] = pointId;\n return _this.onSelectedPointForRole(roleId, pointId, points);\n };\n })(this));\n };\n\n EstimationProcess.prototype.renderPointsSelector = function(roleId, target) {\n var horizontalList, html, maxPointLength, points, pop;\n points = _.map(this.points, (function(_this) {\n return function(point) {\n point = _.clone(point, true);\n point.selected = _this.us.points[roleId] === point.id ? false : true;\n return point;\n };\n })(this));\n maxPointLength = 5;\n horizontalList = _.some(points, (function(_this) {\n return function(point) {\n return point.name.length > maxPointLength;\n };\n })(this));\n html = pointsTemplate({\n \"points\": points,\n roleId: roleId,\n horizontal: horizontalList\n });\n this.$el.find(\".popover\").popover().close();\n this.$el.find(\".pop-points-open\").remove();\n if (target != null) {\n this.$el.find(target).append(html);\n } else {\n this.$el.append(html);\n }\n this.$el.find(\".pop-points-open\").popover().open(function() {\n return $(this).removeClass(\"active\").closest(\"li\").removeClass(\"active\");\n });\n this.$el.find(\".pop-points-open\").show();\n pop = this.$el.find(\".pop-points-open\");\n if (pop.offset().top + pop.height() > document.body.clientHeight) {\n return pop.addClass('pop-bottom');\n }\n };\n\n return EstimationProcess;\n\n })();\n create = function($el, us, project) {\n var estimationProcess;\n $el.unbind(\"click\");\n estimationProcess = new EstimationProcess($el, us, project);\n if (estimationProcess.isEditable) {\n estimationProcess.bindClickEvents();\n }\n return estimationProcess;\n };\n return {\n create: create\n };\n };\n\n module.factory(\"$tgEstimationsService\", [\"$tgTemplate\", \"$tgRepo\", \"$tgConfirm\", \"$q\", \"$tgQqueue\", EstimationsService]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/filters.coffee\n */\n\n(function() {\n var byRefFilter, darkerFilter, defaultFilter, emojify, inArray, markdownToHTML, module, momentFormat, momentFromNow, sizeFormat, taiga, textToHTML, toMutableFilter, unslugify, yesNoFilter;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n defaultFilter = function() {\n return function(value, defaultValue) {\n if (value === [null, void 0]) {\n return defaultValue;\n }\n return value;\n };\n };\n\n module.filter(\"default\", defaultFilter);\n\n yesNoFilter = function($translate) {\n return function(value) {\n if (value) {\n return $translate.instant(\"COMMON.YES\");\n }\n return $translate.instant(\"COMMON.NO\");\n };\n };\n\n module.filter(\"yesNo\", [\"$translate\", yesNoFilter]);\n\n unslugify = function() {\n return taiga.unslugify;\n };\n\n module.filter(\"unslugify\", unslugify);\n\n momentFormat = function() {\n return function(input, format) {\n if (input) {\n return moment(input).format(format);\n }\n return \"\";\n };\n };\n\n module.filter(\"momentFormat\", momentFormat);\n\n momentFromNow = function() {\n return function(input, without_suffix) {\n if (input) {\n return moment(input).fromNow(without_suffix || false);\n }\n return \"\";\n };\n };\n\n module.filter(\"momentFromNow\", momentFromNow);\n\n sizeFormat = (function(_this) {\n return function() {\n return _this.taiga.sizeFormat;\n };\n })(this);\n\n module.filter(\"sizeFormat\", sizeFormat);\n\n toMutableFilter = function() {\n var memoizedMutable, toMutable;\n toMutable = function(js) {\n return js.toJS();\n };\n memoizedMutable = _.memoize(toMutable);\n return function(input) {\n if (input instanceof Immutable.List) {\n return memoizedMutable(input);\n }\n return input;\n };\n };\n\n module.filter(\"toMutable\", toMutableFilter);\n\n byRefFilter = function($filterFilter) {\n return function(userstories, filter) {\n var cleanRef;\n if (filter != null ? filter.startsWith(\"#\") : void 0) {\n cleanRef = filter.substr(1);\n return _.filter(userstories, (function(_this) {\n return function(us) {\n return String(us.ref).startsWith(cleanRef);\n };\n })(this));\n }\n return $filterFilter(userstories, filter);\n };\n };\n\n module.filter(\"byRef\", [\"filterFilter\", byRefFilter]);\n\n darkerFilter = function() {\n return function(color, luminosity) {\n var black, c, i, j, len, newColor, ref, white;\n color = new String(color).replace(/[^0-9a-f]/gi, '');\n if (color.length < 6) {\n color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n }\n luminosity = luminosity || 0;\n newColor = \"#\";\n c = 0;\n i = 0;\n black = 0;\n white = 255;\n ref = [0, 1, 2];\n for (j = 0, len = ref.length; j < len; j++) {\n i = ref[j];\n c = parseInt(color.substr(i * 2, 2), 16);\n c = Math.round(Math.min(Math.max(black, c + (luminosity * white)), white)).toString(16);\n newColor += (\"00\" + c).substr(c.length);\n }\n return newColor;\n };\n };\n\n module.filter(\"darker\", darkerFilter);\n\n markdownToHTML = function(wysiwigService) {\n return function(input) {\n if (input) {\n return wysiwigService.getHTML(input);\n }\n return \"\";\n };\n };\n\n module.filter(\"markdownToHTML\", [\"tgWysiwygService\", markdownToHTML]);\n\n inArray = function($filter) {\n return function(list, arrayFilter, element) {\n var filter;\n if (arrayFilter) {\n filter = $filter(\"filter\");\n return filter(list, function(listItem) {\n return arrayFilter.indexOf(listItem[element]) !== -1;\n });\n }\n };\n };\n\n module.filter(\"inArray\", [\"$filter\", inArray]);\n\n emojify = function($emojis) {\n return function(input) {\n if (input) {\n return $emojis.replaceEmojiNameByHtmlImgs(_.escape(input));\n }\n return \"\";\n };\n };\n\n module.filter(\"emojify\", [\"$tgEmojis\", emojify]);\n\n textToHTML = function($filter) {\n return function(input) {\n if (input) {\n return input.replace(/\\<(?!(\\/?)(strong|br)(\\/?)).*?\\>/g, \"\");\n }\n return \"\";\n };\n };\n\n module.filter(\"textToHTML\", [\"$filter\", textToHTML]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/lightboxes.coffee\n */\n\n(function() {\n var AssignedToLightboxDirective, AssignedUsersLightboxDirective, BlockLightboxDirective, BlockingMessageInputDirective, CreateBulkUserstoriesDirective, CreateEditDirective, LightboxDirective, LightboxKeyboardNavigationService, LightboxLeaveProjectWarningDirective, LightboxService, RelateToEpicLightboxDirective, SetDueDateDirective, WatchersLightboxDirective, bindOnce, debounce, debounceLeading, groupBy, module, normalizeString, sizeFormat, timeout, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n module = angular.module(\"taigaCommon\");\n\n bindOnce = this.taiga.bindOnce;\n\n timeout = this.taiga.timeout;\n\n debounce = this.taiga.debounce;\n\n sizeFormat = this.taiga.sizeFormat;\n\n trim = this.taiga.trim;\n\n normalizeString = this.taiga.normalizeString;\n\n LightboxService = (function(superClass) {\n extend(LightboxService, superClass);\n\n function LightboxService(animationFrame, q, rootScope) {\n this.animationFrame = animationFrame;\n this.q = q;\n this.rootScope = rootScope;\n }\n\n LightboxService.prototype.open = function($el, onClose, onEsc, ignoreEsc) {\n var defered, docEl, lightboxContent;\n this.onClose = onClose;\n if (_.isString($el)) {\n $el = $($el);\n }\n defered = this.q.defer();\n lightboxContent = $el.children().not(\".close\");\n lightboxContent.hide();\n this.animationFrame.add(function() {\n return $el.css('display', 'flex');\n });\n this.animationFrame.add(function() {\n $el.addClass(\"open\");\n return $el.one(\"transitionend\", (function(_this) {\n return function() {\n var firstField;\n firstField = $el.find('input:not(.no-focus),textarea:not(.no-focus)').first();\n if (firstField.length) {\n return firstField.focus();\n } else if (document.activeElement) {\n return $(document.activeElement).blur();\n }\n };\n })(this));\n });\n this.animationFrame.add((function(_this) {\n return function() {\n lightboxContent.show();\n return defered.resolve();\n };\n })(this));\n if (!ignoreEsc) {\n docEl = angular.element(document);\n docEl.on(\"keydown.lightbox\", (function(_this) {\n return function(e) {\n var code;\n code = e.keyCode ? e.keyCode : e.which;\n if (code === 27) {\n if (onEsc) {\n return _this.rootScope.$applyAsync(onEsc);\n } else {\n return _this.close($el);\n }\n }\n };\n })(this));\n }\n return defered.promise;\n };\n\n LightboxService.prototype.close = function($el) {\n return new Promise((function(_this) {\n return function(resolve) {\n var docEl, scope;\n if (_.isString($el)) {\n $el = $($el);\n }\n docEl = angular.element(document);\n docEl.off(\".lightbox\");\n docEl.off(\".keyboard-navigation\");\n $el.addClass('close-started');\n _this.animationFrame.add(function() {\n $el.addClass('close');\n return $el.one(\"transitionend\", function() {\n $el.removeAttr('style');\n $el.removeClass(\"open\").removeClass('close').removeClass('close-started');\n if (_this.onClose) {\n _this.rootScope.$apply(_this.onClose);\n }\n return resolve();\n });\n });\n if ($el.hasClass(\"remove-on-close\")) {\n scope = $el.data(\"scope\");\n if (scope) {\n scope.$destroy();\n }\n return $el.remove();\n }\n };\n })(this));\n };\n\n LightboxService.prototype.getLightboxOpen = function() {\n return $(\".lightbox.open:not(.close-started)\");\n };\n\n LightboxService.prototype.closeAll = function() {\n var docEl, i, len, lightboxEl, ref, results;\n docEl = angular.element(document);\n ref = docEl.find(\".lightbox.open\");\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n lightboxEl = ref[i];\n results.push(this.close($(lightboxEl)));\n }\n return results;\n };\n\n return LightboxService;\n\n })(taiga.Service);\n\n module.service(\"lightboxService\", [\"animationFrame\", \"$q\", \"$rootScope\", LightboxService]);\n\n LightboxKeyboardNavigationService = (function(superClass) {\n extend(LightboxKeyboardNavigationService, superClass);\n\n function LightboxKeyboardNavigationService() {\n return LightboxKeyboardNavigationService.__super__.constructor.apply(this, arguments);\n }\n\n LightboxKeyboardNavigationService.prototype.stop = function() {\n var docEl;\n docEl = angular.element(document);\n return docEl.off(\".keyboard-navigation\");\n };\n\n LightboxKeyboardNavigationService.prototype.dispatch = function($el, code) {\n var activeElement, next, prev;\n activeElement = $el.find(\".selected\");\n if (code === 13) {\n if ($el.find(\".user-list-single\").length === 1) {\n return $el.find('.user-list-single:first').trigger(\"click\");\n } else {\n return activeElement.trigger(\"click\");\n }\n } else if (code === 40) {\n if (!activeElement.length) {\n return $el.find('.user-list-single:not(\".is-active\"):first').addClass('selected');\n } else {\n next = activeElement.next('.user-list-single');\n if (next.length) {\n activeElement.removeClass('selected');\n return next.addClass('selected');\n }\n }\n } else if (code === 38) {\n if (!activeElement.length) {\n return $el.find('.user-list-single:last').addClass('selected');\n } else {\n prev = activeElement.prev('.user-list-single:not(\".is-active\")');\n if (prev.length) {\n activeElement.removeClass('selected');\n return prev.addClass('selected');\n }\n }\n }\n };\n\n LightboxKeyboardNavigationService.prototype.init = function($el) {\n var docEl;\n this.stop();\n docEl = angular.element(document);\n return docEl.on(\"keydown.keyboard-navigation\", (function(_this) {\n return function(event) {\n var code;\n code = event.keyCode ? event.keyCode : event.which;\n if (code === 40 || code === 38 || code === 13) {\n event.preventDefault();\n return _this.dispatch($el, code);\n }\n };\n })(this));\n };\n\n return LightboxKeyboardNavigationService;\n\n })(taiga.Service);\n\n module.service(\"lightboxKeyboardNavigationService\", LightboxKeyboardNavigationService);\n\n LightboxDirective = function(lightboxService) {\n var link;\n link = function($scope, $el, $attrs) {\n if (!$attrs.$attr.visible) {\n return $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n }\n };\n return {\n restrict: \"C\",\n link: link\n };\n };\n\n module.directive(\"lightbox\", [\"lightboxService\", LightboxDirective]);\n\n BlockLightboxDirective = function($rootscope, $tgrepo, $confirm, lightboxService, $loading, $modelTransform, $translate) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var block, title, unblock;\n title = $translate.instant($attrs.title);\n $el.find(\"h2.title\").text(title);\n unblock = (function(_this) {\n return function(finishCallback) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.is_blocked = false;\n item.blocked_note = \"\";\n return item;\n });\n transform.then(function() {\n $confirm.notify(\"success\");\n $rootscope.$broadcast(\"object:updated\");\n return finishCallback();\n });\n transform.then(null, function() {\n $confirm.notify(\"error\");\n return item.revert();\n });\n transform[\"finally\"](function() {\n return finishCallback();\n });\n return transform;\n };\n })(this);\n block = function() {\n var currentLoading, transform;\n currentLoading = $loading().target($el.find(\".button-green\")).start();\n transform = $modelTransform.save(function(item) {\n item.is_blocked = true;\n item.blocked_note = $el.find(\".reason\").val();\n return item;\n });\n transform.then(function() {\n $confirm.notify(\"success\");\n return $rootscope.$broadcast(\"object:updated\");\n });\n transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return transform[\"finally\"](function() {\n currentLoading.finish();\n return lightboxService.close($el);\n });\n };\n $scope.$on(\"block\", function() {\n $el.find(\".reason\").val($model.$modelValue.blocked_note);\n return lightboxService.open($el);\n });\n $scope.$on(\"unblock\", (function(_this) {\n return function(event, model, finishCallback) {\n return unblock(finishCallback);\n };\n })(this));\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return $el.on(\"click\", \".button-green\", function(event) {\n event.preventDefault();\n return block();\n });\n };\n return {\n templateUrl: \"common/lightbox/lightbox-block.html\",\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgLbBlock\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"lightboxService\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$translate\", BlockLightboxDirective]);\n\n BlockingMessageInputDirective = function($log, $template, $compile) {\n var link, template, templateFn;\n template = $template.get(\"common/lightbox/lightbox-blocking-message-input.html\", true);\n link = function($scope, $el, $attrs, $model) {\n if (!$attrs.watch) {\n return $log.error(\"No watch attribute on tg-blocking-message-input directive\");\n }\n return $scope.$watch($attrs.watch, function(value) {\n if (value === !void 0 && value === true) {\n return $el.find(\".blocked-note\").removeClass(\"hidden\");\n } else {\n return $el.find(\".blocked-note\").addClass(\"hidden\");\n }\n });\n };\n templateFn = function($el, $attrs) {\n return template({\n ngmodel: $attrs.ngModel\n });\n };\n return {\n template: templateFn,\n link: link,\n require: \"ngModel\",\n restrict: \"EA\"\n };\n };\n\n module.directive(\"tgBlockingMessageInput\", [\"$log\", \"$tgTemplate\", \"$compile\", BlockingMessageInputDirective]);\n\n CreateBulkUserstoriesDirective = function($repo, $rs, $rootscope, lightboxService, $loading, $model) {\n var link;\n link = function($scope, $el, attrs) {\n var form, submit, submitButton;\n form = null;\n $scope.$on(\"usform:bulk\", function(ctx, projectId, status) {\n if (form) {\n form.reset();\n }\n $scope[\"new\"] = {\n projectId: projectId,\n statusId: status,\n bulk: \"\"\n };\n return lightboxService.open($el);\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n form = $el.find(\"form\").checksley({\n onlyOneErrorElement: true\n });\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $rs.userstories.bulkCreate($scope[\"new\"].projectId, $scope[\"new\"].statusId, $scope[\"new\"].bulk);\n promise.then(function(result) {\n result = _.map(result.data, (function(_this) {\n return function(x) {\n return $model.make_model('userstories', x);\n };\n })(this));\n currentLoading.finish();\n $rootscope.$broadcast(\"usform:bulk:success\", result);\n return lightboxService.close($el);\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateBulkUserstories\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", \"$tgModel\", CreateBulkUserstoriesDirective]);\n\n AssignedToLightboxDirective = function(lightboxService, lightboxKeyboardNavigationService, $template, $compile, avatarService, $userListService) {\n var link;\n link = function($scope, $el, $attrs) {\n var closeLightbox, render, selectedItem, selectedUser, usersTemplate;\n selectedUser = null;\n selectedItem = null;\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-to-users.html\", true);\n render = function(selected, text) {\n var ctx, html, users, visibleUsers;\n users = $userListService.searchUsers(text, selected);\n visibleUsers = _.slice(users, 0, 5);\n visibleUsers = _.map(visibleUsers, function(user) {\n return user.avatar = avatarService.getAvatar(user);\n });\n if (selected) {\n if (selected) {\n selected.avatar = avatarService.getAvatar(selected);\n }\n }\n ctx = {\n selected: selected,\n users: _.slice(users, 0, 5),\n showMore: users.length > 5\n };\n html = usersTemplate(ctx);\n html = $compile(html)($scope);\n return $el.find(\".assigned-to-list\").html(html);\n };\n closeLightbox = function() {\n lightboxKeyboardNavigationService.stop();\n return lightboxService.close($el);\n };\n $scope.$on(\"assigned-to:add\", function(ctx, item) {\n var assignedToId;\n selectedItem = item;\n assignedToId = item.assigned_to;\n selectedUser = $scope.usersById[assignedToId];\n render(selectedUser);\n return lightboxService.open($el).then(function() {\n $el.find('input').focus();\n return lightboxKeyboardNavigationService.init($el);\n });\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n render(selectedUser, searchingText);\n return $el.find('input').focus();\n }\n });\n $el.on(\"click\", \".user-list-single\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n closeLightbox();\n return $scope.$apply(function() {\n $scope.$broadcast(\"assigned-to:added\", target.data(\"user-id\"), selectedItem);\n return $scope.usersSearch = null;\n });\n });\n $el.on(\"click\", \".remove-assigned-to\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n closeLightbox();\n return $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"assigned-to:added\", null, selectedItem);\n });\n });\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n closeLightbox();\n return $scope.$apply(function() {\n return $scope.usersSearch = null;\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"common/lightbox/lightbox-assigned-to.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbAssignedto\", [\"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", \"tgAvatarService\", \"tgUserListService\", AssignedToLightboxDirective]);\n\n AssignedUsersLightboxDirective = function($repo, lightboxService, lightboxKeyboardNavigationService, $template, $compile, avatarService, $userListService) {\n var link;\n link = function($scope, $el, $attrs) {\n var closeLightbox, render, selectedItem, selectedUsers, usersTemplate;\n selectedUsers = [];\n selectedItem = null;\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-users-users.html\", true);\n render = function(assignedUsersIds, text) {\n var ctx, html, selected, users, visible;\n users = $userListService.searchUsers(text);\n selected = [];\n _.map(users, function(user) {\n var ref;\n if (ref = user.id, indexOf.call(assignedUsersIds, ref) >= 0) {\n user.avatar = avatarService.getAvatar(user);\n return selected.push(user);\n }\n });\n visible = [];\n _.map(users, function(user) {\n var ref;\n if (ref = user.id, indexOf.call(assignedUsersIds, ref) < 0) {\n user.avatar = avatarService.getAvatar(user);\n return visible.push(user);\n }\n });\n ctx = {\n selected: selected,\n users: _.slice(visible, 0, 5),\n showMore: users.length > 5\n };\n html = usersTemplate(ctx);\n html = $compile(html)($scope);\n return $el.find(\".assigned-to-list\").html(html);\n };\n closeLightbox = function() {\n lightboxKeyboardNavigationService.stop();\n return lightboxService.close($el);\n };\n $scope.$on(\"assigned-user:add\", function(ctx, item) {\n selectedItem = item;\n selectedUsers = item.assigned_users;\n render(selectedUsers);\n return lightboxService.open($el).then(function() {\n $el.find(\"input\").focus();\n return lightboxKeyboardNavigationService.init($el);\n });\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n render(selectedUsers, searchingText);\n return $el.find('input').focus();\n }\n });\n $el.on(\"click\", \".user-list-single\", debounce(200, function(event) {\n var target;\n closeLightbox();\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"assigned-user:added\", target.data(\"user-id\"), selectedItem);\n });\n }));\n $el.on(\"click\", \".remove-assigned-to\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n event.stopPropagation();\n $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"assigned-user:deleted\", target.data(\"user-id\"), selectedItem);\n });\n return closeLightbox();\n });\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n return closeLightbox();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"common/lightbox/lightbox-assigned-users.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbAssignedUsers\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", \"tgAvatarService\", \"tgUserListService\", AssignedUsersLightboxDirective]);\n\n WatchersLightboxDirective = function($repo, lightboxService, lightboxKeyboardNavigationService, $template, $compile, avatarService) {\n var link;\n link = function($scope, $el, $attrs) {\n var closeLightbox, getFilteredUsers, render, selectedItem, usersTemplate;\n selectedItem = null;\n usersTemplate = $template.get(\"common/lightbox/lightbox-assigned-to-users.html\", true);\n getFilteredUsers = function(text) {\n var _filterUsers, users;\n if (text == null) {\n text = \"\";\n }\n _filterUsers = function(text, user) {\n var username;\n if (selectedItem && _.find(selectedItem.watchers, function(x) {\n return x === user.id;\n })) {\n return false;\n }\n username = user.full_name_display.toUpperCase();\n text = text.toUpperCase();\n return _.includes(username, text);\n };\n users = _.clone($scope.activeUsers, true);\n users = _.filter(users, _.partial(_filterUsers, text));\n return users;\n };\n render = function(users) {\n var ctx, html, visibleUsers;\n visibleUsers = _.slice(users, 0, 5);\n visibleUsers = _.map(visibleUsers, function(user) {\n user.avatar = avatarService.getAvatar(user);\n return user;\n });\n ctx = {\n selected: false,\n users: visibleUsers,\n showMore: users.length > 5\n };\n html = usersTemplate(ctx);\n html = $compile(html)($scope);\n return $el.find(\".ticket-watchers\").html(html);\n };\n closeLightbox = function() {\n lightboxKeyboardNavigationService.stop();\n return lightboxService.close($el);\n };\n $scope.$on(\"watcher:add\", function(ctx, item) {\n var users;\n selectedItem = item;\n users = getFilteredUsers();\n render(users);\n return lightboxService.open($el).then(function() {\n $el.find(\"input\").focus();\n return lightboxKeyboardNavigationService.init($el);\n });\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n var users;\n if (searchingText == null) {\n return;\n }\n users = getFilteredUsers(searchingText);\n render(users);\n return $el.find(\"input\").focus();\n });\n $el.on(\"click\", \".user-list-single\", debounce(200, function(event) {\n var target;\n closeLightbox();\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n $scope.usersSearch = null;\n return $scope.$broadcast(\"watcher:added\", target.data(\"user-id\"));\n });\n }));\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n closeLightbox();\n return $scope.$apply(function() {\n return $scope.usersSearch = null;\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n templateUrl: \"common/lightbox/lightbox-users.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbWatchers\", [\"$tgRepo\", \"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", \"tgAvatarService\", WatchersLightboxDirective]);\n\n LightboxLeaveProjectWarningDirective = function(lightboxService, $template, $compile) {\n var link;\n link = function($scope, $el, attrs) {\n return lightboxService.open($el);\n };\n return {\n templateUrl: 'common/lightbox/lightbox-leave-project-warning.html',\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgLightboxLeaveProjectWarning\", [\"lightboxService\", LightboxLeaveProjectWarningDirective]);\n\n SetDueDateDirective = function($rootscope, lightboxService, $loading, $translate, $confirm, $modelTransform) {\n var link;\n link = function($scope, $el, attrs) {\n var prettyDate, remove, save;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n lightboxService.open($el);\n if ($scope.object.due_date) {\n $scope.new_due_date = moment($scope.object.due_date).format(prettyDate);\n }\n $el.on(\"click\", \".suggestion\", function(event) {\n var quantity, target, unit, value;\n target = angular.element(event.currentTarget);\n quantity = target.data('quantity');\n unit = target.data('unit');\n value = moment().add(quantity, unit).format(prettyDate);\n return $el.find(\".due-date\").val(value);\n });\n save = function() {\n var currentLoading, new_due_date, transform;\n currentLoading = $loading().target($el.find(\".submit-button\")).start();\n if ($scope.notAutoSave) {\n new_due_date = $('.due-date').val();\n $scope.object.due_date = new_due_date ? moment(new_due_date, prettyDate).format(\"YYYY-MM-DD\") : null;\n $scope.$apply();\n currentLoading.finish();\n lightboxService.close($el);\n return;\n }\n transform = $modelTransform.save(function(object) {\n new_due_date = $('.due-date').val();\n object.due_date = new_due_date ? moment(new_due_date, prettyDate).format(\"YYYY-MM-DD\") : null;\n return object;\n });\n transform.then(function() {\n return $confirm.notify(\"success\");\n });\n transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return transform[\"finally\"](function() {\n currentLoading.finish();\n lightboxService.close($el);\n return $rootscope.$broadcast(\"object:updated\");\n });\n };\n $el.on(\"click\", \".submit-button\", function(event) {\n event.preventDefault();\n return save();\n });\n remove = function() {\n var message, subtitle, title;\n title = $translate.instant(\"LIGHTBOX.DELETE_DUE_DATE.TITLE\");\n subtitle = $translate.instant(\"LIGHTBOX.DELETE_DUE_DATE.SUBTITLE\");\n message = moment($scope.object.due_date).format(prettyDate);\n return $confirm.askOnDelete(title, message, subtitle).then(function(askResponse) {\n askResponse.finish();\n $('.due-date').val(null);\n $scope.object.due_date_reason = null;\n if ($scope.notAutoSave) {\n $scope.object.due_date = null;\n return lightboxService.close($el);\n } else {\n return save();\n }\n });\n };\n return $el.on(\"click\", \".delete-due-date\", function(event) {\n event.preventDefault();\n return remove();\n });\n };\n return {\n templateUrl: 'common/lightbox/lightbox-due-date.html',\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgLbSetDueDate\", [\"$rootScope\", \"lightboxService\", \"$tgLoading\", \"$translate\", \"$tgConfirm\", \"$tgQueueModelTransformation\", SetDueDateDirective]);\n\n groupBy = this.taiga.groupBy;\n\n CreateEditDirective = function($log, $repo, $model, $rs, $rootScope, lightboxService, $loading, $translate, $confirm, $q, attachmentsService, $template, $compile) {\n var link;\n link = function($scope, $el, attrs) {\n var addExistingToSprint, attachmentsToAdd, attachmentsToDelete, checkClose, close, createAttachments, deleteAttachments, docEl, form, getSchema, isDisabledExisting, mount, objType, render, resetAttachments, saveItem, schema, schemas, setStatus, sprintChangeConfirmAndSave, submit;\n schema = null;\n objType = null;\n form = null;\n attachmentsToAdd = Immutable.List();\n attachmentsToDelete = Immutable.List();\n schemas = {\n us: {\n objName: 'User Story',\n model: 'userstories',\n params: {\n include_attachments: true,\n include_tasks: true\n },\n data: function(project) {\n return {\n translationID: 'US',\n translationIDPlural: 'US',\n statusList: _.sortBy(project.us_statuses, \"order\")\n };\n },\n initialData: function(data) {\n return {\n project: data.project.id,\n subject: \"\",\n description: \"\",\n tags: [],\n points: {},\n status: data.statusId ? data.statusId : data.project.default_us_status,\n is_archived: false\n };\n }\n },\n task: {\n objName: 'Task',\n model: 'tasks',\n params: {\n include_attachments: true\n },\n data: function(project) {\n return {\n translationID: 'TASK',\n translationIDPlural: 'TASKS',\n statusList: _.sortBy(project.task_statuses, \"order\")\n };\n },\n initialData: function(data) {\n return {\n project: data.project.id,\n subject: \"\",\n description: \"\",\n assigned_to: null,\n tags: [],\n milestone: data.sprintId,\n status: data.project.default_task_status,\n user_story: data.usId,\n is_archived: false\n };\n }\n },\n issue: {\n objName: 'Issue',\n model: 'issues',\n params: {\n include_attachments: true\n },\n data: function(project) {\n return {\n translationID: 'ISSUE',\n translationIDPlural: 'ISSUES',\n project: project,\n statusList: _.sortBy(project.issue_statuses, \"order\"),\n typeById: groupBy(project.issue_types, function(x) {\n return x.id;\n }),\n typeList: _.sortBy(project.issue_types, \"order\"),\n severityById: groupBy(project.severities, function(x) {\n return x.id;\n }),\n severityList: _.sortBy(project.severities, \"order\"),\n priorityById: groupBy(project.priorities, function(x) {\n return x.id;\n }),\n priorityList: _.sortBy(project.priorities, \"order\"),\n milestonesById: groupBy(project.milestones, function(x) {\n return x.id;\n })\n };\n },\n initialData: function(data) {\n return {\n assigned_to: null,\n milestone: data.sprintId,\n priority: data.project.default_priority,\n project: data.project.id,\n severity: data.project.default_severity,\n status: data.project.default_issue_status,\n subject: \"\",\n tags: [],\n type: data.project.default_issue_type\n };\n }\n }\n };\n $scope.setMode = function(value) {\n return $scope.mode = value;\n };\n $scope.$on(\"genericform:new\", function(ctx, params) {\n getSchema(params);\n $scope.mode = 'new';\n $scope.getOrCreate = false;\n return mount(params);\n });\n $scope.$on(\"genericform:new-or-existing\", function(ctx, params) {\n getSchema(params);\n $scope.mode = 'add-existing';\n $scope.getOrCreate = true;\n $scope.existingFilterText = '';\n $rs[schema.model].listInAllProjects({\n project: $scope.project.id\n }, true).then(function(data) {\n return $scope.existingItems = angular.copy(data);\n });\n return mount(params);\n });\n $scope.$on(\"genericform:edit\", function(ctx, params) {\n getSchema(params);\n $scope.mode = 'edit';\n $scope.getOrCreate = false;\n return mount(params);\n });\n getSchema = function(params) {\n _.map(params, function(value, key) {\n return $scope[key] = value;\n });\n if (!$scope.objType || !schemas[$scope.objType]) {\n return $log.error(\"Invalid objType `\" + $scope.objType + \"` for `genericform` event\");\n }\n return schema = schemas[$scope.objType];\n };\n mount = function(params) {\n $scope.objName = schema.objName;\n if ($scope.mode === 'edit') {\n $scope.obj = params.obj;\n $scope.attachments = Immutable.fromJS(params.attachments);\n } else {\n $scope.obj = $model.make_model(schema.model, schema.initialData(params));\n $scope.attachments = Immutable.List();\n }\n _.map(schema.data($scope.project), function(value, key) {\n return $scope[key] = value;\n });\n if (form) {\n form.reset();\n }\n resetAttachments();\n setStatus($scope.obj.status);\n render();\n $scope.lightboxOpen = true;\n return lightboxService.open($el, null, null, true);\n };\n resetAttachments = function() {\n attachmentsToAdd = Immutable.List();\n return attachmentsToDelete = Immutable.List();\n };\n $scope.addAttachment = function(attachment) {\n return attachmentsToAdd = attachmentsToAdd.push(attachment);\n };\n $scope.deleteAttachment = function(attachment) {\n attachmentsToAdd = attachmentsToAdd.filter(function(it) {\n return it.get('name') !== attachment.get('name');\n });\n if (attachment.get(\"id\")) {\n return attachmentsToDelete = attachmentsToDelete.push(attachment);\n }\n };\n $scope.addTag = function(tag, color) {\n var inserted, itemtags, projectTags, tags, value;\n value = trim(tag.toLowerCase());\n tags = $scope.project.tags;\n projectTags = $scope.project.tags_colors;\n if (tags == null) {\n tags = [];\n }\n if (projectTags == null) {\n projectTags = {};\n }\n if (indexOf.call(tags, value) < 0) {\n tags.push(value);\n }\n projectTags[tag] = color || null;\n $scope.project.tags = tags;\n itemtags = _.clone($scope.obj.tags);\n inserted = _.find(itemtags, function(it) {\n return it[0] === value;\n });\n if (!inserted) {\n itemtags.push([value, color]);\n return $scope.obj.tags = itemtags;\n }\n };\n $scope.deleteTag = function(tag) {\n var itemtags, tags, value;\n value = trim(tag[0].toLowerCase());\n tags = $scope.project.tags;\n itemtags = _.clone($scope.obj.tags);\n _.remove(itemtags, function(tag) {\n return tag[0] === value;\n });\n $scope.obj.tags = itemtags;\n return _.pull($scope.obj.tags, value);\n };\n createAttachments = function(obj) {\n var promises;\n promises = _.map(attachmentsToAdd.toJS(), function(attachment) {\n return attachmentsService.upload(attachment.file, obj.id, $scope.obj.project, $scope.objType);\n });\n return $q.all(promises);\n };\n deleteAttachments = function(obj) {\n var promises;\n promises = _.map(attachmentsToDelete.toJS(), function(attachment) {\n return attachmentsService[\"delete\"]($scope.objType, attachment.id);\n });\n return $q.all(promises);\n };\n addExistingToSprint = function(item) {\n var currentLoading, onError, onSuccess;\n currentLoading = $loading().target($el.find(\".add-existing-button\")).start();\n if (item.milestone) {\n return sprintChangeConfirmAndSave(item);\n } else {\n onSuccess = function() {\n close();\n return $rootScope.$broadcast($scope.objType + \"form:add:success\", item);\n };\n onError = function() {\n return close();\n };\n return saveItem(item, onSuccess, onError);\n }\n };\n sprintChangeConfirmAndSave = function(item) {\n var message, newSprintName, oldSprintName, title;\n oldSprintName = $scope.milestonesById[item.milestone].name;\n newSprintName = $scope.milestonesById[$scope.relatedObjectId].name;\n title = $translate.instant(\"ISSUES.CONFIRM_CHANGE_FROM_SPRINT.TITLE\");\n message = $translate.instant(\"ISSUES.CONFIRM_CHANGE_FROM_SPRINT.MESSAGE\", {\n issue: item.subject,\n oldSprintName: oldSprintName,\n newSprintName: newSprintName\n });\n return $confirm.ask(title, null, message).then(function(askResponse) {\n var onError, onSuccess;\n onSuccess = function() {\n askResponse.finish();\n lightboxService.closeAll();\n $scope.lightboxOpen = false;\n return $rootScope.$broadcast($scope.objType + \"form:add:success\", item);\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n return saveItem(item, onSuccess, onError);\n });\n };\n saveItem = function(item, onSuccess, onError) {\n item.setAttr($scope.relatedField, $scope.relatedObjectId);\n return $repo.save(item, true).then(onSuccess, onError);\n };\n isDisabledExisting = function(item) {\n return item && item[$scope.relatedField] === $scope.relatedObjectId;\n };\n $scope.isDisabledExisting = function(selectedItem) {\n return isDisabledExisting(selectedItem);\n };\n $scope.addExistingToSprint = function(selectedItem) {\n return addExistingToSprint(selectedItem);\n };\n submit = debounce(2000, function(event) {\n var broadcastEvent, currentLoading, prettyDate, promise;\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target($el.find(\".submit-button\")).start();\n if ($scope.mode === 'new') {\n promise = $repo.create(schema.model, $scope.obj);\n broadcastEvent = $scope.objType + \"form:new:success\";\n } else {\n if ($scope.obj.due_date instanceof moment) {\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n $scope.obj.due_date = $scope.obj.due_date.format(\"YYYY-MM-DD\");\n }\n promise = $repo.save($scope.obj, true);\n broadcastEvent = $scope.objType + \"form:edit:success\";\n }\n promise.then(function(data) {\n return deleteAttachments(data).then(function() {\n return createAttachments(data).then(function() {\n currentLoading.finish();\n close();\n if (data.ref) {\n return $rs[schema.model].getByRef(data.project, data.ref, schema.params).then(function(obj) {\n return $rootScope.$broadcast(broadcastEvent, obj);\n });\n }\n });\n });\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n });\n checkClose = function() {\n if (!$scope.obj.isModified()) {\n close();\n return $scope.$apply(function() {\n return $scope.obj.revert();\n });\n } else {\n return $confirm.ask($translate.instant(\"LIGHTBOX.CREATE_EDIT.CONFIRM_CLOSE\")).then(function(result) {\n result.finish();\n return close();\n });\n }\n };\n close = function() {\n lightboxService.closeAll();\n return $scope.lightboxOpen = false;\n };\n docEl = angular.element(document);\n docEl.on(\"keydown.lightbox-create-edit\", function(event) {\n var code;\n if ($scope.lightboxOpen) {\n event.stopPropagation();\n code = event.keyCode ? event.keyCode : event.which;\n if (code === 27) {\n return checkClose();\n }\n }\n });\n $el.on(\"submit\", \"form\", submit);\n $el.find('.close').on(\"click\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return checkClose();\n });\n $el.on(\"click\", \".status-dropdown\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n setStatus(angular.element(event.currentTarget).data(\"status-id\"));\n $scope.$apply();\n $scope.$broadcast(\"status:changed\", $scope.obj.status);\n return $el.find(\".pop-status\").popover().close();\n });\n $el.on(\"click\", \".team-requirement\", function(event) {\n $scope.obj.team_requirement = !$scope.obj.team_requirement;\n return $scope.$apply();\n });\n $el.on(\"click\", \".client-requirement\", function(event) {\n $scope.obj.client_requirement = !$scope.obj.client_requirement;\n return $scope.$apply();\n });\n $el.on(\"click\", \".is-blocked\", function(event) {\n $scope.obj.is_blocked = !$scope.obj.is_blocked;\n return $scope.$apply();\n });\n $el.on(\"click\", \".iocaine\", function(event) {\n $scope.obj.is_iocaine = !$scope.obj.is_iocaine;\n return $scope.$broadcast(\"isiocaine:changed\", $scope.obj);\n });\n $scope.isTeamRequirement = function() {\n var ref;\n return (ref = $scope.obj) != null ? ref.team_requirement : void 0;\n };\n $scope.isClientRequirement = function() {\n var ref;\n return (ref = $scope.obj) != null ? ref.client_requirement : void 0;\n };\n setStatus = function(id) {\n $scope.obj.status = id;\n $scope.selectedStatus = _.find($scope.statusList, function(item) {\n return item.id === id;\n });\n return $scope.obj.is_closed = $scope.selectedStatus.is_closed;\n };\n return render = function(sprint) {\n var compiledTemplate, template, templateScope;\n template = $template.get(\"common/lightbox/lightbox-create-edit/lb-create-edit.html\");\n templateScope = $scope.$new();\n compiledTemplate = $compile(template)(templateScope);\n return $el.html(compiledTemplate);\n };\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateEdit\", [\"$log\", \"$tgRepo\", \"$tgModel\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", \"$translate\", \"$tgConfirm\", \"$q\", \"tgAttachmentsService\", \"$tgTemplate\", \"$compile\", CreateEditDirective]);\n\n debounceLeading = this.taiga.debounceLeading;\n\n RelateToEpicLightboxDirective = function($rootScope, $confirm, lightboxService, $tgCurrentUserService, tgResources, $tgResources, $epicsService, tgAnalytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var existingEpicForm, filterEpics, loadProjects, newEpicForm, selectProject, us;\n us = null;\n $scope.projects = null;\n $scope.projectEpics = Immutable.List();\n $scope.loading = false;\n $scope.selectedProject = $scope.project.id;\n newEpicForm = $el.find(\".new-epic-form\").checksley();\n existingEpicForm = $el.find(\".existing-epic-form\").checksley();\n loadProjects = function() {\n if ($scope.projects === null) {\n return $scope.projects = $tgCurrentUserService.projects.get(\"unblocked\");\n }\n };\n filterEpics = function(selectedProjectId, filterText) {\n return tgResources.epics.listInAllProjects({\n is_epics_activated: true,\n project__blocked_code: 'null',\n project: selectedProjectId,\n q: filterText\n }, true).then(function(data) {\n var excludeIds, filteredData;\n excludeIds = [];\n if (us.epics) {\n excludeIds = us.epics.map(function(epic) {\n return epic.id;\n });\n }\n filteredData = data.filter(function(epic) {\n return excludeIds.indexOf(epic.get('id')) === -1;\n });\n return $scope.projectEpics = filteredData;\n });\n };\n selectProject = function(selectedProjectId) {\n $scope.selectedEpic = null;\n $scope.searchEpic = \"\";\n return filterEpics(selectedProjectId, $scope.searchEpic);\n };\n $el.on(\"click\", \".close\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n $scope.$on(\"relate-to-epic:add\", function(ctx, item) {\n us = item;\n $scope.selectedEpic = null;\n $scope.searchEpic = \"\";\n loadProjects();\n return filterEpics($scope.selectedProject, $scope.searchEpic).then(function() {\n return lightboxService.open($el).then(function() {\n return $el.find('input').focus;\n });\n });\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $scope.selectProject = function(selectedProjectId) {\n return selectProject(selectedProjectId);\n };\n $scope.onUpdateSearchEpic = debounceLeading(300, function() {\n $scope.selectedEpic = null;\n return filterEpics($scope.selectedProject, $scope.searchEpic);\n });\n $scope.saveRelatedEpic = function(selectedEpicId, onSavedRelatedEpic) {\n var onError, onSuccess, usId;\n if (!existingEpicForm.validate()) {\n return;\n }\n $scope.loading = true;\n onError = function(data) {\n $scope.loading = false;\n $confirm.notify(\"error\");\n return existingEpicForm.setErrors(data);\n };\n onSuccess = function(data) {\n tgAnalytics.trackEvent(\"user story related epic\", \"create\", \"create related epic on user story\", 1);\n $scope.loading = false;\n $rootScope.$broadcast(\"related-epics:changed\", us);\n return lightboxService.close($el);\n };\n usId = us.id;\n return tgResources.epics.addRelatedUserstory(selectedEpicId, usId).then(onSuccess, onError);\n };\n return $scope.createEpic = function(selectedProjectId, epicSubject) {\n var onCreateEpic, onError, onSuccess;\n if (!newEpicForm.validate()) {\n return;\n }\n this.loading = true;\n onError = function(data) {\n $scope.loading = false;\n $confirm.notify(\"error\");\n return newEpicForm.setErrors(errors);\n };\n onSuccess = function() {\n tgAnalytics.trackEvent(\"user story related epic\", \"create\", \"create related epic on user story\", 1);\n $scope.loading = false;\n $rootScope.$broadcast(\"related-epics:changed\", us);\n return lightboxService.close($el);\n };\n onCreateEpic = function(epic) {\n var epicId, usId;\n epicId = epic.get('id');\n usId = us.id;\n return tgResources.epics.addRelatedUserstory(epicId, usId).then(onSuccess, onError);\n };\n return $epicsService.createEpic({\n subject: epicSubject\n }, null, selectedProjectId).then(onCreateEpic, onError);\n };\n };\n return {\n templateUrl: \"common/lightbox/lightbox-relate-to-epic.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbRelatetoepic\", [\"$rootScope\", \"$tgConfirm\", \"lightboxService\", \"tgCurrentUserService\", \"tgResources\", \"$tgResources\", \"tgEpicsService\", \"$tgAnalytics\", RelateToEpicLightboxDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/loader.coffee\n */\n\n(function() {\n var Loader, LoaderDirective, module, sizeFormat, taiga, timeout;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaCommon\");\n\n LoaderDirective = function(tgLoader, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n tgLoader.onStart(function() {\n $(document.body).addClass(\"loader-active\");\n return $el.addClass(\"active\");\n });\n return tgLoader.onEnd(function() {\n $(document.body).removeClass(\"loader-active\");\n return $el.removeClass(\"active\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLoader\", [\"tgLoader\", \"$rootScope\", LoaderDirective]);\n\n Loader = function($rootscope) {\n var autoClose, config, lastResponseDate, open, pageLoaded, requestCount, start, startLoadTime;\n config = {\n minTime: 300\n };\n open = false;\n startLoadTime = 0;\n requestCount = 0;\n lastResponseDate = 0;\n pageLoaded = function(force) {\n var diff, endTime, timeoutValue;\n if (force == null) {\n force = false;\n }\n if (startLoadTime) {\n timeoutValue = 0;\n if (!force) {\n endTime = new Date().getTime();\n diff = endTime - startLoadTime;\n if (diff < config.minTime) {\n timeoutValue = config.minTime - diff;\n }\n }\n timeout(timeoutValue, function() {\n $rootscope.$broadcast(\"loader:end\");\n open = false;\n return window.prerenderReady = true;\n });\n }\n startLoadTime = 0;\n requestCount = 0;\n return lastResponseDate = 0;\n };\n autoClose = function() {\n var intervalAuto;\n return intervalAuto = setInterval((function() {\n if (lastResponseDate && requestCount === 0) {\n pageLoaded();\n return clearInterval(intervalAuto);\n }\n }), 50);\n };\n start = function() {\n startLoadTime = new Date().getTime();\n $rootscope.$broadcast(\"loader:start\");\n return open = true;\n };\n return {\n pageLoaded: pageLoaded,\n open: function() {\n return open;\n },\n start: function(auto) {\n if (auto == null) {\n auto = false;\n }\n if (!open) {\n start();\n if (auto) {\n return autoClose();\n }\n }\n },\n onStart: function(fn) {\n return $rootscope.$on(\"loader:start\", fn);\n },\n onEnd: function(fn) {\n return $rootscope.$on(\"loader:end\", fn);\n },\n logRequest: function() {\n return requestCount++;\n },\n logResponse: function() {\n requestCount--;\n return lastResponseDate = new Date().getTime();\n }\n };\n };\n\n Loader.$inject = [\"$rootScope\"];\n\n module.factory(\"tgLoader\", Loader);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/loading.coffee\n */\n\n(function() {\n var LoadingDirective, TgLoadingService, module,\n slice = [].slice;\n\n module = angular.module(\"taigaCommon\");\n\n TgLoadingService = function($compile) {\n var spinner;\n spinner = \"loading...\";\n return function() {\n var service;\n service = {\n settings: {\n target: null,\n scope: null,\n classes: [],\n timeout: 0,\n template: null\n },\n target: function(target) {\n service.settings.target = target;\n return service;\n },\n scope: function(scope) {\n service.settings.scope = scope;\n return service;\n },\n template: function(template) {\n service.settings.template = template;\n return service;\n },\n removeClasses: function() {\n var classess;\n classess = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n service.settings.classes = classess;\n return service;\n },\n timeout: function(timeout) {\n service.settings.timeout = timeout;\n return service;\n },\n start: function() {\n var target, timeoutId;\n target = service.settings.target;\n service.settings.classes.map(function(className) {\n return target.removeClass(className);\n });\n if (!target.hasClass('loading') && !service.settings.template) {\n service.settings.template = target.html();\n }\n timeoutId = setTimeout((function() {\n if (!target.hasClass('loading')) {\n target.addClass('loading');\n return target.html(spinner);\n }\n }), service.settings.timeout);\n service.settings.timeoutId = timeoutId;\n return service;\n },\n finish: function() {\n var removeClasses, target, timeoutId;\n target = service.settings.target;\n timeoutId = service.settings.timeoutId;\n if (timeoutId) {\n clearTimeout(timeoutId);\n removeClasses = service.settings.classes;\n removeClasses.map(function(className) {\n return service.settings.target.addClass(className);\n });\n target.html(service.settings.template);\n target.removeClass('loading');\n if (service.settings.scope) {\n $compile(target.contents())(service.settings.scope);\n }\n }\n return service;\n }\n };\n return service;\n };\n };\n\n TgLoadingService.$inject = [\"$compile\"];\n\n module.factory(\"$tgLoading\", TgLoadingService);\n\n LoadingDirective = function($loading) {\n var link;\n link = function($scope, $el, attr) {\n var currentLoading, template;\n currentLoading = null;\n template = $el.html();\n return $scope.$watch(attr.tgLoading, (function(_this) {\n return function(showLoading) {\n if (showLoading) {\n return currentLoading = $loading().target($el).timeout(100).template(template).scope($scope).start();\n } else if (currentLoading) {\n return currentLoading.finish();\n }\n };\n })(this));\n };\n return {\n priority: 99999,\n link: link\n };\n };\n\n module.directive(\"tgLoading\", [\"$tgLoading\", LoadingDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/popovers.coffee\n */\n\n(function() {\n var RelatedTaskStatusDirective, UsStatusDirective, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaCommon\");\n\n UsStatusDirective = function($repo, $template) {\n\n /*\n Print the status of a US and a popover to change it.\n - tg-us-status: The user story\n - on-update: Method call after US is updated\n \n Example:\n \n div.status(tg-us-status=\"us\" on-update=\"ctrl.loadSprintState()\")\n a.us-status(href=\"\", title=\"Status Name\")\n \n NOTE: This directive need 'usStatusById' and 'project'.\n */\n var link, template;\n template = $template.get(\"common/popover/popover-us-status.html\", true);\n link = function($scope, $el, $attrs) {\n var $ctrl, render, us;\n $ctrl = $el.controller();\n render = function(us) {\n var usStatusById, usStatusDom, usStatusDomParent;\n usStatusDomParent = $el.find(\".us-status\");\n usStatusDom = $el.find(\".us-status .us-status-bind\");\n usStatusById = $scope.usStatusById;\n if (usStatusById[us.status]) {\n usStatusDom.text(usStatusById[us.status].name);\n return usStatusDomParent.css(\"color\", usStatusById[us.status].color);\n }\n };\n $el.on(\"click\", \".us-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", debounce(2000, function(event) {\n var target, us;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n us = $scope.$eval($attrs.tgUsStatus);\n us.status = target.data(\"status-id\");\n render(us);\n $el.find(\".pop-status\").popover().close();\n return $scope.$apply(function() {\n return $repo.save(us).then(function() {\n return $scope.$eval($attrs.onUpdate);\n });\n });\n }));\n $scope.$on(\"userstories:loaded\", function() {\n return render($scope.$eval($attrs.tgUsStatus));\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n us = $scope.$eval($attrs.tgUsStatus);\n render(us);\n return bindOnce($scope, \"project\", function(project) {\n var html;\n html = template({\n \"statuses\": project.us_statuses\n });\n $el.append(html);\n if ($scope.project.my_permissions.indexOf(\"modify_us\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUsStatus\", [\"$tgRepo\", \"$tgTemplate\", UsStatusDirective]);\n\n RelatedTaskStatusDirective = function($repo, $template) {\n\n /*\n Print the status of a related task and a popover to change it.\n - tg-related-task-status: The related task\n - on-update: Method call after US is updated\n \n Example:\n \n div.status(tg-related-task-status=\"task\" on-update=\"ctrl.loadSprintState()\")\n a.task-status(href=\"\", title=\"Status Name\")\n \n NOTE: This directive need 'taskStatusById' and 'project'.\n */\n var link, selectionTemplate, updateTaskStatus;\n selectionTemplate = $template.get(\"common/popover/popover-related-task-status.html\", true);\n updateTaskStatus = function($el, task, taskStatusById) {\n var taskStatusDom, taskStatusDomParent;\n taskStatusDomParent = $el.find(\".us-status\");\n taskStatusDom = $el.find(\".task-status .task-status-bind\");\n if (taskStatusById[task.status]) {\n taskStatusDom.text(taskStatusById[task.status].name);\n return taskStatusDomParent.css('color', taskStatusById[task.status].color);\n }\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, autoSave, notAutoSave, task;\n $ctrl = $el.controller();\n task = $scope.$eval($attrs.tgRelatedTaskStatus);\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n autoSave = !notAutoSave;\n $el.on(\"click\", \".task-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n task.status = target.data(\"status-id\");\n $el.find(\".pop-status\").popover().close();\n updateTaskStatus($el, task, $scope.taskStatusById);\n if (autoSave) {\n return $scope.$apply(function() {\n return $repo.save(task).then(function() {\n $scope.$eval($attrs.onUpdate);\n return $scope.$emit(\"related-tasks:status-changed\");\n });\n });\n }\n }));\n $scope.$watch($attrs.tgRelatedTaskStatus, function() {\n task = $scope.$eval($attrs.tgRelatedTaskStatus);\n return updateTaskStatus($el, task, $scope.taskStatusById);\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n $el.append(selectionTemplate({\n 'statuses': project.task_statuses\n }));\n updateTaskStatus($el, task, $scope.taskStatusById);\n if (project.my_permissions.indexOf(\"modify_task\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRelatedTaskStatus\", [\"$tgRepo\", \"$tgTemplate\", RelatedTaskStatusDirective]);\n\n $.fn.popover = function() {\n var $el, close, closeAll, closePopover, isVisible, open;\n $el = this;\n isVisible = (function(_this) {\n return function() {\n var docViewBottom, docViewLeft, docViewRight, docViewTop, docViewWidth, elemBottom, elemLeft, elemRight, elemTop, elemWidth;\n $el.css({\n \"display\": \"block\",\n \"visibility\": \"hidden\"\n });\n docViewTop = $(window).scrollTop();\n docViewBottom = docViewTop + $(window).height();\n docViewWidth = $(window).width();\n docViewRight = docViewWidth;\n docViewLeft = 0;\n elemTop = $el.offset().top;\n elemBottom = elemTop + $el.height();\n elemWidth = $el.width();\n elemLeft = $el.offset().left;\n elemRight = $el.offset().left + elemWidth;\n $el.css({\n \"display\": \"none\",\n \"visibility\": \"visible\"\n });\n return (elemBottom <= docViewBottom) && (elemTop >= docViewTop) && (elemLeft >= docViewLeft) && (elemRight <= docViewRight);\n };\n })(this);\n closePopover = (function(_this) {\n return function(onClose) {\n if (onClose) {\n onClose.call($el);\n }\n $el.fadeOut(function() {\n return $el.removeClass(\"active\").removeClass(\"fix\");\n });\n return $el.off(\"popup:close\");\n };\n })(this);\n closeAll = (function(_this) {\n return function() {\n return $(\".popover.active\").each(function() {\n return $(this).trigger(\"popup:close\");\n });\n };\n })(this);\n open = (function(_this) {\n return function(onClose) {\n if ($el.hasClass(\"active\")) {\n return close();\n } else {\n closeAll();\n if (!isVisible()) {\n $el.addClass(\"fix\");\n }\n $el.fadeIn(function() {\n $el.addClass(\"active\");\n $(document.body).off(\"popover\");\n return $(document.body).one(\"click.popover\", function() {\n return closeAll();\n });\n });\n return $el.on(\"popup:close\", function(e) {\n return closePopover(onClose);\n });\n }\n };\n })(this);\n close = (function(_this) {\n return function() {\n return $el.trigger(\"popup:close\");\n };\n })(this);\n return {\n open: open,\n close: close,\n closeAll: closeAll\n };\n };\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/raven-logger.coffee\n */\n\n(function() {\n var ExceptionHandlerFactory, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaCommon\");\n\n ExceptionHandlerFactory = function($log, config) {\n var ravenConfig;\n this.config = config;\n ravenConfig = this.config.get(\"ravenConfig\", null);\n if (ravenConfig) {\n $log.debug(\"Using the RavenJS exception handler.\");\n Raven.config(ravenConfig).install();\n return function(exception, cause) {\n $log.error.apply($log, arguments);\n return Raven.captureException(exception);\n };\n } else {\n $log.debug(\"Using the default logging exception handler.\");\n return function(exception, cause) {\n return $log.error.apply($log, arguments);\n };\n }\n };\n\n module.factory(\"$exceptionHandler\", [\"$log\", \"$tgConfig\", ExceptionHandlerFactory]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Andrey Antukh \n * Copyright (C) 2014-2017 Jesús Espino Garcia \n * Copyright (C) 2014-2017 David Barragán Merino \n * Copyright (C) 2014-2017 Alejandro Alonso \n * Copyright (C) 2014-2017 Juan Francisco Alcántara \n * Copyright (C) 2014-2017 Xavi Julian \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/sections.coffee\n */\n\n(function() {\n var SectionsService, module,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n module = angular.module(\"taigaCommon\");\n\n SectionsService = (function(superClass) {\n var SECTIONS;\n\n extend(SectionsService, superClass);\n\n SectionsService.$inject = [\"$translate\", \"tgCurrentUserService\"];\n\n SECTIONS = {\n 1: {\n id: 1,\n title: 'TIMELINE',\n path: 'timeline',\n enabled: ''\n },\n 2: {\n id: 2,\n title: 'EPICS',\n path: 'epics',\n enabled: 'is_epics_activated'\n },\n 3: {\n id: 3,\n title: 'BACKLOG',\n path: 'backlog',\n enabled: 'is_backlog_activated'\n },\n 4: {\n id: 4,\n title: 'KANBAN',\n path: 'kanban',\n enabled: 'is_kanban_activated'\n },\n 5: {\n id: 5,\n title: 'ISSUES',\n path: 'issues',\n enabled: 'is_issues_activated'\n },\n 6: {\n id: 6,\n title: 'WIKI',\n path: 'wiki',\n enabled: 'is_wiki_activated'\n }\n };\n\n function SectionsService(translate, currentUserService) {\n this.translate = translate;\n this.currentUserService = currentUserService;\n SectionsService.__super__.constructor.call(this);\n _.map(SECTIONS, (function(_this) {\n return function(x) {\n return x.title = _this.translate.instant(\"PROJECT.SECTION.\" + x.title);\n };\n })(this));\n }\n\n SectionsService.prototype.list = function() {\n return SECTIONS;\n };\n\n SectionsService.prototype.getPath = function(projectSlug, sectionId) {\n var defaultHomePage, project, projects, ref, section;\n defaultHomePage = \"timeline\";\n projects = (ref = this.currentUserService.projects) != null ? ref.get(\"all\") : void 0;\n if (!projects) {\n return defaultHomePage;\n }\n project = projects.find(function(p) {\n return p.get('slug') === projectSlug;\n });\n if (!project) {\n return defaultHomePage;\n }\n if (!sectionId) {\n sectionId = project.get('my_homepage');\n }\n section = _.find(SECTIONS, {\n \"id\": sectionId\n });\n if (!section || (project != null ? project.get(section.enabled) : void 0) === !true) {\n return defaultHomePage;\n }\n return section.path;\n };\n\n return SectionsService;\n\n })(taiga.Service);\n\n module.service(\"$tgSections\", SectionsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/common/tags.coffee\n */\n\n(function() {\n var ColorizeTagsBacklogDirective, LbTagLineDirective, TagsDirective, bindOnce, module, taiga, trim,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaCommon\");\n\n TagsDirective = function() {\n var formatter, link, parser;\n formatter = function(v) {\n if (_.isArray(v)) {\n return v.join(\", \");\n }\n return \"\";\n };\n parser = function(v) {\n var result;\n if (!v) {\n return [];\n }\n result = _(v.split(\",\")).map(function(x) {\n return _.trim(x);\n });\n return result.value();\n };\n link = function($scope, $el, $attrs, $ctrl) {\n $ctrl.$formatters.push(formatter);\n $ctrl.$parsers.push(parser);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n require: \"ngModel\",\n link: link\n };\n };\n\n module.directive(\"tgTags\", TagsDirective);\n\n ColorizeTagsBacklogDirective = function($emojis) {\n var link, template;\n template = _.template(\"<% _.each(tags, function(tag) { %>\\n <% if (tag[1] !== null) { %>\\n \\\"\\n title=\\\"<%- tag[0] %>\\\">\\n <%= emojify(tag[0]) %>\\n \\n <% } %>\\n<% }) %>\\n<% _.each(tags, function(tag) { %>\\n <% if (tag[1] === null) { %>\\n \\\">\\n <%= emojify(tag[0]) %>\\n \\n <% } %>\\n<% }) %>\");\n link = function($scope, $el, $attrs, $ctrl) {\n var render;\n render = function(tags) {\n var html;\n html = template({\n tags: tags,\n emojify: function(text) {\n return $emojis.replaceEmojiNameByHtmlImgs(_.escape(text));\n }\n });\n return $el.html(html);\n };\n $scope.$watch($attrs.tgColorizeBacklogTags, function(tags) {\n if (tags != null) {\n return render(tags);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgColorizeBacklogTags\", [\"$tgEmojis\", ColorizeTagsBacklogDirective]);\n\n LbTagLineDirective = function($rs, $template, $compile) {\n var COMMA_KEY, ENTER_KEY, autocomplete, link, templateTags;\n ENTER_KEY = 13;\n COMMA_KEY = 188;\n templateTags = $template.get(\"common/tag/lb-tag-line-tags.html\", true);\n autocomplete = null;\n link = function($scope, $el, $attrs, $model) {\n var addValue, deleteValue, hideSaveButton, renderTags, resetInput, saveInputTag, showSaveButton, withoutColors;\n withoutColors = _.has($attrs, \"withoutColors\");\n renderTags = function(tags, tagsColors) {\n var color, ctx, html;\n if (tagsColors == null) {\n tagsColors = [];\n }\n color = !withoutColors ? tagsColors[t] : null;\n ctx = {\n tags: _.map(tags, function(t) {\n return {\n name: t,\n style: color ? \"border-left: 5px solid \" + color : \"\"\n };\n })\n };\n html = $compile(templateTags(ctx))($scope);\n return $el.find(\".tags-container\").html(html);\n };\n showSaveButton = function() {\n return $el.find(\".save\").removeClass(\"hidden\");\n };\n hideSaveButton = function() {\n return $el.find(\".save\").addClass(\"hidden\");\n };\n resetInput = function() {\n $el.find(\"input\").val(\"\");\n return autocomplete.close();\n };\n addValue = function(value) {\n var tags;\n value = trim(value.toLowerCase());\n if (value.length === 0) {\n return;\n }\n tags = _.clone($model.$modelValue, false);\n if (tags == null) {\n tags = [];\n }\n if (indexOf.call(tags, value) < 0) {\n tags.push(value);\n }\n $scope.$apply(function() {\n return $model.$setViewValue(tags);\n });\n return hideSaveButton();\n };\n deleteValue = function(value) {\n var tags;\n value = trim(value.toLowerCase());\n if (value.length === 0) {\n return;\n }\n tags = _.clone($model.$modelValue, false);\n tags = _.pull(tags, value);\n return $scope.$apply(function() {\n return $model.$setViewValue(tags);\n });\n };\n saveInputTag = function() {\n var value;\n value = $el.find(\"input\").val();\n addValue(value);\n return resetInput();\n };\n $el.on(\"keypress\", \"input\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n if (event.keyCode === ENTER_KEY) {\n event.preventDefault();\n return saveInputTag();\n } else if (String.fromCharCode(event.keyCode) === ',') {\n event.preventDefault();\n return saveInputTag();\n } else {\n if (target.val().length) {\n return showSaveButton();\n } else {\n return hideSaveButton();\n }\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n event.preventDefault();\n return saveInputTag();\n });\n $el.on(\"click\", \".remove-tag\", function(event) {\n var target, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n value = target.siblings(\".tag-name\").text();\n return deleteValue(value);\n });\n bindOnce($scope, \"project\", function(project) {\n var input;\n input = $el.find(\"input\");\n autocomplete = new Awesomplete(input[0], {\n list: _.keys(project.tags_colors)\n });\n return input.on(\"awesomplete-selectcomplete\", function() {\n addValue(input.val());\n return input.val(\"\");\n });\n });\n $scope.$watch($attrs.ngModel, function(tags) {\n var ref, tagsColors;\n tagsColors = ((ref = $scope.project) != null ? ref.tags_colors : void 0) || [];\n return renderTags(tags, tagsColors);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\",\n templateUrl: \"common/tag/lb-tag-line.html\"\n };\n };\n\n module.directive(\"tgLbTagLine\", [\"$tgResources\", \"$tgTemplate\", \"$compile\", LbTagLineDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/lightboxes.coffee\n */\n\n(function() {\n var CreateEditSprint, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaBacklog\");\n\n CreateEditSprint = function($repo, $confirm, $rs, $rootscope, lightboxService, $loading, $translate) {\n var link;\n link = function($scope, $el, attrs) {\n var createSprint, form, getLastSprint, hasErrors, remove, resetSprint, submit, ussToAdd;\n hasErrors = false;\n createSprint = true;\n form = null;\n $scope.newSprint = {};\n ussToAdd = null;\n resetSprint = function() {\n if (form) {\n form.reset();\n }\n return $scope.newSprint = {\n project: null,\n name: null,\n estimated_start: null,\n estimated_finish: null\n };\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var broadcastEvent, currentLoading, estimated_end, estimated_start, newSprint, prettyDate, promise, submitButton, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n submitButton = $el.find(\".submit-button\");\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n hasErrors = true;\n $el.find(\".last-sprint-name\").addClass(\"disappear\");\n return;\n }\n hasErrors = false;\n broadcastEvent = null;\n estimated_start = $('.date-start').val();\n estimated_end = $('.date-end').val();\n if (createSprint) {\n newSprint = angular.copy($scope.newSprint);\n newSprint.estimated_start = moment(estimated_start, prettyDate).format(\"YYYY-MM-DD\");\n newSprint.estimated_finish = moment(estimated_end, prettyDate).format(\"YYYY-MM-DD\");\n promise = $repo.create(\"milestones\", newSprint);\n broadcastEvent = \"sprintform:create:success\";\n } else {\n newSprint = $scope.newSprint.realClone();\n newSprint.estimated_start = moment(estimated_start, prettyDate).format(\"YYYY-MM-DD\");\n newSprint.estimated_finish = moment(estimated_end, prettyDate).format(\"YYYY-MM-DD\");\n promise = $repo.save(newSprint);\n broadcastEvent = \"sprintform:edit:success\";\n }\n currentLoading = $loading().target(submitButton).start();\n promise.then(function(data) {\n currentLoading.finish();\n if (createSprint) {\n $scope.sprintsCounter += 1;\n }\n $scope.sprints = _.map($scope.sprints, function(it) {\n if (it.id === data.id) {\n return data;\n } else {\n return it;\n }\n });\n if (broadcastEvent === \"sprintform:create:success\" && ussToAdd) {\n $rootscope.$broadcast(broadcastEvent, data, ussToAdd);\n } else {\n $rootscope.$broadcast(broadcastEvent, data);\n }\n return lightboxService.close($el);\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"light-error\", data._error_message);\n } else if (data.__all__) {\n return $confirm.notify(\"light-error\", data.__all__[0]);\n }\n });\n };\n })(this));\n remove = function() {\n var message, title;\n title = $translate.instant(\"LIGHTBOX.DELETE_SPRINT.TITLE\");\n message = $scope.newSprint.name;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var onError, onSuccess;\n onSuccess = function() {\n askResponse.finish();\n $scope.milestonesCounter -= 1;\n lightboxService.close($el);\n return $rootscope.$broadcast(\"sprintform:remove:success\", $scope.newSprint);\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n return $repo.remove($scope.newSprint).then(onSuccess, onError);\n };\n })(this));\n };\n getLastSprint = function() {\n var openSprints, sortedSprints;\n openSprints = _.filter($scope.sprints, function(sprint) {\n return !sprint.closed;\n });\n sortedSprints = _.sortBy(openSprints, function(sprint) {\n return moment(sprint.estimated_finish, 'YYYY-MM-DD').format('X');\n });\n return sortedSprints[sortedSprints.length - 1];\n };\n $scope.$on(\"sprintform:create\", function(event, projectId, uss) {\n var estimatedFinish, estimatedStart, lastSprint, lastSprintNameDom, prettyDate, text;\n ussToAdd = uss;\n resetSprint();\n form = $el.find(\"form\").checksley();\n form.reset();\n createSprint = true;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n $scope.newSprint.project = projectId;\n $scope.newSprint.name = null;\n $scope.newSprint.slug = null;\n lastSprint = getLastSprint();\n estimatedStart = moment();\n if (lastSprint) {\n estimatedStart = moment(lastSprint.estimated_finish);\n } else if ($scope.newSprint.estimated_start) {\n estimatedStart = moment($scope.newSprint.estimated_start);\n }\n $scope.newSprint.estimated_start = estimatedStart.format(prettyDate);\n estimatedFinish = moment().add(2, \"weeks\");\n if (lastSprint) {\n estimatedFinish = moment(lastSprint.estimated_finish).add(2, \"weeks\");\n } else if ($scope.newSprint.estimated_finish) {\n estimatedFinish = moment($scope.newSprint.estimated_finish);\n }\n $scope.newSprint.estimated_finish = estimatedFinish.format(prettyDate);\n lastSprintNameDom = $el.find(\".last-sprint-name\");\n if ((lastSprint != null ? lastSprint.name : void 0) != null) {\n text = $translate.instant(\"LIGHTBOX.ADD_EDIT_SPRINT.LAST_SPRINT_NAME\", {\n lastSprint: lastSprint.name\n });\n lastSprintNameDom.html(text);\n }\n $el.find(\".delete-sprint\").addClass(\"hidden\");\n text = $translate.instant(\"LIGHTBOX.ADD_EDIT_SPRINT.TITLE\");\n $el.find(\".title\").text(text);\n text = $translate.instant(\"COMMON.CREATE\");\n $el.find(\".button-green\").text(text);\n lightboxService.open($el);\n $el.find(\".sprint-name\").focus();\n return $el.find(\".last-sprint-name\").removeClass(\"disappear\");\n });\n $scope.$on(\"sprintform:edit\", function(ctx, sprint) {\n var editSprint, prettyDate, save;\n resetSprint();\n createSprint = false;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n $scope.$apply(function() {\n $scope.newSprint = sprint.realClone();\n $scope.newSprint.estimated_start = moment($scope.newSprint.estimated_start).format(prettyDate);\n return $scope.newSprint.estimated_finish = moment($scope.newSprint.estimated_finish).format(prettyDate);\n });\n $el.find(\".delete-sprint\").removeClass(\"hidden\");\n editSprint = $translate.instant(\"BACKLOG.EDIT_SPRINT\");\n $el.find(\".title\").text(editSprint);\n save = $translate.instant(\"COMMON.SAVE\");\n $el.find(\".button-green\").text(save);\n lightboxService.open($el);\n $el.find(\".sprint-name\").focus().select();\n return $el.find(\".last-sprint-name\").addClass(\"disappear\");\n });\n $el.on(\"keyup\", \".sprint-name\", function(event) {\n if ($el.find(\".sprint-name\").val().length > 0 || hasErrors) {\n return $el.find(\".last-sprint-name\").addClass(\"disappear\");\n } else {\n return $el.find(\".last-sprint-name\").removeClass(\"disappear\");\n }\n });\n $el.on(\"submit\", \"form\", submit);\n $el.on(\"click\", \".delete-sprint\", function(event) {\n event.preventDefault();\n return remove();\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return resetSprint();\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateEditSprint\", [\"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$rootScope\", \"lightboxService\", \"$tgLoading\", \"$translate\", CreateEditSprint]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/main.coffee\n */\n\n(function() {\n var BacklogController, BacklogDirective, BurndownBacklogGraphDirective, TgBacklogProgressBarDirective, ToggleBurndownVisibility, UsPointsDirective, UsRolePointsSelectorDirective, bindMethods, bindOnce, generateHash, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n generateHash = this.taiga.generateHash;\n\n module = angular.module(\"taigaBacklog\");\n\n BacklogController = (function(superClass) {\n extend(BacklogController, superClass);\n\n BacklogController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"$tgLoading\", \"tgResources\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"$tgStorage\", \"tgFilterRemoteStorageService\", \"tgProjectService\"];\n\n BacklogController.prototype.storeCustomFiltersName = 'backlog-custom-filters';\n\n BacklogController.prototype.storeFiltersName = 'backlog-filters';\n\n BacklogController.prototype.backlogOrder = {};\n\n BacklogController.prototype.milestonesOrder = {};\n\n function BacklogController(scope1, rootscope, repo, confirm, rs, params1, q, location, appMetaService, navUrls, events, analytics, translate, loading, rs2, modelTransform, errorHandlingService, storage, filterRemoteStorageService, projectService) {\n var promise;\n this.scope = scope1;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params1;\n this.q = q;\n this.location = location;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.translate = translate;\n this.loading = loading;\n this.rs2 = rs2;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.storage = storage;\n this.filterRemoteStorageService = filterRemoteStorageService;\n this.projectService = projectService;\n bindMethods(this);\n this.backlogOrder = {};\n this.milestonesOrder = {};\n this.page = 1;\n this.disablePagination = false;\n this.firstLoadComplete = false;\n this.scope.userstories = [];\n if (this.applyStoredFilters(this.params.pslug, \"backlog-filters\")) {\n return;\n }\n this.scope.sectionName = this.translate.instant(\"BACKLOG.SECTION_NAME\");\n this.showTags = false;\n this.activeFilters = false;\n this.scope.showGraphPlaceholder = null;\n this.displayVelocity = false;\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n _this.firstLoadComplete = true;\n title = _this.translate.instant(\"BACKLOG.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.translate.instant(\"BACKLOG.PAGE_DESCRIPTION\", {\n projectName: _this.scope.project.name,\n projectDescription: _this.scope.project.description\n });\n _this.appMetaService.setAll(title, description);\n if (_this.rs.userstories.getShowTags(_this.scope.projectId)) {\n _this.showTags = true;\n return _this.scope.$broadcast(\"showTags\", _this.showTags);\n }\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n BacklogController.prototype.filtersReloadContent = function() {\n return this.loadUserstories(true);\n };\n\n BacklogController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"usform:bulk:success\", (function(_this) {\n return function() {\n _this.loadUserstories(true);\n _this.loadProjectStats();\n _this.confirm.notify(\"success\");\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"sprintform:create:success\", (function(_this) {\n return function(e, data, ussToMove) {\n _this.loadSprints().then(function() {\n return _this.scope.$broadcast(\"sprintform:create:success:callback\", ussToMove);\n });\n _this.loadProjectStats();\n _this.confirm.notify(\"success\");\n return _this.analytics.trackEvent(\"sprint\", \"create\", \"create sprint on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"usform:new:success\", (function(_this) {\n return function() {\n _this.loadUserstories(true);\n _this.loadProjectStats();\n _this.rootscope.$broadcast(\"filters:update\");\n _this.confirm.notify(\"success\");\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"create userstory on backlog\", 1);\n };\n })(this));\n this.scope.$on(\"sprintform:edit:success\", (function(_this) {\n return function() {\n return _this.loadProjectStats();\n };\n })(this));\n this.scope.$on(\"sprintform:remove:success\", (function(_this) {\n return function(event, sprint) {\n _this.loadSprints();\n _this.loadProjectStats();\n _this.loadUserstories(true);\n if (sprint.closed) {\n _this.loadClosedSprints();\n }\n return _this.rootscope.$broadcast(\"filters:update\");\n };\n })(this));\n this.scope.$on(\"usform:edit:success\", (function(_this) {\n return function(event, data) {\n var index;\n index = _.findIndex(_this.scope.userstories, function(us) {\n return us.id === data.id;\n });\n _this.scope.userstories[index] = data;\n return _this.rootscope.$broadcast(\"filters:update\");\n };\n })(this));\n this.scope.$on(\"sprint:us:move\", this.moveUs);\n this.scope.$on(\"sprint:us:moved\", (function(_this) {\n return function() {\n _this.loadSprints();\n return _this.loadProjectStats();\n };\n })(this));\n this.scope.$on(\"backlog:load-closed-sprints\", this.loadClosedSprints);\n return this.scope.$on(\"backlog:unload-closed-sprints\", this.unloadClosedSprints);\n };\n\n BacklogController.prototype.initializeSubscription = function() {\n var routingKey1, routingKey2;\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n this.events.subscribe(this.scope, routingKey1, (function(_this) {\n return function(message) {\n _this.loadAllPaginatedUserstories();\n return _this.loadSprints();\n };\n })(this));\n routingKey2 = \"changes.project.\" + this.scope.projectId + \".milestones\";\n return this.events.subscribe(this.scope, routingKey2, (function(_this) {\n return function(message) {\n return _this.loadSprints();\n };\n })(this));\n };\n\n BacklogController.prototype.toggleShowTags = function() {\n return this.scope.$apply((function(_this) {\n return function() {\n _this.showTags = !_this.showTags;\n return _this.rs.userstories.storeShowTags(_this.scope.projectId, _this.showTags);\n };\n })(this));\n };\n\n BacklogController.prototype.toggleActiveFilters = function() {\n return this.activeFilters = !this.activeFilters;\n };\n\n BacklogController.prototype.toggleVelocityForecasting = function() {\n this.displayVelocity = !this.displayVelocity;\n if (!this.displayVelocity) {\n this.scope.visibleUserStories = _.map(this.scope.userstories, function(it) {\n return it.ref;\n });\n } else {\n this.scope.visibleUserStories = _.map(this.forecastedStories, function(it) {\n return it.ref;\n });\n }\n return scopeDefer(this.scope, (function(_this) {\n return function() {\n return _this.scope.$broadcast(\"userstories:loaded\");\n };\n })(this));\n };\n\n BacklogController.prototype.loadProjectStats = function() {\n return this.rs.projects.stats(this.scope.projectId).then((function(_this) {\n return function(stats) {\n var totalPoints;\n _this.scope.stats = stats;\n totalPoints = stats.total_points ? stats.total_points : stats.defined_points;\n if (totalPoints) {\n _this.scope.stats.completedPercentage = Math.round(100 * stats.closed_points / totalPoints);\n } else {\n _this.scope.stats.completedPercentage = 0;\n }\n _this.scope.showGraphPlaceholder = !((stats.total_points != null) && (stats.total_milestones != null));\n _this.calculateForecasting();\n return stats;\n };\n })(this));\n };\n\n BacklogController.prototype.setMilestonesOrder = function(sprints) {\n var it, j, len, results, sprint;\n results = [];\n for (j = 0, len = sprints.length; j < len; j++) {\n sprint = sprints[j];\n this.milestonesOrder[sprint.id] = {};\n results.push((function() {\n var l, len1, ref1, results1;\n ref1 = sprint.user_stories;\n results1 = [];\n for (l = 0, len1 = ref1.length; l < len1; l++) {\n it = ref1[l];\n results1.push(this.milestonesOrder[sprint.id][it.id] = it.sprint_order);\n }\n return results1;\n }).call(this));\n }\n return results;\n };\n\n BacklogController.prototype.unloadClosedSprints = function() {\n return this.scope.$apply((function(_this) {\n return function() {\n _this.scope.closedSprints = [];\n return _this.rootscope.$broadcast(\"closed-sprints:reloaded\", []);\n };\n })(this));\n };\n\n BacklogController.prototype.loadClosedSprints = function() {\n var params;\n params = {\n closed: true\n };\n return this.rs.sprints.list(this.scope.projectId, params).then((function(_this) {\n return function(result) {\n var j, len, sprint, sprints;\n sprints = result.milestones;\n _this.setMilestonesOrder(sprints);\n _this.scope.totalClosedMilestones = result.closed;\n for (j = 0, len = sprints.length; j < len; j++) {\n sprint = sprints[j];\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\");\n }\n _this.scope.closedSprints = sprints;\n _this.scope.closedSprintsById = groupBy(sprints, function(x) {\n return x.id;\n });\n _this.rootscope.$broadcast(\"closed-sprints:reloaded\", sprints);\n return sprints;\n };\n })(this));\n };\n\n BacklogController.prototype.loadSprints = function() {\n var params;\n params = {\n closed: false\n };\n return this.rs.sprints.list(this.scope.projectId, params).then((function(_this) {\n return function(result) {\n var j, len, sprint, sprints;\n sprints = result.milestones;\n _this.setMilestonesOrder(sprints);\n _this.scope.totalMilestones = sprints;\n _this.scope.totalClosedMilestones = result.closed;\n _this.scope.totalOpenMilestones = result.open;\n _this.scope.totalMilestones = _this.scope.totalOpenMilestones + _this.scope.totalClosedMilestones;\n for (j = 0, len = sprints.length; j < len; j++) {\n sprint = sprints[j];\n sprint.user_stories = _.sortBy(sprint.user_stories, \"sprint_order\");\n }\n _this.scope.sprints = sprints;\n if (!_this.scope.closedSprints) {\n _this.scope.closedSprints = [];\n }\n _this.scope.sprintsCounter = sprints.length;\n _this.scope.sprintsById = groupBy(sprints, function(x) {\n return x.id;\n });\n _this.rootscope.$broadcast(\"sprints:loaded\", sprints);\n _this.scope.currentSprint = _this.findCurrentSprint();\n return sprints;\n };\n })(this));\n };\n\n BacklogController.prototype.openSprints = function() {\n return _.filter(this.scope.sprints, (function(_this) {\n return function(sprint) {\n return !sprint.closed;\n };\n })(this)).reverse();\n };\n\n BacklogController.prototype.loadAllPaginatedUserstories = function() {\n var page;\n page = this.page;\n return this.loadUserstories(true, this.scope.userstories.length).then((function(_this) {\n return function() {\n return _this.page = page;\n };\n })(this));\n };\n\n BacklogController.prototype.loadUserstories = function(resetPagination, pageSize) {\n var params, promise;\n if (resetPagination == null) {\n resetPagination = false;\n }\n if (!this.scope.projectId) {\n return null;\n }\n this.loadingUserstories = true;\n this.disablePagination = true;\n params = _.clone(this.location.search());\n this.rs.userstories.storeQueryParams(this.scope.projectId, params);\n if (resetPagination) {\n this.page = 1;\n }\n params.page = this.page;\n promise = this.rs.userstories.listUnassigned(this.scope.projectId, params, pageSize);\n return promise.then((function(_this) {\n return function(result) {\n var header, it, j, len, ref1, userstories;\n userstories = result[0];\n header = result[1];\n if (resetPagination) {\n _this.scope.userstories = [];\n }\n _this.scope.userstories = _this.scope.userstories.concat(_.sortBy(userstories, \"backlog_order\"));\n _this.scope.visibleUserStories = _.map(_this.scope.userstories, function(it) {\n return it.ref;\n });\n ref1 = _this.scope.userstories;\n for (j = 0, len = ref1.length; j < len; j++) {\n it = ref1[j];\n _this.backlogOrder[it.id] = it.backlog_order;\n }\n _this.loadingUserstories = false;\n if (header('x-pagination-next')) {\n _this.disablePagination = false;\n _this.page++;\n }\n scopeDefer(_this.scope, function() {\n return _this.scope.$broadcast(\"userstories:loaded\");\n });\n return userstories;\n };\n })(this));\n };\n\n BacklogController.prototype.loadBacklog = function() {\n return this.q.all([this.loadProjectStats(), this.loadSprints(), this.loadUserstories()]).then(this.calculateForecasting);\n };\n\n BacklogController.prototype.calculateForecasting = function() {\n var backlog_points_sum, current_sum, j, len, ref1, results, stats, total_points, us;\n stats = this.scope.stats;\n total_points = stats.total_points;\n current_sum = stats.assigned_points;\n backlog_points_sum = 0;\n this.forecastedStories = [];\n ref1 = this.scope.userstories;\n results = [];\n for (j = 0, len = ref1.length; j < len; j++) {\n us = ref1[j];\n current_sum += us.total_points;\n backlog_points_sum += us.total_points;\n this.forecastedStories.push(us);\n if (stats.speed > 0 && backlog_points_sum > stats.speed) {\n break;\n } else {\n results.push(void 0);\n }\n }\n return results;\n };\n\n BacklogController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_backlog_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.closedMilestones = !!project.total_closed_milestones;\n this.scope.$emit('project:loaded', project);\n this.scope.points = _.sortBy(project.points, \"order\");\n this.scope.pointsById = groupBy(project.points, function(x) {\n return x.id;\n });\n this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n this.scope.usStatusList = _.sortBy(project.us_statuses, \"id\");\n return project;\n };\n\n BacklogController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n this.initializeSubscription();\n return this.loadBacklog().then((function(_this) {\n return function() {\n var milestone;\n return _this.generateFilters(milestone = \"null\");\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.scope.$emit(\"backlog:loaded\");\n };\n })(this));\n };\n\n BacklogController.prototype.prepareBulkUpdateData = function(uses, field) {\n if (field == null) {\n field = \"backlog_order\";\n }\n return _.map(uses, function(x) {\n return {\n \"us_id\": x.id,\n \"order\": x[field]\n };\n });\n };\n\n BacklogController.prototype.moveUs = function(ctx, usList, newUsIndex, newSprintId) {\n var afterDestination, beforeDestination, currentSprintId, data, it, j, key, l, len, len1, len2, len3, len4, len5, len6, len7, list, m, modifiedUs, n, newSprint, o, oldSprintId, options, orderField, orderList, p, previous, previousWithTheSameOrder, project, promise, q, r, ref1, ref2, setNextOrders, setOrders, setPreviousOrders, sprint, startIndex, us;\n oldSprintId = usList[0].milestone;\n project = usList[0].project;\n if (oldSprintId) {\n sprint = this.scope.sprintsById[oldSprintId] || this.scope.closedSprintsById[oldSprintId];\n }\n if (newSprintId) {\n newSprint = this.scope.sprintsById[newSprintId] || this.scope.closedSprintsById[newSprintId];\n }\n currentSprintId = newSprintId !== oldSprintId ? newSprintId : oldSprintId;\n orderList = null;\n orderField = \"\";\n if (newSprintId !== oldSprintId) {\n if (newSprintId === null) {\n for (key = j = 0, len = usList.length; j < len; key = ++j) {\n us = usList[key];\n _.remove(sprint.user_stories, function(it) {\n return it.id === us.id;\n });\n }\n orderField = \"backlog_order\";\n orderList = this.backlogOrder;\n beforeDestination = _.slice(this.scope.userstories, 0, newUsIndex);\n afterDestination = _.slice(this.scope.userstories, newUsIndex);\n this.scope.userstories = this.scope.userstories.concat(usList);\n } else {\n for (l = 0, len1 = usList.length; l < len1; l++) {\n us = usList[l];\n _.remove(this.scope.userstories, function(it) {\n return it.id === us.id;\n });\n }\n orderField = \"sprint_order\";\n orderList = this.milestonesOrder[newSprint.id];\n beforeDestination = _.slice(newSprint.user_stories, 0, newUsIndex);\n afterDestination = _.slice(newSprint.user_stories, newUsIndex);\n newSprint.user_stories = newSprint.user_stories.concat(usList);\n }\n } else {\n if (oldSprintId === null) {\n orderField = \"backlog_order\";\n orderList = this.backlogOrder;\n list = _.filter(this.scope.userstories, function(listIt) {\n return !_.find(usList, function(moveIt) {\n return listIt.id === moveIt.id;\n });\n });\n beforeDestination = _.slice(list, 0, newUsIndex);\n afterDestination = _.slice(list, newUsIndex);\n } else {\n orderField = \"sprint_order\";\n orderList = this.milestonesOrder[sprint.id];\n list = _.filter(newSprint.user_stories, function(listIt) {\n return !_.find(usList, function(moveIt) {\n return listIt.id === moveIt.id;\n });\n });\n beforeDestination = _.slice(list, 0, newUsIndex);\n afterDestination = _.slice(list, newUsIndex);\n }\n }\n previous = beforeDestination[beforeDestination.length - 1];\n setPreviousOrders = [];\n if (!previous) {\n startIndex = 0;\n } else if (previous) {\n startIndex = orderList[previous.id] + 1;\n previousWithTheSameOrder = _.filter(beforeDestination, function(it) {\n return it[orderField] === orderList[previous.id];\n });\n if (previousWithTheSameOrder.length > 1) {\n setPreviousOrders = _.map(previousWithTheSameOrder, function(it) {\n return {\n us_id: it.id,\n order: orderList[it.id]\n };\n });\n }\n }\n modifiedUs = [];\n for (key = m = 0, len2 = usList.length; m < len2; key = ++m) {\n us = usList[key];\n us.milestone = currentSprintId;\n us[orderField] = startIndex + key;\n orderList[us.id] = us[orderField];\n modifiedUs.push({\n us_id: us.id,\n order: us[orderField]\n });\n }\n startIndex = orderList[usList[usList.length - 1].id];\n for (key = n = 0, len3 = afterDestination.length; n < len3; key = ++n) {\n it = afterDestination[key];\n orderList[it.id] = startIndex + key + 1;\n }\n setNextOrders = _.map(afterDestination, (function(_this) {\n return function(it) {\n return {\n us_id: it.id,\n order: orderList[it.id]\n };\n };\n })(this));\n this.scope.userstories = _.sortBy(this.scope.userstories, (function(_this) {\n return function(it) {\n return _this.backlogOrder[it.id];\n };\n })(this));\n this.scope.visibleUserStories = _.map(this.scope.userstories, function(it) {\n return it.ref;\n });\n ref1 = this.scope.sprints;\n for (o = 0, len4 = ref1.length; o < len4; o++) {\n sprint = ref1[o];\n sprint.user_stories = _.sortBy(sprint.user_stories, (function(_this) {\n return function(it) {\n return _this.milestonesOrder[sprint.id][it.id];\n };\n })(this));\n }\n ref2 = this.scope.closedSprints;\n for (p = 0, len5 = ref2.length; p < len5; p++) {\n sprint = ref2[p];\n sprint.user_stories = _.sortBy(sprint.user_stories, (function(_this) {\n return function(it) {\n return _this.milestonesOrder[sprint.id][it.id];\n };\n })(this));\n }\n if (usList.length > 1 && (newSprintId !== oldSprintId)) {\n data = modifiedUs.concat(setPreviousOrders, setNextOrders);\n promise = this.rs.userstories.bulkUpdateMilestone(project, newSprintId, data);\n } else if (usList.length > 1) {\n data = modifiedUs.concat(setPreviousOrders, setNextOrders);\n promise = this.rs.userstories.bulkUpdateBacklogOrder(project, data);\n } else {\n setOrders = {};\n for (q = 0, len6 = setPreviousOrders.length; q < len6; q++) {\n it = setPreviousOrders[q];\n setOrders[it.us_id] = it.order;\n }\n for (r = 0, len7 = setNextOrders.length; r < len7; r++) {\n it = setNextOrders[r];\n setOrders[it.us_id] = it.order;\n }\n options = {\n headers: {\n \"set-orders\": JSON.stringify(setOrders)\n }\n };\n promise = this.repo.save(usList[0], true, {}, options, true);\n }\n promise.then((function(_this) {\n return function() {\n _this.rootscope.$broadcast(\"sprint:us:moved\");\n if (_this.scope.closedSprintsById && _this.scope.closedSprintsById[oldSprintId]) {\n return _this.rootscope.$broadcast(\"backlog:load-closed-sprints\");\n }\n };\n })(this));\n return promise;\n };\n\n BacklogController.prototype.updateUserStoryStatus = function() {\n return this.generateFilters().then((function(_this) {\n return function() {\n _this.rootscope.$broadcast(\"filters:update\");\n _this.loadProjectStats();\n if (_this.isFilterDataTypeSelected('status')) {\n return _this.filtersReloadContent();\n }\n };\n })(this));\n };\n\n BacklogController.prototype.editUserStory = function(projectId, ref, $event) {\n var currentLoading, target;\n target = $($event.target);\n currentLoading = this.loading().target(target).removeClasses(\"edit-story\").timeout(200).start();\n return this.rs.userstories.getByRef(projectId, ref).then((function(_this) {\n return function(us) {\n return _this.rs2.attachments.list(\"us\", us.id, projectId).then(function(attachments) {\n _this.rootscope.$broadcast(\"genericform:edit\", {\n 'objType': 'us',\n 'obj': us,\n 'attachments': attachments.toJS()\n });\n return currentLoading.finish();\n });\n };\n })(this));\n };\n\n BacklogController.prototype.deleteUserStory = function(us) {\n var message, title;\n title = this.translate.instant(\"US.TITLE_DELETE_ACTION\");\n message = us.subject;\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var promise;\n _this.scope.userstories = _.without(_this.scope.userstories, us);\n promise = _this.repo.remove(us);\n promise.then(function() {\n askResponse.finish();\n return _this.q.all([_this.loadProjectStats(), _this.loadSprints()]);\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return _this.confirm.notify(\"error\");\n });\n };\n })(this));\n };\n\n BacklogController.prototype.addNewUs = function(type) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"genericform:new\", {\n 'objType': 'us',\n 'project': this.scope.project\n });\n case \"bulk\":\n return this.rootscope.$broadcast(\"usform:bulk\", this.scope.projectId, this.scope.project.default_us_status);\n }\n };\n\n BacklogController.prototype.addNewSprint = function() {\n return this.rootscope.$broadcast(\"sprintform:create\", this.scope.projectId);\n };\n\n BacklogController.prototype.findCurrentSprint = function() {\n var currentDate;\n currentDate = new Date().getTime();\n return _.find(this.scope.sprints, function(sprint) {\n var end, start;\n start = moment(sprint.estimated_start, 'YYYY-MM-DD').format('x');\n end = moment(sprint.estimated_finish, 'YYYY-MM-DD').format('x');\n return currentDate >= start && currentDate <= end;\n });\n };\n\n return BacklogController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin, taiga.UsFiltersMixin));\n\n module.controller(\"BacklogController\", BacklogController);\n\n BacklogDirective = function($repo, $rootscope, $translate, $rs) {\n var doomLineTemplate, link, linkDoomLine, linkFilters, linkToolbar, openFilterInit, showHideFilter, showHideTags;\n doomLineTemplate = _.template(\"
    <%- text %>
    \");\n linkDoomLine = function($scope, $el, $attrs, $ctrl) {\n var addDoomLineDom, getUsItems, reloadDoomLine, removeDoomlineDom;\n reloadDoomLine = function() {\n var current_sum, domElement, i, j, len, ref1, results, stats, total_points, us;\n if ($scope.displayVelocity) {\n removeDoomlineDom();\n }\n if (($scope.stats != null) && ($scope.stats.total_points != null) && $scope.stats.total_points !== 0 && ($scope.displayVelocity == null)) {\n removeDoomlineDom();\n stats = $scope.stats;\n total_points = stats.total_points;\n current_sum = stats.assigned_points;\n if (!$scope.userstories) {\n return;\n }\n ref1 = $scope.userstories;\n results = [];\n for (i = j = 0, len = ref1.length; j < len; i = ++j) {\n us = ref1[i];\n current_sum += us.total_points;\n if (current_sum > total_points) {\n domElement = $el.find('.backlog-table-body .us-item-row')[i];\n addDoomLineDom(domElement);\n break;\n } else {\n results.push(void 0);\n }\n }\n return results;\n }\n };\n removeDoomlineDom = function() {\n return $el.find(\".doom-line\").remove();\n };\n addDoomLineDom = function(element) {\n var text;\n text = $translate.instant(\"BACKLOG.DOOMLINE\");\n return $(element).before(doomLineTemplate({\n \"text\": text\n }));\n };\n getUsItems = function() {\n var rowElements;\n rowElements = $el.find('.backlog-table-body .us-item-row');\n return _.map(rowElements, function(x) {\n return angular.element(x);\n });\n };\n $scope.$on(\"userstories:loaded\", reloadDoomLine);\n $scope.$on(\"userstories:forecast\", removeDoomlineDom);\n return $scope.$watch(\"stats\", reloadDoomLine);\n };\n linkToolbar = function($scope, $el, $attrs, $ctrl) {\n var checkSelected, getUsToMove, lastChecked, moveToCurrentSprint, moveToLatestSprint, moveUssToSprint, shiftPressed;\n getUsToMove = function() {\n var ussDom;\n ussDom = $el.find(\".backlog-table-body input:checkbox:checked\");\n return _.map(ussDom, function(item) {\n var itemScope;\n item = $(item).closest('.tg-scope');\n itemScope = item.scope();\n itemScope.us.milestone = $scope.sprints[0].id;\n return itemScope.us;\n });\n };\n moveUssToSprint = function(selectedUss, sprint) {\n var data, extraPoints, totalExtraPoints, ussCurrent;\n ussCurrent = _($scope.userstories);\n $scope.userstories = ussCurrent.without.apply(ussCurrent, selectedUss).value();\n extraPoints = _.map(selectedUss, function(v, k) {\n return v.total_points;\n });\n totalExtraPoints = _.reduce(extraPoints, function(acc, num) {\n return acc + num;\n });\n sprint.user_stories = _.union(sprint.user_stories, selectedUss);\n sprint.total_points += totalExtraPoints;\n data = _.map(selectedUss, function(us) {\n return {\n us_id: us.id,\n order: us.sprint_order\n };\n });\n $rs.userstories.bulkUpdateMilestone($scope.project.id, $scope.sprints[0].id, data).then((function(_this) {\n return function() {\n $ctrl.loadSprints();\n $ctrl.loadProjectStats();\n $ctrl.toggleVelocityForecasting();\n return $ctrl.calculateForecasting();\n };\n })(this));\n return $el.find(\".move-to-sprint\").hide();\n };\n moveToCurrentSprint = function(selectedUss) {\n return moveUssToSprint(selectedUss, $scope.currentSprint);\n };\n moveToLatestSprint = function(selectedUss) {\n return moveUssToSprint(selectedUss, $scope.sprints[0]);\n };\n $scope.$on(\"sprintform:create:success:callback\", function(e, ussToMove) {\n return _.partial(moveToCurrentSprint, ussToMove)();\n });\n shiftPressed = false;\n lastChecked = null;\n checkSelected = function(target) {\n var moveToSprintDom, selectedUsDom;\n lastChecked = target.closest(\".us-item-row\");\n target.closest('.us-item-row').toggleClass('ui-multisortable-multiple');\n moveToSprintDom = $el.find(\".move-to-sprint\");\n selectedUsDom = $el.find(\".backlog-table-body input:checkbox:checked\");\n if (selectedUsDom.length > 0 && $scope.sprints.length > 0) {\n return moveToSprintDom.show();\n } else {\n return moveToSprintDom.hide();\n }\n };\n $(window).on(\"keydown.shift-pressed keyup.shift-pressed\", function(event) {\n shiftPressed = !!event.shiftKey;\n return true;\n });\n $el.on(\"change\", \".backlog-table-body input:checkbox\", function(event) {\n var current, elements, nextAll, prevAll, target;\n if (lastChecked && shiftPressed) {\n elements = [];\n current = $(event.currentTarget).closest(\".us-item-row\");\n nextAll = lastChecked.nextAll();\n prevAll = lastChecked.prevAll();\n if (_.some(nextAll, function(next) {\n return next === current[0];\n })) {\n elements = lastChecked.nextUntil(current);\n } else if (_.some(prevAll, function(prev) {\n return prev === current[0];\n })) {\n elements = lastChecked.prevUntil(current);\n }\n _.map(elements, function(elm) {\n var input;\n input = $(elm).find(\"input:checkbox\");\n input.prop('checked', true);\n return checkSelected(input);\n });\n }\n target = angular.element(event.currentTarget);\n target.closest(\".us-item-row\").toggleClass('is-checked');\n return checkSelected(target);\n });\n $el.on(\"click\", \"#move-to-latest-sprint\", (function(_this) {\n return function(event) {\n var ussToMove;\n ussToMove = getUsToMove();\n return $scope.$apply(_.partial(moveToLatestSprint, ussToMove));\n };\n })(this));\n $el.on(\"click\", \"#move-to-current-sprint\", (function(_this) {\n return function(event) {\n var ussToMove;\n ussToMove = getUsToMove();\n return $scope.$apply(_.partial(moveToCurrentSprint, ussToMove));\n };\n })(this));\n $el.on(\"click\", \"#show-tags\", function(event) {\n event.preventDefault();\n $ctrl.toggleShowTags();\n return showHideTags($ctrl);\n });\n return $el.on(\"click\", \".forecasting-add-sprint\", function(event) {\n var ussToMove, ussToMoveList;\n ussToMoveList = $ctrl.forecastedStories;\n if ($scope.currentSprint) {\n ussToMove = _.map(ussToMoveList, function(us, index) {\n us.milestone = $scope.currentSprint.id;\n us.order = index;\n return us;\n });\n return $scope.$apply(_.partial(moveToCurrentSprint, ussToMove));\n } else {\n ussToMove = _.map(ussToMoveList, function(us, index) {\n us.order = index;\n return us;\n });\n return $rootscope.$broadcast(\"sprintform:create\", $scope.projectId, ussToMove);\n }\n });\n };\n showHideTags = function($ctrl) {\n var elm, text;\n elm = angular.element(\"#show-tags\");\n if ($ctrl.showTags) {\n elm.addClass(\"active\");\n text = $translate.instant(\"BACKLOG.TAGS.HIDE\");\n return elm.text(text);\n } else {\n elm.removeClass(\"active\");\n text = $translate.instant(\"BACKLOG.TAGS.SHOW\");\n return elm.text(text);\n }\n };\n openFilterInit = function($scope, $el, $ctrl) {\n var sidebar;\n sidebar = $el.find(\"sidebar.backlog-filter\");\n sidebar.addClass(\"active\");\n return $ctrl.activeFilters = true;\n };\n showHideFilter = function($scope, $el, $ctrl) {\n var hideText, showText, sidebar, target;\n sidebar = $el.find(\"sidebar.backlog-filter\");\n sidebar.one(\"transitionend\", function() {\n return timeout(150, function() {\n $rootscope.$broadcast(\"resize\");\n return $('.burndown').css(\"visibility\", \"visible\");\n });\n });\n target = angular.element(\"#show-filters-button\");\n $('.burndown').css(\"visibility\", \"hidden\");\n sidebar.toggleClass(\"active\");\n target.toggleClass(\"active\");\n hideText = $translate.instant(\"BACKLOG.FILTERS.HIDE\");\n showText = $translate.instant(\"BACKLOG.FILTERS.SHOW\");\n toggleText(target, [hideText, showText]);\n return $ctrl.toggleActiveFilters();\n };\n linkFilters = function($scope, $el, $attrs, $ctrl) {\n $scope.filtersSearch = {};\n return $el.on(\"click\", \"#show-filters-button\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n return showHideFilter($scope, $el, $ctrl);\n });\n });\n };\n link = function($scope, $el, $attrs, $rootscope) {\n var $ctrl, filters;\n $ctrl = $el.controller();\n linkToolbar($scope, $el, $attrs, $ctrl);\n linkFilters($scope, $el, $attrs, $ctrl);\n linkDoomLine($scope, $el, $attrs, $ctrl);\n filters = $ctrl.location.search();\n if (filters.status || filters.tags || filters.q || filters.assigned_to || filters.owner) {\n openFilterInit($scope, $el, $ctrl);\n }\n $scope.$on(\"showTags\", function() {\n return showHideTags($ctrl);\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return $(window).off(\".shift-pressed\");\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklog\", [\"$tgRepo\", \"$rootScope\", \"$translate\", \"$tgResources\", BacklogDirective]);\n\n UsRolePointsSelectorDirective = function($rootscope, $template, $compile, $translate) {\n var link, selectionTemplate;\n selectionTemplate = $template.get(\"backlog/us-role-points-popover.html\", true);\n link = function($scope, $el, $attrs) {\n bindOnce($scope, \"project\", function(project) {\n var numberOfRoles, roles;\n roles = _.filter(project.roles, \"computable\");\n numberOfRoles = _.size(roles);\n if (numberOfRoles > 1) {\n return $el.append($compile(selectionTemplate({\n \"roles\": roles\n }))($scope));\n } else {\n $el.find(\".icon-arrow-down\").remove();\n return $el.find(\".header-points\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"uspoints:select\", function(ctx, roleId, roleName) {\n $el.find(\".popover\").popover().close();\n return $el.find(\".header-points\").html(roleName + \"/Total\");\n });\n $scope.$on(\"uspoints:clear-selection\", function(ctx, roleId) {\n var text;\n $el.find(\".popover\").popover().close();\n text = $translate.instant(\"COMMON.FIELDS.POINTS\");\n return $el.find(\".header-points\").text(text);\n });\n $el.on(\"click\", function(event) {\n var target;\n target = angular.element(event.target);\n if (target.is(\"span\") || target.is(\"div\")) {\n event.stopPropagation();\n }\n return $el.find(\".popover\").popover().open();\n });\n $el.on(\"click\", \".clear-selection\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $rootscope.$broadcast(\"uspoints:clear-selection\");\n });\n $el.on(\"click\", \".role\", function(event) {\n var rolScope, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n rolScope = target.scope();\n return $rootscope.$broadcast(\"uspoints:select\", target.data(\"role-id\"), target.text());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUsRolePointsSelector\", [\"$rootScope\", \"$tgTemplate\", \"$compile\", \"$translate\", UsRolePointsSelectorDirective]);\n\n UsPointsDirective = function($tgEstimationsService, $repo, $tgTemplate) {\n var link, rolesTemplate;\n rolesTemplate = $tgTemplate.get(\"common/estimation/us-points-roles-popover.html\", true);\n link = function($scope, $el, $attrs) {\n var $ctrl, bindClickElements, estimationProcess, filteringRoleId, renderRolesSelector, selectedRoleId, updatingSelectedRoleId;\n $ctrl = $el.controller();\n updatingSelectedRoleId = null;\n selectedRoleId = null;\n filteringRoleId = null;\n estimationProcess = null;\n $scope.$on(\"uspoints:select\", function(ctx, roleId, roleName) {\n var us;\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n selectedRoleId = roleId;\n return estimationProcess.render();\n });\n $scope.$on(\"uspoints:clear-selection\", function(ctx) {\n var us;\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n selectedRoleId = null;\n return estimationProcess.render();\n });\n $scope.$watch($attrs.tgBacklogUsPoints, function(us) {\n var roles;\n if (us) {\n estimationProcess = $tgEstimationsService.create($el, us, $scope.project);\n roles = estimationProcess.calculateRoles();\n if (roles.length === 0) {\n $el.find(\".icon-arrow-bottom\").remove();\n $el.find(\"a.us-points\").addClass(\"not-clickable\");\n } else if (roles.length === 1) {\n selectedRoleId = _.keys(us.points)[0];\n }\n if (estimationProcess.isEditable) {\n bindClickElements();\n }\n estimationProcess.onSelectedPointForRole = function(roleId, pointId, points) {\n us.points = points;\n estimationProcess.render();\n return this.save(roleId, pointId).then(function() {\n return $ctrl.loadProjectStats();\n });\n };\n estimationProcess.render = function() {\n var ctx, html, mainTemplate, pointId, pointObj, template, text, title, totalPoints;\n totalPoints = this.calculateTotalPoints();\n if ((selectedRoleId == null) || roles.length === 1) {\n text = totalPoints;\n title = totalPoints;\n } else {\n pointId = this.us.points[selectedRoleId];\n pointObj = this.pointsById[pointId];\n text = pointObj.name + \" / \" + totalPoints + \"\";\n title = pointObj.name + \" / \" + totalPoints;\n }\n ctx = {\n totalPoints: totalPoints,\n roles: this.calculateRoles(),\n editable: this.isEditable,\n text: text,\n title: title\n };\n mainTemplate = \"common/estimation/us-estimation-total.html\";\n template = $tgTemplate.get(mainTemplate, true);\n html = template(ctx);\n return this.$el.html(html);\n };\n return estimationProcess.render();\n }\n });\n renderRolesSelector = function() {\n var html, roles;\n roles = estimationProcess.calculateRoles();\n html = rolesTemplate({\n \"roles\": roles\n });\n $el.append(html);\n return $el.find(\".pop-role\").popover().open(function() {\n return $(this).remove();\n });\n };\n bindClickElements = function() {\n $el.on(\"click\", \"a.us-points\", function(event) {\n var us;\n event.preventDefault();\n event.stopPropagation();\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n updatingSelectedRoleId = selectedRoleId;\n if (selectedRoleId != null) {\n return estimationProcess.renderPointsSelector(selectedRoleId);\n } else {\n return renderRolesSelector();\n }\n });\n return $el.on(\"click\", \".role\", function(event) {\n var popRolesDom, target, us;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n us = $scope.$eval($attrs.tgBacklogUsPoints);\n updatingSelectedRoleId = target.data(\"role-id\");\n popRolesDom = $el.find(\".pop-role\");\n popRolesDom.find(\"a\").removeClass(\"active\");\n popRolesDom.find(\"a[data-role-id='\" + updatingSelectedRoleId + \"']\").addClass(\"active\");\n return estimationProcess.renderPointsSelector(updatingSelectedRoleId);\n });\n };\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogUsPoints\", [\"$tgEstimationsService\", \"$tgRepo\", \"$tgTemplate\", UsPointsDirective]);\n\n ToggleBurndownVisibility = function($storage) {\n var hide, link, show;\n hide = function() {\n $(\".js-burndown-graph\").removeClass(\"shown\");\n $(\".js-toggle-burndown-visibility-button\").removeClass(\"active\");\n return $(\".js-burndown-graph\").removeClass(\"open\");\n };\n show = function(firstLoad) {\n $(\".js-toggle-burndown-visibility-button\").addClass(\"active\");\n if (firstLoad) {\n return $(\".js-burndown-graph\").addClass(\"shown\");\n } else {\n return $(\".js-burndown-graph\").addClass(\"open\");\n }\n };\n link = function($scope, $el, $attrs) {\n var firstLoad, hash, toggleGraph;\n firstLoad = true;\n hash = generateHash([\"is-burndown-grpahs-collapsed\"]);\n $scope.isBurndownGraphCollapsed = $storage.get(hash) || false;\n toggleGraph = function() {\n if ($scope.isBurndownGraphCollapsed) {\n hide(firstLoad);\n } else {\n show(firstLoad);\n }\n return firstLoad = false;\n };\n $scope.$watch(\"showGraphPlaceholder\", function() {\n if ($scope.showGraphPlaceholder != null) {\n $scope.isBurndownGraphCollapsed = $scope.isBurndownGraphCollapsed || $scope.showGraphPlaceholder;\n return toggleGraph();\n }\n });\n $el.on(\"click\", \".js-toggle-burndown-visibility-button\", function() {\n $scope.isBurndownGraphCollapsed = !$scope.isBurndownGraphCollapsed;\n $storage.set(hash, $scope.isBurndownGraphCollapsed);\n return toggleGraph();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgToggleBurndownVisibility\", [\"$tgStorage\", ToggleBurndownVisibility]);\n\n BurndownBacklogGraphDirective = function($translate) {\n var link, redrawChart;\n redrawChart = function(element, dataToDraw) {\n var client_increment_line, colors, data, evolution_line, j, milestonesRange, optimal_line, options, ref1, results, team_increment_line, width, zero_line;\n width = element.width();\n element.height(width / 6);\n milestonesRange = (function() {\n results = [];\n for (var j = 0, ref1 = dataToDraw.milestones.length - 1; 0 <= ref1 ? j <= ref1 : j >= ref1; 0 <= ref1 ? j++ : j--){ results.push(j); }\n return results;\n }).apply(this);\n data = [];\n zero_line = _.map(dataToDraw.milestones, function(ml) {\n return 0;\n });\n data.push({\n data: _.zip(milestonesRange, zero_line),\n lines: {\n fillColor: \"rgba(0,0,0,0)\"\n },\n points: {\n show: false\n }\n });\n optimal_line = _.map(dataToDraw.milestones, function(ml) {\n return ml.optimal;\n });\n data.push({\n data: _.zip(milestonesRange, optimal_line),\n lines: {\n fillColor: \"rgba(120,120,120,0.2)\"\n }\n });\n evolution_line = _.filter(_.map(dataToDraw.milestones, function(ml) {\n return ml.evolution;\n }), function(evolution) {\n return evolution != null;\n });\n data.push({\n data: _.zip(milestonesRange, evolution_line),\n lines: {\n fillColor: \"rgba(102,153,51,0.3)\"\n }\n });\n client_increment_line = _.map(dataToDraw.milestones, function(ml) {\n return -ml[\"team-increment\"] - ml[\"client-increment\"];\n });\n data.push({\n data: _.zip(milestonesRange, client_increment_line),\n lines: {\n fillColor: \"rgba(255,51,51,0.3)\"\n }\n });\n team_increment_line = _.map(dataToDraw.milestones, function(ml) {\n return -ml[\"team-increment\"];\n });\n data.push({\n data: _.zip(milestonesRange, team_increment_line),\n lines: {\n fillColor: \"rgba(153,51,51,0.3)\"\n }\n });\n colors = [\"rgba(0,0,0,1)\", \"rgba(120,120,120,0.2)\", \"rgba(102,153,51,1)\", \"rgba(153,51,51,1)\", \"rgba(255,51,51,1)\"];\n options = {\n grid: {\n borderWidth: {\n top: 0,\n right: 1,\n left: 0,\n bottom: 0\n },\n borderColor: \"#ccc\",\n hoverable: true\n },\n xaxis: {\n ticks: dataToDraw.milestones.length,\n axisLabel: $translate.instant(\"BACKLOG.CHART.XAXIS_LABEL\"),\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\",\n axisLabelPadding: 5,\n tickFormatter: function(val, axis) {\n return \"\";\n }\n },\n yaxis: {\n axisLabel: $translate.instant(\"BACKLOG.CHART.YAXIS_LABEL\"),\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: \"Verdana, Arial, Helvetica, Tahoma, sans-serif\",\n axisLabelPadding: 5\n },\n series: {\n shadowSize: 0,\n lines: {\n show: true,\n fill: true\n },\n points: {\n show: true,\n fill: true,\n radius: 4,\n lineWidth: 2\n }\n },\n colors: colors,\n tooltip: true,\n tooltipOpts: {\n content: function(label, xval, yval, flotItem) {\n var ctx;\n if (flotItem.seriesIndex === 1) {\n ctx = {\n sprintName: dataToDraw.milestones[xval].name,\n value: Math.abs(yval)\n };\n return $translate.instant(\"BACKLOG.CHART.OPTIMAL\", ctx);\n } else if (flotItem.seriesIndex === 2) {\n ctx = {\n sprintName: dataToDraw.milestones[xval].name,\n value: Math.abs(yval)\n };\n return $translate.instant(\"BACKLOG.CHART.REAL\", ctx);\n } else if (flotItem.seriesIndex === 3) {\n ctx = {\n sprintName: dataToDraw.milestones[xval].name,\n value: Math.abs(yval)\n };\n return $translate.instant(\"BACKLOG.CHART.INCREMENT_CLIENT\", ctx);\n } else {\n ctx = {\n sprintName: dataToDraw.milestones[xval].name,\n value: Math.abs(yval)\n };\n return $translate.instant(\"BACKLOG.CHART.INCREMENT_TEAM\", ctx);\n }\n }\n }\n };\n element.empty();\n return element.plot(data, options).data(\"plot\");\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch(\"stats\", function(value) {\n if ($scope.stats != null) {\n redrawChart(element, $scope.stats);\n return $scope.$on(\"resize\", function() {\n return redrawChart(element, $scope.stats);\n });\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBurndownBacklogGraph\", [\"$translate\", BurndownBacklogGraphDirective]);\n\n TgBacklogProgressBarDirective = function($template, $compile) {\n var adjustPercentaje, link, render, template;\n template = $template.get(\"backlog/progress-bar.html\", true);\n render = function(scope, el, projectPointsPercentaje, closedPointsPercentaje) {\n var html;\n html = template({\n projectPointsPercentaje: projectPointsPercentaje,\n closedPointsPercentaje: closedPointsPercentaje\n });\n html = $compile(html)(scope);\n return el.html(html);\n };\n adjustPercentaje = function(percentage) {\n var adjusted;\n adjusted = _.max([0, percentage]);\n adjusted = _.min([100, adjusted]);\n return Math.round(adjusted);\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$watch($attrs.tgBacklogProgressBar, function(stats) {\n var closedPoints, closedPointsPercentaje, definedPoints, projectPointsPercentaje, totalPoints;\n if (stats != null) {\n totalPoints = stats.total_points ? stats.total_points : stats.defined_points;\n definedPoints = stats.defined_points;\n closedPoints = stats.closed_points;\n if (definedPoints > totalPoints) {\n projectPointsPercentaje = totalPoints * 100 / definedPoints;\n closedPointsPercentaje = closedPoints * 100 / definedPoints;\n } else {\n projectPointsPercentaje = 100;\n closedPointsPercentaje = closedPoints * 100 / totalPoints;\n }\n projectPointsPercentaje = adjustPercentaje(projectPointsPercentaje - 3);\n closedPointsPercentaje = adjustPercentaje(closedPointsPercentaje - 3);\n return render($scope, $el, projectPointsPercentaje, closedPointsPercentaje);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogProgressBar\", [\"$tgTemplate\", \"$compile\", TgBacklogProgressBarDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/sortable.coffee\n */\n\n(function() {\n var BacklogSortableDirective, bindOnce, deleteElement, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaBacklog\");\n\n deleteElement = function(el) {\n $(el).scope().$destroy();\n $(el).off();\n return $(el).remove();\n };\n\n BacklogSortableDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, \"project\", function(project) {\n var drake, initIsBacklog, scroll;\n if (!(project.my_permissions.indexOf(\"modify_us\") > -1)) {\n return;\n }\n initIsBacklog = false;\n drake = dragula([$el[0], $('.js-empty-backlog')[0]], {\n copySortSource: false,\n copy: false,\n isContainer: function(el) {\n return el.classList.contains('sprint-table');\n },\n moves: function(item) {\n if (!$(item).hasClass('row')) {\n return false;\n }\n return true;\n }\n });\n drake.on('drag', function(item, container) {\n var isChecked, parent;\n parent = $(item).parent();\n initIsBacklog = parent.hasClass('backlog-table-body');\n $(document.body).addClass(\"drag-active\");\n isChecked = $(item).find(\"input[type='checkbox']\").is(\":checked\");\n return window.dragMultiple.start(item, container);\n });\n drake.on('cloned', function(item) {\n return $(item).addClass('multiple-drag-mirror');\n });\n drake.on('dragend', function(item) {\n var dragMultipleItems, firstElement, index, isBacklog, parent, sameContainer, sprint, usList;\n parent = $(item).parent();\n $('.doom-line').remove();\n parent = $(item).parent();\n isBacklog = parent.hasClass('backlog-table-body') || parent.hasClass('js-empty-backlog');\n if (initIsBacklog || isBacklog) {\n sameContainer = initIsBacklog === isBacklog;\n } else {\n sameContainer = $(item).scope().sprint.id === parent.scope().sprint.id;\n }\n dragMultipleItems = window.dragMultiple.stop();\n $(document.body).removeClass(\"drag-active\");\n sprint = null;\n firstElement = dragMultipleItems.length ? dragMultipleItems[0] : item;\n if (isBacklog) {\n index = $(firstElement).index(\".backlog-table-body .row\");\n } else {\n index = $(firstElement).index();\n sprint = parent.scope().sprint.id;\n }\n if (!sameContainer) {\n if (dragMultipleItems.length) {\n usList = _.map(dragMultipleItems, function(item) {\n return item = $(item).scope().us;\n });\n } else {\n usList = [$(item).scope().us];\n }\n if (dragMultipleItems.length) {\n _.each(dragMultipleItems, function(item) {\n return deleteElement(item);\n });\n } else {\n deleteElement(item);\n }\n } else {\n if (dragMultipleItems.length) {\n usList = _.map(dragMultipleItems, function(item) {\n return item = $(item).scope().us;\n });\n } else {\n usList = [$(item).scope().us];\n }\n }\n return $scope.$emit(\"sprint:us:move\", usList, index, sprint);\n });\n scroll = autoScroll([window], {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return drake.destroy();\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogSortable\", BacklogSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/backlog/sprints.coffee\n */\n\n(function() {\n var BacklogSprintDirective, BacklogSprintHeaderDirective, ToggleExcludeClosedSprintsVisualization, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaBacklog\");\n\n BacklogSprintDirective = function($repo, $rootscope) {\n var link, slideOptions, sprintTableMinHeight, toggleSprint;\n sprintTableMinHeight = 50;\n slideOptions = {\n duration: 500,\n easing: 'linear'\n };\n toggleSprint = (function(_this) {\n return function($el) {\n var sprintArrow, sprintTable;\n sprintTable = $el.find(\".sprint-table\");\n sprintArrow = $el.find(\".compact-sprint\");\n sprintArrow.toggleClass('active');\n return sprintTable.toggleClass('open');\n };\n })(this);\n link = function($scope, $el, $attrs) {\n $scope.$watch($attrs.tgBacklogSprint, function(sprint) {\n sprint = $scope.$eval($attrs.tgBacklogSprint);\n if (sprint.closed) {\n return $el.addClass(\"sprint-closed\");\n } else {\n return toggleSprint($el);\n }\n });\n $el.on(\"click\", \".sprint-name > .compact-sprint\", function(event) {\n event.preventDefault();\n toggleSprint($el);\n return $el.find(\".sprint-table\").slideToggle(slideOptions);\n });\n $el.on(\"click\", \".edit-sprint\", function(event) {\n var sprint;\n event.preventDefault();\n sprint = $scope.$eval($attrs.tgBacklogSprint);\n return $rootscope.$broadcast(\"sprintform:edit\", sprint);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogSprint\", [\"$tgRepo\", \"$rootScope\", BacklogSprintDirective]);\n\n BacklogSprintHeaderDirective = function($navUrls, $template, $compile, $translate) {\n var link, template;\n template = $template.get(\"backlog/sprint-header.html\");\n link = function($scope, $el, $attrs, $model) {\n var isEditable, isVisible, prettyDate, render;\n prettyDate = $translate.instant(\"BACKLOG.SPRINTS.DATE\");\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_milestone\") !== -1;\n };\n isVisible = function() {\n return $scope.project.my_permissions.indexOf(\"view_milestones\") !== -1;\n };\n render = function(sprint) {\n var compiledTemplate, ctx, estimatedDateRange, finish, start, taskboardUrl, templateScope;\n taskboardUrl = $navUrls.resolve(\"project-taskboard\", {\n project: $scope.project.slug,\n sprint: sprint.slug\n });\n start = moment(sprint.estimated_start).format(prettyDate);\n finish = moment(sprint.estimated_finish).format(prettyDate);\n estimatedDateRange = start + \"-\" + finish;\n ctx = {\n name: sprint.name,\n taskboardUrl: taskboardUrl,\n estimatedDateRange: estimatedDateRange,\n closedPoints: sprint.closed_points || 0,\n totalPoints: sprint.total_points || 0,\n isVisible: isVisible(),\n isEditable: isEditable()\n };\n templateScope = $scope.$new();\n _.assign(templateScope, ctx);\n compiledTemplate = $compile(template)(templateScope);\n return $el.html(compiledTemplate);\n };\n $scope.$watch(\"sprint\", function(sprint) {\n return render(sprint);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\"\n };\n };\n\n module.directive(\"tgBacklogSprintHeader\", [\"$tgNavUrls\", \"$tgTemplate\", \"$compile\", \"$translate\", BacklogSprintHeaderDirective]);\n\n ToggleExcludeClosedSprintsVisualization = function($rootscope, $loading, $translate) {\n var excludeClosedSprints, link;\n excludeClosedSprints = true;\n link = function($scope, $el, $attrs) {\n var currentLoading, loadingElm;\n loadingElm = $(\"
    \");\n $el.after(loadingElm);\n currentLoading = null;\n $el.on(\"click\", function(event) {\n event.preventDefault();\n excludeClosedSprints = !excludeClosedSprints;\n currentLoading = $loading().target(loadingElm).start();\n if (excludeClosedSprints) {\n return $rootscope.$broadcast(\"backlog:unload-closed-sprints\");\n } else {\n return $rootscope.$broadcast(\"backlog:load-closed-sprints\");\n }\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return $scope.$on(\"closed-sprints:reloaded\", function(ctx, sprints) {\n var key, text;\n currentLoading.finish();\n if (sprints.length > 0) {\n key = \"BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS\";\n } else {\n key = \"BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS\";\n }\n text = $translate.instant(key);\n return $el.find(\".text\").text(text);\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBacklogToggleClosedSprintsVisualization\", [\"$rootScope\", \"$tgLoading\", \"$translate\", ToggleExcludeClosedSprintsVisualization]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/charts.coffee\n */\n\n(function() {\n var SprintGraphDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaTaskboard\");\n\n SprintGraphDirective = function($translate) {\n var link, redrawChart;\n redrawChart = function(element, dataToDraw) {\n var data, days, options, width;\n width = element.width();\n element.height(240);\n days = _.map(dataToDraw, function(x) {\n return moment.utc(x.day);\n });\n data = [];\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, function(d) {\n return d.optimal_points;\n })),\n lines: {\n fillColor: \"rgba(120,120,120,0.2)\"\n }\n });\n data.unshift({\n data: _.zip(days, _.map(dataToDraw, function(d) {\n return d.open_points;\n })),\n lines: {\n fillColor: \"rgba(102,153,51,0.3)\"\n }\n });\n options = {\n grid: {\n borderWidth: {\n top: 0,\n right: 1,\n left: 0,\n bottom: 0\n },\n borderColor: '#ccc',\n hoverable: true\n },\n xaxis: {\n tickSize: [1, \"day\"],\n min: days[0],\n max: _.last(days),\n mode: \"time\",\n daysNames: days,\n axisLabel: $translate.instant(\"TASKBOARD.CHARTS.XAXIS_LABEL\"),\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif',\n axisLabelPadding: 5\n },\n yaxis: {\n min: 0,\n axisLabel: $translate.instant(\"TASKBOARD.CHARTS.YAXIS_LABEL\"),\n axisLabelUseCanvas: true,\n axisLabelFontSizePixels: 12,\n axisLabelFontFamily: 'Verdana, Arial, Helvetica, Tahoma, sans-serif',\n axisLabelPadding: 5\n },\n series: {\n shadowSize: 0,\n lines: {\n show: true,\n fill: true\n },\n points: {\n show: true,\n fill: true,\n radius: 4,\n lineWidth: 2\n }\n },\n colors: [\"rgba(102,153,51,1)\", \"rgba(120,120,120,0.2)\"],\n tooltip: true,\n tooltipOpts: {\n content: function(label, xval, yval, flotItem) {\n var formattedDate, roundedValue;\n formattedDate = moment(xval).format($translate.instant(\"TASKBOARD.CHARTS.DATE\"));\n roundedValue = Math.round(yval);\n if (flotItem.seriesIndex === 1) {\n return $translate.instant(\"TASKBOARD.CHARTS.OPTIMAL\", {\n formattedDate: formattedDate,\n roundedValue: roundedValue\n });\n } else {\n return $translate.instant(\"TASKBOARD.CHARTS.REAL\", {\n formattedDate: formattedDate,\n roundedValue: roundedValue\n });\n }\n }\n }\n };\n element.empty();\n return element.plot(data, options).data(\"plot\");\n };\n link = function($scope, $el, $attrs) {\n var element;\n element = angular.element($el);\n $scope.$on(\"resize\", function() {\n if ($scope.stats) {\n return redrawChart(element, $scope.stats.days);\n }\n });\n $scope.$on(\"taskboard:graph:toggle-visibility\", function() {\n $el.parent().toggleClass('open');\n return timeout(100, function() {\n if ($scope.stats) {\n return redrawChart(element, $scope.stats.days);\n }\n });\n });\n $scope.$watch('stats', function(value) {\n if ($scope.stats == null) {\n return;\n }\n return redrawChart(element, $scope.stats.days);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSprintGraph\", [\"$translate\", SprintGraphDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/lightboxes.coffee\n */\n\n(function() {\n var CreateBulkTasksDirective, bindOnce, debounce, module, taiga, trim;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n trim = this.taiga.trim;\n\n module = angular.module(\"taigaTaskboard\");\n\n CreateBulkTasksDirective = function($repo, $rs, $rootscope, $loading, lightboxService, $model) {\n var link;\n link = function($scope, $el, attrs) {\n var submit, submitButton;\n $scope.form = {\n data: \"\",\n usId: null\n };\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, data, form, projectId, promise, sprintId, usId;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n data = $scope.form.data;\n projectId = $scope.projectId;\n sprintId = $scope.form.sprintId;\n usId = $scope.form.usId;\n promise = $rs.tasks.bulkCreate(projectId, sprintId, usId, data);\n promise.then(function(result) {\n result = _.map(result, (function(_this) {\n return function(x) {\n return $model.make_model('tasks', x);\n };\n })(this));\n currentLoading.finish();\n $rootscope.$broadcast(\"taskform:bulk:success\", result);\n return lightboxService.close($el);\n });\n return promise.then(null, function() {\n return currentLoading.finish();\n });\n };\n })(this));\n $scope.$on(\"taskform:bulk\", function(ctx, sprintId, usId) {\n lightboxService.open($el);\n return $scope.form = {\n data: \"\",\n sprintId: sprintId,\n usId: usId\n };\n });\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateBulkTasks\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"$tgLoading\", \"lightboxService\", \"$tgModel\", CreateBulkTasksDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/main.coffee\n */\n\n(function() {\n var TaskboardController, TaskboardDirective, TaskboardSquishColumnDirective, bindMethods, bindOnce, debounceLeading, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n toggleText = this.taiga.toggleText;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n scopeDefer = this.taiga.scopeDefer;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n debounceLeading = this.taiga.debounceLeading;\n\n module = angular.module(\"taigaTaskboard\");\n\n TaskboardController = (function(superClass) {\n extend(TaskboardController, superClass);\n\n TaskboardController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"tgResources\", \"$routeParams\", \"$q\", \"tgAppMetaService\", \"$tgLocation\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"tgErrorHandlingService\", \"tgTaskboardTasks\", \"tgTaskboardIssues\", \"$tgStorage\", \"tgFilterRemoteStorageService\"];\n\n TaskboardController.prototype.excludePrefix = \"exclude_\";\n\n TaskboardController.prototype.filterCategories = [\"tags\", \"status\", \"assigned_to\", \"owner\", \"role\"];\n\n function TaskboardController(scope, rootscope, repo, confirm, rs1, rs2, params1, q1, appMetaService, location, navUrls, events, analytics, translate, errorHandlingService, taskboardTasksService, taskboardIssuesService, storage, filterRemoteStorageService) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs1;\n this.rs2 = rs2;\n this.params = params1;\n this.q = q1;\n this.appMetaService = appMetaService;\n this.location = location;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.taskboardTasksService = taskboardTasksService;\n this.taskboardIssuesService = taskboardIssuesService;\n this.storage = storage;\n this.filterRemoteStorageService = filterRemoteStorageService;\n bindMethods(this);\n this.taskboardTasksService.reset();\n this.scope.userstories = [];\n this.openFilter = false;\n if (this.applyStoredFilters(this.params.pslug, \"tasks-filters\")) {\n return;\n }\n this.scope.sectionName = this.translate.instant(\"TASKBOARD.SECTION_NAME\");\n this.initializeEventHandlers();\n taiga.defineImmutableProperty(this.scope, \"usTasks\", (function(_this) {\n return function() {\n return _this.taskboardTasksService.usTasks;\n };\n })(this));\n taiga.defineImmutableProperty(this.scope, \"milestoneIssues\", (function(_this) {\n return function() {\n return _this.taskboardIssuesService.milestoneIssues;\n };\n })(this));\n }\n\n TaskboardController.prototype.firstLoad = function() {\n var promise;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this._setMeta();\n };\n })(this));\n return promise.then(null, this.onInitialDataError.bind(this));\n };\n\n TaskboardController.prototype.setZoom = function(zoomLevel, zoom) {\n var previousZoomLevel;\n if (this.zoomLevel === zoomLevel) {\n return null;\n }\n this.isFirstLoad = !this.zoomLevel;\n previousZoomLevel = this.zoomLevel;\n this.zoomLevel = zoomLevel;\n this.zoom = zoom;\n if (this.isFirstLoad) {\n this.firstLoad().then((function(_this) {\n return function() {\n _this.isFirstLoad = false;\n return _this.taskboardTasksService.resetFolds();\n };\n })(this));\n } else if (this.zoomLevel > 1 && previousZoomLevel <= 1) {\n this.zoomLoading = true;\n this.q.all([this.loadTasks(), this.loadIssues()]).then((function(_this) {\n return function() {\n _this.zoomLoading = false;\n return _this.taskboardTasksService.resetFolds();\n };\n })(this));\n }\n if (this.zoomLevel === '0') {\n return this.rootscope.$broadcast(\"sprint:zoom0\");\n }\n };\n\n TaskboardController.prototype.changeQ = function(q) {\n this.replaceFilter(\"q\", q);\n this.loadTasks();\n return this.generateFilters();\n };\n\n TaskboardController.prototype.removeFilter = function(filter) {\n this.unselectFilter(filter.dataType, filter.id, false, filter.mode);\n this.loadTasks();\n return this.generateFilters();\n };\n\n TaskboardController.prototype.addFilter = function(newFilter) {\n this.selectFilter(newFilter.category.dataType, newFilter.filter.id, false, newFilter.mode);\n this.loadTasks();\n return this.generateFilters();\n };\n\n TaskboardController.prototype.selectCustomFilter = function(customFilter) {\n this.replaceAllFilters(customFilter.filter);\n this.loadTasks();\n return this.generateFilters();\n };\n\n TaskboardController.prototype.removeCustomFilter = function(customFilter) {\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, 'tasks-custom-filters').then((function(_this) {\n return function(userFilters) {\n delete userFilters[customFilter.id];\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, 'tasks-custom-filters').then(_this.generateFilters);\n };\n })(this));\n };\n\n TaskboardController.prototype.isFilterDataTypeSelected = function(filterDataType) {\n var filter, i, len, ref;\n ref = this.selectedFilters;\n for (i = 0, len = ref.length; i < len; i++) {\n filter = ref[i];\n if (filter['dataType'] === filterDataType) {\n return true;\n }\n }\n return false;\n };\n\n TaskboardController.prototype.saveCustomFilter = function(name) {\n var excludeKey, filters, i, key, len, ref, urlfilters;\n filters = {};\n urlfilters = this.location.search();\n ref = this.filterCategories;\n for (i = 0, len = ref.length; i < len; i++) {\n key = ref[i];\n excludeKey = this.excludePrefix.concat(key);\n filters[key] = urlfilters[key];\n filters[excludeKey] = urlfilters[excludeKey];\n }\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, 'tasks-custom-filters').then((function(_this) {\n return function(userFilters) {\n userFilters[name] = filters;\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, 'tasks-custom-filters').then(_this.generateFilters);\n };\n })(this));\n };\n\n TaskboardController.prototype.generateFilters = function() {\n var excludeKey, i, key, len, loadFilters, ref, urlfilters;\n this.storeFilters(this.params.pslug, this.location.search(), \"tasks-filters\");\n urlfilters = this.location.search();\n loadFilters = {};\n loadFilters.project = this.scope.projectId;\n loadFilters.milestone = this.scope.sprintId;\n loadFilters.q = urlfilters.q;\n ref = this.filterCategories;\n for (i = 0, len = ref.length; i < len; i++) {\n key = ref[i];\n excludeKey = this.excludePrefix.concat(key);\n loadFilters[key] = urlfilters[key];\n loadFilters[excludeKey] = urlfilters[excludeKey];\n }\n return this.q.all([this.rs.tasks.filtersData(loadFilters), this.filterRemoteStorageService.getFilters(this.scope.projectId, 'tasks-custom-filters')]).then((function(_this) {\n return function(result) {\n var customFiltersRaw, data, dataCollection, j, len1, ref1, selected, tagsWithAtLeastOneElement;\n data = result[0];\n customFiltersRaw = result[1];\n dataCollection = {};\n dataCollection.status = _.map(data.statuses, function(it) {\n it.id = it.id.toString();\n return it;\n });\n dataCollection.tags = _.map(data.tags, function(it) {\n it.id = it.name;\n return it;\n });\n tagsWithAtLeastOneElement = _.filter(dataCollection.tags, function(tag) {\n return tag.count > 0;\n });\n dataCollection.assigned_to = _.map(data.assigned_to, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.full_name || \"Unassigned\";\n return it;\n });\n dataCollection.role = _.map(data.roles, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.name || \"Unassigned\";\n return it;\n });\n dataCollection.owner = _.map(data.owners, function(it) {\n it.id = it.id.toString();\n it.name = it.full_name;\n return it;\n });\n _this.selectedFilters = [];\n ref1 = _this.filterCategories;\n for (j = 0, len1 = ref1.length; j < len1; j++) {\n key = ref1[j];\n excludeKey = _this.excludePrefix.concat(key);\n if (loadFilters[key]) {\n selected = _this.formatSelectedFilters(key, dataCollection[key], loadFilters[key]);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters[excludeKey]) {\n selected = _this.formatSelectedFilters(key, dataCollection[key], loadFilters[excludeKey], \"exclude\");\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n }\n _this.filterQ = loadFilters.q;\n _this.filters = [\n {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.STATUS\"),\n dataType: \"status\",\n content: dataCollection.status\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.TAGS\"),\n dataType: \"tags\",\n content: dataCollection.tags,\n hideEmpty: true,\n totalTaggedElements: tagsWithAtLeastOneElement.length\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ASSIGNED_TO\"),\n dataType: \"assigned_to\",\n content: dataCollection.assigned_to\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ROLE\"),\n dataType: \"role\",\n content: dataCollection.role\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.CREATED_BY\"),\n dataType: \"owner\",\n content: dataCollection.owner\n }\n ];\n _this.customFilters = [];\n return _.forOwn(customFiltersRaw, function(value, key) {\n return _this.customFilters.push({\n id: key,\n name: key,\n filter: value\n });\n });\n };\n })(this));\n };\n\n TaskboardController.prototype._setMeta = function() {\n var description, prettyDate, title;\n prettyDate = this.translate.instant(\"BACKLOG.SPRINTS.DATE\");\n title = this.translate.instant(\"TASKBOARD.PAGE_TITLE\", {\n projectName: this.scope.project.name,\n sprintName: this.scope.sprint.name\n });\n description = this.translate.instant(\"TASKBOARD.PAGE_DESCRIPTION\", {\n projectName: this.scope.project.name,\n sprintName: this.scope.sprint.name,\n startDate: moment(this.scope.sprint.estimated_start).format(prettyDate),\n endDate: moment(this.scope.sprint.estimated_finish).format(prettyDate),\n completedPercentage: this.scope.stats.completedPercentage || \"0\",\n completedPoints: this.scope.stats.completedPointsSum || \"--\",\n totalPoints: this.scope.stats.totalPointsSum || \"--\",\n openTasks: this.scope.stats.openTasks || \"--\",\n totalTasks: this.scope.stats.total_tasks || \"--\"\n });\n return this.appMetaService.setAll(title, description);\n };\n\n TaskboardController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"taskform:bulk:success\", (function(_this) {\n return function(event, tasks) {\n _this.refreshTagsColors().then(function() {\n return _this.taskboardTasksService.add(tasks);\n });\n return _this.analytics.trackEvent(\"task\", \"create\", \"bulk create task on taskboard\", 1);\n };\n })(this));\n this.scope.$on(\"taskform:new:success\", (function(_this) {\n return function(event, task) {\n _this.refreshTagsColors().then(function() {\n return _this.taskboardTasksService.add(task);\n });\n return _this.analytics.trackEvent(\"task\", \"create\", \"create task on taskboard\", 1);\n };\n })(this));\n this.scope.$on(\"taskform:edit:success\", (function(_this) {\n return function(event, task) {\n return _this.refreshTagsColors().then(function() {\n return _this.taskboardTasksService.replaceModel(task);\n });\n };\n })(this));\n this.scope.$on(\"issueform:new:success\", (function(_this) {\n return function(event, issue) {\n _this.refreshTagsColors().then(function() {\n return _this.taskboardIssuesService.add(issue);\n });\n return _this.analytics.trackEvent(\"issue\", \"create\", \"create issue on taskboard\", 1);\n };\n })(this));\n this.scope.$on(\"issueform:add:success\", (function(_this) {\n return function(event, issue) {\n return _this.refreshTagsColors().then(function() {\n return _this.taskboardIssuesService.add(issue);\n });\n };\n })(this));\n this.scope.$on(\"issueform:edit:success\", (function(_this) {\n return function(event, issue) {\n return _this.refreshTagsColors().then(function() {\n return _this.taskboardIssuesService.replaceModel(issue);\n });\n };\n })(this));\n this.scope.$on(\"taskboard:task:deleted\", (function(_this) {\n return function(event, task) {\n return _this.loadTasks();\n };\n })(this));\n this.scope.$on(\"taskboard:issue:deleted\", (function(_this) {\n return function(event, issue) {\n return _this.loadIssues();\n };\n })(this));\n this.scope.$on(\"taskboard:task:move\", this.taskMove);\n this.scope.$on(\"assigned-to:added\", this.onAssignedToChanged);\n return this.scope.$on(\"taskboard:items:move\", (function(_this) {\n return function(event, itemsMoved) {\n if (itemsMoved.uss) {\n return _this.firstLoad();\n } else {\n if (itemsMoved.tasks) {\n _this.loadTasks();\n }\n if (itemsMoved.issues) {\n return _this.loadIssues();\n }\n }\n };\n })(this));\n };\n\n TaskboardController.prototype.onAssignedToChanged = function(ctx, userid, model) {\n if (model.getName() === 'tasks') {\n model.assigned_to = userid;\n this.taskboardTasksService.replaceModel(model);\n this.repo.save(model).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_to') || _this.isFilterDataTypeSelected('role')) {\n return _this.loadTasks();\n }\n };\n })(this));\n }\n if (model.getName() === 'issues') {\n model.assigned_to = userid;\n this.taskboardIssuesService.replaceModel(model);\n return this.repo.save(model).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_to') || _this.isFilterDataTypeSelected('role')) {\n return _this.loadIssues();\n }\n };\n })(this));\n }\n };\n\n TaskboardController.prototype.initializeSubscription = function() {\n var routingKey, routingKey1;\n routingKey = \"changes.project.\" + this.scope.projectId + \".tasks\";\n this.events.subscribe(this.scope, routingKey, debounceLeading(500, (function(_this) {\n return function(message) {\n return _this.loadTaskboard();\n };\n })(this)));\n routingKey = \"changes.project.\" + this.scope.projectId + \".issues\";\n this.events.subscribe(this.scope, routingKey, debounceLeading(500, (function(_this) {\n return function(message) {\n return _this.loadIssues();\n };\n })(this)));\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n return this.events.subscribe(this.scope, routingKey1, (function(_this) {\n return function(message) {\n _this.refreshTagsColors();\n _this.loadSprintStats();\n return _this.loadSprint();\n };\n })(this));\n };\n\n TaskboardController.prototype.loadProject = function() {\n return this.rs.projects.get(this.scope.projectId).then((function(_this) {\n return function(project) {\n if (!project.is_backlog_activated) {\n _this.errorHandlingService.permissionDenied();\n }\n _this.scope.project = project;\n _this.scope.pointsList = _.sortBy(project.points, \"order\");\n _this.scope.pointsById = groupBy(project.points, function(e) {\n return e.id;\n });\n _this.scope.roleById = groupBy(project.roles, function(e) {\n return e.id;\n });\n _this.scope.taskStatusList = _.sortBy(project.task_statuses, \"order\");\n _this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n _this.scope.usStatusById = groupBy(project.us_statuses, function(e) {\n return e.id;\n });\n _this.scope.issueStatusById = groupBy(project.issue_statuses, function(e) {\n return e.id;\n });\n _this.scope.$emit('project:loaded', project);\n _this.fillUsersAndRoles(project.members, project.roles);\n return project;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadSprintStats = function() {\n return this.rs.sprints.stats(this.scope.projectId, this.scope.sprintId).then((function(_this) {\n return function(stats) {\n var completedPointsSum, remainingPointsSum, remainingTasks, totalPointsSum;\n totalPointsSum = _.reduce(_.values(stats.total_points), (function(res, n) {\n return res + n;\n }), 0);\n completedPointsSum = _.reduce(_.values(stats.completed_points), (function(res, n) {\n return res + n;\n }), 0);\n remainingPointsSum = totalPointsSum - completedPointsSum;\n remainingTasks = stats.total_tasks - stats.completed_tasks;\n _this.scope.stats = stats;\n _this.scope.stats.totalPointsSum = totalPointsSum;\n _this.scope.stats.completedPointsSum = completedPointsSum;\n _this.scope.stats.remainingPointsSum = remainingPointsSum;\n _this.scope.stats.remainingTasks = remainingTasks;\n if (stats.totalPointsSum) {\n _this.scope.stats.completedPercentage = Math.round(100 * stats.completedPointsSum / stats.totalPointsSum);\n } else {\n _this.scope.stats.completedPercentage = 0;\n }\n _this.scope.stats.openTasks = stats.total_tasks - stats.completed_tasks;\n return stats;\n };\n })(this));\n };\n\n TaskboardController.prototype.refreshTagsColors = function() {\n return this.rs.projects.tagsColors(this.scope.projectId).then((function(_this) {\n return function(tags_colors) {\n return _this.scope.project.tags_colors = tags_colors._attrs;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadSprint = function() {\n return this.rs.sprints.get(this.scope.projectId, this.scope.sprintId).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n _this.scope.userstories = _.sortBy(sprint.user_stories, \"sprint_order\");\n _this.taskboardTasksService.setUserstories(_this.scope.userstories);\n return sprint;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadIssues = function() {\n var params;\n params = {};\n if (this.zoomLevel > 1) {\n params.include_attachments = 1;\n }\n params = _.merge(params, this.location.search());\n return this.rs.issues.listInProject(this.scope.projectId, this.scope.sprintId, params).then((function(_this) {\n return function(issues) {\n _this.taskboardIssuesService.init(_this.scope.project, _this.scope.usersById, _this.scope.issueStatusById);\n _this.taskboardIssuesService.set(issues);\n return _this.scope.taskBoardLoading = false;\n };\n })(this));\n };\n\n TaskboardController.prototype.loadTasks = function() {\n var params;\n params = {};\n if (this.zoomLevel > 1) {\n params.include_attachments = 1;\n }\n params = _.merge(params, this.location.search());\n return this.rs.tasks.list(this.scope.projectId, this.scope.sprintId, null, params).then((function(_this) {\n return function(tasks) {\n _this.taskboardTasksService.init(_this.scope.project, _this.scope.usersById);\n return _this.taskboardTasksService.set(tasks);\n };\n })(this));\n };\n\n TaskboardController.prototype.loadTaskboard = function() {\n return this.q.all([\n this.refreshTagsColors(), this.loadSprintStats(), this.loadSprint().then((function(_this) {\n return function() {\n _this.loadTasks();\n return _this.loadIssues();\n };\n })(this))\n ]);\n };\n\n TaskboardController.prototype.loadInitialData = function() {\n var params, promise;\n params = {\n pslug: this.params.pslug,\n sslug: this.params.sslug\n };\n promise = this.repo.resolve(params).then((function(_this) {\n return function(data) {\n _this.scope.projectId = data.project;\n _this.scope.sprintId = data.milestone;\n _this.initializeSubscription();\n return data;\n };\n })(this));\n return promise.then((function(_this) {\n return function() {\n return _this.loadProject();\n };\n })(this)).then((function(_this) {\n return function() {\n _this.generateFilters();\n return _this.loadTaskboard().then(function() {\n return _this.setRolePoints();\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.showPlaceHolder = function(statusId, usId) {\n if (!this.taskboardTasksService.tasksRaw.length) {\n if (this.scope.taskStatusList[0].id === statusId && (!this.scope.userstories.length || this.scope.userstories[0].id === usId)) {\n return true;\n }\n }\n return false;\n };\n\n TaskboardController.prototype.editTask = function(id) {\n var task;\n task = this.taskboardTasksService.getTask(id);\n task = task.set('loading-edit', true);\n this.taskboardTasksService.replace(task);\n return this.rs.tasks.getByRef(task.getIn(['model', 'project']), task.getIn(['model', 'ref'])).then((function(_this) {\n return function(editingTask) {\n return _this.rs2.attachments.list(\"task\", task.get('id'), task.getIn(['model', 'project'])).then(function(attachments) {\n _this.rootscope.$broadcast(\"genericform:edit\", {\n 'objType': 'task',\n 'obj': editingTask,\n 'project': _this.scope.project,\n 'sprintId': _this.scope.sprintId,\n 'attachments': attachments.toJS()\n });\n task = task.set('loading-edit', false);\n return _this.taskboardTasksService.replace(task);\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.editIssue = function(id) {\n var issue;\n issue = this.taskboardIssuesService.getIssue(id);\n issue = issue.set('loading-edit', true);\n return this.rs.issues.getByRef(issue.getIn(['model', 'project']), issue.getIn(['model', 'ref'])).then((function(_this) {\n return function(editingIssue) {\n return _this.rs2.attachments.list(\"issue\", issue.get('id'), issue.getIn(['model', 'project'])).then(function(attachments) {\n _this.rootscope.$broadcast(\"genericform:edit\", {\n 'objType': 'issue',\n 'obj': editingIssue,\n 'project': _this.scope.project,\n 'sprintId': _this.scope.sprintId,\n 'attachments': attachments.toJS()\n });\n return issue = issue.set('loading-edit', false);\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.deleteTask = function(id) {\n var task;\n task = this.taskboardTasksService.getTask(id);\n task = task.set('loading-delete', true);\n return this.rs.tasks.getByRef(task.getIn(['model', 'project']), task.getIn(['model', 'ref'])).then((function(_this) {\n return function(deletingTask) {\n var message, title;\n task = task.set('loading-delete', false);\n title = _this.translate.instant(\"TASK.TITLE_DELETE_ACTION\");\n message = deletingTask.subject;\n return _this.confirm.askOnDelete(title, message).then(function(askResponse) {\n var promise;\n promise = _this.repo.remove(deletingTask);\n promise.then(function() {\n _this.scope.$broadcast(\"taskboard:task:deleted\");\n return askResponse.finish();\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return this.confirm.notify(\"error\");\n });\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.deleteIssue = function(id) {\n var issue;\n issue = this.taskboardIssuesService.getIssue(id);\n issue = issue.set('loading-delete', true);\n return this.rs.issues.getByRef(issue.getIn(['model', 'project']), issue.getIn(['model', 'ref'])).then((function(_this) {\n return function(deletingIssue) {\n var message, title;\n issue = issue.set('loading-delete', false);\n title = _this.translate.instant(\"ISSUES.ACTION_DELETE\");\n message = deletingIssue.subject;\n return _this.confirm.askOnDelete(title, message).then(function(askResponse) {\n var promise;\n promise = _this.repo.remove(deletingIssue);\n promise.then(function() {\n _this.scope.$broadcast(\"taskboard:issue:deleted\");\n return askResponse.finish();\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return this.confirm.notify(\"error\");\n });\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.removeIssueFromSprint = function(id) {\n var issue;\n issue = this.taskboardIssuesService.getIssue(id);\n issue = issue.set('loading-delete', true);\n return this.rs.issues.getByRef(issue.getIn(['model', 'project']), issue.getIn(['model', 'ref'])).then((function(_this) {\n return function(removingIssue) {\n var message, title;\n issue = issue.set('loading-delete', false);\n title = _this.translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.TITLE\");\n message = _this.translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE\");\n message = _this.translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE\", {\n sprintName: _this.scope.sprint.name\n });\n return _this.confirm.ask(title, null, message).then(function(askResponse) {\n var promise;\n removingIssue.milestone = null;\n promise = _this.repo.save(removingIssue);\n promise.then(function() {\n _this.taskboardIssuesService.remove(removingIssue);\n return askResponse.finish();\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return this.confirm.notify(\"error\");\n });\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.taskMove = function(ctx, task, oldStatusId, usId, statusId, order) {\n var moveUpdateData, options, params, promise;\n this.scope.movingTask = true;\n task = this.taskboardTasksService.getTaskModel(task.get('id'));\n moveUpdateData = this.taskboardTasksService.move(task.id, usId, statusId, order);\n params = {\n status__is_archived: false,\n include_attachments: true\n };\n options = {\n headers: {\n \"set-orders\": JSON.stringify(moveUpdateData.set_orders)\n }\n };\n return promise = this.repo.save(task, true, params, options, true).then((function(_this) {\n return function(result) {\n var headers;\n if (result[0].user_story) {\n _this.reloadUserStory(result[0].user_story);\n }\n _this.scope.movingTask = false;\n headers = result[1];\n if (headers && headers['taiga-info-order-updated']) {\n order = JSON.parse(headers['taiga-info-order-updated']);\n _this.taskboardTasksService.assignOrders(order);\n }\n _this.loadSprintStats();\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('status')) {\n return _this.loadTasks();\n }\n };\n })(this));\n };\n\n TaskboardController.prototype.reloadUserStory = function(userStoryId) {\n return this.rs.userstories.get(this.scope.project.id, userStoryId).then((function(_this) {\n return function(us) {\n return _this.scope.userstories = _.map(_this.scope.userstories, function(x) {\n if (x.id === us.id) {\n return us;\n } else {\n return x;\n }\n });\n };\n })(this));\n };\n\n TaskboardController.prototype.addNewTask = function(type, us) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"genericform:new\", {\n 'objType': 'task',\n 'project': this.scope.project,\n 'sprintId': this.scope.sprintId,\n 'usId': us != null ? us.id : void 0\n });\n case \"bulk\":\n return this.rootscope.$broadcast(\"taskform:bulk\", this.scope.sprintId, us != null ? us.id : void 0);\n }\n };\n\n TaskboardController.prototype.addNewIssue = function(type, us) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"genericform:new-or-existing\", {\n objType: 'issue',\n project: this.scope.project,\n sprintId: this.scope.sprintId,\n relatedField: 'milestone',\n relatedObjectId: this.scope.sprintId,\n targetName: this.scope.sprint.name\n });\n case \"standard\":\n return this.rootscope.$broadcast(\"taskform:new\", this.scope.sprintId, us != null ? us.id : void 0);\n case \"bulk\":\n return this.rootscope.$broadcast(\"issueform:bulk\", this.scope.projectId, this.scope.sprintId);\n }\n };\n\n TaskboardController.prototype.toggleFold = function(id, modelName) {\n if (modelName === 'issues') {\n return this.taskboardIssuesService.toggleFold(id);\n } else if (modelName === 'tasks') {\n return this.taskboardTasksService.toggleFold(id);\n }\n };\n\n TaskboardController.prototype.changeTaskAssignedTo = function(id) {\n var task;\n task = this.taskboardTasksService.getTaskModel(id);\n return this.rootscope.$broadcast(\"assigned-to:add\", task);\n };\n\n TaskboardController.prototype.changeIssueAssignedTo = function(id) {\n var issue;\n issue = this.taskboardIssuesService.getIssueModel(id);\n return this.rootscope.$broadcast(\"assigned-to:add\", issue);\n };\n\n TaskboardController.prototype.setRolePoints = function() {\n var computableRoles, getPoint, getRole, pointsByRole;\n computableRoles = _.filter(this.scope.project.roles, \"computable\");\n getRole = (function(_this) {\n return function(roleId) {\n roleId = parseInt(roleId, 10);\n return _.find(computableRoles, function(role) {\n return role.id === roleId;\n });\n };\n })(this);\n getPoint = (function(_this) {\n return function(pointId) {\n var poitnId;\n poitnId = parseInt(pointId, 10);\n return _.find(_this.scope.project.points, function(point) {\n return point.id === pointId;\n });\n };\n })(this);\n pointsByRole = _.reduce(this.scope.userstories, (function(_this) {\n return function(result, us, key) {\n _.forOwn(us.points, function(pointId, roleId) {\n var point, role;\n role = getRole(roleId);\n point = getPoint(pointId);\n if (!result[role.id]) {\n result[role.id] = role;\n result[role.id].points = 0;\n }\n return result[role.id].points += point.value;\n });\n return result;\n };\n })(this), {});\n return this.scope.pointsByRole = Object.keys(pointsByRole).map(function(key) {\n return pointsByRole[key];\n });\n };\n\n return TaskboardController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"TaskboardController\", TaskboardController);\n\n TaskboardDirective = function($rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, tableBodyDom;\n $ctrl = $el.controller();\n $el.on(\"click\", \".toggle-analytics-visibility\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n target.toggleClass('active');\n return $rootscope.$broadcast(\"taskboard:graph:toggle-visibility\");\n });\n tableBodyDom = $el.find(\".taskboard-table-body\");\n tableBodyDom.on(\"scroll\", function(event) {\n var tableHeaderDom, target;\n target = angular.element(event.currentTarget);\n tableHeaderDom = $el.find(\".taskboard-table-header .taskboard-table-inner\");\n return tableHeaderDom.css(\"left\", -1 * target.scrollLeft());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboard\", [\"$rootScope\", TaskboardDirective]);\n\n TaskboardSquishColumnDirective = function(rs) {\n var avatarWidth, link, maxColumnWidth;\n avatarWidth = 40;\n maxColumnWidth = 300;\n link = function($scope, $el, $attrs) {\n var getCeilWidth, recalculateStatusColumnWidth, recalculateTaskboardWidth, refreshTaskboardTableWidth, setStatusColumnWidth;\n $scope.$on(\"sprint:zoom0\", (function(_this) {\n return function() {\n return recalculateTaskboardWidth();\n };\n })(this));\n $scope.$on(\"sprint:task:moved\", (function(_this) {\n return function() {\n return recalculateTaskboardWidth();\n };\n })(this));\n $scope.$watch(\"usTasks\", function() {\n if ($scope.project) {\n $scope.statusesFolded = rs.tasks.getStatusColumnModes($scope.project.id);\n $scope.usFolded = rs.tasks.getUsRowModes($scope.project.id, $scope.sprintId);\n return recalculateTaskboardWidth();\n }\n });\n $scope.foldStatus = function(status) {\n $scope.statusesFolded[status.id] = !!!$scope.statusesFolded[status.id];\n rs.tasks.storeStatusColumnModes($scope.projectId, $scope.statusesFolded);\n return recalculateTaskboardWidth();\n };\n $scope.foldUs = function(rowId) {\n $scope.usFolded[rowId] = !!!$scope.usFolded[rowId];\n rs.tasks.storeUsRowModes($scope.projectId, $scope.sprintId, $scope.usFolded);\n return recalculateTaskboardWidth();\n };\n getCeilWidth = (function(_this) {\n return function(usId, statusId) {\n var tasks, tasksMatrixSize, width;\n if (usId) {\n tasks = $scope.usTasks.getIn([usId.toString(), statusId.toString()]).size;\n } else {\n tasks = $scope.usTasks.getIn(['null', statusId.toString()]).size;\n }\n if ($scope.statusesFolded[statusId]) {\n if (tasks && $scope.usFolded[usId]) {\n tasksMatrixSize = Math.round(Math.sqrt(tasks));\n width = avatarWidth * tasksMatrixSize;\n } else {\n width = avatarWidth;\n }\n return width;\n }\n return 0;\n };\n })(this);\n setStatusColumnWidth = (function(_this) {\n return function(statusId, width) {\n var column;\n column = $el.find(\".squish-status-\" + statusId);\n if (width) {\n return column.css('max-width', width);\n } else {\n if ($scope.ctrl.zoomLevel === '0') {\n return column.css(\"max-width\", 148);\n } else {\n return column.css(\"max-width\", maxColumnWidth);\n }\n }\n };\n })(this);\n refreshTaskboardTableWidth = (function(_this) {\n return function() {\n var columnWidths, columns, issueCardMaxWidth, issuesBoxWidth, totalWidth;\n columnWidths = [];\n columns = $el.find(\".task-colum-name\");\n columnWidths = _.map(columns, function(column) {\n return $(column).outerWidth(true);\n });\n totalWidth = _.reduce(columnWidths, function(total, width) {\n return total + width;\n });\n $el.find('.taskboard-table-inner').css(\"width\", totalWidth);\n issuesBoxWidth = $el.find('.issues-row .taskboard-row-title-box').outerWidth(true);\n $el.find('.issues-row').css(\"width\", totalWidth - columnWidths.pop());\n issueCardMaxWidth = $scope.ctrl.zoomLevel === '0' ? 128 : 280;\n return $el.find('.issues-row .taskboard-cards-box .card').css(\"max-width\", issueCardMaxWidth);\n };\n })(this);\n recalculateStatusColumnWidth = (function(_this) {\n return function(statusId) {\n var statusFoldedWidth;\n statusFoldedWidth = getCeilWidth(null, statusId);\n _.forEach($scope.userstories, function(us) {\n var width;\n width = getCeilWidth(us.id, statusId);\n if (width > statusFoldedWidth) {\n return statusFoldedWidth = width;\n }\n });\n return setStatusColumnWidth(statusId, statusFoldedWidth);\n };\n })(this);\n return recalculateTaskboardWidth = (function(_this) {\n return function() {\n _.forEach($scope.taskStatusList, function(status) {\n return recalculateStatusColumnWidth(status.id);\n });\n refreshTaskboardTableWidth();\n };\n })(this);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboardSquishColumn\", [\"$tgResources\", TaskboardSquishColumnDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/sortable.coffee\n */\n\n(function() {\n var TaskboardSortableDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n module = angular.module(\"taigaBacklog\");\n\n TaskboardSortableDirective = function($repo, $rs, $rootscope, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var unwatch;\n return unwatch = $scope.$watch(\"usTasks\", function(usTasks) {\n var containers, deleteElement, drake, filterError, itemEl, newParentScope, oldParentScope, scroll, tdom;\n if (!usTasks || !usTasks.size) {\n return;\n }\n unwatch();\n if (!($scope.project.my_permissions.indexOf(\"modify_task\") > -1)) {\n return;\n }\n oldParentScope = null;\n newParentScope = null;\n itemEl = null;\n tdom = $el;\n filterError = function() {\n var text;\n text = $translate.instant(\"BACKLOG.SORTABLE_FILTER_ERROR\");\n return $tgConfirm.notify(\"error\", text);\n };\n deleteElement = function(itemEl) {\n itemEl.scope().$destroy();\n itemEl.off();\n return itemEl.remove();\n };\n containers = _.map($el.find('.taskboard-column'), function(item) {\n return item;\n });\n drake = dragula(containers, {\n copySortSource: false,\n copy: false,\n accepts: function(el, target) {\n return !$(target).hasClass('taskboard-row-title-box');\n },\n moves: function(item) {\n return $(item).is('tg-card');\n }\n });\n drake.on('drag', function(item) {\n oldParentScope = $(item).parent().scope();\n if ($el.hasClass(\"active-filters\")) {\n filterError();\n setTimeout((function() {\n return drake.cancel(true);\n }), 0);\n return false;\n }\n });\n drake.on('dragend', function(item) {\n var itemIndex, itemTask, newStatusId, newUsId, oldStatusId, oldUsId, parentEl;\n parentEl = $(item).parent();\n itemEl = $(item);\n itemTask = itemEl.scope().task;\n itemIndex = itemEl.index();\n newParentScope = parentEl.scope();\n oldUsId = oldParentScope.us ? oldParentScope.us.id : null;\n oldStatusId = oldParentScope.st.id;\n newUsId = newParentScope.us ? newParentScope.us.id : null;\n newStatusId = newParentScope.st.id;\n if (newStatusId !== oldStatusId || newUsId !== oldUsId) {\n deleteElement(itemEl);\n }\n return $scope.$apply(function() {\n return $rootscope.$broadcast(\"taskboard:task:move\", itemTask, itemTask.getIn(['model', 'status']), newUsId, newStatusId, itemIndex);\n });\n });\n scroll = autoScroll([$('.taskboard-table-body')[0]], {\n margin: 100,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return drake.destroy();\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgTaskboardSortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", \"$translate\", TaskboardSortableDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/taskboard-issues.coffee\n */\n\n(function() {\n var TaskboardIssuesService, groupBy,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n groupBy = this.taiga.groupBy;\n\n TaskboardIssuesService = (function(superClass) {\n extend(TaskboardIssuesService, superClass);\n\n TaskboardIssuesService.$inject = [];\n\n function TaskboardIssuesService() {\n this.reset();\n }\n\n TaskboardIssuesService.prototype.reset = function() {\n this.foldStatusChanged = {};\n return this.issuesRaw = [];\n };\n\n TaskboardIssuesService.prototype.init = function(project, usersById, issueStatusById) {\n this.issueStatusById = issueStatusById;\n this.project = project;\n return this.usersById = usersById;\n };\n\n TaskboardIssuesService.prototype.resetFolds = function() {\n this.foldStatusChanged = {};\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.toggleFold = function(issueId) {\n this.foldStatusChanged[issueId] = !this.foldStatusChanged[issueId];\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.add = function(issue) {\n this.issuesRaw = this.issuesRaw.concat(issue);\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.remove = function(issue) {\n var item, key, ref;\n ref = this.issuesRaw;\n for (key in ref) {\n item = ref[key];\n if (issue.id === item.id) {\n this.issuesRaw.splice(key, 1);\n this.refresh();\n return;\n }\n }\n };\n\n TaskboardIssuesService.prototype.set = function(issues) {\n this.issuesRaw = issues;\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.getIssue = function(id) {\n return this.milestoneIssues.find(function(issue) {\n return issue.get('id') === id;\n });\n };\n\n TaskboardIssuesService.prototype.getIssueModel = function(id) {\n return _.find(this.issuesRaw, function(issue) {\n return issue.id === id;\n });\n };\n\n TaskboardIssuesService.prototype.replaceModel = function(issue) {\n this.issuesRaw = _.map(this.issuesRaw, function(item) {\n if (issue.id === item.id) {\n return issue;\n } else {\n return item;\n }\n });\n return this.refresh();\n };\n\n TaskboardIssuesService.prototype.refresh = function() {\n var i, issue, issueModel, issues, len, ref;\n issues = [];\n ref = this.issuesRaw;\n for (i = 0, len = ref.length; i < len; i++) {\n issueModel = ref[i];\n issue = {};\n issue.foldStatusChanged = this.foldStatusChanged[issueModel.id];\n issue.model = issueModel.getAttrs();\n issue.modelName = issueModel.getName();\n issue.id = issueModel.id;\n issue.status = this.issueStatusById[issueModel.status];\n issue.images = _.filter(issue.model.attachments, function(it) {\n return !!it.thumbnail_card_url;\n });\n issue.assigned_to = this.usersById[issueModel.assigned_to];\n issue.colorized_tags = _.map(issue.model.tags, function(tag) {\n return {\n name: tag[0],\n color: tag[1]\n };\n });\n issues.push(issue);\n }\n return this.milestoneIssues = Immutable.fromJS(issues);\n };\n\n return TaskboardIssuesService;\n\n })(taiga.Service);\n\n angular.module(\"taigaKanban\").service(\"tgTaskboardIssues\", TaskboardIssuesService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/taskboard/taskboard-tasks.coffee\n */\n\n(function() {\n var TaskboardTasksService, groupBy,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n groupBy = this.taiga.groupBy;\n\n TaskboardTasksService = (function(superClass) {\n extend(TaskboardTasksService, superClass);\n\n TaskboardTasksService.$inject = [];\n\n function TaskboardTasksService() {\n this.reset();\n }\n\n TaskboardTasksService.prototype.reset = function() {\n this.tasksRaw = [];\n this.foldStatusChanged = {};\n return this.usTasks = Immutable.Map();\n };\n\n TaskboardTasksService.prototype.init = function(project, usersById) {\n this.project = project;\n return this.usersById = usersById;\n };\n\n TaskboardTasksService.prototype.resetFolds = function() {\n this.foldStatusChanged = {};\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.toggleFold = function(taskId) {\n this.foldStatusChanged[taskId] = !this.foldStatusChanged[taskId];\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.add = function(task) {\n this.tasksRaw = this.tasksRaw.concat(task);\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.set = function(tasks) {\n this.tasksRaw = tasks;\n this.refreshRawOrder();\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.setUserstories = function(userstories) {\n return this.userstories = userstories;\n };\n\n TaskboardTasksService.prototype.refreshRawOrder = function() {\n var i, len, ref, results, task;\n this.order = {};\n ref = this.tasksRaw;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n task = ref[i];\n results.push(this.order[task.id] = task.taskboard_order);\n }\n return results;\n };\n\n TaskboardTasksService.prototype.assignOrders = function(order) {\n order = _.invert(order);\n this.order = _.assign(this.order, order);\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.getTask = function(id) {\n var findedTask;\n findedTask = null;\n this.usTasks.forEach(function(us) {\n us.forEach(function(status) {\n findedTask = status.find(function(task) {\n return task.get('id') === id;\n });\n if (findedTask) {\n return false;\n }\n });\n if (findedTask) {\n return false;\n }\n });\n return findedTask;\n };\n\n TaskboardTasksService.prototype.replace = function(task) {\n return this.usTasks = this.usTasks.map(function(us) {\n return us.map(function(status) {\n var findedIndex;\n findedIndex = status.findIndex(function(usItem) {\n return usItem.get('id') === us.get('id');\n });\n if (findedIndex !== -1) {\n status = status.set(findedIndex, task);\n }\n return status;\n });\n });\n };\n\n TaskboardTasksService.prototype.getTaskModel = function(id) {\n return _.find(this.tasksRaw, function(task) {\n return task.id === id;\n });\n };\n\n TaskboardTasksService.prototype.replaceModel = function(task) {\n this.tasksRaw = _.map(this.tasksRaw, function(it) {\n if (task.id === it.id) {\n return task;\n } else {\n return it;\n }\n });\n return this.refresh();\n };\n\n TaskboardTasksService.prototype.move = function(id, usId, statusId, index) {\n var afterDestination, beforeDestination, i, it, j, key, len, len1, previous, previousWithTheSameOrder, setOrders, taksWithoutMoved, task, taskByUsStatus;\n task = this.getTaskModel(id);\n taskByUsStatus = _.filter(this.tasksRaw, (function(_this) {\n return function(task) {\n return task.status === statusId && task.user_story === usId;\n };\n })(this));\n taskByUsStatus = _.sortBy(taskByUsStatus, (function(_this) {\n return function(it) {\n return _this.order[it.id];\n };\n })(this));\n taksWithoutMoved = _.filter(taskByUsStatus, (function(_this) {\n return function(it) {\n return it.id !== id;\n };\n })(this));\n beforeDestination = _.slice(taksWithoutMoved, 0, index);\n afterDestination = _.slice(taksWithoutMoved, index);\n setOrders = {};\n previous = beforeDestination[beforeDestination.length - 1];\n previousWithTheSameOrder = _.filter(beforeDestination, (function(_this) {\n return function(it) {\n return _this.order[it.id] === _this.order[previous.id];\n };\n })(this));\n if (previousWithTheSameOrder.length > 1) {\n for (i = 0, len = previousWithTheSameOrder.length; i < len; i++) {\n it = previousWithTheSameOrder[i];\n setOrders[it.id] = this.order[it.id];\n }\n }\n if (!previous) {\n this.order[task.id] = 0;\n } else if (previous) {\n this.order[task.id] = this.order[previous.id] + 1;\n }\n for (key = j = 0, len1 = afterDestination.length; j < len1; key = ++j) {\n it = afterDestination[key];\n this.order[it.id] = this.order[task.id] + key + 1;\n }\n task.status = statusId;\n task.user_story = usId;\n task.taskboard_order = this.order[task.id];\n this.refresh();\n return {\n \"task_id\": task.id,\n \"order\": this.order[task.id],\n \"set_orders\": setOrders\n };\n };\n\n TaskboardTasksService.prototype.refresh = function() {\n var i, j, k, len, len1, len2, model, ref, status, task, taskModel, taskStatusList, tasks, us, usTasks;\n if (!this.project) {\n return;\n }\n this.tasksRaw = _.sortBy(this.tasksRaw, (function(_this) {\n return function(it) {\n return _this.order[it.id];\n };\n })(this));\n tasks = this.tasksRaw;\n taskStatusList = _.sortBy(this.project.task_statuses, \"order\");\n usTasks = {};\n ref = _.union(this.userstories, [\n {\n id: null\n }\n ]);\n for (i = 0, len = ref.length; i < len; i++) {\n us = ref[i];\n usTasks[us.id] = {};\n for (j = 0, len1 = taskStatusList.length; j < len1; j++) {\n status = taskStatusList[j];\n usTasks[us.id][status.id] = [];\n }\n }\n for (k = 0, len2 = tasks.length; k < len2; k++) {\n taskModel = tasks[k];\n if ((usTasks[taskModel.user_story] != null) && (usTasks[taskModel.user_story][taskModel.status] != null)) {\n task = {};\n model = taskModel.getAttrs();\n task.foldStatusChanged = this.foldStatusChanged[taskModel.id];\n task.model = model;\n task.images = _.filter(model.attachments, function(it) {\n return !!it.thumbnail_card_url;\n });\n task.id = taskModel.id;\n task.assigned_to = this.usersById[taskModel.assigned_to];\n task.colorized_tags = _.map(task.model.tags, (function(_this) {\n return function(tag) {\n return {\n name: tag[0],\n color: tag[1]\n };\n };\n })(this));\n usTasks[taskModel.user_story][taskModel.status].push(task);\n }\n }\n return this.usTasks = Immutable.fromJS(usTasks);\n };\n\n return TaskboardTasksService;\n\n })(taiga.Service);\n\n angular.module(\"taigaKanban\").service(\"tgTaskboardTasks\", TaskboardTasksService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban/kanban-usertories.coffee\n */\n\n(function() {\n var KanbanUserstoriesService, groupBy,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n groupBy = this.taiga.groupBy;\n\n KanbanUserstoriesService = (function(superClass) {\n extend(KanbanUserstoriesService, superClass);\n\n KanbanUserstoriesService.$inject = [];\n\n function KanbanUserstoriesService() {\n this.reset();\n }\n\n KanbanUserstoriesService.prototype.reset = function() {\n this.userstoriesRaw = [];\n this.archivedStatus = [];\n this.statusHide = [];\n this.foldStatusChanged = {};\n return this.usByStatus = Immutable.Map();\n };\n\n KanbanUserstoriesService.prototype.init = function(project, usersById) {\n this.project = project;\n return this.usersById = usersById;\n };\n\n KanbanUserstoriesService.prototype.resetFolds = function() {\n this.foldStatusChanged = {};\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.toggleFold = function(usId) {\n this.foldStatusChanged[usId] = !this.foldStatusChanged[usId];\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.set = function(userstories) {\n this.userstoriesRaw = userstories;\n this.refreshRawOrder();\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.add = function(us) {\n this.userstoriesRaw = this.userstoriesRaw.concat(us);\n this.refreshRawOrder();\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.addArchivedStatus = function(statusId) {\n return this.archivedStatus.push(statusId);\n };\n\n KanbanUserstoriesService.prototype.isUsInArchivedHiddenStatus = function(usId) {\n var us;\n us = this.getUsModel(usId);\n return this.archivedStatus.indexOf(us.status) !== -1 && this.statusHide.indexOf(us.status) !== -1;\n };\n\n KanbanUserstoriesService.prototype.hideStatus = function(statusId) {\n this.deleteStatus(statusId);\n return this.statusHide.push(statusId);\n };\n\n KanbanUserstoriesService.prototype.showStatus = function(statusId) {\n return _.remove(this.statusHide, function(it) {\n return it === statusId;\n });\n };\n\n KanbanUserstoriesService.prototype.getStatus = function(statusId) {\n return _.filter(this.userstoriesRaw, function(us) {\n return us.status === statusId;\n });\n };\n\n KanbanUserstoriesService.prototype.deleteStatus = function(statusId) {\n var toDelete;\n toDelete = _.filter(this.userstoriesRaw, function(us) {\n return us.status === statusId;\n });\n toDelete = _.map(function(it) {\n return it.id;\n });\n this.archived = _.difference(this.archived, toDelete);\n this.userstoriesRaw = _.filter(this.userstoriesRaw, function(us) {\n return us.status !== statusId;\n });\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.refreshRawOrder = function() {\n var i, it, len, ref, results;\n this.order = {};\n ref = this.userstoriesRaw;\n results = [];\n for (i = 0, len = ref.length; i < len; i++) {\n it = ref[i];\n results.push(this.order[it.id] = it.kanban_order);\n }\n return results;\n };\n\n KanbanUserstoriesService.prototype.assignOrders = function(order) {\n this.order = _.assign(this.order, order);\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.move = function(usList, statusId, index) {\n var afterDestination, beforeDestination, i, initialLength, isArchivedHiddenStatus, it, j, k, key, l, len, len1, len2, len3, modifiedUs, previous, previousWithTheSameOrder, setNextOrders, setOrders, setPreviousOrders, startIndex, us, usByStatus, usByStatusWithoutMoved;\n initialLength = usList.length;\n usByStatus = _.filter(this.userstoriesRaw, (function(_this) {\n return function(it) {\n return it.status === statusId;\n };\n })(this));\n usByStatus = _.sortBy(usByStatus, (function(_this) {\n return function(it) {\n return _this.order[it.id];\n };\n })(this));\n usByStatusWithoutMoved = _.filter(usByStatus, function(listIt) {\n return !_.find(usList, function(moveIt) {\n return listIt.id === moveIt.id;\n });\n });\n beforeDestination = _.slice(usByStatusWithoutMoved, 0, index);\n afterDestination = _.slice(usByStatusWithoutMoved, index);\n setOrders = {};\n previous = beforeDestination[beforeDestination.length - 1];\n previousWithTheSameOrder = _.filter(beforeDestination, (function(_this) {\n return function(it) {\n return _this.order[it.id] === _this.order[previous.id];\n };\n })(this));\n if (previousWithTheSameOrder.length > 1) {\n for (i = 0, len = previousWithTheSameOrder.length; i < len; i++) {\n it = previousWithTheSameOrder[i];\n setOrders[it.id] = this.order[it.id];\n }\n }\n modifiedUs = [];\n setPreviousOrders = [];\n setNextOrders = [];\n isArchivedHiddenStatus = this.archivedStatus.indexOf(statusId) !== -1 && this.statusHide.indexOf(statusId) !== -1;\n if (isArchivedHiddenStatus) {\n startIndex = new Date().getTime();\n } else if (!previous) {\n startIndex = 0;\n for (key = j = 0, len1 = afterDestination.length; j < len1; key = ++j) {\n it = afterDestination[key];\n this.order[it.id] = key + initialLength + 1;\n it.kanban_order = this.order[it.id];\n }\n setNextOrders = _.map(afterDestination, (function(_this) {\n return function(it) {\n return {\n us_id: it.id,\n order: _this.order[it.id]\n };\n };\n })(this));\n } else if (previous) {\n startIndex = this.order[previous.id] + 1;\n previousWithTheSameOrder = _.filter(beforeDestination, (function(_this) {\n return function(it) {\n return it.kanban_order === _this.order[previous.id];\n };\n })(this));\n for (key = k = 0, len2 = afterDestination.length; k < len2; key = ++k) {\n it = afterDestination[key];\n this.order[it.id] = this.order[previous.id] + key + initialLength + 1;\n it.kanban_order = this.order[it.id];\n }\n setNextOrders = _.map(afterDestination, (function(_this) {\n return function(it) {\n return {\n us_id: it.id,\n order: _this.order[it.id]\n };\n };\n })(this));\n if (previousWithTheSameOrder.length > 1) {\n setPreviousOrders = _.map(previousWithTheSameOrder, (function(_this) {\n return function(it) {\n return {\n us_id: it.id,\n order: _this.order[it.id]\n };\n };\n })(this));\n }\n }\n for (key = l = 0, len3 = usList.length; l < len3; key = ++l) {\n us = usList[key];\n us.status = statusId;\n us.kanban_order = startIndex + key;\n this.order[us.id] = us.kanban_order;\n modifiedUs.push({\n us_id: us.id,\n order: us.kanban_order\n });\n }\n this.refresh();\n return {\n bulkOrders: modifiedUs.concat(setPreviousOrders, setNextOrders),\n usList: modifiedUs,\n set_orders: setOrders\n };\n };\n\n KanbanUserstoriesService.prototype.moveToEnd = function(id, statusId) {\n var us;\n us = this.getUsModel(id);\n this.order[us.id] = -1;\n us.status = statusId;\n us.kanban_order = this.order[us.id];\n this.refresh();\n return {\n \"us_id\": us.id,\n \"order\": -1\n };\n };\n\n KanbanUserstoriesService.prototype.replace = function(us) {\n return this.usByStatus = this.usByStatus.map(function(status) {\n var findedIndex;\n findedIndex = status.findIndex(function(usItem) {\n return usItem.get('id') === us.get('id');\n });\n if (findedIndex !== -1) {\n status = status.set(findedIndex, us);\n }\n return status;\n });\n };\n\n KanbanUserstoriesService.prototype.replaceModel = function(us) {\n this.userstoriesRaw = _.map(this.userstoriesRaw, function(usItem) {\n if (us.id === usItem.id) {\n return us;\n } else {\n return usItem;\n }\n });\n return this.refresh();\n };\n\n KanbanUserstoriesService.prototype.getUs = function(id) {\n var findedUs;\n findedUs = null;\n this.usByStatus.forEach(function(status) {\n findedUs = status.find(function(us) {\n return us.get('id') === id;\n });\n if (findedUs) {\n return false;\n }\n });\n return findedUs;\n };\n\n KanbanUserstoriesService.prototype.getUsModel = function(id) {\n return _.find(this.userstoriesRaw, function(us) {\n return us.id === id;\n });\n };\n\n KanbanUserstoriesService.prototype.refresh = function() {\n var usByStatus, userstories;\n this.userstoriesRaw = _.sortBy(this.userstoriesRaw, (function(_this) {\n return function(it) {\n return _this.order[it.id];\n };\n })(this));\n userstories = this.userstoriesRaw;\n userstories = _.map(userstories, (function(_this) {\n return function(usModel) {\n var model, us;\n us = {};\n model = usModel.getAttrs();\n us.foldStatusChanged = _this.foldStatusChanged[usModel.id];\n us.model = model;\n us.images = _.filter(model.attachments, function(it) {\n return !!it.thumbnail_card_url;\n });\n us.id = usModel.id;\n us.assigned_to = _this.usersById[usModel.assigned_to];\n us.assigned_users = [];\n usModel.assigned_users.forEach(function(assignedUserId) {\n var assignedUserData;\n assignedUserData = _this.usersById[assignedUserId];\n return us.assigned_users.push(assignedUserData);\n });\n us.colorized_tags = _.map(us.model.tags, function(tag) {\n return {\n name: tag[0],\n color: tag[1]\n };\n });\n return us;\n };\n })(this));\n usByStatus = _.groupBy(userstories, function(us) {\n return us.model.status;\n });\n return this.usByStatus = Immutable.fromJS(usByStatus);\n };\n\n return KanbanUserstoriesService;\n\n })(taiga.Service);\n\n angular.module(\"taigaKanban\").service(\"tgKanbanUserstories\", KanbanUserstoriesService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban/main.coffee\n */\n\n(function() {\n var KanbanArchivedStatusHeaderDirective, KanbanArchivedStatusIntroDirective, KanbanController, KanbanDirective, KanbanSquishColumnDirective, KanbanWipLimitDirective, bindMethods, bindOnce, debounceLeading, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n bindMethods = this.taiga.bindMethods;\n\n debounceLeading = this.taiga.debounceLeading;\n\n module = angular.module(\"taigaKanban\");\n\n KanbanController = (function(superClass) {\n extend(KanbanController, superClass);\n\n KanbanController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"tgErrorHandlingService\", \"$tgModel\", \"tgKanbanUserstories\", \"$tgStorage\", \"tgFilterRemoteStorageService\", \"tgProjectService\"];\n\n KanbanController.prototype.storeCustomFiltersName = 'kanban-custom-filters';\n\n KanbanController.prototype.storeFiltersName = 'kanban-filters';\n\n function KanbanController(scope, rootscope, repo, confirm, rs1, rs2, params1, q, location, appMetaService, navUrls, events, analytics, translate, errorHandlingService, model, kanbanUserstoriesService1, storage, filterRemoteStorageService, projectService1) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs1;\n this.rs2 = rs2;\n this.params = params1;\n this.q = q;\n this.location = location;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.model = model;\n this.kanbanUserstoriesService = kanbanUserstoriesService1;\n this.storage = storage;\n this.filterRemoteStorageService = filterRemoteStorageService;\n this.projectService = projectService1;\n bindMethods(this);\n this.kanbanUserstoriesService.reset();\n this.openFilter = false;\n this.selectedUss = {};\n if (this.applyStoredFilters(this.params.pslug, \"kanban-filters\")) {\n return;\n }\n this.scope.sectionName = this.translate.instant(\"KANBAN.SECTION_NAME\");\n this.initializeEventHandlers();\n taiga.defineImmutableProperty(this.scope, \"usByStatus\", (function(_this) {\n return function() {\n return _this.kanbanUserstoriesService.usByStatus;\n };\n })(this));\n }\n\n KanbanController.prototype.cleanSelectedUss = function() {\n var key, results;\n results = [];\n for (key in this.selectedUss) {\n results.push(this.selectedUss[key] = false);\n }\n return results;\n };\n\n KanbanController.prototype.toggleSelectedUs = function(usId) {\n return this.selectedUss[usId] = !this.selectedUss[usId];\n };\n\n KanbanController.prototype.firstLoad = function() {\n var promise;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"KANBAN.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.translate.instant(\"KANBAN.PAGE_DESCRIPTION\", {\n projectName: _this.scope.project.name,\n projectDescription: _this.scope.project.description\n });\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n return promise.then(null, this.onInitialDataError.bind(this));\n };\n\n KanbanController.prototype.setZoom = function(zoomLevel, zoom) {\n var previousZoomLevel;\n if (this.zoomLevel === zoomLevel) {\n return null;\n }\n this.isFirstLoad = !this.zoomLevel;\n previousZoomLevel = this.zoomLevel;\n this.zoomLevel = zoomLevel;\n this.zoom = zoom;\n if (this.isFirstLoad) {\n return this.firstLoad().then((function(_this) {\n return function() {\n _this.isFirstLoad = false;\n return _this.kanbanUserstoriesService.resetFolds();\n };\n })(this));\n } else if (this.zoomLevel > 1 && previousZoomLevel <= 1) {\n this.zoomLoading = true;\n return this.loadUserstories().then((function(_this) {\n return function() {\n _this.zoomLoading = false;\n return _this.kanbanUserstoriesService.resetFolds();\n };\n })(this));\n }\n };\n\n KanbanController.prototype.filtersReloadContent = function() {\n return this.loadUserstories().then((function(_this) {\n return function() {\n var i, len, openArchived, results, statusId;\n openArchived = _.difference(_this.kanbanUserstoriesService.archivedStatus, _this.kanbanUserstoriesService.statusHide);\n if (openArchived.length) {\n results = [];\n for (i = 0, len = openArchived.length; i < len; i++) {\n statusId = openArchived[i];\n results.push(_this.loadUserStoriesForStatus({}, statusId));\n }\n return results;\n }\n };\n })(this));\n };\n\n KanbanController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"usform:new:success\", (function(_this) {\n return function(event, us) {\n _this.refreshTagsColors().then(function() {\n return _this.kanbanUserstoriesService.add(us);\n });\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"create userstory on kanban\", 1);\n };\n })(this));\n this.scope.$on(\"usform:bulk:success\", (function(_this) {\n return function(event, uss) {\n _this.refreshTagsColors().then(function() {\n return _this.kanbanUserstoriesService.add(uss);\n });\n return _this.analytics.trackEvent(\"userstory\", \"create\", \"bulk create userstory on kanban\", 1);\n };\n })(this));\n this.scope.$on(\"usform:edit:success\", (function(_this) {\n return function(event, us) {\n return _this.refreshTagsColors().then(function() {\n return _this.kanbanUserstoriesService.replaceModel(us);\n });\n };\n })(this));\n this.scope.$on(\"kanban:us:deleted\", (function(_this) {\n return function(event, us) {\n return _this.filtersReloadContent();\n };\n })(this));\n this.scope.$on(\"assigned-to:added\", this.onAssignedToChanged);\n this.scope.$on(\"assigned-user:added\", this.onAssignedUsersChanged);\n this.scope.$on(\"assigned-user:deleted\", this.onAssignedUsersDeleted);\n this.scope.$on(\"kanban:us:move\", this.moveUs);\n this.scope.$on(\"kanban:show-userstories-for-status\", this.loadUserStoriesForStatus);\n return this.scope.$on(\"kanban:hide-userstories-for-status\", this.hideUserStoriesForStatus);\n };\n\n KanbanController.prototype.addNewUs = function(type, statusId) {\n switch (type) {\n case \"standard\":\n return this.rootscope.$broadcast(\"genericform:new\", {\n 'objType': 'us',\n 'project': this.scope.project,\n 'statusId': statusId\n });\n case \"bulk\":\n return this.rootscope.$broadcast(\"usform:bulk\", this.scope.projectId, statusId);\n }\n };\n\n KanbanController.prototype.editUs = function(id) {\n var us;\n us = this.kanbanUserstoriesService.getUs(id);\n us = us.set('loading-edit', true);\n this.kanbanUserstoriesService.replace(us);\n return this.rs.userstories.getByRef(us.getIn(['model', 'project']), us.getIn(['model', 'ref'])).then((function(_this) {\n return function(editingUserStory) {\n _this.rs2.attachments.list(\"us\", us.get('id'), us.getIn(['model', 'project'])).then(function(attachments) {\n return _this.rootscope.$broadcast(\"genericform:edit\", {\n 'objType': 'us',\n 'obj': editingUserStory,\n 'statusList': _this.scope.usStatusList,\n 'attachments': attachments.toJS()\n });\n });\n us = us.set('loading-edit', false);\n return _this.kanbanUserstoriesService.replace(us);\n };\n })(this));\n };\n\n KanbanController.prototype.deleteUs = function(id) {\n var us;\n us = this.kanbanUserstoriesService.getUs(id);\n us = us.set('loading-delete', true);\n return this.rs.userstories.getByRef(us.getIn(['model', 'project']), us.getIn(['model', 'ref'])).then((function(_this) {\n return function(deletingUserStory) {\n var message, title;\n us = us.set('loading-delete', false);\n title = _this.translate.instant(\"US.TITLE_DELETE_ACTION\");\n message = deletingUserStory.subject;\n return _this.confirm.askOnDelete(title, message).then(function(askResponse) {\n var promise;\n promise = _this.repo.remove(deletingUserStory);\n promise.then(function() {\n _this.scope.$broadcast(\"kanban:us:deleted\");\n return askResponse.finish();\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return this.confirm.notify(\"error\");\n });\n });\n };\n })(this));\n };\n\n KanbanController.prototype.showPlaceHolder = function(statusId) {\n if (this.scope.usStatusList[0].id === statusId && !this.kanbanUserstoriesService.userstoriesRaw.length) {\n return true;\n }\n return false;\n };\n\n KanbanController.prototype.toggleFold = function(id) {\n return this.kanbanUserstoriesService.toggleFold(id);\n };\n\n KanbanController.prototype.isUsInArchivedHiddenStatus = function(usId) {\n return this.kanbanUserstoriesService.isUsInArchivedHiddenStatus(usId);\n };\n\n KanbanController.prototype.changeUsAssignedTo = function(id) {\n var us;\n us = this.kanbanUserstoriesService.getUsModel(id);\n return this.rootscope.$broadcast(\"assigned-to:add\", us);\n };\n\n KanbanController.prototype.changeUsAssignedUsers = function(id) {\n var us;\n us = this.kanbanUserstoriesService.getUsModel(id);\n return this.rootscope.$broadcast(\"assigned-user:add\", us);\n };\n\n KanbanController.prototype.onAssignedToChanged = function(ctx, userid, usModel) {\n usModel.assigned_to = userid;\n this.kanbanUserstoriesService.replaceModel(usModel);\n return this.repo.save(usModel).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_to') || _this.isFilterDataTypeSelected('role')) {\n return _this.filtersReloadContent();\n }\n };\n })(this));\n };\n\n KanbanController.prototype.onAssignedUsersChanged = function(ctx, userid, usModel) {\n var assignedUsers;\n assignedUsers = _.clone(usModel.assigned_users, false);\n assignedUsers.push(userid);\n assignedUsers = _.uniq(assignedUsers);\n usModel.assigned_users = assignedUsers;\n if (!usModel.assigned_to) {\n usModel.assigned_to = userid;\n }\n this.kanbanUserstoriesService.replaceModel(usModel);\n return this.repo.save(usModel).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_users') || _this.isFilterDataTypeSelected('role')) {\n return _this.filtersReloadContent();\n }\n };\n })(this));\n };\n\n KanbanController.prototype.onAssignedUsersDeleted = function(ctx, userid, usModel) {\n var assignedUsersIds, ref;\n assignedUsersIds = _.clone(usModel.assigned_users, false);\n assignedUsersIds = _.pull(assignedUsersIds, userid);\n assignedUsersIds = _.uniq(assignedUsersIds);\n usModel.assigned_users = assignedUsersIds;\n if ((ref = usModel.assigned_to, indexOf.call(assignedUsersIds, ref) < 0) && assignedUsersIds.length > 0) {\n usModel.assigned_to = assignedUsersIds[0];\n }\n if (assignedUsersIds.length === 0) {\n usModel.assigned_to = null;\n }\n this.kanbanUserstoriesService.replaceModel(usModel);\n return this.repo.save(usModel).then((function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_users') || _this.isFilterDataTypeSelected('role')) {\n return _this.filtersReloadContent();\n }\n };\n })(this));\n };\n\n KanbanController.prototype.refreshTagsColors = function() {\n return this.rs.projects.tagsColors(this.scope.projectId).then((function(_this) {\n return function(tags_colors) {\n return _this.scope.project.tags_colors = tags_colors._attrs;\n };\n })(this));\n };\n\n KanbanController.prototype.loadUserstories = function() {\n var params, promise;\n params = {\n status__is_archived: false\n };\n if (this.zoomLevel > 1) {\n params.include_attachments = 1;\n params.include_tasks = 1;\n }\n params = _.merge(params, this.location.search());\n promise = this.rs.userstories.listAll(this.scope.projectId, params).then((function(_this) {\n return function(userstories) {\n _this.kanbanUserstoriesService.init(_this.scope.project, _this.scope.usersById);\n _this.kanbanUserstoriesService.set(userstories);\n scopeDefer(_this.scope, function() {\n return _this.scope.$broadcast(\"userstories:loaded\", userstories);\n });\n return userstories;\n };\n })(this));\n promise.then((function(_this) {\n return function() {\n return _this.scope.$broadcast(\"redraw:wip\");\n };\n })(this));\n return promise;\n };\n\n KanbanController.prototype.loadUserStoriesForStatus = function(ctx, statusId) {\n var filteredStatus, params;\n filteredStatus = this.location.search().status;\n if (filteredStatus) {\n filteredStatus = filteredStatus.split(\",\").map(function(it) {\n return parseInt(it, 10);\n });\n if (filteredStatus.indexOf(statusId) === -1) {\n return;\n }\n }\n params = {\n status: statusId,\n include_attachments: true,\n include_tasks: true\n };\n params = _.merge(params, this.location.search());\n return this.rs.userstories.listAll(this.scope.projectId, params).then((function(_this) {\n return function(userstories) {\n _this.scope.$broadcast(\"kanban:shown-userstories-for-status\", statusId, userstories);\n return userstories;\n };\n })(this));\n };\n\n KanbanController.prototype.hideUserStoriesForStatus = function(ctx, statusId) {\n return this.scope.$broadcast(\"kanban:hidden-userstories-for-status\", statusId);\n };\n\n KanbanController.prototype.loadKanban = function() {\n return this.q.all([this.refreshTagsColors(), this.loadUserstories()]);\n };\n\n KanbanController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_kanban_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.projectId = project.id;\n this.scope.points = _.sortBy(project.points, \"order\");\n this.scope.pointsById = groupBy(project.points, function(x) {\n return x.id;\n });\n this.scope.usStatusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n this.scope.$emit(\"project:loaded\", project);\n return project;\n };\n\n KanbanController.prototype.initializeSubscription = function() {\n var randomTimeout, routingKey1;\n routingKey1 = \"changes.project.\" + this.scope.projectId + \".userstories\";\n randomTimeout = taiga.randomInt(700, 1000);\n return this.events.subscribe(this.scope, routingKey1, debounceLeading(randomTimeout, (function(_this) {\n return function(message) {\n return _this.loadUserstories();\n };\n })(this)));\n };\n\n KanbanController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n this.initializeSubscription();\n this.loadKanban();\n return this.generateFilters();\n };\n\n KanbanController.prototype.prepareBulkUpdateData = function(uses, field) {\n if (field == null) {\n field = \"kanban_order\";\n }\n return _.map(uses, function(x) {\n return {\n \"us_id\": x.id,\n \"order\": x[field]\n };\n });\n };\n\n KanbanController.prototype.moveUs = function(ctx, usList, newStatusId, index) {\n var data, promise;\n this.cleanSelectedUss();\n usList = _.map(usList, (function(_this) {\n return function(us) {\n return _this.kanbanUserstoriesService.getUsModel(us.id);\n };\n })(this));\n data = this.kanbanUserstoriesService.move(usList, newStatusId, index);\n promise = this.rs.userstories.bulkUpdateKanbanOrder(this.scope.projectId, newStatusId, data.bulkOrders);\n return promise.then((function(_this) {\n return function() {\n var options, params, promises;\n options = {\n headers: {\n \"set-orders\": JSON.stringify(data.setOrders)\n }\n };\n params = {\n include_attachments: true,\n include_tasks: true\n };\n promises = _.map(usList, function(us) {\n return _this.repo.save(us, true, params, options, true);\n });\n promise = _this.q.all(promises);\n return promise.then(function(result) {\n var headers, order;\n headers = result[1];\n if (headers && headers['taiga-info-order-updated']) {\n order = JSON.parse(headers['taiga-info-order-updated']);\n _this.kanbanUserstoriesService.assignOrders(order);\n }\n _this.scope.$broadcast(\"redraw:wip\");\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('status')) {\n _this.filtersReloadContent();\n }\n return promise;\n });\n };\n })(this));\n };\n\n return KanbanController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin, taiga.UsFiltersMixin));\n\n module.controller(\"KanbanController\", KanbanController);\n\n KanbanDirective = function($repo, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var tableBodyDom;\n tableBodyDom = $el.find(\".kanban-table-body\");\n tableBodyDom.on(\"scroll\", function(event) {\n var tableHeaderDom, target;\n target = angular.element(event.currentTarget);\n tableHeaderDom = $el.find(\".kanban-table-header .kanban-table-inner\");\n return tableHeaderDom.css(\"left\", -1 * target.scrollLeft());\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanban\", [\"$tgRepo\", \"$rootScope\", KanbanDirective]);\n\n KanbanArchivedStatusHeaderDirective = function($rootscope, $translate, kanbanUserstoriesService) {\n var hideArchivedText, link, showArchivedText;\n showArchivedText = $translate.instant(\"KANBAN.ACTION_SHOW_ARCHIVED\");\n hideArchivedText = $translate.instant(\"KANBAN.ACTION_HIDE_ARCHIVED\");\n link = function($scope, $el, $attrs) {\n var hidden, status;\n status = $scope.$eval($attrs.tgKanbanArchivedStatusHeader);\n hidden = true;\n kanbanUserstoriesService.addArchivedStatus(status.id);\n kanbanUserstoriesService.hideStatus(status.id);\n $scope[\"class\"] = \"icon-watch\";\n $scope.title = showArchivedText;\n $el.on(\"click\", function(event) {\n hidden = !hidden;\n return $scope.$apply(function() {\n if (hidden) {\n $scope[\"class\"] = \"icon-watch\";\n $scope.title = showArchivedText;\n $rootscope.$broadcast(\"kanban:hide-userstories-for-status\", status.id);\n return kanbanUserstoriesService.hideStatus(status.id);\n } else {\n $scope[\"class\"] = \"icon-unwatch\";\n $scope.title = hideArchivedText;\n $rootscope.$broadcast(\"kanban:show-userstories-for-status\", status.id);\n return kanbanUserstoriesService.showStatus(status.id);\n }\n });\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanArchivedStatusHeader\", [\"$rootScope\", \"$translate\", \"tgKanbanUserstories\", KanbanArchivedStatusHeaderDirective]);\n\n KanbanArchivedStatusIntroDirective = function($translate, kanbanUserstoriesService) {\n var link, userStories;\n userStories = [];\n link = function($scope, $el, $attrs) {\n var hiddenUserStoriexText, status, updateIntroText;\n hiddenUserStoriexText = $translate.instant(\"KANBAN.HIDDEN_USER_STORIES\");\n status = $scope.$eval($attrs.tgKanbanArchivedStatusIntro);\n $el.text(hiddenUserStoriexText);\n updateIntroText = function(hasArchived) {\n if (hasArchived) {\n return $el.text(\"\");\n } else {\n return $el.text(hiddenUserStoriexText);\n }\n };\n $scope.$on(\"kanban:us:move\", function(ctx, itemUs, oldStatusId, newStatusId, itemIndex) {\n var hasArchived;\n hasArchived = !!kanbanUserstoriesService.getStatus(newStatusId).length;\n return updateIntroText(hasArchived);\n });\n $scope.$on(\"kanban:shown-userstories-for-status\", function(ctx, statusId, userStoriesLoaded) {\n var hasArchived;\n if (statusId === status.id) {\n kanbanUserstoriesService.deleteStatus(statusId);\n kanbanUserstoriesService.add(userStoriesLoaded);\n hasArchived = !!kanbanUserstoriesService.getStatus(statusId).length;\n return updateIntroText(hasArchived);\n }\n });\n $scope.$on(\"kanban:hidden-userstories-for-status\", function(ctx, statusId) {\n if (statusId === status.id) {\n return updateIntroText(false);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanArchivedStatusIntro\", [\"$translate\", \"tgKanbanUserstories\", KanbanArchivedStatusIntroDirective]);\n\n KanbanSquishColumnDirective = function(rs, projectService) {\n var link;\n link = function($scope, $el, $attrs) {\n var unwatch, updateTableWidth;\n $scope.foldStatus = function(status) {\n $scope.folds[status.id] = !!!$scope.folds[status.id];\n rs.kanban.storeStatusColumnModes($scope.projectId, $scope.folds);\n updateTableWidth();\n };\n updateTableWidth = function() {\n var columnWidths, totalWidth;\n columnWidths = _.map($scope.usStatusList, function(status) {\n if ($scope.folds[status.id]) {\n return 40;\n } else {\n return 310;\n }\n });\n totalWidth = _.reduce(columnWidths, function(total, width) {\n return total + width;\n });\n return $el.find('.kanban-table-inner').css(\"width\", totalWidth);\n };\n return unwatch = $scope.$watch('usByStatus', function(usByStatus) {\n if (usByStatus.size) {\n $scope.folds = rs.kanban.getStatusColumnModes(projectService.project.get('id'));\n updateTableWidth();\n return unwatch();\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanSquishColumn\", [\"$tgResources\", \"tgProjectService\", KanbanSquishColumnDirective]);\n\n KanbanWipLimitDirective = function($timeout) {\n var link;\n link = function($scope, $el, $attrs) {\n var redrawWipLimit, status;\n status = $scope.$eval($attrs.tgKanbanWipLimit);\n redrawWipLimit = (function(_this) {\n return function() {\n $el.find(\".kanban-wip-limit\").remove();\n return $timeout(function() {\n var element;\n element = $el.find(\"tg-card\")[status.wip_limit];\n if (element) {\n return angular.element(element).before(\"
    \");\n }\n });\n };\n })(this);\n if (status && !status.is_archived) {\n $scope.$on(\"redraw:wip\", redrawWipLimit);\n $scope.$on(\"kanban:us:move\", redrawWipLimit);\n $scope.$on(\"usform:new:success\", redrawWipLimit);\n $scope.$on(\"usform:bulk:success\", redrawWipLimit);\n }\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanWipLimit\", [\"$timeout\", KanbanWipLimitDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/kanban/sortable.coffee\n */\n\n(function() {\n var KanbanSortableDirective, bindOnce, groupBy, mixOf, module, scopeDefer, taiga, timeout, toggleText;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toggleText = this.taiga.toggleText;\n\n scopeDefer = this.taiga.scopeDefer;\n\n bindOnce = this.taiga.bindOnce;\n\n groupBy = this.taiga.groupBy;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaKanban\");\n\n KanbanSortableDirective = function($repo, $rs, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var unwatch;\n return unwatch = $scope.$watch(\"usByStatus\", function(usByStatus) {\n var containers, deleteElement, drake, itemEl, newParentScope, scroll, tdom;\n if (!usByStatus || !usByStatus.size) {\n return;\n }\n unwatch();\n if (!($scope.project.my_permissions.indexOf(\"modify_us\") > -1)) {\n return;\n }\n newParentScope = null;\n itemEl = null;\n tdom = $el;\n deleteElement = function(itemEl) {\n itemEl.scope().$destroy();\n itemEl.off();\n return itemEl.remove();\n };\n containers = _.map($el.find('.taskboard-column'), function(item) {\n return item;\n });\n drake = dragula(containers, {\n copySortSource: false,\n copy: false,\n moves: function(item) {\n return $(item).is('tg-card');\n }\n });\n drake.on('drag', function(item) {\n return window.dragMultiple.start(item, containers);\n });\n drake.on('cloned', function(item, dropTarget) {\n return $(item).addClass('multiple-drag-mirror');\n });\n drake.on('dragend', function(item) {\n var dragMultipleItems, finalUsList, firstElement, index, newStatus, newStatusId, parentEl, usList;\n parentEl = $(item).parent();\n newParentScope = parentEl.scope();\n newStatusId = newParentScope.s.id;\n dragMultipleItems = window.dragMultiple.stop();\n if (!dragMultipleItems.length) {\n dragMultipleItems = [item];\n }\n firstElement = dragMultipleItems[0];\n index = $(parentEl).find('tg-card').index(firstElement);\n newStatus = newParentScope.s.id;\n usList = _.map(dragMultipleItems, function(item) {\n return $(item).scope().us;\n });\n finalUsList = _.map(usList, function(item) {\n return {\n id: item.get('id'),\n oldStatusId: item.getIn(['model', 'status'])\n };\n });\n return $scope.$apply(function() {\n _.each(usList, (function(_this) {\n return function(item, key) {\n var oldStatus, sameContainer;\n oldStatus = item.getIn(['model', 'status']);\n sameContainer = newStatus === oldStatus;\n if (!sameContainer) {\n itemEl = $(dragMultipleItems[key]);\n return deleteElement(itemEl);\n }\n };\n })(this));\n return $rootscope.$broadcast(\"kanban:us:move\", finalUsList, newStatus, index);\n });\n });\n scroll = autoScroll(containers, {\n margin: 100,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return drake.destroy();\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgKanbanSortable\", [\"$tgRepo\", \"$tgResources\", \"$rootScope\", KanbanSortableDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/epics/detail.coffee\n */\n\n(function() {\n var EpicDetailController, EpicStatusButtonDirective, EpicStatusDisplayDirective, bindMethods, bindOnce, groupBy, joinStr, mixOf, module, taiga, toString,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaEpics\");\n\n EpicDetailController = (function(superClass) {\n extend(EpicDetailController, superClass);\n\n EpicDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"tgAppMetaService\", \"$tgAnalytics\", \"$tgNavUrls\", \"$translate\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function EpicDetailController(scope, rootscope, repo, confirm, rs, rs2, params, q, location, log, appMetaService, analytics, navUrls, translate, modelTransform, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.rs2 = rs2;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appMetaService = appMetaService;\n this.analytics = analytics;\n this.navUrls = navUrls;\n this.translate = translate;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.epicRef = this.params.epicref;\n this.scope.sectionName = this.translate.instant(\"EPIC.SECTION_NAME\");\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this._setMeta();\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n EpicDetailController.prototype._setMeta = function() {\n var description, ref, title;\n title = this.translate.instant(\"EPIC.PAGE_TITLE\", {\n epicRef: \"#\" + this.scope.epic.ref,\n epicSubject: this.scope.epic.subject,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"EPIC.PAGE_DESCRIPTION\", {\n epicStatus: ((ref = this.scope.statusById[this.scope.epic.status]) != null ? ref.name : void 0) || \"--\",\n epicDescription: angular.element(this.scope.epic.description_html || \"\").text()\n });\n return this.appMetaService.setAll(title, description);\n };\n\n EpicDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on epic\", 1);\n };\n })(this));\n this.scope.$on(\"comment:new\", (function(_this) {\n return function() {\n return _this.loadEpic();\n };\n })(this));\n return this.scope.$on(\"custom-attributes-values:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n };\n\n EpicDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-epics\", ctx);\n };\n\n EpicDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.immutableProject = this.projectService.project;\n this.scope.$emit('project:loaded', project);\n this.scope.statusList = project.epic_statuses;\n this.scope.statusById = groupBy(project.epic_statuses, function(x) {\n return x.id;\n });\n return project;\n };\n\n EpicDetailController.prototype.loadEpic = function() {\n return this.rs.epics.getByRef(this.scope.projectId, this.params.epicref).then((function(_this) {\n return function(epic) {\n var ctx, ref, ref1;\n _this.scope.epic = epic;\n _this.scope.immutableEpic = Immutable.fromJS(epic._attrs);\n _this.scope.epicId = epic.id;\n _this.scope.commentModel = epic;\n _this.modelTransform.setObject(_this.scope, 'epic');\n if (((ref = _this.scope.epic.neighbors.previous) != null ? ref.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.epic.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-epics-detail\", ctx);\n }\n if (((ref1 = _this.scope.epic.neighbors.next) != null ? ref1.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.epic.neighbors.next.ref\n };\n return _this.scope.nextUrl = _this.navUrls.resolve(\"project-epics-detail\", ctx);\n }\n };\n })(this));\n };\n\n EpicDetailController.prototype.loadUserstories = function() {\n return this.rs2.userstories.listInEpic(this.scope.epicId).then((function(_this) {\n return function(data) {\n return _this.scope.userstories = data;\n };\n })(this));\n };\n\n EpicDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.loadEpic().then((function(_this) {\n return function() {\n return _this.loadUserstories();\n };\n })(this));\n };\n\n\n /*\n * Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n * See app/modules/components/vote-button for more info\n */\n\n EpicDetailController.prototype.onUpvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadEpic();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.epics.upvote(this.scope.epicId).then(onSuccess, onError);\n };\n\n EpicDetailController.prototype.onDownvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadEpic();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.epics.downvote(this.scope.epicId).then(onSuccess, onError);\n };\n\n\n /*\n * Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n * See app/modules/components/watch-button for more info\n */\n\n EpicDetailController.prototype.onWatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadEpic();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.epics.watch(this.scope.epicId).then(onSuccess, onError);\n };\n\n EpicDetailController.prototype.onUnwatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadEpic();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.epics.unwatch(this.scope.epicId).then(onSuccess, onError);\n };\n\n EpicDetailController.prototype.onSelectColor = function(color) {\n var onSelectColorError, onSelectColorSuccess, transform;\n onSelectColorSuccess = (function(_this) {\n return function() {\n _this.rootscope.$broadcast(\"object:updated\");\n return _this.confirm.notify('success');\n };\n })(this);\n onSelectColorError = (function(_this) {\n return function() {\n return _this.confirm.notify('error');\n };\n })(this);\n transform = this.modelTransform.save(function(epic) {\n epic.color = color;\n return epic;\n });\n return transform.then(onSelectColorSuccess, onSelectColorError);\n };\n\n return EpicDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"EpicDetailController\", EpicDetailController);\n\n EpicStatusDisplayDirective = function($template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-display.html\", true);\n link = function($scope, $el, $attrs) {\n var render;\n render = function(epic) {\n var html, status;\n status = $scope.statusById[epic.status];\n html = template({\n is_closed: status.is_closed,\n status: status\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(epic) {\n if (epic != null) {\n return render(epic);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgEpicStatusDisplay\", [\"$tgTemplate\", \"$compile\", EpicStatusDisplayDirective]);\n\n EpicStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $compile, $translate, $template) {\n var link, template;\n template = $template.get(\"common/components/status-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_epic\") !== -1;\n };\n render = (function(_this) {\n return function(epic) {\n var html, status;\n status = $scope.statusById[epic.status];\n html = $compile(template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n }))($scope);\n return $el.html(html);\n };\n })(this);\n save = function(status) {\n var currentLoading, onError, onSuccess, transform;\n currentLoading = $loading().target($el).start();\n transform = $modelTransform.save(function(epic) {\n epic.status = status;\n return epic;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".js-edit-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n $.fn.popover().closeAll();\n return save(target.data(\"status-id\"));\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.status : void 0;\n }, function() {\n var epic;\n epic = $model.$modelValue;\n if (epic) {\n return render(epic);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgEpicStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$compile\", \"$translate\", \"$tgTemplate\", EpicStatusButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/detail.coffee\n */\n\n(function() {\n var AssignSprintToIssueButtonDirective, IssueDetailController, IssuePriorityButtonDirective, IssueSeverityButtonDirective, IssueStatusButtonDirective, IssueStatusDisplayDirective, IssueTypeButtonDirective, PromoteIssueToUsButtonDirective, bindMethods, bindOnce, groupBy, joinStr, mixOf, module, normalizeString, taiga, toString,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n normalizeString = this.taiga.normalizeString;\n\n module = angular.module(\"taigaIssues\");\n\n IssueDetailController = (function(superClass) {\n extend(IssueDetailController, superClass);\n\n IssueDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"tgAppMetaService\", \"$tgAnalytics\", \"$tgNavUrls\", \"$translate\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function IssueDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appMetaService, analytics, navUrls, translate, modelTransform, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appMetaService = appMetaService;\n this.analytics = analytics;\n this.navUrls = navUrls;\n this.translate = translate;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.issueRef = this.params.issueref;\n this.scope.sectionName = this.translate.instant(\"ISSUES.SECTION_NAME\");\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this._setMeta();\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n IssueDetailController.prototype._setMeta = function() {\n var description, ref, ref1, ref2, ref3, title;\n title = this.translate.instant(\"ISSUE.PAGE_TITLE\", {\n issueRef: \"#\" + this.scope.issue.ref,\n issueSubject: this.scope.issue.subject,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"ISSUE.PAGE_DESCRIPTION\", {\n issueStatus: ((ref = this.scope.statusById[this.scope.issue.status]) != null ? ref.name : void 0) || \"--\",\n issueType: ((ref1 = this.scope.typeById[this.scope.issue.type]) != null ? ref1.name : void 0) || \"--\",\n issueSeverity: ((ref2 = this.scope.severityById[this.scope.issue.severity]) != null ? ref2.name : void 0) || \"--\",\n issuePriority: ((ref3 = this.scope.priorityById[this.scope.issue.priority]) != null ? ref3.name : void 0) || \"--\",\n issueDescription: angular.element(this.scope.issue.description_html || \"\").text()\n });\n return this.appMetaService.setAll(title, description);\n };\n\n IssueDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on issue\", 1);\n };\n })(this));\n this.scope.$on(\"promote-issue-to-us:success\", (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"issue\", \"promoteToUserstory\", \"promote issue to userstory\", 1);\n _this.rootscope.$broadcast(\"object:updated\");\n return _this.loadIssue();\n };\n })(this));\n this.scope.$on(\"comment:new\", (function(_this) {\n return function() {\n return _this.loadIssue();\n };\n })(this));\n this.scope.$on(\"custom-attributes-values:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n return this.scope.$on(\"assign-sprint-to-issue:success\", (function(_this) {\n return function(ctx, milestoneId) {\n _this.scope.issue.milestone = milestoneId;\n _this.rootscope.$broadcast(\"object:updated\");\n if (milestoneId) {\n return _this.loadSprint();\n } else {\n return _this.scope.sprint = null;\n }\n };\n })(this));\n };\n\n IssueDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n if (this.scope.project.is_issues_activated) {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-issues\", ctx);\n } else {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n }\n };\n\n IssueDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.statusList = project.issue_statuses;\n this.scope.statusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n this.scope.typeById = groupBy(project.issue_types, function(x) {\n return x.id;\n });\n this.scope.typeList = _.sortBy(project.issue_types, \"order\");\n this.scope.severityList = project.severities;\n this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n this.scope.priorityList = project.priorities;\n this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n return project;\n };\n\n IssueDetailController.prototype.loadIssue = function() {\n return this.rs.issues.getByRef(this.scope.projectId, this.params.issueref).then((function(_this) {\n return function(issue) {\n var ctx, ref, ref1;\n _this.scope.issue = issue;\n _this.scope.issueId = issue.id;\n _this.scope.commentModel = issue;\n _this.modelTransform.setObject(_this.scope, 'issue');\n if (((ref = _this.scope.issue.neighbors.previous) != null ? ref.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.issue.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-issues-detail\", ctx);\n }\n if (((ref1 = _this.scope.issue.neighbors.next) != null ? ref1.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.issue.neighbors.next.ref\n };\n return _this.scope.nextUrl = _this.navUrls.resolve(\"project-issues-detail\", ctx);\n }\n };\n })(this));\n };\n\n IssueDetailController.prototype.loadSprint = function() {\n if (this.scope.issue.milestone) {\n return this.rs.sprints.get(this.scope.issue.project, this.scope.issue.milestone).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n return sprint;\n };\n })(this));\n }\n };\n\n IssueDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.loadIssue().then((function(_this) {\n return function() {\n return _this.loadSprint();\n };\n })(this));\n };\n\n\n /*\n * Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n * See app/modules/components/vote-button for more info\n */\n\n IssueDetailController.prototype.onUpvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssue();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.issues.upvote(this.scope.issueId).then(onSuccess, onError);\n };\n\n IssueDetailController.prototype.onDownvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssue();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.issues.downvote(this.scope.issueId).then(onSuccess, onError);\n };\n\n\n /*\n * Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n * See app/modules/components/watch-button for more info\n */\n\n IssueDetailController.prototype.onWatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssue();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.issues.watch(this.scope.issueId).then(onSuccess, onError);\n };\n\n IssueDetailController.prototype.onUnwatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssue();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.issues.unwatch(this.scope.issueId).then(onSuccess, onError);\n };\n\n return IssueDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"IssueDetailController\", IssueDetailController);\n\n IssueStatusDisplayDirective = function($template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-display.html\", true);\n link = function($scope, $el, $attrs) {\n var render;\n render = function(issue) {\n var html, status;\n status = $scope.statusById[issue.status];\n html = template({\n is_closed: status.is_closed,\n status: status\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(issue) {\n if (issue != null) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueStatusDisplay\", [\"$tgTemplate\", \"$compile\", IssueStatusDisplayDirective]);\n\n IssueStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = (function(_this) {\n return function(issue) {\n var html, status;\n status = $scope.statusById[issue.status];\n html = template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n })(this);\n save = function(statusId) {\n var currentLoading, onError, onSuccess, transform;\n $.fn.popover().closeAll();\n currentLoading = $loading().target($el).start();\n transform = $modelTransform.save(function(issue) {\n issue.status = statusId;\n return issue;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".js-edit-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n return save(target.data(\"status-id\"));\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.status : void 0;\n }, function() {\n var issue;\n issue = $model.$modelValue;\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", IssueStatusButtonDirective]);\n\n IssueTypeButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"issue/issue-type-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, notAutoSave, render, save;\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = function(issue) {\n var html, type;\n type = $scope.typeById[issue.type];\n html = template({\n type: type,\n typees: $scope.typeList,\n editable: isEditable()\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n save = function(type) {\n var currentLoading, onError, onSuccess, transform;\n $.fn.popover().closeAll();\n if (notAutoSave) {\n $model.$modelValue.type = type;\n $scope.$apply();\n return;\n }\n currentLoading = $loading().target($el.find(\".level-name\")).start();\n transform = $modelTransform.save(function(issue) {\n issue.type = type;\n return issue;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".type-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-type\").popover().open();\n });\n $el.on(\"click\", \".type\", function(event) {\n var target, type;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n type = target.data(\"type-id\");\n return save(type);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.type : void 0;\n }, function() {\n var issue;\n issue = $model.$modelValue;\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueTypeButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", IssueTypeButtonDirective]);\n\n IssueSeverityButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"issue/issue-severity-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, notAutoSave, render, save;\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = function(issue) {\n var html, severity;\n severity = $scope.severityById[issue.severity];\n html = template({\n severity: severity,\n severityes: $scope.severityList,\n editable: isEditable()\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n save = function(severity) {\n var currentLoading, onError, onSuccess, transform;\n $.fn.popover().closeAll();\n if (notAutoSave) {\n $model.$modelValue.severity = severity;\n $scope.$apply();\n return;\n }\n currentLoading = $loading().target($el.find(\".level-name\")).start();\n transform = $modelTransform.save(function(issue) {\n issue.severity = severity;\n return issue;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".severity-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-severity\").popover().open();\n });\n $el.on(\"click\", \".severity\", function(event) {\n var severity, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n severity = target.data(\"severity-id\");\n return save(severity);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.severity : void 0;\n }, function() {\n var issue;\n issue = $model.$modelValue;\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssueSeverityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", IssueSeverityButtonDirective]);\n\n IssuePriorityButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"issue/issue-priority-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, notAutoSave, render, save;\n notAutoSave = $scope.$eval($attrs.notAutoSave);\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_issue\") !== -1;\n };\n render = function(issue) {\n var html, priority;\n priority = $scope.priorityById[issue.priority];\n html = template({\n priority: priority,\n priorityes: $scope.priorityList,\n editable: isEditable()\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n save = function(priority) {\n var currentLoading, onError, onSuccess, transform;\n $.fn.popover().closeAll();\n if (notAutoSave) {\n $model.$modelValue.priority = priority;\n $scope.$apply();\n return;\n }\n currentLoading = $loading().target($el.find(\".level-name\")).start();\n transform = $modelTransform.save(function(issue) {\n issue.priority = priority;\n return issue;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".priority-data\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-priority\").popover().open();\n });\n $el.on(\"click\", \".priority\", function(event) {\n var priority, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n priority = target.data(\"priority-id\");\n return save(priority);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.priority : void 0;\n }, function() {\n var issue;\n issue = $model.$modelValue;\n if (issue) {\n return render(issue);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgIssuePriorityButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", IssuePriorityButtonDirective]);\n\n PromoteIssueToUsButtonDirective = function($rootScope, $repo, $confirm, $translate) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var save;\n save = (function(_this) {\n return function(issue, askResponse) {\n var data, onError, onSuccess;\n data = {\n generated_from_issue: issue.id,\n project: issue.project,\n subject: issue.subject,\n description: issue.description,\n tags: issue.tags,\n is_blocked: issue.is_blocked,\n blocked_note: issue.blocked_note,\n due_date: issue.due_date\n };\n onSuccess = function() {\n askResponse.finish();\n $confirm.notify(\"success\");\n return $rootScope.$broadcast(\"promote-issue-to-us:success\");\n };\n onError = function() {\n askResponse.finish();\n return $confirm.notify(\"error\");\n };\n return $repo.create(\"userstories\", data).then(onSuccess, onError);\n };\n })(this);\n $el.on(\"click\", \"a\", function(event) {\n var issue, message, subtitle, title;\n event.preventDefault();\n issue = $model.$modelValue;\n title = $translate.instant(\"ISSUES.CONFIRM_PROMOTE.TITLE\");\n message = $translate.instant(\"ISSUES.CONFIRM_PROMOTE.MESSAGE\");\n subtitle = issue.subject;\n return $confirm.ask(title, subtitle, message).then((function(_this) {\n return function(response) {\n return save(issue, response);\n };\n })(this));\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n restrict: \"AE\",\n require: \"ngModel\",\n templateUrl: \"issue/promote-issue-to-us-button.html\",\n link: link\n };\n };\n\n module.directive(\"tgPromoteIssueToUsButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$translate\", PromoteIssueToUsButtonDirective]);\n\n AssignSprintToIssueButtonDirective = function($rootscope, $rs, $repo, $loading, $translate, lightboxService, $modelTransform, $confirm) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var avaliableMilestones, existsMilestone, issue;\n avaliableMilestones = [];\n issue = null;\n $scope.$watch($attrs.ngModel, function(item) {\n if (!item) {\n return;\n }\n if (item.milestone) {\n $el.find('.assign-issue-button.button-unset').removeClass('is-active');\n return $el.find('.assign-issue-button.button-set').addClass('is-active');\n } else {\n $el.find('.assign-issue-button.button-set').removeClass('is-active');\n return $el.find('.assign-issue-button.button-unset').addClass('is-active');\n }\n });\n $el.on(\"click\", \".assign-issue-button.button-unset\", function(event) {\n var title;\n event.preventDefault();\n event.stopPropagation();\n title = $translate.instant(\"ISSUES.ACTION_ATTACH_SPRINT\");\n issue = $model.$modelValue;\n return $rs.sprints.list($scope.projectId, null).then(function(data) {\n $scope.milestones = data.milestones;\n $scope.selectedSprint = issue.milestone;\n avaliableMilestones = angular.copy($scope.milestones);\n return lightboxService.open($el.find(\".lightbox-assign-sprint-to-issue\"));\n });\n });\n $el.on(\"click\", \".assign-issue-button.button-set\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n issue = $model.$modelValue;\n return $rs.sprints.list($scope.projectId, null).then(function(data) {\n var currentSprint, message, title;\n currentSprint = _.find(data.milestones, {\n \"id\": issue.milestone\n });\n title = $translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.TITLE\");\n message = $translate.instant(\"ISSUES.CONFIRM_DETACH_FROM_SPRINT.MESSAGE\", {\n sprintName: currentSprint.name\n });\n return $confirm.ask(title, null, message).then(function(askResponse) {\n var onError, onSuccess, transform;\n onSuccess = function() {\n $rootscope.$broadcast(\"assign-sprint-to-issue:success\", null);\n askResponse.finish();\n return lightboxService.close($el);\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n transform = $modelTransform.save(function(issue) {\n issue.setAttr('milestone', null);\n return issue;\n });\n return transform.then(onSuccess, onError);\n });\n });\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n existsMilestone = function(needle, haystack) {\n haystack = normalizeString(haystack.toUpperCase());\n needle = normalizeString(needle.toUpperCase());\n return _.includes(haystack, needle);\n };\n $scope.filterMilestones = function(filterText) {\n return $scope.milestones = avaliableMilestones.filter(function(milestone) {\n return existsMilestone(filterText, milestone.name);\n });\n };\n return $scope.saveIssueToSprint = function(selectedSprint, event) {\n var currentLoading, transform;\n currentLoading = $loading().target($(event.currentTarget)).start();\n issue.setAttr('milestone', selectedSprint.id);\n transform = $modelTransform.save(function(item) {\n issue.setAttr('milestone', selectedSprint.id);\n return item;\n });\n return transform.then(function() {\n currentLoading.finish();\n lightboxService.close($el.find(\".lightbox-assign-sprint-to-issue\"));\n return $rootscope.$broadcast(\"assign-sprint-to-issue:success\", selectedSprint.id);\n });\n };\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\",\n templateUrl: \"issue/assign-sprint-to-issue-button.html\"\n };\n };\n\n module.directive(\"tgAssignSprintToIssueButton\", [\"$rootScope\", \"$tgResources\", \"$tgRepo\", \"$tgLoading\", \"$translate\", \"lightboxService\", \"$tgQueueModelTransformation\", \"$tgConfirm\", AssignSprintToIssueButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/lightboxes.coffee\n */\n\n(function() {\n var CreateBulkIssuesDirective, bindOnce, debounce, module, taiga, trim;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n trim = this.taiga.trim;\n\n module = angular.module(\"taigaIssues\");\n\n CreateBulkIssuesDirective = function($repo, $rs, $confirm, $rootscope, $loading, lightboxService, $model) {\n var link;\n link = function($scope, $el, attrs) {\n var form, submit, submitButton;\n form = null;\n $scope.$on(\"issueform:bulk\", function(ctx, projectId, milestoneId, status) {\n if (form) {\n form.reset();\n }\n lightboxService.open($el);\n return $scope[\"new\"] = {\n projectId: projectId,\n milestoneId: milestoneId,\n bulk: \"\"\n };\n });\n submit = debounce(2000, function(event) {\n var currentLoading, data, milestoneId, projectId, promise;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n data = $scope[\"new\"].bulk;\n projectId = $scope[\"new\"].projectId;\n milestoneId = $scope[\"new\"].milestoneId;\n promise = $rs.issues.bulkCreate(projectId, milestoneId, data);\n promise.then(function(result) {\n result = _.map(result.data, function(x) {\n return $model.make_model('issues', x);\n });\n currentLoading.finish();\n $rootscope.$broadcast(\"issueform:new:success\", result);\n lightboxService.close($el);\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function() {\n currentLoading.finish();\n return $confirm.notify(\"error\");\n });\n });\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbCreateBulkIssues\", [\"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$rootScope\", \"$tgLoading\", \"lightboxService\", \"$tgModel\", CreateBulkIssuesDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/issues/list.coffee\n */\n\n(function() {\n var IssueAssignedToInlineEditionDirective, IssueStatusInlineEditionDirective, IssuesController, IssuesDirective, bindMethods, bindOnce, debounceLeading, groupBy, joinStr, mixOf, module, startswith, taiga, toString, trim,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounceLeading = this.taiga.debounceLeading;\n\n startswith = this.taiga.startswith;\n\n bindMethods = this.taiga.bindMethods;\n\n debounceLeading = this.taiga.debounceLeading;\n\n module = angular.module(\"taigaIssues\");\n\n IssuesController = (function(superClass) {\n extend(IssuesController, superClass);\n\n IssuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$tgUrls\", \"$routeParams\", \"$q\", \"$tgLocation\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgEvents\", \"$tgAnalytics\", \"$translate\", \"tgErrorHandlingService\", \"$tgStorage\", \"tgFilterRemoteStorageService\", \"tgProjectService\", \"tgUserActivityService\"];\n\n IssuesController.prototype.filtersHashSuffix = \"issues-filters\";\n\n IssuesController.prototype.myFiltersHashSuffix = \"issues-my-filters\";\n\n IssuesController.prototype.excludePrefix = \"exclude_\";\n\n IssuesController.prototype.filterCategories = [\"tags\", \"status\", \"type\", \"severity\", \"priority\", \"assigned_to\", \"owner\", \"role\"];\n\n function IssuesController(scope, rootscope, repo, confirm, rs, urls, params1, q1, location, appMetaService, navUrls, events, analytics, translate, errorHandlingService, storage, filterRemoteStorageService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.urls = urls;\n this.params = params1;\n this.q = q1;\n this.location = location;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.events = events;\n this.analytics = analytics;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.storage = storage;\n this.filterRemoteStorageService = filterRemoteStorageService;\n this.projectService = projectService;\n this.loadIssues = bind(this.loadIssues, this);\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"PROJECT.SECTION.ISSUES\");\n this.voting = false;\n if (this.applyStoredFilters(this.params.pslug, this.filtersHashSuffix)) {\n return;\n }\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ISSUES.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.translate.instant(\"ISSUES.PAGE_DESCRIPTION\", {\n projectName: _this.scope.project.name,\n projectDescription: _this.scope.project.description\n });\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"issueform:new:success\", (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"issue\", \"create\", \"create issue on issues list\", 1);\n return _this.loadIssues();\n };\n })(this));\n this.scope.$on(\"assigned-to:changed\", (function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('assigned_to') || _this.isFilterDataTypeSelected('role') || _this.isOrderedBy('assigned_to') || _this.isOrderedBy('modified')) {\n return _this.loadIssues();\n }\n };\n })(this));\n this.scope.$on(\"status:changed\", (function(_this) {\n return function() {\n _this.generateFilters();\n if (_this.isFilterDataTypeSelected('status') || _this.isOrderedBy('status') || _this.isOrderedBy('modified')) {\n return _this.loadIssues();\n }\n };\n })(this));\n }\n\n IssuesController.prototype.isOrderedBy = function(fieldName) {\n var pattern;\n pattern = new RegExp(\"-*\" + fieldName);\n return pattern.test(this.location.search().order_by);\n };\n\n IssuesController.prototype.changeQ = function(q) {\n this.unselectFilter(\"page\");\n this.replaceFilter(\"q\", q);\n this.loadIssues();\n return this.generateFilters();\n };\n\n IssuesController.prototype.removeFilter = function(filter) {\n this.unselectFilter(\"page\");\n this.unselectFilter(filter.dataType, filter.id, false, filter.mode);\n this.loadIssues();\n return this.generateFilters();\n };\n\n IssuesController.prototype.addFilter = function(newFilter) {\n this.unselectFilter(\"page\");\n this.selectFilter(newFilter.category.dataType, newFilter.filter.id, false, newFilter.mode);\n this.loadIssues();\n return this.generateFilters();\n };\n\n IssuesController.prototype.selectCustomFilter = function(customFilter) {\n var orderBy;\n orderBy = this.location.search().order_by;\n if (orderBy) {\n customFilter.filter.order_by = orderBy;\n }\n this.unselectFilter(\"page\");\n this.replaceAllFilters(customFilter.filter);\n this.loadIssues();\n return this.generateFilters();\n };\n\n IssuesController.prototype.removeCustomFilter = function(customFilter) {\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, this.myFiltersHashSuffix).then((function(_this) {\n return function(userFilters) {\n delete userFilters[customFilter.id];\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, _this.myFiltersHashSuffix).then(_this.generateFilters);\n };\n })(this));\n };\n\n IssuesController.prototype.isFilterDataTypeSelected = function(filterDataType) {\n var filter, j, len, ref;\n ref = this.selectedFilters;\n for (j = 0, len = ref.length; j < len; j++) {\n filter = ref[j];\n if (filter['dataType'] === filterDataType) {\n return true;\n }\n }\n return false;\n };\n\n IssuesController.prototype.saveCustomFilter = function(name) {\n var excludeKey, filters, j, key, len, ref, urlfilters;\n filters = {};\n urlfilters = this.location.search();\n ref = this.filterCategories;\n for (j = 0, len = ref.length; j < len; j++) {\n key = ref[j];\n excludeKey = this.excludePrefix.concat(key);\n filters[key] = urlfilters[key];\n filters[excludeKey] = urlfilters[excludeKey];\n }\n return this.filterRemoteStorageService.getFilters(this.scope.projectId, this.myFiltersHashSuffix).then((function(_this) {\n return function(userFilters) {\n userFilters[name] = filters;\n return _this.filterRemoteStorageService.storeFilters(_this.scope.projectId, userFilters, _this.myFiltersHashSuffix).then(_this.generateFilters);\n };\n })(this));\n };\n\n IssuesController.prototype.generateFilters = function() {\n var excludeKey, j, key, len, loadFilters, ref, urlfilters;\n this.storeFilters(this.params.pslug, this.location.search(), this.filtersHashSuffix);\n urlfilters = this.location.search();\n loadFilters = {};\n loadFilters.project = this.scope.projectId;\n loadFilters.q = urlfilters.q;\n ref = this.filterCategories;\n for (j = 0, len = ref.length; j < len; j++) {\n key = ref[j];\n excludeKey = this.excludePrefix.concat(key);\n loadFilters[key] = urlfilters[key];\n loadFilters[excludeKey] = urlfilters[excludeKey];\n }\n return this.q.all([this.rs.issues.filtersData(loadFilters), this.filterRemoteStorageService.getFilters(this.scope.projectId, this.myFiltersHashSuffix)]).then((function(_this) {\n return function(result) {\n var customFiltersRaw, data, dataCollection, k, len1, ref1, selected, tagsWithAtLeastOneElement;\n data = result[0];\n customFiltersRaw = result[1];\n dataCollection = {};\n dataCollection.status = _.map(data.statuses, function(it) {\n it.id = it.id.toString();\n return it;\n });\n dataCollection.type = _.map(data.types, function(it) {\n it.id = it.id.toString();\n return it;\n });\n dataCollection.severity = _.map(data.severities, function(it) {\n it.id = it.id.toString();\n return it;\n });\n dataCollection.priority = _.map(data.priorities, function(it) {\n it.id = it.id.toString();\n return it;\n });\n dataCollection.tags = _.map(data.tags, function(it) {\n it.id = it.name;\n return it;\n });\n tagsWithAtLeastOneElement = _.filter(dataCollection.tags, function(tag) {\n return tag.count > 0;\n });\n dataCollection.assigned_to = _.map(data.assigned_to, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.full_name || \"Unassigned\";\n return it;\n });\n dataCollection.owner = _.map(data.owners, function(it) {\n it.id = it.id.toString();\n it.name = it.full_name;\n return it;\n });\n dataCollection.role = _.map(data.roles, function(it) {\n if (it.id) {\n it.id = it.id.toString();\n } else {\n it.id = \"null\";\n }\n it.name = it.name || \"Unassigned\";\n return it;\n });\n _this.selectedFilters = [];\n ref1 = _this.filterCategories;\n for (k = 0, len1 = ref1.length; k < len1; k++) {\n key = ref1[k];\n excludeKey = _this.excludePrefix.concat(key);\n if (loadFilters[key]) {\n selected = _this.formatSelectedFilters(key, dataCollection[key], loadFilters[key]);\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n if (loadFilters[excludeKey]) {\n selected = _this.formatSelectedFilters(key, dataCollection[key], loadFilters[excludeKey], \"exclude\");\n _this.selectedFilters = _this.selectedFilters.concat(selected);\n }\n }\n _this.filterQ = loadFilters.q;\n _this.filters = [\n {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.TYPE\"),\n dataType: \"type\",\n content: dataCollection.type\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.SEVERITY\"),\n dataType: \"severity\",\n content: dataCollection.severity\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.PRIORITIES\"),\n dataType: \"priority\",\n content: dataCollection.priority\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.STATUS\"),\n dataType: \"status\",\n content: dataCollection.status\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.TAGS\"),\n dataType: \"tags\",\n content: dataCollection.tags,\n hideEmpty: true,\n totalTaggedElements: tagsWithAtLeastOneElement.length\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ASSIGNED_TO\"),\n dataType: \"assigned_to\",\n content: dataCollection.assigned_to\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.ROLE\"),\n dataType: \"role\",\n content: dataCollection.role\n }, {\n title: _this.translate.instant(\"COMMON.FILTERS.CATEGORIES.CREATED_BY\"),\n dataType: \"owner\",\n content: dataCollection.owner\n }\n ];\n _this.customFilters = [];\n return _.forOwn(customFiltersRaw, function(value, key) {\n return _this.customFilters.push({\n id: key,\n name: key,\n filter: value\n });\n });\n };\n })(this));\n };\n\n IssuesController.prototype.initializeSubscription = function() {\n var routingKey;\n routingKey = \"changes.project.\" + this.scope.projectId + \".issues\";\n return this.events.subscribe(this.scope, routingKey, debounceLeading(500, (function(_this) {\n return function(message) {\n return _this.loadIssues();\n };\n })(this)));\n };\n\n IssuesController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_issues_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.issueStatusById = groupBy(project.issue_statuses, function(x) {\n return x.id;\n });\n this.scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\");\n this.scope.severityById = groupBy(project.severities, function(x) {\n return x.id;\n });\n this.scope.severityList = _.sortBy(project.severities, \"order\");\n this.scope.priorityById = groupBy(project.priorities, function(x) {\n return x.id;\n });\n this.scope.priorityList = _.sortBy(project.priorities, \"order\");\n this.scope.issueTypes = _.sortBy(project.issue_types, \"order\");\n this.scope.issueTypeById = groupBy(project.issue_types, function(x) {\n return x.id;\n });\n return project;\n };\n\n IssuesController.prototype.loadIssuesRequests = 0;\n\n IssuesController.prototype.loadIssues = function() {\n var params, promise;\n params = this.location.search();\n promise = this.rs.issues.list(this.scope.projectId, params);\n this.loadIssuesRequests += 1;\n promise.index = this.loadIssuesRequests;\n promise.then((function(_this) {\n return function(data) {\n if (promise.index === _this.loadIssuesRequests) {\n _this.scope.issues = data.models;\n _this.scope.page = data.current;\n _this.scope.count = data.count;\n _this.scope.paginatedBy = data.paginatedBy;\n }\n return data;\n };\n })(this));\n return promise;\n };\n\n IssuesController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n this.initializeSubscription();\n this.generateFilters();\n return this.loadIssues();\n };\n\n IssuesController.prototype.addNewIssue = function() {\n var project;\n project = this.projectService.project.toJS();\n return this.rootscope.$broadcast(\"genericform:new\", {\n 'objType': 'issue',\n 'project': project\n });\n };\n\n IssuesController.prototype.addIssuesInBulk = function() {\n return this.rootscope.$broadcast(\"issueform:bulk\", this.scope.projectId);\n };\n\n IssuesController.prototype.upVoteIssue = function(issueId) {\n var onError, onSuccess;\n this.voting = issueId;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssues();\n return _this.voting = null;\n };\n })(this);\n onError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.voting = null;\n };\n })(this);\n return this.rs.issues.upvote(issueId).then(onSuccess, onError);\n };\n\n IssuesController.prototype.downVoteIssue = function(issueId) {\n var onError, onSuccess;\n this.voting = issueId;\n onSuccess = (function(_this) {\n return function() {\n _this.loadIssues();\n return _this.voting = null;\n };\n })(this);\n onError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.voting = null;\n };\n })(this);\n return this.rs.issues.downvote(issueId).then(onSuccess, onError);\n };\n\n IssuesController.prototype.getOrderBy = function() {\n if (_.isString(this.location.search().order_by)) {\n return this.location.search().order_by;\n } else {\n return \"created_date\";\n }\n };\n\n return IssuesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"IssuesController\", IssuesController);\n\n IssuesDirective = function($log, $location, $template, $compile) {\n var link, linkOrdering, linkPagination, template;\n template = $template.get(\"issue/issue-paginator.html\", true);\n linkPagination = function($scope, $el, $attrs, $ctrl) {\n var $pagEl, afterCurrent, atBegin, atEnd, beforeCurrent, getNumPages, renderPagination;\n afterCurrent = 2;\n beforeCurrent = 4;\n atBegin = 2;\n atEnd = 2;\n $pagEl = $el.find(\".issues-paginator\");\n getNumPages = function() {\n var numPages;\n numPages = $scope.count / $scope.paginatedBy;\n if (parseInt(numPages, 10) < numPages) {\n numPages = parseInt(numPages, 10) + 1;\n } else {\n numPages = parseInt(numPages, 10);\n }\n return numPages;\n };\n renderPagination = function() {\n var cpage, html, i, j, numPages, options, pages, ref;\n numPages = getNumPages();\n if (numPages <= 1) {\n $pagEl.hide();\n return;\n }\n $pagEl.show();\n pages = [];\n options = {};\n options.pages = pages;\n options.showPrevious = $scope.page > 1;\n options.showNext = !($scope.page === numPages);\n cpage = $scope.page;\n for (i = j = 1, ref = numPages; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (i === (cpage + afterCurrent) && numPages > (cpage + afterCurrent + atEnd)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i === (cpage - beforeCurrent) && cpage > (atBegin + beforeCurrent)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i > (cpage + afterCurrent) && i <= (numPages - atEnd)) {\n\n } else if (i < (cpage - beforeCurrent) && i > atBegin) {\n\n } else if (i === cpage) {\n pages.push({\n classes: \"active\",\n num: i,\n type: \"page-active\"\n });\n } else {\n pages.push({\n classes: \"page\",\n num: i,\n type: \"page\"\n });\n }\n }\n html = template(options);\n html = $compile(html)($scope);\n return $pagEl.html(html);\n };\n $scope.$watch(\"issues\", function(value) {\n if (!value) {\n return;\n }\n return renderPagination();\n });\n $el.on(\"click\", \".issues-paginator a.next\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page + 1);\n return $ctrl.loadIssues();\n });\n });\n $el.on(\"click\", \".issues-paginator a.previous\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page - 1);\n return $ctrl.loadIssues();\n });\n });\n return $el.on(\"click\", \".issues-paginator li.page > a\", function(event) {\n var pagenum, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n pagenum = target.data(\"pagenum\");\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", pagenum);\n return $ctrl.loadIssues();\n });\n });\n };\n linkOrdering = function($scope, $el, $attrs, $ctrl) {\n var colHeadElement, currentOrder, icon, svg;\n currentOrder = $ctrl.getOrderBy();\n if (currentOrder) {\n icon = startswith(currentOrder, \"-\") ? \"icon-arrow-up\" : \"icon-arrow-down\";\n colHeadElement = $el.find(\".row.title > div[data-fieldname='\" + (trim(currentOrder, \"-\")) + \"']\");\n svg = $(\"\").attr(\"svg-icon\", icon);\n colHeadElement.append(svg);\n $compile(colHeadElement.contents())($scope);\n }\n return $el.on(\"click\", \".row.title > div\", function(event) {\n var finalOrder, newOrder, target;\n target = angular.element(event.currentTarget);\n currentOrder = $ctrl.getOrderBy();\n newOrder = target.data(\"fieldname\");\n if (newOrder === 'total_voters' && currentOrder !== \"-total_voters\") {\n currentOrder = \"total_voters\";\n }\n finalOrder = currentOrder === newOrder ? \"-\" + newOrder : newOrder;\n return $scope.$apply(function() {\n $ctrl.replaceFilter(\"order_by\", finalOrder);\n $ctrl.storeFilters($ctrl.params.pslug, $location.search(), $ctrl.filtersHashSuffix);\n return $ctrl.loadIssues().then(function() {\n $el.find(\".row.title > div > tg-svg\").remove();\n icon = startswith(finalOrder, \"-\") ? \"icon-arrow-up\" : \"icon-arrow-down\";\n svg = $(\"\").attr(\"svg-icon\", icon);\n target.append(svg);\n return $compile(target.contents())($scope);\n });\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n linkOrdering($scope, $el, $attrs, $ctrl);\n linkPagination($scope, $el, $attrs, $ctrl);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssues\", [\"$log\", \"$tgLocation\", \"$tgTemplate\", \"$compile\", IssuesDirective]);\n\n IssueStatusInlineEditionDirective = function($repo, $template, $rootscope) {\n\n /*\n Print the status of an Issue and a popover to change it.\n - tg-issue-status-inline-edition: The issue\n \n Example:\n \n div.status(tg-issue-status-inline-edition=\"issue\")\n a.issue-status(href=\"\")\n \n NOTE: This directive need 'issueStatusById' and 'project'.\n */\n var link, selectionTemplate, updateIssueStatus;\n selectionTemplate = $template.get(\"issue/issue-status-inline-edition-selection.html\", true);\n updateIssueStatus = function($el, issue, issueStatusById) {\n var issueStatusDom, issueStatusDomParent, status;\n issueStatusDomParent = $el.find(\".issue-status\");\n issueStatusDom = $el.find(\".issue-status .issue-status-bind\");\n status = issueStatusById[issue.status];\n if (status) {\n issueStatusDom.text(status.name);\n issueStatusDom.prop(\"title\", status.name);\n return issueStatusDomParent.css('color', status.color);\n }\n };\n link = function($scope, $el, $attrs) {\n var $ctrl, issue;\n $ctrl = $el.controller();\n issue = $scope.$eval($attrs.tgIssueStatusInlineEdition);\n $el.on(\"click\", \".issue-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n issue.status = target.data(\"status-id\");\n $el.find(\".pop-status\").popover().close();\n updateIssueStatus($el, issue, $scope.issueStatusById);\n return $scope.$apply(function() {\n return $repo.save(issue).then(function(response) {\n return $rootscope.$broadcast(\"status:changed\", response);\n });\n });\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n $el.append(selectionTemplate({\n 'statuses': project.issue_statuses\n }));\n updateIssueStatus($el, issue, $scope.issueStatusById);\n if (project.my_permissions.indexOf(\"modify_issue\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$watch($attrs.tgIssueStatusInlineEdition, (function(_this) {\n return function(val) {\n return updateIssueStatus($el, val, $scope.issueStatusById);\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssueStatusInlineEdition\", [\"$tgRepo\", \"$tgTemplate\", \"$rootScope\", IssueStatusInlineEditionDirective]);\n\n IssueAssignedToInlineEditionDirective = function($repo, $rootscope, $translate, avatarService) {\n var link, template;\n template = _.template(\"\\\" src=\\\"<%- imgurl %>\\\" alt=\\\"<%- name %>\\\"/>\\n
    <%- name %>
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, issue, updateIssue;\n updateIssue = function(issue) {\n var avatar, ctx, member;\n ctx = {\n name: $translate.instant(\"COMMON.ASSIGNED_TO.NOT_ASSIGNED\"),\n imgurl: \"/\" + window._version + \"/images/unnamed.png\"\n };\n member = $scope.usersById[issue.assigned_to];\n avatar = avatarService.getAvatar(member);\n ctx.imgurl = avatar.url;\n ctx.bg = null;\n if (member) {\n ctx.name = member.full_name_display;\n ctx.bg = avatar.bg;\n }\n $el.find(\".avatar\").html(template(ctx));\n return $el.find(\".issue-assignedto\").attr('title', ctx.name);\n };\n $ctrl = $el.controller();\n issue = $scope.$eval($attrs.tgIssueAssignedToInlineEdition);\n updateIssue(issue);\n $el.on(\"click\", \".issue-assignedto\", function(event) {\n return $rootscope.$broadcast(\"assigned-to:add\", issue);\n });\n taiga.bindOnce($scope, \"project\", function(project) {\n if (project.my_permissions.indexOf(\"modify_issue\") === -1) {\n $el.unbind(\"click\");\n return $el.find(\"a\").addClass(\"not-clickable\");\n }\n });\n $scope.$on(\"assigned-to:added\", function(ctx, userId, updatedIssue) {\n if (updatedIssue.id === issue.id) {\n updatedIssue.assigned_to = userId;\n return $repo.save(issue).then(function() {\n updateIssue(updatedIssue);\n return $rootscope.$broadcast(\"assigned-to:changed\", updatedIssue);\n });\n }\n });\n $scope.$watch($attrs.tgIssueAssignedToInlineEdition, function(val) {\n return updateIssue(val);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgIssueAssignedToInlineEdition\", [\"$tgRepo\", \"$rootScope\", \"$translate\", \"tgAvatarService\", IssueAssignedToInlineEditionDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/userstories/detail.coffee\n */\n\n(function() {\n var UsClientRequirementButtonDirective, UsStatusButtonDirective, UsStatusDisplayDirective, UsTeamRequirementButtonDirective, UserStoryDetailController, bindMethods, bindOnce, groupBy, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaUserStories\");\n\n UserStoryDetailController = (function(superClass) {\n extend(UserStoryDetailController, superClass);\n\n UserStoryDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"$tgConfig\", \"tgProjectService\", \"tgWysiwygService\"];\n\n function UserStoryDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appMetaService, navUrls, analytics, translate, modelTransform, errorHandlingService, configService, projectService, wysiwigService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.translate = translate;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.configService = configService;\n this.projectService = projectService;\n this.wysiwigService = wysiwigService;\n bindMethods(this);\n this.scope.usRef = this.params.usref;\n this.scope.sectionName = this.translate.instant(\"US.SECTION_NAME\");\n this.scope.tribeEnabled = this.configService.config.tribeHost;\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this._setMeta();\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserStoryDetailController.prototype._setMeta = function() {\n var closedTasks, description, progressPercentage, ref, title, totalTasks;\n totalTasks = this.scope.tasks.length;\n closedTasks = _.filter(this.scope.tasks, (function(_this) {\n return function(t) {\n return _this.scope.taskStatusById[t.status].is_closed;\n };\n })(this)).length;\n progressPercentage = totalTasks > 0 ? Math.round(100 * closedTasks / totalTasks) : 0;\n title = this.translate.instant(\"US.PAGE_TITLE\", {\n userStoryRef: \"#\" + this.scope.us.ref,\n userStorySubject: this.scope.us.subject,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"US.PAGE_DESCRIPTION\", {\n userStoryStatus: ((ref = this.scope.statusById[this.scope.us.status]) != null ? ref.name : void 0) || \"--\",\n userStoryPoints: this.scope.us.total_points,\n userStoryDescription: angular.element(this.wysiwigService.getHTML(this.scope.us.description) || \"\").text(),\n userStoryClosedTasks: closedTasks,\n userStoryTotalTasks: totalTasks,\n userStoryProgressPercentage: progressPercentage\n });\n return this.appMetaService.setAll(title, description);\n };\n\n UserStoryDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"related-tasks:update\", (function(_this) {\n return function() {\n var allClosed;\n _this.loadTasks();\n _this.scope.tasks = _.clone(_this.scope.tasks, false);\n allClosed = _.every(_this.scope.tasks, function(task) {\n return task.is_closed;\n });\n if (_this.scope.us.is_closed !== allClosed) {\n return _this.loadUs();\n }\n };\n })(this));\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on userstory\", 1);\n };\n })(this));\n this.scope.$on(\"task:reorder\", (function(_this) {\n return function(event, task, newIndex) {\n return _this.reorderTask(task, newIndex);\n };\n })(this));\n return this.scope.$on(\"comment:new\", (function(_this) {\n return function() {\n return _this.loadUs();\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n if (this.scope.project.is_backlog_activated) {\n if (this.scope.us.milestone) {\n ctx.sprint = this.scope.sprint.slug;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-taskboard\", ctx);\n } else {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-backlog\", ctx);\n }\n } else if (this.scope.project.is_kanban_activated) {\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-kanban\", ctx);\n }\n };\n\n UserStoryDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.statusList = project.us_statuses;\n this.scope.statusById = groupBy(project.us_statuses, function(x) {\n return x.id;\n });\n this.scope.taskStatusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n this.scope.pointsList = _.sortBy(project.points, \"order\");\n this.scope.pointsById = groupBy(this.scope.pointsList, function(e) {\n return e.id;\n });\n return project;\n };\n\n UserStoryDetailController.prototype.loadUs = function() {\n var httpParams, kanbanStaus, milestone, noMilestone;\n httpParams = _.pick(this.location.search(), \"milestone\", \"no-milestone\", \"kanban-status\");\n milestone = httpParams.milestone;\n if (milestone) {\n this.rs.userstories.storeQueryParams(this.scope.projectId, {\n milestone: milestone,\n order_by: \"sprint_order\"\n });\n }\n noMilestone = httpParams[\"no-milestone\"];\n if (noMilestone) {\n this.rs.userstories.storeQueryParams(this.scope.projectId, {\n milestone: \"null\",\n order_by: \"backlog_order\"\n });\n }\n kanbanStaus = httpParams[\"kanban-status\"];\n if (kanbanStaus) {\n this.rs.userstories.storeQueryParams(this.scope.projectId, {\n status: kanbanStaus,\n order_by: \"kanban_order\"\n });\n }\n return this.rs.userstories.getByRef(this.scope.projectId, this.params.usref).then((function(_this) {\n return function(us) {\n _this.scope.us = us;\n _this.scope.usId = us.id;\n _this.scope.commentModel = us;\n _this.modelTransform.setObject(_this.scope, 'us');\n return us;\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.loadSprint = function() {\n if (this.scope.us.milestone) {\n return this.rs.sprints.get(this.scope.us.project, this.scope.us.milestone).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n return sprint;\n };\n })(this));\n }\n };\n\n UserStoryDetailController.prototype.loadTasks = function() {\n return this.rs.tasks.list(this.scope.projectId, null, this.scope.usId).then((function(_this) {\n return function(tasks) {\n _this.scope.tasks = tasks;\n return tasks;\n };\n })(this));\n };\n\n UserStoryDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.loadUs().then((function(_this) {\n return function() {\n return _this.q.all([_this.loadSprint(), _this.loadTasks()]);\n };\n })(this));\n };\n\n\n /*\n * Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n * See app/modules/components/vote-button for more info\n */\n\n UserStoryDetailController.prototype.onUpvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadUs();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.userstories.upvote(this.scope.usId).then(onSuccess, onError);\n };\n\n UserStoryDetailController.prototype.onDownvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadUs();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.userstories.downvote(this.scope.usId).then(onSuccess, onError);\n };\n\n\n /*\n * Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n * See app/modules/components/watch-button for more info\n */\n\n UserStoryDetailController.prototype.onWatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadUs();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.userstories.watch(this.scope.usId).then(onSuccess, onError);\n };\n\n UserStoryDetailController.prototype.onUnwatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadUs();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.userstories.unwatch(this.scope.usId).then(onSuccess, onError);\n };\n\n UserStoryDetailController.prototype.onTribeInfo = function() {\n var image, publishDesc, publishTitle, text;\n publishTitle = this.translate.instant(\"US.TRIBE.PUBLISH_MORE_INFO_TITLE\");\n image = $('').attr({\n 'src': \"/\" + window._version + \"/images/monster-fight.png\",\n 'alt': this.translate.instant(\"US.TRIBE.PUBLISH_MORE_INFO_TITLE\")\n });\n text = this.translate.instant(\"US.TRIBE.PUBLISH_MORE_INFO_TEXT\");\n publishDesc = $('
    ').append(image).append(text);\n return this.confirm.success(publishTitle, publishDesc);\n };\n\n UserStoryDetailController.prototype.reorderTask = function(task, newIndex) {\n var afterDestination, beforeDestination, data, newOrder, orderList, previous, previousWithTheSameOrder, setOrders, withoutMoved;\n orderList = {};\n this.scope.tasks.forEach(function(it) {\n return orderList[it.id] = it.us_order;\n });\n withoutMoved = this.scope.tasks.filter(function(it) {\n return it.id !== task.id;\n });\n beforeDestination = withoutMoved.slice(0, newIndex);\n afterDestination = withoutMoved.slice(newIndex);\n previous = beforeDestination[beforeDestination.length - 1];\n newOrder = !previous ? 0 : previous.us_order + 1;\n orderList[task.id] = newOrder;\n previousWithTheSameOrder = beforeDestination.filter(function(it) {\n return it.us_order === previous.us_order;\n });\n setOrders = _.fromPairs(previousWithTheSameOrder.map(function(it) {\n return [it.id, it.us_order];\n }));\n afterDestination.forEach(function(it) {\n return orderList[it.id] = it.us_order + 1;\n });\n this.scope.tasks = _.map(this.scope.tasks, function(it) {\n it.us_order = orderList[it.id];\n return it;\n });\n this.scope.tasks = _.sortBy(this.scope.tasks, \"us_order\");\n data = {\n us_order: newOrder,\n version: task.version\n };\n return this.rs.tasks.reorder(task.id, data, setOrders).then((function(_this) {\n return function(newTask) {\n _this.scope.tasks = _.map(_this.scope.tasks, function(it) {\n if (it.id === newTask.id) {\n return newTask;\n } else {\n return it;\n }\n });\n return _this.rootscope.$broadcast(\"related-tasks:reordered\");\n };\n })(this));\n };\n\n return UserStoryDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserStoryDetailController\", UserStoryDetailController);\n\n UsStatusDisplayDirective = function($template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-display.html\", true);\n link = function($scope, $el, $attrs) {\n var render;\n render = function(us) {\n var html, status;\n status = $scope.statusById[us.status];\n html = template({\n is_closed: us.is_closed,\n status: status\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(us) {\n if (us != null) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsStatusDisplay\", [\"$tgTemplate\", \"$compile\", UsStatusDisplayDirective]);\n\n UsStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = (function(_this) {\n return function(us) {\n var html, status;\n status = $scope.statusById[us.status];\n html = template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n });\n $el.html(html);\n return $compile($el.contents())($scope);\n };\n })(this);\n save = (function(_this) {\n return function(status) {\n var currentLoading, onError, onSuccess, transform;\n $el.find(\".pop-status\").popover().close();\n currentLoading = $loading().target($el.find('.js-edit-status')).start();\n transform = $modelTransform.save(function(us) {\n us.status = status;\n return us;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n })(this);\n $el.on(\"click\", \".js-edit-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var status, target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n status = target.data(\"status-id\");\n return save(status);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.status : void 0;\n }, function() {\n var us;\n us = $model.$modelValue;\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", UsStatusButtonDirective]);\n\n UsTeamRequirementButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"us/us-team-requirement-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var canEdit, render, save;\n canEdit = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = function(us) {\n var ctx, html;\n ctx = {\n canEdit: canEdit(),\n isRequired: us.team_requirement\n };\n html = template(ctx);\n html = $compile(html)($scope);\n return $el.html(html);\n };\n save = function(team_requirement) {\n var currentLoading, transform;\n currentLoading = $loading().target($el.find(\"label\")).start();\n transform = $modelTransform.save(function(us) {\n us.team_requirement = team_requirement;\n return us;\n });\n transform.then((function(_this) {\n return function() {\n currentLoading.finish();\n return $rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n return transform.then(null, function() {\n currentLoading.finish();\n return $confirm.notify(\"error\");\n });\n };\n $el.on(\"click\", \".team-requirement\", function(event) {\n var team_requirement;\n if (!canEdit()) {\n return;\n }\n team_requirement = !$model.$modelValue.team_requirement;\n return save(team_requirement);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.team_requirement : void 0;\n }, function() {\n var us;\n us = $model.$modelValue;\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsTeamRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", UsTeamRequirementButtonDirective]);\n\n UsClientRequirementButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $modelTransform, $template, $compile) {\n var link, template;\n template = $template.get(\"us/us-client-requirement-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var canEdit, render, save;\n canEdit = function() {\n return $scope.project.my_permissions.indexOf(\"modify_us\") !== -1;\n };\n render = function(us) {\n var ctx, html;\n ctx = {\n canEdit: canEdit(),\n isRequired: us.client_requirement\n };\n html = $compile(template(ctx))($scope);\n return $el.html(html);\n };\n save = function(client_requirement) {\n var currentLoading, transform;\n currentLoading = $loading().target($el.find(\"label\")).start();\n transform = $modelTransform.save(function(us) {\n us.client_requirement = client_requirement;\n return us;\n });\n transform.then((function(_this) {\n return function() {\n currentLoading.finish();\n return $rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n return transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n };\n $el.on(\"click\", \".client-requirement\", function(event) {\n var client_requirement;\n if (!canEdit()) {\n return;\n }\n client_requirement = !$model.$modelValue.client_requirement;\n return save(client_requirement);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.client_requirement : void 0;\n }, function() {\n var us;\n us = $model.$modelValue;\n if (us) {\n return render(us);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgUsClientRequirementButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", UsClientRequirementButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/tasks/detail.coffee\n */\n\n(function() {\n var TaskDetailController, TaskIsIocaineButtonDirective, TaskStatusButtonDirective, TaskStatusDisplayDirective, bindMethods, groupBy, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaTasks\");\n\n TaskDetailController = (function(superClass) {\n extend(TaskDetailController, superClass);\n\n TaskDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$log\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", \"$tgQueueModelTransformation\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function TaskDetailController(scope, rootscope, repo, confirm, rs, params, q, location, log, appMetaService, navUrls, analytics, translate, modelTransform, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.log = log;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.translate = translate;\n this.modelTransform = modelTransform;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.taskRef = this.params.taskref;\n this.scope.sectionName = this.translate.instant(\"TASK.SECTION_NAME\");\n this.initializeEventHandlers();\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n _this._setMeta();\n return _this.initializeOnDeleteGoToUrl();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n TaskDetailController.prototype._setMeta = function() {\n var description, ref, title;\n title = this.translate.instant(\"TASK.PAGE_TITLE\", {\n taskRef: \"#\" + this.scope.task.ref,\n taskSubject: this.scope.task.subject,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"TASK.PAGE_DESCRIPTION\", {\n taskStatus: ((ref = this.scope.statusById[this.scope.task.status]) != null ? ref.name : void 0) || \"--\",\n taskDescription: angular.element(this.scope.task.description_html || \"\").text()\n });\n return this.appMetaService.setAll(title, description);\n };\n\n TaskDetailController.prototype.initializeEventHandlers = function() {\n this.scope.$on(\"attachment:create\", (function(_this) {\n return function() {\n return _this.analytics.trackEvent(\"attachment\", \"create\", \"create attachment on task\", 1);\n };\n })(this));\n this.scope.$on(\"custom-attributes-values:edit\", (function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this));\n return this.scope.$on(\"comment:new\", (function(_this) {\n return function() {\n return _this.loadTask();\n };\n })(this));\n };\n\n TaskDetailController.prototype.initializeOnDeleteGoToUrl = function() {\n var ctx;\n ctx = {\n project: this.scope.project.slug\n };\n this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project\", ctx);\n if (this.scope.project.is_backlog_activated) {\n if (this.scope.task.milestone) {\n ctx.sprint = this.scope.sprint.slug;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-taskboard\", ctx);\n } else if (this.scope.task.us) {\n ctx.ref = this.scope.us.ref;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-userstories-detail\", ctx);\n }\n } else if (this.scope.project.is_kanban_activated) {\n if (this.scope.us) {\n ctx.ref = this.scope.us.ref;\n return this.scope.onDeleteGoToUrl = this.navUrls.resolve(\"project-userstories-detail\", ctx);\n }\n }\n };\n\n TaskDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.statusList = project.task_statuses;\n this.scope.statusById = groupBy(project.task_statuses, function(x) {\n return x.id;\n });\n return project;\n };\n\n TaskDetailController.prototype.loadTask = function() {\n return this.rs.tasks.getByRef(this.scope.projectId, this.params.taskref).then((function(_this) {\n return function(task) {\n var ctx, ref, ref1;\n _this.scope.task = task;\n _this.scope.taskId = task.id;\n _this.scope.commentModel = task;\n _this.modelTransform.setObject(_this.scope, 'task');\n if (((ref = _this.scope.task.neighbors.previous) != null ? ref.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.task.neighbors.previous.ref\n };\n _this.scope.previousUrl = _this.navUrls.resolve(\"project-tasks-detail\", ctx);\n }\n if (((ref1 = _this.scope.task.neighbors.next) != null ? ref1.ref : void 0) != null) {\n ctx = {\n project: _this.scope.project.slug,\n ref: _this.scope.task.neighbors.next.ref\n };\n _this.scope.nextUrl = _this.navUrls.resolve(\"project-tasks-detail\", ctx);\n }\n return task;\n };\n })(this));\n };\n\n TaskDetailController.prototype.loadSprint = function() {\n if (this.scope.task.milestone) {\n return this.rs.sprints.get(this.scope.task.project, this.scope.task.milestone).then((function(_this) {\n return function(sprint) {\n _this.scope.sprint = sprint;\n return sprint;\n };\n })(this));\n }\n };\n\n TaskDetailController.prototype.loadUserStory = function() {\n if (this.scope.task.user_story) {\n return this.rs.userstories.get(this.scope.task.project, this.scope.task.user_story).then((function(_this) {\n return function(us) {\n _this.scope.us = us;\n return us;\n };\n })(this));\n }\n };\n\n TaskDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.loadTask().then((function(_this) {\n return function() {\n return _this.q.all([_this.loadSprint(), _this.loadUserStory()]);\n };\n })(this));\n };\n\n\n /*\n * Note: This methods (onUpvote() and onDownvote()) are related to tg-vote-button.\n * See app/modules/components/vote-button for more info\n */\n\n TaskDetailController.prototype.onUpvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadTask();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.tasks.upvote(this.scope.taskId).then(onSuccess, onError);\n };\n\n TaskDetailController.prototype.onDownvote = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadTask();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.tasks.downvote(this.scope.taskId).then(onSuccess, onError);\n };\n\n\n /*\n * Note: This methods (onWatch() and onUnwatch()) are related to tg-watch-button.\n * See app/modules/components/watch-button for more info\n */\n\n TaskDetailController.prototype.onWatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadTask();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.tasks.watch(this.scope.taskId).then(onSuccess, onError);\n };\n\n TaskDetailController.prototype.onUnwatch = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.loadTask();\n return _this.rootscope.$broadcast(\"object:updated\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.rs.tasks.unwatch(this.scope.taskId).then(onSuccess, onError);\n };\n\n return TaskDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"TaskDetailController\", TaskDetailController);\n\n TaskStatusDisplayDirective = function($template, $compile) {\n var link, template;\n template = $template.get(\"common/components/status-display.html\", true);\n link = function($scope, $el, $attrs) {\n var render;\n render = function(task) {\n var html, status;\n status = $scope.statusById[task.status];\n html = template({\n is_closed: status.is_closed,\n status: status\n });\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(task) {\n if (task != null) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskStatusDisplay\", [\"$tgTemplate\", \"$compile\", TaskStatusDisplayDirective]);\n\n TaskStatusButtonDirective = function($rootScope, $repo, $confirm, $loading, $modelTransform, $compile, $translate, $template) {\n var link, template;\n template = $template.get(\"common/components/status-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_task\") !== -1;\n };\n render = (function(_this) {\n return function(task) {\n var html, status;\n status = $scope.statusById[task.status];\n html = $compile(template({\n status: status,\n statuses: $scope.statusList,\n editable: isEditable()\n }))($scope);\n return $el.html(html);\n };\n })(this);\n save = function(status) {\n var currentLoading, onError, onSuccess, transform;\n currentLoading = $loading().target($el).start();\n transform = $modelTransform.save(function(task) {\n task.status = status;\n return task;\n });\n onSuccess = function() {\n $rootScope.$broadcast(\"object:updated\");\n return currentLoading.finish();\n };\n onError = function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n };\n return transform.then(onSuccess, onError);\n };\n $el.on(\"click\", \".js-edit-status\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n return $el.find(\".pop-status\").popover().open();\n });\n $el.on(\"click\", \".status\", function(event) {\n var target;\n event.preventDefault();\n event.stopPropagation();\n if (!isEditable()) {\n return;\n }\n target = angular.element(event.currentTarget);\n $.fn.popover().closeAll();\n return save(target.data(\"status-id\"));\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.status : void 0;\n }, function() {\n var task;\n task = $model.$modelValue;\n if (task) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskStatusButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$compile\", \"$translate\", \"$tgTemplate\", TaskStatusButtonDirective]);\n\n TaskIsIocaineButtonDirective = function($rootscope, $tgrepo, $confirm, $loading, $modelTransform, $compile, $template) {\n var link, template;\n template = $template.get(\"issue/iocaine-button.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n return $scope.project.my_permissions.indexOf(\"modify_task\") !== -1;\n };\n render = function(task) {\n var ctx, html;\n if (!isEditable() && !task.is_iocaine) {\n $el.html(\"\");\n return;\n }\n ctx = {\n isIocaine: task.is_iocaine,\n isEditable: isEditable()\n };\n html = $compile(template(ctx))($scope);\n return $el.html(html);\n };\n save = function(is_iocaine) {\n var currentLoading, transform;\n currentLoading = $loading().target($el.find('label')).start();\n transform = $modelTransform.save(function(task) {\n task.is_iocaine = is_iocaine;\n return task;\n });\n transform.then(function() {\n return $rootscope.$broadcast(\"object:updated\");\n });\n transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return transform[\"finally\"](function() {\n return currentLoading.finish();\n });\n };\n $el.on(\"click\", \".is-iocaine\", function(event) {\n var is_iocaine;\n if (!isEditable()) {\n return;\n }\n is_iocaine = !$model.$modelValue.is_iocaine;\n return save(is_iocaine);\n });\n $scope.$watch(function() {\n var ref;\n return (ref = $model.$modelValue) != null ? ref.is_iocaine : void 0;\n }, function() {\n var task;\n task = $model.$modelValue;\n if (task) {\n return render(task);\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgTaskIsIocaineButton\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$compile\", \"$tgTemplate\", TaskIsIocaineButtonDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/team/main.coffee\n */\n\n(function() {\n var LeaveProjectDirective, TeamController, TeamFiltersDirective, TeamMemberCurrentUserDirective, TeamMemberStatsDirective, TeamMembersDirective, membersFilter, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n module = angular.module(\"taigaTeam\");\n\n TeamController = (function(superClass) {\n extend(TeamController, superClass);\n\n TeamController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$q\", \"$location\", \"$tgNavUrls\", \"tgAppMetaService\", \"$tgAuth\", \"$translate\", \"tgProjectService\", \"tgErrorHandlingService\"];\n\n function TeamController(scope, rootscope, repo, rs, params, q, location, navUrls, appMetaService, auth, translate, projectService, errorHandlingService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.auth = auth;\n this.translate = translate;\n this.projectService = projectService;\n this.errorHandlingService = errorHandlingService;\n this.scope.sectionName = \"TEAM.SECTION_NAME\";\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"TEAM.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.translate.instant(\"TEAM.PAGE_DESCRIPTION\", {\n projectName: _this.scope.project.name,\n projectDescription: _this.scope.project.description\n });\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n TeamController.prototype.setRole = function(role) {\n if (role) {\n return this.scope.filtersRole = role;\n } else {\n return this.scope.filtersRole = null;\n }\n };\n\n TeamController.prototype.loadMembers = function() {\n var i, len, member, ref, user;\n user = this.auth.getUser();\n this.scope.totals = {};\n ref = this.scope.activeUsers;\n for (i = 0, len = ref.length; i < len; i++) {\n member = ref[i];\n this.scope.totals[member.id] = 0;\n }\n this.scope.currentUser = _.find(this.scope.activeUsers, {\n id: user != null ? user.id : void 0\n });\n return this.scope.memberships = _.reject(this.scope.activeUsers, {\n id: user != null ? user.id : void 0\n });\n };\n\n TeamController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.issuesEnabled = project.is_issues_activated;\n this.scope.tasksEnabled = project.is_kanban_activated || project.is_backlog_activated;\n this.scope.wikiEnabled = project.is_wiki_activated;\n this.scope.owner = project.owner.id;\n return project;\n };\n\n TeamController.prototype.loadMemberStats = function() {\n return this.rs.projects.memberStats(this.scope.projectId).then((function(_this) {\n return function(stats) {\n var totals;\n totals = {};\n _.forEach(_this.scope.totals, function(total, userId) {\n var vals;\n vals = _.map(stats, function(memberStats, statsKey) {\n return memberStats[userId];\n });\n total = _.reduce(vals, function(sum, el) {\n return sum + el;\n });\n return _this.scope.totals[userId] = total;\n });\n _this.scope.stats = _this._processStats(stats);\n return _this.scope.stats.totals = _this.scope.totals;\n };\n })(this));\n };\n\n TeamController.prototype._processStat = function(stat) {\n var key, max, min, singleStat, value;\n max = _.max(_.toArray(stat));\n min = _.min(_.toArray(stat));\n singleStat = Object();\n for (key in stat) {\n if (!hasProp.call(stat, key)) continue;\n value = stat[key];\n if (value === min) {\n singleStat[key] = 0.1;\n } else if (value === max) {\n singleStat[key] = 1;\n } else {\n singleStat[key] = (value * 0.5) / max;\n }\n }\n return singleStat;\n };\n\n TeamController.prototype._processStats = function(stats) {\n var key, value;\n for (key in stats) {\n value = stats[key];\n stats[key] = this._processStat(value);\n }\n return stats;\n };\n\n TeamController.prototype.loadInitialData = function() {\n var project, userRoles;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n this.loadMembers();\n userRoles = _.map(this.scope.users, function(user) {\n return user.role;\n });\n this.scope.roles = _.filter(this.scope.roles, function(role) {\n return userRoles.indexOf(role.id) !== -1;\n });\n return this.loadMemberStats();\n };\n\n return TeamController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"TeamController\", TeamController);\n\n TeamFiltersDirective = function() {\n return {\n templateUrl: \"team/team-filter.html\"\n };\n };\n\n module.directive(\"tgTeamFilters\", [TeamFiltersDirective]);\n\n TeamMemberStatsDirective = function() {\n return {\n templateUrl: \"team/team-member-stats.html\",\n scope: {\n stats: \"=\",\n userId: \"=user\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\"\n }\n };\n };\n\n module.directive(\"tgTeamMemberStats\", TeamMemberStatsDirective);\n\n TeamMemberCurrentUserDirective = function() {\n return {\n templateUrl: \"team/team-member-current-user.html\",\n scope: {\n project: \"=project\",\n currentUser: \"=currentuser\",\n stats: \"=\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\",\n owner: \"=owner\"\n }\n };\n };\n\n module.directive(\"tgTeamCurrentUser\", TeamMemberCurrentUserDirective);\n\n TeamMembersDirective = function() {\n var template;\n template = \"team/team-members.html\";\n return {\n templateUrl: template,\n scope: {\n memberships: \"=\",\n filtersQ: \"=filtersq\",\n filtersRole: \"=filtersrole\",\n stats: \"=\",\n issuesEnabled: \"=issuesenabled\",\n tasksEnabled: \"=tasksenabled\",\n wikiEnabled: \"=wikienabled\",\n owner: \"=owner\"\n }\n };\n };\n\n module.directive(\"tgTeamMembers\", TeamMembersDirective);\n\n LeaveProjectDirective = function($repo, $confirm, $location, $rs, $navurls, $translate, lightboxFactory, currentUserService) {\n var link;\n link = function($scope, $el, $attrs) {\n var leaveConfirm;\n leaveConfirm = function() {\n var confirm_leave_project_text, leave_project_text;\n leave_project_text = $translate.instant(\"TEAM.ACTION_LEAVE_PROJECT\");\n confirm_leave_project_text = $translate.instant(\"TEAM.CONFIRM_LEAVE_PROJECT\");\n return $confirm.ask(leave_project_text, confirm_leave_project_text).then((function(_this) {\n return function(response) {\n var promise;\n promise = $rs.projects.leave($scope.project.id);\n promise.then(function() {\n return currentUserService.loadProjects().then(function() {\n response.finish();\n $confirm.notify(\"success\");\n return $location.path($navurls.resolve(\"home\"));\n });\n });\n return promise.then(null, function(response) {\n response.finish();\n return $confirm.notify('error', response.data._error_message);\n });\n };\n })(this));\n };\n return $scope.leave = function() {\n if ($scope.project.owner.id === $scope.user.id) {\n return lightboxFactory.create(\"tg-lightbox-leave-project-warning\", {\n \"class\": \"lightbox lightbox-leave-project-warning\"\n }, {\n isCurrentUser: true,\n project: $scope.project\n });\n } else {\n return leaveConfirm();\n }\n };\n };\n return {\n scope: {\n user: \"=\",\n project: \"=\"\n },\n templateUrl: \"team/leave-project.html\",\n link: link\n };\n };\n\n module.directive(\"tgLeaveProject\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"$tgResources\", \"$tgNavUrls\", \"$translate\", \"tgLightboxFactory\", \"tgCurrentUserService\", LeaveProjectDirective]);\n\n membersFilter = function() {\n return function(members, filtersQ, filtersRole) {\n return _.filter(members, function(m) {\n return (!filtersRole || m.role === filtersRole.id) && (!filtersQ || m.full_name.search(new RegExp(filtersQ, \"i\")) >= 0);\n });\n };\n };\n\n module.filter('membersFilter', membersFilter);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki/main.coffee\n */\n\n(function() {\n var WikiDetailController, WikiSummaryDirective, WikiWysiwyg, bindOnce, debounce, groupBy, mixOf, module, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaWiki\");\n\n WikiDetailController = (function(superClass) {\n extend(WikiDetailController, superClass);\n\n WikiDetailController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgModel\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$filter\", \"$log\", \"tgAppMetaService\", \"$tgNavUrls\", \"$tgAnalytics\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function WikiDetailController(scope, rootscope, repo, model, confirm, rs, params, q, location, filter, log, appMetaService, navUrls, analytics, translate, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.model = model;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.filter = filter;\n this.log = log;\n this.appMetaService = appMetaService;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n this.moveLink = bind(this.moveLink, this);\n this.loadWiki = bind(this.loadWiki, this);\n this.scope.$on(\"wiki:links:move\", this.moveLink);\n this.scope.$on(\"wikipage:add\", this.loadWiki);\n this.scope.projectSlug = this.params.pslug;\n this.scope.wikiSlug = this.params.slug;\n this.scope.sectionName = \"Wiki\";\n this.scope.linksVisible = false;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n return _this._setMeta();\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n WikiDetailController.prototype._setMeta = function() {\n var description, ref, ref1, ref2, title;\n title = this.translate.instant(\"WIKI.PAGE_TITLE\", {\n wikiPageName: this.scope.wikiSlug,\n projectName: this.scope.project.name\n });\n description = this.translate.instant(\"WIKI.PAGE_DESCRIPTION\", {\n wikiPageContent: angular.element(((ref = this.scope.wiki) != null ? ref.html : void 0) || \"\").text(),\n totalEditions: ((ref1 = this.scope.wiki) != null ? ref1.editions : void 0) || 0,\n lastModifiedDate: moment((ref2 = this.scope.wiki) != null ? ref2.modified_date : void 0).format(this.translate.instant(\"WIKI.DATETIME\"))\n });\n return this.appMetaService.setAll(title, description);\n };\n\n WikiDetailController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_wiki_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n WikiDetailController.prototype.loadWiki = function() {\n var promise;\n promise = this.rs.wiki.getBySlug(this.scope.projectId, this.params.slug);\n promise.then((function(_this) {\n return function(wiki) {\n _this.scope.wiki = wiki;\n _this.scope.wikiId = wiki.id;\n return _this.scope.wiki;\n };\n })(this));\n return promise.then(null, (function(_this) {\n return function(xhr) {\n var data;\n _this.scope.wikiId = null;\n if (_this.scope.project.my_permissions.indexOf(\"add_wiki_page\") === -1) {\n return null;\n }\n data = {\n project: _this.scope.projectId,\n slug: _this.scope.wikiSlug,\n content: \"\"\n };\n _this.scope.wiki = _this.model.make_model(\"wiki\", data);\n return _this.scope.wiki;\n };\n })(this));\n };\n\n WikiDetailController.prototype.loadWikiLinks = function() {\n return this.rs.wiki.listLinks(this.scope.projectId).then((function(_this) {\n return function(wikiLinks) {\n var i, len, link, ref, selectedWikiLink;\n _this.scope.wikiLinks = wikiLinks;\n ref = _this.scope.wikiLinks;\n for (i = 0, len = ref.length; i < len; i++) {\n link = ref[i];\n link.url = _this.navUrls.resolve(\"project-wiki-page\", {\n project: _this.scope.projectSlug,\n slug: link.href\n });\n }\n return selectedWikiLink = _.find(wikiLinks, {\n href: _this.scope.wikiSlug\n });\n };\n })(this));\n };\n\n WikiDetailController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.q.all([this.loadWikiLinks(), this.loadWiki()]).then(this.checkLinksPerms.bind(this));\n };\n\n WikiDetailController.prototype.checkLinksPerms = function() {\n if (this.scope.project.my_permissions.indexOf(\"add_wiki_link\") !== -1 || (this.scope.project.my_permissions.indexOf(\"view_wiki_links\") !== -1 && this.scope.wikiLinks.length)) {\n return this.scope.linksVisible = true;\n }\n };\n\n WikiDetailController.prototype[\"delete\"] = function() {\n var message, title;\n title = this.translate.instant(\"WIKI.DELETE_LIGHTBOX_TITLE\");\n message = this.scope.wikiSlug;\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var onError, onSuccess;\n onSuccess = function() {\n var ctx;\n askResponse.finish();\n ctx = {\n project: _this.scope.projectSlug\n };\n _this.location.path(_this.navUrls.resolve(\"project-wiki\", ctx));\n _this.confirm.notify(\"success\");\n return _this.loadWiki();\n };\n onError = function() {\n askResponse.finish(false);\n return _this.confirm.notify(\"error\");\n };\n return _this.repo.remove(_this.scope.wiki).then(onSuccess, onError);\n };\n })(this));\n };\n\n WikiDetailController.prototype.moveLink = function(ctx, item, itemIndex) {\n var r, values;\n values = this.scope.wikiLinks;\n r = values.indexOf(item);\n values.splice(r, 1);\n values.splice(itemIndex, 0, item);\n _.each(values, function(value, index) {\n return value.order = index;\n });\n return this.repo.saveAll(values);\n };\n\n return WikiDetailController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"WikiDetailController\", WikiDetailController);\n\n WikiSummaryDirective = function($log, $template, $compile, $translate, avatarService) {\n var link, template;\n template = $template.get(\"wiki/wiki-summary.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var render;\n render = function(wiki) {\n var avatar, ctx, html, user;\n if ($scope.usersById == null) {\n $log.error(\"WikiSummaryDirective requires userById set in scope.\");\n } else {\n user = $scope.usersById[wiki.last_modifier];\n }\n avatar = avatarService.getAvatar(user);\n if (user === void 0) {\n user = {\n name: \"unknown\",\n avatar: avatar\n };\n } else {\n user = {\n name: user.full_name_display,\n avatar: avatar\n };\n }\n ctx = {\n totalEditions: wiki.editions,\n lastModifiedDate: moment(wiki.modified_date).format($translate.instant(\"WIKI.DATETIME\")),\n user: user\n };\n html = template(ctx);\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $scope.$watch($attrs.ngModel, function(wikiPage) {\n if (!wikiPage) {\n return;\n }\n return render(wikiPage);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgWikiSummary\", [\"$log\", \"$tgTemplate\", \"$compile\", \"$translate\", \"tgAvatarService\", WikiSummaryDirective]);\n\n WikiWysiwyg = function($modelTransform, $rootscope, $confirm, attachmentsFullService, $qqueue, $repo, $analytics, activityService) {\n var link;\n link = function($scope, $el, $attrs) {\n var uploadFile;\n $scope.editableDescription = false;\n $scope.saveDescription = $qqueue.bindAdd(function(description, cb) {\n var onError, onSuccess, promise;\n onSuccess = function(wikiPage) {\n if ($scope.item.id == null) {\n $analytics.trackEvent(\"wikipage\", \"create\", \"create wiki page\", 1);\n $scope.$emit(\"wikipage:add\");\n }\n activityService.fetchEntries(true);\n return $confirm.notify(\"success\");\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n $scope.item.content = description;\n if ($scope.item.id != null) {\n promise = $repo.save($scope.item).then(onSuccess, onError);\n } else {\n promise = $repo.create(\"wiki\", $scope.item).then(onSuccess, onError);\n }\n return promise[\"finally\"](cb);\n });\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.project.id, $scope.item.id, 'wiki_page', file).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n $scope.$watch($attrs.model, function(value) {\n if (!value) {\n return;\n }\n $scope.item = value;\n $scope.version = value.version;\n return $scope.storageKey = $scope.project.id + \"-\" + value.id + \"-wiki\";\n });\n return $scope.$watch('project', function(project) {\n if (!project) {\n return;\n }\n return $scope.editableDescription = project.my_permissions.indexOf(\"modify_wiki_page\") !== -1;\n });\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n\\n
    \\n\\n \\n {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}}\\n
    \\n
    \"\n };\n };\n\n module.directive(\"tgWikiWysiwyg\", [\"$tgQueueModelTransformation\", \"$rootScope\", \"$tgConfirm\", \"tgAttachmentsFullService\", \"$tgQqueue\", \"$tgRepo\", \"$tgAnalytics\", \"tgActivityService\", WikiWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki/nav.coffee\n */\n\n(function() {\n var WikiNavDirective, bindOnce, groupBy, mixOf, module, taiga;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaWiki\");\n\n WikiNavDirective = function($tgrepo, $log, $location, $confirm, $analytics, $loading, $template, $compile, $translate) {\n var link, linkWikiLinks, template;\n template = $template.get(\"wiki/wiki-nav.html\", true);\n linkWikiLinks = function($scope, $el, $attrs) {\n var $ctrl, addWikiLinkPermission, drake, render;\n $ctrl = $el.controller();\n if ($attrs.ngModel == null) {\n return $log.error(\"WikiNavDirective: no ng-model attr is defined\");\n }\n addWikiLinkPermission = $scope.project.my_permissions.indexOf(\"add_wiki_link\") > -1;\n drake = null;\n render = function(wikiLinks) {\n var deleteWikiLinkPermission, html, itemEl, scroll, tdom;\n addWikiLinkPermission = $scope.project.my_permissions.indexOf(\"add_wiki_link\") > -1;\n deleteWikiLinkPermission = $scope.project.my_permissions.indexOf(\"delete_wiki_link\") > -1;\n html = template({\n wikiLinks: wikiLinks,\n projectSlug: $scope.projectSlug,\n addWikiLinkPermission: addWikiLinkPermission,\n deleteWikiLinkPermission: deleteWikiLinkPermission\n });\n html = $compile(html)($scope);\n $el.off();\n if (addWikiLinkPermission && drake) {\n drake.destroy();\n }\n $el.html(html);\n if (addWikiLinkPermission) {\n itemEl = null;\n tdom = $el.find(\".sortable\");\n drake = dragula([tdom[0]], {\n direction: 'vertical',\n copySortSource: false,\n copy: false,\n mirrorContainer: tdom[0],\n moves: function(item) {\n return $(item).is('li');\n }\n });\n drake.on('dragend', function(item) {\n var itemIndex;\n itemEl = $(item);\n item = itemEl.scope().link;\n itemIndex = itemEl.index();\n return $scope.$emit(\"wiki:links:move\", item, itemIndex);\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n }\n $el.on(\"click\", \".add-button\", function(event) {\n event.preventDefault();\n $el.find(\".new\").removeClass(\"hidden\");\n $el.find(\".new input\").focus();\n return $el.find(\".add-button\").hide();\n });\n $el.on(\"click\", \".js-delete-link\", function(event) {\n var linkId, message, target, title;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n linkId = target.parents('.wiki-link').data('id');\n title = $translate.instant(\"WIKI.DELETE_LINK_TITLE\");\n message = $scope.wikiLinks[linkId].title;\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var promise;\n promise = $tgrepo.remove($scope.wikiLinks[linkId]);\n promise.then(function() {\n promise = $ctrl.loadWikiLinks();\n promise.then(function() {\n askResponse.finish();\n return render($scope.wikiLinks);\n });\n return promise.then(null, function() {\n return askResponse.finish();\n });\n });\n return promise.then(null, function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n });\n };\n })(this));\n });\n return $el.on(\"keyup\", \".new input\", function(event) {\n var currentLoading, newLink, promise, target;\n event.preventDefault();\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n newLink = target.val();\n currentLoading = $loading().target($el.find(\".new\")).start();\n promise = $tgrepo.create(\"wiki-links\", {\n project: $scope.projectId,\n title: newLink\n });\n promise.then(function() {\n var loadPromise;\n $analytics.trackEvent(\"wikilink\", \"create\", \"create wiki link\", 1);\n loadPromise = $ctrl.loadWikiLinks();\n loadPromise.then(function() {\n currentLoading.finish();\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n $el.find(\".add-button\").show();\n return render($scope.wikiLinks);\n });\n return loadPromise.then(null, function() {\n currentLoading.finish();\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n $el.find(\".add-button\").show();\n return $confirm.notify(\"error\", \"Error loading wiki links\");\n });\n });\n return promise.then(null, function(error) {\n var ref;\n currentLoading.finish();\n $el.find(\".new input\").val(newLink);\n $el.find(\".new input\").focus().select();\n if ((error != null ? (ref = error.__all__) != null ? ref[0] : void 0 : void 0) != null) {\n return $confirm.notify(\"error\", \"The link already exists\");\n } else {\n return $confirm.notify(\"error\");\n }\n });\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new input\").val('');\n return $el.find(\".add-button\").show();\n }\n });\n };\n return bindOnce($scope, $attrs.ngModel, render);\n };\n link = function($scope, $el, $attrs) {\n linkWikiLinks($scope, $el, $attrs);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgWikiNav\", [\"$tgRepo\", \"$log\", \"$tgLocation\", \"$tgConfirm\", \"$tgAnalytics\", \"$tgLoading\", \"$tgTemplate\", \"$compile\", \"$translate\", WikiNavDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/wiki/pages-list.coffee\n */\n\n(function() {\n var WikiPagesListController, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n module = angular.module(\"taigaWiki\");\n\n WikiPagesListController = (function(superClass) {\n extend(WikiPagesListController, superClass);\n\n WikiPagesListController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgModel\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgNavUrls\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function WikiPagesListController(scope, rootscope, repo, model, confirm, rs, params, q, navUrls, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.model = model;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.navUrls = navUrls;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n this.scope.projectSlug = this.params.pslug;\n this.scope.wikiSlug = this.params.slug;\n this.scope.sectionName = \"Wiki\";\n this.scope.linksVisible = false;\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n WikiPagesListController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.is_wiki_activated) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n WikiPagesListController.prototype.loadWikiPages = function() {\n var promise;\n return promise = this.rs.wiki.list(this.scope.projectId).then((function(_this) {\n return function(wikipages) {\n return _this.scope.wikipages = wikipages;\n };\n })(this));\n };\n\n WikiPagesListController.prototype.loadWikiLinks = function() {\n return this.rs.wiki.listLinks(this.scope.projectId).then((function(_this) {\n return function(wikiLinks) {\n var i, len, link, ref, selectedWikiLink;\n _this.scope.wikiLinks = wikiLinks;\n ref = _this.scope.wikiLinks;\n for (i = 0, len = ref.length; i < len; i++) {\n link = ref[i];\n link.url = _this.navUrls.resolve(\"project-wiki-page\", {\n project: _this.scope.projectSlug,\n slug: link.href\n });\n }\n return selectedWikiLink = _.find(wikiLinks, {\n href: _this.scope.wikiSlug\n });\n };\n })(this));\n };\n\n WikiPagesListController.prototype.loadInitialData = function() {\n var project;\n project = this.loadProject();\n this.fillUsersAndRoles(project.members, project.roles);\n return this.q.all([this.loadWikiLinks(), this.loadWikiPages()]).then(this.checkLinksPerms.bind(this));\n };\n\n WikiPagesListController.prototype.checkLinksPerms = function() {\n if (this.scope.project.my_permissions.indexOf(\"add_wiki_link\") !== -1 || (this.scope.project.my_permissions.indexOf(\"view_wiki_links\") !== -1 && this.scope.wikiLinks.length)) {\n return this.scope.linksVisible = true;\n }\n };\n\n return WikiPagesListController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"WikiPagesListController\", WikiPagesListController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/lightboxes.coffee\n */\n\n(function() {\n var ChangeOwnerLightboxController, ChangeOwnerLightboxDirective, LbRequestOwnershipDirective, LightboxAddMembersWarningMessageDirective, TransferProjectStartSuccessDirective, debounce, module, taiga;\n\n taiga = this.taiga;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaKanban\");\n\n LightboxAddMembersWarningMessageDirective = function() {\n return {\n templateUrl: \"admin/memberships-warning-message.html\",\n scope: {\n project: \"=\"\n }\n };\n };\n\n module.directive(\"tgLightboxAddMembersWarningMessage\", [LightboxAddMembersWarningMessageDirective]);\n\n LbRequestOwnershipDirective = function(lightboxService, rs, confirmService, $translate) {\n return {\n link: function(scope, el) {\n lightboxService.open(el);\n return scope.request = function() {\n scope.loading = true;\n return rs.projects.transferRequest(scope.projectId).then(function() {\n scope.loading = false;\n lightboxService.close(el);\n return confirmService.notify(\"success\", $translate.instant(\"ADMIN.PROJECT_PROFILE.REQUEST_OWNERSHIP_SUCCESS\"));\n });\n };\n },\n templateUrl: \"common/lightbox/lightbox-request-ownership.html\"\n };\n };\n\n module.directive('tgLbRequestOwnership', [\"lightboxService\", \"tgResources\", \"$tgConfirm\", \"$translate\", LbRequestOwnershipDirective]);\n\n ChangeOwnerLightboxController = (function() {\n function ChangeOwnerLightboxController(rs1, lightboxService1, confirm, translate) {\n this.rs = rs1;\n this.lightboxService = lightboxService1;\n this.confirm = confirm;\n this.translate = translate;\n this.users = [];\n this.q = \"\";\n this.commentOpen = false;\n }\n\n ChangeOwnerLightboxController.prototype.limit = 3;\n\n ChangeOwnerLightboxController.prototype.normalizeString = function(normalizedString) {\n normalizedString = normalizedString.replace(\"Á\", \"A\").replace(\"Ä\", \"A\").replace(\"À\", \"A\");\n normalizedString = normalizedString.replace(\"É\", \"E\").replace(\"Ë\", \"E\").replace(\"È\", \"E\");\n normalizedString = normalizedString.replace(\"Í\", \"I\").replace(\"Ï\", \"I\").replace(\"Ì\", \"I\");\n normalizedString = normalizedString.replace(\"Ó\", \"O\").replace(\"Ö\", \"O\").replace(\"Ò\", \"O\");\n normalizedString = normalizedString.replace(\"Ú\", \"U\").replace(\"Ü\", \"U\").replace(\"Ù\", \"U\");\n return normalizedString;\n };\n\n ChangeOwnerLightboxController.prototype.filterUsers = function(user) {\n var text, username;\n username = user.full_name_display.toUpperCase();\n username = this.normalizeString(username);\n text = this.q.toUpperCase();\n text = this.normalizeString(text);\n return _.includes(username, text);\n };\n\n ChangeOwnerLightboxController.prototype.getUsers = function() {\n var users;\n if (!this.users.length && !this.q.length) {\n users = this.activeUsers;\n } else {\n users = this.users;\n }\n users = users.slice(0, this.limit);\n users = _.reject(users, {\n \"selected\": true\n });\n return _.reject(users, {\n \"id\": this.currentOwnerId\n });\n };\n\n ChangeOwnerLightboxController.prototype.userSearch = function() {\n this.users = this.activeUsers;\n this.selected = _.find(this.users, {\n \"selected\": true\n });\n if (this.q) {\n return this.users = _.filter(this.users, this.filterUsers.bind(this));\n }\n };\n\n ChangeOwnerLightboxController.prototype.selectUser = function(user) {\n this.activeUsers = _.map(this.activeUsers, function(user) {\n user.selected = false;\n return user;\n });\n user.selected = true;\n return this.userSearch();\n };\n\n ChangeOwnerLightboxController.prototype.submit = function() {\n this.loading = true;\n return this.rs.projects.transferStart(this.projectId, this.selected.id, this.comment).then((function(_this) {\n return function() {\n var desc, title;\n _this.loading = false;\n _this.lightboxService.closeAll();\n title = _this.translate.instant(\"ADMIN.PROJECT_PROFILE.CHANGE_OWNER_SUCCESS_TITLE\");\n desc = _this.translate.instant(\"ADMIN.PROJECT_PROFILE.CHANGE_OWNER_SUCCESS_DESC\");\n return _this.confirm.success(title, desc, {\n type: \"svg\",\n name: \"icon-speak-up\"\n });\n };\n })(this));\n };\n\n return ChangeOwnerLightboxController;\n\n })();\n\n ChangeOwnerLightboxController.$inject = [\"tgResources\", \"lightboxService\", \"$tgConfirm\", \"$translate\"];\n\n module.controller('ChangeOwnerLightbox', ChangeOwnerLightboxController);\n\n ChangeOwnerLightboxDirective = function(lightboxService, lightboxKeyboardNavigationService, $template, $compile) {\n var link;\n link = function(scope, el) {\n return lightboxService.open(el);\n };\n return {\n scope: true,\n controller: \"ChangeOwnerLightbox\",\n controllerAs: \"vm\",\n bindToController: {\n currentOwnerId: \"=\",\n projectId: \"=\",\n activeUsers: \"=\"\n },\n templateUrl: \"common/lightbox/lightbox-change-owner.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbChangeOwner\", [\"lightboxService\", \"lightboxKeyboardNavigationService\", \"$tgTemplate\", \"$compile\", ChangeOwnerLightboxDirective]);\n\n TransferProjectStartSuccessDirective = function(lightboxService) {\n var link;\n link = function(scope, el) {\n scope.close = function() {\n return lightboxService.close(el);\n };\n return lightboxService.open(el);\n };\n return {\n templateUrl: \"common/lightbox/lightbox-transfer-project-start-success.html\",\n link: link\n };\n };\n\n module.directive(\"tgLbTransferProjectStartSuccess\", [\"lightboxService\", TransferProjectStartSuccessDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/memberships.coffee\n */\n\n(function() {\n var MembershipsController, MembershipsDirective, MembershipsRowActionsDirective, MembershipsRowAdminCheckboxDirective, MembershipsRowAvatarDirective, MembershipsRowRoleSelectorDirective, NoMoreMembershipsExplanationDirective, bindMethods, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaAdmin\");\n\n MembershipsController = (function(superClass) {\n extend(MembershipsController, superClass);\n\n MembershipsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAnalytics\", \"tgAppMetaService\", \"$translate\", \"$tgAuth\", \"tgLightboxFactory\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function MembershipsController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, analytics, appMetaService, translate, auth, lightboxFactory1, errorHandlingService, projectService1) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.auth = auth;\n this.lightboxFactory = lightboxFactory1;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService1;\n bindMethods(this);\n this.scope.project = {};\n this.scope.filters = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.MEMBERSHIPS.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"membersform:new:success\", (function(_this) {\n return function() {\n _this.loadInitialData();\n return _this.analytics.trackEvent(\"membership\", \"create\", \"create memberships on admin\", 1);\n };\n })(this));\n }\n\n MembershipsController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.canAddUsers = project.max_memberships === null || project.max_memberships > project.total_memberships;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n MembershipsController.prototype.loadMembers = function() {\n var httpFilters;\n httpFilters = this.getUrlFilters();\n return this.rs.memberships.list(this.scope.projectId, httpFilters).then((function(_this) {\n return function(data) {\n _this.scope.memberships = _.filter(data.models, function(membership) {\n return membership.user === null || membership.is_user_active;\n });\n _.map(_this.scope.memberships, function(member) {\n if (member.is_owner) {\n return _this.scope.projectOwnerEmail = member.user_email;\n }\n });\n _this.scope.page = data.current;\n _this.scope.count = data.count;\n _this.scope.paginatedBy = data.paginatedBy;\n return data;\n };\n })(this));\n };\n\n MembershipsController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.q.all([this.loadMembers(), this.auth.refresh()]);\n };\n\n MembershipsController.prototype.getUrlFilters = function() {\n var filters;\n filters = _.pick(this.location.search(), \"page\");\n if (!filters.page) {\n filters.page = 1;\n }\n return filters;\n };\n\n MembershipsController.prototype.addNewMembers = function() {\n return this.lightboxFactory.create('tg-lb-add-members', {\n \"class\": \"lightbox lightbox-add-member\",\n \"project\": \"project\"\n }, {\n \"project\": this.scope.project\n });\n };\n\n MembershipsController.prototype.showLimitUsersWarningMessage = function() {\n var icon, message, title;\n title = this.translate.instant(\"ADMIN.MEMBERSHIPS.LIMIT_USERS_WARNING\");\n message = this.translate.instant(\"ADMIN.MEMBERSHIPS.LIMIT_USERS_WARNING_MESSAGE\", {\n members: this.scope.project.max_memberships\n });\n icon = \"/\" + window._version + \"/svg/icons/team-question.svg\";\n return this.confirm.success(title, message, {\n name: icon,\n type: \"img\"\n });\n };\n\n return MembershipsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"MembershipsController\", MembershipsController);\n\n MembershipsDirective = function($template, $compile) {\n var link, linkPagination, template;\n template = $template.get(\"admin/admin-membership-paginator.html\", true);\n linkPagination = function($scope, $el, $attrs, $ctrl) {\n var $pagEl, afterCurrent, atBegin, atEnd, beforeCurrent, getNumPages, renderPagination;\n afterCurrent = 2;\n beforeCurrent = 4;\n atBegin = 2;\n atEnd = 2;\n $pagEl = $el.find(\".memberships-paginator\");\n getNumPages = function() {\n var numPages;\n numPages = $scope.count / $scope.paginatedBy;\n if (parseInt(numPages, 10) < numPages) {\n numPages = parseInt(numPages, 10) + 1;\n } else {\n numPages = parseInt(numPages, 10);\n }\n return numPages;\n };\n renderPagination = function() {\n var cpage, html, i, j, numPages, options, pages, ref;\n numPages = getNumPages();\n if (numPages <= 1) {\n $pagEl.hide();\n return;\n }\n pages = [];\n options = {};\n options.pages = pages;\n options.showPrevious = $scope.page > 1;\n options.showNext = !($scope.page === numPages);\n cpage = $scope.page;\n for (i = j = 1, ref = numPages; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {\n if (i === (cpage + afterCurrent) && numPages > (cpage + afterCurrent + atEnd)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i === (cpage - beforeCurrent) && cpage > (atBegin + beforeCurrent)) {\n pages.push({\n classes: \"dots\",\n type: \"dots\"\n });\n } else if (i > (cpage + afterCurrent) && i <= (numPages - atEnd)) {\n\n } else if (i < (cpage - beforeCurrent) && i > atBegin) {\n\n } else if (i === cpage) {\n pages.push({\n classes: \"active\",\n num: i,\n type: \"page-active\"\n });\n } else {\n pages.push({\n classes: \"page\",\n num: i,\n type: \"page\"\n });\n }\n }\n html = template(options);\n html = $compile(html)($scope);\n $pagEl.html(html);\n return $pagEl.show();\n };\n $scope.$watch(\"memberships\", function(value) {\n if (!value) {\n return;\n }\n return renderPagination();\n });\n $el.on(\"click\", \".memberships-paginator a.next\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page + 1);\n return $ctrl.loadMembers();\n });\n });\n $el.on(\"click\", \".memberships-paginator a.previous\", function(event) {\n event.preventDefault();\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", $scope.page - 1);\n return $ctrl.loadMembers();\n });\n });\n return $el.on(\"click\", \".memberships-paginator li.page > a\", function(event) {\n var pagenum, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n pagenum = target.data(\"pagenum\");\n return $scope.$apply(function() {\n $ctrl.selectFilter(\"page\", pagenum);\n return $ctrl.loadMembers();\n });\n });\n };\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n linkPagination($scope, $el, $attrs, $ctrl);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMemberships\", [\"$tgTemplate\", \"$compile\", MembershipsDirective]);\n\n MembershipsRowAvatarDirective = function($log, $template, $translate, $compile, avatarService) {\n var link, template;\n template = $template.get(\"admin/memberships-row-avatar.html\", true);\n link = function($scope, $el, $attrs) {\n var member, pending, render;\n pending = $translate.instant(\"ADMIN.MEMBERSHIP.STATUS_PENDING\");\n render = function(member) {\n var avatar, ctx, html;\n avatar = avatarService.getAvatar(member);\n ctx = {\n full_name: member.full_name ? member.full_name : \"\",\n email: member.user_email ? member.user_email : member.email,\n imgurl: avatar.url,\n bg: avatar.bg,\n pending: !member.is_user_active ? pending : \"\",\n isOwner: member.is_owner\n };\n html = template(ctx);\n html = $compile(html)($scope);\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowAvatar == null) {\n return $log.error(\"MembershipsRowAvatarDirective: the directive need a member\");\n }\n member = $scope.$eval($attrs.tgMembershipsRowAvatar);\n render(member);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowAvatar\", [\"$log\", \"$tgTemplate\", '$translate', \"$compile\", \"tgAvatarService\", MembershipsRowAvatarDirective]);\n\n MembershipsRowAdminCheckboxDirective = function($log, $repo, $confirm, $template, $compile) {\n var link, template;\n template = $template.get(\"admin/admin-memberships-row-checkbox.html\", true);\n link = function($scope, $el, $attrs) {\n var html, member, render;\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n if ($attrs.tgMembershipsRowAdminCheckbox == null) {\n return $log.error(\"MembershipsRowAdminCheckboxDirective: the directive need a member\");\n }\n member = $scope.$eval($attrs.tgMembershipsRowAdminCheckbox);\n if (member.is_owner) {\n $el.find(\".js-check\").remove();\n return;\n }\n render = function(member) {\n var ctx, html;\n ctx = {\n inputId: \"is-admin-\" + member.id\n };\n html = template(ctx);\n html = $compile(html)($scope);\n return $el.html(html);\n };\n $el.on(\"click\", \":checkbox\", (function(_this) {\n return function(event) {\n var onError, onSuccess, target;\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function(data) {\n member.revert();\n $el.find(\":checkbox\").prop(\"checked\", member.is_admin);\n return $confirm.notify(\"error\", data.is_admin[0]);\n };\n target = angular.element(event.currentTarget);\n member.is_admin = target.prop(\"checked\");\n return $repo.save(member).then(onSuccess, onError);\n };\n })(this));\n html = render(member);\n if (member.is_admin) {\n return $el.find(\":checkbox\").prop(\"checked\", true);\n }\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowAdminCheckbox\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgTemplate\", \"$compile\", MembershipsRowAdminCheckboxDirective]);\n\n MembershipsRowRoleSelectorDirective = function($log, $repo, $confirm) {\n var link, template;\n template = _.template(\"\");\n link = function($scope, $el, $attrs) {\n var $ctrl, html, member, render;\n render = function(member) {\n var ctx, html;\n ctx = {\n roleList: $scope.project.roles,\n selectedRole: member.role\n };\n html = template(ctx);\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowRoleSelector == null) {\n return $log.error(\"MembershipsRowRoleSelectorDirective: the directive need a member\");\n }\n $ctrl = $el.controller();\n member = $scope.$eval($attrs.tgMembershipsRowRoleSelector);\n html = render(member);\n $el.on(\"change\", \"select\", (function(_this) {\n return function(event) {\n var newRole, onError, onSuccess, target;\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n target = angular.element(event.currentTarget);\n newRole = parseInt(target.val(), 10);\n if (member.role !== newRole) {\n member.role = newRole;\n return $repo.save(member).then(onSuccess, onError);\n }\n };\n })(this));\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowRoleSelector\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", MembershipsRowRoleSelectorDirective]);\n\n MembershipsRowActionsDirective = function($log, $repo, $rs, $confirm, $compile, $translate, $location, $navUrls, lightboxFactory, projectService) {\n var activedTemplate, link, pendingTemplate;\n activedTemplate = \"
    \\n
    \\n\\n \\n\";\n pendingTemplate = \"\\n\\n\\n \\n\";\n link = function($scope, $el, $attrs) {\n var $ctrl, leaveConfirm, member, render;\n render = function(member) {\n var html;\n if (member.user) {\n html = $compile(activedTemplate)($scope);\n } else {\n html = $compile(pendingTemplate)($scope);\n }\n return $el.html(html);\n };\n if ($attrs.tgMembershipsRowActions == null) {\n return $log.error(\"MembershipsRowActionsDirective: the directive need a member\");\n }\n $ctrl = $el.controller();\n member = $scope.$eval($attrs.tgMembershipsRowActions);\n render(member);\n $el.on(\"click\", \".js-resend\", function(event) {\n var onError, onSuccess;\n event.preventDefault();\n onSuccess = function() {\n var text;\n text = $translate.instant(\"ADMIN.MEMBERSHIP.SUCCESS_SEND_INVITATION\", {\n email: $scope.member.email\n });\n return $confirm.notify(\"success\", text);\n };\n onError = function() {\n var text;\n text = $translate.instant(\"ADMIM.MEMBERSHIP.ERROR_SEND_INVITATION\");\n return $confirm.notify(\"error\", text);\n };\n return $rs.memberships.resendInvitation($scope.member.id).then(onSuccess, onError);\n });\n leaveConfirm = function() {\n var defaultMsg, message, title;\n title = $translate.instant(\"ADMIN.MEMBERSHIP.DELETE_MEMBER\");\n defaultMsg = $translate.instant(\"ADMIN.MEMBERSHIP.DEFAULT_DELETE_MESSAGE\", {\n email: member.email\n });\n message = member.user ? member.full_name : defaultMsg;\n return $confirm.askOnDelete(title, message).then(function(askResponse) {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n var text;\n askResponse.finish();\n if (member.user !== $scope.user.id) {\n if ($scope.page > 1 && ($scope.count - 1) <= $scope.paginatedBy) {\n $ctrl.selectFilter(\"page\", $scope.page - 1);\n }\n projectService.fetchProject().then(function() {\n return $ctrl.loadInitialData();\n });\n } else {\n $location.path($navUrls.resolve(\"home\"));\n }\n text = $translate.instant(\"ADMIN.MEMBERSHIP.SUCCESS_DELETE\", {\n message: message\n });\n return $confirm.notify(\"success\", text, null, 5000);\n };\n })(this);\n onError = (function(_this) {\n return function() {\n var text;\n askResponse.finish(false);\n text = $translate.instant(\"ADMIN.MEMBERSHIP.ERROR_DELETE\", {\n message: message\n });\n return $confirm.notify(\"error\", text);\n };\n })(this);\n return $repo.remove(member).then(onSuccess, onError);\n });\n };\n $el.on(\"click\", \".delete\", function(event) {\n var isCurrentUser;\n event.preventDefault();\n if ($scope.project.owner.id === member.user) {\n isCurrentUser = $scope.user.id === member.user;\n return lightboxFactory.create(\"tg-lightbox-leave-project-warning\", {\n \"class\": \"lightbox lightbox-leave-project-warning\"\n }, {\n isCurrentUser: isCurrentUser,\n project: $scope.project\n });\n } else {\n return leaveConfirm();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgMembershipsRowActions\", [\"$log\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"$compile\", \"$translate\", \"$tgLocation\", \"$tgNavUrls\", \"tgLightboxFactory\", \"tgProjectService\", MembershipsRowActionsDirective]);\n\n NoMoreMembershipsExplanationDirective = function() {\n return {\n templateUrl: \"admin/no-more-memberships-explanation.html\",\n scope: {\n project: \"=\",\n ownerEmail: \"=\"\n }\n };\n };\n\n module.directive(\"tgNoMoreMembershipsExplanation\", [NoMoreMembershipsExplanationDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/nav.coffee\n */\n\n(function() {\n var AdminNavigationDirective, module;\n\n AdminNavigationDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var section;\n section = $attrs.tgAdminNavigation;\n $el.find(\".active\").removeClass(\"active\");\n $el.find(\"#adminmenu-\" + section + \" a\").addClass(\"active\");\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaAdmin\");\n\n module.directive(\"tgAdminNavigation\", AdminNavigationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/project-profile.coffee\n */\n\n(function() {\n var AdminProjectChangeOwnerDirective, AdminProjectRequestOwnershipDirective, AdminProjectRestrictionsDirective, CsvEpicDirective, CsvExporterController, CsvExporterEpicsController, CsvExporterIssuesController, CsvExporterTasksController, CsvExporterUserstoriesController, CsvIssueDirective, CsvTaskDirective, CsvUsDirective, ProjectDefaultValuesDirective, ProjectExportDirective, ProjectLogoDirective, ProjectLogoModelDirective, ProjectModulesDirective, ProjectProfileController, ProjectProfileDirective, bindOnce, debounce, groupBy, joinStr, mixOf, module, scopeDefer, taiga, toString, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n scopeDefer = this.taiga.scopeDefer;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaAdmin\");\n\n ProjectProfileController = (function(superClass) {\n extend(ProjectProfileController, superClass);\n\n ProjectProfileController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"$translate\", \"$tgAuth\", \"tgCurrentUserService\", \"tgErrorHandlingService\", \"tgProjectService\", \"$tgModel\"];\n\n function ProjectProfileController(scope1, rootscope, repo, confirm, rs, params, q, location, navUrls, appMetaService, translate, tgAuth, currentUserService1, errorHandlingService, projectService1, model1) {\n var promise;\n this.scope = scope1;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.tgAuth = tgAuth;\n this.currentUserService = currentUserService1;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService1;\n this.model = model1;\n this.scope.project = {};\n this.scope.projectTags = [];\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, sectionName, title;\n sectionName = _this.translate.instant(_this.scope.sectionName);\n title = _this.translate.instant(\"ADMIN.PROJECT_PROFILE.PAGE_TITLE\", {\n sectionName: sectionName,\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n _this.appMetaService.setAll(title, description);\n return _this.fillUsersAndRoles(_this.scope.project.members, _this.scope.project.roles);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:loaded\", (function(_this) {\n return function() {\n var description, sectionName, title;\n sectionName = _this.translate.instant(_this.scope.sectionName);\n title = _this.translate.instant(\"ADMIN.PROJECT_PROFILE.PAGE_TITLE\", {\n sectionName: sectionName,\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n }\n\n ProjectProfileController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n project = this.model.make_model(\"projects\", project);\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.epicStatusList = _.sortBy(project.epic_statuses, \"order\");\n this.scope.usStatusList = _.sortBy(project.us_statuses, \"order\");\n this.scope.pointsList = _.sortBy(project.points, \"order\");\n this.scope.taskStatusList = _.sortBy(project.task_statuses, \"order\");\n this.scope.issueTypesList = _.sortBy(project.issue_types, \"order\");\n this.scope.issueStatusList = _.sortBy(project.issue_statuses, \"order\");\n this.scope.prioritiesList = _.sortBy(project.priorities, \"order\");\n this.scope.severitiesList = _.sortBy(project.severities, \"order\");\n scopeDefer(this.scope, (function(_this) {\n return function() {\n return _this.scope.$emit('project:loaded', project);\n };\n })(this));\n this.scope.projectTags = _.map(this.scope.project.tags, (function(_this) {\n return function(it) {\n return [it, _this.scope.project.tags_colors[it]];\n };\n })(this));\n return project;\n };\n\n ProjectProfileController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.tgAuth.refresh();\n };\n\n ProjectProfileController.prototype.openDeleteLightbox = function() {\n return this.rootscope.$broadcast(\"deletelightbox:new\", this.scope.project);\n };\n\n ProjectProfileController.prototype.addTag = function(name, color) {\n var tags;\n tags = _.clone(this.scope.project.tags);\n tags.push(name);\n this.scope.projectTags.push([name, null]);\n return this.scope.project.tags = tags;\n };\n\n ProjectProfileController.prototype.deleteTag = function(tag) {\n var tags;\n tags = _.clone(this.scope.project.tags);\n _.pull(tags, tag[0]);\n _.remove(this.scope.projectTags, (function(_this) {\n return function(it) {\n return it[0] === tag[0];\n };\n })(this));\n return this.scope.project.tags = tags;\n };\n\n return ProjectProfileController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"ProjectProfileController\", ProjectProfileController);\n\n ProjectProfileDirective = function($repo, $confirm, $loading, $navurls, $location, projectService, currentUserService, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, form, submit, submitButton;\n $ctrl = $el.controller();\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, privacyChanged, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n privacyChanged = $scope.project.isAttributeModified(\"is_private\");\n promise = $repo.save($scope.project);\n promise.then(function() {\n var newUrl;\n currentLoading.finish();\n if (privacyChanged && $scope.project.is_private) {\n $analytics.trackEvent(\"project-privacy-changed\", \"from-public-to-private\", \"Change project privacy from public to private\", 1);\n } else if (privacyChanged && !$scope.project.is_private) {\n $analytics.trackEvent(\"project-privacy-changed\", \"from-private-to-public\", \"Change project privacy from private to public\", 1);\n }\n $confirm.notify(\"success\");\n newUrl = $navurls.resolve(\"project-admin-project-profile-details\", {\n project: $scope.project.slug\n });\n $location.path(newUrl);\n projectService.fetchProject().then((function(_this) {\n return function() {\n return $ctrl.loadInitialData();\n };\n })(this));\n return currentUserService.loadProjects();\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n return $el.on(\"submit\", \"form\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectProfile\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgNavUrls\", \"$tgLocation\", \"tgProjectService\", \"tgCurrentUserService\", \"$tgAnalytics\", ProjectProfileDirective]);\n\n ProjectDefaultValuesDirective = function($rootScope, $repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.save($scope.project);\n promise.then(function() {\n currentLoading.finish();\n $confirm.notify(\"success\");\n return $rootScope.$broadcast(\"admin:project-default-values:updated\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectDefaultValues\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", ProjectDefaultValuesDirective]);\n\n ProjectModulesDirective = function($rootScope, $repo, $confirm, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit;\n submit = (function(_this) {\n return function() {\n var form, promise;\n form = $el.find(\"form\").checksley();\n form.initializeFields();\n form.reset();\n if (!form.validate()) {\n return;\n }\n promise = $repo.save($scope.project);\n promise.then(function() {\n $scope.$emit(\"project:loaded\", $scope.project);\n $rootScope.$broadcast(\"admin:project-modules:updated\");\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function(data) {\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this);\n $el.on(\"change\", \".module-activation.module-direct-active input\", function(event) {\n event.preventDefault();\n return $scope.$applyAsync(submit);\n });\n $el.on(\"submit\", \"form\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"click\", \".save\", function(event) {\n event.preventDefault();\n return submit();\n });\n $el.on(\"keydown\", \".videoconference-attributes input\", function(e) {\n return e.which !== 32;\n });\n $scope.$watch(\"project.videoconferences\", function(newVal, oldVal) {\n if ((newVal != null) && (oldVal != null) && newVal !== oldVal) {\n return $scope.project.videoconferences_extra_data = \"\";\n }\n });\n $scope.$watch(\"isVideoconferenceActivated\", function(newValue, oldValue) {\n if (newValue === false) {\n $scope.project.videoconferences = null;\n $scope.project.videoconferences_extra_data = \"\";\n if (oldValue === true) {\n return submit();\n }\n }\n });\n return $scope.$watch(\"project\", function(project) {\n if (project.videoconferences != null) {\n return $scope.isVideoconferenceActivated = true;\n } else {\n return $scope.isVideoconferenceActivated = false;\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectModules\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", ProjectModulesDirective]);\n\n ProjectExportDirective = function($window, $rs, $confirm, $translate, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var asyn_message, buttonsEl, dump_ready_text, hideButtons, hideResult, hideSpinner, loading_msg, loading_title, resultEl, resultMessageEl, resultTitleEl, setAsyncMessage, setAsyncTitle, setLoadingMessage, setLoadingTitle, setSyncMessage, setSyncTitle, showButtons, showErrorMode, showExportResultAsyncMode, showExportResultSyncMode, showLoadingMode, showResult, showSpinner, spinnerEl, syn_message;\n buttonsEl = $el.find(\".admin-project-export-buttons\");\n showButtons = function() {\n return buttonsEl.removeClass(\"hidden\");\n };\n hideButtons = function() {\n return buttonsEl.addClass(\"hidden\");\n };\n resultEl = $el.find(\".admin-project-export-result\");\n showResult = function() {\n return resultEl.removeClass(\"hidden\");\n };\n hideResult = function() {\n return resultEl.addClass(\"hidden\");\n };\n spinnerEl = $el.find(\".spin\");\n showSpinner = function() {\n return spinnerEl.removeClass(\"hidden\");\n };\n hideSpinner = function() {\n return spinnerEl.addClass(\"hidden\");\n };\n resultTitleEl = $el.find(\".result-title\");\n loading_title = $translate.instant(\"ADMIN.PROJECT_EXPORT.LOADING_TITLE\");\n loading_msg = $translate.instant(\"ADMIN.PROJECT_EXPORT.LOADING_MESSAGE\");\n dump_ready_text = function() {\n return resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.DUMP_READY\"));\n };\n asyn_message = function() {\n return resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.ASYNC_MESSAGE\"));\n };\n syn_message = function(url) {\n return resultTitleEl.html($translate.instant(\"ADMIN.PROJECT_EXPORT.SYNC_MESSAGE\", {\n url: url\n }));\n };\n setLoadingTitle = function() {\n return resultTitleEl.html(loading_title);\n };\n setAsyncTitle = function() {\n return resultTitleEl.html(loading_msg);\n };\n setSyncTitle = function() {\n return resultTitleEl.html(dump_ready_text);\n };\n resultMessageEl = $el.find(\".result-message \");\n setLoadingMessage = function() {\n return resultMessageEl.html(loading_msg);\n };\n setAsyncMessage = function() {\n return resultMessageEl.html(asyn_message);\n };\n setSyncMessage = function(url) {\n return resultMessageEl.html(syn_message(url));\n };\n showLoadingMode = function() {\n showSpinner();\n setLoadingTitle();\n setLoadingMessage();\n hideButtons();\n return showResult();\n };\n showExportResultAsyncMode = function() {\n hideSpinner();\n setAsyncTitle();\n return setAsyncMessage();\n };\n showExportResultSyncMode = function(url) {\n hideSpinner();\n setSyncTitle();\n return setSyncMessage(url);\n };\n showErrorMode = function() {\n hideSpinner();\n hideResult();\n return showButtons();\n };\n return $el.on(\"click\", \"a.button-export\", debounce(2000, (function(_this) {\n return function(event) {\n var onError, onSuccess;\n event.preventDefault();\n onSuccess = function(result) {\n var dumpUrl;\n $analytics.trackEvent(\"exporter\", \"export-project\", \"Exported project\", 1);\n if (result.status === 202) {\n return showExportResultAsyncMode();\n } else {\n dumpUrl = result.data.url;\n showExportResultSyncMode(dumpUrl);\n return $window.open(dumpUrl, \"_blank\");\n }\n };\n onError = function(result) {\n var errorMsg, ref;\n showErrorMode();\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR\");\n if (result.status === 429) {\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR_BUSY\");\n } else if ((ref = result.data) != null ? ref._error_message : void 0) {\n errorMsg = $translate.instant(\"ADMIN.PROJECT_EXPORT.ERROR_BUSY\", {\n message: result.data._error_message\n });\n }\n return $confirm.notify(\"error\", errorMsg);\n };\n showLoadingMode();\n return $rs.projects[\"export\"]($scope.projectId).then(onSuccess, onError);\n };\n })(this)));\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectExport\", [\"$window\", \"$tgResources\", \"$tgConfirm\", \"$translate\", \"$tgAnalytics\", ProjectExportDirective]);\n\n CsvExporterController = (function(superClass) {\n extend(CsvExporterController, superClass);\n\n CsvExporterController.$inject = [\"$scope\", \"$rootScope\", \"$tgUrls\", \"$tgConfirm\", \"$tgResources\", \"$translate\"];\n\n function CsvExporterController(scope1, rootscope, urls, confirm, rs, translate) {\n this.scope = scope1;\n this.rootscope = rootscope;\n this.urls = urls;\n this.confirm = confirm;\n this.rs = rs;\n this.translate = translate;\n this._deleteUuid = bind(this._deleteUuid, this);\n this._generateUuid = bind(this._generateUuid, this);\n this.setCsvUuid = bind(this.setCsvUuid, this);\n this.rootscope.$on(\"project:loaded\", this.setCsvUuid);\n this.scope.$watch(\"csvUuid\", (function(_this) {\n return function(value) {\n if (value) {\n return _this.scope.csvUrl = _this.urls.resolveAbsolute(_this.type + \"-csv\", value);\n } else {\n return _this.scope.csvUrl = \"\";\n }\n };\n })(this));\n }\n\n CsvExporterController.prototype.setCsvUuid = function() {\n return this.scope.csvUuid = this.scope.project[this.type + \"_csv_uuid\"];\n };\n\n CsvExporterController.prototype._generateUuid = function(response) {\n var promise;\n if (response == null) {\n response = null;\n }\n promise = this.rs.projects[\"regenerate_\" + this.type + \"_csv_uuid\"](this.scope.projectId);\n promise.then((function(_this) {\n return function(data) {\n var ref;\n return _this.scope.csvUuid = (ref = data.data) != null ? ref.uuid : void 0;\n };\n })(this));\n promise.then(null, (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n promise[\"finally\"](function() {\n if (response) {\n return response.finish();\n }\n });\n return promise;\n };\n\n CsvExporterController.prototype._deleteUuid = function(response) {\n var promise;\n if (response == null) {\n response = null;\n }\n promise = this.rs.projects[\"delete_\" + this.type + \"_csv_uuid\"](this.scope.projectId);\n promise.then((function(_this) {\n return function(data) {\n var ref;\n return _this.scope.csvUuid = (ref = data.data) != null ? ref.uuid : void 0;\n };\n })(this));\n promise.then(null, (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n promise[\"finally\"](function() {\n if (response) {\n return response.finish();\n }\n });\n return promise;\n };\n\n CsvExporterController.prototype.regenerateUuid = function() {\n var subtitle, title;\n if (this.scope.csvUuid) {\n title = this.translate.instant(\"ADMIN.REPORTS.REGENERATE_TITLE\");\n subtitle = this.translate.instant(\"ADMIN.REPORTS.REGENERATE_SUBTITLE\");\n return this.confirm.ask(title, subtitle).then(this._generateUuid);\n } else {\n return this._generateUuid();\n }\n };\n\n CsvExporterController.prototype.deleteUuid = function() {\n var subtitle, title;\n if (this.scope.csvUuid) {\n title = this.translate.instant(\"ADMIN.REPORTS.DELETE_TITLE\");\n subtitle = this.translate.instant(\"ADMIN.REPORTS.DELETE_SUBTITLE\");\n return this.confirm.ask(title, subtitle).then(this._deleteUuid);\n } else {\n return this._deleteUuid();\n }\n };\n\n return CsvExporterController;\n\n })(taiga.Controller);\n\n CsvExporterEpicsController = (function(superClass) {\n extend(CsvExporterEpicsController, superClass);\n\n function CsvExporterEpicsController() {\n return CsvExporterEpicsController.__super__.constructor.apply(this, arguments);\n }\n\n CsvExporterEpicsController.prototype.type = \"epics\";\n\n return CsvExporterEpicsController;\n\n })(CsvExporterController);\n\n CsvExporterUserstoriesController = (function(superClass) {\n extend(CsvExporterUserstoriesController, superClass);\n\n function CsvExporterUserstoriesController() {\n return CsvExporterUserstoriesController.__super__.constructor.apply(this, arguments);\n }\n\n CsvExporterUserstoriesController.prototype.type = \"userstories\";\n\n return CsvExporterUserstoriesController;\n\n })(CsvExporterController);\n\n CsvExporterTasksController = (function(superClass) {\n extend(CsvExporterTasksController, superClass);\n\n function CsvExporterTasksController() {\n return CsvExporterTasksController.__super__.constructor.apply(this, arguments);\n }\n\n CsvExporterTasksController.prototype.type = \"tasks\";\n\n return CsvExporterTasksController;\n\n })(CsvExporterController);\n\n CsvExporterIssuesController = (function(superClass) {\n extend(CsvExporterIssuesController, superClass);\n\n function CsvExporterIssuesController() {\n return CsvExporterIssuesController.__super__.constructor.apply(this, arguments);\n }\n\n CsvExporterIssuesController.prototype.type = \"issues\";\n\n return CsvExporterIssuesController;\n\n })(CsvExporterController);\n\n module.controller(\"CsvExporterEpicsController\", CsvExporterEpicsController);\n\n module.controller(\"CsvExporterUserstoriesController\", CsvExporterUserstoriesController);\n\n module.controller(\"CsvExporterTasksController\", CsvExporterTasksController);\n\n module.controller(\"CsvExporterIssuesController\", CsvExporterIssuesController);\n\n CsvEpicDirective = function($translate) {\n var link;\n link = function($scope) {\n return $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_EPIC\";\n };\n return {\n controller: \"CsvExporterEpicsController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgCsvEpic\", [\"$translate\", CsvEpicDirective]);\n\n CsvUsDirective = function($translate) {\n var link;\n link = function($scope) {\n return $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_US\";\n };\n return {\n controller: \"CsvExporterUserstoriesController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgCsvUs\", [\"$translate\", CsvUsDirective]);\n\n CsvTaskDirective = function($translate) {\n var link;\n link = function($scope) {\n return $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_TASK\";\n };\n return {\n controller: \"CsvExporterTasksController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgCsvTask\", [\"$translate\", CsvTaskDirective]);\n\n CsvIssueDirective = function($translate) {\n var link;\n link = function($scope) {\n return $scope.sectionTitle = \"ADMIN.CSV.SECTION_TITLE_ISSUE\";\n };\n return {\n controller: \"CsvExporterIssuesController\",\n controllerAs: \"ctrl\",\n templateUrl: \"admin/project-csv.html\",\n link: link,\n scope: true\n };\n };\n\n module.directive(\"tgCsvIssue\", [\"$translate\", CsvIssueDirective]);\n\n ProjectLogoDirective = function($auth, $model, $rs, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n var onError, onSuccess, showSizeInfo;\n showSizeInfo = function() {\n return $el.find(\".size-info\").addClass(\"active\");\n };\n onSuccess = function(response) {\n var project;\n project = $model.make_model(\"projects\", response.data);\n $scope.project = project;\n $el.find('.loading-overlay').removeClass('active');\n return $confirm.notify('success');\n };\n onError = function(response) {\n if (response.status === 413) {\n showSizeInfo();\n }\n $el.find('.loading-overlay').removeClass('active');\n return $confirm.notify('error', response.data._error_message);\n };\n $el.on(\"click\", \".js-change-logo\", function() {\n return $el.find(\"#logo-field\").click();\n });\n $el.on(\"change\", \"#logo-field\", function(event) {\n if ($scope.logoAttachment) {\n $el.find('.loading-overlay').addClass(\"active\");\n return $rs.projects.changeLogo($scope.project.id, $scope.logoAttachment).then(onSuccess, onError);\n }\n });\n $el.on(\"click\", \"a.js-use-default-logo\", function(event) {\n $el.find('.loading-overlay').addClass(\"active\");\n return $rs.projects.removeLogo($scope.project.id).then(onSuccess, onError);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectLogo\", [\"$tgAuth\", \"$tgModel\", \"$tgResources\", \"$tgConfirm\", ProjectLogoDirective]);\n\n ProjectLogoModelDirective = function($parse) {\n var link;\n link = function($scope, $el, $attrs) {\n var model, modelSetter;\n model = $parse($attrs.tgProjectLogoModel);\n modelSetter = model.assign;\n return $el.bind('change', function() {\n return $scope.$apply(function() {\n return modelSetter($scope, $el[0].files[0]);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive('tgProjectLogoModel', ['$parse', ProjectLogoModelDirective]);\n\n AdminProjectRestrictionsDirective = function() {\n return {\n scope: {\n \"project\": \"=\"\n },\n templateUrl: \"admin/admin-project-restrictions.html\"\n };\n };\n\n module.directive('tgAdminProjectRestrictions', [AdminProjectRestrictionsDirective]);\n\n AdminProjectRequestOwnershipDirective = function(lightboxFactory) {\n return {\n link: function(scope) {\n return scope.requestOwnership = function() {\n return lightboxFactory.create(\"tg-lb-request-ownership\", {\n \"class\": \"lightbox lightbox-request-ownership\"\n }, {\n projectId: scope.projectId\n });\n };\n },\n scope: {\n \"projectId\": \"=\",\n \"owner\": \"=\"\n },\n templateUrl: \"admin/admin-project-request-ownership.html\"\n };\n };\n\n module.directive('tgAdminProjectRequestOwnership', [\"tgLightboxFactory\", AdminProjectRequestOwnershipDirective]);\n\n AdminProjectChangeOwnerDirective = function(lightboxFactory) {\n return {\n link: function(scope) {\n return scope.changeOwner = function() {\n return lightboxFactory.create(\"tg-lb-change-owner\", {\n \"class\": \"lightbox lightbox-select-user\",\n \"project-id\": \"projectId\",\n \"active-users\": \"activeUsers\",\n \"current-owner-id\": \"currentOwnerId\"\n }, {\n projectId: scope.projectId,\n activeUsers: scope.activeUsers,\n currentOwnerId: scope.owner.id,\n members: scope.members\n });\n };\n },\n scope: {\n \"activeUsers\": \"=\",\n \"projectId\": \"=\",\n \"owner\": \"=\",\n \"members\": \"=\"\n },\n templateUrl: \"admin/admin-project-change-owner.html\"\n };\n };\n\n module.directive('tgAdminProjectChangeOwner', [\"tgLightboxFactory\", AdminProjectChangeOwnerDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/project-values.coffee\n */\n\n(function() {\n var CHECKBOX_TYPE, ColorSelectionDirective, DATE_TYPE, DROPDOWN_TYPE, MULTILINE_TYPE, NUMBER_TYPE, ProjectCustomAttributesController, ProjectCustomAttributesDirective, ProjectDueDatesValues, ProjectDueDatesValuesController, ProjectTagsController, ProjectTagsDirective, ProjectValuesController, ProjectValuesDirective, ProjectValuesSectionController, RICHTEXT_TYPE, TEXT_TYPE, TYPE_CHOICES, URL_TYPE, bindOnce, debounce, getDefaulColorList, groupBy, joinStr, mixOf, module, taiga, toString, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n trim = this.taiga.trim;\n\n toString = this.taiga.toString;\n\n joinStr = this.taiga.joinStr;\n\n groupBy = this.taiga.groupBy;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n getDefaulColorList = this.taiga.getDefaulColorList;\n\n module = angular.module(\"taigaAdmin\");\n\n ProjectValuesSectionController = (function(superClass) {\n extend(ProjectValuesSectionController, superClass);\n\n ProjectValuesSectionController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function ProjectValuesSectionController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, appMetaService, translate, errorHandlingService, projectService1) {\n var description, sectionName, title;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService1;\n this.scope.project = {};\n this.loadInitialData();\n sectionName = this.translate.instant(this.scope.sectionName);\n title = this.translate.instant(\"ADMIN.PROJECT_VALUES.PAGE_TITLE\", {\n \"sectionName\": sectionName,\n \"projectName\": this.scope.project.name\n });\n description = this.scope.project.description;\n this.appMetaService.setAll(title, description);\n }\n\n ProjectValuesSectionController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n ProjectValuesSectionController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return promise;\n };\n\n return ProjectValuesSectionController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"ProjectValuesSectionController\", ProjectValuesSectionController);\n\n ProjectValuesController = (function(superClass) {\n extend(ProjectValuesController, superClass);\n\n ProjectValuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\"];\n\n function ProjectValuesController(scope, rootscope, repo, confirm, rs) {\n var unwatch;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.moveValue = bind(this.moveValue, this);\n this.loadValues = bind(this.loadValues, this);\n this.scope.$on(\"admin:project-values:move\", this.moveValue);\n unwatch = this.scope.$watch(\"resource\", (function(_this) {\n return function(resource) {\n if (resource) {\n _this.loadValues();\n return unwatch();\n }\n };\n })(this));\n }\n\n ProjectValuesController.prototype.loadValues = function() {\n return this.rs[this.scope.resource].listValues(this.scope.projectId, this.scope.type).then((function(_this) {\n return function(values) {\n if (values.length) {\n _this.scope.values = values;\n _this.scope.maxValueOrder = _.maxBy(values, \"order\").order;\n }\n return values;\n };\n })(this));\n };\n\n ProjectValuesController.prototype.moveValue = function(ctx, itemValue, itemIndex) {\n var r, values;\n values = this.scope.values;\n r = values.indexOf(itemValue);\n values.splice(r, 1);\n values.splice(itemIndex, 0, itemValue);\n _.each(values, function(value, index) {\n return value.order = index;\n });\n return this.repo.saveAll(values).then((function(_this) {\n return function() {\n return _this.rootscope.$broadcast(\"admin:project-values:updated\");\n };\n })(this));\n };\n\n return ProjectValuesController;\n\n })(taiga.Controller);\n\n module.controller(\"ProjectValuesController\", ProjectValuesController);\n\n ProjectDueDatesValuesController = (function(superClass) {\n extend(ProjectDueDatesValuesController, superClass);\n\n function ProjectDueDatesValuesController() {\n this.displayValues = bind(this.displayValues, this);\n this.createDefaultValues = bind(this.createDefaultValues, this);\n this.loadValues = bind(this.loadValues, this);\n return ProjectDueDatesValuesController.__super__.constructor.apply(this, arguments);\n }\n\n ProjectDueDatesValuesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\"];\n\n ProjectDueDatesValuesController.prototype.loadValues = function() {\n return this.rs[this.scope.resource].listValues(this.scope.projectId, this.scope.type).then((function(_this) {\n return function(values) {\n if (values.length) {\n _this.scope.maxValueOrder = _.maxBy(values, \"order\").order;\n _this.displayValues(values);\n } else {\n _this.createDefaultValues();\n }\n return values;\n };\n })(this));\n };\n\n ProjectDueDatesValuesController.prototype.createDefaultValues = function() {\n if (this.rs[this.scope.resource].createDefaultValues == null) {\n return;\n }\n return this.rs[this.scope.resource].createDefaultValues(this.scope.projectId, this.scope.type).then((function(_this) {\n return function(response) {\n var values;\n _this.rootscope.$broadcast(\"admin:project-values:updated\");\n values = response.data;\n if (values.length) {\n _this.scope.maxValueOrder = _.maxBy(values, \"order\").order;\n _this.displayValues(values);\n }\n return values;\n };\n })(this));\n };\n\n ProjectDueDatesValuesController.prototype.displayValues = function(values) {\n _.each(values, function(value, index) {\n value.days_to_due_abs = value.days_to_due !== null ? Math.abs(value.days_to_due) : null;\n return value.sign = value.days_to_due >= 0 ? 1 : -1;\n });\n return this.scope.values = values;\n };\n\n return ProjectDueDatesValuesController;\n\n })(ProjectValuesController);\n\n module.controller(\"ProjectDueDatesValuesController\", ProjectDueDatesValuesController);\n\n ProjectValuesDirective = function($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope, projectService) {\n var link, linkDragAndDrop, linkValue;\n linkDragAndDrop = function($scope, $el, $attrs) {\n var drake, itemEl, newParentScope, oldParentScope, scroll, tdom;\n oldParentScope = null;\n newParentScope = null;\n itemEl = null;\n tdom = $el.find(\".sortable\");\n drake = dragula([tdom[0]], {\n direction: 'vertical',\n copySortSource: false,\n copy: false,\n mirrorContainer: tdom[0],\n moves: function(item) {\n return $(item).is('div[tg-bind-scope]');\n }\n });\n drake.on('dragend', function(item) {\n var itemIndex, itemValue;\n itemEl = $(item);\n itemValue = itemEl.scope().value;\n itemIndex = itemEl.index();\n return $scope.$broadcast(\"admin:project-values:move\", itemValue, itemIndex);\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return drake.destroy();\n });\n };\n linkValue = function($scope, $el, $attrs) {\n var $ctrl, cancel, goToBottomList, initializeNewValue, initializeTextTranslations, objName, saveNewValue, saveValue, valueType;\n $ctrl = $el.controller();\n valueType = $attrs.type;\n objName = $attrs.objname;\n initializeNewValue = function() {\n return $scope.newValue = {\n \"name\": \"\",\n \"is_closed\": false,\n \"is_archived\": false\n };\n };\n initializeTextTranslations = function() {\n return $scope.addNewElementText = $translate.instant(\"ADMIN.PROJECT_VALUES_\" + (objName.toUpperCase()) + \".ACTION_ADD\");\n };\n initializeNewValue();\n initializeTextTranslations();\n $rootscope.$on(\"$translateChangeEnd\", function() {\n return $scope.$evalAsync(initializeTextTranslations);\n });\n goToBottomList = (function(_this) {\n return function(focus) {\n var table;\n if (focus == null) {\n focus = false;\n }\n table = $el.find(\".table-main\");\n $(document.body).scrollTop(table.offset().top + table.height());\n if (focus) {\n return $el.find(\".new-value input:visible\").first().focus();\n }\n };\n })(this);\n saveValue = function(target) {\n var form, formEl, promise, value;\n formEl = target.parents(\"form\");\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n value = formEl.scope().value;\n promise = $repo.save(value);\n promise.then(function() {\n var row;\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n row.siblings(\".visualization\").removeClass('hidden');\n $rootscope.$broadcast(\"admin:project-values:updated\");\n return projectService.fetchProject();\n });\n return promise.then(null, function(data) {\n return form.setErrors(data);\n });\n };\n saveNewValue = function(target) {\n var form, formEl, promise;\n formEl = target.parents(\"form\");\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n $scope.newValue.project = $scope.project.id;\n $scope.newValue.order = $scope.maxValueOrder ? $scope.maxValueOrder + 1 : 1;\n promise = $repo.create(valueType, $scope.newValue);\n promise.then(function(data) {\n target.addClass(\"hidden\");\n $scope.values.push(data);\n $scope.maxValueOrder = data.order;\n initializeNewValue();\n return $rootscope.$broadcast(\"admin:project-values:updated\");\n });\n return promise.then(null, function(data) {\n return form.setErrors(data);\n });\n };\n cancel = function(target) {\n var formEl, row, value;\n row = target.parents(\".row.table-main\");\n formEl = target.parents(\"form\");\n value = formEl.scope().value;\n return $scope.$apply(function() {\n row.addClass(\"hidden\");\n value.revert();\n return row.siblings(\".visualization\").removeClass('hidden');\n });\n };\n $el.on(\"click\", \".show-add-new\", function(event) {\n event.preventDefault();\n $el.find(\".new-value\").removeClass('hidden');\n return goToBottomList(true);\n });\n $el.on(\"click\", \".add-new\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n }));\n $el.on(\"click\", \".delete-new\", function(event) {\n event.preventDefault();\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n });\n $el.on(\"click\", \".edit-value\", function(event) {\n var editionRow, row, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n editionRow = row.siblings(\".edition\");\n editionRow.removeClass('hidden');\n return editionRow.find('input:visible').first().focus().select();\n });\n $el.on(\"keyup\", \".new-value input\", function(event) {\n var target;\n if (event.keyCode === 13) {\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n } else if (event.keyCode === 27) {\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return saveValue(target);\n });\n $el.on(\"click\", \".cancel\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return cancel(target);\n });\n return $el.on(\"click\", \".delete-value\", function(event) {\n var choices, formEl, subtitle, target, text, title, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n formEl = target.parents(\"form\");\n value = formEl.scope().value;\n choices = {};\n _.each($scope.values, function(option) {\n if (value.id !== option.id) {\n return choices[option.id] = option.name;\n }\n });\n subtitle = value.name;\n if (_.keys(choices).length === 0) {\n return $confirm.error($translate.instant(\"ADMIN.PROJECT_VALUES.ERROR_DELETE_ALL\"));\n }\n title = $translate.instant(\"ADMIN.COMMON.TITLE_ACTION_DELETE_VALUE\");\n text = $translate.instant(\"ADMIN.PROJECT_VALUES.REPLACEMENT\");\n return $confirm.askChoice(title, subtitle, choices, text).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadValues()[\"finally\"](function() {\n $rootscope.$broadcast(\"admin:project-values:updated\");\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $repo.remove(value, {\n \"moveTo\": response.selected\n }).then(onSucces, onError);\n });\n });\n };\n link = function($scope, $el, $attrs) {\n linkDragAndDrop($scope, $el, $attrs);\n linkValue($scope, $el, $attrs);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectValues\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", \"$translate\", \"$rootScope\", \"tgProjectService\", ProjectValuesDirective]);\n\n ProjectDueDatesValues = function($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope, projectService) {\n var linkDueDateStatusValue, parentDirective;\n parentDirective = ProjectValuesDirective($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope, projectService);\n linkDueDateStatusValue = function($scope, $el, $attrs, $ctrl) {\n var _setDaysToDue, _valueFromEventTarget, initializeNewValue, saveNewValue, valueType;\n $ctrl = $el.controller();\n valueType = $attrs.type;\n initializeNewValue = function() {\n return $scope.newValue = {\n \"name\": \"\",\n \"days_to_due\": 0,\n \"sign\": 1\n };\n };\n initializeNewValue();\n _setDaysToDue = function(value) {\n return value.days_to_due = value.days_to_due_abs * value.sign;\n };\n _valueFromEventTarget = function(event) {\n var formEl, row, target;\n target = angular.element(event.currentTarget);\n row = target.parents(\".row.table-main\");\n formEl = target.parents(\"form\");\n if (!formEl.scope().value) {\n return formEl.scope().newValue;\n } else {\n return formEl.scope().value;\n }\n };\n saveNewValue = function(target) {\n var form, formEl, promise;\n formEl = target.parents(\"form\");\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n $scope.newValue.project = $scope.project.id;\n $scope.newValue.order = $scope.maxValueOrder ? $scope.maxValueOrder + 1 : 1;\n promise = $repo.create(valueType, $scope.newValue);\n promise.then(function(data) {\n target.addClass(\"hidden\");\n data.sign = $scope.newValue.sign;\n data.days_to_due_abs = $scope.newValue.days_to_due_abs;\n $scope.values.push(data);\n $rootscope.$broadcast(\"admin:project-values:updated\");\n return initializeNewValue();\n });\n return promise.then(null, function(data) {\n return form.setErrors(data);\n });\n };\n $el.on(\"input\", \".days-to-due-abs\", function(event) {\n var value;\n event.preventDefault();\n value = _valueFromEventTarget(event);\n return $scope.$apply(function() {\n return _setDaysToDue(value);\n });\n });\n $el.on(\"click\", \".days-to-due-sign\", function(event) {\n var value;\n event.preventDefault();\n value = _valueFromEventTarget(event);\n return $scope.$apply(function() {\n value.sign = value.sign * -1;\n return _setDaysToDue(value);\n });\n });\n $el.on(\"click\", \".add-new-due-date\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n }));\n return $el.on(\"click\", \".delete-due-date\", function(event) {\n var formEl, subtitle, target, title, value;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n formEl = target.parents(\"form\");\n value = formEl.scope().value;\n title = $translate.instant(\"LIGHTBOX.ADMIN_DUE_DATES.TITLE_ACTION_DELETE_DUE_DATE\");\n subtitle = $translate.instant(\"LIGHTBOX.ADMIN_DUE_DATES.SUBTITLE_ACTION_DELETE_DUE_DATE\", {\n due_date_status_name: value.name\n });\n return $confirm.ask(title, subtitle).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadValues()[\"finally\"](function() {\n $rootscope.$broadcast(\"admin:project-values:updated\");\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $repo.remove(value).then(onSucces, onError);\n });\n });\n };\n return {\n link: function($scope, $el, $attrs) {\n parentDirective.link($scope, $el, $attrs);\n return linkDueDateStatusValue($scope, $el, $attrs);\n }\n };\n };\n\n module.directive(\"tgProjectDueDatesValues\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", \"$translate\", \"$rootScope\", \"tgProjectService\", ProjectDueDatesValues]);\n\n ColorSelectionDirective = function() {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var $ctrl;\n $scope.colorList = getDefaulColorList();\n $scope.allowEmpty = false;\n if ($attrs.tgAllowEmpty) {\n $scope.allowEmpty = true;\n }\n $ctrl = $el.controller();\n $scope.$watch($attrs.ngModel, function(element) {\n return $scope.color = element.color;\n });\n $el.on(\"click\", \".current-color\", function(event) {\n var body, target;\n event.preventDefault();\n event.stopPropagation();\n target = angular.element(event.currentTarget);\n $(\".select-color\").hide();\n target.siblings(\".select-color\").show();\n body = angular.element(\"body\");\n return body.on(\"click\", (function(_this) {\n return function(event) {\n if (angular.element(event.target).parent(\".select-color\").length === 0) {\n $el.find(\".select-color\").hide();\n return body.unbind(\"click\");\n }\n };\n })(this));\n });\n $el.on(\"click\", \".select-color .color\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n $scope.$apply(function() {\n return $model.$modelValue.color = target.data(\"color\");\n });\n return $el.find(\".select-color\").hide();\n });\n $el.on(\"click\", \".select-color .selected-color\", function(event) {\n event.preventDefault();\n $scope.$apply(function() {\n return $model.$modelValue.color = $scope.color;\n });\n return $el.find(\".select-color\").hide();\n });\n $el.on(\"keyup\", \"input\", function(event) {\n event.stopPropagation();\n if (event.keyCode === 13) {\n $scope.$apply(function() {\n return $model.$modelValue.color = $scope.color;\n });\n return $el.find(\".select-color\").hide();\n } else if (event.keyCode === 27) {\n return $el.find(\".select-color\").hide();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgColorSelection\", ColorSelectionDirective);\n\n TEXT_TYPE = \"text\";\n\n MULTILINE_TYPE = \"multiline\";\n\n RICHTEXT_TYPE = \"richtext\";\n\n DATE_TYPE = \"date\";\n\n URL_TYPE = \"url\";\n\n DROPDOWN_TYPE = \"dropdown\";\n\n CHECKBOX_TYPE = \"checkbox\";\n\n NUMBER_TYPE = \"number\";\n\n TYPE_CHOICES = [\n {\n key: TEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_TEXT\"\n }, {\n key: MULTILINE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_MULTI\"\n }, {\n key: RICHTEXT_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_RICHTEXT\"\n }, {\n key: DATE_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DATE\"\n }, {\n key: URL_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_URL\"\n }, {\n key: DROPDOWN_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_DROPDOWN\"\n }, {\n key: CHECKBOX_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_CHECKBOX\"\n }, {\n key: NUMBER_TYPE,\n name: \"ADMIN.CUSTOM_FIELDS.FIELD_TYPE_NUMBER\"\n }\n ];\n\n ProjectCustomAttributesController = (function(superClass) {\n extend(ProjectCustomAttributesController, superClass);\n\n ProjectCustomAttributesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function ProjectCustomAttributesController(scope, rootscope, repo, rs, params, q, location, navUrls, appMetaService, translate, projectService1) {\n var description, sectionName, title;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService1;\n this.moveCustomAttributes = bind(this.moveCustomAttributes, this);\n this.deleteCustomAttribute = bind(this.deleteCustomAttribute, this);\n this.saveCustomAttribute = bind(this.saveCustomAttribute, this);\n this.createCustomAttribute = bind(this.createCustomAttribute, this);\n this.loadCustomAttributes = bind(this.loadCustomAttributes, this);\n this._onCustomAttributesModified = bind(this._onCustomAttributesModified, this);\n this.scope.TYPE_CHOICES = TYPE_CHOICES;\n this.scope.project = this.projectService.project.toJS();\n this.scope.projectId = this.scope.project.id;\n sectionName = this.translate.instant(this.scope.sectionName);\n title = this.translate.instant(\"ADMIN.CUSTOM_ATTRIBUTES.PAGE_TITLE\", {\n \"sectionName\": sectionName,\n \"projectName\": this.scope.project.name\n });\n description = this.scope.project.description;\n this.appMetaService.setAll(title, description);\n this.scope.init = (function(_this) {\n return function(type) {\n _this.scope.type = type;\n return _this.loadCustomAttributes();\n };\n })(this);\n }\n\n ProjectCustomAttributesController.prototype._parseAttributesExtra = function() {\n return this.scope.customAttributes = _.map(this.scope.customAttributes, (function(_this) {\n return function(x) {\n return _this._parseAttributeExtra(x);\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype._parseAttributeExtra = function(attr) {\n if (attr.type === 'dropdown' && !attr.extra) {\n attr.extra = [''];\n }\n return attr;\n };\n\n ProjectCustomAttributesController.prototype._onCustomAttributesModified = function() {\n return this.rootscope.$broadcast(\"admin:project-custom-attributes:updated\");\n };\n\n ProjectCustomAttributesController.prototype.loadCustomAttributes = function() {\n return this.rs.customAttributes[this.scope.type].list(this.scope.projectId).then((function(_this) {\n return function(customAttributes) {\n var ref;\n _this.scope.customAttributes = customAttributes;\n _this.scope.maxOrder = (ref = _.maxBy(customAttributes, \"order\")) != null ? ref.order : void 0;\n _this._parseAttributesExtra();\n return customAttributes;\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype.createCustomAttribute = function(attrValues) {\n return this.repo.create(\"custom-attributes/\" + this.scope.type, attrValues).then((function(_this) {\n return function() {\n return _this._onCustomAttributesModified();\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype.saveCustomAttribute = function(attrModel) {\n return this.repo.save(attrModel).then((function(_this) {\n return function() {\n return _this._onCustomAttributesModified();\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype.deleteCustomAttribute = function(attrModel) {\n return this.repo.remove(attrModel).then((function(_this) {\n return function() {\n return _this._onCustomAttributesModified();\n };\n })(this));\n };\n\n ProjectCustomAttributesController.prototype.moveCustomAttributes = function(attrModel, newIndex) {\n var customAttributes, r;\n customAttributes = this.scope.customAttributes;\n r = customAttributes.indexOf(attrModel);\n customAttributes.splice(r, 1);\n customAttributes.splice(newIndex, 0, attrModel);\n _.each(customAttributes, function(val, idx) {\n return val.order = idx;\n });\n return this.repo.saveAll(customAttributes).then((function(_this) {\n return function() {\n return _this._onCustomAttributesModified();\n };\n })(this));\n };\n\n return ProjectCustomAttributesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"ProjectCustomAttributesController\", ProjectCustomAttributesController);\n\n ProjectCustomAttributesDirective = function($log, $confirm, animationFrame, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, _manageExtraFormEvent, _manageFormEvent, addExtraOption, cancelCreate, cancelUpdate, create, deleteCustomAttribute, hideAddButton, hideCancelButton, hideCreateForm, hideEditForm, hideExtra, initAttrType, initDraggable, removeExtraOption, resetNewAttr, revertChangesInCustomAttribute, showAddButton, showCancelButton, showCreateForm, showEditForm, showExtra, update;\n $ctrl = $el.controller();\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $scope.isExtraVisible = {};\n _manageFormEvent = function(event, callback) {\n var formEl;\n event.preventDefault();\n formEl = angular.element(event.currentTarget).closest(\"form\");\n return callback(formEl);\n };\n initDraggable = function() {\n var drake, el, i, len, results, sortableChildren, sortableEl;\n sortableEl = $el.find(\".js-sortable\");\n drake = dragula([sortableEl[0]], {\n direction: 'vertical',\n copySortSource: false,\n copy: false,\n mirrorContainer: sortableEl[0],\n moves: function(item, source, handle) {\n var childItem;\n childItem = $(handle).closest('.js-child-sortable');\n if (childItem[0]) {\n return false;\n }\n return $(item).is('div[tg-bind-scope]');\n }\n });\n drake.on('dragend', function(item) {\n var itemAttr, itemEl, itemIndex;\n itemEl = $(item);\n itemAttr = itemEl.scope().attr;\n itemIndex = itemEl.index();\n return $ctrl.moveCustomAttributes(itemAttr, itemIndex);\n });\n sortableChildren = $el.find(\".js-child-sortable\");\n results = [];\n for (i = 0, len = sortableChildren.length; i < len; i++) {\n el = sortableChildren[i];\n drake[el] = dragula([el], {\n direction: 'vertical',\n copySortSource: false,\n copy: false,\n mirrorContainer: el,\n moves: function(item) {\n return $(item).is('div[tg-bind-scope]');\n }\n });\n results.push(drake[el].on('dragend', function(item) {\n var attrExtra, itemEl, sourceIndex, targetIndex, value;\n itemEl = $(item);\n attrExtra = itemEl.scope().attr.extra;\n sourceIndex = itemEl.scope().$index;\n targetIndex = itemEl.index();\n value = attrExtra[sourceIndex];\n attrExtra.splice(sourceIndex, 1);\n attrExtra.splice(targetIndex, 0, value);\n itemEl.scope().attr.setAttr('extra', attrExtra);\n return $ctrl.saveCustomAttribute(itemEl.scope().attr).then(function() {\n return $confirm.notify(\"success\");\n });\n }));\n }\n return results;\n };\n showCreateForm = function() {\n $el.find(\".js-new-custom-field\").removeClass(\"hidden\");\n return $el.find(\".js-new-custom-field input:visible\").first().focus();\n };\n hideCreateForm = function() {\n return $el.find(\".js-new-custom-field\").addClass(\"hidden\");\n };\n showAddButton = function() {\n return $el.find(\".js-add-custom-field-button\").removeClass(\"hidden\");\n };\n hideAddButton = function() {\n return $el.find(\".js-add-custom-field-button\").addClass(\"hidden\");\n };\n showCancelButton = function() {\n return $el.find(\".js-cancel-new-custom-field-button\").removeClass(\"hidden\");\n };\n hideCancelButton = function() {\n return $el.find(\".js-cancel-new-custom-field-button\").addClass(\"hidden\");\n };\n resetNewAttr = function() {\n return $scope.newAttr = {};\n };\n create = function(formEl) {\n var attr, form, onError, onSucces;\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n onSucces = function() {\n $ctrl.loadCustomAttributes();\n hideCreateForm();\n resetNewAttr();\n return $confirm.notify(\"success\");\n };\n onError = function(data) {\n return form.setErrors(data);\n };\n attr = $scope.newAttr;\n attr.project = $scope.projectId;\n attr.order = $scope.maxOrder ? $scope.maxOrder + 1 : 1;\n return $ctrl.createCustomAttribute(attr).then(onSucces, onError);\n };\n cancelCreate = function() {\n hideCreateForm();\n return resetNewAttr();\n };\n initAttrType = function(formEl) {\n var attr, ref;\n attr = formEl.scope().newAttr ? formEl.scope().newAttr : formEl.scope().attr;\n if (attr.type !== \"dropdown\") {\n return;\n }\n if ((ref = attr.extra) != null ? ref.length : void 0) {\n return;\n }\n attr.extra = [''];\n if (attr.id) {\n return showEditForm(formEl);\n } else {\n showExtra(-1);\n return formEl.scope().$apply();\n }\n };\n $scope.$watch(\"customAttributes\", function(customAttributes) {\n if (!customAttributes) {\n return;\n }\n if (customAttributes.length === 0) {\n hideCancelButton();\n hideAddButton();\n return showCreateForm();\n } else {\n hideCreateForm();\n showAddButton();\n showCancelButton();\n return initDraggable();\n }\n });\n $el.on(\"change\", \".custom-field-type select\", function(event) {\n return _manageFormEvent(event, initAttrType);\n });\n $el.on(\"click\", \".js-add-custom-field-button\", function(event) {\n return _manageFormEvent(event, showCreateForm);\n });\n $el.on(\"click\", \".js-create-custom-field-button\", debounce(2000, function(event) {\n return _manageFormEvent(event, create);\n }));\n $el.on(\"click\", \".js-cancel-new-custom-field-button\", function(event) {\n event.preventDefault();\n return cancelCreate();\n });\n $el.on(\"keyup\", \".js-new-custom-field input\", function(event) {\n if (event.keyCode === 13) {\n return _manageFormEvent(event, create);\n } else if (event.keyCode === 27) {\n return cancelCreate();\n }\n });\n showEditForm = function(formEl) {\n formEl.find(\".js-view-custom-field\").addClass(\"hidden\");\n formEl.find(\".js-edit-custom-field\").removeClass(\"hidden\");\n formEl.find(\".js-edit-custom-field input:visible\").first().focus().select();\n formEl.find(\".js-view-custom-field-extra\").addClass(\"hidden\");\n formEl.find(\".js-edit-custom-field-extra\").removeClass(\"hidden\");\n formEl.find(\".custom-extra-actions\").removeClass(\"hidden\");\n showExtra(formEl.scope().attr.id);\n return $scope.$apply();\n };\n update = function(formEl) {\n var attr, form, onError, onSucces;\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n onSucces = function() {\n $ctrl.loadCustomAttributes();\n hideEditForm(formEl);\n return $confirm.notify(\"success\");\n };\n onError = function(data) {\n return form.setErrors(data);\n };\n attr = formEl.scope().attr;\n attr.setAttr('extra', attr.extra);\n return $ctrl.saveCustomAttribute(attr).then(onSucces, onError);\n };\n cancelUpdate = function(formEl) {\n hideEditForm(formEl);\n return revertChangesInCustomAttribute(formEl);\n };\n hideEditForm = function(formEl) {\n formEl.find(\".js-edit-custom-field\").addClass(\"hidden\");\n formEl.find(\".js-view-custom-field\").removeClass(\"hidden\");\n formEl.find(\".js-edit-custom-field-extra\").addClass(\"hidden\");\n formEl.find(\".js-view-custom-field-extra\").removeClass(\"hidden\");\n return formEl.find(\".custom-extra-actions\").addClass(\"hidden\");\n };\n revertChangesInCustomAttribute = function(formEl) {\n return $scope.$apply(function() {\n return formEl.scope().attr.revert();\n });\n };\n $el.on(\"click\", \".js-edit-custom-field-button\", function(event) {\n return _manageFormEvent(event, showEditForm);\n });\n $el.on(\"click\", \".js-update-custom-field-button\", debounce(1000, function(event) {\n return _manageFormEvent(event, update);\n }));\n $el.on(\"click\", \".js-cancel-edit-custom-field-button\", function(event) {\n return _manageFormEvent(event, cancelUpdate);\n });\n $el.on(\"keyup\", \".js-edit-custom-field input\", function(event) {\n if (event.keyCode === 13) {\n return _manageFormEvent(event, update);\n } else if (event.keyCode === 27) {\n return _manageFormEvent(event, cancelUpdate);\n }\n });\n deleteCustomAttribute = function(formEl) {\n var attr, message, text, title;\n attr = formEl.scope().attr;\n message = attr.name;\n title = $translate.instant(\"COMMON.CUSTOM_ATTRIBUTES.DELETE\");\n text = $translate.instant(\"COMMON.CUSTOM_ATTRIBUTES.CONFIRM_DELETE\");\n return $confirm.ask(title, text, message).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadCustomAttributes()[\"finally\"](function() {\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\", null, \"We have not been able to delete '\" + message + \"'.\");\n };\n return $ctrl.deleteCustomAttribute(attr).then(onSucces, onError);\n });\n };\n $el.on(\"click\", \".js-delete-custom-field-button\", debounce(2000, function(event) {\n return _manageFormEvent(event, deleteCustomAttribute);\n }));\n $scope.toggleExtraVisible = function(index) {\n if (!$scope.isExtraVisible[index]) {\n return showExtra(index);\n } else {\n return hideExtra(index);\n }\n };\n showExtra = function(index) {\n return $scope.isExtraVisible[index] = true;\n };\n hideExtra = function(index) {\n return $scope.isExtraVisible[index] = false;\n };\n _manageExtraFormEvent = function(event, callback) {\n var formEl, formExtraEl;\n event.preventDefault();\n formEl = angular.element(event.currentTarget).closest(\"form\");\n formExtraEl = angular.element(event.currentTarget).closest(\".js-form\");\n return callback(formEl, formExtraEl);\n };\n addExtraOption = function(formEl, formExtraEl) {\n var attrExtra, formScope, ref;\n formScope = formEl.scope();\n attrExtra = ((ref = formScope.newAttr) != null ? ref.extra : void 0) ? formScope.newAttr.extra : formScope.attr.extra;\n attrExtra.push(\"\");\n formScope.$apply();\n formEl.find(\".js-edit-custom-field-extra\").last().removeClass(\"hidden\");\n formEl.find(\".js-view-custom-field-extra\").last().addClass(\"hidden\");\n return formEl.find(\".js-edit-custom-field-extra input\").last().focus();\n };\n removeExtraOption = function(formEl, formExtraEl) {\n var attrExtra;\n attrExtra = formEl.scope().attr.extra;\n attrExtra.splice(formExtraEl.scope().$index, 1);\n return formExtraEl.scope().$apply();\n };\n $el.on(\"keyup\", \".js-edit-custom-field-extra input\", function(event) {\n if (event.keyCode === 13) {\n return _manageFormEvent(event, update);\n } else if (event.keyCode === 27) {\n return _manageFormEvent(event, cancelUpdate);\n }\n });\n $el.on(\"keyup\", \".js-new-custom-field-extra input\", function(event) {\n if (event.keyCode === 13) {\n return _manageFormEvent(event, create);\n } else if (event.keyCode === 27) {\n return cancelCreate();\n }\n });\n $el.on(\"click\", \".js-add-option-custom-field-extra-button\", debounce(500, function(event) {\n return _manageExtraFormEvent(event, addExtraOption);\n }));\n return $el.on(\"click\", \".js-delete-custom-field-extra-button\", debounce(500, function(event) {\n return _manageExtraFormEvent(event, removeExtraOption);\n }));\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectCustomAttributes\", [\"$log\", \"$tgConfirm\", \"animationFrame\", \"$translate\", ProjectCustomAttributesDirective]);\n\n ProjectTagsController = (function(superClass) {\n extend(ProjectTagsController, superClass);\n\n ProjectTagsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$tgModel\", \"tgProjectService\"];\n\n function ProjectTagsController(scope, rootscope, repo, confirm, rs, model, projectService1) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.model = model;\n this.projectService = projectService1;\n this.mixingClass = bind(this.mixingClass, this);\n this.cancelMixingTags = bind(this.cancelMixingTags, this);\n this.confirmMixingTags = bind(this.confirmMixingTags, this);\n this.toggleMixingFromTags = bind(this.toggleMixingFromTags, this);\n this.startMixingTags = bind(this.startMixingTags, this);\n this.deleteTag = bind(this.deleteTag, this);\n this.editTag = bind(this.editTag, this);\n this.createTag = bind(this.createTag, this);\n this.filterAndSortTags = bind(this.filterAndSortTags, this);\n this.loadTags = bind(this.loadTags, this);\n this.loading = true;\n this.loadTags();\n }\n\n ProjectTagsController.prototype.loadTags = function() {\n var project;\n project = this.projectService.project.toJS();\n return this.rs.projects.tagsColors(project.id).then((function(_this) {\n return function(tags) {\n _this.scope.projectTagsAll = _.map(tags.getAttrs(), function(color, name) {\n return _this.model.make_model('tag', {\n name: name,\n color: color\n });\n });\n _this.filterAndSortTags();\n return _this.loading = false;\n };\n })(this));\n };\n\n ProjectTagsController.prototype.filterAndSortTags = function() {\n this.scope.projectTags = _.sortBy(this.scope.projectTagsAll, function(it) {\n return it.name.toLowerCase();\n });\n return this.scope.projectTags = _.filter(this.scope.projectTags, (function(_this) {\n return function(tag) {\n return tag.name.indexOf(_this.scope.tagsFilter.name) !== -1;\n };\n })(this));\n };\n\n ProjectTagsController.prototype.createTag = function(tag, color) {\n return this.rs.projects.createTag(this.scope.projectId, tag, color);\n };\n\n ProjectTagsController.prototype.editTag = function(from_tag, to_tag, color) {\n if (from_tag === to_tag) {\n to_tag = null;\n }\n return this.rs.projects.editTag(this.scope.projectId, from_tag, to_tag, color);\n };\n\n ProjectTagsController.prototype.deleteTag = function(tag) {\n this.scope.loadingDelete = true;\n return this.rs.projects.deleteTag(this.scope.projectId, tag)[\"finally\"]((function(_this) {\n return function() {\n return _this.scope.loadingDelete = false;\n };\n })(this));\n };\n\n ProjectTagsController.prototype.startMixingTags = function(tag) {\n return this.scope.mixingTags.toTag = tag.name;\n };\n\n ProjectTagsController.prototype.toggleMixingFromTags = function(tag) {\n var index;\n if (tag.name !== this.scope.mixingTags.toTag) {\n index = this.scope.mixingTags.fromTags.indexOf(tag.name);\n if (index === -1) {\n return this.scope.mixingTags.fromTags.push(tag.name);\n } else {\n return this.scope.mixingTags.fromTags.splice(index, 1);\n }\n }\n };\n\n ProjectTagsController.prototype.confirmMixingTags = function() {\n var fromTags, toTag;\n toTag = this.scope.mixingTags.toTag;\n fromTags = this.scope.mixingTags.fromTags;\n this.scope.loadingMixing = true;\n return this.rs.projects.mixTags(this.scope.projectId, toTag, fromTags).then((function(_this) {\n return function() {\n _this.cancelMixingTags();\n return _this.loadTags();\n };\n })(this))[\"finally\"]((function(_this) {\n return function() {\n return _this.scope.loadingMixing = false;\n };\n })(this));\n };\n\n ProjectTagsController.prototype.cancelMixingTags = function() {\n this.scope.mixingTags.toTag = null;\n return this.scope.mixingTags.fromTags = [];\n };\n\n ProjectTagsController.prototype.mixingClass = function(tag) {\n if (this.scope.mixingTags.toTag !== null) {\n if (tag.name === this.scope.mixingTags.toTag) {\n return \"mixing-tags-to\";\n } else if (this.scope.mixingTags.fromTags.indexOf(tag.name) !== -1) {\n return \"mixing-tags-from\";\n }\n }\n };\n\n return ProjectTagsController;\n\n })(taiga.Controller);\n\n module.controller(\"ProjectTagsController\", ProjectTagsController);\n\n ProjectTagsDirective = function($log, $repo, $confirm, $location, animationFrame, $translate, $rootscope) {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl, $window, cancel, goToBottomList, initializeMixingTags, initializeNewValue, initializeTagsFilter, initializeTextTranslations, objName, saveNewValue, saveValue, valueType;\n $window = $(window);\n $ctrl = $el.controller();\n valueType = $attrs.type;\n objName = $attrs.objname;\n initializeNewValue = function() {\n return $scope.newValue = {\n \"tag\": \"\",\n \"color\": \"\"\n };\n };\n initializeTagsFilter = function() {\n return $scope.tagsFilter = {\n \"name\": \"\"\n };\n };\n initializeMixingTags = function() {\n return $scope.mixingTags = {\n \"toTag\": null,\n \"fromTags\": []\n };\n };\n initializeTextTranslations = function() {\n return $scope.addNewElementText = $translate.instant(\"ADMIN.PROJECT_VALUES_TAGS.ACTION_ADD\");\n };\n initializeNewValue();\n initializeTagsFilter();\n initializeMixingTags();\n initializeTextTranslations();\n $rootscope.$on(\"$translateChangeEnd\", function() {\n return $scope.$evalAsync(initializeTextTranslations);\n });\n goToBottomList = (function(_this) {\n return function(focus) {\n var table;\n if (focus == null) {\n focus = false;\n }\n table = $el.find(\".table-main\");\n $(document.body).scrollTop(table.offset().top + table.height());\n if (focus) {\n return $el.find(\".new-value input:visible\").first().focus();\n }\n };\n })(this);\n saveValue = function(target) {\n var form, formEl, originalTag, promise, tag;\n formEl = target.parents(\"form\");\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n tag = formEl.scope().tag;\n originalTag = tag.clone();\n originalTag.revert();\n $scope.loadingEdit = true;\n promise = $ctrl.editTag(originalTag.name, tag.name, tag.color);\n promise.then(function() {\n return $ctrl.loadTags().then(function() {\n var row;\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n $scope.loadingEdit = false;\n $rootscope.$broadcast('tags:updated');\n return row.siblings(\".visualization\").removeClass('hidden');\n });\n });\n return promise.then(null, function(response) {\n $scope.loadingEdit = false;\n return form.setErrors(response.data);\n });\n };\n saveNewValue = function(target) {\n var form, formEl, promise;\n formEl = target.parents(\"form\");\n formEl = target;\n form = formEl.checksley();\n if (!form.validate()) {\n return;\n }\n $scope.loadingCreate = true;\n promise = $ctrl.createTag($scope.newValue.tag, $scope.newValue.color);\n promise.then(function(data) {\n return $ctrl.loadTags().then(function() {\n $scope.loadingCreate = false;\n target.addClass(\"hidden\");\n $rootscope.$broadcast('tags:updated');\n return initializeNewValue();\n });\n });\n return promise.then(null, function(response) {\n $scope.loadingCreate = false;\n return form.setErrors(response.data);\n });\n };\n cancel = function(target) {\n var formEl, row, tag;\n row = target.parents(\".row.table-main\");\n formEl = target.parents(\"form\");\n tag = formEl.scope().tag;\n return $scope.$apply(function() {\n row.addClass(\"hidden\");\n tag.revert();\n return row.siblings(\".visualization\").removeClass('hidden');\n });\n };\n $scope.$watch(\"tagsFilter.name\", function(tagsFilter) {\n return $ctrl.filterAndSortTags();\n });\n $window.on(\"keyup\", function(event) {\n if (event.keyCode === 27) {\n return $scope.$apply(function() {\n return initializeMixingTags();\n });\n }\n });\n $el.on(\"click\", \".show-add-new\", function(event) {\n event.preventDefault();\n return $el.find(\".new-value\").removeClass('hidden');\n });\n $el.on(\"click\", \".add-new\", debounce(2000, function(event) {\n var target;\n event.preventDefault();\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n }));\n $el.on(\"click\", \".delete-new\", function(event) {\n event.preventDefault();\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n });\n $el.on(\"click\", \".mix-tags\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n return $ctrl.startMixingTags(target.parents('form').scope().tag);\n });\n });\n $el.on(\"click\", \".mixing-row\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return $scope.$apply(function() {\n return $ctrl.toggleMixingFromTags(target.parents('form').scope().tag);\n });\n });\n $el.on(\"click\", \".mixing-confirm\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $scope.$apply(function() {\n return $ctrl.confirmMixingTags();\n });\n });\n $el.on(\"click\", \".mixing-cancel\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n return $scope.$apply(function() {\n return $ctrl.cancelMixingTags();\n });\n });\n $el.on(\"click\", \".edit-value\", function(event) {\n var editionRow, row, target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n row = target.parents(\".row.table-main\");\n row.addClass(\"hidden\");\n editionRow = row.siblings(\".edition\");\n editionRow.removeClass('hidden');\n return editionRow.find('input:visible').first().focus().select();\n });\n $el.on(\"keyup\", \".new-value input\", function(event) {\n var target;\n if (event.keyCode === 13) {\n target = $el.find(\".new-value\");\n return saveNewValue(target);\n } else if (event.keyCode === 27) {\n $el.find(\".new-value\").addClass(\"hidden\");\n return initializeNewValue();\n }\n });\n $el.on(\"keyup\", \".status-name input\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n if (event.keyCode === 13) {\n return saveValue(target);\n } else if (event.keyCode === 27) {\n return cancel(target);\n }\n });\n $el.on(\"click\", \".save\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return saveValue(target);\n });\n $el.on(\"click\", \".cancel\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return cancel(target);\n });\n $el.on(\"click\", \".delete-tag\", function(event) {\n var formEl, tag, target, title;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n formEl = target.parents(\"form\");\n tag = formEl.scope().tag;\n title = $translate.instant(\"ADMIN.COMMON.TITLE_ACTION_DELETE_TAG\");\n return $confirm.askOnDelete(title, tag.name).then(function(response) {\n var onError, onSucces;\n onSucces = function() {\n return $ctrl.loadTags()[\"finally\"](function() {\n $rootscope.$broadcast('tags:updated');\n return response.finish();\n });\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $ctrl.deleteTag(tag.name).then(onSucces, onError);\n });\n });\n return $scope.$on(\"$destroy\", function() {\n $el.off();\n return $window.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgProjectTags\", [\"$log\", \"$tgRepo\", \"$tgConfirm\", \"$tgLocation\", \"animationFrame\", \"$translate\", \"$rootScope\", ProjectTagsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/roles.coffee\n */\n\n(function() {\n var EditRoleDirective, NewRoleDirective, RolePermissionsDirective, RolesController, RolesDirective, bindMethods, bindOnce, debounce, mixOf, module, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n bindMethods = this.taiga.bindMethods;\n\n module = angular.module(\"taigaAdmin\");\n\n RolesController = (function(superClass) {\n extend(RolesController, superClass);\n\n RolesController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgModel\", \"tgAppMetaService\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function RolesController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, model, appMetaService, translate, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.model = model;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n this._disableComputable = bind(this._disableComputable, this);\n this._enableComputable = bind(this._enableComputable, this);\n bindMethods(this);\n this.scope.sectionName = \"ADMIN.MENU.PERMISSIONS\";\n this.scope.project = {};\n this.scope.anyComputableRole = true;\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.ROLES.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n RolesController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n project = this.model.make_model(\"projects\", project);\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.anyComputableRole = _.some(_.map(project.roles, function(point) {\n return point.computable;\n }));\n return project;\n };\n\n RolesController.prototype.loadRoles = function() {\n return this.rs.roles.list(this.scope.projectId).then((function(_this) {\n return function(roles) {\n var public_permission;\n roles = roles.map(function(role) {\n role.external_user = false;\n return role;\n });\n public_permission = {\n \"name\": _this.translate.instant(\"ADMIN.ROLES.EXTERNAL_USER\"),\n \"permissions\": _this.scope.project.public_permissions,\n \"external_user\": true\n };\n roles.push(public_permission);\n _this.scope.roles = roles;\n _this.scope.role = _this.scope.roles[0];\n return roles;\n };\n })(this));\n };\n\n RolesController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadRoles();\n };\n\n RolesController.prototype.forceLoadProject = function() {\n return this.rootscope.$broadcast(\"admin:project-roles:updated\");\n };\n\n RolesController.prototype.setRole = function(role) {\n this.scope.role = role;\n return this.scope.$broadcast(\"role:changed\", this.scope.role);\n };\n\n RolesController.prototype[\"delete\"] = function() {\n var choices, i, len, ref, replacement, role, subtitle, title, warning;\n choices = {};\n ref = this.scope.roles;\n for (i = 0, len = ref.length; i < len; i++) {\n role = ref[i];\n if (role.id !== this.scope.role.id) {\n choices[role.id] = role.name;\n }\n }\n if (_.keys(choices).length === 0) {\n return this.confirm.error(this.translate.instant(\"ADMIN.ROLES.ERROR_DELETE_ALL\"));\n }\n title = this.translate.instant(\"ADMIN.ROLES.TITLE_DELETE_ROLE\");\n subtitle = this.scope.role.name;\n replacement = this.translate.instant(\"ADMIN.ROLES.REPLACEMENT_ROLE\");\n warning = this.translate.instant(\"ADMIN.ROLES.WARNING_DELETE_ROLE\");\n return this.confirm.askChoice(title, subtitle, choices, replacement, warning).then((function(_this) {\n return function(response) {\n var onError, onSuccess;\n onSuccess = function() {\n _this.forceLoadProject();\n return _this.loadRoles()[\"finally\"](function() {\n return response.finish();\n });\n };\n onError = function() {\n return _this.confirm.notify('error');\n };\n return _this.repo.remove(_this.scope.role, {\n moveTo: response.selected\n }).then(onSuccess, onError);\n };\n })(this));\n };\n\n RolesController.prototype._enableComputable = function() {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.confirm.notify(\"success\");\n return _this.forceLoadProject();\n };\n })(this);\n onError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.scope.role.revert();\n };\n })(this);\n return this.repo.save(this.scope.role).then(onSuccess, onError);\n };\n\n RolesController.prototype._disableComputable = function() {\n var askOnError, askOnSuccess, subtitle, title;\n askOnSuccess = (function(_this) {\n return function(response) {\n var onError, onSuccess;\n onSuccess = function() {\n response.finish();\n _this.confirm.notify(\"success\");\n return _this.forceLoadProject();\n };\n onError = function() {\n response.finish();\n _this.confirm.notify(\"error\");\n return _this.scope.role.revert();\n };\n return _this.repo.save(_this.scope.role).then(onSuccess, onError);\n };\n })(this);\n askOnError = (function(_this) {\n return function(response) {\n return _this.scope.role.revert();\n };\n })(this);\n title = this.translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_TITLE\");\n subtitle = this.translate.instant(\"ADMIN.ROLES.DISABLE_COMPUTABLE_ALERT_SUBTITLE\", {\n roleName: this.scope.role.name\n });\n return this.confirm.ask(title, subtitle, \"\").then(askOnSuccess, askOnError);\n };\n\n RolesController.prototype.toggleComputable = debounce(2000, function() {\n if (!this.scope.role.computable) {\n return this._disableComputable();\n } else {\n return this._enableComputable();\n }\n });\n\n return RolesController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"RolesController\", RolesController);\n\n EditRoleDirective = function($repo, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit, toggleView;\n toggleView = function() {\n $el.find('.total').toggle();\n return $el.find('.edit-role').toggle();\n };\n submit = function() {\n var promise;\n $scope.role.name = $el.find(\"input\").val();\n promise = $repo.save($scope.role);\n promise.then(function() {\n return $confirm.notify(\"success\");\n });\n promise.then(null, function(data) {\n return $confirm.notify(\"error\");\n });\n return toggleView();\n };\n $el.on(\"click\", \".edit-value\", function() {\n toggleView();\n $el.find(\"input\").focus();\n return $el.find(\"input\").val($scope.role.name);\n });\n $el.on(\"click\", \"a.save\", submit);\n $el.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return submit();\n } else if (event.keyCode === 27) {\n return toggleView();\n }\n });\n $scope.$on(\"role:changed\", function() {\n if ($el.find('.edit-role').is(\":visible\")) {\n return toggleView();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgEditRole\", [\"$tgRepo\", \"$tgConfirm\", EditRoleDirective]);\n\n RolesDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRoles\", RolesDirective);\n\n NewRoleDirective = function($tgrepo, $confirm) {\n var DEFAULT_PERMISSIONS, link;\n DEFAULT_PERMISSIONS = [\"view_project\", \"view_milestones\", \"view_us\", \"view_tasks\", \"view_issues\"];\n link = function($scope, $el, $attrs) {\n var $ctrl;\n $ctrl = $el.controller();\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $el.on(\"click\", \"a.add-button\", function(event) {\n event.preventDefault();\n $el.find(\".new\").removeClass(\"hidden\");\n $el.find(\".new\").focus();\n return $el.find(\".add-button\").hide();\n });\n return $el.on(\"keyup\", \".new\", function(event) {\n var newRole, onError, onSuccess, target;\n event.preventDefault();\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n newRole = {\n project: $scope.projectId,\n name: target.val(),\n permissions: DEFAULT_PERMISSIONS,\n order: _.maxBy($scope.roles, function(r) {\n return r.order;\n }).order + 1,\n computable: false\n };\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new\").val('');\n onSuccess = function(role) {\n var insertPosition;\n insertPosition = $scope.roles.length - 1;\n $scope.roles.splice(insertPosition, 0, role);\n $ctrl.setRole(role);\n $el.find(\".add-button\").show();\n return $ctrl.forceLoadProject();\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $tgrepo.create(\"roles\", newRole).then(onSuccess, onError);\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n $el.find(\".new\").addClass(\"hidden\");\n $el.find(\".new\").val('');\n return $el.find(\".add-button\").show();\n }\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgNewRole\", [\"$tgRepo\", \"$tgConfirm\", NewRoleDirective]);\n\n RolePermissionsDirective = function($rootscope, $repo, $confirm, $compile) {\n var baseTemplate, categoryTemplate, link, resumeTemplate;\n resumeTemplate = _.template(\"
    \\\">
    \\n
    \\n
    <%- category.activePermissions %>/<%- category.permissions.length %>
    \\n <% _.each(category.permissions, function(permission) { %>\\n
    active<% } %>\\\"\\n title=\\\"{{ '<%- permission.name %>' | translate }}\\\">
    \\n <% }) %>\\n
    \\n\");\n categoryTemplate = _.template(\"
    \\\">\\n
    \\n
    \\n
    \\n
    \\n <% _.each(category.permissions, function(permission) { %>\\n
    \\\">\\n \\\">\\n
    \\n disabled=\\\"disabled\\\" <% } %>\\n <% if(permission.active) { %> checked=\\\"checked\\\" <% } %>/>\\n
    \\n \\n \\n
    \\n
    \\n <% }) %>\\n
    \\n
    \\n
    \");\n baseTemplate = _.template(\"
    \");\n link = function($scope, $el, $attrs) {\n var $ctrl, generateCategoriesFromRole, renderCategory, renderPermissions, renderResume;\n $ctrl = $el.controller();\n generateCategoriesFromRole = function(role) {\n var categories, epicPermissions, isPermissionEditable, issuePermissions, milestonePermissions, setActivePermissions, setActivePermissionsPerCategory, taskPermissions, userStoryPermissions, wikiPermissions;\n setActivePermissions = function(permissions) {\n return _.map(permissions, function(x) {\n var ref;\n return _.extend({}, x, {\n active: (ref = x[\"key\"], indexOf.call(role.permissions, ref) >= 0)\n });\n });\n };\n isPermissionEditable = function(permission, role, project) {\n if (role.external_user && !project.is_private && permission.key.indexOf(\"view_\") === 0) {\n return false;\n } else {\n return true;\n }\n };\n setActivePermissionsPerCategory = function(category) {\n return _.map(category, function(cat) {\n cat.permissions = cat.permissions.map(function(permission) {\n permission.editable = isPermissionEditable(permission, role, $scope.project);\n return permission;\n });\n return _.extend({}, cat, {\n activePermissions: _.filter(cat[\"permissions\"], \"active\").length\n });\n });\n };\n categories = [];\n epicPermissions = [\n {\n key: \"view_epics\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.VIEW_EPICS\"\n }, {\n key: \"add_epic\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.ADD_EPICS\"\n }, {\n key: \"modify_epic\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.MODIFY_EPICS\"\n }, {\n key: \"comment_epic\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.COMMENT_EPICS\"\n }, {\n key: \"delete_epic\",\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.DELETE_EPICS\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.EPICS.NAME\",\n permissions: setActivePermissions(epicPermissions)\n });\n milestonePermissions = [\n {\n key: \"view_milestones\",\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.VIEW_SPRINTS\"\n }, {\n key: \"add_milestone\",\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.ADD_SPRINTS\"\n }, {\n key: \"modify_milestone\",\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.MODIFY_SPRINTS\"\n }, {\n key: \"delete_milestone\",\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.DELETE_SPRINTS\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.SPRINTS.NAME\",\n permissions: setActivePermissions(milestonePermissions)\n });\n userStoryPermissions = [\n {\n key: \"view_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.VIEW_USER_STORIES\"\n }, {\n key: \"add_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.ADD_USER_STORIES\"\n }, {\n key: \"modify_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.MODIFY_USER_STORIES\"\n }, {\n key: \"comment_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.COMMENT_USER_STORIES\"\n }, {\n key: \"delete_us\",\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.DELETE_USER_STORIES\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.USER_STORIES.NAME\",\n permissions: setActivePermissions(userStoryPermissions)\n });\n taskPermissions = [\n {\n key: \"view_tasks\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.VIEW_TASKS\"\n }, {\n key: \"add_task\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.ADD_TASKS\"\n }, {\n key: \"modify_task\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.MODIFY_TASKS\"\n }, {\n key: \"comment_task\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.COMMENT_TASKS\"\n }, {\n key: \"delete_task\",\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.DELETE_TASKS\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.TASKS.NAME\",\n permissions: setActivePermissions(taskPermissions)\n });\n issuePermissions = [\n {\n key: \"view_issues\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.VIEW_ISSUES\"\n }, {\n key: \"add_issue\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.ADD_ISSUES\"\n }, {\n key: \"modify_issue\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.MODIFY_ISSUES\"\n }, {\n key: \"comment_issue\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.COMMENT_ISSUES\"\n }, {\n key: \"delete_issue\",\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.DELETE_ISSUES\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.ISSUES.NAME\",\n permissions: setActivePermissions(issuePermissions)\n });\n wikiPermissions = [\n {\n key: \"view_wiki_pages\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_PAGES\"\n }, {\n key: \"add_wiki_page\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_PAGES\"\n }, {\n key: \"modify_wiki_page\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.MODIFY_WIKI_PAGES\"\n }, {\n key: \"delete_wiki_page\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_PAGES\"\n }, {\n key: \"view_wiki_links\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.VIEW_WIKI_LINKS\"\n }, {\n key: \"add_wiki_link\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.ADD_WIKI_LINKS\"\n }, {\n key: \"delete_wiki_link\",\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.DELETE_WIKI_LINKS\"\n }\n ];\n categories.push({\n name: \"COMMON.PERMISIONS_CATEGORIES.WIKI.NAME\",\n permissions: setActivePermissions(wikiPermissions)\n });\n return setActivePermissionsPerCategory(categories);\n };\n renderResume = function(element, category) {\n return element.find(\".resume\").html($compile(resumeTemplate({\n category: category\n }))($scope));\n };\n renderCategory = function(category, index) {\n var html;\n html = categoryTemplate({\n category: category,\n index: index\n });\n html = angular.element(html);\n renderResume(html, category);\n return $compile(html)($scope);\n };\n renderPermissions = function() {\n var html;\n $el.off();\n html = baseTemplate();\n _.each(generateCategoriesFromRole($scope.role), function(category, index) {\n return html = angular.element(html).append(renderCategory(category, index));\n });\n $el.html(html);\n $el.on(\"click\", \".resume\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n target.toggleClass(\"open-drawer\");\n return target.next().toggleClass(\"open\");\n });\n return $el.on(\"change\", \".category-item input\", function(event) {\n var getActivePermissions, onError, onSuccess, target;\n getActivePermissions = function() {\n var activePermissions;\n activePermissions = _.filter($el.find(\".category-item input\"), function(t) {\n return angular.element(t).is(\":checked\");\n });\n activePermissions = _.sortBy(_.map(activePermissions, function(t) {\n var permission;\n return permission = angular.element(t).parents(\".category-item\").data(\"id\");\n }));\n if (activePermissions.length) {\n activePermissions.push(\"view_project\");\n }\n return activePermissions;\n };\n target = angular.element(event.currentTarget);\n $scope.role.permissions = getActivePermissions();\n onSuccess = function() {\n var categories, categoryId;\n categories = generateCategoriesFromRole($scope.role);\n categoryId = target.parents(\".category-config\").data(\"id\");\n renderResume(target.parents(\".category-config\"), categories[categoryId]);\n $rootscope.$broadcast(\"projects:reload\");\n $confirm.notify(\"success\");\n return $ctrl.forceLoadProject();\n };\n onError = function() {\n $confirm.notify(\"error\");\n target.prop(\"checked\", !target.prop(\"checked\"));\n return $scope.role.permissions = getActivePermissions();\n };\n if ($scope.role.external_user) {\n $scope.project.public_permissions = $scope.role.permissions;\n $scope.project.anon_permissions = $scope.role.permissions.filter(function(permission) {\n return permission.indexOf(\"view_\") === 0;\n });\n return $repo.save($scope.project).then(onSuccess, onError);\n } else {\n return $repo.save($scope.role).then(onSuccess, onError);\n }\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n $scope.$on(\"role:changed\", function() {\n return renderPermissions();\n });\n return bindOnce($scope, $attrs.ngModel, renderPermissions);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgRolePermissions\", [\"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$compile\", RolePermissionsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/admin/third-parties.coffee\n */\n\n(function() {\n var BitbucketController, BitbucketWebhooksDirective, GithubController, GithubWebhooksDirective, GitlabController, GitlabWebhooksDirective, GogsController, GogsWebhooksDirective, NewWebhookDirective, SelectInputText, ValidOriginIpsDirective, WebhookDirective, WebhooksController, bindMethods, debounce, mixOf, module, taiga, timeout,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindMethods = this.taiga.bindMethods;\n\n debounce = this.taiga.debounce;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaAdmin\");\n\n WebhooksController = (function(superClass) {\n extend(WebhooksController, superClass);\n\n WebhooksController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"$tgLocation\", \"$tgNavUrls\", \"tgAppMetaService\", \"$translate\", \"tgErrorHandlingService\", \"tgProjectService\"];\n\n function WebhooksController(scope, repo, rs, params, location, navUrls, appMetaService, translate, errorHandlingService, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = \"ADMIN.WEBHOOKS.SECTION_NAME\";\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.WEBHOOKS.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"webhooks:reload\", this.loadWebhooks);\n }\n\n WebhooksController.prototype.loadWebhooks = function() {\n return this.rs.webhooks.list(this.scope.projectId).then((function(_this) {\n return function(webhooks) {\n return _this.scope.webhooks = webhooks;\n };\n })(this));\n };\n\n WebhooksController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n if (!project.i_am_admin) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n WebhooksController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadWebhooks();\n };\n\n return WebhooksController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"WebhooksController\", WebhooksController);\n\n WebhookDirective = function($rs, $repo, $confirm, $loading, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var cancel, openHistory, save, showEditMode, showVisualizationMode, updateLogs, updateShowHideHistoryText, webhook;\n webhook = $scope.$eval($attrs.tgWebhook);\n updateLogs = function() {\n var prettyDate;\n prettyDate = $translate.instant(\"ADMIN.WEBHOOKS.DATE\");\n return $rs.webhooklogs.list(webhook.id).then((function(_this) {\n return function(webhooklogs) {\n var i, len, log, ref;\n for (i = 0, len = webhooklogs.length; i < len; i++) {\n log = webhooklogs[i];\n log.validStatus = (200 <= (ref = log.status) && ref < 300);\n log.prettySentHeaders = _.map(_.toPairs(log.request_headers), function(arg) {\n var header, value;\n header = arg[0], value = arg[1];\n return header + \": \" + value;\n }).join(\"\\n\");\n log.prettySentData = JSON.stringify(log.request_data);\n log.prettyDate = moment(log.created).format(prettyDate);\n }\n webhook.logs_counter = webhooklogs.length;\n webhook.logs = webhooklogs;\n return updateShowHideHistoryText();\n };\n })(this));\n };\n updateShowHideHistoryText = function() {\n var historyElement, text, textElement, title;\n textElement = $el.find(\".toggle-history\");\n historyElement = textElement.parents(\".single-webhook-wrapper\").find(\".webhooks-history\");\n if (historyElement.hasClass(\"open\")) {\n text = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_HIDE_HISTORY\");\n title = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_HIDE_HISTORY_TITLE\");\n } else {\n text = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_SHOW_HISTORY\");\n title = $translate.instant(\"ADMIN.WEBHOOKS.ACTION_SHOW_HISTORY_TITLE\");\n }\n textElement.text(text);\n return textElement.prop(\"title\", title);\n };\n showVisualizationMode = function() {\n $el.find(\".edition-mode\").addClass(\"hidden\");\n return $el.find(\".visualization-mode\").removeClass(\"hidden\");\n };\n showEditMode = function() {\n $el.find(\".visualization-mode\").addClass(\"hidden\");\n return $el.find(\".edition-mode\").removeClass(\"hidden\");\n };\n openHistory = function() {\n return $el.find(\".webhooks-history\").addClass(\"open\");\n };\n cancel = function() {\n showVisualizationMode();\n return $scope.$apply(function() {\n return webhook.revert();\n });\n };\n save = debounce(2000, function(target) {\n var form, promise;\n form = target.parents(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n promise = $repo.save(webhook);\n promise.then((function(_this) {\n return function() {\n return showVisualizationMode();\n };\n })(this));\n return promise.then(null, function(data) {\n $confirm.notify(\"error\");\n return form.setErrors(data);\n });\n });\n $el.on(\"click\", \".test-webhook\", function() {\n openHistory();\n return $rs.webhooks.test(webhook.id).then((function(_this) {\n return function() {\n return updateLogs();\n };\n })(this));\n });\n $el.on(\"click\", \".edit-webhook\", function() {\n return showEditMode();\n });\n $el.on(\"click\", \".cancel-existing\", function() {\n return cancel();\n });\n $el.on(\"click\", \".edit-existing\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n return save(target);\n });\n $el.on(\"keyup\", \".edition-mode input\", function(event) {\n var target;\n if (event.keyCode === 13) {\n target = angular.element(event.currentTarget);\n return save(target);\n } else if (event.keyCode === 27) {\n target = angular.element(event.currentTarget);\n return cancel(target);\n }\n });\n $el.on(\"click\", \".delete-webhook\", function() {\n var message, title;\n title = $translate.instant(\"ADMIN.WEBHOOKS.DELETE\");\n message = $translate.instant(\"ADMIN.WEBHOOKS.WEBHOOK_NAME\", {\n name: webhook.name\n });\n return $confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var onError, onSucces;\n onSucces = function() {\n askResponse.finish();\n return $scope.$emit(\"webhooks:reload\");\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n return $repo.remove(webhook).then(onSucces, onError);\n };\n })(this));\n });\n $el.on(\"click\", \".toggle-history\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n if ((webhook.logs == null) || webhook.logs.length === 0) {\n return updateLogs().then(function() {\n return timeout(0, function() {\n $el.find(\".webhooks-history\").toggleClass(\"open\").slideToggle();\n return updateShowHideHistoryText();\n });\n });\n } else {\n $el.find(\".webhooks-history\").toggleClass(\"open\").slideToggle();\n return $scope.$apply(function() {\n return updateShowHideHistoryText();\n });\n }\n });\n $el.on(\"click\", \".history-single\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n target.toggleClass(\"history-single-open\");\n return target.siblings(\".history-single-response\").toggleClass(\"open\");\n });\n return $el.on(\"click\", \".resend-request\", function(event) {\n var log, target;\n target = angular.element(event.currentTarget);\n log = target.data(\"log\");\n return $rs.webhooklogs.resend(log).then((function(_this) {\n return function() {\n return updateLogs();\n };\n })(this));\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgWebhook\", [\"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$translate\", WebhookDirective]);\n\n NewWebhookDirective = function($rs, $repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var addWebhookDOMNode, formDOMNode, initializeNewValue, save, webhook;\n webhook = $scope.$eval($attrs.tgWebhook);\n formDOMNode = $el.find(\".new-webhook-form\");\n addWebhookDOMNode = $el.find(\".add-webhook\");\n initializeNewValue = function() {\n return $scope.newValue = {\n \"name\": \"\",\n \"url\": \"\",\n \"key\": \"\"\n };\n };\n initializeNewValue();\n $scope.$watch(\"webhooks\", function(webhooks) {\n if (webhooks != null) {\n if (webhooks.length === 0) {\n formDOMNode.removeClass(\"hidden\");\n addWebhookDOMNode.addClass(\"hidden\");\n return formDOMNode.find(\"input\")[0].focus();\n } else {\n formDOMNode.addClass(\"hidden\");\n return addWebhookDOMNode.removeClass(\"hidden\");\n }\n }\n });\n save = debounce(2000, function() {\n var form, promise;\n form = formDOMNode.checksley();\n if (!form.validate()) {\n return;\n }\n $scope.newValue.project = $scope.project.id;\n promise = $repo.create(\"webhooks\", $scope.newValue);\n promise.then((function(_this) {\n return function() {\n $analytics.trackEvent(\"webhooks\", \"create\", \"Create new webhook\", 1);\n $scope.$emit(\"webhooks:reload\");\n return initializeNewValue();\n };\n })(this));\n return promise.then(null, function(data) {\n $confirm.notify(\"error\");\n return form.setErrors(data);\n });\n });\n formDOMNode.on(\"click\", \".add-new\", function(event) {\n event.preventDefault();\n return save();\n });\n formDOMNode.on(\"keyup\", \"input\", function(event) {\n if (event.keyCode === 13) {\n return save();\n }\n });\n formDOMNode.on(\"click\", \".cancel-new\", function(event) {\n return $scope.$apply(function() {\n initializeNewValue();\n if ($scope.webhooks.length >= 1) {\n return formDOMNode.addClass(\"hidden\");\n }\n });\n });\n return addWebhookDOMNode.on(\"click\", function(event) {\n formDOMNode.removeClass(\"hidden\");\n return formDOMNode.find(\"input\")[0].focus();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgNewWebhook\", [\"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", NewWebhookDirective]);\n\n GithubController = (function(superClass) {\n extend(GithubController, superClass);\n\n GithubController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function GithubController(scope, repo, rs, params, appMetaService, translate, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"ADMIN.GITHUB.SECTION_NAME\");\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.GITHUB.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n GithubController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"github\").then((function(_this) {\n return function(github) {\n return _this.scope.github = github;\n };\n })(this));\n };\n\n GithubController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n GithubController.prototype.loadInitialData = function() {\n var promise;\n promise = this.loadProject();\n return this.loadModules();\n };\n\n return GithubController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"GithubController\", GithubController);\n\n GitlabController = (function(superClass) {\n extend(GitlabController, superClass);\n\n GitlabController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function GitlabController(scope, repo, rs, params, appMetaService, translate, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"ADMIN.GITLAB.SECTION_NAME\");\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.GITLAB.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:modules:reload\", (function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n }\n\n GitlabController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"gitlab\").then((function(_this) {\n return function(gitlab) {\n return _this.scope.gitlab = gitlab;\n };\n })(this));\n };\n\n GitlabController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n GitlabController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadModules();\n };\n\n return GitlabController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"GitlabController\", GitlabController);\n\n BitbucketController = (function(superClass) {\n extend(BitbucketController, superClass);\n\n BitbucketController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function BitbucketController(scope, repo, rs, params, appMetaService, translate, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"ADMIN.BITBUCKET.SECTION_NAME\");\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.BITBUCKET.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n this.scope.$on(\"project:modules:reload\", (function(_this) {\n return function() {\n return _this.loadModules();\n };\n })(this));\n }\n\n BitbucketController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"bitbucket\").then((function(_this) {\n return function(bitbucket) {\n return _this.scope.bitbucket = bitbucket;\n };\n })(this));\n };\n\n BitbucketController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n BitbucketController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadModules();\n };\n\n return BitbucketController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n module.controller(\"BitbucketController\", BitbucketController);\n\n SelectInputText = function($translate, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n return $el.on(\"click\", \".select-input-content\", function() {\n var source;\n source = $el.find(\"input\");\n if (!source.val()) {\n return;\n }\n source.select();\n document.execCommand('copy');\n return $confirm.notify(\"success\", $translate.instant(\"COMMON.COPIED_TO_CLIPBOARD\"));\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgSelectInputText\", [\"$translate\", \"$tgConfirm\", SelectInputText]);\n\n GithubWebhooksDirective = function($repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.saveAttribute($scope.github, \"github\");\n promise.then(function() {\n $analytics.trackEvent(\"github-webhook\", \"created-or-changed\", \"Create or changed github webhook\", 1);\n currentLoading.finish();\n return $confirm.notify(\"success\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n return $el.on(\"submit\", \"form\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgGithubWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", GithubWebhooksDirective]);\n\n GitlabWebhooksDirective = function($repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.saveAttribute($scope.gitlab, \"gitlab\");\n promise.then(function() {\n $analytics.trackEvent(\"gitlab-webhook\", \"created-or-changed\", \"Create or changed gitlab webhook\", 1);\n currentLoading.finish();\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:modules:reload\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n return $el.on(\"submit\", \"form\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgGitlabWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", GitlabWebhooksDirective]);\n\n BitbucketWebhooksDirective = function($repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.saveAttribute($scope.bitbucket, \"bitbucket\");\n promise.then(function() {\n $analytics.trackEvent(\"bitbucket-webhook\", \"created-or-changed\", \"Create or changed bitbucket webhook\", 1);\n currentLoading.finish();\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:modules:reload\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n return $el.on(\"submit\", \"form\", submit);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgBitbucketWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", BitbucketWebhooksDirective]);\n\n ValidOriginIpsDirective = function() {\n var link;\n link = function($scope, $el, $attrs, $ngModel) {\n return $ngModel.$parsers.push(function(value) {\n value = $.trim(value);\n if (value === \"\") {\n return [];\n }\n return value.split(\",\");\n });\n };\n return {\n link: link,\n restrict: \"EA\",\n require: \"ngModel\"\n };\n };\n\n module.directive(\"tgValidOriginIps\", ValidOriginIpsDirective);\n\n GogsController = (function(superClass) {\n extend(GogsController, superClass);\n\n GogsController.$inject = [\"$scope\", \"$tgRepo\", \"$tgResources\", \"$routeParams\", \"tgAppMetaService\", \"$translate\", \"tgProjectService\"];\n\n function GogsController(scope, repo, rs, params, appMetaService, translate, projectService) {\n var promise;\n this.scope = scope;\n this.repo = repo;\n this.rs = rs;\n this.params = params;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n bindMethods(this);\n this.scope.sectionName = this.translate.instant(\"ADMIN.GOGS.SECTION_NAME\");\n this.scope.project = {};\n promise = this.loadInitialData();\n promise.then((function(_this) {\n return function() {\n var description, title;\n title = _this.translate.instant(\"ADMIN.GOGS.PAGE_TITLE\", {\n projectName: _this.scope.project.name\n });\n description = _this.scope.project.description;\n return _this.appMetaService.setAll(title, description);\n };\n })(this));\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n GogsController.prototype.loadModules = function() {\n return this.rs.modules.list(this.scope.projectId, \"gogs\").then((function(_this) {\n return function(gogs) {\n return _this.scope.gogs = gogs;\n };\n })(this));\n };\n\n GogsController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n return project;\n };\n\n GogsController.prototype.loadInitialData = function() {\n this.loadProject();\n return this.loadModules();\n };\n\n return GogsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n GogsWebhooksDirective = function($repo, $confirm, $loading, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var form, submit, submitButton;\n form = $el.find(\"form\").checksley({\n \"onlyOneErrorElement\": true\n });\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.saveAttribute($scope.gogs, \"gogs\");\n promise.then(function() {\n $analytics.trackEvent(\"gogs-webhook\", \"create-or-change\", \"Create or change gogs webhook\", 1);\n currentLoading.finish();\n $confirm.notify(\"success\");\n return $scope.$emit(\"project:modules:reload\");\n });\n return promise.then(null, function(data) {\n currentLoading.finish();\n form.setErrors(data);\n if (data._error_message) {\n return $confirm.notify(\"error\", data._error_message);\n }\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $el.on(\"click\", \".submit-button\", submit);\n };\n return {\n link: link\n };\n };\n\n module.controller(\"GogsController\", GogsController);\n\n module.directive(\"tgGogsWebhooks\", [\"$tgRepo\", \"$tgConfirm\", \"$tgLoading\", \"$tgAnalytics\", GogsWebhooksDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/projects/lightboxes.coffee\n */\n\n(function() {\n var DeleteProjectDirective, bindOnce, debounce, module, taiga, timeout;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n timeout = this.taiga.timeout;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaProject\");\n\n DeleteProjectDirective = function($repo, $rootscope, $auth, $location, $navUrls, $confirm, lightboxService, tgLoader, currentUserService, $analytics) {\n var link;\n link = function($scope, $el, $attrs) {\n var projectToDelete, submit;\n projectToDelete = null;\n $scope.$on(\"deletelightbox:new\", function(ctx, project) {\n lightboxService.open($el);\n return projectToDelete = project;\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n submit = function() {\n var promise;\n tgLoader.start();\n lightboxService.close($el);\n promise = $repo.remove(projectToDelete);\n promise.then(function(data) {\n $analytics.trackEvent(\"projects\", \"delete\", \"Delete project\", 1);\n tgLoader.pageLoaded();\n $rootscope.$broadcast(\"projects:reload\");\n $location.path($navUrls.resolve(\"home\"));\n $confirm.notify(\"success\");\n return currentUserService.loadProjects();\n });\n return promise.then(null, function() {\n $confirm.notify(\"error\");\n return lightboxService.close($el);\n });\n };\n $el.on(\"click\", \".button-red\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n return $el.on(\"click\", \".button-green\", function(event) {\n event.preventDefault();\n return submit();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgLbDeleteProject\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfirm\", \"lightboxService\", \"tgLoader\", \"tgCurrentUserService\", \"$tgAnalytics\", DeleteProjectDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/bind.coffee\n */\n\n(function() {\n var BindHtmlDirective, BindOnceAltDirective, BindOnceBindDirective, BindOnceHrefDirective, BindOnceHtmlDirective, BindOnceRefDirective, BindOnceSrcDirective, BindOnceTitleDirective, BindTitleDirective, bindOnce, module;\n\n bindOnce = this.taiga.bindOnce;\n\n BindOnceBindDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoBind, function(val) {\n return $el.text(val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceHtmlDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoHtml, function(val) {\n return $el.html(val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceRefDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoRef, function(val) {\n return $el.html(\"#\" + val + \" \");\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceSrcDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoSrc, function(val) {\n return $el.attr(\"src\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceHrefDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoHref, function(val) {\n return $el.attr(\"href\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceAltDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoAlt, function(val) {\n return $el.attr(\"alt\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindOnceTitleDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return bindOnce($scope, $attrs.tgBoTitle, function(val) {\n return $el.attr(\"title\", val);\n });\n };\n return {\n link: link\n };\n };\n\n BindTitleDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$watch($attrs.tgTitleHtml, function(val) {\n if (val != null) {\n return $el.attr(\"title\", val);\n }\n });\n };\n return {\n link: link\n };\n };\n\n BindHtmlDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$watch($attrs.tgBindHtml, function(val) {\n if (val != null) {\n return $el.html(val);\n }\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaBase\");\n\n module.directive(\"tgBoBind\", BindOnceBindDirective);\n\n module.directive(\"tgBoHtml\", BindOnceHtmlDirective);\n\n module.directive(\"tgBoRef\", BindOnceRefDirective);\n\n module.directive(\"tgBoSrc\", BindOnceSrcDirective);\n\n module.directive(\"tgBoHref\", BindOnceHrefDirective);\n\n module.directive(\"tgBoAlt\", BindOnceAltDirective);\n\n module.directive(\"tgBoTitle\", BindOnceTitleDirective);\n\n module.directive(\"tgBindTitle\", BindTitleDirective);\n\n module.directive(\"tgBindHtml\", BindHtmlDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/conf.coffee\n */\n\n(function() {\n var ConfigurationService, module;\n\n ConfigurationService = (function() {\n function ConfigurationService() {\n this.config = window.taigaConfig;\n }\n\n ConfigurationService.prototype.get = function(key, defaultValue) {\n if (defaultValue == null) {\n defaultValue = null;\n }\n if (_.has(this.config, key)) {\n return this.config[key];\n }\n return defaultValue;\n };\n\n return ConfigurationService;\n\n })();\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgConfig\", ConfigurationService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/contrib.coffee\n */\n\n(function() {\n var ContribController, ContribUserSettingsController, module,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n module = angular.module(\"taigaBase\");\n\n ContribController = (function(superClass) {\n extend(ContribController, superClass);\n\n ContribController.$inject = [\"$rootScope\", \"$scope\", \"$routeParams\", \"$tgRepo\", \"$tgResources\", \"$tgConfirm\", \"tgProjectService\"];\n\n function ContribController(rootScope, scope, params, repo, rs, confirm, projectService) {\n this.rootScope = rootScope;\n this.scope = scope;\n this.params = params;\n this.repo = repo;\n this.rs = rs;\n this.confirm = confirm;\n this.projectService = projectService;\n this.scope.currentPlugin = _.head(_.filter(this.rootScope.adminPlugins, {\n \"slug\": this.params.plugin\n }));\n this.scope.projectSlug = this.params.pslug;\n this.loadInitialData();\n }\n\n ContribController.prototype.loadProject = function() {\n var project;\n project = this.projectService.project.toJS();\n this.scope.projectId = project.id;\n this.scope.project = project;\n this.scope.$emit('project:loaded', project);\n this.scope.$broadcast('project:loaded', project);\n return project;\n };\n\n ContribController.prototype.loadInitialData = function() {\n return this.loadProject();\n };\n\n return ContribController;\n\n })(taiga.Controller);\n\n module.controller(\"ContribController\", ContribController);\n\n ContribUserSettingsController = (function(superClass) {\n extend(ContribUserSettingsController, superClass);\n\n ContribUserSettingsController.$inject = [\"$rootScope\", \"$scope\", \"$routeParams\"];\n\n function ContribUserSettingsController(rootScope, scope, params) {\n this.rootScope = rootScope;\n this.scope = scope;\n this.params = params;\n this.scope.currentPlugin = _.head(_.filter(this.rootScope.userSettingsPlugins, {\n \"slug\": this.params.plugin\n }));\n }\n\n return ContribUserSettingsController;\n\n })(taiga.Controller);\n\n module.controller(\"ContribUserSettingsController\", ContribUserSettingsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/filters.coffee\n */\n\n(function() {\n var FiltersStorageService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n FiltersStorageService = (function(superClass) {\n extend(FiltersStorageService, superClass);\n\n FiltersStorageService.$inject = [\"$tgStorage\", \"$routeParams\"];\n\n function FiltersStorageService(storage, params) {\n this.storage = storage;\n this.params = params;\n }\n\n FiltersStorageService.prototype.generateHash = function(components) {\n if (components == null) {\n components = [];\n }\n components = _.map(components, function(x) {\n return JSON.stringify(x);\n });\n return hex_sha1(components.join(\":\"));\n };\n\n return FiltersStorageService;\n\n })(taiga.Service);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/http.coffee\n */\n\n(function() {\n var HttpService, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n HttpService = (function(superClass) {\n extend(HttpService, superClass);\n\n HttpService.$inject = [\"$http\", \"$q\", \"$tgStorage\", \"$rootScope\", \"$cacheFactory\", \"$translate\"];\n\n function HttpService(http, q, storage, rootScope, cacheFactory, translate) {\n this.http = http;\n this.q = q;\n this.storage = storage;\n this.rootScope = rootScope;\n this.cacheFactory = cacheFactory;\n this.translate = translate;\n HttpService.__super__.constructor.call(this);\n this.cache = this.cacheFactory(\"httpget\");\n }\n\n HttpService.prototype.headers = function() {\n var headers, lang, token;\n headers = {};\n token = this.storage.get('token');\n if (token) {\n headers[\"Authorization\"] = \"Bearer \" + token;\n }\n lang = this.translate.preferredLanguage();\n if (lang) {\n headers[\"Accept-Language\"] = lang;\n }\n return headers;\n };\n\n HttpService.prototype.request = function(options) {\n options.headers = _.assign({}, options.headers || {}, this.headers());\n return this.http(options);\n };\n\n HttpService.prototype.get = function(url, params, options) {\n options = _.assign({\n method: \"GET\",\n url: url\n }, options);\n if (params) {\n options.params = params;\n }\n options.cache = this.cache;\n return this.request(options)[\"finally\"]((function(_this) {\n return function(data) {\n return _this.cache.removeAll();\n };\n })(this));\n };\n\n HttpService.prototype.post = function(url, data, params, options) {\n options = _.assign({\n method: \"POST\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype.put = function(url, data, params, options) {\n options = _.assign({\n method: \"PUT\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype.patch = function(url, data, params, options) {\n options = _.assign({\n method: \"PATCH\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n HttpService.prototype[\"delete\"] = function(url, data, params, options) {\n options = _.assign({\n method: \"DELETE\",\n url: url\n }, options);\n if (data) {\n options.data = data;\n }\n if (params) {\n options.params = params;\n }\n return this.request(options);\n };\n\n return HttpService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgHttp\", HttpService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/location.coffee\n */\n\n(function() {\n var locationFactory, module;\n\n locationFactory = function($location, $route, $rootscope) {\n $location.noreload = function(scope) {\n var lastRoute, un;\n lastRoute = $route.current;\n un = scope.$on(\"$locationChangeSuccess\", function() {\n $route.current = lastRoute;\n return un();\n });\n return $location;\n };\n $location.isInCurrentRouteParams = function(name, value) {\n var params;\n params = $location.search() || {};\n return params[name] === value;\n };\n return $location;\n };\n\n module = angular.module(\"taigaBase\");\n\n module.factory(\"$tgLocation\", [\"$location\", \"$route\", \"$rootScope\", locationFactory]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/model.coffee\n */\n\n(function() {\n var Model, ModelService, module, provider, taiga,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n Model = (function() {\n function Model(name, data, dataTypes) {\n this._attrs = data;\n this._name = name;\n this._dataTypes = dataTypes;\n this.setAttrs(data);\n this.initialize();\n }\n\n Model.prototype.realClone = function() {\n var attrs, instance;\n attrs = _.cloneDeep(this._attrs);\n instance = new Model(this._name, attrs, this._dataTypes);\n instance._modifiedAttrs = _.cloneDeep(this._modifiedAttrs);\n instance._isModified = _.cloneDeep(this._isModified);\n return instance;\n };\n\n Model.prototype.clone = function() {\n var instance;\n instance = new Model(this._name, this._attrs, this._dataTypes);\n instance._modifiedAttrs = this._modifiedAttrs;\n instance._isModified = this._isModified;\n return instance;\n };\n\n Model.prototype.applyCasts = function() {\n var attrName, castMethod, castName, ref, results;\n ref = this._dataTypes;\n results = [];\n for (attrName in ref) {\n castName = ref[attrName];\n castMethod = service.casts[castName];\n if (!castMethod) {\n continue;\n }\n results.push(this._attrs[attrName] = castMethod(this._attrs[attrName]));\n }\n return results;\n };\n\n Model.prototype.getIdAttrName = function() {\n return \"id\";\n };\n\n Model.prototype.getName = function() {\n return this._name;\n };\n\n Model.prototype.getAttrs = function(patch) {\n if (patch == null) {\n patch = false;\n }\n if (this._attrs.version != null) {\n this._modifiedAttrs.version = this._attrs.version;\n }\n if (patch) {\n return _.extend({}, this._modifiedAttrs);\n }\n return _.extend({}, this._attrs, this._modifiedAttrs);\n };\n\n Model.prototype.setAttrs = function(attrs) {\n this._attrs = attrs;\n this._modifiedAttrs = {};\n this.applyCasts();\n return this._isModified = false;\n };\n\n Model.prototype.setAttr = function(name, value) {\n this._modifiedAttrs[name] = value;\n return this._isModified = true;\n };\n\n Model.prototype.initialize = function() {\n var getter, self, setter;\n self = this;\n getter = function(name) {\n return function() {\n if (typeof name === 'string' && name.substr(0, 2) === \"__\") {\n return self[name];\n }\n if (indexOf.call(_.keys(self._modifiedAttrs), name) < 0) {\n return self._attrs[name];\n }\n return self._modifiedAttrs[name];\n };\n };\n setter = function(name) {\n return function(value) {\n if (typeof name === 'string' && name.substr(0, 2) === \"__\") {\n self[name] = value;\n return;\n }\n if (self._attrs[name] !== value) {\n self._modifiedAttrs[name] = value;\n self._isModified = true;\n } else {\n delete self._modifiedAttrs[name];\n }\n };\n };\n return _.each(this._attrs, function(value, name) {\n var options;\n options = {\n get: getter(name),\n set: setter(name),\n enumerable: true,\n configurable: true\n };\n return Object.defineProperty(self, name, options);\n });\n };\n\n Model.prototype.serialize = function() {\n var data;\n data = {\n \"data\": _.clone(this._attrs),\n \"name\": this._name\n };\n return JSON.stringify(data);\n };\n\n Model.prototype.isModified = function() {\n return this._isModified;\n };\n\n Model.prototype.isAttributeModified = function(attribute) {\n return this._modifiedAttrs[attribute] != null;\n };\n\n Model.prototype.markSaved = function() {\n this._isModified = false;\n this._attrs = this.getAttrs();\n return this._modifiedAttrs = {};\n };\n\n Model.prototype.revert = function() {\n this._modifiedAttrs = {};\n return this._isModified = false;\n };\n\n Model.desSerialize = function(sdata) {\n var ddata, model;\n ddata = JSON.parse(sdata);\n model = new Model(ddata.url, ddata.data);\n return model;\n };\n\n return Model;\n\n })();\n\n taiga = this.taiga;\n\n ModelService = (function(superClass) {\n extend(ModelService, superClass);\n\n ModelService.$inject = [\"$q\", \"$tgUrls\", \"$tgStorage\", \"$tgHttp\"];\n\n function ModelService(q, urls, storage, http) {\n this.q = q;\n this.urls = urls;\n this.storage = storage;\n this.http = http;\n ModelService.__super__.constructor.call(this);\n }\n\n return ModelService;\n\n })(taiga.Service);\n\n provider = function($q, $http, $gmUrls, $gmStorage) {\n var service;\n service = {};\n service.make_model = function(name, data, cls, dataTypes) {\n if (cls == null) {\n cls = Model;\n }\n if (dataTypes == null) {\n dataTypes = {};\n }\n return new cls(name, data, dataTypes);\n };\n service.cls = Model;\n service.casts = {\n int: function(value) {\n return parseInt(value, 10);\n },\n float: function(value) {\n return parseFloat(value, 10);\n }\n };\n return service;\n };\n\n module = angular.module(\"taigaBase\");\n\n module.factory(\"$tgModel\", [\"$q\", \"$http\", \"$tgUrls\", \"$tgStorage\", provider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/navurls.coffee\n */\n\n(function() {\n var NavigationUrlsDirective, NavigationUrlsService, bindOnce, module, taiga, trim,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n trim = this.taiga.trim;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaBase\");\n\n NavigationUrlsService = (function(superClass) {\n extend(NavigationUrlsService, superClass);\n\n function NavigationUrlsService() {\n this.urls = {};\n }\n\n NavigationUrlsService.prototype.update = function(urls) {\n return this.urls = _.merge({}, this.urls, urls || {});\n };\n\n NavigationUrlsService.prototype.formatUrl = function(url, ctx) {\n var replacer;\n if (ctx == null) {\n ctx = {};\n }\n replacer = function(match) {\n match = trim(match, \":\");\n return ctx[match] || \"undefined\";\n };\n return url.replace(/(:\\w+)/g, replacer);\n };\n\n NavigationUrlsService.prototype.resolve = function(name, ctx) {\n var url;\n url = this.urls[name];\n if (!url) {\n return \"\";\n }\n if (ctx) {\n return this.formatUrl(url, ctx);\n }\n return url;\n };\n\n return NavigationUrlsService;\n\n })(taiga.Service);\n\n module.service(\"$tgNavUrls\", NavigationUrlsService);\n\n NavigationUrlsDirective = function($navurls, $auth, $q, $location, lightboxService, tgSections) {\n var bindOnceP, link, parseNav;\n bindOnceP = function($scope, attr) {\n var defered;\n defered = $q.defer();\n bindOnce($scope, attr, function(v) {\n return defered.resolve(v);\n });\n return defered.promise;\n };\n parseNav = function(data, $scope) {\n var index, name, obj, params, promises, ref, result, values;\n ref = _.map(data.split(\":\"), trim), name = ref[0], params = ref[1];\n if (params) {\n result = params.split(/(\\w+)=/);\n result = _.filter(result, function(str) {\n return str.length;\n });\n result = _.map(result, function(str) {\n return trim(str.replace(/,$/g, ''));\n });\n params = [];\n index = 0;\n while (index < result.length) {\n obj = {};\n obj[result[index]] = result[index + 1];\n params.push(obj);\n index = index + 2;\n }\n } else {\n params = [];\n }\n values = _.map(params, function(param) {\n return _.values(param)[0];\n });\n promises = _.map(values, function(x) {\n return bindOnceP($scope, x);\n });\n return $q.all(promises).then(function() {\n var i, key, len, options, param, value;\n options = {};\n for (i = 0, len = params.length; i < len; i++) {\n param = params[i];\n key = Object.keys(param)[0];\n value = param[key];\n options[key] = $scope.$eval(value);\n }\n return [name, options];\n });\n };\n link = function($scope, $el, $attrs) {\n if ($el.is(\"a\")) {\n $el.attr(\"href\", \"#\");\n }\n $el.on(\"mouseenter\", function(event) {\n var target;\n target = $(event.currentTarget);\n if (!target.data(\"fullUrl\") || $attrs.tgNavGetParams !== target.data(\"params\")) {\n return parseNav($attrs.tgNav, $scope).then(function(result) {\n var fullUrl, getURLParams, getURLParamsStr, name, options, path, url, user;\n name = result[0], options = result[1];\n user = $auth.getUser();\n if (user) {\n options.user = user.username;\n }\n if (name === 'project') {\n path = tgSections.getPath(options['project'], options['section']);\n name = name + \"-\" + path;\n }\n url = $navurls.resolve(name);\n fullUrl = $navurls.formatUrl(url, options);\n if ($attrs.tgNavGetParams) {\n getURLParams = JSON.parse($attrs.tgNavGetParams);\n getURLParamsStr = $.param(getURLParams);\n fullUrl = fullUrl + \"?\" + getURLParamsStr;\n target.data(\"params\", $attrs.tgNavGetParams);\n }\n target.data(\"fullUrl\", fullUrl);\n if (target.is(\"a\")) {\n target.attr(\"href\", fullUrl);\n }\n return $el.on(\"click\", function(event) {\n if (event.metaKey || event.ctrlKey) {\n return;\n }\n event.preventDefault();\n target = $(event.currentTarget);\n if (target.hasClass('noclick')) {\n return;\n }\n fullUrl = target.data(\"fullUrl\");\n switch (event.which) {\n case 1:\n $location.url(fullUrl);\n $scope.$apply();\n break;\n case 2:\n window.open(fullUrl);\n }\n return lightboxService.closeAll();\n });\n });\n }\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgNav\", [\"$tgNavUrls\", \"$tgAuth\", \"$q\", \"$tgLocation\", \"lightboxService\", \"$tgSections\", NavigationUrlsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/repository.coffee\n */\n\n(function() {\n var RepositoryService, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n RepositoryService = (function(superClass) {\n extend(RepositoryService, superClass);\n\n RepositoryService.$inject = [\"$q\", \"$tgModel\", \"$tgStorage\", \"$tgHttp\", \"$tgUrls\"];\n\n function RepositoryService(q, model1, storage, http, urls) {\n this.q = q;\n this.model = model1;\n this.storage = storage;\n this.http = http;\n this.urls = urls;\n RepositoryService.__super__.constructor.call(this);\n }\n\n RepositoryService.prototype.resolveUrlForModel = function(model) {\n var idAttrName;\n idAttrName = model.getIdAttrName();\n return (this.urls.resolve(model.getName())) + \"/\" + model[idAttrName];\n };\n\n RepositoryService.prototype.resolveUrlForAttributeModel = function(model) {\n return this.urls.resolve(model.getName(), model.parent);\n };\n\n RepositoryService.prototype.create = function(name, data, dataTypes, extraParams) {\n var defered, promise, url;\n if (dataTypes == null) {\n dataTypes = {};\n }\n if (extraParams == null) {\n extraParams = {};\n }\n defered = this.q.defer();\n url = this.urls.resolve(name);\n promise = this.http.post(url, JSON.stringify(data), extraParams);\n promise.success((function(_this) {\n return function(_data, _status) {\n return defered.resolve(_this.model.make_model(name, _data, null, dataTypes));\n };\n })(this));\n promise.error((function(_this) {\n return function(data, status) {\n return defered.reject(data);\n };\n })(this));\n return defered.promise;\n };\n\n RepositoryService.prototype.remove = function(model, params) {\n var defered, promise, url;\n if (params == null) {\n params = {};\n }\n defered = this.q.defer();\n url = this.resolveUrlForModel(model);\n promise = this.http[\"delete\"](url, {}, params);\n promise.success(function(data, status) {\n return defered.resolve(model);\n });\n promise.error(function(data, status) {\n return defered.reject(model);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.saveAll = function(models, patch) {\n var promises;\n if (patch == null) {\n patch = true;\n }\n promises = _.map(models, (function(_this) {\n return function(x) {\n return _this.save(x, true);\n };\n })(this));\n return this.q.all(promises);\n };\n\n RepositoryService.prototype.save = function(model, patch, params, options, returnHeaders) {\n var data, defered, promise, url;\n if (patch == null) {\n patch = true;\n }\n if (params == null) {\n params = {};\n }\n if (returnHeaders == null) {\n returnHeaders = false;\n }\n defered = this.q.defer();\n if (!model.isModified() && patch) {\n defered.resolve(model);\n return defered.promise;\n }\n url = this.resolveUrlForModel(model);\n data = JSON.stringify(model.getAttrs(patch));\n if (patch) {\n promise = this.http.patch(url, data, params, options);\n } else {\n promise = this.http.put(url, data, params, options);\n }\n promise.success((function(_this) {\n return function(data, status, headers, response) {\n model._isModified = false;\n model._attrs = _.extend(model.getAttrs(), data);\n model._modifiedAttrs = {};\n model.applyCasts();\n if (returnHeaders) {\n return defered.resolve([model, headers()]);\n } else {\n return defered.resolve(model);\n }\n };\n })(this));\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.saveAttribute = function(model, attribute, patch) {\n var data, defered, promise, url;\n if (patch == null) {\n patch = true;\n }\n defered = this.q.defer();\n if (!model.isModified() && patch) {\n defered.resolve(model);\n return defered.promise;\n }\n url = this.resolveUrlForAttributeModel(model);\n data = {};\n data[attribute] = model.getAttrs();\n if (patch) {\n promise = this.http.patch(url, data);\n } else {\n promise = this.http.put(url, data);\n }\n promise.success((function(_this) {\n return function(data, status) {\n model._isModified = false;\n model._attrs = _.extend(model.getAttrs(), data);\n model._modifiedAttrs = {};\n model.applyCasts();\n return defered.resolve(model);\n };\n })(this));\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.refresh = function(model) {\n var defered, promise, url;\n defered = this.q.defer();\n url = this.resolveUrlForModel(model);\n promise = this.http.get(url);\n promise.success(function(data, status) {\n model._modifiedAttrs = {};\n model._attrs = data;\n model._isModified = false;\n model.applyCasts();\n return defered.resolve(model);\n });\n promise.error(function(data, status) {\n return defered.reject(data);\n });\n return defered.promise;\n };\n\n RepositoryService.prototype.queryMany = function(name, params, options, headers) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n if (headers == null) {\n headers = false;\n }\n url = this.urls.resolve(name);\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var result;\n result = _.map(data.data, function(x) {\n return _this.model.make_model(name, x);\n });\n if (headers) {\n return [result, data.headers];\n }\n return result;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOneAttribute = function(name, id, attribute, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name, id);\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var model;\n model = _this.model.make_model(name, data.data[attribute]);\n model.parent = id;\n return model;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOne = function(name, id, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n if (id) {\n url = url + \"/\" + id;\n }\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n return _this.model.make_model(name, data.data);\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOneRaw = function(name, id, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n if (id) {\n url = url + \"/\" + id;\n }\n httpOptions = _.merge({\n headers: {}\n }, options);\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryPaginated = function(name, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n httpOptions = _.merge({\n headers: {}\n }, options);\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var headers, result;\n headers = data.headers();\n result = {};\n result.models = _.map(data.data, function(x) {\n return _this.model.make_model(name, x);\n });\n result.count = parseInt(headers[\"x-pagination-count\"], 10);\n result.current = parseInt(headers[\"x-pagination-current\"] || 1, 10);\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10);\n return result;\n };\n })(this));\n };\n\n RepositoryService.prototype.queryOnePaginatedRaw = function(name, id, params, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = this.urls.resolve(name);\n if (id) {\n url = url + \"/\" + id;\n }\n httpOptions = _.merge({\n headers: {}\n }, options);\n return this.http.get(url, params, httpOptions).then((function(_this) {\n return function(data) {\n var headers, result;\n headers = data.headers();\n result = {};\n result.data = data.data;\n result.count = parseInt(headers[\"x-pagination-count\"], 10);\n result.current = parseInt(headers[\"x-pagination-current\"] || 1, 10);\n result.paginatedBy = parseInt(headers[\"x-paginated-by\"], 10);\n return result;\n };\n })(this));\n };\n\n RepositoryService.prototype.resolve = function(options) {\n var cache, params;\n params = {};\n if (options.pslug != null) {\n params.project = options.pslug;\n }\n if (options.usref != null) {\n params.us = options.usref;\n }\n if (options.taskref != null) {\n params.task = options.taskref;\n }\n if (options.issueref != null) {\n params.issue = options.issueref;\n }\n if (options.sslug != null) {\n params.milestone = options.sslug;\n }\n if (options.wikipage != null) {\n params.wikipage = options.wikipage;\n }\n if (options.ref != null) {\n params.ref = options.ref;\n }\n cache = !(options.wikipage || options.sslug);\n return this.queryOneRaw(\"resolver\", null, params, {\n cache: cache\n });\n };\n\n return RepositoryService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgRepo\", RepositoryService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/storage.coffee\n */\n\n(function() {\n var StorageService, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n StorageService = (function(superClass) {\n extend(StorageService, superClass);\n\n StorageService.$inject = [\"$rootScope\"];\n\n function StorageService($rootScope) {\n StorageService.__super__.constructor.call(this);\n }\n\n StorageService.prototype.get = function(key, _default) {\n var serializedValue;\n serializedValue = localStorage.getItem(key);\n if (serializedValue === null) {\n return _default || null;\n }\n return JSON.parse(serializedValue);\n };\n\n StorageService.prototype.set = function(key, val) {\n if (_.isObject(key)) {\n return _.each(key, (function(_this) {\n return function(val, key) {\n return _this.set(key, val);\n };\n })(this));\n } else {\n return localStorage.setItem(key, JSON.stringify(val));\n }\n };\n\n StorageService.prototype.contains = function(key) {\n var value;\n value = this.get(key);\n return value !== null;\n };\n\n StorageService.prototype.remove = function(key) {\n return localStorage.removeItem(key);\n };\n\n StorageService.prototype.clear = function() {\n return localStorage.clear();\n };\n\n return StorageService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service(\"$tgStorage\", StorageService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/base/urls.coffee\n */\n\n(function() {\n var UrlsService, format, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n format = function(fmt, obj) {\n obj = _.clone(obj);\n return fmt.replace(/%s/g, function(match) {\n return String(obj.shift());\n });\n };\n\n taiga = this.taiga;\n\n UrlsService = (function(superClass) {\n extend(UrlsService, superClass);\n\n UrlsService.$inject = [\"$tgConfig\"];\n\n function UrlsService(config) {\n this.config = config;\n this.urls = {};\n this.mainUrl = this.config.get(\"api\");\n }\n\n UrlsService.prototype.update = function(urls) {\n return this.urls = _.merge(this.urls, urls);\n };\n\n UrlsService.prototype.resolve = function() {\n var args, name, url;\n args = _.toArray(arguments);\n if (args.length === 0) {\n throw Error(\"wrong arguments to setUrls\");\n }\n name = args.slice(0, 1)[0];\n url = format(this.urls[name], args.slice(1));\n return format(\"%s/%s\", [_.trimEnd(this.mainUrl, \"/\"), _.trimStart(url, \"/\")]);\n };\n\n UrlsService.prototype.resolveAbsolute = function() {\n var url;\n url = this.resolve.apply(this, arguments);\n if (/^https?:\\/\\//i.test(url)) {\n return url;\n }\n if (/^\\//.test(url)) {\n return window.location.protocol + \"//\" + window.location.host + url;\n }\n return window.location.protocol + \"//\" + window.location.host + \"/\" + url;\n };\n\n return UrlsService;\n\n })(taiga.Service);\n\n module = angular.module(\"taigaBase\");\n\n module.service('$tgUrls', UrlsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/custom-attributes-values.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo) {\n var _get, service;\n _get = function(objectId, resource) {\n return $repo.queryOne(resource, objectId);\n };\n service = {\n epic: {\n get: function(objectId) {\n return _get(objectId, \"custom-attributes-values/epic\");\n }\n },\n userstory: {\n get: function(objectId) {\n return _get(objectId, \"custom-attributes-values/userstory\");\n }\n },\n task: {\n get: function(objectId) {\n return _get(objectId, \"custom-attributes-values/task\");\n }\n },\n issue: {\n get: function(objectId) {\n return _get(objectId, \"custom-attributes-values/issue\");\n }\n }\n };\n return function(instance) {\n return instance.customAttributesValues = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgCustomAttributesValuesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/custom-attributes.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($repo) {\n var _list, service;\n _list = function(projectId, resource) {\n return $repo.queryMany(resource, {\n project: projectId\n });\n };\n service = {\n epic: {\n list: function(projectId) {\n return _list(projectId, \"custom-attributes/epic\");\n }\n },\n userstory: {\n list: function(projectId) {\n return _list(projectId, \"custom-attributes/userstory\");\n }\n },\n task: {\n list: function(projectId) {\n return _list(projectId, \"custom-attributes/task\");\n }\n },\n issue: {\n list: function(projectId) {\n return _list(projectId, \"custom-attributes/issue\");\n }\n }\n };\n return function(instance) {\n return instance.customAttributes = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgCustomAttributesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/epics.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage) {\n var hashSuffix, service;\n service = {};\n hashSuffix = \"epics-queryparams\";\n service.getByRef = function(projectId, ref) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params.ref = ref;\n return $repo.queryOne(\"epics\", \"by_ref\", params);\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(type, params);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.upvote = function(epicId) {\n var url;\n url = $urls.resolve(\"epic-upvote\", epicId);\n return $http.post(url);\n };\n service.downvote = function(epicId) {\n var url;\n url = $urls.resolve(\"epic-downvote\", epicId);\n return $http.post(url);\n };\n service.watch = function(epicId) {\n var url;\n url = $urls.resolve(\"epic-watch\", epicId);\n return $http.post(url);\n };\n service.unwatch = function(epicId) {\n var url;\n url = $urls.resolve(\"epic-unwatch\", epicId);\n return $http.post(url);\n };\n return function(instance) {\n return instance.epics = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgEpicsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/history.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(type, objectId) {\n return $repo.queryOneRaw(\"history/\" + type, objectId);\n };\n service.editComment = function(type, objectId, activityId, comment) {\n var commentData, params, url;\n url = $urls.resolve(\"history/\" + type);\n url = url + \"/\" + objectId + \"/edit_comment\";\n params = {\n id: activityId\n };\n commentData = {\n comment: comment\n };\n return $http.post(url, commentData, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n service.getCommentHistory = function(type, objectId, activityId) {\n var params, url;\n url = $urls.resolve(\"history/\" + type);\n url = url + \"/\" + objectId + \"/comment_versions\";\n params = {\n id: activityId\n };\n return $http.get(url, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n service.deleteComment = function(type, objectId, activityId) {\n var params, url;\n url = $urls.resolve(\"history/\" + type);\n url = url + \"/\" + objectId + \"/delete_comment\";\n params = {\n id: activityId\n };\n return $http.post(url, null, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n service.undeleteComment = function(type, objectId, activityId) {\n var params, url;\n url = $urls.resolve(\"history/\" + type);\n url = url + \"/\" + objectId + \"/undelete_comment\";\n params = {\n id: activityId\n };\n return $http.post(url, null, params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n return function(instance) {\n return instance.history = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgHistoryResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/invitations.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo) {\n var service;\n service = {};\n service.get = function(token) {\n return $repo.queryOne(\"invitations\", token);\n };\n return function(instance) {\n return instance.invitations = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgInvitationsResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/issues.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage, $q) {\n var hashSuffix, service;\n service = {};\n hashSuffix = \"issues-queryparams\";\n service.get = function(projectId, issueId) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n return $repo.queryOne(\"issues\", issueId, params);\n };\n service.getByRef = function(projectId, ref) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params.ref = ref;\n return $repo.queryOne(\"issues\", \"by_ref\", params);\n };\n service.listInAllProjects = function(filters) {\n return $repo.queryMany(\"issues\", filters);\n };\n service.list = function(projectId, filters, options) {\n var params;\n params = {\n project: projectId\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryPaginated(\"issues\", params, options);\n };\n service.listInProject = function(projectId, sprintId, params) {\n if (sprintId == null) {\n sprintId = null;\n }\n params = _.merge(params, {\n project: projectId\n });\n if (sprintId) {\n params.milestone = sprintId;\n }\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"issues\", params);\n };\n service.bulkCreate = function(projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-create-issues\");\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_issues: data\n };\n return $http.post(url, params);\n };\n service.upvote = function(issueId) {\n var url;\n url = $urls.resolve(\"issue-upvote\", issueId);\n return $http.post(url);\n };\n service.downvote = function(issueId) {\n var url;\n url = $urls.resolve(\"issue-downvote\", issueId);\n return $http.post(url);\n };\n service.watch = function(issueId) {\n var url;\n url = $urls.resolve(\"issue-watch\", issueId);\n return $http.post(url);\n };\n service.unwatch = function(issueId) {\n var url;\n url = $urls.resolve(\"issue-unwatch\", issueId);\n return $http.post(url);\n };\n service.stats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", projectId + \"/issues_stats\");\n };\n service.filtersData = function(params) {\n return $repo.queryOneRaw(\"issues-filters\", null, params);\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(type, params);\n };\n service.createDefaultValues = function(projectId, type) {\n var data, url;\n data = {\n \"project_id\": projectId\n };\n url = $urls.resolve(type + \"-create-default\");\n return $http.post(url, data);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.bulkUpdateMilestone = function(projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-issue-milestone\");\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_issues: data\n };\n return $http.post(url, params);\n };\n return function(instance) {\n return instance.issues = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgIssuesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/kanban.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($storage) {\n var hashSuffixStatusColumnModes, hashSuffixStatusViewModes, service;\n service = {};\n hashSuffixStatusViewModes = \"kanban-statusviewmodels\";\n hashSuffixStatusColumnModes = \"kanban-statuscolumnmodels\";\n service.storeStatusColumnModes = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getStatusColumnModes = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n return function(instance) {\n return instance.kanban = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgKanbanResourcesProvider\", [\"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/locales.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($repo) {\n var service;\n service = {\n list: function() {\n return $repo.queryMany(\"locales\");\n }\n };\n return function(instance) {\n return instance.locales = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgLocalesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/mdrender.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $urls, $http) {\n var service;\n service = {};\n service.render = function(projectId, content) {\n var params, url;\n if ((content == null) || content === \"\") {\n content = ' ';\n }\n params = {\n project_id: projectId,\n content: content\n };\n url = $urls.resolve(\"wiki\");\n return $http.post(url + \"/render\", params).then((function(_this) {\n return function(data) {\n return data.data;\n };\n })(this));\n };\n return function(instance) {\n return instance.mdrender = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgMdRenderResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/memberships.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"memberships\", id);\n };\n service.list = function(projectId, filters, enablePagination) {\n var options, params;\n if (enablePagination == null) {\n enablePagination = true;\n }\n params = {\n project: projectId\n };\n params = _.extend({}, params, filters || {});\n if (enablePagination) {\n return $repo.queryPaginated(\"memberships\", params);\n }\n return $repo.queryMany(\"memberships\", params, options = {\n enablePagination: enablePagination\n });\n };\n service.listByUser = function(userId, filters) {\n var params;\n params = {\n user: userId\n };\n params = _.extend({}, params, filters || {});\n return $repo.queryPaginated(\"memberships\", params);\n };\n service.resendInvitation = function(id) {\n var url;\n url = $urls.resolve(\"memberships\");\n return $http.post(url + \"/\" + id + \"/resend_invitation\", {});\n };\n service.bulkCreateMemberships = function(projectId, data, invitation_extra_text) {\n var params, url;\n url = $urls.resolve(\"bulk-create-memberships\");\n params = {\n project_id: projectId,\n bulk_memberships: data,\n invitation_extra_text: invitation_extra_text\n };\n return $http.post(url, params);\n };\n return function(instance) {\n return instance.memberships = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgMembershipsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/modules.coffee\n */\n\n(function() {\n var module, resourceProvider;\n\n resourceProvider = function($repo) {\n var service;\n service = {};\n service.list = function(projectId, module) {\n return $repo.queryOneAttribute(\"project-modules\", projectId, module);\n };\n return function(instance) {\n return instance.modules = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgModulesResourcesProvider\", [\"$tgRepo\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/notify-policies.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"notify-policies\", id);\n };\n service.list = function(filters) {\n var params;\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"notify-policies\", params);\n };\n return function(instance) {\n return instance.notifyPolicies = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgNotifyPoliciesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/projects.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($config, $repo, $http, $urls, $auth, $q, $translate) {\n var service;\n service = {};\n service.get = function(projectId) {\n return $repo.queryOne(\"projects\", projectId);\n };\n service.getBySlug = function(projectSlug) {\n return $repo.queryOne(\"projects\", \"by_slug?slug=\" + projectSlug);\n };\n service.list = function(filters) {\n var params;\n params = {\n \"order_by\": \"user_order\"\n };\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"projects\", params);\n };\n service.listByMember = function(memberId) {\n var params;\n params = {\n \"member\": memberId,\n \"order_by\": \"user_order\"\n };\n return $repo.queryMany(\"projects\", params);\n };\n service.templates = function() {\n return $repo.queryMany(\"project-templates\");\n };\n service.usersList = function(projectId) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(\"users\", params);\n };\n service.rolesList = function(projectId) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(\"roles\", params);\n };\n service.stats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", projectId + \"/stats\");\n };\n service.bulkUpdateOrder = function(bulkData) {\n var url;\n url = $urls.resolve(\"bulk-update-projects-order\");\n return $http.post(url, bulkData);\n };\n service.regenerate_epics_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/regenerate_epics_csv_uuid\";\n return $http.post(url);\n };\n service.regenerate_userstories_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/regenerate_userstories_csv_uuid\";\n return $http.post(url);\n };\n service.regenerate_tasks_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/regenerate_tasks_csv_uuid\";\n return $http.post(url);\n };\n service.regenerate_issues_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/regenerate_issues_csv_uuid\";\n return $http.post(url);\n };\n service.delete_epics_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_epics_csv_uuid\";\n return $http.post(url);\n };\n service.delete_userstories_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_userstories_csv_uuid\";\n return $http.post(url);\n };\n service.delete_tasks_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_tasks_csv_uuid\";\n return $http.post(url);\n };\n service.delete_issues_csv_uuid = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_issues_csv_uuid\";\n return $http.post(url);\n };\n service.leave = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/leave\";\n return $http.post(url);\n };\n service.memberStats = function(projectId) {\n return $repo.queryOneRaw(\"projects\", projectId + \"/member_stats\");\n };\n service.tagsColors = function(projectId) {\n return $repo.queryOne(\"projects\", projectId + \"/tags_colors\");\n };\n service.deleteTag = function(projectId, tag) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/delete_tag\";\n return $http.post(url, {\n tag: tag\n });\n };\n service.createTag = function(projectId, tag, color) {\n var data, url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/create_tag\";\n data = {};\n data.tag = tag;\n data.color = null;\n if (color) {\n data.color = color;\n }\n return $http.post(url, data);\n };\n service.editTag = function(projectId, from_tag, to_tag, color) {\n var data, url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/edit_tag\";\n data = {};\n data.from_tag = from_tag;\n if (to_tag) {\n data.to_tag = to_tag;\n }\n data.color = null;\n if (color) {\n data.color = color;\n }\n return $http.post(url, data);\n };\n service.mixTags = function(projectId, to_tag, from_tags) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/mix_tags\";\n return $http.post(url, {\n to_tag: to_tag,\n from_tags: from_tags\n });\n };\n service[\"export\"] = function(projectId) {\n var url;\n url = ($urls.resolve(\"exporter\")) + \"/\" + projectId;\n return $http.get(url);\n };\n service[\"import\"] = function(file, statusUpdater) {\n var complete, data, defered, errorMsg, failed, maxFileSize, response, uploadComplete, uploadFailed, uploadProgress, xhr;\n defered = $q.defer();\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n errorMsg = $translate.instant(\"PROJECT.IMPORT.ERROR_MAX_SIZE_EXCEEDED\", {\n fileName: file.name,\n fileSize: sizeFormat(file.size),\n maxFileSize: sizeFormat(maxFileSize)\n });\n response = {\n status: 413,\n data: {\n _error_message: errorMsg\n }\n };\n defered.reject(response);\n return defered.promise;\n }\n uploadProgress = (function(_this) {\n return function(evt) {\n var message, percent;\n percent = Math.round((evt.loaded / evt.total) * 100);\n message = $translate.instant(\"PROJECT.IMPORT.UPLOAD_IN_PROGRESS_MESSAGE\", {\n uploadedSize: sizeFormat(evt.loaded),\n totalSize: sizeFormat(evt.total)\n });\n return statusUpdater(\"in-progress\", null, message, percent);\n };\n })(this);\n uploadComplete = (function(_this) {\n return function(evt) {\n return statusUpdater(\"done\", $translate.instant(\"PROJECT.IMPORT.TITLE\"), $translate.instant(\"PROJECT.IMPORT.DESCRIPTION\"));\n };\n })(this);\n uploadFailed = (function(_this) {\n return function(evt) {\n return statusUpdater(\"error\");\n };\n })(this);\n complete = (function(_this) {\n return function(evt) {\n var ref;\n response = {};\n try {\n response.data = JSON.parse(evt.target.responseText);\n } catch (error) {\n response.data = {};\n }\n response.status = evt.target.status;\n if (evt.target.getResponseHeader('Taiga-Info-Project-Is-Private')) {\n response.headers = {\n isPrivate: evt.target.getResponseHeader('Taiga-Info-Project-Is-Private') === 'True',\n memberships: parseInt(evt.target.getResponseHeader('Taiga-Info-Project-Memberships'))\n };\n }\n if ((ref = response.status) === 201 || ref === 202) {\n defered.resolve(response);\n }\n return defered.reject(response);\n };\n })(this);\n failed = (function(_this) {\n return function(evt) {\n return defered.reject(\"fail\");\n };\n })(this);\n data = new FormData();\n data.append('dump', file);\n xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", uploadProgress, false);\n xhr.upload.addEventListener(\"load\", uploadComplete, false);\n xhr.upload.addEventListener(\"error\", uploadFailed, false);\n xhr.upload.addEventListener(\"abort\", uploadFailed, false);\n xhr.addEventListener(\"load\", complete, false);\n xhr.addEventListener(\"error\", failed, false);\n xhr.open(\"POST\", $urls.resolve(\"importer\"));\n xhr.setRequestHeader(\"Authorization\", \"Bearer \" + ($auth.getToken()));\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send(data);\n return defered.promise;\n };\n service.changeLogo = function(projectId, file) {\n var data, defered, maxFileSize, options, response, url;\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n response = {\n status: 413,\n data: {\n _error_message: \"'\" + file.name + \"' (\" + (sizeFormat(file.size)) + \") is too heavy for our oompa loompas, try it with a smaller than (\" + (sizeFormat(maxFileSize)) + \")\"\n }\n };\n defered = $q.defer();\n defered.reject(response);\n return defered.promise;\n }\n data = new FormData();\n data.append('logo', file);\n options = {\n transformRequest: angular.identity,\n headers: {\n 'Content-Type': void 0\n }\n };\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/change_logo\";\n return $http.post(url, data, {}, options);\n };\n service.removeLogo = function(projectId) {\n var url;\n url = ($urls.resolve(\"projects\")) + \"/\" + projectId + \"/remove_logo\";\n return $http.post(url);\n };\n return function(instance) {\n return instance.projects = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgProjectsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgAuth\", \"$q\", \"$translate\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/roles.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"roles\", id);\n };\n service.list = function(projectId) {\n return $repo.queryMany(\"roles\", {\n project: projectId\n });\n };\n return function(instance) {\n return instance.roles = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgRolesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/search.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $urls, $http, $q) {\n var service;\n service = {};\n service[\"do\"] = function(projectId, term) {\n var deferredAbort, params, request, url;\n deferredAbort = $q.defer();\n url = $urls.resolve(\"search\");\n params = {\n url: url,\n method: \"GET\",\n timeout: deferredAbort.promise,\n cancelable: true,\n params: {\n project: projectId,\n text: term,\n get_all: false\n }\n };\n request = $http.request(params).then(function(data) {\n return data.data;\n });\n request.abort = function() {\n return deferredAbort.resolve();\n };\n request[\"finally\"] = function() {\n request.abort = angular.noop;\n return deferredAbort = request = null;\n };\n return request;\n };\n return function(instance) {\n return instance.search = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgSearchResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/sprints.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $model, $storage, $http, $urls) {\n var service;\n service = {};\n service.get = function(projectId, sprintId) {\n return $repo.queryOne(\"milestones\", sprintId).then(function(sprint) {\n var uses;\n uses = sprint.user_stories;\n uses = _.map(uses, function(u) {\n return $model.make_model(\"userstories\", u);\n });\n sprint._attrs.user_stories = uses;\n return sprint;\n });\n };\n service.stats = function(projectId, sprintId) {\n return $repo.queryOneRaw(\"milestones\", sprintId + \"/stats\");\n };\n service.list = function(projectId, filters) {\n var params;\n params = {\n \"project\": projectId\n };\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"milestones\", params, {}, true).then((function(_this) {\n return function(result) {\n var headers, i, len, m, milestones, uses;\n milestones = result[0];\n headers = result[1];\n for (i = 0, len = milestones.length; i < len; i++) {\n m = milestones[i];\n uses = m.user_stories;\n uses = _.map(uses, function(u) {\n return $model.make_model(\"userstories\", u);\n });\n m._attrs.user_stories = uses;\n }\n return {\n milestones: milestones,\n closed: parseInt(headers(\"Taiga-Info-Total-Closed-Milestones\"), 10),\n open: parseInt(headers(\"Taiga-Info-Total-Opened-Milestones\"), 10)\n };\n };\n })(this));\n };\n service.moveUserStoriesMilestone = function(currentMilestoneId, projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"move-userstories-to-milestone\", currentMilestoneId);\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.moveTasksMilestone = function(currentMilestoneId, projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"move-tasks-to-milestone\", currentMilestoneId);\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_tasks: data\n };\n return $http.post(url, params);\n };\n service.moveIssuesMilestone = function(currentMilestoneId, projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"move-issues-to-milestone\", currentMilestoneId);\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_issues: data\n };\n return $http.post(url, params);\n };\n return function(instance) {\n return instance.sprints = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgSprintsResourcesProvider\", [\"$tgRepo\", \"$tgModel\", \"$tgStorage\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/tasks.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage) {\n var hashSuffix, hashSuffixStatusColumnModes, hashSuffixUsRowModes, service;\n service = {};\n hashSuffix = \"tasks-queryparams\";\n hashSuffixStatusColumnModes = \"tasks-statuscolumnmodels\";\n hashSuffixUsRowModes = \"tasks-usrowmodels\";\n service.get = function(projectId, taskId, extraParams) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params = _.extend({}, params, extraParams);\n return $repo.queryOne(\"tasks\", taskId, params);\n };\n service.getByRef = function(projectId, ref, extraParams) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params.ref = ref;\n params = _.extend({}, params, extraParams);\n return $repo.queryOne(\"tasks\", \"by_ref\", params);\n };\n service.listInAllProjects = function(filters) {\n return $repo.queryMany(\"tasks\", filters);\n };\n service.filtersData = function(params) {\n return $repo.queryOneRaw(\"task-filters\", null, params);\n };\n service.list = function(projectId, sprintId, userStoryId, params) {\n if (sprintId == null) {\n sprintId = null;\n }\n if (userStoryId == null) {\n userStoryId = null;\n }\n params = _.merge(params, {\n project: projectId,\n order_by: 'us_order'\n });\n if (sprintId) {\n params.milestone = sprintId;\n }\n if (userStoryId) {\n params.user_story = userStoryId;\n }\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"tasks\", params);\n };\n service.bulkCreate = function(projectId, sprintId, usId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-create-tasks\");\n params = {\n project_id: projectId,\n milestone_id: sprintId,\n us_id: usId,\n bulk_tasks: data\n };\n return $http.post(url, params).then(function(result) {\n return result.data;\n });\n };\n service.upvote = function(taskId) {\n var url;\n url = $urls.resolve(\"task-upvote\", taskId);\n return $http.post(url);\n };\n service.downvote = function(taskId) {\n var url;\n url = $urls.resolve(\"task-downvote\", taskId);\n return $http.post(url);\n };\n service.watch = function(taskId) {\n var url;\n url = $urls.resolve(\"task-watch\", taskId);\n return $http.post(url);\n };\n service.unwatch = function(taskId) {\n var url;\n url = $urls.resolve(\"task-unwatch\", taskId);\n return $http.post(url);\n };\n service.bulkUpdateTaskTaskboardOrder = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-task-taskboard-order\");\n params = {\n project_id: projectId,\n bulk_tasks: data\n };\n return $http.post(url, params);\n };\n service.bulkUpdateMilestone = function(projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-task-milestone\");\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_tasks: data\n };\n return $http.post(url, params);\n };\n service.reorder = function(id, data, setOrders) {\n var options, url;\n url = $urls.resolve(\"tasks\") + (\"/\" + id);\n options = {\n \"headers\": {\n \"set-orders\": JSON.stringify(setOrders)\n }\n };\n return $http.patch(url, data, null, options).then(function(result) {\n return result.data;\n });\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n return $repo.queryMany(type, params);\n };\n service.createDefaultValues = function(projectId, type) {\n var data, url;\n data = {\n \"project_id\": projectId\n };\n url = $urls.resolve(type + \"-create-default\");\n return $http.post(url, data);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeStatusColumnModes = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getStatusColumnModes = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixStatusColumnModes;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeUsRowModes = function(projectId, sprintId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixUsRowModes;\n hash = generateHash([projectId, sprintId, ns]);\n return $storage.set(hash, params);\n };\n service.getUsRowModes = function(projectId, sprintId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffixUsRowModes;\n hash = generateHash([projectId, sprintId, ns]);\n return $storage.get(hash) || {};\n };\n return function(instance) {\n return instance.tasks = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgTasksResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/user-project-settings.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(id) {\n return $repo.queryOne(\"user-project-settings\", id);\n };\n service.list = function(filters) {\n var params;\n params = _.extend({}, params, filters || {});\n return $repo.queryMany(\"user-project-settings\", params);\n };\n return function(instance) {\n return instance.userProjectSettings = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUserProjectSettingsResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/user-settings.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($config, $repo, $http, $urls, $q) {\n var service;\n service = {};\n service.changeAvatar = function(file) {\n var data, defered, maxFileSize, options, response, url;\n maxFileSize = $config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n response = {\n status: 413,\n data: {\n _error_message: \"'\" + file.name + \"' (\" + (sizeFormat(file.size)) + \") is too heavy for our oompa loompas, try it with a smaller than (\" + (sizeFormat(maxFileSize)) + \")\"\n }\n };\n defered = $q.defer();\n defered.reject(response);\n return defered.promise;\n }\n data = new FormData();\n data.append('avatar', file);\n options = {\n transformRequest: angular.identity,\n headers: {\n 'Content-Type': void 0\n }\n };\n url = ($urls.resolve(\"users\")) + \"/change_avatar\";\n return $http.post(url, data, {}, options);\n };\n service.removeAvatar = function() {\n var url;\n url = ($urls.resolve(\"users\")) + \"/remove_avatar\";\n return $http.post(url);\n };\n service.changePassword = function(currentPassword, newPassword) {\n var data, url;\n url = ($urls.resolve(\"users\")) + \"/change_password\";\n data = {\n current_password: currentPassword,\n password: newPassword\n };\n return $http.post(url, data);\n };\n return function(instance) {\n return instance.userSettings = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUserSettingsResourcesProvider\", [\"$tgConfig\", \"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/users.coffee\n */\n\n(function() {\n var module, resourceProvider, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n resourceProvider = function($http, $urls) {\n var service;\n service = {};\n service.contacts = function(userId, options) {\n var httpOptions, url;\n if (options == null) {\n options = {};\n }\n url = $urls.resolve(\"user-contacts\", userId);\n httpOptions = {\n headers: {}\n };\n if (!options.enablePagination) {\n httpOptions.headers[\"x-disable-pagination\"] = \"1\";\n }\n return $http.get(url, {}, httpOptions).then(function(result) {\n return result.data;\n });\n };\n return function(instance) {\n return instance.users = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUsersResourcesProvider\", [\"$tgHttp\", \"$tgUrls\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/userstories.coffee\n */\n\n(function() {\n var generateHash, module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n generateHash = taiga.generateHash;\n\n resourceProvider = function($repo, $http, $urls, $storage, $q) {\n var hashSuffix, service;\n service = {};\n hashSuffix = \"userstories-queryparams\";\n service.get = function(projectId, usId, extraParams) {\n var params;\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params = _.extend({}, params, extraParams);\n return $repo.queryOne(\"userstories\", usId, params);\n };\n service.getByRef = function(projectId, ref, extraParams) {\n var params;\n if (extraParams == null) {\n extraParams = {};\n }\n params = service.getQueryParams(projectId);\n params.project = projectId;\n params.ref = ref;\n params = _.extend({}, params, extraParams);\n return $repo.queryOne(\"userstories\", \"by_ref\", params);\n };\n service.listInAllProjects = function(filters) {\n return $repo.queryMany(\"userstories\", filters);\n };\n service.filtersData = function(params) {\n return $repo.queryOneRaw(\"userstories-filters\", null, params);\n };\n service.listUnassigned = function(projectId, filters, pageSize) {\n var params;\n params = {\n \"project\": projectId,\n \"milestone\": \"null\"\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"userstories\", _.extend(params, {\n page_size: pageSize\n }), {\n enablePagination: true\n }, true);\n };\n service.listAll = function(projectId, filters) {\n var params;\n params = {\n \"project\": projectId\n };\n params = _.extend({}, params, filters || {});\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(\"userstories\", params);\n };\n service.bulkCreate = function(projectId, status, bulk) {\n var data, url;\n data = {\n project_id: projectId,\n status_id: status,\n bulk_stories: bulk\n };\n url = $urls.resolve(\"bulk-create-us\");\n return $http.post(url, data);\n };\n service.upvote = function(userStoryId) {\n var url;\n url = $urls.resolve(\"userstory-upvote\", userStoryId);\n return $http.post(url);\n };\n service.downvote = function(userStoryId) {\n var url;\n url = $urls.resolve(\"userstory-downvote\", userStoryId);\n return $http.post(url);\n };\n service.watch = function(userStoryId) {\n var url;\n url = $urls.resolve(\"userstory-watch\", userStoryId);\n return $http.post(url);\n };\n service.unwatch = function(userStoryId) {\n var url;\n url = $urls.resolve(\"userstory-unwatch\", userStoryId);\n return $http.post(url);\n };\n service.bulkUpdateBacklogOrder = function(projectId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-backlog-order\");\n params = {\n project_id: projectId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.bulkUpdateMilestone = function(projectId, milestoneId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-milestone\");\n params = {\n project_id: projectId,\n milestone_id: milestoneId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.bulkUpdateKanbanOrder = function(projectId, statusId, data) {\n var params, url;\n url = $urls.resolve(\"bulk-update-us-kanban-order\");\n params = {\n project_id: projectId,\n status_id: statusId,\n bulk_stories: data\n };\n return $http.post(url, params);\n };\n service.listValues = function(projectId, type) {\n var params;\n params = {\n \"project\": projectId\n };\n service.storeQueryParams(projectId, params);\n return $repo.queryMany(type, params);\n };\n service.createDefaultValues = function(projectId, type) {\n var data, url;\n data = {\n \"project_id\": projectId\n };\n url = $urls.resolve(type + \"-create-default\");\n return $http.post(url, data);\n };\n service.storeQueryParams = function(projectId, params) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.set(hash, params);\n };\n service.getQueryParams = function(projectId) {\n var hash, ns;\n ns = projectId + \":\" + hashSuffix;\n hash = generateHash([projectId, ns]);\n return $storage.get(hash) || {};\n };\n service.storeShowTags = function(projectId, showTags) {\n var hash;\n hash = generateHash([projectId, 'showTags']);\n return $storage.set(hash, showTags);\n };\n service.getShowTags = function(projectId) {\n var hash;\n hash = generateHash([projectId, 'showTags']);\n return $storage.get(hash) || null;\n };\n return function(instance) {\n return instance.userstories = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgUserstoriesResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", \"$tgStorage\", \"$q\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/webhooklogs.coffee\n */\n\n(function() {\n var module, resourceProvider;\n\n resourceProvider = function($repo, $urls, $http) {\n var service;\n service = {};\n service.list = function(webhookId) {\n var params;\n params = {\n webhook: webhookId\n };\n return $repo.queryMany(\"webhooklogs\", params);\n };\n service.resend = function(webhooklogId) {\n var url;\n url = $urls.resolve(\"webhooklogs-resend\", webhooklogId);\n return $http.post(url);\n };\n return function(instance) {\n return instance.webhooklogs = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgWebhookLogsResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/webhooks.coffee\n */\n\n(function() {\n var module, resourceProvider;\n\n resourceProvider = function($repo, $urls, $http) {\n var service;\n service = {};\n service.list = function(projectId) {\n var params;\n params = {\n project: projectId\n };\n return $repo.queryMany(\"webhooks\", params);\n };\n service.test = function(webhookId) {\n var url;\n url = $urls.resolve(\"webhooks-test\", webhookId);\n return $http.post(url);\n };\n return function(instance) {\n return instance.webhooks = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgWebhooksResourcesProvider\", [\"$tgRepo\", \"$tgUrls\", \"$tgHttp\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/resources/wiki.coffee\n */\n\n(function() {\n var module, resourceProvider, taiga;\n\n taiga = this.taiga;\n\n resourceProvider = function($repo, $http, $urls) {\n var service;\n service = {};\n service.get = function(wikiId) {\n return $repo.queryOne(\"wiki\", wikiId);\n };\n service.getBySlug = function(projectId, slug) {\n return $repo.queryOne(\"wiki\", \"by_slug?project=\" + projectId + \"&slug=\" + slug);\n };\n service.list = function(projectId) {\n return $repo.queryMany(\"wiki\", {\n project: projectId\n });\n };\n service.listLinks = function(projectId) {\n return $repo.queryMany(\"wiki-links\", {\n project: projectId\n });\n };\n return function(instance) {\n return instance.wiki = service;\n };\n };\n\n module = angular.module(\"taigaResources\");\n\n module.factory(\"$tgWikiResourcesProvider\", [\"$tgRepo\", \"$tgHttp\", \"$tgUrls\", resourceProvider]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/change-password.coffee\n */\n\n(function() {\n var UserChangePasswordController, UserChangePasswordDirective, debounce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserChangePasswordController = (function(superClass) {\n extend(UserChangePasswordController, superClass);\n\n UserChangePasswordController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\", \"$translate\"];\n\n function UserChangePasswordController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, auth, translate) {\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.translate = translate;\n this.scope.sectionName = this.translate.instant(\"CHANGE_PASSWORD.SECTION_NAME\");\n this.scope.user = this.auth.getUser();\n }\n\n return UserChangePasswordController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserChangePasswordController\", UserChangePasswordController);\n\n UserChangePasswordDirective = function($rs, $confirm, $loading, $translate) {\n var link;\n link = function($scope, $el, $attrs, ctrl) {\n var form, submit, submitButton;\n form = new checksley.Form($el.find(\"form\"));\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var currentLoading, promise;\n event.preventDefault();\n if (!form.validate()) {\n return;\n }\n if ($scope.newPassword1 !== $scope.newPassword2) {\n $confirm.notify('error', $translate.instant(\"CHANGE_PASSWORD.ERROR_PASSWORD_MATCH\"));\n return;\n }\n currentLoading = $loading().target(submitButton).start();\n promise = $rs.userSettings.changePassword($scope.currentPassword, $scope.newPassword1);\n promise.then(function() {\n currentLoading.finish();\n return $confirm.notify('success');\n });\n return promise.then(null, function(response) {\n currentLoading.finish();\n return $confirm.notify('error', response.data._error_message);\n });\n };\n })(this));\n submitButton = $el.find(\".submit-button\");\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserChangePassword\", [\"$tgResources\", \"$tgConfirm\", \"$tgLoading\", \"$translate\", UserChangePasswordDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/lightboxes.coffee\n */\n\n(function() {\n var DeleteUserDirective, bindOnce, debounce, module, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n debounce = this.taiga.debounce;\n\n module = angular.module(\"taigaUserSettings\");\n\n DeleteUserDirective = function($repo, $rootscope, $auth, $location, $navUrls, lightboxService, $loading) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit, submitButton;\n $scope.$on(\"deletelightbox:new\", function(ctx, user) {\n return lightboxService.open($el);\n });\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n submit = function() {\n var currentLoading, promise;\n currentLoading = $loading().target(submitButton).start();\n promise = $repo.remove($scope.user);\n promise.then(function(data) {\n currentLoading.finish();\n lightboxService.close($el);\n $auth.logout();\n return $location.path($navUrls.resolve(\"login\"));\n });\n return promise.then(null, function() {\n currentLoading.finish();\n return console.log(\"FAIL\");\n });\n };\n $el.on(\"click\", \".button-green\", function(event) {\n event.preventDefault();\n return lightboxService.close($el);\n });\n $el.on(\"click\", \".button-red\", debounce(2000, function(event) {\n event.preventDefault();\n return submit();\n }));\n return submitButton = $el.find(\".button-red\");\n };\n return {\n link: link,\n templateUrl: \"user/lightbox/lightbox-delete-account.html\"\n };\n };\n\n module.directive(\"tgLbDeleteUser\", [\"$tgRepo\", \"$rootScope\", \"$tgAuth\", \"$tgLocation\", \"$tgNavUrls\", \"lightboxService\", \"$tgLoading\", DeleteUserDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/live-notifications.coffee\n */\n\n(function() {\n var UserLiveNotificationsController, UserLiveNotificationsDirective, UserLiveNotificationsListDirective, bindOnce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserLiveNotificationsController = (function(superClass) {\n extend(UserLiveNotificationsController, superClass);\n\n UserLiveNotificationsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\", \"tgErrorHandlingService\"];\n\n function UserLiveNotificationsController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, auth, errorHandlingService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.errorHandlingService = errorHandlingService;\n this.scope.sectionName = \"USER_SETTINGS.NOTIFICATIONS.LIVE_SECTION_NAME\";\n this.scope.user = this.auth.getUser();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserLiveNotificationsController.prototype.loadInitialData = function() {\n return this.rs.notifyPolicies.list().then((function(_this) {\n return function(notifyPolicies) {\n _this.scope.notifyPolicies = notifyPolicies;\n return notifyPolicies;\n };\n })(this));\n };\n\n return UserLiveNotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserLiveNotificationsController\", UserLiveNotificationsController);\n\n UserLiveNotificationsDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserLiveNotifications\", UserLiveNotificationsDirective);\n\n UserLiveNotificationsListDirective = function($repo, $confirm, $compile) {\n var link, template;\n template = _.template(\"<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\\n
    \\\">\\n
    <%- notifyPolicy.project_name %>
    \\n
    \\n
    \\n \\\" id=\\\"policy-all-<%- notifyPolicy.id %>\\\"\\n value=\\\"2\\\" <% if (notifyPolicy.live_notify_level == 2) { %>checked=\\\"checked\\\"<% } %>/>\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-involved-<%- notifyPolicy.id %>\\\"\\n value=\\\"1\\\" <% if (notifyPolicy.live_notify_level == 1) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-none-<%- notifyPolicy.id %>\\\"\\n value=\\\"3\\\" <% if (notifyPolicy.live_notify_level == 3) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function() {\n var ctx, html;\n $el.off();\n ctx = {\n notifyPolicies: $scope.notifyPolicies\n };\n html = template(ctx);\n $el.html($compile(html)($scope));\n return $el.on(\"change\", \"input[type=radio]\", function(event) {\n var onError, onSuccess, policy, policyIndex, prev_level, target;\n target = angular.element(event.currentTarget);\n policyIndex = target.parents(\".policy-table-row\").data('index');\n policy = $scope.notifyPolicies[policyIndex];\n prev_level = policy.live_notify_level;\n policy.live_notify_level = parseInt(target.val(), 10);\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function() {\n $confirm.notify(\"error\");\n return target.parents(\".policy-table-row\").find(\"input[value=\" + prev_level + \"]\").prop(\"checked\", true);\n };\n return $repo.save(policy).then(onSuccess, onError);\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return bindOnce($scope, $attrs.ngModel, render);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserLiveNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", \"$compile\", UserLiveNotificationsListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/main.coffee\n */\n\n(function() {\n var TaigaAvatarModelDirective, UserAvatarDirective, UserProfileDirective, UserSettingsController, debounce, mixOf, module, sizeFormat, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n sizeFormat = this.taiga.sizeFormat;\n\n module = angular.module(\"taigaUserSettings\");\n\n debounce = this.taiga.debounce;\n\n UserSettingsController = (function(superClass) {\n extend(UserSettingsController, superClass);\n\n UserSettingsController.$inject = [\"$scope\", \"$rootScope\", \"$tgConfig\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\", \"$translate\", \"tgErrorHandlingService\", \"$window\"];\n\n function UserSettingsController(scope, rootscope, config, repo, confirm, rs, params, q, location, navUrls, auth, translate, errorHandlingService, window) {\n var maxFileSize, promise, text;\n this.scope = scope;\n this.rootscope = rootscope;\n this.config = config;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.translate = translate;\n this.errorHandlingService = errorHandlingService;\n this.window = window;\n this.scope.sectionName = \"USER_SETTINGS.MENU.SECTION_TITLE\";\n this.scope.project = {};\n this.scope.user = this.auth.getUser();\n if (!this.scope.user) {\n this.errorHandlingService.permissionDenied();\n }\n this.scope.lang = this.getLan();\n this.scope.theme = this.getTheme();\n maxFileSize = this.config.get(\"maxUploadFileSize\", null);\n if (maxFileSize) {\n text = this.translate.instant(\"USER_SETTINGS.AVATAR_MAX_SIZE\", {\n \"maxFileSize\": sizeFormat(maxFileSize)\n });\n this.scope.maxFileSizeMsg = text;\n }\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserSettingsController.prototype.loadInitialData = function() {\n this.scope.availableThemes = this.config.get(\"themes\", []);\n return this.rs.locales.list().then((function(_this) {\n return function(locales) {\n _this.scope.locales = locales;\n return locales;\n };\n })(this));\n };\n\n UserSettingsController.prototype.openDeleteLightbox = function() {\n return this.rootscope.$broadcast(\"deletelightbox:new\", this.scope.user);\n };\n\n UserSettingsController.prototype.getLan = function() {\n return this.scope.user.lang || this.translate.preferredLanguage();\n };\n\n UserSettingsController.prototype.getTheme = function() {\n return this.scope.user.theme || this.config.get(\"defaultTheme\") || \"taiga\";\n };\n\n UserSettingsController.prototype.exportProfile = function() {\n var onError, onSuccess;\n onSuccess = function(result) {\n var dumpUrl;\n dumpUrl = result.data.url;\n return this.window.open(dumpUrl, \"_blank\");\n };\n onError = (function(_this) {\n return function(response) {\n var ref;\n if ((ref = response.data) != null ? ref._error_message : void 0) {\n return _this.confirm.notify(\"error\", response.data._error_message);\n }\n };\n })(this);\n return this.auth.exportProfile().then(onSuccess, onError);\n };\n\n return UserSettingsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserSettingsController\", UserSettingsController);\n\n UserProfileDirective = function($confirm, $auth, $repo, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var submit;\n submit = debounce(2000, (function(_this) {\n return function(event) {\n var changeEmail, form, onError, onSuccess;\n event.preventDefault();\n form = $el.find(\"form\").checksley();\n if (!form.validate()) {\n return;\n }\n changeEmail = $scope.user.isAttributeModified(\"email\");\n $scope.user.lang = $scope.lang;\n $scope.user.theme = $scope.theme;\n onSuccess = function(data) {\n var text;\n $auth.setUser(data);\n if (changeEmail) {\n text = $translate.instant(\"USER_PROFILE.CHANGE_EMAIL_SUCCESS\");\n return $confirm.success(text);\n } else {\n return $confirm.notify('success');\n }\n };\n onError = function(data) {\n form.setErrors(data);\n return $confirm.notify('error', data._error_message);\n };\n return $repo.save($scope.user).then(onSuccess, onError);\n };\n })(this));\n $el.on(\"submit\", \"form\", submit);\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserProfile\", [\"$tgConfirm\", \"$tgAuth\", \"$tgRepo\", \"$translate\", UserProfileDirective]);\n\n UserAvatarDirective = function($auth, $model, $rs, $confirm) {\n var link;\n link = function($scope, $el, $attrs) {\n var onError, onSuccess, showSizeInfo;\n showSizeInfo = function() {\n return $el.find(\".size-info\").removeClass(\"hidden\");\n };\n onSuccess = function(response) {\n var user;\n user = $model.make_model(\"users\", response.data);\n $auth.setUser(user);\n $scope.user = user;\n $el.find('.loading-overlay').removeClass('active');\n return $confirm.notify('success');\n };\n onError = function(response) {\n if (response.status === 413) {\n showSizeInfo();\n }\n $el.find('.loading-overlay').removeClass('active');\n return $confirm.notify('error', response.data._error_message);\n };\n $el.on(\"click\", \".js-change-avatar\", function() {\n return $el.find(\"#avatar-field\").click();\n });\n $el.on(\"change\", \"#avatar-field\", function(event) {\n if ($scope.avatarAttachment) {\n $el.find('.loading-overlay').addClass(\"active\");\n return $rs.userSettings.changeAvatar($scope.avatarAttachment).then(onSuccess, onError);\n }\n });\n $el.on(\"click\", \"a.js-use-gravatar\", function(event) {\n $el.find('.loading-overlay').addClass(\"active\");\n return $rs.userSettings.removeAvatar().then(onSuccess, onError);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserAvatar\", [\"$tgAuth\", \"$tgModel\", \"$tgResources\", \"$tgConfirm\", UserAvatarDirective]);\n\n TaigaAvatarModelDirective = function($parse) {\n var link;\n link = function($scope, $el, $attrs) {\n var model, modelSetter;\n model = $parse($attrs.tgAvatarModel);\n modelSetter = model.assign;\n return $el.bind('change', function() {\n return $scope.$apply(function() {\n return modelSetter($scope, $el[0].files[0]);\n });\n });\n };\n return {\n link: link\n };\n };\n\n module.directive('tgAvatarModel', ['$parse', TaigaAvatarModelDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/nav.coffee\n */\n\n(function() {\n var UserSettingsNavigationDirective, module;\n\n UserSettingsNavigationDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n var section;\n section = $attrs.tgUserSettingsNavigation;\n $el.find(\".active\").removeClass(\"active\");\n $el.find(\"#usersettingsmenu-\" + section + \" a\").addClass(\"active\");\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module = angular.module(\"taigaUserSettings\");\n\n module.directive(\"tgUserSettingsNavigation\", UserSettingsNavigationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/notifications.coffee\n */\n\n(function() {\n var UserNotificationsController, UserNotificationsDirective, UserNotificationsListDirective, bindOnce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserNotificationsController = (function(superClass) {\n extend(UserNotificationsController, superClass);\n\n UserNotificationsController.$inject = [\"$scope\", \"$rootScope\", \"$tgRepo\", \"$tgConfirm\", \"$tgResources\", \"$routeParams\", \"$q\", \"$tgLocation\", \"$tgNavUrls\", \"$tgAuth\", \"tgErrorHandlingService\"];\n\n function UserNotificationsController(scope, rootscope, repo, confirm, rs, params, q, location, navUrls, auth, errorHandlingService) {\n var promise;\n this.scope = scope;\n this.rootscope = rootscope;\n this.repo = repo;\n this.confirm = confirm;\n this.rs = rs;\n this.params = params;\n this.q = q;\n this.location = location;\n this.navUrls = navUrls;\n this.auth = auth;\n this.errorHandlingService = errorHandlingService;\n this.scope.sectionName = \"USER_SETTINGS.NOTIFICATIONS.SECTION_NAME\";\n this.scope.user = this.auth.getUser();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserNotificationsController.prototype.loadInitialData = function() {\n return this.rs.notifyPolicies.list().then((function(_this) {\n return function(notifyPolicies) {\n _this.scope.notifyPolicies = notifyPolicies;\n return notifyPolicies;\n };\n })(this));\n };\n\n return UserNotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserNotificationsController\", UserNotificationsController);\n\n UserNotificationsDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserNotifications\", UserNotificationsDirective);\n\n UserNotificationsListDirective = function($repo, $confirm, $compile) {\n var link, template;\n template = _.template(\"<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\\n
    \\\">\\n
    <%- notifyPolicy.project_name %>
    \\n
    \\n
    \\n \\\" id=\\\"policy-all-<%- notifyPolicy.id %>\\\"\\n value=\\\"2\\\" <% if (notifyPolicy.notify_level == 2) { %>checked=\\\"checked\\\"<% } %>/>\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-involved-<%- notifyPolicy.id %>\\\"\\n value=\\\"1\\\" <% if (notifyPolicy.notify_level == 1) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n
    \\n \\\" id=\\\"policy-none-<%- notifyPolicy.id %>\\\"\\n value=\\\"3\\\" <% if (notifyPolicy.notify_level == 3) { %>checked=\\\"checked\\\"<% } %> />\\n \\n
    \\n
    \\n
    \\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function() {\n var ctx, html;\n $el.off();\n ctx = {\n notifyPolicies: $scope.notifyPolicies\n };\n html = template(ctx);\n $el.html($compile(html)($scope));\n return $el.on(\"change\", \"input[type=radio]\", function(event) {\n var onError, onSuccess, policy, policyIndex, prev_level, target;\n target = angular.element(event.currentTarget);\n policyIndex = target.parents(\".policy-table-row\").data('index');\n policy = $scope.notifyPolicies[policyIndex];\n prev_level = policy.notify_level;\n policy.notify_level = parseInt(target.val(), 10);\n onSuccess = function() {\n return $confirm.notify(\"success\");\n };\n onError = function() {\n $confirm.notify(\"error\");\n return target.parents(\".policy-table-row\").find(\"input[value=\" + prev_level + \"]\").prop(\"checked\", true);\n };\n return $repo.save(policy).then(onSuccess, onError);\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return bindOnce($scope, $attrs.ngModel, render);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", \"$compile\", UserNotificationsListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Andrey Antukh \n * Copyright (C) 2014-2017 Jesús Espino Garcia \n * Copyright (C) 2014-2017 David Barragán Merino \n * Copyright (C) 2014-2017 Alejandro Alonso \n * Copyright (C) 2014-2017 Juan Francisco Alcántara \n * Copyright (C) 2014-2017 Xavi Julian \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/user-project-settings.coffee\n */\n\n(function() {\n var UserProjectSettingsController, bindOnce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserProjectSettingsController = (function(superClass) {\n extend(UserProjectSettingsController, superClass);\n\n UserProjectSettingsController.$inject = [\"$rootScope\", \"$scope\", \"$tgSections\", \"$tgResources\", \"$tgRepo\", \"$tgConfirm\", \"tgCurrentUserService\"];\n\n function UserProjectSettingsController(rootScope, scope, tgSections, rs, repo, confirm, currentUserService) {\n var promise;\n this.rootScope = rootScope;\n this.scope = scope;\n this.tgSections = tgSections;\n this.rs = rs;\n this.repo = repo;\n this.confirm = confirm;\n this.currentUserService = currentUserService;\n this.scope.sections = this.tgSections.list();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserProjectSettingsController.prototype.loadInitialData = function() {\n return this.rs.userProjectSettings.list().then((function(_this) {\n return function(userProjectSettings) {\n return _this.scope.userProjectSettings = userProjectSettings;\n };\n })(this));\n };\n\n UserProjectSettingsController.prototype.updateCustomHomePage = function(projectSettings) {\n var onError, onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this.currentUserService.loadProjects();\n _this.rootScope.$broadcast(\"dropdown-project-list:updated\");\n return _this.confirm.notify(\"success\");\n };\n })(this);\n onError = (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this);\n return this.repo.save(projectSettings).then(onSuccess, onError);\n };\n\n UserProjectSettingsController.prototype.filteredSections = function(projectSettings) {\n return _.filter(this.scope.sections, function(section) {\n var ref;\n return ref = section.id, indexOf.call(projectSettings.allowed_sections, ref) >= 0;\n });\n };\n\n return UserProjectSettingsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserProjectSettingsController\", UserProjectSettingsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: modules/user-settings/live-notifications.coffee\n */\n\n(function() {\n var UserWebNotificationsController, UserWebNotificationsDirective, UserWebNotificationsListDirective, bindOnce, mixOf, module, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module(\"taigaUserSettings\");\n\n UserWebNotificationsController = (function(superClass) {\n extend(UserWebNotificationsController, superClass);\n\n UserWebNotificationsController.$inject = [\"$scope\", \"$tgResources\", \"$tgAuth\"];\n\n function UserWebNotificationsController(scope, rs, auth) {\n var promise;\n this.scope = scope;\n this.rs = rs;\n this.auth = auth;\n this.scope.sectionName = \"USER_SETTINGS.EVENTS.SECTION_NAME\";\n this.scope.user = this.auth.getUser();\n promise = this.loadInitialData();\n promise.then(null, this.onInitialDataError.bind(this));\n }\n\n UserWebNotificationsController.prototype.loadInitialData = function() {\n return this.rs.notifyPolicies.list().then((function(_this) {\n return function(notifyPolicies) {\n _this.scope.notifyPolicies = notifyPolicies;\n return notifyPolicies;\n };\n })(this));\n };\n\n return UserWebNotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin));\n\n module.controller(\"UserWebNotificationsController\", UserWebNotificationsController);\n\n UserWebNotificationsDirective = function() {\n var link;\n link = function($scope, $el, $attrs) {\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserWebNotifications\", UserWebNotificationsDirective);\n\n UserWebNotificationsListDirective = function($repo, $confirm, $compile) {\n var link, template;\n template = _.template(\"<% _.each(notifyPolicies, function (notifyPolicy, index) { %>\\n
    \\n
    <%- notifyPolicy.project_name %>
    \\n
    \\n
    \\\">\\n checked=\\\"checked\\\" <% } %>\\n name=\\\"policy-<%- notifyPolicy.id %>\\\" id=\\\"policy-<%- notifyPolicy.id %>\\\"/>\\n
    \\n \\n \\n
    \\n
    \\n
    \\n<% }) %>\");\n link = function($scope, $el, $attrs) {\n var render;\n render = function() {\n var ctx, html;\n $el.off();\n ctx = {\n notifyPolicies: $scope.notifyPolicies\n };\n html = template(ctx);\n $el.html($compile(html)($scope));\n return $el.on(\"click\", \".check\", function(event) {\n var onError, onSuccess, policy, policyIndex, target;\n target = angular.element(event.currentTarget);\n policyIndex = target.data('index');\n policy = $scope.notifyPolicies[policyIndex];\n policy.web_notify_level = !policy.web_notify_level;\n onSuccess = function() {\n $confirm.notify(\"success\");\n return target.find(\"input\").prop(\"checked\", policy.web_notify_level);\n };\n onError = function() {\n return $confirm.notify(\"error\");\n };\n return $repo.save(policy).then(onSuccess, onError);\n });\n };\n $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n return bindOnce($scope, $attrs.ngModel, render);\n };\n return {\n link: link\n };\n };\n\n module.directive(\"tgUserWebNotificationsList\", [\"$tgRepo\", \"$tgConfirm\", \"$compile\", UserWebNotificationsListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/components.module.coffee\n */\n\n(function() {\n angular.module(\"taigaComponents\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/discover.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaDiscover\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: external-apps/external-apps.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaExternalApps\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history.module.coffee\n */\n\n(function() {\n angular.module(\"taigaHistory\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/home.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaHome\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/navigation-bar.module.coffee\n */\n\n(function() {\n angular.module(\"taigaNavigationBar\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/projects.module.coffee\n */\n\n(function() {\n angular.module(\"taigaNotifications\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaProfile\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/projects.module.coffee\n */\n\n(function() {\n angular.module(\"taigaProjects\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/resources.module.coffee\n */\n\n(function() {\n angular.module(\"taigaResources2\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline.module.coffee\n */\n\n(function() {\n angular.module(\"taigaUserTimeline\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: utils/utils.module.coffee\n */\n\n(function() {\n var module;\n\n module = angular.module(\"taigaUtils\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history.module.coffee\n */\n\n(function() {\n angular.module(\"taigaWikiHistory\", []);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-item/assigned-item.directive.coffee\n */\n\n(function() {\n var AssignedItemDirective;\n\n AssignedItemDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n templateUrl: \"components/assigned-to/assigned-item/assigned-item.html\",\n scope: {\n member: \"=\"\n },\n link: link\n };\n };\n\n AssignedItemDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAssignedItem\", AssignedItemDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-to-selector/assigned-to-selector.controller.coffee\n */\n\n(function() {\n var AssignedToSelectorController;\n\n AssignedToSelectorController = (function() {\n AssignedToSelectorController.$inject = [];\n\n function AssignedToSelectorController() {\n if (this.assigned) {\n this._getAssignedMember();\n }\n this._filterAssignedMember();\n }\n\n AssignedToSelectorController.prototype._getAssignedMember = function() {\n return this.assignedMember = _.filter(this.project.members, (function(_this) {\n return function(member) {\n return member.id === _this.assigned.get('id');\n };\n })(this));\n };\n\n AssignedToSelectorController.prototype._filterAssignedMember = function() {\n if (this.assigned) {\n return this.nonAssignedMembers = _.filter(this.project.members, (function(_this) {\n return function(member) {\n return member.id !== _this.assigned.get('id');\n };\n })(this));\n } else {\n return this.nonAssignedMembers = this.project.members;\n }\n };\n\n return AssignedToSelectorController;\n\n })();\n\n angular.module('taigaComponents').controller('AssignedToSelectorCtrl', AssignedToSelectorController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-to-selector/assigned-to-selector.directive.coffee\n */\n\n(function() {\n var AssignedToSelectorDirective;\n\n AssignedToSelectorDirective = function() {\n return {\n controller: \"AssignedToSelectorCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"components/assigned-to/assigned-to-selector/assigned-to-selector.html\",\n scope: {\n assigned: \"=\",\n project: \"=\",\n onRemoveAssigned: \"&\",\n onAssignTo: \"&\"\n }\n };\n };\n\n AssignedToSelectorDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAssignedToSelector\", AssignedToSelectorDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-to.controller.coffee\n */\n\n(function() {\n var AssignedToController;\n\n AssignedToController = (function() {\n AssignedToController.$inject = [\"tgLightboxFactory\", \"lightboxService\"];\n\n function AssignedToController(lightboxFactory, lightboxService) {\n this.lightboxFactory = lightboxFactory;\n this.lightboxService = lightboxService;\n this.has_permissions = _.includes(this.project.my_permissions, 'modify_epic');\n }\n\n AssignedToController.prototype._closeAndRemoveAssigned = function() {\n this.lightboxService.closeAll();\n return this.onRemoveAssigned();\n };\n\n AssignedToController.prototype._closeAndAssign = function(member) {\n this.lightboxService.closeAll();\n return this.onAssignTo({\n 'member': member\n });\n };\n\n AssignedToController.prototype.onSelectAssignedTo = function(assigned, project) {\n return this.lightboxFactory.create('tg-assigned-to-selector', {\n \"class\": \"lightbox lightbox-assigned-to-selector open\",\n \"assigned\": \"assigned\",\n \"project\": \"project\",\n \"on-remove-assigned\": \"onRemoveAssigned()\",\n \"on-assign-to\": \"assignTo(member)\"\n }, {\n \"assigned\": this.assignedTo,\n \"project\": this.project,\n \"onRemoveAssigned\": this._closeAndRemoveAssigned.bind(this),\n \"assignTo\": this._closeAndAssign.bind(this)\n });\n };\n\n return AssignedToController;\n\n })();\n\n angular.module('taigaComponents').controller('AssignedToCtrl', AssignedToController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned-to/assigned-to.directive.coffee\n */\n\n(function() {\n var AssignedToDirective;\n\n AssignedToDirective = function() {\n return {\n controller: \"AssignedToCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"components/assigned-to/assigned-to.html\",\n scope: {\n assignedTo: \"=\",\n project: \"=\",\n onRemoveAssigned: \"&\",\n onAssignTo: \"&\"\n }\n };\n };\n\n AssignedToDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAssignedToComponent\", AssignedToDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned/assigned-to-inline.directive.coffee\n */\n\n(function() {\n var AssignedToInlineDirective;\n\n AssignedToInlineDirective = function($rootscope, $confirm, $repo, $loading, $modelTransform, $template, $translate, $compile, $currentUserService, avatarService, $userListService) {\n var link;\n link = function($scope, $el, $attr, $model) {\n var isEditable, renderUser, renderUserList;\n isEditable = function() {\n var ref, ref1;\n return ((ref = $scope.project) != null ? (ref1 = ref.my_permissions) != null ? ref1.indexOf($attr.requiredPerm) : void 0 : void 0) !== -1;\n };\n renderUserList = function(text) {\n var selectedId, users, visibleUsers;\n selectedId = $model.$modelValue.assigned_to;\n users = $userListService.searchUsers(text);\n if (selectedId) {\n users = _.reject(users, {\n \"id\": selectedId\n });\n }\n visibleUsers = _.slice(users, 0, 5);\n visibleUsers = _.map(visibleUsers, function(user) {\n return user.avatar = avatarService.getAvatar(user);\n });\n $scope.users = _.slice(users, 0, 5);\n return $scope.showMore = users.length > 5;\n };\n renderUser = function(assignedObject) {\n var assigned_to_extra_info;\n if (assignedObject != null ? assignedObject.assigned_to : void 0) {\n $scope.selected = assignedObject.assigned_to;\n assigned_to_extra_info = $scope.usersById[$scope.selected];\n $scope.fullName = assigned_to_extra_info != null ? assigned_to_extra_info.full_name_display : void 0;\n $scope.isUnassigned = false;\n $scope.avatar = avatarService.getAvatar(assigned_to_extra_info);\n $scope.bg = $scope.avatar.bg;\n $scope.isIocaine = assignedObject != null ? assignedObject.is_iocaine : void 0;\n } else {\n $scope.fullName = $translate.instant(\"COMMON.ASSIGNED_TO.ASSIGN\");\n $scope.isUnassigned = true;\n $scope.avatar = avatarService.getAvatar(null);\n $scope.bg = null;\n $scope.isIocaine = false;\n }\n $scope.fullNameVisible = !($scope.isUnassigned && !$currentUserService.isAuthenticated());\n return $scope.isEditable = isEditable();\n };\n $el.on(\"click\", \".users-search\", function(event) {\n return event.stopPropagation();\n });\n $el.on(\"click\", \".users-dropdown\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n $scope.usersSearch = \"\";\n renderUserList();\n $scope.$apply();\n return $el.find(\".pop-users\").popover().open();\n });\n $scope.selfAssign = function() {\n $model.$modelValue.assigned_to = $currentUserService.getUser().get('id');\n return renderUser($model.$modelValue);\n };\n $scope.unassign = function() {\n $model.$modelValue.assigned_to = null;\n return renderUser();\n };\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n renderUserList(searchingText);\n return $el.find('input').focus();\n }\n });\n $el.on(\"click\", \".user-list-single\", function(event) {\n var target;\n event.preventDefault();\n target = angular.element(event.currentTarget);\n $model.$modelValue.assigned_to = target.data(\"user-id\");\n renderUser($model.$modelValue);\n return $scope.$apply();\n });\n $scope.$watch($attr.ngModel, function(instance) {\n return renderUser(instance);\n });\n $scope.$on(\"isiocaine:changed\", function(ctx, instance) {\n return renderUser(instance);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n templateUrl: \"common/components/assigned-to-inline.html\",\n require: \"ngModel\"\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAssignedToInline\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$translate\", \"$compile\", \"tgCurrentUserService\", \"tgAvatarService\", \"tgUserListService\", AssignedToInlineDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned/assigned-to.directive.coffee\n */\n\n(function() {\n var AssignedToDirective;\n\n AssignedToDirective = function($rootscope, $confirm, $repo, $loading, $modelTransform, $template, $translate, $compile, $currentUserService, avatarService) {\n var link, template;\n template = $template.get(\"common/components/assigned-to.html\", true);\n link = function($scope, $el, $attrs, $model) {\n var isEditable, render, save;\n isEditable = function() {\n var ref, ref1;\n return ((ref = $scope.project) != null ? (ref1 = ref.my_permissions) != null ? ref1.indexOf($attrs.requiredPerm) : void 0 : void 0) !== -1;\n };\n save = function(userId) {\n var currentLoading, item, transform;\n item = $model.$modelValue.clone();\n item.assigned_to = userId;\n currentLoading = $loading().target($el).start();\n transform = $modelTransform.save(function(item) {\n item.assigned_to = userId;\n return item;\n });\n transform.then(function(item) {\n currentLoading.finish();\n return $rootscope.$broadcast(\"object:updated\");\n });\n transform.then(null, function() {\n $confirm.notify(\"error\");\n return currentLoading.finish();\n });\n return transform;\n };\n render = function() {\n var compiledTemplate, templateScope;\n template = $template.get(\"common/components/assigned-to.html\");\n templateScope = $scope.$new();\n compiledTemplate = $compile(template)(templateScope);\n return $el.html(compiledTemplate);\n };\n $scope.assign = function() {\n return $rootscope.$broadcast(\"assigned-to:add\", $model.$modelValue);\n };\n $scope.unassign = function() {\n var title;\n title = $translate.instant(\"COMMON.ASSIGNED_TO.CONFIRM_UNASSIGNED\");\n return $confirm.ask(title).then(function(response) {\n response.finish();\n return save(null);\n });\n };\n $scope.selfAssign = function() {\n var userId;\n userId = $currentUserService.getUser().get('id');\n return save(userId);\n };\n $scope.$on(\"assigned-to:added\", function(ctx, userId, item) {\n if (item.id !== $model.$modelValue.id) {\n return;\n }\n return save(userId);\n });\n $scope.$watch($attrs.ngModel, function(instance) {\n var assigned_to_extra_info;\n if (instance != null ? instance.assigned_to : void 0) {\n $scope.selected = instance.assigned_to;\n assigned_to_extra_info = $scope.usersById[$scope.selected];\n $scope.fullName = assigned_to_extra_info != null ? assigned_to_extra_info.full_name_display : void 0;\n $scope.isUnassigned = false;\n $scope.avatar = avatarService.getAvatar(assigned_to_extra_info);\n $scope.bg = $scope.avatar.bg;\n $scope.isIocaine = instance != null ? instance.is_iocaine : void 0;\n } else {\n $scope.fullName = $translate.instant(\"COMMON.ASSIGNED_TO.ASSIGN\");\n $scope.isUnassigned = true;\n $scope.avatar = avatarService.getAvatar(null);\n $scope.bg = null;\n $scope.isIocaine = false;\n }\n $scope.fullNameVisible = !($scope.isUnassigned && !$currentUserService.isAuthenticated());\n $scope.isEditable = isEditable();\n return render();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n link: link,\n require: \"ngModel\"\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAssignedTo\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$translate\", \"$compile\", \"tgCurrentUserService\", \"tgAvatarService\", AssignedToDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned/assigned-users-inline.directive.coffee\n */\n\n(function() {\n var AssignedUsersInlineDirective,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n AssignedUsersInlineDirective = function($rootscope, $confirm, $repo, $loading, $modelTransform, $template, $translate, $compile, $currentUserService, avatarService, $userListService) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var applyToModel, currentAssignedIds, currentAssignedTo, isAssigned, renderUsers, renderUsersList;\n currentAssignedIds = [];\n currentAssignedTo = null;\n isAssigned = function() {\n return currentAssignedIds.length > 0;\n };\n renderUsersList = function(text) {\n var selected, users, visible;\n users = $userListService.searchUsers(text);\n selected = [];\n _.map(users, function(user) {\n var ref;\n if (ref = user.id, indexOf.call(currentAssignedIds, ref) >= 0) {\n user.avatar = avatarService.getAvatar(user);\n return selected.push(user);\n }\n });\n visible = [];\n _.map(users, function(user) {\n var ref;\n if (ref = user.id, indexOf.call(currentAssignedIds, ref) < 0) {\n user.avatar = avatarService.getAvatar(user);\n return visible.push(user);\n }\n });\n $scope.selected = _.slice(selected, 0, 5);\n if ($scope.selected.length < 5) {\n $scope.users = _.slice(visible, 0, 5 - $scope.selected.length);\n } else {\n $scope.users = [];\n }\n return $scope.showMore = users.length > 5;\n };\n renderUsers = function() {\n var assignedUsers;\n assignedUsers = _.map(currentAssignedIds, function(assignedUserId) {\n return $scope.usersById[assignedUserId];\n });\n assignedUsers = _.filter(assignedUsers, function(it) {\n return !!it;\n });\n $scope.hiddenUsers = currentAssignedIds.length > 3 ? currentAssignedIds.length - 3 : 0;\n $scope.assignedUsers = _.slice(assignedUsers, 0, 3);\n return $scope.isAssigned = isAssigned();\n };\n applyToModel = function() {\n _.map(currentAssignedIds, function(userId) {\n if (!$scope.usersById[userId]) {\n return currentAssignedIds.splice(currentAssignedIds.indexOf(userId), 1);\n }\n });\n if (currentAssignedIds.length === 0) {\n currentAssignedTo = null;\n } else if (currentAssignedIds.indexOf(currentAssignedTo) === -1 || !currentAssignedTo) {\n currentAssignedTo = currentAssignedIds[0];\n }\n $model.$modelValue.setAttr('assigned_users', currentAssignedIds);\n return $model.$modelValue.assigned_to = currentAssignedTo;\n };\n $el.on(\"click\", \".users-dropdown\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n $scope.usersSearch = null;\n renderUsersList();\n $scope.$apply();\n return $el.find(\".pop-users\").popover().open();\n });\n $scope.assign = function(user) {\n currentAssignedIds.push(user.id);\n renderUsers();\n return applyToModel();\n };\n $scope.selfAssign = function() {\n currentAssignedIds.push($currentUserService.getUser().get('id'));\n renderUsers();\n return applyToModel();\n };\n $scope.unassign = function(user) {\n var index;\n index = currentAssignedIds.indexOf(user.id);\n currentAssignedIds.splice(index, 1);\n renderUsers();\n return applyToModel();\n };\n $el.on(\"click\", \".users-search\", function(event) {\n return event.stopPropagation();\n });\n $scope.$watch(\"usersSearch\", function(searchingText) {\n if (searchingText != null) {\n renderUsersList(searchingText);\n return $el.find('input').focus();\n }\n });\n $scope.$watch($attrs.ngModel, function(item) {\n var assigned_to;\n if (item == null) {\n return;\n }\n currentAssignedIds = [];\n assigned_to = null;\n if (item.assigned_users != null) {\n currentAssignedIds = item.assigned_users;\n }\n assigned_to = item.assigned_to;\n return renderUsers();\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n scope: true,\n link: link,\n templateUrl: \"common/components/assigned-users-inline.html\",\n require: \"ngModel\"\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAssignedUsersInline\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgLoading\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$translate\", \"$compile\", \"tgCurrentUserService\", \"tgAvatarService\", \"tgUserListService\", AssignedUsersInlineDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/assigned/assigned-users.directive.coffee\n */\n\n(function() {\n var AssignedUsersDirective,\n indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n AssignedUsersDirective = function($rootscope, $confirm, $repo, $modelTransform, $template, $compile, $translate, $currentUserService) {\n var link;\n link = function($scope, $el, $attrs, $model) {\n var deleteAssignedUser, isAssigned, isEditable, openAssignedUsers, renderAssignedUsers, save;\n isEditable = function() {\n var ref, ref1;\n return ((ref = $scope.project) != null ? (ref1 = ref.my_permissions) != null ? ref1.indexOf($attrs.requiredPerm) : void 0 : void 0) !== -1;\n };\n isAssigned = function() {\n return $scope.assignedUsers.length > 0;\n };\n save = function(assignedUsers, assignedToUser) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.assigned_users = assignedUsers;\n if (!item.assigned_to) {\n item.assigned_to = assignedToUser;\n }\n return item;\n });\n transform.then(function() {\n var result;\n assignedUsers = _.map(assignedUsers, function(assignedUserId) {\n return $scope.usersById[assignedUserId];\n });\n renderAssignedUsers(assignedUsers);\n return result = $rootscope.$broadcast(\"object:updated\");\n });\n return transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n };\n openAssignedUsers = function() {\n var item;\n item = _.clone($model.$modelValue, false);\n return $rootscope.$broadcast(\"assigned-user:add\", item);\n };\n $scope.selfAssign = function() {\n var assignedUsers, currentUserId;\n if (!isEditable()) {\n return;\n }\n currentUserId = $currentUserService.getUser().get('id');\n assignedUsers = _.clone($model.$modelValue.assigned_users, false);\n assignedUsers.push(currentUserId);\n assignedUsers = _.uniq(assignedUsers);\n return save(assignedUsers, currentUserId);\n };\n $scope.unassign = function(user) {\n var assignedUserId, message, title;\n if (!isEditable()) {\n return;\n }\n assignedUserId = user.id;\n title = $translate.instant(\"COMMON.ASSIGNED_USERS.TITLE_LIGHTBOX_DELETE_ASSIGNED\");\n message = $scope.usersById[assignedUserId].full_name_display;\n return $confirm.askOnDelete(title, message).then(function(askResponse) {\n var assignedUserIds;\n askResponse.finish();\n assignedUserIds = _.clone($model.$modelValue.assigned_users, false);\n assignedUserIds = _.pull(assignedUserIds, assignedUserId);\n return deleteAssignedUser(assignedUserIds);\n });\n };\n deleteAssignedUser = function(assignedUserIds) {\n var transform;\n transform = $modelTransform.save(function(item) {\n var ref;\n item.assigned_users = assignedUserIds;\n if ((ref = item.assigned_to, indexOf.call(assignedUserIds, ref) < 0) && assignedUserIds.length > 0) {\n item.assigned_to = assignedUserIds[0];\n }\n if (assignedUserIds.length === 0) {\n item.assigned_to = null;\n }\n return item;\n });\n transform.then(function() {\n var assignedUsers, item;\n item = $modelTransform.getObj();\n assignedUsers = _.map(item.assignedUsers, function(assignedUserId) {\n return $scope.usersById[assignedUserId];\n });\n renderAssignedUsers(assignedUsers);\n return $rootscope.$broadcast(\"object:updated\");\n });\n return transform.then(null, function() {\n item.revert();\n return $confirm.notify(\"error\");\n });\n };\n renderAssignedUsers = function(assignedUsers) {\n $scope.assignedUsers = assignedUsers;\n $scope.isEditable = isEditable();\n $scope.isAssigned = isAssigned();\n return $scope.openAssignedUsers = openAssignedUsers;\n };\n $scope.$on(\"assigned-user:deleted\", function(ctx, assignedUserId) {\n var assignedUsersIds;\n assignedUsersIds = _.clone($model.$modelValue.assigned_users, false);\n assignedUsersIds = _.pull(assignedUsersIds, assignedUserId);\n assignedUsersIds = _.uniq(assignedUsersIds);\n return deleteAssignedUser(assignedUsersIds);\n });\n $scope.$on(\"assigned-user:added\", function(ctx, assignedUserId) {\n var assignedUsers;\n assignedUsers = _.clone($model.$modelValue.assigned_users, false);\n assignedUsers.push(assignedUserId);\n assignedUsers = _.uniq(assignedUsers);\n return save(assignedUsers, assignedUserId);\n });\n $scope.$watch($attrs.ngModel, function(item) {\n var assignedUsers;\n if (item == null) {\n return;\n }\n assignedUsers = _.map(item.assigned_users, function(assignedUserId) {\n return $scope.usersById[assignedUserId];\n });\n assignedUsers = _.filter(assignedUsers, function(it) {\n return !!it;\n });\n return renderAssignedUsers(assignedUsers);\n });\n return $scope.$on(\"$destroy\", function() {\n return $el.off();\n });\n };\n return {\n scope: true,\n templateUrl: \"common/components/assigned-users.html\",\n link: link,\n require: \"ngModel\"\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAssignedUsers\", [\"$rootScope\", \"$tgConfirm\", \"$tgRepo\", \"$tgQueueModelTransformation\", \"$tgTemplate\", \"$compile\", \"$translate\", \"tgCurrentUserService\", AssignedUsersDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachment-link/attachment-link.directive.coffee\n */\n\n(function() {\n var AttachmentLinkDirective;\n\n AttachmentLinkDirective = function($parse, attachmentsPreviewService, lightboxService) {\n var link;\n link = function(scope, el, attrs) {\n var attachment;\n attachment = $parse(attrs.tgAttachmentLink)(scope);\n el.on(\"click\", function(event) {\n if (taiga.isImage(attachment.getIn(['file', 'name']))) {\n event.preventDefault();\n return scope.$apply(function() {\n lightboxService.open($('tg-attachments-preview'));\n return attachmentsPreviewService.fileId = attachment.getIn(['file', 'id']);\n });\n } else if (taiga.isPdf(attachment.getIn(['file', 'name']))) {\n event.preventDefault();\n return window.open(attachment.getIn(['file', 'url']));\n }\n });\n return scope.$on(\"$destroy\", function() {\n return el.off();\n });\n };\n return {\n link: link\n };\n };\n\n AttachmentLinkDirective.$inject = [\"$parse\", \"tgAttachmentsPreviewService\", \"lightboxService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentLink\", AttachmentLinkDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachment/attachment-gallery.directive.coffee\n */\n\n(function() {\n var AttachmentGalleryDirective;\n\n AttachmentGalleryDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {};\n return {\n scope: {},\n bindToController: {\n attachment: \"=\",\n onDelete: \"&\",\n onUpdate: \"&\",\n type: \"=\"\n },\n controller: \"Attachment\",\n controllerAs: \"vm\",\n templateUrl: \"components/attachment/attachment-gallery.html\",\n link: link\n };\n };\n\n AttachmentGalleryDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentGallery\", AttachmentGalleryDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachment/attachment.controller.coffee\n */\n\n(function() {\n var AttachmentController;\n\n AttachmentController = (function() {\n AttachmentController.$inject = ['tgAttachmentsService', '$translate'];\n\n function AttachmentController(attachmentsService, translate) {\n this.attachmentsService = attachmentsService;\n this.translate = translate;\n this.form = {};\n this.form.description = this.attachment.getIn(['file', 'description']);\n this.form.is_deprecated = this.attachment.get(['file', 'is_deprecated']);\n this.title = this.translate.instant(\"ATTACHMENT.TITLE\", {\n fileName: this.attachment.get('name'),\n date: moment(this.attachment.get('created_date')).format(this.translate.instant(\"ATTACHMENT.DATE\"))\n });\n }\n\n AttachmentController.prototype.editMode = function(mode) {\n var attachment;\n attachment = this.attachment.set('editable', mode);\n return this.onUpdate({\n attachment: attachment\n });\n };\n\n AttachmentController.prototype[\"delete\"] = function() {\n return this.onDelete({\n attachment: this.attachment\n });\n };\n\n AttachmentController.prototype.save = function() {\n var attachment;\n attachment = this.attachment.set('loading', true);\n this.onUpdate({\n attachment: attachment\n });\n attachment = this.attachment.merge({\n editable: false,\n loading: false\n });\n attachment = attachment.mergeIn(['file'], {\n description: this.form.description,\n is_deprecated: !!this.form.is_deprecated\n });\n return this.onUpdate({\n attachment: attachment\n });\n };\n\n return AttachmentController;\n\n })();\n\n angular.module('taigaComponents').controller('Attachment', AttachmentController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachment/attachment.directive.coffee\n */\n\n(function() {\n var AttachmentDirective;\n\n AttachmentDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {};\n return {\n scope: {},\n bindToController: {\n attachment: \"=\",\n onDelete: \"&\",\n onUpdate: \"&\",\n type: \"=\"\n },\n controller: \"Attachment\",\n controllerAs: \"vm\",\n templateUrl: \"components/attachment/attachment.html\",\n link: link\n };\n };\n\n AttachmentDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachment\", AttachmentDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-drop/attachments-drop.directive.coffee\n */\n\n(function() {\n var AttachmentsDropDirective;\n\n AttachmentsDropDirective = function($parse) {\n var link;\n link = function(scope, el, attrs) {\n var eventAttr;\n eventAttr = $parse(attrs.tgAttachmentsDrop);\n el.on('dragover', function(e) {\n e.preventDefault();\n return false;\n });\n el.on('drop', function(e) {\n var dataTransfer;\n e.stopPropagation();\n e.preventDefault();\n dataTransfer = e.dataTransfer || (e.originalEvent && e.originalEvent.dataTransfer);\n return scope.$apply(function() {\n return eventAttr(scope, {\n files: dataTransfer.files\n });\n });\n });\n return scope.$on(\"$destroy\", function() {\n return el.off();\n });\n };\n return {\n link: link\n };\n };\n\n AttachmentsDropDirective.$inject = [\"$parse\"];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentsDrop\", AttachmentsDropDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-full/attachments-full.controller.coffee\n */\n\n(function() {\n var AttachmentsFullController, sizeFormat;\n\n sizeFormat = this.taiga.sizeFormat;\n\n AttachmentsFullController = (function() {\n AttachmentsFullController.$inject = [\"$translate\", \"$tgConfirm\", \"$tgConfig\", \"$tgStorage\", \"tgAttachmentsFullService\", \"tgProjectService\", \"tgAttachmentsPreviewService\"];\n\n function AttachmentsFullController(translate, confirm, config, storage, attachmentsFullService, projectService, attachmentsPreviewService) {\n this.translate = translate;\n this.confirm = confirm;\n this.config = config;\n this.storage = storage;\n this.attachmentsFullService = attachmentsFullService;\n this.projectService = projectService;\n this.attachmentsPreviewService = attachmentsPreviewService;\n this.mode = this.storage.get('attachment-mode', 'list');\n this.maxFileSize = this.config.get(\"maxUploadFileSize\", null);\n if (this.maxFileSize) {\n this.maxFileSize = sizeFormat(this.maxFileSize);\n }\n this.maxFileSizeMsg = this.maxFileSize ? this.translate.instant(\"ATTACHMENT.MAX_UPLOAD_SIZE\", {\n maxFileSize: this.maxFileSize\n }) : \"\";\n taiga.defineImmutableProperty(this, 'attachments', (function(_this) {\n return function() {\n return _this.attachmentsFullService.attachments;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'deprecatedsCount', (function(_this) {\n return function() {\n return _this.attachmentsFullService.deprecatedsCount;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'attachmentsVisible', (function(_this) {\n return function() {\n return _this.attachmentsFullService.attachmentsVisible;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'deprecatedsVisible', (function(_this) {\n return function() {\n return _this.attachmentsFullService.deprecatedsVisible;\n };\n })(this));\n }\n\n AttachmentsFullController.prototype.uploadingAttachments = function() {\n return this.attachmentsFullService.uploadingAttachments;\n };\n\n AttachmentsFullController.prototype.addAttachment = function(file) {\n var editable;\n editable = this.mode === 'list';\n return this.attachmentsFullService.addAttachment(this.projectId, this.objId, this.type, file, editable);\n };\n\n AttachmentsFullController.prototype.setMode = function(mode) {\n this.mode = mode;\n return this.storage.set('attachment-mode', mode);\n };\n\n AttachmentsFullController.prototype.toggleDeprecatedsVisible = function() {\n return this.attachmentsFullService.toggleDeprecatedsVisible();\n };\n\n AttachmentsFullController.prototype.addAttachments = function(files) {\n return _.forEach(files, (function(_this) {\n return function(file) {\n return _this.addAttachment(file);\n };\n })(this));\n };\n\n AttachmentsFullController.prototype.loadAttachments = function() {\n return this.attachmentsFullService.loadAttachments(this.type, this.objId, this.projectId);\n };\n\n AttachmentsFullController.prototype.deleteAttachment = function(toDeleteAttachment) {\n var message, title;\n this.attachmentsPreviewService.fileId = null;\n title = this.translate.instant(\"ATTACHMENT.TITLE_LIGHTBOX_DELETE_ATTACHMENT\");\n message = this.translate.instant(\"ATTACHMENT.MSG_LIGHTBOX_DELETE_ATTACHMENT\", {\n fileName: toDeleteAttachment.getIn(['file', 'name'])\n });\n return this.confirm.askOnDelete(title, message).then((function(_this) {\n return function(askResponse) {\n var onError, onSuccess;\n onError = function() {\n message = _this.translate.instant(\"ATTACHMENT.ERROR_DELETE_ATTACHMENT\", {\n errorMessage: message\n });\n _this.confirm.notify(\"error\", null, message);\n return askResponse.finish(false);\n };\n onSuccess = function() {\n return askResponse.finish();\n };\n return _this.attachmentsFullService.deleteAttachment(toDeleteAttachment, _this.type).then(onSuccess, onError);\n };\n })(this));\n };\n\n AttachmentsFullController.prototype.reorderAttachment = function(attachment, newIndex) {\n return this.attachmentsFullService.reorderAttachment(this.type, attachment, newIndex);\n };\n\n AttachmentsFullController.prototype.updateAttachment = function(toUpdateAttachment) {\n return this.attachmentsFullService.updateAttachment(toUpdateAttachment, this.type);\n };\n\n AttachmentsFullController.prototype._isEditable = function() {\n if (this.projectService.project) {\n return this.projectService.hasPermission(this.editPermission);\n }\n return false;\n };\n\n AttachmentsFullController.prototype.showAttachments = function() {\n return this._isEditable() || this.attachmentsFullService.attachments.size;\n };\n\n return AttachmentsFullController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"AttachmentsFull\", AttachmentsFullController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-full/attachments-full.directive.coffee\n */\n\n(function() {\n var AttachmentsFullDirective, bindOnce;\n\n bindOnce = this.taiga.bindOnce;\n\n AttachmentsFullDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return bindOnce(scope, 'vm.objId', function(value) {\n return ctrl.loadAttachments();\n });\n };\n return {\n scope: {},\n bindToController: {\n type: \"@\",\n objId: \"=\",\n projectId: \"=\",\n editPermission: \"@\"\n },\n controller: \"AttachmentsFull\",\n controllerAs: \"vm\",\n templateUrl: \"components/attachments-full/attachments-full.html\",\n link: link\n };\n };\n\n AttachmentsFullDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentsFull\", AttachmentsFullDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-full/attachments-full.service.coffee\n */\n\n(function() {\n var AttachmentsFullService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n AttachmentsFullService = (function(superClass) {\n extend(AttachmentsFullService, superClass);\n\n AttachmentsFullService.$inject = [\"tgAttachmentsService\", \"$rootScope\"];\n\n function AttachmentsFullService(attachmentsService, rootScope) {\n this.attachmentsService = attachmentsService;\n this.rootScope = rootScope;\n this._attachments = Immutable.List();\n this._deprecatedsCount = 0;\n this._attachmentsVisible = Immutable.List();\n this._deprecatedsVisible = false;\n this.uploadingAttachments = [];\n taiga.defineImmutableProperty(this, 'attachments', (function(_this) {\n return function() {\n return _this._attachments;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'deprecatedsCount', (function(_this) {\n return function() {\n return _this._deprecatedsCount;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'attachmentsVisible', (function(_this) {\n return function() {\n return _this._attachmentsVisible;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'deprecatedsVisible', (function(_this) {\n return function() {\n return _this._deprecatedsVisible;\n };\n })(this));\n }\n\n AttachmentsFullService.prototype.toggleDeprecatedsVisible = function() {\n this._deprecatedsVisible = !this._deprecatedsVisible;\n return this.regenerate();\n };\n\n AttachmentsFullService.prototype.regenerate = function() {\n this._deprecatedsCount = this._attachments.count(function(it) {\n return it.getIn(['file', 'is_deprecated']);\n });\n if (this._deprecatedsVisible) {\n return this._attachmentsVisible = this._attachments;\n } else {\n return this._attachmentsVisible = this._attachments.filter(function(it) {\n return !it.getIn(['file', 'is_deprecated']);\n });\n }\n };\n\n AttachmentsFullService.prototype.addAttachment = function(projectId, objId, type, file, editable, comment) {\n if (editable == null) {\n editable = true;\n }\n if (comment == null) {\n comment = false;\n }\n return new Promise((function(_this) {\n return function(resolve, reject) {\n var promise;\n if (_this.attachmentsService.validate(file)) {\n _this.uploadingAttachments.push(file);\n promise = _this.attachmentsService.upload(file, objId, projectId, type, comment);\n return promise.then(function(file) {\n var attachment;\n _this.uploadingAttachments = _this.uploadingAttachments.filter(function(uploading) {\n return uploading.name !== file.get('name');\n });\n attachment = Immutable.Map();\n attachment = attachment.merge({\n file: file,\n editable: editable,\n loading: false,\n from_comment: comment\n });\n _this._attachments = _this._attachments.push(attachment);\n _this.regenerate();\n _this.rootScope.$broadcast(\"attachment:create\");\n return resolve(attachment);\n });\n } else {\n return reject(new Error(file));\n }\n };\n })(this));\n };\n\n AttachmentsFullService.prototype.loadAttachments = function(type, objId, projectId) {\n return this.attachmentsService.list(type, objId, projectId).then((function(_this) {\n return function(files) {\n _this._attachments = files.map(function(file) {\n var attachment;\n attachment = Immutable.Map();\n return attachment.merge({\n loading: false,\n editable: false,\n file: file\n });\n });\n return _this.regenerate();\n };\n })(this));\n };\n\n AttachmentsFullService.prototype.deleteAttachment = function(toDeleteAttachment, type) {\n var onSuccess;\n onSuccess = (function(_this) {\n return function() {\n _this._attachments = _this._attachments.filter(function(attachment) {\n return attachment !== toDeleteAttachment;\n });\n return _this.regenerate();\n };\n })(this);\n return this.attachmentsService[\"delete\"](type, toDeleteAttachment.getIn(['file', 'id'])).then(onSuccess);\n };\n\n AttachmentsFullService.prototype.reorderAttachment = function(type, attachment, newIndex) {\n var attachments, oldIndex, promises;\n oldIndex = this.attachments.findIndex(function(it) {\n return it === attachment;\n });\n if (oldIndex === newIndex) {\n return;\n }\n attachments = this.attachments.remove(oldIndex);\n attachments = attachments.splice(newIndex, 0, attachment);\n attachments = attachments.map(function(x, i) {\n return x.setIn(['file', 'order'], i + 1);\n });\n promises = [];\n attachments.forEach((function(_this) {\n return function(attachment) {\n var patch;\n patch = {\n order: attachment.getIn(['file', 'order'])\n };\n return promises.push(_this.attachmentsService.patch(attachment.getIn(['file', 'id']), type, patch));\n };\n })(this));\n return Promise.all(promises).then((function(_this) {\n return function() {\n _this._attachments = attachments;\n return _this.regenerate();\n };\n })(this));\n };\n\n AttachmentsFullService.prototype.updateAttachment = function(toUpdateAttachment, type) {\n var index, oldAttachment, patch;\n index = this._attachments.findIndex(function(attachment) {\n return attachment.getIn(['file', 'id']) === toUpdateAttachment.getIn(['file', 'id']);\n });\n oldAttachment = this._attachments.get(index);\n patch = taiga.patch(oldAttachment.get('file'), toUpdateAttachment.get('file'));\n if (toUpdateAttachment.get('loading')) {\n this._attachments = this._attachments.set(index, toUpdateAttachment);\n return this.regenerate();\n } else {\n return this.attachmentsService.patch(toUpdateAttachment.getIn(['file', 'id']), type, patch).then((function(_this) {\n return function() {\n _this._attachments = _this._attachments.set(index, toUpdateAttachment);\n return _this.regenerate();\n };\n })(this));\n }\n };\n\n return AttachmentsFullService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgAttachmentsFullService\", AttachmentsFullService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-preview/attachments-preview.controller.coffee\n */\n\n(function() {\n var AttachmentsPreviewController;\n\n AttachmentsPreviewController = (function() {\n AttachmentsPreviewController.$inject = [\"tgAttachmentsPreviewService\"];\n\n function AttachmentsPreviewController(attachmentsPreviewService) {\n this.attachmentsPreviewService = attachmentsPreviewService;\n taiga.defineImmutableProperty(this, \"current\", (function(_this) {\n return function() {\n if (!_this.attachmentsPreviewService.fileId) {\n return null;\n }\n return _this.getCurrent();\n };\n })(this));\n }\n\n AttachmentsPreviewController.prototype.hasPagination = function() {\n var images;\n images = this.attachments.filter((function(_this) {\n return function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n };\n })(this));\n return images.size > 1;\n };\n\n AttachmentsPreviewController.prototype.getCurrent = function() {\n var attachment, file;\n attachment = this.attachments.find((function(_this) {\n return function(attachment) {\n return _this.attachmentsPreviewService.fileId === attachment.getIn(['file', 'id']);\n };\n })(this));\n file = attachment.get('file');\n return file;\n };\n\n AttachmentsPreviewController.prototype.getIndex = function() {\n return this.attachments.findIndex((function(_this) {\n return function(attachment) {\n return _this.attachmentsPreviewService.fileId === attachment.getIn(['file', 'id']);\n };\n })(this));\n };\n\n AttachmentsPreviewController.prototype.next = function() {\n var attachmentIndex, image;\n attachmentIndex = this.getIndex();\n image = this.attachments.slice(attachmentIndex + 1).find(function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n });\n if (!image) {\n image = this.attachments.find(function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n });\n }\n return this.attachmentsPreviewService.fileId = image.getIn(['file', 'id']);\n };\n\n AttachmentsPreviewController.prototype.previous = function() {\n var attachmentIndex, image;\n attachmentIndex = this.getIndex();\n image = this.attachments.slice(0, attachmentIndex).findLast(function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n });\n if (!image) {\n image = this.attachments.findLast(function(attachment) {\n return taiga.isImage(attachment.getIn(['file', 'name']));\n });\n }\n return this.attachmentsPreviewService.fileId = image.getIn(['file', 'id']);\n };\n\n return AttachmentsPreviewController;\n\n })();\n\n angular.module('taigaComponents').controller('AttachmentsPreview', AttachmentsPreviewController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-preview/attachments-preview.directive.coffee\n */\n\n(function() {\n var AttachmentPreviewLightboxDirective;\n\n AttachmentPreviewLightboxDirective = function(lightboxService, attachmentsPreviewService) {\n var link;\n link = function($scope, el, attrs, ctrl) {\n $(document.body).on(\"keydown.image-preview\", function(e) {\n if (attachmentsPreviewService.fileId) {\n if (e.keyCode === 39) {\n ctrl.next();\n } else if (e.keyCode === 37) {\n ctrl.previous();\n }\n }\n return $scope.$digest();\n });\n return $scope.$on('$destroy', function() {\n return $(document.body).off('.image-preview');\n });\n };\n return {\n scope: {},\n controller: 'AttachmentsPreview',\n templateUrl: 'components/attachments-preview/attachments-preview.html',\n link: link,\n controllerAs: \"vm\",\n bindToController: {\n attachments: \"=\"\n }\n };\n };\n\n angular.module('taigaComponents').directive(\"tgAttachmentsPreview\", [\"lightboxService\", \"tgAttachmentsPreviewService\", AttachmentPreviewLightboxDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-preview/attachments-preview.service.coffee\n */\n\n(function() {\n var AttachmentsPreviewService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n AttachmentsPreviewService = (function(superClass) {\n extend(AttachmentsPreviewService, superClass);\n\n AttachmentsPreviewService.$inject = [];\n\n function AttachmentsPreviewService() {}\n\n return AttachmentsPreviewService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgAttachmentsPreviewService\", AttachmentsPreviewService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-simple/attachments-simple.controller.coffee\n */\n\n(function() {\n var AttachmentsSimpleController;\n\n AttachmentsSimpleController = (function() {\n AttachmentsSimpleController.$inject = [\"tgAttachmentsService\"];\n\n function AttachmentsSimpleController(attachmentsService) {\n this.attachmentsService = attachmentsService;\n }\n\n AttachmentsSimpleController.prototype.addAttachment = function(file) {\n var attachment;\n attachment = Immutable.fromJS({\n file: file,\n name: file.name,\n size: file.size\n });\n if (this.attachmentsService.validate(file)) {\n this.attachments = this.attachments.push(attachment);\n if (this.onAdd) {\n return this.onAdd({\n attachment: attachment\n });\n }\n }\n };\n\n AttachmentsSimpleController.prototype.addAttachments = function(files) {\n return _.forEach(files, this.addAttachment.bind(this));\n };\n\n AttachmentsSimpleController.prototype.deleteAttachment = function(toDeleteAttachment) {\n this.attachments = this.attachments.filter(function(attachment) {\n return attachment !== toDeleteAttachment;\n });\n if (this.onDelete) {\n return this.onDelete({\n attachment: toDeleteAttachment\n });\n }\n };\n\n return AttachmentsSimpleController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"AttachmentsSimple\", AttachmentsSimpleController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-simple/attachments-simple.directive.coffee\n */\n\n(function() {\n var AttachmentsSimpleDirective;\n\n AttachmentsSimpleDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {};\n return {\n scope: {},\n bindToController: {\n attachments: \"=\",\n onAdd: \"&\",\n onDelete: \"&\"\n },\n controller: \"AttachmentsSimple\",\n controllerAs: \"vm\",\n templateUrl: \"components/attachments-simple/attachments-simple.html\",\n link: link\n };\n };\n\n AttachmentsSimpleDirective.$inject = [];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentsSimple\", AttachmentsSimpleDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/attachments-sortable/attachments-sortable.directive.coffee\n */\n\n(function() {\n var AttachmentSortableDirective;\n\n AttachmentSortableDirective = function($parse) {\n var link;\n link = function(scope, el, attrs) {\n var callback, drake, scroll;\n callback = $parse(attrs.tgAttachmentsSortable);\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).is('div[tg-bind-scope]');\n }\n });\n drake.on('dragend', function(item) {\n var attachment, newIndex;\n item = $(item);\n attachment = item.scope().attachment;\n newIndex = item.index();\n return scope.$apply(function() {\n return callback(scope, {\n attachment: attachment,\n index: newIndex\n });\n });\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n AttachmentSortableDirective.$inject = [\"$parse\"];\n\n angular.module(\"taigaComponents\").directive(\"tgAttachmentsSortable\", AttachmentSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/auto-select/auto-select.directive.coffee\n */\n\n(function() {\n var AutoSelectDirective;\n\n AutoSelectDirective = function($timeout) {\n return {\n link: function(scope, elm) {\n return $timeout(function() {\n return elm[0].select();\n });\n }\n };\n };\n\n AutoSelectDirective.$inject = ['$timeout'];\n\n angular.module(\"taigaComponents\").directive(\"tgAutoSelect\", AutoSelectDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/avatar/avatar.directive.coffee\n */\n\n(function() {\n var AvatarDirective;\n\n AvatarDirective = function(avatarService) {\n var link;\n link = function(scope, el, attrs) {\n var attributeName;\n if (attrs.tgAvatarBig) {\n attributeName = 'avatarBig';\n } else {\n attributeName = 'avatar';\n }\n return scope.$watch(attributeName, function(user) {\n var avatar;\n avatar = avatarService.getAvatar(user, attributeName);\n el.attr('src', avatar.url);\n el.attr('title', \"\" + avatar.username);\n el.attr('alt', \"\" + avatar.username);\n return el.css('background', avatar.bg || \"\");\n });\n };\n return {\n link: link,\n scope: {\n avatar: \"=tgAvatar\",\n avatarBig: \"=tgAvatarBig\"\n }\n };\n };\n\n AvatarDirective.$inject = ['tgAvatarService'];\n\n angular.module(\"taigaComponents\").directive(\"tgAvatar\", AvatarDirective);\n\n angular.module(\"taigaComponents\").directive(\"tgAvatarBig\", AvatarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/belong-to-epics/belong-to-epics.directive.coffee\n */\n\n(function() {\n var BelongToEpicsDirective, module;\n\n module = angular.module('taigaEpics');\n\n BelongToEpicsDirective = function($translate, $confirm, $rs, $rs2, lightboxService) {\n var link, templateUrl;\n link = function(scope, el, attrs) {\n var updateEpics;\n scope.$watch('epics', function(epics) {\n return updateEpics(epics);\n });\n scope.$on(\"related-epics:changed\", function(ctx, userStory) {\n return $rs.userstories.getByRef(userStory.project, userStory.ref, {}).then(function(us) {\n scope.item.epics = us.epics;\n return updateEpics(us.epics);\n });\n });\n scope.removeEpicRelationship = function(epic) {\n var message, title;\n title = $translate.instant(\"LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.TITLE\");\n message = $translate.instant(\"LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.MESSAGE\", {\n epicSubject: epic.get('subject')\n });\n return $confirm.ask(title, null, message).then(function(askResponse) {\n var epicId, onError, onSuccess, usId;\n onSuccess = function() {\n askResponse.finish();\n return scope.$broadcast(\"related-epics:changed\", scope.item);\n };\n onError = function() {\n askResponse.finish(false);\n return $confirm.notify(\"error\");\n };\n epicId = epic.get('id');\n usId = scope.item.id;\n return $rs2.epics.deleteRelatedUserstory(epicId, usId).then(onSuccess, onError);\n });\n };\n return updateEpics = function(epics) {\n scope.epicsLength = 0;\n scope.immutable_epics = [];\n if (epics && !epics.isIterable) {\n scope.epicsLength = epics.length;\n return scope.immutable_epics = Immutable.fromJS(epics);\n }\n };\n };\n templateUrl = function(el, attrs) {\n if (attrs.format) {\n return \"components/belong-to-epics/belong-to-epics-\" + attrs.format + \".html\";\n }\n return \"components/belong-to-epics/belong-to-epics-pill.html\";\n };\n return {\n link: link,\n scope: {\n epics: '=',\n item: \"=\"\n },\n templateUrl: templateUrl\n };\n };\n\n module.directive(\"tgBelongToEpics\", [\"$translate\", \"$tgConfirm\", \"$tgResources\", \"tgResources\", \"lightboxService\", BelongToEpicsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/bind-code.directive.coffee\n */\n\n(function() {\n var BindCode;\n\n BindCode = function($sce, $parse, $compile, wysiwygService, wysiwygCodeHightlighterService) {\n return {\n restrict: 'A',\n compile: function(tElement, tAttrs) {\n var tgBindCodeGetter, tgBindCodeWatch;\n tgBindCodeGetter = $parse(tAttrs.tgBindCode);\n tgBindCodeWatch = $parse(tAttrs.tgBindCode, function(value) {\n return (value || '').toString();\n });\n $compile.$$addBindingClass(tElement);\n return function(scope, element, attr) {\n $compile.$$addBindingInfo(element, attr.tgBindCode);\n return scope.$watch(tgBindCodeWatch, function() {\n var html;\n html = wysiwygService.getHTML(tgBindCodeGetter(scope));\n element.html($sce.getTrustedHtml(html) || '');\n return wysiwygCodeHightlighterService.addHightlighter(element);\n });\n };\n }\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgBindCode\", [\"$sce\", \"$parse\", \"$compile\", \"tgWysiwygService\", \"tgWysiwygCodeHightlighterService\", BindCode]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/board-zoom/board-zoom.directive.coffee\n */\n\n(function() {\n var BoardZoomDirective;\n\n BoardZoomDirective = function() {\n return {\n scope: {\n levels: \"=\",\n value: \"=\"\n },\n templateUrl: 'components/board-zoom/board-zoom.html'\n };\n };\n\n angular.module('taigaComponents').directive(\"tgBoardZoom\", [BoardZoomDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/card-slideshow/card-slideshow.controller.coffee\n */\n\n(function() {\n var CardSlideshowController;\n\n CardSlideshowController = (function() {\n CardSlideshowController.$inject = [];\n\n function CardSlideshowController() {\n this.index = 0;\n }\n\n CardSlideshowController.prototype.next = function() {\n this.index++;\n if (this.index >= this.images.size) {\n return this.index = 0;\n }\n };\n\n CardSlideshowController.prototype.previous = function() {\n this.index--;\n if (this.index < 0) {\n return this.index = this.images.size - 1;\n }\n };\n\n return CardSlideshowController;\n\n })();\n\n angular.module('taigaComponents').controller('CardSlideshow', CardSlideshowController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/card-slideshow/card-slideshow.directive.coffee\n */\n\n(function() {\n var cardSlideshowDirective, module;\n\n module = angular.module(\"taigaComponents\");\n\n cardSlideshowDirective = function() {\n return {\n controller: \"CardSlideshow\",\n templateUrl: \"components/card-slideshow/card-slideshow.html\",\n bindToController: true,\n controllerAs: \"vm\",\n scope: {\n images: \"=\"\n }\n };\n };\n\n module.directive('tgCardSlideshow', cardSlideshowDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/card/card.controller.coffee\n */\n\n(function() {\n var CardController;\n\n CardController = (function() {\n function CardController() {}\n\n CardController.$inject = [];\n\n CardController.prototype.visible = function(name) {\n return this.zoom.indexOf(name) !== -1;\n };\n\n CardController.prototype.hasTasks = function() {\n var tasks;\n tasks = this.item.getIn(['model', 'tasks']);\n return tasks && tasks.size > 0;\n };\n\n CardController.prototype.hasMultipleAssignedUsers = function() {\n var assignedUsers;\n assignedUsers = this.item.getIn(['model', 'assigned_users']);\n return assignedUsers && assignedUsers.size > 1;\n };\n\n CardController.prototype.hasVisibleAttachments = function() {\n return this.item.get('images').size > 0;\n };\n\n CardController.prototype.toggleFold = function() {\n return this.onToggleFold({\n id: this.item.get('id')\n });\n };\n\n CardController.prototype.getClosedTasks = function() {\n return this.item.getIn(['model', 'tasks']).filter(function(task) {\n return task.get('is_closed');\n });\n };\n\n CardController.prototype.closedTasksPercent = function() {\n return this.getClosedTasks().size * 100 / this.item.getIn(['model', 'tasks']).size;\n };\n\n CardController.prototype.getModifyPermisionKey = function() {\n if (this.type === 'task') {\n return 'modify_task';\n } else {\n return 'modify_us';\n }\n };\n\n CardController.prototype.getDeletePermisionKey = function() {\n if (this.type === 'task') {\n return 'delete_task';\n } else {\n return 'delete_us';\n }\n };\n\n CardController.prototype._setVisibility = function() {\n var visibility;\n visibility = {\n related: this.visible('related_tasks'),\n slides: this.visible('attachments')\n };\n if (!_.isUndefined(this.item.get('foldStatusChanged'))) {\n if (this.visible('related_tasks') && this.visible('attachments')) {\n visibility.related = !this.item.get('foldStatusChanged');\n visibility.slides = !this.item.get('foldStatusChanged');\n } else if (this.visible('attachments')) {\n visibility.related = this.item.get('foldStatusChanged');\n visibility.slides = this.item.get('foldStatusChanged');\n } else if (!this.visible('related_tasks') && !this.visible('attachments')) {\n visibility.related = this.item.get('foldStatusChanged');\n visibility.slides = this.item.get('foldStatusChanged');\n }\n }\n if (!this.item.getIn(['model', 'tasks']) || !this.item.getIn(['model', 'tasks']).size) {\n visibility.related = false;\n }\n if (!this.item.get('images') || !this.item.get('images').size) {\n visibility.slides = false;\n }\n return visibility;\n };\n\n CardController.prototype.isRelatedTasksVisible = function() {\n var visibility;\n visibility = this._setVisibility();\n return visibility.related;\n };\n\n CardController.prototype.isSlideshowVisible = function() {\n var visibility;\n visibility = this._setVisibility();\n return visibility.slides;\n };\n\n CardController.prototype.getNavKey = function() {\n if (this.type === 'task') {\n return 'project-tasks-detail';\n } else if (this.type === 'issue') {\n return 'project-issues-detail';\n } else {\n return 'project-userstories-detail';\n }\n };\n\n return CardController;\n\n })();\n\n angular.module('taigaComponents').controller('Card', CardController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/card/card.directive.coffee\n */\n\n(function() {\n var cardDirective, module;\n\n module = angular.module(\"taigaComponents\");\n\n cardDirective = function() {\n return {\n link: function(scope) {},\n controller: \"Card\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"components/card/card.html\",\n scope: {\n onToggleFold: \"&\",\n onClickAssignedTo: \"&\",\n onClickEdit: \"&\",\n onClickRemove: \"&\",\n onClickDelete: \"&\",\n project: \"=\",\n item: \"=\",\n zoom: \"=\",\n zoomLevel: \"=\",\n archived: \"=\",\n type: \"@\"\n }\n };\n };\n\n module.directive('tgCard', cardDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/click-input-file.directive.coffee\n */\n\n(function() {\n var ClickInputFile;\n\n ClickInputFile = function() {\n return {\n link: function(scope, el) {\n el.on('click', function(e) {\n var inputFile;\n if (!$(e.target).is('input')) {\n e.preventDefault();\n inputFile = el.find('input[type=\"file\"]');\n inputFile.val('');\n return inputFile.trigger('click');\n }\n });\n return scope.$on(\"$destroy\", function() {\n return el.off();\n });\n }\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgClickInputFile\", [ClickInputFile]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/color-selector/color-selector.controller.coffee\n */\n\n(function() {\n var ColorSelectorController, getDefaulColorList, taiga;\n\n taiga = this.taiga;\n\n getDefaulColorList = taiga.getDefaulColorList;\n\n ColorSelectorController = (function() {\n ColorSelectorController.$inject = [\"tgProjectService\"];\n\n function ColorSelectorController(projectService) {\n this.projectService = projectService;\n this.colorList = getDefaulColorList();\n this.checkIsColorRequired();\n this.displayColorList = false;\n }\n\n ColorSelectorController.prototype.userCanChangeColor = function() {\n if (!this.requiredPerm) {\n return true;\n }\n return this.projectService.hasPermission(this.requiredPerm);\n };\n\n ColorSelectorController.prototype.checkIsColorRequired = function() {\n if (!this.isColorRequired) {\n return this.colorList = _.dropRight(this.colorList);\n }\n };\n\n ColorSelectorController.prototype.setColor = function(color) {\n this.color = color;\n return this.customColor = color;\n };\n\n ColorSelectorController.prototype.resetColor = function() {\n if (this.isColorRequired && !this.color) {\n return this.color = this.initColor;\n }\n };\n\n ColorSelectorController.prototype.toggleColorList = function() {\n this.displayColorList = !this.displayColorList;\n this.customColor = this.color;\n return this.resetColor();\n };\n\n ColorSelectorController.prototype.onSelectDropdownColor = function(color) {\n this.color = color;\n this.onSelectColor({\n color: color\n });\n return this.toggleColorList();\n };\n\n ColorSelectorController.prototype.onKeyDown = function(event) {\n if (event.which === 13) {\n if (this.customColor || !this.isColorRequired) {\n this.onSelectDropdownColor(this.customColor);\n }\n return event.preventDefault();\n }\n };\n\n return ColorSelectorController;\n\n })();\n\n angular.module('taigaComponents').controller(\"ColorSelectorCtrl\", ColorSelectorController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/color-selector/color-selector.directive.coffee\n */\n\n(function() {\n var ColorSelectorDirective, bindOnce;\n\n bindOnce = this.taiga.bindOnce;\n\n ColorSelectorDirective = function($timeout) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var _timeout, cancel, close;\n _timeout = null;\n cancel = function() {\n $timeout.cancel(_timeout);\n return _timeout = null;\n };\n close = function() {\n if (_timeout) {\n return;\n }\n return _timeout = $timeout((function() {\n ctrl.displayColorList = false;\n return ctrl.resetColor();\n }), 400);\n };\n el.find('.color-selector').mouseenter(cancel).mouseleave(close);\n el.find('.color-selector-dropdown').mouseenter(cancel).mouseleave(close);\n return scope.$watch('vm.initColor', function(color) {\n return ctrl.setColor(color);\n });\n };\n return {\n link: link,\n templateUrl: \"components/color-selector/color-selector.html\",\n controller: \"ColorSelectorCtrl\",\n controllerAs: \"vm\",\n bindToController: {\n isColorRequired: \"=\",\n onSelectColor: \"&\",\n initColor: \"=\",\n requiredPerm: \"@\"\n },\n scope: {}\n };\n };\n\n ColorSelectorDirective.$inject = [\"$timeout\"];\n\n angular.module('taigaComponents').directive(\"tgColorSelector\", ColorSelectorDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/detail/header/detail-header.controller.coffee\n */\n\n(function() {\n var StoryHeaderController, module;\n\n module = angular.module(\"taigaUserStories\");\n\n StoryHeaderController = (function() {\n StoryHeaderController.$inject = [\"$rootScope\", \"$tgConfirm\", \"$tgQueueModelTransformation\", \"$tgNavUrls\", \"$window\"];\n\n function StoryHeaderController(rootScope, confirm, modelTransform, navUrls, window) {\n this.rootScope = rootScope;\n this.confirm = confirm;\n this.modelTransform = modelTransform;\n this.navUrls = navUrls;\n this.window = window;\n this.editMode = false;\n this.loadingSubject = false;\n this.originalSubject = this.item.subject;\n this.objType = {\n 'tasks': 'task',\n 'issues': 'issue',\n 'userstories': 'us'\n }[this.item._name];\n }\n\n StoryHeaderController.prototype._checkNav = function() {\n var ctx, ref, ref1;\n if (((ref = this.item.neighbors.previous) != null ? ref.ref : void 0) != null) {\n ctx = {\n project: this.project.slug,\n ref: this.item.neighbors.previous.ref\n };\n this.previousUrl = this.navUrls.resolve(\"project-\" + this.item._name + \"-detail\", ctx);\n }\n if (((ref1 = this.item.neighbors.next) != null ? ref1.ref : void 0) != null) {\n ctx = {\n project: this.project.slug,\n ref: this.item.neighbors.next.ref\n };\n return this.nextUrl = this.navUrls.resolve(\"project-\" + this.item._name + \"-detail\", ctx);\n }\n };\n\n StoryHeaderController.prototype._checkPermissions = function() {\n return this.permissions = {\n canEdit: _.includes(this.project.my_permissions, this.requiredPerm)\n };\n };\n\n StoryHeaderController.prototype.cancelEdit = function() {\n this.editMode = false;\n return this.item.subject = this.originalSubject;\n };\n\n StoryHeaderController.prototype.editSubject = function(value) {\n var selection;\n selection = this.window.getSelection();\n if (selection.type !== \"Range\") {\n if (value) {\n this.editMode = true;\n }\n if (!value) {\n return this.editMode = false;\n }\n }\n };\n\n StoryHeaderController.prototype.onKeyDown = function(event) {\n if (event.which === 13) {\n this.saveSubject();\n }\n if (event.which === 27) {\n this.item.subject = this.originalSubject;\n return this.editSubject(false);\n }\n };\n\n StoryHeaderController.prototype.saveSubject = function() {\n var item, onEditSubjectError, onEditSubjectSuccess, transform;\n onEditSubjectSuccess = (function(_this) {\n return function() {\n _this.loadingSubject = false;\n _this.rootScope.$broadcast(\"object:updated\");\n _this.confirm.notify('success');\n return _this.originalSubject = _this.item.subject;\n };\n })(this);\n onEditSubjectError = (function(_this) {\n return function() {\n _this.loadingSubject = false;\n return _this.confirm.notify('error');\n };\n })(this);\n this.editMode = false;\n this.loadingSubject = true;\n item = this.item;\n transform = this.modelTransform.save(function(item) {\n return item;\n });\n return transform.then(onEditSubjectSuccess, onEditSubjectError);\n };\n\n StoryHeaderController.prototype.relateToEpic = function(us) {\n return this.rootScope.$broadcast(\"relate-to-epic:add\", us);\n };\n\n return StoryHeaderController;\n\n })();\n\n module.controller(\"StoryHeaderCtrl\", StoryHeaderController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/detail/header/detail-header.directive.coffee\n */\n\n(function() {\n var DetailHeaderDirective, module;\n\n module = angular.module('taigaUserStories');\n\n DetailHeaderDirective = function() {\n var link;\n this.$inject = [];\n link = function(scope, el, attrs, ctrl) {\n ctrl._checkPermissions();\n return ctrl._checkNav();\n };\n return {\n link: link,\n controller: \"StoryHeaderCtrl\",\n bindToController: true,\n scope: {\n item: \"=\",\n project: \"=\",\n requiredPerm: \"@\"\n },\n controllerAs: \"vm\",\n templateUrl: \"components/detail/header/detail-header.html\"\n };\n };\n\n module.directive(\"tgDetailHeader\", DetailHeaderDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/due-date/due-date-controller.coffee\n */\n\n(function() {\n var DueDateController;\n\n DueDateController = (function() {\n DueDateController.$inject = [\"$translate\", \"tgLightboxFactory\", \"tgProjectService\", \"$rootScope\"];\n\n function DueDateController(translate, tgLightboxFactory, projectService, rootscope) {\n this.translate = translate;\n this.tgLightboxFactory = tgLightboxFactory;\n this.projectService = projectService;\n this.rootscope = rootscope;\n this.defaultConfig = [\n {\n \"color\": \"#9dce0a\",\n \"name\": \"normal due\",\n \"days_to_due\": null,\n \"by_default\": true\n }, {\n \"color\": \"#ff9900\",\n \"name\": \"due soon\",\n \"days_to_due\": 14,\n \"by_default\": false\n }, {\n \"color\": \"#ff8a84\",\n \"name\": \"past due\",\n \"days_to_due\": 0,\n \"by_default\": false\n }\n ];\n }\n\n DueDateController.prototype.visible = function() {\n return this.format === 'button' || (this.dueDate != null);\n };\n\n DueDateController.prototype.disabled = function() {\n return this.isClosed;\n };\n\n DueDateController.prototype.color = function() {\n var ref;\n return ((ref = this.getStatus()) != null ? ref.color : void 0) || null;\n };\n\n DueDateController.prototype.title = function() {\n if (this.dueDate) {\n return this._formatTitle();\n } else if (this.format === 'button') {\n return this.translate.instant('COMMON.DUE_DATE.TITLE_ACTION_SET_DUE_DATE');\n }\n return '';\n };\n\n DueDateController.prototype.getStatus = function(options) {\n var project;\n if (!this.dueDate) {\n return null;\n }\n project = this.projectService.project.toJS();\n options = project[this.objType + \"_duedates\"];\n if (!options) {\n options = this.defaultConfig;\n }\n return this._getAppearance(options);\n };\n\n DueDateController.prototype._getDefaultAppearance = function(options) {\n var defaultAppearance;\n defaultAppearance = null;\n _.map(options, function(option) {\n if (option.by_default === true) {\n return defaultAppearance = option;\n }\n });\n return defaultAppearance;\n };\n\n DueDateController.prototype._getAppearance = function(options) {\n var currentAppearance, dueDate, now;\n currentAppearance = this._getDefaultAppearance(options);\n options = _.sortBy(options, function(o) {\n return -o.days_to_due;\n });\n dueDate = moment(this.dueDate);\n now = moment();\n _.map(options, function(appearance) {\n var limitDate;\n if (appearance.days_to_due === null) {\n return;\n }\n limitDate = moment(dueDate - moment.duration(appearance.days_to_due, \"days\"));\n if (now >= limitDate) {\n return currentAppearance = appearance;\n }\n });\n return currentAppearance;\n };\n\n DueDateController.prototype._formatTitle = function() {\n var formatedDate, prettyDate, status;\n prettyDate = this.translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n formatedDate = moment(this.dueDate).format(prettyDate);\n status = this.getStatus();\n if (status != null ? status.name : void 0) {\n return formatedDate + \" (\" + status.name + \")\";\n }\n return formatedDate;\n };\n\n DueDateController.prototype.setDueDate = function() {\n if (this.disabled()) {\n return;\n }\n return this.tgLightboxFactory.create(\"tg-lb-set-due-date\", {\n \"class\": \"lightbox lightbox-set-due-date\"\n }, {\n \"object\": this.item,\n \"notAutoSave\": this.notAutoSave\n });\n };\n\n return DueDateController;\n\n })();\n\n angular.module('taigaComponents').controller('DueDateCtrl', DueDateController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/due-date/due-date-popover.directive.coffee\n */\n\n(function() {\n var dueDatePopoverDirective, module;\n\n module = angular.module(\"taigaComponents\");\n\n dueDatePopoverDirective = function($translate, datePickerConfigService) {\n return {\n link: function(scope, el, attrs, ctrl) {\n var datePickerConfig;\n scope.open = false;\n datePickerConfig = datePickerConfigService.get();\n _.merge(datePickerConfig, {\n field: el.find('.due-date-button')[0],\n container: el.find('.date-picker-container')[0],\n bound: true,\n onClose: function() {\n scope.open = false;\n return scope.$apply();\n },\n onSelect: function() {\n return ctrl.dueDate = this.getMoment().format('YYYY-MM-DD');\n }\n });\n el.picker = new Pikaday(datePickerConfig);\n el.on(\"click\", \".due-date-button\", function(event) {\n if (scope.open) {\n el.picker.hide();\n return;\n }\n if (!el.picker.getDate() && ctrl.dueDate) {\n el.picker.setDate(moment(ctrl.dueDate).format('YYYY-MM-DD'));\n }\n el.picker.show();\n scope.open = true;\n return scope.$apply();\n });\n el.on(\"click\", \".date-picker-clean\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n ctrl.dueDate = null;\n el.picker.setDate(ctrl.dueDate);\n scope.open = false;\n el.picker.hide();\n return scope.$apply();\n });\n return scope.$on(\"status:changed\", function(ctx, status) {\n return ctrl.isClosed = ctrl.item.is_closed;\n });\n },\n controller: \"DueDateCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"components/due-date/due-date-popover.html\",\n scope: {\n dueDate: '=',\n isClosed: '=',\n item: '=',\n objType: '@',\n format: '@',\n notAutoSave: '='\n }\n };\n };\n\n module.directive('tgDueDatePopover', ['$translate', 'tgDatePickerConfigService', dueDatePopoverDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/due-date/due-date.directive.coffee\n */\n\n(function() {\n var dueDateDirective, module;\n\n module = angular.module(\"taigaComponents\");\n\n dueDateDirective = function($translate, datePickerConfigService) {\n var templateUrl;\n templateUrl = function(el, attrs) {\n if (attrs.format) {\n return \"components/due-date/due-date-\" + attrs.format + \".html\";\n }\n return \"components/due-date/due-date-icon.html\";\n };\n return {\n link: function(scope, el, attrs, ctrl) {\n var renderDatePicker;\n renderDatePicker = function() {\n var datePickerConfig, prettyDate;\n prettyDate = $translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n if (ctrl.dueDate) {\n ctrl.dueDate = moment(ctrl.dueDate, prettyDate);\n }\n el.on(\"click\", \".date-picker-popover-trigger\", function(event) {\n if (ctrl.disabled()) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n return el.find(\".date-picker-popover\").popover().open();\n });\n el.on(\"click\", \".date-picker-clean\", function(event) {\n event.preventDefault();\n event.stopPropagation();\n ctrl.dueDate = null;\n scope.$apply();\n return el.find(\".date-picker-popover\").popover().close();\n });\n datePickerConfig = datePickerConfigService.get();\n _.merge(datePickerConfig, {\n field: el.find('input.due-date')[0],\n container: el.find('.date-picker-container')[0],\n bound: false,\n onSelect: function() {\n ctrl.dueDate = this.getMoment().format('YYYY-MM-DD');\n el.find(\".date-picker-popover\").popover().close();\n return scope.$apply();\n }\n });\n return el.picker = new Pikaday(datePickerConfig);\n };\n if (attrs.format === 'button-popover') {\n return renderDatePicker();\n }\n },\n controller: \"DueDateCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: templateUrl,\n scope: {\n dueDate: '=',\n isClosed: '=',\n item: '=',\n objType: '@',\n format: '@',\n notAutoSave: '='\n }\n };\n };\n\n module.directive('tgDueDate', ['$translate', 'tgDatePickerConfigService', dueDateDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/file-change/file-change.directive.coffee\n */\n\n(function() {\n var FileChangeDirective;\n\n FileChangeDirective = function($parse) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var eventAttr;\n eventAttr = $parse(attrs.tgFileChange);\n el.on('change', function(event) {\n return scope.$apply(function() {\n return eventAttr(scope, {\n files: event.currentTarget.files\n });\n });\n });\n return scope.$on(\"$destroy\", function() {\n return el.off();\n });\n };\n return {\n restrict: \"A\",\n link: link\n };\n };\n\n FileChangeDirective.$inject = [\"$parse\"];\n\n angular.module(\"taigaComponents\").directive(\"tgFileChange\", FileChangeDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/filter/filter-remote.service.coffee\n */\n\n(function() {\n var FilterRemoteStorageService, generateHash,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n generateHash = taiga.generateHash;\n\n FilterRemoteStorageService = (function(superClass) {\n extend(FilterRemoteStorageService, superClass);\n\n FilterRemoteStorageService.$inject = [\"$q\", \"$tgUrls\", \"$tgHttp\"];\n\n function FilterRemoteStorageService(q, urls, http) {\n this.q = q;\n this.urls = urls;\n this.http = http;\n }\n\n FilterRemoteStorageService.prototype.storeFilters = function(projectId, myFilters, filtersHashSuffix) {\n var deferred, hash, ns, promise, url;\n deferred = this.q.defer();\n url = this.urls.resolve(\"user-storage\");\n ns = projectId + \":\" + filtersHashSuffix;\n hash = generateHash([projectId, ns]);\n if (_.isEmpty(myFilters)) {\n promise = this.http[\"delete\"](url + \"/\" + hash, {\n key: hash,\n value: myFilters\n });\n promise.then(function() {\n return deferred.resolve();\n });\n promise.then(null, function() {\n return deferred.reject();\n });\n } else {\n promise = this.http.put(url + \"/\" + hash, {\n key: hash,\n value: myFilters\n });\n promise.then(function(data) {\n return deferred.resolve();\n });\n promise.then(null, (function(_this) {\n return function(data) {\n var innerPromise;\n innerPromise = _this.http.post(\"\" + url, {\n key: hash,\n value: myFilters\n });\n innerPromise.then(function() {\n return deferred.resolve();\n });\n return innerPromise.then(null, function() {\n return deferred.reject();\n });\n };\n })(this));\n }\n return deferred.promise;\n };\n\n FilterRemoteStorageService.prototype.getFilters = function(projectId, filtersHashSuffix) {\n var deferred, hash, ns, promise, url;\n deferred = this.q.defer();\n url = this.urls.resolve(\"user-storage\");\n ns = projectId + \":\" + filtersHashSuffix;\n hash = generateHash([projectId, ns]);\n promise = this.http.get(url + \"/\" + hash);\n promise.then(function(data) {\n return deferred.resolve(data.data.value);\n });\n promise.then(null, function(data) {\n return deferred.resolve({});\n });\n return deferred.promise;\n };\n\n return FilterRemoteStorageService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgFilterRemoteStorageService\", FilterRemoteStorageService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/filter/filter-slide-down.directive.coffee\n */\n\n(function() {\n var FilterSlideDownDirective;\n\n FilterSlideDownDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var filter;\n filter = $('tg-filter');\n return scope.$watch(attrs.ngIf, function(value) {\n var contentHeight, wrapperHeight;\n if (value) {\n filter.find('.filter-list').hide();\n wrapperHeight = filter.height();\n contentHeight = 0;\n filter.children().each(function() {\n return contentHeight += $(this).outerHeight(true);\n });\n return $(el.context.nextSibling).css({\n \"display\": \"block\"\n });\n }\n });\n };\n return {\n priority: 900,\n link: link\n };\n };\n\n angular.module('taigaComponents').directive(\"tgFilterSlideDown\", [FilterSlideDownDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/filter/filter.controller.coffee\n */\n\n(function() {\n var FilterController;\n\n FilterController = (function() {\n FilterController.$inject = ['$translate'];\n\n function FilterController(translate) {\n this.translate = translate;\n this.opened = null;\n this.filterModeOptions = [\"include\", \"exclude\"];\n this.filterModeLabels = {\n \"include\": this.translate.instant(\"COMMON.FILTERS.ADVANCED_FILTERS.INCLUDE\"),\n \"exclude\": this.translate.instant(\"COMMON.FILTERS.ADVANCED_FILTERS.EXCLUDE\")\n };\n this.filterMode = 'include';\n this.showAdvancedFilter = false;\n this.customFilterForm = false;\n this.customFilterName = '';\n }\n\n FilterController.prototype.toggleAdvancedFilter = function() {\n return this.showAdvancedFilter = !this.showAdvancedFilter;\n };\n\n FilterController.prototype.toggleFilterCategory = function(filterName) {\n if (this.opened === filterName) {\n return this.opened = null;\n } else {\n return this.opened = filterName;\n }\n };\n\n FilterController.prototype.isOpen = function(filterName) {\n return this.opened === filterName;\n };\n\n FilterController.prototype.saveCustomFilter = function() {\n this.onSaveCustomFilter({\n name: this.customFilterName\n });\n this.customFilterForm = false;\n this.opened = 'custom-filter';\n return this.customFilterName = '';\n };\n\n FilterController.prototype.changeQ = function() {\n return this.onChangeQ({\n q: this.q\n });\n };\n\n FilterController.prototype.unselectFilter = function(filter) {\n return this.onRemoveFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.unselectFilter = function(filter) {\n return this.onRemoveFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.selectFilter = function(filterCategory, filter) {\n filter = {\n category: filterCategory,\n filter: filter,\n mode: this.filterMode\n };\n return this.onAddFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.removeCustomFilter = function(filter) {\n return this.onRemoveCustomFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.selectCustomFilter = function(filter) {\n return this.onSelectCustomFilter({\n filter: filter\n });\n };\n\n FilterController.prototype.isFilterSelected = function(filterCategory, filter) {\n return !!_.find(this.selectedFilters, function(it) {\n return filter.id === it.id && filterCategory.dataType === it.dataType;\n });\n };\n\n return FilterController;\n\n })();\n\n angular.module('taigaComponents').controller('Filter', FilterController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/filter/filter.directive.coffee\n */\n\n(function() {\n var FilterDirective;\n\n FilterDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var unwatch;\n unwatch = scope.$watch(\"vm.defaultQ\", function(q) {\n if (q && !scope.vm.filtersForm.$dirty) {\n scope.vm.q = q;\n return unwatch();\n } else if (scope.vm.filtersForm.$dirty) {\n return unwatch();\n }\n });\n return attrs.$observe(\"open\", function(open) {\n open = scope.$eval(open);\n if (open) {\n return el.addClass('open');\n } else {\n return el.removeClass('open');\n }\n });\n };\n return {\n scope: {\n onChangeQ: \"&\",\n onAddFilter: \"&\",\n onSelectCustomFilter: \"&\",\n onRemoveFilter: \"&\",\n onRemoveCustomFilter: \"&\",\n onSaveCustomFilter: \"&\",\n customFilters: \"<\",\n defaultQ: \"=q\",\n filters: \"<\",\n customFilters: \"<\",\n selectedFilters: \"<\"\n },\n bindToController: true,\n controller: \"Filter\",\n controllerAs: \"vm\",\n templateUrl: 'components/filter/filter.html',\n link: link\n };\n };\n\n angular.module('taigaComponents').directive(\"tgFilter\", [FilterDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/joy-ride/joy-ride.directive.coffee\n */\n\n(function() {\n var JoyRideDirective, taiga;\n\n taiga = this.taiga;\n\n JoyRideDirective = function($rootScope, currentUserService, joyRideService, $location, $translate) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var initJoyrRide, intro, unsuscribe;\n unsuscribe = null;\n intro = introJs();\n intro.oncomplete(function() {\n return $('html,body').scrollTop(0);\n });\n intro.onexit(function() {\n return currentUserService.disableJoyRide();\n });\n initJoyrRide = function(next, config) {\n if (!config[next.joyride]) {\n return;\n }\n intro.setOptions({\n exitOnEsc: false,\n exitOnOverlayClick: false,\n showStepNumbers: false,\n nextLabel: $translate.instant('JOYRIDE.NAV.NEXT') + ' →',\n prevLabel: '← ' + $translate.instant('JOYRIDE.NAV.BACK'),\n skipLabel: $translate.instant('JOYRIDE.NAV.SKIP'),\n doneLabel: $translate.instant('JOYRIDE.NAV.DONE'),\n disableInteraction: true\n });\n intro.setOption('steps', joyRideService.get(next.joyride));\n return intro.start();\n };\n return $rootScope.$on('$routeChangeSuccess', function(event, next) {\n if (!next.joyride || !currentUserService.isAuthenticated()) {\n intro.exit();\n if (unsuscribe) {\n unsuscribe();\n }\n return;\n }\n intro.oncomplete(function() {\n return currentUserService.disableJoyRide(next.joyride);\n });\n if (next.loader) {\n return unsuscribe = $rootScope.$on('loader:end', function() {\n currentUserService.loadJoyRideConfig().then(function(config) {\n return initJoyrRide(next, config);\n });\n return unsuscribe();\n });\n } else {\n return currentUserService.loadJoyRideConfig().then(function(config) {\n return initJoyrRide(next, config);\n });\n }\n });\n };\n return {\n scope: {},\n link: link\n };\n };\n\n JoyRideDirective.$inject = [\"$rootScope\", \"tgCurrentUserService\", \"tgJoyRideService\", \"$location\", \"$translate\"];\n\n angular.module(\"taigaComponents\").directive(\"tgJoyRide\", JoyRideDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/joy-ride/joy-ride.service.coffee\n */\n\n(function() {\n var JoyRideService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n JoyRideService = (function(superClass) {\n extend(JoyRideService, superClass);\n\n JoyRideService.$inject = ['$translate', 'tgCheckPermissionsService'];\n\n function JoyRideService(translate, checkPermissionsService) {\n this.translate = translate;\n this.checkPermissionsService = checkPermissionsService;\n }\n\n JoyRideService.prototype.getConfig = function() {\n return {\n dashboard: (function(_this) {\n return function() {\n var steps;\n steps = [\n {\n element: '.project-list > section:not(.ng-hide)',\n position: 'left',\n joyride: {\n title: _this.translate.instant('JOYRIDE.DASHBOARD.STEP1.TITLE'),\n text: _this.translate.instant('JOYRIDE.DASHBOARD.STEP1.TEXT')\n }\n }, {\n element: '.working-on-container',\n position: 'right',\n joyride: {\n title: _this.translate.instant('JOYRIDE.DASHBOARD.STEP2.TITLE'),\n text: _this.translate.instant('JOYRIDE.DASHBOARD.STEP2.TEXT')\n }\n }, {\n element: '.watching-container',\n position: 'right',\n joyride: {\n title: _this.translate.instant('JOYRIDE.DASHBOARD.STEP3.TITLE'),\n text: [_this.translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT1'), _this.translate.instant('JOYRIDE.DASHBOARD.STEP3.TEXT2')]\n }\n }\n ];\n if (!$('.project-list .create-project-button').is(':hidden')) {\n steps.push({\n element: '.project-list .create-project-button',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.DASHBOARD.STEP4.TITLE'),\n text: [_this.translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT1'), _this.translate.instant('JOYRIDE.DASHBOARD.STEP4.TEXT2')]\n }\n });\n }\n return steps;\n };\n })(this),\n backlog: (function(_this) {\n return function() {\n var steps;\n steps = [\n {\n element: '.summary',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.BACKLOG.STEP1.TITLE'),\n text: [_this.translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT1'), _this.translate.instant('JOYRIDE.BACKLOG.STEP1.TEXT2')]\n }\n }, {\n element: '.backlog-table-empty',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.BACKLOG.STEP2.TITLE'),\n text: _this.translate.instant('JOYRIDE.BACKLOG.STEP2.TEXT')\n }\n }, {\n element: '.sprints',\n position: 'left',\n joyride: {\n title: _this.translate.instant('JOYRIDE.BACKLOG.STEP3.TITLE'),\n text: _this.translate.instant('JOYRIDE.BACKLOG.STEP3.TEXT')\n }\n }\n ];\n if (_this.checkPermissionsService.check('add_us')) {\n steps.push({\n element: '.new-us',\n position: 'rigth',\n joyride: {\n title: _this.translate.instant('JOYRIDE.BACKLOG.STEP4.TITLE'),\n text: _this.translate.instant('JOYRIDE.BACKLOG.STEP4.TEXT')\n }\n });\n }\n return steps;\n };\n })(this),\n kanban: (function(_this) {\n return function() {\n var steps;\n steps = [\n {\n element: '.kanban-table-inner',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.KANBAN.STEP1.TITLE'),\n text: _this.translate.instant('JOYRIDE.KANBAN.STEP1.TEXT')\n }\n }, {\n element: '.card-placeholder',\n position: 'right',\n joyride: {\n title: _this.translate.instant('JOYRIDE.KANBAN.STEP2.TITLE'),\n text: _this.translate.instant('JOYRIDE.KANBAN.STEP2.TEXT')\n }\n }\n ];\n if (_this.checkPermissionsService.check('add_us')) {\n steps.push({\n element: '.add-action',\n position: 'bottom',\n joyride: {\n title: _this.translate.instant('JOYRIDE.KANBAN.STEP3.TITLE'),\n text: [_this.translate.instant('JOYRIDE.KANBAN.STEP3.TEXT1'), _this.translate.instant('JOYRIDE.KANBAN.STEP3.TEXT2')]\n }\n });\n }\n return steps;\n };\n })(this)\n };\n };\n\n JoyRideService.prototype.get = function(name) {\n var joyRide, joyRides;\n joyRides = this.getConfig();\n joyRide = joyRides[name].call(this);\n return _.map(joyRide, function(item) {\n var html;\n html = \"\";\n if (item.joyride.title) {\n html += \"

    \" + item.joyride.title + \"

    \";\n }\n if (_.isArray(item.joyride.text)) {\n _.forEach(item.joyride.text, function(text) {\n return html += \"

    \" + text + \"

    \";\n });\n } else {\n html += \"

    \" + item.joyride.text + \"

    \";\n }\n item.intro = html;\n return item;\n });\n };\n\n return JoyRideService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgJoyRideService\", JoyRideService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/kanban-board-zoom/kanban-board-zoom.directive.coffee\n */\n\n(function() {\n var KanbanBoardZoomDirective;\n\n KanbanBoardZoomDirective = function(storage, projectService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var getZoomView, unwatch, zooms;\n scope.zoomIndex = storage.get(\"kanban_zoom\") || 2;\n scope.levels = 5;\n zooms = [[\"ref\"], [\"subject\"], [\"owner\", \"tags\", \"extra_info\", \"unfold\"], [\"attachments\"], [\"related_tasks\", \"empty_extra_info\"]];\n getZoomView = function(zoomIndex) {\n if (zoomIndex == null) {\n zoomIndex = 0;\n }\n if (storage.get(\"kanban_zoom\") !== zoomIndex) {\n storage.set(\"kanban_zoom\", zoomIndex);\n }\n return _.reduce(zooms, function(result, value, key) {\n if (key <= zoomIndex) {\n result = result.concat(value);\n }\n return result;\n });\n };\n scope.$watch('zoomIndex', function(zoomLevel) {\n var zoom;\n zoom = getZoomView(zoomLevel);\n return scope.onZoomChange({\n zoomLevel: zoomLevel,\n zoom: zoom\n });\n });\n return unwatch = scope.$watch(function() {\n return projectService.project;\n }, function(project) {\n if (project) {\n if (project.get('my_permissions').indexOf(\"view_tasks\") === -1) {\n scope.levels = 4;\n }\n return unwatch();\n }\n });\n };\n return {\n scope: {\n onZoomChange: \"&\"\n },\n template: \"\",\n link: link\n };\n };\n\n angular.module('taigaComponents').directive(\"tgKanbanBoardZoom\", [\"$tgStorage\", \"tgProjectService\", KanbanBoardZoomDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/live-announcement/live-announcement.directive.coffee\n */\n\n(function() {\n var LiveAnnouncementDirective;\n\n LiveAnnouncementDirective = function(liveAnnouncementService) {\n var link;\n link = function(scope, el, attrs) {};\n return {\n restrict: \"AE\",\n scope: {},\n controllerAs: 'vm',\n controller: function() {\n this.close = function() {\n return liveAnnouncementService.open = false;\n };\n return Object.defineProperties(this, {\n open: {\n get: function() {\n return liveAnnouncementService.open;\n }\n },\n title: {\n get: function() {\n return liveAnnouncementService.title;\n }\n },\n desc: {\n get: function() {\n return liveAnnouncementService.desc;\n }\n }\n });\n },\n link: link,\n templateUrl: \"components/live-announcement/live-announcement.html\"\n };\n };\n\n LiveAnnouncementDirective.$inject = [\"tgLiveAnnouncementService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgLiveAnnouncement\", LiveAnnouncementDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/live-announcement/live-announcement.service.coffee\n */\n\n(function() {\n var LiveAnnouncementService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n LiveAnnouncementService = (function(superClass) {\n extend(LiveAnnouncementService, superClass);\n\n function LiveAnnouncementService() {\n this.open = false;\n this.title = \"\";\n this.desc = \"\";\n }\n\n LiveAnnouncementService.prototype.show = function(title, desc) {\n this.open = true;\n this.title = title;\n return this.desc = desc;\n };\n\n return LiveAnnouncementService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgLiveAnnouncementService\", LiveAnnouncementService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.controller.coffee\n */\n\n(function() {\n var MoveToSprintLightboxController, module;\n\n module = angular.module(\"taigaComponents\");\n\n MoveToSprintLightboxController = (function() {\n MoveToSprintLightboxController.$inject = ['$rootScope', '$scope', '$tgResources', 'tgProjectService', '$translate', 'lightboxService', '$tgConfirm'];\n\n function MoveToSprintLightboxController(rootScope, scope, rs, projectService, translate, lightboxService, confirm) {\n this.rootScope = rootScope;\n this.scope = scope;\n this.rs = rs;\n this.projectService = projectService;\n this.translate = translate;\n this.lightboxService = lightboxService;\n this.confirm = confirm;\n this.projectId = this.projectService.project.get('id');\n this.loading = false;\n this.someSelected = false;\n this.selectedSprintId = null;\n this.typesSelected = {\n uss: false,\n tasks: false,\n issues: false\n };\n this.itemsToMove = {};\n this._loadSprints();\n this.scope.$watch(\"vm.openItems\", (function(_this) {\n return function(openItems) {\n if (!openItems) {\n return;\n }\n return _this._init(openItems);\n };\n })(this));\n }\n\n MoveToSprintLightboxController.prototype._init = function(openItems) {\n var ref, ref1, ref2;\n this.hasManyItemTypes = _.size(this.openItems) > 1;\n this.ussCount = parseInt((ref = openItems.uss) != null ? ref.length : void 0);\n this.updateSelected('uss', this.ussCount > 0);\n this.tasksCount = parseInt((ref1 = openItems.tasks) != null ? ref1.length : void 0);\n this.updateSelected('tasks', this.tasksCount > 0);\n this.issuesCount = parseInt((ref2 = openItems.issues) != null ? ref2.length : void 0);\n return this.updateSelected('issues', this.issuesCount > 0);\n };\n\n MoveToSprintLightboxController.prototype._loadSprints = function() {\n return this.rs.sprints.list(this.projectId, {\n closed: false\n }).then((function(_this) {\n return function(data) {\n return _this.sprints = _.filter(data.milestones, function(x) {\n return x.id !== _this.sprint.id;\n });\n };\n })(this));\n };\n\n MoveToSprintLightboxController.prototype.updateSelected = function(itemType, value) {\n this.typesSelected[itemType] = value;\n this.someSelected = _.some(this.typesSelected);\n if (value === true) {\n return this.itemsToMove[itemType] = this.openItems[itemType];\n } else if (this.itemsToMove[itemType]) {\n return delete this.itemsToMove[itemType];\n }\n };\n\n MoveToSprintLightboxController.prototype.submit = function() {\n var itemsNotMoved;\n itemsNotMoved = {};\n _.map(this.openItems, (function(_this) {\n return function(itemsList, itemsType) {\n if (!_this.itemsToMove[itemsType]) {\n return itemsNotMoved[itemsType] = true;\n }\n };\n })(this));\n this.loading = true;\n return this.moveItems().then((function(_this) {\n return function() {\n _this.rootScope.$broadcast(\"taskboard:items:move\", _this.typesSelected);\n _this.lightboxService.closeAll();\n _this.loading = false;\n if (_.size(itemsNotMoved) > 0) {\n return _this.displayWarning(itemsNotMoved);\n }\n };\n })(this));\n };\n\n MoveToSprintLightboxController.prototype.moveItems = function() {\n var promises;\n promises = [];\n if (this.itemsToMove.uss) {\n promises.push(this.rs.sprints.moveUserStoriesMilestone(this.sprint.id, this.projectId, this.selectedSprintId, this.itemsToMove.uss));\n }\n if (this.itemsToMove.tasks) {\n promises.push(this.rs.sprints.moveTasksMilestone(this.sprint.id, this.projectId, this.selectedSprintId, this.itemsToMove.tasks));\n }\n if (this.itemsToMove.issues) {\n promises.push(this.rs.sprints.moveIssuesMilestone(this.sprint.id, this.projectId, this.selectedSprintId, this.itemsToMove.issues));\n }\n return Promise.all(promises);\n };\n\n MoveToSprintLightboxController.prototype.displayWarning = function(itemsNotMoved) {\n var action, desc, ref, title, totalItemsMoved;\n action = this.translate.instant('COMMON.I_GET_IT');\n if (_.size(itemsNotMoved) === 1 && itemsNotMoved.issues === true) {\n title = this.translate.instant('TASKBOARD.MOVE_TO_SPRINT.WARNING_ISSUES_NOT_MOVED_TITLE');\n desc = this.translate.instant('TASKBOARD.MOVE_TO_SPRINT.WARNING_ISSUES_NOT_MOVED');\n } else {\n totalItemsMoved = 0;\n _.map(this.itemsToMove, function(itemsList, itemsType) {\n return totalItemsMoved += itemsList.length;\n });\n title = this.translate.instant('TASKBOARD.MOVE_TO_SPRINT.WARNING_SPRINT_STILL_OPEN_TITLE', {\n total: totalItemsMoved\n }, 'messageformat');\n desc = this.translate.instant('TASKBOARD.MOVE_TO_SPRINT.WARNING_SPRINT_STILL_OPEN', {\n sprintName: (ref = this.sprint) != null ? ref.name : void 0\n });\n }\n return this.confirm.success(title, desc, null, action);\n };\n\n return MoveToSprintLightboxController;\n\n })();\n\n module.controller(\"MoveToSprintLbCtrl\", MoveToSprintLightboxController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.directive.coffee\n */\n\n(function() {\n var module, moveToSprintLightboxDirective;\n\n module = angular.module(\"taigaComponents\");\n\n moveToSprintLightboxDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return lightboxService.open(el);\n };\n return {\n scope: {},\n bindToController: {\n openItems: \"=\",\n sprint: \"=\"\n },\n templateUrl: \"components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.html\",\n controller: \"MoveToSprintLbCtrl\",\n controllerAs: \"vm\",\n link: link\n };\n };\n\n moveToSprintLightboxDirective.$inject = [\"lightboxService\"];\n\n module.directive(\"tgLbMoveToSprint\", moveToSprintLightboxDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/move-to-sprint/move-to-sprint-controller.coffee\n */\n\n(function() {\n var MoveToSprintController, taiga;\n\n taiga = this.taiga;\n\n MoveToSprintController = (function() {\n MoveToSprintController.$inject = ['$scope', 'tgLightboxFactory', 'tgProjectService'];\n\n function MoveToSprintController(scope, lightboxFactory, projectService) {\n this.scope = scope;\n this.lightboxFactory = lightboxFactory;\n this.projectService = projectService;\n this.permissions = this.projectService.project.get('my_permissions');\n this.hasOpenItems = false;\n this.disabled = false;\n this.openItems = {\n uss: [],\n tasks: [],\n issues: []\n };\n this.scope.$watch(\"vm.uss\", (function(_this) {\n return function() {\n return _this.getOpenUss();\n };\n })(this));\n this.scope.$watch(\"vm.unnasignedTasks\", (function(_this) {\n return function() {\n return _this.getOpenStorylessTasks();\n };\n })(this));\n this.scope.$watch(\"vm.issues\", (function(_this) {\n return function() {\n return _this.getOpenIssues();\n };\n })(this));\n }\n\n MoveToSprintController.prototype.checkOpenItems = function() {\n return _.some(Object.keys(this.openItems), (function(_this) {\n return function(x) {\n return _this.openItems[x].length > 0;\n };\n })(this));\n };\n\n MoveToSprintController.prototype.openLightbox = function() {\n var openItems;\n if (this.disabled === !true && this.hasOpenItems) {\n openItems = {};\n _.map(this.openItems, function(itemsList, itemsType) {\n if (itemsList.length) {\n return openItems[itemsType] = itemsList;\n }\n });\n return this.lightboxFactory.create('tg-lb-move-to-sprint', {\n \"class\": \"lightbox lightbox-move-to-sprint\",\n \"sprint\": \"sprint\",\n \"open-items\": \"openItems\"\n }, {\n sprint: this.sprint,\n openItems: openItems\n });\n }\n };\n\n MoveToSprintController.prototype.getOpenUss = function() {\n if (!this.uss || this.permissions.indexOf(\"modify_us\") === -1) {\n return;\n }\n this.openItems.uss = [];\n this.uss.map((function(_this) {\n return function(us) {\n if (us.is_closed === false) {\n return _this.openItems.uss.push({\n us_id: us.id,\n order: us.sprint_order\n });\n }\n };\n })(this));\n return this.hasOpenItems = this.checkOpenItems();\n };\n\n MoveToSprintController.prototype.getOpenStorylessTasks = function() {\n if (!this.unnasignedTasks || this.permissions.indexOf(\"modify_task\") === -1) {\n return;\n }\n this.openItems.tasks = [];\n this.unnasignedTasks.map((function(_this) {\n return function(column) {\n return column.map(function(task) {\n if (task.get('model').get('is_closed') === false) {\n return _this.openItems.tasks.push({\n task_id: task.get('model').get('id'),\n order: task.get('model').get('taskboard_order')\n });\n }\n });\n };\n })(this));\n return this.hasOpenItems = this.checkOpenItems();\n };\n\n MoveToSprintController.prototype.getOpenIssues = function() {\n if (!this.issues || this.permissions.indexOf(\"modify_issue\") === -1) {\n return;\n }\n this.openItems.issues = [];\n this.issues.map((function(_this) {\n return function(issue) {\n if (issue.get('status').get('is_closed') === false) {\n return _this.openItems.issues.push({\n issue_id: issue.get('id')\n });\n }\n };\n })(this));\n return this.hasOpenItems = this.checkOpenItems();\n };\n\n return MoveToSprintController;\n\n })();\n\n angular.module('taigaComponents').controller('MoveToSprintCtrl', MoveToSprintController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/move-to-sprint/move-to-sprint.directive.coffee\n */\n\n(function() {\n var module, moveToSprintDirective;\n\n module = angular.module(\"taigaComponents\");\n\n moveToSprintDirective = function(taskboardTasksService) {\n return {\n controller: \"MoveToSprintCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: 'components/move-to-sprint/move-to-sprint.html',\n scope: {\n sprint: '=',\n uss: '=',\n unnasignedTasks: '=',\n issues: '=',\n disabled: '='\n }\n };\n };\n\n moveToSprintDirective.$inject = ['tgTaskboardTasks'];\n\n module.directive('tgMoveToSprint', [moveToSprintDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/project-logo-big-src/project-logo-big-src.directive.coffee\n */\n\n(function() {\n var ProjectLogoBigSrcDirective;\n\n ProjectLogoBigSrcDirective = function(projectLogoService) {\n var link;\n link = function(scope, el, attrs) {\n return scope.$watch('project', function(project) {\n var logo, projectLogo;\n project = Immutable.fromJS(project);\n if (!project) {\n return;\n }\n projectLogo = project.get('logo_big_url');\n if (projectLogo) {\n el.attr('src', projectLogo);\n return el.css('background', \"\");\n } else {\n logo = projectLogoService.getDefaultProjectLogo(project.get('slug'), project.get('id'));\n el.attr('src', logo.src);\n return el.css('background', logo.color);\n }\n });\n };\n return {\n link: link,\n scope: {\n project: \"=tgProjectLogoBigSrc\"\n }\n };\n };\n\n ProjectLogoBigSrcDirective.$inject = [\"tgProjectLogoService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgProjectLogoBigSrc\", ProjectLogoBigSrcDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/project-logo-small-src/project-logo-small-src.directive.coffee\n */\n\n(function() {\n var ProjectLogoSmallSrcDirective;\n\n ProjectLogoSmallSrcDirective = function(projectLogoService) {\n var link;\n link = function(scope, el, attrs) {\n return scope.$watch('project', function(project) {\n var logo, projectLogo;\n project = Immutable.fromJS(project);\n if (!project) {\n return;\n }\n projectLogo = project.get('logo_small_url');\n if (projectLogo) {\n el.attr('src', projectLogo);\n return el.css('background', \"\");\n } else {\n logo = projectLogoService.getDefaultProjectLogo(project.get('slug'), project.get('id'));\n el.attr('src', logo.src);\n return el.css('background', logo.color);\n }\n });\n };\n return {\n link: link,\n scope: {\n project: \"=tgProjectLogoSmallSrc\"\n }\n };\n };\n\n ProjectLogoSmallSrcDirective.$inject = [\"tgProjectLogoService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgProjectLogoSmallSrc\", ProjectLogoSmallSrcDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/project-menu/project-menu.controller.coffee\n */\n\n(function() {\n var ProjectMenuController;\n\n ProjectMenuController = (function() {\n ProjectMenuController.$inject = [\"tgProjectService\", \"tgLightboxFactory\"];\n\n function ProjectMenuController(projectService, lightboxFactory) {\n this.projectService = projectService;\n this.lightboxFactory = lightboxFactory;\n this.project = null;\n this.menu = Immutable.Map();\n }\n\n ProjectMenuController.prototype.show = function() {\n var ref;\n this.project = this.projectService.project;\n this.sprints = (ref = this.project.get('milestones')) != null ? ref.toJS() : void 0;\n this.active = this._getActiveSection();\n this._setVideoConference();\n return this._setMenuPermissions();\n };\n\n ProjectMenuController.prototype.hide = function() {\n this.project = null;\n return this.menu = {};\n };\n\n ProjectMenuController.prototype.search = function() {\n return this.lightboxFactory.create(\"tg-search-box\", {\n \"class\": \"lightbox lightbox-search\"\n });\n };\n\n ProjectMenuController.prototype._setVideoConference = function() {\n var videoconferenceUrl;\n videoconferenceUrl = this._videoConferenceUrl();\n if (videoconferenceUrl) {\n return this.project = this.project.set(\"videoconferenceUrl\", videoconferenceUrl);\n }\n };\n\n ProjectMenuController.prototype._setMenuPermissions = function() {\n this.menu = Immutable.Map({\n epics: false,\n backlog: false,\n kanban: false,\n issues: false,\n wiki: false\n });\n if (this.project.get(\"is_epics_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_epics\") !== -1) {\n this.menu = this.menu.set(\"epics\", true);\n }\n if (this.project.get(\"is_backlog_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_us\") !== -1) {\n this.menu = this.menu.set(\"backlog\", true);\n }\n if (this.project.get(\"is_kanban_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_us\") !== -1) {\n this.menu = this.menu.set(\"kanban\", true);\n }\n if (this.project.get(\"is_issues_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_issues\") !== -1) {\n this.menu = this.menu.set(\"issues\", true);\n }\n if (this.project.get(\"is_wiki_activated\") && this.project.get(\"my_permissions\").indexOf(\"view_wiki_pages\") !== -1) {\n return this.menu = this.menu.set(\"wiki\", true);\n }\n };\n\n ProjectMenuController.prototype._getActiveSection = function() {\n var indexBacklog, indexKanban, oldSectionName, sectionName, sectionsBreadcrumb;\n sectionName = this.projectService.section;\n sectionsBreadcrumb = this.projectService.sectionsBreadcrumb;\n indexBacklog = sectionsBreadcrumb.lastIndexOf(\"backlog\");\n indexKanban = sectionsBreadcrumb.lastIndexOf(\"kanban\");\n if (indexBacklog !== -1 || indexKanban !== -1) {\n if (indexKanban === -1 || indexBacklog > indexKanban) {\n oldSectionName = \"backlog\";\n } else {\n oldSectionName = \"kanban\";\n }\n }\n if (sectionName === \"backlog-kanban\") {\n if (oldSectionName === \"backlog\" || oldSectionName === \"kanban\") {\n sectionName = oldSectionName;\n } else if (this.project.get(\"is_backlog_activated\") && !this.project.get(\"is_kanban_activated\")) {\n sectionName = \"backlog\";\n } else if (!this.project.get(\"is_backlog_activated\") && this.project.get(\"is_kanban_activated\")) {\n sectionName = \"kanban\";\n }\n }\n return sectionName;\n };\n\n ProjectMenuController.prototype._videoConferenceUrl = function() {\n var baseUrl, url;\n if (this.project.get(\"videoconferences\") === \"appear-in\") {\n baseUrl = \"https://appear.in/\";\n } else if (this.project.get(\"videoconferences\") === \"talky\") {\n baseUrl = \"https://talky.io/\";\n } else if (this.project.get(\"videoconferences\") === \"jitsi\") {\n baseUrl = \"https://meet.jit.si/\";\n } else if (this.project.get(\"videoconferences\") === \"custom\") {\n return this.project.get(\"videoconferences_extra_data\");\n } else {\n return \"\";\n }\n if (this.project.get(\"videoconferences_extra_data\")) {\n url = this.project.get(\"slug\") + \"-\" + taiga.slugify(this.project.get(\"videoconferences_extra_data\"));\n } else {\n url = this.project.get(\"slug\");\n }\n if (this.project.get(\"videoconferences\") === \"jitsi\") {\n url = url.replace(/-/g, \"\");\n }\n return baseUrl + url;\n };\n\n return ProjectMenuController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"ProjectMenu\", ProjectMenuController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/project-menu/project-menu.directive.coffee\n */\n\n(function() {\n var ProjectMenuDirective, taiga;\n\n taiga = this.taiga;\n\n ProjectMenuDirective = function(projectService, lightboxFactory) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var projectChange;\n projectChange = function() {\n if (projectService.project) {\n return ctrl.show();\n } else {\n return ctrl.hide();\n }\n };\n scope.$watch((function() {\n return projectService.project;\n }), projectChange);\n scope.vm.fixed = false;\n return $(window).on(\"scroll\", function() {\n var position;\n position = $(window).scrollTop();\n if (position > 100 && scope.vm.fixed === false) {\n scope.vm.fixed = true;\n return scope.$digest();\n } else if (position < 100 && scope.vm.fixed === true) {\n scope.vm.fixed = false;\n return scope.$digest();\n }\n });\n };\n return {\n scope: {},\n controller: \"ProjectMenu\",\n controllerAs: \"vm\",\n templateUrl: \"components/project-menu/project-menu.html\",\n link: link\n };\n };\n\n ProjectMenuDirective.$inject = [\"tgProjectService\", \"tgLightboxFactory\"];\n\n angular.module(\"taigaComponents\").directive(\"tgProjectMenu\", ProjectMenuDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/search-list/search-list.directive.coffee\n */\n\n(function() {\n var groupBy, module, normalizeString, searchListDirective;\n\n module = angular.module(\"taigaComponents\");\n\n normalizeString = this.taiga.normalizeString;\n\n groupBy = this.taiga.groupBy;\n\n searchListDirective = function($translate) {\n var link;\n link = function(scope, el, attrs, model) {\n var avaliableItems, filtering, isContainedIn, itemsById, parseString, resetAll, resetSelected;\n scope.templateUrl = \"components/search-list/search-list-\" + scope.itemType + \"-choice.html\";\n scope.currentSelected = null;\n filtering = false;\n avaliableItems = [];\n itemsById = {};\n if (scope.itemType === 'issue') {\n scope.milestonesById = groupBy(scope.project.milestones, function(e) {\n return e.id;\n });\n }\n if (scope.filterClosed) {\n scope.showClosed = false;\n if (scope.itemType === 'sprint') {\n scope.textShowClosed = $translate.instant(\"BACKLOG.SPRINTS.ACTION_SHOW_CLOSED_SPRINTS\");\n scope.textHideClosed = $translate.instant(\"BACKLOG.SPRINTS.ACTION_HIDE_CLOSED_SPRINTS\");\n }\n }\n el.on(\"click\", \".choice\", function(event) {\n var choiceId, ref, value;\n choiceId = parseInt($(event.currentTarget).data(\"choice-id\"));\n value = ((ref = attrs.ngModel) != null ? ref.id : void 0) !== choiceId ? itemsById[choiceId] : null;\n model.$setViewValue(value);\n scope.currentSelected = value;\n return scope.$apply();\n });\n isContainedIn = function(needle, haystack) {\n return _.includes(parseString(haystack), parseString(needle));\n };\n parseString = function(value) {\n if (typeof value !== 'string') {\n value = value.toString();\n }\n return normalizeString(value.toUpperCase());\n };\n resetSelected = function() {\n scope.currentSelected = null;\n return model.$setViewValue(null);\n };\n resetAll = function() {\n resetSelected();\n scope.searchText = '';\n avaliableItems = angular.copy(scope.items);\n return itemsById = groupBy(avaliableItems, function(x) {\n return x.id;\n });\n };\n scope.isVisible = function(item) {\n var ref;\n if (!scope.filterClosed || scope.showClosed) {\n return true;\n }\n if (scope.itemType === 'sprint' && (item.closed || item.is_closed)) {\n if (((ref = scope.currentSelected) != null ? ref.id : void 0) === item.id) {\n resetSelected();\n }\n return false;\n }\n return true;\n };\n scope.toggleShowClosed = function(item) {\n return scope.showClosed = !scope.showClosed;\n };\n scope.filterItems = function(searchText) {\n scope.filtering = true;\n scope.items = _.filter(avaliableItems, function(item) {\n var itemAttrs;\n itemAttrs = item.getAttrs();\n if (Array.isArray(scope.filterBy)) {\n return _.some(scope.filterBy, function(attr) {\n return isContainedIn(searchText, itemAttrs[attr]);\n });\n } else {\n return isContainedIn(searchText, itemAttrs[scope.filterBy]);\n }\n });\n if (!_.find(scope.items, scope.currentSelected)) {\n return resetSelected();\n }\n };\n return scope.$watch('items', function(items) {\n if (!scope.filtering && items) {\n return resetAll();\n }\n });\n };\n return {\n link: link,\n templateUrl: \"components/search-list/search-list.html\",\n require: \"ngModel\",\n scope: {\n label: '@',\n placeholder: '@',\n project: '=',\n filterBy: '=',\n items: '=',\n itemType: '@',\n filterClosed: '=',\n itemDisabled: '='\n }\n };\n };\n\n module.directive('tgSearchList', ['$translate', searchListDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.directive.coffee\n */\n\n(function() {\n var TagOptionDirective, module;\n\n module = angular.module('taigaCommon');\n\n TagOptionDirective = function() {\n var dispatch, link, select, stop;\n select = function(selected) {\n var containerHeight, diff, selectedPosition;\n selected.addClass('selected');\n selectedPosition = selected.position().top + selected.outerHeight();\n containerHeight = selected.parent().outerHeight();\n if (selectedPosition > containerHeight) {\n diff = selectedPosition - containerHeight;\n return selected.parent().scrollTop(selected.parent().scrollTop() + diff);\n } else if (selected.position().top < 0) {\n return selected.parent().scrollTop(selected.parent().scrollTop() + selected.position().top);\n }\n };\n dispatch = function(el, code, scope) {\n var activeElement, next, prev;\n activeElement = el.find(\".selected\");\n if (code === 40) {\n if (!activeElement.length) {\n return select(el.find('li:first'));\n } else {\n next = activeElement.next('li');\n if (next.length) {\n activeElement.removeClass('selected');\n return select(next);\n }\n }\n } else if (code === 38) {\n if (!activeElement.length) {\n return select(el.find('li:last'));\n } else {\n prev = activeElement.prev('li');\n if (prev.length) {\n activeElement.removeClass('selected');\n return select(prev);\n }\n }\n }\n };\n stop = function() {\n return $(document).off(\".tags-keyboard-navigation\");\n };\n link = function(scope, el) {\n stop();\n $(el).parent().on(\"keydown.tags-keyboard-navigation\", (function(_this) {\n return function(event) {\n var code;\n code = event.keyCode ? event.keyCode : event.which;\n if (code === 40 || code === 38) {\n event.preventDefault();\n return dispatch(el, code, scope);\n }\n };\n })(this));\n return scope.$on(\"$destroy\", stop);\n };\n return {\n link: link,\n templateUrl: \"components/tags/tag-dropdown/tag-dropdown.html\",\n scope: {\n onSelectTag: \"&\",\n colorArray: \"=\",\n tag: \"=\"\n }\n };\n };\n\n module.directive(\"tgTagsDropdown\", TagOptionDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.controller.coffee\n */\n\n(function() {\n var TagLineCommonController, module, trim;\n\n trim = this.taiga.trim;\n\n module = angular.module('taigaCommon');\n\n TagLineCommonController = (function() {\n TagLineCommonController.$inject = [\"tgTagLineService\"];\n\n function TagLineCommonController(tagLineService) {\n this.tagLineService = tagLineService;\n this.disableColorSelection = false;\n this.newTag = {\n name: \"\",\n color: null\n };\n this.colorArray = [];\n this.addTag = false;\n }\n\n TagLineCommonController.prototype.checkPermissions = function() {\n return this.tagLineService.checkPermissions(this.project.my_permissions, this.permissions);\n };\n\n TagLineCommonController.prototype._createColorsArray = function(projectTagColors) {\n return this.colorArray = this.tagLineService.createColorsArray(projectTagColors);\n };\n\n TagLineCommonController.prototype.displayTagInput = function() {\n return this.addTag = true;\n };\n\n TagLineCommonController.prototype.addNewTag = function(name, color) {\n this.newTag.name = \"\";\n this.newTag.color = null;\n if (!name.length) {\n return;\n }\n if (this.disableColorSelection) {\n if (name.length) {\n return this.onAddTag({\n name: name,\n color: color\n });\n }\n } else {\n if (this.project.tags_colors[name]) {\n color = this.project.tags_colors[name];\n }\n return this.onAddTag({\n name: name,\n color: color\n });\n }\n };\n\n TagLineCommonController.prototype.selectColor = function(color) {\n return this.newTag.color = color;\n };\n\n return TagLineCommonController;\n\n })();\n\n module.controller(\"TagLineCommonCtrl\", TagLineCommonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.directive.coffee\n */\n\n(function() {\n var TagLineCommonDirective, module;\n\n module = angular.module('taigaCommon');\n\n TagLineCommonDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {\n var unwatch;\n if (!_.isUndefined(attr.disableColorSelection)) {\n ctrl.disableColorSelection = true;\n }\n unwatch = scope.$watch(\"vm.project\", function(project) {\n if (!project || !Object.keys(project).length) {\n return;\n }\n unwatch();\n if (!ctrl.disableColorSelection) {\n return ctrl.colorArray = ctrl._createColorsArray(ctrl.project.tags_colors);\n }\n });\n return el.on(\"keydown\", \".tag-input\", function(event) {\n var tagName;\n if (event.keyCode === 27) {\n ctrl.addTag = false;\n ctrl.newTag.name = \"\";\n ctrl.newTag.color = \"\";\n event.stopPropagation();\n } else if (event.keyCode === 13) {\n event.preventDefault();\n if (el.find('.tags-dropdown .selected').length) {\n tagName = $('.tags-dropdown .selected .tags-dropdown-name').text();\n ctrl.addNewTag(tagName, null);\n } else {\n ctrl.addNewTag(ctrl.newTag.name, ctrl.newTag.color);\n }\n }\n return scope.$apply();\n });\n };\n return {\n link: link,\n scope: {\n permissions: \"@\",\n loadingAddTag: \"=\",\n loadingRemoveTag: \"=\",\n tags: \"=\",\n project: \"=\",\n onAddTag: \"&\",\n onDeleteTag: \"&\"\n },\n templateUrl: \"components/tags/tag-line-common/tag-line-common.html\",\n controller: \"TagLineCommonCtrl\",\n controllerAs: \"vm\",\n bindToController: true\n };\n };\n\n module.directive(\"tgTagLineCommon\", TagLineCommonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.controller.coffee\n */\n\n(function() {\n var TagLineController, module, trim;\n\n trim = this.taiga.trim;\n\n module = angular.module('taigaCommon');\n\n TagLineController = (function() {\n TagLineController.$inject = [\"$rootScope\", \"$tgConfirm\", \"$tgQueueModelTransformation\"];\n\n function TagLineController(rootScope, confirm, modelTransform) {\n this.rootScope = rootScope;\n this.confirm = confirm;\n this.modelTransform = modelTransform;\n this.loadingAddTag = false;\n }\n\n TagLineController.prototype.onDeleteTag = function(tag) {\n var onDeleteTagError, onDeleteTagSuccess, tagName, transform;\n this.loadingRemoveTag = tag[0];\n onDeleteTagSuccess = (function(_this) {\n return function(item) {\n _this.rootScope.$broadcast(\"object:updated\");\n _this.loadingRemoveTag = false;\n return item;\n };\n })(this);\n onDeleteTagError = (function(_this) {\n return function() {\n _this.confirm.notify(\"error\");\n return _this.loadingRemoveTag = false;\n };\n })(this);\n tagName = trim(tag[0].toLowerCase());\n transform = this.modelTransform.save(function(item) {\n var itemtags;\n itemtags = _.clone(item.tags);\n _.remove(itemtags, function(tag) {\n return tag[0] === tagName;\n });\n item.tags = itemtags;\n return item;\n });\n return transform.then(onDeleteTagSuccess, onDeleteTagError);\n };\n\n TagLineController.prototype.onAddTag = function(tag, color) {\n var onAddTagError, onAddTagSuccess, transform;\n this.loadingAddTag = true;\n onAddTagSuccess = (function(_this) {\n return function(item) {\n _this.rootScope.$broadcast(\"object:updated\");\n _this.rootScope.$broadcast(\"tags:updated\");\n _this.addTag = false;\n _this.loadingAddTag = false;\n return item;\n };\n })(this);\n onAddTagError = (function(_this) {\n return function() {\n _this.loadingAddTag = false;\n return _this.confirm.notify(\"error\");\n };\n })(this);\n transform = this.modelTransform.save((function(_this) {\n return function(item) {\n var itemtags, value;\n value = trim(tag.toLowerCase());\n itemtags = _.clone(item.tags);\n itemtags.push([tag, color]);\n item.tags = itemtags;\n return item;\n };\n })(this));\n return transform.then(onAddTagSuccess, onAddTagError);\n };\n\n return TagLineController;\n\n })();\n\n module.controller(\"TagLineCtrl\", TagLineController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.directive.coffee\n */\n\n(function() {\n var TagLineDirective, module;\n\n module = angular.module('taigaCommon');\n\n TagLineDirective = function() {\n return {\n scope: {\n item: \"=\",\n permissions: \"@\",\n project: \"=\"\n },\n templateUrl: \"components/tags/tag-line-detail/tag-line-detail.html\",\n controller: \"TagLineCtrl\",\n controllerAs: \"vm\",\n bindToController: true\n };\n };\n\n module.directive(\"tgTagLine\", TagLineDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.service.coffee\n */\n\n(function() {\n var TagLineService, module,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n module = angular.module('taigaCommon');\n\n TagLineService = (function(superClass) {\n extend(TagLineService, superClass);\n\n TagLineService.$inject = [];\n\n function TagLineService() {}\n\n TagLineService.prototype.checkPermissions = function(myPermissions, projectPermissions) {\n return _.includes(myPermissions, projectPermissions);\n };\n\n TagLineService.prototype.createColorsArray = function(projectTagColors) {\n return _.map(projectTagColors, function(index, value) {\n return [value, index];\n });\n };\n\n return TagLineService;\n\n })(taiga.Service);\n\n module.service(\"tgTagLineService\", TagLineService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tag-line.directive.coffee\n */\n\n(function() {\n var TagDirective, module;\n\n module = angular.module('taigaCommon');\n\n TagDirective = function() {\n return {\n templateUrl: \"components/tags/tag/tag.html\",\n scope: {\n tag: \"<\",\n loadingRemoveTag: \"<\",\n onDeleteTag: \"&\",\n hasPermissions: \"@\"\n }\n };\n };\n\n module.directive(\"tgTag\", TagDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/taskboard-zoom/taskboard-zoom.directive.coffee\n */\n\n(function() {\n var TaskboardZoomDirective;\n\n TaskboardZoomDirective = function(storage) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var getZoomView, zooms;\n scope.zoomIndex = storage.get(\"taskboard_zoom\") || 2;\n scope.levels = 4;\n zooms = [[\"ref\"], [\"subject\"], [\"owner\", \"tags\", \"extra_info\", \"unfold\"], [\"attachments\", \"empty_extra_info\"], [\"related_tasks\"]];\n getZoomView = function(zoomIndex) {\n if (zoomIndex == null) {\n zoomIndex = 0;\n }\n if (storage.get(\"taskboard_zoom\") !== zoomIndex) {\n storage.set(\"taskboard_zoom\", zoomIndex);\n }\n return _.reduce(zooms, function(result, value, key) {\n if (key <= zoomIndex) {\n result = result.concat(value);\n }\n return result;\n });\n };\n return scope.$watch('zoomIndex', function(zoomLevel) {\n var zoom;\n zoom = getZoomView(zoomLevel);\n return scope.onZoomChange({\n zoomLevel: zoomLevel,\n zoom: zoom\n });\n });\n };\n return {\n scope: {\n onZoomChange: \"&\"\n },\n template: \"\",\n link: link\n };\n };\n\n angular.module('taigaComponents').directive(\"tgTaskboardZoom\", [\"$tgStorage\", TaskboardZoomDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: tasks-sortable.directive.coffee\n */\n\n(function() {\n var TasksSortableDirective;\n\n TasksSortableDirective = function($parse, projectService) {\n var link;\n link = function(scope, el, attrs) {\n var callback, drake, scroll;\n if (!projectService.hasPermission(\"modify_task\")) {\n return;\n }\n callback = $parse(attrs.tgTasksSortable);\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).is('div.single-related-task.js-related-task');\n }\n });\n drake.on('dragend', function(item) {\n var itemEl, newIndex, task;\n itemEl = $(item);\n task = itemEl.scope().task;\n newIndex = itemEl.index();\n return scope.$apply(function() {\n return callback(scope, {\n task: task,\n newIndex: newIndex\n });\n });\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n TasksSortableDirective.$inject = [\"$parse\", \"tgProjectService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgTasksSortable\", TasksSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/terms-announcement/terms-announcement.directive.coffee\n */\n\n(function() {\n var TermsAnnouncementDirective;\n\n TermsAnnouncementDirective = function(TermsAnnouncementService, $repo, $auth, $config, $model) {\n var link;\n link = function(scope, el, attrs) {\n scope.privacyPolicyUrl = $config.get(\"privacyPolicyUrl\");\n scope.termsOfServiceUrl = $config.get(\"termsOfServiceUrl\");\n return scope.GDPRUrl = $config.get(\"GDPRUrl\");\n };\n return {\n restrict: \"AE\",\n scope: {},\n controllerAs: 'vm',\n controller: function() {\n this.close = function() {\n var onSuccess, user, userData;\n TermsAnnouncementService.open = false;\n user = $auth.getUser();\n if (user.read_new_terms === void 0) {\n userData = user.getAttrs();\n userData.read_new_terms = false;\n user = $model.make_model(\"users\", userData);\n }\n user.read_new_terms = true;\n onSuccess = function(data) {\n return $auth.setUser(data);\n };\n return $repo.save(user).then(onSuccess);\n };\n return Object.defineProperties(this, {\n open: {\n get: function() {\n return TermsAnnouncementService.open;\n }\n }\n });\n },\n link: link,\n templateUrl: \"components/terms-announcement/terms-announcement.html\"\n };\n };\n\n TermsAnnouncementDirective.$inject = [\"tgTermsAnnouncementService\", \"$tgRepo\", \"$tgAuth\", \"$tgConfig\", \"$tgModel\"];\n\n angular.module(\"taigaComponents\").directive(\"tgTermsAnnouncement\", TermsAnnouncementDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/terms-announcement/terms-announcement.service.coffee\n */\n\n(function() {\n var TermsAnnouncementService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n TermsAnnouncementService = (function(superClass) {\n extend(TermsAnnouncementService, superClass);\n\n function TermsAnnouncementService() {\n this.open = false;\n }\n\n TermsAnnouncementService.prototype.show = function() {\n return this.open = true;\n };\n\n return TermsAnnouncementService;\n\n })(taiga.Service);\n\n angular.module(\"taigaComponents\").service(\"tgTermsAnnouncementService\", TermsAnnouncementService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.directive.coffee\n */\n\n(function() {\n var TermsOfServiceAndPrivacyPolicyNoticeDirective;\n\n TermsOfServiceAndPrivacyPolicyNoticeDirective = function($config) {\n var link;\n link = function(scope, el, attrs) {\n scope.privacyPolicyUrl = $config.get(\"privacyPolicyUrl\");\n scope.termsOfServiceUrl = $config.get(\"termsOfServiceUrl\");\n scope.target = false;\n if (!scope.privacyPolicyUrl || !scope.termsOfServiceUrl) {\n scope.target = true;\n }\n return el.on(\"change\", \"input[name='accepted_terms']\", function(event) {\n var target;\n target = angular.element(event.currentTarget);\n scope.target = target.is(\":checked\");\n return scope.$apply();\n });\n };\n return {\n restrict: \"AE\",\n link: link,\n scope: {\n target: \"=\"\n },\n templateUrl: \"components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html\"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgTermsOfServiceAndPrivacyPolicyNotice\", [\"$tgConfig\", TermsOfServiceAndPrivacyPolicyNoticeDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/tips/tips.directive.coffee\n */\n\n(function() {\n var module, timeout, tipsDirective;\n\n timeout = this.taiga.timeout;\n\n module = angular.module(\"taigaComponents\");\n\n tipsDirective = function(tgLoader, $translate) {\n var link, randomInt, tips;\n tips = [\n {\n contentType: \"icon\",\n icon: \"icon-project\",\n message: \"PROJECTS_ORDER\"\n }, {\n contentType: \"icon\",\n icon: \"icon-upvote\",\n message: \"VOTING\"\n }, {\n contentType: \"icon\",\n icon: \"icon-attach\",\n message: \"ISSUES_TO_SPRINT\"\n }, {\n contentType: \"icon\",\n icon: \"icon-clock\",\n message: \"DUE_DATE\"\n }, {\n contentType: \"icon\",\n icon: \"icon-iocaine\",\n message: \"IOCAIN\"\n }, {\n contentType: \"icon\",\n icon: \"icon-blocked-project\",\n message: \"BLOCKED\"\n }, {\n contentType: \"icon\",\n icon: \"icon-promote\",\n message: \"PROMOTE\"\n }, {\n contentType: \"icon\",\n icon: \"icon-bulk\",\n message: \"BULK\"\n }, {\n contentType: \"range\",\n message: \"ZOOM\"\n }, {\n contentType: \"icon\",\n icon: \"icon-settings\",\n message: \"CUSTOM_FIELDS\"\n }, {\n contentType: \"arrows\",\n message: \"SLIDE_ARROWS\"\n }\n ];\n randomInt = function(size) {\n return Math.floor(Math.random() * size) + 1;\n };\n link = function(scope, el, attrs) {\n var loadTip, waitingTimeout;\n scope.tipLoaded = false;\n waitingTimeout = null;\n tgLoader.onStart(function() {\n return waitingTimeout = timeout(1000, function() {\n return loadTip();\n });\n });\n tgLoader.onEnd(function() {\n clearTimeout(waitingTimeout);\n return scope.tipLoaded = false;\n });\n return loadTip = function() {\n var tip;\n scope.tipLoaded = true;\n tip = tips[randomInt(tips.length - 1)];\n return scope.tip = {\n contentType: tip.contentType,\n message: \"TIPS.TIP_\" + tip.message,\n icon: tip.icon,\n color: \"tip-color-\" + (randomInt(5))\n };\n };\n };\n return {\n link: link,\n scope: true,\n templateUrl: \"components/tips/tip.html\"\n };\n };\n\n module.directive('tgTips', ['tgLoader', '$translate', tipsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/tribe-button/tribe-button.directive.coffee\n */\n\n(function() {\n var TribeButtonDirective;\n\n TribeButtonDirective = function(configService, locationService) {\n var link;\n link = function(scope, el, attrs) {\n scope.vm = {};\n scope.vm.tribeHost = configService.config.tribeHost;\n scope.vm.url = (locationService.protocol()) + \"://\" + (locationService.host());\n if (locationService.protocol() === \"http\" && locationService.port() !== 80) {\n return scope.vm.url = scope.vm.url + \":\" + (locationService.port());\n } else if (locationService.protocol() === \"https\" && locationService.port() !== 443) {\n return scope.vm.url = scope.vm.url + \":\" + (locationService.port());\n }\n };\n return {\n scope: {\n usId: \"=\",\n projectSlug: \"=\"\n },\n controllerAs: \"vm\",\n templateUrl: \"components/tribe-button/tribe-button.html\",\n link: link\n };\n };\n\n TribeButtonDirective.$inject = [\"$tgConfig\", \"$tgLocation\"];\n\n angular.module(\"taigaComponents\").directive(\"tgTribeButton\", TribeButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/tribe-button/tribe-linked.directive.coffee\n */\n\n(function() {\n var TribeLinkedDirective;\n\n TribeLinkedDirective = function(configService) {\n var directive, link;\n link = function(scope, el, attrs) {\n scope.vm = {};\n scope.vm.tribeHost = configService.config.tribeHost;\n scope.vm.show = function() {\n return scope.vm.open = true;\n };\n return scope.vm.hide = function(event) {\n return scope.vm.open = false;\n };\n };\n directive = {\n templateUrl: \"components/tribe-button/tribe-linked.html\",\n scope: {\n gigTitle: \"=\",\n gigId: \"=\"\n },\n link: link\n };\n return directive;\n };\n\n TribeLinkedDirective.$inject = [\"$tgConfig\"];\n\n angular.module(\"taigaComponents\").directive(\"tgTribeLinked\", TribeLinkedDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/vote-button/vote-button.controller.coffee\n */\n\n(function() {\n var VoteButtonController;\n\n VoteButtonController = (function() {\n VoteButtonController.$inject = [\"tgCurrentUserService\"];\n\n function VoteButtonController(currentUserService) {\n this.currentUserService = currentUserService;\n this.user = this.currentUserService.getUser();\n this.isMouseOver = false;\n this.loading = false;\n }\n\n VoteButtonController.prototype.showTextWhenMouseIsOver = function() {\n return this.isMouseOver = true;\n };\n\n VoteButtonController.prototype.showTextWhenMouseIsLeave = function() {\n return this.isMouseOver = false;\n };\n\n VoteButtonController.prototype.toggleVote = function() {\n var promise;\n this.loading = true;\n if (!this.item.is_voter) {\n promise = this._upvote();\n } else {\n promise = this._downvote();\n }\n promise[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n return promise;\n };\n\n VoteButtonController.prototype._upvote = function() {\n return this.onUpvote().then((function(_this) {\n return function() {\n return _this.showTextWhenMouseIsLeave();\n };\n })(this));\n };\n\n VoteButtonController.prototype._downvote = function() {\n return this.onDownvote();\n };\n\n return VoteButtonController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"VoteButton\", VoteButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/vote-button/vote-button.directive.coffee\n */\n\n(function() {\n var VoteButtonDirective;\n\n VoteButtonDirective = function() {\n return {\n scope: {},\n controller: \"VoteButton\",\n bindToController: {\n item: \"=\",\n onUpvote: \"=\",\n onDownvote: \"=\"\n },\n controllerAs: \"vm\",\n templateUrl: \"components/vote-button/vote-button.html\"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgVoteButton\", VoteButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/watch-button/watch-button.controller.coffee\n */\n\n(function() {\n var WatchButtonController;\n\n WatchButtonController = (function() {\n WatchButtonController.$inject = [\"tgCurrentUserService\", \"$rootScope\"];\n\n function WatchButtonController(currentUserService, rootScope) {\n this.currentUserService = currentUserService;\n this.rootScope = rootScope;\n this.user = this.currentUserService.getUser();\n this.isMouseOver = false;\n this.loading = false;\n }\n\n WatchButtonController.prototype.showTextWhenMouseIsOver = function() {\n return this.isMouseOver = true;\n };\n\n WatchButtonController.prototype.showTextWhenMouseIsLeave = function() {\n return this.isMouseOver = false;\n };\n\n WatchButtonController.prototype.openWatchers = function() {\n return this.rootScope.$broadcast(\"watcher:add\", this.item);\n };\n\n WatchButtonController.prototype.getPerms = function() {\n var name, perms;\n if (!this.item) {\n return \"\";\n }\n name = this.item._name;\n perms = {\n userstories: 'modify_us',\n issues: 'modify_issue',\n tasks: 'modify_task',\n epics: 'modify_epic'\n };\n return perms[name];\n };\n\n WatchButtonController.prototype.toggleWatch = function() {\n var promise;\n this.loading = true;\n if (!this.item.is_watcher) {\n promise = this._watch();\n } else {\n promise = this._unwatch();\n }\n promise[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n return promise;\n };\n\n WatchButtonController.prototype._watch = function() {\n return this.onWatch().then((function(_this) {\n return function() {\n return _this.showTextWhenMouseIsLeave();\n };\n })(this));\n };\n\n WatchButtonController.prototype._unwatch = function() {\n return this.onUnwatch();\n };\n\n return WatchButtonController;\n\n })();\n\n angular.module(\"taigaComponents\").controller(\"WatchButton\", WatchButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/watch-button/watch-button.directive.coffee\n */\n\n(function() {\n var WatchButtonDirective;\n\n WatchButtonDirective = function() {\n return {\n scope: {},\n controller: \"WatchButton\",\n bindToController: {\n item: \"=\",\n onWatch: \"=\",\n onUnwatch: \"=\"\n },\n controllerAs: \"vm\",\n templateUrl: function(item, attributes) {\n return \"components/watch-button/watch-button-\" + attributes.environment + \".html\";\n }\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgWatchButton\", WatchButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/comment-edit-wysiwyg.directive.coffee\n */\n\n(function() {\n var CommentEditWysiwyg;\n\n CommentEditWysiwyg = function(attachmentsFullService) {\n var link;\n link = function($scope, $el, $attrs) {\n var types, uploadFile;\n types = {\n epics: \"epic\",\n userstories: \"us\",\n issues: \"issue\",\n tasks: \"task\"\n };\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.comment.comment.id, types[$scope.vm.comment.comment._name], file, true, true).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n return $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n
    \"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgCommentEditWysiwyg\", [\"tgAttachmentsFullService\", CommentEditWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/comment-wysiwyg.directive.coffee\n */\n\n(function() {\n var CommentWysiwyg;\n\n CommentWysiwyg = function($modelTransform, $rootscope, attachmentsFullService) {\n var link;\n link = function($scope, $el, $attrs) {\n var types, uploadFile;\n $scope.editableDescription = false;\n $scope.saveComment = function(description, cb) {\n var transform;\n $scope.content = '';\n $scope.vm.type.comment = description;\n transform = $modelTransform.save(function(item) {});\n transform.then(function() {\n if ($scope.vm.onAddComment) {\n $scope.vm.onAddComment();\n }\n return $rootscope.$broadcast(\"object:updated\");\n });\n return transform[\"finally\"](cb);\n };\n types = {\n epics: \"epic\",\n userstories: \"us\",\n issues: \"issue\",\n tasks: \"task\"\n };\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.type.id, types[$scope.vm.type._name], file, true, true).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n $scope.onChange = function(markdown) {\n return $scope.vm.type.comment = markdown;\n };\n $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n $scope.content = '';\n return $scope.$watch(\"vm.type\", function(value) {\n if (!value) {\n return;\n }\n return $scope.storageKey = \"comment-\" + value.project + \"-\" + value.id + \"-\" + value._name;\n });\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n
    \"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgCommentWysiwyg\", [\"$tgQueueModelTransformation\", \"$rootScope\", \"tgAttachmentsFullService\", CommentWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/custom-field-edit-wysiwyg.directive.coffee\n */\n\n(function() {\n var CustomFieldEditWysiwyg;\n\n CustomFieldEditWysiwyg = function(attachmentsFullService) {\n var link;\n link = function($scope, $el, $attrs) {\n var types, uploadFile;\n types = {\n userstories: \"us\",\n issues: \"issue\",\n tasks: \"task\"\n };\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.vm.projectId, $scope.vm.comment.comment.id, types[$scope.vm.comment.comment._name], file).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n return $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n
    \"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgCustomFieldEditWysiwyg\", [\"tgAttachmentsFullService\", CustomFieldEditWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/item-wysiwyg.directive.coffee\n */\n\n(function() {\n var ItemWysiwyg;\n\n ItemWysiwyg = function($modelTransform, $rootscope, $confirm, attachmentsFullService, $translate) {\n var link;\n link = function($scope, $el, $attrs) {\n var uploadFile;\n $scope.editableDescription = false;\n $scope.saveDescription = function(description, cb) {\n var transform;\n transform = $modelTransform.save(function(item) {\n item.description = description;\n return item;\n });\n transform.then(function() {\n $confirm.notify(\"success\");\n return $rootscope.$broadcast(\"object:updated\");\n });\n transform.then(null, function() {\n return $confirm.notify(\"error\");\n });\n return transform[\"finally\"](cb);\n };\n uploadFile = function(file, cb) {\n return attachmentsFullService.addAttachment($scope.project.id, $scope.item.id, $attrs.type, file).then(function(result) {\n return cb(result.getIn(['file', 'name']), result.getIn(['file', 'url']));\n });\n };\n $scope.uploadFiles = function(files, cb) {\n var file, i, len, results;\n results = [];\n for (i = 0, len = files.length; i < len; i++) {\n file = files[i];\n results.push(uploadFile(file, cb));\n }\n return results;\n };\n $scope.$watch($attrs.model, function(value) {\n if (!value) {\n return;\n }\n $scope.item = value;\n $scope.version = value.version;\n return $scope.storageKey = $scope.project.id + \"-\" + value.id + \"-\" + $attrs.type;\n });\n return $scope.$watch('project', function(project) {\n if (!project) {\n return;\n }\n return $scope.editableDescription = project.my_permissions.indexOf($attrs.requiredPerm) !== -1;\n });\n };\n return {\n scope: true,\n link: link,\n template: \"
    \\n \\n \\n\\n
    \\n\\n \\n {{'COMMON.DESCRIPTION.NO_DESCRIPTION' | translate}}\\n
    \\n\"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgItemWysiwyg\", [\"$tgQueueModelTransformation\", \"$rootScope\", \"$tgConfirm\", \"tgAttachmentsFullService\", \"$translate\", ItemWysiwyg]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg-code-hightlighter.service.coffee\n */\n\n(function() {\n var WysiwygCodeHightlighterService;\n\n WysiwygCodeHightlighterService = (function() {\n function WysiwygCodeHightlighterService() {\n Prism.plugins.customClass.prefix('prism-');\n Prism.plugins.customClass.map({});\n }\n\n WysiwygCodeHightlighterService.prototype.getLanguages = function() {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n if (_this.languages) {\n return resolve(_this.languages);\n } else if (_this.loadPromise) {\n return _this.loadPromise.then(function() {\n return resolve(_this.languages);\n });\n } else {\n return _this.loadPromise = $.getJSON(\"/\" + window._version + \"/prism/prism-languages.json\").then(function(_languages_) {\n _this.loadPromise = null;\n _this.languages = _.map(_languages_, function(it) {\n it.url = (\"/\" + window._version + \"/prism/\") + it.file;\n return it;\n });\n return resolve(_this.languages);\n });\n }\n };\n })(this));\n };\n\n WysiwygCodeHightlighterService.prototype.getLanguageInClassList = function(classes) {\n var lan;\n lan = _.find(this.languages, function(it) {\n return !!_.find(classes, function(className) {\n return 'language-' + it.name === className;\n });\n });\n if (lan) {\n return lan.name;\n } else {\n return null;\n }\n };\n\n WysiwygCodeHightlighterService.prototype.loadLanguage = function(lan) {\n return new Promise(function(resolve) {\n if (!Prism.languages[lan]) {\n return ljs.load(\"/\" + window._version + \"/prism/prism-\" + lan + \".min.js\", resolve);\n } else {\n return resolve();\n }\n });\n };\n\n WysiwygCodeHightlighterService.prototype.replaceCodeBrToNl = function(code) {\n return $(code).find('br').replaceWith('\\n');\n };\n\n WysiwygCodeHightlighterService.prototype.hightlightCode = function(code) {\n var lan;\n this.replaceCodeBrToNl(code);\n lan = this.getLanguageInClassList(code.classList);\n if (lan) {\n return this.loadLanguage(lan).then(function() {\n return Prism.highlightElement(code);\n });\n }\n };\n\n WysiwygCodeHightlighterService.prototype.addHightlighter = function(element) {\n var codes;\n codes = $(element).find('code');\n return codes.each((function(_this) {\n return function(index, code) {\n return _this.hightlightCode(code);\n };\n })(this));\n };\n\n return WysiwygCodeHightlighterService;\n\n })();\n\n angular.module(\"taigaComponents\").service(\"tgWysiwygCodeHightlighterService\", WysiwygCodeHightlighterService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.directive.coffee\n */\n\n(function() {\n var WysiwygCodeLightbox;\n\n WysiwygCodeLightbox = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return scope.$watch('visible', function(visible) {\n if (visible && !el.hasClass('open')) {\n scope.open = true;\n lightboxService.open(el, null, scope.onClose);\n return scope.$applyAsync(function() {\n var textarea;\n textarea = el[0].querySelector('textarea');\n if (textarea) {\n return textarea.select();\n }\n });\n } else if (!visible && el.hasClass('open')) {\n scope.open = false;\n return lightboxService.close(el);\n }\n });\n };\n return {\n scope: {\n languages: '<',\n codeLanguage: '<',\n code: '<',\n visible: '<',\n onClose: '&',\n onSave: '&'\n },\n link: link,\n templateUrl: \"components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.html\"\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgWysiwygCodeLightbox\", [\"lightboxService\", WysiwygCodeLightbox]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg-mention.service.coffee\n */\n\n(function() {\n var WysiwygMentionService;\n\n WysiwygMentionService = (function() {\n WysiwygMentionService.$inject = [\"tgProjectService\", \"tgWysiwygService\", \"$tgNavUrls\", \"$tgResources\"];\n\n function WysiwygMentionService(projectService, wysiwygService, navurls, rs) {\n this.projectService = projectService;\n this.wysiwygService = wysiwygService;\n this.navurls = navurls;\n this.rs = rs;\n this.cancelablePromise = null;\n this.projectSlug = this.projectService.project.get('slug');\n }\n\n WysiwygMentionService.prototype.search = function(mention) {\n return new Promise((function(_this) {\n return function(resolve) {\n if ('#'.indexOf(mention[0]) !== -1) {\n return _this.searchItem(mention.replace('#', '')).then(resolve);\n } else if ('@'.indexOf(mention[0]) !== -1) {\n return _this.searchUser(mention.replace('@', ''), resolve);\n } else if (':'.indexOf(mention[0]) !== -1) {\n return _this.searchEmoji(mention.replace(':', ''), resolve);\n }\n };\n })(this));\n };\n\n WysiwygMentionService.prototype.searchItem = function(term) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n var filter;\n term = taiga.slugify(term);\n filter = function(item) {\n return ['subject', 'ref'].some(function(attr) {\n return taiga.slugify(item[attr]).indexOf(term) >= 0;\n });\n };\n return _this.rs.search[\"do\"](_this.projectService.project.get('id'), term).then(function(res) {\n var i, items, len, ref, result, type, typeURLs;\n result = [];\n if (!res.count || res.count === res.wikipages.length) {\n return resolve(result);\n } else {\n typeURLs = {\n issues: 'project-issues-detail',\n userstories: 'project-userstories-detail',\n tasks: 'project-tasks-detail'\n };\n ref = ['issues', 'tasks', 'userstories'];\n for (i = 0, len = ref.length; i < len; i++) {\n type = ref[i];\n if (!res[type]) {\n continue;\n }\n items = res[type].filter(filter).map(function(item) {\n item.url = _this.navurls.resolve(typeURLs[type], {\n project: _this.projectSlug,\n ref: item.ref\n });\n return item;\n });\n result = result.concat(items);\n }\n return resolve(_.sortBy(result, [\"ref\"]).slice(0, 10));\n }\n });\n };\n })(this));\n };\n\n WysiwygMentionService.prototype.searchUser = function(term, callback) {\n var users;\n users = this.projectService.project.toJS().members.filter(function(user) {\n return ['username', 'full_name', 'full_name_display'].some(function(attr) {\n return taiga.slugify(user[attr]).indexOf(term) >= 0 || user[attr].indexOf(term) >= 0;\n });\n });\n users = users.slice(0, 10).map((function(_this) {\n return function(item) {\n item.url = _this.navurls.resolve('user-profile', {\n project: _this.projectSlug,\n username: item.username\n });\n return item;\n };\n })(this));\n return callback(users);\n };\n\n WysiwygMentionService.prototype.searchEmoji = function(name, callback) {\n var filteredEmojis;\n filteredEmojis = this.wysiwygService.searchEmojiByName(name);\n filteredEmojis = filteredEmojis.slice(0, 10);\n return callback(filteredEmojis);\n };\n\n return WysiwygMentionService;\n\n })();\n\n angular.module(\"taigaComponents\").service(\"tgWysiwygMentionService\", WysiwygMentionService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg.directive.coffee\n */\n\n(function() {\n var Medium, bindOnce, taiga;\n\n taiga = this.taiga;\n\n bindOnce = this.taiga.bindOnce;\n\n Medium = function($translate, $confirm, $storage, wysiwygService, animationFrame, tgLoader, wysiwygCodeHightlighterService, wysiwygMentionService, analytics, $location) {\n var AlignRightButton, CodeButton, CustomPasteHandler, addCodeBlockAndHightlight, getIcon, getRangeCodeBlock, isCodeBlockSelected, link, oldIsBlockContainer, refreshCodeBlocks, removeCodeBlockAndHightlight, removeSelections;\n removeSelections = function() {\n if (window.getSelection) {\n if (window.getSelection().empty) {\n return window.getSelection().empty();\n }\n } else if (window.getSelection().removeAllRanges) {\n return window.getSelection().removeAllRanges();\n } else if (document.selection) {\n return document.selection.empty();\n }\n };\n getRangeCodeBlock = function(range) {\n return $(range.endContainer).parentsUntil('.editor', 'code');\n };\n isCodeBlockSelected = function(range) {\n return !!getRangeCodeBlock(range).length;\n };\n removeCodeBlockAndHightlight = function(selection, mediumInstance) {\n var code, p, pre;\n if ($(selection).is('code')) {\n code = selection;\n } else {\n code = $(selection).closest('code')[0];\n }\n pre = code.parentNode;\n p = document.createElement('p');\n p.innerText = code.innerText;\n pre.parentNode.replaceChild(p, pre);\n return mediumInstance.checkContentChanged(mediumInstance.elements[0]);\n };\n addCodeBlockAndHightlight = function(range, mediumInstance) {\n var code, extract, pre, start;\n pre = document.createElement('pre');\n code = document.createElement('code');\n if (!range.startContainer.parentNode.nextSibling) {\n $('
    ').insertAfter(range.startContainer.parentNode);\n }\n start = range.endContainer.parentNode.nextSibling;\n extract = range.extractContents();\n code.appendChild(extract);\n pre.appendChild(code);\n start.parentNode.insertBefore(pre, start);\n refreshCodeBlocks(mediumInstance);\n return mediumInstance.checkContentChanged(mediumInstance.elements[0]);\n };\n refreshCodeBlocks = function(mediumInstance) {\n var i, j, len, len1, mainChildren, p, pre, preList, ref, results;\n if (!mediumInstance) {\n return;\n }\n ref = mediumInstance.elements[0].children;\n for (i = 0, len = ref.length; i < len; i++) {\n mainChildren = ref[i];\n if (mainChildren && mainChildren.tagName.toLowerCase() === 'p' && !mainChildren.innerHTML.trim().length) {\n mainChildren.parentNode.removeChild(mainChildren);\n }\n }\n preList = mediumInstance.elements[0].querySelectorAll('pre');\n results = [];\n for (j = 0, len1 = preList.length; j < len1; j++) {\n pre = preList[j];\n pre.setAttribute('contenteditable', false);\n pre.setAttribute('title', $translate.instant(\"COMMON.WYSIWYG.DB_CLICK\"));\n pre.addEventListener('mousedown', function(e) {\n return e.preventDefault();\n });\n if (pre.nextElementSibling && pre.nextElementSibling.nodeName.toLowerCase() === 'p' && !pre.nextElementSibling.children.length) {\n results.push(pre.nextElementSibling.appendChild(document.createElement('br')));\n } else if (!pre.nextElementSibling || ['p', 'ul', 'h1', 'h2', 'h3'].indexOf(pre.nextElementSibling.nodeName.toLowerCase()) === -1) {\n p = document.createElement('p');\n p.appendChild(document.createElement('br'));\n results.push(pre.parentNode.insertBefore(p, pre.nextSibling));\n } else {\n results.push(void 0);\n }\n }\n return results;\n };\n AlignRightButton = MediumEditor.extensions.button.extend({\n name: 'rtl',\n init: function() {\n var option;\n option = _.find(this.base.options.toolbar.buttons, function(it) {\n return it.name === 'rtl';\n });\n this.button = this.document.createElement('button');\n this.button.classList.add('medium-editor-action');\n this.button.innerHTML = option.contentDefault || 'RTL';\n this.button.title = 'RTL';\n return this.on(this.button, 'click', this.handleClick.bind(this));\n },\n getButton: function() {\n return this.button;\n },\n handleClick: function(event) {\n var range;\n range = MediumEditor.selection.getSelectionRange(document);\n if (range.commonAncestorContainer.parentNode.style.textAlign === 'right') {\n return document.execCommand('justifyLeft', false);\n } else {\n return document.execCommand('justifyRight', false);\n }\n }\n });\n getIcon = function(icon) {\n return \"\\n \\n\";\n };\n CodeButton = MediumEditor.extensions.button.extend({\n name: 'code',\n init: function() {\n var option;\n option = _.find(this.base.options.toolbar.buttons, function(it) {\n return it.name === 'code';\n });\n this.button = this.document.createElement('button');\n this.button.classList.add('medium-editor-action');\n this.button.innerHTML = option.contentDefault || 'Code';\n this.button.title = 'Code';\n return this.on(this.button, 'click', this.handleClick.bind(this));\n },\n getButton: function() {\n return this.button;\n },\n tagNames: ['code'],\n handleClick: function(event) {\n var range, toolbar;\n range = MediumEditor.selection.getSelectionRange(self.document);\n if (isCodeBlockSelected(range, this.base)) {\n removeCodeBlockAndHightlight(range.endContainer, this.base);\n } else {\n addCodeBlockAndHightlight(range, this.base);\n removeSelections();\n }\n toolbar = this.base.getExtensionByName('toolbar');\n if (toolbar) {\n return toolbar.hideToolbar();\n }\n }\n });\n CustomPasteHandler = MediumEditor.extensions.paste.extend({\n doPaste: function(pastedHTML, pastedPlain, editable) {\n var html;\n html = MediumEditor.util.htmlEntities(pastedPlain);\n return MediumEditor.util.insertHTMLCommand(this.document, html);\n }\n });\n oldIsBlockContainer = MediumEditor.util.isBlockContainer;\n MediumEditor.util.isBlockContainer = function(element) {\n var tagName;\n if (!element) {\n return oldIsBlockContainer(element);\n }\n if (element.tagName) {\n tagName = element.tagName;\n } else {\n tagName = element.parentNode.tagName;\n }\n if (tagName.toLowerCase() === 'code') {\n return true;\n }\n return oldIsBlockContainer(element);\n };\n link = function($scope, $el, $attrs) {\n var change, clean, codeBlockSelected, create, discardLocalStorage, editorMarkdown, editorMedium, getCurrentContent, isDraft, isEditOnly, isOutdated, localSave, mediumInstance, notPersist, replaceCodeBrToNl, saveEnd, setEditMode, setHtmlMedium, throttleChange, unwatch, updateMarkdownWithCurrentHtml, uploadEnd;\n mediumInstance = null;\n editorMedium = $el.find('.medium');\n editorMarkdown = $el.find('.markdown');\n codeBlockSelected = null;\n isEditOnly = !!$attrs.$attr.editonly;\n notPersist = !!$attrs.$attr.notPersist;\n $scope.required = !!$attrs.$attr.required;\n $scope.editMode = isEditOnly || false;\n $scope.mode = $storage.get('editor-mode', 'html');\n $scope.markdown = '';\n $scope.codeEditorVisible = false;\n $scope.codeLans = [];\n wysiwygCodeHightlighterService.getLanguages().then(function(codeLans) {\n return $scope.codeLans = codeLans;\n });\n setEditMode = function(editMode) {\n return $scope.editMode = editMode;\n };\n setHtmlMedium = function(markdown) {\n var html;\n html = wysiwygService.getHTML(markdown);\n editorMedium.html(html);\n wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]);\n if ($scope.editMode) {\n return refreshCodeBlocks(mediumInstance);\n }\n };\n $scope.saveSnippet = function(lan, code) {\n var codePre;\n $scope.codeEditorVisible = false;\n codeBlockSelected.innerText = code;\n codePre = codeBlockSelected.parentNode;\n if (lan === 'remove-formating') {\n codeBlockSelected.className = '';\n codePre.className = '';\n removeCodeBlockAndHightlight(codeBlockSelected, mediumInstance);\n } else if (_.trim(code).length) {\n if (lan) {\n codeBlockSelected.className = 'language-' + lan;\n codePre.className = 'language-' + lan;\n } else {\n codeBlockSelected.className = '';\n codePre.className = '';\n }\n wysiwygCodeHightlighterService.hightlightCode(codeBlockSelected);\n mediumInstance.checkContentChanged(mediumInstance.elements[0]);\n } else {\n codeBlockSelected.parentNode.parentNode.removeChild(codeBlockSelected.parentNode);\n mediumInstance.checkContentChanged(mediumInstance.elements[0]);\n }\n throttleChange();\n return null;\n };\n $scope.setMode = function(mode) {\n $storage.set('editor-mode', mode);\n if (mode === 'markdown') {\n updateMarkdownWithCurrentHtml();\n } else {\n setHtmlMedium($scope.markdown);\n }\n $scope.mode = mode;\n return mediumInstance.trigger('editableBlur', {}, editorMedium[0]);\n };\n $scope.save = function(e) {\n if (e) {\n e.preventDefault();\n }\n if ($scope.mode === 'html') {\n updateMarkdownWithCurrentHtml();\n }\n setHtmlMedium($scope.markdown);\n if ($scope.required && !$scope.markdown.length) {\n return;\n }\n $scope.saving = true;\n $scope.outdated = false;\n $scope.onSave({\n text: $scope.markdown,\n cb: saveEnd\n });\n };\n $scope.cancel = function(e) {\n if (e) {\n e.preventDefault();\n }\n if (!isEditOnly) {\n setEditMode(false);\n }\n if (notPersist) {\n clean();\n } else if ($scope.mode === 'html') {\n setHtmlMedium($scope.content || null);\n }\n $scope.markdown = $scope.content;\n discardLocalStorage();\n mediumInstance.trigger('blur', {}, editorMedium[0]);\n $scope.outdated = false;\n refreshCodeBlocks(mediumInstance);\n $scope.onCancel();\n };\n clean = function() {\n $scope.markdown = '';\n return editorMedium.html('');\n };\n saveEnd = function() {\n $scope.saving = false;\n if (!isEditOnly) {\n setEditMode(false);\n }\n if (notPersist) {\n clean();\n }\n discardLocalStorage();\n mediumInstance.trigger('blur', {}, editorMedium[0]);\n return analytics.trackEvent('develop', 'save wysiwyg', $scope.mode, 1);\n };\n uploadEnd = function(name, url) {\n if (taiga.isImage(name)) {\n return mediumInstance.pasteHTML(\"
    \");\n } else {\n name = $('
    ').text(name).html();\n return mediumInstance.pasteHTML(\"\" + name + \"
    \");\n }\n };\n isOutdated = function() {\n var store;\n store = $storage.get($scope.storageKey);\n if (store && store.version && store.version !== $scope.version) {\n return true;\n }\n return false;\n };\n isDraft = function() {\n var store;\n store = $storage.get($scope.storageKey);\n if (store) {\n return true;\n }\n return false;\n };\n getCurrentContent = function() {\n var store;\n store = $storage.get($scope.storageKey);\n if (store) {\n return store.text;\n }\n return $scope.content;\n };\n discardLocalStorage = function() {\n return $storage.remove($scope.storageKey);\n };\n $scope.cancelWithConfirmation = function() {\n var message, title;\n if ($scope.content === $scope.markdown) {\n $scope.cancel();\n document.activeElement.blur();\n document.body.click();\n return null;\n }\n title = $translate.instant(\"COMMON.CONFIRM_CLOSE_EDIT_MODE_TITLE\");\n message = $translate.instant(\"COMMON.CONFIRM_CLOSE_EDIT_MODE_MESSAGE\");\n return $confirm.ask(title, null, message).then(function(askResponse) {\n $scope.cancel();\n return askResponse.finish();\n });\n };\n replaceCodeBrToNl = function() {\n var html;\n html = $('
    ').html(editorMedium.html());\n html.find('code br').replaceWith('\\n');\n return html.html();\n };\n updateMarkdownWithCurrentHtml = function() {\n var html;\n html = replaceCodeBrToNl();\n return $scope.markdown = wysiwygService.getMarkdown(html);\n };\n localSave = function(markdown) {\n var store;\n if ($scope.storageKey) {\n store = {};\n store.version = $scope.version || 0;\n store.text = markdown;\n return $storage.set($scope.storageKey, store);\n }\n };\n change = function() {\n if ($scope.mode === 'html') {\n updateMarkdownWithCurrentHtml();\n }\n localSave($scope.markdown);\n return $scope.onChange({\n markdown: $scope.markdown\n });\n };\n throttleChange = _.throttle(change, 200);\n create = function(text, editMode) {\n var html;\n if (editMode == null) {\n editMode = false;\n }\n if (text.length) {\n html = wysiwygService.getHTML(text);\n editorMedium.html(html);\n }\n mediumInstance = new MediumEditor(editorMedium[0], {\n imageDragging: false,\n placeholder: {\n text: $scope.placeholder\n },\n toolbar: {\n buttons: [\n {\n name: 'bold',\n contentDefault: getIcon('editor-bold')\n }, {\n name: 'italic',\n contentDefault: getIcon('editor-italic')\n }, {\n name: 'strikethrough',\n contentDefault: getIcon('editor-cross-out')\n }, {\n name: 'anchor',\n contentDefault: getIcon('editor-link')\n }, {\n name: 'image',\n contentDefault: getIcon('editor-image')\n }, {\n name: 'orderedlist',\n contentDefault: getIcon('editor-list-n')\n }, {\n name: 'unorderedlist',\n contentDefault: getIcon('editor-list-o')\n }, {\n name: 'h1',\n contentDefault: getIcon('editor-h1')\n }, {\n name: 'h2',\n contentDefault: getIcon('editor-h2')\n }, {\n name: 'h3',\n contentDefault: getIcon('editor-h3')\n }, {\n name: 'quote',\n contentDefault: getIcon('editor-quote')\n }, {\n name: 'removeFormat',\n contentDefault: getIcon('editor-no-format')\n }, {\n name: 'rtl',\n contentDefault: getIcon('editor-rtl')\n }, {\n name: 'code',\n contentDefault: getIcon('editor-code')\n }\n ]\n },\n extensions: {\n paste: new CustomPasteHandler(),\n code: new CodeButton(),\n autolist: new AutoList(),\n alignright: new AlignRightButton(),\n mediumMention: new MentionExtension({\n getItems: function(mention, mentionCb) {\n return wysiwygMentionService.search(mention).then(mentionCb);\n }\n })\n }\n });\n $scope.changeMarkdown = throttleChange;\n mediumInstance.subscribe('editableInput', function(e) {\n return $scope.$applyAsync(throttleChange);\n });\n mediumInstance.subscribe(\"editableClick\", function(e) {\n var r;\n r = new RegExp('^(?:[a-z]+:)?//', 'i');\n if (e.target.href) {\n if (r.test(e.target.getAttribute('href')) || e.target.getAttribute('target') === '_blank') {\n e.stopPropagation();\n return window.open(e.target.href);\n } else {\n return $location.url(e.target.href);\n }\n }\n });\n mediumInstance.subscribe('editableDrop', function(event) {\n return $scope.onUploadFile({\n files: event.dataTransfer.files,\n cb: uploadEnd\n });\n });\n mediumInstance.subscribe('editableKeydown', function(e) {\n var code, mention;\n code = e.keyCode ? e.keyCode : e.which;\n mention = $('.medium-mention');\n if ((code === 40 || code === 38) && mention.length) {\n e.stopPropagation();\n e.preventDefault();\n return;\n }\n if ($scope.editMode && code === 27) {\n e.stopPropagation();\n return $scope.$applyAsync($scope.cancelWithConfirmation);\n } else if (code === 27) {\n return editorMedium.blur();\n }\n });\n setEditMode(editMode);\n return $scope.$applyAsync(function() {\n wysiwygCodeHightlighterService.addHightlighter(mediumInstance.elements[0]);\n return refreshCodeBlocks(mediumInstance);\n });\n };\n $(editorMedium[0]).on('mousedown', function(e) {\n if (e.target.href) {\n e.preventDefault();\n return e.stopPropagation();\n } else {\n return $scope.$applyAsync(function() {\n if (!$scope.editMode) {\n setEditMode(true);\n return refreshCodeBlocks(mediumInstance);\n }\n });\n }\n });\n $(editorMedium[0]).on('dblclick', 'pre', function(e) {\n return $scope.$applyAsync(function() {\n $scope.codeEditorVisible = true;\n codeBlockSelected = e.currentTarget.querySelector('code');\n $scope.currentCodeLanguage = wysiwygCodeHightlighterService.getLanguageInClassList(codeBlockSelected.classList);\n return $scope.code = codeBlockSelected.innerText;\n });\n });\n unwatch = $scope.$watch('content', function(content) {\n var unwatchLoader;\n if (!_.isUndefined(content)) {\n $scope.outdated = isOutdated();\n if (!mediumInstance && isDraft()) {\n setEditMode(true);\n }\n if (($scope.markdown.length || content.length) && $scope.markdown === content) {\n return;\n }\n content = getCurrentContent();\n $scope.markdown = content;\n if (mediumInstance) {\n mediumInstance.destroy();\n }\n if (tgLoader.open()) {\n unwatchLoader = tgLoader.onEnd(function() {\n create(content, $scope.editMode);\n return unwatchLoader();\n });\n } else {\n create(content, $scope.editMode);\n }\n return unwatch();\n }\n });\n return $scope.$on(\"$destroy\", function() {\n if (mediumInstance) {\n if (editorMedium.length) {\n $(editorMedium[0]).off();\n }\n return mediumInstance.destroy();\n }\n });\n };\n return {\n templateUrl: \"common/components/wysiwyg-toolbar.html\",\n scope: {\n placeholder: '@',\n version: '<',\n storageKey: '<',\n content: '<',\n onCancel: '&',\n onSave: '&',\n onUploadFile: '&',\n onChange: '&'\n },\n link: link\n };\n };\n\n angular.module(\"taigaComponents\").directive(\"tgWysiwyg\", [\"$translate\", \"$tgConfirm\", \"$tgStorage\", \"tgWysiwygService\", \"animationFrame\", \"tgLoader\", \"tgWysiwygCodeHightlighterService\", \"tgWysiwygMentionService\", \"$tgAnalytics\", \"$location\", Medium]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: components/wysiwyg/wysiwyg.service.coffee\n */\n\n(function() {\n var WysiwygService;\n\n WysiwygService = (function() {\n WysiwygService.$inject = [\"tgWysiwygCodeHightlighterService\", \"tgProjectService\", \"$tgNavUrls\", \"$tgEmojis\"];\n\n function WysiwygService(wysiwygCodeHightlighterService, projectService, navurls, emojis) {\n this.wysiwygCodeHightlighterService = wysiwygCodeHightlighterService;\n this.projectService = projectService;\n this.navurls = navurls;\n this.emojis = emojis;\n }\n\n WysiwygService.prototype.searchEmojiByName = function(name) {\n return this.emojis.searchByName(name);\n };\n\n WysiwygService.prototype.pipeLinks = function(text) {\n return text.replace(/\\[\\[(.*?)\\]\\]/g, function(match, p1, offset, str) {\n var link, linkParams, title;\n linkParams = p1.split('|');\n link = linkParams[0];\n title = linkParams[1] || linkParams[0];\n return '[' + title + '](' + link + ')';\n });\n };\n\n WysiwygService.prototype.replaceUrls = function(html) {\n var el, i, len, link, links;\n el = document.createElement('html');\n el.innerHTML = html;\n links = el.querySelectorAll('a');\n for (i = 0, len = links.length; i < len; i++) {\n link = links[i];\n if (link.getAttribute('href').indexOf('/profile/') !== -1) {\n link.parentNode.replaceChild(document.createTextNode(link.innerText), link);\n } else if (link.getAttribute('href').indexOf('/t/') !== -1) {\n link.parentNode.replaceChild(document.createTextNode(link.innerText), link);\n }\n }\n return el.innerHTML;\n };\n\n WysiwygService.prototype.searchWikiLinks = function(html) {\n var el, i, len, link, links, url;\n el = document.createElement('html');\n el.innerHTML = html;\n links = el.querySelectorAll('a');\n for (i = 0, len = links.length; i < len; i++) {\n link = links[i];\n if (link.getAttribute('href').indexOf('/') === -1) {\n url = this.navurls.resolve('project-wiki-page', {\n project: this.projectService.project.get('slug'),\n slug: link.getAttribute('href')\n });\n link.setAttribute('href', url);\n }\n }\n return el.innerHTML;\n };\n\n WysiwygService.prototype.removeTrailingListBr = function(text) {\n return text.replace(/
  • (.*?)
    <\\/li>/g, '
  • $1
  • ');\n };\n\n WysiwygService.prototype.getMarkdown = function(html) {\n var cleanIssueConverter, codeLanguageConverter, markdown;\n cleanIssueConverter = {\n filter: ['html', 'body', 'span', 'div'],\n replacement: function(innerHTML) {\n return innerHTML;\n }\n };\n codeLanguageConverter = {\n filter: (function(_this) {\n return function(node) {\n return node.nodeName === 'PRE' && node.firstChild && node.firstChild.nodeName === 'CODE';\n };\n })(this),\n replacement: (function(_this) {\n return function(content, node) {\n var lan;\n lan = _this.wysiwygCodeHightlighterService.getLanguageInClassList(node.firstChild.classList);\n if (!lan) {\n lan = '';\n }\n return '\\n\\n```' + lan + '\\n' + _.trim(node.firstChild.textContent) + '\\n```\\n\\n';\n };\n })(this)\n };\n html = html.replace(/ (<\\/.*>)/g, \"$1\");\n html = this.emojis.replaceImgsByEmojiName(html);\n html = this.replaceUrls(html);\n html = this.removeTrailingListBr(html);\n markdown = toMarkdown(html, {\n gfm: true,\n converters: [cleanIssueConverter, codeLanguageConverter]\n });\n return markdown;\n };\n\n WysiwygService.prototype.parseMentionMatches = function(text) {\n var m, matches, offset, prevChar, regex, serviceName, tagBuilder;\n serviceName = 'twitter';\n tagBuilder = this.tagBuilder;\n matches = [];\n regex = /@[^\\s]{1,50}[^.\\s]/g;\n m = regex.exec(text);\n while (m !== null) {\n offset = m.index;\n prevChar = text.charAt(offset - 1);\n if (m.index === regex.lastIndex) {\n regex.lastIndex++;\n }\n m.forEach(function(match, groupIndex) {\n return matches.push(new Autolinker.match.Mention({\n tagBuilder: tagBuilder,\n matchedText: match,\n offset: offset,\n serviceName: serviceName,\n mention: match.slice(1)\n }));\n });\n m = regex.exec(text);\n }\n return matches;\n };\n\n WysiwygService.prototype.autoLinkHTML = function(html) {\n var autolinker, matchRegexStr;\n matchRegexStr = String(Autolinker.matcher.Mention.prototype.matcherRegexes.twitter);\n if (matchRegexStr.indexOf('.') === -1) {\n matchRegexStr = '@[^\\s]{1,50}[^.\\s]';\n }\n autolinker = new Autolinker({\n mention: 'twitter',\n hashtag: 'twitter',\n replaceFn: (function(_this) {\n return function(match) {\n var profileUrl, url;\n if (match.getType() === 'mention') {\n profileUrl = _this.navurls.resolve('user-profile', {\n project: _this.projectService.project.get('slug'),\n username: match.getMention()\n });\n return '@' + match.getMention() + '';\n } else if (match.getType() === 'hashtag') {\n url = _this.navurls.resolve('project-detail-ref', {\n project: _this.projectService.project.get('slug'),\n ref: match.getHashtag()\n });\n return '#' + match.getHashtag() + '';\n }\n };\n })(this)\n });\n Autolinker.matcher.Mention.prototype.parseMatches = this.parseMentionMatches.bind(autolinker);\n return autolinker.link(html);\n };\n\n WysiwygService.prototype.getHTML = function(text) {\n var md, options, result;\n if (!text || !text.length) {\n return \"\";\n }\n options = {\n breaks: true\n };\n text = this.emojis.replaceEmojiNameByImgs(text);\n text = this.pipeLinks(text);\n md = window.markdownit({\n breaks: true\n });\n md.use(window.markdownitLazyHeaders);\n result = md.render(text);\n result = this.searchWikiLinks(result);\n result = this.autoLinkHTML(result);\n return result;\n };\n\n return WysiwygService;\n\n })();\n\n angular.module(\"taigaComponents\").service(\"tgWysiwygService\", WysiwygService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-home-order-by/discover-home-order-by.controller.coffee\n */\n\n(function() {\n var DiscoverHomeOrderByController;\n\n DiscoverHomeOrderByController = (function() {\n DiscoverHomeOrderByController.$inject = ['$translate'];\n\n function DiscoverHomeOrderByController(translate) {\n this.translate = translate;\n this.is_open = false;\n this.texts = {\n week: this.translate.instant('DISCOVER.FILTERS.WEEK'),\n month: this.translate.instant('DISCOVER.FILTERS.MONTH'),\n year: this.translate.instant('DISCOVER.FILTERS.YEAR'),\n all: this.translate.instant('DISCOVER.FILTERS.ALL_TIME')\n };\n }\n\n DiscoverHomeOrderByController.prototype.currentText = function() {\n return this.texts[this.currentOrderBy];\n };\n\n DiscoverHomeOrderByController.prototype.open = function() {\n return this.is_open = true;\n };\n\n DiscoverHomeOrderByController.prototype.close = function() {\n return this.is_open = false;\n };\n\n DiscoverHomeOrderByController.prototype.orderBy = function(type) {\n this.currentOrderBy = type;\n this.is_open = false;\n return this.onChange({\n orderBy: this.currentOrderBy\n });\n };\n\n return DiscoverHomeOrderByController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverHomeOrderBy\", DiscoverHomeOrderByController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-home-order-by/discover-home-order-by.directive.coffee\n */\n\n(function() {\n var DiscoverHomeOrderByDirective;\n\n DiscoverHomeOrderByDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n controller: \"DiscoverHomeOrderBy\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"discover/components/discover-home-order-by/discover-home-order-by.html\",\n scope: {\n currentOrderBy: \"=orderBy\",\n onChange: \"&\"\n },\n link: link\n };\n };\n\n DiscoverHomeOrderByDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgDiscoverHomeOrderBy\", DiscoverHomeOrderByDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-search-bar/discover-search-bar.controller.coffee\n */\n\n(function() {\n var DiscoverSearchBarController;\n\n DiscoverSearchBarController = (function() {\n DiscoverSearchBarController.$inject = ['tgDiscoverProjectsService'];\n\n function DiscoverSearchBarController(discoverProjectsService) {\n this.discoverProjectsService = discoverProjectsService;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.discoverProjectsService.projectsCount;\n };\n })(this));\n this.discoverProjectsService.fetchStats();\n }\n\n DiscoverSearchBarController.prototype.selectFilter = function(filter) {\n return this.onChange({\n filter: filter,\n q: this.q\n });\n };\n\n DiscoverSearchBarController.prototype.submitFilter = function() {\n return this.onChange({\n filter: this.filter,\n q: this.q\n });\n };\n\n return DiscoverSearchBarController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverSearchBar\", DiscoverSearchBarController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-search-bar/discover-search-bar.directive.coffee\n */\n\n(function() {\n var DiscoverSearchBarDirective;\n\n DiscoverSearchBarDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {};\n return {\n controller: \"DiscoverSearchBar\",\n controllerAs: \"vm\",\n templateUrl: 'discover/components/discover-search-bar/discover-search-bar.html',\n bindToController: true,\n scope: {\n q: \"=\",\n filter: \"=\",\n onChange: \"&\"\n },\n compile: function(element, attrs) {\n if (!attrs.q) {\n return attrs.q = '';\n }\n },\n link: link\n };\n };\n\n DiscoverSearchBarDirective.$inject = [];\n\n angular.module('taigaDiscover').directive('tgDiscoverSearchBar', DiscoverSearchBarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-search-list-header/discover-search-list-header.controller.coffee\n */\n\n(function() {\n var DiscoverSearchListHeaderController;\n\n DiscoverSearchListHeaderController = (function() {\n DiscoverSearchListHeaderController.$inject = [];\n\n function DiscoverSearchListHeaderController() {\n this.like_is_open = this.orderBy.indexOf('-total_fans') === 0;\n this.activity_is_open = this.orderBy.indexOf('-total_activity') === 0;\n }\n\n DiscoverSearchListHeaderController.prototype.openLike = function() {\n this.like_is_open = true;\n this.activity_is_open = false;\n return this.setOrderBy('-total_fans_last_week');\n };\n\n DiscoverSearchListHeaderController.prototype.openActivity = function() {\n this.activity_is_open = true;\n this.like_is_open = false;\n return this.setOrderBy('-total_activity_last_week');\n };\n\n DiscoverSearchListHeaderController.prototype.setOrderBy = function(type) {\n if (type == null) {\n type = '';\n }\n if (!type) {\n this.like_is_open = false;\n this.activity_is_open = false;\n }\n return this.onChange({\n orderBy: type\n });\n };\n\n return DiscoverSearchListHeaderController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverSearchListHeader\", DiscoverSearchListHeaderController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/discover-search-list-header/discover-search-list-header.directive.coffee\n */\n\n(function() {\n var DiscoverSearchListHeaderDirective;\n\n DiscoverSearchListHeaderDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n controller: \"DiscoverSearchListHeader\",\n controllerAs: \"vm\",\n bindToController: true,\n templateUrl: \"discover/components/discover-search-list-header/discover-search-list-header.html\",\n scope: {\n onChange: \"&\",\n orderBy: \"=\"\n },\n link: link\n };\n };\n\n DiscoverSearchListHeaderDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgDiscoverSearchListHeader\", DiscoverSearchListHeaderDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/featured-projects/featured-projects.controller.coffee\n */\n\n(function() {\n var FeaturedProjectsController;\n\n FeaturedProjectsController = (function() {\n FeaturedProjectsController.$inject = [\"tgDiscoverProjectsService\"];\n\n function FeaturedProjectsController(discoverProjectsService) {\n this.discoverProjectsService = discoverProjectsService;\n taiga.defineImmutableProperty(this, \"featured\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.featured;\n };\n })(this));\n this.discoverProjectsService.fetchFeatured();\n }\n\n return FeaturedProjectsController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"FeaturedProjects\", FeaturedProjectsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/featured-projects/featured-projects.directive.coffee\n */\n\n(function() {\n var FeaturedProjectsDirective;\n\n FeaturedProjectsDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n controller: \"FeaturedProjects\",\n controllerAs: \"vm\",\n templateUrl: \"discover/components/featured-projects/featured-projects.html\",\n scope: {},\n link: link\n };\n };\n\n FeaturedProjectsDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgFeaturedProjects\", FeaturedProjectsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/highlighted/highlighted.directive.coffee\n */\n\n(function() {\n var HighlightedDirective;\n\n HighlightedDirective = function() {\n return {\n templateUrl: \"discover/components/highlighted/highlighted.html\",\n scope: {\n loading: \"=\",\n highlighted: \"=\",\n orderBy: \"=\"\n }\n };\n };\n\n HighlightedDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgHighlighted\", HighlightedDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/most-active/most-active.controller.coffee\n */\n\n(function() {\n var MostActiveController;\n\n MostActiveController = (function() {\n MostActiveController.$inject = [\"tgDiscoverProjectsService\"];\n\n function MostActiveController(discoverProjectsService) {\n this.discoverProjectsService = discoverProjectsService;\n taiga.defineImmutableProperty(this, \"highlighted\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.mostActive;\n };\n })(this));\n this.currentOrderBy = 'week';\n this.order_by = this.getOrderBy();\n }\n\n MostActiveController.prototype.fetch = function() {\n this.loading = true;\n this.order_by = this.getOrderBy();\n return this.discoverProjectsService.fetchMostActive({\n order_by: this.order_by\n }).then((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n };\n\n MostActiveController.prototype.orderBy = function(type) {\n this.currentOrderBy = type;\n return this.fetch();\n };\n\n MostActiveController.prototype.getOrderBy = function(type) {\n if (this.currentOrderBy === 'all') {\n return '-total_activity';\n } else {\n return '-total_activity_last_' + this.currentOrderBy;\n }\n };\n\n return MostActiveController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"MostActive\", MostActiveController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/most-active/most-active.directive.coffee\n */\n\n(function() {\n var MostActiveDirective;\n\n MostActiveDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.fetch();\n };\n return {\n controller: \"MostActive\",\n controllerAs: \"vm\",\n templateUrl: \"discover/components/most-active/most-active.html\",\n scope: {},\n link: link\n };\n };\n\n MostActiveDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgMostActive\", MostActiveDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/most-liked/most-liked.controller.coffee\n */\n\n(function() {\n var MostLikedController;\n\n MostLikedController = (function() {\n MostLikedController.$inject = [\"tgDiscoverProjectsService\"];\n\n function MostLikedController(discoverProjectsService) {\n this.discoverProjectsService = discoverProjectsService;\n taiga.defineImmutableProperty(this, \"highlighted\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.mostLiked;\n };\n })(this));\n this.currentOrderBy = 'week';\n this.order_by = this.getOrderBy();\n }\n\n MostLikedController.prototype.fetch = function() {\n this.loading = true;\n this.order_by = this.getOrderBy();\n return this.discoverProjectsService.fetchMostLiked({\n order_by: this.order_by\n }).then((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n };\n\n MostLikedController.prototype.orderBy = function(type) {\n this.currentOrderBy = type;\n return this.fetch();\n };\n\n MostLikedController.prototype.getOrderBy = function() {\n if (this.currentOrderBy === 'all') {\n return '-total_fans';\n } else {\n return '-total_fans_last_' + this.currentOrderBy;\n }\n };\n\n return MostLikedController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"MostLiked\", MostLikedController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/components/most-liked/most-liked.directive.coffee\n */\n\n(function() {\n var MostLikedDirective;\n\n MostLikedDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.fetch();\n };\n return {\n controller: \"MostLiked\",\n controllerAs: \"vm\",\n templateUrl: \"discover/components/most-liked/most-liked.html\",\n scope: {},\n link: link\n };\n };\n\n MostLikedDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgMostLiked\", MostLikedDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/discover-home/discover-home.controller.coffee\n */\n\n(function() {\n var DiscoverHomeController;\n\n DiscoverHomeController = (function() {\n DiscoverHomeController.$inject = ['$tgLocation', '$tgNavUrls', 'tgAppMetaService', '$translate'];\n\n function DiscoverHomeController(location, navUrls, appMetaService, translate) {\n var description, title;\n this.location = location;\n this.navUrls = navUrls;\n this.appMetaService = appMetaService;\n this.translate = translate;\n title = this.translate.instant(\"DISCOVER.PAGE_TITLE\");\n description = this.translate.instant(\"DISCOVER.PAGE_DESCRIPTION\");\n this.appMetaService.setAll(title, description);\n }\n\n DiscoverHomeController.prototype.onSubmit = function(q) {\n var url;\n url = this.navUrls.resolve('discover-search');\n return this.location.search('text', q).path(url);\n };\n\n return DiscoverHomeController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverHome\", DiscoverHomeController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/discover-search/discover-search.controller.coffee\n */\n\n(function() {\n var DiscoverSearchController;\n\n DiscoverSearchController = (function() {\n DiscoverSearchController.$inject = ['$routeParams', 'tgDiscoverProjectsService', '$route', '$tgLocation', '$tgAnalytics', 'tgAppMetaService', '$translate'];\n\n function DiscoverSearchController(routeParams, discoverProjectsService, route, location, analytics, appMetaService, translate) {\n var description, title;\n this.routeParams = routeParams;\n this.discoverProjectsService = discoverProjectsService;\n this.route = route;\n this.location = location;\n this.analytics = analytics;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.page = 1;\n taiga.defineImmutableProperty(this, \"searchResult\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.searchResult;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"nextSearchPage\", (function(_this) {\n return function() {\n return _this.discoverProjectsService.nextSearchPage;\n };\n })(this));\n this.q = this.routeParams.text;\n this.filter = this.routeParams.filter || 'all';\n this.orderBy = this.routeParams['order_by'] || '';\n this.loadingGlobal = false;\n this.loadingList = false;\n this.loadingPagination = false;\n title = this.translate.instant(\"DISCOVER.SEARCH.PAGE_TITLE\");\n description = this.translate.instant(\"DISCOVER.SEARCH.PAGE_DESCRIPTION\");\n this.appMetaService.setAll(title, description);\n this.analytics.trackPage(this.location.url(), \"Discover Search\");\n }\n\n DiscoverSearchController.prototype.fetch = function() {\n this.page = 1;\n this.discoverProjectsService.resetSearchList();\n return this.search();\n };\n\n DiscoverSearchController.prototype.fetchByGlobalSearch = function() {\n if (this.loadingGlobal) {\n return;\n }\n this.loadingGlobal = true;\n return this.fetch().then((function(_this) {\n return function() {\n return _this.loadingGlobal = false;\n };\n })(this));\n };\n\n DiscoverSearchController.prototype.fetchByOrderBy = function() {\n if (this.loadingList) {\n return;\n }\n this.loadingList = true;\n return this.fetch().then((function(_this) {\n return function() {\n return _this.loadingList = false;\n };\n })(this));\n };\n\n DiscoverSearchController.prototype.showMore = function() {\n if (this.loadingPagination) {\n return;\n }\n this.loadingPagination = true;\n this.page++;\n return this.search().then((function(_this) {\n return function() {\n return _this.loadingPagination = false;\n };\n })(this));\n };\n\n DiscoverSearchController.prototype.search = function() {\n var filter, params;\n filter = this.getFilter();\n params = {\n page: this.page,\n q: this.q,\n order_by: this.orderBy\n };\n _.assign(params, filter);\n return this.discoverProjectsService.fetchSearch(params);\n };\n\n DiscoverSearchController.prototype.getFilter = function() {\n if (this.filter === 'people') {\n return {\n is_looking_for_people: true\n };\n } else if (this.filter === 'scrum') {\n return {\n is_backlog_activated: true\n };\n } else if (this.filter === 'kanban') {\n return {\n is_kanban_activated: true\n };\n }\n return {};\n };\n\n DiscoverSearchController.prototype.onChangeFilter = function(filter, q) {\n this.filter = filter;\n this.q = q;\n this.route.updateParams({\n filter: this.filter,\n text: this.q\n });\n this.analytics.trackPage(this.location.url(), \"Discover Search\");\n return this.fetchByGlobalSearch();\n };\n\n DiscoverSearchController.prototype.onChangeOrder = function(orderBy) {\n this.orderBy = orderBy;\n this.route.updateParams({\n order_by: orderBy\n });\n this.analytics.trackPage(this.location.url(), \"Discover Search\");\n return this.fetchByOrderBy();\n };\n\n return DiscoverSearchController;\n\n })();\n\n angular.module(\"taigaDiscover\").controller(\"DiscoverSearch\", DiscoverSearchController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/discover-search/discover-search.directive.coffee\n */\n\n(function() {\n var DiscoverSearchDirective;\n\n DiscoverSearchDirective = function() {\n var link;\n link = function(scope, element, attrs, ctrl) {\n return ctrl.fetch();\n };\n return {\n controller: \"DiscoverSearch\",\n controllerAs: \"vm\",\n link: link\n };\n };\n\n DiscoverSearchDirective.$inject = [];\n\n angular.module(\"taigaDiscover\").directive(\"tgDiscoverSearch\", DiscoverSearchDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: discover/services/discover-projects.service.coffee\n */\n\n(function() {\n var DiscoverProjectsService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n DiscoverProjectsService = (function(superClass) {\n var _discoverParams;\n\n extend(DiscoverProjectsService, superClass);\n\n DiscoverProjectsService.$inject = [\"tgResources\", \"tgProjectsService\"];\n\n _discoverParams = {\n discover_mode: true\n };\n\n function DiscoverProjectsService(rs, projectsService) {\n this.rs = rs;\n this.projectsService = projectsService;\n this._mostLiked = Immutable.List();\n this._mostActive = Immutable.List();\n this._featured = Immutable.List();\n this._searchResult = Immutable.List();\n this._projectsCount = 0;\n this.decorate = this.projectsService._decorate.bind(this.projectsService);\n taiga.defineImmutableProperty(this, \"mostLiked\", (function(_this) {\n return function() {\n return _this._mostLiked;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"mostActive\", (function(_this) {\n return function() {\n return _this._mostActive;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"featured\", (function(_this) {\n return function() {\n return _this._featured;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"searchResult\", (function(_this) {\n return function() {\n return _this._searchResult;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"nextSearchPage\", (function(_this) {\n return function() {\n return _this._nextSearchPage;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"projectsCount\", (function(_this) {\n return function() {\n return _this._projectsCount;\n };\n })(this));\n }\n\n DiscoverProjectsService.prototype.fetchMostLiked = function(params) {\n var _params;\n _params = _.extend({}, _discoverParams, params);\n return this.rs.projects.getProjects(_params, false).then((function(_this) {\n return function(result) {\n var data, projects;\n data = result.data.slice(0, 5);\n projects = Immutable.fromJS(data);\n projects = projects.map(_this.decorate);\n return _this._mostLiked = projects;\n };\n })(this));\n };\n\n DiscoverProjectsService.prototype.fetchMostActive = function(params) {\n var _params;\n _params = _.extend({}, _discoverParams, params);\n return this.rs.projects.getProjects(_params, false).then((function(_this) {\n return function(result) {\n var data, projects;\n data = result.data.slice(0, 5);\n projects = Immutable.fromJS(data);\n projects = projects.map(_this.decorate);\n return _this._mostActive = projects;\n };\n })(this));\n };\n\n DiscoverProjectsService.prototype.fetchFeatured = function() {\n var _params;\n _params = _.extend({}, _discoverParams);\n _params.is_featured = true;\n return this.rs.projects.getProjects(_params, false).then((function(_this) {\n return function(result) {\n var data, projects;\n data = result.data.slice(0, 4);\n projects = Immutable.fromJS(data);\n projects = projects.map(_this.decorate);\n return _this._featured = projects;\n };\n })(this));\n };\n\n DiscoverProjectsService.prototype.resetSearchList = function() {\n return this._searchResult = Immutable.List();\n };\n\n DiscoverProjectsService.prototype.fetchStats = function() {\n return this.rs.stats.discover().then((function(_this) {\n return function(discover) {\n return _this._projectsCount = discover.getIn(['projects', 'total']);\n };\n })(this));\n };\n\n DiscoverProjectsService.prototype.fetchSearch = function(params) {\n var _params;\n _params = _.extend({}, _discoverParams, params);\n return this.rs.projects.getProjects(_params).then((function(_this) {\n return function(result) {\n var projects;\n _this._nextSearchPage = !!result.headers('X-Pagination-Next');\n projects = Immutable.fromJS(result.data);\n projects = projects.map(_this.decorate);\n return _this._searchResult = _this._searchResult.concat(projects);\n };\n })(this));\n };\n\n return DiscoverProjectsService;\n\n })(taiga.Service);\n\n angular.module(\"taigaDiscover\").service(\"tgDiscoverProjectsService\", DiscoverProjectsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/create-epic/create-epic.controller.coffee\n */\n\n(function() {\n var CreateEpicController, getRandomDefaultColor, taiga, trim;\n\n taiga = this.taiga;\n\n trim = taiga.trim;\n\n getRandomDefaultColor = taiga.getRandomDefaultColor;\n\n CreateEpicController = (function() {\n CreateEpicController.$inject = [\"$tgConfirm\", \"tgProjectService\", \"tgEpicsService\", \"$tgAnalytics\"];\n\n function CreateEpicController(confirm, projectService, epicsService, analytics) {\n this.confirm = confirm;\n this.projectService = projectService;\n this.epicsService = epicsService;\n this.analytics = analytics;\n this.project = this.projectService.project.toJS();\n this.newEpic = {\n color: getRandomDefaultColor(),\n status: this.project.default_epic_status,\n tags: []\n };\n this.attachments = Immutable.List();\n this.loading = false;\n }\n\n CreateEpicController.prototype.createEpic = function() {\n if (!this.validateForm()) {\n return;\n }\n this.loading = true;\n return this.epicsService.createEpic(this.newEpic, this.attachments).then((function(_this) {\n return function(response) {\n _this.analytics.trackEvent(\"epic\", \"create\", \"create epic\", 1);\n _this.onCreateEpic();\n return _this.loading = false;\n };\n })(this))[\"catch\"]((function(_this) {\n return function(response) {\n _this.loading = false;\n _this.setFormErrors(response.data);\n if (response.data._error_message) {\n return _this.confirm.notify(\"error\", response.data._error_message);\n }\n };\n })(this));\n };\n\n CreateEpicController.prototype.selectColor = function(color) {\n return this.newEpic.color = color;\n };\n\n CreateEpicController.prototype.addTag = function(name, color) {\n name = trim(name.toLowerCase());\n if (!_.find(this.newEpic.tags, function(it) {\n return it[0] === name;\n })) {\n return this.newEpic.tags.push([name, color]);\n }\n };\n\n CreateEpicController.prototype.deleteTag = function(tag) {\n return _.remove(this.newEpic.tags, function(it) {\n return it[0] === tag[0];\n });\n };\n\n CreateEpicController.prototype.addAttachment = function(attachment) {\n return this.attachments.push(attachment);\n };\n\n return CreateEpicController;\n\n })();\n\n angular.module(\"taigaEpics\").controller(\"CreateEpicCtrl\", CreateEpicController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/create-epic/create-epic.directive.coffee\n */\n\n(function() {\n var CreateEpicDirective;\n\n CreateEpicDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var form;\n form = el.find(\"form\").checksley();\n ctrl.validateForm = (function(_this) {\n return function() {\n return form.validate();\n };\n })(this);\n return ctrl.setFormErrors = (function(_this) {\n return function(errors) {\n return form.setErrors(errors);\n };\n })(this);\n };\n return {\n link: link,\n templateUrl: \"epics/create-epic/create-epic.html\",\n controller: \"CreateEpicCtrl\",\n controllerAs: \"vm\",\n bindToController: {\n onCreateEpic: '&'\n },\n scope: {}\n };\n };\n\n angular.module('taigaEpics').directive(\"tgCreateEpic\", CreateEpicDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epic-row/epic-row.controller.coffee\n */\n\n(function() {\n var EpicRowController;\n\n EpicRowController = (function() {\n EpicRowController.$inject = [\"$tgConfirm\", \"tgProjectService\", \"tgEpicsService\"];\n\n function EpicRowController(confirm, projectService, epicsService) {\n this.confirm = confirm;\n this.projectService = projectService;\n this.epicsService = epicsService;\n this.displayUserStories = false;\n this.displayAssignedTo = false;\n this.displayStatusList = false;\n this.loadingStatus = false;\n this.project = this.projectService.project.toJS();\n this._calculateProgressBar();\n }\n\n EpicRowController.prototype._calculateProgressBar = function() {\n var progress, total;\n if (this.epic.getIn(['status_extra_info', 'is_closed']) === true) {\n return this.percentage = \"100%\";\n } else {\n progress = this.epic.getIn(['user_stories_counts', 'progress']);\n total = this.epic.getIn(['user_stories_counts', 'total']);\n if (total === 0) {\n return this.percentage = \"0%\";\n } else {\n return this.percentage = (progress * 100 / total) + \"%\";\n }\n }\n };\n\n EpicRowController.prototype.canEditEpics = function() {\n return this.projectService.hasPermission(\"modify_epic\");\n };\n\n EpicRowController.prototype.toggleUserStoryList = function() {\n if (!this.displayUserStories) {\n return this.epicsService.listRelatedUserStories(this.epic).then((function(_this) {\n return function(userStories) {\n _this.epicStories = userStories;\n return _this.displayUserStories = true;\n };\n })(this))[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify('error');\n };\n })(this));\n } else {\n return this.displayUserStories = false;\n }\n };\n\n EpicRowController.prototype.updateStatus = function(statusId) {\n this.displayStatusList = false;\n this.loadingStatus = true;\n return this.epicsService.updateEpicStatus(this.epic, statusId)[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify('error');\n };\n })(this))[\"finally\"]((function(_this) {\n return function() {\n return _this.loadingStatus = false;\n };\n })(this));\n };\n\n EpicRowController.prototype.updateAssignedTo = function(member) {\n this.assignLoader = true;\n return this.epicsService.updateEpicAssignedTo(this.epic, (member != null ? member.id : void 0) || null)[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify('error');\n };\n })(this)).then((function(_this) {\n return function() {\n return _this.assignLoader = false;\n };\n })(this));\n };\n\n return EpicRowController;\n\n })();\n\n angular.module(\"taigaEpics\").controller(\"EpicRowCtrl\", EpicRowController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epic-row/epic-row.directive.coffee\n */\n\n(function() {\n var EpicRowDirective;\n\n EpicRowDirective = function() {\n return {\n templateUrl: \"epics/dashboard/epic-row/epic-row.html\",\n controller: \"EpicRowCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n epic: '=',\n column: '='\n }\n };\n };\n\n angular.module('taigaEpics').directive(\"tgEpicRow\", EpicRowDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epics-dashboard.controller.coffee\n */\n\n(function() {\n var EpicsDashboardController, taiga;\n\n taiga = this.taiga;\n\n EpicsDashboardController = (function() {\n EpicsDashboardController.$inject = [\"$routeParams\", \"tgErrorHandlingService\", \"tgLightboxFactory\", \"lightboxService\", \"$tgConfirm\", \"tgProjectService\", \"tgEpicsService\", \"tgAppMetaService\", \"$translate\"];\n\n function EpicsDashboardController(params, errorHandlingService, lightboxFactory, lightboxService, confirm, projectService, epicsService, appMetaService, translate) {\n this.params = params;\n this.errorHandlingService = errorHandlingService;\n this.lightboxFactory = lightboxFactory;\n this.lightboxService = lightboxService;\n this.confirm = confirm;\n this.projectService = projectService;\n this.epicsService = epicsService;\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.sectionName = \"EPICS.SECTION_NAME\";\n taiga.defineImmutableProperty(this, 'project', (function(_this) {\n return function() {\n return _this.projectService.project;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'epics', (function(_this) {\n return function() {\n return _this.epicsService.epics;\n };\n })(this));\n this.appMetaService.setfn(this._setMeta.bind(this));\n }\n\n EpicsDashboardController.prototype._setMeta = function() {\n var ctx;\n if (!this.project) {\n return null;\n }\n ctx = {\n projectName: this.project.get(\"name\"),\n projectDescription: this.project.get(\"description\")\n };\n return {\n title: this.translate.instant(\"EPICS.PAGE_TITLE\", ctx),\n description: this.translate.instant(\"EPICS.PAGE_DESCRIPTION\", ctx)\n };\n };\n\n EpicsDashboardController.prototype.loadInitialData = function() {\n this.epicsService.clear();\n return this.projectService.setProjectBySlug(this.params.pslug).then((function(_this) {\n return function() {\n if (!_this.projectService.isEpicsDashboardEnabled()) {\n return _this.errorHandlingService.notFound();\n }\n if (!_this.projectService.hasPermission(\"view_epics\")) {\n return _this.errorHandlingService.permissionDenied();\n }\n return _this.epicsService.fetchEpics();\n };\n })(this));\n };\n\n EpicsDashboardController.prototype.canCreateEpics = function() {\n return this.projectService.hasPermission(\"add_epic\");\n };\n\n EpicsDashboardController.prototype.onCreateEpic = function() {\n var onCreateEpic;\n onCreateEpic = (function(_this) {\n return function() {\n _this.lightboxService.closeAll();\n _this.confirm.notify(\"success\");\n };\n })(this);\n return this.lightboxFactory.create('tg-create-epic', {\n \"class\": \"lightbox lightbox-create-epic open\",\n \"on-create-epic\": \"onCreateEpic()\"\n }, {\n \"onCreateEpic\": onCreateEpic.bind(this)\n });\n };\n\n return EpicsDashboardController;\n\n })();\n\n angular.module(\"taigaEpics\").controller(\"EpicsDashboardCtrl\", EpicsDashboardController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epics-sortable/epics-sortable.directive.coffee\n */\n\n(function() {\n var EpicsSortableDirective;\n\n EpicsSortableDirective = function($parse, projectService) {\n var link;\n link = function(scope, el, attrs) {\n var callback, drake, scroll;\n if (!projectService.hasPermission(\"modify_epic\")) {\n return;\n }\n callback = $parse(attrs.tgEpicsSortable);\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).is('div.epics-table-body-row');\n }\n });\n drake.on('dragend', function(item) {\n var epic, itemEl, newIndex;\n itemEl = $(item);\n epic = itemEl.scope().epic;\n newIndex = itemEl.index();\n return scope.$apply(function() {\n return callback(scope, {\n epic: epic,\n newIndex: newIndex\n });\n });\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n EpicsSortableDirective.$inject = [\"$parse\", \"tgProjectService\"];\n\n angular.module(\"taigaComponents\").directive(\"tgEpicsSortable\", EpicsSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epics-table/epics-table.controller.coffee\n */\n\n(function() {\n var EpicsTableController, generateHash, taiga;\n\n taiga = this.taiga;\n\n generateHash = this.taiga.generateHash;\n\n EpicsTableController = (function() {\n EpicsTableController.$inject = [\"$tgConfirm\", \"tgEpicsService\", \"$timeout\", \"$tgStorage\", \"tgProjectService\"];\n\n function EpicsTableController(confirm, epicsService, timeout, storage, projectService) {\n this.confirm = confirm;\n this.epicsService = epicsService;\n this.timeout = timeout;\n this.storage = storage;\n this.projectService = projectService;\n this.hash = generateHash([this.projectService.project.get('id'), 'epics']);\n this.displayOptions = false;\n this.displayVotes = true;\n this.column = this.storage.get(this.hash, {\n votes: true,\n name: true,\n project: true,\n sprint: true,\n assigned: true,\n status: true,\n progress: true\n });\n taiga.defineImmutableProperty(this, 'epics', (function(_this) {\n return function() {\n return _this.epicsService.epics;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'disabledEpicsPagination', (function(_this) {\n return function() {\n return _this.epicsService._disablePagination;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'loadingEpics', (function(_this) {\n return function() {\n return _this.epicsService._loadingEpics;\n };\n })(this));\n }\n\n EpicsTableController.prototype.toggleEpicTableOptions = function() {\n return this.displayOptions = !this.displayOptions;\n };\n\n EpicsTableController.prototype.reorderEpic = function(epic, newIndex) {\n if (epic.get('epics_order') === newIndex) {\n return null;\n }\n return this.epicsService.reorderEpic(epic, newIndex).then(null, (function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n };\n\n EpicsTableController.prototype.nextPage = function() {\n return this.epicsService.nextPage();\n };\n\n EpicsTableController.prototype.hoverEpicTableOption = function() {\n if (this.timer) {\n return this.timeout.cancel(this.timer);\n }\n };\n\n EpicsTableController.prototype.hideEpicTableOption = function() {\n return this.timer = this.timeout(((function(_this) {\n return function() {\n return _this.displayOptions = false;\n };\n })(this)), 400);\n };\n\n EpicsTableController.prototype.updateViewOptions = function() {\n return this.storage.set(this.hash, this.column);\n };\n\n return EpicsTableController;\n\n })();\n\n angular.module(\"taigaEpics\").controller(\"EpicsTableCtrl\", EpicsTableController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/epics-table/epics-table.directive.coffee\n */\n\n(function() {\n var EpicsTableDirective;\n\n EpicsTableDirective = function() {\n return {\n templateUrl: \"epics/dashboard/epics-table/epics-table.html\",\n controller: \"EpicsTableCtrl\",\n controllerAs: \"vm\",\n scope: {}\n };\n };\n\n angular.module('taigaEpics').directive(\"tgEpicsTable\", EpicsTableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/story-row/story-row.controller.coffee\n */\n\n(function() {\n var StoryRowController, module;\n\n module = angular.module(\"taigaEpics\");\n\n StoryRowController = (function() {\n StoryRowController.$inject = [];\n\n function StoryRowController() {\n this._calculateProgressBar();\n }\n\n StoryRowController.prototype._calculateProgressBar = function() {\n var totalTasks, totalTasksCompleted;\n if (this.story.get('is_closed') === true) {\n return this.percentage = \"100%\";\n } else {\n totalTasks = this.story.get('tasks').size;\n totalTasksCompleted = this.story.get('tasks').filter(function(it) {\n return it.get(\"is_closed\");\n }).size;\n if (totalTasks === 0) {\n return this.percentage = \"0%\";\n } else {\n return this.percentage = (totalTasksCompleted * 100 / totalTasks) + \"%\";\n }\n }\n };\n\n return StoryRowController;\n\n })();\n\n module.controller(\"StoryRowCtrl\", StoryRowController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/dashboard/story-row/story-row.directive.coffee\n */\n\n(function() {\n var StoryRowDirective, module;\n\n module = angular.module('taigaEpics');\n\n StoryRowDirective = function() {\n return {\n templateUrl: \"epics/dashboard/story-row/story-row.html\",\n controller: \"StoryRowCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n story: '=',\n column: '='\n }\n };\n };\n\n module.directive(\"tgStoryRow\", StoryRowDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/epics.service.coffee\n */\n\n(function() {\n var EpicsService, taiga;\n\n taiga = this.taiga;\n\n EpicsService = (function() {\n EpicsService.$inject = ['tgProjectService', 'tgAttachmentsService', 'tgResources', 'tgXhrErrorService'];\n\n function EpicsService(projectService, attachmentsService, resources, xhrError) {\n this.projectService = projectService;\n this.attachmentsService = attachmentsService;\n this.resources = resources;\n this.xhrError = xhrError;\n this.clear();\n taiga.defineImmutableProperty(this, 'epics', (function(_this) {\n return function() {\n return _this._epics;\n };\n })(this));\n }\n\n EpicsService.prototype.clear = function() {\n this._loadingEpics = false;\n this._disablePagination = false;\n this._page = 1;\n return this._epics = Immutable.List();\n };\n\n EpicsService.prototype.fetchEpics = function(reset) {\n if (reset == null) {\n reset = false;\n }\n this._loadingEpics = true;\n this._disablePagination = true;\n return this.resources.epics.list(this.projectService.project.get('id'), this._page).then((function(_this) {\n return function(result) {\n if (reset) {\n _this.clear();\n _this._epics = result.list;\n } else {\n _this._epics = _this._epics.concat(result.list);\n }\n _this._loadingEpics = false;\n return _this._disablePagination = !result.headers('x-pagination-next');\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n return _this.xhrError.response(xhr);\n };\n })(this));\n };\n\n EpicsService.prototype.nextPage = function() {\n this._page++;\n return this.fetchEpics();\n };\n\n EpicsService.prototype.listRelatedUserStories = function(epic) {\n return this.resources.userstories.listInEpic(epic.get('id'));\n };\n\n EpicsService.prototype.createEpic = function(epicData, attachments, projectId) {\n if (projectId) {\n epicData.project = projectId;\n } else {\n epicData.project = this.projectService.project.get('id');\n }\n return this.resources.epics.post(epicData).then((function(_this) {\n return function(epic) {\n var promises;\n if (!attachments) {\n return epic;\n } else {\n promises = _.map(attachments.toJS(), function(attachment) {\n return _this.attachmentsService.upload(attachment.file, epic.get('id'), epic.get('project'), 'epic');\n });\n return Promise.all(promises).then(_this.fetchEpics.bind(_this, true));\n }\n };\n })(this));\n };\n\n EpicsService.prototype.reorderEpic = function(epic, newIndex) {\n var afterDestination, beforeDestination, data, newOrder, orderList, previous, previousWithTheSameOrder, setOrders, withoutMoved;\n orderList = {};\n this._epics.forEach(function(it) {\n return orderList[it.get('id')] = it.get('epics_order');\n });\n withoutMoved = this.epics.filter((function(_this) {\n return function(it) {\n return it.get('id') !== epic.get('id');\n };\n })(this));\n beforeDestination = withoutMoved.slice(0, newIndex);\n afterDestination = withoutMoved.slice(newIndex);\n previous = beforeDestination.last();\n newOrder = !previous ? 0 : previous.get('epics_order') + 1;\n orderList[epic.get('id')] = newOrder;\n previousWithTheSameOrder = beforeDestination.filter((function(_this) {\n return function(it) {\n return it.get('epics_order') === previous.get('epics_order');\n };\n })(this));\n setOrders = _.fromPairs(previousWithTheSameOrder.map((function(_this) {\n return function(it) {\n return [it.get('id'), it.get('epics_order')];\n };\n })(this)).toJS());\n afterDestination.forEach(function(it) {\n return orderList[it.get('id')] = it.get('epics_order') + 1;\n });\n this._epics = this._epics.map(function(it) {\n return it.set('epics_order', orderList[it.get('id')]);\n });\n this._epics = this._epics.sortBy(function(it) {\n return it.get('epics_order');\n });\n data = {\n epics_order: newOrder,\n version: epic.get('version')\n };\n return this.resources.epics.reorder(epic.get('id'), data, setOrders).then((function(_this) {\n return function(newEpic) {\n return _this._epics = _this._epics.map(function(it) {\n if (it.get('id') === newEpic.get('id')) {\n return newEpic;\n }\n return it;\n });\n };\n })(this));\n };\n\n EpicsService.prototype.reorderRelatedUserstory = function(epic, epicUserstories, userstory, newIndex) {\n var beforeDestination, data, epicId, newOrder, previous, previousWithTheSameOrder, setOrders, userstoryId, withoutMoved;\n withoutMoved = epicUserstories.filter((function(_this) {\n return function(it) {\n return it.get('id') !== userstory.get('id');\n };\n })(this));\n beforeDestination = withoutMoved.slice(0, newIndex);\n previous = beforeDestination.last();\n newOrder = !previous ? 0 : previous.get('epic_order') + 1;\n previousWithTheSameOrder = beforeDestination.filter((function(_this) {\n return function(it) {\n return it.get('epic_order') === previous.get('epic_order');\n };\n })(this));\n setOrders = _.fromPairs(previousWithTheSameOrder.map((function(_this) {\n return function(it) {\n return [it.get('id'), it.get('epic_order')];\n };\n })(this)).toJS());\n data = {\n order: newOrder\n };\n epicId = epic.get('id');\n userstoryId = userstory.get('id');\n return this.resources.epics.reorderRelatedUserstory(epicId, userstoryId, data, setOrders).then((function(_this) {\n return function() {\n return _this.listRelatedUserStories(epic);\n };\n })(this));\n };\n\n EpicsService.prototype.replaceEpic = function(epic) {\n return this._epics = this._epics.map(function(it) {\n if (it.get('id') === epic.get('id')) {\n return epic;\n }\n return it;\n });\n };\n\n EpicsService.prototype.updateEpicStatus = function(epic, statusId) {\n var data;\n data = {\n status: statusId,\n version: epic.get('version')\n };\n return this.resources.epics.patch(epic.get('id'), data).then(this.replaceEpic.bind(this));\n };\n\n EpicsService.prototype.updateEpicAssignedTo = function(epic, userId) {\n var data;\n data = {\n assigned_to: userId,\n version: epic.get('version')\n };\n return this.resources.epics.patch(epic.get('id'), data).then(this.replaceEpic.bind(this));\n };\n\n return EpicsService;\n\n })();\n\n angular.module('taigaEpics').service('tgEpicsService', EpicsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories-controller.coffee\n */\n\n(function() {\n var RelatedUserStoriesController, module;\n\n module = angular.module(\"taigaEpics\");\n\n RelatedUserStoriesController = (function() {\n RelatedUserStoriesController.$inject = [\"tgProjectService\", \"tgEpicsService\"];\n\n function RelatedUserStoriesController(projectService, epicsService) {\n this.projectService = projectService;\n this.epicsService = epicsService;\n this.sectionName = \"Epics\";\n this.showCreateRelatedUserstoriesLightbox = false;\n }\n\n RelatedUserStoriesController.prototype.showRelatedUserStoriesSection = function() {\n var ref;\n return this.projectService.hasPermission(\"view_epics\") || ((ref = this.userstories) != null ? ref.length : void 0) > 0;\n };\n\n RelatedUserStoriesController.prototype.userCanSort = function() {\n return this.projectService.hasPermission(\"modify_epic\");\n };\n\n RelatedUserStoriesController.prototype.loadRelatedUserstories = function() {\n return this.epicsService.listRelatedUserStories(this.epic).then((function(_this) {\n return function(userstories) {\n return _this.userstories = userstories;\n };\n })(this));\n };\n\n RelatedUserStoriesController.prototype.reorderRelatedUserstory = function(us, newIndex) {\n return this.epicsService.reorderRelatedUserstory(this.epic, this.userstories, us, newIndex).then((function(_this) {\n return function(userstories) {\n return _this.userstories = userstories;\n };\n })(this));\n };\n\n return RelatedUserStoriesController;\n\n })();\n\n module.controller(\"RelatedUserStoriesCtrl\", RelatedUserStoriesController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories-create/related-userstories-create.controller.coffee\n */\n\n(function() {\n var RelatedUserstoriesCreateController, module;\n\n module = angular.module(\"taigaEpics\");\n\n RelatedUserstoriesCreateController = (function() {\n RelatedUserstoriesCreateController.$inject = [\"tgCurrentUserService\", \"tgResources\", \"$tgConfirm\", \"$tgAnalytics\"];\n\n function RelatedUserstoriesCreateController(currentUserService, rs, confirm, analytics) {\n this.currentUserService = currentUserService;\n this.rs = rs;\n this.confirm = confirm;\n this.analytics = analytics;\n this.projects = null;\n this.projectUserstories = Immutable.List();\n this.loading = false;\n }\n\n RelatedUserstoriesCreateController.prototype.loadProjects = function() {\n if (this.projects === null) {\n return this.projects = this.currentUserService.projects.get(\"unblocked\");\n }\n };\n\n RelatedUserstoriesCreateController.prototype.filterUss = function(selectedProjectId, filterText) {\n var promise;\n promise = this.rs.userstories.listInAllProjects({\n project: selectedProjectId,\n q: filterText\n }, true).then((function(_this) {\n return function(data) {\n var excludeIds, filteredData;\n excludeIds = _this.epicUserstories.map(function(us) {\n return us.get('id');\n });\n filteredData = data.filter(function(us) {\n return excludeIds.indexOf(us.get('id')) === -1;\n });\n return _this.projectUserstories = filteredData;\n };\n })(this));\n return promise;\n };\n\n RelatedUserstoriesCreateController.prototype.saveRelatedUserStory = function(selectedUserstoryId, onSavedRelatedUserstory) {\n var epicId, onError, onSuccess;\n if (!this.validateExistingUserstoryForm()) {\n return;\n }\n this.loading = true;\n onError = (function(_this) {\n return function(data) {\n _this.loading = false;\n _this.confirm.notify(\"error\");\n return _this.setExistingUserstoryFormErrors(data);\n };\n })(this);\n onSuccess = (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"epic related user story\", \"create\", \"create related user story on epic\", 1);\n _this.loading = false;\n if (onSavedRelatedUserstory) {\n onSavedRelatedUserstory();\n }\n return _this.loadRelatedUserstories();\n };\n })(this);\n epicId = this.epic.get('id');\n return this.rs.epics.addRelatedUserstory(epicId, selectedUserstoryId).then(onSuccess, onError);\n };\n\n RelatedUserstoriesCreateController.prototype.bulkCreateRelatedUserStories = function(selectedProjectId, userstoriesText, onCreatedRelatedUserstory) {\n var epicId, onError, onSuccess;\n if (!this.validateNewUserstoryForm()) {\n return;\n }\n this.loading = true;\n onError = (function(_this) {\n return function(data) {\n _this.loading = false;\n _this.confirm.notify(\"error\");\n return _this.setNewUserstoryFormErrors(data);\n };\n })(this);\n onSuccess = (function(_this) {\n return function() {\n _this.analytics.trackEvent(\"epic related user story\", \"create\", \"create related user story on epic\", 1);\n _this.loading = false;\n if (onCreatedRelatedUserstory) {\n onCreatedRelatedUserstory();\n }\n return _this.loadRelatedUserstories();\n };\n })(this);\n epicId = this.epic.get('id');\n return this.rs.epics.bulkCreateRelatedUserStories(epicId, selectedProjectId, userstoriesText).then(onSuccess, onError);\n };\n\n return RelatedUserstoriesCreateController;\n\n })();\n\n module.controller(\"RelatedUserstoriesCreateCtrl\", RelatedUserstoriesCreateController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories-create/related-userstories-create.directive.coffee\n */\n\n(function() {\n var RelatedUserstoriesCreateDirective, debounceLeading, module;\n\n module = angular.module('taigaEpics');\n\n debounceLeading = this.taiga.debounceLeading;\n\n RelatedUserstoriesCreateDirective = function(lightboxService1) {\n var link;\n this.lightboxService = lightboxService1;\n link = function(scope, el, attrs, ctrl) {\n var existingUserstoryForm, newUserstoryForm;\n newUserstoryForm = el.find(\".new-user-story-form\").checksley();\n existingUserstoryForm = el.find(\".existing-user-story-form\").checksley();\n ctrl.validateNewUserstoryForm = (function(_this) {\n return function() {\n return newUserstoryForm.validate();\n };\n })(this);\n ctrl.setNewUserstoryFormErrors = (function(_this) {\n return function(errors) {\n return newUserstoryForm.setErrors(errors);\n };\n })(this);\n ctrl.validateExistingUserstoryForm = (function(_this) {\n return function() {\n return existingUserstoryForm.validate();\n };\n })(this);\n ctrl.setExistingUserstoryFormErrors = (function(_this) {\n return function(errors) {\n return existingUserstoryForm.setErrors(errors);\n };\n })(this);\n scope.showLightbox = function(selectedProjectId) {\n ctrl.loadProjects();\n return scope.selectProject(selectedProjectId).then((function(_this) {\n return function() {\n return lightboxService.open(el.find(\".lightbox-create-related-user-stories\"));\n };\n })(this));\n };\n scope.closeLightbox = function() {\n scope.selectedUserstory = null;\n scope.searchUserstory = \"\";\n scope.relatedUserstoriesText = \"\";\n return lightboxService.close(el.find(\".lightbox-create-related-user-stories\"));\n };\n scope.$watch('vm.project', function(project) {\n if (project != null) {\n return scope.selectedProject = project.get('id');\n }\n });\n scope.selectProject = function(selectedProjectId) {\n scope.selectedUserstory = null;\n scope.searchUserstory = \"\";\n return ctrl.filterUss(selectedProjectId, scope.searchUserstory);\n };\n return scope.onUpdateSearchUserstory = debounceLeading(300, function() {\n scope.selectedUserstory = null;\n return ctrl.filterUss(scope.selectedProject, scope.searchUserstory);\n });\n };\n return {\n link: link,\n templateUrl: \"epics/related-userstories/related-userstories-create/related-userstories-create.html\",\n controller: \"RelatedUserstoriesCreateCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n showCreateRelatedUserstoriesLightbox: \"=\",\n project: \"=\",\n epic: \"=\",\n epicUserstories: \"=\",\n loadRelatedUserstories: \"&\"\n }\n };\n };\n\n RelatedUserstoriesCreateDirective.$inject = [\"lightboxService\"];\n\n module.directive(\"tgRelatedUserstoriesCreate\", RelatedUserstoriesCreateDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories-sortable/related-userstories-sortable.directive.coffee\n */\n\n(function() {\n var RelatedUserstoriesSortableDirective, module;\n\n module = angular.module('taigaEpics');\n\n RelatedUserstoriesSortableDirective = function($parse, projectService) {\n var link;\n link = function(scope, el, attrs) {\n var callback, drake, scroll;\n if (!projectService.hasPermission(\"modify_epic\")) {\n return;\n }\n callback = $parse(attrs.tgRelatedUserstoriesSortable);\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).is('tg-related-userstory-row');\n }\n });\n drake.on('dragend', function(item) {\n var itemEl, newIndex, us;\n itemEl = $(item);\n us = itemEl.scope().us;\n newIndex = itemEl.index();\n return scope.$apply(function() {\n return callback(scope, {\n us: us,\n newIndex: newIndex\n });\n });\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n return {\n link: link\n };\n };\n\n RelatedUserstoriesSortableDirective.$inject = [\"$parse\", \"tgProjectService\"];\n\n module.directive(\"tgRelatedUserstoriesSortable\", RelatedUserstoriesSortableDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstories.directive.coffee\n */\n\n(function() {\n var RelatedUserStoriesDirective, module;\n\n module = angular.module('taigaEpics');\n\n RelatedUserStoriesDirective = function() {\n return {\n templateUrl: \"epics/related-userstories/related-userstories.html\",\n controller: \"RelatedUserStoriesCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n userstories: '=',\n project: '=',\n epic: '='\n }\n };\n };\n\n RelatedUserStoriesDirective.$inject = [];\n\n module.directive(\"tgRelatedUserstories\", RelatedUserStoriesDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstory-row/related-userstory-row.controller.coffee\n */\n\n(function() {\n var RelatedUserstoryRowController, module;\n\n module = angular.module(\"taigaEpics\");\n\n RelatedUserstoryRowController = (function() {\n RelatedUserstoryRowController.$inject = [\"tgAvatarService\", \"$translate\", \"$tgConfirm\", \"tgResources\"];\n\n function RelatedUserstoryRowController(avatarService, translate, confirm, rs) {\n this.avatarService = avatarService;\n this.translate = translate;\n this.confirm = confirm;\n this.rs = rs;\n }\n\n RelatedUserstoryRowController.prototype.setAvatarData = function() {\n var member;\n member = this.userstory.get('assigned_to_extra_info');\n return this.avatar = this.avatarService.getAvatar(member);\n };\n\n RelatedUserstoryRowController.prototype.getAssignedToFullNameDisplay = function() {\n if (this.userstory.get('assigned_to')) {\n return this.userstory.getIn(['assigned_to_extra_info', 'full_name_display']);\n }\n return this.translate.instant(\"COMMON.ASSIGNED_TO.NOT_ASSIGNED\");\n };\n\n RelatedUserstoryRowController.prototype.onDeleteRelatedUserstory = function() {\n var message, title;\n title = this.translate.instant(\"LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.TITLE\");\n message = this.translate.instant(\"LIGHTBOX.REMOVE_RELATIONSHIP_WITH_EPIC.MESSAGE\", {\n epicSubject: this.epic.get('subject')\n });\n return this.confirm.ask(title, null, message).then((function(_this) {\n return function(askResponse) {\n var epicId, onError, onSuccess, userstoryId;\n onError = function() {\n message = _this.translate.instant('EPIC.ERROR_UNLINK_RELATED_USERSTORY', {\n errorMessage: message\n });\n _this.confirm.notify(\"error\", null, message);\n return askResponse.finish(false);\n };\n onSuccess = function() {\n _this.loadRelatedUserstories();\n return askResponse.finish();\n };\n epicId = _this.epic.get('id');\n userstoryId = _this.userstory.get('id');\n return _this.rs.epics.deleteRelatedUserstory(epicId, userstoryId).then(onSuccess, onError);\n };\n })(this));\n };\n\n return RelatedUserstoryRowController;\n\n })();\n\n module.controller(\"RelatedUserstoryRowCtrl\", RelatedUserstoryRowController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: epics/related-userstories/related-userstory-row/related-userstory-row.directive.coffee\n */\n\n(function() {\n var RelatedUserstoryRowDirective, module;\n\n module = angular.module('taigaEpics');\n\n RelatedUserstoryRowDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.setAvatarData();\n };\n return {\n link: link,\n templateUrl: \"epics/related-userstories/related-userstory-row/related-userstory-row.html\",\n controller: \"RelatedUserstoryRowCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n userstory: '=',\n epic: '=',\n project: '=',\n loadRelatedUserstories: \"&\"\n }\n };\n };\n\n RelatedUserstoryRowDirective.$inject = [];\n\n module.directive(\"tgRelatedUserstoryRow\", RelatedUserstoryRowDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: external-apps/external-app.controller.coffee\n */\n\n(function() {\n var ExternalAppController, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n ExternalAppController = (function(superClass) {\n extend(ExternalAppController, superClass);\n\n ExternalAppController.$inject = [\"$routeParams\", \"tgExternalAppsService\", \"$window\", \"tgCurrentUserService\", \"$location\", \"$tgNavUrls\", \"tgXhrErrorService\", \"tgLoader\"];\n\n function ExternalAppController(routeParams, externalAppsService, window, currentUserService, location, navUrls, xhrError, loader) {\n var loginUrl, nextUrl;\n this.routeParams = routeParams;\n this.externalAppsService = externalAppsService;\n this.window = window;\n this.currentUserService = currentUserService;\n this.location = location;\n this.navUrls = navUrls;\n this.xhrError = xhrError;\n this.loader = loader;\n this.createApplicationToken = bind(this.createApplicationToken, this);\n this._getApplicationToken = bind(this._getApplicationToken, this);\n this._redirect = bind(this._redirect, this);\n this.loader.start(false);\n this._applicationId = this.routeParams.application;\n this._state = this.routeParams.state;\n this._getApplicationToken();\n this._user = this.currentUserService.getUser();\n this._application = null;\n nextUrl = encodeURIComponent(this.location.url());\n loginUrl = this.navUrls.resolve(\"login\");\n this.loginWithAnotherUserUrl = loginUrl + \"?next=\" + nextUrl;\n taiga.defineImmutableProperty(this, \"user\", (function(_this) {\n return function() {\n return _this._user;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"application\", (function(_this) {\n return function() {\n return _this._application;\n };\n })(this));\n }\n\n ExternalAppController.prototype._redirect = function(applicationToken) {\n var nextUrl;\n nextUrl = applicationToken.get(\"next_url\");\n return this.window.open(nextUrl, \"_self\");\n };\n\n ExternalAppController.prototype._getApplicationToken = function() {\n return this.externalAppsService.getApplicationToken(this._applicationId, this._state).then((function(_this) {\n return function(data) {\n _this._application = data.get(\"application\");\n if (data.get(\"auth_code\")) {\n return _this._redirect(data);\n } else {\n return _this.loader.pageLoaded();\n }\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n _this.loader.pageLoaded();\n return _this.xhrError.response(xhr);\n };\n })(this));\n };\n\n ExternalAppController.prototype.cancel = function() {\n return this.window.history.back();\n };\n\n ExternalAppController.prototype.createApplicationToken = function() {\n return this.externalAppsService.authorizeApplicationToken(this._applicationId, this._state).then((function(_this) {\n return function(data) {\n return _this._redirect(data);\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n return _this.xhrError.response(xhr);\n };\n })(this));\n };\n\n return ExternalAppController;\n\n })(taiga.Controller);\n\n angular.module(\"taigaExternalApps\").controller(\"ExternalApp\", ExternalAppController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: external-apps/external-app.service.coffee\n */\n\n(function() {\n var ExternalAppsService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n ExternalAppsService = (function(superClass) {\n extend(ExternalAppsService, superClass);\n\n ExternalAppsService.$inject = [\"tgResources\"];\n\n function ExternalAppsService(rs) {\n this.rs = rs;\n }\n\n ExternalAppsService.prototype.getApplicationToken = function(applicationId, state) {\n return this.rs.externalapps.getApplicationToken(applicationId, state);\n };\n\n ExternalAppsService.prototype.authorizeApplicationToken = function(applicationId, state) {\n return this.rs.externalapps.authorizeApplicationToken(applicationId, state);\n };\n\n return ExternalAppsService;\n\n })(taiga.Service);\n\n angular.module(\"taigaExternalApps\").service(\"tgExternalAppsService\", ExternalAppsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: feedback/feedback.service.coffee\n */\n\n(function() {\n var FeedbackService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n FeedbackService = (function(superClass) {\n extend(FeedbackService, superClass);\n\n FeedbackService.$inject = [\"tgLightboxFactory\"];\n\n function FeedbackService(lightboxFactory) {\n this.lightboxFactory = lightboxFactory;\n }\n\n FeedbackService.prototype.sendFeedback = function() {\n return this.lightboxFactory.create(\"tg-lb-feedback\", {\n \"class\": \"lightbox lightbox-feedback lightbox-generic-form\"\n });\n };\n\n return FeedbackService;\n\n })(taiga.Service);\n\n angular.module(\"taigaFeedback\").service(\"tgFeedbackService\", FeedbackService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/activity/activity.service.coffee\n */\n\n(function() {\n var ActivityService, taiga;\n\n taiga = this.taiga;\n\n ActivityService = (function() {\n ActivityService.$inject = ['tgResources', 'tgXhrErrorService'];\n\n function ActivityService(rs, xhrError) {\n this.rs = rs;\n this.xhrError = xhrError;\n this._contentType = null;\n this._objectId = null;\n this.clear();\n }\n\n ActivityService.prototype.clear = function() {\n this.page = 1;\n this.loadingEntries = false;\n this.disablePagination = false;\n this.entries = Immutable.List();\n return this.count = null;\n };\n\n ActivityService.prototype.fetchEntries = function(reset) {\n if (reset == null) {\n reset = false;\n }\n if (reset) {\n this.page = 1;\n }\n this.loadingEntries = true;\n this.disablePagination = true;\n return this.rs.history.getHistory('activity', this._contentType, this._objectId, this.page).then((function(_this) {\n return function(result) {\n if (reset) {\n _this.clear();\n _this.entries = result.list;\n } else {\n _this.entries = _this.entries.concat(result.list);\n }\n _this.loadingEntries = false;\n _this.disablePagination = !result.headers('x-pagination-next');\n _this.count = result.headers('x-pagination-count');\n return _this.entries;\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n return _this.xhrError.response(_this.entries);\n };\n })(this));\n };\n\n ActivityService.prototype.nextPage = function(historyType) {\n if (historyType == null) {\n historyType = 'comment';\n }\n this.page++;\n return this.fetchEntries();\n };\n\n ActivityService.prototype.init = function(contentType, objectId) {\n this._contentType = contentType;\n this._objectId = objectId;\n return this.clear();\n };\n\n return ActivityService;\n\n })();\n\n angular.module('taigaHistory').service('tgActivityService', ActivityService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/comments/comment.controller.coffee\n */\n\n(function() {\n var CommentController, module;\n\n module = angular.module(\"taigaHistory\");\n\n CommentController = (function() {\n CommentController.$inject = [\"tgCurrentUserService\", \"tgCheckPermissionsService\", \"tgLightboxFactory\"];\n\n function CommentController(currentUserService, permissionService, lightboxFactory) {\n this.currentUserService = currentUserService;\n this.permissionService = permissionService;\n this.lightboxFactory = lightboxFactory;\n this.hiddenDeletedComment = true;\n }\n\n CommentController.prototype.showDeletedComment = function() {\n return this.hiddenDeletedComment = false;\n };\n\n CommentController.prototype.hideDeletedComment = function() {\n return this.hiddenDeletedComment = true;\n };\n\n CommentController.prototype.checkCancelComment = function(event) {\n if (event.keyCode === 27) {\n return this.onEditMode({\n commentId: this.comment.id\n });\n }\n };\n\n CommentController.prototype.canEditDeleteComment = function() {\n if (this.currentUserService.getUser()) {\n this.user = this.currentUserService.getUser();\n return this.user.get('id') === this.comment.user.pk || this.permissionService.check('modify_project');\n }\n };\n\n CommentController.prototype.saveComment = function(text, cb) {\n return this.onEditComment({\n commentId: this.comment.id,\n commentData: text,\n callback: cb\n });\n };\n\n CommentController.prototype.displayCommentHistory = function() {\n return this.lightboxFactory.create('tg-lb-display-historic', {\n \"class\": \"lightbox lightbox-display-historic\",\n \"comment\": \"comment\",\n \"name\": \"name\",\n \"object\": \"object\"\n }, {\n \"comment\": this.comment,\n \"name\": this.name,\n \"object\": this.object\n });\n };\n\n return CommentController;\n\n })();\n\n module.controller(\"CommentCtrl\", CommentController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/comments/comment.directive.coffee\n */\n\n(function() {\n var CommentDirective, module;\n\n module = angular.module('taigaHistory');\n\n CommentDirective = function() {\n return {\n scope: {\n name: \"@\",\n object: \"@\",\n comment: \"<\",\n type: \"<\",\n loading: \"<\",\n editing: \"<\",\n deleting: \"<\",\n objectId: \"<\",\n editMode: \"<\",\n onEditMode: \"&\",\n onDeleteComment: \"&\",\n onRestoreDeletedComment: \"&\",\n onEditComment: \"&\"\n },\n templateUrl: \"history/comments/comment.html\",\n bindToController: true,\n controller: 'CommentCtrl',\n controllerAs: \"vm\"\n };\n };\n\n module.directive(\"tgComment\", CommentDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/comments/comments.controller.coffee\n */\n\n(function() {\n var CommentsController, module;\n\n module = angular.module(\"taigaHistory\");\n\n CommentsController = (function() {\n CommentsController.$inject = [];\n\n function CommentsController() {}\n\n CommentsController.prototype.initializePermissions = function() {\n return this.canAddCommentPermission = 'comment_' + this.name;\n };\n\n return CommentsController;\n\n })();\n\n module.controller(\"CommentsCtrl\", CommentsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/comments/comments.directive.coffee\n */\n\n(function() {\n var CommentsDirective, module;\n\n module = angular.module('taigaHistory');\n\n CommentsDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.initializePermissions();\n };\n return {\n scope: {\n type: \"<\",\n name: \"@\",\n object: \"@\",\n comments: \"<\",\n onEditMode: \"&\",\n onDeleteComment: \"&\",\n onRestoreDeletedComment: \"&\",\n onAddComment: \"&\",\n onEditComment: \"&\",\n editMode: \"<\",\n loading: \"<\",\n deleting: \"<\",\n editing: \"<\",\n projectId: \"=\"\n },\n templateUrl: \"history/comments/comments.html\",\n bindToController: true,\n controller: 'CommentsCtrl',\n controllerAs: \"vm\",\n link: link\n };\n };\n\n module.directive(\"tgComments\", CommentsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history-lightbox/comment-history-lightbox.controller.coffee\n */\n\n(function() {\n var LightboxDisplayHistoricController, module;\n\n module = angular.module(\"taigaHistory\");\n\n LightboxDisplayHistoricController = (function() {\n LightboxDisplayHistoricController.$inject = [\"$tgResources\"];\n\n function LightboxDisplayHistoricController(rs) {\n this.rs = rs;\n }\n\n LightboxDisplayHistoricController.prototype._loadHistoric = function() {\n var activityId, objectId, type;\n type = this.name;\n objectId = this.object;\n activityId = this.comment.id;\n return this.rs.history.getCommentHistory(type, objectId, activityId).then((function(_this) {\n return function(data) {\n return _this.commentHistoryEntries = data;\n };\n })(this));\n };\n\n return LightboxDisplayHistoricController;\n\n })();\n\n module.controller(\"LightboxDisplayHistoricCtrl\", LightboxDisplayHistoricController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history-lightbox/comment-history-lightbox.directive.coffee\n */\n\n(function() {\n var LightboxDisplayHistoricDirective;\n\n LightboxDisplayHistoricDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n ctrl._loadHistoric();\n return lightboxService.open(el);\n };\n return {\n scope: {},\n bindToController: {\n name: '=',\n object: '=',\n comment: '='\n },\n templateUrl: \"history/history-lightbox/comment-history-lightbox.html\",\n controller: \"LightboxDisplayHistoricCtrl\",\n controllerAs: \"vm\",\n link: link\n };\n };\n\n LightboxDisplayHistoricDirective.$inject = [\"lightboxService\"];\n\n angular.module('taigaHistory').directive(\"tgLbDisplayHistoric\", LightboxDisplayHistoricDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history-lightbox/history-entry.directive.coffee\n */\n\n(function() {\n var HistoryEntryDirective;\n\n HistoryEntryDirective = function() {\n return {\n scope: {\n entry: \"<\"\n },\n templateUrl: \"history/history-lightbox/history-entry.html\"\n };\n };\n\n angular.module('taigaHistory').directive(\"tgHistoryEntry\", HistoryEntryDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history-tabs/history-tabs.directive.coffee\n */\n\n(function() {\n var HistoryTabsDirective, module;\n\n module = angular.module('taigaHistory');\n\n HistoryTabsDirective = function() {\n return {\n templateUrl: \"history/history-tabs/history-tabs.html\",\n scope: {\n showCommentTab: \"&\",\n showActivityTab: \"&\",\n onActiveComments: \"&\",\n onActiveActivities: \"&\",\n onOrderComments: \"&\",\n activeTab: \"<\",\n commentsNum: \"<\",\n activitiesNum: \"<\",\n onReverse: \"<\"\n }\n };\n };\n\n module.directive(\"tgHistoryTabs\", HistoryTabsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history.controller.coffee\n */\n\n(function() {\n var HistorySectionController, module;\n\n module = angular.module(\"taigaHistory\");\n\n HistorySectionController = (function() {\n HistorySectionController.$inject = [\"$tgResources\", \"$tgRepo\", \"$tgStorage\", \"tgProjectService\", \"tgActivityService\"];\n\n function HistorySectionController(rs, repo, storage, projectService, activityService) {\n this.rs = rs;\n this.repo = repo;\n this.storage = storage;\n this.projectService = projectService;\n this.activityService = activityService;\n this.editing = null;\n this.deleting = null;\n this.editMode = {};\n this.viewComments = true;\n this.reverse = this.storage.get(\"orderComments\");\n taiga.defineImmutableProperty(this, 'disabledActivityPagination', (function(_this) {\n return function() {\n return _this.activityService.disablePagination;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'loadingActivity', (function(_this) {\n return function() {\n return _this.activityService.loading;\n };\n })(this));\n }\n\n HistorySectionController.prototype._loadHistory = function() {\n this._loadComments();\n return this._loadActivity();\n };\n\n HistorySectionController.prototype._loadActivity = function() {\n this.activityService.init(this.name, this.id);\n return this.activityService.fetchEntries().then((function(_this) {\n return function(response) {\n _this.activitiesNum = _this.activityService.count;\n return _this.activities = response.toJS();\n };\n })(this));\n };\n\n HistorySectionController.prototype._loadComments = function() {\n return this.rs.history.get(this.name, this.id).then((function(_this) {\n return function(comments) {\n _this.comments = _.filter(comments, function(item) {\n return item.comment !== \"\";\n });\n if (_this.reverse) {\n _this.comments - _.reverse(_this.comments);\n }\n return _this.commentsNum = _this.comments.length;\n };\n })(this));\n };\n\n HistorySectionController.prototype.nextActivityPage = function() {\n return this.activityService.nextPage().then((function(_this) {\n return function(response) {\n return _this.activities = response.toJS();\n };\n })(this));\n };\n\n HistorySectionController.prototype.showHistorySection = function() {\n return this.showCommentTab() || this.showActivityTab();\n };\n\n HistorySectionController.prototype.showCommentTab = function() {\n return this.commentsNum > 0 || this.projectService.hasPermission(\"comment_\" + this.name);\n };\n\n HistorySectionController.prototype.showActivityTab = function() {\n return this.activitiesNum > 0;\n };\n\n HistorySectionController.prototype.toggleEditMode = function(commentId) {\n return this.editMode[commentId] = !this.editMode[commentId];\n };\n\n HistorySectionController.prototype.onActiveHistoryTab = function(active) {\n return this.viewComments = active;\n };\n\n HistorySectionController.prototype.deleteComment = function(commentId) {\n var activityId, objectId, type;\n type = this.name;\n objectId = this.id;\n activityId = commentId;\n this.deleting = commentId;\n return this.rs.history.deleteComment(type, objectId, activityId).then((function(_this) {\n return function() {\n _this._loadComments();\n return _this.deleting = null;\n };\n })(this));\n };\n\n HistorySectionController.prototype.editComment = function(commentId, comment) {\n var activityId, objectId, type;\n type = this.name;\n objectId = this.id;\n activityId = commentId;\n this.editing = commentId;\n return this.rs.history.editComment(type, objectId, activityId, comment).then((function(_this) {\n return function() {\n _this._loadComments();\n _this.toggleEditMode(commentId);\n return _this.editing = null;\n };\n })(this));\n };\n\n HistorySectionController.prototype.restoreDeletedComment = function(commentId) {\n var activityId, objectId, type;\n type = this.name;\n objectId = this.id;\n activityId = commentId;\n this.editing = commentId;\n return this.rs.history.undeleteComment(type, objectId, activityId).then((function(_this) {\n return function() {\n _this._loadComments();\n return _this.editing = null;\n };\n })(this));\n };\n\n HistorySectionController.prototype.addComment = function() {\n this.editMode = {};\n this.editing = null;\n return this._loadComments();\n };\n\n HistorySectionController.prototype.onOrderComments = function() {\n this.reverse = !this.reverse;\n this.storage.set(\"orderComments\", this.reverse);\n return this._loadComments();\n };\n\n return HistorySectionController;\n\n })();\n\n module.controller(\"HistorySection\", HistorySectionController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history.directive.coffee\n */\n\n(function() {\n var HistorySectionDirective, bindOnce, module;\n\n module = angular.module('taigaHistory');\n\n bindOnce = this.taiga.bindOnce;\n\n HistorySectionDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {\n scope.$on(\"object:updated\", function() {\n return ctrl._loadActivity();\n });\n return scope.$watch('vm.id', function(value) {\n return ctrl._loadHistory();\n });\n };\n return {\n link: link,\n templateUrl: \"history/history.html\",\n controller: \"HistorySection\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n type: \"=\",\n name: \"@\",\n id: \"=\",\n projectId: \"=\"\n }\n };\n };\n\n HistorySectionDirective.$inject = [];\n\n module.directive(\"tgHistorySection\", HistorySectionDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history/history-diff.controller.coffee\n */\n\n(function() {\n var ActivitiesDiffController, module;\n\n module = angular.module(\"taigaHistory\");\n\n ActivitiesDiffController = (function() {\n ActivitiesDiffController.$inject = [];\n\n function ActivitiesDiffController() {}\n\n ActivitiesDiffController.prototype.diffTags = function() {\n if (this.type === 'tags') {\n this.diffRemoveTags = _.difference(this.diff[0], this.diff[1]).toString();\n return this.diffAddTags = _.difference(this.diff[1], this.diff[0]).toString();\n }\n };\n\n return ActivitiesDiffController;\n\n })();\n\n module.controller(\"ActivitiesDiffCtrl\", ActivitiesDiffController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history/history-diff.directive.coffee\n */\n\n(function() {\n var HistoryDiffDirective, module;\n\n module = angular.module('taigaHistory');\n\n HistoryDiffDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.diffTags();\n };\n return {\n scope: {\n type: \"<\",\n diff: \"<\"\n },\n templateUrl: \"history/history/history-diff.html\",\n controller: \"ActivitiesDiffCtrl\",\n controllerAs: 'vm',\n bindToController: true,\n link: link\n };\n };\n\n module.directive(\"tgHistoryDiff\", HistoryDiffDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: history/history/history.directive.coffee\n */\n\n(function() {\n var HistoryDirective, module;\n\n module = angular.module('taigaHistory');\n\n HistoryDirective = function() {\n var link;\n link = function(scope, el, attrs) {};\n return {\n scope: {\n activities: \"<\"\n },\n templateUrl: \"history/history/history.html\",\n link: link\n };\n };\n\n module.directive(\"tgHistory\", HistoryDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/duties/duty.directive.coffee\n */\n\n(function() {\n var DutyDirective;\n\n DutyDirective = function(navurls, $translate) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n scope.vm = {};\n scope.vm.duty = scope.duty;\n scope.vm.type = scope.type;\n return scope.vm.getDutyType = function() {\n if (scope.vm.duty) {\n if (scope.vm.duty.get('_name') === \"epics\") {\n return $translate.instant(\"COMMON.EPIC\");\n }\n if (scope.vm.duty.get('_name') === \"userstories\") {\n return $translate.instant(\"COMMON.USER_STORY\");\n }\n if (scope.vm.duty.get('_name') === \"tasks\") {\n return $translate.instant(\"COMMON.TASK\");\n }\n if (scope.vm.duty.get('_name') === \"issues\") {\n return $translate.instant(\"COMMON.ISSUE\");\n }\n }\n };\n };\n return {\n templateUrl: \"home/duties/duty.html\",\n scope: {\n \"duty\": \"=tgDuty\",\n \"type\": \"@\"\n },\n link: link\n };\n };\n\n DutyDirective.$inject = [\"$tgNavUrls\", \"$translate\"];\n\n angular.module(\"taigaHome\").directive(\"tgDuty\", DutyDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/home.controller.coffee\n */\n\n(function() {\n var HomeController;\n\n HomeController = (function() {\n HomeController.$inject = [\"tgCurrentUserService\", \"$location\", \"$tgNavUrls\"];\n\n function HomeController(currentUserService, location, navUrls) {\n this.currentUserService = currentUserService;\n this.location = location;\n this.navUrls = navUrls;\n if (!this.currentUserService.getUser()) {\n this.location.path(this.navUrls.resolve(\"discover\"));\n }\n }\n\n return HomeController;\n\n })();\n\n angular.module(\"taigaHome\").controller(\"Home\", HomeController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/home.service.coffee\n */\n\n(function() {\n var HomeService, groupBy,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n groupBy = this.taiga.groupBy;\n\n HomeService = (function(superClass) {\n extend(HomeService, superClass);\n\n HomeService.$inject = [\"$tgNavUrls\", \"tgResources\", \"tgProjectsService\"];\n\n function HomeService(navurls, rs, projectsService) {\n this.navurls = navurls;\n this.rs = rs;\n this.projectsService = projectsService;\n }\n\n HomeService.prototype._attachProjectInfoToWorkInProgress = function(workInProgress, projectsById) {\n var _attachProjectInfoToDuty, _duties, _getValidDutiesAndAttachProjectInfo, assignedTo, watching;\n _attachProjectInfoToDuty = (function(_this) {\n return function(duty, objType) {\n var ctx, project, url;\n project = projectsById.get(String(duty.get('project')));\n ctx = {\n project: project.get('slug'),\n ref: duty.get('ref')\n };\n url = _this.navurls.resolve(\"project-\" + objType + \"-detail\", ctx);\n duty = duty.set('url', url);\n duty = duty.set('project', project);\n duty = duty.set(\"_name\", objType);\n return duty;\n };\n })(this);\n _getValidDutiesAndAttachProjectInfo = function(duties, dutyType) {\n duties = duties.filter(function(duty) {\n return projectsById.get(String(duty.get('project')));\n });\n duties = duties.map(function(duty) {\n return _attachProjectInfoToDuty(duty, dutyType);\n });\n return duties;\n };\n assignedTo = workInProgress.get(\"assignedTo\");\n if (assignedTo.get(\"epics\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(assignedTo.get(\"epics\"), \"epics\");\n assignedTo = assignedTo.set(\"epics\", _duties);\n }\n if (assignedTo.get(\"userStories\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(assignedTo.get(\"userStories\"), \"userstories\");\n assignedTo = assignedTo.set(\"userStories\", _duties);\n }\n if (assignedTo.get(\"tasks\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(assignedTo.get(\"tasks\"), \"tasks\");\n assignedTo = assignedTo.set(\"tasks\", _duties);\n }\n if (assignedTo.get(\"issues\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(assignedTo.get(\"issues\"), \"issues\");\n assignedTo = assignedTo.set(\"issues\", _duties);\n }\n watching = workInProgress.get(\"watching\");\n if (watching.get(\"epics\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(watching.get(\"epics\"), \"epics\");\n watching = watching.set(\"epics\", _duties);\n }\n if (watching.get(\"userStories\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(watching.get(\"userStories\"), \"userstories\");\n watching = watching.set(\"userStories\", _duties);\n }\n if (watching.get(\"tasks\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(watching.get(\"tasks\"), \"tasks\");\n watching = watching.set(\"tasks\", _duties);\n }\n if (watching.get(\"issues\")) {\n _duties = _getValidDutiesAndAttachProjectInfo(watching.get(\"issues\"), \"issues\");\n watching = watching.set(\"issues\", _duties);\n }\n workInProgress = workInProgress.set(\"assignedTo\", assignedTo);\n return workInProgress = workInProgress.set(\"watching\", watching);\n };\n\n HomeService.prototype.getWorkInProgress = function(userId) {\n var assignedEpicsPromise, assignedIssuesPromise, assignedTasksPromise, assignedTo, assignedUserStoriesPromise, params_epics, params_issues, params_tasks, params_uss, projectsById, projectsPromise, watching, watchingEpicsPromise, watchingIssuesPromise, watchingTasksPromise, watchingUserStoriesPromise, workInProgress;\n projectsById = Immutable.Map();\n projectsPromise = this.projectsService.getProjectsByUserId(userId).then(function(projects) {\n return projectsById = Immutable.fromJS(groupBy(projects.toJS(), function(p) {\n return p.id;\n }));\n });\n assignedTo = Immutable.Map();\n params_epics = {\n status__is_closed: false,\n assigned_to: userId\n };\n params_uss = {\n is_closed: false,\n assigned_users: userId\n };\n params_tasks = {\n status__is_closed: false,\n assigned_to: userId\n };\n params_issues = {\n status__is_closed: false,\n assigned_to: userId\n };\n assignedEpicsPromise = this.rs.epics.listInAllProjects(params_epics).then(function(epics) {\n return assignedTo = assignedTo.set(\"epics\", epics);\n });\n assignedUserStoriesPromise = this.rs.userstories.listInAllProjects(params_uss).then(function(userstories) {\n return assignedTo = assignedTo.set(\"userStories\", userstories);\n });\n assignedTasksPromise = this.rs.tasks.listInAllProjects(params_tasks).then(function(tasks) {\n return assignedTo = assignedTo.set(\"tasks\", tasks);\n });\n assignedIssuesPromise = this.rs.issues.listInAllProjects(params_issues).then(function(issues) {\n return assignedTo = assignedTo.set(\"issues\", issues);\n });\n params_epics = {\n status__is_closed: false,\n watchers: userId\n };\n params_uss = {\n is_closed: false,\n watchers: userId\n };\n params_tasks = {\n status__is_closed: false,\n watchers: userId\n };\n params_issues = {\n status__is_closed: false,\n watchers: userId\n };\n watching = Immutable.Map();\n watchingEpicsPromise = this.rs.epics.listInAllProjects(params_epics).then(function(epics) {\n return watching = watching.set(\"epics\", epics);\n });\n watchingUserStoriesPromise = this.rs.userstories.listInAllProjects(params_uss).then(function(userstories) {\n return watching = watching.set(\"userStories\", userstories);\n });\n watchingTasksPromise = this.rs.tasks.listInAllProjects(params_tasks).then(function(tasks) {\n return watching = watching.set(\"tasks\", tasks);\n });\n watchingIssuesPromise = this.rs.issues.listInAllProjects(params_issues).then(function(issues) {\n return watching = watching.set(\"issues\", issues);\n });\n workInProgress = Immutable.Map();\n return Promise.all([projectsPromise, assignedEpicsPromise, watchingEpicsPromise, assignedUserStoriesPromise, watchingUserStoriesPromise, assignedTasksPromise, watchingTasksPromise, assignedIssuesPromise, watchingIssuesPromise]).then((function(_this) {\n return function() {\n workInProgress = workInProgress.set(\"assignedTo\", assignedTo);\n workInProgress = workInProgress.set(\"watching\", watching);\n workInProgress = _this._attachProjectInfoToWorkInProgress(workInProgress, projectsById);\n return workInProgress;\n };\n })(this));\n };\n\n return HomeService;\n\n })(taiga.Service);\n\n angular.module(\"taigaHome\").service(\"tgHomeService\", HomeService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/projects/home-project-list.directive.coffee\n */\n\n(function() {\n var HomeProjectListDirective;\n\n HomeProjectListDirective = function(currentUserService) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n scope.vm = {};\n return taiga.defineImmutableProperty(scope.vm, \"projects\", function() {\n return currentUserService.projects.get(\"recents\");\n });\n };\n directive = {\n templateUrl: \"home/projects/home-project-list.html\",\n scope: {},\n link: link\n };\n return directive;\n };\n\n HomeProjectListDirective.$inject = [\"tgCurrentUserService\"];\n\n angular.module(\"taigaHome\").directive(\"tgHomeProjectList\", HomeProjectListDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/working-on/working-on.controller.coffee\n */\n\n(function() {\n var WorkingOnController;\n\n WorkingOnController = (function() {\n WorkingOnController.$inject = [\"tgHomeService\"];\n\n function WorkingOnController(homeService) {\n this.homeService = homeService;\n this.assignedTo = Immutable.Map();\n this.watching = Immutable.Map();\n }\n\n WorkingOnController.prototype._setAssignedTo = function(workInProgress) {\n var epics, issues, tasks, userStories;\n epics = workInProgress.get(\"assignedTo\").get(\"epics\");\n userStories = workInProgress.get(\"assignedTo\").get(\"userStories\");\n tasks = workInProgress.get(\"assignedTo\").get(\"tasks\");\n issues = workInProgress.get(\"assignedTo\").get(\"issues\");\n this.assignedTo = userStories.concat(tasks).concat(issues).concat(epics);\n if (this.assignedTo.size > 0) {\n return this.assignedTo = this.assignedTo.sortBy(function(elem) {\n return elem.get(\"modified_date\");\n }).reverse();\n }\n };\n\n WorkingOnController.prototype._setWatching = function(workInProgress) {\n var epics, issues, tasks, userStories;\n epics = workInProgress.get(\"watching\").get(\"epics\");\n userStories = workInProgress.get(\"watching\").get(\"userStories\");\n tasks = workInProgress.get(\"watching\").get(\"tasks\");\n issues = workInProgress.get(\"watching\").get(\"issues\");\n this.watching = userStories.concat(tasks).concat(issues).concat(epics);\n if (this.watching.size > 0) {\n return this.watching = this.watching.sortBy(function(elem) {\n return elem.get(\"modified_date\");\n }).reverse();\n }\n };\n\n WorkingOnController.prototype.getWorkInProgress = function(userId) {\n return this.homeService.getWorkInProgress(userId).then((function(_this) {\n return function(workInProgress) {\n _this._setAssignedTo(workInProgress);\n return _this._setWatching(workInProgress);\n };\n })(this));\n };\n\n return WorkingOnController;\n\n })();\n\n angular.module(\"taigaHome\").controller(\"WorkingOn\", WorkingOnController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: home/working-on/working-on.directive.coffee\n */\n\n(function() {\n var WorkingOnDirective;\n\n WorkingOnDirective = function(homeService, currentUserService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n var user, userId;\n user = currentUserService.getUser();\n if (user) {\n userId = user.get(\"id\");\n return ctrl.getWorkInProgress(userId);\n }\n };\n return {\n controller: \"WorkingOn\",\n controllerAs: \"vm\",\n templateUrl: \"home/working-on/working-on.html\",\n scope: {},\n link: link\n };\n };\n\n WorkingOnDirective.$inject = [\"tgHomeService\", \"tgCurrentUserService\"];\n\n angular.module(\"taigaHome\").directive(\"tgWorkingOn\", WorkingOnDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/invite-members-form/invite-members-form.controller.coffee\n */\n\n(function() {\n var InviteMembersFormController, taiga;\n\n taiga = this.taiga;\n\n InviteMembersFormController = (function() {\n InviteMembersFormController.$inject = [\"tgProjectService\", \"$tgResources\", \"lightboxService\", \"$tgConfirm\", \"$rootScope\"];\n\n function InviteMembersFormController(projectService, rs, lightboxService, confirm, rootScope) {\n this.projectService = projectService;\n this.rs = rs;\n this.lightboxService = lightboxService;\n this.confirm = confirm;\n this.rootScope = rootScope;\n this.project = this.projectService.project;\n this.roles = this.projectService.project.get('roles');\n this.rolesValues = {};\n this.loading = false;\n this.defaultMaxInvites = 4;\n }\n\n InviteMembersFormController.prototype._areRolesValidated = function() {\n return Object.defineProperty(this, 'areRolesValidated', {\n get: (function(_this) {\n return function() {\n var roleIds;\n roleIds = _.filter(Object.values(_this.rolesValues), function(it) {\n return it;\n });\n return roleIds.length === _this.contactsToInvite.size + _this.emailsToInvite.size;\n };\n })(this)\n });\n };\n\n InviteMembersFormController.prototype._checkLimitMemberships = function() {\n var pendingMembersCount;\n if (this.project.get('max_memberships') === null) {\n this.membersLimit = this.defaultMaxInvites;\n } else {\n pendingMembersCount = Math.max(this.project.get('max_memberships') - this.project.get('total_memberships'), 0);\n this.membersLimit = Math.min(pendingMembersCount, this.defaultMaxInvites);\n }\n return this.showWarningMessage = this.membersLimit < this.defaultMaxInvites;\n };\n\n InviteMembersFormController.prototype.sendInvites = function() {\n this.setInvitedContacts = [];\n _.forEach(this.rolesValues, (function(_this) {\n return function(key, value) {\n return _this.setInvitedContacts.push({\n 'role_id': key,\n 'username': value\n });\n };\n })(this));\n this.loading = true;\n return this.rs.memberships.bulkCreateMemberships(this.project.get('id'), this.setInvitedContacts, this.inviteContactsMessage).then((function(_this) {\n return function(response) {\n return _this.projectService.fetchProject().then(function() {\n _this.loading = false;\n _this.lightboxService.closeAll();\n _this.rootScope.$broadcast(\"membersform:new:success\");\n return _this.confirm.notify('success');\n });\n };\n })(this))[\"catch\"]((function(_this) {\n return function(response) {\n _this.loading = false;\n if (response.data._error_message) {\n return _this.confirm.notify(\"error\", response.data._error_message);\n }\n };\n })(this));\n };\n\n return InviteMembersFormController;\n\n })();\n\n angular.module(\"taigaAdmin\").controller(\"InviteMembersFormCtrl\", InviteMembersFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/invite-members-form/invite-members-form.directive.coffee\n */\n\n(function() {\n var InviteMembersFormDirective;\n\n InviteMembersFormDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n ctrl._areRolesValidated();\n return ctrl._checkLimitMemberships();\n };\n return {\n scope: {},\n templateUrl: \"invite-members/invite-members-form/invite-members-form.html\",\n controller: \"InviteMembersFormCtrl\",\n controllerAs: \"vm\",\n bindToController: {\n contactsToInvite: '<',\n emailsToInvite: '=',\n onDisplayContactList: '&',\n onRemoveInvitedContact: '&',\n onRemoveInvitedEmail: '&',\n onSendInvites: '&'\n },\n link: link\n };\n };\n\n angular.module(\"taigaAdmin\").directive(\"tgInviteMembersForm\", InviteMembersFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/lightbox-add-members.controller.coffee\n */\n\n(function() {\n var AddMembersController, taiga;\n\n taiga = this.taiga;\n\n AddMembersController = (function() {\n AddMembersController.$inject = [\"tgUserService\", \"tgCurrentUserService\", \"tgProjectService\"];\n\n function AddMembersController(userService, currentUserService, projectService) {\n this.userService = userService;\n this.currentUserService = currentUserService;\n this.projectService = projectService;\n this.contactsToInvite = Immutable.List();\n this.emailsToInvite = Immutable.List();\n this.displayContactList = false;\n }\n\n AddMembersController.prototype._getContacts = function() {\n var excludeProjectId, userId;\n userId = this.currentUserService.getUser().get(\"id\");\n excludeProjectId = this.projectService.project.get(\"id\");\n return this.userService.getContacts(userId, excludeProjectId).then((function(_this) {\n return function(contacts) {\n return _this.contacts = contacts;\n };\n })(this));\n };\n\n AddMembersController.prototype._filterContacts = function(invited) {\n return this.contacts = this.contacts.filter((function(_this) {\n return function(contact) {\n return contact.get('id') !== invited.get('id');\n };\n })(this));\n };\n\n AddMembersController.prototype.inviteSuggested = function(contact) {\n this.contactsToInvite = this.contactsToInvite.push(contact);\n this._filterContacts(contact);\n return this.displayContactList = true;\n };\n\n AddMembersController.prototype.removeContact = function(invited) {\n this.contactsToInvite = this.contactsToInvite.filter((function(_this) {\n return function(contact) {\n return contact.get('id') !== invited.id;\n };\n })(this));\n invited = Immutable.fromJS(invited);\n this.contacts = this.contacts.push(invited);\n return this.testEmptyContacts();\n };\n\n AddMembersController.prototype.inviteEmail = function(email) {\n var emailData;\n emailData = Immutable.Map({\n 'email': email\n });\n this.emailsToInvite = this.emailsToInvite.push(emailData);\n return this.displayContactList = true;\n };\n\n AddMembersController.prototype.removeEmail = function(invited) {\n this.emailsToInvite = this.emailsToInvite.filter((function(_this) {\n return function(email) {\n return email.get('email') !== invited.email;\n };\n })(this));\n return this.testEmptyContacts();\n };\n\n AddMembersController.prototype.testEmptyContacts = function() {\n if (this.emailsToInvite.size + this.contactsToInvite.size === 0) {\n return this.displayContactList = false;\n }\n };\n\n return AddMembersController;\n\n })();\n\n angular.module(\"taigaAdmin\").controller(\"AddMembersCtrl\", AddMembersController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/lightbox-add-members.directive.coffee\n */\n\n(function() {\n var LightboxAddMembersDirective;\n\n LightboxAddMembersDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n lightboxService.open(el);\n return ctrl._getContacts();\n };\n return {\n scope: {},\n templateUrl: \"invite-members/lightbox-add-members.html\",\n controller: \"AddMembersCtrl\",\n controllerAs: \"vm\",\n link: link\n };\n };\n\n angular.module(\"taigaAdmin\").directive(\"tgLbAddMembers\", [\"lightboxService\", LightboxAddMembersDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/suggest-add-members/suggest-add-members.controller.coffee\n */\n\n(function() {\n var SuggestAddMembersController, taiga;\n\n taiga = this.taiga;\n\n SuggestAddMembersController = (function() {\n SuggestAddMembersController.$inject = [];\n\n function SuggestAddMembersController() {\n this.contactQuery = \"\";\n }\n\n SuggestAddMembersController.prototype.isEmail = function() {\n return taiga.isEmail(this.contactQuery);\n };\n\n SuggestAddMembersController.prototype.filterContacts = function() {\n return this.filteredContacts = this.contacts.filter((function(_this) {\n return function(contact) {\n return contact.get('full_name_display').toLowerCase().includes(_this.contactQuery.toLowerCase()) || contact.get('username').toLowerCase().includes(_this.contactQuery.toLowerCase());\n };\n })(this)).slice(0, 12);\n };\n\n SuggestAddMembersController.prototype.setInvited = function(contact) {\n return this.onInviteSuggested({\n 'contact': contact\n });\n };\n\n return SuggestAddMembersController;\n\n })();\n\n angular.module(\"taigaAdmin\").controller(\"SuggestAddMembersCtrl\", SuggestAddMembersController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: invite-members/suggest-add-members/suggest-add-members.directive.coffee\n */\n\n(function() {\n var SuggestAddMembersDirective;\n\n SuggestAddMembersDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return scope.$watch(\"vm.contacts\", (function(_this) {\n return function(contacts) {\n if (contacts) {\n return ctrl.filterContacts();\n }\n };\n })(this));\n };\n return {\n scope: {},\n templateUrl: \"invite-members/suggest-add-members/suggest-add-members.html\",\n controller: \"SuggestAddMembersCtrl\",\n controllerAs: \"vm\",\n bindToController: {\n contacts: '=',\n onInviteSuggested: '&',\n onInviteEmail: '&'\n },\n link: link\n };\n };\n\n angular.module(\"taigaAdmin\").directive(\"tgSuggestAddMembers\", [\"lightboxService\", SuggestAddMembersDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/dropdown-notifications/dropdown-notifications.directive.coffee\n */\n\n(function() {\n var DropdownNotificationsDirective, timeout;\n\n timeout = this.taiga.timeout;\n\n DropdownNotificationsDirective = function($rootScope, notificationsService, currentUserService) {\n var directive, link;\n link = function($scope, $el, $attrs, $ctrl) {\n $scope.notificationsList = [];\n $scope.loading = false;\n $scope.$on(\"notifications:loaded\", function(event, total) {\n $scope.loading = false;\n if ($scope.total !== void 0 && total > $scope.total) {\n $scope.newEvent = true;\n timeout(100, function() {\n $scope.total = total;\n return $scope.$apply();\n });\n return timeout(2000, function() {\n return $scope.newEvent = false;\n });\n } else {\n return $scope.total = total;\n }\n });\n $scope.$on(\"notifications:loading\", function() {\n return $scope.loading = true;\n });\n return $scope.setAllAsRead = function() {\n return notificationsService.setNotificationsAsRead().then(function() {\n return $rootScope.$emit(\"notifications:dismiss-all\");\n });\n };\n };\n directive = {\n templateUrl: \"navigation-bar/dropdown-notifications/dropdown-notifications.html\",\n scope: {\n active: \"=\"\n },\n link: link\n };\n return directive;\n };\n\n angular.module(\"taigaNavigationBar\").directive(\"tgDropdownNotifications\", [\"$rootScope\", \"tgNotificationsService\", \"tgCurrentUserService\", DropdownNotificationsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/dropdown-project-list/dropdown-project-list.directive.coffee\n */\n\n(function() {\n var DropdownProjectListDirective;\n\n DropdownProjectListDirective = function(rootScope, currentUserService, projectsService) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n var updateLinks;\n scope.vm = {};\n taiga.defineImmutableProperty(scope.vm, \"projects\", function() {\n return currentUserService.projects.get(\"recents\");\n });\n scope.vm.newProject = function() {\n return projectsService.newProject();\n };\n updateLinks = function() {\n return el.find(\".dropdown-project-list ul li a\").data(\"fullUrl\", \"\");\n };\n return rootScope.$on(\"dropdown-project-list:updated\", updateLinks);\n };\n directive = {\n templateUrl: \"navigation-bar/dropdown-project-list/dropdown-project-list.html\",\n scope: {\n active: \"=\"\n },\n link: link\n };\n return directive;\n };\n\n DropdownProjectListDirective.$inject = [\"$rootScope\", \"tgCurrentUserService\", \"tgProjectsService\"];\n\n angular.module(\"taigaNavigationBar\").directive(\"tgDropdownProjectList\", DropdownProjectListDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/dropdown-user/dropdown-user.directive.coffee\n */\n\n(function() {\n var DropdownUserDirective;\n\n DropdownUserDirective = function(authService, configService, locationService, navUrlsService, feedbackService, $rootScope) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n scope.vm = {};\n scope.vm.isFeedbackEnabled = configService.get(\"feedbackEnabled\");\n scope.vm.customSupportUrl = configService.get(\"supportUrl\");\n taiga.defineImmutableProperty(scope.vm, \"user\", function() {\n return authService.userData;\n });\n scope.vm.logout = function() {\n authService.logout();\n locationService.url(navUrlsService.resolve(\"discover\"));\n return locationService.search({});\n };\n scope.vm.sendFeedback = function() {\n return feedbackService.sendFeedback();\n };\n return scope.vm.userSettingsPlugins = _.filter($rootScope.userSettingsPlugins, {\n userMenu: true\n });\n };\n directive = {\n templateUrl: \"navigation-bar/dropdown-user/dropdown-user.html\",\n scope: {},\n link: link\n };\n return directive;\n };\n\n DropdownUserDirective.$inject = [\"$tgAuth\", \"$tgConfig\", \"$tgLocation\", \"$tgNavUrls\", \"tgFeedbackService\", \"$rootScope\"];\n\n angular.module(\"taigaNavigationBar\").directive(\"tgDropdownUser\", DropdownUserDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/navigation-bar.directive.coffee\n */\n\n(function() {\n var NavigationBarDirective;\n\n NavigationBarDirective = function(currentUserService, navigationBarService, locationService, navUrlsService, config) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n scope.vm = {};\n taiga.defineImmutableProperty(scope.vm, \"projects\", function() {\n return currentUserService.projects.get(\"recents\");\n });\n taiga.defineImmutableProperty(scope.vm, \"isAuthenticated\", function() {\n return currentUserService.isAuthenticated();\n });\n taiga.defineImmutableProperty(scope.vm, \"isEnabledHeader\", function() {\n return navigationBarService.isEnabledHeader();\n });\n scope.vm.publicRegisterEnabled = config.get(\"publicRegisterEnabled\");\n scope.vm.customSupportUrl = config.get(\"supportUrl\");\n scope.vm.login = function() {\n var nextUrl;\n nextUrl = encodeURIComponent(locationService.url());\n locationService.url(navUrlsService.resolve(\"login\"));\n return locationService.search({\n next: nextUrl\n });\n };\n return scope.$on(\"$routeChangeSuccess\", function() {\n scope.vm.active = null;\n switch (locationService.path()) {\n case \"/\":\n return scope.vm.active = 'dashboard';\n case \"/discover\":\n return scope.vm.active = 'discover';\n case \"/notifications\":\n return scope.vm.active = 'notifications';\n case \"/projects/\":\n return scope.vm.active = 'projects';\n }\n });\n };\n directive = {\n templateUrl: \"navigation-bar/navigation-bar.html\",\n scope: {},\n link: link\n };\n return directive;\n };\n\n NavigationBarDirective.$inject = [\"tgCurrentUserService\", \"tgNavigationBarService\", \"$tgLocation\", \"$tgNavUrls\", \"$tgConfig\"];\n\n angular.module(\"taigaNavigationBar\").directive(\"tgNavigationBar\", NavigationBarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: navigation-bar/navigation-bar.service.coffee\n */\n\n(function() {\n var NavigationBarService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n NavigationBarService = (function(superClass) {\n extend(NavigationBarService, superClass);\n\n function NavigationBarService() {\n this.disableHeader();\n }\n\n NavigationBarService.prototype.enableHeader = function() {\n return this.enabledHeader = true;\n };\n\n NavigationBarService.prototype.disableHeader = function() {\n return this.enabledHeader = false;\n };\n\n NavigationBarService.prototype.isEnabledHeader = function() {\n return this.enabledHeader;\n };\n\n return NavigationBarService;\n\n })(taiga.Service);\n\n angular.module(\"taigaNavigationBar\").service(\"tgNavigationBarService\", NavigationBarService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: notifications/notifications-list/notifications-list.directive.coffee\n */\n\n(function() {\n var NotificationsListDirective;\n\n NotificationsListDirective = function() {\n return {\n templateUrl: \"notifications/notifications-list/notifications-list.html\",\n controller: \"Notifications\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n infiniteScrollContainer: \"@\",\n infiniteScrollDistance: \"=\",\n onlyUnread: \"=onlyUnread\"\n }\n };\n };\n\n angular.module(\"taigaNotifications\").directive(\"tgNotificationsList\", NotificationsListDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: notifications/notifications.controller.coffee\n */\n\n(function() {\n var NotificationsController, debounceLeading, mixOf, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n debounceLeading = this.taiga.debounceLeading;\n\n NotificationsController = (function(superClass) {\n extend(NotificationsController, superClass);\n\n NotificationsController.$inject = [\"$rootScope\", \"$scope\", \"tgNotificationsService\", \"tgCurrentUserService\", \"$tgEvents\", \"$location\", \"$window\"];\n\n function NotificationsController(rootScope, scope, notificationsService, currentUserService, events, location, window) {\n this.rootScope = rootScope;\n this.scope = scope;\n this.notificationsService = notificationsService;\n this.currentUserService = currentUserService;\n this.events = events;\n this.location = location;\n this.window = window;\n this.total = 0;\n this.user = this.currentUserService.getUser();\n this.scrollDisabled = false;\n this.initList();\n this.loadNotifications();\n this.rootScope.$on(\"notifications:dismiss\", (function(_this) {\n return function(event) {\n if (_this.onlyUnread) {\n return _this.reloadList();\n }\n };\n })(this));\n this.rootScope.$on(\"notifications:new\", (function(_this) {\n return function(event) {\n return _this.reloadList();\n };\n })(this));\n this.rootScope.$on(\"notifications:dismiss-all\", (function(_this) {\n return function(event) {\n return _this.reloadList();\n };\n })(this));\n }\n\n NotificationsController.prototype.initList = function() {\n this.notificationsList = Immutable.List();\n this.list = this.notificationsService.getNotificationsList(this.user.get(\"id\"), this.onlyUnread != null);\n return this.loading = this.list == null;\n };\n\n NotificationsController.prototype.reloadList = function() {\n this.initList();\n return this.loadNotifications();\n };\n\n NotificationsController.prototype.loadNotifications = function() {\n this.scrollDisabled = true;\n this.loading = true;\n this.scope.$emit(\"notifications:loading\");\n return this.list.next().then((function(_this) {\n return function(response) {\n _this.notificationsList = _this.notificationsList.concat(response.get(\"items\"));\n if (response.get(\"next\")) {\n _this.scrollDisabled = false;\n }\n _this.total = response.get(\"total\");\n _this.scope.$emit(\"notifications:loaded\", _this.total);\n _this.loading = false;\n return _this.notificationsList;\n };\n })(this));\n };\n\n NotificationsController.prototype.setAsRead = function(notification, url) {\n return this.notificationsService.setNotificationAsRead(notification.get(\"id\")).then((function(_this) {\n return function() {\n if (_this.location.$$url === url) {\n _this.window.location.reload();\n } else {\n _this.location.path(url);\n }\n return _this.rootScope.$broadcast(\"notifications:dismiss\");\n };\n })(this));\n };\n\n NotificationsController.prototype.setAllAsRead = function() {\n return this.notificationsService.setNotificationsAsRead().then((function(_this) {\n return function() {\n return _this.rootScope.$broadcast(\"notifications:dismiss-all\");\n };\n })(this));\n };\n\n return NotificationsController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n angular.module(\"taigaNotifications\").controller(\"Notifications\", NotificationsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-notification/user-notification/user-notification.service.coffee\n */\n\n(function() {\n var NotificationsService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n NotificationsService = (function(superClass) {\n var _notificationTypes, _params;\n\n extend(NotificationsService, superClass);\n\n NotificationsService.$inject = [\"tgResources\", \"tgUserTimelinePaginationSequenceService\", \"$translate\", \"$tgNavUrls\", \"$tgSections\"];\n\n _notificationTypes = [\n {\n check: function(notification) {\n return notification.get('event_type') === 1;\n },\n key: 'EVENTS.ASSIGNED_YOU',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 2;\n },\n key: 'EVENTS.MENTIONED_YOU',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 3;\n },\n key: 'EVENTS.ADDED_YOU_AS_WATCHER',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 4;\n },\n key: 'EVENTS.ADDED_YOU_AS_MEMBER',\n translate_params: ['username']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 5;\n },\n key: 'EVENTS.COMMENTED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(notification) {\n return notification.get('event_type') === 6;\n },\n key: 'EVENTS.MENTIONED_YOU_IN_COMMENT',\n translate_params: ['username', 'obj_name']\n }\n ];\n\n _params = {\n username: function(notification) {\n var title_attr, url, user;\n user = notification.getIn(['data', 'user']);\n if (user.get('is_profile_visible')) {\n title_attr = this.translate.instant('COMMON.SEE_USER_PROFILE', {\n username: user.get('username')\n });\n url = this.navUrls.resolve('user-profile', {\n username: notification.getIn(['data', 'user', 'username'])\n });\n return this._getLink(notification, url, user.get('name'), 'user-link', title_attr);\n } else {\n return this._getUsernameSpan(user.get('name'));\n }\n },\n project_name: function(notification) {\n var url;\n url = this.navUrls.resolve('project', {\n project: notification.getIn(['data', 'project', 'slug'])\n });\n return this._getLink(notification, url, notification.getIn([\"data\", \"project\", \"name\"]), 'project-link');\n },\n obj_name: function(notification) {\n var obj, text, url;\n obj = this._getNotificationObject(notification);\n url = this._getDetailObjUrl(notification, obj.get('content_type'));\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n return this._getLink(notification, url, text, 'object-link');\n }\n };\n\n function NotificationsService(rs, userTimelinePaginationSequenceService, translate, navUrls, tgSections) {\n this.rs = rs;\n this.userTimelinePaginationSequenceService = userTimelinePaginationSequenceService;\n this.translate = translate;\n this.navUrls = navUrls;\n this.tgSections = tgSections;\n }\n\n NotificationsService.prototype.getNotificationsList = function(userId, onlyUnread) {\n var config, total;\n total = 0;\n config = {};\n config.fetch = (function(_this) {\n return function(page) {\n return _this.rs.users.getNotifications(userId, page, onlyUnread).then(function(response) {\n return response;\n });\n };\n })(this);\n config.map = (function(_this) {\n return function(obj) {\n return _this._addNotificationAttributes(obj);\n };\n })(this);\n return this.userTimelinePaginationSequenceService.generate(config);\n };\n\n NotificationsService.prototype.setNotificationAsRead = function(notificationId) {\n return this.rs.users.setNotificationAsRead(notificationId);\n };\n\n NotificationsService.prototype.setNotificationsAsRead = function() {\n return this.rs.users.setNotificationsAsRead();\n };\n\n NotificationsService.prototype._getNotificationObject = function(notification) {\n if (notification.get('data').get('obj')) {\n return notification.get('data').get('obj');\n }\n };\n\n NotificationsService.prototype._getType = function(notification) {\n return _.find(_notificationTypes, function(obj) {\n return obj.check(notification);\n });\n };\n\n NotificationsService.prototype._addNotificationAttributes = function(notification) {\n var event_type, projectSectionPath, projectSlug, projectUrl, title, type;\n event_type = notification.get('event_type');\n type = this._getType(notification);\n title = this._getTitle(notification, event_type, type);\n notification = notification.set('title_html', title);\n projectSlug = notification.getIn(['data', 'project', 'slug']);\n projectSectionPath = this.tgSections.getPath(projectSlug);\n projectUrl = this.navUrls.resolve(\"project-\" + projectSectionPath, {\n project: projectSlug\n });\n notification = notification.set('projectUrl', projectUrl);\n notification = notification.set('obj', this._getNotificationObject(notification));\n return notification;\n };\n\n NotificationsService.prototype._translateTitleParams = function(param, notification, event) {\n return _params[param].call(this, notification, event);\n };\n\n NotificationsService.prototype._getDetailObjUrl = function(notification, contentType) {\n var url, urlMapping;\n urlMapping = {\n \"issue\": \"project-issues-detail\",\n \"task\": \"project-tasks-detail\",\n \"userstory\": \"project-userstories-detail\"\n };\n url = this.navUrls.resolve(urlMapping[contentType], {\n project: notification.getIn(['data', 'project', 'slug']),\n ref: notification.getIn(['data', 'obj', 'ref'])\n });\n return url;\n };\n\n NotificationsService.prototype._getLink = function(notification, url, text, css, title) {\n var span;\n title = title || text;\n span = $('').attr('ng-non-bindable', true).text(text);\n return $('').attr('title', title).attr('class', css).attr('ng-click', \"vm.setAsRead(notification, \\\"\" + url + \"\\\")\").append(span).prop('outerHTML');\n };\n\n NotificationsService.prototype._getUsernameSpan = function(text) {\n var title;\n title = title || text;\n return $('').addClass('username').text(text).prop('outerHTML');\n };\n\n NotificationsService.prototype._getParams = function(notification, event_type, notification_type) {\n var params;\n params = {};\n notification_type.translate_params.forEach((function(_this) {\n return function(param) {\n return params[param] = _this._translateTitleParams(param, notification, event_type);\n };\n })(this));\n return params;\n };\n\n NotificationsService.prototype._getTitle = function(notification, event_type, notification_type) {\n var params, paramsKeys, translation;\n params = this._getParams(notification, event_type, notification_type);\n paramsKeys = {};\n Object.keys(params).forEach(function(key) {\n return paramsKeys[key] = '{{' + key + '}}';\n });\n translation = this.translate.instant(notification_type.key, paramsKeys);\n Object.keys(params).forEach(function(key) {\n var find;\n find = '{{' + key + '}}';\n return translation = translation.replace(new RegExp(find, 'g'), params[key]);\n });\n return translation;\n };\n\n return NotificationsService;\n\n })(taiga.Service);\n\n angular.module(\"taigaNotifications\").service(\"tgNotificationsService\", NotificationsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-bar/profile-bar.controller.coffee\n */\n\n(function() {\n var ProfileBarController;\n\n ProfileBarController = (function() {\n ProfileBarController.$inject = [\"tgUserService\"];\n\n function ProfileBarController(userService) {\n this.userService = userService;\n this.loadStats();\n }\n\n ProfileBarController.prototype.loadStats = function() {\n return this.userService.getStats(this.user.get(\"id\")).then((function(_this) {\n return function(stats) {\n return _this.stats = stats;\n };\n })(this));\n };\n\n return ProfileBarController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"ProfileBar\", ProfileBarController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-bar/profile-bar.directive.coffee\n */\n\n(function() {\n var ProfileBarDirective;\n\n ProfileBarDirective = function() {\n return {\n templateUrl: \"profile/profile-bar/profile-bar.html\",\n controller: \"ProfileBar\",\n controllerAs: \"vm\",\n scope: {\n user: \"=user\",\n isCurrentUser: \"=iscurrentuser\"\n },\n bindToController: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileBar\", ProfileBarDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-contacts/profile-contacts.controller.coffee\n */\n\n(function() {\n var ProfileContactsController;\n\n ProfileContactsController = (function() {\n ProfileContactsController.$inject = [\"tgUserService\", \"tgCurrentUserService\"];\n\n function ProfileContactsController(userService, currentUserService) {\n this.userService = userService;\n this.currentUserService = currentUserService;\n this.currentUser = this.currentUserService.getUser();\n this.isCurrentUser = false;\n if (this.currentUser && this.currentUser.get(\"id\") === this.user.get(\"id\")) {\n this.isCurrentUser = true;\n }\n }\n\n ProfileContactsController.prototype.loadContacts = function() {\n return this.userService.getContacts(this.user.get(\"id\")).then((function(_this) {\n return function(contacts) {\n return _this.contacts = contacts;\n };\n })(this));\n };\n\n return ProfileContactsController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"ProfileContacts\", ProfileContactsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-contacts/profile-contacts.directive.coffee\n */\n\n(function() {\n var ProfileContactsDirective;\n\n ProfileContactsDirective = function() {\n var link;\n link = function(scope, elm, attrs, ctrl) {\n return ctrl.loadContacts();\n };\n return {\n templateUrl: \"profile/profile-contacts/profile-contacts.html\",\n scope: {\n user: \"=\"\n },\n controllerAs: \"vm\",\n controller: \"ProfileContacts\",\n link: link,\n bindToController: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileContacts\", ProfileContactsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-favs/items/items.directive.coffee\n */\n\n(function() {\n var FavItemDirective;\n\n FavItemDirective = function() {\n var link, templateUrl;\n link = function(scope, el, attrs, ctrl) {\n return scope.vm = {\n item: scope.item\n };\n };\n templateUrl = function(el, attrs) {\n if (attrs.itemType === \"project\") {\n return \"profile/profile-favs/items/project.html\";\n } else {\n return \"profile/profile-favs/items/ticket.html\";\n }\n };\n return {\n scope: {\n \"item\": \"=tgFavItem\"\n },\n link: link,\n templateUrl: templateUrl\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgFavItem\", FavItemDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-favs/profile-favs.controller.coffee\n */\n\n(function() {\n var FavsBaseController, ProfileLikedController, ProfileVotedController, ProfileWatchedController, debounceLeading,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n debounceLeading = this.taiga.debounceLeading;\n\n FavsBaseController = (function() {\n function FavsBaseController() {\n this._init();\n }\n\n FavsBaseController.prototype._init = function() {\n this.enableFilterByAll = true;\n this.enableFilterByProjects = true;\n this.enableFilterByEpics = true;\n this.enableFilterByUserStories = true;\n this.enableFilterByTasks = true;\n this.enableFilterByIssues = true;\n this.enableFilterByTextQuery = true;\n this._resetList();\n this.q = null;\n return this.type = null;\n };\n\n FavsBaseController.prototype._resetList = function() {\n this.items = Immutable.List();\n this.scrollDisabled = false;\n return this._page = 1;\n };\n\n FavsBaseController.prototype._enableLoadingSpinner = function() {\n return this.isLoading = true;\n };\n\n FavsBaseController.prototype._disableLoadingSpinner = function() {\n return this.isLoading = false;\n };\n\n FavsBaseController.prototype._enableScroll = function() {\n return this.scrollDisabled = false;\n };\n\n FavsBaseController.prototype._disableScroll = function() {\n return this.scrollDisabled = true;\n };\n\n FavsBaseController.prototype._checkIfHasMorePages = function(hasNext) {\n if (hasNext) {\n this._page += 1;\n return this._enableScroll();\n } else {\n return this._disableScroll();\n }\n };\n\n FavsBaseController.prototype._checkIfHasNoResults = function() {\n return this.hasNoResults = this.items.size === 0;\n };\n\n FavsBaseController.prototype.loadItems = function() {\n this._enableLoadingSpinner();\n this._disableScroll();\n return this._getItems(this.user.get(\"id\"), this._page, this.type, this.q).then((function(_this) {\n return function(response) {\n _this.items = _this.items.concat(response.get(\"data\"));\n _this._checkIfHasMorePages(response.get(\"next\"));\n _this._checkIfHasNoResults();\n _this._disableLoadingSpinner();\n return _this.items;\n };\n })(this))[\"catch\"]((function(_this) {\n return function() {\n _this._disableLoadingSpinner();\n return _this.items;\n };\n })(this));\n };\n\n FavsBaseController.prototype.filterByTextQuery = debounceLeading(500, function() {\n this._resetList();\n return this.loadItems();\n });\n\n FavsBaseController.prototype.showAll = function() {\n if (this.type !== null) {\n this.type = null;\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showProjectsOnly = function() {\n if (this.type !== \"project\") {\n this.type = \"project\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showEpicsOnly = function() {\n if (this.type !== \"epic\") {\n this.type = \"epic\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showUserStoriesOnly = function() {\n if (this.type !== \"userstory\") {\n this.type = \"userstory\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showTasksOnly = function() {\n if (this.type !== \"task\") {\n this.type = \"task\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n FavsBaseController.prototype.showIssuesOnly = function() {\n if (this.type !== \"issue\") {\n this.type = \"issue\";\n this._resetList();\n return this.loadItems();\n }\n };\n\n return FavsBaseController;\n\n })();\n\n ProfileLikedController = (function(superClass) {\n extend(ProfileLikedController, superClass);\n\n ProfileLikedController.$inject = [\"tgUserService\"];\n\n function ProfileLikedController(userService) {\n this.userService = userService;\n ProfileLikedController.__super__.constructor.call(this);\n this.tabName = 'likes';\n this.enableFilterByAll = false;\n this.enableFilterByProjects = false;\n this.enableFilterByEpics = false;\n this.enableFilterByUserStories = false;\n this.enableFilterByTasks = false;\n this.enableFilterByIssues = false;\n this.enableFilterByTextQuery = true;\n this._getItems = this.userService.getLiked;\n }\n\n return ProfileLikedController;\n\n })(FavsBaseController);\n\n angular.module(\"taigaProfile\").controller(\"ProfileLiked\", ProfileLikedController);\n\n ProfileVotedController = (function(superClass) {\n extend(ProfileVotedController, superClass);\n\n ProfileVotedController.$inject = [\"tgUserService\"];\n\n function ProfileVotedController(userService) {\n this.userService = userService;\n ProfileVotedController.__super__.constructor.call(this);\n this.tabName = 'upvotes';\n this.enableFilterByAll = true;\n this.enableFilterByProjects = false;\n this.enableFilterByEpics = true;\n this.enableFilterByUserStories = true;\n this.enableFilterByTasks = true;\n this.enableFilterByIssues = true;\n this.enableFilterByTextQuery = true;\n this._getItems = this.userService.getVoted;\n }\n\n return ProfileVotedController;\n\n })(FavsBaseController);\n\n angular.module(\"taigaProfile\").controller(\"ProfileVoted\", ProfileVotedController);\n\n ProfileWatchedController = (function(superClass) {\n extend(ProfileWatchedController, superClass);\n\n ProfileWatchedController.$inject = [\"tgUserService\"];\n\n function ProfileWatchedController(userService) {\n this.userService = userService;\n ProfileWatchedController.__super__.constructor.call(this);\n this.tabName = 'watchers';\n this._getItems = this.userService.getWatched;\n }\n\n return ProfileWatchedController;\n\n })(FavsBaseController);\n\n angular.module(\"taigaProfile\").controller(\"ProfileWatched\", ProfileWatchedController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-favs/profile-favs.directive.coffee\n */\n\n(function() {\n var ProfileLikedDirective, ProfileVotedDirective, ProfileWatchedDirective, base;\n\n base = {\n scope: {},\n bindToController: {\n user: \"=\",\n type: \"@\",\n q: \"@\",\n scrollDisabled: \"@\",\n isLoading: \"@\",\n hasNoResults: \"@\"\n },\n controller: null,\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-favs/profile-favs.html\"\n };\n\n ProfileLikedDirective = function() {\n return _.extend({}, base, {\n controller: \"ProfileLiked\"\n });\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileLiked\", ProfileLikedDirective);\n\n ProfileVotedDirective = function() {\n return _.extend({}, base, {\n controller: \"ProfileVoted\"\n });\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileVoted\", ProfileVotedDirective);\n\n ProfileWatchedDirective = function() {\n return _.extend({}, base, {\n controller: \"ProfileWatched\"\n });\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileWatched\", ProfileWatchedDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-hints/profile-hints.controller.coffee\n */\n\n(function() {\n var ProfileHints;\n\n ProfileHints = (function() {\n ProfileHints.prototype.HINTS = [\n {\n url: \"https://tree.taiga.io/support/admin/import-export-projects/\"\n }, {\n url: \"https://tree.taiga.io/support/admin/custom-fields/\"\n }, {}, {}\n ];\n\n function ProfileHints(translate) {\n var hintKey;\n this.translate = translate;\n hintKey = Math.floor(Math.random() * this.HINTS.length) + 1;\n this.hint = this.HINTS[hintKey - 1];\n this.hint.linkText = this.hint.linkText || 'HINTS.LINK';\n this.hint.title = this.translate.instant(\"HINTS.HINT\" + hintKey + \"_TITLE\");\n this.hint.text = this.translate.instant(\"HINTS.HINT\" + hintKey + \"_TEXT\");\n }\n\n return ProfileHints;\n\n })();\n\n ProfileHints.$inject = [\"$translate\"];\n\n angular.module(\"taigaProfile\").controller(\"ProfileHints\", ProfileHints);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-hints/profile-hints.directive.coffee\n */\n\n(function() {\n var ProfileHints;\n\n ProfileHints = function($translate) {\n return {\n scope: {},\n controller: \"ProfileHints\",\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-hints/profile-hints.html\"\n };\n };\n\n ProfileHints.$inject = [\"$translate\"];\n\n angular.module(\"taigaProfile\").directive(\"tgProfileHints\", ProfileHints);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-projects/profile-projects.controller.coffee\n */\n\n(function() {\n var ProfileProjectsController;\n\n ProfileProjectsController = (function() {\n ProfileProjectsController.$inject = [\"tgProjectsService\", \"tgUserService\"];\n\n function ProfileProjectsController(projectsService, userService) {\n this.projectsService = projectsService;\n this.userService = userService;\n }\n\n ProfileProjectsController.prototype.loadProjects = function() {\n return this.projectsService.getProjectsByUserId(this.user.get(\"id\")).then((function(_this) {\n return function(projects) {\n return _this.userService.attachUserContactsToProjects(_this.user.get(\"id\"), projects);\n };\n })(this)).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n return ProfileProjectsController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"ProfileProjects\", ProfileProjectsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-projects/profile-projects.directive.coffee\n */\n\n(function() {\n var ProfileProjectsDirective;\n\n ProfileProjectsDirective = function() {\n var link;\n link = function(scope, elm, attr, ctrl) {\n return ctrl.loadProjects();\n };\n return {\n templateUrl: \"profile/profile-projects/profile-projects.html\",\n scope: {\n user: \"=\"\n },\n link: link,\n bindToController: true,\n controllerAs: \"vm\",\n controller: \"ProfileProjects\"\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileProjects\", ProfileProjectsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-tab/profile-tab.directive.coffee\n */\n\n(function() {\n var ProfileTabDirective;\n\n ProfileTabDirective = function() {\n var link;\n link = function(scope, element, attrs, ctrl, transclude) {\n scope.tab = {};\n attrs.$observe(\"tgProfileTab\", function(name) {\n return scope.tab.name = name;\n });\n attrs.$observe(\"tabTitle\", function(title) {\n return scope.tab.title = title;\n });\n scope.tab.icon = attrs.tabIcon;\n scope.tab.active = !!attrs.tabActive;\n if (scope.$eval(attrs.tabDisabled) !== true) {\n return ctrl.addTab(scope.tab);\n }\n };\n return {\n templateUrl: \"profile/profile-tab/profile-tab.html\",\n scope: {},\n require: \"^tgProfileTabs\",\n link: link,\n transclude: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileTab\", ProfileTabDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-tabs/profile-tabs.controller.coffee\n */\n\n(function() {\n var ProfileTabsController;\n\n ProfileTabsController = (function() {\n function ProfileTabsController() {\n this.tabs = [];\n }\n\n ProfileTabsController.prototype.addTab = function(tab) {\n return this.tabs.push(tab);\n };\n\n ProfileTabsController.prototype.toggleTab = function(tab) {\n _.map(this.tabs, function(tab) {\n return tab.active = false;\n });\n return tab.active = true;\n };\n\n return ProfileTabsController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"ProfileTabs\", ProfileTabsController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile-tabs/profile-tabs.directive.coffee\n */\n\n(function() {\n var ProfileTabsDirective;\n\n ProfileTabsDirective = function() {\n return {\n scope: {},\n controller: \"ProfileTabs\",\n controllerAs: \"vm\",\n templateUrl: \"profile/profile-tabs/profile-tabs.html\",\n transclude: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgProfileTabs\", ProfileTabsDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: profile/profile.controller.coffee\n */\n\n(function() {\n var ProfileController;\n\n ProfileController = (function() {\n ProfileController.$inject = [\"tgAppMetaService\", \"tgCurrentUserService\", \"$routeParams\", \"tgUserService\", \"tgXhrErrorService\", \"$translate\"];\n\n function ProfileController(appMetaService, currentUserService, routeParams, userService, xhrError, translate) {\n this.appMetaService = appMetaService;\n this.currentUserService = currentUserService;\n this.routeParams = routeParams;\n this.userService = userService;\n this.xhrError = xhrError;\n this.translate = translate;\n this.isCurrentUser = false;\n if (this.routeParams.slug) {\n this.userService.getUserByUserName(this.routeParams.slug).then((function(_this) {\n return function(user) {\n if (!user.get('is_active')) {\n return _this.xhrError.notFound();\n } else {\n _this.user = user;\n _this.isCurrentUser = false;\n _this._setMeta(_this.user);\n return user;\n }\n };\n })(this))[\"catch\"]((function(_this) {\n return function(xhr) {\n return _this.xhrError.response(xhr);\n };\n })(this));\n } else {\n this.user = this.currentUserService.getUser();\n this.isCurrentUser = true;\n this._setMeta(this.user);\n }\n }\n\n ProfileController.prototype._setMeta = function(user) {\n var ctx, description, title;\n ctx = {\n userFullName: user.get(\"full_name_display\"),\n userUsername: user.get(\"username\")\n };\n title = this.translate.instant(\"USER.PROFILE.PAGE_TITLE\", ctx);\n description = user.get(\"bio\");\n return this.appMetaService.setAll(title, description);\n };\n\n return ProfileController;\n\n })();\n\n angular.module(\"taigaProfile\").controller(\"Profile\", ProfileController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/blocked-project-explanation.directive.coffee\n */\n\n(function() {\n var BlockedProjectExplanationDirective;\n\n BlockedProjectExplanationDirective = function() {\n return {\n templateUrl: \"projects/project/blocked-project-explanation.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgBlockedProjectExplanation\", BlockedProjectExplanationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/contact-project-button/contact-project-button.controller.coffee\n */\n\n(function() {\n var ContactProjectButtonController;\n\n ContactProjectButtonController = (function() {\n ContactProjectButtonController.$inject = ['tgLightboxFactory'];\n\n function ContactProjectButtonController(lightboxFactory) {\n this.lightboxFactory = lightboxFactory;\n }\n\n ContactProjectButtonController.prototype.launchContactForm = function() {\n return this.lightboxFactory.create('tg-lb-contact-project', {\n \"class\": \"lightbox lightbox-contact-project e2e-lightbox-contact-project\",\n \"project\": \"project\"\n }, {\n \"project\": this.project\n });\n };\n\n return ContactProjectButtonController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ContactProjectButtonCtrl\", ContactProjectButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/contact-project-button/contact-project-button.directive.coffee\n */\n\n(function() {\n var ContactProjectButtonDirective;\n\n ContactProjectButtonDirective = function() {\n return {\n scope: {},\n controller: \"ContactProjectButtonCtrl\",\n bindToController: {\n project: '=',\n layout: '@'\n },\n controllerAs: \"vm\",\n templateUrl: \"projects/components/contact-project-button/contact-project-button.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgContactProjectButton\", ContactProjectButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/lb-contact-project/lb-contact-project.controller.coffee\n */\n\n(function() {\n var ContactProjectLbController;\n\n ContactProjectLbController = (function() {\n ContactProjectLbController.$inject = [\"lightboxService\", \"tgResources\", \"$tgConfirm\"];\n\n function ContactProjectLbController(lightboxService, rs, confirm) {\n this.lightboxService = lightboxService;\n this.rs = rs;\n this.confirm = confirm;\n this.contact = {};\n }\n\n ContactProjectLbController.prototype.contactProject = function() {\n var message, project, promise;\n project = this.project.get('id');\n message = this.contact.message;\n promise = this.rs.projects.contactProject(project, message);\n this.sendingFeedback = true;\n return promise.then((function(_this) {\n return function() {\n _this.lightboxService.closeAll();\n _this.sendingFeedback = false;\n return _this.confirm.notify(\"success\");\n };\n })(this));\n };\n\n return ContactProjectLbController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ContactProjectLbCtrl\", ContactProjectLbController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/lb-contact-project/lb-contact-project.directive.coffee\n */\n\n(function() {\n var ContactProjectLbDirective;\n\n ContactProjectLbDirective = function(lightboxService) {\n var link;\n this.inject = ['lightboxService'];\n link = function(scope, el) {\n return lightboxService.open(el);\n };\n return {\n controller: \"ContactProjectLbCtrl\",\n bindToController: {\n project: '='\n },\n controllerAs: \"vm\",\n templateUrl: \"projects/components/lb-contact-project/lb-contact-project.html\",\n link: link\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgLbContactProject\", [\"lightboxService\", ContactProjectLbDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/like-project-button/like-project-button.controller.coffee\n */\n\n(function() {\n var LikeProjectButtonController;\n\n LikeProjectButtonController = (function() {\n LikeProjectButtonController.$inject = [\"$tgConfirm\", \"tgLikeProjectButtonService\"];\n\n function LikeProjectButtonController(confirm, likeButtonService) {\n this.confirm = confirm;\n this.likeButtonService = likeButtonService;\n this.isMouseOver = false;\n this.loading = false;\n }\n\n LikeProjectButtonController.prototype.showTextWhenMouseIsOver = function() {\n return this.isMouseOver = true;\n };\n\n LikeProjectButtonController.prototype.showTextWhenMouseIsLeave = function() {\n return this.isMouseOver = false;\n };\n\n LikeProjectButtonController.prototype.toggleLike = function() {\n var promise;\n this.loading = true;\n if (!this.project.get(\"is_fan\")) {\n promise = this._like();\n } else {\n promise = this._unlike();\n }\n promise[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n return promise;\n };\n\n LikeProjectButtonController.prototype._like = function() {\n return this.likeButtonService.like(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.showTextWhenMouseIsLeave();\n };\n })(this))[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n };\n\n LikeProjectButtonController.prototype._unlike = function() {\n return this.likeButtonService.unlike(this.project.get('id'))[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this));\n };\n\n return LikeProjectButtonController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"LikeProjectButton\", LikeProjectButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/like-project-button/like-project-button.directive.coffee\n */\n\n(function() {\n var LikeProjectButtonDirective;\n\n LikeProjectButtonDirective = function() {\n return {\n scope: {},\n controller: \"LikeProjectButton\",\n bindToController: {\n project: '='\n },\n controllerAs: \"vm\",\n templateUrl: \"projects/components/like-project-button/like-project-button.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgLikeProjectButton\", LikeProjectButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/like-project-button/like-project-button.service.coffee\n */\n\n(function() {\n var LikeProjectButtonService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n LikeProjectButtonService = (function(superClass) {\n extend(LikeProjectButtonService, superClass);\n\n LikeProjectButtonService.$inject = [\"tgResources\", \"tgCurrentUserService\", \"tgProjectService\"];\n\n function LikeProjectButtonService(rs, currentUserService, projectService) {\n this.rs = rs;\n this.currentUserService = currentUserService;\n this.projectService = projectService;\n }\n\n LikeProjectButtonService.prototype._getProjectIndex = function(projectId) {\n return this.currentUserService.projects.get('all').findIndex(function(project) {\n return project.get('id') === projectId;\n });\n };\n\n LikeProjectButtonService.prototype._updateProjects = function(projectId, isFan) {\n var projectIndex, projects;\n projectIndex = this._getProjectIndex(projectId);\n if (projectIndex === -1) {\n return;\n }\n projects = this.currentUserService.projects.get('all').update(projectIndex, function(project) {\n var totalFans;\n totalFans = project.get(\"total_fans\");\n if (isFan) {\n totalFans++;\n } else {\n totalFans--;\n }\n return project.merge({\n is_fan: isFan,\n total_fans: totalFans\n });\n });\n return this.currentUserService.setProjects(projects);\n };\n\n LikeProjectButtonService.prototype._updateCurrentProject = function(isFan) {\n var project, totalFans;\n totalFans = this.projectService.project.get(\"total_fans\");\n if (isFan) {\n totalFans++;\n } else {\n totalFans--;\n }\n project = this.projectService.project.merge({\n is_fan: isFan,\n total_fans: totalFans\n });\n return this.projectService.setProject(project);\n };\n\n LikeProjectButtonService.prototype.like = function(projectId) {\n return this.rs.projects.likeProject(projectId).then((function(_this) {\n return function() {\n _this._updateProjects(projectId, true);\n return _this._updateCurrentProject(true);\n };\n })(this));\n };\n\n LikeProjectButtonService.prototype.unlike = function(projectId) {\n return this.rs.projects.unlikeProject(projectId).then((function(_this) {\n return function() {\n _this._updateProjects(projectId, false);\n return _this._updateCurrentProject(false);\n };\n })(this));\n };\n\n return LikeProjectButtonService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgLikeProjectButtonService\", LikeProjectButtonService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/sort-projects.directive.coffee\n */\n\n(function() {\n var SortProjectsDirective;\n\n SortProjectsDirective = function(currentUserService) {\n var directive, link;\n link = function(scope, el, attrs, ctrl) {\n var drake, itemEl, scroll;\n itemEl = null;\n drake = dragula([el[0]], {\n copySortSource: false,\n copy: false,\n mirrorContainer: el[0],\n moves: function(item) {\n return $(item).hasClass('list-itemtype-project');\n }\n });\n drake.on('dragend', function(item) {\n var i, index, len, project, sortData, sorted_project_ids, value;\n itemEl = $(item);\n project = itemEl.scope().project;\n index = itemEl.index();\n sorted_project_ids = _.map(scope.projects.toJS(), function(p) {\n return p.id;\n });\n sorted_project_ids = _.without(sorted_project_ids, project.get(\"id\"));\n sorted_project_ids.splice(index, 0, project.get('id'));\n sortData = [];\n for (index = i = 0, len = sorted_project_ids.length; i < len; index = ++i) {\n value = sorted_project_ids[index];\n sortData.push({\n \"project_id\": value,\n \"order\": index\n });\n }\n return currentUserService.bulkUpdateProjectsOrder(sortData);\n });\n scroll = autoScroll(window, {\n margin: 20,\n pixels: 30,\n scrollWhenOutside: true,\n autoScroll: function() {\n return this.down && drake.dragging;\n }\n });\n return scope.$on(\"$destroy\", function() {\n el.off();\n return drake.destroy();\n });\n };\n directive = {\n scope: {\n projects: \"=tgSortProjects\"\n },\n link: link\n };\n return directive;\n };\n\n angular.module(\"taigaProjects\").directive(\"tgSortProjects\", [\"tgCurrentUserService\", SortProjectsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/watch-project-button/watch-project-button.controller.coffee\n */\n\n(function() {\n var WatchProjectButtonController;\n\n WatchProjectButtonController = (function() {\n WatchProjectButtonController.$inject = [\"$tgConfirm\", \"tgWatchProjectButtonService\"];\n\n function WatchProjectButtonController(confirm, watchButtonService) {\n this.confirm = confirm;\n this.watchButtonService = watchButtonService;\n this.showWatchOptions = false;\n this.loading = false;\n }\n\n WatchProjectButtonController.prototype.toggleWatcherOptions = function() {\n return this.showWatchOptions = !this.showWatchOptions;\n };\n\n WatchProjectButtonController.prototype.closeWatcherOptions = function() {\n return this.showWatchOptions = false;\n };\n\n WatchProjectButtonController.prototype.watch = function(notifyLevel) {\n if (notifyLevel === this.project.get('notify_level')) {\n return;\n }\n this.loading = true;\n this.closeWatcherOptions();\n return this.watchButtonService.watch(this.project.get('id'), notifyLevel)[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this))[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n };\n\n WatchProjectButtonController.prototype.unwatch = function() {\n this.loading = true;\n this.closeWatcherOptions();\n return this.watchButtonService.unwatch(this.project.get('id'))[\"catch\"]((function(_this) {\n return function() {\n return _this.confirm.notify(\"error\");\n };\n })(this))[\"finally\"]((function(_this) {\n return function() {\n return _this.loading = false;\n };\n })(this));\n };\n\n return WatchProjectButtonController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"WatchProjectButton\", WatchProjectButtonController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/watch-project-button/watch-project-button.directive.coffee\n */\n\n(function() {\n var WatchProjectButtonDirective;\n\n WatchProjectButtonDirective = function() {\n return {\n scope: {},\n controller: \"WatchProjectButton\",\n bindToController: {\n project: \"=\"\n },\n controllerAs: \"vm\",\n templateUrl: \"projects/components/watch-project-button/watch-project-button.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgWatchProjectButton\", WatchProjectButtonDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/components/watch-project-button/watch-project-button.service.coffee\n */\n\n(function() {\n var WatchProjectButtonService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n WatchProjectButtonService = (function(superClass) {\n extend(WatchProjectButtonService, superClass);\n\n WatchProjectButtonService.$inject = [\"tgResources\", \"tgCurrentUserService\", \"tgProjectService\"];\n\n function WatchProjectButtonService(rs, currentUserService, projectService) {\n this.rs = rs;\n this.currentUserService = currentUserService;\n this.projectService = projectService;\n }\n\n WatchProjectButtonService.prototype._getProjectIndex = function(projectId) {\n return this.currentUserService.projects.get('all').findIndex(function(project) {\n return project.get('id') === projectId;\n });\n };\n\n WatchProjectButtonService.prototype._updateProjects = function(projectId, notifyLevel, isWatcher) {\n var projectIndex, projects;\n projectIndex = this._getProjectIndex(projectId);\n if (projectIndex === -1) {\n return;\n }\n projects = this.currentUserService.projects.get('all').update(projectIndex, (function(_this) {\n return function(project) {\n var totalWatchers;\n totalWatchers = project.get('total_watchers');\n if (!_this.projectService.project.get('is_watcher') && isWatcher) {\n totalWatchers++;\n } else if (_this.projectService.project.get('is_watcher') && !isWatcher) {\n totalWatchers--;\n }\n return project.merge({\n is_watcher: isWatcher,\n total_watchers: totalWatchers,\n notify_level: notifyLevel\n });\n };\n })(this));\n return this.currentUserService.setProjects(projects);\n };\n\n WatchProjectButtonService.prototype._updateCurrentProject = function(notifyLevel, isWatcher) {\n var project, totalWatchers;\n totalWatchers = this.projectService.project.get(\"total_watchers\");\n if (!this.projectService.project.get('is_watcher') && isWatcher) {\n totalWatchers++;\n } else if (this.projectService.project.get('is_watcher') && !isWatcher) {\n totalWatchers--;\n }\n project = this.projectService.project.merge({\n is_watcher: isWatcher,\n notify_level: notifyLevel,\n total_watchers: totalWatchers\n });\n return this.projectService.setProject(project);\n };\n\n WatchProjectButtonService.prototype.watch = function(projectId, notifyLevel) {\n return this.rs.projects.watchProject(projectId, notifyLevel).then((function(_this) {\n return function() {\n _this._updateProjects(projectId, notifyLevel, true);\n return _this._updateCurrentProject(notifyLevel, true);\n };\n })(this));\n };\n\n WatchProjectButtonService.prototype.unwatch = function(projectId) {\n return this.rs.projects.unwatchProject(projectId).then((function(_this) {\n return function() {\n _this._updateProjects(projectId, null, false);\n return _this._updateCurrentProject(null, false);\n };\n })(this));\n };\n\n return WatchProjectButtonService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgWatchProjectButtonService\", WatchProjectButtonService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import-project-form/asana-import-project-form.controller.coffee\n */\n\n(function() {\n var AsanaImportProjectFormController;\n\n AsanaImportProjectFormController = (function() {\n AsanaImportProjectFormController.$inject = [\"tgCurrentUserService\"];\n\n function AsanaImportProjectFormController(currentUserService) {\n this.currentUserService = currentUserService;\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n this.projectForm = this.project.toJS();\n this.platformName = \"Asana\";\n this.projectForm.is_private = false;\n this.projectForm.keepExternalReference = false;\n this.projectForm.project_type = \"scrum\";\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n AsanaImportProjectFormController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size);\n };\n\n AsanaImportProjectFormController.prototype.saveForm = function() {\n return this.onSaveProjectDetails({\n project: Immutable.fromJS(this.projectForm)\n });\n };\n\n AsanaImportProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n AsanaImportProjectFormController.prototype.isDisabled = function() {\n return !this.canCreateProject();\n };\n\n return AsanaImportProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('AsanaImportProjectFormCtrl', AsanaImportProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import-project-form/asana-import-project-form.directive.coffee\n */\n\n(function() {\n var AsanaImportProjectFormDirective;\n\n AsanaImportProjectFormDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/asana-import/asana-import-project-form/asana-import-project-form.html\",\n controller: \"AsanaImportProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSaveProjectDetails: '&',\n onCancelForm: '&',\n fetchingUsers: '<'\n }\n };\n };\n\n AsanaImportProjectFormDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgAsanaImportProjectForm\", AsanaImportProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import.controller.coffee\n */\n\n(function() {\n var AsanaImportController;\n\n AsanaImportController = (function() {\n AsanaImportController.$inject = ['tgAsanaImportService', '$tgConfirm', '$translate', 'tgImportProjectService'];\n\n function AsanaImportController(asanaImportService, confirm, translate, importProjectService) {\n this.asanaImportService = asanaImportService;\n this.confirm = confirm;\n this.translate = translate;\n this.importProjectService = importProjectService;\n this.step = 'autorization-asana';\n this.project = null;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.asanaImportService.projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'members', (function(_this) {\n return function() {\n return _this.asanaImportService.projectUsers;\n };\n })(this));\n }\n\n AsanaImportController.prototype.startProjectSelector = function() {\n this.step = 'project-select-asana';\n return this.asanaImportService.fetchProjects();\n };\n\n AsanaImportController.prototype.onSelectProject = function(project) {\n this.step = 'project-form-asana';\n this.project = project;\n this.fetchingUsers = true;\n return this.asanaImportService.fetchUsers(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.fetchingUsers = false;\n };\n })(this));\n };\n\n AsanaImportController.prototype.onSaveProjectDetails = function(project) {\n this.project = project;\n return this.step = 'project-members-asana';\n };\n\n AsanaImportController.prototype.onCancelMemberSelection = function() {\n return this.step = 'project-form-asana';\n };\n\n AsanaImportController.prototype.startImport = function(users) {\n var loader, promise;\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n promise = this.asanaImportService.importProject(this.project.get('name'), this.project.get('description'), this.project.get('id'), users, this.project.get('keepExternalReference'), this.project.get('is_private'), this.project.get('project_type'));\n return this.importProjectService.importPromise(promise).then((function(_this) {\n return function() {\n return loader.stop();\n };\n })(this));\n };\n\n AsanaImportController.prototype.submitUserSelection = function(users) {\n this.startImport(users);\n return null;\n };\n\n return AsanaImportController;\n\n })();\n\n angular.module('taigaProjects').controller('AsanaImportCtrl', AsanaImportController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import.directive.coffee\n */\n\n(function() {\n var AsanaImportDirective;\n\n AsanaImportDirective = function() {\n return {\n link: function(scope, elm, attrs, ctrl) {\n return ctrl.startProjectSelector();\n },\n templateUrl: \"projects/create/asana-import/asana-import.html\",\n controller: \"AsanaImportCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancel: '&'\n }\n };\n };\n\n AsanaImportDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgAsanaImport\", AsanaImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/asana-import/asana-import.service.coffee\n */\n\n(function() {\n var AsanaImportService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n AsanaImportService = (function(superClass) {\n extend(AsanaImportService, superClass);\n\n AsanaImportService.$inject = ['tgResources', '$location'];\n\n function AsanaImportService(resources, location) {\n this.resources = resources;\n this.location = location;\n this.projects = Immutable.List();\n this.projectUsers = Immutable.List();\n this.token = null;\n }\n\n AsanaImportService.prototype.setToken = function(token) {\n return this.token = token;\n };\n\n AsanaImportService.prototype.fetchProjects = function() {\n return this.resources.asanaImporter.listProjects(this.token).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n AsanaImportService.prototype.fetchUsers = function(projectId) {\n return this.resources.asanaImporter.listUsers(this.token, projectId).then((function(_this) {\n return function(users) {\n return _this.projectUsers = users;\n };\n })(this));\n };\n\n AsanaImportService.prototype.importProject = function(name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) {\n return this.resources.asanaImporter.importProject(this.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType);\n };\n\n AsanaImportService.prototype.getAuthUrl = function() {\n return new Promise((function(_this) {\n return function(resolve) {\n return _this.resources.asanaImporter.getAuthUrl().then(function(response) {\n _this.authUrl = response.data.url;\n return resolve(_this.authUrl);\n });\n };\n })(this));\n };\n\n AsanaImportService.prototype.authorize = function(code) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.asanaImporter.authorize(code).then((function(response) {\n _this.token = response.data.token;\n return resolve(_this.token);\n }), function(error) {\n return reject(new Error(error.status));\n });\n };\n })(this));\n };\n\n return AsanaImportService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgAsanaImportService\", AsanaImportService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project-form/create-project-form.controller.coffee\n */\n\n(function() {\n var CreatetProjectFormController;\n\n CreatetProjectFormController = (function() {\n CreatetProjectFormController.$inject = [\"tgCurrentUserService\", \"tgProjectsService\", \"$projectUrl\", \"$location\", \"$tgNavUrls\", \"$tgAnalytics\"];\n\n function CreatetProjectFormController(currentUserService, projectsService, projectUrl, location, navUrls, analytics) {\n this.currentUserService = currentUserService;\n this.projectsService = projectsService;\n this.projectUrl = projectUrl;\n this.location = location;\n this.navUrls = navUrls;\n this.analytics = analytics;\n this.projectForm = {\n is_private: false\n };\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n if (this.type === 'scrum') {\n this.projectForm.creation_template = 1;\n } else {\n this.projectForm.creation_template = 2;\n }\n }\n\n CreatetProjectFormController.prototype.submit = function() {\n this.formSubmitLoading = true;\n return this.projectsService.create(this.projectForm).then((function(_this) {\n return function(project) {\n _this.analytics.trackEvent(\"project\", \"create\", \"project creation\", {\n slug: project.get('slug'),\n id: project.get('id')\n });\n _this.location.url(_this.projectUrl.get(project));\n return _this.currentUserService.loadProjects();\n };\n })(this));\n };\n\n CreatetProjectFormController.prototype.onCancelForm = function() {\n return this.location.path(this.navUrls.resolve(\"create-project\"));\n };\n\n CreatetProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n CreatetProjectFormController.prototype.isDisabled = function() {\n return this.formSubmitLoading || !this.canCreateProject();\n };\n\n return CreatetProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('CreateProjectFormCtrl', CreatetProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project-form/create-project-form.directive.coffee\n */\n\n(function() {\n var CreateProjectFormDirective;\n\n CreateProjectFormDirective = function() {\n return {\n templateUrl: \"projects/create/create-project-form/create-project-form.html\",\n controller: \"CreateProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n type: '@'\n }\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgCreateProjectForm\", CreateProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project-members-restrictions/create-project-members-restrictions.directive.coffee\n */\n\n(function() {\n var createProjectMembersRestrictionsDirective, module;\n\n module = angular.module(\"taigaProject\");\n\n createProjectMembersRestrictionsDirective = function() {\n return {\n scope: {\n isPrivate: '=',\n limitMembersPrivateProject: '=',\n limitMembersPublicProject: '='\n },\n templateUrl: \"projects/create/create-project-members-restrictions/create-project-members-restrictions.html\"\n };\n };\n\n module.directive('tgCreateProjectMembersRestrictions', [createProjectMembersRestrictionsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project-restrictions/create-project-restrictions.directive.coffee\n */\n\n(function() {\n var createProjectRestrictionsDirective, module;\n\n module = angular.module(\"taigaProject\");\n\n createProjectRestrictionsDirective = function() {\n return {\n scope: {\n isPrivate: '=',\n canCreatePrivateProjects: '=',\n canCreatePublicProjects: '='\n },\n templateUrl: \"projects/create/create-project-restrictions/create-project-restrictions.html\"\n };\n };\n\n module.directive('tgCreateProjectRestrictions', [createProjectRestrictionsDirective]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/create-project.controller.coffee\n */\n\n(function() {\n var CreateProjectController;\n\n CreateProjectController = (function() {\n CreateProjectController.$inject = [\"tgAppMetaService\", \"$translate\", \"tgProjectService\", \"$location\", \"$tgAuth\"];\n\n function CreateProjectController(appMetaService, translate, projectService, location, authService) {\n this.appMetaService = appMetaService;\n this.translate = translate;\n this.projectService = projectService;\n this.location = location;\n this.authService = authService;\n taiga.defineImmutableProperty(this, \"project\", (function(_this) {\n return function() {\n return _this.projectService.project;\n };\n })(this));\n this.appMetaService.setfn(this._setMeta.bind(this));\n this.authService.refresh();\n this.displayScrumDesc = false;\n this.displayKanbanDesc = false;\n }\n\n CreateProjectController.prototype._setMeta = function() {\n var ctx;\n if (!this.project) {\n return null;\n }\n ctx = {\n projectName: this.project.get(\"name\")\n };\n return {\n title: this.translate.instant(\"PROJECT.PAGE_TITLE\", ctx),\n description: this.project.get(\"description\")\n };\n };\n\n CreateProjectController.prototype.displayHelp = function(type, $event) {\n $event.stopPropagation();\n $event.preventDefault();\n if (type === 'scrum') {\n this.displayScrumDesc = !this.displayScrumDesc;\n }\n if (type === 'kanban') {\n return this.displayKanbanDesc = !this.displayKanbanDesc;\n }\n };\n\n return CreateProjectController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"CreateProjectCtrl\", CreateProjectController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/duplicate/duplicate-project.controller.coffee\n */\n\n(function() {\n var DuplicateProjectController;\n\n DuplicateProjectController = (function() {\n DuplicateProjectController.$inject = [\"tgCurrentUserService\", \"tgProjectsService\", \"$tgLocation\", \"$tgNavUrls\"];\n\n function DuplicateProjectController(currentUserService, projectsService, location, navUrls) {\n this.currentUserService = currentUserService;\n this.projectsService = projectsService;\n this.location = location;\n this.navUrls = navUrls;\n this.user = this.currentUserService.getUser();\n this.members = Immutable.List();\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.currentUserService.projects.get(\"all\");\n };\n })(this));\n this.projectForm = {\n is_private: false\n };\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n DuplicateProjectController.prototype.refreshReferenceProject = function(slug) {\n return this.projectsService.getProjectBySlug(slug).then((function(_this) {\n return function(project) {\n _this.referenceProject = project;\n _this.members = project.get('members').filter(function(it) {\n return it.get('id') !== _this.user.get('id');\n });\n _this.invitedMembers = _this.members.map(function(it) {\n return it.get('id');\n });\n return _this.checkUsersLimit();\n };\n })(this));\n };\n\n DuplicateProjectController.prototype.toggleInvitedMember = function(member) {\n if (this.invitedMembers.includes(member)) {\n this.invitedMembers = this.invitedMembers.filter(function(it) {\n return it !== member;\n });\n } else {\n this.invitedMembers = this.invitedMembers.push(member);\n }\n return this.checkUsersLimit();\n };\n\n DuplicateProjectController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.invitedMembers.size + 1);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.invitedMembers.size + 1);\n };\n\n DuplicateProjectController.prototype.submit = function() {\n var data, projectId;\n projectId = this.referenceProject.get('id');\n data = this.projectForm;\n data.users = this.invitedMembers;\n this.formSubmitLoading = true;\n return this.projectsService.duplicate(projectId, data).then((function(_this) {\n return function(newProject) {\n _this.formSubmitLoading = false;\n _this.location.path(_this.navUrls.resolve(\"project\", {\n project: newProject.data.slug\n }));\n return _this.currentUserService.loadProjects();\n };\n })(this));\n };\n\n DuplicateProjectController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid && this.limitMembersPrivateProject.valid;\n } else {\n return this.canCreatePublicProjects.valid && this.limitMembersPublicProject.valid;\n }\n };\n\n DuplicateProjectController.prototype.isDisabled = function() {\n return this.formSubmitLoading || !this.canCreateProject();\n };\n\n DuplicateProjectController.prototype.onCancelForm = function() {\n return this.location.path(this.navUrls.resolve(\"create-project\"));\n };\n\n return DuplicateProjectController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"DuplicateProjectCtrl\", DuplicateProjectController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/duplicate/duplicate-project.directive.coffee\n */\n\n(function() {\n var DuplicateProjectDirective;\n\n DuplicateProjectDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {};\n return {\n link: link,\n templateUrl: \"projects/create/duplicate/duplicate-project.html\",\n controller: \"DuplicateProjectCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {}\n };\n };\n\n DuplicateProjectDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgDuplicateProject\", DuplicateProjectDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import-project-form/github-import-project-form.controller.coffee\n */\n\n(function() {\n var GithubImportProjectFormController;\n\n GithubImportProjectFormController = (function() {\n GithubImportProjectFormController.$inject = [\"tgCurrentUserService\"];\n\n function GithubImportProjectFormController(currentUserService) {\n this.currentUserService = currentUserService;\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n this.projectForm = this.project.toJS();\n this.platformName = \"Github\";\n this.projectForm.is_private = false;\n this.projectForm.keepExternalReference = false;\n this.projectForm.project_type = \"kanban\";\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n GithubImportProjectFormController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size);\n };\n\n GithubImportProjectFormController.prototype.saveForm = function() {\n return this.onSaveProjectDetails({\n project: Immutable.fromJS(this.projectForm)\n });\n };\n\n GithubImportProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n GithubImportProjectFormController.prototype.isDisabled = function() {\n return !this.canCreateProject();\n };\n\n return GithubImportProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('GithubImportProjectFormCtrl', GithubImportProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import-project-form/github-import-project-form.directive.coffee\n */\n\n(function() {\n var GithubImportProjectFormDirective;\n\n GithubImportProjectFormDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/github-import/github-import-project-form/github-import-project-form.html\",\n controller: \"GithubImportProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSaveProjectDetails: '&',\n onCancelForm: '&',\n fetchingUsers: '<'\n }\n };\n };\n\n GithubImportProjectFormDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgGithubImportProjectForm\", GithubImportProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import.controller.coffee\n */\n\n(function() {\n var GithubImportController;\n\n GithubImportController = (function() {\n GithubImportController.$inject = ['tgGithubImportService', '$tgConfirm', '$translate', 'tgImportProjectService'];\n\n function GithubImportController(githubImportService, confirm, translate, importProjectService) {\n this.githubImportService = githubImportService;\n this.confirm = confirm;\n this.translate = translate;\n this.importProjectService = importProjectService;\n this.step = 'autorization-github';\n this.project = null;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.githubImportService.projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'members', (function(_this) {\n return function() {\n return _this.githubImportService.projectUsers;\n };\n })(this));\n }\n\n GithubImportController.prototype.startProjectSelector = function() {\n this.step = 'project-select-github';\n return this.githubImportService.fetchProjects();\n };\n\n GithubImportController.prototype.onSelectProject = function(project) {\n this.step = 'project-form-github';\n this.project = project;\n this.fetchingUsers = true;\n return this.githubImportService.fetchUsers(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.fetchingUsers = false;\n };\n })(this));\n };\n\n GithubImportController.prototype.onSaveProjectDetails = function(project) {\n this.project = project;\n return this.step = 'project-members-github';\n };\n\n GithubImportController.prototype.onCancelMemberSelection = function() {\n return this.step = 'project-form-github';\n };\n\n GithubImportController.prototype.startImport = function(users) {\n var loader, promise;\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n promise = this.githubImportService.importProject(this.project.get('name'), this.project.get('description'), this.project.get('id'), users, this.project.get('keepExternalReference'), this.project.get('is_private'), this.project.get('project_type'));\n return this.importProjectService.importPromise(promise).then((function(_this) {\n return function() {\n return loader.stop();\n };\n })(this));\n };\n\n GithubImportController.prototype.submitUserSelection = function(users) {\n this.startImport(users);\n return null;\n };\n\n return GithubImportController;\n\n })();\n\n angular.module('taigaProjects').controller('GithubImportCtrl', GithubImportController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import.directive.coffee\n */\n\n(function() {\n var GithubImportDirective;\n\n GithubImportDirective = function() {\n return {\n link: function(scope, elm, attrs, ctrl) {\n return ctrl.startProjectSelector();\n },\n templateUrl: \"projects/create/github-import/github-import.html\",\n controller: \"GithubImportCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancel: '&'\n }\n };\n };\n\n GithubImportDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgGithubImport\", GithubImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/github-import/github-import.service.coffee\n */\n\n(function() {\n var GithubImportService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n GithubImportService = (function(superClass) {\n extend(GithubImportService, superClass);\n\n GithubImportService.$inject = ['tgResources'];\n\n function GithubImportService(resources, location) {\n this.resources = resources;\n this.location = location;\n this.projects = Immutable.List();\n this.projectUsers = Immutable.List();\n }\n\n GithubImportService.prototype.setToken = function(token) {\n return this.token = token;\n };\n\n GithubImportService.prototype.fetchProjects = function() {\n return this.resources.githubImporter.listProjects(this.token).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n GithubImportService.prototype.fetchUsers = function(projectId) {\n return this.resources.githubImporter.listUsers(this.token, projectId).then((function(_this) {\n return function(users) {\n return _this.projectUsers = users;\n };\n })(this));\n };\n\n GithubImportService.prototype.importProject = function(name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) {\n return this.resources.githubImporter.importProject(this.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType);\n };\n\n GithubImportService.prototype.getAuthUrl = function(callbackUri) {\n return new Promise((function(_this) {\n return function(resolve) {\n return _this.resources.githubImporter.getAuthUrl(callbackUri).then(function(response) {\n _this.authUrl = response.data.url;\n return resolve(_this.authUrl);\n });\n };\n })(this));\n };\n\n GithubImportService.prototype.authorize = function(code) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.githubImporter.authorize(code).then((function(response) {\n _this.token = response.data.token;\n return resolve(_this.token);\n }), function(error) {\n return reject(new Error(error.status));\n });\n };\n })(this));\n };\n\n return GithubImportService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgGithubImportService\", GithubImportService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-project-members/import-project-members.controller.coffee\n */\n\n(function() {\n var ImportProjectMembersController;\n\n ImportProjectMembersController = (function() {\n ImportProjectMembersController.$inject = ['tgCurrentUserService', 'tgUserService'];\n\n function ImportProjectMembersController(currentUserService, userService) {\n this.currentUserService = currentUserService;\n this.userService = userService;\n this.selectImportUserLightbox = false;\n this.warningImportUsers = false;\n this.displayEmailSelector = true;\n this.cancelledUsers = Immutable.List();\n this.selectedUsers = Immutable.List();\n this.selectableUsers = Immutable.List();\n this.userContacts = Immutable.List();\n }\n\n ImportProjectMembersController.prototype.fetchUser = function() {\n this.currentUser = this.currentUserService.getUser();\n return this.userService.getContacts(this.currentUser.get('id')).then((function(_this) {\n return function(userContacts) {\n _this.userContacts = userContacts;\n return _this.refreshSelectableUsers();\n };\n })(this));\n };\n\n ImportProjectMembersController.prototype.searchUser = function(user) {\n this.selectImportUserLightbox = true;\n return this.searchingUser = user;\n };\n\n ImportProjectMembersController.prototype.beforeSubmitUsers = function() {\n if (this.selectedUsers.size !== this.members.size) {\n return this.warningImportUsers = true;\n } else {\n return this.submit();\n }\n };\n\n ImportProjectMembersController.prototype.confirmUser = function(externalUser, taigaUser) {\n var user;\n this.selectImportUserLightbox = false;\n user = Immutable.Map();\n user = user.set('user', externalUser);\n user = user.set('taigaUser', taigaUser);\n this.selectedUsers = this.selectedUsers.push(user);\n this.discardSuggestedUser(externalUser);\n return this.refreshSelectableUsers();\n };\n\n ImportProjectMembersController.prototype.unselectUser = function(user) {\n var index;\n index = this.selectedUsers.findIndex(function(it) {\n return it.getIn(['user', 'id']) === user.get('id');\n });\n this.selectedUsers = this.selectedUsers[\"delete\"](index);\n return this.refreshSelectableUsers();\n };\n\n ImportProjectMembersController.prototype.discardSuggestedUser = function(member) {\n return this.cancelledUsers = this.cancelledUsers.push(member.get('id'));\n };\n\n ImportProjectMembersController.prototype.getSelectedMember = function(member) {\n return this.selectedUsers.find(function(it) {\n return it.getIn(['user', 'id']) === member.get('id');\n });\n };\n\n ImportProjectMembersController.prototype.isMemberSelected = function(member) {\n return !!this.getSelectedMember(member);\n };\n\n ImportProjectMembersController.prototype.getUser = function(user) {\n var userSelected;\n userSelected = this.getSelectedMember(user);\n if (userSelected) {\n return userSelected.get('taigaUser');\n } else {\n return null;\n }\n };\n\n ImportProjectMembersController.prototype.submit = function() {\n var users;\n this.warningImportUsers = false;\n users = Immutable.Map();\n this.selectedUsers.map(function(it) {\n var id;\n id = '';\n if (_.isString(it.get('taigaUser'))) {\n id = it.get('taigaUser');\n } else {\n id = it.getIn(['taigaUser', 'id']);\n }\n return users = users.set(it.getIn(['user', 'id']), id);\n });\n return this.onSubmit({\n users: users\n });\n };\n\n ImportProjectMembersController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size + 1);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size + 1);\n };\n\n ImportProjectMembersController.prototype.showSuggestedMatch = function(member) {\n return member.get('user') && this.cancelledUsers.indexOf(member.get('id')) === -1 && !this.isMemberSelected(member);\n };\n\n ImportProjectMembersController.prototype.getDistinctSelectedTaigaUsers = function() {\n var ids, users;\n ids = [];\n users = this.selectedUsers.filter(function(it) {\n var id;\n id = it.getIn(['taigaUser', 'id']);\n if (ids.indexOf(id) === -1) {\n ids.push(id);\n return true;\n }\n return false;\n });\n return users.filter((function(_this) {\n return function(it) {\n return it.getIn(['taigaUser', 'id']) !== _this.currentUser.get('id');\n };\n })(this));\n };\n\n ImportProjectMembersController.prototype.refreshSelectableUsers = function() {\n var users;\n this.importMoreUsersDisabled = this.isImportMoreUsersDisabled();\n if (this.importMoreUsersDisabled) {\n users = this.getDistinctSelectedTaigaUsers();\n this.selectableUsers = users.map(function(it) {\n return it.get('taigaUser');\n });\n this.displayEmailSelector = false;\n } else {\n this.selectableUsers = this.userContacts;\n this.displayEmailSelector = true;\n }\n return this.selectableUsers = this.selectableUsers.push(this.currentUser);\n };\n\n ImportProjectMembersController.prototype.isImportMoreUsersDisabled = function() {\n var total, users;\n users = this.getDistinctSelectedTaigaUsers();\n total = users.size + 2;\n if (this.project.get('is_private')) {\n return !this.currentUserService.canAddMembersPrivateProject(total).valid;\n } else {\n return !this.currentUserService.canAddMembersPublicProject(total).valid;\n }\n };\n\n return ImportProjectMembersController;\n\n })();\n\n angular.module('taigaProjects').controller('ImportProjectMembersCtrl', ImportProjectMembersController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-project-members/import-project-members.directive.coffee\n */\n\n(function() {\n var ImportProjectMembersDirective;\n\n ImportProjectMembersDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n ctrl.fetchUser();\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/import-project-members/import-project-members.html\",\n controller: \"ImportProjectMembersCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSubmit: '&',\n platform: '@',\n logo: '@',\n onCancel: '&'\n }\n };\n };\n\n ImportProjectMembersDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgImportProjectMembers\", ImportProjectMembersDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-project-selector/import-project-selector.controller.coffee\n */\n\n(function() {\n var ImportProjectSelectorController;\n\n ImportProjectSelectorController = (function() {\n function ImportProjectSelectorController() {}\n\n ImportProjectSelectorController.prototype.selectProject = function(project) {\n return this.onSelectProject({\n project: Immutable.fromJS(project)\n });\n };\n\n return ImportProjectSelectorController;\n\n })();\n\n angular.module('taigaProjects').controller('ImportProjectSelectorCtrl', ImportProjectSelectorController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-project-selector/import-project-selector.directive.coffee\n */\n\n(function() {\n var ImportProjectSelectorDirective;\n\n ImportProjectSelectorDirective = function() {\n return {\n templateUrl: \"projects/create/import-project-selector/import-project-selector.html\",\n controller: \"ImportProjectSelectorCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n projects: '<',\n onCancel: '&',\n onSelectProject: '&',\n logo: '@',\n noProjectsMsg: '@',\n search: '@'\n }\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgImportProjectSelector\", ImportProjectSelectorDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-taiga/import-taiga.controller.coffee\n */\n\n(function() {\n var ImportTaigaController;\n\n ImportTaigaController = (function() {\n ImportTaigaController.$inject = ['$tgConfirm', '$tgResources', 'tgImportProjectService', '$translate', '$tgAnalytics'];\n\n function ImportTaigaController(confirm, rs, importProjectService, translate, analytics) {\n this.confirm = confirm;\n this.rs = rs;\n this.importProjectService = importProjectService;\n this.translate = translate;\n this.analytics = analytics;\n }\n\n ImportTaigaController.prototype.importTaiga = function(files) {\n var file, loader, promise;\n this.analytics.trackEvent(\"import\", \"taiga\", \"Start import from taiga\", 1);\n file = files[0];\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n promise = this.rs.projects[\"import\"](file, loader.update);\n this.importProjectService.importPromise(promise)[\"finally\"](function() {\n return loader.stop();\n });\n };\n\n return ImportTaigaController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ImportTaigaCtrl\", ImportTaigaController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import-taiga/import-taiga.directive.coffee\n */\n\n(function() {\n var ImportTaigaDirective;\n\n ImportTaigaDirective = function() {\n return {\n templateUrl: \"projects/create/import-taiga/import-taiga.html\",\n controller: \"ImportTaigaCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {}\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgImportTaiga\", ImportTaigaDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import/import-project-error-lb.directive.coffee\n */\n\n(function() {\n var LbImportErrorDirective;\n\n LbImportErrorDirective = function(lightboxService) {\n var link;\n link = function(scope, el, attrs) {\n lightboxService.open(el);\n return scope.close = function() {\n lightboxService.close(el);\n };\n };\n return {\n templateUrl: \"projects/create/import/import-project-error-lb.html\",\n link: link\n };\n };\n\n LbImportErrorDirective.$inject = [\"lightboxService\"];\n\n angular.module(\"taigaProjects\").directive(\"tgLbImportError\", LbImportErrorDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import/import-project.controller.coffee\n */\n\n(function() {\n var ImportProjectController;\n\n ImportProjectController = (function() {\n ImportProjectController.$inject = ['tgTrelloImportService', 'tgJiraImportService', 'tgGithubImportService', 'tgAsanaImportService', '$location', '$window', '$routeParams', '$tgNavUrls', '$tgConfig', '$tgConfirm', '$tgAnalytics'];\n\n function ImportProjectController(trelloService, jiraService, githubService, asanaService, location, window, routeParams, tgNavUrls, config, confirm, analytics) {\n this.trelloService = trelloService;\n this.jiraService = jiraService;\n this.githubService = githubService;\n this.asanaService = asanaService;\n this.location = location;\n this.window = window;\n this.routeParams = routeParams;\n this.tgNavUrls = tgNavUrls;\n this.config = config;\n this.confirm = confirm;\n this.analytics = analytics;\n }\n\n ImportProjectController.prototype.start = function() {\n var asanaOauthToken, githubOauthToken, jiraOauthToken, jiraOauthVerifier, locationSearch, trelloOauthToken;\n this.token = null;\n this.from = this.routeParams.platform;\n locationSearch = this.location.search();\n if (this.from) {\n this.analytics.trackEvent(\"import\", this.from, \"Start import from \" + this.from, 1);\n }\n if (this.from === \"asana\") {\n asanaOauthToken = locationSearch.code;\n if (locationSearch.code) {\n asanaOauthToken = locationSearch.code;\n return this.asanaService.authorize(asanaOauthToken).then(((function(_this) {\n return function(token) {\n return _this.location.search({\n token: encodeURIComponent(JSON.stringify(token))\n });\n };\n })(this)), this.cancelCurrentImport.bind(this));\n } else {\n this.token = JSON.parse(decodeURIComponent(locationSearch.token));\n this.asanaService.setToken(this.token);\n }\n }\n if (this.from === 'trello') {\n if (locationSearch.oauth_verifier) {\n trelloOauthToken = locationSearch.oauth_verifier;\n return this.trelloService.authorize(trelloOauthToken).then(((function(_this) {\n return function(token) {\n return _this.location.search({\n token: token\n });\n };\n })(this)), this.cancelCurrentImport.bind(this));\n } else if (locationSearch.token) {\n this.token = locationSearch.token;\n this.trelloService.setToken(locationSearch.token);\n }\n }\n if (this.from === \"github\") {\n if (locationSearch.code) {\n githubOauthToken = locationSearch.code;\n return this.githubService.authorize(githubOauthToken).then(((function(_this) {\n return function(token) {\n return _this.location.search({\n token: token\n });\n };\n })(this)), this.cancelCurrentImport.bind(this));\n } else if (locationSearch.token) {\n this.token = locationSearch.token;\n this.githubService.setToken(locationSearch.token);\n }\n }\n if (this.from === \"jira\") {\n jiraOauthToken = locationSearch.oauth_token;\n if (jiraOauthToken) {\n jiraOauthVerifier = locationSearch.oauth_verifier;\n return this.jiraService.authorize(jiraOauthVerifier).then(((function(_this) {\n return function(data) {\n return _this.location.search({\n token: data.token,\n url: data.url\n });\n };\n })(this)), this.cancelCurrentImport.bind(this));\n } else {\n this.token = locationSearch.token;\n return this.jiraService.setToken(locationSearch.token, locationSearch.url);\n }\n }\n };\n\n ImportProjectController.prototype.select = function(from) {\n var callbackUri;\n if (from === \"trello\") {\n return this.trelloService.getAuthUrl().then((function(_this) {\n return function(url) {\n return _this.window.open(url, \"_self\");\n };\n })(this));\n } else if (from === \"jira\") {\n return this.jiraService.getAuthUrl(this.jiraUrl).then((function(_this) {\n return function(url) {\n return _this.window.open(url, \"_self\");\n };\n })(this), (function(_this) {\n return function(err) {\n return _this.confirm.notify('error', err);\n };\n })(this));\n } else if (from === \"github\") {\n callbackUri = this.location.absUrl() + \"/github\";\n return this.githubService.getAuthUrl(callbackUri).then((function(_this) {\n return function(url) {\n return _this.window.open(url, \"_self\");\n };\n })(this));\n } else if (from === \"asana\") {\n return this.asanaService.getAuthUrl().then((function(_this) {\n return function(url) {\n return _this.window.open(url, \"_self\");\n };\n })(this));\n } else {\n return this.from = from;\n }\n };\n\n ImportProjectController.prototype.unfoldOptions = function(options) {\n return this.unfoldedOptions = options;\n };\n\n ImportProjectController.prototype.isActiveImporter = function(importer) {\n if (this.config.get('importers').indexOf(importer) === -1) {\n return false;\n }\n return true;\n };\n\n ImportProjectController.prototype.cancelCurrentImport = function() {\n return this.location.url(this.tgNavUrls.resolve('create-project-import'));\n };\n\n ImportProjectController.prototype.backToCreate = function() {\n return this.location.url(this.tgNavUrls.resolve('create-project'));\n };\n\n return ImportProjectController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ImportProjectCtrl\", ImportProjectController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import/import-project.directive.coffee\n */\n\n(function() {\n var ImportProjectDirective;\n\n ImportProjectDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {\n return ctrl.start();\n };\n return {\n link: link,\n templateUrl: \"projects/create/import/import-project.html\",\n controller: \"ImportProjectCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancelImport: '&'\n }\n };\n };\n\n ImportProjectDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgImportProject\", ImportProjectDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/import/import-project.service.coffee\n */\n\n(function() {\n var ImportProjectService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n ImportProjectService = (function(superClass) {\n extend(ImportProjectService, superClass);\n\n ImportProjectService.$inject = ['tgCurrentUserService', '$tgAuth', 'tgLightboxFactory', '$translate', '$tgConfirm', '$location', '$tgNavUrls'];\n\n function ImportProjectService(currentUserService, tgAuth, lightboxFactory, translate, confirm, location, tgNavUrls) {\n this.currentUserService = currentUserService;\n this.tgAuth = tgAuth;\n this.lightboxFactory = lightboxFactory;\n this.translate = translate;\n this.confirm = confirm;\n this.location = location;\n this.tgNavUrls = tgNavUrls;\n }\n\n ImportProjectService.prototype.importPromise = function(promise) {\n return promise.then(this.importSuccess.bind(this), this.importError.bind(this));\n };\n\n ImportProjectService.prototype.importSuccess = function(result) {\n var promise;\n promise = this.currentUserService.loadProjects();\n promise.then((function(_this) {\n return function() {\n var ctx, message, msg, title;\n if (result.status === 202) {\n title = _this.translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_TITLE');\n message = _this.translate.instant('PROJECT.IMPORT.ASYNC_IN_PROGRESS_MESSAGE');\n _this.location.path(_this.tgNavUrls.resolve('home'));\n return _this.confirm.success(title, message);\n } else {\n ctx = {\n project: result.data.slug\n };\n _this.location.path(_this.tgNavUrls.resolve('project-admin-project-profile-details', ctx));\n msg = _this.translate.instant('PROJECT.IMPORT.SYNC_SUCCESS');\n return _this.confirm.notify('success', msg);\n }\n };\n })(this));\n return promise;\n };\n\n ImportProjectService.prototype.importError = function(result) {\n var promise;\n promise = this.tgAuth.refresh();\n promise.then((function(_this) {\n return function() {\n var errorMsg, ref, restrictionError;\n restrictionError = _this.getRestrictionError(result);\n if (restrictionError) {\n return _this.lightboxFactory.create('tg-lb-import-error', {\n \"class\": 'lightbox lightbox-import-error'\n }, restrictionError);\n } else {\n errorMsg = _this.translate.instant(\"PROJECT.IMPORT.ERROR\");\n if (result.status === 429) {\n errorMsg = _this.translate.instant(\"PROJECT.IMPORT.ERROR_TOO_MANY_REQUEST\");\n } else if ((ref = result.data) != null ? ref._error_message : void 0) {\n errorMsg = _this.translate.instant(\"PROJECT.IMPORT.ERROR_MESSAGE\", {\n error_message: result.data._error_message\n });\n }\n return _this.confirm.notify(\"error\", errorMsg);\n }\n };\n })(this));\n return promise;\n };\n\n ImportProjectService.prototype.getRestrictionError = function(result) {\n var errorKey, maxMemberships, membersError, privateError, publicError, user;\n if (result.headers) {\n errorKey = '';\n user = this.currentUserService.getUser();\n maxMemberships = null;\n if (result.headers.isPrivate) {\n privateError = !this.currentUserService.canCreatePrivateProjects().valid;\n if (user.get('max_memberships_private_projects') !== null && result.headers.memberships >= user.get('max_memberships_private_projects')) {\n membersError = true;\n } else {\n membersError = false;\n }\n if (privateError && membersError) {\n errorKey = 'private-space-members';\n maxMemberships = user.get('max_memberships_private_projects');\n } else if (privateError) {\n errorKey = 'private-space';\n } else if (membersError) {\n errorKey = 'private-members';\n maxMemberships = user.get('max_memberships_private_projects');\n }\n } else {\n publicError = !this.currentUserService.canCreatePublicProjects().valid;\n if (user.get('max_memberships_public_projects') !== null && result.headers.memberships >= user.get('max_memberships_public_projects')) {\n membersError = true;\n } else {\n membersError = false;\n }\n if (publicError && membersError) {\n errorKey = 'public-space-members';\n maxMemberships = user.get('max_memberships_public_projects');\n } else if (publicError) {\n errorKey = 'public-space';\n } else if (membersError) {\n errorKey = 'public-members';\n maxMemberships = user.get('max_memberships_public_projects');\n }\n }\n if (!errorKey) {\n return false;\n }\n return {\n key: errorKey,\n values: {\n max_memberships: maxMemberships,\n members: result.headers.memberships\n }\n };\n } else {\n return false;\n }\n };\n\n return ImportProjectService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgImportProjectService\", ImportProjectService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/invite-members/invite-members.controller.coffee\n */\n\n(function() {\n var InviteMembersController;\n\n InviteMembersController = (function() {\n function InviteMembersController() {}\n\n InviteMembersController.$inject = [];\n\n InviteMembersController.prototype.isDisabled = function(id) {\n return this.invitedMembers.indexOf(id) === -1;\n };\n\n return InviteMembersController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"InviteMembersCtrl\", InviteMembersController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/invite-members/invite-members.directive.coffee\n */\n\n(function() {\n var InviteMembersDirective;\n\n InviteMembersDirective = function() {\n var link;\n link = function(scope, el, attr, ctrl) {};\n return {\n link: link,\n templateUrl: \"projects/create/invite-members/invite-members.html\",\n controller: \"InviteMembersCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n invitedMembers: '<',\n members: '<',\n onToggleInvitedMember: '&'\n }\n };\n };\n\n InviteMembersDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgInviteMembers\", InviteMembersDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/invite-members/single-member/single-member.directive.coffee\n */\n\n(function() {\n var SingleMemberDirective;\n\n SingleMemberDirective = function() {\n return {\n templateUrl: \"projects/create/invite-members/single-member/single-member.html\",\n scope: {\n disabled: \"<\",\n avatar: \"=\"\n }\n };\n };\n\n SingleMemberDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgSingleMember\", SingleMemberDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import-project-form/jira-import-project-form.controller.coffee\n */\n\n(function() {\n var JiraImportProjectFormController;\n\n JiraImportProjectFormController = (function() {\n JiraImportProjectFormController.$inject = [\"tgCurrentUserService\"];\n\n function JiraImportProjectFormController(currentUserService) {\n this.currentUserService = currentUserService;\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n this.projectForm = this.project.toJS();\n this.projectForm.is_private = false;\n this.projectForm.keepExternalReference = false;\n if (this.projectForm.importer_type === \"agile\") {\n this.projectForm.project_type = null;\n } else {\n this.projectForm.project_type = \"scrum\";\n }\n this.projectForm.create_subissues = true;\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n JiraImportProjectFormController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size);\n };\n\n JiraImportProjectFormController.prototype.saveForm = function() {\n return this.onSaveProjectDetails({\n project: Immutable.fromJS(this.projectForm)\n });\n };\n\n JiraImportProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n JiraImportProjectFormController.prototype.isDisabled = function() {\n return !this.canCreateProject();\n };\n\n return JiraImportProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('JiraImportProjectFormCtrl', JiraImportProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import-project-form/jira-import-project-form.directive.coffee\n */\n\n(function() {\n var JiraImportProjectFormDirective;\n\n JiraImportProjectFormDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/jira-import/jira-import-project-form/jira-import-project-form.html\",\n controller: \"JiraImportProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSaveProjectDetails: '&',\n onCancelForm: '&',\n fetchingUsers: '<'\n }\n };\n };\n\n JiraImportProjectFormDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgJiraImportProjectForm\", JiraImportProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import.controller.coffee\n */\n\n(function() {\n var JiraImportController;\n\n JiraImportController = (function() {\n JiraImportController.$inject = ['tgJiraImportService', '$tgConfirm', '$translate', 'tgImportProjectService'];\n\n function JiraImportController(jiraImportService, confirm, translate, importProjectService) {\n this.jiraImportService = jiraImportService;\n this.confirm = confirm;\n this.translate = translate;\n this.importProjectService = importProjectService;\n this.step = 'autorization-jira';\n this.project = null;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.jiraImportService.projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'members', (function(_this) {\n return function() {\n return _this.jiraImportService.projectUsers;\n };\n })(this));\n }\n\n JiraImportController.prototype.startProjectSelector = function() {\n this.step = 'project-select-jira';\n return this.jiraImportService.fetchProjects();\n };\n\n JiraImportController.prototype.onSelectProject = function(project) {\n this.step = 'project-form-jira';\n this.project = project;\n this.fetchingUsers = true;\n return this.jiraImportService.fetchUsers(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.fetchingUsers = false;\n };\n })(this));\n };\n\n JiraImportController.prototype.onSaveProjectDetails = function(project) {\n this.project = project;\n return this.step = 'project-members-jira';\n };\n\n JiraImportController.prototype.onCancelMemberSelection = function() {\n return this.step = 'project-form-jira';\n };\n\n JiraImportController.prototype.startImport = function(users) {\n var loader, projectType, promise;\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n projectType = this.project.get('project_type');\n if (projectType === \"issues\" && this.project.get('create_subissues')) {\n projectType = \"issues-with-subissues\";\n }\n promise = this.jiraImportService.importProject(this.project.get('name'), this.project.get('description'), this.project.get('id'), users, this.project.get('keepExternalReference'), this.project.get('is_private'), projectType, this.project.get('importer_type'));\n return this.importProjectService.importPromise(promise).then((function(_this) {\n return function() {\n return loader.stop();\n };\n })(this));\n };\n\n JiraImportController.prototype.submitUserSelection = function(users) {\n this.startImport(users);\n return null;\n };\n\n return JiraImportController;\n\n })();\n\n angular.module('taigaProjects').controller('JiraImportCtrl', JiraImportController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import.directive.coffee\n */\n\n(function() {\n var JiraImportDirective;\n\n JiraImportDirective = function() {\n return {\n link: function(scope, elm, attrs, ctrl) {\n return ctrl.startProjectSelector();\n },\n templateUrl: \"projects/create/jira-import/jira-import.html\",\n controller: \"JiraImportCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancel: '&'\n }\n };\n };\n\n JiraImportDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgJiraImport\", JiraImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/jira-import/jira-import.service.coffee\n */\n\n(function() {\n var JiraImportService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n JiraImportService = (function(superClass) {\n extend(JiraImportService, superClass);\n\n JiraImportService.$inject = ['tgResources', '$location'];\n\n function JiraImportService(resources, location) {\n this.resources = resources;\n this.location = location;\n this.projects = Immutable.List();\n this.projectUsers = Immutable.List();\n }\n\n JiraImportService.prototype.setToken = function(token, url) {\n this.token = token;\n return this.url = url;\n };\n\n JiraImportService.prototype.fetchProjects = function() {\n return this.resources.jiraImporter.listProjects(this.url, this.token).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n JiraImportService.prototype.fetchUsers = function(projectId) {\n return this.resources.jiraImporter.listUsers(this.url, this.token, projectId).then((function(_this) {\n return function(users) {\n return _this.projectUsers = users;\n };\n })(this));\n };\n\n JiraImportService.prototype.importProject = function(name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType) {\n return this.resources.jiraImporter.importProject(this.url, this.token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType);\n };\n\n JiraImportService.prototype.getAuthUrl = function(url) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.jiraImporter.getAuthUrl(url).then(function(response) {\n _this.authUrl = response.data.url;\n return resolve(_this.authUrl);\n }, function(err) {\n return reject(err.data._error_message);\n });\n };\n })(this));\n };\n\n JiraImportService.prototype.authorize = function(oauth_verifier) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.jiraImporter.authorize(oauth_verifier).then((function(response) {\n _this.token = response.data.token;\n _this.url = response.data.url;\n return resolve(response.data);\n }), function(error) {\n return reject(new Error(error.status));\n });\n };\n })(this));\n };\n\n return JiraImportService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgJiraImportService\", JiraImportService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/select-import-user-lightbox/select-import-user-lightbox.controller.coffee\n */\n\n(function() {\n var SelectImportUserLightboxCtrl;\n\n SelectImportUserLightboxCtrl = (function() {\n SelectImportUserLightboxCtrl.$inject = [];\n\n function SelectImportUserLightboxCtrl() {}\n\n SelectImportUserLightboxCtrl.prototype.start = function() {\n this.mode = 'search';\n return this.invalid = false;\n };\n\n SelectImportUserLightboxCtrl.prototype.assignUser = function() {\n return this.onSelectUser({\n user: this.user,\n taigaUser: this.userEmail\n });\n };\n\n SelectImportUserLightboxCtrl.prototype.selectUser = function(taigaUser) {\n return this.onSelectUser({\n user: this.user,\n taigaUser: Immutable.fromJS(taigaUser)\n });\n };\n\n return SelectImportUserLightboxCtrl;\n\n })();\n\n angular.module('taigaProjects').controller('SelectImportUserLightboxCtrl', SelectImportUserLightboxCtrl);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/select-import-user-lightbox/select-import-user-lightbox.directive.coffee\n */\n\n(function() {\n var SelectImportUserLightboxDirective;\n\n SelectImportUserLightboxDirective = function(lightboxService, lightboxKeyboardNavigationService) {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return scope.$watch('vm.visible', function(visible) {\n if (visible && !el.hasClass('open')) {\n ctrl.start();\n return lightboxService.open(el, null, scope.vm.onClose).then(function() {\n el.find('input').focus();\n return lightboxKeyboardNavigationService.init(el);\n });\n } else if (!visible && el.hasClass('open')) {\n return lightboxService.close(el).then(function() {\n ctrl.userEmail = '';\n return ctrl.usersSearch = '';\n });\n }\n });\n };\n return {\n controller: \"SelectImportUserLightboxCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n user: '<',\n visible: '<',\n onClose: '&',\n onSelectUser: '&',\n selectableUsers: '<',\n isPrivate: '<',\n limitMembersPrivateProject: '<',\n limitMembersPublicProject: '<',\n displayEmailSelector: '<'\n },\n templateUrl: 'projects/create/select-import-user-lightbox/select-import-user-lightbox.html',\n link: link\n };\n };\n\n SelectImportUserLightboxDirective.$inject = ['lightboxService', 'lightboxKeyboardNavigationService'];\n\n angular.module(\"taigaProjects\").directive(\"tgSelectImportUserLightbox\", SelectImportUserLightboxDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import-project-form/trello-import-project-form.controller.coffee\n */\n\n(function() {\n var TrelloImportProjectFormController;\n\n TrelloImportProjectFormController = (function() {\n TrelloImportProjectFormController.$inject = [\"tgCurrentUserService\"];\n\n function TrelloImportProjectFormController(currentUserService) {\n this.currentUserService = currentUserService;\n this.canCreatePublicProjects = this.currentUserService.canCreatePublicProjects();\n this.canCreatePrivateProjects = this.currentUserService.canCreatePrivateProjects();\n this.projectForm = this.project.toJS();\n this.platformName = \"Trello\";\n this.projectForm.is_private = false;\n this.projectForm.keepExternalReference = false;\n if (!this.canCreatePublicProjects.valid && this.canCreatePrivateProjects.valid) {\n this.projectForm.is_private = true;\n }\n }\n\n TrelloImportProjectFormController.prototype.checkUsersLimit = function() {\n this.limitMembersPrivateProject = this.currentUserService.canAddMembersPrivateProject(this.members.size);\n return this.limitMembersPublicProject = this.currentUserService.canAddMembersPublicProject(this.members.size);\n };\n\n TrelloImportProjectFormController.prototype.saveForm = function() {\n return this.onSaveProjectDetails({\n project: Immutable.fromJS(this.projectForm)\n });\n };\n\n TrelloImportProjectFormController.prototype.canCreateProject = function() {\n if (this.projectForm.is_private) {\n return this.canCreatePrivateProjects.valid;\n } else {\n return this.canCreatePublicProjects.valid;\n }\n };\n\n TrelloImportProjectFormController.prototype.isDisabled = function() {\n return !this.canCreateProject();\n };\n\n return TrelloImportProjectFormController;\n\n })();\n\n angular.module('taigaProjects').controller('TrelloImportProjectFormCtrl', TrelloImportProjectFormController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import-project-form/trello-import-project-form.directive.coffee\n */\n\n(function() {\n var TrelloImportProjectFormDirective;\n\n TrelloImportProjectFormDirective = function() {\n return {\n link: function(scope, elm, attr, ctrl) {\n return scope.$watch('vm.members', ctrl.checkUsersLimit.bind(ctrl));\n },\n templateUrl: \"projects/create/trello-import/trello-import-project-form/trello-import-project-form.html\",\n controller: \"TrelloImportProjectFormCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n members: '<',\n project: '<',\n onSaveProjectDetails: '&',\n onCancelForm: '&',\n fetchingUsers: '<'\n }\n };\n };\n\n TrelloImportProjectFormDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgTrelloImportProjectForm\", TrelloImportProjectFormDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import.controller.coffee\n */\n\n(function() {\n var TrelloImportController;\n\n TrelloImportController = (function() {\n TrelloImportController.$inject = ['tgTrelloImportService', '$tgConfirm', '$translate', 'tgImportProjectService'];\n\n function TrelloImportController(trelloImportService, confirm, translate, importProjectService) {\n this.trelloImportService = trelloImportService;\n this.confirm = confirm;\n this.translate = translate;\n this.importProjectService = importProjectService;\n this.project = null;\n taiga.defineImmutableProperty(this, 'projects', (function(_this) {\n return function() {\n return _this.trelloImportService.projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'members', (function(_this) {\n return function() {\n return _this.trelloImportService.projectUsers;\n };\n })(this));\n }\n\n TrelloImportController.prototype.startProjectSelector = function() {\n return this.trelloImportService.fetchProjects().then((function(_this) {\n return function() {\n return _this.step = 'project-select-trello';\n };\n })(this));\n };\n\n TrelloImportController.prototype.onSelectProject = function(project) {\n this.step = 'project-form-trello';\n this.project = project;\n this.fetchingUsers = true;\n return this.trelloImportService.fetchUsers(this.project.get('id')).then((function(_this) {\n return function() {\n return _this.fetchingUsers = false;\n };\n })(this));\n };\n\n TrelloImportController.prototype.onSaveProjectDetails = function(project) {\n this.project = project;\n return this.step = 'project-members-trello';\n };\n\n TrelloImportController.prototype.onCancelMemberSelection = function() {\n return this.step = 'project-form-trello';\n };\n\n TrelloImportController.prototype.startImport = function(users) {\n var loader, promise;\n loader = this.confirm.loader(this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.TITLE'), this.translate.instant('PROJECT.IMPORT.IN_PROGRESS.DESCRIPTION'), true);\n loader.start();\n promise = this.trelloImportService.importProject(this.project.get('name'), this.project.get('description'), this.project.get('id'), users, this.project.get('keepExternalReference'), this.project.get('is_private'));\n return this.importProjectService.importPromise(promise).then((function(_this) {\n return function() {\n return loader.stop();\n };\n })(this));\n };\n\n TrelloImportController.prototype.submitUserSelection = function(users) {\n this.startImport(users);\n return null;\n };\n\n return TrelloImportController;\n\n })();\n\n angular.module('taigaProjects').controller('TrelloImportCtrl', TrelloImportController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import.directive.coffee\n */\n\n(function() {\n var TrelloImportDirective;\n\n TrelloImportDirective = function() {\n return {\n link: function(scope, elm, attrs, ctrl) {\n return ctrl.startProjectSelector();\n },\n templateUrl: \"projects/create/trello-import/trello-import.html\",\n controller: \"TrelloImportCtrl\",\n controllerAs: \"vm\",\n bindToController: true,\n scope: {\n onCancel: '&'\n }\n };\n };\n\n TrelloImportDirective.$inject = [];\n\n angular.module(\"taigaProjects\").directive(\"tgTrelloImport\", TrelloImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/trello-import/trello-import.service.coffee\n */\n\n(function() {\n var TrelloImportService,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n TrelloImportService = (function(superClass) {\n extend(TrelloImportService, superClass);\n\n TrelloImportService.$inject = ['tgResources'];\n\n function TrelloImportService(resources) {\n this.resources = resources;\n this.projects = Immutable.List();\n this.projectUsers = Immutable.List();\n this.token = null;\n }\n\n TrelloImportService.prototype.setToken = function(token) {\n return this.token = token;\n };\n\n TrelloImportService.prototype.fetchProjects = function() {\n return this.resources.trelloImporter.listProjects(this.token).then((function(_this) {\n return function(projects) {\n return _this.projects = projects;\n };\n })(this));\n };\n\n TrelloImportService.prototype.fetchUsers = function(projectId) {\n return this.resources.trelloImporter.listUsers(this.token, projectId).then((function(_this) {\n return function(users) {\n return _this.projectUsers = users;\n };\n })(this));\n };\n\n TrelloImportService.prototype.importProject = function(name, description, projectId, userBindings, keepExternalReference, isPrivate) {\n return this.resources.trelloImporter.importProject(this.token, name, description, projectId, userBindings, keepExternalReference, isPrivate);\n };\n\n TrelloImportService.prototype.getAuthUrl = function() {\n return new Promise((function(_this) {\n return function(resolve) {\n return _this.resources.trelloImporter.getAuthUrl().then(function(response) {\n _this.authUrl = response.data.url;\n return resolve(_this.authUrl);\n });\n };\n })(this));\n };\n\n TrelloImportService.prototype.authorize = function(verifyCode) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n return _this.resources.trelloImporter.authorize(verifyCode).then((function(response) {\n _this.token = response.data.token;\n return resolve(_this.token);\n }), function(error) {\n return reject(new Error(error.status));\n });\n };\n })(this));\n };\n\n return TrelloImportService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgTrelloImportService\", TrelloImportService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/create/warning-user-import-lightbox/warning-user-import-lightbox.directive.coffee\n */\n\n(function() {\n var WarningUserImportDirective;\n\n WarningUserImportDirective = function(lightboxService, lightboxKeyboardNavigationService) {\n return {\n link: function(scope, el, attr) {\n return scope.$watch('visible', function(visible) {\n if (visible && !el.hasClass('open')) {\n return lightboxService.open(el, scope.onClose).then(function() {\n el.find('input').focus();\n return lightboxKeyboardNavigationService.init(el);\n });\n } else if (!visible && el.hasClass('open')) {\n return lightboxService.close(el);\n }\n });\n },\n templateUrl: \"projects/create/warning-user-import-lightbox/warning-user-import-lightbox.html\",\n scope: {\n visible: '<',\n onClose: '&',\n onConfirm: '&'\n }\n };\n };\n\n WarningUserImportDirective.$inject = ['lightboxService', 'lightboxKeyboardNavigationService'];\n\n angular.module(\"taigaProjects\").directive(\"tgWarningUserImportLightbox\", WarningUserImportDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/listing/projects-listing.controller.coffee\n */\n\n(function() {\n var ProjectsListingController;\n\n ProjectsListingController = (function() {\n ProjectsListingController.$inject = [\"tgCurrentUserService\"];\n\n function ProjectsListingController(currentUserService) {\n this.currentUserService = currentUserService;\n taiga.defineImmutableProperty(this, \"projects\", (function(_this) {\n return function() {\n return _this.currentUserService.projects.get(\"all\");\n };\n })(this));\n }\n\n return ProjectsListingController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ProjectsListing\", ProjectsListingController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2017 Taiga Agile LLC \n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: project-router.controller.coffee\n */\n\n(function() {\n var ProjectRouterController;\n\n ProjectRouterController = (function() {\n ProjectRouterController.$inject = [\"$routeParams\", \"$location\", \"tgProjectService\", \"$tgResources\", \"$tgSections\"];\n\n function ProjectRouterController(routeParams, location, projectService, rs, tgSections) {\n this.routeParams = routeParams;\n this.location = location;\n this.projectService = projectService;\n this.rs = rs;\n this.tgSections = tgSections;\n this.getProjectHomepage().then((function(_this) {\n return function(section) {\n if (section) {\n return _this.location.url(\"project/\" + _this.routeParams.pslug + \"/\" + section);\n } else {\n return _this.gotoDefaultProjectHomepage();\n }\n };\n })(this)).then(null, function() {\n return this.gotoDefaultProjectHomepage();\n });\n }\n\n ProjectRouterController.prototype.gotoDefaultProjectHomepage = function() {\n return this.location.url(\"project/\" + this.routeParams.pslug + \"/timeline\");\n };\n\n ProjectRouterController.prototype.getProjectHomepage = function() {\n var project;\n project = this.projectService.project.toJS();\n return this.rs.userProjectSettings.list({\n project: project.id\n }).then((function(_this) {\n return function(userProjectSettings) {\n var settings;\n settings = _.find(userProjectSettings, {\n \"project\": project.id\n });\n if (!settings) {\n return;\n }\n return _this.tgSections.getPath(project.slug, settings.homepage);\n };\n })(this));\n };\n\n return ProjectRouterController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"ProjectRouter\", ProjectRouterController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/project/project.controller.coffee\n */\n\n(function() {\n var ProjectController;\n\n ProjectController = (function() {\n ProjectController.$inject = [\"$routeParams\", \"tgAppMetaService\", \"$tgAuth\", \"$translate\", \"tgProjectService\"];\n\n function ProjectController(routeParams, appMetaService, auth, translate, projectService) {\n this.routeParams = routeParams;\n this.appMetaService = appMetaService;\n this.auth = auth;\n this.translate = translate;\n this.projectService = projectService;\n this.user = this.auth.userData;\n taiga.defineImmutableProperty(this, \"project\", (function(_this) {\n return function() {\n return _this.projectService.project;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"members\", (function(_this) {\n return function() {\n return _this.projectService.activeMembers;\n };\n })(this));\n this.appMetaService.setfn(this._setMeta.bind(this));\n }\n\n ProjectController.prototype._setMeta = function() {\n var ctx;\n if (!this.project) {\n return null;\n }\n ctx = {\n projectName: this.project.get(\"name\")\n };\n return {\n title: this.translate.instant(\"PROJECT.PAGE_TITLE\", ctx),\n description: this.project.get(\"description\")\n };\n };\n\n return ProjectController;\n\n })();\n\n angular.module(\"taigaProjects\").controller(\"Project\", ProjectController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/projects.service.coffee\n */\n\n(function() {\n var ProjectsService, groupBy, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n ProjectsService = (function(superClass) {\n extend(ProjectsService, superClass);\n\n ProjectsService.$inject = [\"tgResources\", \"$projectUrl\"];\n\n function ProjectsService(rs, projectUrl) {\n this.rs = rs;\n this.projectUrl = projectUrl;\n }\n\n ProjectsService.prototype.create = function(data) {\n return this.rs.projects.create(data);\n };\n\n ProjectsService.prototype.duplicate = function(projectId, data) {\n return this.rs.projects.duplicate(projectId, data);\n };\n\n ProjectsService.prototype.getProjectBySlug = function(projectSlug) {\n return this.rs.projects.getProjectBySlug(projectSlug).then((function(_this) {\n return function(project) {\n return _this._decorate(project);\n };\n })(this));\n };\n\n ProjectsService.prototype.getProjectStats = function(projectId) {\n return this.rs.projects.getProjectStats(projectId);\n };\n\n ProjectsService.prototype.getProjectsByUserId = function(userId, paginate) {\n return this.rs.projects.getProjectsByUserId(userId, paginate).then((function(_this) {\n return function(projects) {\n return projects.map(_this._decorate.bind(_this));\n };\n })(this));\n };\n\n ProjectsService.prototype._decorate = function(project) {\n var url;\n url = this.projectUrl.get(project.toJS());\n project = project.set(\"url\", url);\n return project;\n };\n\n ProjectsService.prototype.bulkUpdateProjectsOrder = function(sortData) {\n return this.rs.projects.bulkUpdateOrder(sortData);\n };\n\n ProjectsService.prototype.transferValidateToken = function(projectId, token) {\n return this.rs.projects.transferValidateToken(projectId, token);\n };\n\n ProjectsService.prototype.transferAccept = function(projectId, token, reason) {\n return this.rs.projects.transferAccept(projectId, token, reason);\n };\n\n ProjectsService.prototype.transferReject = function(projectId, token, reason) {\n return this.rs.projects.transferReject(projectId, token, reason);\n };\n\n return ProjectsService;\n\n })(taiga.Service);\n\n angular.module(\"taigaProjects\").service(\"tgProjectsService\", ProjectsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/transfer/cant-own-project-explanation.directive.coffee\n */\n\n(function() {\n var CantOwnProjectExplanationDirective;\n\n CantOwnProjectExplanationDirective = function() {\n return {\n templateUrl: \"projects/transfer/cant-own-project-explanation.html\"\n };\n };\n\n angular.module(\"taigaProjects\").directive(\"tgCantOwnProjectExplanation\", CantOwnProjectExplanationDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/transfer/transfer-project.controller.coffee\n */\n\n(function() {\n var TransferProject, module;\n\n module = angular.module('taigaProjects');\n\n TransferProject = (function() {\n TransferProject.$inject = [\"$routeParams\", \"tgProjectsService\", \"$location\", \"$tgAuth\", \"tgCurrentUserService\", \"$tgNavUrls\", \"$translate\", \"$tgConfirm\", \"tgErrorHandlingService\"];\n\n function TransferProject(routeParams, projectService, location, authService, currentUserService, navUrls, translate, confirmService, errorHandlingService) {\n this.routeParams = routeParams;\n this.projectService = projectService;\n this.location = location;\n this.authService = authService;\n this.currentUserService = currentUserService;\n this.navUrls = navUrls;\n this.translate = translate;\n this.confirmService = confirmService;\n this.errorHandlingService = errorHandlingService;\n }\n\n TransferProject.prototype.initialize = function() {\n this.projectId = this.project.get(\"id\");\n this.token = this.routeParams.token;\n this.showAddComment = false;\n return this._refreshUserData();\n };\n\n TransferProject.prototype._validateToken = function() {\n return this.projectService.transferValidateToken(this.projectId, this.token).then(null, (function(_this) {\n return function(data, status) {\n return _this.errorHandlingService.notfound();\n };\n })(this));\n };\n\n TransferProject.prototype._refreshUserData = function() {\n return this.authService.refresh().then((function(_this) {\n return function() {\n _this._validateToken();\n _this._setProjectData();\n return _this._checkOwnerData();\n };\n })(this));\n };\n\n TransferProject.prototype._setProjectData = function() {\n return this.canBeOwnedByUser = this.currentUserService.canOwnProject(this.project);\n };\n\n TransferProject.prototype._checkOwnerData = function() {\n var currentUser, maxMemberships;\n currentUser = this.currentUserService.getUser();\n if (this.project.get('is_private')) {\n this.ownerMessage = 'ADMIN.PROJECT_TRANSFER.OWNER_MESSAGE.PRIVATE';\n this.maxProjects = currentUser.get('max_private_projects');\n if (this.maxProjects === null) {\n this.maxProjects = this.translate.instant('ADMIN.PROJECT_TRANSFER.UNLIMITED_PROJECTS');\n }\n this.currentProjects = currentUser.get('total_private_projects');\n maxMemberships = currentUser.get('max_memberships_private_projects');\n } else {\n this.ownerMessage = 'ADMIN.PROJECT_TRANSFER.OWNER_MESSAGE.PUBLIC';\n this.maxProjects = currentUser.get('max_public_projects');\n if (this.maxProjects === null) {\n this.maxProjects = this.translate.instant('ADMIN.PROJECT_TRANSFER.UNLIMITED_PROJECTS');\n }\n this.currentProjects = currentUser.get('total_public_projects');\n maxMemberships = currentUser.get('max_memberships_public_projects');\n }\n return this.validNumberOfMemberships = maxMemberships === null || this.project.get('total_memberships') <= maxMemberships;\n };\n\n TransferProject.prototype.transferAccept = function(token, reason) {\n this.loadingAccept = true;\n return this.projectService.transferAccept(this.project.get(\"id\"), token, reason).then((function(_this) {\n return function() {\n var newUrl;\n newUrl = _this.navUrls.resolve(\"project-admin-project-profile-details\", {\n project: _this.project.get(\"slug\")\n });\n _this.loadingAccept = false;\n _this.location.path(newUrl);\n _this.confirmService.notify(\"success\", _this.translate.instant(\"ADMIN.PROJECT_TRANSFER.ACCEPTED_PROJECT_OWNERNSHIP\"), '', 5000);\n };\n })(this));\n };\n\n TransferProject.prototype.transferReject = function(token, reason) {\n this.loadingReject = true;\n return this.projectService.transferReject(this.project.get(\"id\"), token, reason).then((function(_this) {\n return function() {\n var newUrl;\n newUrl = _this.navUrls.resolve(\"home\", {\n project: _this.project.get(\"slug\")\n });\n _this.loadingReject = false;\n _this.location.path(newUrl);\n _this.confirmService.notify(\"success\", _this.translate.instant(\"ADMIN.PROJECT_TRANSFER.REJECTED_PROJECT_OWNERNSHIP\"), '', 5000);\n };\n })(this));\n };\n\n TransferProject.prototype.addComment = function() {\n return this.showAddComment = true;\n };\n\n TransferProject.prototype.hideComment = function() {\n this.showAddComment = false;\n return this.reason = '';\n };\n\n return TransferProject;\n\n })();\n\n module.controller(\"TransferProjectController\", TransferProject);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: projects/transfer/transfer-project.directive.coffee\n */\n\n(function() {\n var TransferProjectDirective, module;\n\n module = angular.module('taigaProjects');\n\n TransferProjectDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return ctrl.initialize();\n };\n return {\n link: link,\n scope: {},\n bindToController: {\n project: \"=\"\n },\n templateUrl: \"projects/transfer/transfer-project.html\",\n controller: 'TransferProjectController',\n controllerAs: 'vm'\n };\n };\n\n module.directive('tgTransferProject', TransferProjectDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/attachments-resource.service.coffee\n */\n\n(function() {\n var Resource, module, sizeFormat, taiga;\n\n taiga = this.taiga;\n\n sizeFormat = this.taiga.sizeFormat;\n\n Resource = function(urlsService, http, config, $rootScope, $q, storage) {\n var service;\n service = {};\n service.list = function(type, objectId, projectId) {\n var httpOptions, params, url, urlname;\n urlname = \"attachments/\" + type;\n params = {\n object_id: objectId,\n project: projectId\n };\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n url = urlsService.resolve(urlname);\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service[\"delete\"] = function(type, id) {\n var url, urlname;\n urlname = \"attachments/\" + type;\n url = urlsService.resolve(urlname) + (\"/\" + id);\n return http[\"delete\"](url);\n };\n service.patch = function(type, id, patch) {\n var url, urlname;\n urlname = \"attachments/\" + type;\n url = urlsService.resolve(urlname) + (\"/\" + id);\n return http.patch(url, patch);\n };\n service.create = function(type, projectId, objectId, file, from_comment) {\n var data, defered, maxFileSize, response, token, uploadComplete, uploadFailed, uploadProgress, url, urlname, xhr;\n urlname = \"attachments/\" + type;\n url = urlsService.resolve(urlname);\n defered = $q.defer();\n if (file === void 0) {\n defered.reject(null);\n return defered.promise;\n }\n maxFileSize = config.get(\"maxUploadFileSize\", null);\n if (maxFileSize && file.size > maxFileSize) {\n response = {\n status: 413,\n data: {\n _error_message: \"'\" + file.name + \"' (\" + (sizeFormat(file.size)) + \") is too heavy for our oompa loompas, try it with a smaller than (\" + (sizeFormat(maxFileSize)) + \")\"\n }\n };\n defered.reject(response);\n return defered.promise;\n }\n uploadProgress = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n file.status = \"in-progress\";\n file.size = sizeFormat(evt.total);\n file.progressMessage = \"upload \" + (sizeFormat(evt.loaded)) + \" of \" + (sizeFormat(evt.total));\n return file.progressPercent = (Math.round((evt.loaded / evt.total) * 100)) + \"%\";\n });\n };\n })(this);\n uploadComplete = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n var attachment, ref, status;\n file.status = \"done\";\n status = evt.target.status;\n try {\n attachment = JSON.parse(evt.target.responseText);\n } catch (error) {\n attachment = {};\n }\n if (status >= 200 && status < 400) {\n attachment = Immutable.fromJS(attachment);\n return defered.resolve(attachment);\n } else {\n response = {\n status: status,\n data: {\n _error_message: (ref = data['attached_file']) != null ? ref[0] : void 0\n }\n };\n return defered.reject(response);\n }\n });\n };\n })(this);\n uploadFailed = (function(_this) {\n return function(evt) {\n return $rootScope.$apply(function() {\n file.status = \"error\";\n return defered.reject(\"fail\");\n });\n };\n })(this);\n data = new FormData();\n data.append(\"project\", projectId);\n data.append(\"object_id\", objectId);\n data.append(\"attached_file\", file);\n data.append(\"from_comment\", from_comment);\n xhr = new XMLHttpRequest();\n xhr.upload.addEventListener(\"progress\", uploadProgress, false);\n xhr.addEventListener(\"load\", uploadComplete, false);\n xhr.addEventListener(\"error\", uploadFailed, false);\n token = storage.get('token');\n xhr.open(\"POST\", url);\n xhr.setRequestHeader(\"Authorization\", \"Bearer \" + token);\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send(data);\n return defered.promise;\n };\n return function() {\n return {\n \"attachments\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\", \"$tgConfig\", \"$rootScope\", \"$q\", \"$tgStorage\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgAttachmentsResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/epics-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.listInAllProjects = function(params) {\n var httpOptions, url;\n url = urlsService.resolve(\"epics\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.list = function(projectId, page) {\n var params, url;\n if (page == null) {\n page = 0;\n }\n url = urlsService.resolve(\"epics\");\n params = {\n project: projectId,\n page: page\n };\n return http.get(url, params).then(function(result) {\n return {\n list: Immutable.fromJS(result.data),\n headers: result.headers\n };\n });\n };\n service.patch = function(id, patch) {\n var url;\n url = urlsService.resolve(\"epics\") + (\"/\" + id);\n return http.patch(url, patch).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.post = function(params) {\n var url;\n url = urlsService.resolve(\"epics\");\n return http.post(url, params).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.reorder = function(id, data, setOrders) {\n var options, url;\n url = urlsService.resolve(\"epics\") + (\"/\" + id);\n options = {\n \"headers\": {\n \"set-orders\": JSON.stringify(setOrders)\n }\n };\n return http.patch(url, data, null, options).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.addRelatedUserstory = function(epicId, userstoryId) {\n var params, url;\n url = urlsService.resolve(\"epic-related-userstories\", epicId);\n params = {\n user_story: userstoryId,\n epic: epicId\n };\n return http.post(url, params);\n };\n service.reorderRelatedUserstory = function(epicId, userstoryId, data, setOrders) {\n var options, url;\n url = urlsService.resolve(\"epic-related-userstories\", epicId) + (\"/\" + userstoryId);\n options = {\n \"headers\": {\n \"set-orders\": JSON.stringify(setOrders)\n }\n };\n return http.patch(url, data, null, options);\n };\n service.bulkCreateRelatedUserStories = function(epicId, projectId, bulk_userstories) {\n var params, url;\n url = urlsService.resolve(\"epic-related-userstories-bulk-create\", epicId);\n params = {\n bulk_userstories: bulk_userstories,\n project_id: projectId\n };\n return http.post(url, params);\n };\n service.deleteRelatedUserstory = function(epicId, userstoryId) {\n var url;\n url = urlsService.resolve(\"epic-related-userstories\", epicId) + (\"/\" + userstoryId);\n return http[\"delete\"](url);\n };\n return function() {\n return {\n \"epics\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgEpicsResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/external-apps-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.getApplicationToken = function(applicationId, state) {\n var url;\n url = urlsService.resolve(\"applications\");\n url = url + \"/\" + applicationId + \"/token?state=\" + state;\n return http.get(url).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.authorizeApplicationToken = function(applicationId, state) {\n var data, url;\n url = urlsService.resolve(\"application-tokens\");\n url = url + \"/authorize\";\n data = {\n \"state\": state,\n \"application\": applicationId\n };\n return http.post(url, data).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"externalapps\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgExternalAppsResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/history-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.getHistory = function(historyType, contentType, objectId, page) {\n var url;\n url = urlsService.resolve(\"history/\" + contentType);\n return http.get(url + \"/\" + objectId, {\n page: page,\n type: historyType\n }).then(function(result) {\n return {\n list: Immutable.fromJS(result.data),\n headers: result.headers\n };\n });\n };\n return function() {\n return {\n \"history\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgHistory\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/importers-resource.service.coffee\n */\n\n(function() {\n var AsanaResource, GithubResource, JiraResource, TrelloResource, module, taiga;\n\n taiga = this.taiga;\n\n TrelloResource = function(urlsService, http) {\n var service;\n service = {};\n service.getAuthUrl = function(url) {\n url = urlsService.resolve(\"importers-trello-auth-url\");\n return http.get(url);\n };\n service.authorize = function(verifyCode) {\n var url;\n url = urlsService.resolve(\"importers-trello-authorize\");\n return http.post(url, {\n code: verifyCode\n });\n };\n service.listProjects = function(token) {\n var url;\n url = urlsService.resolve(\"importers-trello-list-projects\");\n return http.post(url, {\n token: token\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.listUsers = function(token, projectId) {\n var url;\n url = urlsService.resolve(\"importers-trello-list-users\");\n return http.post(url, {\n token: token,\n project: projectId\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.importProject = function(token, name, description, projectId, userBindings, keepExternalReference, isPrivate) {\n var data, url;\n url = urlsService.resolve(\"importers-trello-import-project\");\n data = {\n token: token,\n name: name,\n description: description,\n project: projectId,\n users_bindings: userBindings.toJS(),\n keep_external_reference: keepExternalReference,\n is_private: isPrivate,\n template: \"kanban\"\n };\n return http.post(url, data);\n };\n return function() {\n return {\n \"trelloImporter\": service\n };\n };\n };\n\n TrelloResource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n JiraResource = function(urlsService, http) {\n var service;\n service = {};\n service.getAuthUrl = function(jira_url) {\n var url;\n url = urlsService.resolve(\"importers-jira-auth-url\") + \"?url=\" + jira_url;\n return http.get(url);\n };\n service.authorize = function(oauth_verifier) {\n var url;\n url = urlsService.resolve(\"importers-jira-authorize\");\n return http.post(url, {\n oauth_verifier: oauth_verifier\n });\n };\n service.listProjects = function(jira_url, token) {\n var url;\n url = urlsService.resolve(\"importers-jira-list-projects\");\n return http.post(url, {\n url: jira_url,\n token: token\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.listUsers = function(jira_url, token, projectId) {\n var url;\n url = urlsService.resolve(\"importers-jira-list-users\");\n return http.post(url, {\n url: jira_url,\n token: token,\n project: projectId\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.importProject = function(jira_url, token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType, importerType) {\n var data, projectTemplate, url;\n url = urlsService.resolve(\"importers-jira-import-project\");\n projectTemplate = \"kanban\";\n if (projectType !== \"kanban\") {\n projectTemplate = \"scrum\";\n }\n data = {\n url: jira_url,\n token: token,\n name: name,\n description: description,\n project: projectId,\n users_bindings: userBindings.toJS(),\n keep_external_reference: keepExternalReference,\n is_private: isPrivate,\n project_type: projectType,\n importer_type: importerType,\n template: projectTemplate\n };\n return http.post(url, data);\n };\n return function() {\n return {\n \"jiraImporter\": service\n };\n };\n };\n\n JiraResource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n GithubResource = function(urlsService, http) {\n var service;\n service = {};\n service.getAuthUrl = function(callbackUri) {\n var url;\n url = urlsService.resolve(\"importers-github-auth-url\") + \"?uri=\" + callbackUri;\n return http.get(url);\n };\n service.authorize = function(code) {\n var url;\n url = urlsService.resolve(\"importers-github-authorize\");\n return http.post(url, {\n code: code\n });\n };\n service.listProjects = function(token) {\n var url;\n url = urlsService.resolve(\"importers-github-list-projects\");\n return http.post(url, {\n token: token\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.listUsers = function(token, projectId) {\n var url;\n url = urlsService.resolve(\"importers-github-list-users\");\n return http.post(url, {\n token: token,\n project: projectId\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.importProject = function(token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) {\n var data, url;\n url = urlsService.resolve(\"importers-github-import-project\");\n data = {\n token: token,\n name: name,\n description: description,\n project: projectId,\n users_bindings: userBindings.toJS(),\n keep_external_reference: keepExternalReference,\n is_private: isPrivate,\n template: projectType\n };\n return http.post(url, data);\n };\n return function() {\n return {\n \"githubImporter\": service\n };\n };\n };\n\n GithubResource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n AsanaResource = function(urlsService, http) {\n var service;\n service = {};\n service.getAuthUrl = function() {\n var url;\n url = urlsService.resolve(\"importers-asana-auth-url\");\n return http.get(url);\n };\n service.authorize = function(code) {\n var url;\n url = urlsService.resolve(\"importers-asana-authorize\");\n return http.post(url, {\n code: code\n });\n };\n service.listProjects = function(token) {\n var url;\n url = urlsService.resolve(\"importers-asana-list-projects\");\n return http.post(url, {\n token: token\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.listUsers = function(token, projectId) {\n var url;\n url = urlsService.resolve(\"importers-asana-list-users\");\n return http.post(url, {\n token: token,\n project: projectId\n }).then(function(response) {\n return Immutable.fromJS(response.data);\n });\n };\n service.importProject = function(token, name, description, projectId, userBindings, keepExternalReference, isPrivate, projectType) {\n var data, url;\n url = urlsService.resolve(\"importers-asana-import-project\");\n data = {\n token: token,\n name: name,\n description: description,\n project: projectId,\n users_bindings: userBindings.toJS(),\n keep_external_reference: keepExternalReference,\n is_private: isPrivate,\n template: projectType\n };\n return http.post(url, data);\n };\n return function() {\n return {\n \"asanaImporter\": service\n };\n };\n };\n\n AsanaResource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgTrelloImportResource\", TrelloResource);\n\n module.factory(\"tgJiraImportResource\", JiraResource);\n\n module.factory(\"tgGithubImportResource\", GithubResource);\n\n module.factory(\"tgAsanaImportResource\", AsanaResource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/issues-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.listInAllProjects = function(params) {\n var httpOptions, url;\n url = urlsService.resolve(\"issues\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"issues\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgIssuesResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/projects-resource.service.coffee\n */\n\n(function() {\n var Resource, module, pagination;\n\n pagination = function() {};\n\n Resource = function(urlsService, http, paginateResponseService) {\n var service;\n service = {};\n service.create = function(data) {\n var url;\n url = urlsService.resolve('projects');\n return http.post(url, JSON.stringify(data)).then((function(_this) {\n return function(result) {\n return Immutable.fromJS(result.data);\n };\n })(this));\n };\n service.duplicate = function(projectId, data) {\n var members, params, url;\n url = urlsService.resolve(\"projects\");\n url = url + \"/\" + projectId + \"/duplicate\";\n members = data.users.map((function(_this) {\n return function(member) {\n return {\n \"id\": member\n };\n };\n })(this));\n params = {\n \"name\": data.name,\n \"description\": data.description,\n \"is_private\": data.is_private,\n \"users\": members\n };\n return http.post(url, params);\n };\n service.getProjects = function(params, pagination) {\n var httpOptions, url;\n if (params == null) {\n params = {};\n }\n if (pagination == null) {\n pagination = true;\n }\n url = urlsService.resolve(\"projects\");\n httpOptions = {};\n if (!pagination) {\n httpOptions = {\n headers: {\n \"x-lazy-pagination\": true\n }\n };\n }\n return http.get(url, params, httpOptions);\n };\n service.getProjectBySlug = function(projectSlug) {\n var url;\n url = urlsService.resolve(\"projects\");\n url = url + \"/by_slug?slug=\" + projectSlug;\n return http.get(url).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getProjectsByUserId = function(userId, paginate) {\n var httpOptions, params, url;\n if (paginate == null) {\n paginate = false;\n }\n url = urlsService.resolve(\"projects\");\n httpOptions = {};\n if (!paginate) {\n httpOptions.headers = {\n \"x-disable-pagination\": \"1\"\n };\n }\n params = {\n \"member\": userId,\n \"order_by\": \"user_order\"\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getProjectStats = function(projectId) {\n var url;\n url = urlsService.resolve(\"projects\");\n url = url + \"/\" + projectId;\n return http.get(url).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.bulkUpdateOrder = function(bulkData) {\n var url;\n url = urlsService.resolve(\"bulk-update-projects-order\");\n return http.post(url, bulkData);\n };\n service.getTimeline = function(projectId, page) {\n var params, url;\n params = {\n page: page,\n only_relevant: true\n };\n url = urlsService.resolve(\"timeline-project\");\n url = url + \"/\" + projectId;\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.likeProject = function(projectId) {\n var url;\n url = urlsService.resolve(\"project-like\", projectId);\n return http.post(url);\n };\n service.unlikeProject = function(projectId) {\n var url;\n url = urlsService.resolve(\"project-unlike\", projectId);\n return http.post(url);\n };\n service.watchProject = function(projectId, notifyLevel) {\n var data, url;\n data = {\n notify_level: notifyLevel,\n live_notify_level: notifyLevel\n };\n url = urlsService.resolve(\"project-watch\", projectId);\n return http.post(url, data);\n };\n service.unwatchProject = function(projectId) {\n var url;\n url = urlsService.resolve(\"project-unwatch\", projectId);\n return http.post(url);\n };\n service.contactProject = function(projectId, message) {\n var params, url;\n params = {\n project: projectId,\n comment: message\n };\n url = urlsService.resolve(\"project-contact\");\n return http.post(url, params);\n };\n service.transferValidateToken = function(projectId, token) {\n var data, url;\n data = {\n token: token\n };\n url = urlsService.resolve(\"project-transfer-validate-token\", projectId);\n return http.post(url, data);\n };\n service.transferAccept = function(projectId, token, reason) {\n var data, url;\n data = {\n token: token,\n reason: reason\n };\n url = urlsService.resolve(\"project-transfer-accept\", projectId);\n return http.post(url, data);\n };\n service.transferReject = function(projectId, token, reason) {\n var data, url;\n data = {\n token: token,\n reason: reason\n };\n url = urlsService.resolve(\"project-transfer-reject\", projectId);\n return http.post(url, data);\n };\n service.transferRequest = function(projectId) {\n var url;\n url = urlsService.resolve(\"project-transfer-request\", projectId);\n return http.post(url);\n };\n service.transferStart = function(projectId, userId, reason) {\n var data, url;\n data = {\n user: userId,\n reason: reason\n };\n url = urlsService.resolve(\"project-transfer-start\", projectId);\n return http.post(url, data);\n };\n return function() {\n return {\n \"projects\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\", \"tgPaginateResponseService\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgProjectsResources\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/resources.coffee\n */\n\n(function() {\n var Resources, services;\n\n services = [\"tgProjectsResources\", \"tgUserResources\", \"tgUsersResources\", \"tgUserstoriesResource\", \"tgTasksResource\", \"tgIssuesResource\", \"tgExternalAppsResource\", \"tgAttachmentsResource\", \"tgStatsResource\", \"tgHistory\", \"tgEpicsResource\", \"tgTrelloImportResource\", \"tgJiraImportResource\", \"tgGithubImportResource\", \"tgAsanaImportResource\"];\n\n Resources = function($injector) {\n var i, j, len, len1, ref, service, serviceFn, serviceName, serviceProperty;\n for (i = 0, len = services.length; i < len; i++) {\n serviceName = services[i];\n serviceFn = $injector.get(serviceName);\n service = $injector.invoke(serviceFn);\n ref = Object.keys(service);\n for (j = 0, len1 = ref.length; j < len1; j++) {\n serviceProperty = ref[j];\n if (this[serviceProperty]) {\n console.warn(\"repeated resource \" + serviceProperty);\n }\n this[serviceProperty] = service[serviceProperty];\n }\n }\n return this;\n };\n\n Resources.$inject = [\"$injector\"];\n\n angular.module(\"taigaResources2\").service(\"tgResources\", Resources);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/stats-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.discover = function(applicationId, state) {\n var url;\n url = urlsService.resolve(\"stats-discover\");\n return http.get(url).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"stats\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgStatsResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/tasks-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.listInAllProjects = function(params) {\n var httpOptions, url;\n url = urlsService.resolve(\"tasks\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"tasks\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgTasksResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/user-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http, paginateResponseService) {\n var service;\n service = {};\n service.getUserStorage = function(key) {\n var httpOptions, url;\n url = urlsService.resolve(\"user-storage\");\n if (key) {\n url += '/' + key;\n }\n httpOptions = {};\n return http.get(url, {}).then(function(response) {\n return response.data.value;\n });\n };\n service.setUserStorage = function(key, value) {\n var params, url;\n url = urlsService.resolve(\"user-storage\") + '/' + key;\n params = {\n key: key,\n value: value\n };\n return http.put(url, params);\n };\n service.createUserStorage = function(key, value) {\n var params, url;\n url = urlsService.resolve(\"user-storage\");\n params = {\n key: key,\n value: value\n };\n return http.post(url, params);\n };\n return function() {\n return {\n \"user\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgUserResources\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/users-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http, paginateResponseService) {\n var service;\n service = {};\n service.getUserByUsername = function(username) {\n var httpOptions, params, url;\n url = urlsService.resolve(\"by_username\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n params = {\n username: username\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getStats = function(userId) {\n var httpOptions, url;\n url = urlsService.resolve(\"user-stats\", userId);\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, {}, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getContacts = function(userId, excludeProjectId) {\n var httpOptions, params, url;\n url = urlsService.resolve(\"user-contacts\", userId);\n params = {};\n if (excludeProjectId != null) {\n params.exclude_project = excludeProjectId;\n }\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.getLiked = function(userId, page, type, q) {\n var params, url;\n url = urlsService.resolve(\"user-liked\", userId);\n params = {};\n if (page != null) {\n params.page = page;\n }\n if (type != null) {\n params.type = type;\n }\n if (q != null) {\n params.q = q;\n }\n params.only_relevant = true;\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getVoted = function(userId, page, type, q) {\n var params, url;\n url = urlsService.resolve(\"user-voted\", userId);\n params = {};\n if (page != null) {\n params.page = page;\n }\n if (type != null) {\n params.type = type;\n }\n if (q != null) {\n params.q = q;\n }\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getWatched = function(userId, page, type, q) {\n var params, url;\n url = urlsService.resolve(\"user-watched\", userId);\n params = {};\n if (page != null) {\n params.page = page;\n }\n if (type != null) {\n params.type = type;\n }\n if (q != null) {\n params.q = q;\n }\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getProfileTimeline = function(userId, page) {\n var params, url;\n params = {\n page: page\n };\n url = urlsService.resolve(\"timeline-profile\");\n url = url + \"/\" + userId;\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getUserTimeline = function(userId, page) {\n var params, url;\n params = {\n page: page,\n only_relevant: true\n };\n url = urlsService.resolve(\"timeline-user\");\n url = url + \"/\" + userId;\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n result = Immutable.fromJS(result);\n return paginateResponseService(result);\n });\n };\n service.getNotifications = function(userId, page, onlyUnread) {\n var params, url;\n params = {\n page: page\n };\n if (onlyUnread) {\n params['only_unread'] = true;\n }\n url = urlsService.resolve(\"notifications\");\n return http.get(url, params, {\n headers: {\n 'x-lazy-pagination': true\n }\n }).then(function(result) {\n var paginateResponse;\n result = Immutable.fromJS(result);\n paginateResponse = Immutable.Map({\n \"data\": result.get(\"data\").get(\"objects\"),\n \"next\": !!result.get(\"headers\")(\"x-pagination-next\"),\n \"prev\": !!result.get(\"headers\")(\"x-pagination-prev\"),\n \"current\": result.get(\"headers\")(\"x-pagination-current\"),\n \"count\": result.get(\"headers\")(\"x-pagination-count\"),\n \"total\": result.get(\"data\").get(\"total\")\n });\n return paginateResponse;\n });\n };\n service.setNotificationAsRead = function(notificationId) {\n var url;\n url = (urlsService.resolve(\"notifications\")) + \"/\" + notificationId + \"/set-as-read\";\n return http.patch(url).then(function(result) {\n return result;\n });\n };\n service.setNotificationsAsRead = function() {\n var url;\n url = (urlsService.resolve(\"notifications\")) + \"/set-as-read\";\n return http.post(url).then(function(result) {\n return result;\n });\n };\n return function() {\n return {\n \"users\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\", \"tgPaginateResponseService\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgUsersResources\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: resources/userstories-resource.service.coffee\n */\n\n(function() {\n var Resource, module;\n\n Resource = function(urlsService, http) {\n var service;\n service = {};\n service.listInAllProjects = function(params, pagination) {\n var httpOptions, url;\n if (pagination == null) {\n pagination = false;\n }\n url = urlsService.resolve(\"userstories\");\n if (!pagination) {\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n }\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.listAllInProject = function(projectId) {\n var httpOptions, params, url;\n url = urlsService.resolve(\"userstories\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n params = {\n project: projectId\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n service.listInEpic = function(epicIid) {\n var httpOptions, params, url;\n url = urlsService.resolve(\"userstories\");\n httpOptions = {\n headers: {\n \"x-disable-pagination\": \"1\"\n }\n };\n params = {\n epic: epicIid,\n order_by: 'epic_order',\n include_tasks: true\n };\n return http.get(url, params, httpOptions).then(function(result) {\n return Immutable.fromJS(result.data);\n });\n };\n return function() {\n return {\n \"userstories\": service\n };\n };\n };\n\n Resource.$inject = [\"$tgUrls\", \"$tgHttp\"];\n\n module = angular.module(\"taigaResources2\");\n\n module.factory(\"tgUserstoriesResource\", Resource);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/app-meta.service.coffee\n */\n\n(function() {\n var AppMetaService, taiga, truncate;\n\n taiga = this.taiga;\n\n truncate = taiga.truncate;\n\n AppMetaService = (function() {\n AppMetaService.$inject = [\"$rootScope\"];\n\n function AppMetaService(rootScope) {\n this.rootScope = rootScope;\n }\n\n AppMetaService.prototype._set = function(key, value) {\n var meta;\n if (!key) {\n return;\n }\n if (key === \"title\") {\n meta = $(\"head title\");\n if (meta.length === 0) {\n meta = $(\"\");\n $(\"head\").append(meta);\n }\n return meta.text(value || \"\");\n } else if (key.indexOf(\"og:\") === 0) {\n meta = $(\"head meta[property='\" + key + \"']\");\n if (meta.length === 0) {\n meta = $(\"\");\n $(\"head\").append(meta);\n }\n return meta.attr(\"content\", value || \"\");\n } else {\n meta = $(\"head meta[name='\" + key + \"']\");\n if (meta.length === 0) {\n meta = $(\"\");\n $(\"head\").append(meta);\n }\n return meta.attr(\"content\", value || \"\");\n }\n };\n\n AppMetaService.prototype.setTitle = function(title) {\n return this._set('title', title);\n };\n\n AppMetaService.prototype.setDescription = function(description) {\n return this._set(\"description\", truncate(description, 250));\n };\n\n AppMetaService.prototype.setTwitterMetas = function(title, description) {\n this._set(\"twitter:card\", \"summary\");\n this._set(\"twitter:site\", \"@taigaio\");\n this._set(\"twitter:title\", title);\n this._set(\"twitter:description\", truncate(description, 300));\n return this._set(\"twitter:image\", window.location.origin + \"/\" + window._version + \"/images/logo-color.png\");\n };\n\n AppMetaService.prototype.setOpenGraphMetas = function(title, description) {\n this._set(\"og:type\", \"object\");\n this._set(\"og:site_name\", \"Taiga - Love your projects\");\n this._set(\"og:title\", title);\n this._set(\"og:description\", truncate(description, 300));\n this._set(\"og:image\", window.location.origin + \"/\" + window._version + \"/images/logo-color.png\");\n return this._set(\"og:url\", window.location.href);\n };\n\n AppMetaService.prototype.setAll = function(title, description) {\n this.setTitle(title);\n this.setDescription(description);\n this.setTwitterMetas(title, description);\n return this.setOpenGraphMetas(title, description);\n };\n\n AppMetaService.prototype.addMobileViewport = function() {\n return $(\"head\").append(\"\");\n };\n\n AppMetaService.prototype.removeMobileViewport = function() {\n return $(\"head meta[name=\\\"viewport\\\"]\").remove();\n };\n\n AppMetaService.prototype.setfn = function(fn) {\n if (this.listener) {\n this._listener();\n }\n return this._listener = this.rootScope.$watchCollection(fn, (function(_this) {\n return function(metas) {\n if (metas) {\n _this.setAll(metas.title, metas.description);\n return _this._listener();\n }\n };\n })(this));\n };\n\n return AppMetaService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgAppMetaService\", AppMetaService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/attachments.service.coffee\n */\n\n(function() {\n var AttachmentsService, sizeFormat;\n\n sizeFormat = this.taiga.sizeFormat;\n\n AttachmentsService = (function() {\n AttachmentsService.$inject = [\"$tgConfirm\", \"$tgConfig\", \"$translate\", \"tgResources\"];\n\n function AttachmentsService(confirm, config, translate, rs) {\n this.confirm = confirm;\n this.config = config;\n this.translate = translate;\n this.rs = rs;\n this.maxFileSize = this.getMaxFileSize();\n if (this.maxFileSize) {\n this.maxFileSizeFormated = sizeFormat(this.maxFileSize);\n }\n }\n\n AttachmentsService.prototype.sizeError = function(file) {\n var message;\n message = this.translate.instant(\"ATTACHMENT.ERROR_MAX_SIZE_EXCEEDED\", {\n fileName: file.name,\n fileSize: sizeFormat(file.size),\n maxFileSize: this.maxFileSizeFormated\n });\n return this.confirm.notify(\"error\", message);\n };\n\n AttachmentsService.prototype.validate = function(file) {\n if (this.maxFileSize && file.size > this.maxFileSize) {\n this.sizeError(file);\n return false;\n }\n return true;\n };\n\n AttachmentsService.prototype.getMaxFileSize = function() {\n return this.config.get(\"maxUploadFileSize\", null);\n };\n\n AttachmentsService.prototype.list = function(type, objId, projectId) {\n return this.rs.attachments.list(type, objId, projectId).then((function(_this) {\n return function(attachments) {\n return attachments.sortBy(function(attachment) {\n return attachment.get('order');\n });\n };\n })(this));\n };\n\n AttachmentsService.prototype[\"delete\"] = function(type, id) {\n return this.rs.attachments[\"delete\"](type, id);\n };\n\n AttachmentsService.prototype.saveError = function(file, data) {\n var message;\n message = \"\";\n if (file) {\n message = this.translate.instant(\"ATTACHMENT.ERROR_UPLOAD_ATTACHMENT\", {\n fileName: file.name,\n errorMessage: data.data._error_message\n });\n }\n return this.confirm.notify(\"error\", message);\n };\n\n AttachmentsService.prototype.upload = function(file, objId, projectId, type, from_comment) {\n var promise;\n if (from_comment == null) {\n from_comment = false;\n }\n promise = this.rs.attachments.create(type, projectId, objId, file, from_comment);\n promise.then(null, this.saveError.bind(this, file));\n return promise;\n };\n\n AttachmentsService.prototype.patch = function(id, type, patch) {\n var promise;\n promise = this.rs.attachments.patch(type, id, patch);\n promise.then(null, this.saveError.bind(this, null));\n return promise;\n };\n\n return AttachmentsService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgAttachmentsService\", AttachmentsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/avatar.service.coffee\n */\n\n(function() {\n var AvatarService,\n modulo = function(a, b) { return (+a % (b = +b) + b) % b; };\n\n AvatarService = (function() {\n function AvatarService(config) {\n var COLORS, IMAGES;\n this.config = config;\n IMAGES = [\"/\" + window._version + \"/images/user-avatars/user-avatar-01.png\", \"/\" + window._version + \"/images/user-avatars/user-avatar-02.png\", \"/\" + window._version + \"/images/user-avatars/user-avatar-03.png\", \"/\" + window._version + \"/images/user-avatars/user-avatar-04.png\", \"/\" + window._version + \"/images/user-avatars/user-avatar-05.png\"];\n COLORS = [\"rgba( 178, 176, 204, 1 )\", \"rgba( 183, 203, 131, 1 )\", \"rgba( 210, 198, 139, 1 )\", \"rgba( 214, 161, 212, 1 )\", \"rgba( 247, 154, 154, 1 )\"];\n this.logos = _.cartesianProduct(IMAGES, COLORS);\n }\n\n AvatarService.prototype.getDefault = function(key) {\n var idx, logo;\n idx = modulo(murmurhash3_32_gc(key, 42), this.logos.length);\n logo = this.logos[idx];\n return {\n src: logo[0],\n color: logo[1]\n };\n };\n\n AvatarService.prototype.getUnnamed = function() {\n return {\n url: \"/\" + window._version + \"/images/unnamed.png\",\n username: ''\n };\n };\n\n AvatarService.prototype.getAvatar = function(user, type) {\n var avatarParamName, gravatar, logo, logoUrl, photo, root, username;\n if (!user) {\n return this.getUnnamed();\n }\n avatarParamName = 'photo';\n if (type === 'avatarBig') {\n avatarParamName = 'big_photo';\n }\n photo = null;\n if (user instanceof Immutable.Map) {\n gravatar = user.get('gravatar_id');\n photo = user.get(avatarParamName);\n username = \"@\" + (user.get('username'));\n } else {\n gravatar = user.gravatar_id;\n photo = user[avatarParamName];\n username = \"@\" + user.username;\n }\n if (!gravatar) {\n return this.getUnnamed();\n }\n if (photo) {\n return {\n url: photo,\n username: username\n };\n } else if (location.host.indexOf('localhost') !== -1 || !this.config.get(\"gravatar\", true)) {\n root = location.protocol + '//' + location.host;\n logo = this.getDefault(gravatar);\n return {\n url: root + logo.src,\n bg: logo.color,\n username: username\n };\n } else {\n root = location.protocol + '//' + location.host;\n logo = this.getDefault(gravatar);\n logoUrl = encodeURIComponent(root + logo.src);\n return {\n url: 'https://www.gravatar.com/avatar/' + gravatar + \"?s=200&d=\" + logoUrl,\n bg: logo.color,\n username: username\n };\n }\n };\n\n return AvatarService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgAvatarService\", [\"$tgConfig\", AvatarService]);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/check-permissions.service.coffee\n */\n\n(function() {\n var CheckPermissionsService, taiga;\n\n taiga = this.taiga;\n\n CheckPermissionsService = (function() {\n CheckPermissionsService.$inject = [\"tgProjectService\"];\n\n function CheckPermissionsService(projectService) {\n this.projectService = projectService;\n }\n\n CheckPermissionsService.prototype.check = function(permission) {\n if (!this.projectService.project) {\n return false;\n }\n return this.projectService.project.get('my_permissions').indexOf(permission) !== -1;\n };\n\n return CheckPermissionsService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgCheckPermissionsService\", CheckPermissionsService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/current-user.service.coffee\n */\n\n(function() {\n var CurrentUserService, groupBy, taiga;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n CurrentUserService = (function() {\n CurrentUserService.$inject = [\"tgProjectsService\", \"$tgStorage\", \"tgResources\"];\n\n function CurrentUserService(projectsService, storageService, rs) {\n this.projectsService = projectsService;\n this.storageService = storageService;\n this.rs = rs;\n this._user = null;\n this._projects = Immutable.Map();\n this._projectsById = Immutable.Map();\n this._joyride = null;\n taiga.defineImmutableProperty(this, \"projects\", (function(_this) {\n return function() {\n return _this._projects;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"projectsById\", (function(_this) {\n return function() {\n return _this._projectsById;\n };\n })(this));\n }\n\n CurrentUserService.prototype.isAuthenticated = function() {\n if (this.getUser() !== null) {\n return true;\n }\n return false;\n };\n\n CurrentUserService.prototype.getUser = function() {\n var userData;\n if (!this._user) {\n userData = this.storageService.get(\"userInfo\");\n if (userData) {\n userData = Immutable.fromJS(userData);\n this.setUser(userData);\n }\n }\n return this._user;\n };\n\n CurrentUserService.prototype.removeUser = function() {\n this._user = null;\n this._projects = Immutable.Map();\n this._projectsById = Immutable.Map();\n return this._joyride = null;\n };\n\n CurrentUserService.prototype.setUser = function(user) {\n this._user = user;\n return this._loadUserInfo();\n };\n\n CurrentUserService.prototype.bulkUpdateProjectsOrder = function(sortData) {\n return this.projectsService.bulkUpdateProjectsOrder(sortData).then((function(_this) {\n return function() {\n return _this.loadProjects();\n };\n })(this));\n };\n\n CurrentUserService.prototype.loadProjects = function() {\n return this.projectsService.getProjectsByUserId(this._user.get(\"id\")).then((function(_this) {\n return function(projects) {\n return _this.setProjects(projects);\n };\n })(this));\n };\n\n CurrentUserService.prototype.disableJoyRide = function(section) {\n if (!this.isAuthenticated()) {\n return;\n }\n if (section) {\n this._joyride[section] = false;\n } else {\n this._joyride = {\n backlog: false,\n kanban: false,\n dashboard: false\n };\n }\n return this.rs.user.setUserStorage('joyride', this._joyride);\n };\n\n CurrentUserService.prototype.loadJoyRideConfig = function() {\n return new Promise((function(_this) {\n return function(resolve) {\n if (_this._joyride !== null) {\n resolve(_this._joyride);\n return;\n }\n return _this.rs.user.getUserStorage('joyride').then(function(config) {\n _this._joyride = config;\n return resolve(_this._joyride);\n })[\"catch\"](function() {\n _this._joyride = {\n backlog: true,\n kanban: true,\n dashboard: true\n };\n _this.rs.user.createUserStorage('joyride', _this._joyride);\n return resolve(_this._joyride);\n });\n };\n })(this));\n };\n\n CurrentUserService.prototype._loadUserInfo = function() {\n return Promise.all([this.loadProjects()]);\n };\n\n CurrentUserService.prototype.setProjects = function(projects) {\n this._projects = this._projects.set(\"all\", projects);\n this._projects = this._projects.set(\"recents\", projects.slice(0, 10));\n this._projects = this._projects.set(\"unblocked\", projects.filter(function(project) {\n return project.toJS().blocked_code === null;\n }));\n this._projectsById = Immutable.fromJS(groupBy(projects.toJS(), function(p) {\n return p.id;\n }));\n return this.projects;\n };\n\n CurrentUserService.prototype.canCreatePrivateProjects = function() {\n var user;\n user = this.getUser();\n if (user.get('max_private_projects') !== null && user.get('total_private_projects') >= user.get('max_private_projects')) {\n return {\n valid: false,\n reason: 'max_private_projects',\n type: 'private_project',\n current: user.get('total_private_projects'),\n max: user.get('max_private_projects')\n };\n }\n return {\n valid: true\n };\n };\n\n CurrentUserService.prototype.canCreatePublicProjects = function() {\n var user;\n user = this.getUser();\n if (user.get('max_public_projects') !== null && user.get('total_public_projects') >= user.get('max_public_projects')) {\n return {\n valid: false,\n reason: 'max_public_projects',\n type: 'public_project',\n current: user.get('total_public_projects'),\n max: user.get('max_public_projects')\n };\n }\n return {\n valid: true\n };\n };\n\n CurrentUserService.prototype.canAddMembersPublicProject = function(totalMembers) {\n var user;\n user = this.getUser();\n if (user.get('max_memberships_public_projects') !== null && totalMembers > user.get('max_memberships_public_projects')) {\n return {\n valid: false,\n reason: 'max_members_public_projects',\n type: 'public_project',\n current: totalMembers,\n max: user.get('max_memberships_public_projects')\n };\n }\n return {\n valid: true\n };\n };\n\n CurrentUserService.prototype.canAddMembersPrivateProject = function(totalMembers) {\n var user;\n user = this.getUser();\n if (user.get('max_memberships_private_projects') !== null && totalMembers > user.get('max_memberships_private_projects')) {\n return {\n valid: false,\n reason: 'max_members_private_projects',\n type: 'private_project',\n current: totalMembers,\n max: user.get('max_memberships_private_projects')\n };\n }\n return {\n valid: true\n };\n };\n\n CurrentUserService.prototype.canOwnProject = function(project) {\n var membersResult, result, user;\n user = this.getUser();\n if (project.get('is_private')) {\n result = this.canCreatePrivateProjects();\n if (!result.valid) {\n return result;\n }\n membersResult = this.canAddMembersPrivateProject(project.get('total_memberships'));\n if (!membersResult.valid) {\n return membersResult;\n }\n } else {\n result = this.canCreatePublicProjects();\n if (!result.valid) {\n return result;\n }\n membersResult = this.canAddMembersPublicProject(project.get('total_memberships'));\n if (!membersResult.valid) {\n return membersResult;\n }\n }\n return {\n valid: true\n };\n };\n\n return CurrentUserService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgCurrentUserService\", CurrentUserService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/error-handling.service.coffee\n */\n\n(function() {\n var ErrorHandlingService, taiga;\n\n taiga = this.taiga;\n\n ErrorHandlingService = (function() {\n ErrorHandlingService.$inject = [\"$rootScope\"];\n\n function ErrorHandlingService(rootScope) {\n this.rootScope = rootScope;\n }\n\n ErrorHandlingService.prototype.init = function() {\n return this.rootScope.errorHandling = {};\n };\n\n ErrorHandlingService.prototype.notfound = function() {\n this.rootScope.errorHandling.showingError = true;\n return this.rootScope.errorHandling.notfound = true;\n };\n\n ErrorHandlingService.prototype.error = function() {\n this.rootScope.errorHandling.showingError = true;\n return this.rootScope.errorHandling.error = true;\n };\n\n ErrorHandlingService.prototype.permissionDenied = function() {\n this.rootScope.errorHandling.showingError = true;\n return this.rootScope.errorHandling.permissionDenied = true;\n };\n\n ErrorHandlingService.prototype.block = function() {\n this.rootScope.errorHandling.showingError = true;\n return this.rootScope.errorHandling.blocked = true;\n };\n\n return ErrorHandlingService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgErrorHandlingService\", ErrorHandlingService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/lightbox-factory.service.coffee\n */\n\n(function() {\n var LightboxFactory;\n\n LightboxFactory = (function() {\n LightboxFactory.$inject = [\"$rootScope\", \"$compile\"];\n\n function LightboxFactory(rootScope, compile) {\n this.rootScope = rootScope;\n this.compile = compile;\n }\n\n LightboxFactory.prototype.create = function(name, attrs, scopeAttrs) {\n var elm, html, scope;\n scope = this.rootScope.$new();\n scope = _.merge(scope, scopeAttrs);\n elm = $(\"
    \").attr(name, true).attr(\"tg-bind-scope\", true);\n if (attrs) {\n elm.attr(attrs);\n }\n elm.addClass(\"remove-on-close\");\n html = this.compile(elm)(scope);\n $(document.body).append(html);\n };\n\n return LightboxFactory;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgLightboxFactory\", LightboxFactory);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/paginate-response.service.coffee\n */\n\n(function() {\n var PaginateResponse;\n\n PaginateResponse = function() {\n return function(result) {\n var paginateResponse;\n paginateResponse = Immutable.Map({\n \"data\": result.get(\"data\"),\n \"next\": !!result.get(\"headers\")(\"x-pagination-next\"),\n \"prev\": !!result.get(\"headers\")(\"x-pagination-prev\"),\n \"current\": result.get(\"headers\")(\"x-pagination-current\"),\n \"count\": result.get(\"headers\")(\"x-pagination-count\")\n });\n return paginateResponse;\n };\n };\n\n angular.module(\"taigaCommon\").factory(\"tgPaginateResponseService\", PaginateResponse);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/project-logo.service.coffee\n */\n\n(function() {\n var ProjectLogoService,\n modulo = function(a, b) { return (+a % (b = +b) + b) % b; };\n\n ProjectLogoService = (function() {\n function ProjectLogoService() {\n var COLORS, IMAGES;\n IMAGES = [\"/\" + window._version + \"/images/project-logos/project-logo-01.png\", \"/\" + window._version + \"/images/project-logos/project-logo-02.png\", \"/\" + window._version + \"/images/project-logos/project-logo-03.png\", \"/\" + window._version + \"/images/project-logos/project-logo-04.png\", \"/\" + window._version + \"/images/project-logos/project-logo-05.png\"];\n COLORS = [\"rgba( 153, 214, 220, 1 )\", \"rgba( 213, 156, 156, 1 )\", \"rgba( 214, 161, 212, 1 )\", \"rgba( 164, 162, 219, 1 )\", \"rgba( 152, 224, 168, 1 )\"];\n this.logos = _.cartesianProduct(IMAGES, COLORS);\n }\n\n ProjectLogoService.prototype.getDefaultProjectLogo = function(slug, id) {\n var idx, key, logo;\n key = slug + \"-\" + id;\n idx = modulo(murmurhash3_32_gc(key, 42), this.logos.length);\n logo = this.logos[idx];\n return {\n src: logo[0],\n color: logo[1]\n };\n };\n\n return ProjectLogoService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgProjectLogoService\", ProjectLogoService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/project.service.coffee\n */\n\n(function() {\n var ProjectService, taiga,\n bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n taiga = this.taiga;\n\n ProjectService = (function() {\n ProjectService.$inject = [\"$rootScope\", \"tgProjectsService\", \"tgXhrErrorService\", \"tgUserActivityService\", \"$interval\"];\n\n function ProjectService(rootScope, projectsService, xhrError, userActivityService, interval) {\n this.rootScope = rootScope;\n this.projectsService = projectsService;\n this.xhrError = xhrError;\n this.userActivityService = userActivityService;\n this.interval = interval;\n this.manageProjectSignal = bind(this.manageProjectSignal, this);\n this._project = null;\n this._section = null;\n this._sectionsBreadcrumb = Immutable.List();\n this._activeMembers = Immutable.List();\n taiga.defineImmutableProperty(this, \"project\", (function(_this) {\n return function() {\n return _this._project;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"section\", (function(_this) {\n return function() {\n return _this._section;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"sectionsBreadcrumb\", (function(_this) {\n return function() {\n return _this._sectionsBreadcrumb;\n };\n })(this));\n taiga.defineImmutableProperty(this, \"activeMembers\", (function(_this) {\n return function() {\n return _this._activeMembers;\n };\n })(this));\n if (!window.localStorage.e2e) {\n this.autoRefresh();\n }\n this.watchSignals();\n }\n\n ProjectService.prototype.watchSignals = function() {\n var fetchRequiredSignals, i, len, results, signal;\n fetchRequiredSignals = [\"admin:project-modules:updated\", \"admin:project-roles:updated\", \"admin:project-default-values:updated\", \"admin:project-values:updated\", \"admin:project-values:move\", \"admin:project-custom-attributes:updated\", \"sprintform:create:success\", \"sprintform:edit:success\", \"sprintform:remove:success\", \"tags:updated\"];\n results = [];\n for (i = 0, len = fetchRequiredSignals.length; i < len; i++) {\n signal = fetchRequiredSignals[i];\n results.push(this.rootScope.$on(signal, this.manageProjectSignal));\n }\n return results;\n };\n\n ProjectService.prototype.manageProjectSignal = function(ctx) {\n return this.fetchProject();\n };\n\n ProjectService.prototype.cleanProject = function() {\n this._project = null;\n this._activeMembers = Immutable.List();\n this._section = null;\n return this._sectionsBreadcrumb = Immutable.List();\n };\n\n ProjectService.prototype.autoRefresh = function() {\n var intervalId;\n intervalId = this.interval((function(_this) {\n return function() {\n return _this.fetchProject();\n };\n })(this), 60 * 10 * 1000);\n this.userActivityService.onInactive((function(_this) {\n return function() {\n return _this.interval.cancel(intervalId);\n };\n })(this));\n return this.userActivityService.onActive((function(_this) {\n return function() {\n _this.fetchProject();\n return _this.autoRefresh();\n };\n })(this));\n };\n\n ProjectService.prototype.setSection = function(section) {\n this._section = section;\n if (section) {\n return this._sectionsBreadcrumb = this._sectionsBreadcrumb.push(this._section);\n } else {\n return this._sectionsBreadcrumb = Immutable.List();\n }\n };\n\n ProjectService.prototype.setProject = function(project) {\n this._project = project;\n return this._activeMembers = this._project.get('members').filter(function(member) {\n return member.get('is_active');\n });\n };\n\n ProjectService.prototype.setProjectBySlug = function(pslug) {\n return new Promise((function(_this) {\n return function(resolve, reject) {\n if (!_this.project || _this.project.get('slug') !== pslug) {\n return _this.projectsService.getProjectBySlug(pslug).then(function(project) {\n _this.setProject(project);\n return resolve();\n })[\"catch\"](function(xhr) {\n return _this.xhrError.response(xhr);\n });\n } else {\n return resolve();\n }\n };\n })(this));\n };\n\n ProjectService.prototype.fetchProject = function() {\n var pslug;\n if (!this.project) {\n return;\n }\n pslug = this.project.get('slug');\n return this.projectsService.getProjectBySlug(pslug).then((function(_this) {\n return function(project) {\n return _this.setProject(project);\n };\n })(this));\n };\n\n ProjectService.prototype.hasPermission = function(permission) {\n return this._project.get('my_permissions').indexOf(permission) !== -1;\n };\n\n ProjectService.prototype.isEpicsDashboardEnabled = function() {\n return this._project.get(\"is_epics_activated\");\n };\n\n return ProjectService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgProjectService\", ProjectService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/theme.service.coffee\n */\n\n(function() {\n var ThemeService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n ThemeService = (function(superClass) {\n extend(ThemeService, superClass);\n\n function ThemeService() {\n return ThemeService.__super__.constructor.apply(this, arguments);\n }\n\n return ThemeService;\n\n })(taiga.Service = function() {\n return {\n use: function(themeName) {\n var stylesheetEl;\n stylesheetEl = $(\"link[rel='stylesheet']:first\");\n if (stylesheetEl.length === 0) {\n stylesheetEl = $(\"\");\n $(\"head\").append(stylesheetEl);\n }\n return stylesheetEl.attr(\"href\", \"/\" + window._version + \"/styles/theme-\" + themeName + \".css\");\n }\n };\n });\n\n angular.module(\"taigaCommon\").service(\"tgThemeService\", ThemeService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/user-activity.service.coffee\n */\n\n(function() {\n var UserActivityService, groupBy, taiga;\n\n taiga = this.taiga;\n\n groupBy = this.taiga.groupBy;\n\n UserActivityService = (function() {\n UserActivityService.$inject = ['$timeout'];\n\n UserActivityService.prototype.idleTimeout = 60 * 5 * 1000;\n\n function UserActivityService(timeout) {\n this.timeout = timeout;\n if (window.localStorage.e2e) {\n return null;\n }\n window.addEventListener('mousemove', this.resetTimer.bind(this), false);\n window.addEventListener('mousedown', this.resetTimer.bind(this), false);\n window.addEventListener('keypress', this.resetTimer.bind(this), false);\n window.addEventListener('mousewheel', this.resetTimer.bind(this), false);\n window.addEventListener('touchmove', this.resetTimer.bind(this), false);\n this.subscriptionsActive = [];\n this.subscriptionsInactive = [];\n this.isActive = true;\n this.startTimer();\n }\n\n UserActivityService.prototype.startTimer = function() {\n return this.timerId = this.timeout(this._fireInactive.bind(this), this.idleTimeout);\n };\n\n UserActivityService.prototype.resetTimer = function() {\n if (!this.isActive) {\n this._fireActive();\n }\n this.timeout.cancel(this.timerId);\n this.startTimer();\n return this.isActive = true;\n };\n\n UserActivityService.prototype.onActive = function(cb) {\n this.subscriptionsActive.push(cb);\n return this._unSubscriptionsActive.bind(this, cb);\n };\n\n UserActivityService.prototype.onInactive = function(cb) {\n this.subscriptionsInactive.push(cb);\n return this._unSubscriptionsInactive.bind(this, cb);\n };\n\n UserActivityService.prototype._fireActive = function() {\n return this.subscriptionsActive.forEach(function(it) {\n return it();\n });\n };\n\n UserActivityService.prototype._fireInactive = function() {\n this.isActive = false;\n return this.subscriptionsInactive.forEach(function(it) {\n return it();\n });\n };\n\n UserActivityService.prototype._unSubscriptionsActive = function(cb) {\n return this.subscriptionsActive = this.subscriptionsActive.filter(function(fn) {\n return fn !== cb;\n });\n };\n\n UserActivityService.prototype._unSubscriptionsInactive = function(cb) {\n return this.subscriptionsInactive = this.subscriptionsInactive.filter(function(fn) {\n return fn !== cb;\n });\n };\n\n return UserActivityService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgUserActivityService\", UserActivityService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/user-list.service.coffee\n */\n\n(function() {\n var UserListService, normalizeString, taiga;\n\n taiga = this.taiga;\n\n normalizeString = this.taiga.normalizeString;\n\n UserListService = (function() {\n UserListService.$inject = [\"tgCurrentUserService\", \"tgProjectService\"];\n\n function UserListService(currentUserService, projectService) {\n this.currentUserService = currentUserService;\n this.projectService = projectService;\n }\n\n UserListService.prototype.filterUsers = function(text, user) {\n var username;\n username = user.full_name_display.toUpperCase();\n username = normalizeString(username);\n text = text.toUpperCase();\n text = normalizeString(text);\n return _.includes(username, text);\n };\n\n UserListService.prototype.searchUsers = function(text, excludedUser) {\n var users;\n this.currentUser = this.currentUserService.getUser();\n users = _.clone(this.projectService.activeMembers.toJS(), true);\n if (excludedUser) {\n users = _.reject(users, {\n \"id\": excludedUser.id\n });\n }\n users = _.sortBy(users, (function(_this) {\n return function(o) {\n var ref;\n if (o.id === ((ref = _this.currentUser) != null ? ref.get('id') : void 0)) {\n return 0;\n } else {\n return o.id;\n }\n };\n })(this));\n if (text != null) {\n users = _.filter(users, _.partial(this.filterUsers, text));\n }\n return users;\n };\n\n return UserListService;\n\n })();\n\n angular.module(\"taigaCommon\").service(\"tgUserListService\", UserListService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/user.service.coffee\n */\n\n(function() {\n var UserService, bindMethods, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n bindMethods = taiga.bindMethods;\n\n UserService = (function(superClass) {\n extend(UserService, superClass);\n\n UserService.$inject = [\"tgResources\"];\n\n function UserService(rs) {\n this.rs = rs;\n bindMethods(this);\n }\n\n UserService.prototype.getUserByUserName = function(username) {\n return this.rs.users.getUserByUsername(username);\n };\n\n UserService.prototype.getContacts = function(userId, excludeProjectId) {\n return this.rs.users.getContacts(userId, excludeProjectId);\n };\n\n UserService.prototype.getLiked = function(userId, pageNumber, objectType, textQuery) {\n return this.rs.users.getLiked(userId, pageNumber, objectType, textQuery);\n };\n\n UserService.prototype.getVoted = function(userId, pageNumber, objectType, textQuery) {\n return this.rs.users.getVoted(userId, pageNumber, objectType, textQuery);\n };\n\n UserService.prototype.getWatched = function(userId, pageNumber, objectType, textQuery) {\n return this.rs.users.getWatched(userId, pageNumber, objectType, textQuery);\n };\n\n UserService.prototype.getStats = function(userId) {\n return this.rs.users.getStats(userId);\n };\n\n UserService.prototype.attachUserContactsToProjects = function(userId, projects) {\n return this.getContacts(userId).then(function(contacts) {\n projects = projects.map(function(project) {\n var contactsFiltered;\n contactsFiltered = contacts.filter(function(contact) {\n var contactId;\n contactId = contact.get(\"id\");\n return project.get('members').indexOf(contactId) !== -1;\n });\n project = project.set(\"contacts\", contactsFiltered);\n return project;\n });\n return projects;\n });\n };\n\n return UserService;\n\n })(taiga.Service);\n\n angular.module(\"taigaCommon\").service(\"tgUserService\", UserService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: services/xhrError.service.coffee\n */\n\n(function() {\n var xhrError,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n xhrError = (function(superClass) {\n extend(xhrError, superClass);\n\n xhrError.$inject = [\"$q\", \"tgErrorHandlingService\"];\n\n function xhrError(q, errorHandlingService) {\n this.q = q;\n this.errorHandlingService = errorHandlingService;\n }\n\n xhrError.prototype.notFound = function() {\n return this.errorHandlingService.notfound();\n };\n\n xhrError.prototype.permissionDenied = function() {\n return this.errorHandlingService.permissionDenied();\n };\n\n xhrError.prototype.response = function(xhr) {\n if (xhr) {\n if (xhr.status === 404) {\n this.notFound();\n } else if (xhr.status === 403) {\n this.permissionDenied();\n }\n }\n return this.q.reject(xhr);\n };\n\n return xhrError;\n\n })(taiga.Service);\n\n angular.module(\"taigaCommon\").service(\"tgXhrErrorService\", xhrError);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-attachment/user-timeline-attachment.directive.coffee\n */\n\n(function() {\n var UserTimelineAttachmentDirective;\n\n UserTimelineAttachmentDirective = function(template, $compile) {\n var isImage, link, validFileExtensions;\n validFileExtensions = [\".jpg\", \".jpeg\", \".bmp\", \".gif\", \".png\"];\n isImage = function(url) {\n url = url.toLowerCase();\n return _.some(validFileExtensions, function(extension) {\n return url.indexOf(extension, url - extension.length) !== -1;\n });\n };\n link = function(scope, el) {\n var is_image, templateHtml;\n is_image = isImage(scope.attachment.get('url'));\n if (is_image) {\n templateHtml = template.get(\"user-timeline/user-timeline-attachment/user-timeline-attachment-image.html\");\n } else {\n templateHtml = template.get(\"user-timeline/user-timeline-attachment/user-timeline-attachment.html\");\n }\n el.html(templateHtml);\n $compile(el.contents())(scope);\n return el.find(\"img\").error(function() {\n return this.remove();\n });\n };\n return {\n link: link,\n scope: {\n attachment: \"=tgUserTimelineAttachment\"\n }\n };\n };\n\n UserTimelineAttachmentDirective.$inject = [\"$tgTemplate\", \"$compile\"];\n\n angular.module(\"taigaUserTimeline\").directive(\"tgUserTimelineAttachment\", UserTimelineAttachmentDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-item/user-timeline-item-title.service.coffee\n */\n\n(function() {\n var UserTimelineItemTitle, unslugify;\n\n unslugify = this.taiga.unslugify;\n\n UserTimelineItemTitle = (function() {\n UserTimelineItemTitle.$inject = [\"$translate\", \"$sce\"];\n\n UserTimelineItemTitle.prototype._fieldTranslationKey = {\n 'status': 'COMMON.FIELDS.STATUS',\n 'subject': 'COMMON.FIELDS.SUBJECT',\n 'description_diff': 'COMMON.FIELDS.DESCRIPTION',\n 'points': 'COMMON.FIELDS.POINTS',\n 'assigned_to': 'COMMON.FIELDS.ASSIGNED_TO',\n 'assigned_users': 'COMMON.FIELDS.ASSIGNED_USERS',\n 'severity': 'ISSUES.FIELDS.SEVERITY',\n 'priority': 'ISSUES.FIELDS.PRIORITY',\n 'type': 'ISSUES.FIELDS.TYPE',\n 'is_iocaine': 'TASK.FIELDS.IS_IOCAINE',\n 'is_blocked': 'COMMON.FIELDS.IS_BLOCKED',\n 'color': 'COMMON.FIELDS.COLOR',\n 'due_date': 'COMMON.FIELDS.DUE_DATE',\n 'due_date_reason': 'COMMON.FIELDS.DUE_DATE_REASON',\n 'milestone': 'COMMON.FIELDS.SPRINT'\n };\n\n UserTimelineItemTitle.prototype._params = {\n username: function(timeline, event) {\n var title_attr, url, user;\n user = timeline.getIn(['data', 'user']);\n if (user.get('is_profile_visible')) {\n title_attr = this.translate.instant('COMMON.SEE_USER_PROFILE', {\n username: user.get('username')\n });\n url = \"user-profile:username=timeline.getIn(['data', 'user', 'username'])\";\n return this._getLink(url, user.get('name'), title_attr);\n } else {\n return this._getUsernameSpan(user.get('name'));\n }\n },\n field_name: function(timeline, event) {\n var field_name;\n field_name = timeline.getIn(['data', 'value_diff', 'key']);\n return this.translate.instant(this._fieldTranslationKey[field_name]);\n },\n project_name: function(timeline, event) {\n var url;\n url = \"project:project=timeline.getIn(['data', 'project', 'slug'])\";\n return this._getLink(url, timeline.getIn([\"data\", \"project\", \"name\"]));\n },\n new_value: function(timeline, event) {\n var new_value, prettyDate, value;\n if (_.isArray(timeline.getIn([\"data\", \"value_diff\", \"value\"]).toJS())) {\n value = timeline.getIn([\"data\", \"value_diff\", \"value\"]).get(1);\n if (value === null && timeline.getIn([\"data\", \"value_diff\", \"key\"]) === 'assigned_to') {\n value = this.translate.instant('ACTIVITY.VALUES.UNASSIGNED');\n }\n if (value === null && timeline.getIn([\"data\", \"value_diff\", \"key\"]) === 'assigned_users') {\n value = this.translate.instant('ACTIVITY.VALUES.UNASSIGNED');\n } else if (timeline.getIn([\"data\", \"value_diff\", \"key\"]) === 'due_date') {\n if (value) {\n prettyDate = this.translate.instant(\"COMMON.PICKERDATE.FORMAT\");\n value = moment(value, \"YYYY-MM-DD\").format(prettyDate);\n } else {\n value = this.translate.instant('ACTIVITY.VALUES.NOT_SET');\n }\n }\n new_value = value;\n } else {\n new_value = timeline.getIn([\"data\", \"value_diff\", \"value\"]).first().get(1);\n }\n return $('').attr('ng-non-bindable', true).text(new_value).prop('outerHTML');\n },\n sprint_name: function(timeline, event) {\n var url;\n url = \"project-taskboard:project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['data', 'milestone', 'slug'])\";\n return this._getLink(url, timeline.getIn(['data', 'milestone', 'name']));\n },\n us_name: function(timeline, event) {\n var event_us, obj, text, url;\n obj = this._getTimelineObj(timeline, event).get('userstory');\n event_us = {\n obj: 'parent_userstory'\n };\n url = this._getDetailObjUrl(event_us);\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n return this._getLink(url, text);\n },\n related_us_name: function(timeline, event) {\n var obj, text, url;\n obj = timeline.getIn([\"data\", \"userstory\"]);\n url = \"project-userstories-detail:project=timeline.getIn(['data', 'userstory', 'project', 'slug']),ref=timeline.getIn(['data', 'userstory', 'ref'])\";\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n return this._getLink(url, text);\n },\n epic_name: function(timeline, event) {\n var obj, text, url;\n obj = timeline.getIn([\"data\", \"epic\"]);\n url = \"project-epics-detail:project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['data', 'epic', 'ref'])\";\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n return this._getLink(url, text);\n },\n obj_name: function(timeline, event) {\n var obj, text, url;\n obj = this._getTimelineObj(timeline, event);\n url = this._getDetailObjUrl(event);\n if (event.obj === 'wikipage') {\n text = unslugify(obj.get('slug'));\n } else if (event.obj === 'milestone') {\n text = obj.get('name');\n } else {\n text = '#' + obj.get('ref') + ' ' + obj.get('subject');\n }\n return this._getLink(url, text);\n },\n role_name: function(timeline, event) {\n return _.escape(timeline.getIn(['data', 'value_diff', 'value']).keySeq().first());\n }\n };\n\n function UserTimelineItemTitle(translate, sce) {\n this.translate = translate;\n this.sce = sce;\n }\n\n UserTimelineItemTitle.prototype._translateTitleParams = function(param, timeline, event) {\n return this._params[param].call(this, timeline, event);\n };\n\n UserTimelineItemTitle.prototype._getTimelineObj = function(timeline, event) {\n return timeline.getIn(['data', event.obj]);\n };\n\n UserTimelineItemTitle.prototype._getDetailObjUrl = function(event) {\n var url;\n url = {\n \"issue\": [\"project-issues-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"wikipage\": [\"project-wiki-page\", \":project=timeline.getIn(['data', 'project', 'slug']),slug=timeline.getIn(['obj', 'slug'])\"],\n \"task\": [\"project-tasks-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"userstory\": [\"project-userstories-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"],\n \"parent_userstory\": [\"project-userstories-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'userstory', 'ref'])\"],\n \"milestone\": [\"project-taskboard\", \":project=timeline.getIn(['data', 'project', 'slug']),sprint=timeline.getIn(['obj', 'slug'])\"],\n \"epic\": [\"project-epics-detail\", \":project=timeline.getIn(['data', 'project', 'slug']),ref=timeline.getIn(['obj', 'ref'])\"]\n };\n return url[event.obj][0] + url[event.obj][1];\n };\n\n UserTimelineItemTitle.prototype._getLink = function(url, text, title) {\n var span;\n title = title || text;\n span = $('').attr('ng-non-bindable', true).text(text);\n return $('').attr('tg-nav', url).append(span).prop('outerHTML');\n };\n\n UserTimelineItemTitle.prototype._getUsernameSpan = function(text) {\n var title;\n title = title || text;\n return $('').addClass('username').text(text).prop('outerHTML');\n };\n\n UserTimelineItemTitle.prototype._getParams = function(timeline, event, timeline_type) {\n var params;\n params = {};\n timeline_type.translate_params.forEach((function(_this) {\n return function(param) {\n return params[param] = _this._translateTitleParams(param, timeline, event);\n };\n })(this));\n return params;\n };\n\n UserTimelineItemTitle.prototype.getTitle = function(timeline, event, type) {\n var params, paramsKeys, translation;\n params = this._getParams(timeline, event, type);\n paramsKeys = {};\n Object.keys(params).forEach(function(key) {\n return paramsKeys[key] = '{{' + key + '}}';\n });\n translation = this.translate.instant(type.key, paramsKeys);\n Object.keys(params).forEach(function(key) {\n var find;\n find = '{{' + key + '}}';\n return translation = translation.replace(new RegExp(find, 'g'), params[key]);\n });\n return translation;\n };\n\n return UserTimelineItemTitle;\n\n })();\n\n angular.module(\"taigaUserTimeline\").service(\"tgUserTimelineItemTitle\", UserTimelineItemTitle);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-item/user-timeline-item-type.service.coffee\n */\n\n(function() {\n var UserTimelineType, timelineType;\n\n timelineType = function(timeline, event) {\n var types;\n types = [\n {\n check: function(timeline, event) {\n return event.obj === 'membership';\n },\n key: 'TIMELINE.NEW_MEMBER',\n translate_params: ['project_name'],\n member: function(timeline) {\n return Immutable.Map({\n user: timeline.getIn(['data', 'user']),\n role: timeline.getIn(['data', 'role'])\n });\n }\n }, {\n check: function(timeline, event) {\n return event.obj === 'project' && event.type === 'create';\n },\n key: 'TIMELINE.NEW_PROJECT',\n translate_params: ['username', 'project_name'],\n description: function(timeline) {\n return timeline.getIn(['data', 'project', 'description']);\n }\n }, {\n check: function(timeline, event) {\n return event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'attachments';\n },\n key: 'TIMELINE.UPLOAD_ATTACHMENT',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'userstory' && event.type === 'create';\n },\n key: 'TIMELINE.US_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'issue' && event.type === 'create';\n },\n key: 'TIMELINE.ISSUE_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'wikipage' && event.type === 'create';\n },\n key: 'TIMELINE.WIKI_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'create' && !timeline.getIn(['data', 'task', 'userstory']);\n },\n key: 'TIMELINE.TASK_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'create' && timeline.getIn(['data', 'task', 'userstory']);\n },\n key: 'TIMELINE.TASK_CREATED_WITH_US',\n translate_params: ['username', 'project_name', 'obj_name', 'us_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'milestone' && event.type === 'create';\n },\n key: 'TIMELINE.MILESTONE_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'epic' && event.type === 'create';\n },\n key: 'TIMELINE.EPIC_CREATED',\n translate_params: ['username', 'project_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'relateduserstory' && event.type === 'create';\n },\n key: 'TIMELINE.EPIC_RELATED_USERSTORY_CREATED',\n translate_params: ['username', 'project_name', 'related_us_name', 'epic_name']\n }, {\n check: function(timeline, event) {\n return timeline.getIn(['data', 'comment']) && event.obj === 'userstory';\n },\n key: 'TIMELINE.NEW_COMMENT_US',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n text = timeline.getIn(['data', 'comment_html']);\n return $($.parseHTML(text)).text();\n }\n }, {\n check: function(timeline, event) {\n return timeline.getIn(['data', 'comment']) && event.obj === 'issue';\n },\n key: 'TIMELINE.NEW_COMMENT_ISSUE',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n text = timeline.getIn(['data', 'comment_html']);\n return $($.parseHTML(text)).text();\n }\n }, {\n check: function(timeline, event) {\n return timeline.getIn(['data', 'comment']) && event.obj === 'task';\n },\n key: 'TIMELINE.NEW_COMMENT_TASK',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n text = timeline.getIn(['data', 'comment_html']);\n return $($.parseHTML(text)).text();\n }\n }, {\n check: function(timeline, event) {\n return timeline.getIn(['data', 'comment']) && event.obj === 'epic';\n },\n key: 'TIMELINE.NEW_COMMENT_EPIC',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n text = timeline.getIn(['data', 'comment_html']);\n return $($.parseHTML(text)).text();\n }\n }, {\n check: function(timeline, event) {\n return timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'moveInBacklog' && timeline.hasIn(['data', 'value_diff', 'value', 'backlog_order']) && event.type === 'change';\n },\n key: 'TIMELINE.US_MOVED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n if (timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'moveInBacklog' && event.type === 'change' && event.obj === 'userstory') {\n return timeline.getIn(['data', 'value_diff', 'value', 'milestone']).get(1) === null;\n }\n return false;\n },\n key: 'TIMELINE.US_REMOVED_FROM_MILESTONE',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'moveInBacklog' && event.type === 'change' && event.obj === 'userstory';\n },\n key: 'TIMELINE.US_ADDED_MILESTONE',\n translate_params: ['username', 'obj_name', 'sprint_name']\n }, {\n check: function(timeline, event) {\n if (timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'blocked' && event.type === 'change') {\n return timeline.getIn(['data', 'value_diff', 'value', 'is_blocked']).get(1) === true;\n }\n return false;\n },\n key: 'TIMELINE.BLOCKED',\n translate_params: ['username', 'obj_name'],\n description: function(timeline) {\n var text;\n if (timeline.hasIn(['data', 'value_diff', 'value', 'blocked_note_html'])) {\n text = timeline.getIn(['data', 'value_diff', 'value', 'blocked_note_html']).get(1);\n return $($.parseHTML(text)).text();\n } else {\n return false;\n }\n }\n }, {\n check: function(timeline, event) {\n if (timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'blocked' && event.type === 'change') {\n return timeline.getIn(['data', 'value_diff', 'value', 'is_blocked']).get(1) === false;\n }\n return false;\n },\n key: 'TIMELINE.UNBLOCKED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'milestone' && event.type === 'change';\n },\n key: 'TIMELINE.MILESTONE_UPDATED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'wikipage' && event.type === 'change';\n },\n key: 'TIMELINE.WIKI_UPDATED',\n translate_params: ['username', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'userstory' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'points';\n },\n key: 'TIMELINE.US_UPDATED_POINTS',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value', 'role_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'userstory' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.US_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'userstory' && event.type === 'change';\n },\n key: 'TIMELINE.US_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'issue' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.ISSUE_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'issue' && event.type === 'change';\n },\n key: 'TIMELINE.ISSUE_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'change' && !timeline.getIn(['data', 'task', 'userstory']) && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.TASK_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'change' && timeline.getIn(['data', 'task', 'userstory']) && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.TASK_UPDATED_WITH_US',\n translate_params: ['username', 'field_name', 'obj_name', 'us_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'change' && !timeline.getIn(['data', 'task', 'userstory']);\n },\n key: 'TIMELINE.TASK_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'task' && event.type === 'change' && timeline.getIn(['data', 'task', 'userstory']);\n },\n key: 'TIMELINE.TASK_UPDATED_WITH_US_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'us_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'epic' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'description_diff';\n },\n key: 'TIMELINE.EPIC_UPDATED',\n translate_params: ['username', 'field_name', 'obj_name']\n }, {\n check: function(timeline, event) {\n return event.obj === 'epic' && event.type === 'change' && timeline.hasIn(['data', 'value_diff']) && timeline.getIn(['data', 'value_diff', 'key']) === 'color';\n },\n key: 'TIMELINE.EPIC_UPDATED_WITH_NEW_COLOR',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'epic' && event.type === 'change';\n },\n key: 'TIMELINE.EPIC_UPDATED_WITH_NEW_VALUE',\n translate_params: ['username', 'field_name', 'obj_name', 'new_value']\n }, {\n check: function(timeline, event) {\n return event.obj === 'user' && event.type === 'create';\n },\n key: 'TIMELINE.NEW_USER',\n translate_params: ['username']\n }\n ];\n return _.find(types, function(obj) {\n return obj.check(timeline, event);\n });\n };\n\n UserTimelineType = (function() {\n function UserTimelineType() {}\n\n UserTimelineType.prototype.getType = function(timeline, event) {\n return timelineType(timeline, event);\n };\n\n return UserTimelineType;\n\n })();\n\n angular.module(\"taigaUserTimeline\").service(\"tgUserTimelineItemType\", UserTimelineType);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-item/user-timeline-item.directive.coffee\n */\n\n(function() {\n var UserTimelineItemDirective;\n\n UserTimelineItemDirective = function() {\n return {\n templateUrl: \"user-timeline/user-timeline-item/user-timeline-item.html\",\n scope: {\n timeline: \"=tgUserTimelineItem\"\n }\n };\n };\n\n angular.module(\"taigaUserTimeline\").directive(\"tgUserTimelineItem\", UserTimelineItemDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline-pagination-sequence/user-timeline-pagination-sequence.service.coffee\n */\n\n(function() {\n var UserTimelinePaginationSequence;\n\n UserTimelinePaginationSequence = function() {\n var obj;\n obj = {};\n obj.generate = function(config) {\n var getContent, items, next, page;\n page = 1;\n items = Immutable.List();\n config.minItems = config.minItems || 20;\n next = function() {\n items = Immutable.List();\n return getContent();\n };\n getContent = function() {\n return config.fetch(page).then(function(response) {\n var data, pagination;\n page++;\n data = response.get(\"data\");\n if (config.filter) {\n data = config.filter(data);\n }\n if (config.map) {\n data = data.map(config.map);\n }\n items = items.concat(data);\n if (items.size < config.minItems && response.get(\"next\")) {\n return getContent();\n }\n pagination = Immutable.Map({\n items: items,\n total: response.get(\"total\"),\n next: response.get(\"next\")\n });\n return pagination;\n });\n };\n return {\n next: function() {\n return next();\n }\n };\n };\n return obj;\n };\n\n angular.module(\"taigaUserTimeline\").factory(\"tgUserTimelinePaginationSequenceService\", UserTimelinePaginationSequence);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline/user-timeline.controller.coffee\n */\n\n(function() {\n var UserTimelineController, mixOf, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n mixOf = this.taiga.mixOf;\n\n UserTimelineController = (function(superClass) {\n extend(UserTimelineController, superClass);\n\n UserTimelineController.$inject = [\"tgUserTimelineService\"];\n\n function UserTimelineController(userTimelineService) {\n this.userTimelineService = userTimelineService;\n this.timelineList = Immutable.List();\n this.scrollDisabled = false;\n this.timeline = null;\n if (this.projectId) {\n this.timeline = this.userTimelineService.getProjectTimeline(this.projectId);\n } else if (this.currentUser) {\n this.timeline = this.userTimelineService.getProfileTimeline(this.user.get(\"id\"));\n } else {\n this.timeline = this.userTimelineService.getUserTimeline(this.user.get(\"id\"));\n }\n this.loadTimeline();\n }\n\n UserTimelineController.prototype.loadTimeline = function() {\n this.scrollDisabled = true;\n return this.timeline.next().then((function(_this) {\n return function(response) {\n _this.timelineList = _this.timelineList.concat(response.get(\"items\"));\n if (response.get(\"next\")) {\n _this.scrollDisabled = false;\n }\n return _this.timelineList;\n };\n })(this));\n };\n\n return UserTimelineController;\n\n })(mixOf(taiga.Controller, taiga.PageMixin, taiga.FiltersMixin));\n\n angular.module(\"taigaUserTimeline\").controller(\"UserTimeline\", UserTimelineController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline/user-timeline.directive.coffee\n */\n\n(function() {\n var UserTimelineDirective;\n\n UserTimelineDirective = function() {\n return {\n templateUrl: \"user-timeline/user-timeline/user-timeline.html\",\n controller: \"UserTimeline\",\n controllerAs: \"vm\",\n scope: {\n projectId: \"=projectid\",\n user: \"=\",\n currentUser: \"=\"\n },\n bindToController: true\n };\n };\n\n angular.module(\"taigaProfile\").directive(\"tgUserTimeline\", UserTimelineDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: user-timeline/user-timeline/user-timeline.service.coffee\n */\n\n(function() {\n var UserTimelineService, taiga,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n taiga = this.taiga;\n\n UserTimelineService = (function(superClass) {\n extend(UserTimelineService, superClass);\n\n UserTimelineService.$inject = [\"tgResources\", \"tgUserTimelinePaginationSequenceService\", \"tgUserTimelineItemType\", \"tgUserTimelineItemTitle\"];\n\n function UserTimelineService(rs, userTimelinePaginationSequenceService, userTimelineItemType, userTimelineItemTitle) {\n this.rs = rs;\n this.userTimelinePaginationSequenceService = userTimelinePaginationSequenceService;\n this.userTimelineItemType = userTimelineItemType;\n this.userTimelineItemTitle = userTimelineItemTitle;\n }\n\n UserTimelineService.prototype._valid_fields = ['status', 'subject', 'description_diff', 'assigned_users', 'assigned_to', 'points', 'severity', 'priority', 'type', 'attachments', 'is_iocaine', 'content_diff', 'name', 'estimated_finish', 'estimated_start', 'blocked', 'moveInBacklog', 'milestone', 'color', 'due_date', 'due_date_reason'];\n\n UserTimelineService.prototype._invalid = [\n {\n check: function(timeline) {\n var fieldKey, value_diff;\n value_diff = timeline.get(\"data\").get(\"value_diff\");\n if (value_diff) {\n fieldKey = value_diff.get('key');\n if (this._valid_fields.indexOf(fieldKey) === -1) {\n return true;\n } else if (fieldKey === 'attachments' && value_diff.get('value').get('new').size === 0) {\n return true;\n }\n }\n return false;\n }\n }, {\n check: function(timeline) {\n var event, value_diff;\n event = timeline.get('event_type').split(\".\");\n value_diff = timeline.get(\"data\").get(\"value_diff\");\n return event[2] === 'change' && value_diff === void 0;\n }\n }, {\n check: function(timeline) {\n var event;\n event = timeline.get('event_type').split(\".\");\n return event[2] === 'delete';\n }\n }, {\n check: function(timeline) {\n var event;\n event = timeline.get('event_type').split(\".\");\n return event[1] === 'project' && event[2] === 'change';\n }\n }, {\n check: function(timeline) {\n return !!timeline.get(\"data\").get(\"comment_deleted\");\n }\n }, {\n check: function(timeline) {\n var event, value_diff;\n event = timeline.get('event_type').split(\".\");\n value_diff = timeline.get(\"data\").get(\"value_diff\");\n if (value_diff && event[1] === \"task\" && event[2] === \"change\" && value_diff.get(\"key\") === \"milestone\") {\n return timeline.get(\"data\").get(\"value_diff\").get(\"value\");\n }\n return false;\n }\n }\n ];\n\n UserTimelineService.prototype._isInValidTimeline = function(timeline) {\n return _.some(this._invalid, (function(_this) {\n return function(invalid) {\n return invalid.check.call(_this, timeline);\n };\n })(this));\n };\n\n UserTimelineService.prototype._parseEventType = function(event_type) {\n event_type = event_type.split(\".\");\n return {\n section: event_type[0],\n obj: event_type[1],\n type: event_type[2]\n };\n };\n\n UserTimelineService.prototype._getTimelineObject = function(timeline, event) {\n if (timeline.get('data').get(event.obj)) {\n return timeline.get('data').get(event.obj);\n }\n };\n\n UserTimelineService.prototype._attachExtraInfoToTimelineEntry = function(timeline, event, type) {\n var title;\n title = this.userTimelineItemTitle.getTitle(timeline, event, type);\n timeline = timeline.set('title_html', title);\n timeline = timeline.set('obj', this._getTimelineObject(timeline, event));\n if (type.description) {\n timeline = timeline.set('description', type.description(timeline));\n }\n if (type.member) {\n timeline = timeline.set('member', type.member(timeline));\n }\n if (timeline.getIn(['data', 'value_diff', 'key']) === 'attachments' && timeline.hasIn(['data', 'value_diff', 'value', 'new'])) {\n timeline = timeline.set('attachments', timeline.getIn(['data', 'value_diff', 'value', 'new']));\n }\n return timeline;\n };\n\n UserTimelineService.prototype._parseTimeline = function(response) {\n var newdata;\n newdata = Immutable.List();\n response.get('data').forEach((function(_this) {\n return function(item) {\n var data, event, newItem, values_diff;\n event = _this._parseEventType(item.get('event_type'));\n data = item.get('data');\n values_diff = data.get('values_diff');\n if (values_diff && values_diff.count()) {\n if (values_diff.has('is_blocked')) {\n values_diff = Immutable.Map({\n 'blocked': values_diff\n });\n }\n if (values_diff.has('milestone')) {\n if (event.obj === 'userstory') {\n values_diff = Immutable.Map({\n 'moveInBacklog': values_diff\n });\n } else {\n values_diff = values_diff.deleteIn(['values_diff', 'milestone']);\n }\n } else if (event.obj === 'milestone') {\n values_diff = Immutable.Map({\n 'milestone': values_diff\n });\n }\n return values_diff.forEach(function(value, key) {\n var newItem, obj;\n obj = Immutable.Map({\n key: key,\n value: value\n });\n newItem = item.setIn(['data', 'value_diff'], obj);\n newItem = newItem.deleteIn(['data', 'values_diff']);\n return newdata = newdata.push(newItem);\n });\n } else {\n newItem = item.deleteIn(['data', 'values_diff']);\n return newdata = newdata.push(newItem);\n }\n };\n })(this));\n return response.set('data', newdata);\n };\n\n UserTimelineService.prototype._addEntyAttributes = function(item) {\n var event, type;\n event = this._parseEventType(item.get('event_type'));\n type = this.userTimelineItemType.getType(item, event);\n return this._attachExtraInfoToTimelineEntry(item, event, type);\n };\n\n UserTimelineService.prototype.getProfileTimeline = function(userId) {\n var config;\n config = {};\n config.fetch = (function(_this) {\n return function(page) {\n return _this.rs.users.getProfileTimeline(userId, page).then(function(response) {\n return _this._parseTimeline(response);\n });\n };\n })(this);\n config.map = (function(_this) {\n return function(obj) {\n return _this._addEntyAttributes(obj);\n };\n })(this);\n config.filter = (function(_this) {\n return function(items) {\n return items.filterNot(function(item) {\n return _this._isInValidTimeline(item);\n });\n };\n })(this);\n return this.userTimelinePaginationSequenceService.generate(config);\n };\n\n UserTimelineService.prototype.getUserTimeline = function(userId) {\n var config;\n config = {};\n config.fetch = (function(_this) {\n return function(page) {\n return _this.rs.users.getUserTimeline(userId, page).then(function(response) {\n return _this._parseTimeline(response);\n });\n };\n })(this);\n config.map = (function(_this) {\n return function(obj) {\n return _this._addEntyAttributes(obj);\n };\n })(this);\n config.filter = (function(_this) {\n return function(items) {\n return items.filterNot(function(item) {\n return _this._isInValidTimeline(item);\n });\n };\n })(this);\n return this.userTimelinePaginationSequenceService.generate(config);\n };\n\n UserTimelineService.prototype.getProjectTimeline = function(projectId) {\n var config;\n config = {};\n config.fetch = (function(_this) {\n return function(page) {\n return _this.rs.projects.getTimeline(projectId, page).then(function(response) {\n return _this._parseTimeline(response);\n });\n };\n })(this);\n config.map = (function(_this) {\n return function(obj) {\n return _this._addEntyAttributes(obj);\n };\n })(this);\n config.filter = (function(_this) {\n return function(items) {\n return items.filterNot(function(item) {\n return _this._isInValidTimeline(item);\n });\n };\n })(this);\n return this.userTimelinePaginationSequenceService.generate(config);\n };\n\n return UserTimelineService;\n\n })(taiga.Service);\n\n angular.module(\"taigaUserTimeline\").service(\"tgUserTimelineService\", UserTimelineService);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: utils/isolate-click.directive.coffee\n */\n\n(function() {\n var IsolateClickDirective;\n\n IsolateClickDirective = function() {\n var link;\n link = function(scope, el, attrs) {\n return el.on('click', (function(_this) {\n return function(e) {\n return e.stopPropagation();\n };\n })(this));\n };\n return {\n link: link\n };\n };\n\n angular.module(\"taigaUtils\").directive(\"tgIsolateClick\", IsolateClickDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history-diff.directive.coffee\n */\n\n(function() {\n var WikiHistoryDiffDirective, module;\n\n module = angular.module('taigaWikiHistory');\n\n WikiHistoryDiffDirective = function() {\n return {\n templateUrl: \"wiki/history/wiki-history-diff.html\",\n scope: {\n key: \"<\",\n diff: \"<\"\n }\n };\n };\n\n module.directive(\"tgWikiHistoryDiff\", WikiHistoryDiffDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history-entry.directive.coffee\n */\n\n(function() {\n var WikiHistoryEntryDirective, module;\n\n module = angular.module('taigaWikiHistory');\n\n WikiHistoryEntryDirective = function() {\n var link;\n link = function(scope, el, attr) {\n return scope.singleHistoryEntry = scope.historyEntry.toJS();\n };\n return {\n link: link,\n templateUrl: \"wiki/history/wiki-history-entry.html\",\n scope: {\n historyEntry: \"<\"\n }\n };\n };\n\n module.directive(\"tgWikiHistoryEntry\", WikiHistoryEntryDirective);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history.controller.coffee\n */\n\n(function() {\n var WikiHistoryController, module, taiga;\n\n taiga = this.taiga;\n\n module = angular.module(\"taigaWikiHistory\");\n\n WikiHistoryController = (function() {\n WikiHistoryController.$inject = [\"tgActivityService\"];\n\n function WikiHistoryController(activityService) {\n this.activityService = activityService;\n taiga.defineImmutableProperty(this, 'historyEntries', (function(_this) {\n return function() {\n return _this.activityService.entries;\n };\n })(this));\n taiga.defineImmutableProperty(this, 'disablePagination', (function(_this) {\n return function() {\n return _this.activityService.disablePagination;\n };\n })(this));\n this.toggle = false;\n }\n\n WikiHistoryController.prototype.initializeHistory = function(wikiId) {\n if (wikiId) {\n this.activityService.init('wiki', wikiId);\n }\n return this.loadHistory();\n };\n\n WikiHistoryController.prototype.loadHistory = function() {\n return this.activityService.fetchEntries();\n };\n\n WikiHistoryController.prototype.nextPage = function() {\n return this.activityService.nextPage();\n };\n\n return WikiHistoryController;\n\n })();\n\n module.controller(\"WikiHistoryCtrl\", WikiHistoryController);\n\n}).call(this);\n\n\n/*\n * Copyright (C) 2014-2018 Taiga Agile LLC\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see .\n *\n * File: wiki/history/wiki-history.directive.coffee\n */\n\n(function() {\n var WikiHistoryDirective, bindOnce, module;\n\n bindOnce = this.taiga.bindOnce;\n\n module = angular.module('taigaWikiHistory');\n\n WikiHistoryDirective = function() {\n var link;\n link = function(scope, el, attrs, ctrl) {\n return bindOnce(scope, 'vm.wikiId', function(value) {\n return ctrl.initializeHistory(value);\n });\n };\n return {\n scope: {},\n bindToController: {\n wikiId: \"<\"\n },\n controller: \"WikiHistoryCtrl\",\n controllerAs: \"vm\",\n templateUrl: \"wiki/history/wiki-history.html\",\n link: link\n };\n };\n\n module.directive(\"tgWikiHistory\", WikiHistoryDirective);\n\n}).call(this);\n\n//# sourceMappingURL=maps/app.js.map\n"]} \ No newline at end of file diff --git a/dist/v-1547534999795/js/maps/libs.js.map b/dist/v-1549282893552/js/maps/libs.js.map similarity index 100% rename from dist/v-1547534999795/js/maps/libs.js.map rename to dist/v-1549282893552/js/maps/libs.js.map diff --git a/dist/v-1549282893552/js/templates.js b/dist/v-1549282893552/js/templates.js new file mode 100644 index 0000000..5267847 --- /dev/null +++ b/dist/v-1549282893552/js/templates.js @@ -0,0 +1,19 @@ +angular.module("templates",[]).run(["$templateCache",function(t){t.put("admin/admin-membership-paginator.html",'\n
      <% if (showPrevious) { %>\n <% } %>\n <% _.each(pages, function(item) { %>\n
    • <% if (item.type === "page") { %><%- item.num %><% } else if (item.type === "page-active") { %><%- item.num %><% } else { %>...<% } %>
    • <% }); %>\n <% if (showNext) { %>\n <% } %>\n
    '),t.put("admin/admin-memberships-row-checkbox.html",'\n
    \n \n
    \n
    '),t.put("admin/admin-memberships.html",'\n
    \n \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-change-owner.html",'\n
    {{::owner.full_name_display}}
    \n
    \n
    {{ \'ADMIN.PROJECT_PROFILE.PROJECT_OWNER\' | translate }}
    \n
    {{::owner.full_name_display}}
    \n
    {{ \'ADMIN.PROJECT_PROFILE.CHANGE_OWNER\' | translate }}'),t.put("admin/admin-project-default-values.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-export.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n \n \n
    \n
    '),t.put("admin/admin-project-modules.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n

    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-profile.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    {{ \'ADMIN.PROJECT_PROFILE.RECRUITING\' | translate }}\n \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    {{ \'ADMIN.PROJECT_PROFILE.FEEDBACK\' | translate }}\n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n {{\'ADMIN.PROJECT_PROFILE.PRIVATE_OR_PUBLIC\' | translate }}\n
    \n {{ \'ADMIN.PROJECT_PROFILE.DELETE\' | translate }}\n
    \n
    \n
    \n
    \n'), +t.put("admin/admin-project-reports.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n
    \n \n
    \n
    '),t.put("admin/admin-project-request-ownership.html",'\n
    {{::owner.full_name_display}}
    \n
    \n
    {{ \'ADMIN.PROJECT_PROFILE.PROJECT_OWNER\' | translate }}
    \n
    {{::owner.full_name_display}}
    \n
    {{ \'ADMIN.PROJECT_PROFILE.REQUEST_OWNERSHIP\' | translate }}'),t.put("admin/admin-project-restrictions.html",'\n
    {{ \'ADMIN.PROJECT_PROFILE.MAX_PRIVATE_PROJECTS\' | translate }}{{ \'ADMIN.PROJECT_PROFILE.MAX_PRIVATE_PROJECTS_MEMBERS\' | translate }}{{ \'ADMIN.PROJECT_PROFILE.MAX_PUBLIC_PROJECTS\' | translate }}{{ \'ADMIN.PROJECT_PROFILE.MAX_PUBLIC_PROJECTS_MEMBERS\' | translate }}
    '),t.put("admin/admin-project-values-custom-fields.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ customFieldSectionTitle | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ attr.name }}\n \n
    \n
    {{ attr.description }}
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    {{ option }}
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ customFieldSectionTitle | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ attr.name }}\n \n
    \n
    {{ attr.description }}
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    {{ option }}
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ customFieldSectionTitle | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ attr.name }}\n \n
    \n
    {{ attr.description }}
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    {{ option }}
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ customFieldSectionTitle | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ attr.name }}\n \n
    \n
    {{ attr.description }}
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    {{ option }}
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    '), +t.put("admin/admin-project-values-due-dates.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.days_to_due_abs }}
    \n
    {{ \'ADMIN.PROJECT_DUE_DATE_STATUS.BEFORE\' | translate }}{{ \'ADMIN.PROJECT_DUE_DATE_STATUS.AFTER\' | translate }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.days_to_due_abs }}
    \n
    {{ \'ADMIN.PROJECT_DUE_DATE_STATUS.BEFORE\' | translate }}{{ \'ADMIN.PROJECT_DUE_DATE_STATUS.AFTER\' | translate }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.days_to_due_abs }}
    \n
    {{ \'ADMIN.PROJECT_DUE_DATE_STATUS.BEFORE\' | translate }}{{ \'ADMIN.PROJECT_DUE_DATE_STATUS.AFTER\' | translate }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-values-points.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{sectionName | translate}}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{ value.name }}
    \n
    {{ value.value }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '), +t.put("admin/admin-project-values-priorities.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-values-severities.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-values-status.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.slug }}
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.slug }}
    \n
    \n \n
    \n
    \n \n
    \n
    {{ value.wip_limit }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.slug }}
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n
    {{ value.slug }}
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '), +t.put("admin/admin-project-values-tags.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{\'BACKLOG.EMPTY\' | translate}}\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    {{\'BACKLOG.EMPTY\' | translate}}\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-project-values-types.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n
    \n

    {{ sectionName | translate }}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{ value.name }}
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-roles.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n \n \n
    \n

    {{ role.name }}\n

    \n
    \n
    \n

    {{ role.name }}

    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("admin/admin-third-parties-bitbucket.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n
    '),t.put("admin/admin-third-parties-github.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    '), +t.put("admin/admin-third-parties-gitlab.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n \n
    \n \n
    \n
    '),t.put("admin/admin-third-parties-gogs.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    '),t.put("admin/admin-third-parties-webhooks.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("admin/lightbox-add-members.html",'\n\n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n

    \n
    '),t.put("admin/memberships-row-avatar.html",'\n
    <%- full_name %>\n
    \n
    <%- full_name %><% if (isOwner) { %>\n <% } %>\n
    \n
    <% if (pending) { %><%- pending %><% } %>
    \n
    \n
    '),t.put("admin/memberships-warning-message.html",'\n

    \n

    '),t.put("admin/no-more-memberships-explanation.html",'\n

    \n

    '),t.put("admin/project-csv.html",'\n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n \n \n \n
    \n
    '),t.put("auth/change-password-from-recovery.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n
    \n


    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("auth/forgot-password.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n
    \n


    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("auth/invitation.html",'\n
    \n
    \n
    \n

    \n

    \n
    \n \n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("auth/login-text.html",'\n'),t.put("auth/login.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n

    \n \n
    \n
    \n
    '), +t.put("auth/register.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("backlog/backlog.html",'\n
    \n \n \n \n \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    --
    \n
    --
    \n
    --
    \n
    --
    \n
    \n \n
    \n
    \n
    \n \n
    \n

    \n

    {{\'BACKLOG.CUSTOMIZE_GRAPH_TEXT\' | translate}} {{\'BACKLOG.CUSTOMIZE_GRAPH_ADMIN\' | translate}}

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n {{ ::us.total_voters }}\n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    {{\'BACKLOG.EMPTY\' | translate}}\n

    \n
    \n
    \n \n
    \n
    \n

    \n \n
    \n
    {{\'BACKLOG.SPRINTS.EMPTY\' | translate}}\n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ \'BACKLOG.SPRINTS.WARNING_EMPTY_SPRINT_ANONYMOUS\' | translate }}{{ \'BACKLOG.SPRINTS.WARNING_EMPTY_SPRINT\' | translate }}
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ \'BACKLOG.SPRINTS.WARNING_EMPTY_SPRINT_ANONYMOUS\' | translate }}{{ \'BACKLOG.SPRINTS.WARNING_EMPTY_SPRINT\' | translate }}
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    '),t.put("backlog/progress-bar.html",'\n
    \n
    \n
    '),t.put("backlog/sprint-header.html",'\n\n
    \n
    {{::estimatedDateRange}}
    \n
      \n
    • {{::closedPoints | number}}
    • \n
    • {{::totalPoints | number}}
    • \n
    \n
    '),t.put("backlog/us-role-points-popover.html",'\n'),t.put("common/lightbox-feedback.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("contrib/main.html",'\n
    \n \n \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    '),t.put("contrib/user-settings.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    '),t.put("custom-attributes/custom-attribute-value-edit.html",'\n
    \n
    \n <% if (description){ %><%- description %><% } %>\n
    \n
    <% if (type=="text") { %>\n <% } else if (type=="multiline") { %>\n <% } else if (type=="richtext") { %>\n <% } else if (type=="date") { %>\n <% } else if (type=="url") { %>\n <% } else if (type=="dropdown") { %>\n <% } else if (type=="number") { %>\n <% } else if (type=="checkbox") { %>\n
    \n \n
    \n
    <% } else { %>\n <% } %>\n
    <% if (type != "richtext") { %>\n <% } %>\n
    '),t.put("custom-attributes/custom-attribute-value.html",'\n
    \n
    <%- name %><% if (description){ %><%- description %><% } %>
    <% if (type=="url") { %>\n <% } else if (type=="richtext") { %>\n
    \n
    \n
    <% } else if (type=="checkbox") { %>\n
    <% if (value) { %>{{ \'COMMON.YES\' | translate }}<% } else { %>{{ \'COMMON.NO\' | translate }}<% } %>
    <% } else { %>\n
    <%- value %>
    <% } %>\n <% if (isEditable) { %>\n <% } %>\n
    '),t.put("custom-attributes/custom-attributes-values.html",'\n
    \n \n
    \n
    \n
    \n
    '),t.put("epic/epic-detail.html",'\n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n \n \n \n
    '), +t.put("error/error.html",'\n
    \n
    TAIGA\n

    Taiga

    \n

    \n
    \n
    '),t.put("error/not-found.html",'\n
    \n
    TAIGA\n

    \n

    \n
    \n
    '),t.put("error/permission-denied.html",'\n
    \n
    TAIGA\n

    \n

    \n
    \n
    '),t.put("issue/assign-sprint-to-issue-button.html",'\n \n \n \n'),t.put("issue/iocaine-button.html",'\n
    \n \n \n
    '),t.put("issue/issue-paginator.html",'\n
      <% if (showPrevious) { %>\n <% } %>\n <% _.each(pages, function(item) { %>\n
    • <% if (item.type === "page") { %><%- item.num %><% } else if (item.type === "page-active") { %><%- item.num %><% } else { %>...<% } %>
    • <% }); %>\n <% if (showNext) { %>\n <% } %>\n
    '),t.put("issue/issue-priority-button.html",'\n
    <%- priority.name %><% if(editable){ %>\n <% }%>\n \n
    '),t.put("issue/issue-severity-button.html",'\n
    <%- severity.name %><% if(editable){ %>\n <% }%>\n \n
    '),t.put("issue/issue-status-inline-edition-selection.html",'\n'),t.put("issue/issue-type-button.html",'\n
    <%- type.name %><% if(editable){ %>\n <% }%>\n \n
    '),t.put("issue/issues-detail.html",'\n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n
    '),t.put("issue/issues.html",'\n'),t.put("issue/promote-issue-to-us-button.html",'\n '),t.put("kanban/kanban.html",'\n
    \n \n
    \n \n
    \n
    \n

    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    {{ usByStatus.get(s.id.toString()).size }}0
    \n
    \n \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    '),t.put("search/lightbox-search.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("search/search.html",'\n
    \n \n \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n \n
    \n \n \n \n \n \n
    \n
    '),t.put("task/related-task-create-form.html",'\n'), +t.put("task/related-task-row-edit.html",'\n
    \n \n
    \n
    \n \n
    \n\n\n
    \n
    \n
    \n \n
    \n
    '),t.put("task/related-task-row.html",'\n
    <% if(perms.modify_task) { %>\n <% } %>\n
    \n\n
    <% if(perms.modify_task) { %>\n <% } %>\n <% if(perms.delete_task) { %>\n <% } %>\n
    \n\n
    \n
    \n
    <% if(perms.modify_task) { %>\n <% } %>\n
    \n
    '),t.put("task/task-detail.html",'\n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n \n \n \n
    '),t.put("taskboard/taskboard-user.html",'\n
    \n'),t.put("taskboard/taskboard.html",'\n
    \n \n
    \n \n
    \n

    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    {{rolePoint.points}}{{rolePoint.name}}
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n

    \n \n \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n

    \n

    \n
    \n

    \n \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n

    \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n \n
    '),t.put("team/leave-project.html",'\n {{ \'TEAM.ACTION_LEAVE_PROJECT\' | translate }}'),t.put("team/team-filter.html",'\n'),t.put("team/team-member-current-user.html",'\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("team/team-member-stats.html",'\n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("team/team-members.html",'\n
    \n
    \n
    \n \n
    \n
    \n
    \n
    '),t.put("team/team.html",'\n
    \n \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{filtersRole.name || ("TEAM.SECTION_FILTER_ALL" | translate)}}

    \n
    \n
    \n
    '),t.put("us/us-client-requirement-button.html",'\n\n'),t.put("us/us-detail.html",'\n
    \n \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n \n \n \n \n \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n {{\'US.TRIBE.PUBLISH_INFO\' | translate}}\n
    \n
    \n \n \n \n \n \n
    \n
    \n \n \n \n \n \n
    '), +t.put("us/us-team-requirement-button.html",'\n\n'),t.put("user/cancel-account.html",'\n'),t.put("user/change-email.html",'\n
    \n
    \n
    \n
    \n\n \n \n \n \n \n \n \n \n \n\n\n
    \n

    Taiga

    \n
    \n

    \n

    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("user/live-notifications.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{sectionName | translate}}

    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("user/mail-notifications.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{sectionName | translate}}

    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("user/user-change-password.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{sectionName | translate}}

    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    '),t.put("user/user-profile.html",'\n
    \n \n
    \n \n
    \n
    \n \n
    \n'),t.put("user/user-project-settings.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{ \'USER_SETTINGS.PROJECT_SETTINGS.SET_START_PAGES\' | translate }}

    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ projectSettings.project_name }}
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("user/web-notifications.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n

    {{sectionName | translate}}\n

    \n
    \n

     

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("wiki/wiki-list.html",'\n
    \n \n \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    {{wikipage.editions}}
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("wiki/wiki-nav.html",'\n
    \n

    \n
    \n\n\n<% if (addWikiLinkPermission) { %>\n <% } %>\n'),t.put("wiki/wiki-summary.html",'\n
    \n
    <%- user.name %>
    \n
    <%- user.name %>
    \n
    \n
    <%- lastModifiedDate %>
    \n
    <%- totalEditions %>
    \n'),t.put("wiki/wiki.html",'\n
    \n \n \n
    \n
    \n

    \n
    \n \n
    \n \n \n
    \n
    '), +t.put("common/estimation/us-estimation-points-per-role.html",'\n
      <% _.each(roles, function(role) { %>\n
    • <%- role.points %>\n <%- role.name %>
    • <% }); %>\n
    • <%- totalPoints %>
    • \n
    '),t.put("common/estimation/us-estimation-points.html",'\n'),t.put("common/estimation/us-estimation-total.html",'<%= text %><% if (editable) { %>\n <% } %>'),t.put("common/estimation/us-points-roles-popover.html",'\n'),t.put("common/components/add-button.html",'\n '),t.put("common/components/assigned-to-inline.html",'\n
    {{ fullName }}\n
    \n \n
    \n
    \n
    \n \n \n
    '),t.put("common/components/assigned-to.html",'\n
    {{ fullName }}\n
    \n \n
    \n
    \n
    \n \n
    {{ "COMMON.ASSIGNED_TO.NOT_ASSIGNED" | translate }}
    \n \n
    '),t.put("common/components/assigned-users-inline.html",'\n
    \n
    \n
    {{assignedUser.full_name_display}}
    \n
    +{{ hiddenUsers }}
    \n
    \n
    \n
    {{assignedUsers[0].full_name_display}}
    \n
    \n
    {{ assignedUsers[0].full_name_display }}
    \n \n
    \n
    \n \n
    \n\n'),t.put("common/components/assigned-users.html",'\n
    {{ "COMMON.FIELDS.ASSIGNED_TO" | translate }}
    \n
    \n
    \n
    {{ \'COMMON.ASSIGNED_TO.ASSIGN\' | translate }}\n
    \n
    \n \n
    {{ "COMMON.ASSIGNED_TO.NOT_ASSIGNED" | translate }}
    \n
    \n
    \n \n
    \n
    \n {{ "COMMON.ASSIGNED_USERS.ADD_ASSIGNED" | translate }}\n
    '),t.put("common/components/block-button.html",'\n \n '),t.put("common/components/created-by.html",'\n
    \n
    {{date}}
    \n
    \n
    {{owner.full_name_display}}
    '),t.put("common/components/delete-button.html",'\n '),t.put("common/components/editable-description-msg-edit-mode.html",'\n

    '),t.put("common/components/editable-description-msg-read-mode.html",'\n

    '),t.put("common/components/editable-subject.html",'\n
    {{ item.subject }}\n \n
    \n
    \n \n \n
    '),t.put("common/components/kanban-placeholder.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{\'KANBAN.PLACEHOLDER_CARD_TITLE\' | translate}}

    \n

    {{\'KANBAN.PLACEHOLDER_CARD_TEXT\' | translate}}

    '),t.put("common/components/level.html",'\n
    '),t.put("common/components/list-item-assigned-to-avatar.html",'\n
    <%- name %><%- name %>
    '),t.put("common/components/main-title.html",'{{ projectName }}{{ sectionName | translate }}'),t.put("common/components/progress-bar.html",'\n
    '),t.put("common/components/status-button.html",'<%- status.name %><% if(editable){ %>\n <% }%>\n'),t.put("common/components/status-display.html",'<% if (is_closed) { %><% } else { %><% } %>'),t.put("common/components/taskboard-placeholder.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{\'TASKBOARD.PLACEHOLDER_CARD_TITLE\' | translate}}

    \n

    {{\'TASKBOARD.PLACEHOLDER_CARD_TEXT\' | translate}}

    '),t.put("common/components/user-display.html",'\n
    {{user.full_name_display}}
    {{user.full_name_display}}\n
    {{user.full_name_display}}
    {{user.full_name_display}}'),t.put("common/components/watchers.html",'\n
    \n
    {{watcher.full_name_display}}
    \n
    {{watcher.full_name_display}}\n \n
    \n
    '),t.put("common/components/wysiwyg-toolbar.html",'\n
    \n
    \n

    {{\'COMMON.WYSIWYG.OUTDATED\' | translate}}

    \n
    \n
    \n \n
    Markdown ModeHTML Mode\n
    \n
    \n\n'),t.put("common/lightbox/lightbox-assigned-to-users.html",'<% if (selected) { %>\n<% } %>\n<% _.each(users, function(user) { %>\n<% }) %>\n<% if (showMore) { %>\n
    <% } %>'),t.put("common/lightbox/lightbox-assigned-to.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n
    '),t.put("common/lightbox/lightbox-assigned-users-users.html",'<% _.each(selected, function(user) { %>\n<% }) %>\n<% _.each(users, function(user) { %>\n<% }) %>\n<% if (showMore) { %>\n
    <% } %>'),t.put("common/lightbox/lightbox-assigned-users.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n
    \n
    '),t.put("common/lightbox/lightbox-block.html",'\n\n
    \n

    \n
    \n \n
    \n
    '),t.put("common/lightbox/lightbox-blocking-message-input.html",'\n'),t.put("common/lightbox/lightbox-change-owner.html",'\n\n
    \n

    \n
    \n \n
    \n \n
    \n
    \n \n \n \n
    \n
    \n \n
    '),t.put("common/lightbox/lightbox-due-date.html",'\n\n
    \n

    \n
    \n \n
      \n
    • {{ \'LIGHTBOX.SET_DUE_DATE.SUGGESTIONS.IN_ONE_WEEK\' | translate }}
    • \n
    • {{ \'LIGHTBOX.SET_DUE_DATE.SUGGESTIONS.IN_TWO_WEEKS\' | translate }}
    • \n
    • {{ \'LIGHTBOX.SET_DUE_DATE.SUGGESTIONS.IN_ONE_MONTH\' | translate }}
    • \n
    • {{ \'LIGHTBOX.SET_DUE_DATE.SUGGESTIONS.IN_THREE_MONTHS\' | translate }}
    • \n
    \n
    \n
    {{ \'LIGHTBOX.SET_DUE_DATE.REASON_FOR_DUE_DATE\' | translate }}\n \n
    \n \n \n
    '),t.put("common/lightbox/lightbox-leave-project-warning.html",'\n\n
    \n \n

    {{\'LIGHTBOX.LEAVE_PROJECT_WARNING.TITLE\' | translate}}

    \n
    \n

    {{\'LIGHTBOX.LEAVE_PROJECT_WARNING.CURRENT_USER_OWNER.DESC\' | translate}}

    \n
    \n
    \n

    {{\'LIGHTBOX.LEAVE_PROJECT_WARNING.OTHER_USER_OWNER.DESC\' | translate}}

    \n
    \n
    '),t.put("common/lightbox/lightbox-relate-to-epic.html",'\n\n'),t.put("common/lightbox/lightbox-request-ownership.html",'\n\n
    \n

    \n

    \n
    '),t.put("common/lightbox/lightbox-users.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n
    \n
    '),t.put("common/popover/popover-related-task-status.html",'\n'),t.put("common/popover/popover-us-status.html",'\n'),t.put("common/tag/lb-tag-line-tags.html",'<% _.each(tags, function(tag) { %><%- tag.name %>\n <% }); %>'),t.put("common/tag/lb-tag-line.html",'\n
    \n'),t.put("common/tag/tag-line.html",'\n
    \n '),t.put("common/tag/tags-line-tags.html",'\n<% _.each(tags, function(tag) { %>\n<% if (tag.name == deleteTagLoading) { %>\n
    <% } else { %><%- tag.name %><% if (isEditable) { %>\n <% } %><% } %>\n<% }); %>\n
    '), +t.put("common/wysiwyg/wysiwyg-markitup-preview.html",'\n
    \n
    \n \n
    <%= data %>
    \n
    \n
    '),t.put("user/lightbox/lightbox-delete-account.html",'\n\n
    \n

    \n

    \n
    \n
    '),t.put("common/lightbox/lightbox-create-edit/lb-create-edit-issue.html",'\n
    \n
    \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    '),t.put("common/lightbox/lightbox-create-edit/lb-create-edit-task.html",'\n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    '),t.put("common/lightbox/lightbox-create-edit/lb-create-edit-us.html",'\n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("common/lightbox/lightbox-create-edit/lb-create-edit.html",'\n\n
    \n

    {{ \'LIGHTBOX.CREATE_EDIT.NEW_\' + translationID | translate }}{{ \'LIGHTBOX.CREATE_EDIT.EDIT_\' + translationID | translate }}{{ \'LIGHTBOX.CREATE_EDIT.ADD_EXISTING_\' + translationID | translate: { targetName: targetName } }}

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    {{ selectedStatus.name }}\n \n
    \n \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    '),t.put("projects/create/asana-import/asana-import-project-form/asana-import-project-form.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n

    \n

    \n
    \n \n \n
    \n
    \n
    \n
    '),t.put("projects/create/github-import/github-import-project-form/github-import-project-form.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    '),t.put("projects/create/invite-members/single-member/single-member.html",'\n'),t.put("projects/create/jira-import/jira-import-project-form/jira-import-project-form.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n

    \n

    \n
    \n

    \n
    \n \n \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    '),t.put("projects/create/trello-import/trello-import-project-form/trello-import-project-form.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    '),t.put("external-apps/external-app.html",'\n
    \n \n

    Taiga

    \n

    \n
    \n
    \n
    {{::vm.user.get(\'full_name_display\')}}
    \n
    \n

    {{ ::vm.user.get("full_name_display") }}

    \n

    {{ ::vm.user.get("email") }}

    \n
    \n
    \n
    \n
    \n
    \n
    {{::vm.application.get(\'name\')}}
    \n
    \n

    {{ ::vm.application.get("name") }}

    {{ ::vm.application.get(\'web\') }}\n

    {{ ::vm.application.get("description") }}

    \n
    \n
    \n
    \n
    '),t.put("history/history.html",'\n
    \n \n \n
    \n \n
    \n
    '),t.put("home/home.html",'\n
    \n
    \n

    {{"HOME.DASHBOARD" | translate}}

    \n \n
    \n \n
    '),t.put("invite-members/lightbox-add-members.html",'\n\n
    \n

    \n \n \n
    '),t.put("navigation-bar/navigation-bar.html",'\n'), +t.put("notifications/notifications.html",'\n
    \n
    \n
    \n

    {{ \'EVENTS.MY_EVENTS\' | translate }}

    {{ \'EVENTS.DISMISS_ALL\' | translate }}{{ \'EVENTS.DISMISS_ALL\' | translate }}\n
    \n \n
    \n
    '),t.put("profile/profile.html",'\n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    '),t.put("components/assigned-to/assigned-to.html",'{{vm.assignedTo.get(\'full_name_display\')}}{{vm.assignedTo.get(\'full_name_display\')}}{{\'EPICS.DASHBOARD.UNASSIGNED\' | translate}}{{\'EPICS.DASHBOARD.UNASSIGNED\' | translate}}'),t.put("components/attachments-full/attachments-full.html",'\n
    \n
    \n

    {{vm.attachments.size}}

    \n
    \n \n \n
    \n \n \n
    \n
    \n
    \n
    \n
    {{\'ATTACHMENT.DROP\' | translate}}
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n {{file.name}}\n
    \n
    {{file.size | sizeFormat}}
    \n
    {{file.progressMessage}}\n
    \n
    \n
    \n
    \n
    \n \n
    \n'),t.put("components/attachment/attachment-gallery.html","\n"),t.put("components/attachment/attachment.html",'\n
    \n \n
    {{\'ATTACHMENT.DEPRECATED\' | translate}}{{vm.attachment.getIn([\'file\', \'description\'])}}
    \n
    {{::vm.attachment.getIn([\'file\', \'size\']) | sizeFormat}}
    \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n
    '),t.put("components/attachments-simple/attachments-simple.html",'\n
    \n
    \n

    {{vm.attachments.size}}

    \n
    \n \n \n
    \n
    \n
    \n
    {{\'ATTACHMENT.DROP\' | translate}}
    \n
    \n
    \n
    \n
    \n {{attachment.get(\'name\')}}\n
    \n
    {{attachment.get(\'size\') | sizeFormat}}
    \n \n
    \n
    \n
    '),t.put("components/attachments-preview/attachments-preview.html",'\n
    \n \n \n
    '),t.put("components/belong-to-epics/belong-to-epics-pill.html","\n
    "),t.put("components/belong-to-epics/belong-to-epics-text.html",':\n'),t.put("components/board-zoom/board-zoom.html",'\n'),t.put("components/card/card.html","\n
    \n
    \n
    \n
    \n
    {{vm.item.getIn(['assigned_to', 'full_name'])}}\n \n
    \n \n \n \n
    \n \n
    {{ vm.item.getIn(['status', 'name']) }}{{\"COMMON.FIELDS.POINTS\" | translate}} {{vm.item.getIn(['model', 'total_points'])}}\n
    \n \n
    \n \n
    \n
    \n {{vm.item.getIn(['model', 'total_voters'])}}\n
    \n
    \n {{vm.item.getIn(['model', 'watchers']).size}}\n
    \n
    \n {{vm.item.getIn(['model', 'total_comments'])}}\n
    \n
    \n {{vm.item.getIn(['model', 'attachments']).size}}\n
    \n
    \n
    \n
    \n
    \n
    tasks {{vm.getClosedTasks().size}}/{{vm.item.getIn(['model', 'tasks']).size}}\n
    \n
      \n
    • \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    "),t.put("components/color-selector/color-selector.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
      \n
    • \n
    • \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    '),t.put("components/card-slideshow/card-slideshow.html",'\n
    \n \n \n
    \n \n
    \n
    '),t.put("components/due-date/due-date-button.html",'\n'),t.put("components/due-date/due-date-icon.html",'\n'),t.put("components/due-date/due-date-popover.html",'\n
    \n \n \n
    \n
    \n \n
    \n
    '),t.put("components/filter/filter.html",'\n

    \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    {{it.name}}\n
    \n
    \n \n
    \n
    \n
    {{\'COMMON.FILTERS.TITLE_ADVANCED_FILTER\' | translate}}\n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    '), +t.put("components/move-to-sprint/move-to-sprint.html",'\n '),t.put("components/live-announcement/live-announcement.html",'\n
    \n
    Loading...\n
    \n

    {{vm.title}}

    \n

    \n \n
    \n
    \n
    '),t.put("components/project-menu/project-menu.html",'\n'),t.put("components/search-list/search-list-issue-choice.html",'\n
    #{{ item.ref }} {{ item.subject }}
    \n
    {{ milestonesById[item.milestone].name }}
    '),t.put("components/search-list/search-list-sprint-choice.html",'\n
    {{ item.name }}
    \n
    {{ item.estimated_start }} - {{ item.estimated_finish }}
    '),t.put("components/search-list/search-list.html",'\n
    \n \n {{ textShowClosed }} \n {{ textHideClosed }}\n \n
      \n
    • \n \n
    • \n
    \n

    {{ noItemsText }}

    \n
    '),t.put("components/terms-announcement/terms-announcement.html",'\n
    \n
    Loading...\n
    \n

    {{\'LEGAL.GDPR_ANNOUNCEMENT_TITLE\' | translate}}

    \n

    {{ \'LEGAL.GDPR_ANNOUNCEMENT_DESCRIPTION\' | translate }}

    {{\'LEGAL.GDPR_ANNOUNCEMENT_INFOLINK\' | translate}}\n \n
    \n
    \n
    '),t.put("components/terms-of-service-and-privacy-policy-notice/terms-of-service-and-privacy-policy-notice.html",'\n

    \n \n

    '),t.put("components/tips/tip.html",'\n
    \n

    \n

    \n
    \n

    \n 5\n

    \n \n

    \n \n \n

    \n
    \n
    \n
    \n

    \n
    '),t.put("components/vote-button/vote-button.html",'\n {{ vm.item.total_voters }}\n {{ ::vm.item.total_voters }}'),t.put("components/tribe-button/tribe-button.html",'{{ \'US.TRIBE.PUBLISH\' | translate }}'),t.put("components/tribe-button/tribe-linked.html",'\n'),t.put("components/watch-button/watch-button-ticket.html",'\n
    {{ \'COMMON.WATCH_BUTTON.COUNTER_TITLE\'|translate:{total:vm.item.watchers.length||0}:\'messageformat\' }}
    \n'),t.put("components/watch-button/watch-button.html",'\n {{ \'COMMON.WATCH_BUTTON.COUNTER_TITLE\'|translate:{total:vm.item.watchers.length||0}:\'messageformat\' }}\n {{ \'COMMON.WATCH_BUTTON.COUNTER_TITLE\'|translate:{total:vm.item.watchers.length||0}:\'messageformat\' }}'),t.put("discover/discover-home/discover-home.html",'\n
    \n
    \n \n
    \n
    \n \n \n
    \n \n
    '),t.put("discover/discover-search/discover-search.html",'\n
    \n \n
    {{ DISCOVER.EMPTY | translate }}\n

    \n
    \n
    \n
    \n
    \n \n
    \n
      \n
    • \n
      {{::project.get(\'name\')}}\n
      \n

      {{project.get(\'name\')}}\n \n

      \n

      {{ ::project.get(\'description\') | limitTo:300 }}...

      \n
      \n
      \n
      \n {{::project.get(\'total_fans\')}}\n {{::project.get(\'total_watchers\')}}\n {{ ::project.get(\'members\').size }}
      \n
    • \n
    {{ \'DISCOVER.VIEW_MORE\' | translate }}\n
    \n
    \n
    '),t.put("epics/create-epic/create-epic.html",'\n\n
    \n

    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n
    \n
    '),t.put("epics/dashboard/epics-dashboard.html",'\n
    \n \n
    \n
    \n

    \n
    \n \n
    \n
    \n \n
    \n

    \n

    \n \n
    \n
    \n
    '),t.put("epics/related-userstories/related-userstories.html",'\n'),t.put("history/comments/comment.html",'\n
    \n
    \n
    {{vm.comment.user.name}}{{vm.comment.created_at | momentFormat:\'DD MMM YYYY HH:mm\'}}\n
    {{vm.comment.edit_comment_date | momentFormat:\'DD MMM YYYY HH:mm\'}}-\n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n
    \n
    \n
    \n
    - {{vm.comment.delete_comment_date | momentFormat:\'DD MMM YYYY HH:mm\'}}\n \n \n
    \n

    \n
    '),t.put("history/comments/comments.html",'\n
    \n
    \n \n
    \n \n
    '),t.put("history/history/history-diff.html",'\n
    \n
    {{diff[0]}}\n {{diff[1]}}\n
    \n
    \n
    \n
    {{newAttachment.filename}}
    \n
    {{editAttachment.changes.description[0]}}...\n {{editAttachment.changes.description[1]}}
    \n
    {{deletedAttachment.filename}}
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    \n

    \n

    \n

    \n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0] | momentFormat:\'DD MMM YYYY\'}}\n {{vm.diff[1] | momentFormat:\'DD MMM YYYY\'}}\n
    \n
    \n
    \n
    \n

    {{vm.diffRemoveTags}}

    \n

    {{vm.diffAddTags}}

    \n
    \n
    \n
    \n
    ({{newCustom.name}})\n

    {{newCustom.value}}
    \n
    ({{changeCustom.name}})\n

    {{changeCustom.changes.value[0]}}\n {{changeCustom.changes.value[1]}}
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    \n
    \n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    \n
    '), +t.put("history/history/history.html",'\n
    \n
    \n
    \n
    \n
    {{activity.user.name}}{{activity.created_at | momentFormat:\'DD MMM YYYY HH:mm\'}}
    \n
    \n
    \n
    \n
    \n
    '),t.put("history/history-lightbox/comment-history-lightbox.html",'\n\n
    \n

    \n
    \n \n
    \n
    '),t.put("history/history-lightbox/history-entry.html",'\n
    \n
    \n
    {{entry.user.full_name_display}}\n \n
    \n
    \n
    \n
    '),t.put("history/history-tabs/history-tabs.html",'\n'),t.put("home/duties/duty.html","\n
    \n
    \n
    \n

    {{ ::vm.duty.getIn(['project', 'name']) }}{{ ::vm.getDutyType() }}{{ ::vm.duty.get('status_extra_info').get('name') }}\n \n

    \n

    {{ 'COMMON.BLOCKED' | translate }}

    \n
    "),t.put("home/projects/home-project-list.html",'\n
    \n
    \n
    \n
    \n

    {{::project.get(\'name\')}}\n \n \n \n

    \n
    \n

    {{::project.get(\'description\')| limitTo:100 }}...

    \n
    \n {{::project.get(\'total_fans\')}}\n {{::project.get(\'total_watchers\')}}\n {{ ::project.get(\'members\').size }}\n
    \n
    \n
    \n
    \n
    \n \n

    \n
    '),t.put("home/working-on/empty.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("home/working-on/working-on.html",'\n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    '),t.put("invite-members/invite-members-form/invite-members-form.html",'\n
    \n
      \n
    • \n
      {{contact.full_name}}{{contact.full_name}}
      \n \n
    • \n
    • \n
      {{userMail.email}}
      \n \n
    • \n
    \n
    \n \n
    \n \n \n \n

    \n
    '),t.put("invite-members/suggest-add-members/suggest-add-members.html",'\n
    \n
    \n \n \n
    \n
      \n
    • {{contact.get(\'full_name_display\')}}{{contact.get(\'full_name_display\')}}
    • \n
    \n
    '),t.put("navigation-bar/dropdown-project-list/dropdown-project-list.html",'\n \n'),t.put("navigation-bar/dropdown-notifications/dropdown-notifications.html",'\n \n
    {{ total }}
    \n'),t.put("navigation-bar/dropdown-user/dropdown-user.html",'{{ vm.user.get(\'full_name_display\') }}{{ vm.user.get(\'full_name_display\') }}\n'),t.put("notifications/notifications-list/notifications-list.html",'\n
    \n
    \n
    Loading...
    \n
    \n
    \n
    {{ \'EVENTS.NO_EVENTS_YET\' | translate }}
    \n
    \n
    \n
    \n \n
    {{::notification.getIn([\'data\', \'user\', \'name\'])}}
    \n \n
    {{::notification.getIn([\'data\', \'user\', \'name\'])}}
    \n
    \n
    \n

    \n

    {{::notification.getIn([\'data\', \'project\', \'name\'])}}

    \n
    \n \n
    \n
    \n
    \n
    '),t.put("profile/profile-bar/profile-bar.html",'\n
    \n
    {{::vm.user.get(\'full_name\')}}
    \n
    \n

    {{::vm.user.get("full_name_display")}}

    \n
    @{{::vm.user.get("username")}}
    \n

    {{::vm.stats.get(\'roles\').join(", ")}}

    \n
    \n
    \n
    {{::vm.stats.get(\'total_num_projects\')}}
    \n
    {{::vm.stats.get(\'total_num_closed_userstories\')}}
    \n
    {{::vm.stats.get(\'total_num_contacts\')}}
    \n
    \n
    {{::vm.user.get("bio") | limitTo:210 }}{{vm.user.get("bio").length < 210 ? \'\' : \'...\'}}
    \n
    '),t.put("profile/profile-contacts/profile-contacts.html",'\n
    \n
    \n
    Loading...
    \n
    \n
    {{ \'USER.PROFILE.CONTACTS_EMPTY\' | translate }}\n
    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n
    {{::contact.get(\'full_name\')}}\n
    \n

    {{::contact.get(\'full_name_display\')}}

    \n

    {{::contact.get(\'roles\').join(", ")}}

    \n

    {{::contact.get(\'bio\')}}

    \n
    \n
    \n
    '),t.put("profile/profile-favs/profile-favs.html",'\n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    {{ \'COMMON.LOADING\'|translate }}
    \n
    \n
    {{ \'USER.PROFILE_FAVS.EMPTY_TITLE\' | translate }}{{ \'USER.PROFILE_FAVS.EMPTY_TITLE\' | translate }}{{ \'USER.PROFILE_FAVS.EMPTY_TITLE\' | translate }}\n

    {{ \'USER.PROFILE_FAVS.EMPTY_TITLE\' | translate }}

    \n
    \n
    '),t.put("profile/profile-hints/profile-hints.html",'\n

    \n \n

    \n

    {{::vm.hint.title}}

    \n

    \n {{::vm.hint.text}}\n  \n

    '),t.put("profile/profile-tab/profile-tab.html",'\n
    \n \n
    '),t.put("profile/profile-projects/profile-projects.html",'\n
    \n
    \n
    Loading...
    \n
    \n
    \n \n

    \n
    \n
    \n
    \n
    {{::project.get(\'name\')}}\n
    \n

    {{::project.get(\'name\')}}\n \n

    \n

    {{ ::project.get(\'description\') | limitTo:300 }}

    \n
    \n
    \n
    \n
    \n
    \n {{ ::project.get(\'total_fans\') }}\n {{ ::project.get(\'total_watchers\') }}
    \n
    {{::contact.get(\'full_name\')}}
    \n
    \n
    \n
    '),t.put("profile/profile-tabs/profile-tabs.html",'\n'),t.put("projects/create/create-project.html",'\n'), +t.put("projects/listing/projects-listing.html",'\n
    \n
    \n

    \n
    \n
    \n
    \n
    \n
      \n
    • \n
      \n
      {{::project.get(\'name\')}}\n
      \n

      {{project.get(\'name\')}}\n \n \n \n

      \n

      {{ ::project.get(\'description\') | limitTo:300 }}...

      \n
      \n
      \n
      \n \n
    • \n
    \n
    \n \n
    \n
    '),t.put("projects/project/blocked-project-explanation.html","\n
    \n
    {{'PROJECT.BLOCKED_PROJECT.THIS_PROJECT_IS_BLOCKED' | translate}}
    \n
    \n
    \n
    {{'PROJECT.BLOCKED_PROJECT.TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF' | translate}}
    \n
    "),t.put("projects/project/blocked-project.html",'\n
    \n
    \n
    \n
    {{::vm.project.get(\'name\')}}\n \n
    {{::vm.project.get("name")}}\n
    \n
    \n

    {{\'PROJECT.BLOCKED_PROJECT.BLOCKED\' | translate}}

    \n \n
    \n
    \n
    '),t.put("projects/project/project.html",'\n
    \n \n
    \n
    \n \n
    \n
    \n
    \n

    {{::vm.project.get("name")}}

    \n \n
    \n
    \n \n \n \n
    \n
    \n
    \n {{ ::vm.project.get(\'total_fans\') }}\n {{ ::vm.project.get(\'total_watchers\') }}
    \n
    \n
    \n

    {{vm.project.get(\'description\')}}

    \n
    \n
    \n
    {{::tag}}
    \n
    \n
    \n
    \n
    \n
    \n
    \n

    {{\'PROJECT.LOOKING_FOR_PEOPLE\' | translate}}

    \n

    {{::vm.project.get(\'looking_for_people_note\')}}

    \n \n
    \n

    {{"PROJECT.SECTION.TEAM" | translate}}

    \n \n
    \n
    \n
    \n
    '),t.put("user-timeline/user-timeline/user-timeline.html",'\n
    \n
    \n
    Loading...
    \n
    \n
    \n
    \n
    \n
    '),t.put("user-timeline/user-timeline-attachment/user-timeline-attachment-image.html",'\n\n
    \n
    {{::attachment.get(\'filename\')}}
    \n
    '),t.put("user-timeline/user-timeline-attachment/user-timeline-attachment.html",'\n'),t.put("projects/transfer/cant-own-project-explanation.html",'\n

    '),t.put("projects/transfer/transfer-page.html",'\n'),t.put("projects/transfer/transfer-project.html",'\n
    \n

    \n
    {{vm.project.get(\'name\')}}\n
    \n

    {{::vm.project.get("name")}}

    \n
    \n \n {{::vm.project.get("total_memberships")}}
    \n
    \n
    \n

    \n
    \n

    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n \n
    '),t.put("user-timeline/user-timeline-item/user-timeline-item.html","\n
    {{::timeline.get('created') | momentFromNow}}\n
    \n
    \n \n
    \"{{::timeline.getIn(['data',
    \n \n
    \"{{::timeline.getIn(['data',
    \n

    \n
    \n
    {{::timeline.get('description') | limitTo:300}}
    \n
    \"{{::timeline.getIn(['member','user',\n
    {{::timeline.getIn(['member','user', 'name'])}}\n

    {{::timeline.getIn(['member','role', 'name'])}}

    \n
    \n
    \n
    \n
    \n
    \n
    "),t.put("wiki/history/wiki-history-diff.html",'\n
    \n
    {{newAttachment.filename}}
    \n
    {{editAttachment.changes.description[0]}}...\n {{editAttachment.changes.description[1]}}
    \n
    {{deletedAttachment.filename}}
    \n
    \n
    \n

    \n

    \n
    '),t.put("wiki/history/wiki-history-entry.html",'\n
    \n
    \n
    {{singleHistoryEntry.user.name}}{{singleHistoryEntry.created_at | momentFormat:\'DD MMM YYYY HH:mm\'}}
    \n
    \n
    \n
    '),t.put("wiki/history/wiki-history.html",'\n\n

    {{ disablePagination }}

    \n
    \n \n
    '),t.put("components/assigned-to/assigned-item/assigned-item.html",'\n
    \n
    {{member.full_name}}
    \n
    '),t.put("components/assigned-to/assigned-to-selector/assigned-to-selector.html",'\n\n
    \n

    \n \n
      \n
    • \n \n \n
    • \n
    • \n \n
    • \n
    \n
    '),t.put("components/card/card-templates/card-completion.html","\n
    \n
    \n
    tasks {{vm.getClosedTasks().size}}/{{vm.item.getIn(['model', 'tasks']).size}}\n
    "),t.put("components/card/card-templates/card-data.html","\n
    {{ vm.item.getIn(['status', 'name']) }}{{\"COMMON.FIELDS.POINTS\" | translate}} {{vm.item.getIn(['model', 'total_points'])}}\n
    \n \n
    \n \n
    \n
    \n {{vm.item.getIn(['model', 'total_voters'])}}\n
    \n
    \n {{vm.item.getIn(['model', 'watchers']).size}}\n
    \n
    \n {{vm.item.getIn(['model', 'total_comments'])}}\n
    \n
    \n {{vm.item.getIn(['model', 'attachments']).size}}\n
    \n
    \n
    "),t.put("components/card/card-templates/card-owner.html",'\n
    \n
    \n
    {{vm.item.getIn([\'assigned_to\', \'full_name\'])}}\n \n
    \n \n \n \n
    '),t.put("components/card/card-templates/card-tags.html",'\n
    '),t.put("components/card/card-templates/card-tasks.html","\n
      \n
    • \n
    "),t.put("components/card/card-templates/card-title.html","\n

    {{::\"#\" + vm.item.getIn(['model', 'ref'])}}\n

    "),t.put("components/card/card-templates/card-unfold.html",'\n
    \n \n
    \n
    '),t.put("components/detail/header/detail-header.html",'\n
    \n

    {{\'#\' + vm.item.ref}}\n \n \n

    \n
    \n \n \n \n
    \n
    \n
    \n \n \n
    \n\n
    \n\n\n
    {{vm.item.blocked_note}}
    \n'), +t.put("components/move-to-sprint/move-to-sprint-lb/move-to-sprint-lb.html",'\n\n
    \n
    \n

    {{ \'TASKBOARD.MOVE_TO_SPRINT.TITLE_ACTION_MOVE_UNFINISHED\'|translate }}

    \n
      \n
    • \n
      \n \n
      \n
      \n
    • \n
    • \n
      \n \n
      \n
      \n
    • \n
    • \n
      \n \n
      \n
      \n
    • \n
    \n
    \n
    \n

    {{ \'TASKBOARD.MOVE_TO_SPRINT.NO_OPEN_SPRINTS\'|translate }}

    \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    '),t.put("components/tags/components/add-tag-button.html",'\n '),t.put("components/tags/components/add-tag-input.html",'\n
    \n \n \n \n \n
    '),t.put("components/tags/tag/tag.html",'\n'),t.put("components/tags/tag-dropdown/tag-dropdown.html",'\n
      \n
    • \n
      {{tag[0]}}
      \n
    • \n
    '),t.put("components/tags/tag-line-common/tag-line-common.html",'\n
    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n \n \n \n \n
    '),t.put("components/tags/tag-line-detail/tag-line-detail.html",'\n'),t.put("components/wysiwyg/wysiwyg-code-lightbox/wysiwyg-code-lightbox.html",'\n\n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    \n \n
    \n
    '),t.put("discover/components/discover-home-order-by/discover-home-order-by.html",'\n
    {{vm.currentText()}}\n \n
      \n
    • {{ \'DISCOVER.FILTERS.WEEK\' | translate }}
    • \n
    • {{ \'DISCOVER.FILTERS.MONTH\' | translate }}
    • \n
    • {{ \'DISCOVER.FILTERS.YEAR\' | translate }}
    • \n
    • {{ \'DISCOVER.FILTERS.ALL_TIME\' | translate }}
    • \n
    \n
    '),t.put("discover/components/discover-search-bar/discover-search-bar.html",'\n
    \n
    \n

    {{ \'DISCOVER.DISCOVER_TITLE\' | translate }}

    \n

    \n
    \n \n
    \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n
    '),t.put("discover/components/discover-search-list-header/discover-search-list-header.html",'\n'),t.put("discover/components/featured-projects/featured-projects.html",'\n'),t.put("discover/components/highlighted/highlighted.html",'\n
    \n
    \n
    \n
    \n
    \n

    {{::project.get(\'name\')}}\n \n

    \n
    \n {{::project.get(\'total_fans\')}}\n {{::project.get(\'total_watchers\')}}\n {{ ::project.get(\'members\').size }}
    \n
    \n

    {{ ::project.get(\'description\') | limitTo:150 }}{{ ::project.get(\'description\').length < 150 ? \'\' : \'...\'}}

    \n
    \n
    \n \n
    '),t.put("discover/components/most-active/most-active.html",'\n
    \n
    \n
    \n \n

    {{ \'DISCOVER.MOST_ACTIVE\' | translate }}

    \n
    \n \n
    \n \n
    \n
    \n {{ \'DISCOVER.MOST_ACTIVE_EMPTY\' | translate }}\n
    '),t.put("discover/components/most-liked/most-liked.html",'\n
    \n
    \n
    \n \n

    {{ \'DISCOVER.MOST_LIKED\' | translate }}

    \n
    \n \n
    \n \n
    \n
    \n {{ \'DISCOVER.MOST_LIKED_EMPTY\' | translate }}\n
    '),t.put("epics/dashboard/epic-row/epic-row.html",'\n
    \n \n
    \n {{::vm.epic.get(\'total_voters\')}}\n
    \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n
    {{vm.epic.getIn([\'status_extra_info\', \'name\'])}}
    \n
    \n \n
      \n
    • {{status.name}}
    • \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    '),t.put("epics/dashboard/epics-table/epics-table.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    '),t.put("epics/dashboard/story-row/story-row.html",'\n
    \n
    \n {{::vm.story.get(\'total_voters\')}}\n
    \n
    \n \n
    \n
    {{::vm.story.getIn([\'project_extra_info\', \'name\'])}}
    \n
    {{::vm.story.get(\'milestone_name\')}}
    \n
    {{::vm.story.getIn([\'assigned_to_extra_info\', \'full_name_display\'])}}
    \n
    {{EPICS.DASHBOARD.UNASSIGNED | translate}}
    \n
    {{vm.story.getIn([\'status_extra_info\', \'name\'])}}
    \n
    \n
    \n
    \n
    \n
    '),t.put("epics/related-userstories/related-userstories-create/related-userstories-create.html",'\n \n'), +t.put("epics/related-userstories/related-userstory-row/related-userstory-row.html",'\n\n
    \n \n
    \n\n
    {{::vm.userstory.getIn([\'project_extra_info\', \'name\'])}}
    \n
    {{vm.userstory.getIn([\'status_extra_info\', \'name\'])}}
    \n
    \n
    {{ vm.avatar.full_name_display }}\n
    {{ vm.getAssignedToFullNameDisplay() }}
    \n
    \n
    \n
    '),t.put("history/history/history-templates/blocked.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/client-requirement.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-assigned-users.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-assigned.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-attachments.html",'\n
    {{newAttachment.filename}}
    \n
    {{editAttachment.changes.description[0]}}...\n {{editAttachment.changes.description[1]}}
    \n
    {{deletedAttachment.filename}}
    '),t.put("history/history/history-templates/history-color.html",'\n
    \n \n
    '),t.put("history/history/history-templates/history-custom-attributes.html",'\n
    ({{newCustom.name}})\n

    {{newCustom.value}}
    \n
    ({{changeCustom.name}})\n

    {{changeCustom.changes.value[0]}}\n {{changeCustom.changes.value[1]}}
    '),t.put("history/history/history-templates/history-description.html",'\n
    \n

    \n

    \n

    \n
    '),t.put("history/history/history-templates/history-due-date.html",'\n
    {{vm.diff[0] | momentFormat:\'DD MMM YYYY\'}}\n {{vm.diff[1] | momentFormat:\'DD MMM YYYY\'}}\n
    '),t.put("history/history/history-templates/history-milestone.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-points.html",'\n
    {{diff[0]}}\n {{diff[1]}}\n
    '),t.put("history/history/history-templates/history-priority.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-severity.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-status.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-subject.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/history-tags.html",'\n
    \n

    {{vm.diffRemoveTags}}

    \n

    {{vm.diffAddTags}}

    \n
    '),t.put("history/history/history-templates/history-type.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("history/history/history-templates/team-requirement.html",'\n
    {{vm.diff[0]}}\n {{vm.diff[1]}}\n
    '),t.put("profile/profile-favs/items/project.html",'\n
    \n
    \n
    \n
    \n

    {{ ::vm.item.get(\'name\') }}\n \n \n

    \n

    {{ ::vm.item.get(\'description\') }}

    \n
    \n
    \n
    \n
    \n {{ ::vm.item.get(\'total_fans\') }}\n {{ ::vm.item.get(\'total_watchers\') }}
    \n
    '),t.put("profile/profile-favs/items/ticket.html",'\n
    {{ ::vm.item.getIn([\'assigned_to_extra_info\', \'full_name_display\']) }}{{ \'COMMON.ASSIGNED_TO.NOT_ASSIGNED\'|translate }}\n
    \n

    {{:: vm.item.get(\'project_name\') }}{{:: vm.item.get(\'status\') }}\n \n

    \n

    \n
    \n
    \n {{ ::vm.item.get(\'total_voters\') }}\n {{ ::vm.item.get(\'total_watchers\') }}
    \n
    '),t.put("projects/components/contact-project-button/contact-project-button.html",'\n'),t.put("projects/components/lb-contact-project/lb-contact-project.html",'\n\n'),t.put("projects/components/like-project-button/like-project-button.html",'\n'),t.put("projects/components/watch-project-button/watch-project-button.html",'\n\n'),t.put("projects/create/asana-import/asana-import.html",'\n
    \n

    autorization...

    \n
    \n\n\n'),t.put("projects/create/create-project-form/create-project-form.html",'\n
    \n
    \n \n

    \n
    \n

    \n
    \n \n

    \n
    \n

    \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    '),t.put("projects/create/create-project-members-restrictions/create-project-members-restrictions.html",'\n
    \n \n
    \n
    \n \n
    '),t.put("projects/create/create-project-restrictions/create-project-restrictions.html",'\n
    \n {{ \'PROJECT.CREATE.MAX_PRIVATE_PROJECTS\' | translate }}\n
    \n
    \n {{ \'PROJECT.CREATE.MAX_PUBLIC_PROJECTS\' | translate }}\n
    '),t.put("projects/create/duplicate/duplicate-project.html",'\n
    \n

    \n

    \n
    \n
    \n \n
    \n
    \n
    \n
    \n \n \n \n \n
    \n
    \n
    '),t.put("projects/create/github-import/github-import.html",'\n
    \n

    autorization...

    \n
    \n\n\n'),t.put("projects/create/import/import-header.html",'\n
    \n

    \n

    \n
    '),t.put("projects/create/import/import-project-error-lb.html",'\n\n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n

    \n

    \n
    \n
    \n
    '),t.put("projects/create/import/import-project.html",'\n
    \n
    \n
      \n
    • \n
    • \n \n
      Jira\n

      \n
      \n \n \n \n
      \n
      \n
    • \n
    • \n \n
      Github\n

      \n
      \n
    • \n
    • \n \n
      Trello\n

      \n
      \n
    • \n
    • \n \n
      Asana\n

      \n
      \n
    • \n
    \n
    \n \n
    \n
    \n\n\n\n'), +t.put("projects/create/import-project-form-common/actions.html",'\n
    \n \n \n
    '),t.put("projects/create/import-project-form-common/description.html",'\n
    \n \n
    '),t.put("projects/create/import-project-form-common/links.html",'\n
    \n \n
    \n \n
    \n
    \n
    '),t.put("projects/create/import-project-form-common/name.html",'\n
    \n \n \n
    '),t.put("projects/create/import-project-form-common/project-privacy.html",'\n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    '),t.put("projects/create/import-project-members/import-project-members.html",'\n
    \n
    \n

    \n

    \n \n
    \n \n \n
    \n
      \n
    • \n
      \n
      {{member.get(\'full_name\')[0].toUpperCase()}}
      \n
      {{member.get(\'full_name\') || member.get(\'username\') }}\n
      \n
      \n
      \n \n \n
      \n
      \n {{vm.getUser(member).get(\'full_name\') || vm.getUser(member)}}\n
      \n \n
      \n
    • \n
    \n
    \n \n \n
    \n \n \n
    '),t.put("projects/create/import-project-selector/import-project-selector.html",'\n
    \n
    \n
    \n
    \n
    \n
    \n \n \n
    \n
      \n
    • {{project.name}}
    • \n
    \n
    \n

    {{ vm.noProjectsMsg }}

    \n
    \n
    \n

    \n
    \n
    \n \n
    \n
    \n
    \n
    '),t.put("projects/create/import-taiga/import-taiga.html",'\n\n\n
    Taiga\n

    \n
    '),t.put("projects/create/invite-members/invite-members.html",'\n
    \n
    \n \n
    \n
    '),t.put("projects/create/jira-import/jira-import.html",'\n
    \n

    autorization...

    \n
    \n\n\n'),t.put("projects/create/select-import-user-lightbox/select-import-user-lightbox.html",'\n\n
    \n
    \n
    {{vm.user.get(\'full_name\')[0].toUpperCase() || vm.user.get(\'username\')[0].toUpperCase()}}
    \n
    {{vm.user.get(\'full_name\') || vm.user.get(\'username\')}}\n
    \n

    \n
    \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n \n
    \n \n \n
    \n
    '),t.put("projects/create/trello-import/trello-import.html",'\n\n\n'),t.put("projects/create/warning-user-import-lightbox/warning-user-import-lightbox.html",'\n\n
    \n

    \n

    \n
    \n \n \n
    \n
    '),t.put("wiki/history/history-templates/history-attachments.html",'\n
    {{newAttachment.filename}}
    \n
    {{editAttachment.changes.description[0]}}...\n {{editAttachment.changes.description[1]}}
    \n
    {{deletedAttachment.filename}}
    ')}]); \ No newline at end of file diff --git a/dist/v-1547534999795/locales/moment-locales/af.js b/dist/v-1549282893552/locales/moment-locales/af.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/af.js rename to dist/v-1549282893552/locales/moment-locales/af.js diff --git a/dist/v-1547534999795/locales/moment-locales/ar-dz.js b/dist/v-1549282893552/locales/moment-locales/ar-dz.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ar-dz.js rename to dist/v-1549282893552/locales/moment-locales/ar-dz.js diff --git a/dist/v-1547534999795/locales/moment-locales/ar-kw.js b/dist/v-1549282893552/locales/moment-locales/ar-kw.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ar-kw.js rename to dist/v-1549282893552/locales/moment-locales/ar-kw.js diff --git a/dist/v-1547534999795/locales/moment-locales/ar-ly.js b/dist/v-1549282893552/locales/moment-locales/ar-ly.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ar-ly.js rename to dist/v-1549282893552/locales/moment-locales/ar-ly.js diff --git a/dist/v-1547534999795/locales/moment-locales/ar-ma.js b/dist/v-1549282893552/locales/moment-locales/ar-ma.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ar-ma.js rename to dist/v-1549282893552/locales/moment-locales/ar-ma.js diff --git a/dist/v-1547534999795/locales/moment-locales/ar-sa.js b/dist/v-1549282893552/locales/moment-locales/ar-sa.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ar-sa.js rename to dist/v-1549282893552/locales/moment-locales/ar-sa.js diff --git a/dist/v-1547534999795/locales/moment-locales/ar-tn.js b/dist/v-1549282893552/locales/moment-locales/ar-tn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ar-tn.js rename to dist/v-1549282893552/locales/moment-locales/ar-tn.js diff --git a/dist/v-1547534999795/locales/moment-locales/ar.js b/dist/v-1549282893552/locales/moment-locales/ar.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ar.js rename to dist/v-1549282893552/locales/moment-locales/ar.js diff --git a/dist/v-1547534999795/locales/moment-locales/az.js b/dist/v-1549282893552/locales/moment-locales/az.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/az.js rename to dist/v-1549282893552/locales/moment-locales/az.js diff --git a/dist/v-1547534999795/locales/moment-locales/be.js b/dist/v-1549282893552/locales/moment-locales/be.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/be.js rename to dist/v-1549282893552/locales/moment-locales/be.js diff --git a/dist/v-1547534999795/locales/moment-locales/bg.js b/dist/v-1549282893552/locales/moment-locales/bg.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/bg.js rename to dist/v-1549282893552/locales/moment-locales/bg.js diff --git a/dist/v-1547534999795/locales/moment-locales/bm.js b/dist/v-1549282893552/locales/moment-locales/bm.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/bm.js rename to dist/v-1549282893552/locales/moment-locales/bm.js diff --git a/dist/v-1547534999795/locales/moment-locales/bn.js b/dist/v-1549282893552/locales/moment-locales/bn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/bn.js rename to dist/v-1549282893552/locales/moment-locales/bn.js diff --git a/dist/v-1547534999795/locales/moment-locales/bo.js b/dist/v-1549282893552/locales/moment-locales/bo.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/bo.js rename to dist/v-1549282893552/locales/moment-locales/bo.js diff --git a/dist/v-1547534999795/locales/moment-locales/br.js b/dist/v-1549282893552/locales/moment-locales/br.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/br.js rename to dist/v-1549282893552/locales/moment-locales/br.js diff --git a/dist/v-1547534999795/locales/moment-locales/bs.js b/dist/v-1549282893552/locales/moment-locales/bs.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/bs.js rename to dist/v-1549282893552/locales/moment-locales/bs.js diff --git a/dist/v-1547534999795/locales/moment-locales/ca.js b/dist/v-1549282893552/locales/moment-locales/ca.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ca.js rename to dist/v-1549282893552/locales/moment-locales/ca.js diff --git a/dist/v-1547534999795/locales/moment-locales/cs.js b/dist/v-1549282893552/locales/moment-locales/cs.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/cs.js rename to dist/v-1549282893552/locales/moment-locales/cs.js diff --git a/dist/v-1547534999795/locales/moment-locales/cv.js b/dist/v-1549282893552/locales/moment-locales/cv.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/cv.js rename to dist/v-1549282893552/locales/moment-locales/cv.js diff --git a/dist/v-1547534999795/locales/moment-locales/cy.js b/dist/v-1549282893552/locales/moment-locales/cy.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/cy.js rename to dist/v-1549282893552/locales/moment-locales/cy.js diff --git a/dist/v-1547534999795/locales/moment-locales/da.js b/dist/v-1549282893552/locales/moment-locales/da.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/da.js rename to dist/v-1549282893552/locales/moment-locales/da.js diff --git a/dist/v-1547534999795/locales/moment-locales/de-at.js b/dist/v-1549282893552/locales/moment-locales/de-at.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/de-at.js rename to dist/v-1549282893552/locales/moment-locales/de-at.js diff --git a/dist/v-1547534999795/locales/moment-locales/de-ch.js b/dist/v-1549282893552/locales/moment-locales/de-ch.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/de-ch.js rename to dist/v-1549282893552/locales/moment-locales/de-ch.js diff --git a/dist/v-1547534999795/locales/moment-locales/de.js b/dist/v-1549282893552/locales/moment-locales/de.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/de.js rename to dist/v-1549282893552/locales/moment-locales/de.js diff --git a/dist/v-1547534999795/locales/moment-locales/dv.js b/dist/v-1549282893552/locales/moment-locales/dv.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/dv.js rename to dist/v-1549282893552/locales/moment-locales/dv.js diff --git a/dist/v-1547534999795/locales/moment-locales/el.js b/dist/v-1549282893552/locales/moment-locales/el.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/el.js rename to dist/v-1549282893552/locales/moment-locales/el.js diff --git a/dist/v-1547534999795/locales/moment-locales/en-au.js b/dist/v-1549282893552/locales/moment-locales/en-au.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/en-au.js rename to dist/v-1549282893552/locales/moment-locales/en-au.js diff --git a/dist/v-1547534999795/locales/moment-locales/en-ca.js b/dist/v-1549282893552/locales/moment-locales/en-ca.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/en-ca.js rename to dist/v-1549282893552/locales/moment-locales/en-ca.js diff --git a/dist/v-1547534999795/locales/moment-locales/en-gb.js b/dist/v-1549282893552/locales/moment-locales/en-gb.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/en-gb.js rename to dist/v-1549282893552/locales/moment-locales/en-gb.js diff --git a/dist/v-1547534999795/locales/moment-locales/en-ie.js b/dist/v-1549282893552/locales/moment-locales/en-ie.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/en-ie.js rename to dist/v-1549282893552/locales/moment-locales/en-ie.js diff --git a/dist/v-1547534999795/locales/moment-locales/en-il.js b/dist/v-1549282893552/locales/moment-locales/en-il.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/en-il.js rename to dist/v-1549282893552/locales/moment-locales/en-il.js diff --git a/dist/v-1547534999795/locales/moment-locales/en-nz.js b/dist/v-1549282893552/locales/moment-locales/en-nz.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/en-nz.js rename to dist/v-1549282893552/locales/moment-locales/en-nz.js diff --git a/dist/v-1547534999795/locales/moment-locales/eo.js b/dist/v-1549282893552/locales/moment-locales/eo.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/eo.js rename to dist/v-1549282893552/locales/moment-locales/eo.js diff --git a/dist/v-1547534999795/locales/moment-locales/es-do.js b/dist/v-1549282893552/locales/moment-locales/es-do.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/es-do.js rename to dist/v-1549282893552/locales/moment-locales/es-do.js diff --git a/dist/v-1547534999795/locales/moment-locales/es-us.js b/dist/v-1549282893552/locales/moment-locales/es-us.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/es-us.js rename to dist/v-1549282893552/locales/moment-locales/es-us.js diff --git a/dist/v-1547534999795/locales/moment-locales/es.js b/dist/v-1549282893552/locales/moment-locales/es.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/es.js rename to dist/v-1549282893552/locales/moment-locales/es.js diff --git a/dist/v-1547534999795/locales/moment-locales/et.js b/dist/v-1549282893552/locales/moment-locales/et.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/et.js rename to dist/v-1549282893552/locales/moment-locales/et.js diff --git a/dist/v-1547534999795/locales/moment-locales/eu.js b/dist/v-1549282893552/locales/moment-locales/eu.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/eu.js rename to dist/v-1549282893552/locales/moment-locales/eu.js diff --git a/dist/v-1547534999795/locales/moment-locales/fa.js b/dist/v-1549282893552/locales/moment-locales/fa.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/fa.js rename to dist/v-1549282893552/locales/moment-locales/fa.js diff --git a/dist/v-1547534999795/locales/moment-locales/fi.js b/dist/v-1549282893552/locales/moment-locales/fi.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/fi.js rename to dist/v-1549282893552/locales/moment-locales/fi.js diff --git a/dist/v-1547534999795/locales/moment-locales/fo.js b/dist/v-1549282893552/locales/moment-locales/fo.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/fo.js rename to dist/v-1549282893552/locales/moment-locales/fo.js diff --git a/dist/v-1547534999795/locales/moment-locales/fr-ca.js b/dist/v-1549282893552/locales/moment-locales/fr-ca.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/fr-ca.js rename to dist/v-1549282893552/locales/moment-locales/fr-ca.js diff --git a/dist/v-1547534999795/locales/moment-locales/fr-ch.js b/dist/v-1549282893552/locales/moment-locales/fr-ch.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/fr-ch.js rename to dist/v-1549282893552/locales/moment-locales/fr-ch.js diff --git a/dist/v-1547534999795/locales/moment-locales/fr.js b/dist/v-1549282893552/locales/moment-locales/fr.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/fr.js rename to dist/v-1549282893552/locales/moment-locales/fr.js diff --git a/dist/v-1547534999795/locales/moment-locales/fy.js b/dist/v-1549282893552/locales/moment-locales/fy.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/fy.js rename to dist/v-1549282893552/locales/moment-locales/fy.js diff --git a/dist/v-1547534999795/locales/moment-locales/gd.js b/dist/v-1549282893552/locales/moment-locales/gd.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/gd.js rename to dist/v-1549282893552/locales/moment-locales/gd.js diff --git a/dist/v-1547534999795/locales/moment-locales/gl.js b/dist/v-1549282893552/locales/moment-locales/gl.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/gl.js rename to dist/v-1549282893552/locales/moment-locales/gl.js diff --git a/dist/v-1547534999795/locales/moment-locales/gom-latn.js b/dist/v-1549282893552/locales/moment-locales/gom-latn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/gom-latn.js rename to dist/v-1549282893552/locales/moment-locales/gom-latn.js diff --git a/dist/v-1547534999795/locales/moment-locales/gu.js b/dist/v-1549282893552/locales/moment-locales/gu.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/gu.js rename to dist/v-1549282893552/locales/moment-locales/gu.js diff --git a/dist/v-1547534999795/locales/moment-locales/he.js b/dist/v-1549282893552/locales/moment-locales/he.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/he.js rename to dist/v-1549282893552/locales/moment-locales/he.js diff --git a/dist/v-1547534999795/locales/moment-locales/hi.js b/dist/v-1549282893552/locales/moment-locales/hi.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/hi.js rename to dist/v-1549282893552/locales/moment-locales/hi.js diff --git a/dist/v-1547534999795/locales/moment-locales/hr.js b/dist/v-1549282893552/locales/moment-locales/hr.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/hr.js rename to dist/v-1549282893552/locales/moment-locales/hr.js diff --git a/dist/v-1547534999795/locales/moment-locales/hu.js b/dist/v-1549282893552/locales/moment-locales/hu.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/hu.js rename to dist/v-1549282893552/locales/moment-locales/hu.js diff --git a/dist/v-1547534999795/locales/moment-locales/hy-am.js b/dist/v-1549282893552/locales/moment-locales/hy-am.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/hy-am.js rename to dist/v-1549282893552/locales/moment-locales/hy-am.js diff --git a/dist/v-1547534999795/locales/moment-locales/id.js b/dist/v-1549282893552/locales/moment-locales/id.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/id.js rename to dist/v-1549282893552/locales/moment-locales/id.js diff --git a/dist/v-1547534999795/locales/moment-locales/is.js b/dist/v-1549282893552/locales/moment-locales/is.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/is.js rename to dist/v-1549282893552/locales/moment-locales/is.js diff --git a/dist/v-1547534999795/locales/moment-locales/it.js b/dist/v-1549282893552/locales/moment-locales/it.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/it.js rename to dist/v-1549282893552/locales/moment-locales/it.js diff --git a/dist/v-1547534999795/locales/moment-locales/ja.js b/dist/v-1549282893552/locales/moment-locales/ja.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ja.js rename to dist/v-1549282893552/locales/moment-locales/ja.js diff --git a/dist/v-1547534999795/locales/moment-locales/jv.js b/dist/v-1549282893552/locales/moment-locales/jv.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/jv.js rename to dist/v-1549282893552/locales/moment-locales/jv.js diff --git a/dist/v-1547534999795/locales/moment-locales/ka.js b/dist/v-1549282893552/locales/moment-locales/ka.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ka.js rename to dist/v-1549282893552/locales/moment-locales/ka.js diff --git a/dist/v-1547534999795/locales/moment-locales/kk.js b/dist/v-1549282893552/locales/moment-locales/kk.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/kk.js rename to dist/v-1549282893552/locales/moment-locales/kk.js diff --git a/dist/v-1547534999795/locales/moment-locales/km.js b/dist/v-1549282893552/locales/moment-locales/km.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/km.js rename to dist/v-1549282893552/locales/moment-locales/km.js diff --git a/dist/v-1547534999795/locales/moment-locales/kn.js b/dist/v-1549282893552/locales/moment-locales/kn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/kn.js rename to dist/v-1549282893552/locales/moment-locales/kn.js diff --git a/dist/v-1547534999795/locales/moment-locales/ko.js b/dist/v-1549282893552/locales/moment-locales/ko.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ko.js rename to dist/v-1549282893552/locales/moment-locales/ko.js diff --git a/dist/v-1547534999795/locales/moment-locales/ku.js b/dist/v-1549282893552/locales/moment-locales/ku.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ku.js rename to dist/v-1549282893552/locales/moment-locales/ku.js diff --git a/dist/v-1547534999795/locales/moment-locales/ky.js b/dist/v-1549282893552/locales/moment-locales/ky.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ky.js rename to dist/v-1549282893552/locales/moment-locales/ky.js diff --git a/dist/v-1547534999795/locales/moment-locales/lb.js b/dist/v-1549282893552/locales/moment-locales/lb.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/lb.js rename to dist/v-1549282893552/locales/moment-locales/lb.js diff --git a/dist/v-1547534999795/locales/moment-locales/lo.js b/dist/v-1549282893552/locales/moment-locales/lo.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/lo.js rename to dist/v-1549282893552/locales/moment-locales/lo.js diff --git a/dist/v-1547534999795/locales/moment-locales/lt.js b/dist/v-1549282893552/locales/moment-locales/lt.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/lt.js rename to dist/v-1549282893552/locales/moment-locales/lt.js diff --git a/dist/v-1547534999795/locales/moment-locales/lv.js b/dist/v-1549282893552/locales/moment-locales/lv.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/lv.js rename to dist/v-1549282893552/locales/moment-locales/lv.js diff --git a/dist/v-1547534999795/locales/moment-locales/me.js b/dist/v-1549282893552/locales/moment-locales/me.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/me.js rename to dist/v-1549282893552/locales/moment-locales/me.js diff --git a/dist/v-1547534999795/locales/moment-locales/mi.js b/dist/v-1549282893552/locales/moment-locales/mi.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/mi.js rename to dist/v-1549282893552/locales/moment-locales/mi.js diff --git a/dist/v-1547534999795/locales/moment-locales/mk.js b/dist/v-1549282893552/locales/moment-locales/mk.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/mk.js rename to dist/v-1549282893552/locales/moment-locales/mk.js diff --git a/dist/v-1547534999795/locales/moment-locales/ml.js b/dist/v-1549282893552/locales/moment-locales/ml.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ml.js rename to dist/v-1549282893552/locales/moment-locales/ml.js diff --git a/dist/v-1547534999795/locales/moment-locales/mn.js b/dist/v-1549282893552/locales/moment-locales/mn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/mn.js rename to dist/v-1549282893552/locales/moment-locales/mn.js diff --git a/dist/v-1547534999795/locales/moment-locales/mr.js b/dist/v-1549282893552/locales/moment-locales/mr.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/mr.js rename to dist/v-1549282893552/locales/moment-locales/mr.js diff --git a/dist/v-1547534999795/locales/moment-locales/ms-my.js b/dist/v-1549282893552/locales/moment-locales/ms-my.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ms-my.js rename to dist/v-1549282893552/locales/moment-locales/ms-my.js diff --git a/dist/v-1547534999795/locales/moment-locales/ms.js b/dist/v-1549282893552/locales/moment-locales/ms.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ms.js rename to dist/v-1549282893552/locales/moment-locales/ms.js diff --git a/dist/v-1547534999795/locales/moment-locales/mt.js b/dist/v-1549282893552/locales/moment-locales/mt.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/mt.js rename to dist/v-1549282893552/locales/moment-locales/mt.js diff --git a/dist/v-1547534999795/locales/moment-locales/my.js b/dist/v-1549282893552/locales/moment-locales/my.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/my.js rename to dist/v-1549282893552/locales/moment-locales/my.js diff --git a/dist/v-1547534999795/locales/moment-locales/nb.js b/dist/v-1549282893552/locales/moment-locales/nb.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/nb.js rename to dist/v-1549282893552/locales/moment-locales/nb.js diff --git a/dist/v-1547534999795/locales/moment-locales/ne.js b/dist/v-1549282893552/locales/moment-locales/ne.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ne.js rename to dist/v-1549282893552/locales/moment-locales/ne.js diff --git a/dist/v-1547534999795/locales/moment-locales/nl-be.js b/dist/v-1549282893552/locales/moment-locales/nl-be.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/nl-be.js rename to dist/v-1549282893552/locales/moment-locales/nl-be.js diff --git a/dist/v-1547534999795/locales/moment-locales/nl.js b/dist/v-1549282893552/locales/moment-locales/nl.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/nl.js rename to dist/v-1549282893552/locales/moment-locales/nl.js diff --git a/dist/v-1547534999795/locales/moment-locales/nn.js b/dist/v-1549282893552/locales/moment-locales/nn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/nn.js rename to dist/v-1549282893552/locales/moment-locales/nn.js diff --git a/dist/v-1547534999795/locales/moment-locales/pa-in.js b/dist/v-1549282893552/locales/moment-locales/pa-in.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/pa-in.js rename to dist/v-1549282893552/locales/moment-locales/pa-in.js diff --git a/dist/v-1547534999795/locales/moment-locales/pl.js b/dist/v-1549282893552/locales/moment-locales/pl.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/pl.js rename to dist/v-1549282893552/locales/moment-locales/pl.js diff --git a/dist/v-1547534999795/locales/moment-locales/pt-br.js b/dist/v-1549282893552/locales/moment-locales/pt-br.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/pt-br.js rename to dist/v-1549282893552/locales/moment-locales/pt-br.js diff --git a/dist/v-1547534999795/locales/moment-locales/pt.js b/dist/v-1549282893552/locales/moment-locales/pt.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/pt.js rename to dist/v-1549282893552/locales/moment-locales/pt.js diff --git a/dist/v-1547534999795/locales/moment-locales/ro.js b/dist/v-1549282893552/locales/moment-locales/ro.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ro.js rename to dist/v-1549282893552/locales/moment-locales/ro.js diff --git a/dist/v-1547534999795/locales/moment-locales/ru.js b/dist/v-1549282893552/locales/moment-locales/ru.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ru.js rename to dist/v-1549282893552/locales/moment-locales/ru.js diff --git a/dist/v-1547534999795/locales/moment-locales/sd.js b/dist/v-1549282893552/locales/moment-locales/sd.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/sd.js rename to dist/v-1549282893552/locales/moment-locales/sd.js diff --git a/dist/v-1547534999795/locales/moment-locales/se.js b/dist/v-1549282893552/locales/moment-locales/se.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/se.js rename to dist/v-1549282893552/locales/moment-locales/se.js diff --git a/dist/v-1547534999795/locales/moment-locales/si.js b/dist/v-1549282893552/locales/moment-locales/si.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/si.js rename to dist/v-1549282893552/locales/moment-locales/si.js diff --git a/dist/v-1547534999795/locales/moment-locales/sk.js b/dist/v-1549282893552/locales/moment-locales/sk.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/sk.js rename to dist/v-1549282893552/locales/moment-locales/sk.js diff --git a/dist/v-1547534999795/locales/moment-locales/sl.js b/dist/v-1549282893552/locales/moment-locales/sl.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/sl.js rename to dist/v-1549282893552/locales/moment-locales/sl.js diff --git a/dist/v-1547534999795/locales/moment-locales/sq.js b/dist/v-1549282893552/locales/moment-locales/sq.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/sq.js rename to dist/v-1549282893552/locales/moment-locales/sq.js diff --git a/dist/v-1547534999795/locales/moment-locales/sr-cyrl.js b/dist/v-1549282893552/locales/moment-locales/sr-cyrl.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/sr-cyrl.js rename to dist/v-1549282893552/locales/moment-locales/sr-cyrl.js diff --git a/dist/v-1547534999795/locales/moment-locales/sr.js b/dist/v-1549282893552/locales/moment-locales/sr.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/sr.js rename to dist/v-1549282893552/locales/moment-locales/sr.js diff --git a/dist/v-1547534999795/locales/moment-locales/ss.js b/dist/v-1549282893552/locales/moment-locales/ss.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ss.js rename to dist/v-1549282893552/locales/moment-locales/ss.js diff --git a/dist/v-1547534999795/locales/moment-locales/sv.js b/dist/v-1549282893552/locales/moment-locales/sv.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/sv.js rename to dist/v-1549282893552/locales/moment-locales/sv.js diff --git a/dist/v-1547534999795/locales/moment-locales/sw.js b/dist/v-1549282893552/locales/moment-locales/sw.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/sw.js rename to dist/v-1549282893552/locales/moment-locales/sw.js diff --git a/dist/v-1547534999795/locales/moment-locales/ta.js b/dist/v-1549282893552/locales/moment-locales/ta.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ta.js rename to dist/v-1549282893552/locales/moment-locales/ta.js diff --git a/dist/v-1547534999795/locales/moment-locales/te.js b/dist/v-1549282893552/locales/moment-locales/te.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/te.js rename to dist/v-1549282893552/locales/moment-locales/te.js diff --git a/dist/v-1547534999795/locales/moment-locales/tet.js b/dist/v-1549282893552/locales/moment-locales/tet.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/tet.js rename to dist/v-1549282893552/locales/moment-locales/tet.js diff --git a/dist/v-1547534999795/locales/moment-locales/tg.js b/dist/v-1549282893552/locales/moment-locales/tg.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/tg.js rename to dist/v-1549282893552/locales/moment-locales/tg.js diff --git a/dist/v-1547534999795/locales/moment-locales/th.js b/dist/v-1549282893552/locales/moment-locales/th.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/th.js rename to dist/v-1549282893552/locales/moment-locales/th.js diff --git a/dist/v-1547534999795/locales/moment-locales/tl-ph.js b/dist/v-1549282893552/locales/moment-locales/tl-ph.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/tl-ph.js rename to dist/v-1549282893552/locales/moment-locales/tl-ph.js diff --git a/dist/v-1547534999795/locales/moment-locales/tlh.js b/dist/v-1549282893552/locales/moment-locales/tlh.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/tlh.js rename to dist/v-1549282893552/locales/moment-locales/tlh.js diff --git a/dist/v-1547534999795/locales/moment-locales/tr.js b/dist/v-1549282893552/locales/moment-locales/tr.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/tr.js rename to dist/v-1549282893552/locales/moment-locales/tr.js diff --git a/dist/v-1547534999795/locales/moment-locales/tzl.js b/dist/v-1549282893552/locales/moment-locales/tzl.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/tzl.js rename to dist/v-1549282893552/locales/moment-locales/tzl.js diff --git a/dist/v-1547534999795/locales/moment-locales/tzm-latn.js b/dist/v-1549282893552/locales/moment-locales/tzm-latn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/tzm-latn.js rename to dist/v-1549282893552/locales/moment-locales/tzm-latn.js diff --git a/dist/v-1547534999795/locales/moment-locales/tzm.js b/dist/v-1549282893552/locales/moment-locales/tzm.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/tzm.js rename to dist/v-1549282893552/locales/moment-locales/tzm.js diff --git a/dist/v-1547534999795/locales/moment-locales/ug-cn.js b/dist/v-1549282893552/locales/moment-locales/ug-cn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ug-cn.js rename to dist/v-1549282893552/locales/moment-locales/ug-cn.js diff --git a/dist/v-1547534999795/locales/moment-locales/uk.js b/dist/v-1549282893552/locales/moment-locales/uk.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/uk.js rename to dist/v-1549282893552/locales/moment-locales/uk.js diff --git a/dist/v-1547534999795/locales/moment-locales/ur.js b/dist/v-1549282893552/locales/moment-locales/ur.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/ur.js rename to dist/v-1549282893552/locales/moment-locales/ur.js diff --git a/dist/v-1547534999795/locales/moment-locales/uz-latn.js b/dist/v-1549282893552/locales/moment-locales/uz-latn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/uz-latn.js rename to dist/v-1549282893552/locales/moment-locales/uz-latn.js diff --git a/dist/v-1547534999795/locales/moment-locales/uz.js b/dist/v-1549282893552/locales/moment-locales/uz.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/uz.js rename to dist/v-1549282893552/locales/moment-locales/uz.js diff --git a/dist/v-1547534999795/locales/moment-locales/vi.js b/dist/v-1549282893552/locales/moment-locales/vi.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/vi.js rename to dist/v-1549282893552/locales/moment-locales/vi.js diff --git a/dist/v-1547534999795/locales/moment-locales/x-pseudo.js b/dist/v-1549282893552/locales/moment-locales/x-pseudo.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/x-pseudo.js rename to dist/v-1549282893552/locales/moment-locales/x-pseudo.js diff --git a/dist/v-1547534999795/locales/moment-locales/yo.js b/dist/v-1549282893552/locales/moment-locales/yo.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/yo.js rename to dist/v-1549282893552/locales/moment-locales/yo.js diff --git a/dist/v-1547534999795/locales/moment-locales/zh-cn.js b/dist/v-1549282893552/locales/moment-locales/zh-cn.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/zh-cn.js rename to dist/v-1549282893552/locales/moment-locales/zh-cn.js diff --git a/dist/v-1547534999795/locales/moment-locales/zh-hk.js b/dist/v-1549282893552/locales/moment-locales/zh-hk.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/zh-hk.js rename to dist/v-1549282893552/locales/moment-locales/zh-hk.js diff --git a/dist/v-1547534999795/locales/moment-locales/zh-tw.js b/dist/v-1549282893552/locales/moment-locales/zh-tw.js similarity index 100% rename from dist/v-1547534999795/locales/moment-locales/zh-tw.js rename to dist/v-1549282893552/locales/moment-locales/zh-tw.js diff --git a/dist/v-1549282893552/locales/taiga/locale-ca.json b/dist/v-1549282893552/locales/taiga/locale-ca.json new file mode 100644 index 0000000..1603de6 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-ca.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Si","NO":"No","OR":"o","I_GET_IT":"OK, I get it","LOADING":"Carregant...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Desa","CANCEL":"Següent","ACCEPT":"Acceptar","DELETE":"Esborrar","UNLINK":"Unlink","CREATE":"Crear","ADD":"Afegir","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"edita","DRAG":"Moure","TAG_LINE":"La teua eïna de gestió de projectes àgil, gratuita i de codi obert ","TAG_LINE_2":"ESTIMA EL TEU PROJECTE","BLOCK":"Bloquejar","BLOCK_TITLE":"Bloqueja aquest element si té una dependència que no pot ser satisfeta","BLOCKED":"Bloquejat","UNBLOCK":"Desbloquejar","UNBLOCK_TITLE":"Desbloquejar aquest element","BLOCKED_NOTE":"Per qué està bloquejat?","BLOCKED_REASON":"Per favor, explica la raó","CREATED_BY":"Creat per {{fullDisplayName}}","CLOSE":"Tancar","GO_HOME":"Porta'm a l'inici ","PLUGINS":"Plugins","ONE_ITEM_LINE":"In item per línia","NEW_BULK":"Nova inserció en grup","SUBTASKS":"Subtasks","PREVIOUS":"Previous","NEXT":"Següent","LOGOUT":"Surt","EXTERNAL_USER":"un usuari extern","GENERIC_ERROR":"Un Oompa Loompas diu {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Project Owner","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Esborrar incidència","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Aquest valor pareix invàlid.","TYPE_EMAIL":"Deu ser un correu vàlid.","TYPE_URL":"Deu ser una URL vàlida.","TYPE_URLSTRICT":"Deu ser una URL vàlida.","TYPE_NUMBER":"Deu ser un nombre vàlid.","TYPE_DIGITS":"Aquest valor ha de ser numèric","TYPE_DATEISO":"Aquest valor ha de ser una data vàlida (YYYY-MM-DD)","TYPE_ALPHANUM":"Aquest valor ha de ser alfanumèric.","TYPE_PHONE":"Aquest valor ha de ser un número de telèfon vàlid.","NOTNULL":"Aquest valor no pot ser nul.","NOT_BLANK":"Aquest valor no pot estar buit","REQUIRED":"Aquest valor és necessari.","REGEXP":"Aquest valor pareix invàlid.","MIN":"This value should be greater than or equal to %s.","MAX":"This value should be lower than or equal to %s.","RANGE":"This value should be between %s and %s.","MIN_LENGTH":"This value is too short. It should have %s characters or more.","MAX_LENGTH":"This value is too long. It should have %s characters or less.","RANGE_LENGTH":"This value length is invalid. It should be between %s and %s characters long.","MIN_CHECK":"You must select at least %s choices.","MAX_CHECK":"Heu de seleccionar la opció %s o inferior.","RANGE_CHECK":"Heu de seleccionar entre les opcions %s i %s.","EQUAL_TO":"Aquest valor hauria de ser el mateix.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mes anterior","NEXT_MONTH":"Mes que ve","MONTHS":{"JAN":"Gener","FEB":"Febrer","MAR":"Març","APR":"Abril","MAY":"Maig","JUN":"Juny","JUL":"Juliol","AUG":"Agost","SEP":"Setembre","OCT":"Octubre","NOV":"Novembre","DEC":"Desembre"},"WEEK_DAYS":{"SUN":"Diumenge","MON":"Dilluns","TUE":"Dimarts","WED":"Dimecres","THU":"Dijous","FRI":"Divendres","SAT":"Dissabte"},"WEEK_DAYS_SHORT":{"SUN":"Dg","MON":"Dl","TUE":"Dt","WED":"Dc","THU":"Dj","FRI":"Dv","SAT":"Ds"}},"SEE_USER_PROFILE":"Veure el perfil de {{usuari}}","USER_STORY":"Història d'usuari","TASK":"Tasca","ISSUE":"incidència","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Elimina l'etiqueta","ADD":"Afegeix l'etiqueta"},"DESCRIPTION":{"EMPTY":"Els espai buit es molt aburrit. Sé descriptiu!","NO_DESCRIPTION":"Sense descripció"},"FIELDS":{"SUBJECT":"Descripció","NAME":"Nom","URL":"URL","DESCRIPTION":"Descripció","VALUE":"Valor","SLUG":"Slug","COLOR":"Color","IS_CLOSED":"Està tancat?","STATUS":"Estats","TYPE":"Tipus","SEVERITY":"Severitat","PRIORITY":"Prioritat","ASSIGNED_TO":"Assignat a","ASSIGNED_USERS":"Assigned users","POINTS":"Punts","IS_BLOCKED":"està bloquejat","REF":"Ref","VOTES":"Vots","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Tot"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Sense assignar","ASSIGN":"Assign","DELETE_ASSIGNMENT":"Esborrar assignament","REMOVE_ASSIGNED":"Esborra assignat","TOO_MANY":".. massa usuaris, segueix filtrant","CONFIRM_UNASSIGNED":"Segut que vols deixar-ho sense assignar?","TITLE_ACTION_EDIT_ASSIGNMENT":"Editar assignament","SELF":"Assign to me"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Tancat","OPEN":"Obert"},"WATCHERS":{"WATCHERS":"Watchers","ADD":"Add watchers","TITLE_ADD":"Add a project member to the watchers list","DELETE":"Esborrar seguidor","TITLE_LIGHTBOX_DELETE_WARTCHER":"Esborrar seguidor..."},"WATCH_BUTTON":{"WATCH":"Segueix","WATCHING":"Observant","UNWATCH":"Unwatch","WATCHERS":"Watchers","BUTTON_TITLE":"Watch/Unwatch this item","COUNTER_TITLE":"{total, plural, one{un seguidor} other{# seguidors}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Camps personalitzats","SAVE":"Salva camp personalitzat","EDIT":"Edita el camp personalitzat","DELETE":"Esborrar atribut personalitzat","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Descripció o referència","TITLE_ACTION_FILTER_BUTTON":"cerca","TITLE":"Filtres","TITLE_ACTION_SEARCH":"Cerca","ACTION_SAVE_CUSTOM_FILTER":"Guarda com a filtre","PLACEHOLDER_FILTER_NAME":"Escriu el filtre i pressiona Intro","APPLIED_FILTERS_NUM":"filters applied","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Tipus","STATUS":"Estats","SEVERITY":"Severitat","PRIORITIES":"Prioritats","TAGS":"Etiquetes","ASSIGNED_TO":"Assignat a","ASSIGNED_USERS":"Assigned users","ROLE":"Rol","CREATED_BY":"Creat per","CUSTOM_FILTERS":"Filtres personalitzats","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Ajuda de Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Vore sprints","ADD_SPRINTS":"Afegir sprint","MODIFY_SPRINTS":"Editar sprint","DELETE_SPRINTS":"Esborrar sprints"},"USER_STORIES":{"NAME":"Històries d'usuari","VIEW_USER_STORIES":"Vore istòries d'usuari","ADD_USER_STORIES":"Afegir històries d'usuari","MODIFY_USER_STORIES":"Editar història d'usuari","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Esborrar històries d'usuari"},"TASKS":{"NAME":"Tasques","VIEW_TASKS":"Vore tasca","ADD_TASKS":"Afegit tasques","MODIFY_TASKS":"Modificar tasques","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Esborrar tasques"},"ISSUES":{"NAME":"Incidències","VIEW_ISSUES":"Vore incidències","ADD_ISSUES":"Afegeix incidències","MODIFY_ISSUES":"Modifica incidències","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Elimina incidències"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Vore pàgines de Wiki","ADD_WIKI_PAGES":"Afegir pàgines de Wiki","MODIFY_WIKI_PAGES":"Modificar pàgina del Wiki","DELETE_WIKI_PAGES":"Esborrar pàgines de Wiki","VIEW_WIKI_LINKS":"Vore enllaços de Wiki","ADD_WIKI_LINKS":"Afegir link de wiki","DELETE_WIKI_LINKS":"Esborrar enllaços de wiki"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Entra a Taiga, una plataforma de gestió de projectes per a empreses àgils que necessiten una eïna sencilla i elegant que et permet gaudir del teu treball"},"AUTH":{"INVITED_YOU":"T'ha convidat a participar en el projecte","NOT_REGISTERED_YET":"No t'has registrat encara?","REGISTER":"Registrat","CREATE_ACCOUNT":"crea el teu compte gratuït ací"},"LOGIN_COMMON":{"HEADER":"Ja tinc un compte de Taiga","PLACEHOLDER_AUTH_NAME":"Nom d'usuari i correu electrònic (sensible a majúscules i minúscules)","LINK_FORGOT_PASSWORD":"L'has oblidat?","TITLE_LINK_FORGOT_PASSWORD":"Has oblidat la contrasenya?","ACTION_ENTER":"Entrar","ACTION_SIGN_IN":"Entrar","PLACEHOLDER_AUTH_PASSWORD":"Contrasenya (sensible a majúscules i minúscules)","ALT_LOGIN":"Or login with"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Segons els Oompa Loompas, el vostre nom d'usuari/correu electrònic o contrasenya són incorrectes.","SUCCESS":"Our Oompa Loompas están contents, benvinguts a Taiga."},"REGISTER":{"PAGE_TITLE":"Registre - Taiga","PAGE_DESCRIPTION":"Crea un nou compte de Taiga, una plataforma de gestió de projectes per a empreses àgils que necessiten una eïna sencilla i elegant que et permet gaudir del teu treball"},"REGISTER_FORM":{"TITLE":"Registra un nou compte de Taiga (gratuït)","PLACEHOLDER_NAME":"Trieu un nom d'usuari (sensible a majúscules i minúscules)","PLACEHOLDER_FULL_NAME":"Escriu el teu nom complet","PLACEHOLDER_EMAIL":"El teu correu","PLACEHOLDER_PASSWORD":"Defineix una contrasenya (sensible a majúscules i minúscules)","ACTION_SIGN_UP":"Registrar-se","TITLE_LINK_LOGIN":"Entrar","LINK_LOGIN":"Ja estàs registrat? Entra"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Recuperar contrasenya","PAGE_DESCRIPTION":"Escriviu el vostre nom d'usuari o correu electrònic per a conseguir-ne un de nou"},"FORGOT_PASSWORD_FORM":{"TITLE":"Oops, has oblidat la teva contrasenya?","SUBTITLE":"Escriviu el vostre nom d'usuari o correu electrònic per a conseguir-ne un de nou","PLACEHOLDER_FIELD":"Nom d'usuari o correu electrònic","ACTION_RESET_PASSWORD":"Resetejar contrasenya","LINK_CANCEL":"No, porta'm enrere, crec que ja ho recordo.","SUCCESS_TITLE":"Check your inbox!","SUCCESS_TEXT":"We sent you an email with the instructions to set a new password","ERROR":"Segons els nostres Oompa Loompas, no estàs registrat encara."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Canvi de contrasenya - Taiga","SECTION_NAME":"Canvi de contrasenya","FIELD_CURRENT_PASSWORD":"Contrasenya actual","PLACEHOLDER_CURRENT_PASSWORD":"La teua contrasenya actua (buit si no tens contrasenya encara)","FIELD_NEW_PASSWORD":"Nova contrasenya","PLACEHOLDER_NEW_PASSWORD":"Escriu una nova contrasenya","FIELD_RETYPE_PASSWORD":"Reescriu contrasenya","PLACEHOLDER_RETYPE_PASSWORD":"Reescriu contrasenya","ERROR_PASSWORD_MATCH":"Les contrasenyes no coincideixen"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Crea una nova contrasenya","SUBTITLE":"Menja més aliments rics en ferro, es bo pel cervell :P ","PLACEHOLDER_NEW_PASSWORD":"nova contrasenya","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Reescriu la nova contrasenya","ACTION_RESET_PASSWORD":"Resetejar contrasenya","ERROR":"Els Oompa Loompas no troben el teu password. Per favor intenta-ho de nou.","SUCCESS":"Els Oompa Loompas han salvat la teua contrasenya
    Prova a entrar amb ella."},"INVITATION":{"PAGE_TITLE":"Acceptar invitació - Taiga","PAGE_DESCRIPTION":"Accepta la invitació a un projecte en Taiga, una plataforma de gestió de projectes per a empreses àgils que necessiten una eïna sencilla i elegant que et permet gaudir del teu treball"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Els Oompa Loompas no troben la teua invitació.","SUCCESS":"T'has incorporat a este projecte. Vos donem la benvinguda a {{project_name}}"},"HOME":{"PAGE_TITLE":"Home - Taiga","PAGE_DESCRIPTION":"La home de Taiga amb els teus projectes principals, totes les històries d'usuari, tasques i incidències que tens assignades i aquelles que estàs Watching","EMPTY_WORKING_ON":"It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.","EMPTY_WATCHING":"Segueix históries, tasques e incidéncies en els teus project i rep notificacions quan canvien :)","EMPTY_PROJECT_LIST":"No tens cap projecte encara","WORKING_ON_SECTION":"En Progrés","WATCHING_SECTION":"Observant","DASHBOARD":"Panell principal"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADD EPIC","UNASSIGNED":"Sense assignar"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Vots","NAME":"Nom","PROJECT":"Projecte","SPRINT":"Sprint","ASSIGNED_TO":"Assigned","STATUS":"Estats","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Bloquejat","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Els meus projectes - Taiga","PAGE_DESCRIPTION":"Una llista de tots els teus projects, que pots reordenar o crear nous.","MY_PROJECTS":"Els meus projectes."},"ATTACHMENT":{"SECTION_NAME":"Adjunts","TITLE":"{{ fileName }} pujat el {{ date }}","LIST_VIEW_MODE":"Vista de llista","GALLERY_VIEW_MODE":"Galeria","DESCRIPTION":"Escriu una descripció curta","DEPRECATED":"(obsolet)","DEPRECATED_FILE":"Obsolet?","ADD":"Afegeix un nou adjunt. {{maxFileSizeMsg}}","DROP":"Deixa els adjunts ací","SHOW_DEPRECATED":"+ mostra els adjunts obsolets","HIDE_DEPRECATED":"- amagar els adjunts obsolets","COUNT_DEPRECATED":"({{ counter }} obsolet)","MAX_UPLOAD_SIZE":"El tamany màxim de pujada es ","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"No hem pogut pujar '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Esborrar adjunt...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"l'adjunt '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"No hem pogut esborrar: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Abans","NEXT":"Següent"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Editar valor","TITLE_ACTION_DELETE_VALUE":"Borrar valor","TITLE_ACTION_DELETE_TAG":"Elimina l'etiqueta"},"HELP":"Necessites ajuda? Mira la nosta pàgina de suport!","PROJECT_DEFAULT_VALUES":{"TITLE":"Valors per defecte","SUBTITLE":"Selecciona els valors per defecte per a tots els selectors"},"MEMBERSHIPS":{"TITLE":"Gestió de Membres","PAGE_TITLE":"Afiliacions - {{projectName}}","ADD_BUTTON":"+ Nou membre","ADD_BUTTON_TITLE":"Afegir nou membre","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Exportar","SUBTITLE":"Exporta el teu projecte per a fer una còpia de seguretat o crear un nou basat en aquest","EXPORT_BUTTON":"Exportar","EXPORT_BUTTON_TITLE":"Exporta el teu projecte","LOADING_TITLE":"Estem generant el teu fitxer","DUMP_READY":"El fitxer de daes està llest!","LOADING_MESSAGE":"Per favor no tanquest aquest pàgina","ASYNC_MESSAGE":"T'enviarem un correu quan estiga llest.","SYNC_MESSAGE":"Si la descàrrega no baixa directament clica ací.","ERROR":"Els Oompa Loompas tenen problemes generant el teu arxiu de dades. Per favor intenta-ho de nou.","ERROR_BUSY":"Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments."},"MODULES":{"TITLE":"Mòdules","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Organitza les històries d'usuari per a mantindre una vista organitzada i prioritzada del treball.","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organitza els projectes de un mode sencill amb aquest tauler","ISSUES":"Incidències","ISSUES_DESCRIPTION":"Gestiona els bugs, questions i milores del teu projecte. No te pergues res!","WIKI":"Wiki","WIKI_DESCRIPTION":"Afegix, modifica o borra contingut en col3laboració amb altres. Aquest es el lloc correcte per a la teua documentació.","MEETUP":"Trobar-se","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Selecciona un sistema de videconferència","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personalitzat","URL_CHAT_ROOM":"Adreça web del teu xat"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Perfil de projecte - {{projectName}}","PROJECT_DETAILS":"Detalls de projecte","PROJECT_NAME":"Nom del projecte","TAGS":"Etiquetes","DESCRIPTION":"Descripció","RECRUITING":"Este projecte busca col·laboracions?","RECRUITING_MESSAGE":"A qui estàs buscant?","RECRUITING_PLACEHOLDER":"Defineix els perfils que estàs buscant","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Projecte públic","PRIVATE_PROJECT":"Projecte privat","PRIVATE_OR_PUBLIC":"What's the difference between public and private projects?","DELETE":"Esborra aquest projecte","CHANGE_LOGO":"Change logo","ACTION_USE_DEFAULT_LOGO":"Utilitza la imatge per defecte","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Petició","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Change owner","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Informes","SUBTITLE":"Exporta les dades del teu projecte en CSV i fes els teus propis informes.","DESCRIPTION":"Descarrega un arxiu CSV o copia la URL generada i obrila en el teu editor de text o fulla de cálcul per a poder crear els teus propi informes. Podrás vore i analitzar totes les teues dades fàcilment.","HELP":"Com utilitzar açó a la meu fulla de càlcul?","REGENERATE_TITLE":"Canviar URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"informes d'històries d'usuari","SECTION_TITLE_TASK":"infome de tasques","SECTION_TITLE_ISSUE":"informe d'incidències","DOWNLOAD":"Descarrega el CSV","URL_FIELD_PLACEHOLDER":"Per favor regenera la url del CSV","TITLE_REGENERATE_URL":"Regenera l'Url del CSV","ACTION_GENERATE_URL":"Genera URL","ACTION_REGENERATE":"Regenerar","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Esborrar"},"CUSTOM_FIELDS":{"TITLE":"Camps personalitzats","SUBTITLE":"Especifiqueu els camps personalitzats del les vostres històries d'usuari, tasques i incidències","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"Camps personalitzats d'històries d'usuari","US_ADD":"Afegeix camps personalitzats en històries d'usuari","TASK_DESCRIPTION":"Camps personalitzats de tasques","TASK_ADD":"Afegix camps personalitzats en tasques","ISSUE_DESCRIPTION":"Camps personalitzats d'incidències","ISSUE_ADD":"Afegix camps personalitzats en incidències","FIELD_TYPE_TEXT":"Text","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Múltiples línies","FIELD_TYPE_DATE":"Data","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valors de projecte - {{projectName}}","REPLACEMENT":"Tots els elements amb aquest valor seràn canviats a","ERROR_DELETE_ALL":"No pots esborrar tots els valors."},"PROJECT_VALUES_POINTS":{"TITLE":"Punts","SUBTITLE":"Especifica els punts en els que poden ser estimades les històries d'usuari","US_TITLE":"Punts d'història d'usuari","ACTION_ADD":"Afegir punts nous"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioritats","SUBTITLE":"Especifica les prioritats que tindran les teues tasques","ISSUE_TITLE":"Prioritats d'incidències","ACTION_ADD":"Afegir nova prioritat"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Severitats","SUBTITLE":"Especifiqueu les severitats que tindran les vostres incidències","ISSUE_TITLE":"Severitats d'incidències","ACTION_ADD":"Afegir nova severitat"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"Especifica els estats de les vostres històries d'usuari, tasques i incidències","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Estats de tasques","ISSUE_TITLE":"Estats d'incidències"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipus","SUBTITLE":"Especifica quin tipus d'incidència podria ser.","ISSUE_TITLE":"Tipus d'incidències","ACTION_ADD":"Afegir now {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiquetes","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Afegeix l'etiqueta","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Afegeix un estat nou","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Rols - {{projectName}}","WARNING_NO_ROLE":"Ves amb compte, cap rol en el teu projecte pot estimar punts per a les històries d'usuari","HELP_ROLE_ENABLED":"Si està activat, els membres assignats a aquest rol podràn estimar els punts d'històries d'usuaris","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} membres amb aquest rol","TITLE_DELETE_ROLE":"Esborrar rol","REPLACEMENT_ROLE":"Tots els usuaris amb aquest rol es canviaran a","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"No pots esborrar tots els valors","EXTERNAL_USER":"Usuari extern","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Clau secreta","PAYLOAD_URL":"Payload URL","VALID_IPS":"IPs amb orige vàlid separades per ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Les peticions a Bitbuket no estan signades. El millor mode de verificar l'oritge es per IP. Si el camp està buit no hi haurà verificació per IP."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Les peticions a Bitbuket no estan signades. El millor mode de verificar l'oritge es per IP. Si el camp està buit no hi haurà verificació per IP."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Afegir un nou Webhook","TYPE_NAME":"Escriu el nom del servei","TYPE_PAYLOAD_URL":"Escriu el service payload url","TYPE_SERVICE_SECRET":"Escriu la clau secreta del servei","SAVE":"Salvar Webhook","CANCEL":"Cancel·la Webhook","SHOW_HISTORY":"(Mostra històric)","TEST":"Testar Webhook","EDIT":"Editar Webhooks","DELETE":"Esborrar Webhooks","REQUEST":"Petició","RESEND_REQUEST":"Reenviar petició","HEADERS":"Capçaleres","PAYLOAD":"Payload","RESPONSE":"Resposta","DATE":"DD MMM YYYY [at] hh:mm","ACTION_HIDE_HISTORY":"(Amaga històric)","ACTION_HIDE_HISTORY_TITLE":"Amaga detalls d'històric","ACTION_SHOW_HISTORY":"(Mostra històric)","ACTION_SHOW_HISTORY_TITLE":"Mostra detall d'històric","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Atributs personalitzats - {{projectName}}","ADD":"Afegix camp personalitzat","EDIT":"Edita el camp personalitzat","DELETE":"Esborrar camp personalitzat","SAVE_TITLE":"Salva camp personalitzat","CANCEL_TITLE":"Cancel·la la creació","SET_FIELD_NAME":"Escriu el nom del camp personalitzat","SET_FIELD_DESCRIPTION":"Escriu la descripció del camp personalitzat","FIELD_TYPE_DEFAULT":"-- select one --","ACTION_UPDATE":"Actualitza el camp personalitzat","ACTION_CANCEL_EDITION":"Cancel·la la edició"},"MEMBERSHIP":{"COLUMN_MEMBER":"Membre","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rol","COLUMN_STATUS":"Estatus","STATUS_ACTIVE":"Actiu","STATUS_PENDING":"Pendent","DELETE_MEMBER":"Esborrar membre","RESEND":"Resend","SUCCESS_SEND_INVITATION":"Hem tornat a enviar la invitació a '{{email}}'.","SUCCESS_DELETE":"Hem esborrat {{message}}.","ERROR_DELETE":"No hem pogut esborrar ","DEFAULT_DELETE_MESSAGE":"la invitació a '{{email}}'."},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Valor per defecte per a selector de punts","LABEL_TASK_STATUS":"Valor per defecte per a selector d'estats de tasques","LABEL_ISSUE_TYPE":"Valor per defecte per a selector de tipus","LABEL_ISSUE_STATUS":"Valor per defecte per a selector de estats","LABEL_PRIORITY":"Valor per defecte per a selector de prioritat","LABEL_SEVERITY":"Valor per defecte per a selector de severitat"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Escriu un nom per a nou estat","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Escriu un nom per a nou element"},"US_STATUS":{"ACTION_ADD_STATUS":"Afegeix un estat nou","IS_ARCHIVED_COLUMN":"Archived","IS_CLOSED_COLUMN":"Tancat","WIP_LIMIT_COLUMN":"Limit WIP","PLACEHOLDER_WRITE_NAME":"Escriviu un nom per al nou estat"},"MENU":{"PROJECT":"Projecte","ATTRIBUTES":"Atributs","MEMBERS":"Membres","PERMISSIONS":"Permisos","INTEGRATIONS":"Integracions"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Estats","POINTS":"Punts","PRIORITIES":"Prioritats","SEVERITIES":"severitats","TYPES":"Tipus","CUSTOM_FIELDS":"Camps personalitzats","TAGS":"Etiquetes","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Rols","ACTION_NEW_ROLE":"+ Nou rol","TITLE_ACTION_NEW_ROLE":"Afegir nou rol"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Acceptar","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Edita el perfil","CLOSED_US":"HU tancada","PROJECTS":"Projectes","PROJECTS_EMPTY":"{{username}} encara no te cap projecte","CONTACTS":"Contactes","CONTACTS_EMPTY":"{{Usuari}} no té contactes encara","CURRENT_USER_CONTACTS_EMPTY":"No tens contactes encara","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Les persones amb les que treballa a Taiga seran els seus contactes de forma automàtica","TABS":{"ACTIVITY_TAB":"Timeline","ACTIVITY_TAB_TITLE":"Mostra tota la activitat d'aquest usuari","PROJECTS_TAB":"Projectes","PROJECTS_TAB_TITLE":"Mostra tots els projects del que el usuari es administrador","LIKES_TAB":"Favorits","LIKES_TAB_TITLE":"Mostra tots els favorits del usuari","VOTES_TAB":"Vots","VOTES_TAB_TITLE":"List all votes made by this user","WATCHED_TAB":"Watched","WATCHED_TAB_TITLE":"List all item watched by this user","CONTACTS_TAB":"Contactes","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"El teu perfil","DESCRIPTION":"La gent pot vore tot el que fas i en qué estàs treballant. Afegix una bio interessant per a donar una millor versió de la teua informació.","ADD_INFO":"Edita la bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Escriu algo...","FILTER_TYPE_ALL":"Tot","FILTER_TYPE_ALL_TITLE":"Mostrar tot","FILTER_TYPE_PROJECTS":"Projectes","FILTER_TYPE_PROJECTS_TITLE":"Mostra només projectes","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Históries","FILTER_TYPE_USER_STORIES_TITLE":"Veure només històries d'usuari","FILTER_TYPE_TASKS":"Tasques","FILTER_TYPE_TASKS_TITLE":"Mostra només tasquest","FILTER_TYPE_ISSUES":"Incidències","FILTER_TYPE_ISSUES_TITLE":"Mostra només incidències","EMPTY_TITLE":"Sembla que no hi ha res que mostrar"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reordena els teus projectes per a establir els més utilitzats en les primeres posicions.
    Els 10 millors projectes apareixeran en la llista de projectes de la barra de navegació superior","PRIVATE":"Projecte privat","LOOKING_FOR_PEOPLE":"Este projecte busca col·laboracions","FANS_COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{un seguidor} other{# seguidors}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{un membre} other{# membres}}","BLOCKED_PROJECT":{"BLOCKED":"Blocked project","THIS_PROJECT_IS_BLOCKED":"This project is temporarily blocked","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"In order to unblock your projects, contact the administrator."},"SECTION":{"SEARCH":"Cerca","TIMELINE":"Timeline","EPICS":"Epics","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Incidències","WIKI":"Wiki","TEAM":"Equip","MEETUP":"Trobar-se","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Crear projecte","MANAGE_PROJECTS":"Gestiona els projectes","TITLE_CREATE_PROJECT":"Crear projecte","HELP_TITLE":"Pàgina d'ajuda de Taiga","HELP":"Ajuda","HOMEPAGE":"Homepage","FEEDBACK_TITLE":"Enviar suggerències","FEEDBACK":"Suggerències","NOTIFICATIONS_TITLE":"Edita la configuració de les teves notificacions","NOTIFICATIONS":"Notificacions","VIEW_PROFILE_TITLE":"Visualitza el perfil","VIEW_PROFILE":"Visualitza el perfil","EDIT_PROFILE_TITLE":"Editeu el vostre perfil","EDIT_PROFILE":"Edita el perfil","CHANGE_PASSWORD_TITLE":"Canvi de contrasenya","CHANGE_PASSWORD":"Canvi de contrasenya","DASHBOARD_TITLE":"Tauler","DISCOVER_TITLE":"Discover trending projects","DISCOVER":"Descobreix"},"LIKE_BUTTON":{"LIKE":"M'agrada","LIKED":"T'agrada","UNLIKE":"No t'agrada","BUTTON_TITLE":"Favoriteja o desfavoriteja aquest projecte","COUNTER_TITLE":"{total, plural, un{un fan} altres{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Segueix este projecte i edita les notificacions","WATCH":"Segueix","WATCHING":"Observant","COUNTER_TITLE":"{total, plural, one{un seguidor} other{# seguidors}}","OPTIONS":{"NOTIFY_ALL":"Receive all notifications","NOTIFY_ALL_TITLE":"Receive all notifications for this project","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Recive notificacions only when you are involved","UNWATCH":"Unwatch","UNWATCH_TITLE":"Unwatch this project"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Crear projecte","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Importar projecte","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Private Project"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Els Oompa Loompas estàn important el teu projecte","ASYNC_IN_PROGRESS_MESSAGE":"Aquest procés pot durar uns moments
    T'enviarem un correo quan estiga llest.","UPLOAD_IN_PROGRESS_MESSAGE":"Pujat {{uploadedSize}} de {{totalSize}}","ERROR":"Els Oompa Loompas han tingut problemes pujan les teues dades. Per favor intenta-ho de nou.","ERROR_TOO_MANY_REQUEST":"Ho sentim, els Oompa Loompas estàn molt ocupats ara mateix. Intenta-ho de nou en uns moments.","ERROR_MESSAGE":"Els Oompa Loompas tenen problemes important les teues dades: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) es massa gran per als nostres Oompa Loompas, prova amb algun inferior a ({{maxFileSize}})","SYNC_SUCCESS":"El teu projecte s'ha importat correctament","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Assign","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"cerca","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Important Projecte","DESCRIPTION":"Aquest procés pot durar una mica, pero favor mantinga la finestra oberta"},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Incidències","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Segur que vols borrar el teu compte de Taiga? ","CANCEL":"Back to settings","ACCEPT":"Delete account","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Esborrar projecte","QUESTION":"Estàs segur que vols borrar este projecte?","SUBTITLE":"Totes les dades del projecte (històries d'usuari, tasques, incidències, wikis) es perdràn :-(","CONFIRM":"Si, estic segur"},"ASSIGNED_TO":{"SELECT":"Selecciona assignació","SEARCH":"Cerca usuaris"},"ADD_MEMBER":{"TITLE":"Nou membre","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Add email","REMOVE":"Remove","INVITE":"Invite","CHOOSE_ROLE":"Choose a role","PLACEHOLDER_INVITATION_TEXT":"(Opcional) Afegix un text personalizat a la invitació. Dis-li algo divertit als nous membres. ;-)","HELP_TEXT":"Si els usuaris ja estàn registrats en Taiga seràn afegits automàticament. Si no, rebran una invitació."},"FEEDBACK":{"TITLE":"Contans...","COMMENT":"...un bug, una sugerència, algo bonic... inclús el teu pitjor malson amb Taiga.","ACTION_SEND":"Enviar suggerències"},"SEARCH":{"TITLE":"Cerca","PLACEHOLDER_SEARCH":"Què estàs buscant?"},"ADD_EDIT_SPRINT":{"TITLE":"Nou sprint","PLACEHOLDER_SPRINT_NAME":"Nom de Sprint","PLACEHOLDER_SPRINT_START":"Data d'inici","PLACEHOLDER_SPRINT_END":"Data de finalització","ACTION_DELETE_SPRINT":"Vols esborrar aquest sprint?","TITLE_ACTION_DELETE_SPRINT":"Esborra sprint","LAST_SPRINT_NAME":"L'ultim sprint ès {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Afegir incidència","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Esborrar sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opcional) Afegix un text personalizat a la invitació. Dis-li algo divertit als nous membres. ;-)","PLACEHOLDER_TYPE_EMAIL":"Escriu un correu","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Add comment","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"What's the project?","CHOOSE_PROJECT_FROM":"What's the project?","SUBJECT":"Descripció","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"Nova història d'usuari","EXISTING_USERSTORY":"Existing user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Descripció","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Història d'Usuari {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estat: {{userStoryStatus }}. Completat {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} de {{userStoryTotalTasks}} tasques tancades). Punts: {{userStoryPoints}}. Descripció: {{userStoryDescription}}","SECTION_NAME":"Història d'usuari","LINK_TASKBOARD":"Panell de tasques","TITLE_LINK_TASKBOARD":"Anar a panell de tasques","TOTAL_POINTS":"punts totals","ADD":"+ Afegeix una nova història d'usuari","ADD_BULK":"Afegeix noves històries d'usuari en grup","PROMOTED":"Aquesta US ha sigut promocionada desde:","TITLE_LINK_GO_TO_ISSUE":"Anar a la incidència","TITLE_DELETE_ACTION":"Esborra història d'usuari","LIGHTBOX_TITLE_BLOKING_US":"Bloquejant US","NOT_ESTIMATED":"Sense estimar","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Close","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Comment deleted by {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Older first","RECENT_FIRST":"Recent first","COMMENT":"Comentar","EDITED_COMMENT":"Edited:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Escriu un nou comentari ací","SHOW_DELETED":"Mostra el comentari esborrat.","HIDE_DELETED":"Amaga el comentari esborrat","DELETE":"Esborrar comentari","RESTORE":"Resturar comentari.","HISTORY":{"TITLE":"Activitat"}},"ACTIVITY":{"TITLE":"Activitat","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"tags added:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"new attachment:","DELETED_ATTACHMENT":"deleted attachment:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Requeriment d'equip","CLIENT_REQUIREMENT":"Requeriment de client","BLOCKED":"Bloquejat","VALUES":{"NOT_SET":"not set","UNASSIGNED":"Sense assignar"},"FIELDS":{"SUBJECT":"descripció","DESCRIPTION":"descripció","PRIORITY":"prioritat","SEVERITY":"severitat","STATUS":"Estats","TYPE":"tipus","ASSIGNED_TO":"Assignat a","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"color"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"El panell Backlog, amb històries d'usuari i esprints del projecte {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Edita el teu gràfic de backlog","CUSTOMIZE_GRAPH_TEXT":"Per a tindre un gràfic que t'ajude a seguir la evolució del projecte deus de editar els punts i els sprints per mig del","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Estableix els punts i els sprints al Admin","MOVE_US_TO_CURRENT_SPRINT":"Envia al Sprint","MOVE_US_TO_LATEST_SPRINT":"Posar a l'ultim sprint","EMPTY":"El backlog està buit!","CREATE_NEW_US":"Crea una nova US","CREATE_NEW_US_EMPTY_HELP":"Potser vols crear una nova història d'usuari","EXCESS_OF_POINTS":"Excés de punts","PENDING_POINTS":"Punts pendents","CLOSED_POINTS":"tancat","COMPACT_SPRINT":"Compacta Sprint","GO_TO_TASKBOARD":"Anar al panell de {{::name}}","EDIT_SPRINT":"Editar sprint","TOTAL_POINTS":"total","STATUS_NAME":"Nom d'estats","SORTABLE_FILTER_ERROR":"No pots portar al backlog si els filtres estàn oberts","DOOMLINE":"Extensió de projecte [Doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Punts","OPTIMAL":"Els punts pendents òptims per l'esprint \"{{sprintName}}\" haurien de ser {{value}}","REAL":"Real pending points for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"Alterna la visibilitat d'etiquetes","SHOW":"Mostra etiquetes","HIDE":"Amaga etiquetes"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Històries d'usuari","TITLE_COLUMN_POINTS":"Selecciona vista per rol"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"punts
    totals","COMPLETED_POINTS":"punts
    completats","OPEN_TASKS":"tasques
    obertes","CLOSED_TASKS":"tasques
    tancades","IOCAINE_DOSES":"dosis
    iocaína","SHOW_STATISTICS_TITLE":"Mostrar estadístiques","TOGGLE_BAKLOG_GRAPH":"Show/Hide burndown graph","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"punts
    projecte","DEFINED_POINTS":"punts
    definits","CLOSED_POINTS":"punts
    tancats","POINTS_PER_SPRINT":"punts
    sprint"},"FILTERS":{"TOGGLE":"Alterna la visibilitat dels filtres","HIDE":"Amaga filtres","SHOW":"Mostra filtres"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Anar al panell de sprint","TITLE_LINK_TASKBOARD":"Anar al panell de {{::name}}","EMPTY":"There are no sprints yet","WARNING_EMPTY_SPRINT_ANONYMOUS":"This sprint has no User Stories","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"Add new sprint","TEXT_ACTION_NEW_SPRINT":"You may want to create a new sprint in your project","ACTION_SHOW_CLOSED_SPRINTS":"Mostra sprints tancats","ACTION_HIDE_CLOSED_SPRINTS":"Amaga sprints tancats"}},"ERROR":{"TEXT1":"Ha passat algo i els nostres Oompa Loompas estàn arreglant-ho.","NOT_FOUND":"No trobat","NOT_FOUND_TEXT":"Error 404. La pàgina que busques no existeix. Pots tornar a la página principal de taiga i provar desde allí.","PERMISSION_DENIED":"Permis denegat","PERMISSION_DENIED_TEXT":"No tens permissos per a accedir a esta pàgina.","VERSION_ERROR":"Algú dins de Taiga ha canviat aȯ abans i els Oompa Loompas no pode aplicar els teus canvis. Per favor recarrega i aplica els teus canvis (es perdràn)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Panell de tasques del esprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} to {{endDate}}) de {{projectName}}. Completat {{completedPercentage}}% ({{completedPoints}} de {{totalPoints}} points). {{openTasks}} tasques obertes de {{totalTasks}}.","SECTION_NAME":"Panell de tasques","TITLE_ACTION_ADD":"Afegir nova tasca","TITLE_ACTION_ADD_BULK":"Afegeix noves històries d'usuari en grup","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Assignar tasca","PLACEHOLDER_CARD_TITLE":"Açó podría ser una tasca","PLACEHOLDER_CARD_TEXT":"Divideix les históries per a poder gertionar-les separadament","TABLE":{"COLUMN":"Història d'usuari","TITLE_ACTION_FOLD":"Plegar columna","TITLE_ACTION_UNFOLD":"Desplegar columna","TITLE_ACTION_FOLD_ROW":"Plegar fila","TITLE_ACTION_UNFOLD_ROW":"Desplegar fila","FIELD_POINTS":"punts","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Díes","YAXIS_LABEL":"Punts","OPTIMAL":"Punts pendents òptims per dia {{formattedDate}} deu ser {{roundedValue}}","REAL":"Punts pendents el dia {{formattedDate}} son {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tasca {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estat: {{taskStatus }}. Descripció: {{taskDescription}}","SECTION_NAME":"Tasca","LINK_TASKBOARD":"Panell de tasques","TITLE_LINK_TASKBOARD":"Anar a panell de tasques","PLACEHOLDER_SUBJECT":"Afegix la descripció de la tasca","TITLE_SELECT_STATUS":"Nom de l'estat","OWNER_US":"Aquesta tasca pertany a","TITLE_LINK_GO_OWNER":"Anar a història d'usuari","TITLE_DELETE_ACTION":"Esborrar tasca","LIGHTBOX_TITLE_BLOKING_TASK":"Bloquejant tasca","FIELDS":{"IS_IOCAINE":"Es iocaina"},"TITLE_ACTION_IOCAINE":"Un poc saturat per una tasca? Fes-ho saber als teus companys clicant a Iocaina quan edites la tasca. Es possible ser inmune a aquesta (fictícia) poció mortal consumint xicotetes dòsis poc a poc, així com es possible millorar amb xicotets nous desafiaments!"},"NOTIFICATION":{"OK":"Tot està bé","WARNING":"Oops, ha passat algo...","WARNING_TEXT":"Els teus canvis no s'han salvat!","SAVED":"Els Oompa Loompas han salvat els teus canvis!","CLOSE":"Tancar notificació","MAIL":"Notificaciones per correo","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Segur que vols borrar?"},"CANCEL_ACCOUNT":{"TITLE":"Cancel·la el teu conter ací","SUBTITLE":"Sentim molt que deixes Taiga, esperem que hages disfrutat la teua estància :)","PLACEHOLDER_INPUT_TOKEN":"Cancela token de conter","ACTION_LEAVING":"Sí, m'hen vaig!","SUCCESS":"Els Oompa Loompas han esborrat el teu conter"},"CHANGE_EMAIL_FORM":{"TITLE":"Canvia el teu correu","SUBTITLE":"Un click més i el teu correu estarà actualitzat!","PLACEHOLDER_INPUT_TOKEN":"Canvia el token de correu","ACTION_CHANGE_EMAIL":"Canviar correu","SUCCESS":"Els Oompa Loompas han actualitzat el teu correu"},"ISSUES":{"PAGE_TITLE":"Incidències - {{projectName}}","PAGE_DESCRIPTION":"El panell d'incidències de {{projectName}}: {{projectDescription}}","SECTION_NAME":"incidència","ACTION_NEW_ISSUE":"+ NOVA INCIDÈNCIA","ACTION_PROMOTE_TO_US":"Promocionar història d'usuari","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Esta incidència ha sigut promcionada a US:","EXTERNAL_REFERENCE":"Esta incidència ha sigut creada desde","GO_TO_EXTERNAL_REFERENCE":"Anar a l'orige","ACTION_DELETE":"Esborrar incidència","LIGHTBOX_TITLE_BLOKING_ISSUE":"Bloquejant incidència","LINK_TASKBOARD":"Panell de tasques","TITLE_LINK_TASKBOARD":"Anar a panell de tasques","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioritat","SEVERITY":"Severitat","TYPE":"Tipus"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promociona aquesta incidència a història d'usuari","MESSAGE":"Segur que vols crear una nova US desde aquesta incidència"},"TABLE":{"COLUMNS":{"TYPE":"Tipus","SEVERITY":"Severitat","PRIORITY":"Prioritat","SUBJECT":"Descripció","VOTES":"Vots","STATUS":"Estats","MODIFIED":"Modified","ASSIGNED_TO":"Assignat a"},"TITLE_ACTION_CHANGE_STATUS":"Canvia l'estat","TITLE_ACTION_ASSIGNED_TO":"Assignat a","BLOCKED":"Bloquejat","EMPTY":{"TITLE":"No hi ha incidències a reportar :-)","SUBTITLE":"Has trobat una incidència?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - incidència {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estat: {{issueStatus }}. Tipus: {{issueType}}, Prioritat: {{issuePriority}}. Severitat: {{issueSeverity}}. Descripció: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"El panell Kanban, amb històries d'usuari del projecte {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Plegar columna","TITLE_ACTION_UNFOLD":"Desplegar columna","TITLE_ACTION_ADD_US":"Afegeix una nova història d'usuari","TITLE_ACTION_ADD_BULK":"Afegir en grup","ACTION_SHOW_ARCHIVED":"Mostrar arxivats","ACTION_HIDE_ARCHIVED":"Amagar arxivats","HIDDEN_USER_STORIES":"Les històries d'usuari en aquest estats estan amagades","PLACEHOLDER_CARD_TITLE":"These are your User Stories","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Cerca - {{projectName}}","PAGE_DESCRIPTION":"Busca qualsevol cosa al projecte {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"Històries d'usuari","FILTER_ISSUES":"Incidències","FILTER_TASKS":"Tasca","FILTER_WIKI":"Pàgines de Wiki","PLACEHOLDER_SEARCH":"Cerca en...","TITLE_ACTION_SEARCH":"cerca","EMPTY_TITLE":"Pareix que no hem trobat res amb este criteri de recerca","EMPTY_DESCRIPTION":"Prova amb una de les pestanyes o busca de nou"},"TEAM":{"PAGE_TITLE":"Equip - {{projectName}}","PAGE_DESCRIPTION":"El panell d'equip mostra tots els membres del projecte {{projectName}}: {{projectDescription}}","SECTION_NAME":"Equip","PLACEHOLDER_INPUT_SEARCH":"Busca per nom complet...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Incidències tancades","COLUMN_IOCAINE":"Beguedor de iocaína","EXPLANATION_COLUMN_IOCAINE":"Dosis de iocaina ingerides","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Pàgines de Wiki editades","COLUMN_BUG_HUNTER":"Caçador de bug","EXPLANATION_COLUMN_BUG_HUNTER":"Incidència reportada","COLUMN_NIGHT_SHIFT":"Torn de nit","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tasques tancades","COLUMN_TOTAL_POWER":"Punts totals","EXPLANATION_COLUMN_TOTAL_POWER":"Punts totals","SECTION_TITLE_TEAM":"Equip >","SECTION_FILTER_ALL":"Tot","CONFIRM_LEAVE_PROJECT":"Segur que vols deixar el projecte?","ACTION_LEAVE_PROJECT":"Abandonar aquest projecte"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. grandària: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Configuració d'usuari","USER_PROFILE":"Perfil d'usuari","CHANGE_PASSWORD":"Canvi de contrasenya","EMAIL_NOTIFICATIONS":"Notificacions de correu","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Notificacions de correu","COLUMN_PROJECT":"Projecte","COLUMN_RECEIVE_ALL":"Recibir tot","COLUMN_ONLY_INVOLVED":"Només relevants","COLUMN_NO_NOTIFICATIONS":"Sense notificacions","OPTION_ALL":"Tot","OPTION_INVOLVED":"Implicat","OPTION_NONE":"Sense notificacions"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projecte","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projecte"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Utilitza la imatge per defecte","ACTION_DELETE_ACCOUNT":"Esborrar compte de Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Mira el teu correu!
    Hem enviat un correu al teu conter
    amb les instrucciones per a escriure una nova adreça de correu","CHANGE_PHOTO":"Canviar foto","FIELD":{"USERNAME":"Nom d'usuari","EMAIL":"Correu electrònic","FULL_NAME":"Nom complet","PLACEHOLDER_FULL_NAME":"Esciur el teu nom complet (ex. Íñigo Montoya)","BIO":"Bio (max. 210 caràcters)","PLACEHOLDER_BIO":"Contans algo sobre tu mateix","LANGUAGE":"Idioma","LANGUAGE_DEFAULT":"-- utiliza l'idioma per defecte --","THEME":"Tema","THEME_DEFAULT":"-- utilitza el tema per defecte --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Esborrar pàgina de Wiki","DELETE_LIGHTBOX_TITLE":"Esborrar pàgina de Wiki","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"voltes
    editat","LAST_EDIT":"última
    edició","LAST_MODIFICATION":"última modificació"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"Creat","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Hint","LINK":"If you want to know how to use it visit our support page","LINK_TITLE":"Visita la nostra pàgina d'ajuda","HINT1_TITLE":"Saps que pots importar i exportar projectes?","HINT1_TEXT":"Això li permet extreure totes les dades d'un Taiga i moure'l a un altre.","HINT2_TITLE":"Saps que pots crear camps personalitzats?","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 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":{"UPLOAD_ATTACHMENT":"{{username}} has uploaded a new attachment in {{obj_name}}","US_CREATED":"{{username}} ha creat una nova història d'usuari {{obj_name}} a {{project_name}}","ISSUE_CREATED":"{{username}} ha creat una nova incidència {{obj_name}} a {{project_name}}","TASK_CREATED":"{{username}} ha creat una nova tasca {{obj_name}} a {{project_name}}","TASK_CREATED_WITH_US":"{{username}} ha creat una nova tasca {{obj_name}} a {{project_name}} provinent de US {{us_name}}","WIKI_CREATED":"{{username}} has created a new wiki page {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} has created a new sprint {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} ha creat el projecte {{project_name}}","MILESTONE_UPDATED":"{{username}} has updated the sprint {{obj_name}}","US_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}} to {{new_value}}","US_UPDATED_POINTS":"{{username}} has updated '{{role_name}}' points of the US {{obj_name}} to {{new_value}}","ISSUE_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}} to {{new_value}}","TASK_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} ha actualitzat l'atribut \"{{field_name}}\" de la tasca {{obj_name}} de la història d'usuari {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} ha actualitzat l'atribut \"{{field_name}}\" de la tasca {{obj_name}} de la història d'usuari {{us_name}} amb el valor {{new_value}}","WIKI_UPDATED":"{{username}} ha actualitzat la pàgina wiki {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} ha comentat la història d'usuari {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} ha comentat la incidència {{obj_name}}","NEW_COMMENT_TASK":"{{username}} ha comentat la tasca {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} te un nou membre","US_ADDED_MILESTONE":"{{username}} ha afegit la història d'usuari {{obj_name}} a {{sprint_name}}","US_MOVED":"{{username}} ha mogut la història d'usuari {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} ha afegit la història d'usuari {{obj_name}} al backlog","BLOCKED":"{{username}} ha bloquejat {{obj_name}}","UNBLOCKED":"{{username}} ha desbloquejat {{obj_name}}","NEW_USER":"{{username}} s'ha unit a Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"incidència","TASK":"Tasca"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"Una aplicació externa requereix autenticació","PAGE_DESCRIPTION":"Una aplicació externa requereix autenticació","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Identifica't amb un altre nom d'usuari","AUTHORIZE_APP":"Autoritza l'aplicació","CANCEL":"Següent"},"JOYRIDE":{"NAV":{"NEXT":"Següent","BACK":"Back","SKIP":"Skip","DONE":"Done"},"DASHBOARD":{"STEP1":{"TITLE":"El teu projecte","TEXT":"Welcome! Here you will find the projects you are involved on."},"STEP2":{"TITLE":"En Progrés","TEXT":"Here you will find the User Stories, Tasks and Issues in which you are working on."},"STEP3":{"TITLE":"Observant","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"You are already working with Taiga ;)"},"STEP4":{"TITLE":"Let’s start","TEXT1":"You can start by creating your first Taiga project.","TEXT2":"Good luck!"}},"BACKLOG":{"STEP1":{"TITLE":"Project summary","TEXT1":"Here you will see the state of your project.","TEXT2":"You can change every kind of project settings through the admin."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"Històries d'usuari","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"User Stories & Tasks","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Good luck!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Discover projects","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Most liked","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"View more","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Tot","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Looking for people","WEEK":"Last week","MONTH":"Last month","YEAR":"Last year","ALL_TIME":"All time","CLEAR":"Clear filters"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Escriu algo...","ACTION_TITLE":"Cerca","RESULTS":"Search results"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-de.json b/dist/v-1549282893552/locales/taiga/locale-de.json new file mode 100644 index 0000000..f8baca8 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-de.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Ja","NO":"Nein","OR":"oder","I_GET_IT":"OK, I get it","LOADING":"Wird geladen...","DATE":"DD. MMM YYYY","DATETIME":"DD. MMM YYYY HH:mm","SAVE":"Speichern","CANCEL":"Abbrechen","ACCEPT":"Akzeptieren","DELETE":"Löschen","UNLINK":"Verknüpfung auflösen","CREATE":"Erzeugen","ADD":"Hinzufügen","COPY_TO_CLIPBOARD":"In die Zwischenablage kopieren","COPIED_TO_CLIPBOARD":"Der Text wurde in die Zwischenablage kopiert","EDIT":"Bearbeiten","DRAG":"Ziehen","TAG_LINE":"Ihr agiles, freies und quelloffenes Projekt-Management Tool","TAG_LINE_2":"LIEBEN SIE IHR PROJEKT","BLOCK":"Blockieren","BLOCK_TITLE":"Blockiere dieses Item, zum Beispiel wenn es Abhängigkeiten besitzt, die noch nicht erfüllt sind","BLOCKED":"Blockiert","UNBLOCK":"Blockierung aufheben","UNBLOCK_TITLE":"Dieses Item freigeben","BLOCKED_NOTE":"Wieso ist es blockiert?","BLOCKED_REASON":"Bitte erklären Sie den Grund","CREATED_BY":"Erstellt durch {{fullDisplayName}}","CLOSE":"schließen","GO_HOME":"Führe mich heim","PLUGINS":"Plugins","ONE_ITEM_LINE":"Ein Eintrag pro Zeile...","NEW_BULK":"Neue Massenerstellung","SUBTASKS":"Subtasks","PREVIOUS":"Zurück","NEXT":"Weiter","LOGOUT":"Ausloggen","EXTERNAL_USER":"ein externer Benutzer","GENERIC_ERROR":"Eins unserer Helferlein sagt {{error}}.","IOCAINE_TEXT":"Dieses Mitglied fühlt sich ein bisschen überfordert mit dieser Aufgabe. Mit der Zeit und Ihrer Hilfe wird er gegen das Iocaine Pulver immun werden. Aber jetzt braucht er eine Umarmung.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Projekteigentümer","CAPSLOCK_WARNING":"Achtung! Sie verwenden Großbuchstaben in einem Eingabefeld, dass Groß- und Kleinschreibung berücksichtigt.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Sind Sie sicher, dass Sie den Bearbeitungsmodus beenden möchten?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Beachten Sie, dass alle Änderungen verloren gehen, wenn Sie den Bearbeitungsmodus schließen, ohne vorher zu speichern.","RELATED_USERSTORIES":"Verwandte User Stories","CARD":{"ASSIGN_TO":"Zuweisen an","EDIT":"Karte bearbeiten","DELETE":"Karte Löschen","DELETE_ISSUE":"Ticket löschen","DETACH_ISSUE_FROM_SPRINT":"Ticket vom Sprint lösen"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Dieser Wert scheint ungültig zu sein.","TYPE_EMAIL":"Dieser Wert sollte eine gültige E-Mail Adresse enthalten.","TYPE_URL":"Dieser Wert sollte eine gültige URL enthalten.","TYPE_URLSTRICT":"Dieser Wert sollte eine gültige URL enthalten.","TYPE_NUMBER":"Dieser Wert sollte eine gültige Nummer enthalten.","TYPE_DIGITS":"Dieser Wert sollte Ziffern enthalten.","TYPE_DATEISO":"Dieser Wert sollte ein gültiges Datum sein (YYYY-MM-DD)","TYPE_ALPHANUM":"Dieser Wert sollte alphanumersich sein.","TYPE_PHONE":"Dieser Wert sollte eine gültige Telefonnummer enthalten.","NOTNULL":"Dieser Wert darf nicht leer sein.","NOT_BLANK":"Dieser Wert darf nicht leer bleiben.","REQUIRED":"Diese Angabe ist erforderlich","REGEXP":"Dieser Wert scheint ungültig zu sein.","MIN":"Dieser Wert sollte größer oder gleich %s sein.","MAX":"Dieser Wert sollte niedriger oder gleich %s sein.","RANGE":"Der Wert sollte zwischen %s und %s liegen.","MIN_LENGTH":"Diese Angabe ist zu kurz. Sie sollte mindestens %s Zeichen haben oder mehr.","MAX_LENGTH":"Diese Angabe ist zu lang. Sie sollte %s Zeichen haben oder weniger.","RANGE_LENGTH":"Die Länge des Wertes ist ungültig. Sie sollte zwischen %s und %s Zeichen liegen.","MIN_CHECK":"Sie müssen mindestens %s auswählen.","MAX_CHECK":"Wählen Sie %s oder weniger.","RANGE_CHECK":"Wählen Sie zwischen %s und %s","EQUAL_TO":"Dieser Wert sollte der gleiche sein.","LINEWIDTH":"Eine oder mehrere Zeilen sind vielleicht zu lang. Versuchen Sie unter %s Zeichen zu bleiben.","PIKADAY":"Ungültiges Datumsformat. Bitte nutzen Sie DD MMM YYYY (z. B. 23 März 1984)"},"PICKERDATE":{"FORMAT":"DD. MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Vorheriger Monat","NEXT_MONTH":"Nächster Monat","MONTHS":{"JAN":"Januar","FEB":"Februar","MAR":"März","APR":"April","MAY":"Mai","JUN":"Juni","JUL":"Juli","AUG":"August","SEP":"September","OCT":"Oktober","NOV":"November","DEC":"Dezember"},"WEEK_DAYS":{"SUN":"Sonntag","MON":"Montag","TUE":"Dienstag","WED":"Mittwoch","THU":"Donnerstag","FRI":"Freitag","SAT":"Samstag"},"WEEK_DAYS_SHORT":{"SUN":"So","MON":"Mo","TUE":"Di","WED":"Mi","THU":"Do","FRI":"Fr","SAT":"Sa"}},"SEE_USER_PROFILE":"Profil von {{username }} ansehen","USER_STORY":"User-Story","TASK":"Aufgabe","ISSUE":"Ticket","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Gib einen Tag ein","DELETE":"Schlagwort löschen","ADD":"Schlagwort hinzufügen"},"DESCRIPTION":{"EMPTY":"Bitte geben Sie eine Beschreibung ein...","NO_DESCRIPTION":"Noch keine Beschreibung"},"FIELDS":{"SUBJECT":"Thema","NAME":"Name","URL":"URL","DESCRIPTION":"Beschreibung","VALUE":"Wert","SLUG":"Slug","COLOR":"Farbe","IS_CLOSED":"ist geschlossen?","STATUS":"Status","TYPE":"Typen","SEVERITY":"Gewichtung","PRIORITY":"Priorität","ASSIGNED_TO":"Zugewiesen an","ASSIGNED_USERS":"Zugewiesene Benutzer","POINTS":"Punkte","IS_BLOCKED":"wird blockiert","REF":"Ref","VOTES":"Stimmen","SPRINT":"Sprint","DUE_DATE":"Fälligkeitsdatum","DUE_DATE_REASON":"Grund des Fälligkeitsdatum"},"ROLES":{"ALL":"Alle"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Nicht zugeordnet","ASSIGN":"Zuweisen","DELETE_ASSIGNMENT":"Zuordnung löschen","REMOVE_ASSIGNED":"Zugewiesene entfernen","TOO_MANY":"...zu viele Benutzer. Filtern Sie!","CONFIRM_UNASSIGNED":"Möchten dies wirklich ohne eine Zuordnung verlassen?","TITLE_ACTION_EDIT_ASSIGNMENT":"Zuordnungen bearbeiten","SELF":"An mich zuweisen"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Fälligkeitsdatum setzen"},"ASSIGNED_USERS":{"ADD":"Zugewiesenen Benutzer wählen","ADD_ASSIGNED":"Zugewiesenen hinzufügen","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Zugewiesenen löschen..."},"STATUS":{"CLOSED":"Geschlossen","OPEN":"Geöffnet"},"WATCHERS":{"WATCHERS":"Beobachter","ADD":"Beobachter hinzufügen","TITLE_ADD":"Füge ein neues Projektmitglied der Beobachterliste hinzu","DELETE":"Beobachter löschen","TITLE_LIGHTBOX_DELETE_WARTCHER":"Beobachter löschen..."},"WATCH_BUTTON":{"WATCH":"Beobachten","WATCHING":"Beobachtet","UNWATCH":"Nicht beobachten","WATCHERS":"Beobachter","BUTTON_TITLE":"Beobachte/Beobachte dieses Objekt (nicht mehr)","COUNTER_TITLE":"{total, plural, one{ein Beobachter} other{# Beobachter}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote diesen Eintrag","COUNTER_TITLE":"{total, plural, one{eine Stimme} other{# Stimmen}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Benutzerdefinierte Felder","SAVE":"Benutzerdefiniertes Feld speichern","EDIT":"Benutzerdefiniertes Feld bearbeiten","DELETE":"benutzerdefiniertes Attribut löschen","CONFIRM_DELETE":"Alle Werte in benutzerdefinierten Feldern werden gelöscht.\n Sind Sie sicher, dass Sie fortfahren wollen?"},"FILTERS":{"INPUT_PLACEHOLDER":"Betreff oder Verweis","TITLE_ACTION_FILTER_BUTTON":"suche","TITLE":"Filter","TITLE_ACTION_SEARCH":"Suche","ACTION_SAVE_CUSTOM_FILTER":"Als Benutzerfilter speichern","PLACEHOLDER_FILTER_NAME":"Benennen Sie den Filter und drücken Sie die Eingabetaste","APPLIED_FILTERS_NUM":"Filter wurden angewandt","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Arten","STATUS":"Status","SEVERITY":"Gewichtung","PRIORITIES":"Prioritäten","TAGS":"Schlagwörter","ASSIGNED_TO":"Zugeordnet zu","ASSIGNED_USERS":"Zugewiesene Benutzer","ROLE":"Rolle","CREATED_BY":"Erstellt durch","CUSTOM_FILTERS":"Benutzerfilter","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Codeschnipsel","DB_CLICK":"Doppelklick zum Bearbeiten","SELECT_LANGUAGE_PLACEHOLDER":"Sprache wählen","SELECT_LANGUAGE_REMOVE_FORMATING":"Lösche Formatierung","OUTDATED":"Eine andere Person hat während Ihrer Bearbeitung ebenfalls Änderungen vorgenommen. Überprüfen Sie die neue Version bei den Aktivitäten, bevor Sie Ihre Änderungen speichern","MARKDOWN_HELP":"Markdown syntax Hilfe"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"Epics anzeigen","ADD_EPICS":"Epics hinzufügen","MODIFY_EPICS":"Epics verändern","COMMENT_EPICS":"Epics kommentieren","DELETE_EPICS":"Epics löschen"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Sprints ansehen","ADD_SPRINTS":"Sprints hinzufügen","MODIFY_SPRINTS":"Sprints modifizieren","DELETE_SPRINTS":"Sprints löschen"},"USER_STORIES":{"NAME":"User-Stories","VIEW_USER_STORIES":"User-Stories ansehen","ADD_USER_STORIES":"User-Stories hinzufügen","MODIFY_USER_STORIES":"User-Stories modifizieren","COMMENT_USER_STORIES":"User-Stories kommentieren","DELETE_USER_STORIES":"User-Stories löschen"},"TASKS":{"NAME":"Aufgaben","VIEW_TASKS":"Aufgaben ansehen","ADD_TASKS":"Aufgaben hinzufügen","MODIFY_TASKS":"Aufgaben ändern","COMMENT_TASKS":"Aufgaben kommentieren","DELETE_TASKS":"Aufgaben löschen"},"ISSUES":{"NAME":"Tickets","VIEW_ISSUES":"Tickets ansehen","ADD_ISSUES":"Tickets hinzufügen","MODIFY_ISSUES":"Tickets ändern","COMMENT_ISSUES":"Tickets kommentieren","DELETE_ISSUES":"Tickets löschen"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Wiki Seiten ansehen","ADD_WIKI_PAGES":"Wiki Seiten hinzufügen","MODIFY_WIKI_PAGES":"Wiki Seiten ändern","DELETE_WIKI_PAGES":"Wiki Seiten löschen","VIEW_WIKI_LINKS":"Wiki Links ansehen","ADD_WIKI_LINKS":"Wiki Links hinzufügen","DELETE_WIKI_LINKS":"Wiki Links löschen"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Melden Sie sich bei Taiga an, einer Projekt-Management Plattform für Neugründer und agile Entwickler und Designer, die ein unkompliziertes und ansprechendes Tool möchten, das die Arbeit wirklich angenehm macht."},"AUTH":{"INVITED_YOU":"hat Sie zum Projekt eingeladen","NOT_REGISTERED_YET":"Noch nicht registiert?","REGISTER":"Registrieren","CREATE_ACCOUNT":"Ein kostenloses Benutzerkonto anlegen"},"LOGIN_COMMON":{"HEADER":"Ich bin bereits bei Taiga registriert","PLACEHOLDER_AUTH_NAME":"Benutzername oder E-Mail-Adresse","LINK_FORGOT_PASSWORD":"Haben Sie es vergessen?","TITLE_LINK_FORGOT_PASSWORD":"Haben Sie Ihr Passwort vergessen?","ACTION_ENTER":"Eingabe","ACTION_SIGN_IN":"Login","PLACEHOLDER_AUTH_PASSWORD":"Passwort","ALT_LOGIN":"Oder einloggen mit"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Laut unserem Helferlein ist ihr Benutzername/ihre E-Mail-Adresse oder ihr Passwort nicht korrekt. (Bitte achten Sie auf die Groß- und Kleinschreibung.)","SUCCESS":"Herzlich willkommen bei Taiga, unsere Helferlein freuen sich."},"REGISTER":{"PAGE_TITLE":"Registrieren - Taiga","PAGE_DESCRIPTION":"Erstellen Sie ihr Benutzerkonto in Taiga, einer Projekt-Management Plattform für Neugründer und agile Entwickler und Designer, die ein unkompliziertes und ansprechendes Tool möchten, das die Arbeit wirklich angenehm macht."},"REGISTER_FORM":{"TITLE":"Ein neues Taiga Benutzerkonto registrieren (kostenlos)","PLACEHOLDER_NAME":"Wählen Sie einen Benutzernamen (Groß- und Kleinschreibung beachten)","PLACEHOLDER_FULL_NAME":"Wählen Sie Ihren Anzeigenamen","PLACEHOLDER_EMAIL":"Ihre E-Mail","PLACEHOLDER_PASSWORD":"Setzen Sie ein Passwort (Groß- und Kleinschreibung beachten)","ACTION_SIGN_UP":"Anmelden","TITLE_LINK_LOGIN":"Anmelden","LINK_LOGIN":"Sind Sie bereits registriert? Loggen Sie sich ein"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Passwort vergessen - Taiga","PAGE_DESCRIPTION":"Geben Sie Ihren Benutzernamen oder Ihre E-Mail Adresse ein, um ein neues Passwort zu erhalten."},"FORGOT_PASSWORD_FORM":{"TITLE":"Huch, haben Sie Ihr Passwort vergessen?","SUBTITLE":"Geben Sie Ihren Benutzernamen oder Ihre E-Mail-Adresse ein, um einen neues zu erhalten.","PLACEHOLDER_FIELD":"Benutzername oder E-Mail-Adresse","ACTION_RESET_PASSWORD":"Passwort zurücksetzen","LINK_CANCEL":"Nein, bring mich zurück. Ich denke, ich erinnere mich daran.","SUCCESS_TITLE":"Prüfen Sie bitte Ihre Emails!","SUCCESS_TEXT":"Wir haben Ihnen eine Email mit den Anweisungen zum ändern Ihres Passworts geschickt","ERROR":"Laut unseren Helferlein sind Sie bislang noch nicht registriert."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Änderen Sie Ihr Passwort - Taiga","SECTION_NAME":"Passwort ändern","FIELD_CURRENT_PASSWORD":"Aktuelles Passwort","PLACEHOLDER_CURRENT_PASSWORD":"Ihr aktuelles Passwort (oder leer, wenn Sie noch kein Passwort haben)","FIELD_NEW_PASSWORD":"Neues Passwort","PLACEHOLDER_NEW_PASSWORD":"Geben Sie ein neues Passwort ein","FIELD_RETYPE_PASSWORD":"Neues Passwort wiederholen","PLACEHOLDER_RETYPE_PASSWORD":"Wiederholen Sie das neue Passwort","ERROR_PASSWORD_MATCH":"Die Passwörter stimmen nicht überein"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Erstellen Sie einen neues Passwort","SUBTITLE":"Und hey, es empfiehlt sich, mehr eisenreiche Nahrung zu sich zu nehmen - die ist gut für's Gehirn :P","PLACEHOLDER_NEW_PASSWORD":"Neues Passwort","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Wiederholen Sie die Eingabe des neuen Passworts","ACTION_RESET_PASSWORD":"Passwort zurücksetzen","ERROR":"Unsere Heinzelmännchen haben Probleme Ihre Anfrage zum Zurücksetzen des Passworts zu finden. Probieren Sie es einfach nochmal.","SUCCESS":"Unsere Helferlein haben das neue Passwort gespeichert.
    Hier gehts zum login."},"INVITATION":{"PAGE_TITLE":"Annahme der Einladung - Taiga","PAGE_DESCRIPTION":"Nehmen Sie die Einladung an und treten Sie einem Projekt in Taiga bei, einer Projekt-Management Plattform für Neugründer und agile Entwickler und Designer, die ein unkompliziertes und ansprechendes Tool möchten, das die Arbeit wirklich angenehm macht."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Unsere Helferlein können Ihre Einladung nicht finden.","SUCCESS":"Sie sind diesem Projekt erfolgreich beigetreten. Herzlich willkommen bei {{project_name}}"},"HOME":{"PAGE_TITLE":"Home - Taiga","PAGE_DESCRIPTION":"Die Taiga Homepage mit Ihren wichtigsten Projekten und all Ihren zugeordneten und beobachteten User-Stories, Aufgaben und Tickets.","EMPTY_WORKING_ON":"Es sieht hier noch leer aus! Beginnen Sie mit Taiga zu arbeiten und hier werden die User-Storys, Aufgaben und Tickets angezeigt, an denen Sie arbeiten.","EMPTY_WATCHING":"Folgen Sie User Stories, Aufgaben, Tickets in Ihrem Projekt und erhalte Benachrichtigungen, wenn sich etwas ändert.","EMPTY_PROJECT_LIST":"Sie haben noch keine Projekte","WORKING_ON_SECTION":"In Arbeit","WATCHING_SECTION":"Beobachtet","DASHBOARD":"Projekt Dashboard"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"Die Liste der Epics dieses Projekts {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ EPIC HINZUFÜGEN","UNASSIGNED":"Nicht zugeordnet"},"EMPTY":{"TITLE":"Es sind noch keine Epics vorhanden","EXPLANATION":"Epics sind Elemente, die User-Stories umfassen.
    Sie stehen dabei an oberster Stelle in der Hierarchie und können dazu verwendet werden, User-Stories zu gruppieren.","HELP":"Erfahren Sie mehr über Epics"},"TABLE":{"VOTES":"Stimmen","NAME":"Name","PROJECT":"Projekt","SPRINT":"Sprint","ASSIGNED_TO":"Zugewiesen","STATUS":"Status","PROGRESS":"Fortschritt","VIEW_OPTIONS":"Zeige Optionen"},"CREATE":{"TITLE":"Neues Epic","PLACEHOLDER_DESCRIPTION":"Bitte beschreiben Sie dieses Epic zum leichteren Verständnis","TEAM_REQUIREMENT":"Team-Anforderung","CLIENT_REQUIREMENT":"Kunden-Anforderung","BLOCKED":"Blockiert","BLOCKED_NOTE_PLACEHOLDER":"Warum ist dieses Epic geblockt?","CREATE_EPIC":"Epic erzeugen"}},"PROJECTS":{"PAGE_TITLE":"Meine Projekte - Taiga","PAGE_DESCRIPTION":"Eine Liste mit all Ihren Projekten. Sie können sie ordnen oder ein Neues anlegen.","MY_PROJECTS":"Meine Projekte"},"ATTACHMENT":{"SECTION_NAME":"Anhänge","TITLE":"{{ fileName }} hochgeladen am {{ date }}","LIST_VIEW_MODE":"List view mode","GALLERY_VIEW_MODE":"Gallery view mode","DESCRIPTION":"Geben Sie eine kurze Beschreibung ein","DEPRECATED":"verworfen","DEPRECATED_FILE":"Verwerfen?","ADD":"Neuen Anhang hinzufügen. {{maxFileSizeMsg}}","DROP":"Ziehe Anhänge hierher!","SHOW_DEPRECATED":"+ verworfene Anhänge zeigen","HIDE_DEPRECATED":"- verworfene Anhänge verbergen","COUNT_DEPRECATED":"({{ counter }} verworfen)","MAX_UPLOAD_SIZE":"Die maximale Dateigröße beträgt {{maxFileSize}}","DATE":"DD. MMM YYYY [um] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Das Hochladen war uns nicht möglich '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Anhang löschen...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"der Anhang '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Es war uns nicht möglich, zu löschen: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Zurück","NEXT":"Weiter"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Wert bearbeiten","TITLE_ACTION_DELETE_VALUE":"Wert löschen","TITLE_ACTION_DELETE_TAG":"Schlagwort löschen"},"HELP":"Wenn Sie Hilfe benötigen, besuchen Sie unsere Support-Seite!","PROJECT_DEFAULT_VALUES":{"TITLE":"Vorgabewerte","SUBTITLE":"Standardwerte für alle ausgewählten Eingaben setzen."},"MEMBERSHIPS":{"TITLE":"Mitglieder verwalten","PAGE_TITLE":"Mitgliedschaften - {{projectName}}","ADD_BUTTON":"+ Neues Mitglied","ADD_BUTTON_TITLE":"Neues Mitglied hinzufügen","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Dieses Projekt hat seine Grenze von ({{members}}) erlaubten Mitgliedern erreicht. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie den Administrator."},"PROJECT_EXPORT":{"TITLE":"Exportieren","SUBTITLE":"Exportieren Sie Ihr Projekt, um ein Backup durchzuführen, oder ein neues, darauf basierendes, zu erstellen.","EXPORT_BUTTON":"Exportieren","EXPORT_BUTTON_TITLE":"Exportieren Sie Ihr Projekt","LOADING_TITLE":"Wir erzeugen die Exportdatei","DUMP_READY":"Ihre Export-Datei ist fertig!","LOADING_MESSAGE":"Bitte lassen Sie diese Seite geöffnet!","ASYNC_MESSAGE":"Wir werden nach Fertigstellung eine E-Mail senden.","SYNC_MESSAGE":"Wenn der Download nicht automatisch startet, klicken Sie hier.","ERROR":"Unsere Helferlein haben Probleme, Ihre Export-Datei zu erzeugen. Bitte versuchen Sie es erneut.","ERROR_BUSY":"Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut."},"MODULES":{"TITLE":"Module","EPICS":"Epics","EPICS_DESCRIPTION":"Visualisieren und verwalten Sie den strategischsten Teil Ihres Projektes","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Verwalten Sie Ihre User-Stories, um einen organisierten Überblick der anstehenden und priorisierten Aufgaben zu erhalten.","NUMBER_SPRINTS":"Erwartete Anzahl an Sprints","NUMBER_SPRINTS_HELP":"0 für eine unbestimmte Anzahl","NUMBER_US_POINTS":"Erwartete Gesamt-Story-Punkte","NUMBER_US_POINTS_HELP":"0 für eine unbestimmte Anzahl","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organisieren Sie Ihr Projekt auf übersichtliche Art.","ISSUES":"Tickets","ISSUES_DESCRIPTION":"Verfolgen Sie Fehler, Fragen und Verbesserungen, die mit Ihrem Projekt verbunden sind. Verpassen Sie nichts!","WIKI":"Wiki","WIKI_DESCRIPTION":"Fügen Sie Inhalte hinzu, ändern oder löschen Sie sie in Zusammenarbeit mit anderen. Dies ist der richtige Ort für Ihre Projektdokumentation.","MEETUP":"Zusammentreffen","MEETUP_DESCRIPTION":"Wähle Sie Ihr Videokonferenzsystem.","SELECT_VIDEOCONFERENCE":"Wählen Sie ein Videokonferenzsystem","SALT_CHAT_ROOM":"Fügen Sie ein Präfix für den Chatraum-Namen hinzu","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"Appear.in","TALKY_CHAT_ROOM":"Talky.io","CUSTOM_CHAT_ROOM":"Benutzerdefiniert","URL_CHAT_ROOM":"URL Ihres Chatrooms"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Projekt Profil - {{projectName}}","PROJECT_DETAILS":"Projekt Details","PROJECT_NAME":"Projektname","TAGS":"Schlagwörter","DESCRIPTION":"Beschreibung","RECRUITING":"Auf der Suche nach Mitgliedern?","RECRUITING_MESSAGE":"Wen suchen Sie denn?","RECRUITING_PLACEHOLDER":"Define the profiles you are looking for","FEEDBACK":"Feedback von Taiga-Nutzern erhalten?","PUBLIC_PROJECT":"Öffentliches Projekt","PRIVATE_PROJECT":"Privates Projekt","PRIVATE_OR_PUBLIC":"Was ist der Unterschied zwischen öffentlichen und privaten Projekten?","DELETE":"Dieses Projekt löschen","CHANGE_LOGO":"Logo ändern","ACTION_USE_DEFAULT_LOGO":"Nutze Standardbild","MAX_PRIVATE_PROJECTS":"Sie haben die maximale Anzahl privater Projekte erreicht, die in Ihrem derzeitigen Plan erlaubt sind","MAX_PRIVATE_PROJECTS_MEMBERS":"Die maximale Anzahl von Mitgliedern für privater Projekte sind erreicht","MAX_PUBLIC_PROJECTS":"Leider haben Sie die maximale Anzahl öffentlicher Projekte erreicht, die in Ihrem derzeitigen Plan erlaubt sind","MAX_PUBLIC_PROJECTS_MEMBERS":"Die maximale Anzahl von Mitgliedern für öffentliche Projekte sind erreicht","PROJECT_OWNER":"Projekteigentümer","REQUEST_OWNERSHIP":"Besitz beantragen","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Möchten Sie der neue Projektleiter werden?","REQUEST_OWNERSHIP_DESC":"Anfrage vom derzeitigen Projektleiter {{name}}, die Leitung für dieses Projekt zu übernehmen.","REQUEST_OWNERSHIP_BUTTON":"Anfrage","REQUEST_OWNERSHIP_SUCCESS":"Wir werden den Projektleiter benachrichtigen","CHANGE_OWNER":"Ändere Besitzer","CHANGE_OWNER_SUCCESS_TITLE":"OK, Ihre Anfrage wurde versendet!","CHANGE_OWNER_SUCCESS_DESC":"Wir informieren Sie via Email, ob sie als neuer Projektleiter akzeptiert wurden oder ob die Anfrage zurückgewiesen wurde."},"REPORTS":{"TITLE":"Berichte","SUBTITLE":"Exportieren Sie Ihre Projektdaten in CSV Format und erstellen Sie Ihre eigenen Berichte.","DESCRIPTION":"Laden Sie eine CSV-Datei herunter oder kopieren Sie die generierte URL und öffnen Sie sie in Ihrem Lieblingstexteditor oder Tabellenkalkulationsprogramm um Ihre eigenen Projektdaten Berichte zu erstellen. So können Sie Ihre Daten einfach visualisieren und analysieren.","HELP":"Wie kann ich dies in meiner eigenen Tabellenkalkulation nutzen?","REGENERATE_TITLE":"Die URL ändern","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"URL löschen","DELETE_SUBTITLE":"Sie sind dabei, die aktuelle URL für den CSV Daten Zugriff, zu löschen. Sind Sie sicher?"},"CSV":{"SECTION_TITLE_EPIC":"Epics Berichte","SECTION_TITLE_US":"User-Stories Berichte","SECTION_TITLE_TASK":"Aufgabenberichte","SECTION_TITLE_ISSUE":"Ticket Berichte","DOWNLOAD":"CSV herunterladen","URL_FIELD_PLACEHOLDER":"Bitte erstellen Sie die CSV URL neu","TITLE_REGENERATE_URL":"Erstellen Sie die CSV URL neu","ACTION_GENERATE_URL":"URL erzeugen","ACTION_REGENERATE":"Neu erstellen","TITLE_DELETE_URL":"CSV URL löschen","ACTION_DELETE_URL":"Löschen"},"CUSTOM_FIELDS":{"TITLE":"Benutzerfelder","SUBTITLE":"Spezifizieren Sie die Benutzerfelder für Ihre User-Stories, Aufgaben und Tickets.","EPIC_DESCRIPTION":"Benutzerdefinierte Felder der Epics","EPIC_ADD":"Benutzerdefiniertes Feld bei Epics hinzufügen","US_DESCRIPTION":"Benutzerdefinierte Felder der User-Story","US_ADD":"Benutzerdefiniertes Feld bei User-Stories hinzufügen","TASK_DESCRIPTION":"Aufgaben benutzerdefinierte Felder","TASK_ADD":"Fügen Sie ein benutzerdefiniertes Feld bei Aufgaben hinzu","ISSUE_DESCRIPTION":"Tickets benutzerdefinierte Felder","ISSUE_ADD":"Fügen Sie den Tickets ein benutzerdefiniertes Feld hinzu","FIELD_TYPE_TEXT":"Text","FIELD_TYPE_RICHTEXT":"Rich Text","FIELD_TYPE_MULTI":"Mehrzeilig","FIELD_TYPE_DATE":"Datum","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Projekt Werte - {{projectName}}","REPLACEMENT":"Alle Einträge mit diesem Wert werden geändert zu","ERROR_DELETE_ALL":"Sie dürfen nicht alle Werte löschen!"},"PROJECT_VALUES_POINTS":{"TITLE":"Punkte","SUBTITLE":"Bitte schätzen Sie die Punktzahl für Ihre User-Stories","US_TITLE":"User-Story Punkte","ACTION_ADD":"Neuen Punkt hinzufügen"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioritäten","SUBTITLE":"Legen Sie die Prioritäten Ihrer Tickets fest","ISSUE_TITLE":"Ticket Prioritäten","ACTION_ADD":"Neue Priorität hinzufügen"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Schweregrade","SUBTITLE":"Legen Sie die Gewichtung Ihrer Tickets fest","ISSUE_TITLE":"Ticket Gewichtung","ACTION_ADD":"Neue Gewichtung hinzufügen"},"PROJECT_VALUES_STATUS":{"TITLE":"Status","SUBTITLE":"Spezifizieren Sie die Status, die Ihre User-Stories, Aufgaben und Tickets durchlaufen werden.","EPIC_TITLE":"Epic Status","US_TITLE":"User-Story Status","TASK_TITLE":"Aufgaben-Status","ISSUE_TITLE":"Ticket-Status"},"PROJECT_VALUES_TYPES":{"TITLE":"Typen","SUBTITLE":"Spezifizieren Sie, welche Arten Ihre Tickets haben können","ISSUE_TITLE":"Ticketarten","ACTION_ADD":"Neu hinzufügen {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Schlagwörter","SUBTITLE":"Farben der Tags anzeigen und verändern","EMPTY":"Zur Zeit sind keine Tags vorhanden","EMPTY_SEARCH":"Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden.","ACTION_ADD":"Schlagwort hinzufügen","NEW_TAG":"Neuer Tag","MIXING_HELP_TEXT":"Wähle die Tags aus, die zu zusammenführen willst","MIXING_MERGE":"Tags zusammenführen","SELECTED":"Ausgewählt"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Fällikeitstermine","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"Status der User Story Fälligkeit","ACTION_ADD_STATUS":"Neuen Status hinzufügen","TASK_TITLE":"Status der Aufgabenfälligkeit","ISSUE_TITLE":"Status der Ticket Fälligkeit","DAYS_TO_DUE_DATE":"Tage bis zur Fällikeit","BEFORE_AFTER":"Früher/später","BEFORE":"Früher","AFTER":"Nach"},"ROLES":{"PAGE_TITLE":"Rollen - {{projectName}}","WARNING_NO_ROLE":"Beachten Sie, keine Rolle in Ihrem Projekt wird in der Lage sein, die Punktevergabe für User-Stories einzuschätzen.","HELP_ROLE_ENABLED":"Wenn Sie dies freischalten, werden Mitglieder, denen diese Rolle zugewiesen ist, in der Lage sein, die Punktevergabe für User-Stories vorzunehmen.","DISABLE_COMPUTABLE_ALERT_TITLE":"Sind Sie sicher, dass in dieser Rolle Estimatepoints deaktivieren möchtest?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Wenn Sie die Estimatepoints für die Rolle {{roleName}} deaktivieren, werden alle bisherigen gelöscht","COUNT_MEMBERS":"{{ role.members_count }} Mitglieder mit dieser Rolle","TITLE_DELETE_ROLE":"Rolle löschen","REPLACEMENT_ROLE":"Alle Benutzer mit dieser Rolle werden verschoben nach","WARNING_DELETE_ROLE":"Achtung! Alle Rollenverteilungen werden entfernt.","ERROR_DELETE_ALL":"Sie können nicht alle Werte löschen","EXTERNAL_USER":"Externer Benutzer","NOTE_EXTERNAL_USERS":"Beachte:Mit Externen Benutzern meinen wir anonyme Benutzer, die nicht zur Taiga Plattform gehören, einschließlich Suchmaschinen. Bitte benutzen Sie diese Rolle mit Vorsicht."},"THIRD_PARTIES":{"SECRET_KEY":"Geheimschlüssel","PAYLOAD_URL":"Payload URL","VALID_IPS":"Gültige Quell-IPs (getrennt von ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket Anfragen sind nicht signiert, daher ist der beste Weg die Quelle anhand der IP zu prüfen. Wenn das Feld leer bleibt, wird keine Prüfung der IP vorgenommen."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab rAnfragen sind nicht signiert, daher ist der beste Weg die Quelle anhand der IP zu prüfen. Wenn das Feld leer bleibt, wird keine Prüfung der IP vorgenommen."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Fügen Sie ein neues Webhook hinzu","TYPE_NAME":"Servicename...","TYPE_PAYLOAD_URL":"Geben Sie die Service Payload URL ein","TYPE_SERVICE_SECRET":"Sicherheitsschlüssel...","SAVE":"Webhook sichern","CANCEL":"Webhook beenden","SHOW_HISTORY":"(Chronik anzeigen)","TEST":"Webhook Test","EDIT":"Webhook bearbeiten","DELETE":"Webhook löschen","REQUEST":"Anfrage","RESEND_REQUEST":"Anfrage erneut senden","HEADERS":"Überschriften","PAYLOAD":"Payload","RESPONSE":"Rückmeldung","DATE":"DD. MMM YYYY [um] hh:mm:ss","ACTION_HIDE_HISTORY":"(Chronik verbergen)","ACTION_HIDE_HISTORY_TITLE":"Chronik Details verbergen","ACTION_SHOW_HISTORY":"(Chronik anzeigen)","ACTION_SHOW_HISTORY_TITLE":"Chronik Details anzeigen","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Kunden Attribute - {{projectName}}","ADD":"Benutzerdefiniertes Feld hinzufügen","EDIT":"Benutzerdefiniertes Feld bearbeiten","DELETE":"Benutzerdefiniertes Feld löschen","SAVE_TITLE":"Benutzerdefiniertes Feld speichern","CANCEL_TITLE":"Erstellung abbrechen","SET_FIELD_NAME":"Legen Sie den Namen Ihres benutzerdefinierten Feldes fest","SET_FIELD_DESCRIPTION":"Legen Sie Ihre Beschreibung für das benutzerdefinierte Feld fest","FIELD_TYPE_DEFAULT":"-- Bitte auswählen --","ACTION_UPDATE":"Benutzerdefiniertes Feld aktualisieren","ACTION_CANCEL_EDITION":"Bearbeitung abbrechen"},"MEMBERSHIP":{"COLUMN_MEMBER":"Mitglied","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rolle","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Aktiv","STATUS_PENDING":"Ausstehend","DELETE_MEMBER":"Mitglied löschen","RESEND":"Neu senden","SUCCESS_SEND_INVITATION":"Wir haben die Einladung erneut versandt an '{{email}}'.","SUCCESS_DELETE":"Gelöscht {{message}}.","ERROR_DELETE":"Das Löschen ist fehlgeschlagen {{message}}.","DEFAULT_DELETE_MESSAGE":"die Einladung an {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Standardwert für Epic Status","LABEL_US_STATUS":"Standardwert für Userstory Status","LABEL_POINTS":"Vorgegebener Wert für Punkteauswahl","LABEL_TASK_STATUS":"Vorgegebene Auswahl für den Aufgaben-Status","LABEL_ISSUE_TYPE":"Vorgegebener Wert für Ticketartauswahl","LABEL_ISSUE_STATUS":"Vorgegebene Auswahl für den Ticket-Status","LABEL_PRIORITY":"Vorgegebener Wert für Prioritätsauswahl","LABEL_SEVERITY":"Vorgegebener Wert für Gewichtungsauswahl"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Benennen Sie den neuen Status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Zahl der Tage bis zur Fälligkeit"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Geben Sie dem neuen Element einen Namen"},"US_STATUS":{"ACTION_ADD_STATUS":"Neuen Status hinzufügen","IS_ARCHIVED_COLUMN":"Archiviert","IS_CLOSED_COLUMN":"Geschlossen","WIP_LIMIT_COLUMN":"WIP Limit","PLACEHOLDER_WRITE_NAME":"Benennen Sie den neuen Status"},"MENU":{"PROJECT":"Projekt","ATTRIBUTES":"Attribute","MEMBERS":"Mitglieder","PERMISSIONS":"Berechtigungen","INTEGRATIONS":"Integrationen"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Punkte","PRIORITIES":"Prioritäten","SEVERITIES":"Schweregrade","TYPES":"Typen","CUSTOM_FIELDS":"Benutzerdefinierte Felder","TAGS":"Schlagwörter","DUE_DATES":"Fälligkeiten"},"SUBMENU_ROLES":{"TITLE":"Rollen","ACTION_NEW_ROLE":"+ Neue Rolle","TITLE_ACTION_NEW_ROLE":"Neue Rolle hinzufügen"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Möchten Sie der neue Projektleiter werden?","PRIVATE":"Privat","ACCEPTED_PROJECT_OWNERNSHIP":"Herzlichen Glückwunsch. Sie sind der neue Projektleiter.","REJECTED_PROJECT_OWNERNSHIP":"Ok, wir kontaktieren den aktuellen Projektleiter","ACCEPT":"Akzeptieren","REJECT":"Zurückweisen","PROPOSE_OWNERSHIP":"{{owner}}, der derzeitige Leiter des Projekts {{project}} hat Sie gefragt, ob Sie der neue Projektleiter werden möchten.","ADD_COMMENT":"Möchten Sie einen Kommentar für den Projektleiter hinzufügen?","UNLIMITED_PROJECTS":"Unbegrenzt","OWNER_MESSAGE":{"PRIVATE":"Bitte denken Sie daran, dass Sie bis zu {{maxProjects}} private Projekte besitzen können. Dezeit besitzen Sie {{currentProjects}} private Projekte","PUBLIC":"Bitte denken Sie daran, dass Sie bis zu {{maxProjects}} öffentliche Projekte besitzen können. Dezeit besitzen Sie {{currentProjects}} öffentliche Projekte"},"CANT_BE_OWNED":"Zur Zeit können Sie kein Projektleiter für diesen Projekt-Typ werden werden. Wenn Sie Projektleiter für dieses Projekt werden möchten, kontaktieren Sie bitte den Administrator, damit er Ihre Benutzerkonto-Einstellungen anpassen kann, um Projektleiter werden zu können."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Profil ändern","CLOSED_US":"Geschlossene User-Story","PROJECTS":"Projekte","PROJECTS_EMPTY":"{{username}} besitzt noch keine Projekte","CONTACTS":"Kontakte","CONTACTS_EMPTY":"{{username}} hat noch keine Kontakte","CURRENT_USER_CONTACTS_EMPTY":"Sie haben noch keine Kontakte","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Die Leute, mit denen Sie auf Taiga zusammenarbeiten, werden automatisch zu Ihren Kontakten","TABS":{"ACTIVITY_TAB":"Aktivität","ACTIVITY_TAB_TITLE":"Alle Aktivitäten dieses Benutzers anzeigen","PROJECTS_TAB":"Projekte","PROJECTS_TAB_TITLE":"Liste alle Projekte auf, bei denen der Benutzer Mitglied ist","LIKES_TAB":"Likes","LIKES_TAB_TITLE":"Zeige alle Likes von diesem Benutzer","VOTES_TAB":"Stimmen","VOTES_TAB_TITLE":"Zeige alle Votes von diesem Nutzer","WATCHED_TAB":"Beobachtet","WATCHED_TAB_TITLE":"Zeige alle von diesem Nutzer beobachteten Items an","CONTACTS_TAB":"Kontakte","CONTACTS_TAB_TITLE":"Alle Kontakte dieses Buntzers anzeigen"}},"PROFILE_SIDEBAR":{"TITLE":"Ihr Profil","DESCRIPTION":"Da andere Mitglieder sehen, dass sie ebenfalls an einem Projekt arbeiten wäre es schön, wenn Sie ein paar Informationen zu Ihrer Person angeben.","ADD_INFO":"Biographie bearbeiten"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Geben sie etwas ein...","FILTER_TYPE_ALL":"Alle","FILTER_TYPE_ALL_TITLE":"Alle anzeigen","FILTER_TYPE_PROJECTS":"Projekte","FILTER_TYPE_PROJECTS_TITLE":"Nur Projekte anzeigen","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Nur Epics anzeigen","FILTER_TYPE_USER_STORIES":"Stories","FILTER_TYPE_USER_STORIES_TITLE":"Nur User-Stories anzeigen","FILTER_TYPE_TASKS":"Aufgaben","FILTER_TYPE_TASKS_TITLE":"Zeige nur Aufgaben","FILTER_TYPE_ISSUES":"Tickets","FILTER_TYPE_ISSUES_TITLE":"Nur Fehler anzeigen","EMPTY_TITLE":"Es sieht so aus, als wäre hier nichts."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Sortieren Sie Ihre Projekte nach Wichtigkeit.
    Die ersten 10 Projekte erscheinen prominent in der Projektliste der Navigationsleiste.","PRIVATE":"Privates Projekt","LOOKING_FOR_PEOPLE":"Dieses Projekt sucht nach Mitarbeitern","FANS_COUNTER_TITLE":"{total, plural, one{ein Fan} other{# Fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{ein Beobachter} other{# Beobachter}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Blockiertes Projekt","THIS_PROJECT_IS_BLOCKED":"Dieses Projekt ist vorrübergehend blockiert","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Um Ihr Projekt zu entsperren kontaktiere Sie bitte einen Administrator."},"SECTION":{"SEARCH":"Suche","TIMELINE":"Aktivität","EPICS":"Epics","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Tickets","WIKI":"Wiki","TEAM":"Team","MEETUP":"Zusammentreffen","ADMIN":"Administrator"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Projekt anlegen","MANAGE_PROJECTS":"Projekte verwalten","TITLE_CREATE_PROJECT":"Projekt anlegen","HELP_TITLE":"Taiga Support Seite","HELP":"Hilfe","HOMEPAGE":"Homepage","FEEDBACK_TITLE":"Feedback senden","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Benachrichtigungseinstellungen bearbeiten","NOTIFICATIONS":"Benachrichtigungen","VIEW_PROFILE_TITLE":"Profil ansehen","VIEW_PROFILE":"Profil ansehen","EDIT_PROFILE_TITLE":"Bearbeiten Sie Ihr Profil","EDIT_PROFILE":"Profil bearbeiten","CHANGE_PASSWORD_TITLE":"Passwort ändern","CHANGE_PASSWORD":"Passwort ändern","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Entdecke aktuelle Projekte","DISCOVER":"Entdecken"},"LIKE_BUTTON":{"LIKE":"Gefällt mir","LIKED":"Gefällt mir","UNLIKE":"Gefällt mir nicht mehr","BUTTON_TITLE":"Like oder Unlike dieses Projekt","COUNTER_TITLE":"{total, plural, one{ein Fan} other{# Fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Beobachte dieses Projekt und setze Benachrichtigungsregeln","WATCH":"Beobachten","WATCHING":"Beobachtet","COUNTER_TITLE":"{total, plural, one{ein Beobachter} other{# Beobachter}}","OPTIONS":{"NOTIFY_ALL":"Alle Benachrichtigungen empfangen","NOTIFY_ALL_TITLE":"Alle Benachrichtigungen für dieses Projekt anzeigen","NOTIFY_INVOLVED":"Nur Beteiligte","NOTIFY_INVOLVED_TITLE":"Benachrichtigungen nur erhalten, wenn Sie involviert sind","UNWATCH":"Nicht beobachten","UNWATCH_TITLE":"Nicht beobachten"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Kontaktiere das Projekt-Team","CONTACT_BUTTON":"Kontaktiere das Projekt"},"CREATE":{"TITLE":"Projekt erstellen","CHOOSE_TEMPLATE":"Welches Template passt am besten zu Ihrem Projekt?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Priorisieren und lösen Sie Ihre Aufgaben in kurzen Zeitintervallen","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Halte einen konstanten Workflow bei unabhängigen Aufgaben","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Projekt duplizieren","DUPLICATE_DESC":"Starten Sie neu und behalten Sie Ihre Konfiguration","IMPORT":"Projekt importieren","IMPORT_DESC":"Importieren Sie Ihr Projekt von verschiedenen Plattformen zu Taiga","INVITE":"Lade jemanden in dieses Projekt ein","SOLO_PROJECT":"Sie sind alleine in diesem Projekt","INVITE_LATER":"(Später können Sie weitere Mitglieder einladen)","BACK":"Zurück","MAX_PRIVATE_PROJECTS":"Leider haben Sie die maximale Anzahl privater Projekte erreicht.\nBitte wenden Sie sich an den Administrator um diese Limite zu erhöhen.","MAX_PUBLIC_PROJECTS":"Leider haben Sie die maximale Anzahl öffentlicher Projekte erreicht.\nBitte wenden Sie sich an den Administrator um diese Limite zu erhöhen.","PUBLIC_PROJECT":"Öffentliches Projekt","PRIVATE_PROJECT":"Privates Projekt"},"COMMON":{"DETAILS":"Projekt Details","PROJECT_TITLE":"Projektname","PROJECT_DESCRIPTION":"Projekt-Beschreibung"},"DUPLICATE":{"TITLE":"Projekt duplizieren","DESCRIPTION":"Starten Sie neu, aber behalte Sie die Konfiguration","SELECT_PLACEHOLDER":"Wähle ein bestehendes Projekt zum Duplizieren aus"},"IMPORT":{"TITLE":"Projekt importieren","DESCRIPTION":"Importieren Sie Ihr Projekt von verschiedenen Plattformen zu Taiga","ASYNC_IN_PROGRESS_TITLE":"Unsere Helferlein importieren Ihr Projekt","ASYNC_IN_PROGRESS_MESSAGE":"Dieser Vorgang könnte ein paar Minuten benötigen
    Nach Fertigstellung benachrichtigen wir Sie per E-Mail.","UPLOAD_IN_PROGRESS_MESSAGE":"Hochgeladen {{uploadedSize}} von {{totalSize}}","ERROR":"Unsere Helferlein haben Probleme beim Importieren Ihrer Daten. Bitte versuchen Sie es erneut.","ERROR_TOO_MANY_REQUEST":"Entschuldigung, unsere Helferlein sind zur Zeit sehr beschäftigt. Bitte versuchen Sie es in ein paar Minuten erneut.","ERROR_MESSAGE":"Unsere Helferlein haben Probleme beim Importieren Ihrer Datei: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) ist zu schwierig für unsere Helferlein, versuchen Sie es bitte mit einer kleineren Datei als ({{maxFileSize}})","SYNC_SUCCESS":"Ihr Projekt wurde erfolgreich importiert","IMPORT":"Importieren","WHO_IS":"Ihre Aufgaben werden zugewiesen an ...","WRITE_EMAIL":"Oder geben Sie die E-Mail Adresse eines Benutzers an","SEARCH_CONTACT":"Oder suchen Sie in Ihren Kontakten","WRITE_EMAIL_LABEL":"Schreibe eine Email, das dieser User Taiga benützt","ACCEEDE":"Erledigt","PROJECT_MEMBERS":"Projektmitglieder","PROCESS_DESCRIPTION":"Sagen Sie uns, wem aus Taiga die {{platform}} Aufgaben zugewiesen werden sollen","MATCH":"Ist {{user_external}} die selbe Person als {{user_internal}}?","CHOOSE":"Wähle User","LINKS":"Links mit {{platform}}","LINKS_DESCRIPTION":"Möchten Sie den Link von jedem Eintrag mit der originalen {{platform}} Informationen behalten?","WARNING_MAIL_USER":"Wenn der User keinen Taiga Account besitzt, können ihm keine Aufgaben zugewiesen werden","ASSIGN":"Zuweisen","PROJECT_SELECTOR":{"NO_RESULTS":"Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden.","ACTION_SEARCH":"suche","ACTION_BACK":"Zurück"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"Das Projekt, dass Sie importieren möchten, hat {{members}} Mitglieder. Leider erlaubt ihr derzeitiger Plan nicht mehr als {{max_memberships}} Mitglieder pro öffentlichen Projekt. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie bitte den Administrator.","ACCOUNT_ALLOW_MEMBERS":"Dieser Account erlaubt nur {{members}} Mitglieder","PRIVATE_PROJECTS_SPACE":{"TITLE":"Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen.","DESC":"Das Projekt, das Sie versuchen zu importieren, ist privat. Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte hinzuzufügen."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte anzulegen.","DESC":"Das Projekt, das Sie versuchen zu importieren, ist öffentlich. Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte hinzuzufügen."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Ihr derzeitiger Plan erlaubt maximal {{max_memberships}} Mitglieder pro privatem Projekt"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Ihr derzeitiger Plan erlaubt maximal {{max_memberships}} Mitglieder pro öffentlichem Projekt"},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Leider erlaubt Ihr derzeitiger Plan keine weiteren privaten Projekte anzulegen oder eine Erhöhung von mehr als {{max_memberships}} Mitglieder pro privatem Projekt","DESC":"Das Projekt, dass Sie importieren möchten, ist privat und hat {{members}} Mitglieder."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Leider erlaubt Ihr derzeitiger Plan keine weiteren öffentlichen Projekte anzulegen oder eine Erhöhung von mehr als {{max_memberships}} Mitglieder pro öffentlichem Projekt","DESC":"Das Projekt, dass Sie importieren möchten, ist öffentlich und hat mehr als {{members}} Mitglieder."}},"IN_PROGRESS":{"TITLE":"Projekt importieren","DESCRIPTION":"Dieser Vorgang kann etwas dauern. Bitte schliessen Sie das Fenster nicht!"},"WARNING":{"TITLE":"Einige Tasks werden noch nicht zugewiesen","DESCRIPTION":"Es gibt immer noch nicht identifizierte Personen. Die Objekte, die diesen Personen zugewiesen sind, werden in Taiga nicht ohne Zuweisung erstellt. Überprüfe alle Kontakte, um Informationsverlust zu vermeiden","CHECK":"Überprüfe Kontakte"},"TAIGA":{"SELECTOR":"Importieren Sie Ihr Taiga Projekt"},"TRELLO":{"SELECTOR":"Importiere Trello Projekt in Taiga","CHOOSE_PROJECT":"Wähle Board welches importiert werden soll","NO_PROJECTS":"Es scheint, als hätten Sie keine Boards in Trello"},"GITHUB":{"SELECTOR":"Importiere Github Projekt Issues","CHOOSE_PROJECT":"Finde das Projekt, welches Sie importieren möchten","NO_PROJECTS":"Es scheint, als hätten Sie keinen Projekte in Github","HOW_DO_YOU_WANT_TO_IMPORT":"Wie wollen Sie Ihre Tickets in Taiga importieren?","KANBAN_PROJECT":"Als Userstories in einem Kanban Projekt","KANBAN_PROJECT_DESCRIPTION":"Danach können Sie Scrum mit Backlog aktivieren.","SCRUM_PROJECT":"Als Userstory in einem Scrum Projekt","SCRUM_PROJECT_DESCRIPTION":"Danach ist der Kanban Modus aktivierbar.","ISSUES_PROJECT":"Als Ticket","ISSUES_PROJECT_DESCRIPTION":"Diese Tickets sind im Kanban oder Scrum Modus nicht verfügbar. Wenn neue Userstories angelegt werden, ist der Kanban oder Scrum Modus verfügbar "},"ASANA":{"SELECTOR":"Importieren Sie Ihr Asana Projekt und entscheiden Sie, wie es verwalten werden soll","CHOOSE_PROJECT":"Wähle das Projekt, welches importiert werden soll","NO_PROJECTS":"Es scheint, als hätten Sie keine Projekte in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Die Aufgaben und Teilaufgaben Ihres Projekts werden als Taiga User Stories und Aufgaben erzeugt","CREATE_AS_KANBAN_DESCRIPTION":"Die Aufgaben und Teilaufgaben von Ihrem Projekt werden als Taiga User Stories und Aufgaben erzeugt"},"JIRA":{"SELECTOR":"Importieren Sie Ihr Jira Projekt und entscheiden Sie, wie es verwaltet werden soll","HOW_TO_CONFIGURE":"(Konfigurationshilfe)","CHOOSE_PROJECT":"Wähle Projekt oder Board welches importiert werden soll","NO_PROJECTS":"Es scheint, dass keine Projekte oder Boards in Jira bestehen","URL":"Ihre Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Tickets","CREATE_AS_SCRUM_DESCRIPTION":"Die Tickets und Untertickets Ihres Projekts werden als Taiga User Stories und Aufgaben erstellt","CREATE_AS_KANBAN_DESCRIPTION":"Die Tickets und Untertickets Ihres Projekts werden als Taiga User Stories und Aufgaben erstellt","CREATE_AS_ISSUES_DESCRIPTION":"Was möchten Sie mit Untertickets aus dem Jira Projekt tun? (In Taiga gibt es keine Untertickets) ","CREATE_NEW_ISSUES":" Konvertiere Sub-Tickets zu neuen Taiga Tickets","NOT_CREATE_NEW_ISSUES":"Importiere keine Sub-Tickets"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Sind Sie sicher, dass Sie Ihr Taiga Benutzerkonto löschen wollen?","CANCEL":"Zurück zu den Einstellungen","ACCEPT":"Benutzerkonto löschen","BLOCK_PROJECT":"Beachten Sie, dass alle Projekte die Sie besitzen, gesperrt werden, nachdem Sie Ihr Konto gelöscht haben. Wenn Sie möchten, dass Ihre Projekte nicht gesperrt werden, ernennen Sie ein anderes Mitglied zum Projektleiter für jedes Projekt, bevor Sie Ihr Konto löschen."},"DELETE_PROJECT":{"TITLE":"Projekt löschen","QUESTION":"Sind Sie sicher, dass Sie das Projekt löschen möchten?","SUBTITLE":"Sämtliche Projektdaten (User-Stories, Aufgaben, Tickets, Sprints und Wiki Seiten) werden verloren gehen! :-(","CONFIRM":"Ja, ich bin mir sicher"},"ASSIGNED_TO":{"SELECT":"Zuweisung auswählen","SEARCH":"Nach Benutzern suchen"},"ADD_MEMBER":{"TITLE":"Neues Mitglied","PLACEHOLDER":"Nach Nutzern suchen oder per E-Mail einladen","ADD_EMAIL":"E-Mail hinzufügen","REMOVE":"Entfernen","INVITE":"Einladen","CHOOSE_ROLE":"Rolle auswählen","PLACEHOLDER_INVITATION_TEXT":"(Optional) Fügen Sie einen persönlichen Text zur Einladung hinzu. Erzählen Sie Ihren neuen Mitgliedern etwas Schönes. ;-)","HELP_TEXT":"Wenn Benutzer schon bei Taiga registriert sind, werden diese automatisch hinzugefügt. Ansonsten erhalten sie eine Einladung."},"FEEDBACK":{"TITLE":"Erzählen Sie uns etwas...","COMMENT":"...einen Fehler, Anregungen, etwas Tolles... oder Ihren schlimmsten Alptraum mit Taiga.","ACTION_SEND":"Feedback senden"},"SEARCH":{"TITLE":"Suche","PLACEHOLDER_SEARCH":"Wonach suchen Sie?"},"ADD_EDIT_SPRINT":{"TITLE":"Neuer Sprint","PLACEHOLDER_SPRINT_NAME":"Sprint Bezeichnung","PLACEHOLDER_SPRINT_START":"Geschätzter Beginn","PLACEHOLDER_SPRINT_END":"Geschätztes Ende","ACTION_DELETE_SPRINT":"Möchten Sie diesen Sprint löschen?","TITLE_ACTION_DELETE_SPRINT":"Sprint löschen","LAST_SPRINT_NAME":"letzter Sprint ist {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Bitte beschreiben Sie diese Aufgabe ausreichend, damit Beteiligte den Vorgang besser verstehen.","ISSUE_PLACEHOLDER_DESCRIPTION":"Bitte beschreiben Sie dieses Ticket ausreichend, damit Beteiligte den Vorgang besser verstehen.","US_PLACEHOLDER_DESCRIPTION":"Bitte beschreiben Sie diese User Story ausreichend, damit Beteiligte den Vorgang besser verstehen.","NEW_TASK":"Neue Aufgabe","NEW_ISSUE":"Neues Ticket","NEW_US":"Neue User Story","EDIT_TASK":"Aufgabe bearbeiten","EDIT_ISSUE":"Ticket bearbeiten","EDIT_US":"User Story bearbeiten","ADD_EXISTING_ISSUE":"Ticket zu {{ targetName }} hinzufügen","CONFIRM_CLOSE":"Sie haben Ihre Änderungen noch nicht gespeichert.\nSind Sie sicher, dass Sie dieses Formular schließen möchten?","EXISTING_ISSUE":"Existierendes Ticket","CHOOSE_EXISTING_ISSUE":"Welches Ticket?","ADD_ISSUE":"Ticket hinzufügen","FILTER_ISSUES":"Tickets Filtern"},"DELETE_DUE_DATE":{"TITLE":"Fälligkeitsdatum löschen","SUBTITLE":"Sind Sie sicher, dass Sie dieses Fälligkeitsdatum löschen wollen?"},"DELETE_SPRINT":{"TITLE":"Sprint löschen"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Verbindung zum Epic entfernen","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optional) Fügen Sie einen persönlichen Text zur Einladung hinzu. Erzählen Sie Ihren neuen Mitgliedern etwas Schönes. ;-)","PLACEHOLDER_TYPE_EMAIL":"Geben Sie eine E-Mail ein","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Dieses Projekt erreicht bald die maximale Anzahl von {{maxMembers}} Mitgliedern. Wenn Sie diese Grenze erhöhen möchten, kontaktieren Sie bitte den Administrator.","LIMIT_USERS_WARNING_MESSAGE":"Dieses Projekt erreicht bald die maximale Anzahl von {{maxMembers}} Mitgliedern."},"LEAVE_PROJECT_WARNING":{"TITLE":"Das Projekt kann nicht ohne einen Projektleiter existieren.","CURRENT_USER_OWNER":{"DESC":"Sie sind der aktuelle Besitzer dieses Projektes. Bitte übertragen Sie den Besitzerstatus an jemand anderes bevor Sie das Projekt verlassen.","BUTTON":"Projektleiter wechseln"},"OTHER_USER_OWNER":{"DESC":"Leider können Sie das Mitglied nicht löschen, da es der derzeitige Projektleiter ist. Bitte ordnen Sie dem Projekt zuerst einen neuen Projektleiter zu.","BUTTON":"Antrag Projektleiter-Wechsel "}},"CHANGE_OWNER":{"TITLE":"Wen möchten Sie zum neuen Projektleiter ernennen?","ADD_COMMENT":"Kommentar hinzufügen","BUTTON":"Fragen Sie dieses Projektmitglied, um Projektleiter zu werden"},"CONTACT_PROJECT":{"TITLE":"Sende eine E-Mail an","WARNING":"Die E-Mail wird von den Projekt-Administratoren empfangen","PLACEHOLDER":"Schreiben Sie Ihre Nachricht","SEND":"Senden"},"SET_DUE_DATE":{"TITLE":"Fälligkeitsdatum setzen","PLACEHOLDER_DUE_DATE":"Fälligkeitsdatum wählen","REASON_FOR_DUE_DATE":"Grund des Fälligkeitsdatums","PLACEHOLDER_REASON_FOR_DUE_DATE":"Wieso benötigt diese User Story ein Fälligkeitsdatum?","SUGGESTIONS":{"IN_ONE_WEEK":"In einer Woche","IN_TWO_WEEKS":"In zwei Wochen","IN_ONE_MONTH":"In einem Monat","IN_THREE_MONTHS":"In drei Monaten"},"TITLE_ACTION_DELETE_DUE_DATE":"Fälligkeitsdatum löschen"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Fälligkeitsdatum löschen","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Mit Epic verbinden","EXISTING_EPIC":"Existierendes Epic","NEW_EPIC":"Neues Epic","CHOOSE_PROJECT_FOR_CREATION":"Welches Projekt?","CHOOSE_PROJECT_FROM":"Welches Projekt?","SUBJECT":"Thema","CHOOSE_EPIC":"Beschreibe das Epic","FILTER_EPICS":"Epics Filtern","NO_EPICS_FOUND":"Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Beschreibung: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"Die Verknüpfung konnte nicht gelöscht werden: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Erstelle eine Verbindung mit","NEW_USERSTORY":"Neue User-Story","EXISTING_USERSTORY":"Bestehende User-Story","CHOOSE_PROJECT_FOR_CREATION":"Welches Projekt?","SUBJECT":"Thema","SUBJECT_BULK_MODE":"Thema (Mehrfacheingaben möglich)","CHOOSE_PROJECT_FROM":"Welches Projekt?","CHOOSE_USERSTORY":"Beschreibung der User Story","NO_USERSTORIES":"Dieses Projekt hat zurzeit keine User Stories. Bitte wähle ein anderes Projekt.","NO_USERSTORIES_FOUND":"Es sieht so aus, als konnte zu Ihren Suchkriterien nichts passendes gefunden werden.","FILTER_USERSTORIES":"User-Stories filter","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocke Epic","ACTION_DELETE":"Epic löschen"},"US":{"PAGE_TITLE":"{{userStorySubject}} - User-Story {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Abgeschlossen {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} von {{userStoryTotalTasks}} Aufgaben geschlossen). Punkte: {{userStoryPoints}}. Beschreibung: {{userStoryDescription}}","SECTION_NAME":"User-Story","LINK_TASKBOARD":"Aufgabenübersicht","TITLE_LINK_TASKBOARD":"Zur Aufgabenübersicht","TOTAL_POINTS":"Gesamtpunkte","ADD":"+ Neue User-Story anlegen","ADD_BULK":"Mehrere neue User-Stories hinzufügen","PROMOTED":"Diese User-Story entstand aus Ticket:","TITLE_LINK_GO_TO_ISSUE":"Zum Ticket wechseln","TITLE_DELETE_ACTION":"User-Story löschen","LIGHTBOX_TITLE_BLOKING_US":"Blockiert uns","NOT_ESTIMATED":"Unbewertet","OWNER_US":"Userstory gehört","RELATE_TO_EPIC":"Mit Epic verbinden","REMOVE_RELATIONSHIP_WITH_EPIC":"Verbindung mit Epic entfernen","TRIBE":{"PUBLISH":"Als Gig in Taiga Tribe veröffentlichen","PUBLISH_INFO":"Weitere Infos","PUBLISH_TITLE":"Mehr Infos zum Veröffentlichen in Taiga Tribe","PUBLISHED_AS_GIG":"Story veröffentlicht als Gig in Taiga Tribe","EDIT_LINK":"Link bearbeiten","CLOSE":"Schließen","SYNCHRONIZE_LINK":"mit Taiga Tribe synchronisieren","PUBLISH_MORE_INFO_TITLE":"Brauchen Sie jemanden für diese Aufgabe?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Kommentar von {{user}} gelöscht","COMMENTS_COUNT":"{{comments}} Kommentare","OLDER_FIRST":"Ältere zuerst","RECENT_FIRST":"Letzte zuerst","COMMENT":"Kommentieren","EDITED_COMMENT":"Bearbeitet:","SHOW_HISTORY":"Verlauf anzeigen","TYPE_NEW_COMMENT":"Geben Sie hier einen neuen Kommentar ein","SHOW_DELETED":"Gelöschten Kommentar anzeigen","HIDE_DELETED":"Gelöschten Kommentar ausblenden","DELETE":"Kommentar löschen","RESTORE":"Kommentar wiederherstellen","HISTORY":{"TITLE":"Aktivität"}},"ACTIVITY":{"TITLE":"Aktivität","ACTIVITIES_COUNT":"{{activities}} Aktivitäten","TAGS_ADDED":"Tags hinzugefügt:","TAGS_REMOVED":"Tags entfernt:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"neuer Anhang:","DELETED_ATTACHMENT":"gelöschter Anhang:","UPDATED_ATTACHMENT":"Anhang aktualisiert ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"benutzerdefiniertes Attribut erstellt","UPDATED_CUSTOM_ATTRIBUTE":"benutzerdefiniertes Attribut aktualisiert","BECAME_DEPRECATED":"wurde verworfen","BECAME_UNDEPRECATED":"ist wieder aktuell","TEAM_REQUIREMENT":"Team Anforderung","CLIENT_REQUIREMENT":"Kundenanforderung","BLOCKED":"Blockiert","VALUES":{"NOT_SET":"nicht gesetzt","UNASSIGNED":"nicht zugeordnet"},"FIELDS":{"SUBJECT":"Thema","DESCRIPTION":"Beschreibung","PRIORITY":"Priorität","SEVERITY":"Gewichtung","STATUS":"Status","TYPE":"Typen","ASSIGNED_TO":"zugewiesen an","ASSIGNED_USERS":"Zugewiesener Benutzer","DUE_DATE":"Fälligkeitsdatum","MILESTONE":"Sprint","COLOR":"Farbe"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Das Backlog-Panel mit User-Stories und Sprints des Projekts. {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Personalisieren Sie Ihren Backloggraphen","CUSTOMIZE_GRAPH_TEXT":"Um schöne Graphen, die Ihnen bei der Entwicklung Ihres Projekts helfen, zu sehen, müssen Sie Einschätzungs-Punkte und Sprints einstellen","CUSTOMIZE_GRAPH_ADMIN":"Administrator","CUSTOMIZE_GRAPH_TITLE":"Stelle Points und Sprints über das Adminpanel ein","MOVE_US_TO_CURRENT_SPRINT":"Zum aktuellen Sprint wechseln","MOVE_US_TO_LATEST_SPRINT":"Zum aktuellen Sprint wechseln.","EMPTY":"Das Backlog ist leer!","CREATE_NEW_US":"Eine neue User-Story anlegen","CREATE_NEW_US_EMPTY_HELP":"Sie sollten eine User-Story anlegen","EXCESS_OF_POINTS":"Punkte Überschuss","PENDING_POINTS":"Unerledigte Punkte","CLOSED_POINTS":"geschlossen","COMPACT_SPRINT":"Kompakt Sprint","GO_TO_TASKBOARD":"Gehen Sie zum Taskboard von {{::name}}","EDIT_SPRINT":"Sprint bearbeiten","TOTAL_POINTS":"insgesamt","STATUS_NAME":"Status Bezeichnung","SORTABLE_FILTER_ERROR":"Es ist kein Drag & Drop über dem Backlog möglich, wenn Filter geöffnet sind.","DOOMLINE":"Projekt Umfang [Doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Punkte","OPTIMAL":"Optimale unerledigte Punkte für Sprint \"{{sprintName}}\" sollten sein {{value}}","REAL":"Tatsächliche Anzahl unerledigter Punkte für Sprint \"{{sprintName}}\" ist {{value}}","INCREMENT_TEAM":"Erhöhte Punktezahl von Teamanfragen für Sprint \"{{sprintName}}\" ist {{value}}","INCREMENT_CLIENT":"Erhöhte Punkteanzahl von Kundenanfragen für Sprint \"{{sprintName}}\" ist {{value}}"},"TAGS":{"TOGGLE":"Sichtbarkeit des Schlagwortes umschalten","SHOW":"Schlagwörter anzeigen","HIDE":"Schlagwörter ausblenden"},"FORECASTING":{"TITLE":"Velocity Vorhersage","BACKLOG":"Backlog anzeigen","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"User-Stories","TITLE_COLUMN_POINTS":"Ansicht mittels Rolle auswählen"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"gesamte
    Punkte","COMPLETED_POINTS":"vollständige
    Punkte","OPEN_TASKS":"offene
    Aufgaben","CLOSED_TASKS":"geschlossene
    Aufgaben","IOCAINE_DOSES":"Iocaine
    Dosen","SHOW_STATISTICS_TITLE":"Statistik anzeigen","TOGGLE_BAKLOG_GRAPH":"Zeige/Verstecke Burndowngraph","POINTS_PER_ROLE":"Points pro Rolle"},"SUMMARY":{"PROJECT_POINTS":"Projekt
    Punkte","DEFINED_POINTS":"definierte
    Punkte","CLOSED_POINTS":"geschlossene
    Punkte","POINTS_PER_SPRINT":"Punkte /
    Sprint"},"FILTERS":{"TOGGLE":"Filter sichtbar schalten","HIDE":"Filter verbergen","SHOW":"Filter anzeigen"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD. MMM YYYY","LINK_TASKBOARD":"Sprint Taskboard","TITLE_LINK_TASKBOARD":"Gehe zu Taskboard von \"{{name}}\"","EMPTY":"Derzeit sind keine Sprints vorhanden","WARNING_EMPTY_SPRINT_ANONYMOUS":"Dieser Sprint enthält keiner User Stories","WARNING_EMPTY_SPRINT":"Ziehen Sie User Stories aus Ihrem Backlog hierher, um einen neuen Sprint zu starten","TITLE_ACTION_NEW_SPRINT":"Neuen Sprint hinzufügen","TEXT_ACTION_NEW_SPRINT":"Sie sollten vielleicht einen neuen Sprint in Ihrem Projekt erstellen","ACTION_SHOW_CLOSED_SPRINTS":"Geschlossene Sprints anzeigen","ACTION_HIDE_CLOSED_SPRINTS":"Geschlossene Sprints ausblenden"}},"ERROR":{"TEXT1":"Es gibt ein Problem und unsere Helferlein arbeiten schon daran!","NOT_FOUND":"Nicht gefunden","NOT_FOUND_TEXT":"Fehler 404. Die angeforderte Seite existiert nicht mehr. Möglicherweise finden Sie das Gesuchte, wenn Sie zur TAIGA Homepage zurückkehren.","PERMISSION_DENIED":"Berechtigung verweigert","PERMISSION_DENIED_TEXT":"Sie haben nicht die Berechtigung um auf diese Seite zuzugreifen","VERSION_ERROR":"Jemand anderes hat dies schon geändert und unsere Helferlein können Ihre Änderungen deshalb nicht übernehmen. Bitte laden Sie die Seite neu und machen Sie die Änderungen erneut (die aktuelle Eingabe geht dabei verloren)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint Taskboard - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (von {{startDate}} zu {{endDate}}) von {{projectName}}. Abgeschlossen {{completedPercentage}}% ({{completedPoints}} von {{totalPoints}} points). {{openTasks}} offene Aufgaben von {{totalTasks}}.","SECTION_NAME":"Aufgabenübersicht","TITLE_ACTION_ADD":"Neue Aufgabe hinzufügen","TITLE_ACTION_ADD_BULK":"Mehrere Aufgaben hinzufügen","TITLE_ACTION_ADD_ISSUE":"Ein neues Ticket hinzufügen","TITLE_ACTION_ADD_ISSUE_BULK":"Stapel von neuen Tickets anlegen","TITLE_ACTION_ASSIGN":"Aufgabe zuweisen","PLACEHOLDER_CARD_TITLE":"Das könnte eine \"Aufgabe\" sein","PLACEHOLDER_CARD_TEXT":"Teile Stories in Tasks auf um sie einzeln zu verfolgen","TABLE":{"COLUMN":"User-Story","TITLE_ACTION_FOLD":"Spalte einklappen","TITLE_ACTION_UNFOLD":"Spalte aufklappen","TITLE_ACTION_FOLD_ROW":"Reihe einklappen","TITLE_ACTION_UNFOLD_ROW":"Reihe aufklappen","FIELD_POINTS":"Punkte","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Tickets"},"CHARTS":{"XAXIS_LABEL":"Tage","YAXIS_LABEL":"Punkte","OPTIMAL":"Optimale unerledigte Punkte für Tag {{formattedDate}} sollten sein {{roundedValue}}","REAL":"Tatsächliche Anzahl unerledigter Punkte für Tag {{formattedDate}} ist {{roundedValue}}","DATE":"DD. MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Aufgabe {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Beschreibung: {{taskDescription}}","SECTION_NAME":"Aufgabe","LINK_TASKBOARD":"Aufgabenübersicht","TITLE_LINK_TASKBOARD":"Zur Aufgabenübersicht","PLACEHOLDER_SUBJECT":"Betreff...","TITLE_SELECT_STATUS":"Status Bezeichnung","OWNER_US":"Diese Aufgabe gehört zu","TITLE_LINK_GO_OWNER":"Zur User-Story wechseln","TITLE_DELETE_ACTION":"Aufgabe löschen","LIGHTBOX_TITLE_BLOKING_TASK":"Blockierende Aufgabe","FIELDS":{"IS_IOCAINE":"Ist Iocaine"},"TITLE_ACTION_IOCAINE":"Fühlen Sie sich von einer Aufgabe etwas erdrückt? Stellen Sie sicher, dass andere davon erfahren, indem Sie auf Locaine klicken, wenn Sie eine Aufgabe ändern. Es ist möglich, gegen dieses (fiktive) tödliche Gift immun zu werden, indem man kleine Mengen über einen Zeitraum hinweg einnimmt. Genauso, wie es möglich ist, besser in dem zu werden, was man tut, indem man gelegentlich zusätzliche Herausforderungen annimmt!"},"NOTIFICATION":{"OK":"Alles in Ordnung","WARNING":"Huch, es gibt ein Problem...","WARNING_TEXT":"Unsere Helferlein bedauern, Ihre Änderungen wurden nicht gespeichert!","SAVED":"Die Helferlein haben Ihre Änderungen gespeichert!","CLOSE":"Benachrichtigung schließen","MAIL":"Benachrichtigungen per Mail","DESKTOP":"Desktop Benachrichtigungen durch den Webbrowser","ASK_DELETE":"Möchten Sie wirklich löschen?"},"CANCEL_ACCOUNT":{"TITLE":"Ihr Benutzerkonto löschen","SUBTITLE":"Wir bedauern, dass Sie die Taiga verlassen. Wir hoffen, Sie hatten einen angenehmen Aufenthalt. :)","PLACEHOLDER_INPUT_TOKEN":"Benutzerkonto Token ungültig machen","ACTION_LEAVING":"Ja, ich gehe!","SUCCESS":"Unsere Helferlein haben Ihr Benutzerkonto entfernt."},"CHANGE_EMAIL_FORM":{"TITLE":"Ändern Sie Ihre E-Mail","SUBTITLE":"Noch ein Klick und Ihre E-Mail wird aktualisiert!","PLACEHOLDER_INPUT_TOKEN":"E-Mail-Token ändern","ACTION_CHANGE_EMAIL":"E-Mail ändern","SUCCESS":"Unsere Helferlein haben Ihre E-Mail-Adresse aktualisiert"},"ISSUES":{"PAGE_TITLE":"Tickets - {{projectName}}","PAGE_DESCRIPTION":"Das Ticket-Listen Panel des Projekts {{projectName}}: {{projectDescription}}","SECTION_NAME":"Ticket","ACTION_NEW_ISSUE":"+ NEUES TICKET","ACTION_PROMOTE_TO_US":"Zur User-Story aufwerten","ACTION_ATTACH_SPRINT":"Ticket an Sprint anhängen","ACTION_DETACH_SPRINT":"Ticket vom Sprint lösen","PROMOTED":"Dieses Ticket wurde aufgewertet zu User-Story:","EXTERNAL_REFERENCE":"Dieses Ticket wurde erstellt durch","GO_TO_EXTERNAL_REFERENCE":"Zur Quelle wechseln","ACTION_DELETE":"Ticket löschen","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blockierendes Ticket","LINK_TASKBOARD":"Taskboard","TITLE_LINK_TASKBOARD":"Zu Taskboard wechseln","FILTER_SPRINTS":"Sprints filtern","CHOOSE_SPRINT":"Welcher Sprint?","FIELDS":{"PRIORITY":"Priorität","SEVERITY":"Gewichtung","TYPE":"Arten"},"FILTER_ISSUES":"Tickets Filtern","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Ticket vom Sprint lösen","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Ticket an Sprint anhängen","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Dieses Problem zur User-Story aufwerten","MESSAGE":"Sind Sie sicher, dass Sie aus diesem Ticket eine neue User-Story erstellen möchten?"},"TABLE":{"COLUMNS":{"TYPE":"Arten","SEVERITY":"Gewichtung","PRIORITY":"Priorität","SUBJECT":"Thema","VOTES":"Stimmen","STATUS":"Status","MODIFIED":"Geändert","ASSIGNED_TO":"Zugeordnet"},"TITLE_ACTION_CHANGE_STATUS":"Status wechseln","TITLE_ACTION_ASSIGNED_TO":"Zugeordnet zu","BLOCKED":"Blockiert","EMPTY":{"TITLE":"Es gibt keine Probleme zu berichten :-)","SUBTITLE":"Haben Sie ein Problem gefunden?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Ticket {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Typ: {{issueType}}, Priorität: {{issuePriority}}. Gewichtung: {{issueSeverity}}. Beschreibung: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Das Kanban Panel, mit User-Stories des Projekts {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Seite einklappen","TITLE_ACTION_UNFOLD":"Spalte aufklappen","TITLE_ACTION_ADD_US":"Neue User-Story hinzufügen","TITLE_ACTION_ADD_BULK":"Neue Menge hinzufügen","ACTION_SHOW_ARCHIVED":"Archivierte anzeigen","ACTION_HIDE_ARCHIVED":"Archivierte verbergen","HIDDEN_USER_STORIES":"Die User-Stories in diesem Status werden automatisch verborgen","PLACEHOLDER_CARD_TITLE":"Dies sind Ihre User Stories","PLACEHOLDER_CARD_TEXT":"Stories können Unteraufgaben für weitere Anforderungen haben"},"SEARCH":{"PAGE_TITLE":"Suche - {{projectName}}","PAGE_DESCRIPTION":"Suchen Sie User-Stories, Tickets, Aufgaben oder Wiki Seiten im Projekt {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"User-Stories","FILTER_ISSUES":"Tickets","FILTER_TASKS":"Aufgaben","FILTER_WIKI":"Wiki Seiten","PLACEHOLDER_SEARCH":"Suchen in...","TITLE_ACTION_SEARCH":"suchen","EMPTY_TITLE":"Es sieht so aus, als könnte unter Ihren Suchkriterien nichts gefunden werden.","EMPTY_DESCRIPTION":"Vielleicht versuchen Sie es mit einem der oberen Reiter, oder Sie suchen erneut"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Das Team Panel, um alle Mitglieder des Projekts anzuzeigen {{projectName}}: {{projectDescription}}","SECTION_NAME":"Team","PLACEHOLDER_INPUT_SEARCH":"Unter Anzeigenamen suchen...","COLUMN_MR_WOLF":"Herr Wolf","EXPLANATION_COLUMN_MR_WOLF":"Geschlossene Tickets","COLUMN_IOCAINE":"Locaine Trinker","EXPLANATION_COLUMN_IOCAINE":"Locaine Dosen eingenommen","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki Seiten geändert","COLUMN_BUG_HUNTER":"Bug-Jäger","EXPLANATION_COLUMN_BUG_HUNTER":"Gemeldete Tickets","COLUMN_NIGHT_SHIFT":"Nachtschicht","EXPLANATION_COLUMN_NIGHT_SHIFT":"Aufgaben geschlossen","COLUMN_TOTAL_POWER":"Gesamtleistung","EXPLANATION_COLUMN_TOTAL_POWER":"Punktesumme","SECTION_TITLE_TEAM":"Team >","SECTION_FILTER_ALL":"Alle","CONFIRM_LEAVE_PROJECT":"Sind Sie sicher, dass Sie das Projekt verlassen möchten?","ACTION_LEAVE_PROJECT":"Das Projekt verlassen"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. Größe: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Benutzereinstellungen","USER_PROFILE":"Benutzerprofil","CHANGE_PASSWORD":"Passwort ändern","EMAIL_NOTIFICATIONS":"E-Mail Benachrichtigungen","DESKTOP_NOTIFICATIONS":"Desktop Benachrichtigungen","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Benachrichtigungen","SECTION_NAME":"E-Mail-Benachrichtigungen","COLUMN_PROJECT":"Projekt","COLUMN_RECEIVE_ALL":"Alle erhalten","COLUMN_ONLY_INVOLVED":"Bei Beteiligung","COLUMN_NO_NOTIFICATIONS":"Keine Benachrichtigungen","OPTION_ALL":"Alle","OPTION_INVOLVED":"Beteiligt","OPTION_NONE":"Keine"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projekt","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projekt"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Standardbild verwenden","ACTION_DELETE_ACCOUNT":"Ihr Taiga Benutzerkonto löschen","ACTION_DOWNLOAD_PROFILE":"Taiga Profil herunterladen","CHANGE_EMAIL_SUCCESS":"Sehen Sie in Ihren Posteingang!
    Wir haben eine E-Mail an Ihr Konto gesendet
    mit der Anleitung, wie Sie Ihre neue Adresse anlegen","CHANGE_PHOTO":"Foto ändern","FIELD":{"USERNAME":"Benutzername","EMAIL":"E-Mail","FULL_NAME":"Anzeigename","PLACEHOLDER_FULL_NAME":"Geben Sie Ihren Anzeigenamen an (z.B. Vorname Nachname)","BIO":"Bio (max. 210 Zeichen)","PLACEHOLDER_BIO":"Erzählen Sie etwas über sich","LANGUAGE":"Sprache","LANGUAGE_DEFAULT":"-- benutzen Sie eine vorgegebene Sprache --","THEME":"Theme","THEME_DEFAULT":"-- Standard-Theme benutzen --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Letzte Bearbeitung am {{lastModifiedDate}} ({{totalEditions}} Gesamtzahl der Bearbeitungen) Inhalt: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Diese Wiki Seite entfernen","DELETE_LIGHTBOX_TITLE":"Wiki Seite löschen","DELETE_LINK_TITLE":"Entferne Wiki Link","NAVIGATION":{"HOME":"Hauptseite","SECTION_NAME":"LESEZEICHEN","ACTION_ADD_LINK":"Lesezeichen hinzufügen","ALL_PAGES":"Alle Wiki-Seiten"},"SUMMARY":{"TIMES_EDITED":"mal
    bearbeitet","LAST_EDIT":"letzte
    Bearbeitung","LAST_MODIFICATION":"letzte Änderung"},"SECTION_PAGES_LIST":"Alle Seiten","PAGES_LIST_COLUMNS":{"TITLE":"Titel","EDITIONS":"Ausgaben","CREATED":"Erstellt","MODIFIED":"Geändert","CREATOR":"Ersteller","LAST_MODIFIER":"Letzter Bearbeiter"}},"HINTS":{"SECTION_NAME":"Hinweis","LINK":"Mehr dazu auf unserer Support Seite","LINK_TITLE":"Besuchen Sie unsere Support Seite","HINT1_TITLE":"Wussten Sie, dass Sie Projekte importieren und exportieren?","HINT1_TEXT":"Dies erlaubt Ihnen, alle Ihre Daten zu extrahieren und sie von einer Taiga zur nächsten zu transportieren","HINT2_TITLE":"Wussten Sie, dass Sie benutzerdefinierte Felder erstellen können?","HINT2_TEXT":"Teams können nun benutzerdefinierte Felder anlegen, um Werte einzugeben, die für Ihren Workflow wichtig sind.","HINT3_TITLE":"Sortiere Sie Ihre Projekte, um relevante zuerst anzuzeigen.","HINT3_TEXT":"Die 10 Projekt sind in der Zugriffsleiste am oberen Bildschirmrand aufgelistet.","HINT4_TITLE":"Did you forget what were you working on?","HINT4_TEXT":"Machen Sie sich keine Sorgen, im Dashboard finden Sie Aufgaben, Tickets und User-Stories in der Reihenfolge in der Sie diese bearbeitet haben."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} fügte {{obj_name}} einen neuen Anhang zu","US_CREATED":"{{username}} erstellte die neue User-Story {{obj_name}} in {{project_name}}","ISSUE_CREATED":"{{username}} erstellte das neue Ticket {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} erstellte die neue Aufgabe {{obj_name}} in {{project_name}}","TASK_CREATED_WITH_US":"{{username}} erstellte die neue Aufgabe {{obj_name}} in {{project_name}}, die zur User-Story {{us_name}} gehört","WIKI_CREATED":"{{username}} erstellte die neue Wiki Seite {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} erstellte den neuen Sprint {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} hat einen neuen Epic {{obj_name}} in {{project_name}} erstellt","EPIC_RELATED_USERSTORY_CREATED":"{{username}} hat die Userstory {{related_us_name}} mit der Epic {{epic_name}} im Projekt {{project_name}} verbunden","NEW_PROJECT":"{{username}} erstellte das Projekt {{project_name}}","MILESTONE_UPDATED":"{{username}} aktualisierte den Sprint {{obj_name}}","US_UPDATED":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der User-Story {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der User-Story {{obj_name}} zu {{new_value}}","US_UPDATED_POINTS":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Story {{obj_name}} zu {{new_value}}","ISSUE_UPDATED":"{{username}} aktualisierte das Attribut \"{{field_name}}\" des Tickets {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} aktualisierte das Attribut \"{{field_name}}\" des Tickets {{obj_name}} zu {{new_value}}","TASK_UPDATED":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Aufgabe {{obj_name}} zu {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Aufgabe {{obj_name}} zu {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Aufgabe {{obj_name}} von User-Story {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} aktualisierte das Attribut \"{{field_name}}\" der Aufgabe {{obj_name}} die zu der User-Story gehört {{us_name}} zu {{new_value}}","WIKI_UPDATED":"{{username}} aktualisierte die WIKI Seite {{obj_name}}","EPIC_UPDATED":"Attribut \"{{field_name}}\" des Epics {{obj_name}} wurde von {{username}} aktualisiert","EPIC_UPDATED_WITH_NEW_VALUE":"Attribut \"{{field_name}}\" des Epics {{obj_name}} wurde von {{username}} zu aktualisiert","EPIC_UPDATED_WITH_NEW_COLOR":"Feld \"{{field_name}}\" des Epics {{obj_name}} wurde von {{username}} zu aktualisiert","NEW_COMMENT_US":"{{username}} schrieb einen Kommentar in der User-Story {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} schrieb einen Kommentar im Ticket {{obj_name}}","NEW_COMMENT_TASK":"{{username}} schrieb einen Kommentar in der Aufgabe {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} hat das Epic {{obj_name}} kommentiert","NEW_MEMBER":"{{project_name}} hat ein neues Mitglied","US_ADDED_MILESTONE":"{{username}} fügte dem Sprint {{sprint_name}} die User-Story {{obj_name}} hinzu","US_MOVED":"{{username}} wurde in die Story {{obj_name}} verschoben","US_REMOVED_FROM_MILESTONE":"{{username}} fügte dem Backlog die User-Story {{obj_name}} hinzu","BLOCKED":"{{username}} vermerkte die Blockierung von {{obj_name}}","UNBLOCKED":"{{username}} hob die Blockierung von {{obj_name}} auf","NEW_USER":"{{username}} ist Taiga beigetreten","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Ticket","TASK":"Aufgabe"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"Beim Erstellen eines neuen Accounts, stimmen Sie unserenNutzungsbedingungenundDatenschutzbestimmungenzu.","GDPR_ANNOUNCEMENT_TITLE":"Datenschutz-Grundverordnung (DSGVO)","GDPR_ANNOUNCEMENT_DESCRIPTION":"Das haben Sie kommen sehen, oder? Aktualisierungen zu unseren Nutzungsbedingungen","GDPR_ANNOUNCEMENT_INFOLINK":"Bitte lies unsere Ankündigung "},"EXTERNAL_APP":{"PAGE_TITLE":"Eine externe Anwendung benötigt eine Genehmigung","PAGE_DESCRIPTION":"Eine externe Anwendung benötigt eine Genehmigung","AUTHORIZATION_REQUEST":"{{application}} erlauben ihren Taiga Account zu benutzen?","LOGIN_WITH_ANOTHER_USER":"Mit einem anderen Benutzer einloggen.","AUTHORIZE_APP":"Anwendung autorisieren","CANCEL":"Abbrechen"},"JOYRIDE":{"NAV":{"NEXT":"Weiter","BACK":"Zurück","SKIP":"Überspringen","DONE":"Erledigt"},"DASHBOARD":{"STEP1":{"TITLE":"Ihr Projekt","TEXT":"Willkommen! Hier werden Sie Ihre Projekte sehen."},"STEP2":{"TITLE":"In Arbeit","TEXT":"Hier werden Sie die User Stories, Aufgaben und Tickets sehen, an denen Sie arbeiten."},"STEP3":{"TITLE":"Beobachtet","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"Sie arbeiten bereits mit Taiga"},"STEP4":{"TITLE":"Los geht’s","TEXT1":"Sie können anfangen, indem Sie Ihr erstes Taiga-Projekt starten","TEXT2":"Viel Glück!"}},"BACKLOG":{"STEP1":{"TITLE":"Projektzusammenfassung","TEXT1":"Hier werden Sie den Status Ihres Projektes sehen.","TEXT2":"Sie können Ihr Projekt im Administrations Panel verwalten."},"STEP2":{"TITLE":"Produkt Backlog","TEXT":"Das Backlog zeigt Ihnen alle Anforderungen (User Stories) für das Projekt an. Hier können ggf. auch Ihre Sprints geplant werden."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints sind kurze Zeiträume (üblicherweise 2 Wochen) in welchem eine bestimmte Arbeit erledigt und geliefert wird."},"STEP4":{"TITLE":"User-Stories","TEXT":"Dies sind die Anforderungen. Sie können diese dem Backlog hinzufügen und sie ggf. zu einem Sprint hinzufügen."}},"KANBAN":{"STEP1":{"TITLE":"Personalisieren Sie Ihren Workflow","TEXT":"Stellen Sie die Spalten für Ihren Workflow im Administrations-Panel ein."},"STEP2":{"TITLE":"User-Stories und Tasks","TEXT":"User Stories sind die Anforderungen an Ihr Projekt. Sie können diese zwischen den verschiedenen Spalten hin- und herziehen."},"STEP3":{"TITLE":"User-Stories hinzufügen","TEXT1":"Sie können eine einzelne User Story (Story Icon) oder mehrere (Mehrfach Icon) hinzufügen","TEXT2":"Viel Glück!"}}},"DISCOVER":{"PAGE_TITLE":"Entdecke Projekte - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Entdecke Projekte","DISCOVER_SUBTITLE":"{projects, plural, one{Ein öffentliches Projekt verfügbar} other{# öffentliche Projekte verfügbar}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Most liked","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"Zeige mehr","FEATURED":"Empfohlene Projekte","EMPTY":"Es existieren keine Projekte mit den angegebenen Kriterien
    Versuche es nochmal!","FILTERS":{"ALL":"Alle","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Auf der Suche nach Mitgliedern?","WEEK":"Letzte Woche","MONTH":"Letzter Monat","YEAR":"Letztes Jahr","ALL_TIME":"All time","CLEAR":"Filter zurücksetzen"},"SEARCH":{"PAGE_TITLE":"Suche - Entdecke Projekte - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Geben sie etwas ein...","ACTION_TITLE":"Suche","RESULTS":"Suchergebnisse"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-en.json b/dist/v-1549282893552/locales/taiga/locale-en.json new file mode 100644 index 0000000..d0f6689 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-en.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Yes","NO":"No","OR":"or","I_GET_IT":"OK, I get it","LOADING":"Loading...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Save","CANCEL":"Cancel","ACCEPT":"Accept","DELETE":"Delete","UNLINK":"Unlink","CREATE":"Create","ADD":"Add","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Edit","DRAG":"Drag","TAG_LINE":"Your agile, free, and open source project management tool","TAG_LINE_2":"LOVE YOUR PROJECT","BLOCK":"Block","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"Blocked","UNBLOCK":"Unblock","UNBLOCK_TITLE":"Unblock this item","BLOCKED_NOTE":"Why is this blocked?","BLOCKED_REASON":"Please explain the reason","CREATED_BY":"Created by {{fullDisplayName}}","CLOSE":"close","GO_HOME":"Take me home","PLUGINS":"Plugins","ONE_ITEM_LINE":"One item per line...","NEW_BULK":"New bulk insert","SUBTASKS":"Subtasks","PREVIOUS":"Previous","NEXT":"Next","LOGOUT":"Logout","EXTERNAL_USER":"an external user","GENERIC_ERROR":"One of our Oompa Loompas says {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Project Owner","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Delete issue","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"This value seems to be invalid.","TYPE_EMAIL":"This value should be a valid email.","TYPE_URL":"This value should be a valid url.","TYPE_URLSTRICT":"This value should be a valid url.","TYPE_NUMBER":"This value should be a valid number.","TYPE_DIGITS":"This value should be digits.","TYPE_DATEISO":"This value should be a valid date (YYYY-MM-DD).","TYPE_ALPHANUM":"This value should be alphanumeric.","TYPE_PHONE":"This value should be a valid phone number.","NOTNULL":"This value should not be null.","NOT_BLANK":"This value should not be blank.","REQUIRED":"This value is required.","REGEXP":"This value seems to be invalid.","MIN":"This value should be greater than or equal to %s.","MAX":"This value should be lower than or equal to %s.","RANGE":"This value should be between %s and %s.","MIN_LENGTH":"This value is too short. It should have %s characters or more.","MAX_LENGTH":"This value is too long. It should have %s characters or less.","RANGE_LENGTH":"This value length is invalid. It should be between %s and %s characters long.","MIN_CHECK":"You must select at least %s choices.","MAX_CHECK":"You must select %s choices or less.","RANGE_CHECK":"You must select between %s and %s choices.","EQUAL_TO":"This value should be the same.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Previous Month","NEXT_MONTH":"Next Month","MONTHS":{"JAN":"January","FEB":"February","MAR":"March","APR":"April","MAY":"May","JUN":"June","JUL":"July","AUG":"August","SEP":"September","OCT":"October","NOV":"November","DEC":"December"},"WEEK_DAYS":{"SUN":"Sunday","MON":"Monday","TUE":"Tuesday","WED":"Wednesday","THU":"Thursday","FRI":"Friday","SAT":"Saturday"},"WEEK_DAYS_SHORT":{"SUN":"Sun","MON":"Mon","TUE":"Tue","WED":"Wed","THU":"Thu","FRI":"Fri","SAT":"Sat"}},"SEE_USER_PROFILE":"See {{username }} profile","USER_STORY":"User story","TASK":"Task","ISSUE":"Issue","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Delete tag","ADD":"Add tag"},"DESCRIPTION":{"EMPTY":"Empty space is so boring... go on be descriptive...","NO_DESCRIPTION":"No description yet"},"FIELDS":{"SUBJECT":"Subject","NAME":"Name","URL":"URL","DESCRIPTION":"Description","VALUE":"Value","SLUG":"Slug","COLOR":"Color","IS_CLOSED":"Is closed?","STATUS":"Status","TYPE":"Type","SEVERITY":"Severity","PRIORITY":"Priority","ASSIGNED_TO":"Assigned to","ASSIGNED_USERS":"Assigned users","POINTS":"Points","IS_BLOCKED":"is blocked","REF":"Ref","VOTES":"Votes","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"All"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Not assigned","ASSIGN":"Assign","DELETE_ASSIGNMENT":"Delete assignment","REMOVE_ASSIGNED":"Remove assigned","TOO_MANY":"...too many users, keep filtering","CONFIRM_UNASSIGNED":"Are you sure you want to leave it unassigned?","TITLE_ACTION_EDIT_ASSIGNMENT":"Edit assignment","SELF":"Assign to me"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Closed","OPEN":"Open"},"WATCHERS":{"WATCHERS":"Watchers","ADD":"Add watchers","TITLE_ADD":"Add a project member to the watchers list","DELETE":"Delete watcher","TITLE_LIGHTBOX_DELETE_WARTCHER":"Delete watcher..."},"WATCH_BUTTON":{"WATCH":"Watch","WATCHING":"Watching","UNWATCH":"Unwatch","WATCHERS":"Watchers","BUTTON_TITLE":"Watch/Unwatch this item","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Custom Fields","SAVE":"Save Custom Field","EDIT":"Edit Custom Field","DELETE":"Delete custom attribute","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Subject or reference","TITLE_ACTION_FILTER_BUTTON":"search","TITLE":"Filters","TITLE_ACTION_SEARCH":"Search","ACTION_SAVE_CUSTOM_FILTER":"save as custom filter","PLACEHOLDER_FILTER_NAME":"Write the filter name and press enter","APPLIED_FILTERS_NUM":"filters applied","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Type","STATUS":"Status","SEVERITY":"Severity","PRIORITIES":"Priorities","TAGS":"Tags","ASSIGNED_TO":"Assigned to","ASSIGNED_USERS":"Assigned users","ROLE":"Role","CREATED_BY":"Created by","CUSTOM_FILTERS":"Custom filters","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown syntax help"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"View sprints","ADD_SPRINTS":"Add sprints","MODIFY_SPRINTS":"Modify sprints","DELETE_SPRINTS":"Delete sprints"},"USER_STORIES":{"NAME":"User Stories","VIEW_USER_STORIES":"View user stories","ADD_USER_STORIES":"Add user stories","MODIFY_USER_STORIES":"Modify user stories","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Delete user stories"},"TASKS":{"NAME":"Tasks","VIEW_TASKS":"View tasks","ADD_TASKS":"Add tasks","MODIFY_TASKS":"Modify tasks","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Delete tasks"},"ISSUES":{"NAME":"Issues","VIEW_ISSUES":"View issues","ADD_ISSUES":"Add issues","MODIFY_ISSUES":"Modify issues","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Delete issues"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"View wiki pages","ADD_WIKI_PAGES":"Add wiki pages","MODIFY_WIKI_PAGES":"Modify wiki pages","DELETE_WIKI_PAGES":"Delete wiki pages","VIEW_WIKI_LINKS":"View wiki links","ADD_WIKI_LINKS":"Add wiki links","DELETE_WIKI_LINKS":"Delete wiki links"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Logging in to Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"AUTH":{"INVITED_YOU":"has invited you to join the project","NOT_REGISTERED_YET":"Not registered yet?","REGISTER":"Register","CREATE_ACCOUNT":"create your free account here"},"LOGIN_COMMON":{"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 forget your password?","ACTION_ENTER":"Enter","ACTION_SIGN_IN":"Login","PLACEHOLDER_AUTH_PASSWORD":"Password (case sensitive)","ALT_LOGIN":"Or login with"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"According to our Oompa Loompas, your username/email or password are incorrect.","SUCCESS":"Our Oompa Loompas are happy, welcome to Taiga."},"REGISTER":{"PAGE_TITLE":"Register - Taiga","PAGE_DESCRIPTION":"Create your account in Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"REGISTER_FORM":{"TITLE":"Register a new Taiga account (free)","PLACEHOLDER_NAME":"Pick a username (case sensitive)","PLACEHOLDER_FULL_NAME":"Pick your full name","PLACEHOLDER_EMAIL":"Your email","PLACEHOLDER_PASSWORD":"Set a password (case sensitive)","ACTION_SIGN_UP":"Sign up","TITLE_LINK_LOGIN":"Log in","LINK_LOGIN":"Are you already registered? Log in"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Forgot password - Taiga","PAGE_DESCRIPTION":"Enter your username or email to get a new password and you can access to Taiga again."},"FORGOT_PASSWORD_FORM":{"TITLE":"Oops, did you forget your password?","SUBTITLE":"Enter your username or email to get a new one","PLACEHOLDER_FIELD":"Username or email","ACTION_RESET_PASSWORD":"Reset Password","LINK_CANCEL":"Nah, take me back. I think I remember it.","SUCCESS_TITLE":"Check your inbox!","SUCCESS_TEXT":"We sent you an email with the instructions to set a new password","ERROR":"According to our Oompa Loompas, your are not registered yet."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Change you password - Taiga","SECTION_NAME":"Change password","FIELD_CURRENT_PASSWORD":"Current password","PLACEHOLDER_CURRENT_PASSWORD":"Your current password (or empty if you have no password yet)","FIELD_NEW_PASSWORD":"New password","PLACEHOLDER_NEW_PASSWORD":"Type a new password","FIELD_RETYPE_PASSWORD":"Retype new password","PLACEHOLDER_RETYPE_PASSWORD":"Retype the new password","ERROR_PASSWORD_MATCH":"The passwords doesn't match"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Create a new Taiga pass","SUBTITLE":"And hey, you may want to eat some more iron-rich food, it's good for your brain :P","PLACEHOLDER_NEW_PASSWORD":"New password","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Re-type new password","ACTION_RESET_PASSWORD":"Reset Password","ERROR":"Our Oompa Loompas can't find your request to recover your password. Try to ask for it again.","SUCCESS":"Our Oompa Loompas saved your new password.
    Try to sign in with it."},"INVITATION":{"PAGE_TITLE":"Invitation acceptance - Taiga","PAGE_DESCRIPTION":"Accept the invitation to join a project in Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Our Oompa Loompas can't find your invitation.","SUCCESS":"You've successfully joined this project, Welcome to {{project_name}}"},"HOME":{"PAGE_TITLE":"Home - Taiga","PAGE_DESCRIPTION":"The Taiga home page with your main projects and all your assigned and watched user stories, tasks and issues","EMPTY_WORKING_ON":"It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.","EMPTY_WATCHING":"Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)","EMPTY_PROJECT_LIST":"You don't have any projects yet","WORKING_ON_SECTION":"Working on","WATCHING_SECTION":"Watching","DASHBOARD":"Projects Dashboard"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADD EPIC","UNASSIGNED":"Unassigned"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Votes","NAME":"Name","PROJECT":"Project","SPRINT":"Sprint","ASSIGNED_TO":"Assigned","STATUS":"Status","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Blocked","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"My projects - Taiga","PAGE_DESCRIPTION":"A list with all your projects, you can reorder or create a new one.","MY_PROJECTS":"My projects"},"ATTACHMENT":{"SECTION_NAME":"attachments","TITLE":"{{ fileName }} uploaded on {{ date }}","LIST_VIEW_MODE":"List view mode","GALLERY_VIEW_MODE":"Gallery view mode","DESCRIPTION":"Type a short description","DEPRECATED":"(deprecated)","DEPRECATED_FILE":"Deprecated?","ADD":"Add new attachment. {{maxFileSizeMsg}}","DROP":"Drop attachments here!","SHOW_DEPRECATED":"+ show deprecated attachments","HIDE_DEPRECATED":"- hide deprecated attachments","COUNT_DEPRECATED":"({{ counter }} deprecated)","MAX_UPLOAD_SIZE":"Maximum upload size is {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"We have not been able to upload '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Delete attachment...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"the attachment '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"We have not been able to delete: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Prev","NEXT":"Next"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Edit value","TITLE_ACTION_DELETE_VALUE":"Delete value","TITLE_ACTION_DELETE_TAG":"Delete tag"},"HELP":"Do you need help? Check out our support page!","PROJECT_DEFAULT_VALUES":{"TITLE":"Default Values","SUBTITLE":"Set default values for all selector inputs."},"MEMBERSHIPS":{"TITLE":"Manage members","PAGE_TITLE":"Memberships - {{projectName}}","ADD_BUTTON":"+ New member","ADD_BUTTON_TITLE":"Add new member","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Export","SUBTITLE":"Export your project to save a backup or to create a new one based on this.","EXPORT_BUTTON":"Export","EXPORT_BUTTON_TITLE":"Export your project","LOADING_TITLE":"We are generating your dump file","DUMP_READY":"Your dump file is ready!","LOADING_MESSAGE":"Please don't close this page.","ASYNC_MESSAGE":"We will send you an email when ready.","SYNC_MESSAGE":"If the download doesn't start automatically click here.","ERROR":"Our Oompa Loompas have some problems generating your dump. Please try it again.","ERROR_BUSY":"Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes."},"MODULES":{"TITLE":"Modules","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Manage your user stories to maintain an organized view of upcoming and prioritized work.","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organize your project in a lean way with this board.","ISSUES":"Issues","ISSUES_DESCRIPTION":"Track the bugs, questions and enhancements related to your project. Don't miss anything!","WIKI":"Wiki","WIKI_DESCRIPTION":"Add, modify, or delete content in collaboration with others. This is the right place for your project documentation.","MEETUP":"Meet Up","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Select a videoconference system","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Custom","URL_CHAT_ROOM":"URL of your chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Project profile - {{projectName}}","PROJECT_DETAILS":"Project details","PROJECT_NAME":"Project name","TAGS":"Tags","DESCRIPTION":"Description","RECRUITING":"Is this project looking for people?","RECRUITING_MESSAGE":"Who are you looking for?","RECRUITING_PLACEHOLDER":"Define the profiles you are looking for","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Public project","PRIVATE_PROJECT":"Private project","PRIVATE_OR_PUBLIC":"What's the difference between public and private projects?","DELETE":"Delete this project","CHANGE_LOGO":"Change logo","ACTION_USE_DEFAULT_LOGO":"Use default image","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Request","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Change owner","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Reports","SUBTITLE":"Export your project data in CSV format and make your own reports.","DESCRIPTION":"Download a CSV file or copy the generated URL and open it in your favourite text editor or spreadsheet to make your own project data reports. You will be able to visualize and analyze all your data easily.","HELP":"How to use this on my own spreadsheet?","REGENERATE_TITLE":"Change URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"user stories reports","SECTION_TITLE_TASK":"tasks reports","SECTION_TITLE_ISSUE":"issues reports","DOWNLOAD":"Download CSV","URL_FIELD_PLACEHOLDER":"Please regenerate CSV url","TITLE_REGENERATE_URL":"Regenerate CSV url","ACTION_GENERATE_URL":"Generate Url","ACTION_REGENERATE":"Regenerate","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Delete"},"CUSTOM_FIELDS":{"TITLE":"Custom Fields","SUBTITLE":"Specify the custom fields for your user stories, tasks and issues","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"User stories custom fields","US_ADD":"Add a custom field in user stories","TASK_DESCRIPTION":"Tasks custom fields","TASK_ADD":"Add a custom field in tasks","ISSUE_DESCRIPTION":"Issues custom fields","ISSUE_ADD":"Add a custom field in issues","FIELD_TYPE_TEXT":"Text","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Multi-line","FIELD_TYPE_DATE":"Date","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Project values - {{projectName}}","REPLACEMENT":"All items with this value will be changed to","ERROR_DELETE_ALL":"You can't delete all values."},"PROJECT_VALUES_POINTS":{"TITLE":"Points","SUBTITLE":"Specify the points your user stories could be estimated to","US_TITLE":"US points","ACTION_ADD":"Add new point"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Priorities","SUBTITLE":"Specify the priorities your issues will have","ISSUE_TITLE":"Issue priorities","ACTION_ADD":"Add new priority"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Severities","SUBTITLE":"Specify the severities your issues will have","ISSUE_TITLE":"Issue severities","ACTION_ADD":"Add new severity"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"Specify the statuses your user stories, tasks and issues will go through","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Task Statuses","ISSUE_TITLE":"Issue Statuses"},"PROJECT_VALUES_TYPES":{"TITLE":"Types","SUBTITLE":"Specify the types your issues could be","ISSUE_TITLE":"Issues types","ACTION_ADD":"Add new {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Tags","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Add tag","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Add new status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roles - {{projectName}}","WARNING_NO_ROLE":"Be careful, no role in your project will be able to estimate the point value for user stories","HELP_ROLE_ENABLED":"When enabled, members assigned to this role will be able to estimate the point value for user stories","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} members with this role","TITLE_DELETE_ROLE":"Delete Role","REPLACEMENT_ROLE":"All the users with this role will be moved to","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"You can't delete all values","EXTERNAL_USER":"External user","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Secret key","PAYLOAD_URL":"Payload URL","VALID_IPS":"Valid origin IPs (separated by ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Add a New Webhook","TYPE_NAME":"Type the service name","TYPE_PAYLOAD_URL":"Type the service payload url","TYPE_SERVICE_SECRET":"Type the service secret key","SAVE":"Save Webhook","CANCEL":"Cancel Webhook","SHOW_HISTORY":"(Show history)","TEST":"Test Webhook","EDIT":"Edit Webhook","DELETE":"Delete Webhook","REQUEST":"Request","RESEND_REQUEST":"Resend request","HEADERS":"Headers","PAYLOAD":"Payload","RESPONSE":"Response","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Hide history)","ACTION_HIDE_HISTORY_TITLE":"Hide history details","ACTION_SHOW_HISTORY":"(Show history)","ACTION_SHOW_HISTORY_TITLE":"Show history details","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Custom Attributes - {{projectName}}","ADD":"Add custom field","EDIT":"Edit Custom Field","DELETE":"Delete Custom Field","SAVE_TITLE":"Save Custom Field","CANCEL_TITLE":"Cancel creation","SET_FIELD_NAME":"Set your custom field name","SET_FIELD_DESCRIPTION":"Set your custom field description","FIELD_TYPE_DEFAULT":"-- select one --","ACTION_UPDATE":"Update Custom Field","ACTION_CANCEL_EDITION":"Cancel edition"},"MEMBERSHIP":{"COLUMN_MEMBER":"Member","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Role","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Active","STATUS_PENDING":"Pending","DELETE_MEMBER":"Delete member","RESEND":"Resend","SUCCESS_SEND_INVITATION":"We've sent the invitation again to '{{email}}'.","SUCCESS_DELETE":"We've deleted {{message}}.","ERROR_DELETE":"We have not been able to delete {{message}}.","DEFAULT_DELETE_MESSAGE":"the invitation to {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Default value for points selector","LABEL_TASK_STATUS":"Default value for task status selector","LABEL_ISSUE_TYPE":"Default value for issue type selector","LABEL_ISSUE_STATUS":"Default value for issue status selector","LABEL_PRIORITY":"Default value for priority selector","LABEL_SEVERITY":"Default value for severity selector"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Write a name for the new status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Write a name for the new element"},"US_STATUS":{"ACTION_ADD_STATUS":"Add new status","IS_ARCHIVED_COLUMN":"Archived","IS_CLOSED_COLUMN":"Closed","WIP_LIMIT_COLUMN":"WIP Limit","PLACEHOLDER_WRITE_NAME":"Write a name for the new status"},"MENU":{"PROJECT":"Project","ATTRIBUTES":"Attributes","MEMBERS":"Members","PERMISSIONS":"Permissions","INTEGRATIONS":"Integrations"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Points","PRIORITIES":"Priorities","SEVERITIES":"Severities","TYPES":"Types","CUSTOM_FIELDS":"Custom fields","TAGS":"Tags","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roles","ACTION_NEW_ROLE":"+ New role","TITLE_ACTION_NEW_ROLE":"Add new role"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Accept","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Edit profile","CLOSED_US":"Closed US","PROJECTS":"Projects","PROJECTS_EMPTY":"{{username}} doesn't' have projects yet","CONTACTS":"Contacts","CONTACTS_EMPTY":"{{username}} doesn't have contacts yet","CURRENT_USER_CONTACTS_EMPTY":"You don't have contacts yet","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"The people with whom you work at Taiga will be your contacts automatically","TABS":{"ACTIVITY_TAB":"Timeline","ACTIVITY_TAB_TITLE":"Show all the activity of this user","PROJECTS_TAB":"Projects","PROJECTS_TAB_TITLE":"List of all projects in which the user is a member","LIKES_TAB":"Likes","LIKES_TAB_TITLE":"List all likes made by this user","VOTES_TAB":"Votes","VOTES_TAB_TITLE":"List all votes made by this user","WATCHED_TAB":"Watched","WATCHED_TAB_TITLE":"List all item watched by this user","CONTACTS_TAB":"Contacts","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"Your profile","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"Edit bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Type something...","FILTER_TYPE_ALL":"All","FILTER_TYPE_ALL_TITLE":"Show all","FILTER_TYPE_PROJECTS":"Projects","FILTER_TYPE_PROJECTS_TITLE":"Show only projects","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Stories","FILTER_TYPE_USER_STORIES_TITLE":"Show only user stories","FILTER_TYPE_TASKS":"Tasks","FILTER_TYPE_TASKS_TITLE":"Show only tasks","FILTER_TYPE_ISSUES":"Issues","FILTER_TYPE_ISSUES_TITLE":"Show only issues","EMPTY_TITLE":"It looks like there's nothing to show here."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reorder your projects to set in the top the most used ones.
    The top 10 projects will appear in the top navigation bar project list","PRIVATE":"Private project","LOOKING_FOR_PEOPLE":"This project is looking for people","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Blocked project","THIS_PROJECT_IS_BLOCKED":"This project is temporarily blocked","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"In order to unblock your projects, contact the administrator."},"SECTION":{"SEARCH":"Search","TIMELINE":"Timeline","EPICS":"Epics","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Issues","WIKI":"Wiki","TEAM":"Team","MEETUP":"Meet Up","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Create project","MANAGE_PROJECTS":"Manage projects","TITLE_CREATE_PROJECT":"Create project","HELP_TITLE":"Taiga Support Page","HELP":"Help","HOMEPAGE":"Homepage","FEEDBACK_TITLE":"Send feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Edit your notification settings","NOTIFICATIONS":"Notifications","VIEW_PROFILE_TITLE":"View Profile","VIEW_PROFILE":"View Profile","EDIT_PROFILE_TITLE":"Edit your profile","EDIT_PROFILE":"Edit Profile","CHANGE_PASSWORD_TITLE":"Change password","CHANGE_PASSWORD":"Change password","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Discover trending projects","DISCOVER":"Discover"},"LIKE_BUTTON":{"LIKE":"Like","LIKED":"Liked","UNLIKE":"Unlike","BUTTON_TITLE":"Like or unlike this project","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Watch this project and set notification policy","WATCH":"Watch","WATCHING":"Watching","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Receive all notifications","NOTIFY_ALL_TITLE":"Receive all notifications for this project","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Recive notificacions only when you are involved","UNWATCH":"Unwatch","UNWATCH_TITLE":"Unwatch this project"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Create Project","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Import project","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Private Project"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Our Oompa Loompas are importing your project","ASYNC_IN_PROGRESS_MESSAGE":"This process could take a few minutes
    We will send you an email when ready","UPLOAD_IN_PROGRESS_MESSAGE":"Uploaded {{uploadedSize}} of {{totalSize}}","ERROR":"Our Oompa Loompas have some problems importing your dump data. Please try again.","ERROR_TOO_MANY_REQUEST":"Sorry, our Oompa Loompas are very busy right now. Please try again in a few minutes.","ERROR_MESSAGE":"Our Oompa Loompas have some problems importing your dump data: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})","SYNC_SUCCESS":"Your project has been imported successfuly","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Assign","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"search","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Importing Project","DESCRIPTION":"This process can take a while, please keep the window open."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Issues","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Are you sure you want to delete your Taiga account?","CANCEL":"Back to settings","ACCEPT":"Delete account","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account. "},"DELETE_PROJECT":{"TITLE":"Delete project","QUESTION":"Are you sure you want to delete this project?","SUBTITLE":"All project data (user stories, tasks, issues, sprints and wiki pages) will be lost! :-(","CONFIRM":"Yes, I'm really sure"},"ASSIGNED_TO":{"SELECT":"Select assigned to","SEARCH":"Search for users"},"ADD_MEMBER":{"TITLE":"New Member","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Add email","REMOVE":"Remove","INVITE":"Invite","CHOOSE_ROLE":"Choose a role","PLACEHOLDER_INVITATION_TEXT":"(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)","HELP_TEXT":"If users are already registered on Taiga, they will be added automatically. Otherwise they will receive an invitation."},"FEEDBACK":{"TITLE":"Tell us something...","COMMENT":"...a bug, some suggestions, something cool... or even your worst nightmare with Taiga","ACTION_SEND":"Send feedback"},"SEARCH":{"TITLE":"Search","PLACEHOLDER_SEARCH":"What are you looking for?"},"ADD_EDIT_SPRINT":{"TITLE":"New sprint","PLACEHOLDER_SPRINT_NAME":"sprint name","PLACEHOLDER_SPRINT_START":"Estimated Start","PLACEHOLDER_SPRINT_END":"Estimated End","ACTION_DELETE_SPRINT":"Do you want to delete this sprint?","TITLE_ACTION_DELETE_SPRINT":"delete sprint","LAST_SPRINT_NAME":"last sprint is {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Add Issue","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Delete sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)","PLACEHOLDER_TYPE_EMAIL":"Type an Email","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Add comment","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"What's the project?","CHOOSE_PROJECT_FROM":"What's the project?","SUBJECT":"Subject","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"New user story","EXISTING_USERSTORY":"Existing user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Subject","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - User Story {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Completed {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} of {{userStoryTotalTasks}} tasks closed). Points: {{userStoryPoints}}. Description: {{userStoryDescription}}","SECTION_NAME":"User story","LINK_TASKBOARD":"Taskboard","TITLE_LINK_TASKBOARD":"Go to the taskboard","TOTAL_POINTS":"total points","ADD":"+ Add a new User Story","ADD_BULK":"Add some new User Stories in bulk","PROMOTED":"This US has been promoted from Issue:","TITLE_LINK_GO_TO_ISSUE":"Go to issue","TITLE_DELETE_ACTION":"Delete User Story","LIGHTBOX_TITLE_BLOKING_US":"Blocking us","NOT_ESTIMATED":"Not estimated","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Close","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Comment deleted by {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Older first","RECENT_FIRST":"Recent first","COMMENT":"Comment","EDITED_COMMENT":"Edited:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Type a new comment here","SHOW_DELETED":"Show deleted comment","HIDE_DELETED":"Hide deleted comment","DELETE":"Delete comment","RESTORE":"Restore comment","HISTORY":{"TITLE":"Activity"}},"ACTIVITY":{"TITLE":"Activity","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"tags added:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"new attachment:","DELETED_ATTACHMENT":"deleted attachment:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Team Requirement","CLIENT_REQUIREMENT":"Client Requirement","BLOCKED":"Blocked","VALUES":{"NOT_SET":"not set","UNASSIGNED":"unassigned"},"FIELDS":{"SUBJECT":"subject","DESCRIPTION":"description","PRIORITY":"priority","SEVERITY":"severity","STATUS":"status","TYPE":"type","ASSIGNED_TO":"assigned to","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"color"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"The backlog panel, with user stories and sprints of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Customize your backlog graph","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Move to Current Sprint","MOVE_US_TO_LATEST_SPRINT":"Move to latest Sprint","EMPTY":"The backlog is empty!","CREATE_NEW_US":"Create a new US","CREATE_NEW_US_EMPTY_HELP":"You may want to create a new user story","EXCESS_OF_POINTS":"Excess of points","PENDING_POINTS":"Pending Points","CLOSED_POINTS":"closed","COMPACT_SPRINT":"Compact Sprint","GO_TO_TASKBOARD":"Go to the taskboard of {{::name}}","EDIT_SPRINT":"Edit Sprint","TOTAL_POINTS":"total","STATUS_NAME":"Status Name","SORTABLE_FILTER_ERROR":"You can't drop on backlog when filters are open","DOOMLINE":"Project Scope [Doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Points","OPTIMAL":"Optimal pending points for sprint \"{{sprintName}}\" should be {{value}}","REAL":"Real pending points for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"Toggle tags visibility","SHOW":"Show tags","HIDE":"Hide tags"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"User Stories","TITLE_COLUMN_POINTS":"Select view per Role"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"total
    points","COMPLETED_POINTS":"completed
    points","OPEN_TASKS":"open
    tasks","CLOSED_TASKS":"closed
    tasks","IOCAINE_DOSES":"iocaine
    doses","SHOW_STATISTICS_TITLE":"Show statistics","TOGGLE_BAKLOG_GRAPH":"Show/Hide burndown graph","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"project
    points","DEFINED_POINTS":"defined
    points","CLOSED_POINTS":"closed
    points","POINTS_PER_SPRINT":"points /
    sprint"},"FILTERS":{"TOGGLE":"Toggle filters visibility","HIDE":"Hide Filters","SHOW":"Show Filters"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Sprint Taskboard","TITLE_LINK_TASKBOARD":"Go to Taskboard of \"{{name}}\"","EMPTY":"There are no sprints yet","WARNING_EMPTY_SPRINT_ANONYMOUS":"This sprint has no User Stories","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"Add new sprint","TEXT_ACTION_NEW_SPRINT":"You may want to create a new sprint in your project","ACTION_SHOW_CLOSED_SPRINTS":"Show closed sprints","ACTION_HIDE_CLOSED_SPRINTS":"Hide closed sprints"}},"ERROR":{"TEXT1":"Something happened and our Oompa Loompas are working on it.","NOT_FOUND":"Not found","NOT_FOUND_TEXT":"Error 404. The page you are looking for no longer exists. Perhaps you can return back to TAIGA homepage and see if you can find what you are looking for.","PERMISSION_DENIED":"Permission denied","PERMISSION_DENIED_TEXT":"You don't have permission to access this page.","VERSION_ERROR":"Someone inside Taiga has changed this before and our Oompa Loompas cannot apply your changes. Please reload and apply your changes again (they will be lost)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint taskboard - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} to {{endDate}}) of {{projectName}}. Completed {{completedPercentage}}% ({{completedPoints}} of {{totalPoints}} points). {{openTasks}} opened tasks of {{totalTasks}}.","SECTION_NAME":"Taskboard","TITLE_ACTION_ADD":"Add a new Task","TITLE_ACTION_ADD_BULK":"Add some new Tasks in bulk","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Assign task","PLACEHOLDER_CARD_TITLE":"This could be a task","PLACEHOLDER_CARD_TEXT":"Split Stories into tasks to track them separately","TABLE":{"COLUMN":"User story","TITLE_ACTION_FOLD":"Fold column","TITLE_ACTION_UNFOLD":"Unfold column","TITLE_ACTION_FOLD_ROW":"Fold Row","TITLE_ACTION_UNFOLD_ROW":"Unfold Row","FIELD_POINTS":"points","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Days","YAXIS_LABEL":"Points","OPTIMAL":"Optimal pending points for day {{formattedDate}} should be {{roundedValue}}","REAL":"Real pending points for day {{formattedDate}} is {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Task {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Description: {{taskDescription}}","SECTION_NAME":"Task","LINK_TASKBOARD":"Taskboard","TITLE_LINK_TASKBOARD":"Go to the taskboard","PLACEHOLDER_SUBJECT":"Type the new task subject","TITLE_SELECT_STATUS":"Status Name","OWNER_US":"This task belongs to","TITLE_LINK_GO_OWNER":"Go to user story","TITLE_DELETE_ACTION":"Delete Task","LIGHTBOX_TITLE_BLOKING_TASK":"Blocking task","FIELDS":{"IS_IOCAINE":"Is iocaine"},"TITLE_ACTION_IOCAINE":"Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!"},"NOTIFICATION":{"OK":"Everything is ok","WARNING":"Oops, something happened...","WARNING_TEXT":"Our Oompa Loompas are sad, your changes were not saved!","SAVED":"Our Oompa Loompas saved all your changes!","CLOSE":"Close notification","MAIL":"Notifications By Mail","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Are you sure you want to delete?"},"CANCEL_ACCOUNT":{"TITLE":"Cancel your account","SUBTITLE":"We're sorry you are leaving the taiga, we hope you enjoyed your stay :)","PLACEHOLDER_INPUT_TOKEN":"cancel account token","ACTION_LEAVING":"Yes, I'm leaving!","SUCCESS":"Our Oompa Loompas removed your account"},"CHANGE_EMAIL_FORM":{"TITLE":"Change your email","SUBTITLE":"One click more and your email will be updated!","PLACEHOLDER_INPUT_TOKEN":"change email token","ACTION_CHANGE_EMAIL":"Change email","SUCCESS":"Our Oompa Loompas updated your email"},"ISSUES":{"PAGE_TITLE":"Issues - {{projectName}}","PAGE_DESCRIPTION":"The issues list panel of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Issue","ACTION_NEW_ISSUE":"+ NEW ISSUE","ACTION_PROMOTE_TO_US":"Promote to User Story","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"This issue has been promoted to US:","EXTERNAL_REFERENCE":"This issue has been created from","GO_TO_EXTERNAL_REFERENCE":"Go to origin","ACTION_DELETE":"Delete issue","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blocking issue","LINK_TASKBOARD":"Taskboard","TITLE_LINK_TASKBOARD":"Go to the taskboard","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Priority","SEVERITY":"Severity","TYPE":"Type"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promote this issue to a new user story","MESSAGE":"Are you sure you want to create a new US from this Issue?"},"TABLE":{"COLUMNS":{"TYPE":"Type","SEVERITY":"Severity","PRIORITY":"Priority","SUBJECT":"Subject","VOTES":"Votes","STATUS":"Status","MODIFIED":"Modified","ASSIGNED_TO":"Assigned to"},"TITLE_ACTION_CHANGE_STATUS":"Change status","TITLE_ACTION_ASSIGNED_TO":"Assigned to","BLOCKED":"Blocked","EMPTY":{"TITLE":"There are no issues to report :-)","SUBTITLE":"Did you find an issue?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Issue {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Type: {{issueType}}, Priority: {{issuePriority}}. Severity: {{issueSeverity}}. Description: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"The kanban panel, with user stories of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Fold column","TITLE_ACTION_UNFOLD":"Unfold column","TITLE_ACTION_ADD_US":"Add New User Story","TITLE_ACTION_ADD_BULK":"Add New bulk","ACTION_SHOW_ARCHIVED":"Show archived","ACTION_HIDE_ARCHIVED":"Hide archived","HIDDEN_USER_STORIES":"The user stories in this status are hidden by default","PLACEHOLDER_CARD_TITLE":"These are your User Stories","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Search - {{projectName}}","PAGE_DESCRIPTION":"Search anything, user stories, issues, tasks or wiki pages, in the project {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"User Stories","FILTER_ISSUES":"Issues","FILTER_TASKS":"Tasks","FILTER_WIKI":"Wiki Pages","PLACEHOLDER_SEARCH":"Search in...","TITLE_ACTION_SEARCH":"search","EMPTY_TITLE":"It looks like nothing was found with your search criteria.","EMPTY_DESCRIPTION":"Maybe try one of the tabs above or search again"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"The team panel to show all the members of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Team","PLACEHOLDER_INPUT_SEARCH":"Search by full name...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Closed issues","COLUMN_IOCAINE":"Iocaine Drinker","EXPLANATION_COLUMN_IOCAINE":"Iocaine doses ingested","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki pages edited","COLUMN_BUG_HUNTER":"Bug Hunter","EXPLANATION_COLUMN_BUG_HUNTER":"Issues reported","COLUMN_NIGHT_SHIFT":"Night Shift","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tasks closed","COLUMN_TOTAL_POWER":"Total Power","EXPLANATION_COLUMN_TOTAL_POWER":"Total Points","SECTION_TITLE_TEAM":"Team >","SECTION_FILTER_ALL":"All","CONFIRM_LEAVE_PROJECT":"Are you sure you want to leave the project?","ACTION_LEAVE_PROJECT":"Leave this project"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. size: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"User Settings","USER_PROFILE":"User profile","CHANGE_PASSWORD":"Change password","EMAIL_NOTIFICATIONS":"Email notifications","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Email Notifications","COLUMN_PROJECT":"Project","COLUMN_RECEIVE_ALL":"Receive All","COLUMN_ONLY_INVOLVED":"Only Involved","COLUMN_NO_NOTIFICATIONS":"No notifications","OPTION_ALL":"All","OPTION_INVOLVED":"Involved","OPTION_NONE":"None"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Project","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Project"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Use default image","ACTION_DELETE_ACCOUNT":"Delete Taiga account","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Check your inbox!
    We have sent a mail to your account
    with the instructions to set your new address","CHANGE_PHOTO":"Change photo","FIELD":{"USERNAME":"Username","EMAIL":"Email","FULL_NAME":"Full name","PLACEHOLDER_FULL_NAME":"Set your full name (ex. Íñigo Montoya)","BIO":"Bio (max. 210 chars)","PLACEHOLDER_BIO":"Tell us something about you","LANGUAGE":"Language","LANGUAGE_DEFAULT":"-- use default language --","THEME":"Theme","THEME_DEFAULT":"-- use default theme --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Remove this wiki page","DELETE_LIGHTBOX_TITLE":"Delete Wiki Page","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"times
    edited","LAST_EDIT":"last
    edit","LAST_MODIFICATION":"last modification"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"Created","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Hint","LINK":"If you want to know how to use it visit our support page","LINK_TITLE":"Visit our support page","HINT1_TITLE":"Did you know you can import and export projects?","HINT1_TEXT":"This allow you to extract all your data from one Taiga and move it to another one.","HINT2_TITLE":"Did you know you can create custom fields?","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 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":{"UPLOAD_ATTACHMENT":"{{username}} has uploaded a new attachment in {{obj_name}}","US_CREATED":"{{username}} has created a new US {{obj_name}} in {{project_name}}","ISSUE_CREATED":"{{username}} has created a new issue {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} has created a new task {{obj_name}} in {{project_name}}","TASK_CREATED_WITH_US":"{{username}} has created a new task {{obj_name}} in {{project_name}} which belongs to the US {{us_name}}","WIKI_CREATED":"{{username}} has created a new wiki page {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} has created a new sprint {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} created the project {{project_name}}","MILESTONE_UPDATED":"{{username}} has updated the sprint {{obj_name}}","US_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}} to {{new_value}}","US_UPDATED_POINTS":"{{username}} has updated '{{role_name}}' points of the US {{obj_name}} to {{new_value}}","ISSUE_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}} to {{new_value}}","TASK_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} which belongs to the US {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} which belongs to the US {{us_name}} to {{new_value}}","WIKI_UPDATED":"{{username}} has updated the wiki page {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} has commented in the US {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} has commented in the issue {{obj_name}}","NEW_COMMENT_TASK":"{{username}} has commented in the task {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} has a new member","US_ADDED_MILESTONE":"{{username}} has added the US {{obj_name}} to {{sprint_name}}","US_MOVED":"{{username}} has moved the US {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} has added the US {{obj_name}} to the backlog","BLOCKED":"{{username}} has blocked {{obj_name}}","UNBLOCKED":"{{username}} has unblocked {{obj_name}}","NEW_USER":"{{username}} has joined Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Issue","TASK":"Task"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Login with another user","AUTHORIZE_APP":"Authorize app","CANCEL":"Cancel"},"JOYRIDE":{"NAV":{"NEXT":"Next","BACK":"Back","SKIP":"Skip","DONE":"Done"},"DASHBOARD":{"STEP1":{"TITLE":"Your project","TEXT":"Welcome! Here you will find the projects you are involved on."},"STEP2":{"TITLE":"Working on","TEXT":"Here you will find the User Stories, Tasks and Issues in which you are working on."},"STEP3":{"TITLE":"Watching","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"You are already working with Taiga ;)"},"STEP4":{"TITLE":"Let’s start","TEXT1":"You can start by creating your first Taiga project.","TEXT2":"Good luck!"}},"BACKLOG":{"STEP1":{"TITLE":"Project summary","TEXT1":"Here you will see the state of your project.","TEXT2":"You can change every kind of project settings through the admin."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"User Stories","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"User Stories & Tasks","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Good luck!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Discover projects","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Most liked","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"View more","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"All","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Looking for people","WEEK":"Last week","MONTH":"Last month","YEAR":"Last year","ALL_TIME":"All time","CLEAR":"Clear filters"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Type something...","ACTION_TITLE":"Search","RESULTS":"Search results"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-es.json b/dist/v-1549282893552/locales/taiga/locale-es.json new file mode 100644 index 0000000..7495ebf --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-es.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Sí","NO":"No","OR":"o","I_GET_IT":"OK, I get it","LOADING":"Cargando...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Guardar","CANCEL":"Cancelar","ACCEPT":"Aceptar","DELETE":"Borrar","UNLINK":"Desvincular","CREATE":"Crear","ADD":"Añadir","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Editar","DRAG":"Arrastra","TAG_LINE":"Tu herramienta de gestión de proyecto ágil, gratuíta y de código abierto","TAG_LINE_2":"AMA TU PROYECTO","BLOCK":"Bloquear","BLOCK_TITLE":"Bloquea este elemento por ejemplo si tiene una dependencia que no ha sido satisfecha","BLOCKED":"Bloqueada","UNBLOCK":"Desbloquear","UNBLOCK_TITLE":"Desbloquea este elemento","BLOCKED_NOTE":"¿Por qué está bloqueada?","BLOCKED_REASON":"Por favor, explica la razón","CREATED_BY":"Creada por {{fullDisplayName}}","CLOSE":"cerrar","GO_HOME":"Llévame a casa","PLUGINS":"Plugins","ONE_ITEM_LINE":"Un elemento por línea...","NEW_BULK":"Nueva inserción en bloque","SUBTASKS":"Subtasks","PREVIOUS":"Anterior","NEXT":"Siguiente","LOGOUT":"Cerrar sesión","EXTERNAL_USER":"un usuario externo","GENERIC_ERROR":"Uno de nuestros Oompa Loompas dice {{error}}.","IOCAINE_TEXT":"Este miembro se siente un poco abrumado por esta tarea. Será inmune al veneno de la iocaína con el tiempo con tu ayuda, Ahora, puede necesitar un abrazo ;-).","CLIENT_REQUIREMENT":"Requerimiento de cliente es un nuevo requisito que no se esperaba y es necesario que forme parte del proyecto.","TEAM_REQUIREMENT":"Requerimiento del equipo es un nuevo requisito que debe existir en el proyecto pero que no conllevará ningún coste para el cliente.","OWNER":"Dueño del proyecto","CAPSLOCK_WARNING":"¡Cuidado!. Esta usando mayusculas en un campo sensible a mayusculas","CONFIRM_CLOSE_EDIT_MODE_TITLE":"¿Seguro que desea cerrar el modo de edición?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Recuerde que si cierra el modo de edicion sin guardar todos los cambios se perderán","RELATED_USERSTORIES":"Historias de usuario relacionadas","CARD":{"ASSIGN_TO":"Asignado a","EDIT":"Editar tarjeta","DELETE":"Elimina tarjeta","DELETE_ISSUE":"Borrar petición","DETACH_ISSUE_FROM_SPRINT":"Quitar petición de sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Este valor parece inválido.","TYPE_EMAIL":"El valor debe ser un email.","TYPE_URL":"El valor debe ser una url.","TYPE_URLSTRICT":"El valor debe ser una url.","TYPE_NUMBER":"El valor debe ser un número.","TYPE_DIGITS":"El valor deben ser digitos.","TYPE_DATEISO":"El valor debe ser una fecha válida (DD-MM-YYY)","TYPE_ALPHANUM":"El valor debe ser alfanumérico.","TYPE_PHONE":"El valor debe ser un teléfono válido.","NOTNULL":"No puede ser un valor nulo.","NOT_BLANK":"El valor no puede quedar en blanco.","REQUIRED":"Valor requerido.","REGEXP":"Este valor parece inválido.","MIN":"El valor debe ser mayor o igual que %s.","MAX":"El valor debe ser menor o igual que %s.","RANGE":"El valor debe estar entre %s y %s.","MIN_LENGTH":"El valor es demasiado corto. Debe contener al menos %s caracteres.","MAX_LENGTH":"El valor es demasiado corto. Debe contener %s caracteres como máximo.","RANGE_LENGTH":"Longitud erronea. Debe estar entre %s y %s caracteres.","MIN_CHECK":"Debes seleccionar al menos %s.","MAX_CHECK":"Debes seleccionar %s o menos.","RANGE_CHECK":"Debes seleccionar de %s a %s.","EQUAL_TO":"Este valor debe ser el mismo.","LINEWIDTH":"Una o más líneas es tal vez demasiado tiempo. Trate de mantener bajo %s caracteres.","PIKADAY":"Formato de fecha no válida, por favor utilice DD MMM AAAA (como 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mes Anterior","NEXT_MONTH":"Mes Siguiente","MONTHS":{"JAN":"Enero","FEB":"Febrero","MAR":"Marzo","APR":"Abril","MAY":"Mayo","JUN":"Junio","JUL":"Julio","AUG":"Agosto","SEP":"Septiembre","OCT":"Octubre","NOV":"Noviembre","DEC":"Diciembre"},"WEEK_DAYS":{"SUN":"Domingo","MON":"Lunes","TUE":"Martes","WED":"Miércoles","THU":"Jueves","FRI":"Viernes","SAT":"Sábado"},"WEEK_DAYS_SHORT":{"SUN":"Dom","MON":"Lun","TUE":"Mar","WED":"Mie","THU":"Jue","FRI":"Vie","SAT":"Sáb"}},"SEE_USER_PROFILE":"Ver el perfil de {{username }}","USER_STORY":"Historia de usuario","TASK":"Tarea","ISSUE":"Petición","EPIC":"Épica","TAGS":{"PLACEHOLDER":"Introducir etiqueta","DELETE":"Borrar etiqueta","ADD":"Añadir etiqueta"},"DESCRIPTION":{"EMPTY":"El espacio vacío es tan aburrido... trata de ser descriptivo... ","NO_DESCRIPTION":"Sin descripción todavía"},"FIELDS":{"SUBJECT":"Asunto","NAME":"Nombre","URL":"URL","DESCRIPTION":"Descripción","VALUE":"Valor","SLUG":"Slug","COLOR":"Color","IS_CLOSED":"¿Está Cerrado?","STATUS":"Estado","TYPE":"Tipo","SEVERITY":"Gravedad","PRIORITY":"Prioridad","ASSIGNED_TO":"Asignado a","ASSIGNED_USERS":"Usuarios asignados","POINTS":"Puntos","IS_BLOCKED":"está bloqueada","REF":"Ref","VOTES":"Votos","SPRINT":"Sprint","DUE_DATE":"Fecha de vencimiento","DUE_DATE_REASON":"Motivo fecha de vencimiento"},"ROLES":{"ALL":"Todos"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Sin asignar","ASSIGN":"Asignar","DELETE_ASSIGNMENT":"Eliminar asignaciones","REMOVE_ASSIGNED":"Eliminar asignación","TOO_MANY":"...Demasiados usuarios, continué filtrando","CONFIRM_UNASSIGNED":"¿Está seguro de que desea dejarla sin asignar?","TITLE_ACTION_EDIT_ASSIGNMENT":"Editar asignación","SELF":"Asignármela"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Fijar fecha de vencimiento"},"ASSIGNED_USERS":{"ADD":"Selecciona usuario asignado","ADD_ASSIGNED":"Añadir asignación","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Borra asignación..."},"STATUS":{"CLOSED":"Cerrada","OPEN":"Abierto"},"WATCHERS":{"WATCHERS":"Observadores","ADD":"Añadir observadores","TITLE_ADD":"Añade un miembro del proyecto a la lista de observadores","DELETE":"Eliminar el observador","TITLE_LIGHTBOX_DELETE_WARTCHER":"Eliminar el observador..."},"WATCH_BUTTON":{"WATCH":"Observar","WATCHING":"Observando","UNWATCH":"No observar","WATCHERS":"Observadores","BUTTON_TITLE":"Observar o no observar este elemento","COUNTER_TITLE":"{total, plural, one{un observador} other{# observadores}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Votar o no este elemento","COUNTER_TITLE":"{total, plural, one{un voto} other{# votos}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Atributo Personalizados","SAVE":"Guardar atributo personalizado","EDIT":"Editar Atributo Personalizado","DELETE":"Borrar atributos personalizados","CONFIRM_DELETE":"Se borrarán todos los valores de este atributo personalizado. \n¿Estás seguro de que quieres continuar?"},"FILTERS":{"INPUT_PLACEHOLDER":"Asunto o referencia","TITLE_ACTION_FILTER_BUTTON":"busqueda","TITLE":"Filtros","TITLE_ACTION_SEARCH":"Buscar","ACTION_SAVE_CUSTOM_FILTER":"guardar como filtro personalizado","PLACEHOLDER_FILTER_NAME":"Escribe un nombre para el filtro y pulsa enter","APPLIED_FILTERS_NUM":"filtros usados","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Tipo","STATUS":"Estado","SEVERITY":"Gravedad","PRIORITIES":"Prioridades","TAGS":"Etiquetas","ASSIGNED_TO":"Asignado a","ASSIGNED_USERS":"Usuarios asignados","ROLE":"Rol","CREATED_BY":"Creada por","CUSTOM_FILTERS":"Filtros personalizados","EPIC":"Épica"}},"WYSIWYG":{"CODE_SNIPPET":"Fragmento de código","DB_CLICK":"doble click para editar","SELECT_LANGUAGE_PLACEHOLDER":"Selecciona un lenguaje","SELECT_LANGUAGE_REMOVE_FORMATING":"Eliminar formato","OUTDATED":"Otra persona ha realizado cambios mientras tu estabas editando. Revisa la nueva versión en la pestaña de actividad antes de guardar tus cambios.","MARKDOWN_HELP":"Ayuda de sintaxis Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Épicas","VIEW_EPICS":"Ver épica","ADD_EPICS":"Añadir épica","MODIFY_EPICS":"Modificar épica","COMMENT_EPICS":"Comentar épica","DELETE_EPICS":"Borrar épica"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Ver sprints","ADD_SPRINTS":"Crear sprints","MODIFY_SPRINTS":"Editar sprints","DELETE_SPRINTS":"Borrar sprints"},"USER_STORIES":{"NAME":"Historias de Usuario","VIEW_USER_STORIES":"Ver historias de usuario","ADD_USER_STORIES":"Crear historias de usuario","MODIFY_USER_STORIES":"Editar historias de usuario","COMMENT_USER_STORIES":"Comentar historias de usuario","DELETE_USER_STORIES":"Borrar historias de usuario"},"TASKS":{"NAME":"Tareas","VIEW_TASKS":"Ver tareas","ADD_TASKS":"Crear tareas","MODIFY_TASKS":"Editar tareas","COMMENT_TASKS":"Comentar tareas","DELETE_TASKS":"Borrar tareas"},"ISSUES":{"NAME":"Peticiones","VIEW_ISSUES":"Ver peticiones","ADD_ISSUES":"Crear peticiones","MODIFY_ISSUES":"Editar peticiones","COMMENT_ISSUES":"Comentar problemas","DELETE_ISSUES":"Borrar peticiones"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Ver páginas","ADD_WIKI_PAGES":"Crear páginas","MODIFY_WIKI_PAGES":"Editar páginas","DELETE_WIKI_PAGES":"Borrar páginas","VIEW_WIKI_LINKS":"Ver enlaces","ADD_WIKI_LINKS":"Crear enlaces","DELETE_WIKI_LINKS":"Borrar enlaces"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Inicia sesión en Taiga, una plataforma de gestión de proyectos orientada a startups y equipos ágiles que buscan una herramienta sencilla, elegante y que les haga disfrutar trabajando."},"AUTH":{"INVITED_YOU":"te ha invitado a unirte al proyecto","NOT_REGISTERED_YET":"¿Aún no está registrado?","REGISTER":"Registro","CREATE_ACCOUNT":"crea tu cuenta gratis aquí"},"LOGIN_COMMON":{"HEADER":"Ya tengo una cuenta en Taiga","PLACEHOLDER_AUTH_NAME":"Nombre de usuario o email (distingue mayúsculas y minúsculas)","LINK_FORGOT_PASSWORD":"¿La olvidaste?","TITLE_LINK_FORGOT_PASSWORD":"¿Olvidó su contraseña?","ACTION_ENTER":"Entrar","ACTION_SIGN_IN":"Iniciar sesión","PLACEHOLDER_AUTH_PASSWORD":"Contraseña (distingue mayúsculas y minúsculas)","ALT_LOGIN":"O haz login con"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Nuestros Oompa Loompas indican que tu nombre de usuario/correo o contraseña son incorrectos","SUCCESS":"Nuestros Oompa Loompas están felices, bienvenido a Taiga."},"REGISTER":{"PAGE_TITLE":"Registro - Taiga","PAGE_DESCRIPTION":"Crea tu cuenta en Taiga, una plataforma de gestión de proyectos orientada a startups y equipos ágiles que buscan una herramienta sencilla, elegante y que les haga disfrutar trabajando."},"REGISTER_FORM":{"TITLE":"Crea tu nueva cuenta en Taiga, ¡es gratis!","PLACEHOLDER_NAME":"Escribe un nombre de usuario (distingue mayúsculas y minúsculas)","PLACEHOLDER_FULL_NAME":"Escribe tu nombre completo","PLACEHOLDER_EMAIL":"Tu email","PLACEHOLDER_PASSWORD":"Establece una contraseña (distingue mayúsculas y minúsculas)","ACTION_SIGN_UP":"Registrarme","TITLE_LINK_LOGIN":"Iniciar sesión","LINK_LOGIN":"¿Ya te has registrado? Inicia sesión"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Has olvidado tu contraseña - Taiga","PAGE_DESCRIPTION":"A partir de tu nombre de usuario o email obtendrás una nueva contraseña para acceder a Taiga nuevamente."},"FORGOT_PASSWORD_FORM":{"TITLE":"Vaya, ¿has olvidado tu contraseña?","SUBTITLE":"Escribe tu nombre de usuario o email para obtener una nueva","PLACEHOLDER_FIELD":"Nombre de usuario o email","ACTION_RESET_PASSWORD":"Restablecer Contraseña","LINK_CANCEL":"Nah, llévame de vuelta, creo que lo recordé.","SUCCESS_TITLE":"¡Revisa tu bandeja de entrada!","SUCCESS_TEXT":"Te hemos enviado un correo con las instrucciones para restablecer tu contraseña","ERROR":"Según nuestros Oompa Loompas tú no estás registrado"},"CHANGE_PASSWORD":{"PAGE_TITLE":"Cambia tu contraseña - Taiga","SECTION_NAME":"Cambiar contraseña","FIELD_CURRENT_PASSWORD":"Contraseña actual","PLACEHOLDER_CURRENT_PASSWORD":"Tu contraseña actual (o déjalo vacío si todavía no tienes contraseña)","FIELD_NEW_PASSWORD":"Nueva contraseña","PLACEHOLDER_NEW_PASSWORD":"Escribe una contraseña nueva","FIELD_RETYPE_PASSWORD":"Reescribe la nueva contraseña","PLACEHOLDER_RETYPE_PASSWORD":"Reescribe la nueva contraseña","ERROR_PASSWORD_MATCH":"Las contraseñas no coinciden"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Crear una nueva contraseña de Taiga","SUBTITLE":"Y bueno, es posible que necesites comer más alimentos ricos en hierro, son buenos para tu cerebro :P","PLACEHOLDER_NEW_PASSWORD":"Nueva contraseña","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Reescriba la nueva contraseña","ACTION_RESET_PASSWORD":"Restablecer contraseña","ERROR":"Nuestros Oompa Loompas no encuentran tu petición de recuperación de contraseña. Prueba a pedirla de nuevo.","SUCCESS":"Nuestro Oompa Loopas guardaron tu nueva contraseña.
    Intenta registrarte con ella"},"INVITATION":{"PAGE_TITLE":"Acepta la invitación - Taiga","PAGE_DESCRIPTION":"Acepta la invitación para unirte a un proyecto en Taiga, una plataforma de gestión de proyectos orientada a startups y equipos ágiles que buscan una herramienta sencilla, elegante y que les haga disfrutar trabajando."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Nuestros Oompa Loompas no pueden encontrar su invitación.","SUCCESS":"¡Acabas de unirte al proyecto! Bienvenido a {{project_name}}"},"HOME":{"PAGE_TITLE":"Inicio - Taiga","PAGE_DESCRIPTION":"Página de inicio de Taiga, con tus proyectos principales y tus historias de usuario, tareas y peticiones en progreso asignadas y las que observas.","EMPTY_WORKING_ON":"Parece vacío, ¿no? Empieza a trabajar con Taiga y verás aquí las historias, tareas e incidentes en los que estás trabajando.","EMPTY_WATCHING":"Sigue Historias de Usuario, Tareas y Peticiones en tus proyectos y se te notificará sobre sus cambios :)","EMPTY_PROJECT_LIST":"Todavía no tienes ningún proyecto","WORKING_ON_SECTION":"Trabajando en","WATCHING_SECTION":"Observando","DASHBOARD":"Dashboard de proyecto"},"EPICS":{"TITLE":"ÉPICAS","SECTION_NAME":"Épicas","EPIC":"Épica","PAGE_TITLE":"Épicas - {{projectName}}","PAGE_DESCRIPTION":"El listado de épicas del proyecto {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ AÑADIR ÉPICA","UNASSIGNED":"No asignado"},"EMPTY":{"TITLE":"Parece que todavía no hay épicas.","EXPLANATION":"Las épicas son ítems a un nivel mas elevado que engloban historias de usuario.
    Las épicas estan al tope de la jerarquia y pueden ser usadas para agrupar historias de usuario.","HELP":"Aprende más sobre Épicas"},"TABLE":{"VOTES":"Votos","NAME":"Nombre","PROJECT":"Proyecto","SPRINT":"Sprint","ASSIGNED_TO":"Asignado","STATUS":"Estado","PROGRESS":"En curso","VIEW_OPTIONS":"Ver opciones"},"CREATE":{"TITLE":"Nueva Épica","PLACEHOLDER_DESCRIPTION":"Por favor añade un texto descriptivo para ayudar a otros usuarios a entender mejor esta historia.","TEAM_REQUIREMENT":"Requerido por el equipo","CLIENT_REQUIREMENT":"Requerido por el Cliente","BLOCKED":"Bloqueada","BLOCKED_NOTE_PLACEHOLDER":"Porque esta esta épica bloqueada?","CREATE_EPIC":"Crear épica"}},"PROJECTS":{"PAGE_TITLE":"Mis proyectos - Taiga","PAGE_DESCRIPTION":"Una lista con todos tus proyectos, puedes reordenarla o crear un proyecto nuevo.","MY_PROJECTS":"Mis proyectos"},"ATTACHMENT":{"SECTION_NAME":"adjuntos","TITLE":"{{ fileName }} subido el {{ date }}","LIST_VIEW_MODE":"Vista en modo Lista","GALLERY_VIEW_MODE":"Vista en modo Galería","DESCRIPTION":"Escribe una pequeña descripción","DEPRECATED":"(obsoleto)","DEPRECATED_FILE":"¿Desactualizado?","ADD":"Agrega nuevos adjunto. {{maxFileSizeMsg}}","DROP":"¡Arrastre los archivos adjuntos aquí!","SHOW_DEPRECATED":"+ mostrar adjuntos obsoletos","HIDE_DEPRECATED":"- ocultar adjuntos obsoletos","COUNT_DEPRECATED":"({{ counter }} obsoletos)\n","MAX_UPLOAD_SIZE":"El tamaño máximo de subida es de {{maxFileSize}}","DATE":"DD MMM YYYY [a las] hh:mm\n","ERROR_UPLOAD_ATTACHMENT":"No hemos podido subir el fichero '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Borrar adjunto...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"el adjunto '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"No hemos podido borrarlo: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"El fichero '{{fileName}}' ({{fileSize}}) es demasiado pesado para nuestros Oompa Loompas, prueba con uno de menos de ({{maxFileSize}})."},"PAGINATION":{"PREVIOUS":"Anterior","NEXT":"Siguiente"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Editar valor","TITLE_ACTION_DELETE_VALUE":"Eliminar valor","TITLE_ACTION_DELETE_TAG":"Borrar etiqueta"},"HELP":"¿Necesitas ayuda? ¡Revisa nuestra pagina de soporte! ","PROJECT_DEFAULT_VALUES":{"TITLE":"Valores por defecto","SUBTITLE":"Define los valores por defecto para todos los selectores."},"MEMBERSHIPS":{"TITLE":"Administrar miembros","PAGE_TITLE":"Miembros - {{projectName}}","ADD_BUTTON":"+ Nuevo miembro","ADD_BUTTON_TITLE":"Añadir un nuevo miembro","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Este proyecto ha llegado a su límite de ({{members}}) miembros permitidos. Si se desea aumentar ese límite póngase en contacto con el administrador."},"PROJECT_EXPORT":{"TITLE":"Exportar","SUBTITLE":"Exportar tu proyecto para guardar una copia de seguridad o para crear uno nuevo basado en este.","EXPORT_BUTTON":"Exportar","EXPORT_BUTTON_TITLE":"Exportar tus proyecto","LOADING_TITLE":"Estamos generando tu fichero con el volcado de datos","DUMP_READY":"¡Tu fichero con el volcado de datos está listo!","LOADING_MESSAGE":"Por favor no cierres la ventana.","ASYNC_MESSAGE":"Te enviaremos un email cuando esté listo.","SYNC_MESSAGE":"Si la descarga no comienza automáticamente haz click aquí.","ERROR":"Nuestros Oompa Loompas tienen algunos problemas generando el volcado de tus datos. Por favor inténtalo de nuevo.","ERROR_BUSY":"Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos."},"MODULES":{"TITLE":"Módulos","EPICS":"Épicas","EPICS_DESCRIPTION":"Visualizar y administrar la parte mas estrategica del proyecto.","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Gestiona tus historias de usuario para mantener una vista organizada y priorizada de los próximos trabajos que deberás afrontar. ","NUMBER_SPRINTS":"Numero esperado de sprints","NUMBER_SPRINTS_HELP":"0 para un numero indeterminado","NUMBER_US_POINTS":"Total esperado de puntos historicos","NUMBER_US_POINTS_HELP":"0 para un numero indeterminado","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organiza tus proyectos de una manera flexible con este panel.","ISSUES":"Peticiones","ISSUES_DESCRIPTION":"Haz seguimiento de los bugs, preguntas y peticiones de mejoras relacionadas con tu proyecto. ¡No te pierdas nada!","WIKI":"Wiki","WIKI_DESCRIPTION":"Añade, modifica o borra contenido en colaboración con otros miembros. Este es el lugar adecuado para la documentación de tu proyecto.","MEETUP":"Meet Up","MEETUP_DESCRIPTION":"Elegir su sistema de videoconferencia.","SELECT_VIDEOCONFERENCE":"Elige un sistema de videoconferencia","SALT_CHAT_ROOM":"Agregar prefijo al nombre de la sala de chat","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personalizado","URL_CHAT_ROOM":"URL de tu chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Perfil de Proyecto - {{projectName}}\n","PROJECT_DETAILS":"Info del proyecto","PROJECT_NAME":"Nombre del proyecto","TAGS":"Etiquetas","DESCRIPTION":"Descripción","RECRUITING":"¿Este proyecto está buscando a gente?","RECRUITING_MESSAGE":"¿Qué estás buscando?","RECRUITING_PLACEHOLDER":"Define el perfil de lo que estás buscando","FEEDBACK":"¿Recibir feedback de los usuarios de Taiga?","PUBLIC_PROJECT":"Proyecto público","PRIVATE_PROJECT":"Proyecto privado","PRIVATE_OR_PUBLIC":"¿Cuál es la diferencia entre proyecto público y privado?","DELETE":"Eliminar este proyecto","CHANGE_LOGO":"Cambia el logo","ACTION_USE_DEFAULT_LOGO":"Usar imagen por defecto","MAX_PRIVATE_PROJECTS":"Has alcanzado el número máximo de proyectos privados permitidos por su actual plan","MAX_PRIVATE_PROJECTS_MEMBERS":"El numero máximo de miembros para proyectos privados se ha excedido","MAX_PUBLIC_PROJECTS":"Desafortunadamente, usted ha alcanzado el número máximo de proyectos públicos permitidos por su plan actual","MAX_PUBLIC_PROJECTS_MEMBERS":"El proyecto excede el numero maximo de usuarios para proyectos publicos","PROJECT_OWNER":"Dueño del proyecto","REQUEST_OWNERSHIP":"Solicitar de dueño","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"¿Desea convertirse en el nuevo dueño del proyecto?","REQUEST_OWNERSHIP_DESC":"Solicitar que el actual project owner {{name}} te transfiera la propiedad de este proyecto a ti.","REQUEST_OWNERSHIP_BUTTON":"Solicitud","REQUEST_OWNERSHIP_SUCCESS":"Notificaremos al dueño del proyecto","CHANGE_OWNER":"Cambiar dueño","CHANGE_OWNER_SUCCESS_TITLE":"Ok, su solicitud ha sido enviado!","CHANGE_OWNER_SUCCESS_DESC":"Le notificaremos por correo si la solicitud para ser dueño del proyecto fue aceptada o rechazada"},"REPORTS":{"TITLE":"Informes","SUBTITLE":"Exporta los datos de tu proyecto en formato CSV y crea tus propios informes.","DESCRIPTION":"Descarga el fichero CSV o copia la URL generada y abre tu editor de textos o hoja de cálculo favorito para realizar tus propios informes. Podrás visualizar y analizar todos los datos fácilmente.","HELP":"¿Cómo puedo usar esto en mi hoja de cálculo?","REGENERATE_TITLE":"Cambiar URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"Reportes de épicas.","SECTION_TITLE_US":"informes de historias de usuario","SECTION_TITLE_TASK":"Informes de tareas","SECTION_TITLE_ISSUE":"informes de peticiones","DOWNLOAD":"Descargar el CSV","URL_FIELD_PLACEHOLDER":"Por favor regenera la url del origen CSV","TITLE_REGENERATE_URL":"Regenerar url de origen CSV","ACTION_GENERATE_URL":"Generar Url","ACTION_REGENERATE":"Regenerar","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Borrar"},"CUSTOM_FIELDS":{"TITLE":"Atributos personalizados","SUBTITLE":"Especifica los atributos personalizados para las historias de usuario, tareas y peticiones","EPIC_DESCRIPTION":"Campos personalizados para épicas","EPIC_ADD":"Añadir campos personalizados en épicas","US_DESCRIPTION":"Atributos personalizados de historias de usuario","US_ADD":"Añadir un atributo personalizado en las historias de usuario","TASK_DESCRIPTION":"Atributos personalizados de tareas","TASK_ADD":"Añadir un atributo personalizado en las tareas","ISSUE_DESCRIPTION":"Atributos personalizados de peticiones","ISSUE_ADD":"Añadir un atributo personalizado en las peticiones","FIELD_TYPE_TEXT":"Texto","FIELD_TYPE_RICHTEXT":"Texto enriquecido","FIELD_TYPE_MULTI":"Multilínea","FIELD_TYPE_DATE":"Fecha","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valores del Proyectos - {{projectName}}","REPLACEMENT":"Todos los elementos con este valor cambiarán a","ERROR_DELETE_ALL":"No puedes eliminar todos los valores."},"PROJECT_VALUES_POINTS":{"TITLE":"Puntos","SUBTITLE":"Especifica los puntos a los que se podrían estimar tus historias de usuario","US_TITLE":"Puntos de historia de usuario","ACTION_ADD":"Añadir nuevo punto"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioridades","SUBTITLE":"Especifica las prioridades que podrán tener tus peticiones","ISSUE_TITLE":"Prioridades de peticion","ACTION_ADD":"Añadir nueva prioridad"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Gravedades","SUBTITLE":"Especifica la gravedad que tendrán tus peticiones","ISSUE_TITLE":"Gravedades de petición","ACTION_ADD":"Añadir nueva gravedad"},"PROJECT_VALUES_STATUS":{"TITLE":"Estados","SUBTITLE":"Especifica los estado que atravesarán tus historias de usuario, tareas y peticiones","EPIC_TITLE":"Estados de Epicas","US_TITLE":"Estados de historias de usuario","TASK_TITLE":"Estados de Tarea","ISSUE_TITLE":"Estados de la petición"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipos","SUBTITLE":"Especifica los deferentes tipos posibles de peticiones que pueden existir.","ISSUE_TITLE":"Tipos de la petición","ACTION_ADD":"Añadir nuevo {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiquetas","SUBTITLE":"Ver y editar el color de sus etiquetas.","EMPTY":"Actualmente no hay etiquetas","EMPTY_SEARCH":"Parece que no se encontro nada con este criterio de busqueda","ACTION_ADD":"Añadir etiqueta","NEW_TAG":"Nueva etiqueta","MIXING_HELP_TEXT":"Seleccione las etiquetas que quiere agrupar","MIXING_MERGE":"Agrupar Etiquetas","SELECTED":"Seleccionado"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Fechas de Vencimiento","SUBTITLE":"Especificar fechas de vencimiento de tu historia de usuario, tareas y peticiones serán afectados si están seleccionadas","US_TITLE":"Vencimiento de historia de usuario","ACTION_ADD_STATUS":"Añadir nuevo estado","TASK_TITLE":"Estado de vencimiento de tarea","ISSUE_TITLE":"Vencimiento de petición","DAYS_TO_DUE_DATE":"Días para vencimiento","BEFORE_AFTER":"Antes/Después","BEFORE":"Antes","AFTER":"Pasado"},"ROLES":{"PAGE_TITLE":"Roles - {{projectName}}","WARNING_NO_ROLE":"Ojo, ningún rol en tu proyecto podrá estimar historias de usuario","HELP_ROLE_ENABLED":"Si lo activas, los miembros que posean este rol serán capaces de estimar las histórias de usuario","DISABLE_COMPUTABLE_ALERT_TITLE":"¿Seguro de que deseas deshabilitar las estimaciones para este rol?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Si desactivas los permisos de estimación para el rol {{roleName}} todas las estimaciones previas hechas por ese rol se eliminarán","COUNT_MEMBERS":"{{ role.members_count }} miembros con este rol","TITLE_DELETE_ROLE":"Borrar Rol","REPLACEMENT_ROLE":"Todos los usuarios con este rol serán movidos a","WARNING_DELETE_ROLE":"¡Ten cuidado! Todas las estimaciones de roles serán eliminados","ERROR_DELETE_ALL":"No puedes eliminar todos los valores","EXTERNAL_USER":"Usuario externo","NOTE_EXTERNAL_USERS":"Nota: por Usuario Externo entendemos cualquier usuario anónimo no perteneciente a la plataforma Taiga, incluyendo motores de búsqueda. Por favor, usa este rol con cuidado."},"THIRD_PARTIES":{"SECRET_KEY":"Secret key","PAYLOAD_URL":"Payload URL","VALID_IPS":"IPs de origen válidas (separadas por ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Las peticiones de Bitbucket no van firmadas, con la IP de origen verificamos su procedencia. Déjalo vacío y no se verificarán."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Las peticiones de Gitlab no van firmadas, con la IP de origen verificamos su procedencia. Déjalo vacío y no se verificarán."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Añadir un Nuevo Webhook","TYPE_NAME":"Escribe el nombre del servicio","TYPE_PAYLOAD_URL":"Escribe la 'payload URL' del servicio","TYPE_SERVICE_SECRET":"Escribe la \"secret key\" del servicio","SAVE":"Guardar Webhook","CANCEL":"Cancelar Webhook","SHOW_HISTORY":"(Mostrar histórico)","TEST":"Testea el Webhook","EDIT":"Editar Webhook","DELETE":"Eliminar Webhook","REQUEST":"Solicitud","RESEND_REQUEST":"Reenviar solicitud","HEADERS":"Cabeceras","PAYLOAD":"Payload","RESPONSE":"Respuesta","DATE":"DD MMM YYYY [a las] hh:mm:ss","ACTION_HIDE_HISTORY":"(Ocultar historial)","ACTION_HIDE_HISTORY_TITLE":"+ info","ACTION_SHOW_HISTORY":"(Mostrar historial)","ACTION_SHOW_HISTORY_TITLE":"- info","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Atributos Personalizados - {{projectName}}","ADD":"Añadir atributo personalizado","EDIT":"Editar atributo personalizado","DELETE":"Eliminar atributo personalizado","SAVE_TITLE":"Guardar atributo personalizado","CANCEL_TITLE":"Cancelar la creación","SET_FIELD_NAME":"Escribe el nombre del atributo personalizado","SET_FIELD_DESCRIPTION":"Escribe una descripción para el atributo personalizado","FIELD_TYPE_DEFAULT":"-- elige uno --","ACTION_UPDATE":"Actualizar Atributo Personalizado","ACTION_CANCEL_EDITION":"Cancelar edición"},"MEMBERSHIP":{"COLUMN_MEMBER":"Miembro","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rol","COLUMN_STATUS":"Estado","STATUS_ACTIVE":"Activado","STATUS_PENDING":"Pendiente","DELETE_MEMBER":"Borrar miembro","RESEND":"Enviar de nuevo","SUCCESS_SEND_INVITATION":"Hemos enviado nuevamente la invitación a '{{email}}'.","SUCCESS_DELETE":"Hemos eliminado {{message}}.","ERROR_DELETE":"No se ha podido eliminar {{message}}. ","DEFAULT_DELETE_MESSAGE":"la invitación enviada a"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Valor por defecto para el selector de estado de épicas.","LABEL_US_STATUS":"Valor por defecto para el selector de estado de historias de usuario.","LABEL_POINTS":"Valor por defecto para el selector de puntos","LABEL_TASK_STATUS":"Valor por defecto para el selector de estado de tarea","LABEL_ISSUE_TYPE":"Valor por defecto para el selector de tipo de la petición","LABEL_ISSUE_STATUS":"Valor por defecto para el selector de estado de petición","LABEL_PRIORITY":"Valor por defecto para el selector de prioridad","LABEL_SEVERITY":"Valor por defecto para el selector de gravedad"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Escribe un nombre para el nuevo estado","PLACEHOLDER_DAYS_TO_DUE_DATE":"Escribe numero de días para vencimiento"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Escribe un nombre para el nuevo elemento"},"US_STATUS":{"ACTION_ADD_STATUS":"Añadir nuevo estado","IS_ARCHIVED_COLUMN":"Archivada","IS_CLOSED_COLUMN":"Cerrada","WIP_LIMIT_COLUMN":"Límite WIP","PLACEHOLDER_WRITE_NAME":"Escribe un nombre para el nuevo estado"},"MENU":{"PROJECT":"Proyecto","ATTRIBUTES":"Atributos","MEMBERS":"Miembros","PERMISSIONS":"Permisos","INTEGRATIONS":"Integraciones"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Estados","POINTS":"Puntos","PRIORITIES":"Prioridades","SEVERITIES":"Gravedades","TYPES":"Tipos","CUSTOM_FIELDS":"Atributos personalizados","TAGS":"Etiquetas","DUE_DATES":"Vencimiento"},"SUBMENU_ROLES":{"TITLE":"Roles","ACTION_NEW_ROLE":"+ Nuevo Rol","TITLE_ACTION_NEW_ROLE":"Añadir nuevo rol"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"¿Te gustaría ser el nuevo project owner?","PRIVATE":"Privado","ACCEPTED_PROJECT_OWNERNSHIP":"¡Felicitaciones! Usted es ahora el nuevo propietario del proyecto.","REJECTED_PROJECT_OWNERNSHIP":"Ok. Nos pondremos en contacto con el propietario actual del proyecto","ACCEPT":"Aceptar","REJECT":"Rechazar","PROPOSE_OWNERSHIP":"{{owner}}, el dueño del proyecto {{project}} pregunta si es el nuevo dueño del proyecto.","ADD_COMMENT":"¿Te gustaría añadir un comentario para el project owner?","UNLIMITED_PROJECTS":"Sin límite","OWNER_MESSAGE":{"PRIVATE":"Por favor recuerde que puede ser dueño de maximo {{maxProjects}} proyectos privados. Usted tiene actualmente {{currentProjects}} proyectos privados bajo su poder","PUBLIC":"Pro favor recuerde que solo puede ser dueño de maximo {{maxProjects}} proyectos publicos. Actualmente tiene {{currentProjects}} proyectos publicos bajo su poder"},"CANT_BE_OWNED":"en el momento no puede ser el dueño de un proyecto de este tipo. Si desea ser el dueño de este proyecto, por favor contacte al administrador para cambiar la configuracion que le permita ser dueño del proyecto"}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Editar perfil","CLOSED_US":"Historias cerradas","PROJECTS":"Proyectos","PROJECTS_EMPTY":"{{username}} no tiene proyectos todavía","CONTACTS":"Contactos","CONTACTS_EMPTY":"{{username}} no tiene contactos todavía","CURRENT_USER_CONTACTS_EMPTY":"No tienes contactos todavía","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Las personas con las que trabajas en Taiga serán tus contactos automáticamente","TABS":{"ACTIVITY_TAB":"Timeline","ACTIVITY_TAB_TITLE":"Muestra toda la actividad de este usuario","PROJECTS_TAB":"Proyectos","PROJECTS_TAB_TITLE":"Lista todo los proyectos en los que este usuario es miembro","LIKES_TAB":"Likes","LIKES_TAB_TITLE":"Lista todo lo que le gusta a este usuario","VOTES_TAB":"Votos","VOTES_TAB_TITLE":"Lista todos los votos de este usuario","WATCHED_TAB":"Observado","WATCHED_TAB_TITLE":"Lista todos los elementos observados por este usuario","CONTACTS_TAB":"Contactos","CONTACTS_TAB_TITLE":"Lista todos los contactos hechos por este usuario"}},"PROFILE_SIDEBAR":{"TITLE":"Tu perfil","DESCRIPTION":"La gente puede ver aquello que haces y en qué estás trabajando. Añade una buena bio para que puedan ver la mejor versión de tu perfil.","ADD_INFO":"Editar bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Escribe algo...","FILTER_TYPE_ALL":"Todas","FILTER_TYPE_ALL_TITLE":"Mostrar todos","FILTER_TYPE_PROJECTS":"Proyectos","FILTER_TYPE_PROJECTS_TITLE":"Mostrar sólo proyectos","FILTER_TYPE_EPICS":"Épicas","FILTER_TYPE_EPICS_TITLE":"Mostrar sólo épicas","FILTER_TYPE_USER_STORIES":"Historias","FILTER_TYPE_USER_STORIES_TITLE":"Mostrar sólo historias de usuario","FILTER_TYPE_TASKS":"Tareas","FILTER_TYPE_TASKS_TITLE":"Mostrar sólo tareas","FILTER_TYPE_ISSUES":"Peticiones","FILTER_TYPE_ISSUES_TITLE":"Mostrar sólo peticiones","EMPTY_TITLE":"Parece que no se ha encontrado nada."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reordena tus proyectos para ver arriba los que más utilizas.
    Los 10 primeros aparecerán en la lista de proyectos de la barra de navegación de arriba.","PRIVATE":"Proyecto privado","LOOKING_FOR_PEOPLE":"Este proyecto está buscando a gente","FANS_COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{un observador} other{# observadores}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{un miembro} other{# miembros}}","BLOCKED_PROJECT":{"BLOCKED":"Proyecto bloqueado","THIS_PROJECT_IS_BLOCKED":"Este proyecto esta temporalmente bloqueado","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Para desbloquear sus proyectos, contacte al administrador."},"SECTION":{"SEARCH":"Buscar","TIMELINE":"Timeline","EPICS":"Épicas","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Peticiones","WIKI":"Wiki","TEAM":"Equipo","MEETUP":"Meet Up","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Crear proyecto","MANAGE_PROJECTS":"Administrar proyectos","TITLE_CREATE_PROJECT":"Crear proyecto","HELP_TITLE":"Página de Soporte de Taiga","HELP":"Ayuda","HOMEPAGE":"Página de inicio","FEEDBACK_TITLE":"Envíanos tu feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Edita la configuración de tus notificaciones","NOTIFICATIONS":"Notificaciones","VIEW_PROFILE_TITLE":"Ver perfil","VIEW_PROFILE":"Ver perfil","EDIT_PROFILE_TITLE":"Editar tu perfil","EDIT_PROFILE":"Editar Perfil","CHANGE_PASSWORD_TITLE":"Cambiar contraseña","CHANGE_PASSWORD":"Cambiar contraseña","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Descubre los proyectos más relevantes","DISCOVER":"Descubrir"},"LIKE_BUTTON":{"LIKE":"Me gusta","LIKED":"Me gusta","UNLIKE":"Ya no!","BUTTON_TITLE":"Marca o desmarcar como favorito este proyecto","COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Observa este proyecto y define la política de notificación","WATCH":"Observar","WATCHING":"Observando","COUNTER_TITLE":"{total, plural, one{un observador} other{# observadores}}","OPTIONS":{"NOTIFY_ALL":"Recibir todas las notificaciones","NOTIFY_ALL_TITLE":"Recibir todas las notificaciones de este proyecto","NOTIFY_INVOLVED":"Estoy involucrado","NOTIFY_INVOLVED_TITLE":"Recibe notificaciones sólo cuando tú estéß involucrado","UNWATCH":"No observar","UNWATCH_TITLE":"Dejar de observar este proyecto"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contacta con el equipo de proyecto","CONTACT_BUTTON":"Contacta con el proyecto"},"CREATE":{"TITLE":"Crear Proyecto","CHOOSE_TEMPLATE":"¿Que plantilla se ajusta mejor con tu proyecto?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioriza y soluciona tus tareas en ciclos cortos de tiempo.","TEMPLATE_SCRUM_LONGDESC":"Scrum es una metodología ágil, iterativa e incremental, de desarrollo de software para la gestión del desarrollo de productos.\nEl backlog de producto es lo que finalmente será entregado, ordenado en el orden que debe ser entregado. El product backlog se divide en trozos manejables y ejecutables llamados sprints. Cada cierto tiempo el equipo inicia un nuevo sprint y se compromete a entregar un número de user stories del backlog, de acuerdo a la capacidad, habilidades y recursos. El proyecto avanza hasta que el backlog se vacía.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Mantén un flujo constante de tareas independientes","TEMPLATE_KANBAN_LONGDESC":"La metodología Kanban se usa para dividir el proceso de desarrollo (o cualquier tipo de proyecto) en etapas. Una tarjeta de Kanban es como una ficha o un post-it que detalla cada tarea (o user story) en un proyecto para ser completada. El tablero de Kanban se usa para mover cada tarjeta de un estado de progreso al siguiente, y de este modo ayuda a trazar el progreso.","DUPLICATE":"Duplicar proyecto","DUPLICATE_DESC":"Empieza un nuevo proyecto manteniendo tu configuración","IMPORT":"Importar proyecto","IMPORT_DESC":"Importa tu proyecto desde múltiples plataformas a Taiga","INVITE":"Invitar al proyecto","SOLO_PROJECT":"Estarás solo en este proyecto","INVITE_LATER":"(Podrás invitar otros miembros más adelante)","BACK":"Back","MAX_PRIVATE_PROJECTS":"l","MAX_PUBLIC_PROJECTS":"Desafortunadamente, has alcanzado el número máximo de proyectos públicos.\nSi desea aumentar este limite, por favor contacte al administrador.","PUBLIC_PROJECT":"Proyecto público","PRIVATE_PROJECT":"Proyecto privado"},"COMMON":{"DETAILS":"Nuevos detalles del proyecto","PROJECT_TITLE":"Nombre del proyecto","PROJECT_DESCRIPTION":"Descripción del proyecto"},"DUPLICATE":{"TITLE":"Duplicar Proyecto","DESCRIPTION":"Empieza un nuevo proyecto manteniendo tu configuración","SELECT_PLACEHOLDER":"Elije uno de tus proyectos para duplicar"},"IMPORT":{"TITLE":"Importar Proyecto","DESCRIPTION":"Importa tu proyecto desde múltiples plataformas a Taiga","ASYNC_IN_PROGRESS_TITLE":"Nuestros Oompa Loompa están importando tu proyecto","ASYNC_IN_PROGRESS_MESSAGE":"Este proceso puede llevarnos algún tiempo
    Te enviaremos un email cuando esté listo","UPLOAD_IN_PROGRESS_MESSAGE":"Subidos {{uploadedSize}} de {{totalSize}}","ERROR":"Nuestros Oompa Loompas tienen problemas para importar tus datos. Por favor inténtalo nuevamente.","ERROR_TOO_MANY_REQUEST":"Lo sentimos, nuestros Oompa Loompas están muy ocupados en este momento. Por favor inténtalo nuevamente en unos minutos.","ERROR_MESSAGE":"Nuestros Oompa Loompas tienen algunos problemas importando tus datos: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"El fichero '{{fileName}}' ({{fileSize}}) es demasiado pesado para nuestros Oompa Loompas, prueba con uno de menos de ({{maxFileSize}}).","SYNC_SUCCESS":"Tu proyecto se ha importado con éxito.","IMPORT":"Importar","WHO_IS":"Sus tareas serán asignadas a...","WRITE_EMAIL":"O si tu quieres, escribe el email que este usuario usa en Taiga","SEARCH_CONTACT":"O si quieres, busca en tus contactos","WRITE_EMAIL_LABEL":"Escribe el email que este usuario usa en Taiga","ACCEEDE":"Acceder","PROJECT_MEMBERS":"Miembros del proyecto","PROCESS_DESCRIPTION":"Dinos a que usuario de Taiga le quieres asignar las tareas de {{platform}}","MATCH":"¿{{user_external}} y {{user_internal}} son la misma persona?","CHOOSE":"Selecciona un usuario","LINKS":"Enlaces con {{platform}}","LINKS_DESCRIPTION":"¿Quieres mantener el enlace de cada elemento con la tarjeta original en {{platform}}?","WARNING_MAIL_USER":"Tenga en cuenta que si el usuario no tienen cuenta en Taiga no podremos asignarle las tareas.","ASSIGN":"Asignar","PROJECT_SELECTOR":{"NO_RESULTS":"Parece que no se encontro nada con este criterio de busqueda","ACTION_SEARCH":"buscar","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"El proyecto que estas tratando de importar tiene {{members}} miembros incluyéndote a ti, desafortunadamente tu plan actual permite como máximo {{max_memberships}} miembros por proyecto privado. Si quieres aumentar este limite, por favor contacta al administrador.","PROJECT_MEMBERS_DESC_PUBLIC":"El proyecto que estas tratando de importar tiene {{members}} miembros incluyéndote a ti, desafortunadamente tu plan actual permite como máximo {{max_memberships}} miembros por proyecto público. Si quieres aumentar este limite, por favor contacta al administrador.","ACCOUNT_ALLOW_MEMBERS":"Tu cuenta sólo permite {{members}} miembros","PRIVATE_PROJECTS_SPACE":{"TITLE":"Desafortunadamente, su plan actual no permite a los proyectos privados adicionales","DESC":"El proyecto que trata de importar es privado. Desafortunadamente, su plan actual no le permite adicionar mas proyectos privados"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Desafortunadamente, su plan actual no permite adicionar mas proyectos publicos","DESC":"El proyecto que estás intento importar es público. Desafortunadamente, tu plan actual no permite proyectos públicos adicionales."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Su plan actual solo permite un numero maximo de {{max_memberships}} miembros por proyecto privado"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Su plan actual solo permite un maximo de {{max_memberships}} miembros por proyecto publico."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Desafortunadamente tu plan actual no permite proyectos privados adicionales o un incremento de más de {{max_memberships}} miembros por proyecto privado","DESC":"El proyecto que estás intentando importar es privado y tiene {{members}} miembros."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Desafortunadamente su plan actual no le permite adicionar proyectos publicos o un aumento de {{max_memberships}} miembros por proyecto publico","DESC":"El proyecto que estás intentando importar es público y tiene más de {{members}} miembros."}},"IN_PROGRESS":{"TITLE":"Importando Proyecto","DESCRIPTION":"Este proceso puede tardar un ratito, por favor mantén la ventana abierta."},"WARNING":{"TITLE":"Algunas tareas estarán sin asignar","DESCRIPTION":"Todavía hay gente sin identificar. Las tarjetas asignadas a estas personas se quedarán sin asignar. Revisa todos los contactos para que no se pierda esta información.","CHECK":"Verificar contactos"},"TAIGA":{"SELECTOR":"Importa tu proyecto de Taiga"},"TRELLO":{"SELECTOR":"Importa tus tableros de Trello en Taiga","CHOOSE_PROJECT":"Elige el tablero que quieres importar","NO_PROJECTS":"Parece que no tienes tableros en Trello"},"GITHUB":{"SELECTOR":"Importa tus peticiones de proyecto de GitHub","CHOOSE_PROJECT":"Encuentra el proyecto que quieres importar","NO_PROJECTS":"Parece que no tienes proyectos en GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"¿Cómo quieres importar las peticiones en Taiga?","KANBAN_PROJECT":"Como historias de usuario en un proyecto kanban","KANBAN_PROJECT_DESCRIPTION":"ll","SCRUM_PROJECT":"Como historias de usuario en un proyecto scrum","SCRUM_PROJECT_DESCRIPTION":"Después de esto podrás activar el modo kanban","ISSUES_PROJECT":"Como petición ","ISSUES_PROJECT_DESCRIPTION":"No podrás usar tus peticiones en el modo kanban o scrum. Podrás activar el kanban o scrum para las nuevas historias de usuario"},"ASANA":{"SELECTOR":"Importa tu proyecto de Asana y elije cómo gestionarlo","CHOOSE_PROJECT":"Elige el proyecto que quieres importar","NO_PROJECTS":"Parece que no tienes proyectos en Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Las tareas y sub-tareas de tu proyecto se crearán como historias de usuario y tareas en Taiga.","CREATE_AS_KANBAN_DESCRIPTION":"Las tareas y sub-tareas de tu proyecto se crearán como historias de usuario y tareas en Taiga."},"JIRA":{"SELECTOR":"Importa tu proyecto de Jira y elije cómo gestionarlo","HOW_TO_CONFIGURE":"(ayuda de configuración)","CHOOSE_PROJECT":"Elige el proyecto o panel que quieres importar","NO_PROJECTS":"Parece que no tienes proyectos o paneles en Jira","URL":"Tu URL de Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Peticiones","CREATE_AS_SCRUM_DESCRIPTION":"Las peticiones y sub-peticiones de tu proyecto se crearán como historias de usuario y tareas en Taiga.","CREATE_AS_KANBAN_DESCRIPTION":"Las peticiones y sub-peticiones de tu proyecto se crearán como historias de usuario y tareas en Taiga.","CREATE_AS_ISSUES_DESCRIPTION":"¿Qué quieres hacer con las sub-peticiones del proyecto de Jira? (Taiga no posee sub-peticiones)","CREATE_NEW_ISSUES":"Convertir sub-peticiones como nuevas peticiones de Taiga","NOT_CREATE_NEW_ISSUES":"No importar sub-peticiones"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"¿Está seguro que deseas eliminar tu cuenta de Taiga?","CANCEL":"Volver a los ajustes","ACCEPT":"Eliminar cuenta","BLOCK_PROJECT":"Recuerde que todos los proyectos de los cuales usted es dueño serán bloqueados después de eliminar su cuenta. Si no desea que un proyecto sea bloqueado, transfiera la propiedad de cada proyecto a otro usuario antes de eliminar la cuenta."},"DELETE_PROJECT":{"TITLE":"Borrar proyecto","QUESTION":"¿Esta seguro que decea eliminar este proyecto?","SUBTITLE":"Todos los datos del proyecto (historias de usuario, tareas, peticiones, sprints y páginas del wiki) se perderán :-(","CONFIRM":"Si, Estoy realmente seguro"},"ASSIGNED_TO":{"SELECT":"Asignar a...","SEARCH":"Buscar usuarios"},"ADD_MEMBER":{"TITLE":"Nuevo miembro","PLACEHOLDER":"Filtra los usuarios o escribe un email para enviar la invitación","ADD_EMAIL":"Añade un email","REMOVE":"Borrar","INVITE":"Invitar","CHOOSE_ROLE":"Elije un rol","PLACEHOLDER_INVITATION_TEXT":"(Opcional) Añade un texto personalizado a la invitación. Dile algo encantador a tus nuevos miembros ;-)","HELP_TEXT":"Si los usuarios ya están registrado en Taiga, se añadirán automáticamente. De lo contrario recibirán una invitación."},"FEEDBACK":{"TITLE":"Dinos algo...","COMMENT":"...un error, algunas sugerencias, algo cool... o incluso tus peores pesadillas con Taiga","ACTION_SEND":"Envíanos tu feedback"},"SEARCH":{"TITLE":"Busqueda","PLACEHOLDER_SEARCH":"¿Qué es lo que estás buscando?"},"ADD_EDIT_SPRINT":{"TITLE":"Nuevo sprint","PLACEHOLDER_SPRINT_NAME":"nombre del sprint","PLACEHOLDER_SPRINT_START":"Comienzo estimado","PLACEHOLDER_SPRINT_END":"Final Estimado","ACTION_DELETE_SPRINT":"¿Quiéres borrar este sprint?","TITLE_ACTION_DELETE_SPRINT":"borrar sprint","LAST_SPRINT_NAME":"el último sprint es {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"Los cambios no están gurdados. ¿Seguro que quieres cerrar el formulario?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Añadir petición","FILTER_ISSUES":"Filtrar peticiones"},"DELETE_DUE_DATE":{"TITLE":"Borrar fecha de vencimiento","SUBTITLE":"¿Seguro que quieres borrar la fecha de vencimiento?"},"DELETE_SPRINT":{"TITLE":"Borrar sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Quitar relación con Épica","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opcional) Añade un texto personalizado a la invitación. Dile algo encantador a tus nuevos miembros ;-)","PLACEHOLDER_TYPE_EMAIL":"Escribe un email","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Usted esta a punto de alcanzar el maximo numero de miembros permitidos para este proyecto, {{maxMembers}} miembros. Si desea aumentar el limite actual, por favor contacte al administrador.","LIMIT_USERS_WARNING_MESSAGE":"Usted esta a punto de alcanzar el maximo numero de miembros permitidos para este proyecto, {{maxMembers}} miembros."},"LEAVE_PROJECT_WARNING":{"TITLE":"Por desgracia, este proyecto no puede ser dejado sin dueño","CURRENT_USER_OWNER":{"DESC":"Usted es el dueño actual de este proyecto. Antes de salir, tranfiera el dominio de su proyecto a alguien mas.","BUTTON":"Cambiar el dueño del proyecto"},"OTHER_USER_OWNER":{"DESC":"Desafortunadamente, usted no puede eliminar un miembro que es a su vez el dueño actual del proyecto. Primero, por favor asigne un nuevo dueño del proyecto.","BUTTON":"Solicitud del cambio del dueño del proyecto"}},"CHANGE_OWNER":{"TITLE":"¿A quién quiere ser el nuevo dueño del proyecto?","ADD_COMMENT":"Añadir comentario","BUTTON":"Pregunte a este usuario para convertirlo en el nuero dueño del proyecto"},"CONTACT_PROJECT":{"TITLE":"Enviar email a","WARNING":"Los administradores del proyecto recibirán el email","PLACEHOLDER":"Escribe tu mensaje","SEND":"Enviar"},"SET_DUE_DATE":{"TITLE":"Fijar fecha de vencimiento","PLACEHOLDER_DUE_DATE":"Seleccionar fecha de vencimiento","REASON_FOR_DUE_DATE":"Motivo para fijar fecha de vencimiento","PLACEHOLDER_REASON_FOR_DUE_DATE":"¿Por qué esta historia de usuario necesita una fecha de vencimiento?","SUGGESTIONS":{"IN_ONE_WEEK":"En una semana","IN_TWO_WEEKS":"En dos semanas","IN_ONE_MONTH":"En un mes","IN_THREE_MONTHS":"En tres meses"},"TITLE_ACTION_DELETE_DUE_DATE":"Borrar fecha de vencimiento"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Borrar fecha de vencimiento","SUBTITLE_ACTION_DELETE_DUE_DATE":"¿Estás seguro que quieres eliminar fecha de vencimiento de estado {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Enlace a Épica","EXISTING_EPIC":"Épica existente","NEW_EPIC":"Nueva Épica","CHOOSE_PROJECT_FOR_CREATION":"¿Qué es el proyecto?","CHOOSE_PROJECT_FROM":"¿Qué es el proyecto?","SUBJECT":"Asunto","CHOOSE_EPIC":"¿Cuál es la Épica?","FILTER_EPICS":"Filtrar épicas","NO_EPICS_FOUND":"Parece que no se encontro nada con este criterio de busqueda"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Épica {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{taskStatus}}. Descripción: {{taskDescription}}","SECTION_NAME":"Épica","ERROR_UNLINK_RELATED_USERSTORY":"No se ha podido desvincular: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Crear relación con","NEW_USERSTORY":"Nueva historia de usuario","EXISTING_USERSTORY":"Historia de usuario existente","CHOOSE_PROJECT_FOR_CREATION":"Cuál proyecto?","SUBJECT":"Asunto","SUBJECT_BULK_MODE":"Tema (inserción masiva)","CHOOSE_PROJECT_FROM":"¿Cuál proyecto?","CHOOSE_USERSTORY":"¿Cuál historia de usuario?","NO_USERSTORIES":"Este proyecto no tiene historias de usuario todavia. Por favor, seleccione otro proyecto.","NO_USERSTORIES_FOUND":"Parece que no se encontro nada con este criterio de busqueda","FILTER_USERSTORIES":"Filtrar historias de usuario","LIGHTBOX_TITLE_BLOKING_EPIC":"Bloqueo de épica","ACTION_DELETE":"Borrar epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Historia de Usuario {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{userStoryStatus }}. Completado el {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} de {{userStoryTotalTasks}} tareas cerradas). Puntos: {{userStoryPoints}}. Descripción: {{userStoryDescription}}","SECTION_NAME":"Historia de usuario","LINK_TASKBOARD":"Panel de tareas","TITLE_LINK_TASKBOARD":"Ir al panel de tareas","TOTAL_POINTS":"puntos totales","ADD":"+ Añadir una Historia de Usuario","ADD_BULK":"Añadir nuevas Historias de Usuario en bloque","PROMOTED":"Esta historia ha sido promovida desde la petición:","TITLE_LINK_GO_TO_ISSUE":"Ir a petición","TITLE_DELETE_ACTION":"Borrar Historia de Usuario","LIGHTBOX_TITLE_BLOKING_US":"Historia bloqueada","NOT_ESTIMATED":"No estimada","OWNER_US":"Esta Historia de Usuario pertenece a","RELATE_TO_EPIC":"Enlace a Épica","REMOVE_RELATIONSHIP_WITH_EPIC":"Quitar relación a Épica","TRIBE":{"PUBLISH":"Publicar como Gig en la Tribu Taiga","PUBLISH_INFO":"Mas información","PUBLISH_TITLE":"Mas informacion para publicar en la Tribu Taiga","PUBLISHED_AS_GIG":"Historia publicada como Gig en la Tribu Taiga","EDIT_LINK":"Editar link","CLOSE":"Cerrar","SYNCHRONIZE_LINK":"sincronizar con la Tribu Taiga","PUBLISH_MORE_INFO_TITLE":"Necesita a alguien para esta tarea?","PUBLISH_MORE_INFO_TEXT":"

    Si necesitas ayuda con una tarea en particular, puedes crear 'gigs' en Taiga Tribe y recibir ayuda de todo el mundo. Podrás controlar y gestionar el 'gig' disfrutando de una gran comunidad deseosa de contribuir.

    TaigaTribe es el hermano ideal de Taiga. Ambas plataformas pueden vivir separadamente pero creemos que hay mucho poder en usarlas combinadas, por lo que estamos asegurándonos de que la integración entre ambas funcione como un tiro.

    "}},"COMMENTS":{"DELETED_INFO":"Comentario borrado por {{user}}","COMMENTS_COUNT":"{{comments}} Comentarios","OLDER_FIRST":"Mas antiguo primero","RECENT_FIRST":"Mas reciente primero","COMMENT":"Comentar","EDITED_COMMENT":"Editado:","SHOW_HISTORY":"Ver histórico","TYPE_NEW_COMMENT":"Escribe un nuevo comentario aquí","SHOW_DELETED":"Mostrar comentarios eliminados","HIDE_DELETED":"Ocultar comentarios eliminados","DELETE":"Borrar comentario","RESTORE":"Restaurar comentario","HISTORY":{"TITLE":"Actividad"}},"ACTIVITY":{"TITLE":"Actividad","ACTIVITIES_COUNT":"{{activities}} Actividades","TAGS_ADDED":"etiquetas añadidas","TAGS_REMOVED":"Etiquetas borradas:","US_POINTS":"{{role}} puntos","NEW_ATTACHMENT":"nuevo adjunto","DELETED_ATTACHMENT":"adjunto borrado","UPDATED_ATTACHMENT":"actualizar adjunto ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"atributo personalizado creado","UPDATED_CUSTOM_ATTRIBUTE":"atributo personalizado actualizado","BECAME_DEPRECATED":"esta obsoleto","BECAME_UNDEPRECATED":"no esta obsoleto","TEAM_REQUIREMENT":"Requerido por el Equipo","CLIENT_REQUIREMENT":"Requerido por el Cliente","BLOCKED":"Bloqueada","VALUES":{"NOT_SET":"Sin fijar","UNASSIGNED":"sin asignar"},"FIELDS":{"SUBJECT":"asunto","DESCRIPTION":"descripción","PRIORITY":"prioridad","SEVERITY":"gravedad","STATUS":"estado","TYPE":"tipo","ASSIGNED_TO":"asignado a","ASSIGNED_USERS":"usuarios asignados","DUE_DATE":"fecha de vencimiento","MILESTONE":"sprint","COLOR":"color"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"El panel del backlog, con las historias de usuario y sprints del proyecto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Customiza la gráfica de tu backlog","CUSTOMIZE_GRAPH_TEXT":"Para tener una gráfica bonita que te ayude a seguir la evolución del proyecto tienes que fijar los puntos y sprints en la","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Modifica los puntos y sprints a través de la zona de Administración","MOVE_US_TO_CURRENT_SPRINT":"Mover al Sprint en curso","MOVE_US_TO_LATEST_SPRINT":"Mover al Sprint más reciente","EMPTY":"¡El backlog está vacío!","CREATE_NEW_US":"Crear una nueva historia","CREATE_NEW_US_EMPTY_HELP":"Es posible que desees crear una nueva historia de usuario","EXCESS_OF_POINTS":"Exceso de puntos","PENDING_POINTS":"Puntos pendientes","CLOSED_POINTS":"cerrada","COMPACT_SPRINT":"Compactar Sprint","GO_TO_TASKBOARD":"Ir al panel de tareas de {{::name}}","EDIT_SPRINT":"Editar Sprint","TOTAL_POINTS":"total","STATUS_NAME":"Nombre del Estado","SORTABLE_FILTER_ERROR":"No puedes arrastrar historias en el backlog cuando los filtros están en uso","DOOMLINE":"Alcance del proyecto (línea de la fatalidad :-P)","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Puntos","OPTIMAL":"El número de puntos óptimos pendientes para el sprint \"{{sprintName}}\" debería ser de {{value}}","REAL":"El número real de puntos pendientes para el sprint \"{{sprintName}}\" es de {{value}}","INCREMENT_TEAM":"El número de puntos incrementados por requerimientos del equipo para el sprint \"{{sprintName}}\" es de {{value}}","INCREMENT_CLIENT":"El número de puntos incrementados por requerimientos del cliente para el sprint \"{{sprintName}}\" es de {{value}}"},"TAGS":{"TOGGLE":"Cambia la visibilidad de los tags","SHOW":"Mostrar etiquetas","HIDE":"Ocultar etiquetas"},"FORECASTING":{"TITLE":"Previsión de velocidad","BACKLOG":"Mostrar el backlog","NEW_SPRINT":"Historias de Usuarios candidatas para el próximo sprint, basado en tu velocidad. Haga clic para crear un nuevo sprint.","CURRENT_SPRINT":"Historias de Usuarios candidatas para el sprint, basado en tu velocidad. Haga clic para añadirlas al sprint en curso."},"TABLE":{"COLUMN_US":"Historias de Usuario","TITLE_COLUMN_POINTS":"Seleccionar vista por Rol"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"puntos
    totales","COMPLETED_POINTS":"puntos
    completados","OPEN_TASKS":"tareas
    abiertas","CLOSED_TASKS":"tareas
    cerradas","IOCAINE_DOSES":"dosis de
    iocaína","SHOW_STATISTICS_TITLE":"Ver estadísticas","TOGGLE_BAKLOG_GRAPH":"Ver/Ocultar gráfica de burndown","POINTS_PER_ROLE":"Puntos por rol"},"SUMMARY":{"PROJECT_POINTS":"puntos
    proyecto","DEFINED_POINTS":"puntos
    definidos","CLOSED_POINTS":"puntos
    cerrados","POINTS_PER_SPRINT":"puntos /
    sprint"},"FILTERS":{"TOGGLE":"Cambia la visibilidad de los filtros","HIDE":"Ocultar filtros","SHOW":"Ver Filtros"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Panel de Tareas del Sprint","TITLE_LINK_TASKBOARD":"Ir al panel de tareas de \"{{name}}\"","EMPTY":"Todavía no hay Sprints","WARNING_EMPTY_SPRINT_ANONYMOUS":"Este sprint no tiene historias de usuario","WARNING_EMPTY_SPRINT":"Arrastra aquí las historias desde tu backlog para comenzar un nuevo sprint","TITLE_ACTION_NEW_SPRINT":"+ Nuevo sprint","TEXT_ACTION_NEW_SPRINT":"Es posible que desees crear un nuevo sprint para tu proyecto","ACTION_SHOW_CLOSED_SPRINTS":"Mostrar sprints cerrados","ACTION_HIDE_CLOSED_SPRINTS":"Ocultar sprints cerrados"}},"ERROR":{"TEXT1":"Algo no va bien y nuestros Oompa Loompas están trabajando para resolverlo.","NOT_FOUND":"No encontrado","NOT_FOUND_TEXT":"Error 404. La página que estás buscando ya no existe. Puedes volver a la página de inicio de TAIGA y ver si encuentras lo que estás buscando. ","PERMISSION_DENIED":"Permiso denegado","PERMISSION_DENIED_TEXT":"No tienes permisos para acceder a esta página.","VERSION_ERROR":"Algún compañero se te ha adelantado y ha actualizado esto, nuestros Oompa Loompas no pueden aplicar tus cambios. Por favor, recarga la página y aplícalos nuevamente (se perderán)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (desde el {{startDate}} al {{endDate}}) de {{projectName}}. Completado el {{completedPercentage}}% ({{completedPoints}} de {{totalPoints}} puntos). {{openTasks}} de {{totalTasks}} tareas abiertas.","SECTION_NAME":"Panel de Tareas","TITLE_ACTION_ADD":"Añade una nueva tarea","TITLE_ACTION_ADD_BULK":"Añadir nuevas tareas en bloque","TITLE_ACTION_ADD_ISSUE":"Agregar nueva petición","TITLE_ACTION_ADD_ISSUE_BULK":"Agrega nuevas peticiones masivas","TITLE_ACTION_ASSIGN":"Asignar tarea","PLACEHOLDER_CARD_TITLE":"Esto podría ser una tarea","PLACEHOLDER_CARD_TEXT":"Divide las historias en tareas para controlarlas de manera separada","TABLE":{"COLUMN":"Historia de usuario","TITLE_ACTION_FOLD":"Plegar columna","TITLE_ACTION_UNFOLD":"Desplegar columna","TITLE_ACTION_FOLD_ROW":"Plegar Fila","TITLE_ACTION_UNFOLD_ROW":"Desplegar Fila","FIELD_POINTS":"puntos","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Peticiones de Sprint"},"CHARTS":{"XAXIS_LABEL":"Días","YAXIS_LABEL":"Puntos","OPTIMAL":"El número de puntos óptimos pendientes para el día {{formattedDate}} debería ser de {{roundedValue}}","REAL":"El número de puntos pendientes para el día {{formattedDate}} es de {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tarea {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{taskStatus }}. Descripción: {{taskDescription}}","SECTION_NAME":"Tarea","LINK_TASKBOARD":"Panel de tareas","TITLE_LINK_TASKBOARD":"Ir al panel de tareas","PLACEHOLDER_SUBJECT":"Escribe el asunto de la nueva tarea","TITLE_SELECT_STATUS":"Nombre del estado","OWNER_US":"Esta tarea pertenece a\n","TITLE_LINK_GO_OWNER":"Ir a historia de usuario","TITLE_DELETE_ACTION":"Eliminar Tarea","LIGHTBOX_TITLE_BLOKING_TASK":"Tarea bloqueada","FIELDS":{"IS_IOCAINE":"Tiene iocaína"},"TITLE_ACTION_IOCAINE":"¿Te sientes fuera de tu zona de confort en una tarea? Asegúrate de que los demás están al tanto de ello, marca el check de la Iocaína al editar una tarea. Igual eu era posible llegar a ser inmune a este veneno mortal a base de consumir pequeñas dosis a lo largo del tiempo, es posible conseguir mejor en lo que estás haciendo si afrontas de vez en cuando esta clase de retos!"},"NOTIFICATION":{"OK":"¡Todo Ok!","WARNING":"¡Cáspitas!, algo no ha ido bien...","WARNING_TEXT":"Nuestros Oompa Loompas están tristes, ¡Tus cambios no fueron guardados!","SAVED":"¡Nuestros Oompa Loompas guardaron todos tus cambios!","CLOSE":"Cerrar notificación","MAIL":"Notificaciones Por Mail","DESKTOP":"Notificaciones de escritorio usando alertas de navegador","ASK_DELETE":"¿Esta seguro que desea eliminar?"},"CANCEL_ACCOUNT":{"TITLE":"Cancelar tu cuenta de usuario","SUBTITLE":"Sentimos mucho que abandones nuestra taiga, esperamos que hayas disfrutado de tu estancia :)","PLACEHOLDER_INPUT_TOKEN":"token de cancelación de cuenta","ACTION_LEAVING":"¡Sí, me largo!","SUCCESS":"Nuestros Oompa Loompas eliminaron tu cuenta"},"CHANGE_EMAIL_FORM":{"TITLE":"Cambiar tu email","SUBTITLE":"̀¡Un click más y tu email se actualizará!","PLACEHOLDER_INPUT_TOKEN":"token de cambio de email","ACTION_CHANGE_EMAIL":"Cambiar email","SUCCESS":"Nuestros Oompa Loompas actualizaron tu correo"},"ISSUES":{"PAGE_TITLE":"Peticiones - {{projectName}}","PAGE_DESCRIPTION":"El panel de peticiones del proyecto {{projectName}}: {{projectDescription}}\n","SECTION_NAME":"Petición","ACTION_NEW_ISSUE":"+ NUEVA PETICIÓN","ACTION_PROMOTE_TO_US":"Promover a Historia de Usuario","ACTION_ATTACH_SPRINT":"Unir petición a Sprint","ACTION_DETACH_SPRINT":"Separar petición de Sprint","PROMOTED":"Esta petición ha sido promovida a la historia:","EXTERNAL_REFERENCE":"Esta petición ha sido creada a partir de ","GO_TO_EXTERNAL_REFERENCE":"Ir al origen","ACTION_DELETE":"Borrar petición","LIGHTBOX_TITLE_BLOKING_ISSUE":"Petición bloqueada","LINK_TASKBOARD":"Panel de tareas","TITLE_LINK_TASKBOARD":"Ir al panel de tareas","FILTER_SPRINTS":"Filtrar Sprints","CHOOSE_SPRINT":"¿Cuál Sprint?","FIELDS":{"PRIORITY":"Prioridad","SEVERITY":"Gravedad","TYPE":"Tipo"},"FILTER_ISSUES":"Filtrar peticiones","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Separar petición de Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Unir petición a Sprint","MESSAGE":"Esta petición actualmente está unida al sprint {{ oldSprintName }}. Estás a punto de quitarla del sprint y unirla al sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promover esta petición a una nueva historia de usuario","MESSAGE":"¿Está seguro de que desea crear una nueva Historia de Usuario a partir de esta Petición?"},"TABLE":{"COLUMNS":{"TYPE":"Tipo","SEVERITY":"Gravedad","PRIORITY":"Prioridad","SUBJECT":"Asunto","VOTES":"Votos","STATUS":"Estado","MODIFIED":"Modificado","ASSIGNED_TO":"Asignado a"},"TITLE_ACTION_CHANGE_STATUS":"Cambio de estado","TITLE_ACTION_ASSIGNED_TO":"Asignado a","BLOCKED":"Bloqueada","EMPTY":{"TITLE":"No hay peticiones a reportar :-)","SUBTITLE":"¿Ha encontrado una petición?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Petición {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{issueStatus }}. Tipo: {{issueType}}, Prioridad: {{issuePriority}}. Gravedad: {{issueSeverity}}. Descripción: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"El panel Kanban, con las historias de usuario del proyecto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Plegar columna","TITLE_ACTION_UNFOLD":"Desplegar columna","TITLE_ACTION_ADD_US":"Añadir Nueva Historia de Usuario","TITLE_ACTION_ADD_BULK":"Añadir nuevas en bloque","ACTION_SHOW_ARCHIVED":"Ver archivados","ACTION_HIDE_ARCHIVED":"Ocultar archivados","HIDDEN_USER_STORIES":"Las historias de usuario en este estado están ocultas por defecto","PLACEHOLDER_CARD_TITLE":"Estas son tus Historias de Usuario","PLACEHOLDER_CARD_TEXT":"Las historias pueden tener tareas para separar los requerimientos"},"SEARCH":{"PAGE_TITLE":"Buscar - {{projectName}}","PAGE_DESCRIPTION":"Busca cualquier cosa: historias de usuario, peticiones, tareas o páginas del wiki en el proyecto {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Épicas","FILTER_USER_STORIES":"Historias de Usuario","FILTER_ISSUES":"Peticiones","FILTER_TASKS":"Tareas","FILTER_WIKI":"Páginas del Wiki","PLACEHOLDER_SEARCH":"Buscar...","TITLE_ACTION_SEARCH":"buscar","EMPTY_TITLE":"Parece que no se ha encontrado nada con tus criterios de búsqueda.","EMPTY_DESCRIPTION":"Prueba con otra pestaña de las de arriba o busca de nuevo"},"TEAM":{"PAGE_TITLE":"Equipo - {{projectName}}","PAGE_DESCRIPTION":"EL panel de equipo, para mostrar a todos los miembros del proyecto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Equipo","PLACEHOLDER_INPUT_SEARCH":"Buscar por nombre completo...","COLUMN_MR_WOLF":"Sr. Lobo","EXPLANATION_COLUMN_MR_WOLF":"Peticiones cerradas","COLUMN_IOCAINE":"Bebedor de Iocaína","EXPLANATION_COLUMN_IOCAINE":"Dósis de iocaína ingeridas","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Páginas del Wiki editadas","COLUMN_BUG_HUNTER":"Cazador de Bugs","EXPLANATION_COLUMN_BUG_HUNTER":"Peticiones reportadas","COLUMN_NIGHT_SHIFT":"Turno de noche","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tareas cerradas","COLUMN_TOTAL_POWER":"Potencia Total","EXPLANATION_COLUMN_TOTAL_POWER":"Puntos Totales","SECTION_TITLE_TEAM":"Equipo >","SECTION_FILTER_ALL":"Todo","CONFIRM_LEAVE_PROJECT":"¿Esta seguro que desea dejar el proyecto?","ACTION_LEAVE_PROJECT":"Abandonar este proyecto"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Tamaño Max.: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Configuración de Usuario","USER_PROFILE":"Perfil de usuario","CHANGE_PASSWORD":"Cambiar contraseña","EMAIL_NOTIFICATIONS":"Notificaciones por email","DESKTOP_NOTIFICATIONS":"Notificaciones de escritorio","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Notificaciones de escritorio","SECTION_NAME":"Notificaciones por Email","COLUMN_PROJECT":"Proyecto","COLUMN_RECEIVE_ALL":"Recibir Todo","COLUMN_ONLY_INVOLVED":"Estoy involucrado","COLUMN_NO_NOTIFICATIONS":"Sin notificaciones","OPTION_ALL":"Todas","OPTION_INVOLVED":"Involucrado","OPTION_NONE":"Ninguna"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Proyecto","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Proyecto"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Usar imagen por defecto","ACTION_DELETE_ACCOUNT":"Elimina cuenta de Taiga","ACTION_DOWNLOAD_PROFILE":"Descarga el perfil de Taiga","CHANGE_EMAIL_SUCCESS":"¡Revisa tu bandeja de entrada!
    Hemos enviado un mail a tu cuenta
    con instrucciones para establecer tu nueva dirección","CHANGE_PHOTO":"Cambiar foto","FIELD":{"USERNAME":"Nombre de usuario","EMAIL":"Correo","FULL_NAME":"Nombre completo","PLACEHOLDER_FULL_NAME":"Indica tu nombre completo (p. e. Íñigo Montoya)","BIO":"Bio (max. 210 caracteres)","PLACEHOLDER_BIO":"Dinos algo acerca de ti","LANGUAGE":"Idioma","LANGUAGE_DEFAULT":"- usar idioma por defecto -","THEME":"Tema","THEME_DEFAULT":"-- usar tema por defecto --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"última edición el {{lastModifiedDate}} ({{totalEditions}} ediciones en total) Contenido: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Eliminar esta página del wiki","DELETE_LIGHTBOX_TITLE":"Eliminar Página del Wiki","DELETE_LINK_TITLE":"Eliminar enlace de la Wiki","NAVIGATION":{"HOME":"Principal","SECTION_NAME":"MARCADORES","ACTION_ADD_LINK":"Añadir marcador","ALL_PAGES":"Todas las páginas de la wiki"},"SUMMARY":{"TIMES_EDITED":"veces
    editada","LAST_EDIT":"última
    edición","LAST_MODIFICATION":"ultima modificación"},"SECTION_PAGES_LIST":"Todas","PAGES_LIST_COLUMNS":{"TITLE":"Título","EDITIONS":"Ediciones","CREATED":"Creado","MODIFIED":"Modificado","CREATOR":"Creador","LAST_MODIFIER":"Ultimo modificador"}},"HINTS":{"SECTION_NAME":"Consejo","LINK":"Si quieres saber como funciona visita nuestra página de soporte","LINK_TITLE":"Visita nuestra página de soporte","HINT1_TITLE":"¿Sabes que puedes importar y exportar proyectos?","HINT1_TEXT":"Esto permite extraer todos tus datos para moverlos de una instancia de Taiga a otra.\n","HINT2_TITLE":"¿Sabías que puedes crear atributos personalizados?","HINT2_TEXT":"Los equipos ahora pueden crear atributos personalizados como un medio flexible para introducir datos específicos útiles para su flujo de trabajo particular","HINT3_TITLE":"Reordenar tus proyectos para facilitar el acceso a los más relevantes para ti","HINT3_TEXT":"Los 10 primeros proyectos aparecerán en el listado del acceso directo de la barra superior.","HINT4_TITLE":"¿Olvidaste lo que estabas trabajando?","HINT4_TEXT":"No te preocupes, en el dashboard encontrarás las tareas, peticiones e historias de usuario abiertas en el orden en el que trabajste en ellas."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} ha subido un nuevo adjunto en {{obj_name}}\n","US_CREATED":"{{username}} ha creado una nueva historia {{obj_name}} en {{project_name}}","ISSUE_CREATED":"{{username}} ha creado una nueva petición {{obj_name}} en {{project_name}}","TASK_CREATED":"{{username}} ha creado una nueva tarea {{obj_name}} en {{project_name}}","TASK_CREATED_WITH_US":"{{username}} ha creado una nueva tarea {{obj_name}} en {{project_name}} que proviene de la historia {{us_name}}","WIKI_CREATED":"{{username}} ha creado una nueva página de wiki {{obj_name}} en {{project_name}}\n","MILESTONE_CREATED":"{{username}} ha creado un nuevo sprint {{obj_name}} en {{project_name}}","EPIC_CREATED":"{{username}} ha creado una nueva épica {{obj_name}} en {{project_name}}.","EPIC_RELATED_USERSTORY_CREATED":"{{username}} ha relacionado la historia de usuario {{related_us_name}} con la épica {{epic_name}} en {{project_name}}.","NEW_PROJECT":"{{username}} creó el proyecto {{project_name}}","MILESTONE_UPDATED":"{{username}} ha actualizado el sprint {{obj_name}}","US_UPDATED":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la historia {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la historia {{obj_name}} a {{new_value}}","US_UPDATED_POINTS":"{{username}} ha actualizado los puntos de '{{role_name}}' de la historia {{obj_name}} a {{new_value}}","ISSUE_UPDATED":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la petición {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la petición {{obj_name}} a {{new_value}}","TASK_UPDATED":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} a {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} a {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} que proviene de la historia {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la tarea {{obj_name}} que pertenece a la historia {{us_name}} a {{new_value}}","WIKI_UPDATED":"{{username}} ha actualizado la página del wiki {{obj_name}}","EPIC_UPDATED":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la épica {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} ha actualizado el atrubuto \"{{field_name}}\" de la épica {{obj_name}} a {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} ha actualizado el atributo \"{{field_name}}\" de la épica {{obj_name}} a ","NEW_COMMENT_US":"{{username}} ha añadido un comentado en la historia {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} ha añadido un comentado en la petición {{obj_name}}","NEW_COMMENT_TASK":"{{username}} ha añadido un comentado en la tarea {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} ha comentado en la épica {{obj_name}}","NEW_MEMBER":"{{project_name}} tiene un nuevo miembro","US_ADDED_MILESTONE":"{{username}} ha añadido la historia {{obj_name}} a {{sprint_name}}","US_MOVED":"{{username}} ha movido la historia {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} ha añadido la historia {{obj_name}} al backlog","BLOCKED":"{{username}} ha bloqueado {{obj_name}}","UNBLOCKED":"{{username}} ha desbloqueado {{obj_name}}","NEW_USER":"{{username}} se ha unido a Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Petición","TASK":"Tarea"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"Al crear una nueva cuenta, acepta nuestras condiciones de servicio y nuestra política de privacidad.","GDPR_ANNOUNCEMENT_TITLE":"Reglamento General de Protección de Datos (RGPD)","GDPR_ANNOUNCEMENT_DESCRIPTION":"Lo viste venir, cierto? Actualiza a nuestros Términos de Servicio","GDPR_ANNOUNCEMENT_INFOLINK":"Por favor lee nuestro anuncio aquí"},"EXTERNAL_APP":{"PAGE_TITLE":"Una aplicación externa requiere autenticación","PAGE_DESCRIPTION":"Una aplicación externa requiere autenticación","AUTHORIZATION_REQUEST":"¿Autoriza {{aplicación}} para que utilice tu cuenta de Taiga?","LOGIN_WITH_ANOTHER_USER":"Ingresar con otro usuario","AUTHORIZE_APP":"Autorizar aplicación","CANCEL":"Cancelar"},"JOYRIDE":{"NAV":{"NEXT":"Siguiente","BACK":"Back","SKIP":"Saltar paso","DONE":"Hecha"},"DASHBOARD":{"STEP1":{"TITLE":"Su proyecto","TEXT":"¡Bienvenido! Aquí encontrarás los proyectos en los que participas."},"STEP2":{"TITLE":"Trabajando en","TEXT":"Aquí encontrarás las Historias de Usuario, Tareas y Peticiones en las que estás trabajando."},"STEP3":{"TITLE":"Observando","TEXT1":"Y aquí encontraras aquellas de tus proyectos sobre las que quieres estar informado.","TEXT2":"Ya estás trabajando con Taiga ;)"},"STEP4":{"TITLE":"Comencemos","TEXT1":"Puedes comenzar creando tu primer proyecto en Taiga","TEXT2":"Buena suerte!"}},"BACKLOG":{"STEP1":{"TITLE":"Resumen del proyecto","TEXT1":"Aquí verás el estado de tu proyecto.","TEXT2":"Puedes cambiar todos los ajustes del proyecto a través de la zona de administración."},"STEP2":{"TITLE":"Product backlog","TEXT":"El backlog es la lista de requerimientos (Historias de Usuario) del proyecto. Aquí es donde planificarás tus sprints"},"STEP3":{"TITLE":"Sprints","TEXT":"Los sprints son periodos cortos de tiempo (normalmente de 2 semanas) durante los cuales un trabajo específico tiene que ser completado y entregado"},"STEP4":{"TITLE":"Historias de Usuario","TEXT":"Estos son los requerimientos de alto nivel. Puedes añadirlos al backlog y arrastrarlos al sprint en el que deban ser completados"}},"KANBAN":{"STEP1":{"TITLE":"Customiza to workflow","TEXT":"Fila las columnas que necesites para asociar los estados the tu workflow en la zona de administración."},"STEP2":{"TITLE":"Historias de usuario y tareas","TEXT":"Las historias de usuario son los requerimientos de alto nivel. Puedes arrastrarlos a las diferentes columnas."},"STEP3":{"TITLE":"Añadir Historias de Usuario","TEXT1":"Puede que quieras añadir una sóla Historia de Usuario (add US icon) o un grupo de ellas (bulk icon)","TEXT2":"Buena suerte!"}}},"DISCOVER":{"PAGE_TITLE":"Descubre proyectos - Taiga","PAGE_DESCRIPTION":"Directorio de búsqueda de Proyectos Públicos en Taiga. Explora los backlogs, timelines, peticiones y equipos. Echa un vistazo a los proyectos que más gustan o más activos. Filtrar por Kanban o Scrum.","DISCOVER_TITLE":"Descubre proyectos","DISCOVER_SUBTITLE":"{projects, plural, one{Un proyecto público por descubrir} other{# proyectos público por descubrir}}\n","MOST_ACTIVE":"Más activos","MOST_ACTIVE_EMPTY":"No hay proyectos con actividad todavía","MOST_LIKED":"Favoritos","MOST_LIKED_EMPTY":"No hay proyectos marcados como FAVORITOS todavía.","VIEW_MORE":"Ver más","FEATURED":"Proyectos Destacados","EMPTY":"No hay proyectos que mostrar para estos criterios de búsqueda.
    ¡Inténtalo de nuevo!","FILTERS":{"ALL":"Todas","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Buscando a gente","WEEK":"Última semana","MONTH":"Último mes","YEAR":"Último año","ALL_TIME":"Todos","CLEAR":"Borrar filtros"},"SEARCH":{"PAGE_TITLE":"Buscar - Descubre proyectos - Taiga","PAGE_DESCRIPTION":"Directorio de búsqueda de Proyectos Públicos en Taiga. Explora los backlogs, timelines, peticiones y equipos. Echa un vistazo a los proyectos que más gustan o más activos. Filtrar por Kanban o Scrum.","INPUT_PLACEHOLDER":"Escribe algo...","ACTION_TITLE":"Buscar","RESULTS":"Resultados de búsqueda"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-fa.json b/dist/v-1549282893552/locales/taiga/locale-fa.json new file mode 100644 index 0000000..2a2c374 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-fa.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"بله","NO":"خیر","OR":"یا","I_GET_IT":"اوکی گرفتم","LOADING":"در حال بارگذاری ...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"ذخیره کردن","CANCEL":"لغو","ACCEPT":"پذیرفتن","DELETE":"حذف","UNLINK":"حذف پیوند","CREATE":"ایجاد","ADD":"اضافه کردن","COPY_TO_CLIPBOARD":"کپی کردن در کلیپ‌بورد","COPIED_TO_CLIPBOARD":"متن در کلیپ‌بورد کپی شد","EDIT":"ویرایش","DRAG":"درگ","TAG_LINE":"ابزار سریع، رایگان و متن‌باز مدیریت پروژه‌ی شما","TAG_LINE_2":"علاقه‌مندی به پروژه‌ی شما","BLOCK":"مسدود کردن","BLOCK_TITLE":"مسدود کردن این مورد به عنوان مثال در صورتی که وابستگی‌هایی دارد که مطلوب نیست.","BLOCKED":"مسدود شده","UNBLOCK":"حذف مسدودسازی","UNBLOCK_TITLE":"این آیتم را از حالت مسدود خارج کن","BLOCKED_NOTE":"چرا این آیتم مسدود شده است؟","BLOCKED_REASON":"لطفاً علت را توضیح دهید","CREATED_BY":"ایجاد شده توسط {{fullDisplayName}}","CLOSE":"بستن","GO_HOME":"بازگشت به خانه","PLUGINS":"پلاگین","ONE_ITEM_LINE":"در هر خط یک آیتم ...","NEW_BULK":"اضافه کردن گروهی جدید","SUBTASKS":"Subtasks","PREVIOUS":"قبلی","NEXT":"بعدی","LOGOUT":"خروج","EXTERNAL_USER":"کاربر خارجی","GENERIC_ERROR":"یکی از اومپا لومپاهای ما می‌گوید {{error}}.","IOCAINE_TEXT":"این عضو نگران تکمیل این وظیفه است. با کمک شما تدریجاً توانمندتر می‌شود و در حال حاضر به توجه بیشتری نیاز دارد","CLIENT_REQUIREMENT":"نیازمندی‌های مشتری، نیازمندی‌های جدیدی است که قبلاً موجود نبوده و قرار است بخشی از پروژه باشد","TEAM_REQUIREMENT":"لازمه‌های تیم به لازمه‌های گفته می‌شود که باید در پروژه وجود داشته باشید اما هزینه‌ای برای مشتری ندارد","OWNER":"مالکیت پروژه","CAPSLOCK_WARNING":"مراقب باشید! در حال تایپ کردن حروف بزرگ هستید و این فیلد نسبت به بزرگی و کوچکی حروف حساس است.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"آیا مطمئن هستید که می‌خواهید حالت ویرایش را ببندید؟","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"به خاطر داشته باشید که اگر حالت ویرایش را قبل از ذخیره کردن تغییرات ببندید، همه‌ی تغییرات از بین می‌رود","RELATED_USERSTORIES":"استوری‌های کاربری مرتبط","CARD":{"ASSIGN_TO":"اختصاص یافته به","EDIT":"ویرایش کارت","DELETE":"حذف کارت","DELETE_ISSUE":"حذف موضوع","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"مقدار نامعتبر است.","TYPE_EMAIL":"می‌بایست ایمیل معتبر باشد","TYPE_URL":"می‌بایست URL معتبر باشد","TYPE_URLSTRICT":"می‌بایست لینک معتبر باشد","TYPE_NUMBER":"این مقدار می‌بایست عددی معتبر باشد.","TYPE_DIGITS":"این مقدار می‌بایست عددی باشد","TYPE_DATEISO":"این مقدار می‌بایست تاریخی معتبر باشد (سال-ماه-روز).","TYPE_ALPHANUM":"این مقدار می‌بایست غیرعددی باشد","TYPE_PHONE":"این مقدار می‌بایست یک شماره تلفن معتبر باشد","NOTNULL":"این مقدار نمی‌تواند خالی باشد","NOT_BLANK":"این مقدار نمی‌تواند خالی باشد","REQUIRED":"ضروری","REGEXP":"به نظر می‌رسد که این مقدار نامعتبر است","MIN":"این مقدار می‌بایست بزرگ‌تر یا مساوی %s باشد.","MAX":"این مقدار می‌بایست کوچک‌تر یا مساوی %s باشد.","RANGE":"این مقدار می‌بایست بین %s و %s باشد.","MIN_LENGTH":"این مقدار بسیار کوتاه است. می‌بایست حداقل %s حرف داشته باشد.","MAX_LENGTH":"این مقدار بیش از حد طولانی است. می‌بایست حداکثر %s حرف داشته باشد.","RANGE_LENGTH":"طول این مقدار نامعتبر است. می‌بایست بین %s و %s حرف داشته باشد.","MIN_CHECK":"حداقل %s مورد انتخاب کنید.","MAX_CHECK":"می‌بایست %s انتخاب یا کمتر داشته باشید.","RANGE_CHECK":"می‌بایست بین %s الی %s انتخاب داشته باشید.","EQUAL_TO":"این مقدار می‌بایست یکسان باشد","LINEWIDTH":"احتمالاً یک یا چند خط بیش از حد طولانی است. سعی کنید کمتر از %s حرف داشته باشد.","PIKADAY":"فرمت تاریخ نامعتبر، لطفاً از فرمت روز ماه سال (مثل 23 مارس 1984) استفاده کنید"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"ما قبلی","NEXT_MONTH":"ماه بعدی","MONTHS":{"JAN":"ژانویه (دی)","FEB":"فوریه (بهمن)","MAR":"مارس (اسفند)","APR":"آوریل (فروردین)","MAY":"می (اردیبهشت)","JUN":"خرداد","JUL":"جولای (تیر)","AUG":"آگوست (مرداد)","SEP":"سپتامبر (شهریور)","OCT":"اکتوبر (مهر)","NOV":"نوامبر (آبان)","DEC":"دسامبر (آذر)"},"WEEK_DAYS":{"SUN":"یکشنبه","MON":"دوشنبه","TUE":"سه‌شنبه","WED":"چهارشنبه","THU":"پنج‌شنبه","FRI":"جمعه","SAT":"شنبه"},"WEEK_DAYS_SHORT":{"SUN":"یکشنبه","MON":"دوشنبه","TUE":"سه‌شنبه","WED":"چهارشنبه","THU":"پنج‌شنبه","FRI":"جمعه","SAT":"شنبه"}},"SEE_USER_PROFILE":"مشاهده کردن پروفایل {{username }}","USER_STORY":"استوری کاربر","TASK":"وظیفه","ISSUE":"موضوع","EPIC":"Epic","TAGS":{"PLACEHOLDER":"برچسبی وارد کنید","DELETE":"حذف برچسب","ADD":"اضافه کردن برچسب"},"DESCRIPTION":{"EMPTY":"فواصل خالی خسته‌کننده است ... کمی توضیح دهید ...","NO_DESCRIPTION":"بدون توضیح"},"FIELDS":{"SUBJECT":"موضوع","NAME":"ام","URL":"لینک","DESCRIPTION":"وضیحات","VALUE":"ارزش","SLUG":"نام کوتاه","COLOR":"رنگ","IS_CLOSED":"آیا بسته شده؟","STATUS":"عیت","TYPE":"نوع","SEVERITY":"اهمیت","PRIORITY":"اولویت","ASSIGNED_TO":"اختصاص یافته به","ASSIGNED_USERS":"کاربران اختصاص یافته","POINTS":"امتیاز","IS_BLOCKED":"مسدود شده است","REF":"ریفرنس","VOTES":"رأی","SPRINT":"اسپرینت","DUE_DATE":"موعد تحویل","DUE_DATE_REASON":"دلیل موعد تحویل"},"ROLES":{"ALL":"همه"},"ASSIGNED_TO":{"NOT_ASSIGNED":"محول نشده","ASSIGN":"تخصیص","DELETE_ASSIGNMENT":"حذف موارد محوله","REMOVE_ASSIGNED":"حذف امور محوله","TOO_MANY":"... تعداد کاربر زیاد است، فیلتر کنید","CONFIRM_UNASSIGNED":"آیا مطمئن هستید که می‌خواهید آن را آزاد بگذارید؟","TITLE_ACTION_EDIT_ASSIGNMENT":"ویرایش امور محوله","SELF":"اختصاص به من"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"تنظیم موعد تحویل"},"ASSIGNED_USERS":{"ADD":"انتخاب کاربر اختصاص یافته","ADD_ASSIGNED":"اضافه کردن اختصاص یافته","TITLE_LIGHTBOX_DELETE_ASSIGNED":"حذف اختصاص یافته..."},"STATUS":{"CLOSED":"بسته‌شده","OPEN":"باز کردن"},"WATCHERS":{"WATCHERS":"بررسی‌کنندگان","ADD":"اضافه کردن بررسی‌کننده","TITLE_ADD":"اضافه کردن یک عضو پروژه به لیست بررسی‌کنندگان","DELETE":"حذف بررسی‌کننده","TITLE_LIGHTBOX_DELETE_WARTCHER":"حذف بررسی‌کننده..."},"WATCH_BUTTON":{"WATCH":"نظارت","WATCHING":"در حال بررسی","UNWATCH":"خروج از نظارت","WATCHERS":"بررسی‌کنندگان","BUTTON_TITLE":"بررسی یا عدم بررسی این آیتم","COUNTER_TITLE":"{total, plural, one{یک بررسی کننده} other{#بررسی کنندگان}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"رأی مثبت یا منفی برای این آیتم","COUNTER_TITLE":"{total, plural, one{یک رای} other{# آراء}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"ویژگی‌های سفارشی","SAVE":"ذخیره کردن ویژگی سفارشی","EDIT":"ویرایش ویژگی سفارشی","DELETE":"حذف خصوصیت سفارشی","CONFIRM_DELETE":"به خاطر داشته باشید که تمام مقادیر در این ویژگی سفارشی حذف خواهند شد.\nآیا مطمئن هستید؟"},"FILTERS":{"INPUT_PLACEHOLDER":"موضوع یا ریفرنس","TITLE_ACTION_FILTER_BUTTON":"جست‌وجو","TITLE":"فیلترها","TITLE_ACTION_SEARCH":"جست‌وجو","ACTION_SAVE_CUSTOM_FILTER":"ذخیره به عنوان فیلتر سفارشی","PLACEHOLDER_FILTER_NAME":"نام فیلتر را وارد کرده و اینتر را فشار دهید","APPLIED_FILTERS_NUM":"فیلترهای اعمال‌شده","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"نوع","STATUS":"عیت","SEVERITY":"اهمیت","PRIORITIES":"اولویت‌ها","TAGS":"برچسب‌ها","ASSIGNED_TO":"اختصاص یافته به","ASSIGNED_USERS":"کاربران اختصاص یافته","ROLE":"قش","CREATED_BY":"ایجاد توسط","CUSTOM_FILTERS":"فیلترهای سفارشی","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"قطعه کد","DB_CLICK":"برای ویرایش دبل‌کلیک کنید","SELECT_LANGUAGE_PLACEHOLDER":"انتخاب زبان","SELECT_LANGUAGE_REMOVE_FORMATING":"حذف فرمت","OUTDATED":"شخصی دیگری زمانی که شما مشغول ویرایش بودید، تغییراتی داده است. نسخه‌ی جدید را در تب فعالیت‌ها بررسی کنید و سپس تغییرات خود را ذخیره کنید","MARKDOWN_HELP":"راهنمایی علامت‌گذاری سینتکس‌ها"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"نمایش epicها","ADD_EPICS":"اضافه کردن epicها","MODIFY_EPICS":"تصحیح epicها","COMMENT_EPICS":"دیدگاه برای epicها","DELETE_EPICS":"حذف epicها"},"SPRINTS":{"NAME":"اسپرینت‌ها","VIEW_SPRINTS":"نمایش اسپرینت‌ها","ADD_SPRINTS":"اضافه کردن اسپرینت‌ها","MODIFY_SPRINTS":"ویرایش اسپرینت‌ها","DELETE_SPRINTS":"حذف اسپرینت‌ها"},"USER_STORIES":{"NAME":"استوری‌های کاربر","VIEW_USER_STORIES":"نمایش استوری‌های کاربری","ADD_USER_STORIES":"اضافه کردن استوری کاربری","MODIFY_USER_STORIES":"ویرایش استوری کاربری","COMMENT_USER_STORIES":"دیدگاه برای استوری‌های کاربری","DELETE_USER_STORIES":"حذف استوری‌های کاربری"},"TASKS":{"NAME":"وظایف","VIEW_TASKS":" نمایش وظایف","ADD_TASKS":"اضافه کردن وظیفه","MODIFY_TASKS":"ویرایش وظایف","COMMENT_TASKS":"دیدگاه وظایف","DELETE_TASKS":"حذف وظایف"},"ISSUES":{"NAME":"موضوعات","VIEW_ISSUES":"نمایش موضوعات","ADD_ISSUES":"اضافه کردن موضوعات","MODIFY_ISSUES":"تصحیح موضوعات","COMMENT_ISSUES":"دیدگاه موضوعات","DELETE_ISSUES":"حذف موضوعات"},"WIKI":{"NAME":"ویکی","VIEW_WIKI_PAGES":"نمایش صفحات ویکی","ADD_WIKI_PAGES":"اضافه کردن صفحات ویکی","MODIFY_WIKI_PAGES":"ویرایش صفحات ویکی","DELETE_WIKI_PAGES":"حذف صفحات ویکی","VIEW_WIKI_LINKS":"نمایش لینک‌های ویکی","ADD_WIKI_LINKS":"اضافه کردن لینک‌های ویکی","DELETE_WIKI_LINKS":"حذف لینک‌های ویکی"}}},"LOGIN":{"PAGE_TITLE":"ورود - تایگا","PAGE_DESCRIPTION":"ورود به تایگا، پلتفرمی برای مدیریت پروژه برای استارت‌آپ‌ها و توسعه‌دهندگان سریع و طراحانی که به دنبال ابزاری زیبا و ساده برای لذت بردن از کارشان هستند."},"AUTH":{"INVITED_YOU":"از شما برای ملحق شدن به پروژه دعوت کرده است","NOT_REGISTERED_YET":"تاکنون ثبت نام نکرده‌اید؟","REGISTER":"ثبت نام","CREATE_ACCOUNT":"حساب کاربری رایگان بسازید"},"LOGIN_COMMON":{"HEADER":"قبلاً در تایگا ثبت نام کرده‌ام","PLACEHOLDER_AUTH_NAME":"نام کاربری یا ایمیل (حساس به بزرگی و کوچکی حروف)","LINK_FORGOT_PASSWORD":"آن را فراموش کرده‌اید؟","TITLE_LINK_FORGOT_PASSWORD":"آیا رمز عبورتان را فراموش کرده‌اید؟","ACTION_ENTER":"ورود","ACTION_SIGN_IN":"ورود","PLACEHOLDER_AUTH_PASSWORD":"رمز عبور (حساس به حروف بزرگ و کوچک)","ALT_LOGIN":"یا لاگین کنید با"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"نام کاربری یا ایمیل و یا رمز عبور اشتباه است.","SUCCESS":"به تایگا خوش آمدید."},"REGISTER":{"PAGE_TITLE":"ثبت نام - تایگا","PAGE_DESCRIPTION":"حساب کابری خود را برای استفاده از تایگا بسازید. تایگا پلتفرم مدیریت پروژه برای استارت‌آپ‌ها و توسعه‌دهندگان سریع و طراحانی است که به دنبال ابزاری زیبا و ساده برای لذت بردن از کارشان هستند."},"REGISTER_FORM":{"TITLE":"ایجاد حساب کاربری جدید در تایگا (رایگان)","PLACEHOLDER_NAME":"نام کاربری (حساس به حروف بزرگ و کوچک)","PLACEHOLDER_FULL_NAME":"نام کامل خود را وارد کنید","PLACEHOLDER_EMAIL":"ایمیل شما","PLACEHOLDER_PASSWORD":"رمز عبور جدید انتخاب کنید (حساس به حروف بزرگ و کوچک)","ACTION_SIGN_UP":"ثبت نام","TITLE_LINK_LOGIN":"ورود","LINK_LOGIN":"آیا قبلاً ثبت‌نام کرده‌اید؟ وارد شوید"},"FORGOT_PASSWORD":{"PAGE_TITLE":"پسورد خود را فراموش کرده‌اید - تایگا","PAGE_DESCRIPTION":"نام کاربری یا ایمیل خود را برای دریافت رمز عبور جدید وارد کنید تا مجدداً به تایگا دسترسی پیدا کنید."},"FORGOT_PASSWORD_FORM":{"TITLE":"اوپس!‍ آیا رمز عبور خود را فراموش کرده‌اید؟","SUBTITLE":"نام کاربری یا ایمیل خود را برای دریافت رمز جدید وارد کنید","PLACEHOLDER_FIELD":"نام کاربری یا ایمیل","ACTION_RESET_PASSWORD":"ریست کردن رمز عبور","LINK_CANCEL":"بازگشت به مرحله قبل. فکر میکنم رمز عبور خود را به خاطر آوردم.","SUCCESS_TITLE":"ایمیل خود را چک کنید!","SUCCESS_TEXT":"ایمیلی حاوی دستورالعمل تنظیم رمز عبور جدید برایتان ارسال کردیم","ERROR":"بنابر اومپا لومپای ما، شما هنوز ثبت نام نکرده‌اید."},"CHANGE_PASSWORD":{"PAGE_TITLE":"تغییر رمز عبور - تایگا","SECTION_NAME":"تغییر رمز عبور","FIELD_CURRENT_PASSWORD":"رمز عبور فعلی","PLACEHOLDER_CURRENT_PASSWORD":"رمز عبور فعلی (اگر تاکنون رمز عبوری انتخاب نکرده‌اید، خالی بگذارید)","FIELD_NEW_PASSWORD":"پسورد جدید","PLACEHOLDER_NEW_PASSWORD":"وارد کردن رمز عبور جدید","FIELD_RETYPE_PASSWORD":"رمز عبور جدید را مجدداً وارد کنید","PLACEHOLDER_RETYPE_PASSWORD":"ورود مجدد رمز عبور جدید","ERROR_PASSWORD_MATCH":"رمز عبورها یکسان نیست"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"ایجاد پسورد جدید تایگا","SUBTITLE":"و شاید دلتان بخواهد کمی غذای دارای آهن بخورید! برای مغز شما خوب است :p","PLACEHOLDER_NEW_PASSWORD":"رمز عبور جدید","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"ورود مجدد رمز عبور","ACTION_RESET_PASSWORD":"ریست کردن رمز عبور","ERROR":"اومپا لومپای ما درخواست مربوط به بازیابی رمز عبور شما را پیدا نمی‌کند. دوباره درخواست کنید.","SUCCESS":"اومپا لومپای ما رمز عبور جدید شما را ذخیره کرده است.
    تلاش برایورودبا رمز عبور جدید."},"INVITATION":{"PAGE_TITLE":"پذیرش دعوت - تایگا","PAGE_DESCRIPTION":"پذیرش دعوت برای ملحق شدن به پروژه‌ای در تایگا، پلتفرمی برای مدیریت پروژه برای استارت‌آپ‌ها، توسعه‌دهندگان و طراحان سریع که به ابزاری زیبا و ساده برای لذت بردن از کارشان علاقه دارند."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"اومپا لومپای ما دعوتنامه‌ی شما را پیدا نمی‌کند.","SUCCESS":"با موفقیت به این پروژه ملحق شدید. به {{project_name}} خوش آمدید."},"HOME":{"PAGE_TITLE":"خانه - تایگا","PAGE_DESCRIPTION":"صفحه‌ی خانه‌ی تایگا شامل پروژه‌های اصلی شما و تمام استوری‌های کاربری مربوط به شما و موارد بررسی شده، وظایف و موضوعات","EMPTY_WORKING_ON":"خلوت است، نه؟کار با تایگا را شروع کنید تا در این بخش استوری‌ها، وظایف و موضوعاتی که روی آن کار می‌کنید را مشاهده کنید.","EMPTY_WATCHING":"دنبال کردناستوری‌های کاربران، وظایف، موضوعات در پروژه‌های شما و دریافت نوتیفیکیشن در مورد تغییرات :)","EMPTY_PROJECT_LIST":"در حال حاضر پروژه‌ای ندارید","WORKING_ON_SECTION":"در حال کار روی","WATCHING_SECTION":"در حال بررسی","DASHBOARD":"داشبورد پروژه‌ها"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"لیست پروژه‌ {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ اضافه کردن EPIC","UNASSIGNED":"آزاد"},"EMPTY":{"TITLE":"به نظر می‌رسد که هنوز هیچ epicی وجود ندارد","EXPLANATION":"Epicها آیتم‌های سطح بالایی هستند که شامل استوری‌های کاربر می‌شوند.
    Epicها در صدر رده‌بندی هستند و به کمک آنها می‌توان استوری‌های کاربر را گروه‌بندی کرد.","HELP":"در مورد epicها بیشتر بدانید"},"TABLE":{"VOTES":"رأی","NAME":"ام","PROJECT":"پروژه","SPRINT":"اسپرینت","ASSIGNED_TO":"محول شده","STATUS":"عیت","PROGRESS":"پیشرفت","VIEW_OPTIONS":"تنظیمات نمایش"},"CREATE":{"TITLE":"Epic جدید","PLACEHOLDER_DESCRIPTION":"متنی توضیحی برای درک بهتر این epic توسط دیگران اضافه کنید","TEAM_REQUIREMENT":"الزامات تیم","CLIENT_REQUIREMENT":"الزامات مشتری","BLOCKED":"مسدودشده","BLOCKED_NOTE_PLACEHOLDER":"چرا این epic‌ مسدود شده؟","CREATE_EPIC":"ایجاد epic"}},"PROJECTS":{"PAGE_TITLE":"پروژه‌های من - تایگا","PAGE_DESCRIPTION":"لیستی از تمام پروژه‌های شما، می‌توانید ترتیب را تغییر دهید یا مورد جدیدی ایجاد کنید.","MY_PROJECTS":"پروژه‌های من"},"ATTACHMENT":{"SECTION_NAME":"پیوست‌ها","TITLE":"{{ fileName }} آپلودشده در تاریخ {{ date }}","LIST_VIEW_MODE":"حالت نمایش لیستی","GALLERY_VIEW_MODE":"شیوه‌ی نمایش گالری","DESCRIPTION":"توضیح کوتاهی اضافه کنید","DEPRECATED":"(منسوخ‌شده)","DEPRECATED_FILE":"منسوخ شده؟","ADD":"اضافه کردن پیوست جدید. . {{maxFileSizeMsg}}","DROP":"پیوست‌ها را اینجا رها کنید!","SHOW_DEPRECATED":"+ نمایش پیوست‌های منسوخ‌شده","HIDE_DEPRECATED":"- پیوست‌های منسوخ‌شده را مخفی کن","COUNT_DEPRECATED":"({{ counter }} منسوخ شده)","MAX_UPLOAD_SIZE":"بیشترین حجم مجاز برای آپلود فایل {{maxFileSize}} است","DATE":"روز ماه سال [at] ساعت:دقیقه","ERROR_UPLOAD_ATTACHMENT":"آپلود فایل با مشکل مواجه شد '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"حذف پیوست ...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"پیوست '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"حذف با مشکل مواجه شد: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) بیش از حد مجاز است. فایلی با حجم کمتر از ({{maxFileSize}}) انتخاب کنید"},"PAGINATION":{"PREVIOUS":"قبلی","NEXT":"بعدی"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"ویرایش مقدار","TITLE_ACTION_DELETE_VALUE":"حذف کردن مقدار","TITLE_ACTION_DELETE_TAG":"حذف برچسب"},"HELP":"نیازمند کمک هستید؟ به صفحه‌ی پشتیبانی ما مراجعه کنید!","PROJECT_DEFAULT_VALUES":{"TITLE":"حذف کردن مقدار","SUBTITLE":"مقدار پیش‌فرض برای تمام ورودی‌های انتخابی را تنظیم کنید."},"MEMBERSHIPS":{"TITLE":"مدیریت اعضا","PAGE_TITLE":"عضویت‌ها - {{projectName}}","ADD_BUTTON":"+ افزودن عضو جدید","ADD_BUTTON_TITLE":"اضافه کردن عضو جدید","UPGRADE_BUTTON":"برنامه را ارتقا بده","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"این پروژه به محدودیت ({{members}})عضو مجاز خود رسیده است. اگر می‌خواهید محدودیت را افزایش دهید، با ادمین تماس بگیرید."},"PROJECT_EXPORT":{"TITLE":"خروجی","SUBTITLE":"خروجی گرفتن از پروژه برای ذخیره کردن بکاپ یا ایجاد پروژه مبتنی بر این پروژه.","EXPORT_BUTTON":"خروجیجی","EXPORT_BUTTON_TITLE":"خروجی گرفتن از پروژه","LOADING_TITLE":"در حال ایجاد فایل عیب‌یابی","DUMP_READY":"فایل عیب‌یابی شما آماده است!","LOADING_MESSAGE":"لطفاً این صفحه را نبندید.","ASYNC_MESSAGE":"زمانی که خاتمه یافت، ایمیلی ارسال می‌کنیم.","SYNC_MESSAGE":"اگر دانلود به صورت خودکار آغاز نشده، اینجا کلیک کنید.","ERROR":"اومپا لومپای ما در ایجاد فایل عیب‌یابی با مشکل روبرو شده است. مجدداً تلاش کنید.","ERROR_BUSY":"متأسفیم، اومپا لومپای ما در حال حاضر به شدت مشغول است. پس از چند دقیقه مجدداً تلاش کنید."},"MODULES":{"TITLE":"ماژول‌ها","EPICS":"Epics","EPICS_DESCRIPTION":"مدیریت کردن و ترسیم گرافیکی مهم‌ترین بخش‌های استراتژیکی پروژه","BACKLOG":"گزارش امور ناتمام","BACKLOG_DESCRIPTION":"مدیریت کردن استوری‌های کاربری برای حفظ نظم نمایش کارهای بعدی و در اولویت.","NUMBER_SPRINTS":"پیش‌بینی تعداد اسپرینت‌ها","NUMBER_SPRINTS_HELP":"برای عدد نامشخص، 0 وارد کنید","NUMBER_US_POINTS":"مجموع امتیاز استوری‌ها به صورت تخمینی","NUMBER_US_POINTS_HELP":"برای عدد نامشخص، صفر وارد کنید","KANBAN":"Kanban","KANBAN_DESCRIPTION":"مرتب کردن پروژه‌ها به صورت جمع و جور در این بورد","ISSUES":"موضوعات","ISSUES_DESCRIPTION":"دنبال کردن باگ‌ها، سوالات و بهینه‌سازی‌های مربوط به پروژه‌ی شما. هیچ موردی را از دست ندهید!","WIKI":"ویکی","WIKI_DESCRIPTION":"اضافه کردن، ویرایش یا حذف محتوا در ارتباط با دیگران. اینجا مکان خوبی برای مستندسازی پروژه‌های شماست.","MEETUP":"ملاقات","MEETUP_DESCRIPTION":"سیستم ویدیوکنفرانس خود را انتخاب کنید","SELECT_VIDEOCONFERENCE":"انتخاب سیستم ویدیوکنفرانس","SALT_CHAT_ROOM":"پیشوندی برای نام چت‌روم انتخاب کنید","JITSI_CHAT_ROOM":"جیسی","APPEARIN_CHAT_ROOM":"نمایان‌شده در","TALKY_CHAT_ROOM":"تاکی","CUSTOM_CHAT_ROOM":"سفارشی","URL_CHAT_ROOM":"لینک چت‌روم شما"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - پروفایل پروژه - {{projectName}}","PROJECT_DETAILS":"جزئیات پروژه","PROJECT_NAME":"نام پروژه","TAGS":"برچسب‌ها","DESCRIPTION":"وضیحات","RECRUITING":"آیا این پروژه به دنبال افراد است؟","RECRUITING_MESSAGE":"به دنبال چه کسی هستید؟","RECRUITING_PLACEHOLDER":"پروفایلی که به دنبال آن هستید را تعریف کنید","FEEDBACK":"دریافت بازخورد از کاربران تایگا؟","PUBLIC_PROJECT":"پروژه‌ی عمومی","PRIVATE_PROJECT":"پروژه‌ی خصوصی","PRIVATE_OR_PUBLIC":"تفاوت بین پروژه‌ی خصوصی و عمومی چیست؟","DELETE":"حذف کردن این پروژه","CHANGE_LOGO":"تغییر لوگو","ACTION_USE_DEFAULT_LOGO":"استفاده از تصویر پیش‌فرض","MAX_PRIVATE_PROJECTS":"شما به محدودیت تعداد پروژه‌های خصوصی پلن کاربری فعلی خود رسیده‌اید","MAX_PRIVATE_PROJECTS_MEMBERS":"تجاوز از حداکثر تعداد اعضای پروژه‌‌های خصوصی","MAX_PUBLIC_PROJECTS":"متأسفانه به سقف تعداد پروژه‌های عمومی که در پلن فعلی مجاز است، رسیده‌اید","MAX_PUBLIC_PROJECTS_MEMBERS":"پروژه به حداکثر تعداد اعضای پروژه‌های عمومی رسیده است","PROJECT_OWNER":"مالکیت پروژه","REQUEST_OWNERSHIP":"درخواست مالکیت","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"آیا می‌خواهید مالک جدید پروژه شوید؟","REQUEST_OWNERSHIP_DESC":"درخواست از مالک پروژه‌ {{name}} برای انتقال مالکیت این پروژه به شما","REQUEST_OWNERSHIP_BUTTON":"درخواست","REQUEST_OWNERSHIP_SUCCESS":"ما به مالک پروژه اطلاع می‌دهیم","CHANGE_OWNER":"تغییر مالک","CHANGE_OWNER_SUCCESS_TITLE":"بسیار خب، درخواست شما ارسال شده است!","CHANGE_OWNER_SUCCESS_DESC":"ما از طریق ایمیل اطلاع می‌دهیم که درخواست مالکیت پروژه‌ تأیید شده و یا رد شده است"},"REPORTS":{"TITLE":"گزارشات","SUBTITLE":"خروجی گرفتن از اطلاعات پروژه به صورت فایل CSV و ایجاد گزارش","DESCRIPTION":"فایل CSV یا لینک ایجادشده را کپی کنید و آن را در نرم‌افزار ویرایش متن یا اکسل باز کنید تا گزارش پروژه‌ی خود را تشکیل دهید. می‌توانید تمام داده‌ها را آنالیز کنید و نمودارهای گرافیکی ترسیم کنید.","HELP":"چگونه از این در شیت خود استفاده کنم؟","REGENERATE_TITLE":"تغییر URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"گزارش epicها","SECTION_TITLE_US":"گزارشات استوری‌های کاربر","SECTION_TITLE_TASK":"گزارشات وظایف","SECTION_TITLE_ISSUE":"گزارشات موضوعات","DOWNLOAD":"دانلود CSV","URL_FIELD_PLACEHOLDER":"لطفاً لینک CSV را مجدداً ایجاد کن","TITLE_REGENERATE_URL":"بازسازی لینک CSV","ACTION_GENERATE_URL":"ایجاد URL","ACTION_REGENERATE":"بازسازی","TITLE_DELETE_URL":"حذف آدرس CSV","ACTION_DELETE_URL":"حذف"},"CUSTOM_FIELDS":{"TITLE":"ویژگی‌های سفارشی","SUBTITLE":"ویژگی‌های سفارشی برای استوری‌های کاربر، وظایف و موضوعات مشخص کنید","EPIC_DESCRIPTION":"ویژگی‌های سفارشی Epicها","EPIC_ADD":"اضافه کردن ویژگی سفارشی جدید در epicها","US_DESCRIPTION":"ویژگی‌های سفارشی استوری‌های کاربر","US_ADD":"اضافه کردن ویژگی سفارشی جدید در استوری‌های کاربر","TASK_DESCRIPTION":"ویژگی‌های سفارشی وظایف","TASK_ADD":"اضافه کردن ویژگی جدید در وظایف","ISSUE_DESCRIPTION":"ویژگی‌های سفارشی موضوعات","ISSUE_ADD":"اضافه کردن ویژگی سفارشی در موضوعات","FIELD_TYPE_TEXT":"متن","FIELD_TYPE_RICHTEXT":"متن دارای فرمت","FIELD_TYPE_MULTI":"چند خطی","FIELD_TYPE_DATE":"تاریخ","FIELD_TYPE_URL":"URL","FIELD_TYPE_DROPDOWN":"دراپ داون","FIELD_TYPE_CHECKBOX":"چک باکس","FIELD_TYPE_NUMBER":"اعداد"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - مقادیر پروژه - {{projectName}}","REPLACEMENT":"تمام آیتم‌هایی که این مقدار را دارند، تغییر می‌کنند به","ERROR_DELETE_ALL":"نمی‌توانید تمام مقادیر را حذف کنید."},"PROJECT_VALUES_POINTS":{"TITLE":"امتیاز","SUBTITLE":"امتیاز تخمینی استوری کاربری خود را مشخص کنید","US_TITLE":"امتیاز استوری‌های کاربری","ACTION_ADD":"اضافه کردن امتیاز"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"اولویت‌ها","SUBTITLE":"اولویت‌های موضوعات خود را مشخص کنید","ISSUE_TITLE":"اولویت موضوعات","ACTION_ADD":"اضافه کردن اولویت جدید"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"میزان اهمیت","SUBTITLE":"میزان اهمیت (وخامت) موضوع را مشخص کنید","ISSUE_TITLE":"اهمیت (وخامت) موضوع","ACTION_ADD":"اضافه کردن اهمیت جدید"},"PROJECT_VALUES_STATUS":{"TITLE":"وضعیت‌ها","SUBTITLE":"مشخص کردن وضعیت آینده‌ی استوری‌های کاربری، وظایف و موضوعات شما","EPIC_TITLE":"وضعیت Epicها","US_TITLE":"وضعیت‌های استوری‌های کاربر","TASK_TITLE":"وضعیت وظایف","ISSUE_TITLE":"وضعیت موضوعات"},"PROJECT_VALUES_TYPES":{"TITLE":"انواع","SUBTITLE":"نوع موضوع خود را مشخص کنید","ISSUE_TITLE":"انواع موضوعات","ACTION_ADD":"اضافه کردن {{objName}} جدید"},"PROJECT_VALUES_TAGS":{"TITLE":"برچسب‌ها","SUBTITLE":"مشاهده و ویرایش رنگ برچسب‌ها","EMPTY":"در حال حاضر برچسبی وجود ندارد","EMPTY_SEARCH":"در ارتباط با آنچه جست‌وجو کرده‌اید، چیزی پیدا نشد","ACTION_ADD":"اضافه کردن برچسب","NEW_TAG":"برچسب جدید","MIXING_HELP_TEXT":"انتخاب کردن برچسب‌ها برای ترکیب","MIXING_MERGE":"ترکیب برچسب‌ها","SELECTED":"انتخاب شده"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"موعدهای تحویل","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"اضافه کردن وضعیت جدید","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"وضعیت موعد سر رسید گزارش","DAYS_TO_DUE_DATE":"تعداد روز مانده تا موعد تحویل","BEFORE_AFTER":"قبل/بعد","BEFORE":"قبل","AFTER":"گذشته"},"ROLES":{"PAGE_TITLE":"نقش‌ها - {{projectName}}","WARNING_NO_ROLE":"مراقب باشید، هیچ نقشی در پروژه‌ی شما قادر به تخمین ارزش امتیازات استوری‌های کاربر نیست","HELP_ROLE_ENABLED":"اگر فعال شود، اعضایی با این نقش می‌توانند امتیاز استوری‌های کاربری را تخمین بزنند","DISABLE_COMPUTABLE_ALERT_TITLE":"آیا مطمئن هستید که می‌خواهید تخمین‌های این نقش را غیرفعال کنید؟","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"اگر مجوز تخمین را برای نقش {{roleName}} غیرفعال کنید، تمام تخمین‌های قبلی که توسط این نقش ایجاد شده، حذف می‌شود","COUNT_MEMBERS":"{{ role.members_count }} عضو با این نقش","TITLE_DELETE_ROLE":"حذف نقش","REPLACEMENT_ROLE":"تمام اعضای دارای این نقش منتقل می‌شوند به","WARNING_DELETE_ROLE":"مراقب باشید! تمام تخمین‌های نقش، حذف می‌شود","ERROR_DELETE_ALL":"نمی‌توانید تمام مقادیر را حذف کنید","EXTERNAL_USER":"کاربر خارجی","NOTE_EXTERNAL_USERS":"توجه: منظور از کاربر خارجی هر کاربر ناشناسی است که در پلتفرم تایگا عضویت ندارد، مثل موتورهای جست‌وجو. لطفاً در استفاده از این نقش دقت کنید."},"THIRD_PARTIES":{"SECRET_KEY":"کلید رمزی","PAYLOAD_URL":"لینک ظرفیت","VALID_IPS":"آی‌پی‌های معتبر منبع (که با کاما جدا شده است)"},"BITBUCKET":{"SECTION_NAME":"بیت‌باکت","PAGE_TITLE":"بیت‌باکت - {{projectName}}","INFO_VERIFYING_IP":"درخواست‌های بیت‌باکت ثبت نشده‌اند لذا بهترین راه تأیید منبع، استفاده از IP است. اگر فیلد خالی باشد، تأیید IP انجام نمی‌شود."},"GITLAB":{"SECTION_NAME":"گیتلب","PAGE_TITLE":"گیت‌لب - {{projectName}}","INFO_VERIFYING_IP":"درخواست‌های گیت‌لب امضا نشده‌اند لذا بهترین راه برای تأیید منبع، استفاده از IP است. اگر فیلد خالی باشد، تأییدیه‌ی IP در کار نخواهد بود."},"GITHUB":{"SECTION_NAME":"گیت‌هاب","PAGE_TITLE":"گیت‌هاب - {{projectName}}"},"GOGS":{"SECTION_NAME":"گاگ‌ها","PAGE_TITLE":"گاگ‌ها - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"وب‌هوک‌ها - {{projectName}}","SECTION_NAME":"وب‌هوک‌ها","ADD_NEW":"اضافه کردن وب‌هوک جدید","TYPE_NAME":"نام سرویس را وارد کنید","TYPE_PAYLOAD_URL":"URL ظرفیت سرویس را وارد کنید","TYPE_SERVICE_SECRET":"کلید رمزی سرویس را وارد کنید","SAVE":"ذخیره کردن وب‌هوک","CANCEL":"لغو وب‌هوک","SHOW_HISTORY":"(نمایش سوابق)","TEST":"تست وب‌هوک","EDIT":"ویرایش وب‌هوک","DELETE":"حذف وب‌هوک","REQUEST":"درخواست","RESEND_REQUEST":"ارسال دوباره‌ی درخواست","HEADERS":"هدرها","PAYLOAD":"ظرفیت","RESPONSE":"پاسخ","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(مخفی کردن سوابق)","ACTION_HIDE_HISTORY_TITLE":"مخفی کردن جزئیات سوابق","ACTION_SHOW_HISTORY":"(نمایش سوابق)","ACTION_SHOW_HISTORY_TITLE":"نمایش جزئیات سوابق","WEBHOOK_NAME":"وب‌هوک '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - خواص سفارشی - {{projectName}}","ADD":"اضافه کردن ویژگی سفارشی","EDIT":"ویرایش ویژگی سفارشی","DELETE":"حذف ویژگی‌های سفارشی","SAVE_TITLE":"ذخیره کردن ویژگی سفارشی","CANCEL_TITLE":"لغو ایجاد","SET_FIELD_NAME":"نام ویژگی سفارشی","SET_FIELD_DESCRIPTION":"توضیحات ویژگی سفارشی شما","FIELD_TYPE_DEFAULT":"-- یکی را انتخاب کنید --","ACTION_UPDATE":"بروزرسانی ویژگی سفارشی","ACTION_CANCEL_EDITION":"لغو ویرایش"},"MEMBERSHIP":{"COLUMN_MEMBER":"عضو","COLUMN_ADMIN":"ادمین","COLUMN_ROLE":"قش","COLUMN_STATUS":"عیت","STATUS_ACTIVE":"فعال","STATUS_PENDING":"در انتظار","DELETE_MEMBER":"حذف عضو","RESEND":"ارسال مجدد","SUCCESS_SEND_INVITATION":"ما مجدداً دعوتنامه‌ای به '{{email}}' ارسال کرده‌ایم.","SUCCESS_DELETE":"پیام {{message}} را حذف کرده‌ایم","ERROR_DELETE":"نمی‌توانیم حذف کنیم {{message}}.","DEFAULT_DELETE_MESSAGE":"دعوتنامه برای {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"مقدار پیش‌فرض برای سلکتور وضعیت epic","LABEL_US_STATUS":"مقدار پیش‌فرض برای سلکتور وضعیت استوری کاربر","LABEL_POINTS":"مقدار پیش‌فرض برای سلکتور امتیاز","LABEL_TASK_STATUS":"مقدار پیش‌فرض برای سلکتور انتخاب وظیفه","LABEL_ISSUE_TYPE":"مقدار پیش‌فرض برای سکتور نوع موضوع","LABEL_ISSUE_STATUS":"مقدار پیش‌فرض برای سلکتور وضعیت","LABEL_PRIORITY":"مقدار پیش‌فرض برای سلکتور اولویت","LABEL_SEVERITY":"مقدار پیش‌فرض برای سکتور میزان اهمیت"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"نامی برای وضعیت جدید وارد کنید","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"نامی برای المان جدید بنویسید"},"US_STATUS":{"ACTION_ADD_STATUS":"اضافه کردن وضعیت جدید","IS_ARCHIVED_COLUMN":"آرشیو‌شده","IS_CLOSED_COLUMN":"بسته‌شده","WIP_LIMIT_COLUMN":"محدودیت WIP","PLACEHOLDER_WRITE_NAME":"نامی برای وضعیت جدید وارد کنید"},"MENU":{"PROJECT":"پروژه","ATTRIBUTES":"خواص","MEMBERS":"اعضا","PERMISSIONS":"دسترسی‌ها","INTEGRATIONS":"مجتمع‌سازی‌ها"},"SUBMENU_PROJECT_VALUES":{"STATUS":"وضعیت","POINTS":"امتیاز","PRIORITIES":"اولویت‌ها","SEVERITIES":"میزان اهمیت","TYPES":"انواع","CUSTOM_FIELDS":"ویژگی‌های سفارشی","TAGS":"برچسب‌ها","DUE_DATES":"موعد سر رسید"},"SUBMENU_ROLES":{"TITLE":"نقش‌ها","ACTION_NEW_ROLE":"+ نقش جدید","TITLE_ACTION_NEW_ROLE":"اضافه کردن نقش جدید"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"آیا می‌خواهید مالک جدید پروژه شوید؟","PRIVATE":"خصوصی","ACCEPTED_PROJECT_OWNERNSHIP":"تبریک! اکنون مالک پروژه هستید","REJECTED_PROJECT_OWNERNSHIP":"بسیار خب. با مالک فعلی پروژه تماس می‌گیریم.","ACCEPT":"پذیرفتن","REJECT":"رد","PROPOSE_OWNERSHIP":"{{owner}}، مالک فعلی پروژه‌ی {{project}} از شما خواسته که مالک جدید پروژه باشید.","ADD_COMMENT":"آیا می‌خواهید نظری برای مالک پروژه اضافه کنید؟","UNLIMITED_PROJECTS":"نامحدود","OWNER_MESSAGE":{"PRIVATE":"به خاطر داشته باشید که شما می‌توانید مالک حداکثر {{maxProjects}} پروژه‌ی شخصی باشید. در حال حاضر {{currentProjects}} پروژه‌ی شخصی دارید","PUBLIC":"به خاطر داشته باشید که شما می‌توانید مالک حداکثر {{maxProjects}} پروژه‌ی عمومی باشید. در حال حاضر {{currentProjects}} پروژه‌ی عمومی دارید"},"CANT_BE_OWNED":"در حال حاضر نمی‌توانید مالک پروژه‌ای از این نوع شوید. اگر می‌خواهید مالک این پروژه شوید، لطفاً با ادمین تماس بگیرید تا تنظیمات حساب شما را برای فعالسازی مالکیت پروژه تغییر دهد."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"ویرایش پروفایل","CLOSED_US":"استوری کاربری بسته‌شده","PROJECTS":"پروژه‌ها","PROJECTS_EMPTY":"{{username}} تاکنون پروژه‌ای نداشته است.","CONTACTS":"مخاطبین","CONTACTS_EMPTY":"{{username}} تاکنون مخاطبی ندارد","CURRENT_USER_CONTACTS_EMPTY":"شما هنوز مخاطبی ندارید","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"افرادی که در تایگا با ایشان همکاری می‌کنید، به صورت خودکار به عنوان مخاطبین شما اضافه می‌شوند","TABS":{"ACTIVITY_TAB":"تایم‌لاین","ACTIVITY_TAB_TITLE":"نمایش تمام فعالیت‌های این کاربر","PROJECTS_TAB":"پروژه‌ها","PROJECTS_TAB_TITLE":"لیست تمام پروژه‌هایی که کاربر عضو آن است","LIKES_TAB":"لایک","LIKES_TAB_TITLE":"تمام لایک‌های این کاربر را لیست کن","VOTES_TAB":"رأی","VOTES_TAB_TITLE":"لیست کردن تمام رأی‌های این کاربر","WATCHED_TAB":"نظارت‌شده","WATCHED_TAB_TITLE":"لیست کردن تمام مواردی که توسط این کاربر بررسی شده","CONTACTS_TAB":"مخاطبین","CONTACTS_TAB_TITLE":"لیست تمام مخاطبینی که این کاربر ایجاد کرده"}},"PROFILE_SIDEBAR":{"TITLE":"پروفایل شما","DESCRIPTION":"دیگران می‌توانند اطلاعات شما و آنچه روی آن کار می‌کنید را ببینند. در مورد خودتان توضیحاتی دهید تا دیگران شناخت بهتری در مورد شما پیدا کنند.","ADD_INFO":"ویرایش بیوگرافی"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"چیزی بنویسید ...","FILTER_TYPE_ALL":"همه","FILTER_TYPE_ALL_TITLE":"نمایش همه","FILTER_TYPE_PROJECTS":"پروژه‌ها","FILTER_TYPE_PROJECTS_TITLE":"فقط پروژه‌ها را نمایش بده","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"فقط epicها را نمایش بده","FILTER_TYPE_USER_STORIES":"استوری‌ها","FILTER_TYPE_USER_STORIES_TITLE":"فقط استوری‌های کاربر را نمایش بده","FILTER_TYPE_TASKS":"وظایف","FILTER_TYPE_TASKS_TITLE":"فقط وظایف را نمایش بده","FILTER_TYPE_ISSUES":"موضوعات","FILTER_TYPE_ISSUES_TITLE":"فقط موضوعات را نمایش بده","EMPTY_TITLE":"چیزی برای نمایش وجود ندارد"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"ترتیب پروژه‌های خود را تغییر دهید تا در صدر پروژه‌های پراستفاده قرار گیرند.
    10 پروژه‌ی پراستفاده در لیست پروژه‌های نوار ناوبری بالا نمایش داده می‌شود.","PRIVATE":"پروژه‌ی خصوصی","LOOKING_FOR_PEOPLE":"این پروژه در انتظار عضو است","FANS_COUNTER_TITLE":"{total, plural, one{یک طرفدار} other{# طرفداران}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{یک بررسی کننده} other{#بررسی کنندگان}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{یک عضو} other{# اعضا}}","BLOCKED_PROJECT":{"BLOCKED":"پروژه مسدودشده","THIS_PROJECT_IS_BLOCKED":"این پروژه موقتاً مسدود شده است","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"برای آزاد کردن پروژه‌های خود، با مدیر تماس بگیرید"},"SECTION":{"SEARCH":"جست‌وجو","TIMELINE":"تایم‌لاین","EPICS":"Epics","BACKLOG":"گزارش امور ناتمام","KANBAN":"Kanban","ISSUES":"موضوعات","WIKI":"ویکی","TEAM":"تیم","MEETUP":"ملاقات","ADMIN":"ادمین"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"ایجاد پروژه","MANAGE_PROJECTS":"مدیریت پروژه‌ها","TITLE_CREATE_PROJECT":"ایجاد پروژه","HELP_TITLE":"صفحه‌ی پشتیبانی تایگا","HELP":"راهنمایی","HOMEPAGE":"صفحه‌ی خانه","FEEDBACK_TITLE":"ارسال بازخورد","FEEDBACK":"بازخورد","NOTIFICATIONS_TITLE":"ویرایش تنظیمات نوتیفیکیشن","NOTIFICATIONS":"نوتیفیکیشن‌ها","VIEW_PROFILE_TITLE":"نمایش پروفایل","VIEW_PROFILE":"نمایش پروفایل","EDIT_PROFILE_TITLE":"ویرایش پروفایل","EDIT_PROFILE":"ویرایش پروفایل","CHANGE_PASSWORD_TITLE":"تغییر رمز عبور","CHANGE_PASSWORD":"تغییر رمز عبور","DASHBOARD_TITLE":"داشبورد","DISCOVER_TITLE":"پروژه‌های ترند را کشف کنید","DISCOVER":"کشف"},"LIKE_BUTTON":{"LIKE":"لایک","LIKED":"لایک‌شده","UNLIKE":"دیسلایک","BUTTON_TITLE":"لایک یا دیسلایک کردن این پروژه","COUNTER_TITLE":"{total, plural, one{یک طرفدار} other{# طرفداران}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"نظارت بر این پروژه و تنظیم نوتیفیکیشن‌ها","WATCH":"نظارت","WATCHING":"در حال بررسی","COUNTER_TITLE":"{total, plural, one{یک بررسی کننده} other{#بررسی کنندگان}}","OPTIONS":{"NOTIFY_ALL":"دریافت تمام نوتیفیکیشن‌ها","NOTIFY_ALL_TITLE":"دریافت تمام نوتیفیکیشن‌های مربوط به این پروژه","NOTIFY_INVOLVED":"فقط مرتبط","NOTIFY_INVOLVED_TITLE":"دریافت نوتیفیکیشن تنها در زمانی که شما هم مشارکت دارید","UNWATCH":"خروج از نظارت","UNWATCH_TITLE":"خروج از حالت نظارت این پروژه"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"تماس با تیم پروژه","CONTACT_BUTTON":"تماس با پروژه"},"CREATE":{"TITLE":"ایجاد پروژه","CHOOSE_TEMPLATE":"کدام قالب برای پروژه‌ی شما مناسب‌تر است؟","TEMPLATE_SCRUM":"اسکرام","TEMPLATE_SCRUM_DESC":"وظایف خود را اولویت‌بندی کنید و در بازه‌ی زمانی کوتاه انجام دهید.","TEMPLATE_SCRUM_LONGDESC":"اسکرام روشی برای توسعه‌ی نرم‌افزار به صورت مرحله‌ای سریع و تدریجی است.\nگزارش امور ناتمام محصول چیزی است که با ترتیب مشخصی، ارایه می‌شود. گزارش امور ناتمام پروژه به بخش‌های قابل‌مدیریت و اجرایی به اسم اسپرینت‌ها تقسیم می‌شود.\nمقدار زمانی که تیم برای شروع و تکمیل پیشرفتی جدید و رسیدگی به تعدادی از استوری‌های کاربر در گزارش امور ناتمام نیاز دارد، متناسب با مهارت‌ها، توانمندی‌ها و منابع است. پروژه با خالی شدن گزارش امور ناتمام، اسپرینت می‌کند و تکمیل می‌شود.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"حفظ جریان کاری ثابت در وظایف مستقل","TEMPLATE_KANBAN_LONGDESC":"روش کانبان روشی برای تقسیم توسعه‌ی پروژه (هر نوع پروژه‌ای) به مراحل مختلف است.\nیک کارت کانبان مثل یک کارت اندیس یا یک یادداشت پستی است که جزئیات هر وظیفه (یا استوری کاربری) در پروژه که قرار است تکمیل شود را بیان می‌کند. بورد کانبان برای انتقال هر یک از کارت‌ها از یک وضعیت تکمیل شدن به وضعیت بعدی به کار می‌رود و به این ترتیب برای پیگیری پیشرفت کار مفید است.","DUPLICATE":"تکثیر پروژه","DUPLICATE_DESC":"شروع ساده با حفظ تنظیمات","IMPORT":"وارد کردن پروژه","IMPORT_DESC":"وارد کردن پروژه‌ها از پلتفرم‌های مختلف به تایگا","INVITE":"دعوت به پروژه","SOLO_PROJECT":"شما در این پروژه تنها خواهید بود","INVITE_LATER":"(شما بعداً می‌توانید اعضای جدیدی اضافه کنید)","BACK":"بازگشت","MAX_PRIVATE_PROJECTS":"متأسفانه به محدودیت حداکثر تعداد پروژه‌های شخصی رسیده‌اید.\nاگر می‌خواهید محدودیت فعلی را افزاش دهید، لطفاً با ادمین تماس بگیرید.","MAX_PUBLIC_PROJECTS":"متأسفانه شما به محدودیت تعداد پروژه‌های عمومی رسیده‌اید. اگر می‌خواهید محدودیت فعلی را افزایش دهید، با ادمین تماس بگیرید.","PUBLIC_PROJECT":"پروژه‌های عمومی","PRIVATE_PROJECT":"پروژه‌های خصوصی"},"COMMON":{"DETAILS":"جزئیات پروژه‌ی جدید","PROJECT_TITLE":"نام پروژه","PROJECT_DESCRIPTION":"توضیح پروژه"},"DUPLICATE":{"TITLE":"ایجاد کپی پروژه","DESCRIPTION":"شروع ساده با حفظ تنظیمات","SELECT_PLACEHOLDER":"یکی از پروژه‌های موجود را برای تکثیر انتخاب کنید"},"IMPORT":{"TITLE":"وارد کردن پروژه","DESCRIPTION":"وارد کردن پروژه‌ها از پلتفرم‌های مختلف به تایگا","ASYNC_IN_PROGRESS_TITLE":"اومپا لومپای ما در حال ایمپورت کردن پروژه‌ی شماست","ASYNC_IN_PROGRESS_MESSAGE":"این فرآیند ممکن است چند دقیقه طول بکشد.
    ما در پایان ایمیلی ارسال می‌کنیم","UPLOAD_IN_PROGRESS_MESSAGE":"{{uploadedSize}} از {{totalSize}} آپلود شده","ERROR":"اومپا لومپای ما در وارد کردن داده‌های عیب‌یابی با مشکل روبرو شده. مجدداً تلاش کنید.","ERROR_TOO_MANY_REQUEST":"متأسفیم، اومپا لومپای ما در حال حاضر به شدت مشغول است. پس از چند دقیقه مجدداً تلاش کنید.","ERROR_MESSAGE":"اومپا لومپای ما در وارد کردن داده‌های عیب‌یابی شما با مشکل روبرو شد: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) بیش از حد مجاز است. فایلی با حجم کمتر از ({{maxFileSize}}) انتخاب کنید","SYNC_SUCCESS":"پروژه‌ی شما با موفقیت ایمپورت شد","IMPORT":"وارد کردن","WHO_IS":"وظایف آنها محول می‌شود به...","WRITE_EMAIL":"یا در صورت نیاز ایمیل این کاربر در تایگا را وارد کنید","SEARCH_CONTACT":"و در صورت نیاز، در مخاطبین خود سرچ کنید","WRITE_EMAIL_LABEL":"ایمیل کاربر در تایگا را وارد کنید","ACCEEDE":"اعمال","PROJECT_MEMBERS":"اعضای پروژه","PROCESS_DESCRIPTION":"می‌خواهید به کدام عضو تایگا، وظایف {{platform}} را محول کنید","MATCH":"آیا {{user_external}} همان {{user_internal}} است؟","CHOOSE":"انتخاب کاربر","LINKS":"لینک‌هایی با {{platform}}","LINKS_DESCRIPTION":"آیا می‌خواهید پیوند آیتم‌ها با کارت {{platform}} را حفظ کنید؟","WARNING_MAIL_USER":"توجه کنید که اگر کاربر حساب کاربری تایگا نداشته باشد، نمی‌توانید وظایف را به وی محول کنیم.","ASSIGN":"تخصیص","PROJECT_SELECTOR":{"NO_RESULTS":"در ارتباط با آنچه جست‌وجو کرده‌اید، چیزی پیدا نشد","ACTION_SEARCH":"جست‌وجو","ACTION_BACK":"بازگشت"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"پروژه‌ای که می‌خواهید وارد کنید، {{members}} عضو با احتساب شما دارد. متأسفانه پلن فعلی شما حداکثر {{max_memberships}} عضو در هر پروژه‌ی شخصی می‌پذیرد. اگر می‌خواهید این محدودیت را افزایش دهید، با ادمین تماس بگیرید.","PROJECT_MEMBERS_DESC_PUBLIC":"پروژه‌ای که می‌خواهید وارد کنید، {{members}} عضو با احتساب خودتان دارد. متأسفانه پلن فعلی شما حداکثر {{max_memberships}} عضو در هر پروژه‌ی عمومی می‌پذیرد. اگر می‌خواهید این محدودیت را افزایش دهید، با ادمین تماس بگیرید.","ACCOUNT_ALLOW_MEMBERS":"حساب کاربری شما حداکثر {{members}} می‌پذیرد","PRIVATE_PROJECTS_SPACE":{"TITLE":"متأسفانه پلن فعلی شما امکان اضافه کردن پروژه‌های خصوصی اضافی را ندارد","DESC":"پروژه‌ای که می‌خواهید وارد کنید، شخصی است. متأسفانه پلن فعلی شما امکان اضافه کردن پروژه‌های شخصی بیشتر را ندارد."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"متأسفانه پلن فعلی شما امکان اضافه کردن پروژه‌های عمومی بیشتر را ندارد.","DESC":"پروژه‌ای که می‌خواهید وارد کنید، عمومی است. متأسفانه پلن فعالی شما امکان اضافه کردن پروژه‌های عمومی بیشتر را ندارد."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"پلن فعلی شما حداکثر {{max_memberships}} عضو در هر پروژه‌ی خصوصی می‌پذیرد"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"پلن فعلی شما حداکثر {{max_memberships}} عضو در پروژه‌های عمومی می‌پذیرد."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"متأسفانه پلن فعلی شما امکان اضافه کردن پروژه‌های خصوصی بیشتر یا اضافه کردن بیش از {{max_memberships}} عضو در هر پروژه‌ی خصوصی را ندارد","DESC":"پروژه‌ای که می‌خواهید وارد کنید خصوصی است و {{members}} عضو دارد."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"متأسفانه پلن فعلی شما امکات اضافه کردن پروژه‌های عمومی بیشتر یا افزایش بیش از {{max_memberships}} عضو در هر پروژه‌ی عمومی را ندارد","DESC":"پروژه‌ای که می‌خواهید وارد کنید عمومی است و بیش از {{members}} عضو دارد."}},"IN_PROGRESS":{"TITLE":"وارد کردن پروژه","DESCRIPTION":"این فرآیند کمی طول می‌کشد، لطفاً صفحه را نبندید"},"WARNING":{"TITLE":"برخی وظایف محول نشده‌اند","DESCRIPTION":"هنوز افراد تعریف‌نشده‌ای وجود دارند. کارت‌هایی که به این افراد تخصیص‌یافته، آزاد می‌ماند. تمام مخاطبین را بررسی کنید تا آن اطلاعات را از دست ندهید.","CHECK":"بررسی مخاطبین"},"TAIGA":{"SELECTOR":"وارد کردن پروژه‌ی تایگا"},"TRELLO":{"SELECTOR":"وارد کردن بوردهای ترلو در تایگا","CHOOSE_PROJECT":"انتخاب بوردی که می‌خواهید وارد کنید","NO_PROJECTS":"به نظر می‌رسد که هیچ بوردی در ترلو ندارید"},"GITHUB":{"SELECTOR":"موضوعات پروژه‌های گیت‌هاب خود را وارد کنید","CHOOSE_PROJECT":"پیدا کردن پروژه‌ای که می‌خواهید وارد کنید","NO_PROJECTS":"به نظر می‌رسد که پروژه‌ای در گیت‌هاب ندارید","HOW_DO_YOU_WANT_TO_IMPORT":"چگونه می‌خواهید موضوعات خود را وارد تایگا کنید؟","KANBAN_PROJECT":"مثل استوری‌های کاربری در یک پروژه‌ی کانبان","KANBAN_PROJECT_DESCRIPTION":"پس از آن می‌توانید اسکرام با لیست امور ناتمام را فعال کنید.","SCRUM_PROJECT":"مثل استوری‌های کاربری در پروژه‌ی اسکرام","SCRUM_PROJECT_DESCRIPTION":"پس از آن می‌توانید حالت کانبان را فعال کنید.","ISSUES_PROJECT":"مثل موضوعات","ISSUES_PROJECT_DESCRIPTION":"شما می‌توانید از موضوعات خود در حالت کانبان یا اسکرام استفاده کنید. می‌توانید کانبان یا اسکرام را برای استوری‌های کاربری جدید فعال کنید"},"ASANA":{"SELECTOR":"وارد کردن پروژه‌های Asana و انتخاب نحوه‌ی مدیریت آن","CHOOSE_PROJECT":"انتخاب پروژه برای وارد کردن","NO_PROJECTS":"به نظر می‌رسد که پروژه‌ای در Asana ندارید","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"اسکرام","CREATE_AS_SCRUM_DESCRIPTION":"وظایف و زیروظایف پروژه‌ی شما به صورت استوری‌های کاربری تایگاه و وظایف ایجاد می‌شود.","CREATE_AS_KANBAN_DESCRIPTION":"وظایف و زیروظایف پروژه‌ی شما به صورت استوری‌های کاربری تایگاه و وظایف ایجاد می‌شود."},"JIRA":{"SELECTOR":"وارد کردن پروژه‌ی Jira و انتخاب نحوه‌ی مدیریت کردن آن","HOW_TO_CONFIGURE":"(راهنمای تنظیمات)","CHOOSE_PROJECT":"پروژه یا بوردی که می‌خواهید وارد کنید را انتخاب کنید","NO_PROJECTS":"به نظر می‌رسد که پروژه یا بوردی در Jira ندارید","URL":"لینک Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"اسکرام","ISSUES_PROJECT":"موضوعات","CREATE_AS_SCRUM_DESCRIPTION":"این موضوع و موضوعات زیرمجموعه‌‌ی آن از پروژه‌ی شما، به صورت استوری‌های کاربری و وظایف تایگا ایجاد می‌شود","CREATE_AS_KANBAN_DESCRIPTION":"این موضوع و موضوعات زیرمجموعه‌‌ی آن از پروژه‌ی شما، به صورت استوری‌های کاربری و وظایف تایگا ایجاد می‌شود","CREATE_AS_ISSUES_DESCRIPTION":"با موضوعات زیرمجموعه از پروژه Jira چه می‌کنید؟ (تایگا موضوعات زیرمجموعه را قبول نمی‌کند)","CREATE_NEW_ISSUES":"تبدیل موضوعات زیرمجموعه به موضوعات تایگا","NOT_CREATE_NEW_ISSUES":"موضوعات زیرمجموعه را وارد نکن"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"در مورد حذف حساب کاربری تایگای خود مطمئن هستید؟","CANCEL":"بازگشت به تنظیمات","ACCEPT":"حذف حساب کاربری","BLOCK_PROJECT":"توجه کنید که تمام پروژه‌های شما پس از حذف کردن حساب کاربری، مسدود می‌شود. اگر می‌خواهید پروژه‌ای را مسدود کنید، قبل از حذف کردن حساب کاربری، مالکیت آن را به عضو دیگری از پروژه بدهید."},"DELETE_PROJECT":{"TITLE":"حذف پروژه","QUESTION":"آیا مطمئن هستید که می‌خواهید این پروژه را حذف کنید؟","SUBTITLE":"تمام اطلاعات پروژه (استوری‌های کاربر، وظایف، موضوعات، اسپرینت و صفحات ویکی) از بین خواهد رفت! :-(","CONFIRM":"بله، مطمئن هستم."},"ASSIGNED_TO":{"SELECT":"انتخاب کردن موارد واگذار شده به","SEARCH":"جست‌وجوی کاربران"},"ADD_MEMBER":{"TITLE":"عضو جدید","PLACEHOLDER":"فیلتر کردن کاربران یا نوشتن ایمیل برای دعوت","ADD_EMAIL":"اضافه کردن ایمیل","REMOVE":"حذف","INVITE":"دعوت","CHOOSE_ROLE":"نقشی را انتخاب کنید","PLACEHOLDER_INVITATION_TEXT":"(اختیاری) متنی برای دعوت‌نامه اضافه کنید و جملات جالبی برای اعضای جدید بنویسید ;-)","HELP_TEXT":"اگر کاربران قبلاً در تایگا ثبت نام کرده باشند، به صورت خودکار اضافه می‌شوند. در عین این صورت دعوت‌نامه دریافت می‌کنند."},"FEEDBACK":{"TITLE":"برای ما بنویسید ...","COMMENT":"... یک باگ، تعدادی پیشنهاد، چیزی جالب ... یا حتی بدترین کابوس شما در استفاده از تایگا","ACTION_SEND":"ارسال بازخورد"},"SEARCH":{"TITLE":"جست‌وجو","PLACEHOLDER_SEARCH":"به دنبال چه هستید؟"},"ADD_EDIT_SPRINT":{"TITLE":"اسپرینت جدید","PLACEHOLDER_SPRINT_NAME":"نام اسپرینت","PLACEHOLDER_SPRINT_START":"تخمین شروع","PLACEHOLDER_SPRINT_END":"تخمین پایان","ACTION_DELETE_SPRINT":"آیا می‌خواهید این اسپرینت را حذف کنید؟","TITLE_ACTION_DELETE_SPRINT":"حذف اسپرینت","LAST_SPRINT_NAME":"آخرین اسپرینت {{lastSprint}} ;-) است"},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"ویرایش وضیفه","EDIT_ISSUE":"ویرایش موضوع","EDIT_US":"ویرایش گزارش کاربر","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"شما تغییرات را ذخیره نکرده‌اید\nآیا از بستن این فرم اطمینان دارید؟","EXISTING_ISSUE":"گزارش موجود","CHOOSE_EXISTING_ISSUE":"کدام گزارش","ADD_ISSUE":"اضافه کردن موضوع","FILTER_ISSUES":"فیلتر کردن موضوع‌ها"},"DELETE_DUE_DATE":{"TITLE":"حذف موعد تحویل","SUBTITLE":"آیا از حذف موعد تحویل اطمینان دارید؟"},"DELETE_SPRINT":{"TITLE":"حذف اسپرینت"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"حذف ارتباط با این Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(اختیاری) متنی برای دعوت‌نامه اضافه کنید و جملات جالبی برای اعضای جدید بنویسید ;-)","PLACEHOLDER_TYPE_EMAIL":"ایمیلی تایپ کنید","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"به محدودیت تعداد اعضای این پروژه که ({{maxFileSize}}) است، نزدیک شده‌اید. برای افزایش سقف تعداد اعضا با ادمین تماس بگیرید.","LIMIT_USERS_WARNING_MESSAGE":"به محدودیت {{maxMembers}} عضو این پروژه نزدیک می‌شوید."},"LEAVE_PROJECT_WARNING":{"TITLE":"متأسفانه این پروژه نمی‌تواند بدون مالک باشد","CURRENT_USER_OWNER":{"DESC":"شما در حال حاضر مالک این پروژه هستید. قبل از خروج، لطفاً مالکیت را به شخص دیگری واگذار کنید.","BUTTON":"تغییر مالک پروژه"},"OTHER_USER_OWNER":{"DESC":"متأسفانه نمی‌توانید عضوی که مالک پروژه است را حذف کنید. لطفاً مالک جدیدی برای پروژه انتخاب کنید.","BUTTON":"درخواست تغییر مالک پروژه"}},"CHANGE_OWNER":{"TITLE":"می‌خواهید مالک جدید پروژه چه کسی باشد؟","ADD_COMMENT":"اضافه کردن دیدگاه","BUTTON":"درخواست از عضو پروژه‌ی فعلی برای دریافت مالکیت آن"},"CONTACT_PROJECT":{"TITLE":"ارسال ایمیل به","WARNING":"ایمیل از مدیران پروژه دریافت می‌شود","PLACEHOLDER":"پیام خود را بنویسید","SEND":"ارسال"},"SET_DUE_DATE":{"TITLE":"تنظیم موعد تحویل","PLACEHOLDER_DUE_DATE":"انتخاب تاریخ","REASON_FOR_DUE_DATE":"دلیل برای موعد تحویل","PLACEHOLDER_REASON_FOR_DUE_DATE":"چرا این US به تاریخ تحویل نیاز دارد؟","SUGGESTIONS":{"IN_ONE_WEEK":"در یک هفته","IN_TWO_WEEKS":"در دو هفته","IN_ONE_MONTH":"در یک ماه","IN_THREE_MONTHS":"در سه ماه"},"TITLE_ACTION_DELETE_DUE_DATE":"حذف موعد تحویل"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"حذف موعد تحویل","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"مرتبط کردن به epic","EXISTING_EPIC":"epicموجود","NEW_EPIC":"epic جدید","CHOOSE_PROJECT_FOR_CREATION":"پروژه چیست؟","CHOOSE_PROJECT_FROM":"پروژه چیست؟","SUBJECT":"موضوع","CHOOSE_EPIC":"اپیک چیست؟","FILTER_EPICS":"فیلتر کردن epicها","NO_EPICS_FOUND":"در ارتباط با آنچه جست‌وجو کرده‌اید، چیزی پیدا نشد"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"وضعیت: {{epicStatus }}. توضیحات: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"ما قادر به حذف پیوند نبوده‌ایم: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"ایجاد ارتباط با","NEW_USERSTORY":"استوری کاربری جدید","EXISTING_USERSTORY":"استوری‌های کاربری موجود","CHOOSE_PROJECT_FOR_CREATION":"کدام پروژه؟","SUBJECT":"موضوع","SUBJECT_BULK_MODE":"موضوع (اضافه کردن گروهی)","CHOOSE_PROJECT_FROM":"کدام پروژه؟","CHOOSE_USERSTORY":"کدام استوری کاربر؟","NO_USERSTORIES":"این پروژه استوری کاربری ندارد. لطفاً پروژه‌ی دیگری را انتخاب کنید.","NO_USERSTORIES_FOUND":"در ارتباط با آنچه جست‌وجو کرده‌اید، چیزی پیدا نشد","FILTER_USERSTORIES":"فیلتر کردن استوری‌های کاربر","LIGHTBOX_TITLE_BLOKING_EPIC":"مسدودسازی epicها","ACTION_DELETE":"حذف epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - استوری‌های کاربر {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"وضعیت: {{userStoryStatus }}. تکمیل شده{{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} از {{userStoryTotalTasks}} وظایف). امتیاز: {{userStoryPoints}}. توضیحات: {{userStoryDescription}}","SECTION_NAME":"استوری کاربر","LINK_TASKBOARD":"برد وظایف","TITLE_LINK_TASKBOARD":"مراجعه به برد وظایف","TOTAL_POINTS":"مجموع امتیازات","ADD":"+ اضافه کرده یک استوری کاربری جدید","ADD_BULK":"اضافه کردن گروهی استوری‌های کاربری جدید","PROMOTED":"این استوری در ارتباط با موضوعی معروف شده:","TITLE_LINK_GO_TO_ISSUE":"رفتن به موضوع","TITLE_DELETE_ACTION":"حذف استوری کاربر","LIGHTBOX_TITLE_BLOKING_US":"مسدود کردن استوری‌های کاربری","NOT_ESTIMATED":"تخمین زده نشده","OWNER_US":"این استوری کاربری متعلق است به","RELATE_TO_EPIC":"مرتبط کردن به epic","REMOVE_RELATIONSHIP_WITH_EPIC":"حذف ارتباط Epic","TRIBE":{"PUBLISH":"انتشار به عنوان Gig در قبیله‌ی تایگا","PUBLISH_INFO":"اطلاعات بیشتر","PUBLISH_TITLE":"اطلاعات بیشتر در مورد انتشار در قبیله‌ی تایگا","PUBLISHED_AS_GIG":"استوری به عنوان Gig در قبلیه‌ی تایگا منتشر شده است","EDIT_LINK":"ویرایش لینک","CLOSE":"بستن","SYNCHRONIZE_LINK":"همگام‌سازی با قبلیه‌ی تایگا","PUBLISH_MORE_INFO_TITLE":"آیا برای این وظیفه کسی را لازم دارید؟","PUBLISH_MORE_INFO_TEXT":"

    اگر در مورد بخشی از کار به راهنمایی نیاز دارید، می‌توانید در قبلیه‌ی تایگا گیگ ایجاد کنید و از سراسر جهان کمک دریافت کنید. شما می‌توانید گیگ‌ها را کنترل و مدیریت کنید و از بودن در جمع علاقه‌مند و مشتاق کاربران، لذت ببرید.

    قبیله‌ی تایگا خواهر تایگاست. هر دو پلتفرم به صورت مستقل کار می‌کنند اما ما معتقدیم که اگر این دو را ترکیب کنید، توانمندی‌های آن بسیار بیشتر می‌شود و به همین علت تلاش کردیم که مجتمع‌سازی این دو در یکدیگر، به صورت عالی انجام شده باشد.

    "}},"COMMENTS":{"DELETED_INFO":"دیدگاه توسط {{user}} حذف شده","COMMENTS_COUNT":"{{comments}} دیدگاه","OLDER_FIRST":"قدیمی‌ها در صدر","RECENT_FIRST":"قدیمی‌ترین‌ها در صدر","COMMENT":"دیدگاه","EDITED_COMMENT":"ویرایش‌شده:","SHOW_HISTORY":"نمایش تاریخچه‌ای","TYPE_NEW_COMMENT":"نظر جدیدی بنویسید","SHOW_DELETED":"نمایش دیدگاه‌های حذف شده","HIDE_DELETED":"مخفی کردن دیدگاه‌های حذف شده","DELETE":"حذف دیدگاه","RESTORE":"بازیابی دیدگاه","HISTORY":{"TITLE":"فعالیت"}},"ACTIVITY":{"TITLE":"فعالیت","ACTIVITIES_COUNT":"{{activities}} فعالیت","TAGS_ADDED":"برچسب‌های اضافه شده:","TAGS_REMOVED":"برچسب‌های حذف‌شده:","US_POINTS":"{{role}} امتیاز","NEW_ATTACHMENT":"پیوست جدید:","DELETED_ATTACHMENT":"حذف پیوست:","UPDATED_ATTACHMENT":"پیوست‌های بروز شده ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"ایجاد خصوصیت جدید","UPDATED_CUSTOM_ATTRIBUTE":"بروزرسانی خواص سفارشی","BECAME_DEPRECATED":"منسوخ می‌شود","BECAME_UNDEPRECATED":"از حالت منسوخ خارج می‌شود","TEAM_REQUIREMENT":"لازمه‌های تیم","CLIENT_REQUIREMENT":"نیازمندی‌های مشتری","BLOCKED":"مسدودشده","VALUES":{"NOT_SET":"انتخاب نشده","UNASSIGNED":"آزاد"},"FIELDS":{"SUBJECT":"موضوع","DESCRIPTION":"توضیح","PRIORITY":"اولویت","SEVERITY":"اهمیت","STATUS":"وضعیت","TYPE":"نوع","ASSIGNED_TO":"تخصیص یافته به","ASSIGNED_USERS":"کاربران اختصاص یافته","DUE_DATE":"موعد تحویل","MILESTONE":"اسپرینت","COLOR":"رنگ"}},"BACKLOG":{"PAGE_TITLE":"گزارش امور ناتمام- {{projectName}}","PAGE_DESCRIPTION":"پنل گزارش امور ناتمام به همراه استوری‌های کاربر، اسپرینت پروژه {{projectName}}: {{projectDescription}}","SECTION_NAME":"گزارش امور ناتمام","CUSTOMIZE_GRAPH":"سفارشی کردن گراف گزارشات امور ناتمام شما","CUSTOMIZE_GRAPH_TEXT":"برای ایجاد گرافی خوب که اسپرینت پروژه را نشان دهد، می‌بایست امتیازات و اسپرینت‌ها را از","CUSTOMIZE_GRAPH_ADMIN":"ادمین","CUSTOMIZE_GRAPH_TITLE":"تنظیم امتیازات و اسپرینت‌ها از طریق ادمین","MOVE_US_TO_CURRENT_SPRINT":"انتقال به اسپرینت فعلی","MOVE_US_TO_LATEST_SPRINT":"انتقال به آخرین اسپرینت","EMPTY":"امور ناتمام خالی است!","CREATE_NEW_US":"ایجاد یک استوری کاربری جدید","CREATE_NEW_US_EMPTY_HELP":"شاید بخواهید استوری کاربری جدیدی ایجاد کنید","EXCESS_OF_POINTS":"مازاد امتیازات","PENDING_POINTS":"امتیازات معلق","CLOSED_POINTS":"بسته شده","COMPACT_SPRINT":"اسپرینت‌های فشرده","GO_TO_TASKBOARD":"رفتن به بورد وظایف {{::name}}","EDIT_SPRINT":"ویرایش اسپرینت","TOTAL_POINTS":"مجموع","STATUS_NAME":"نام وضعیت","SORTABLE_FILTER_ERROR":"زمانی که فیلترها باز است، نمی‌توانید روی گزارش امور ناتمام رها کنید","DOOMLINE":"محدوده‌ی زمانی پروژه","CHART":{"XAXIS_LABEL":"اسپرینت‌ها","YAXIS_LABEL":"امتیاز","OPTIMAL":"امتیاز معلق بهینه برای اسپرینت \"{{sprintName}}\" می‌بایست {{value}} باشد","REAL":"امتیاز معلق واقعی برای اسپرینت \"{{sprintName}}\"، معادل {{value}} امتیاز است.","INCREMENT_TEAM":"امتیاز اضافی لازمه‌های تیمی برای اسپرینت \"{{sprintName}}\" معادل {{value}} است","INCREMENT_CLIENT":"امتیاز اضافی لازمه‌های مشتری برای اسپرینت \"{{sprintName}}\" معادل {{value}} است"},"TAGS":{"TOGGLE":"تغییر وضعیت نمایش برچسب‌ها","SHOW":"نمایش تگ‌ها","HIDE":"مخفی کردن برچسب‌ها"},"FORECASTING":{"TITLE":"پیش‌بینی سرعت","BACKLOG":"نمایش لیست امور ناتمام","NEW_SPRINT":"استوری‌های کاربری توصیه‌شده برای اسپرینت بعدی شما با توجه به سرعت کار. برای ایجاد اسپرینت جدید کلیک کنید","CURRENT_SPRINT":"استوری‌های کاربری توصیه شده برای اسپرینت شما بر اساس سرعت کار. برای اضافه کردن اسپرینت فعلی، کلیک کنید."},"TABLE":{"COLUMN_US":"استوری‌های کاربر","TITLE_COLUMN_POINTS":"انتخاب نما برای هر یک از نقش‌ها"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"مجموع
    امتیاز","COMPLETED_POINTS":"
    امتیاز تکمیل‌شده","OPEN_TASKS":"باز کردن
    وظایف","CLOSED_TASKS":"
    وظایف بسته‌شده","IOCAINE_DOSES":"
    دز یوکائین","SHOW_STATISTICS_TITLE":"نمایش آمار","TOGGLE_BAKLOG_GRAPH":"نمایش یا مخفی‌سازی گراف کار باقیمانده","POINTS_PER_ROLE":"امتیازات بر حسب نقش"},"SUMMARY":{"PROJECT_POINTS":"
    امتیاز پروژه","DEFINED_POINTS":"
    امتیاز تعریف شده","CLOSED_POINTS":"
    امتیاز بسته‌شده","POINTS_PER_SPRINT":"امتیاز/
    اسپرینت"},"FILTERS":{"TOGGLE":"تغییر نمایش فیلترها","HIDE":"مخفی کردن فیلترها","SHOW":"نمایش فیلترها"},"SPRINTS":{"TITLE":"اسپرینت‌ها","DATE":"DD MMM YYYY","LINK_TASKBOARD":"بورد وظایف و اسپرینت‌ها","TITLE_LINK_TASKBOARD":"رفتن به بورد وظایف \"{{name}}\"","EMPTY":"تاکنون پیشرفتی وجود نداشته","WARNING_EMPTY_SPRINT_ANONYMOUS":"این اسپرینت هیچ استوری کاربری ندارد","WARNING_EMPTY_SPRINT":"استوری‌های لیست اموم ناتمام را اینجا رها کنید تا پیشرفتی جدید را آغاز کنید","TITLE_ACTION_NEW_SPRINT":"اضافه کردن اسپرینت جدید","TEXT_ACTION_NEW_SPRINT":"ممکن است بخواهید اسپرینت جدیدی در پروژه‌ی خود اضافه کنید","ACTION_SHOW_CLOSED_SPRINTS":"نمایش اسپرینت‌های بسته‌شده","ACTION_HIDE_CLOSED_SPRINTS":"مخفی کردن اسپرینت‌های بسته‌شده"}},"ERROR":{"TEXT1":"اتفاقی افتاده است و اومپا لومپای ما در حال بررسی آن است.","NOT_FOUND":"پیدا نشد","NOT_FOUND_TEXT":"ارور ۴۰۴. صفحه‌ای که به دنبال آن هستید، اکنون وجود ندارد. بهتر است به صفحه‌ی اصلی تایگا برگردید و مجدداً برای پیدا کردن صفحه، تلاش کنید.","PERMISSION_DENIED":"دسترسی ممنوع است","PERMISSION_DENIED_TEXT":"شما اجازه دسترسی به این صفحه را ندارید","VERSION_ERROR":"یکی از اعضای تایگا قبلاً این مورد را تغییر داده و اومپا لومپای ما نمی‌تواند تغییرات شما را اعمال کند. لطفاً صفحه را از نو بارگذاری کنید و تغییرات خود را مجدداً انجام دهید (تغییرات حذف می‌شود)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - بورد اسپرینت وظایف - {{projectName}}","PAGE_DESCRIPTION":"اسپرینت {{sprintName}} (از {{startDate}} الی {{endDate}}) از {{projectName}}. درصد تکمیل:{{completedPercentage}}% ({{completedPoints}} از {{totalPoints}} امتیاز). {{openTasks}} وظایف باز {{totalTasks}}.","SECTION_NAME":"برد وظایف","TITLE_ACTION_ADD":"اضافه کردن وظیفه‌ی جدید","TITLE_ACTION_ADD_BULK":"اضافه کردن تعدادی وظیفه‌ی جدید به صورت گروهی","TITLE_ACTION_ADD_ISSUE":"اضافه کردن موضوع جدید","TITLE_ACTION_ADD_ISSUE_BULK":" اضافه کردن تعدادی موضوع جدید به صورت گروهی ","TITLE_ACTION_ASSIGN":"تخصیص وظیفه","PLACEHOLDER_CARD_TITLE":"این می‌تواند یک وظیفه باشد","PLACEHOLDER_CARD_TEXT":"تقسیم کردن استوری‌ها به وظایف برای دنبال کردن آنها به صورت جداگانه","TABLE":{"COLUMN":"استوری کاربر","TITLE_ACTION_FOLD":"جمع کردن ستون‌ها","TITLE_ACTION_UNFOLD":"گسترده کردن ستون‌ها","TITLE_ACTION_FOLD_ROW":"جمع کردن ردیف","TITLE_ACTION_UNFOLD_ROW":"گسترده کردن ردیف","FIELD_POINTS":"امتیاز","ROW_STORYLESS_TASKS_TITLE":"وظایف بدون گزارش","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"روز","YAXIS_LABEL":"امتیاز","OPTIMAL":"امتیاز معلق بهینه برای روز {{formattedDate}} می‌بایست {{roundedValue}} باشد","REAL":"امتیاز واقعی معلق برای روز {{formattedDate}} برابر است با {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"برای باز کردن سرعتی حرکت دهید","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"هدف را انتخاب کنید","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - وظیفه {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"وضعیت: {{taskStatus }}. توضیحات: {{taskDescription}}","SECTION_NAME":"وظیفه","LINK_TASKBOARD":"برد وظایف","TITLE_LINK_TASKBOARD":"بازگشت به برد وظایف","PLACEHOLDER_SUBJECT":"موضوع وظیفه‌ی جدید را وارد کنید","TITLE_SELECT_STATUS":"نام وضعیت","OWNER_US":"این وظیفه مربوط است به","TITLE_LINK_GO_OWNER":"مراجعه به استوری کاربر","TITLE_DELETE_ACTION":"حذف وظیفه","LIGHTBOX_TITLE_BLOKING_TASK":"مسدود کردن وظایف","FIELDS":{"IS_IOCAINE":"یوکائین است"},"TITLE_ACTION_IOCAINE":"در انجام یک وظیفه با مشکل مواجه شده‌اید؟ با کلیک روی یوکائین حین ویرایش وظیفه، مطمئن شوید که دیگران در مورد مشکل شما مطلع می‌شوند. با مصرف کم و تدریجی، ممکن است در ادامه به تدریج نسبت به این سم مهلک (که شاید سم نباشد!) ایمن شوید، به بیان دیگر اگر هر از گاهی با چالش‌های دشوار سروکار داشته باشید، در کار خود ماهرتر می‌شوید"},"NOTIFICATION":{"OK":"همه‌چیز خوب است","WARNING":"اوه! اتفاقی افتاده است ...","WARNING_TEXT":"اومپا لومپای ما ناراحت است! تغییرات شود ذخیره نشده است!","SAVED":"اومپا لومپا تغییرات شما را ذخیره کرد","CLOSE":"بستن نوتیفیکیشن","MAIL":"نوتیفیکیشن از طریق ایمیل","DESKTOP":"اعلانهای دسکتاپ با استفاده از هشدار مرورگر","ASK_DELETE":"آیا در مورد حذف کردن، مطمئن هستید؟"},"CANCEL_ACCOUNT":{"TITLE":"کنسل کردن حساب کاربری","SUBTITLE":"از این که تایگا را ترک می‌کنید متأسفیم، امیدواریم از کار در محیط تایگا لذت برده باشید :)","PLACEHOLDER_INPUT_TOKEN":"کنسل کردن توکن حساب کاربری","ACTION_LEAVING":"بله، خارج می‌شوم!","SUCCESS":"اومپا لومپای ما حساب کاربری شما را حذف کرد"},"CHANGE_EMAIL_FORM":{"TITLE":"تغییر ایمیل","SUBTITLE":"یک کلیک دیگر تا تغییر ایمیل شما!","PLACEHOLDER_INPUT_TOKEN":"تغییر توکن ایمیل","ACTION_CHANGE_EMAIL":"تغییر ایمیل","SUCCESS":"اومپا لومپای ما ایمیل شما را تغییر داد"},"ISSUES":{"PAGE_TITLE":"موضوعات - {{projectName}}","PAGE_DESCRIPTION":"پنل لیست موضوعات پروژه‌ی {{projectName}}: {{projectDescription}}","SECTION_NAME":"موضوع","ACTION_NEW_ISSUE":"+ موضوع جدید","ACTION_PROMOTE_TO_US":"ارتقا به استوری کاربر","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"این موضوع به استوری کاربری ارتقا داده شد:","EXTERNAL_REFERENCE":"این موضوع ایجاد شده از","GO_TO_EXTERNAL_REFERENCE":"رفتن به منبع","ACTION_DELETE":"حذف موضوع","LIGHTBOX_TITLE_BLOKING_ISSUE":"مسدودسازی موضوعات","LINK_TASKBOARD":"برد وظایف","TITLE_LINK_TASKBOARD":"مراجعه به برد وظایف","FILTER_SPRINTS":"فیلتر کردن اسپرینت‌ها","CHOOSE_SPRINT":"کدام اسپرینت؟","FIELDS":{"PRIORITY":"اولویت","SEVERITY":"اهمیت","TYPE":"نوع"},"FILTER_ISSUES":"فیلتر کردن موضوع‌ها","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"ارتقای این موضوع به یک استوری کاربری جدید","MESSAGE":"آیا مطمئن هستید که می‌خواهید از این موضوع، استوری کاربری جدید بسازید؟"},"TABLE":{"COLUMNS":{"TYPE":"نوع","SEVERITY":"اهمیت","PRIORITY":"اولویت","SUBJECT":"موضوع","VOTES":"رأی","STATUS":"عیت","MODIFIED":"تصحیح شده","ASSIGNED_TO":"اختصاص یافته به"},"TITLE_ACTION_CHANGE_STATUS":"تغییر وضعیت","TITLE_ACTION_ASSIGNED_TO":"تخصیص یافته به","BLOCKED":"مسدودشده","EMPTY":{"TITLE":"موضوعی برای گزارش وجود ندارد :-)","SUBTITLE":"آیا موضوعی پیدا کرده‌اید؟"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - موضوع {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"وضعیت: {{issueStatus }}. نوع: {{issueType}}, اولویت: {{issuePriority}}. اهمیت: {{issueSeverity}}. توضیح: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"پنل Kanban به همراه استوری‌های کاربری پروژه‌ی {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"جمع کردن ستون‌ها","TITLE_ACTION_UNFOLD":"گسترده کردن ستون‌ها","TITLE_ACTION_ADD_US":"اضافه کردن استوری کاربری جدید","TITLE_ACTION_ADD_BULK":"اضافه کردن گروهی","ACTION_SHOW_ARCHIVED":"نمایش آرشیو‌شده‌ها","ACTION_HIDE_ARCHIVED":"مخفی کردن آرشیو‌شده‌ها","HIDDEN_USER_STORIES":"استوری‌های کاربری در وضعیت فعلی، به صورت پیش‌فرض مخفی هستند","PLACEHOLDER_CARD_TITLE":"اینها استوری‌های کاربری شما هستند","PLACEHOLDER_CARD_TEXT":"استوری‌ها می‌توانند وظایف زیرمجموعه نیز داشته باشند تا نیازمندی‌ها جدا شود"},"SEARCH":{"PAGE_TITLE":"جستجو - {{projectName}}","PAGE_DESCRIPTION":"جستجو کردن در مورد همه‌چیز، استوری‌های کاربر، موضوعات، وظایف و صفحات ویکی در پروژه‌ی {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"استوری‌های کاربر","FILTER_ISSUES":"موضوعات","FILTER_TASKS":"وظایف","FILTER_WIKI":"صفحات ویکی","PLACEHOLDER_SEARCH":"جست‌وجو در...","TITLE_ACTION_SEARCH":"جست‌وجو","EMPTY_TITLE":"چیزی در مورد جست‌وجوی شما پیدا نشد.","EMPTY_DESCRIPTION":"از یکی از تب‌های فوق استفاده کنید یا مجدداً جست‌وجو کنید"},"TEAM":{"PAGE_TITLE":"تیم - {{projectName}}","PAGE_DESCRIPTION":"پنل تیم برای نمایش تمام اعضای پروژه‌ی {{projectName}}: {{projectDescription}}","SECTION_NAME":"تیم","PLACEHOLDER_INPUT_SEARCH":"جست‌وجو با استفاده از نام کامل...","COLUMN_MR_WOLF":"آقای گرگ","EXPLANATION_COLUMN_MR_WOLF":"موضوعات بسته","COLUMN_IOCAINE":"مصرف‌کننده‌ی یوکائین","EXPLANATION_COLUMN_IOCAINE":"دوز یوکائین مصرف‌شده","COLUMN_CERVANTES":"سروانتس","EXPLANATION_COLUMN_CERVANTES":"صفحات ویکی ویرایش‌شده","COLUMN_BUG_HUNTER":"شکارچی باگ","EXPLANATION_COLUMN_BUG_HUNTER":"موضوعات گزارش‌شده","COLUMN_NIGHT_SHIFT":"حالت شب","EXPLANATION_COLUMN_NIGHT_SHIFT":"وظایف بسته شده","COLUMN_TOTAL_POWER":"قدرت کلی","EXPLANATION_COLUMN_TOTAL_POWER":"مجموع امتیازات","SECTION_TITLE_TEAM":"تیم >","SECTION_FILTER_ALL":"همه","CONFIRM_LEAVE_PROJECT":"آیا مطمئن هستید که می‌خواهید از پروژه خارج شوید؟","ACTION_LEAVE_PROJECT":"خروج از پروژه"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[حداکثر حجم: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"تنظیمات کاربر","USER_PROFILE":"پروفایل کاربری","CHANGE_PASSWORD":"تغییر رمز عبور","EMAIL_NOTIFICATIONS":"نوتیفیکیشن‌های ایمیلی","DESKTOP_NOTIFICATIONS":"اعلانیه‌های دسکتاپ","EVENTS":"رویداد ها"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"اعلانیه‌های دسکتاپ","SECTION_NAME":"نوتیفیکیشن‌های ایمیلی","COLUMN_PROJECT":"پروژه","COLUMN_RECEIVE_ALL":"دریافت همه","COLUMN_ONLY_INVOLVED":"فقط مشارکت‌شده‌ها","COLUMN_NO_NOTIFICATIONS":"بدون نوتیفیکیشن","OPTION_ALL":"همه","OPTION_INVOLVED":"مشترک","OPTION_NONE":"هیچ کدام"},"PROJECT_SETTINGS":{"SET_START_PAGES":"قرار دادن صفحات شروع","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"پروژه","COLUMN_STARTPAGE":"صفحه شروع","DEFAULT_VALUE":"پیش فرض"},"EVENTS":{"SECTION_NAME":"رویداد ها","SECTION_DESCRIPTION":"رویداد های مهم در بالای صفحه تایگا.","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"فعال شده است","COLUMN_PROJECT":"پروژه"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"استفاده از تصویر پیش‌فرض","ACTION_DELETE_ACCOUNT":"حذف حساب کاربری تایگا","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"ایمیل خود را چک کنید!
    ایمیلی به حساب کاربری شما ارسال کردیم
    که در آن دستورالعمل تنظیم آدرس جدید شما ذکر شده است","CHANGE_PHOTO":"تغییر عکس","FIELD":{"USERNAME":"نام کاربری","EMAIL":"ایمیل","FULL_NAME":"نام کامل","PLACEHOLDER_FULL_NAME":"نام کامل خود را وارد کنید (مثل بیل گیتس)","BIO":"بیوگرافی (حداکثر ۲۱۰ کاراکتر)","PLACEHOLDER_BIO":"چیزی در مورد خودتان بگویید","LANGUAGE":"زبان","LANGUAGE_DEFAULT":"-- استفاده از زبان پیش‌فرض --","THEME":"قالب","THEME_DEFAULT":"-- استفاده از قالب پیش‌فرض --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - ویکی - {{projectName}}","PAGE_DESCRIPTION":"آخرین ویرایش در {{lastModifiedDate}} ({{totalEditions}} ویرایش در مجموع) محتویات: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"حذف این صفحه‌ی ویکی","DELETE_LIGHTBOX_TITLE":"حذف صفحه‌ی ویکی","DELETE_LINK_TITLE":"حذف لینک ویکی","NAVIGATION":{"HOME":"صفحه‌ی اصلی","SECTION_NAME":"بوک‌مارک‌ها","ACTION_ADD_LINK":"اضافه کردن بوک‌مارک","ALL_PAGES":"تمام صفحات ویکی"},"SUMMARY":{"TIMES_EDITED":"دفعات
    ویرایش شده","LAST_EDIT":"آخرین
    ویرایش","LAST_MODIFICATION":"آخرین تغییر"},"SECTION_PAGES_LIST":"تمام صفحات","PAGES_LIST_COLUMNS":{"TITLE":"عنوان","EDITIONS":"ویرایش‌ها","CREATED":"ایجاد شده","MODIFIED":"تصحیح شده","CREATOR":"ایجادکننده","LAST_MODIFIER":"آخرین تصحیح‌کننده"}},"HINTS":{"SECTION_NAME":"راهنما","LINK":"برای دریافت راهنمایی در مورد استفاده از این مورد، به صفحه‌ی پشتیبانی مراجعه کنید","LINK_TITLE":"به صفحه‌ی پشتیبانی ما مراجعه کنید","HINT1_TITLE":"آیا می‌‌دانید که می‌توان پروژه‌ها را ایمپورت و اکسپورت کرد؟","HINT1_TEXT":"با این قابلیت می‌توانید داده‌های خود را از یک تایگا استخراج کرده و به دیگری منتقل کنید","HINT2_TITLE":"آیا می‌دانستید که می‌توانید ویژگی سفارشی تعریف کنید؟","HINT2_TEXT":"اکنون تیم‌ها می‌توانند ویژگی‌های سفارشی برای وارد کردن داده‌های خاصی که برای جریان کارشان مفید است، ایجاد کنند.","HINT3_TITLE":"مرتب کردن پروژه‌ها برای نمایش پروژه‌های مهم‌تر برای شما.","HINT3_TEXT":"۱۰ پروژه‌ای که در ردیف دسترسی مستقیم در بالای صفحه لیست می‌شوند","HINT4_TITLE":"آیا فراموش کرده‌اید که روی چه چیز کار می‌کردید؟","HINT4_TEXT":"نگران نباشید، در داشبورد خود تمام وظایف باز، موضوعات و استوری‌های کاربری را به ترتیبی که رویشان کار کرده‌اید، مشاهده می‌کنید."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} پیوستی در {{obj_name}} آپلود کرده است","US_CREATED":"{{username}} یک استوری کاربری جدید، {{obj_name}} را در {{project_name}} ایجاد کرده است","ISSUE_CREATED":"{{username}} موضوع جدید {{obj_name}} را در {{project_name}} ایجاد کرده است","TASK_CREATED":"{{username}} وظیفه‌ی جدید {{obj_name}} را در {{project_name}} ایجاد کرده است","TASK_CREATED_WITH_US":"{{username}} وظیفه‌ی جدید {{obj_name}} را در {{project_name}} ایجاد کرده است که به استوری کاربری {{us_name}} مربوط می‌شود","WIKI_CREATED":"{{username}} صفحه‌ی ویکی جدید {{obj_name}} در {{project_name}} ایجاد کرده است","MILESTONE_CREATED":"{{username}} اسپرینت جدید {{obj_name}} در{{project_name}} ایجاد کرده است","EPIC_CREATED":"{{username}} جدید epic {{obj_name}} را در {{project_name}} ایجاد کرده است","EPIC_RELATED_USERSTORY_CREATED":"{{username}} استوری کاربری {{related_us_name}} را به epic{{epic_name}} در {{project_name}} مربوط کرده است","NEW_PROJECT":"{{username}} پروژه‌ی {{project_name}} را ایجاد کرده است","MILESTONE_UPDATED":"{{username}} اسپرینت {{obj_name}} را آپدیت کرده است","US_UPDATED":"{{username}} خصوصیت \"{{field_name}}\" از استوری کاربری {{obj_name}} را آپدیت کرده است","US_UPDATED_WITH_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از استوری کاربری {{obj_name}} را به {{new_value}} آپدیت کرد","US_UPDATED_POINTS":"{{username}} امتیازات '{{role_name}}' از استوری کاربری {{obj_name}} را به {{new_value}} تغییر داده است","ISSUE_UPDATED":"{{username}} خصوصیت \"{{field_name}}\" از موضوع {{obj_name}} را آپدیت کرده است","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از موضوع {{obj_name}} را به {new_value}} آپدیت کرده است","TASK_UPDATED":"{{username}} خصوصیت \"{{field_name}}\" از وظیفه‌ی {{obj_name}} را به {{new_value}} آپدیت کرده است.","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از وظیفه‌ی {{obj_name}} را به {{new_value}} آپدیت کرده است.","TASK_UPDATED_WITH_US":"{{username}} خصوصیت \"{{field_name}}\" از وظیفه‌ی {{obj_name}} که به استوری کاربری {{us_name}} مربوط می‌شود را آپدیت کرده است.","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از وظیفه‌ی {{obj_name}} که به استوری کاربری {{us_name}} مربوط می‌شود را به {{new_value}} تغییر داده است","WIKI_UPDATED":"{{username}} صفحه‌ی ویکی {{obj_name}} را آپدیت کرده است","EPIC_UPDATED":"{{username}} خصوصیت \"{{field_name}}\" از epci {{obj_name}} را آپدیت کرده است","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} خصوصیت \"{{field_name}}\" از epic {{obj_name}} را به {{new_value}} تغییر داده است","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} \"{{field_name}}\" ازepic {{obj_name}} را به آپدیت کرده است","NEW_COMMENT_US":"{{username}} دیدگاهی در استوری کاربری {{obj_name}} گذاشته است","NEW_COMMENT_ISSUE":"{{username}} دیدگاهی در موضوع {{obj_name}} اضافه کرده است","NEW_COMMENT_TASK":"{{username}} در وظیفه‌ی {{obj_name}} دیدگاهی گذاشته است","NEW_COMMENT_EPIC":"{{username}} در epic {{obj_name}} دیدگاهی گذاشته است","NEW_MEMBER":"{{project_name}} عضو جدیدی دارد","US_ADDED_MILESTONE":"{{username}} استوری کاربری {{obj_name}} را به {{sprint_name}} اضافه کرده است","US_MOVED":"{{username}} استوری کاربری {{obj_name}} را جابجا کرده است","US_REMOVED_FROM_MILESTONE":"{{username}} استوری کاربری {{obj_name}} را به لیست امور ناتمام اضافه کرده است","BLOCKED":"{{username}} {{obj_name}} را مسدود کرده است","UNBLOCKED":"{{username}} {{obj_name}} را از حالت مسدود خارج کرده است","NEW_USER":"{{username}} به تایگا پیوست","ITEM_TYPES":{"USERSTORY":"گزارش کاربر","ISSUE":"موضوع","TASK":"وظیفه"}},"EVENTS":{"TITLE":"رویداد ها","MY_EVENTS":"رویداد های من","DISMISS_ALL":"رد همه","VIEW_ALL":"بازدید همه","NO_NEW_EVENTS":"رویداد جدیدی وجود ندارد","NO_EVENTS_YET":"هنوز رویدادی وجود ندارد","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} شما را به عنوان عضو افزود","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our
    terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"یک اپلیکیشن خارجی درخواست تأیید دسترسی دارد","PAGE_DESCRIPTION":"یک اپلیکیشن خارجی درخواست تأیید دسترسی دارد","AUTHORIZATION_REQUEST":"آیا {{application}} برای استفاده از حساب کاربری تایگای شما مجاز است؟","LOGIN_WITH_ANOTHER_USER":"ورود با حساب کاربری دیگر","AUTHORIZE_APP":"تأیید دسترسی اپ","CANCEL":"لغو"},"JOYRIDE":{"NAV":{"NEXT":"بعدی","BACK":"بازگشت","SKIP":"رد شدن","DONE":"انجام شده"},"DASHBOARD":{"STEP1":{"TITLE":"پروژه‌ی شما","TEXT":"خوش آمدید! در این بخش پروژه‌هایی که در آن دخیل هستید، موجود است."},"STEP2":{"TITLE":"در حال کار روی","TEXT":"در این بخش استوری‌های کاربری، وظایف و موضوعاتی که رویشان کار می‌کنید، نمایش داده می‌شود."},"STEP3":{"TITLE":"در حال بررسی","TEXT1":"و اینجا پروژه‌هایی که می‌خواهید در موردشان اطلاعات بیشتری به دست آورید را مشاهده می‌کنید","TEXT2":"شما در حال حاضر از تایگا استفاده می‌کنید ;)"},"STEP4":{"TITLE":"بیاید شروع کنیم","TEXT1":"می‌توانید اولین پروژه‌ی تایگای خود را ایجاد کنید.","TEXT2":"خدانگهدار!"}},"BACKLOG":{"STEP1":{"TITLE":"خلاصه‌ی پروژه","TEXT1":"در این بخش وضعیت پروژه‌ی خود را مشاهده می‌کنید","TEXT2":"می‌توانید تمام تنظیمات پروژه را از طریق ادمین تغییر دهید."},"STEP2":{"TITLE":"لیست امورناتمام محصول","TEXT":"گزارش امور ناتمام لیستی از نیازها (استوری‌های کاربری) برای پروژه است. در این بخش می‌توانید اسپرینت‌های خود را برنامه‌ریزی کنید."},"STEP3":{"TITLE":"اسپرینت‌ها","TEXT":"اسپرینت‌ها به بازه‌های زمانی کوچک (معمولاً ۲ هفته) گفته می‌شود که در طول این بازه‌ی زمانی می‌بایست کاری خاص تکمیل و تحویل داده شود."},"STEP4":{"TITLE":"استوری‌های کاربر","TEXT":"آنها لازمه‌های سطح بالا هستند. می‌توانید آنها را به لیست امور ناتمام اضافه کنید و آنها را درگ کرده و به اسپرینت‌هایی که باید تحویل شود، اضافه کنید."}},"KANBAN":{"STEP1":{"TITLE":"سفارشی کردن جریان کاری شما","TEXT":"ستون‌هایی که برای نمایش وضعیت جریان کاری خود نیاز دارید را از طریق ادمین تنظیم کنید"},"STEP2":{"TITLE":"استوری‌های کاربری و وظایف","TEXT":"استوری‌های کاربری لازمه‌های سطح بالا هستند. می‌توانید آنها را درگ کرده و در ستون‌های مختلف قرار دهید."},"STEP3":{"TITLE":"اضافه کردن استوری‌های کاربری","TEXT1":"می‌توانید روی آیکون استوری کاربری کلیک کرده و یک استوری کاربر اضافه کنید و یا گروهی از استوری‌های کاربری را با کلیک روی آیکون گروهی اضافه کنید","TEXT2":"خدانگهدار!"}}},"DISCOVER":{"PAGE_TITLE":"کشف پروژه‌ها - تایگا","PAGE_DESCRIPTION":"دایرکتوری قابل‌جست‌وجو پروژه‌های عمومی در تایگا. لیست امور ناتمام، تایم‌لاین‌ها، موضوعات و تیم‌ها را پیدا کنید. پروژه‌هایی با بیشتری لایک یا پروژه‌های فعال را بررسی کنید. از فیلتر کانبان یا اسکرام استفاده کنید.","DISCOVER_TITLE":"کشف پروژه‌ها","DISCOVER_SUBTITLE":"{projects, plural, one{یک پروژه عمومی} other{# پروژه‌های عمومی}}","MOST_ACTIVE":"بیشترین فعالیت","MOST_ACTIVE_EMPTY":"در حال حاضر پروژه‌ی فعالی وجود ندارد","MOST_LIKED":"با بیشتری لایک","MOST_LIKED_EMPTY":"در حاضر حاضر پروژه‌ی دارای لایک وجود ندارد","VIEW_MORE":"نمایش بیشتر","FEATURED":"پروژه‌های ویژه","EMPTY":"پروژه‌ای در ارتباط با این جست‌وجو وجود ندارد.
    دوباره تلاش کنید!","FILTERS":{"ALL":"همه","KANBAN":"Kanban","SCRUM":"اسکرام","PEOPLE":"جست‌وجو کاربران","WEEK":"هفته‌ی پیش","MONTH":"ماه پیش","YEAR":"سال پیش","ALL_TIME":"همه‌ی زمان‌ها","CLEAR":"حذف فیلترها"},"SEARCH":{"PAGE_TITLE":"جستجو - کشف پروژه‌ها - تایگا","PAGE_DESCRIPTION":"دایرکتوری قابل‌جستجوی پروژه‌های عمومی در تایگا. لیست امور ناتمام، تایم‌لاین‌ها، موضوعات و تیم‌ها را مشاهده کنید. پروژه‌هایی با بیشتری فعالیت را ببینید. از فیلتر بر اساس کانبان یا اسکرام استفاده کنید.","INPUT_PLACEHOLDER":"چیزی بنویسید ...","ACTION_TITLE":"جست‌وجو","RESULTS":"نتایج جست‌وجو"}},"TIPS":{"TIPS_TITLE":"نکته","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-fi.json b/dist/v-1549282893552/locales/taiga/locale-fi.json new file mode 100644 index 0000000..f751101 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-fi.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Kyllä","NO":"Ei","OR":"tai","I_GET_IT":"OK, I get it","LOADING":"Ladataan...","DATE":"DD.MM.YY","DATETIME":"DD.MM.YY - HH:mm","SAVE":"Tallenna","CANCEL":"Peru","ACCEPT":"Hyväksy","DELETE":"Poista","UNLINK":"Poista linkki","CREATE":"Luo uusi","ADD":"Lisää","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Muokkaa","DRAG":"Vedä","TAG_LINE":"Ketterä, ilmainne avoimen koodin projektinhallintaohjelmisto","TAG_LINE_2":"Rakasta projektiasi","BLOCK":"Estä","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"Suljettu","UNBLOCK":"Salli","UNBLOCK_TITLE":"Poista este","BLOCKED_NOTE":"Miksi tämä on estetty?","BLOCKED_REASON":"Ole hyvä ja anna syy","CREATED_BY":"Luonut {{fullDisplayName}}","CLOSE":"sulje","GO_HOME":"Vie minut kotiin","PLUGINS":"Pluginit","ONE_ITEM_LINE":"Yksi riviä kohti...","NEW_BULK":"Lisää monta","SUBTASKS":"Subtasks","PREVIOUS":"Edellinen","NEXT":"Seuraava","LOGOUT":"Kirjaudu ulos","EXTERNAL_USER":"ulkoinen käyttäjä","GENERIC_ERROR":"Oompa Loompas havaitsivat virheen {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Projektin omistaja","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Haluatko varmasti sulkea muokkaustilan?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Liittyvät käyttäjätarinat","CARD":{"ASSIGN_TO":"Valitse tekijä","EDIT":"Muokkaa korttia","DELETE":"Delete card","DELETE_ISSUE":"Poista pyyntö","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Tämä arvo vaikuttaa virheelliseltä.","TYPE_EMAIL":"Tämän pitäisi olla toimiva sähköpostiosoite.","TYPE_URL":"Tämän pitäisi olla toimiva web-osoite.","TYPE_URLSTRICT":"Tämän pitäisi olla toimiva web-osoite.","TYPE_NUMBER":"Arvon pitäisi olla numeerinen.","TYPE_DIGITS":"Arvon pitäisi olla numeroita.","TYPE_DATEISO":"Arvon pitäisi olla muotoa (vvvv-kk-pp).","TYPE_ALPHANUM":"Arvon pitäisi olla alfanumeerinen.","TYPE_PHONE":"Arvon pitäisi olla toimiva puhelinnumero.","NOTNULL":"Arvo ei saa olla tyhjä.","NOT_BLANK":"Arvon ei pitäisi olla tyhjä.","REQUIRED":"Arvo vaaditaan.","REGEXP":"Tämä arvo vaikuttaa virheelliseltä.","MIN":"Arvon pitää olla vähintään %s.","MAX":"Arvon pitää olla korkeintaan %s.","RANGE":"Arvon pitää olla välissä %s - %s.","MIN_LENGTH":"Arvo on liian lyhyt. Tarvitaan vähintään %s merkkiä.","MAX_LENGTH":"Arvo on liian pitkä. Pituus saa olla korkeintaan %s merkkiä.","RANGE_LENGTH":"Arvo on väärän mittainen. Sen pituus pitäisi olla väliltä %s - %s.","MIN_CHECK":"Sinun täytyy valita vähintään %s valintaa.","MAX_CHECK":"Valitse korkeintaan %s vaihtoehtoa.","RANGE_CHECK":"Valitse %s - %s vaihteohtoa.","EQUAL_TO":"Arvojen pitäisi olla samat.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD.MM.YY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Edellinen kuukausi","NEXT_MONTH":"Seuraava kuukausi","MONTHS":{"JAN":"Tammikuu","FEB":"Helmikuu","MAR":"Maaliskuu","APR":"Huhtikuu","MAY":"Toukokuu","JUN":"Kesäkuu","JUL":"Heinäkuu","AUG":"Elokuu","SEP":"Syyskuu","OCT":"Lokakuu","NOV":"Marraskuu","DEC":"Joulukuu"},"WEEK_DAYS":{"SUN":"Sunnuntai","MON":"Maanantai","TUE":"Tiistai","WED":"Keskiviikko","THU":"Torstai","FRI":"Perjantai","SAT":"Lauantai"},"WEEK_DAYS_SHORT":{"SUN":"Sun","MON":"Maa","TUE":"Tii","WED":"Kes","THU":"Tor","FRI":"Per","SAT":"Lau"}},"SEE_USER_PROFILE":"Näytä {{username }} profiili","USER_STORY":"Käyttäjätarina","TASK":"Tehtävä","ISSUE":"Issue","EPIC":"Eepos","TAGS":{"PLACEHOLDER":"Syötä tagi","DELETE":"Poista avainsana","ADD":"Lisää avainsana"},"DESCRIPTION":{"EMPTY":"Tyhjä tila on tylsää...kerro jotain...","NO_DESCRIPTION":"Ei vielä kuvausta lisätty"},"FIELDS":{"SUBJECT":"Aihe","NAME":"Nimi","URL":"URL","DESCRIPTION":"Kuvaus","VALUE":"Arvo","SLUG":"Hukka","COLOR":"Väri","IS_CLOSED":"Suljettu","STATUS":"Tila","TYPE":"Tyyppi","SEVERITY":"Vakavuus","PRIORITY":"Tärkeys","ASSIGNED_TO":"Tekijä","ASSIGNED_USERS":"Assigned users","POINTS":"Pisteet","IS_BLOCKED":"on estetty","REF":"Ref","VOTES":"Ääniä","SPRINT":"Kierros","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Kaikki"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Tekijää ei valittu","ASSIGN":"Valitse tekijä","DELETE_ASSIGNMENT":"Poista tekijä","REMOVE_ASSIGNED":"Poista tekijä","TOO_MANY":"...liikaa käyttäjiä, lisää suodattimia","CONFIRM_UNASSIGNED":"Haluatko varmasti jättää tämän ilman tekijää?","TITLE_ACTION_EDIT_ASSIGNMENT":"Muokkaa tekijää","SELF":"Ota tehtävä itsellesi"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Suljettu","OPEN":"Avoin"},"WATCHERS":{"WATCHERS":"Seuraajat","ADD":"Lisää seuraajia","TITLE_ADD":"Add a project member to the watchers list","DELETE":"Poista vahti","TITLE_LIGHTBOX_DELETE_WARTCHER":"Poista vahti..."},"WATCH_BUTTON":{"WATCH":"Seuraa","WATCHING":"Seuraa","UNWATCH":"Lopeta seuraaminen","WATCHERS":"Seuraajat","BUTTON_TITLE":"Seuraa/Lopeta seuraaminen","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Omat kentät","SAVE":"Tallenna oma kenttä","EDIT":"Muokkaa omaa kenttää","DELETE":"Poista oma attribuutti","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Aihe tai viittaus","TITLE_ACTION_FILTER_BUTTON":"hae","TITLE":"Suodattimet","TITLE_ACTION_SEARCH":"Hae","ACTION_SAVE_CUSTOM_FILTER":"tallenna omaksi suodattimeksi","PLACEHOLDER_FILTER_NAME":"Anna suodattimen nimi ja paina enter","APPLIED_FILTERS_NUM":"Suodattimet asetettu","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Tyyppi","STATUS":"Tila","SEVERITY":"Vakavuus","PRIORITIES":"Kiireellisyydet","TAGS":"Avainsanat","ASSIGNED_TO":"Tekijä","ASSIGNED_USERS":"Assigned users","ROLE":"Rooli","CREATED_BY":"Luoja","CUSTOM_FILTERS":"Omat suodattimet","EPIC":"Eepos"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"tuplaklikkaa muokataksesi","SELECT_LANGUAGE_PLACEHOLDER":"Valitse kieli","SELECT_LANGUAGE_REMOVE_FORMATING":"Poista muotoilu","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Merkintätavan ohjeet"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Eepokset","VIEW_EPICS":"Näytä eepokset","ADD_EPICS":"Lisää eepos","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Poista eepos"},"SPRINTS":{"NAME":"Kierrokset","VIEW_SPRINTS":"Katso kierroksia","ADD_SPRINTS":"Lisää kierroksia","MODIFY_SPRINTS":"Muokkaa kieroksia","DELETE_SPRINTS":"Poista kierroksia"},"USER_STORIES":{"NAME":"Käyttäjätarinat","VIEW_USER_STORIES":"Katso käyttäjätarinoita","ADD_USER_STORIES":"Lisää käyttäjätarinoita","MODIFY_USER_STORIES":"Muokkaa käyttäjätarinoita","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Poista käyttäjätarinoita"},"TASKS":{"NAME":"Tehtävät","VIEW_TASKS":"Katsot tehtäviä","ADD_TASKS":"Lisää tehtäviä","MODIFY_TASKS":"Muokkaa tehtäviä","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Poista tehtäviä"},"ISSUES":{"NAME":"Pyynnöt","VIEW_ISSUES":"Katso pyyntöjä","ADD_ISSUES":"Lisää pyyntöjä","MODIFY_ISSUES":"Muokkaa pyyntöjä","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Poista pyyntöjä"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Katso wiki-sivuja","ADD_WIKI_PAGES":"Lisää wiki-sivuja","MODIFY_WIKI_PAGES":"Muokkaa wiki-sivuja","DELETE_WIKI_PAGES":"Poista wiki-sivuja","VIEW_WIKI_LINKS":"Katso wiki-linkkejä","ADD_WIKI_LINKS":"Lisää wiki-linkkejä","DELETE_WIKI_LINKS":"Poista wiki-linkkejä"}}},"LOGIN":{"PAGE_TITLE":"Kirjaudu - Taiga","PAGE_DESCRIPTION":"Logging in to Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"AUTH":{"INVITED_YOU":"on kutsunut sinut projektiin","NOT_REGISTERED_YET":"Etkö ole vielä rekisteröitynyt?","REGISTER":"Rekisteröidy","CREATE_ACCOUNT":"luo ilmainen tunnuksesi täällä"},"LOGIN_COMMON":{"HEADER":"Minulla on jo Taiga tunnus","PLACEHOLDER_AUTH_NAME":"Käyttäjänimi tai sähköposti (kirjainkoko merkitsevä)","LINK_FORGOT_PASSWORD":"Unohditko?","TITLE_LINK_FORGOT_PASSWORD":"Unohditko salasanasi?","ACTION_ENTER":"Sisään","ACTION_SIGN_IN":"Kirjaudu","PLACEHOLDER_AUTH_PASSWORD":"Salasana (kirjainkoko merkitsevä)","ALT_LOGIN":"Tai kirjaudu käyttäen"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Käyttäjänimesi tai sähköpostisi tai salasanasi on väärä.","SUCCESS":"Oompa Loompat ovat onnellisia, tervetuloa Taigaan."},"REGISTER":{"PAGE_TITLE":"Rekisteröidy - Taiga","PAGE_DESCRIPTION":"Create your account in Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"REGISTER_FORM":{"TITLE":"Rekisteröi uusi Taiga tunnus (ilmainen)","PLACEHOLDER_NAME":"Anna käyttäjänimi (kirjainkoko on merkitsevä)","PLACEHOLDER_FULL_NAME":"Anna koko nimesi","PLACEHOLDER_EMAIL":"Sähköpostisi","PLACEHOLDER_PASSWORD":"Anna salasana (kirjainkoko merkitsevä)","ACTION_SIGN_UP":"Kirjaudu sisään","TITLE_LINK_LOGIN":"Kirjaudu sisään","LINK_LOGIN":"Oletko jo rekisteröitynyt? Kirjaudu sisään"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Unohditko salasanasi - Taiga","PAGE_DESCRIPTION":"Enter your username or email to get a new password and you can access to Taiga again."},"FORGOT_PASSWORD_FORM":{"TITLE":"Hups, unohditko salasanasi?","SUBTITLE":"Anna käyttäjänimesi tai sähköpostisi saadaksesi uuden","PLACEHOLDER_FIELD":"Käyttäjänimi tai sähköposti","ACTION_RESET_PASSWORD":"Uusi salsanasi","LINK_CANCEL":"Vie minut takaisin, muistan sen.","SUCCESS_TITLE":"Tarkista inbox!","SUCCESS_TEXT":"Lähetimme sinulle sähköpostin, jossa ohjeet uuden salasanan asettamiseksi.","ERROR":"Oompa Loompas sanovat että käyttäjänimesi tai sähköpostisi tai salasanasi on väärä."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Vaihda salasanasi - Taiga","SECTION_NAME":"Muuta salasanaa","FIELD_CURRENT_PASSWORD":"Nykyinen salasana","PLACEHOLDER_CURRENT_PASSWORD":"Nykyinen salasanasi (tai on tyhjä jos sinulla ei vielä ole)","FIELD_NEW_PASSWORD":"Uusi salasana","PLACEHOLDER_NEW_PASSWORD":"Anna uusi salasana","FIELD_RETYPE_PASSWORD":"Anna salasana uudelleen","PLACEHOLDER_RETYPE_PASSWORD":"Anna salasana uudelleen","ERROR_PASSWORD_MATCH":"Salasanat eivät täsmää"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Luo uusi pääsy Taigaan","SUBTITLE":"Rautapitoinen ruoka on hyväksi aivoille :P","PLACEHOLDER_NEW_PASSWORD":"Uusi salasana","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Anna salasana uudelleen","ACTION_RESET_PASSWORD":"Uusi salsanasi","ERROR":"Our Oompa Loompas can't find your request to recover your password. Try to ask for it again.","SUCCESS":"Oompa Loompas tallensi uuden salasanasi.
    Yritä kirjautua sisään sillä."},"INVITATION":{"PAGE_TITLE":"Kutsun hyväksyminen - Taiga","PAGE_DESCRIPTION":"Accept the invitation to join a project in Taiga, a project management platform for startups and agile developers & designers who want a simple, beautiful tool that makes work truly enjoyable."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Kutsuasi ei löydy.","SUCCESS":"Olet onnistuneesti liittynyt projektiin {{project_name}}. Tervetuloa!"},"HOME":{"PAGE_TITLE":"Etusivu - Taiga","PAGE_DESCRIPTION":"The Taiga home page with your main projects and all your assigned and watched user stories, tasks and issues","EMPTY_WORKING_ON":"Näyttää tyhjätlä, eikövain? Aloita työskentely ja näet tässä sinua koskevat käyttäjätarinat, tehtävät ja tukipyynnöt.","EMPTY_WATCHING":"Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)","EMPTY_PROJECT_LIST":"Sinulla ei ole vielä projekteja","WORKING_ON_SECTION":"Käynnissä olevat","WATCHING_SECTION":"Seurqnnassa","DASHBOARD":"Projektit Dashboard"},"EPICS":{"TITLE":"Eepokset","SECTION_NAME":"Eepokset","EPIC":"Eepokset","PAGE_TITLE":"Eepokset - {{projectName}}","PAGE_DESCRIPTION":"Eepokset {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ Lisää Eepos","UNASSIGNED":"Tekijä puuttuu"},"EMPTY":{"TITLE":"Ei vielä lisättyjä eepoksia","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Lue lisää eepoksista"},"TABLE":{"VOTES":"Ääniä","NAME":"Nimi","PROJECT":"Projekti","SPRINT":"Kierros","ASSIGNED_TO":"Tekijä valittu","STATUS":"Tila","PROGRESS":"Edistyminen","VIEW_OPTIONS":"Näytä asetukset"},"CREATE":{"TITLE":"Uusi Eepos","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Asiakasvaatimus","BLOCKED":"Suljettu","BLOCKED_NOTE_PLACEHOLDER":"Miksi tämä eepos on estetty?","CREATE_EPIC":"Luo eepos"}},"PROJECTS":{"PAGE_TITLE":"Minun projektit - Taiga","PAGE_DESCRIPTION":"Listaus kaikista projekteistasi, voit järjestää niitä tai luoda uuden.","MY_PROJECTS":"Minun projektit"},"ATTACHMENT":{"SECTION_NAME":"liitteet","TITLE":"{{ fileName }} ladattu {{ date }}\n","LIST_VIEW_MODE":"Listanäkymä","GALLERY_VIEW_MODE":"Gallerianäkymä","DESCRIPTION":"Kirjoita lyhyt kuvaus","DEPRECATED":"(poistettu)","DEPRECATED_FILE":"Vanhentunut?","ADD":"Lisää liitetiedosto {{maxFileSizeMsg}}","DROP":"Raahaa liitetiedostot tähän!","SHOW_DEPRECATED":"+ näytä vanhentuneet liitteet","HIDE_DEPRECATED":"- piilota vanhentuneet liitteet","COUNT_DEPRECATED":"({{ counter }} vanhentunutta)","MAX_UPLOAD_SIZE":"Maksimi tiedoston koko {{maxFileSize}}","DATE":"DD.MM.YY - hh:mm","ERROR_UPLOAD_ATTACHMENT":"Emme onnistuneet lataamaan tiedostoa '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Poista liite...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"liite '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Emme pystyneet poistamaan: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Edellinen","NEXT":"Seuraava"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Muokkaa arvoa","TITLE_ACTION_DELETE_VALUE":"Poista arvo","TITLE_ACTION_DELETE_TAG":"Poista avainsana"},"HELP":"Tarvitsetko apua? Katso tukisivuilta.","PROJECT_DEFAULT_VALUES":{"TITLE":"Oletusarvot","SUBTITLE":"Aseta oletukset kaikille syötteille."},"MEMBERSHIPS":{"TITLE":"Hallinnoi jäseniä","PAGE_TITLE":"Jäsenet - {{projectName}}","ADD_BUTTON":"+ Uusi jäsen","ADD_BUTTON_TITLE":"Lisää jäsen","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Vie","SUBTITLE":"Vie projekti varmuuskopioksi tai luo uusi tämän pohjalta.","EXPORT_BUTTON":"Vie","EXPORT_BUTTON_TITLE":"Vie projekti","LOADING_TITLE":"Varmistustiedostoa muodostetaan","DUMP_READY":"Tiedostosi on valmis","LOADING_MESSAGE":"Älä sulje tätä sivua.","ASYNC_MESSAGE":"Lähetämme sähköpostia, kun on valmista.","SYNC_MESSAGE":"Jos lataus ei ala automaattisesti klikkaa tästä.","ERROR":"Oompa Loompas eivät onnistuneet tekemään tiedostoasi. Yritä uudelleen.","ERROR_BUSY":"Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan."},"MODULES":{"TITLE":"Modulit","EPICS":"Eepokset","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Odottavat","BACKLOG_DESCRIPTION":"Hallinnoi käyttäjätarinoita: järjestele ja priorisoi työtä.","NUMBER_SPRINTS":"Arvio sprinttien lukumäärästä","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Arvioitu pisteiden kokonaismäärä","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Järjestä projektisi tehokkaasti tällä taululla.","ISSUES":"Pyynnöt","ISSUES_DESCRIPTION":"Seuraa projektisi virheitä, kysymyksiä ja parannusehdotuksia. Älä jätä mitään huomiotta!","WIKI":"Wiki","WIKI_DESCRIPTION":"Lisää, muokkaa tai poista sisältöä yhteistyössä muiden kanssa. Tämä on oikea paikka projektin dokumentaatiolle.","MEETUP":"Tapaa","MEETUP_DESCRIPTION":"Valitse videoneuvottelusovellus","SELECT_VIDEOCONFERENCE":"Valitse videoconferenssi-järjestelmä","SALT_CHAT_ROOM":"Lisää vakio-osa keskusteluhuoneen nimeen","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Custom","URL_CHAT_ROOM":"Videoneuvottelun URL-osoite"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Projektin profiili - {{projectName}}","PROJECT_DETAILS":"Projektin tiedot","PROJECT_NAME":"Projektin nimi","TAGS":"Avainsanat","DESCRIPTION":"Kuvaus","RECRUITING":"Etsitäänkö tähän projektiin tekijöitä?","RECRUITING_MESSAGE":"Ketä etsit?","RECRUITING_PLACEHOLDER":"Määritä etsittävät profiilit","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Julkinen projekti","PRIVATE_PROJECT":"Yksityinen projekti","PRIVATE_OR_PUBLIC":"Mitä eroa on julkisella ja yksityisellä projektilla?","DELETE":"Poista tämä projekti","CHANGE_LOGO":"Vaihda logo","ACTION_USE_DEFAULT_LOGO":"Käytä oletuskuvaa","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Projektin omistaja","REQUEST_OWNERSHIP":"Pyydä omistusoikeutta","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Pyyntö","REQUEST_OWNERSHIP_SUCCESS":"Ilmoitamme projektin omistajalle","CHANGE_OWNER":"Vaihda omistajaa","CHANGE_OWNER_SUCCESS_TITLE":"Ok, pyyntösi lähetetty!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Raportit","SUBTITLE":"Vie projektisi CSV-tiedostoon","DESCRIPTION":"Download a CSV file or copy the generated URL and open it in your favourite text editor or spreadsheet to make your own project data reports. You will be able to visualize and analyze all your data easily.","HELP":"Kuinka tätä käytetään omassa taulukossani?","REGENERATE_TITLE":"Vaihda URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"käyttäjätarinoiden raportit","SECTION_TITLE_TASK":"tehtävien raportit","SECTION_TITLE_ISSUE":"pyyntöjen raportit","DOWNLOAD":"Lataa CSV-tiedosto","URL_FIELD_PLACEHOLDER":"Tee uusi CSV-url","TITLE_REGENERATE_URL":"Tee uusi CSV-url","ACTION_GENERATE_URL":"Luo URL","ACTION_REGENERATE":"Tee uusi","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Poista"},"CUSTOM_FIELDS":{"TITLE":"Omat kentät","SUBTITLE":"Määritele omia kenttiä käyttäjätarinoihin, tehtäviin ja pyytöihin","EPIC_DESCRIPTION":"Eeposten vapaavalintaiset kentät","EPIC_ADD":"Lisää vapaavalintainen kenttä eepoksiin","US_DESCRIPTION":"Käyttäjätarinoiden omat kentät","US_ADD":"Lisää käyttäjätarinoihin oma kenttä","TASK_DESCRIPTION":"Tehtävien omat kentät","TASK_ADD":"Lisää omia kenttiä tehtäviin","ISSUE_DESCRIPTION":"Pyyntöjen omat kentät","ISSUE_ADD":"Lisää oma kenttä pyynnöille","FIELD_TYPE_TEXT":"Teksti","FIELD_TYPE_RICHTEXT":"Muotoiltu teksti","FIELD_TYPE_MULTI":"Monirivinen","FIELD_TYPE_DATE":"PVM","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Project values - {{projectName}}","REPLACEMENT":"Kaikkii riveihin joissa on tämä arvo muutetaan ","ERROR_DELETE_ALL":"Et voi poistaa kaikkia arvoja."},"PROJECT_VALUES_POINTS":{"TITLE":"Pisteet","SUBTITLE":"Määrittele pisteet joihin käyttäjätarinat voidaan arvioida","US_TITLE":"Tarinapisteet","ACTION_ADD":"Lisää uusi piste"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioriteetit","SUBTITLE":"Määrittele tärkeydet pyynnöille","ISSUE_TITLE":"Issue prioriteetit","ACTION_ADD":"Lisää uusi tärkeys"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Vakavuudet","SUBTITLE":"Määrittele pyyntöjen vakavuudet","ISSUE_TITLE":"Issue severities","ACTION_ADD":"Lisää uusi vakavuus"},"PROJECT_VALUES_STATUS":{"TITLE":"Tilat","SUBTITLE":"Määrittele tilat joiden kautta käyttäjätarinasi, tehtäväsi ja pyyntösi kulkevat","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Tehtävien tilat","ISSUE_TITLE":"Pyyntöjen tilat"},"PROJECT_VALUES_TYPES":{"TITLE":"Tyypit","SUBTITLE":"Määrittele pyyntöjen tyypit","ISSUE_TITLE":"Pyyntöjen tyypit","ACTION_ADD":"Lisää uusi {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Avainsanat","SUBTITLE":"Näytä ja muokkaa tagien värejä","EMPTY":"Ei tageja","EMPTY_SEARCH":"Ei hakutuloksia","ACTION_ADD":"Lisää avainsana","NEW_TAG":"Uusi tagi","MIXING_HELP_TEXT":"Valitse yhdistettävät tagit","MIXING_MERGE":"Yhdistä tagit","SELECTED":"Valittu"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Lisää uusi tila","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roolit - {{projectName}}","WARNING_NO_ROLE":"Ole varovainen, yksikään rooli projektissasi ei voi arvioida käyttäjätarinoidesi kokoa","HELP_ROLE_ENABLED":"Tämän roolin omaavat jäsenet voivat arvioida käyttäjätarinoiden kokoja","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} jäsentä joilla tämä rooli","TITLE_DELETE_ROLE":"Poista rooli","REPLACEMENT_ROLE":"Kaikki käyttäjä joilla on tämä rooli siirretään","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Voit poistaa kaikki arvot","EXTERNAL_USER":"Ulkoinen käyttäjä","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Salainen avain","PAYLOAD_URL":"Yhteyden URL-osoite","VALID_IPS":"Vaadittavat lähdeIPt (pilkuilla eroteltuna)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket pyynnöt eivät ole allekirjoitettuja joten tarkista IP. Jos IP on tyhjä, ei sitä tarkisteta."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab pyynnöt eivät ole allekirjoitettuja joten tarkista IP. Jos IP on tyhjä, ei sitä tarkisteta."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhookit","ADD_NEW":"Lisää webhook","TYPE_NAME":"Anna palvelun nimi","TYPE_PAYLOAD_URL":"Anna palvelun yhteysosoite (URL)","TYPE_SERVICE_SECRET":"Anna palvelun yksityinen avain","SAVE":"Tallenna Webhook","CANCEL":"Peruuta Webhook","SHOW_HISTORY":"(Näytä historia)","TEST":"Testaa webhook","EDIT":"Muokkaa webhookkia","DELETE":"Poista Webhook","REQUEST":"Pyyntö","RESEND_REQUEST":"Lähetä pyyntö uudestaan","HEADERS":"Ylätunnisteet","PAYLOAD":"Hyötykuorma","RESPONSE":"Vastaus","DATE":"DD.MM.YY - hh:mm:ss","ACTION_HIDE_HISTORY":"(Piilota historia)","ACTION_HIDE_HISTORY_TITLE":"Piilota historian yksityiskohdat","ACTION_SHOW_HISTORY":"(Näytä historia)","ACTION_SHOW_HISTORY_TITLE":"Näytä historian yksityiskohdat","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Custom Attributes - {{projectName}}","ADD":"Anna oma kenttä","EDIT":"Muokkaa omaa kenttää","DELETE":"Poista oma kenttä","SAVE_TITLE":"Tallenna oma kenttä","CANCEL_TITLE":"Peru luonti","SET_FIELD_NAME":"Anna oman kentän nimi","SET_FIELD_DESCRIPTION":"Anna oman kenttäsi kuvaus","FIELD_TYPE_DEFAULT":"-- valitse yksi --","ACTION_UPDATE":"Päivitä oma kenttä","ACTION_CANCEL_EDITION":"Peru versio"},"MEMBERSHIP":{"COLUMN_MEMBER":"Jäsen","COLUMN_ADMIN":"Hallinnoi","COLUMN_ROLE":"Rooli","COLUMN_STATUS":"Tila","STATUS_ACTIVE":"Aktiivinen","STATUS_PENDING":"Odottaa","DELETE_MEMBER":"Poista jäsen","RESEND":"Lähetä uudelleen","SUCCESS_SEND_INVITATION":"Olemme lähettäneet kutsun uudelleen osoitteeseen '{{email}}'.","SUCCESS_DELETE":"Olemme poistaneet viestin {{message}}.","ERROR_DELETE":"Emme pystyneet poistamaan viestiä {{message}}.","DEFAULT_DELETE_MESSAGE":"kutsu sähköpostiin {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Oletukset pisteiden valintaan","LABEL_TASK_STATUS":"Oletukset tehtävien tilaksi","LABEL_ISSUE_TYPE":"Oletukset pyyntöjen tyypeiksi","LABEL_ISSUE_STATUS":"Oletukset pyyntöjen statuksiksi","LABEL_PRIORITY":"Oletus arvo tärkeyden valiintaan","LABEL_SEVERITY":"Oletukset vakavuudeksi"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Anna uuden tilan nimi","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Anna uuden elementin nimi"},"US_STATUS":{"ACTION_ADD_STATUS":"Lisää uusi tila","IS_ARCHIVED_COLUMN":"Arkistoitu","IS_CLOSED_COLUMN":"Suljettu","WIP_LIMIT_COLUMN":"WIP raja","PLACEHOLDER_WRITE_NAME":"Anna uuden tilan nimi"},"MENU":{"PROJECT":"Projekti","ATTRIBUTES":"Attribuutit","MEMBERS":"Jäsenet","PERMISSIONS":"Oikeudet","INTEGRATIONS":"Intergraatiot"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Tila","POINTS":"Pisteet","PRIORITIES":"Tärkeydet","SEVERITIES":"Vakavuudet","TYPES":"Tyypit","CUSTOM_FIELDS":"Omat kentät","TAGS":"Avainsanat","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roolit","ACTION_NEW_ROLE":"+ Uusi rooli","TITLE_ACTION_NEW_ROLE":"Lisää uusi rooli"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Haluaisitko uudeksi projektin omistajaksi?","PRIVATE":"Yksityinen","ACCEPTED_PROJECT_OWNERNSHIP":"Onnittelu! Olet nyt projektin omistaja.","REJECTED_PROJECT_OWNERNSHIP":"OK. Ilmoitamme projektin omistajalle.","ACCEPT":"Hyväksy","REJECT":"Hylkää","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Rajoittamaton","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Muokkaa profiilia","CLOSED_US":"Suljettu US","PROJECTS":"Projektit","PROJECTS_EMPTY":"{{username}} ei vielä omia projekteja","CONTACTS":"Yhteystiedot","CONTACTS_EMPTY":"{{username}} doesn't have contacts yet","CURRENT_USER_CONTACTS_EMPTY":"You don't have contacts yet","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"The people with whom you work at Taiga will be your contacts automatically","TABS":{"ACTIVITY_TAB":"Aikajana","ACTIVITY_TAB_TITLE":"Näytä tämä käyttäjän tapahtumat","PROJECTS_TAB":"Projektit","PROJECTS_TAB_TITLE":"Projektit joissa tämä käyttäjä on mukana","LIKES_TAB":"Tykkäykset","LIKES_TAB_TITLE":"Näytä tämän käyttäjän tykkäykset","VOTES_TAB":"Ääniä","VOTES_TAB_TITLE":"Näyttä kaikki tämän käyttäjän äänestykset","WATCHED_TAB":"Seurattu","WATCHED_TAB_TITLE":"Näytä kaikki tämän käyttäjän seuraamat kohteet","CONTACTS_TAB":"Yhteystiedot","CONTACTS_TAB_TITLE":"Listaa tämän käyttäjän tekemät kontaktit"}},"PROFILE_SIDEBAR":{"TITLE":"Oma profiili","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"Muokkaa bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Kirjoita tähän...","FILTER_TYPE_ALL":"Kaikki","FILTER_TYPE_ALL_TITLE":"Näytä kaikki","FILTER_TYPE_PROJECTS":"Projektit","FILTER_TYPE_PROJECTS_TITLE":"Näytä vain projektit","FILTER_TYPE_EPICS":"Eepokset","FILTER_TYPE_EPICS_TITLE":"Näytä vain eepokset","FILTER_TYPE_USER_STORIES":"Tarinat","FILTER_TYPE_USER_STORIES_TITLE":"Näytä vain käyttäjätarinat","FILTER_TYPE_TASKS":"Tehtävät","FILTER_TYPE_TASKS_TITLE":"Näytä vain tehtävät","FILTER_TYPE_ISSUES":"Pyynnöt","FILTER_TYPE_ISSUES_TITLE":"Show only issues","EMPTY_TITLE":"It looks like there's nothing to show here."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reorder your projects to set in the top the most used ones.
    The top 10 projects will appear in the top navigation bar project list","PRIVATE":"Yksityinen projekti","LOOKING_FOR_PEOPLE":"Tähän projektiin etsitään tekijöitä","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Estetty projekti","THIS_PROJECT_IS_BLOCKED":"Projekti estetty väliaikaisesti","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"In order to unblock your projects, contact the administrator."},"SECTION":{"SEARCH":"Hae","TIMELINE":"Aikajana","EPICS":"Eepokset","BACKLOG":"Odottavat","KANBAN":"Kanban","ISSUES":"Pyynnöt","WIKI":"Wiki","TEAM":"Tiimi","MEETUP":"Tapaa","ADMIN":"Hallinnoi"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Luo projekti","MANAGE_PROJECTS":"Hallitse projekteja","TITLE_CREATE_PROJECT":"Luo projekti","HELP_TITLE":"Taiga Tukisivusto","HELP":"Ohjeet","HOMEPAGE":"Etusivu","FEEDBACK_TITLE":"Lähetä palautetta","FEEDBACK":"Palaute","NOTIFICATIONS_TITLE":"Muokkaa ilmoitusasetuksiasi","NOTIFICATIONS":"Ilmoitukset","VIEW_PROFILE_TITLE":"Näytä profiili","VIEW_PROFILE":"Näytä profiili","EDIT_PROFILE_TITLE":"Muokkaa profiiliasi","EDIT_PROFILE":"Muokkaa profiilia","CHANGE_PASSWORD_TITLE":"Muuta salasanaa","CHANGE_PASSWORD":"Muuta salasanaa","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Discover trending projects","DISCOVER":"Discover"},"LIKE_BUTTON":{"LIKE":"Tykkää","LIKED":"Tykätty","UNLIKE":"Poista tykkäys","BUTTON_TITLE":"Like or unlike this project","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Seuraa tätä projektia ja aseta ilmoitukset","WATCH":"Seuraa","WATCHING":"Seuraa","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Tilaa kaikki ilmoitukset","NOTIFY_ALL_TITLE":"Vastaanota kaikki tämän projektin ilmoitukset","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Vastaanota ilmoituksia vain kun osallistut","UNWATCH":"Lopeta seuraaminen","UNWATCH_TITLE":"Lopeta seuraaminen"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Luo projekti","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Kopioi projekti","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Luo projekti tiedostosta","IMPORT_DESC":"Tuo projekti muista järjestelmistä Taigaan","INVITE":"Kutsu projektiin","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Palvelin","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Julkinen projekti","PRIVATE_PROJECT":"Yksityinen projekti"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Projektin nimi","PROJECT_DESCRIPTION":"Projektikuvaus"},"DUPLICATE":{"TITLE":"Kopioi projekti","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Valitse kopioitava projekti"},"IMPORT":{"TITLE":"Tuo projekti","DESCRIPTION":"Tuo projekti muista järjestelmistä Taigaan","ASYNC_IN_PROGRESS_TITLE":" Oompa Loompas tuovat projektia","ASYNC_IN_PROGRESS_MESSAGE":"Tämä voi kestää muutaman minuutin
    Lähetämme sähköpostin on valmista","UPLOAD_IN_PROGRESS_MESSAGE":"LAdattu {{uploadedSize}} / {{totalSize}}","ERROR":"Oompa Loompas eivät onnistuneet tuomaan tiedostoasi. Yritä uudestaan.","ERROR_TOO_MANY_REQUEST":"Valitettavasti Oompa Loompas ovat kiireisiä juuri. Yritä kohta uudestaan.","ERROR_MESSAGE":"Oompa Loompas eivät pysty lukemaan tiedostoasi: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) on liian iso Oompa Loompaseille, kokeile pienemmällä kuin ({{maxFileSize}})","SYNC_SUCCESS":"Projektisi on tuotu sisään onnistuneesti","IMPORT":"Tuo","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Projektin jäsenet","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Onko {{user_external}} sama henkilö kuin {{user_internal}}?","CHOOSE":"Valitse käyttäjä","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Valitse tekijä","PROJECT_SELECTOR":{"NO_RESULTS":"Ei hakutuloksia","ACTION_SEARCH":"hae","ACTION_BACK":"Palvelin"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Tilisi sallii vain {{members}} jäsenet","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Luetaan sisään projektia","DESCRIPTION":"Tämä voi kestää hetken, pidä ikkuna auki."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Tuo Trello taulut Taigaan","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Tuo GitHub issuet","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Pyynnöt","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Haluatko varmasti poistaa Taiga-tunnuksesi?","CANCEL":"Takaisin asetuksiin","ACCEPT":"Poista tili","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Poista projekti","QUESTION":"Haluatko varmasti poistaa tämän projektin?","SUBTITLE":"Projektin kaikki tiedot poistetaan :-(","CONFIRM":"Kyllä, tiedän mitä teen"},"ASSIGNED_TO":{"SELECT":"Valitse tekijä","SEARCH":"Hae käyttäjiä"},"ADD_MEMBER":{"TITLE":"Uusi jäsen","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Lisää sähköposti","REMOVE":"Poista","INVITE":"Kutsu","CHOOSE_ROLE":"Valitse rooli","PLACEHOLDER_INVITATION_TEXT":"(Vapaaehtoinen) Lisää oma kuvaus kutsuusi uusille jäsenille ;-)","HELP_TEXT":"Taigan käyttäjät lisätään automaattisesti, muille lähetetään kutsu."},"FEEDBACK":{"TITLE":"Kerro jotain...","COMMENT":"...virhe, ehdotuksia, tai huonoin kokemuksesi Taigan kanssa","ACTION_SEND":"Lähetä palautetta"},"SEARCH":{"TITLE":"Hae","PLACEHOLDER_SEARCH":"Mitä etsit?"},"ADD_EDIT_SPRINT":{"TITLE":"Uusi kierros","PLACEHOLDER_SPRINT_NAME":"kierroksen nimi","PLACEHOLDER_SPRINT_START":"Arvioitu alku","PLACEHOLDER_SPRINT_END":"Arvioitu loppu","ACTION_DELETE_SPRINT":"Haluatko poistaa tämän kierroksen?","TITLE_ACTION_DELETE_SPRINT":"poista kierros","LAST_SPRINT_NAME":"viimeinen kierros on {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Lisää pyyntö","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Poista kierros"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Vapaaehtoinen) Lisää oma kuvaus kutsuusi uusille jäsenille ;-)","PLACEHOLDER_TYPE_EMAIL":"Anna sähköposti","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Vaihda projektin omistaja"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Pyydä projektin omistajan muutosta"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Lisää kommentti","BUTTON":"Pyydä tätä jäsentä uudeksi projektin omistajaksi"},"CONTACT_PROJECT":{"TITLE":"Lähetä sähköposti","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Kirjoita viesti","SEND":"Lähetä"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Mikä on projekti?","CHOOSE_PROJECT_FROM":"Mikä on projekti?","SUBJECT":"Aihe","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Ei hakutuloksia"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Eepos {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Eepos","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Linkitä","NEW_USERSTORY":"Uusi käyttäjätarina","EXISTING_USERSTORY":"Luodut käyttäjätarinat","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Aihe","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"Ei hakutuloksia","FILTER_USERSTORIES":"Suodata käyttäjätarinoita","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Poista eepos"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Käyttäjätarina {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Completed {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} of {{userStoryTotalTasks}} tasks closed). Points: {{userStoryPoints}}. Description: {{userStoryDescription}}","SECTION_NAME":"Käyttäjätarina","LINK_TASKBOARD":"Tehtävätaulu","TITLE_LINK_TASKBOARD":"Siirry tehtävätauluun","TOTAL_POINTS":"pisteet yhteensä","ADD":"+ Lisää uusi käyttäjätarina","ADD_BULK":"Lisää monta käyttäjätarinaa","PROMOTED":"Tämä Kt on liitetty pyyntöön:","TITLE_LINK_GO_TO_ISSUE":"Siirry pyyntöön","TITLE_DELETE_ACTION":"Poista käyttäjätarina","LIGHTBOX_TITLE_BLOKING_US":"Meitä estää","NOT_ESTIMATED":"Ei arvioitu","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Lisätietoa","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Muokkaa linkkiä","CLOSE":"Sulje","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Tarvitsetko tekijän tälle tehtävälle?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Kommentti poistettu {{user}}","COMMENTS_COUNT":"{{comments}} Kommentit","OLDER_FIRST":"Vanhin ensin","RECENT_FIRST":"Viimeisin ensin","COMMENT":"Kommentti","EDITED_COMMENT":"Muokattu:","SHOW_HISTORY":"Näytä historia","TYPE_NEW_COMMENT":"Lisää uusi kommentti tässä","SHOW_DELETED":"Näytä poistettu kommentti","HIDE_DELETED":"Piilota poistettu kommentti","DELETE":"Poista kommentti","RESTORE":"Palauta kommentti","HISTORY":{"TITLE":"Aktiivisuus"}},"ACTIVITY":{"TITLE":"Aktiivisuus","ACTIVITIES_COUNT":"{{activities}} Aktiviteetit","TAGS_ADDED":"tagit lisätty","TAGS_REMOVED":"tagit poistettu:","US_POINTS":"{{role}} pisteet","NEW_ATTACHMENT":"uusi liitetiedosto:","DELETED_ATTACHMENT":"poistettu liitetiedosto:","UPDATED_ATTACHMENT":"päivitetty liitetiedosto ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Tiimin vaatimus","CLIENT_REQUIREMENT":"Asiakkaan vaatimus","BLOCKED":"Suljettu","VALUES":{"NOT_SET":"not set","UNASSIGNED":"ilman tekijää"},"FIELDS":{"SUBJECT":"aihe","DESCRIPTION":"kuvaus","PRIORITY":"kiireellisyys","SEVERITY":"vakavuus","STATUS":"tila","TYPE":"tyyppi","ASSIGNED_TO":"tekijä on","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"kierros","COLOR":"väri"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"The backlog panel, with user stories and sprints of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Odottavat","CUSTOMIZE_GRAPH":"Muokkaa backlog-graafia","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Hallinnoi","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Siirrä nykyiseen kierrokseen","MOVE_US_TO_LATEST_SPRINT":"Move to latest Sprint","EMPTY":"The backlog is empty!","CREATE_NEW_US":"Luo uusi Kt","CREATE_NEW_US_EMPTY_HELP":"Voit haluta lisätä uuden käyttäjätarinan","EXCESS_OF_POINTS":"Pisteiden ylimäärä","PENDING_POINTS":"Odottavat pisteet","CLOSED_POINTS":"suljettu","COMPACT_SPRINT":"Kompakti kierros","GO_TO_TASKBOARD":"Siirry tehtävätauluun {{::name}}","EDIT_SPRINT":"Muokkaa kierrosta","TOTAL_POINTS":"yhteensä","STATUS_NAME":"Tilan nimi","SORTABLE_FILTER_ERROR":"Et voi viedä odottaviin, kun suodattimet ovat auki","DOOMLINE":"Projektin laajuus [Doomline]","CHART":{"XAXIS_LABEL":"Kierrokset","YAXIS_LABEL":"Pisteet","OPTIMAL":"Optimal pending points for sprint \"{{sprintName}}\" should be {{value}}","REAL":"Real pending points for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"Vaihda avainsanojen näkyvyyttä","SHOW":"Näytä avainsanat","HIDE":"Piilota avainsanat"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Käyttäjätarinat","TITLE_COLUMN_POINTS":"Valitse näkymä roolille"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"yhteensä
    pistettä","COMPLETED_POINTS":"valmiina
    pistettä","OPEN_TASKS":"avaa
    tehtävät","CLOSED_TASKS":"suljettu
    tehtävää","IOCAINE_DOSES":"myrkkye-
    annosta","SHOW_STATISTICS_TITLE":"Näytä tilastot","TOGGLE_BAKLOG_GRAPH":"Näytä/Piilota burndown-kaavio","POINTS_PER_ROLE":"Pisteitä per rooli"},"SUMMARY":{"PROJECT_POINTS":"projekti
    pistettä","DEFINED_POINTS":"määritellyt
    pisteet","CLOSED_POINTS":"suljettu
    pistettä","POINTS_PER_SPRINT":"pisettä/
    kierros"},"FILTERS":{"TOGGLE":"Vaihda suodattimien näkyvyyttä","HIDE":"Piilota suodattimet","SHOW":"Näytä suodattimet"},"SPRINTS":{"TITLE":"KIERROKSET","DATE":"DD.MM.YY","LINK_TASKBOARD":"Kierroksien tehtävätaulu","TITLE_LINK_TASKBOARD":"Siirry tehtävätauluun {{name}}","EMPTY":"Ei vielä sprinttejä","WARNING_EMPTY_SPRINT_ANONYMOUS":"Tässä sprintissä ei ole käyttäjätarinoita","WARNING_EMPTY_SPRINT":"Raahaa tähän käyttäjätarinoita aloittaaksesi uuden sprintin","TITLE_ACTION_NEW_SPRINT":"Lisää uusi sprintti","TEXT_ACTION_NEW_SPRINT":"Saatat haluta luoda uuden sprintin projektiisi","ACTION_SHOW_CLOSED_SPRINTS":"Näytä suljetut kierrokset","ACTION_HIDE_CLOSED_SPRINTS":"Piilota suljetut kierrokset"}},"ERROR":{"TEXT1":"Jotain tapahtui ja Oompa Loompas työskentelevät sen parissa.","NOT_FOUND":"Ei löytynyt","NOT_FOUND_TEXT":"Virhe 404. Sivua ei löydy. Palaa takaisin TAIGA etusivulle ja katso löydätkö haluamasi sieltä.","PERMISSION_DENIED":"Ei oikeutta","PERMISSION_DENIED_TEXT":"Pääsy estetty.","VERSION_ERROR":"Joku Taigassa on päivittänyt tätä ennen sinua. Muutoksiasi ei voida tallentaa. Lataa sivu uudestaan ja korjaa tilanne."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint tehtävätaulu - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} to {{endDate}}) of {{projectName}}. Completed {{completedPercentage}}% ({{completedPoints}} of {{totalPoints}} points). {{openTasks}} opened tasks of {{totalTasks}}.","SECTION_NAME":"Tehtävätaulu","TITLE_ACTION_ADD":"Lisää uusi tehtävä","TITLE_ACTION_ADD_BULK":"Lisää monta tehtävää","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Valitse tekijä","PLACEHOLDER_CARD_TITLE":"This could be a task","PLACEHOLDER_CARD_TEXT":"Jaa tarinat tehtäviksi, että voit seurata niitä erikseen","TABLE":{"COLUMN":"Käyttäjätarina","TITLE_ACTION_FOLD":"Kavenna sarake","TITLE_ACTION_UNFOLD":"Laajenna sarake","TITLE_ACTION_FOLD_ROW":"Kavenna rivi","TITLE_ACTION_UNFOLD_ROW":"Laajenna rivi","FIELD_POINTS":"pisteet","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Päivät","YAXIS_LABEL":"Pisteet","OPTIMAL":"Optimaaliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}","REAL":"Todelliset odottavat pisteet {{formattedDate}} ovat {{roundedValue}}","DATE":"DD.MM.YY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tehtävä {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Tilanne: {{taskStatus }}. Kuvaus: {{taskDescription}}","SECTION_NAME":"Tehtävä","LINK_TASKBOARD":"Tehtävätaulu","TITLE_LINK_TASKBOARD":"Siirry tehtävätauluun","PLACEHOLDER_SUBJECT":"Anna tehtävän aihe","TITLE_SELECT_STATUS":"Tilan nimi","OWNER_US":"Tehtävä kuuluu käyttäjälle ","TITLE_LINK_GO_OWNER":"Siirry käyttäjätarinaan","TITLE_DELETE_ACTION":"Poista tehtävä","LIGHTBOX_TITLE_BLOKING_TASK":"Estävä tehtävä","FIELDS":{"IS_IOCAINE":"Myrkyllinen"},"TITLE_ACTION_IOCAINE":"Rasittaako tehtävä? Kerro muillekin klikkaamalla myrkyn kuvaketta. Sattaa myös helpottaa jatkossa jos nautit vähitellen."},"NOTIFICATION":{"OK":"Kaikki on kunnossa","WARNING":"Oops, jotain tapahtui...","WARNING_TEXT":"Oompa Loompas eivät pystyneet tallentamaan muutoksiasi!","SAVED":"Oompa Loompas tallensivat kaikki muutoksesi!","CLOSE":"Sulje ilmoitus","MAIL":"Ilmoitukset sähköpostilla","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Oletko varma että haluat poistaa tämän?"},"CANCEL_ACCOUNT":{"TITLE":"Peru tunnuksesi","SUBTITLE":"Olemme pahoillamme että jätät Taigan. Toivottavasti nautit oleskelusta :)","PLACEHOLDER_INPUT_TOKEN":"peru tunnus tokeni","ACTION_LEAVING":"Kyllä, olen lähdössä!","SUCCESS":" Oompa Loompas poistivat tunnuksesi"},"CHANGE_EMAIL_FORM":{"TITLE":"Muuta sähköpostisi","SUBTITLE":"Vielä yksi klikki ja sähköpostisi on päivitetty!","PLACEHOLDER_INPUT_TOKEN":"muuta sähköposti-tokenia","ACTION_CHANGE_EMAIL":"Muuta sähköpostisi","SUCCESS":"Oompa Loompas päivittivät sähköpostisi"},"ISSUES":{"PAGE_TITLE":"Issues - {{projectName}}","PAGE_DESCRIPTION":"The issues list panel of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Issue","ACTION_NEW_ISSUE":"+ UUSI PYYNTÖ","ACTION_PROMOTE_TO_US":"Liitä käyttäjätarinaan","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Tämä pyyntö on liitetty Kthen:","EXTERNAL_REFERENCE":"Tämä pyyntö on luotu täältä:","GO_TO_EXTERNAL_REFERENCE":"Palaa alkuun","ACTION_DELETE":"Poista pyyntö","LIGHTBOX_TITLE_BLOKING_ISSUE":"Estävä pyyntö","LINK_TASKBOARD":"Tehtävätaulu","TITLE_LINK_TASKBOARD":"Siirry tehtävätauluun","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Tärkeys","SEVERITY":"Vakavuus","TYPE":"Tyyppi"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Liitä tämä pyyntö uuteen käyttäjätarinaan","MESSAGE":"Haluatko varmasti lisätä uuden käyttäjätarinan tästä pyynnöstä?"},"TABLE":{"COLUMNS":{"TYPE":"Tyyppi","SEVERITY":"Vakavuus","PRIORITY":"Tärkeys","SUBJECT":"Aihe","VOTES":"Ääniä","STATUS":"Tila","MODIFIED":"Muokattu","ASSIGNED_TO":"Tekijä"},"TITLE_ACTION_CHANGE_STATUS":"Muuta tilaa","TITLE_ACTION_ASSIGNED_TO":"Tekijä","BLOCKED":"Suljettu","EMPTY":{"TITLE":"Ei raportoitavia pyyntöjä:-)","SUBTITLE":"Löysitkö ongelman?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Issue {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Type: {{issueType}}, Priority: {{issuePriority}}. Severity: {{issueSeverity}}. Description: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Kanban-taulu, projektin käyttäjätarinat {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Kavenna sarake","TITLE_ACTION_UNFOLD":"Laajenna sarake","TITLE_ACTION_ADD_US":"Lisää uusi käyttäjätarina","TITLE_ACTION_ADD_BULK":"Lisää monta","ACTION_SHOW_ARCHIVED":"Näytä arkisto","ACTION_HIDE_ARCHIVED":"Piilota arkisto","HIDDEN_USER_STORIES":"Käyttäjätarinat tällä alueella ovat oletuksena piilotettuna","PLACEHOLDER_CARD_TITLE":"Nämä ovat käyttäjätarinasi","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Etsi - {{projectName}}","PAGE_DESCRIPTION":"Etsi projektisisällöstä: tarinat, tehtävät, wiki... {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Eepokset","FILTER_USER_STORIES":"Käyttäjätarinat","FILTER_ISSUES":"Pyynnöt","FILTER_TASKS":"Tehtävät","FILTER_WIKI":"Wiki-sivut","PLACEHOLDER_SEARCH":"Etsi täältä...","TITLE_ACTION_SEARCH":"hae","EMPTY_TITLE":"Mitään ei löytynyt.","EMPTY_DESCRIPTION":"Kokeile ylempiä välilehtiä ja hae uudestaan"},"TEAM":{"PAGE_TITLE":"Tiimi - {{projectName}}","PAGE_DESCRIPTION":"The team panel to show all the members of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Tiimi","PLACEHOLDER_INPUT_SEARCH":"Etsi koko nimellä...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Suljetut pyynnöt","COLUMN_IOCAINE":"Myrkyn syöjä","EXPLANATION_COLUMN_IOCAINE":"Kertyneet myrkyt","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki-sivuja muokattu","COLUMN_BUG_HUNTER":"Virheiden metsästäjä","EXPLANATION_COLUMN_BUG_HUNTER":"Pyyntöjä raportoitu","COLUMN_NIGHT_SHIFT":"Yövuoro","EXPLANATION_COLUMN_NIGHT_SHIFT":"Suljetut tehtävät","COLUMN_TOTAL_POWER":"Kokonaisvoima","EXPLANATION_COLUMN_TOTAL_POWER":"Kokonaispisteet","SECTION_TITLE_TEAM":"Tiimi >","SECTION_FILTER_ALL":"Kaikki","CONFIRM_LEAVE_PROJECT":"Oletko varma että haluat poistua projektista?","ACTION_LEAVE_PROJECT":"Poistu projektista"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"Maksimi koko {{maxFileSize}}","MENU":{"SECTION_TITLE":"Käyttäjän asetukset","USER_PROFILE":"Käyttäjän profiili","CHANGE_PASSWORD":"Muuta salasanaa","EMAIL_NOTIFICATIONS":"Sähköposti-ilmoitukset","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Sähköposti-ilmoitukset","COLUMN_PROJECT":"Projekti","COLUMN_RECEIVE_ALL":"Vastaanota kaikki","COLUMN_ONLY_INVOLVED":"Ainoa osallinen","COLUMN_NO_NOTIFICATIONS":"Ei ilmoituksia","OPTION_ALL":"Kaikki","OPTION_INVOLVED":"Osallisena","OPTION_NONE":"Ei yhtään"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projekti","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projekti"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Käytä oletuskuvaa","ACTION_DELETE_ACCOUNT":"Poista Taiga-tunnus","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Tarkista sähköpostisi!
    Lähetimme ohjeet
    {{email}}
    uuden osoitteen asettamiseen","CHANGE_PHOTO":"Muuta kuva","FIELD":{"USERNAME":"Käyttäjänimi","EMAIL":"Sähköposti","FULL_NAME":"Koko nimi","PLACEHOLDER_FULL_NAME":"Anna koko nimesi","BIO":"Bio (max. 210 merkkiä)","PLACEHOLDER_BIO":"Kerro jotain itsestäsi","LANGUAGE":"Kieli","LANGUAGE_DEFAULT":"-- käytä oletuskieltä --","THEME":"Teema","THEME_DEFAULT":"-- käytä vakioteemaa --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}","DATETIME":"DD.MM.YY - HH:mm","REMOVE":"Poista tämä wiki-sivu","DELETE_LIGHTBOX_TITLE":"Poista wiki-sivu","DELETE_LINK_TITLE":"Poista Wiki linkki","NAVIGATION":{"HOME":"Etusivu","SECTION_NAME":"Kirjanmerkit","ACTION_ADD_LINK":"Lisää kirjanmerkki","ALL_PAGES":"Kaikki wiki-sivut"},"SUMMARY":{"TIMES_EDITED":"kertaa
    muokattu","LAST_EDIT":"viimeinen
    muokkaus","LAST_MODIFICATION":"viimeinen muokkaus"},"SECTION_PAGES_LIST":"Kaikki sivut","PAGES_LIST_COLUMNS":{"TITLE":"Otsikko","EDITIONS":"Editions","CREATED":"Luotu","MODIFIED":"Muokattu","CREATOR":"Luoja","LAST_MODIFIER":"Viimeinen muokkaaja"}},"HINTS":{"SECTION_NAME":"Vihje","LINK":"If you want to know how to use it visit our support page","LINK_TITLE":"Vieraile tukisivustolla","HINT1_TITLE":"Did you know you can import and export projects?","HINT1_TEXT":"This allow you to extract all your data from one Taiga and move it to another one.","HINT2_TITLE":"Did you know you can create custom fields?","HINT2_TEXT":"Teams can now create custom fields as a flexible means to enter specific data useful for their particular workflow.","HINT3_TITLE":"Järjestä projektit itsellesi tärkeysjärjestykseen.","HINT3_TEXT":"The 10 projects are listed in the direct access bar at the top.","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":{"UPLOAD_ATTACHMENT":"{{username}} lisäsi uuden liitetiedoston {{obj_name}}","US_CREATED":"{{username}} loi uuden käyttäjätarinan {{obj_name}} {{project_name}}","ISSUE_CREATED":"{{username}} has created a new issue {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} loi uuden tehtävän {{obj_name}} -\n {{project_name}}","TASK_CREATED_WITH_US":"{{username}} has created a new task {{obj_name}} in {{project_name}} which belongs to the US {{us_name}}","WIKI_CREATED":"{{username}} has created a new wiki page {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} loi uuden sprintin {{obj_name}} - {{project_name}}","EPIC_CREATED":"{{username}} loi uuden eepoksen {{obj_name}} - {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} loi projektin {{project_name}}","MILESTONE_UPDATED":"{{username}} muokkasi sprinttiä {{obj_name}}","US_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the US {{obj_name}} to {{new_value}}","US_UPDATED_POINTS":"{{username}} has updated '{{role_name}}' points of the US {{obj_name}} to {{new_value}}","ISSUE_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the issue {{obj_name}} to {{new_value}}","TASK_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} to {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} which belongs to the US {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the task {{obj_name}} which belongs to the US {{us_name}} to {{new_value}}","WIKI_UPDATED":"{{username}} päivitti wikiä {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} kommentoi tarinaa {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} has commented in the issue {{obj_name}}","NEW_COMMENT_TASK":"{{username}} has commented in the task {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} uusi jäsen lisätty","US_ADDED_MILESTONE":"{{username}} has added the US {{obj_name}} to {{sprint_name}}","US_MOVED":"{{username}} has moved the US {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} has added the US {{obj_name}} to the backlog","BLOCKED":"{{username}} has blocked {{obj_name}}","UNBLOCKED":"{{username}} has unblocked {{obj_name}}","NEW_USER":"{{username}} has joined Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Issue","TASK":"Tehtävä"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Kirjaudu toisena käyttäjänä","AUTHORIZE_APP":"Authorize app","CANCEL":"Peru"},"JOYRIDE":{"NAV":{"NEXT":"Seuraava","BACK":"Palvelin","SKIP":"Ohita","DONE":"Tehty"},"DASHBOARD":{"STEP1":{"TITLE":"Projektisi","TEXT":"Tervetuloa! Tässä näet projektit, joissa olet mukana."},"STEP2":{"TITLE":"Käynnissä olevat","TEXT":"Here you will find the User Stories, Tasks and Issues in which you are working on."},"STEP3":{"TITLE":"Seuraa","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"You are already working with Taiga ;)"},"STEP4":{"TITLE":"Aloitetaan","TEXT1":"You can start by creating your first Taiga project.","TEXT2":"Onnea matkaan!"}},"BACKLOG":{"STEP1":{"TITLE":"Projektiyhteenveto","TEXT1":"Here you will see the state of your project.","TEXT2":"Voit muokata projektiin liityviä asetuksia admin-näkymässä."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Kierrokset","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"Käyttäjätarinat","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"Käyttäjätarinat & Tehtävät","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Onnea matkaan!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Discover projects","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Aktiivisin","MOST_ACTIVE_EMPTY":"Ei vielä AKTIIVISIA projekteja","MOST_LIKED":"Eniten tykätty","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"Näytä lisää","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Kaikki","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Etsitään tekijöitä","WEEK":"Viime viikko","MONTH":"Viime kuu","YEAR":"Viime vuosi","ALL_TIME":"All time","CLEAR":"Tyhjennä suodattimet"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Kirjoita tähän...","ACTION_TITLE":"Hae","RESULTS":"Hakutulokset"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-fr.json b/dist/v-1549282893552/locales/taiga/locale-fr.json new file mode 100644 index 0000000..718ad95 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-fr.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Oui","NO":"Non","OR":"ou","I_GET_IT":"OK, I get it","LOADING":"Veuillez patienter...","DATE":"DD MMM YYYY","DATETIME":"JJ MMM AAAA HH:mm","SAVE":"Enregistrer","CANCEL":"Annuler","ACCEPT":"Accepter","DELETE":"Supprimer","UNLINK":"Détacher","CREATE":"Créer","ADD":"Ajouter","COPY_TO_CLIPBOARD":"Copier dans le presse-papier","COPIED_TO_CLIPBOARD":"Le texte a été copié dans le presse-papier","EDIT":"Éditer","DRAG":"Faire glisser","TAG_LINE":"Votre outil de gestion de projet agile, libre et open source","TAG_LINE_2":"AIMEZ VOTRE PROJET","BLOCK":"Bloquer","BLOCK_TITLE":"Bloquer cet élément si, par exemple, il a une dépendance qui ne peut être satisfaite","BLOCKED":"Bloqué","UNBLOCK":"Débloquer","UNBLOCK_TITLE":"Débloquer cet élément","BLOCKED_NOTE":"Pourquoi est-ce bloqué ?","BLOCKED_REASON":"Veuillez s'il vous plait indiquer la raison","CREATED_BY":"Créé par {{fullDisplayName}}","CLOSE":"clos","GO_HOME":"Retour à l'accueil","PLUGINS":"Plugins","ONE_ITEM_LINE":"Un élément par ligne...","NEW_BULK":"Nouvel ajout en bloc","SUBTASKS":"Sous-tâches","PREVIOUS":"Précédent","NEXT":"Suivant","LOGOUT":"Déconnexion","EXTERNAL_USER":"un utilisateur externe","GENERIC_ERROR":"L'un de nos Oompa Loompas dit {{error}}.","IOCAINE_TEXT":"Ce membre se sent un peu dépassé par cette tâche. Deviendra immunisé contre le poison iocane au fil du temps avec votre aide. Pour l'instant, il peut avoir besoin d'une étreinte.","CLIENT_REQUIREMENT":"Une exigence client est une nouvelle exigence exprimée par le client, qui n'était pas prévue dans le projet initial, et qu'il est nécessaire d'intégrer","TEAM_REQUIREMENT":"Une exigence équipe est une exigence exprimée par l'équipe qui doit être rajoutée au projet, sans que cela n'ait d'impact pour le client","OWNER":"Propriétaire du Projet","CAPSLOCK_WARNING":"Attention ! Vous utilisez des majuscules dans un champ qui est sensible à la casse.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Êtes-vous sûr de vouloir fermer le mode Édition ?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Souvenez-vous que si vous fermez le mode édition sans enregistrer, toutes vos modifications seront perdues","RELATED_USERSTORIES":"Récits utilisateur liés","CARD":{"ASSIGN_TO":"Affecter à","EDIT":"Modifier la carte","DELETE":"Supprimer l’élément","DELETE_ISSUE":"Supprimer le ticket","DETACH_ISSUE_FROM_SPRINT":"Détacher le ticket du sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Cette valeur semble être invalide.","TYPE_EMAIL":"Cette valeur devrait être une adresse courriel valide.","TYPE_URL":"Cette valeur doit être une url valide.","TYPE_URLSTRICT":"Cette valeur doit être une url valide.","TYPE_NUMBER":"Cette valeur doit être un nombre valide.","TYPE_DIGITS":"Cette valeur doit être numérique.","TYPE_DATEISO":"Cette valeur n'est pas une date valide (AAAA-MM-JJ).","TYPE_ALPHANUM":"Cette valeur devrait être alphanumérique.","TYPE_PHONE":"Cette valeur devrait être un numéro de téléphone valide.","NOTNULL":"Cette valeur ne devrait pas être nulle.","NOT_BLANK":"Cette valeur ne doit pas être vide.","REQUIRED":"Cette valeur est obligatoire.","REGEXP":"Cette valeur semble être invalide.","MIN":"Cette valeur devrait être supérieure ou égale à %s.","MAX":"Cette valeur devrait être inférieure ou égale à %s.","RANGE":"Cette valeur devrait être entre %s et %s.","MIN_LENGTH":"Cette valeur est trop courte. Elle devrait avoir %s caractères ou plus.","MAX_LENGTH":"Cette valeur est trop longue. Elle devrait avoir %s caractères ou moins.","RANGE_LENGTH":"La taille de cette valeur est invalide, elle doit être comprise entre %s et %s caractères.","MIN_CHECK":"Vous devez sélectionner au moins %s options.","MAX_CHECK":"Vous devez sélectionner %s options ou moins.","RANGE_CHECK":"Vous devez sélectionner parmi les choix %s et %s.","EQUAL_TO":"Cette valeur doit être identique.","LINEWIDTH":"Une ou plusieurs lignes est peut-être trop long. Essayez de rester en dessous de %s caractères.","PIKADAY":"Format de date non valide, merci d'utiliser JJ MMM AAAA (comme 23 mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mois précédent","NEXT_MONTH":"Mois suivant","MONTHS":{"JAN":"Janvier","FEB":"Février","MAR":"Mars","APR":"Avril","MAY":"Mai","JUN":"Juin","JUL":"Juillet","AUG":"Août","SEP":"Septembre","OCT":"Octobre","NOV":"Novembre","DEC":"Décembre"},"WEEK_DAYS":{"SUN":"Dimanche","MON":"Lundi","TUE":"Mardi","WED":"Mercredi","THU":"Jeudi","FRI":"Vendredi","SAT":"Samedi"},"WEEK_DAYS_SHORT":{"SUN":"Dim","MON":"Lun","TUE":"Mar","WED":"Mer","THU":"Jeu","FRI":"Ven","SAT":"Sam"}},"SEE_USER_PROFILE":"Afficher le profil de {{username}}","USER_STORY":"Récit utilisateur","TASK":"Tâche","ISSUE":"Ticket","EPIC":"Épopée","TAGS":{"PLACEHOLDER":"Saisissez un mot-clé","DELETE":"Supprimer le mot-clé","ADD":"Ajouter un mot-clé"},"DESCRIPTION":{"EMPTY":"Un espace vide est si ennuyeux… allez-y, soyez descriptif…","NO_DESCRIPTION":"Pas encore de description"},"FIELDS":{"SUBJECT":"Objet","NAME":"Nom","URL":"URL","DESCRIPTION":"Description","VALUE":"Valeur","SLUG":"Label","COLOR":"Couleur","IS_CLOSED":"Est fermé ?","STATUS":"Statut","TYPE":"Type","SEVERITY":"Gravité","PRIORITY":"Priorité","ASSIGNED_TO":"Affecté à","ASSIGNED_USERS":"Utilisateurs assignés","POINTS":"Points","IS_BLOCKED":"est bloqué","REF":"Réf.","VOTES":"Votes","SPRINT":"Sprint","DUE_DATE":"Échéance","DUE_DATE_REASON":"Raison de l’échéance"},"ROLES":{"ALL":"Tout"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Non affecté","ASSIGN":"Affecter","DELETE_ASSIGNMENT":"Supprimer l'affectation","REMOVE_ASSIGNED":"Supprimer l'affectation","TOO_MANY":"...trop d'utilisateurs ; filtrez davantage","CONFIRM_UNASSIGNED":"Etes-vous sûr de vouloir continuer sans affectation ?","TITLE_ACTION_EDIT_ASSIGNMENT":"Modifier l'affectation","SELF":"Me l'affecter"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Définir l’échéance"},"ASSIGNED_USERS":{"ADD":"Sélectionner un utilisateur affecté","ADD_ASSIGNED":"Ajouter un utilisateur affecté","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Supprimer l'affectation"},"STATUS":{"CLOSED":"Fermé","OPEN":"Ouvert"},"WATCHERS":{"WATCHERS":"Observateurs","ADD":"Ajouter des observateurs","TITLE_ADD":"Ajoutez un membre du projet à la liste de observateurs","DELETE":"Supprimer l'observateur","TITLE_LIGHTBOX_DELETE_WARTCHER":"Supprimer l'observateur..."},"WATCH_BUTTON":{"WATCH":"Suivre","WATCHING":"Suivi","UNWATCH":"Ne plus suivre","WATCHERS":"Observateurs","BUTTON_TITLE":"Suivre/ne plus suivre cet élément","COUNTER_TITLE":"{total, plural, one{un observateur} other{# observateurs}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Vote positif/négatif pour cet élément","COUNTER_TITLE":"{total, plural, one{un vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Champs personnalisés","SAVE":"Sauver le champ personnalisé","EDIT":"Modifier un champ personnalisé","DELETE":"Supprimer un attribut personnalisé","CONFIRM_DELETE":"Souvenez-vous que toutes les valeurs de ce champ personnalisé vont être effacées.\nEtes-vous sûr de vouloir continuer ?"},"FILTERS":{"INPUT_PLACEHOLDER":"Objet ou référence","TITLE_ACTION_FILTER_BUTTON":"recherche","TITLE":"Filtres","TITLE_ACTION_SEARCH":"Rechercher","ACTION_SAVE_CUSTOM_FILTER":"sauvegarder en tant que filtre personnalisé","PLACEHOLDER_FILTER_NAME":"Écrivez le nom du filtre et appuyez sur \"Entrée\"","APPLIED_FILTERS_NUM":"filtres appliqués","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Type","STATUS":"Statut","SEVERITY":"Gravité","PRIORITIES":"Priorités","TAGS":"Mots-clés","ASSIGNED_TO":"Affecté à","ASSIGNED_USERS":"Utilisateurs assignés","ROLE":"Rôle","CREATED_BY":"Créé par","CUSTOM_FILTERS":"Filtres personnalisés","EPIC":"Épopée"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double cliquer pour modifier","SELECT_LANGUAGE_PLACEHOLDER":"Sélectionnez la langue","SELECT_LANGUAGE_REMOVE_FORMATING":"Retirer la mise en forme","OUTDATED":"Quelqu'un d'autre a fait des modifications en même temps que vous. Vérifiez la nouvelle version dans l'onglet Activité avant de sauvegarder vos changements.","MARKDOWN_HELP":"Aide sur la syntaxe Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Épopées","VIEW_EPICS":"Voir les épopées","ADD_EPICS":"Ajouter des épopées","MODIFY_EPICS":"Modifier des épopées","COMMENT_EPICS":"Commenter des épopées","DELETE_EPICS":"Supprimer des épopées"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Voir les sprints","ADD_SPRINTS":"Ajouter des sprints","MODIFY_SPRINTS":"Modifier des sprints","DELETE_SPRINTS":"Supprimer des sprints"},"USER_STORIES":{"NAME":"Récits utilisateur","VIEW_USER_STORIES":"Afficher les récits utilisateur","ADD_USER_STORIES":"Ajouter des récits utilisateur","MODIFY_USER_STORIES":"Modifier les récits utilisateur","COMMENT_USER_STORIES":"Commenter les récits utilisateur","DELETE_USER_STORIES":"Supprimer des récits utilisateur"},"TASKS":{"NAME":"Tâches","VIEW_TASKS":"Voir les tâches","ADD_TASKS":"Ajouter des tâches","MODIFY_TASKS":"Modifier des tâches","COMMENT_TASKS":"Commenter les tâches","DELETE_TASKS":"Supprimer des tâches"},"ISSUES":{"NAME":"Tickets","VIEW_ISSUES":"Voir les tickets","ADD_ISSUES":"Ajouter des tickets","MODIFY_ISSUES":"Modifier des tickets","COMMENT_ISSUES":"Commenter les tickets","DELETE_ISSUES":"Supprimer les tickets"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Voir les pages wiki","ADD_WIKI_PAGES":"Ajouter des pages wiki","MODIFY_WIKI_PAGES":"Modifier des pages wiki","DELETE_WIKI_PAGES":"Supprimer des pages wiki","VIEW_WIKI_LINKS":"Voir les liens wiki","ADD_WIKI_LINKS":"Ajouter des liens wiki","DELETE_WIKI_LINKS":"Supprimer des liens wiki"}}},"LOGIN":{"PAGE_TITLE":"Connexion - Taiga","PAGE_DESCRIPTION":"Connectez-vous à Taiga, une plateforme de gestion de projets pour les startups, les développeurs et les designers agiles qui veulent un outil simple, beau et qui rend le travail vraiment agréable."},"AUTH":{"INVITED_YOU":"vous a invité à rejoindre le projet","NOT_REGISTERED_YET":"Pas encore inscrit?","REGISTER":"S'inscrire","CREATE_ACCOUNT":"créer votre compte gratuit ici"},"LOGIN_COMMON":{"HEADER":"J'ai déjà un identifiant Taiga","PLACEHOLDER_AUTH_NAME":"Nom d'utilisateur ou courriel (sensible à la casse)","LINK_FORGOT_PASSWORD":"Mot de passe oublié ?","TITLE_LINK_FORGOT_PASSWORD":"Avez-vous oublié votre mot de passe ?","ACTION_ENTER":"Entrer","ACTION_SIGN_IN":"Se connecter","PLACEHOLDER_AUTH_PASSWORD":"Mot de passe (sensible à la casse)","ALT_LOGIN":"Ou connectez vous avec"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"D'après nos Oompa Loompas, votre nom d'utilisateur / adresse courriel ou votre mot de passe sont incorrects.","SUCCESS":"Nos Oompa Loompas sont heureux, bienvenue sur Taiga."},"REGISTER":{"PAGE_TITLE":"S'inscrire - Taiga","PAGE_DESCRIPTION":"Créez votre compte sur Taiga, une plateforme de gestion de projets pour les startups, les développeurs et les designers agiles qui veulent un outil simple, beau et qui rend le travail vraiment agréable."},"REGISTER_FORM":{"TITLE":"Créer un compte Taiga (gratuit)","PLACEHOLDER_NAME":"Choisissez un nom d'utilisateur (sensible à la casse)","PLACEHOLDER_FULL_NAME":"Choisissez votre nom complet","PLACEHOLDER_EMAIL":"Votre adresse courriel","PLACEHOLDER_PASSWORD":"Saisissez un mot de passe (sensible à la casse)","ACTION_SIGN_UP":"S'enregistrer","TITLE_LINK_LOGIN":"Se connecter","LINK_LOGIN":"Êtes-vous déjà enregistré ? Connectez-vous."},"FORGOT_PASSWORD":{"PAGE_TITLE":"Mot de passe oublié - Taiga","PAGE_DESCRIPTION":"Saisissez votre nom d'utilisateur ou votre adresse courriel pour recevoir un nouveau mot de passe et accéder à nouveau à Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Oups, avez-vous oublié votre mot de passe ?","SUBTITLE":"Saisissez votre nom d'utilisateur ou votre adresse courriel pour en obtenir un nouveau","PLACEHOLDER_FIELD":"Nom d'utilisateur ou adresse courriel","ACTION_RESET_PASSWORD":"Réinitialiser le mot de passe","LINK_CANCEL":"Nan, ramenez-moi en arrière. Je crois que je m'en souviens.","SUCCESS_TITLE":"Consultez votre boîte aux lettres !","SUCCESS_TEXT":"Nous vous avons envoyé un courriel avec les instructions pour définir un nouveau mot de passe","ERROR":"D'après nos Oompa Loompas, vous n'êtes pas encore enregistré."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Modifier votre mot de passe - Taiga","SECTION_NAME":"Modifier le mot de passe","FIELD_CURRENT_PASSWORD":"Mot de passe actuel","PLACEHOLDER_CURRENT_PASSWORD":"Votre mot de passe actuel (vide si vous n'avez pas encore de mot de passe)","FIELD_NEW_PASSWORD":"Nouveau mot de passe","PLACEHOLDER_NEW_PASSWORD":"Entrez un nouveau mot de passe","FIELD_RETYPE_PASSWORD":"Confirmez le mot de passe","PLACEHOLDER_RETYPE_PASSWORD":"Confirmez le mot de passe","ERROR_PASSWORD_MATCH":"Les mots de passe ne correspondent pas"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Créez un nouveau mot de passe pour Taiga","SUBTITLE":"Et au fait, vous devriez penser à manger de la nourriture plus riche en fer, c'est bon pour le cerveau. :p","PLACEHOLDER_NEW_PASSWORD":"Nouveau mot de passe","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Confirmez votre nouveau mot de passe","ACTION_RESET_PASSWORD":"Réinitialiser le mot de passe","ERROR":"Nos Oompa Loompas n'ont pas trouvé votre requête de réinitialisation de mot de passe. Effectuez une nouvelle demande.","SUCCESS":"Nos Oompa Loompas ont sauvegardé votre nouveau mot de passe.
    Essayez de vous connecter avec."},"INVITATION":{"PAGE_TITLE":"Acceptation des invitations - Taiga","PAGE_DESCRIPTION":"Acceptez l'invitation à rejoindre un projet sur Taiga, une plateforme de gestion de projets pour les startups, les développeurs et les designers agiles qui veulent un outil simple, beau et qui rend le travail vraiment agréable."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Nos Oompa Loompas n'ont pas trouvé votre invitation.","SUCCESS":"Vous avez rejoint ce projet, Bienvenue sur {{project_name}}"},"HOME":{"PAGE_TITLE":"Accueil - Taiga","PAGE_DESCRIPTION":"La page d'accueil de Taiga sur laquelle apparaissent vos projets principaux et toutes les récits utilisateur, tâches et tickets qui vont sont assignés et surveillés.","EMPTY_WORKING_ON":"Ça fait vide, hein ?Commencez à utiliser Taiga et vous verrez apparaître ici les récits, tâches et tickets sur lesquels vous travaillez.","EMPTY_WATCHING":"Suivez des récits utilisateur, des tâches, des tickets dans vos projets et soyez prévenu des modifications :)","EMPTY_PROJECT_LIST":"Vous n'avez aucun projet pour l'instant","WORKING_ON_SECTION":"Projets en cours","WATCHING_SECTION":"Suivi","DASHBOARD":"Tableau de bord des projets"},"EPICS":{"TITLE":"ÉPOPÉES","SECTION_NAME":"Épopées","EPIC":"ÉPOPÉE","PAGE_TITLE":"Épopées - {{projectName}}","PAGE_DESCRIPTION":"Liste des épopées du projet {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ AJOUTER ÉPOPÉE","UNASSIGNED":"Non affecté"},"EMPTY":{"TITLE":"Il semble n'y avoir aucune épopée pour l'instant","EXPLANATION":"Les épopées sont des éléments à un niveau plus élevé qui englobent les récits utilisateurs.
    Les épopées sont au sommet de la hiérarchie et peuvent être utilisées pour regrouper ensemble des récits utilisateur.","HELP":"En savoir plus sur les épopées"},"TABLE":{"VOTES":"Votes","NAME":"Nom","PROJECT":"Projet","SPRINT":"Sprint","ASSIGNED_TO":"Affecté","STATUS":"Statut","PROGRESS":"Avancement","VIEW_OPTIONS":"Voir les options"},"CREATE":{"TITLE":"Nouvelle épopée","PLACEHOLDER_DESCRIPTION":"Ajoutez une description pour aider les autres utilisateurs à mieux comprendre cette épopée.","TEAM_REQUIREMENT":"Exigence équipe","CLIENT_REQUIREMENT":"Exigence client","BLOCKED":"Bloqué","BLOCKED_NOTE_PLACEHOLDER":"Pourquoi cette épopée est-elle bloquée ?","CREATE_EPIC":"Créer une épopée"}},"PROJECTS":{"PAGE_TITLE":"Mes projets - Taiga","PAGE_DESCRIPTION":"Une liste de tous vos projets, vous pouvez la trier ou en créer une nouvelle.","MY_PROJECTS":"Mes projets"},"ATTACHMENT":{"SECTION_NAME":"pièces jointes","TITLE":"{{ fileName }} déposé le {{ date }}","LIST_VIEW_MODE":"Vue sous forme de liste","GALLERY_VIEW_MODE":"Vue sous forme de galerie","DESCRIPTION":"Saisissez une courte description","DEPRECATED":"(obsolète)","DEPRECATED_FILE":"Obsolète ?","ADD":"Ajoutez une nouvelle pièce jointe. {{maxFileSizeMsg}}","DROP":"Déposer les pièces jointes ici !","SHOW_DEPRECATED":"+ montrer les pièces jointes obsolètes","HIDE_DEPRECATED":"- cacher les pièces jointes obsolètes","COUNT_DEPRECATED":"({{ counter }} obsolètes)","MAX_UPLOAD_SIZE":"La taille maximum de dépôt est {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Nous n'avons pas été capable de téléverser '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Supprimer la pièce jointe...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"la pièce jointe \"{{fileName}}\"","ERROR_DELETE_ATTACHMENT":"Nous n'avons pas été capable de supprimer {{errorMessage}}.","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Précédent","NEXT":"Suivant"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Modifier la valeur","TITLE_ACTION_DELETE_VALUE":"Supprimer","TITLE_ACTION_DELETE_TAG":"Supprimer le mot-clé"},"HELP":"Avez-vous besoin d'aide ? Consultez notre page d'assistance !","PROJECT_DEFAULT_VALUES":{"TITLE":"Valeurs par défaut","SUBTITLE":"Définir les valeurs par défaut pour toutes les listes de sélection."},"MEMBERSHIPS":{"TITLE":"Gérer les membres","PAGE_TITLE":"Membres - {{projectName}}","ADD_BUTTON":"+ Nouveau membre","ADD_BUTTON_TITLE":"Ajouter un membre","UPGRADE_BUTTON":"Améliorer votre forfait","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"Si vous souhaitez ajouter plus de membres, veuillez contacter le propriétaire du projet {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Ce projet a atteint sa limite de ({{members}}) membres autorisés. Si vous désirez augmenter cette limite, merci de contacter l'administrateur."},"PROJECT_EXPORT":{"TITLE":"Exporter","SUBTITLE":"Exportez votre projet pour le sauvegarder ou en créer un nouveau basé sur celui-ci.","EXPORT_BUTTON":"Exporter","EXPORT_BUTTON_TITLE":"Exportez votre projet","LOADING_TITLE":"Nous sommes en train de générer votre fichier de vidage.","DUMP_READY":"Votre fichier de vidage est prêt !","LOADING_MESSAGE":"Merci de ne pas fermer cette page.","ASYNC_MESSAGE":"Nous vous enverrons un courriel lorsque ce sera prêt.","SYNC_MESSAGE":"Si le téléchargement ne commence pas automatiquement, cliquez ici.","ERROR":"Nos Oompa Loompas ont des problèmes à générer le fichier de vidage. S'il vous plait, essayez de nouveau.","ERROR_BUSY":"Nous sommes désolés, nos Oompa Loompas sont très occupés en ce moment. Veuillez réessayer dans quelques minutes."},"MODULES":{"TITLE":"Modules","EPICS":"Épopées","EPICS_DESCRIPTION":"Visualiser et gérer les aspects les plus stratégiques de votre projet","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Gérez votre récits utilisateur pour garder une vue organisée des travaux à venir et priorisés.","NUMBER_SPRINTS":"Nombre prévu de sprints","NUMBER_SPRINTS_HELP":"0 pour un nombre indéterminé","NUMBER_US_POINTS":"Total prévu de points de récit","NUMBER_US_POINTS_HELP":"0 pour un nombre indéterminé","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organisez votre projet de manière agile avec ce tableau.","ISSUES":"Tickets","ISSUES_DESCRIPTION":"Suivez les bugs, questions et améliorations liés à votre projet. Ne ratez rien !","WIKI":"Wiki","WIKI_DESCRIPTION":"Ajoutez, modifiez, ou supprimez du contenu en collaboration avec d'autres. C'est le bon endroit pour la documentation de votre projet.","MEETUP":"Meet Up","MEETUP_DESCRIPTION":"Choisissez un système de vidéoconférence","SELECT_VIDEOCONFERENCE":"Choisissez un système de vidéoconférence","SALT_CHAT_ROOM":"Ajouter un préfixe au nom du salon de chat","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personnalisé","URL_CHAT_ROOM":"URL du salon de discussion"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Profil projet - {{projectName}}","PROJECT_DETAILS":"Détails du projet","PROJECT_NAME":"Nom du projet","TAGS":"Mots-clés","DESCRIPTION":"Description","RECRUITING":"Est-ce que ce projet recherche des membres ?","RECRUITING_MESSAGE":"Qui cherchez-vous ?","RECRUITING_PLACEHOLDER":"Définissez le profil que vous recherchez","FEEDBACK":"Recevoir les commentaires des utilisateurs de Taiga?","PUBLIC_PROJECT":"Projet public","PRIVATE_PROJECT":"Projet privé","PRIVATE_OR_PUBLIC":"Quelle est la différence entre les projets publics et privés ?","DELETE":"Supprimer ce projet","CHANGE_LOGO":"Changer le logo","ACTION_USE_DEFAULT_LOGO":"Utiliser l'image par défaut","MAX_PRIVATE_PROJECTS":"Vous avez atteint le nombre maximum autorisé de projets privés accordé par votre souscription actuelle.","MAX_PRIVATE_PROJECTS_MEMBERS":"Le nombre maximum de membres de projets privés a été dépassé.","MAX_PUBLIC_PROJECTS":"Désolé, vous avez atteint le nombre maximum de projets publics accordé par votre souscription actuelle.","MAX_PUBLIC_PROJECTS_MEMBERS":"Ce projet dépasse le nombre maximum de membres autorisés pour un projet public","PROJECT_OWNER":"Propriétaire du projet","REQUEST_OWNERSHIP":"Demander la propriété","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Voulez-vous devenir le nouveau propriétaire du projet ?","REQUEST_OWNERSHIP_DESC":"Demander que le propriétaire actuel du projet {{name}} vous transfert la propriété.","REQUEST_OWNERSHIP_BUTTON":"Requête","REQUEST_OWNERSHIP_SUCCESS":"Nous allons prévenir le propriétaire du projet","CHANGE_OWNER":"Changer le propriétaire","CHANGE_OWNER_SUCCESS_TITLE":"Ok, votre demande a été envoyée !","CHANGE_OWNER_SUCCESS_DESC":"Nous vous préviendrons par courriel si la demande de propriété du projet est acceptée ou refusée"},"REPORTS":{"TITLE":"Rapports","SUBTITLE":"Exportez les données de votre projet au format CSV pour créer vos propres rapports.","DESCRIPTION":"Téléchargez un fichier CSV ou copier l'URL générée puis ouvrez la dans votre éditeur de texte ou tableur préféré pour créer votre propre rapports de projet. Vous pourrez facilement visualiser et analyser toutes vos données.","HELP":"Comment utiliser ceci dans ma propre feuille de calcul?","REGENERATE_TITLE":"Changer l'URL","REGENERATE_SUBTITLE":"Vous êtes sur le point de changer l’URL d'accès aux données CSV. L'URL précédente sera désactivée. Êtes-vous sûr ?","DELETE_TITLE":"Supprimer l'URL","DELETE_SUBTITLE":"Vous êtes sur le point de changer l’URL d'accès aux données CSV. Êtes-vous sûr ?"},"CSV":{"SECTION_TITLE_EPIC":"rapports d'épopée","SECTION_TITLE_US":"rapports des récits utilisateur","SECTION_TITLE_TASK":"rapports des tâches","SECTION_TITLE_ISSUE":"Rapports des tickets","DOWNLOAD":"Télécharger au format CSV","URL_FIELD_PLACEHOLDER":"Merci de regénérer l'url de téléchargement au format CSV","TITLE_REGENERATE_URL":"Regénérer l'URL du CSV","ACTION_GENERATE_URL":"Générer l'URL","ACTION_REGENERATE":"Regénérer","TITLE_DELETE_URL":"Supprimer l'URL du CSV","ACTION_DELETE_URL":"Supprimer"},"CUSTOM_FIELDS":{"TITLE":"Champs personnalisés","SUBTITLE":"Spécifiez les champs personnalisés de vos récits utilisateur, tâches et tickets","EPIC_DESCRIPTION":"Champs personnalisés des épopées","EPIC_ADD":"Ajouter un champ personnalisé dans les épopées","US_DESCRIPTION":"Champs personnalisés des récits utilisateur","US_ADD":"Ajouter un champ personnalisé dans les récits utilisateur","TASK_DESCRIPTION":"Champs personnalisés de tâches","TASK_ADD":"Ajouter un champ personnalisé dans les tâches","ISSUE_DESCRIPTION":"Champs personnalisés des tickets","ISSUE_ADD":"Ajouter un champ personnalisé dans les tickets","FIELD_TYPE_TEXT":"Texte","FIELD_TYPE_RICHTEXT":"Texte riche","FIELD_TYPE_MULTI":"Multiligne","FIELD_TYPE_DATE":"Date","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Liste déroulante","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valeurs du projet - {{projectName}}","REPLACEMENT":"Tous les éléments avec cette valeur seront modifiés pour","ERROR_DELETE_ALL":"Vous ne pouvez pas effacer toutes les valeurs."},"PROJECT_VALUES_POINTS":{"TITLE":"Points","SUBTITLE":"Spécifiez les points auxquels vos récits utilisateur pourraient être estimés","US_TITLE":"Points de récits utilisateur","ACTION_ADD":"Ajouter un nouveau point"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Priorités","SUBTITLE":"Spécifiez les priorités qu'auront vos tickets","ISSUE_TITLE":"Priorités de tickets","ACTION_ADD":"Ajouter une priorité"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Gravité","SUBTITLE":"Spécifiez la gravité qu'auront vos tickets","ISSUE_TITLE":"Gravité des tickets","ACTION_ADD":"Ajouter un niveau de gravité"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuts","SUBTITLE":"Spécifiez les statuts que vont prendre vos récits utilisateur, tâches et tickets","EPIC_TITLE":"Statuts d'épopée","US_TITLE":"Statuts de récit utilisateur","TASK_TITLE":"Statuts des tâches","ISSUE_TITLE":"Statuts des Tickets"},"PROJECT_VALUES_TYPES":{"TITLE":"Types","SUBTITLE":"Spécifiez les types de ticket possibles","ISSUE_TITLE":"Types de tickets","ACTION_ADD":"Ajouter un nouveau {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Mots-clés","SUBTITLE":"Voir et modifier la couleur de vos mots-clés","EMPTY":"Il n'y a pas de mots-clés pour l'instant","EMPTY_SEARCH":"Il semble qu'aucun résultat ne correspond à vos critères de recherche","ACTION_ADD":"Ajouter un mot-clé","NEW_TAG":"Nouveau mot-clé","MIXING_HELP_TEXT":"Sélectionnez les mots-clés que vous voulez fusionner","MIXING_MERGE":"Fusionner des mots-clés","SELECTED":"Sélectionné"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Échéances","SUBTITLE":"Spécifiez les dates d’échéance que vont prendre vos récits utilisateur, tâches et tickets s'ils sont sélectionnés","US_TITLE":"Etat de la date d'échéance du récit utilisateur","ACTION_ADD_STATUS":"Ajouter un nouveau statut","TASK_TITLE":"Etat de la date d'échéance de la tâche","ISSUE_TITLE":"Etat de la date d'échéance du ticket","DAYS_TO_DUE_DATE":"Nombre de jours jusqu'à la date d'échéance","BEFORE_AFTER":"Avant/après","BEFORE":"Avant","AFTER":"Hors délais"},"ROLES":{"PAGE_TITLE":"Rôles - {{projectName}}","WARNING_NO_ROLE":"Attention, aucun rôle dans votre projet ne pourra estimer la valeur du point pour les récits utilisateurs","HELP_ROLE_ENABLED":"Si activé, les membres affectés à ce rôle pourront estimer la valeur du point pour les récits utilisateurs","DISABLE_COMPUTABLE_ALERT_TITLE":"Êtes-vous sûr de vouloir désactiver les estimations de ce rôle ?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Si vous désactivez les estimations pour le rôle {{roleName}} toutes les estimations précédentes faites par ce rôle seront supprimées","COUNT_MEMBERS":"{{ role.members_count }} membres avec ce rôle","TITLE_DELETE_ROLE":"Supprimer des rôles","REPLACEMENT_ROLE":"Tous les utilisateurs avec ce rôle seront déplacés dans","WARNING_DELETE_ROLE":"Attention ! Toutes les estimations du rôle vont être supprimées","ERROR_DELETE_ALL":"Vous ne pouvez pas supprimer toutes les valeurs","EXTERNAL_USER":"Utilisateur externe","NOTE_EXTERNAL_USERS":"Note : par Utilisateur Extérieur nous voulons dire n'importe qui n'appartenant pas à la plateforme Taiga, moteurs de recherche inclus. Attention à utiliser ce rôle avec prudence."},"THIRD_PARTIES":{"SECRET_KEY":"Clé secrète","PAYLOAD_URL":"URL de Payload","VALID_IPS":"IP sources valides (séparées par des virgules)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Les requêtes Bitbucket ne sont pas signées, donc le meilleur moyen de vérifier l'origine est par l'adresse IP. Si le champ est vide il n'y aura pas de validation de l'IP."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Les requêtes Gitlab ne sont pas signées, donc le meilleur moyen de vérifier l'origine est par l'adresse IP. Si le champ est vide il n'y aura pas de validation de l'IP."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":" GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Ajouter une nouvelle dérivation","TYPE_NAME":"Entrez le nom du service","TYPE_PAYLOAD_URL":"Entrez l'URL de payload du service","TYPE_SERVICE_SECRET":"Entrez la clé secrète du service","SAVE":"Enregistrer la dérivation","CANCEL":"Annuler la dérivation","SHOW_HISTORY":"(Montrer l'historique)","TEST":"Tester la dérivation","EDIT":"Éditer la dérivation","DELETE":"Supprimer la dérivation","REQUEST":"Requête","RESEND_REQUEST":"Renvoyer la requête","HEADERS":"Entêtes","PAYLOAD":"Données utiles","RESPONSE":"Réponse","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Cacher l'historique)","ACTION_HIDE_HISTORY_TITLE":"Cacher l'historique","ACTION_SHOW_HISTORY":"(Afficher l'historique)","ACTION_SHOW_HISTORY_TITLE":"Afficher l'historique","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Attributs Personnalisés - {{projectName}}","ADD":"Ajouter un champ personnalisé","EDIT":"Editer un champ personnalisé","DELETE":"Supprimer un champ personnalisé","SAVE_TITLE":"Sauvegarder le champ personnalisé","CANCEL_TITLE":"Annuler la création","SET_FIELD_NAME":"Saisissez le nom du champ personnalisé","SET_FIELD_DESCRIPTION":"Entrez la description de votre champ personnalisé","FIELD_TYPE_DEFAULT":"-- sélectionner --","ACTION_UPDATE":"Mettre à jour le champ personnalisé","ACTION_CANCEL_EDITION":"Annuler l'édition"},"MEMBERSHIP":{"COLUMN_MEMBER":"Membre","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rôle","COLUMN_STATUS":"Statut","STATUS_ACTIVE":"Actif","STATUS_PENDING":"En attente","DELETE_MEMBER":"Supprimer un membre","RESEND":"Renvoyer","SUCCESS_SEND_INVITATION":"Nous avons envoyé une autre invitation à '{{email}}'.","SUCCESS_DELETE":"Nous avons supprimé {{message}}.","ERROR_DELETE":"Nous n'avons pas été capable de supprimer {{message}}.","DEFAULT_DELETE_MESSAGE":"l'invitation à {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Valeur par défaut pour le sélecteur de statut d'épopée","LABEL_US_STATUS":"Valeur par défaut pour le sélecteur de statut de récit utilisateur","LABEL_POINTS":"Valeur par défaut pour la sélection des points","LABEL_TASK_STATUS":"Valeur par défaut pour la sélection du statut des tâches","LABEL_ISSUE_TYPE":"Valeur par défaut pour le sélecteur de type","LABEL_ISSUE_STATUS":"Valeur par défaut pour le sélecteur de statut de bug","LABEL_PRIORITY":"Valeur par défaut de la sélection des priorités","LABEL_SEVERITY":"Valeur par défaut pour le sélecteur de gravité"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Entrez le nom du nouveau statut","PLACEHOLDER_DAYS_TO_DUE_DATE":"Renseigner le nombre de jours jusqu'à la date d'échéance"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Entrez un nom pour le nouvel élément"},"US_STATUS":{"ACTION_ADD_STATUS":"Ajouter un nouveau statut","IS_ARCHIVED_COLUMN":"Archivé","IS_CLOSED_COLUMN":"Fermé","WIP_LIMIT_COLUMN":"Limite de Work In Progress","PLACEHOLDER_WRITE_NAME":"Donnez un nom au nouvel statut"},"MENU":{"PROJECT":"Projet","ATTRIBUTES":"Attributs","MEMBERS":"Membres","PERMISSIONS":"Permissions","INTEGRATIONS":"Intégrations"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Points","PRIORITIES":"Priorités","SEVERITIES":"Gravité","TYPES":"Types","CUSTOM_FIELDS":"Champs personnalisés","TAGS":"Mots-clés","DUE_DATES":"Échéances"},"SUBMENU_ROLES":{"TITLE":"Rôles","ACTION_NEW_ROLE":"+ Nouveau rôle","TITLE_ACTION_NEW_ROLE":"Ajouter un nouveau rôle"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Voudriez-vous devenir le nouveau propriétaire du projet ?","PRIVATE":"Privé","ACCEPTED_PROJECT_OWNERNSHIP":"Félicitations ! Vous êtes maintenant le nouveau propriétaire du projet.","REJECTED_PROJECT_OWNERNSHIP":"OK. Nous allons contacter le propriétaire actuel du projet","ACCEPT":"Accepter","REJECT":"Rejeter","PROPOSE_OWNERSHIP":"{{owner}}, le propriétaire actuel du projet {{project}} a demandé à ce que vous soyez le nouveau propriétaire.","ADD_COMMENT":"Voulez-vous ajouter un commentaire pour le propriétaire du projet ?","UNLIMITED_PROJECTS":"Illimité","OWNER_MESSAGE":{"PRIVATE":"Gardez en mémoire que vous pouvez posséder jusqu'à {{maxProjects}} projets privés. Vous possédez actuellement {{currentProjects}} projets privés.","PUBLIC":"Gardez en mémoire que vous pouvez posséder jusqu'à {{maxProjects}} projets publics. Vous possédez actuellement {{currentProjects}} projets publics."},"CANT_BE_OWNED":"Pour le moment, vous ne pouvez devenir propriétaire d'un projet de ce type. Si vous voulez devenir propriétaire de ce projet, merci de contacter l'administrateur afin qu'il puisse modifier les paramètres de votre compte pour autoriser la propriété de projet."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Modifier le profil","CLOSED_US":"Récit utilisateur fermé","PROJECTS":"Projets","PROJECTS_EMPTY":"{{username}} n'a aucun projet pour l'instant","CONTACTS":"Contacts","CONTACTS_EMPTY":"{{username}} n'a aucun contact pour l'instant","CURRENT_USER_CONTACTS_EMPTY":"Vous n'avez aucun contact pour l'instant","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Les personnes avec qui vous travaillez à Taiga seront vos contacts automatiquement","TABS":{"ACTIVITY_TAB":"Chronologie","ACTIVITY_TAB_TITLE":"Voir toutes les activités de cet utilisateur","PROJECTS_TAB":"Projets","PROJECTS_TAB_TITLE":"Liste de tous les projets dont l'utilisateur est membre","LIKES_TAB":"J'aime","LIKES_TAB_TITLE":"Lister tous les \"J'aime\" de cet utilisateur","VOTES_TAB":"Votes","VOTES_TAB_TITLE":"Lister tous les votes faits par cet utilisateur","WATCHED_TAB":"Suivre","WATCHED_TAB_TITLE":"Lister tous les éléments suivis par cet utilisateur","CONTACTS_TAB":"Contacts","CONTACTS_TAB_TITLE":"Lister tous les contacts pris par cet utilisateur"}},"PROFILE_SIDEBAR":{"TITLE":"Votre profil","DESCRIPTION":"Tout le monde peut voir ce que vous faites et ce sur quoi vous travaillez. Ajoutez votre bio pour donner une version améliorée de vos informations.","ADD_INFO":"Editer la biographie"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Écrivez quelque chose...","FILTER_TYPE_ALL":"Toutes","FILTER_TYPE_ALL_TITLE":"Voir tous","FILTER_TYPE_PROJECTS":"Projets","FILTER_TYPE_PROJECTS_TITLE":"Voir uniquement les projets","FILTER_TYPE_EPICS":"Épopées","FILTER_TYPE_EPICS_TITLE":"N'afficher que les épopées","FILTER_TYPE_USER_STORIES":"Récits","FILTER_TYPE_USER_STORIES_TITLE":"Voir uniquement les user stories","FILTER_TYPE_TASKS":"Tâches","FILTER_TYPE_TASKS_TITLE":"Voir uniquement les tâches","FILTER_TYPE_ISSUES":"Tickets","FILTER_TYPE_ISSUES_TITLE":"Voir uniquement les tickets","EMPTY_TITLE":"Il n'y a rien à afficher ici."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Réorganisez vos projets pour placer les plus utilisés en premier.
    Les 10 premiers projets apparaitront dans la liste des projets de la barre de navigation supérieure","PRIVATE":"Projet privé","LOOKING_FOR_PEOPLE":"Est-ce que ce projet recherche des membres ?","FANS_COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{un observateur} other{# observateurs}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{un membre} other{# membres}}","BLOCKED_PROJECT":{"BLOCKED":"Projet bloqué","THIS_PROJECT_IS_BLOCKED":"Ce projet est temporairement verrouillé","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Pour débloquer vos projets, merci de contacter l'administrateur."},"SECTION":{"SEARCH":"Rechercher","TIMELINE":"Chronologie","EPICS":"Épopées","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Tickets","WIKI":"Wiki","TEAM":"Équipe","MEETUP":"Meet up","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Créer un projet","MANAGE_PROJECTS":"Gérer les projets","TITLE_CREATE_PROJECT":"Créer un projet","HELP_TITLE":"Page d'assistance Taiga","HELP":"Aide","HOMEPAGE":"Page d'accueil","FEEDBACK_TITLE":"Envoyez vos commentaires","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Modifier vos réglages de notification","NOTIFICATIONS":"Notifications","VIEW_PROFILE_TITLE":"Afficher le profil","VIEW_PROFILE":"Afficher le profil","EDIT_PROFILE_TITLE":"Modifier votre profil","EDIT_PROFILE":"Modifier le profil","CHANGE_PASSWORD_TITLE":"Modifier le mot de passe","CHANGE_PASSWORD":"Modifier le mot de passe","DASHBOARD_TITLE":"Tableau de bord","DISCOVER_TITLE":"Découvrir les projets populaires","DISCOVER":"Découvrir"},"LIKE_BUTTON":{"LIKE":"J'aime","LIKED":"J'aime","UNLIKE":"Je n'aime plus","BUTTON_TITLE":"Aimer ou ne plus aimer ce projet","COUNTER_TITLE":"{total, plural, one{un fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Suivre ce projet et définir une politique de notification","WATCH":"Suivre","WATCHING":"Suivi","COUNTER_TITLE":"{total, plural, one{un observateur} other{# observateurs}}","OPTIONS":{"NOTIFY_ALL":"Recevoir toutes les notifications","NOTIFY_ALL_TITLE":"Recevoir toutes les notifications pour ce projet","NOTIFY_INVOLVED":"Uniquement si impliqué","NOTIFY_INVOLVED_TITLE":"Recevoir des notifications uniquement si vous êtes impliqué","UNWATCH":"Ne plus suivre","UNWATCH_TITLE":"Ne plus suivre ce projet"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contactez l'équipe du projet","CONTACT_BUTTON":"Contactez le projet"},"CREATE":{"TITLE":"Créer un projet","CHOOSE_TEMPLATE":"Quel template correspond le mieux à votre projet ?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioriser et résoudre vos tâches sur de court cycles de temps","TEMPLATE_SCRUM_LONGDESC":"Scrum est une méthodologie de développement de logiciels agile, incrémentale et itérative pour la gestion du développement de produits.\n\nLe backlog du produit est ce qui sera finalement livré, organisé dans l'ordre dans lequel il doit être livré. Les besoins sont divisés en fragments manageables et exécutables nommés sprints. Chaque fois que l'équipe initie un nouveau sprint; elle s'engage à livrer un certain nombre de récits utilisateurs du backlog, en fonction de leurs compétences, capacités et ressources. Le projet avance à mesure que le backlog se vide.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Garder un flux de travail constant sur les tâches indépendantes","TEMPLATE_KANBAN_LONGDESC":"La méthodologie Kanban est utilisée pour répartir les éléments d'un projet entre différents états.\n\nUne carte Kamban est similaire à un mémo ou un post-it qui détaille chaque tâche (ou récit) qu'il faut effectuer dans le projet. Le tableau Kanban est utilisé pour déplacer chaque carte d'un état d'avancement à l'autre, d'état en état, facilitant de ce fait l'avancée des tâches.","DUPLICATE":"Dupliquer le projet","DUPLICATE_DESC":"Repartir de rien en conservant vos configurations","IMPORT":"Importer un projet","IMPORT_DESC":"Importez votre projet depuis de multiples plateformes vers Taïga","INVITE":"Inviter au sein du projet","SOLO_PROJECT":"Vous allez être seul sur ce projet","INVITE_LATER":"(Vous pourrez inviter d'autres membres plus tard)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Malheureusement vous avez atteint le nombre maximum de projets privés. Si vous voulez augmenter la limite, contactez votre administrateur.","MAX_PUBLIC_PROJECTS":"Malheureusement, vous avez atteind le nombre maximal de projets publics. Si vous souhaitez en augmenter le nombre, merci de contacter un administrateur","PUBLIC_PROJECT":"Projet public","PRIVATE_PROJECT":"Projet privé"},"COMMON":{"DETAILS":"Détails du nouveau projet","PROJECT_TITLE":"Nom du projet","PROJECT_DESCRIPTION":"Description du projet"},"DUPLICATE":{"TITLE":"Dupliquer le projet","DESCRIPTION":"Repartir de rien en conservant vos configurations","SELECT_PLACEHOLDER":"Choisissez un projet existant à dupliquer"},"IMPORT":{"TITLE":"Import un projet","DESCRIPTION":"Importez votre projet depuis de multiples plateformes vers Taïga","ASYNC_IN_PROGRESS_TITLE":"Nos Oompa Loompas sont en train d'importer votre projet","ASYNC_IN_PROGRESS_MESSAGE":"Ce processus pourrait durer plusieurs minutes
    Nous vous enverrons un courriel quand ce sera prêt","UPLOAD_IN_PROGRESS_MESSAGE":"{{uploadedSize}} de {{totalSize}} déposés","ERROR":"Nos Oompas Loompas ont rencontré des problèmes en important vos données de vidage. Merci de réessayer.","ERROR_TOO_MANY_REQUEST":"Nous sommes désolés, nos Oompa Loompas sont très occupés en ce moment. Veuillez réessayer dans quelques minutes.","ERROR_MESSAGE":"Nos Oompa Loompas ont des problèmes pour importer vos données de vidage : {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) est un peu trop lourd pour nos Oompa Loompas, réessayez avec un fichier d'une taille inférieure à ({{maxFileSize}})","SYNC_SUCCESS":"Votre projet a été importé avec succès","IMPORT":"Importer","WHO_IS":"Ces tâches seront assignées à ...","WRITE_EMAIL":"Ou si vous préférez, indiquez l'adresse de courriel que cet utilisateur utilise dans Taïga","SEARCH_CONTACT":"Ou si vous préférez, recherchez dans vos contacts","WRITE_EMAIL_LABEL":"Indiquez le courriel que l'utilisateur utilise dans Taïga","ACCEEDE":"Accéder","PROJECT_MEMBERS":"Membres du projet","PROCESS_DESCRIPTION":"Indiquez nous à qui dans Taïga vous souhaitez assigner les tâches de {{platform}}","MATCH":"{{user_external}} est elle la même personne que {{user_internal}}?","CHOOSE":"Sélectionnez l'utilisateur","LINKS":"Liens avec {{platform}}","LINKS_DESCRIPTION":"Souhaitez vous conserver le lien de chaque objet avec la carte originelle de {{platform}} ?","WARNING_MAIL_USER":"Veuillez noter que si l'utilisateur n'a pas de compte Taïga, nous ne pourrons lui assigner de tâches.","ASSIGN":"Affecter","PROJECT_SELECTOR":{"NO_RESULTS":"Il semble qu'aucun résultat ne correspond à vos critères de recherche","ACTION_SEARCH":"recherche","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"Le projet que vous tentez d'importer a {{members}} membres vous compris, malheureusement votre abonnement actuel permet un maximum de {{max_memberships}} membres par projet privé. Si vous souhaitez augmenter cette limite, merci de contacter un administrateur.","PROJECT_MEMBERS_DESC_PUBLIC":"Le projet que vous tentez d'importer a {{members}} membres vous compris, malheureusement votre abonnement actuel permet un maximum de {{max_memberships}} membres par projet privé. Si vous souhaitez augmenter cette limite, merci de contacter un administrateur.","ACCOUNT_ALLOW_MEMBERS":"Votre compte autorise {{members}} membres","PRIVATE_PROJECTS_SPACE":{"TITLE":"Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire.","DESC":"Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet privé supplémentaire."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Malheureusement, votre souscription actuelle ne vous permet pas d'ajouter un projet public supplémentaire.","DESC":"Le projet que vous voulez importer est privé. Votre souscription actuelle ne vous permet pas d'ajouter un projet public supplémentaire."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Votre souscription actuelle permet un maximum de {{max_memberships}} par projet privé."},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Votre souscription actuelle permet un maximum de {{max_memberships}} par projet public."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Désolé, votre souscription actuelle ne permet ni d'ajouter des projets privés supplémentaire, ni d'avoir plus de {{max_memberships}} membres par projet privé.","DESC":"Le projet que vous voulez importer est privé et a {{members}} membres."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Désolé, votre souscription actuelle ne permet ni d'ajouter des projets publics supplémentaire, ni d'avoir plus de {{max_memberships}} membres par projet public.","DESC":"Le projet que vous voulez importer est public et a {{members}} membres."}},"IN_PROGRESS":{"TITLE":"Importation du projet en cours","DESCRIPTION":"Ce processus peut prendre du temps, veuillez garder cette fenêtre ouverte."},"WARNING":{"TITLE":"Certaines tâches ne seront pas assignées","DESCRIPTION":"Il reste des personnes non identifiées. Les cartes assignées à ces personnes resteront non assignées. Vérifiez tous les contacts pour ne pas perdre cette information.","CHECK":"Vérfiez les contacts"},"TAIGA":{"SELECTOR":"Importez votre projet Taïga"},"TRELLO":{"SELECTOR":"Importez vos tableaux Trello dans Taïga","CHOOSE_PROJECT":"Choisissez le tableau que vous souhaitez importer","NO_PROJECTS":"Il semble que vous n'aillez aucun tableau dans Trello"},"GITHUB":{"SELECTOR":"Importez vos tickets GitHub","CHOOSE_PROJECT":"Trouvez le projet que vous souhaitez importer","NO_PROJECTS":"Il semble que vous n'aillez aucun projet dans GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Comment souhaitez-vous importer vos tickets dans Taïga ?","KANBAN_PROJECT":"Comme récits dans un projet Kanban","KANBAN_PROJECT_DESCRIPTION":"Après cela vous pourrez activer le backlog de Scrum","SCRUM_PROJECT":"Comme récit dans un projet Scrum","SCRUM_PROJECT_DESCRIPTION":"Après cela vous pourrez activer le mode Kanban","ISSUES_PROJECT":"Comme ticket","ISSUES_PROJECT_DESCRIPTION":"Vous ne pourrez utiliser vos tickets dans les modes Kanban ou Scrum. Vous pourrez activer Kanban ou Scrum pour de nouveaux récits."},"ASANA":{"SELECTOR":"Importer votre projet Asana et choisissez comment le suivre","CHOOSE_PROJECT":"Choisissez le projet que vous souhaitez importer","NO_PROJECTS":"Il semble que vous n'aillez aucun projet dans Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Les tâches et sous-tâches de votre projet seront créées comme récits et tâches dans Taïga","CREATE_AS_KANBAN_DESCRIPTION":"Les tâches et sous-tâches de votre projet seront créées comme récits et tâches dans Taïga"},"JIRA":{"SELECTOR":"Importer votre projet Jira et choisissez comment le suivre","HOW_TO_CONFIGURE":"(comment configurer)","CHOOSE_PROJECT":"Choisissez le projet ou le tableau que vous souhaitez importer","NO_PROJECTS":"Il semble que vous n'aillez ni projet ni tableau dans Jira","URL":"Votre URL Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Tickets","CREATE_AS_SCRUM_DESCRIPTION":"Les tickets et sous-tickets de votre projet seront créées en tant que récit et tâches Taïga.","CREATE_AS_KANBAN_DESCRIPTION":"Les tickets et sous-tickets de votre projet seront créées en tant que récit et tâches Taïga.","CREATE_AS_ISSUES_DESCRIPTION":"Que souhaitez vous faire avec les sous-tickets de votre projet Jira ? (Taïga n'autorise pas les sous-tickets).","CREATE_NEW_ISSUES":"Convertir les sous-tickets en nouveaux tickets Taïga","NOT_CREATE_NEW_ISSUES":"Ne pas importer les sous-tickets"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Etes-vous sûr de vouloir supprimer votre compte Taiga ?","CANCEL":"Retour aux réglages","ACCEPT":"Supprimer le compte","BLOCK_PROJECT":"Notez que tous les projets dont vous avez la propriété seront bloqués après que vous ayez supprimé votre compte. Si vous souhaitez pas qu'un projet soit bloqué, merci d'en transférer la propriété auprès d'un autre membre avant la suppression de votre compte."},"DELETE_PROJECT":{"TITLE":"Supprimer le projet","QUESTION":"Êtes-vous sûr de vouloir supprimer ce projet ?","SUBTITLE":"Toutes les données du projet (récits utilisateur, tâches, tickets, sprints et pages de wiki) seront perdues ! :-(","CONFIRM":"Oui, je suis sûr"},"ASSIGNED_TO":{"SELECT":"Affecté à","SEARCH":"Chercher des utilisateurs"},"ADD_MEMBER":{"TITLE":"Nouveau membre","PLACEHOLDER":"Filtrer les utilisateurs ou écrire un courriel pour inviter un utilisateur","ADD_EMAIL":"Ajouter une adresse courriel","REMOVE":"Supprimer","INVITE":"Inviter","CHOOSE_ROLE":"Choisissez un rôle","PLACEHOLDER_INVITATION_TEXT":"(Optionnel) Ajoutez un texte personnalisé à l'invitation. Dites quelque chose de gentil à vos nouveaux membres ;-)","HELP_TEXT":"Si vos utilisateurs sont déjà inscrits sur Taiga, ils seront automatiquement ajoutés. Sinon, ils recevront une invitation."},"FEEDBACK":{"TITLE":"Dites-nous quelque chose...","COMMENT":"...un bug, des suggestions, quelque chose de cool... ou même votre pire cauchemar avec Taiga","ACTION_SEND":"Envoyez vos commentaires"},"SEARCH":{"TITLE":"Rechercher","PLACEHOLDER_SEARCH":"Que cherchez-vous ?"},"ADD_EDIT_SPRINT":{"TITLE":"Nouveau sprint","PLACEHOLDER_SPRINT_NAME":"nom du sprint","PLACEHOLDER_SPRINT_START":"Début estimé","PLACEHOLDER_SPRINT_END":"Fin estimée","ACTION_DELETE_SPRINT":"Voulez-vous supprimer ce sprint ?","TITLE_ACTION_DELETE_SPRINT":"supprimer le sprint","LAST_SPRINT_NAME":"le dernier sprint est {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Veuillez ajouter une description pour aider les autres à mieux comprendre cette tâche","ISSUE_PLACEHOLDER_DESCRIPTION":"Veuillez ajouter une description pour aider les autres à mieux comprendre ce ticket","US_PLACEHOLDER_DESCRIPTION":"Veuillez ajouter une description pour aider les autres à mieux comprendre ce récit utilisateur","NEW_TASK":"Nouvelle tâche","NEW_ISSUE":"Nouveau ticket","NEW_US":"Ajouter un récit utilisateur","EDIT_TASK":"Modifier la tâche","EDIT_ISSUE":"Modifier le ticket","EDIT_US":"Modifier le récit utilisateur","ADD_EXISTING_ISSUE":"Ajouter un ticket à {{ targetName }}","CONFIRM_CLOSE":"Vous n’avez pas sauvegardé les modifications.\nÊtes-vous sûr de vouloir fermer le formulaire ?","EXISTING_ISSUE":"Ticket existant","CHOOSE_EXISTING_ISSUE":"Quel ticket ?","ADD_ISSUE":"Ajouter un ticket","FILTER_ISSUES":"Filtrer les tickets"},"DELETE_DUE_DATE":{"TITLE":"Supprimer l’échéance","SUBTITLE":"Êtes-vous sûr de vouloir supprimer cette échéance ?"},"DELETE_SPRINT":{"TITLE":"Supprimer le sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Retirer le lien avec l’épopée","MESSAGE":"Êtes-vous sûr de vouloir retirer le lien entre ce récit utilisateur et l’épopée {{epicSubject}} ?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optionnel) Ajoutez un texte personnalisé à l'invitation. Dites quelque chose de gentil à vos nouveaux membres ;-)","PLACEHOLDER_TYPE_EMAIL":"Saisissez une adresse courriel","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Vous êtes sur le point d'atteindre le nombre maximum de membres autorisé pour ce projet, {{maxMembers}} membres. Si vous souhaitez augmenter cette limite, merci de contacter l'administrateur.","LIMIT_USERS_WARNING_MESSAGE":"Vous êtes sur le point d'atteindre le nombre maximum de membres autorisé pour ce projet, {{maxMembers}} membres."},"LEAVE_PROJECT_WARNING":{"TITLE":"Malheureusement, ce projet ne peut pas être laissé sans propriétaire","CURRENT_USER_OWNER":{"DESC":"Vous êtes le propriétaire actuel de ce projet. Avant de partir, merci de transférer la propriété du projet à quelqu'un d'autre.","BUTTON":"Changer le propriétaire du projet"},"OTHER_USER_OWNER":{"DESC":"Malheureusement, vous ne pouvez supprimer un membre s'il est également le propriétaire actuel du projet. Merci de désigner auparavant un nouveau propriétaire.","BUTTON":"Demander le changement de propriétaire du projet"}},"CHANGE_OWNER":{"TITLE":"Qui voulez-vous désigner comme le nouveau propriétaire du projet ?","ADD_COMMENT":"Ajouter un commentaire","BUTTON":"Demander à ce membre du projet de devenir le nouveau propriétaire"},"CONTACT_PROJECT":{"TITLE":"Envoyer un email à","WARNING":"L'email sera reçu par les administrateurs du projet","PLACEHOLDER":"Ecrire votre message","SEND":"Envoyer"},"SET_DUE_DATE":{"TITLE":"Définir l’échéance","PLACEHOLDER_DUE_DATE":"Sélectionner la date","REASON_FOR_DUE_DATE":"Raison pour la date d’échéance","PLACEHOLDER_REASON_FOR_DUE_DATE":"Pourquoi ce récit utilisateur nécessite-t-il une échéance ?","SUGGESTIONS":{"IN_ONE_WEEK":"Dans une semaine","IN_TWO_WEEKS":"Dans deux semaines","IN_ONE_MONTH":"Dans un mois","IN_THREE_MONTHS":"Dans trois mois"},"TITLE_ACTION_DELETE_DUE_DATE":"Supprimer l’échéance"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Supprimer l’échéance","SUBTITLE_ACTION_DELETE_DUE_DATE":"Êtes-vous sûr de vouloir supprimer le statut de date d’échéance {{due_date_status_name}} ?"},"RELATE_TO_EPIC":{"TITLE":"Lien vers l'épopée","EXISTING_EPIC":"Épopée existante","NEW_EPIC":"Nouvelle épopée","CHOOSE_PROJECT_FOR_CREATION":"Quel est le projet ?","CHOOSE_PROJECT_FROM":"Quel est le projet ?","SUBJECT":"Objet","CHOOSE_EPIC":"Quelle est l’épopée ?","FILTER_EPICS":"Filtrer les épopées","NO_EPICS_FOUND":"Il semble qu'aucun résultat ne correspond à vos critères de recherche"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Épopée {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Statut : {{epicStatus }}. Description : {{epicDescription}}","SECTION_NAME":"Épopée","ERROR_UNLINK_RELATED_USERSTORY":"Nous n'avons pas réussi à supprimer le lien : {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Créer un lien avec","NEW_USERSTORY":"Nouveau récit utilisateur","EXISTING_USERSTORY":"Récit utilisateur existant","CHOOSE_PROJECT_FOR_CREATION":"Quel projet ?","SUBJECT":"Objet","SUBJECT_BULK_MODE":"Sujet (ajout en masse)","CHOOSE_PROJECT_FROM":"Quel projet ?","CHOOSE_USERSTORY":"Quel récit utilisateur ?","NO_USERSTORIES":"Ce projet n'a pas encore de récits utilisateur. Merci de choisir un autre projet.","NO_USERSTORIES_FOUND":"Il semble qu'aucun résultat ne correspond à vos critères de recherche","FILTER_USERSTORIES":"Filtrer les récits utilisateur","LIGHTBOX_TITLE_BLOKING_EPIC":"Bloquer l'épopée","ACTION_DELETE":"Supprimer l'épopée"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Récit utilisateur {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Statut : {{userStoryStatus }}. Achevé {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} sur {{userStoryTotalTasks}} tâches fermées). Points : {{userStoryPoints}}. Description : {{userStoryDescription}}","SECTION_NAME":"Récit utilisateur","LINK_TASKBOARD":"Tableau des tâches","TITLE_LINK_TASKBOARD":"Aller au tableau des tâches","TOTAL_POINTS":"total des points","ADD":"+ Créer un récit utilisateur","ADD_BULK":"Ajouter de nouveaux récits utilisateur en lot","PROMOTED":"Ce récit utilisateur a été promue à partir d'un ticket :","TITLE_LINK_GO_TO_ISSUE":"Aller vers ce ticket","TITLE_DELETE_ACTION":"Supprimer le récit utilisateur","LIGHTBOX_TITLE_BLOKING_US":"Bloque le RU","NOT_ESTIMATED":"Non estimé","OWNER_US":"Ce récit Utilisateur fait partie de ","RELATE_TO_EPIC":"Lien vers l'épopée","REMOVE_RELATIONSHIP_WITH_EPIC":"Retirer le lien de l'épopée","TRIBE":{"PUBLISH":"Publier en tant que Gig sur Taiga Tribe ","PUBLISH_INFO":"Plus d'informations","PUBLISH_TITLE":"Plus d'informations sur la publication dans Taiga Tribe","PUBLISHED_AS_GIG":"Récit publié comme Gig dans Taiga Tribe","EDIT_LINK":"Modifier le lien","CLOSE":"Fermer","SYNCHRONIZE_LINK":"se synchroniser avec Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Avez-vous besoin de quelqu'un pour cette tâche ?","PUBLISH_MORE_INFO_TEXT":"

    Si vous avez besoin d'un coup de main pour un élément en particulier, vous pouvez facilement créer un \"Gig\" sur Taiga Tribe et recevoir de l'aide de la terre entière. Vous serez en mesure de contrôler et manager le \"Gig\", en profitant d'une grande communauté assoiffée de contribution.

    TaigaTribe est née en jumelle de Taïga. les deux plateformes peuvent vivre séparément, mais nous croyons que leur plus grande force est dans la combinaison, et nous nous assurons donc que l'intégration fonctionne \"au poil\" !,

    "}},"COMMENTS":{"DELETED_INFO":"Commentaire supprimé par {{user}}","COMMENTS_COUNT":"{{comments}} commentaires","OLDER_FIRST":"Plus ancien d'abord","RECENT_FIRST":"Plus récent d'abord","COMMENT":"Commentaire","EDITED_COMMENT":"Modifié :","SHOW_HISTORY":"Voir l'historique","TYPE_NEW_COMMENT":"Entrez un nouveau commentaire ici","SHOW_DELETED":"Afficher le commentaire supprimé","HIDE_DELETED":"Cacher le commentaire supprimé","DELETE":"Supprimer le commentaire","RESTORE":"Restaurer le commentaire","HISTORY":{"TITLE":"Activité"}},"ACTIVITY":{"TITLE":"Activité","ACTIVITIES_COUNT":"{{activities}} activités","TAGS_ADDED":"Mots-clés ajoutés :","TAGS_REMOVED":"Mots-clés supprimés","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"Nouvelle pièce jointe","DELETED_ATTACHMENT":"Pièces jointes supprimées :","UPDATED_ATTACHMENT":"Pièces jointes mises à jour ({{filename}}) :","CREATED_CUSTOM_ATTRIBUTE":"Attribut personnalisé créé","UPDATED_CUSTOM_ATTRIBUTE":"Attribut personnalisé mis à jour","BECAME_DEPRECATED":"devenu obsolète","BECAME_UNDEPRECATED":"n'est plus obsolète","TEAM_REQUIREMENT":"Exigence équipe","CLIENT_REQUIREMENT":"Exigence client","BLOCKED":"Bloqué","VALUES":{"NOT_SET":"Non renseigné","UNASSIGNED":"non affecté"},"FIELDS":{"SUBJECT":"objet","DESCRIPTION":"description","PRIORITY":"priorité","SEVERITY":"gravité","STATUS":"statut","TYPE":"type","ASSIGNED_TO":"affecté à","ASSIGNED_USERS":"Utilisateurs assignés","DUE_DATE":"Date d'échéance","MILESTONE":"sprint","COLOR":"couleur"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Le panneau backlog avec les récits utilisateurs et sprints du projet {{projectName}} : {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Personnalisez votre backlog","CUSTOMIZE_GRAPH_TEXT":"Pour obtenir un graphique agréable qui vous aide à suivre l'évolution du projet vous devez définir les points et les sprints via","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Définissez les points et les sprints via l'admin","MOVE_US_TO_CURRENT_SPRINT":"Déplacer vers le sprint actuel","MOVE_US_TO_LATEST_SPRINT":"Déplacer vers le dernier sprint","EMPTY":"Le backlog est vide !","CREATE_NEW_US":"Créer un nouveau récit utilisateur","CREATE_NEW_US_EMPTY_HELP":"Vous pouvez envisager de créer un récit utilisateur","EXCESS_OF_POINTS":"Excès de points","PENDING_POINTS":"Points restants","CLOSED_POINTS":"fermé","COMPACT_SPRINT":"Sprint Compact","GO_TO_TASKBOARD":"Aller au tableau des tâches de {{::name}}","EDIT_SPRINT":"Modifier le Sprint","TOTAL_POINTS":"total","STATUS_NAME":"Nom du statut","SORTABLE_FILTER_ERROR":"Vous ne pouvez pas déposer sur le backlog quand les filtres sont ouverts","DOOMLINE":"Périmètre projet","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Points","OPTIMAL":"Le nombre optimal de points pour le sprint \"{{sprintName}}\" devrait être {{value}}","REAL":"Le nombre réel de points pour le sprint \"{{sprintName}}\" est {{value}}","INCREMENT_TEAM":"Le nombre de points ajoutés par les exigences équipe pour le sprint \"{{sprintName}}\" est {{value}}","INCREMENT_CLIENT":"Le nombre de points ajoutés par les exigences client pour le sprint \"{{sprintName}}\" est {{value}}"},"TAGS":{"TOGGLE":"Afficher/Cacher les mots-clés","SHOW":"Montrer les mots-clés","HIDE":"Cacher les mots-clés"},"FORECASTING":{"TITLE":"Prévision de la vitesse","BACKLOG":"Afficher le carnet de commandes","NEW_SPRINT":"Récits utilisateur candidats pour votre prochain sprint en fonction de votre vitesse. Cliquez ici pour créer un nouveau sprint.","CURRENT_SPRINT":"Récits utilisateur candidat pour votre sprint basé sur votre vitesse. Cliquez ici pour ajouter au sprint actuel."},"TABLE":{"COLUMN_US":"Récits utilisateur","TITLE_COLUMN_POINTS":"Sélectionnez la vue par rôle"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"total
    points","COMPLETED_POINTS":"points
    complétés","OPEN_TASKS":"tâches
    ouvertes","CLOSED_TASKS":"tâches
    fermées","IOCAINE_DOSES":"doses
    de iocaine","SHOW_STATISTICS_TITLE":"Afficher les statistiques","TOGGLE_BAKLOG_GRAPH":"Afficher/masquer le graphique d'avancement","POINTS_PER_ROLE":"Points par rôle"},"SUMMARY":{"PROJECT_POINTS":"projet
    points","DEFINED_POINTS":"points
    définis","CLOSED_POINTS":"points
    fermés","POINTS_PER_SPRINT":"points /
    sprint"},"FILTERS":{"TOGGLE":"Afficher/Cacher les filtres","HIDE":"Cacher les filtres","SHOW":"Afficher les filtres"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Tableau des tâches","TITLE_LINK_TASKBOARD":"Aller au tableau des tâches de \"{{name}}\"","EMPTY":"Il n'y a pas encore de sprint","WARNING_EMPTY_SPRINT_ANONYMOUS":"Ce sprint n'a pas de \"User Stories\"","WARNING_EMPTY_SPRINT":"Déposez ici les récits depuis votre backlog pour démarrer un nouveau sprint","TITLE_ACTION_NEW_SPRINT":"Ajouter un sprint","TEXT_ACTION_NEW_SPRINT":"Vous souhaitez peut être créer un nouveau sprint dans votre projet.","ACTION_SHOW_CLOSED_SPRINTS":"Afficher les sprints fermés","ACTION_HIDE_CLOSED_SPRINTS":"Cacher les sprints fermés"}},"ERROR":{"TEXT1":"Un problème s'est produit et nos Oompa Loompas y travaillent.","NOT_FOUND":"Non trouvé","NOT_FOUND_TEXT":"Erreur 404. La page que vous cherchez n'existe plus. Peut-être pouvez-vous retourner à la page d'accueil de Taiga et voir si vous trouvez ce que vous cherchez.","PERMISSION_DENIED":"Permission refusée","PERMISSION_DENIED_TEXT":"Vous n'avez pas la permission d'accéder à cette page.","VERSION_ERROR":"Quelqu'un a changé ça auparavant dans Taiga et nos Oompa Loompas ne peuvent appliquer vos modifications. Veuillez recharger la page et appliquer vos modifications de nouveaux (elles seront perdues)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Liste de tâches du sprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (du {{startDate}} au {{endDate}}) de {{projectName}}. Achevé {{completedPercentage}}% ({{completedPoints}} sur {{totalPoints}} points). {{openTasks}} tâches ouvertes sur {{totalTasks}}.","SECTION_NAME":"Tableau des tâches","TITLE_ACTION_ADD":"Ajouter une nouvelle tâche","TITLE_ACTION_ADD_BULK":"Ajouter un nouveau lot de tâches","TITLE_ACTION_ADD_ISSUE":"Ajouter un nouveau ticket","TITLE_ACTION_ADD_ISSUE_BULK":"Ajouter de nouveaux tickets en lot","TITLE_ACTION_ASSIGN":"Affecter une tâche","PLACEHOLDER_CARD_TITLE":"Cela pourrait être une tâche","PLACEHOLDER_CARD_TEXT":"Éclater les récits en tâches pour les suivre séparément","TABLE":{"COLUMN":"Récit utilisateur","TITLE_ACTION_FOLD":"Replier la colonne","TITLE_ACTION_UNFOLD":"Déplier la colonne","TITLE_ACTION_FOLD_ROW":"Replier la ligne","TITLE_ACTION_UNFOLD_ROW":"Déplier la ligne","FIELD_POINTS":"points","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Tickets du sprint"},"CHARTS":{"XAXIS_LABEL":"Jours","YAXIS_LABEL":"Points","OPTIMAL":"Le nombre optimal de points pour le jour {{formattedDate}} devrait être {{roundedValue}}","REAL":"Le nombre réel de points pour le jour {{formattedDate}} est {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tâche {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Statut : {{taskStatus }}. Description : {{taskDescription}}","SECTION_NAME":"Tâche","LINK_TASKBOARD":"Tableau des tâches","TITLE_LINK_TASKBOARD":"Aller au tableau des tâches","PLACEHOLDER_SUBJECT":"Entrez l'objet de la nouvelle tâche","TITLE_SELECT_STATUS":"Nom du statut","OWNER_US":"La tâche appartient à","TITLE_LINK_GO_OWNER":"Aller au récit utilisateur","TITLE_DELETE_ACTION":"Supprimer une tâche","LIGHTBOX_TITLE_BLOKING_TASK":"Tâche bloquante","FIELDS":{"IS_IOCAINE":"est sous iocaine"},"TITLE_ACTION_IOCAINE":"Vous vous sentez un peu dépassé(e) par une tâche ? Assurez-vous que les autres le sachent en cliquant sur locaine en éditant une tâche. Il est possible de s'immuniser contre ce poison (fictif) en en consommant de faibles doses pendant un moment tout comme il est possible de devenir meilleur à ce que vous faîtes en relevant quelques défis à l'occasion !"},"NOTIFICATION":{"OK":"Tout est ok","WARNING":"Oups, quelque chose s'est produit...","WARNING_TEXT":"Nos Oompa Loompas sont tristes, vos modifications n'ont pas été sauvegardées !","SAVED":"Nos Oompa Loompas ont sauvegardé toutes vos modifications !","CLOSE":"Fermer la notification","MAIL":"Notifications par courriel","DESKTOP":"Notifications du bureau grâce aux alertes du navigateur","ASK_DELETE":"Etes-vous sûre de vouloir supprimer ?"},"CANCEL_ACCOUNT":{"TITLE":"Annuler votre compte","SUBTITLE":"Nous sommes tristes de vous voir quitter la taïga, et nous espérons que vous avez apprécié votre séjour. :)","PLACEHOLDER_INPUT_TOKEN":"Annuler le jeton du compte","ACTION_LEAVING":"Oui, je m'en vais !","SUCCESS":"Nos Oompa Loompas ont supprimé votre compte"},"CHANGE_EMAIL_FORM":{"TITLE":"Modifier votre adresse courriel","SUBTITLE":"Plus qu'un click et votre adresse courriel sera mise à jour !","PLACEHOLDER_INPUT_TOKEN":"modifier le jeton courriel","ACTION_CHANGE_EMAIL":"Modifier le courriel","SUCCESS":"Nos Oompa Loompas ont mis à jour votre adresse courriel"},"ISSUES":{"PAGE_TITLE":"Tickets - {{projectName}}","PAGE_DESCRIPTION":"Le panneau de la liste des tickets du projet {{projectName}} : {{projectDescription}}","SECTION_NAME":"Ticket","ACTION_NEW_ISSUE":"+ NOUVEAU TICKET","ACTION_PROMOTE_TO_US":"Promouvoir en récit utilisateur","ACTION_ATTACH_SPRINT":"Attacher le ticket au sprint","ACTION_DETACH_SPRINT":"Détacher le ticket du sprint","PROMOTED":"Le ticket a été promu en récit utilisateur","EXTERNAL_REFERENCE":"Ce ticket a été créé à partir de","GO_TO_EXTERNAL_REFERENCE":"Aller à l'origine","ACTION_DELETE":"Supprimer le ticket","LIGHTBOX_TITLE_BLOKING_ISSUE":"Ticket bloquant","LINK_TASKBOARD":"Tableau des tâches","TITLE_LINK_TASKBOARD":"Aller au tableau des tâches","FILTER_SPRINTS":"Filtrer les sprints","CHOOSE_SPRINT":"Quel sprint ?","FIELDS":{"PRIORITY":"Priorité","SEVERITY":"Gravité","TYPE":"Type"},"FILTER_ISSUES":"Filtrer les tickets","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Détacher le ticket du sprint","MESSAGE":"Vous êtes sur le point de détacher le ticket du sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attacher le ticket au sprint","MESSAGE":"Ce ticket est actuellement attaché au sprint {{ oldSprintName }}. Vous êtes sur le point de le détacher de ce sprint afin de l’attacher au sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promouvoir ce ticket en nouveau récit utilisateur","MESSAGE":"Êtes-vous sure de vouloir créer un nouveau récit utilisateur à partir de ce ticket ?"},"TABLE":{"COLUMNS":{"TYPE":"Type","SEVERITY":"Gravité","PRIORITY":"Priorité","SUBJECT":"Objet","VOTES":"Votes","STATUS":"Statut","MODIFIED":"Modifié","ASSIGNED_TO":"Affecté à"},"TITLE_ACTION_CHANGE_STATUS":"Changer le statut","TITLE_ACTION_ASSIGNED_TO":"Affecté à","BLOCKED":"Bloqué","EMPTY":{"TITLE":"Il n'y a aucun ticket déclaré :-)","SUBTITLE":"Avez-vous trouvé un problème ?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Ticket {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"État : {{issueStatus }}. Type : {{issueType}}, Priorité : {{issuePriority}}. Gravité : {{issueSeverity}}. Description : {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Le panneau kanban avec les récits utilisateurs du {{projectName}} : {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Replier la colonne","TITLE_ACTION_UNFOLD":"Déplier la colonne","TITLE_ACTION_ADD_US":"Ajouter un nouveau récit utilisateur","TITLE_ACTION_ADD_BULK":"Ajout en masse","ACTION_SHOW_ARCHIVED":"Montrer les éléments archivés","ACTION_HIDE_ARCHIVED":"Cacher les éléments archivés","HIDDEN_USER_STORIES":"Les récits utilisateur avec ce statut sont masqués par défaut","PLACEHOLDER_CARD_TITLE":"Ce sont vos récits utilisateurs","PLACEHOLDER_CARD_TEXT":"Les récits peuvent avoir des sous-tâches pour séparer les exigences"},"SEARCH":{"PAGE_TITLE":"Chercher - {{projectName}}","PAGE_DESCRIPTION":"Chercher tout, récits utilisateurs, tickets, tâches ou pages de wiki, dans le projet {{projectName}} : {{projectDescription}}","FILTER_EPICS":"Épopées","FILTER_USER_STORIES":"Récits utilisateur","FILTER_ISSUES":"Tickets","FILTER_TASKS":"Tâches","FILTER_WIKI":"Pages Wiki","PLACEHOLDER_SEARCH":"Rechercher dans...","TITLE_ACTION_SEARCH":"rechercher","EMPTY_TITLE":"Il semble qu'aucun résultat ne correspond à vos critères de recherche.","EMPTY_DESCRIPTION":"Vous pouvez essayer l'un des onglets au-dessus ou relancer une recherche"},"TEAM":{"PAGE_TITLE":"ÉQUIPE - {{projectName}}","PAGE_DESCRIPTION":"Le panneau équipe montre la liste des membres du projet {{projectName}} : {{projectDescription}}","SECTION_NAME":"Équipe","PLACEHOLDER_INPUT_SEARCH":"Rechercher par nom...","COLUMN_MR_WOLF":"M. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Tickets fermés","COLUMN_IOCAINE":"Buveur de iocaine","EXPLANATION_COLUMN_IOCAINE":"Doses de iocaine ingérées","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Page Wiki éditée","COLUMN_BUG_HUNTER":"Chasseur de bug","EXPLANATION_COLUMN_BUG_HUNTER":"Tickets déclarés","COLUMN_NIGHT_SHIFT":"Equipe de nuit","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tâches fermées","COLUMN_TOTAL_POWER":"Puissance totale","EXPLANATION_COLUMN_TOTAL_POWER":"Points au total","SECTION_TITLE_TEAM":"Équipe >","SECTION_FILTER_ALL":"Tout","CONFIRM_LEAVE_PROJECT":"Êtes-vous sûr de vouloir quitter le projet ?","ACTION_LEAVE_PROJECT":"Quitter le projet"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Taille max. : {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Paramètres de l'utilisateur","USER_PROFILE":"Profil utilisateur","CHANGE_PASSWORD":"Modifier le mot de passe","EMAIL_NOTIFICATIONS":"Notifications courriel","DESKTOP_NOTIFICATIONS":"Notifications de bureau","EVENTS":"Événements"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Notifications de bureau","SECTION_NAME":"Notifications courriel","COLUMN_PROJECT":"Projet","COLUMN_RECEIVE_ALL":"Tout recevoir","COLUMN_ONLY_INVOLVED":"Uniquement si impliqué","COLUMN_NO_NOTIFICATIONS":"Aucune notification","OPTION_ALL":"Toutes","OPTION_INVOLVED":"Impliqué","OPTION_NONE":"Aucune"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projet","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Valeur par défaut"},"EVENTS":{"SECTION_NAME":"Événements","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projet"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Utiliser l'image par défaut","ACTION_DELETE_ACCOUNT":"Supprime le compte Taiga","ACTION_DOWNLOAD_PROFILE":"Télécharger le profil Taïga","CHANGE_EMAIL_SUCCESS":"Consultez votre messagerie !
    Nous vous avons envoyé un courriel
    avec les instructions à suivre pour saisir votre nouvelle adresse","CHANGE_PHOTO":"Changer la photo","FIELD":{"USERNAME":"Identifiant","EMAIL":"Adresse courriel","FULL_NAME":"Nom complet","PLACEHOLDER_FULL_NAME":"Saisissez votre nom complet (ex. Íñigo Montoya)","BIO":"Biographie (maximum 210 caractères)","PLACEHOLDER_BIO":"Dites-en nous plus sur vous","LANGUAGE":"Langue","LANGUAGE_DEFAULT":"-- utiliser la langue par défaut --","THEME":"Thème","THEME_DEFAULT":"-- utiliser le thème par défaut --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Dernière modification le {{lastModifiedDate}} ({{totalEditions}} modifications en tout) Contenu : {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Supprimer cette page wiki","DELETE_LIGHTBOX_TITLE":"Supprimer la page Wiki","DELETE_LINK_TITLE":"Supprimer un lien Wiki","NAVIGATION":{"HOME":"Page principale","SECTION_NAME":"SIGNETS","ACTION_ADD_LINK":"Ajouter un signet","ALL_PAGES":"Toutes les pages wiki"},"SUMMARY":{"TIMES_EDITED":"modifications","LAST_EDIT":"dernière
    modification","LAST_MODIFICATION":"dernière modification"},"SECTION_PAGES_LIST":"Toutes les pages","PAGES_LIST_COLUMNS":{"TITLE":"Titre","EDITIONS":"Modifications","CREATED":"Créé le","MODIFIED":"Modifié","CREATOR":"Créateur","LAST_MODIFIER":"Dernier modificateur"}},"HINTS":{"SECTION_NAME":"Indice","LINK":"Si vous voulez savoir comment l'utiliser, visitez notre page d'assistance","LINK_TITLE":"Visitez notre page d'assistance","HINT1_TITLE":"Savez-vous que vous pouvez importer et exporter les projets ?","HINT1_TEXT":"Cela vous permet d'extraire toutes vos données d'un Taiga et de le déplacer vers un autre","HINT2_TITLE":"Savez-vous que vous pouvez créer des champs personnalisés ?","HINT2_TEXT":"Les équipes peuvent désormais créer des champs personnalisés comme un moyen flexible d'entrer des données spécifiques utiles pour leur flux de travail particulier.","HINT3_TITLE":"Triez vos projets pour mettre en valeur vos projets les plus pertinents.","HINT3_TEXT":"Les 10 projets sont listés dans la barre d'accès direct en haut de la page.","HINT4_TITLE":"Vous avez oublié ce sur quoi vous travaillez ?","HINT4_TEXT":"Pas d'inquiétude, vous trouverez dans votre tableau de bord vos tâches, tickets et récits utilisateurs dans l'ordre dans lequel vous avez travaillé dessus."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} a déposé une nouvelle pièce jointe dans {{obj_name}}","US_CREATED":"{{username}} a créé un nouveau récit utilisateur {{obj_name}} dans {{project_name}}","ISSUE_CREATED":"{{username}} a créé un nouveau ticket {{obj_name}} dans {{project_name}}","TASK_CREATED":"{{username}} a créé une nouvelle Tâche {{obj_name}} dans {{project_name}}","TASK_CREATED_WITH_US":"{{username}} a créé une nouvelle tâche {{obj_name}} dans le projet {{project_name}} pour le récit utilisateur {{us_name}}","WIKI_CREATED":"{{username}} a créé une nouvelle page wiki {{obj_name}} dans {{project_name}}","MILESTONE_CREATED":"{{username}} a créé un nouveau sprint {{obj_name}} dans {{project_name}}","EPIC_CREATED":"{{username}} a créé une nouvelle épopée {{obj_name}} dans {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} a lié le récit utilisateur {{related_us_name}} à l'épopée {{epic_name}} dans {{project_name}}","NEW_PROJECT":"{{username}} a créé le projet {{project_name}}","MILESTONE_UPDATED":"{{username}} a mis à jour le sprint {{obj_name}}","US_UPDATED":"{{username}} a mis à jour l'attribut «{{field_name}}» du récit utilisateur {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour le récit utilisateur {{obj_name}}","US_UPDATED_POINTS":"{{username}} a mis à jour les points du rôle '{{role_name}}' de l'US {{obj_name}} à la valeur {{new_value}}","ISSUE_UPDATED":"{{username}} a mis à jour l'attribut «{{field_name}}» du ticket {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} a mis à jour l'attribut \"{{field_name}}\" du ticket {{obj_name}} à {{new_value}}","TASK_UPDATED":"{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour la tâche {{obj_name}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour la tâche {{obj_name}}","TASK_UPDATED_WITH_US":"{{username}} a mis à jour l'attribut «{{field_name}}» de la tâche {{obj_name}} qui appartient au récit utilisateur {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} a mis l'attribut \"{{field_name}}\" à {{new_value}} pour la tâche {{obj_name}} appartenant au récit utilisateur {{us_name}}","WIKI_UPDATED":"{{username}} a mis à jour la page wiki {{obj_name}}","EPIC_UPDATED":"{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}} en {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} a mis à jour l'attribut \"{{field_name}}\" de l'épopée {{obj_name}} en ","NEW_COMMENT_US":"{{username}} a commenté le récit utilisateur {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} a commenté le ticket {{obj_name}}","NEW_COMMENT_TASK":"{{username}} a commenté la tâche {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} a ajouté un commentaire dans l'épopée {{obj_name}}","NEW_MEMBER":"{{project_name}} a un nouveau membre","US_ADDED_MILESTONE":"{{username}} a ajouté le récit utilisateur {{obj_name}} à {{sprint_name}}","US_MOVED":"{{username}} a déplacé le RU {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} a ajouté le récit utilisateur {{obj_name}} au carnet","BLOCKED":"{{username}} a bloqué {{obj_name}}","UNBLOCKED":"{{username}} a débloqué {{obj_name}}","NEW_USER":"{{username}} a rejoint Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Ticket","TASK":"Tâche"}},"EVENTS":{"TITLE":"Événements","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"Lors de la création d'un compte, vous acceptez nos conditions d'utilisation et politique de confidentialité.","GDPR_ANNOUNCEMENT_TITLE":"Règlement Général de Protection des Données (RGPD)","GDPR_ANNOUNCEMENT_DESCRIPTION":"Vous l'avez vu venir, non ? Mises à jour de nos conditions d'utilisation","GDPR_ANNOUNCEMENT_INFOLINK":"Veuillez lire notre annonce ici"},"EXTERNAL_APP":{"PAGE_TITLE":"Une application externe requiert l'authentification","PAGE_DESCRIPTION":"Une application externe requiert l'authentification","AUTHORIZATION_REQUEST":"Autoriser {{application}} à utiliser votre compte Taiga ?","LOGIN_WITH_ANOTHER_USER":"Se connecter avec un autre utilisateur","AUTHORIZE_APP":"Autoriser l'application","CANCEL":"Annuler"},"JOYRIDE":{"NAV":{"NEXT":"Suivant","BACK":"Back","SKIP":"Passer","DONE":"Fait"},"DASHBOARD":{"STEP1":{"TITLE":"Votre projet","TEXT":"Bienvenue ! Vous trouverez ici tous les projets dont vous êtes membre."},"STEP2":{"TITLE":"Projets en cours","TEXT":"Ici vous trouverez les récits utilisateur, tâches et tickets sur lesquels vous travaillez."},"STEP3":{"TITLE":"Suivi","TEXT1":"Et ici vous trouverez ceux que vous voulez connaitre dans vos projets.","TEXT2":"Vous travaillez déjà avec Taiga ;)"},"STEP4":{"TITLE":"Commençons","TEXT1":"Vous pouvez démarrer en créant votre premier projet Taiga.","TEXT2":"Bonne chance!"}},"BACKLOG":{"STEP1":{"TITLE":"Résumé du projet","TEXT1":"Ici vous verrez l'état de votre projet.","TEXT2":"Vous pouvez modifier tous les paramètres d'un projet dans l'administration."},"STEP2":{"TITLE":"Backlog du produit","TEXT":"Le backlog est la liste des exigences (récits utilisateur) pour le projet. C'est ici que vous préparerez vos sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Les sprints sont des courtes périodes (généralement 2 semaines) pendant lesquels certaines tâches doivent êtres faites et livrées."},"STEP4":{"TITLE":"Récits utilisateur","TEXT":"Ce sont les exigences du projet de niveau élevé. Vous pouvez les ajouter au backlog et les glisser dans le sprint pour lequel elles devront être livrées."}},"KANBAN":{"STEP1":{"TITLE":"Personnalisez votre workflow","TEXT":"Configurez les colonnes de statut dont vous aurez besoin pour lier votre workflow à l'administration."},"STEP2":{"TITLE":"Récits utilisateur & Tâches","TEXT":"Les récits utilisateur sont les exigences du projet de niveau élevé. Vous pouvez les déplacer dans différentes colonnes."},"STEP3":{"TITLE":"Ajout de récits utilisateur","TEXT1":"Vous pouvez ajouter un seul récit utilisateur (icône ajouter un récit utilisateur) ou plusieurs (icône vrac)","TEXT2":"Bonne chance !"}}},"DISCOVER":{"PAGE_TITLE":"Découvrir les projets - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Découvrir les projets","DISCOVER_SUBTITLE":"{projects, plural, one{Un projet public à découvrir} other{# projets publics à découvrir}}","MOST_ACTIVE":"les plus actifs","MOST_ACTIVE_EMPTY":"Il n'y a pas de projet actif pour le moment","MOST_LIKED":"Les plus « aimés »","MOST_LIKED_EMPTY":"Il n'y a pas encore de projet « aimé »","VIEW_MORE":"Voir plus","FEATURED":"Projets mis en avant","EMPTY":"Aucun projet ne correspond à ce critère de recherche.
    Essayez encore !","FILTERS":{"ALL":"Toutes","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"En recherche de membres","WEEK":"Semaine dernière","MONTH":"Mois dernier","YEAR":"Année dernière","ALL_TIME":"Tout le temps","CLEAR":"Effacer les filtres"},"SEARCH":{"PAGE_TITLE":"Rechercher - Découvrir les projets - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Écrivez quelque chose...","ACTION_TITLE":"Rechercher","RESULTS":"Résultats de la recherche"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-it.json b/dist/v-1549282893552/locales/taiga/locale-it.json new file mode 100644 index 0000000..ad49a0c --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-it.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Sì","NO":"No","OR":"o","I_GET_IT":"OK, I get it","LOADING":"Caricamento...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Salva","CANCEL":"Annulla","ACCEPT":"Accetta","DELETE":"Elimina","UNLINK":"Scollega","CREATE":"Crea","ADD":"Aggiungi","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Modifica","DRAG":"Drag","TAG_LINE":"Il tuo agile, libero e opensource strumento di project management","TAG_LINE_2":"ADORO IL VOSTRO PROGETTO","BLOCK":"Blocca","BLOCK_TITLE":"Blocca questo elemento se per esempio ha dipendenze che non possono essere soddisfatte","BLOCKED":"Bloccato","UNBLOCK":"Sblocca","UNBLOCK_TITLE":"Sblocca questo elemento","BLOCKED_NOTE":"Perché questo compito è bloccato?","BLOCKED_REASON":"Spiega il motivo","CREATED_BY":"Creato da {{fullDisplayName}}","CLOSE":"chiudi","GO_HOME":"Ritorna all'inizio","PLUGINS":"Plugin","ONE_ITEM_LINE":"Un elemento per riga...","NEW_BULK":"Nuovo inserimento nel carico","SUBTASKS":"Subtasks","PREVIOUS":"Precedente","NEXT":"Successivo","LOGOUT":"Esci","EXTERNAL_USER":"un utente esterno","GENERIC_ERROR":"C'é uno dei nostri Oompa Loompa che dice {{error}}.","IOCAINE_TEXT":"Questo membro si sente un po' sopraffatto da questo compito. In futuro diventerà immune a tutto questo, ma per ora, potrebbe sentire il bisogno di un abbraccio.","CLIENT_REQUIREMENT":"Requisito del Cliente è un nuovo requisito che non era stato previsto ed ora è stato richiesto come requisito del progetto","TEAM_REQUIREMENT":"Requisito del Team è un requisito che deve esistere nel progetto ma non deve avere costi per il cliente","OWNER":"Proprietario Progetto","CAPSLOCK_WARNING":"Attento! Stai usando lettere maiuscole in un campo che è case sensitive","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Sei sicuro di voler chiudere la modalità modifica?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Ricorda che se chiudi la modalità modifica senza salvare, tutte le modifiche saranno perse","RELATED_USERSTORIES":"Storie utente collegate","CARD":{"ASSIGN_TO":"Assegna a","EDIT":"Modifica la scheda","DELETE":"Delete card","DELETE_ISSUE":"Elimina il problema","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Questo valore non è valido.","TYPE_EMAIL":"Questo valore dovrebbe corrispondere ad una mail valida","TYPE_URL":"Questo valore dovrebbe corrispondere ad un URL valido","TYPE_URLSTRICT":"Questo valore dovrebbe corrispondere ad un URL valido","TYPE_NUMBER":"Questo valore dovrebbe corrispondere ad un numero valido","TYPE_DIGITS":"Questo valore dovrebbe essere in cifre","TYPE_DATEISO":"Questo valore dovrebbe corrispondere ad una data valida (YYYY-MM-DD).","TYPE_ALPHANUM":"Questo valore dovrebbe corrispondere ad un alfanumerico","TYPE_PHONE":"Questo valore dovrebbe corrispondere ad un numero telefonico valido","NOTNULL":"Questo valore non può essere null.","NOT_BLANK":"Questo valore non dovrebbe essere vuoto","REQUIRED":"Questo valore è richiesto","REGEXP":"Questo valore non è valido.","MIN":"Questo valore dovrebbe essere maggiore o uguale a %s.","MAX":"Questo valore dovrebbe essere minore o uguale a %s.","RANGE":"Questo valore dovrebbe essere tra %s e %s","MIN_LENGTH":"Questo valore è troppo corto. Dovrebbe corrispondere a %s o più caratteri.","MAX_LENGTH":"Questo valore è troppo lungo. Dovrebbe corrispondere a %s o meno caratteri.","RANGE_LENGTH":"La lunghezza del valore non è valida. Dovrebbe essere tra %s e %s caratteri.","MIN_CHECK":"Devi selezionare almeno %s scelte.","MAX_CHECK":"Devi selezionare la scelta %s o meno.","RANGE_CHECK":"Devi selezionare tra %s e %s scelta.","EQUAL_TO":"Il valore dovrebbe essere uguale","LINEWIDTH":"Una o più linee è forse un po' troppo. Cerca di stare sotto i %s caratteri.","PIKADAY":"Formato data invalido, per favore usa GG MMM AAAA (ad esempio 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mese precedente","NEXT_MONTH":"Prossimo mese","MONTHS":{"JAN":"Gennaio","FEB":"Febbraio","MAR":"Marzo","APR":"Aprile","MAY":"Maggio","JUN":"Giugno","JUL":"Luglio","AUG":"Agosto","SEP":"Settembre","OCT":"Ottobre","NOV":"Novembre","DEC":"Dicembre"},"WEEK_DAYS":{"SUN":"Domenica","MON":"Lunedì","TUE":"Martedì","WED":"Mercoledì","THU":"Giovedì","FRI":"Venerdì","SAT":"Sabato"},"WEEK_DAYS_SHORT":{"SUN":"Dom","MON":"Lun","TUE":"Mar","WED":"Mer","THU":"Gio","FRI":"Ven","SAT":"Sat"}},"SEE_USER_PROFILE":"Guarda il profilo di {{username }}","USER_STORY":"Storia utente","TASK":"Compito","ISSUE":"Problema","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Inserisci tag","DELETE":"Elimina tag","ADD":"Aggiungi un tag"},"DESCRIPTION":{"EMPTY":"Gli spazi vuoti sono così noiosi...dai, inserisci qualche descrizione...","NO_DESCRIPTION":"Ancora nessuna descrizione disponibile"},"FIELDS":{"SUBJECT":"Oggetto","NAME":"Nome","URL":"URL","DESCRIPTION":"Descrizione","VALUE":"Valore","SLUG":"Lumaca","COLOR":"Colore","IS_CLOSED":"È chiuso?","STATUS":"Stato","TYPE":"Tipo","SEVERITY":"Gravità","PRIORITY":"Priorità","ASSIGNED_TO":"Assegnato a","ASSIGNED_USERS":"Assigned users","POINTS":"Punti","IS_BLOCKED":"è bloccato","REF":"Riferimento","VOTES":"Voti","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Tutti"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Non assegnato","ASSIGN":"Assegna","DELETE_ASSIGNMENT":"Elimina incarico","REMOVE_ASSIGNED":"Rimuovi incaricato","TOO_MANY":"...troppi utenti, continua a filtrare","CONFIRM_UNASSIGNED":"Sei sicuro di volerlo lasciare non assegnato?","TITLE_ACTION_EDIT_ASSIGNMENT":"Modifica incarico","SELF":"Assegna a me"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Chiuso","OPEN":"Aperto"},"WATCHERS":{"WATCHERS":"Osservatori","ADD":"Aggiungi osservatori","TITLE_ADD":"Aggiungi un membro di progetto alla lista degli osservatori","DELETE":"Elimina osservatore","TITLE_LIGHTBOX_DELETE_WARTCHER":"Elimina osservatore..."},"WATCH_BUTTON":{"WATCH":"Osserva","WATCHING":"In osservazione","UNWATCH":"Non osservare","WATCHERS":"Osservatori","BUTTON_TITLE":"Osserva/Non osservare questo elemento","COUNTER_TITLE":"{total, plural, one{un osservatore} other{# osservatori}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"vota positivamente o negativamente questo elemento","COUNTER_TITLE":"{total, plural, one{un voto} other{# voti}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Campi Personalizzati","SAVE":"Salva il campo personalizzato","EDIT":"Modifica Campo Personalizzato","DELETE":"Elimina l'attributo personalizzato","CONFIRM_DELETE":"Ricorda che tutti i valori in questo campo custom andranno persi.\nSei sicuro di voler continuare?"},"FILTERS":{"INPUT_PLACEHOLDER":"Soggetto o referenza","TITLE_ACTION_FILTER_BUTTON":"cerca","TITLE":"Filtri","TITLE_ACTION_SEARCH":"Cerca","ACTION_SAVE_CUSTOM_FILTER":"salva come filtro personalizzato","PLACEHOLDER_FILTER_NAME":"Scrivi il nome del filtro e premi invio","APPLIED_FILTERS_NUM":"filtri impostati","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Tipo","STATUS":"Stato","SEVERITY":"Gravità","PRIORITIES":"Priorità","TAGS":"Tag","ASSIGNED_TO":"Assegnato a","ASSIGNED_USERS":"Assigned users","ROLE":"Ruolo","CREATED_BY":"Creato da","CUSTOM_FILTERS":"Filtri personalizzati","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Frammento di Codice","DB_CLICK":"doppio click per modificare","SELECT_LANGUAGE_PLACEHOLDER":"Selezione Lingua","SELECT_LANGUAGE_REMOVE_FORMATING":"Rimuove la formattazione","OUTDATED":"Un'altra persona ha apportato dei cambiamenti mentre stavi scrivendo. Controlla la nuova versione nel registro delle attività prima di salvare le tue modifiche.","MARKDOWN_HELP":"Aiuto per la sintassi Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epici","VIEW_EPICS":"Vedi epic","ADD_EPICS":"Aggiungi epic","MODIFY_EPICS":"Modifica epici","COMMENT_EPICS":"Commenta epic","DELETE_EPICS":"Cancella epici"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Vedi gli sprint","ADD_SPRINTS":"Aggiungi gli sprints","MODIFY_SPRINTS":"Modifica gli sprint","DELETE_SPRINTS":"Elimina sprint"},"USER_STORIES":{"NAME":"Storie Utente","VIEW_USER_STORIES":"Vai alle storie utente","ADD_USER_STORIES":"Aggiungi le storie utente","MODIFY_USER_STORIES":"Modifica le storie utente","COMMENT_USER_STORIES":"Commenta storie utente","DELETE_USER_STORIES":"Elimina le storie utente"},"TASKS":{"NAME":"Compiti","VIEW_TASKS":"Guarda i compiti","ADD_TASKS":"Aggiungi i compiti","MODIFY_TASKS":"Modifica i compiti","COMMENT_TASKS":"Commenta compiti","DELETE_TASKS":"Elimina i compiti"},"ISSUES":{"NAME":"Problemi","VIEW_ISSUES":"Guarda i problemi","ADD_ISSUES":"Aggiungi un problema","MODIFY_ISSUES":"Modifica i problemi","COMMENT_ISSUES":"Commenta problemi","DELETE_ISSUES":"Elimina i problemi"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Guarda le pagine wiki","ADD_WIKI_PAGES":"Aggiungi le pagine wiki","MODIFY_WIKI_PAGES":"Modifica le pagine wiki","DELETE_WIKI_PAGES":"Elimina le pagine wiki","VIEW_WIKI_LINKS":"Vedi il link di wiki","ADD_WIKI_LINKS":"Aggiungi un wiki links","DELETE_WIKI_LINKS":"Elimina il link wiki"}}},"LOGIN":{"PAGE_TITLE":"Accesso - Taiga","PAGE_DESCRIPTION":"Accedi a Taiga, una piattaforma semplice di gestione dei progetti che rende il lavoro davvero piacevole alle start-up e a chi sviluppa e progetta con il metodo \"agile\"."},"AUTH":{"INVITED_YOU":"ti ha invitato a partecipare al progetto","NOT_REGISTERED_YET":"Non sei ancora registrato?","REGISTER":"Registrati","CREATE_ACCOUNT":"Crea il tuo account gratuito qui"},"LOGIN_COMMON":{"HEADER":"Ho già un account Taiga","PLACEHOLDER_AUTH_NAME":"nome utente o email (occhio alle maiuscole)","LINK_FORGOT_PASSWORD":"Password dimenticata?","TITLE_LINK_FORGOT_PASSWORD":"Hai dimenticato la tua password?","ACTION_ENTER":"Conferma","ACTION_SIGN_IN":"Login","PLACEHOLDER_AUTH_PASSWORD":"Password (occhio alle maiuscole)","ALT_LOGIN":"Oppure accedi con"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Secondo i nostri Oompa Loompa, i tuoi nomi utente, email o password sono errati.","SUCCESS":"I nostri Oompa Loompa sono entusiasti! Benvenuto in Taiga!"},"REGISTER":{"PAGE_TITLE":"Registrazione - Taiga","PAGE_DESCRIPTION":"Crea il tuo account su Taiga, una piattaforma semplice di project management che rende il lavoro davvero piacevole alle start-up e a chi sviluppa e progetta con il metodo \"agile\"."},"REGISTER_FORM":{"TITLE":"Registra un nuovo account Taiga (è gratis)","PLACEHOLDER_NAME":"Scegli uno nome utente (occhio alle maiuscole)","PLACEHOLDER_FULL_NAME":"Inserisci il tuo nome completo","PLACEHOLDER_EMAIL":"La tua email","PLACEHOLDER_PASSWORD":"Imposta una password (case sensitive)","ACTION_SIGN_UP":"Registrati","TITLE_LINK_LOGIN":"Log in","LINK_LOGIN":"Sei già registrato? Effettua l'accesso"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Password dimenticata - Taiga","PAGE_DESCRIPTION":"Inserisci il tuo nome utente o la tua email per ricevere una nuova password a poter accedere nuovamente a Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Oops, hai dimenticato la password?","SUBTITLE":"Inserisci il tuo nome utente o email per ricevere una nuova password","PLACEHOLDER_FIELD":"Nome utente o email","ACTION_RESET_PASSWORD":"Reimposta la password","LINK_CANCEL":"Fa niente dai, riportami indietro. Penso di ricordarmela.","SUCCESS_TITLE":"Controlla la tua inbox!","SUCCESS_TEXT":"Ti abbiamo mandato una mail con le istruzioni per impostare una nuova password","ERROR":"Secondo i nostri Oompa Loompa, non sei ancora registrato."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Cambia la tua password - Taiga","SECTION_NAME":"Cambia password","FIELD_CURRENT_PASSWORD":"Password attuale","PLACEHOLDER_CURRENT_PASSWORD":"La tua password corrente (o lascia vuoto se non hai ancora una password)","FIELD_NEW_PASSWORD":"Nuova password","PLACEHOLDER_NEW_PASSWORD":"Digita una nuova password","FIELD_RETYPE_PASSWORD":"Digita una nuova password","PLACEHOLDER_RETYPE_PASSWORD":"Ri-digita una nuova password","ERROR_PASSWORD_MATCH":"Le password non corrispondono"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Crea una nuova password su Taiga","SUBTITLE":"Ehi, e se mangiassi qualcosa ricco di ferro? fa bene all'innovazione :p","PLACEHOLDER_NEW_PASSWORD":"Nuova password","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Digita una nuova password","ACTION_RESET_PASSWORD":"Reimposta la password","ERROR":"I nostri Oompa Loompa non riescono a trovare la tua richiesta di recupero password. Prova a chiedergliela di nuovo.","SUCCESS":"I nostri Oompa Loompa hanno salvato la tua nuova password. Che bravi!
    Pova a fare login con questa."},"INVITATION":{"PAGE_TITLE":"Invito ad accedere - Taiga","PAGE_DESCRIPTION":"Accetta l'invito a partecipare ad un progetto in Taiga, una piattaforma semplice di project management che rende il lavoro davvero piacevole a start-up e a chi sviluppa e progetta con il metodo \"agile\"."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"I nostri Oompa Loompa non hanno trovato il tuo invito.","SUCCESS":"Sei ora un membro di questo progetto. Benvenuto in {{project_name}}"},"HOME":{"PAGE_TITLE":"Home - Taiga","PAGE_DESCRIPTION":"La home di Taiga con i tuoi principali progetti e tutte le storie utente, i compiti e problemi assegnati e osservati. ","EMPTY_WORKING_ON":"Sembra vuoto, vero? Inizia a lavorare con Taiga e vedrai qui le storie, task e issue su cui stai lavorando","EMPTY_WATCHING":"Osserva Storie Utente, Compiti, Criticità nel progetto e ti verranno notificate le sue modifiche :)","EMPTY_PROJECT_LIST":"Per ora non hai nessun progetto","WORKING_ON_SECTION":"Sta lavorando su","WATCHING_SECTION":"Osservando","DASHBOARD":"Dashboard Progetti"},"EPICS":{"TITLE":"EPICI","SECTION_NAME":"Epici","EPIC":"Epic","PAGE_TITLE":"Epici - {{projectName}}","PAGE_DESCRIPTION":"La lista di epici del progetto {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ AGGIUNGI EPIC","UNASSIGNED":"Non assegnato"},"EMPTY":{"TITLE":"Sembra che nn ci sia ancora nessun epic","EXPLANATION":"Gli epici sono oggetti ad un livello superiore che uniscono storie utente.
    Gli epici sono in cima alla gerarchia e possono essere usati per raggruppare insieme storie utente","HELP":"Impara di più sugli epici"},"TABLE":{"VOTES":"Voti","NAME":"Nome","PROJECT":"Progetto","SPRINT":"Sprint","ASSIGNED_TO":"Assegnato","STATUS":"Stato","PROGRESS":"Progresso","VIEW_OPTIONS":"Vedi le opzioni"},"CREATE":{"TITLE":"Nuovo epic","PLACEHOLDER_DESCRIPTION":"Per favore aggiungi una descrizione per aiutare gli altri a capire meglio questo epic","TEAM_REQUIREMENT":"Requisito del team","CLIENT_REQUIREMENT":"Requisito del cliente","BLOCKED":"Bloccato","BLOCKED_NOTE_PLACEHOLDER":"Perchè questa epic è bloccata?","CREATE_EPIC":"Crea epic"}},"PROJECTS":{"PAGE_TITLE":"I miei progetti - Taiga","PAGE_DESCRIPTION":"Una lista di tutti i tuoi progetti, la puoi riordinare o crearne una nuova.","MY_PROJECTS":"I miei progetti"},"ATTACHMENT":{"SECTION_NAME":"allegati","TITLE":"{{ fileName }} caricato il {{ date }}","LIST_VIEW_MODE":"Modalità lista","GALLERY_VIEW_MODE":"Modalità galleria","DESCRIPTION":"Inserisci una breve descrizione","DEPRECATED":"(deprecato)","DEPRECATED_FILE":"Deprecato?","ADD":"Aggiungi un nuovo allegato. {{maxFileSizeMsg}}","DROP":"Rilascia qui l'allegato!","SHOW_DEPRECATED":"+ visualizza allegati deprecati","HIDE_DEPRECATED":"- nascondi allegati deprecati","COUNT_DEPRECATED":"({{ counter }} deprecati)","MAX_UPLOAD_SIZE":"La dimensione massima di caricamento è {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Non é stato possibile caricare '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Cancella l'allegato","MSG_LIGHTBOX_DELETE_ATTACHMENT":"l'allegato '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Non siamo riusciti a cancellare: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Precedente","NEXT":"Successivo"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Modifica valore","TITLE_ACTION_DELETE_VALUE":"Elimina valore","TITLE_ACTION_DELETE_TAG":"Elimina tag"},"HELP":"Hai bisogno di aiuto? Controlla la nostra pagina di supporto!","PROJECT_DEFAULT_VALUES":{"TITLE":"Valori di default","SUBTITLE":"Imposta valori di default per tutti i selettori input."},"MEMBERSHIPS":{"TITLE":"Gestisci membri","PAGE_TITLE":"Webhooks - {{projectName}}","ADD_BUTTON":"Nuovo Membro","ADD_BUTTON_TITLE":"Aggiungi un nuovo membro","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Sfortunatamente, questo progetto ha raggiunto il suo limite di ({{members}}) membri. Se vuoi aumentare il limite per favore contatta l'amministratore."},"PROJECT_EXPORT":{"TITLE":"Esporta","SUBTITLE":"Esporta il tuo progetto e salva un backup o creane uno nuovo basato su questo","EXPORT_BUTTON":"Esporta","EXPORT_BUTTON_TITLE":"Esporta il tuo progetto","LOADING_TITLE":"Stiamo preparando il file di dump","DUMP_READY":"Il file di dump é pronto!","LOADING_MESSAGE":"Non chiudere questa pagina.","ASYNC_MESSAGE":"Ti invieremo una mail quando sarà pronto","SYNC_MESSAGE":"Se il download non parte automaticamente clicca here.","ERROR":"I nostri Oompa Loompa hanno qualche problema a generare il tuo dump. Prova di nuova.","ERROR_BUSY":"Scusali, i nostri Oompa Loompa sono occupati. Riprova di nuovo in qualche minuto."},"MODULES":{"TITLE":"Moduli","EPICS":"Epici","EPICS_DESCRIPTION":"Visulaizza e controlla la parte più strategica del tuo progetto","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Amministra le storie degli utenti per mantenere una visione organizzata dei lavori in arrivo e di quelli ad alta priorità ","NUMBER_SPRINTS":"Numero di Sprint previsto","NUMBER_SPRINTS_HELP":"0 per indeterminato","NUMBER_US_POINTS":"Numero di punti totali della storia previsto","NUMBER_US_POINTS_HELP":"0 per indeterminato","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organizza in modo semplice il tuo progetto con questa board","ISSUES":"Problemi","ISSUES_DESCRIPTION":"Traccia i bug, le domande e i miglioramenti legati al tuo progetto. Non perderti nulla!","WIKI":"Wiki","WIKI_DESCRIPTION":"Aggiungi, modifica o elimina i contenuti in collaborazione con gli altri. E' il posto giusto per la documentazione del tuo progetto","MEETUP":"Incontro","MEETUP_DESCRIPTION":"Scegli il tuo sistema di videoconferenza","SELECT_VIDEOCONFERENCE":"Seleziona un sistema di videoconferenza","SALT_CHAT_ROOM":"Aggiungi un prefisso al nome della chatroom","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personalizzato","URL_CHAT_ROOM":"URL della tua chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Profilo progetto - {{projectName}}","PROJECT_DETAILS":"Dettagli progetto","PROJECT_NAME":"Nome progetto","TAGS":"Tag","DESCRIPTION":"Descrizione","RECRUITING":"Il progetto cerca persone?","RECRUITING_MESSAGE":"Chi stai cercando?","RECRUITING_PLACEHOLDER":"Definisci il profilo che stai cercando","FEEDBACK":"RIcevere opinioni da utenti Taiga?","PUBLIC_PROJECT":"Progetto pubblico","PRIVATE_PROJECT":"Progetto privato","PRIVATE_OR_PUBLIC":"Quale è la differenza tra progetto privato e pubblico?","DELETE":"Elimina questo progetto","CHANGE_LOGO":"Cambia Logo","ACTION_USE_DEFAULT_LOGO":"Usa l'immagine di default","MAX_PRIVATE_PROJECTS":"Hai raggiunto il numero massimo di progetti privati per il tuo abbonamento","MAX_PRIVATE_PROJECTS_MEMBERS":"È stato superato il numero massimo di membri per progetti privati","MAX_PUBLIC_PROJECTS":"Sfortunatamente hai raggiunto il numero massimo di progetti pubblici per il tuo abbonamento","MAX_PUBLIC_PROJECTS_MEMBERS":"Il progetto super il tuo numero massimo di membri per progetti pubblici","PROJECT_OWNER":"Proprietario progetto","REQUEST_OWNERSHIP":"Richiedi proprietà","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Vuoi diventare il nuovo proprietario del progetto?","REQUEST_OWNERSHIP_DESC":"Richiedi che l'attuale proprietario del progetto {{name}} trasferisca ti la proprietà.","REQUEST_OWNERSHIP_BUTTON":"Richiesta","REQUEST_OWNERSHIP_SUCCESS":"Invieremo una notifica al proprietario del progetto","CHANGE_OWNER":"Cambia proprietario","CHANGE_OWNER_SUCCESS_TITLE":"Ok, la tua richiesta è stata inviata!","CHANGE_OWNER_SUCCESS_DESC":"Ti invieremo una notifica via mail se la richiesta della mproprietà del progetto è accettata o rifiutata"},"REPORTS":{"TITLE":"Rapporti","SUBTITLE":"Esporta il tuo progetto dati in formato CSV a crea il tuo report","DESCRIPTION":"Scarica il file CSV o copia l'url ed usa il tuo editor preferito o spreadsheet per realizzare i tuoi report. Sarai in grado di visualizzare ed analizzare i tuoi dati molto più facilmente vedrai. ","HELP":"Come utilizzarlo all'interno di uno spreadsheet?","REGENERATE_TITLE":"Cambia URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"Report epici","SECTION_TITLE_US":"Report delle storie utente","SECTION_TITLE_TASK":"Analisi dei compiti","SECTION_TITLE_ISSUE":"Report problemi","DOWNLOAD":"Scarica CSV","URL_FIELD_PLACEHOLDER":"Per piacere rigenera l'url del CSV","TITLE_REGENERATE_URL":"Rigenera l'url del CSV","ACTION_GENERATE_URL":"Genera Url","ACTION_REGENERATE":"Rigenera","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Eliminato"},"CUSTOM_FIELDS":{"TITLE":"Campi Personalizzati","SUBTITLE":"Specifica i campi personalizzati per le tue Storie Utente, compiti e problemi","EPIC_DESCRIPTION":"Campi personalizzati degli epici","EPIC_ADD":"Aggiungi un campo personalizzato nell'epic","US_DESCRIPTION":"Campi personalizzati delle storie utente","US_ADD":"Aggiungi un campo personalizzato nelle storie utente","TASK_DESCRIPTION":"Campi personalizzati dei Compiti","TASK_ADD":"Aggiungi campo personalizzato nei compiti","ISSUE_DESCRIPTION":"Campi personalizzati","ISSUE_ADD":"Aggiungi un campo personalizzato al problema","FIELD_TYPE_TEXT":"Testo","FIELD_TYPE_RICHTEXT":"Testo con formattazione","FIELD_TYPE_MULTI":"Multilinea","FIELD_TYPE_DATE":"Data","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valori di progetto - {{projectName}}","REPLACEMENT":"Tutti gli elementi con questo valore saranno modificati con","ERROR_DELETE_ALL":"Non puoi cancellare tutti i valori"},"PROJECT_VALUES_POINTS":{"TITLE":"Punti","SUBTITLE":"Specifica i punti vostre storie utente potrebbero essere stimati a","US_TITLE":"Punti Storie Utente ","ACTION_ADD":"Aggiungi un nuovo punto"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"priorità","SUBTITLE":"Specifica le prioritá dei problemi","ISSUE_TITLE":"Prioritá del problema","ACTION_ADD":"Aggiungi nuova priorità"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Severitá","SUBTITLE":"Specifica le severitá del problema","ISSUE_TITLE":"Severitá del problema","ACTION_ADD":"Aggiungi una nuova criticità."},"PROJECT_VALUES_STATUS":{"TITLE":"Stati","SUBTITLE":"Specifica lo stato delle storie utente, i compiti e i problemi saranno affrontati","EPIC_TITLE":"Stati dell'epic","US_TITLE":"Stati della storia utente","TASK_TITLE":"Stato dei compiti","ISSUE_TITLE":"Stato dei problemi"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipi","SUBTITLE":"Specifica di che tipo puó essere il problema","ISSUE_TITLE":"Tipi di problemi","ACTION_ADD":"Aggiungi {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Tag","SUBTITLE":"Vedi e modifica il colore dei tuoi tag","EMPTY":"Attualmente non ci sono tag","EMPTY_SEARCH":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca","ACTION_ADD":"Aggiungi un tag","NEW_TAG":"Nuovo tag","MIXING_HELP_TEXT":"Seleziona i tag che vuoi unire","MIXING_MERGE":"Unisci tag","SELECTED":"Selezionato"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Aggiungi un nuovo status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Ruoli - {{projectName}}","WARNING_NO_ROLE":"Attento, nessun ruolo, all'interno del tuo progetto, potrà stimare i punti valore per le storie utente","HELP_ROLE_ENABLED":"Una volta abilitato, chi é associato a questo ruolo sará in grado di stimare il valore dei punti per le storie utente","DISABLE_COMPUTABLE_ALERT_TITLE":"sei sicuro di voler disabilitare la stime di questo ruolo?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Se disabiliti i permessi di stime per {{roleName}} tutte le stime precedenti di questo ruolo saranno rimosse","COUNT_MEMBERS":"{{ role.members_count }} membri con questo ruolo","TITLE_DELETE_ROLE":"Elimina ruolo","REPLACEMENT_ROLE":"Tutti gli utenti con questo ruolo saranno spostati a ","WARNING_DELETE_ROLE":"Attento! Tutte le stime dei ruoli saranno eliminate","ERROR_DELETE_ALL":"Non puoi cancellare tutti i valori","EXTERNAL_USER":"Utente esterno","NOTE_EXTERNAL_USERS":"Nota Bene: Per Utente Esterno noi intendiamo qualunque utente anonimo che non prende parte alla piattaforma di Taiga, inclusi i motori di ricerca. Per favore utilizza questo ruolo con cura."},"THIRD_PARTIES":{"SECRET_KEY":"Chiave segreta","PAYLOAD_URL":"Payload URL","VALID_IPS":"Origina valida per l'IP (separato da ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Le richieste Bitbucket non sono firmate, il miglior modo di verificarne l'origine è tramite l'IP. Se il campo è vuoto non ci sarà nessuna validazione."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Le richieste Gitlab non sono firmate, quindi il miglior modo di verificarle è attraverso l'origine degli IP. Se il campo è vuoto non ci sarà validazione."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Aggiungi un nuovo Webhook","TYPE_NAME":"Digita il nome del servizio","TYPE_PAYLOAD_URL":"Digita l'URL del servizio in carico","TYPE_SERVICE_SECRET":"Inserisci la chiave segreta di servizio","SAVE":"Salva Webhook","CANCEL":"Elimina Webhook","SHOW_HISTORY":"(Mostra la storia)","TEST":"Test del Webhook","EDIT":"Modifica Webhook","DELETE":"Elimina Webhook","REQUEST":"Richiesta","RESEND_REQUEST":"Ri-inoltra la richiesta","HEADERS":"Intestazioni","PAYLOAD":"Carico","RESPONSE":"Risposta","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Nascondi la storia)","ACTION_HIDE_HISTORY_TITLE":"Nascondi i dettagli della storia","ACTION_SHOW_HISTORY":"(Mostra la storia)","ACTION_SHOW_HISTORY_TITLE":"Mostra i dettagli della storia","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Attributi personalizzati - {{projectName}}","ADD":"Aggiungi campo personalizzato","EDIT":"Modifica Campo Personalizzato","DELETE":"Elimina Campo Personalizzato","SAVE_TITLE":"Salva il campo personalizzato","CANCEL_TITLE":"Elimina la creazione","SET_FIELD_NAME":"Imposta il nome del campo predefinito","SET_FIELD_DESCRIPTION":"Imposta la descrizione del campo personalizzato ","FIELD_TYPE_DEFAULT":"-- selezionane uno --","ACTION_UPDATE":"Aggiorna il campo personalizzato","ACTION_CANCEL_EDITION":"Elimina versione"},"MEMBERSHIP":{"COLUMN_MEMBER":"Membro","COLUMN_ADMIN":"Amministratore","COLUMN_ROLE":"Ruolo","COLUMN_STATUS":"Stato","STATUS_ACTIVE":"Attivo","STATUS_PENDING":"In sospeso","DELETE_MEMBER":"Elimina membro","RESEND":"Invia di nuovo","SUCCESS_SEND_INVITATION":"Abbiamo mandato nuovamente l'invito a '{{email}}'.","SUCCESS_DELETE":"Abbiamo eliminato {{message}}.","ERROR_DELETE":"Non siamo riusciti ad eliminare {{message}}.","DEFAULT_DELETE_MESSAGE":"L'invito a {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Valore predefinito per la selezione di stati degli epic","LABEL_US_STATUS":"Valore predefinito per la selezione di stato della storia utente","LABEL_POINTS":"Valore standard per punti di selezione","LABEL_TASK_STATUS":"Valore predefinito per la selezione degli stati del compito","LABEL_ISSUE_TYPE":"Valore predefinito per il tipo di selezione del problema","LABEL_ISSUE_STATUS":"Valore predefinito per la selezione di stato del problema","LABEL_PRIORITY":"Valore predefinito per la selezione prioritaria","LABEL_SEVERITY":"Valore predefinito per la selezione di rigore"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Scrivi un nome per il nuovo status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Dai un nome al nuovo elemento"},"US_STATUS":{"ACTION_ADD_STATUS":"Aggiungi un nuovo status","IS_ARCHIVED_COLUMN":"Archiviato","IS_CLOSED_COLUMN":"Concluso","WIP_LIMIT_COLUMN":"Limite WIP","PLACEHOLDER_WRITE_NAME":"Scrivi un nome per il nuovo status"},"MENU":{"PROJECT":"Progetto","ATTRIBUTES":"Attributi","MEMBERS":"Membri","PERMISSIONS":"Permessi","INTEGRATIONS":"Integrazioni"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Stato","POINTS":"Punti","PRIORITIES":"priorità","SEVERITIES":"Severitá","TYPES":"Tipi","CUSTOM_FIELDS":"Campi personalizzati","TAGS":"Tag","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Ruoli","ACTION_NEW_ROLE":"+ Nuovo ruolo","TITLE_ACTION_NEW_ROLE":"Aggiungi nuovo ruolo"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Vorresti diventare il nuovo proprietario del progetto?","PRIVATE":"Privato","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulazioni! Sei il nuovo proprietario del progetto.","REJECTED_PROJECT_OWNERNSHIP":"Ok. Contatteremo l'attuale proprietario del progetto","ACCEPT":"Accetta","REJECT":"Rifiuta","PROPOSE_OWNERSHIP":"{{owner}}, l'attuale proprietaroi del progetto {{project}} ha chiesto che tu diventi il nuovo proprietario.","ADD_COMMENT":"Vorresti aggiungere un commento per il proprietario del progetto?","UNLIMITED_PROJECTS":"Illimitato","OWNER_MESSAGE":{"PRIVATE":"Per favore ricorda che puoi avere al massimo {{maxProjects}} progetti privati. Attualmente hai {{currentProjects}} progetti privati","PUBLIC":"Per favore ricorda che puoi avere al massimo {{maxProjects}} progetti pubblici. Attualmente hai {{currentProjects}} progetti pubblici"},"CANT_BE_OWNED":"Attualmente non puoi diventare il proprietario di un progetto di questo tipo. Se vuoi diventare proprietario di questo progetto, per favore contatta l'amministratore così può cambiare le impostazioni del tuo account per permettere la proprietà dei progetti."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Modifica profilo","CLOSED_US":"US chiusa","PROJECTS":"Progetti","PROJECTS_EMPTY":"{{username}} non ha ancora nessun progetto","CONTACTS":"Contatti","CONTACTS_EMPTY":"{{username}} non ha ancora nessun contatto","CURRENT_USER_CONTACTS_EMPTY":"Non hai ancora contatti","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Le persone con cui lavori in Taiga saranno automaticamente tra tuoi contatti","TABS":{"ACTIVITY_TAB":"Cronologia","ACTIVITY_TAB_TITLE":"Mostra tutte le attività dell'utente","PROJECTS_TAB":"Progetti","PROJECTS_TAB_TITLE":"La lista di tutti i progetti di cui l'utente è membro","LIKES_TAB":"mi piace","LIKES_TAB_TITLE":"Lista di tutte le cose che son piaciute all'utente","VOTES_TAB":"Voti","VOTES_TAB_TITLE":"Lista di tutti i voti fatti dall'utente","WATCHED_TAB":"Osservato","WATCHED_TAB_TITLE":"Mostra tutti gli elementi osservati dall'utente","CONTACTS_TAB":"Contatti","CONTACTS_TAB_TITLE":"Lista tutti i contatti fatti dall'utente"}},"PROFILE_SIDEBAR":{"TITLE":"Il tuo profilo","DESCRIPTION":"Le persone possono vedere tutto quello che fai e su cosa stai lavorando. Aggiungi una bella bio per migliorare la descrizione delle tue informazioni.","ADD_INFO":"Modifica la tua bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Inserisci testo...","FILTER_TYPE_ALL":"Tutti","FILTER_TYPE_ALL_TITLE":"Mostra tutto","FILTER_TYPE_PROJECTS":"Progetti","FILTER_TYPE_PROJECTS_TITLE":"Mostra solo i progetti","FILTER_TYPE_EPICS":"Epici","FILTER_TYPE_EPICS_TITLE":"Mostra solo gli epici","FILTER_TYPE_USER_STORIES":"Resoconti","FILTER_TYPE_USER_STORIES_TITLE":"Mostra solo resoconti utente","FILTER_TYPE_TASKS":"Compiti","FILTER_TYPE_TASKS_TITLE":"Mostra solo attività","FILTER_TYPE_ISSUES":"Problemi","FILTER_TYPE_ISSUES_TITLE":"Mostra solo i problemi","EMPTY_TITLE":"Sembra che qui non ci sia nulla"}},"PROJECT":{"PAGE_TITLE":"TEAM - {{projectName}}","HELP":"Riordina i tuoi progetti per avere in alto i più usati.
    I primi 10 progetti compariranno nella lista dei progetti della barra di navigazione, su in alto","PRIVATE":"Progetto privato","LOOKING_FOR_PEOPLE":"Il progetto cerca persone","FANS_COUNTER_TITLE":"{total, plural, one{un follower} other{# followers}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{un osservatore} other{# osservatori}} ","MEMBERS_COUNTER_TITLE":"{total, plural, one{un membro} other{# membri}}","BLOCKED_PROJECT":{"BLOCKED":"Porgetto bloccato","THIS_PROJECT_IS_BLOCKED":"Questo progetto è temporaneamente bloccato","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Per sbloccare i tuoi progetti, contatta l'amministratore"},"SECTION":{"SEARCH":"Cerca","TIMELINE":"Cronologia","EPICS":"Epici","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Problemi","WIKI":"Wiki","TEAM":"Squadra","MEETUP":"Incontro","ADMIN":"Amministratore"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Crea progetto","MANAGE_PROJECTS":"Gestisci Progetti","TITLE_CREATE_PROJECT":"Crea progetto","HELP_TITLE":"Pagina di supporto Taiga","HELP":"Aiuto","HOMEPAGE":"Homepage","FEEDBACK_TITLE":"Invia feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Modifica le impostazioni delle notifiche","NOTIFICATIONS":"Notifiche","VIEW_PROFILE_TITLE":"Mostra profilo","VIEW_PROFILE":"Mostra profilo","EDIT_PROFILE_TITLE":"Modifica il tuo profilo","EDIT_PROFILE":"Modifica profilo","CHANGE_PASSWORD_TITLE":"Cambia password","CHANGE_PASSWORD":"Cambia password","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Scopri i progetti più seguiti","DISCOVER":"Scopri"},"LIKE_BUTTON":{"LIKE":"Mi piace","LIKED":"Piaciuto","UNLIKE":"Non mi piace","BUTTON_TITLE":"Vota a favore o a sfavore di questo progetto","COUNTER_TITLE":"{total, plural, one{un follower} other{# followers}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Osserva questo progetto ed imposta la politica di notifica","WATCH":"Osserva","WATCHING":"In osservazione","COUNTER_TITLE":"{total, plural, one{un osservatore} other{# osservatori}} ","OPTIONS":{"NOTIFY_ALL":"Ricevi tutte le notifiche","NOTIFY_ALL_TITLE":"Ricevi tutte le notifiche per questo progetto","NOTIFY_INVOLVED":"Solo se conivolti","NOTIFY_INVOLVED_TITLE":"Ricevi notifiche solo quando coinvolto","UNWATCH":"Non osservare","UNWATCH_TITLE":"Non osservare il progetto"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contatta il team di progetto","CONTACT_BUTTON":"Contatta il progetto"},"CREATE":{"TITLE":"Crea Progetto","CHOOSE_TEMPLATE":"Quale template si adatta meglio al tuo progetto?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Assegna una priorità e porta a termine le cose da fare in brevi cicli temporali","TEMPLATE_SCRUM_LONGDESC":"Scrum è una metodologia di sviluppo del software iterativa e incrementale per gestire l'avanzamento del prodotto.\nIl backlog del prodotto è la lista di ciò che deve essere fatto, ordinata nella sequenza in cui deve essere consegnato il lavoro. I Backlog Prodotto vengono suddivisi in pezzi più facilmente gestibili e velocemente eseguibili chiamati sprints. Dopo un certo periodo di tempo il team inizia un nuovo sprint e si dedica alla consegna di un determinato numero di storie utente prese dal backlog, al ritmo delle loro abilità, esperienze e risorse. Il progetto viene portato a termine man mano che il backlog si compie.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Mantieni un flusso di lavoro costante su compiti indipendenti","TEMPLATE_KANBAN_LONGDESC":"La metodologia Kanban è usata per suddividere il processo di sviluppo del progetto (di qualunque tipo) in stadi consecutivi.\nUna scheda kanban è come un segnaposto oppure un post-it che descrive ogni compito (o storia utente) che necessita di essere completato. Ogni scheda viene spostata da uno stato ad un altro del processo tramite la bacheca kanban, utile strumento per tenere sott'occhio la situazione di completamento.","DUPLICATE":"Duplica progetto","DUPLICATE_DESC":"Parti da zero e mantieni la tua configurazione","IMPORT":"Importa progetto","IMPORT_DESC":"Importa in Taiga i progetti provenienti da diverse piattaforme","INVITE":"Invita a partecipare al progetto","SOLO_PROJECT":"Rimarrai da solo in questo progetto","INVITE_LATER":"(potrai invitare altri membri più tardi)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Mi dispiace, hai raggiunto il numero massimo di progetti privati.\nPer favore contatta l'amministratore se desideri aumentare questo limite.","MAX_PUBLIC_PROJECTS":"Mi dispiace, hai raggiunto il numero massimo di progetti pubblici.\nPer favore contatta l'amministratore se desideri aumentare questo limite.","PUBLIC_PROJECT":"Progetto Pubblico","PRIVATE_PROJECT":"Progetto Privato"},"COMMON":{"DETAILS":"Dettagli del nuovo progetto","PROJECT_TITLE":"Nome progetto\n","PROJECT_DESCRIPTION":"Descrizione progetto"},"DUPLICATE":{"TITLE":"Duplica progetto","DESCRIPTION":"Parti da zero e mantieni la tua configurazione","SELECT_PLACEHOLDER":"Scegli un progetto esistente da duplicare"},"IMPORT":{"TITLE":"Importa progetto","DESCRIPTION":"Importa in Taiga i progetti provenienti da diverse piattaforme","ASYNC_IN_PROGRESS_TITLE":"I nostri Oompa Loompa stanno lavorando per importare il tuo progetto!","ASYNC_IN_PROGRESS_MESSAGE":"Questo processo puó durare minuti.
    Verrá inviata una mail al suo completamento","UPLOAD_IN_PROGRESS_MESSAGE":"Caricati {{uploadedSize}} di {{totalSize}}","ERROR":"Mannaggia, i Oompa Loompa hanno qualche problema ad importare il dump. Prova di nuovo.","ERROR_TOO_MANY_REQUEST":"Scusaci, i nostri Oompa Loompa sono di nuovo occupati. Riprova di nuovo in qualche minuto.","ERROR_MESSAGE":"I nostri Oompa Loompa hanno qualche problema ad importare il dump dei tuoi dati: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) è troppo pesante per i nostri Oompa Loompa; falli contenti, prova con una dimensione minore di ({{maxFileSize}})","SYNC_SUCCESS":"Il tuo progetto è stato importato con successo","IMPORT":"Importa","WHO_IS":"I loro compiti saranno assegnati a","WRITE_EMAIL":"Oppure, se preferisci, scrivi l'email che l'utente usa in Taiga","SEARCH_CONTACT":"O se preferisci, ricerca nei tuoi contatti.","WRITE_EMAIL_LABEL":"Scrivi la mail che questo utente utilizza in Taiga","ACCEEDE":"Aderisci","PROJECT_MEMBERS":"Membri del Progetto","PROCESS_DESCRIPTION":"Indicaci a chi degli utenti di Taiga vuoi assegnare il compito di {{platform}}","MATCH":"{{user_external}} e {{user_internal}} sono la stessa persona?","CHOOSE":"Seleziona un utente","LINKS":"Collega con {{platform}}","LINKS_DESCRIPTION":"Vuoi mantenere il collegamento di ogni elemento con la scheda originale {{platform}}?","WARNING_MAIL_USER":"Nota bene, se l'utente non ha un account Taiga non potremmo assegnargli il compito.","ASSIGN":"Assegna","PROJECT_SELECTOR":{"NO_RESULTS":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca","ACTION_SEARCH":"cerca","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"Il progetto che stai cercando di importare ha {{members}} membri incluso te, ma sfortunatamente il tuo piano attuale ti permette un massimo di {{max_memberships}} membri per i progetti privati. Per favore contatta l'amministratore se desideri aumentare questo limite.","PROJECT_MEMBERS_DESC_PUBLIC":"Il progetto che stai cercando di importare ha {{members}} membri incluso te, ma sfortunatamente il tuo piano attuale ti permette un massimo di {{max_memberships}} membri per i progetti pubblici. Per favore contatta l'amministratore se desideri aumentare questo limite.","ACCOUNT_ALLOW_MEMBERS":"Il tuo account permette solo {{members}} membri","PRIVATE_PROJECTS_SPACE":{"TITLE":"Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati","DESC":"Il progetto che stai tentando di importare è privato. Sfortunatamente, il tuo attuale abbonamento non permette altri progetti privati"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Sfortunatamente, il tuo attuale abbonamento non permette altri progetti pubblici","DESC":"Il progetto che stai provando a importare è pubblico. Sfortunatamente, il tuo attuale abbonamento non consente ulteriori progetti pubblici."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Il tuo abbonamento attuale permette al massimo {{max_memberships}} membri per progetto privato"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":" abbonamento attuale permette al masismo {{max_memberships}} membri per progetto pubblico."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Sfortunatamente il tuo abbonamento attuale non permette ulteriori progetti privati o un aumento di più di {{max_memberships}} membri per progetto privato","DESC":"Il progetto che stai provando a importare è privato e ha {{members}} membri."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Sfortunatamente il tuo attuale abbonamento non permette altri progetti pubblici o un aumento dii più di {{max_memberships}} membri per progetto pubblico","DESC":"Il progetto che stai cercando di importare è pubblico e ha più di {{members}} membri."}},"IN_PROGRESS":{"TITLE":"Importazione Progetto","DESCRIPTION":"Questo processo puó durare un po', nel frattempo lasciare questa finestra aperta."},"WARNING":{"TITLE":"Qualche compito non sarà assegnato","DESCRIPTION":"Ci sono ancora persone non identificate. Le schede assegnate a queste persone rimarranno senza assegnatario. Controlla tutti i contatti per non perdere quell' informazione.","CHECK":"Controllo contatti"},"TAIGA":{"SELECTOR":"Importa il tuo progetto Taiga"},"TRELLO":{"SELECTOR":"Importa la tua bacheca Trello in Taiga","CHOOSE_PROJECT":"Scegli la bacheca che desideri importare","NO_PROJECTS":"Sembra che tu non abbia nessuna bacheca in Trello"},"GITHUB":{"SELECTOR":"Importa le segnalazioni del tuo progetto GitHub","CHOOSE_PROJECT":"Trova il progetto che desideri importare","NO_PROJECTS":"Sembra che tu non abbia progetti in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Come vuoi importare le tue segnalazioni dentro Taiga?","KANBAN_PROJECT":"Come storie utente in un progetto kanban","KANBAN_PROJECT_DESCRIPTION":"Al termine puoi abilitare scrum con backlog","SCRUM_PROJECT":"Come storie utente in un progetto scrum","SCRUM_PROJECT_DESCRIPTION":"Al termine puoi abilitare la modalità kanban","ISSUES_PROJECT":"Come segnalazioni","ISSUES_PROJECT_DESCRIPTION":"Non sarai in grado di utilizzare le tue segnalazioni nelle modalità kanban o scrum. Potrai abilitare kanban o scrum per nuove storie utente."},"ASANA":{"SELECTOR":"Importa il tuo progetto Asana e scegli come gestirlo","CHOOSE_PROJECT":"Scegli il progetto che vuoi importare","NO_PROJECTS":"Sembra che tu non abbia progetti in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"I compiti e sotto-compiti del tuo progetto saranno creati come storie utente e compiti di Taiga.","CREATE_AS_KANBAN_DESCRIPTION":"I compiti e sotto-compiti del tuo progetto saranno creati con storie utente e compiti di Taiga."},"JIRA":{"SELECTOR":"Importa il tuo progetto Jira e scegli come gestirlo","HOW_TO_CONFIGURE":"(aiuto configurazione)","CHOOSE_PROJECT":"Scegli il progetto o la bacheca che vuoi importare","NO_PROJECTS":"Sembra che tu non abbia progetti o bacheche in Jira","URL":"Il tuo URL Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Problemi","CREATE_AS_SCRUM_DESCRIPTION":"Le segnalazioni e sotto-segnalazioni del tuo progetto saranno create come storie utente e compiti di Taiga.","CREATE_AS_KANBAN_DESCRIPTION":"Le segnalazioni e sotto-segnalazioni del tuo progetto saranno create come storie utente e compiti di Taiga.","CREATE_AS_ISSUES_DESCRIPTION":"Cosa preferisci fare con le sotto-segnalazioni del tuo progetto Jira? (Taiga non permette sotto-segnalazioni)","CREATE_NEW_ISSUES":"Converti le sotto-segnalazioni in segnalazioni Taiga","NOT_CREATE_NEW_ISSUES":"Non importare le sotto-segnalazioni"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Sei sicuro di voler eliminare il tuo account Taiga?","CANCEL":"Torna alle impostazioni","ACCEPT":"Cancella account","BLOCK_PROJECT":"Ricorda che tutti i progetti che possiedi saranno bloccati quando cancellerai il tuo account. Se vuoi continuare a utilizzare un progetto bloccato, trasferisci la proprietà del progetto a un membro di ciascun progetto prima di cancellare il tuo account."},"DELETE_PROJECT":{"TITLE":"Elimina progetto","QUESTION":"Sei sicuro di voler cancellare questo progetto?","SUBTITLE":"Tutti i dati di progetto (user story, compiti, temi, sprint e pagine wiki) andranno persi :-(","CONFIRM":"Si, sono proprio sicuro"},"ASSIGNED_TO":{"SELECT":"Selezione assegnata a ","SEARCH":"Cerca per utenti"},"ADD_MEMBER":{"TITLE":"Nuovo Membro","PLACEHOLDER":"Filtra gli utenti oppure scrivi un'email di invito","ADD_EMAIL":"Aggiungi email","REMOVE":"Rimuovi","INVITE":"Invita","CHOOSE_ROLE":"Segli un ruolo","PLACEHOLDER_INVITATION_TEXT":"(facoltativo) aggiungi un testo personalizzato all'invito. Di qualcosa di simpatico ai tuoi nuovi membri ;-)","HELP_TEXT":"Se gli utenti sono già registrati su Taiga, verranno aggiunti automaticamente. In caso contrario, riceveranno un invito."},"FEEDBACK":{"TITLE":"Raccontaci qualcosa...","COMMENT":"...un bug, dei suggerimenti, qualcosa di fico... o anche il tuo peggior incubo con Taiga","ACTION_SEND":"Invia feedback"},"SEARCH":{"TITLE":"Cerca","PLACEHOLDER_SEARCH":"Cosa stai cercando?"},"ADD_EDIT_SPRINT":{"TITLE":"Nuovo sprint","PLACEHOLDER_SPRINT_NAME":"il nome dello sprint","PLACEHOLDER_SPRINT_START":"Inizio stimato","PLACEHOLDER_SPRINT_END":"Fine stimata","ACTION_DELETE_SPRINT":"Sei sicuro di voler cancellare questo sprint?","TITLE_ACTION_DELETE_SPRINT":"Elimina sprint","LAST_SPRINT_NAME":"l'ultimo sprint è {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Aggiungi problema","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Cancella sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(facoltativo) aggiungi un testo personalizzato all'invito. Di qualcosa di simpatico ai tuoi nuovi membri ;-)","PLACEHOLDER_TYPE_EMAIL":"Scrivi una mail","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Stai per raggiungere il numero massimo di membri concessi per questo progetto, {{maxMembers}} membri. Se vuoi aumentare il limite attuale, per favore contatta l'amministratore.","LIMIT_USERS_WARNING_MESSAGE":"Stai per raggiungere il numero massimo di membri concessi per questo progetto, {{maxMembers}} membri."},"LEAVE_PROJECT_WARNING":{"TITLE":"Sfortunatamente, questo progetto non può essere abbandonato senza un proprietario","CURRENT_USER_OWNER":{"DESC":"Sei l'attuale proprietario di questo progetto. Prima di lasciare, per favore trasferisci la proprietà a qualcun'altro","BUTTON":"Cambia il proprietario del progetto"},"OTHER_USER_OWNER":{"DESC":"Sfortunatamente, non puoi cancellare un membro che è anche proprietario del progetto corrente. Prima assegna il progetto ad un nuovo proprietario.","BUTTON":"Richiedi cambiamento del proprietario del progetto"}},"CHANGE_OWNER":{"TITLE":"Chi vuoi che sia il nuovo proprietario del progetto?","ADD_COMMENT":"Aggiungi commento","BUTTON":"Chiedi a questo membro di diventare il nuovo proprietario del progetto"},"CONTACT_PROJECT":{"TITLE":"Inviare un'email a","WARNING":"Questa email sarà ricevuta dagli amministratori di progetto","PLACEHOLDER":"Scrivi il tuo messaggio","SEND":"Invia"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Qual'è il progetto?","CHOOSE_PROJECT_FROM":"Qual'è il progetto?","SUBJECT":"Oggetto","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Stauts: {{epicStatus }}. Descrizione: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"Non siamo riusciti a scollegare: {{erroreMessage}}","CREATE_RELATED_USERSTORIES":"Crea una relazione con","NEW_USERSTORY":"Nuova storia utente","EXISTING_USERSTORY":"Storia utente esistente","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Oggetto","SUBJECT_BULK_MODE":"Oggetto (inserimento massivo)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"Questo progetto non ha ancora Storie Utente. Per favore selezione un altro progetto.","NO_USERSTORIES_FOUND":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca","FILTER_USERSTORIES":"Filtra le storie utente","LIGHTBOX_TITLE_BLOKING_EPIC":"Epic bloccante","ACTION_DELETE":"Cancella epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - User Story {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Completata per il {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} di {{userStoryTotalTasks}} tasks closed). Punti: {{userStoryPoints}}. Descrizione: {{userStoryDescription}}","SECTION_NAME":"Storia utente","LINK_TASKBOARD":"Pannello dei compiti","TITLE_LINK_TASKBOARD":"Vai al pannello dei compiti","TOTAL_POINTS":"totale punti","ADD":"+ Aggiungi una nuova storia utente","ADD_BULK":"Aggiungere qualche nuova User Storie al carico","PROMOTED":"Questa storia utente è stata promossa da problema:","TITLE_LINK_GO_TO_ISSUE":"Vai al problema","TITLE_DELETE_ACTION":"Elimina la storia utente","LIGHTBOX_TITLE_BLOKING_US":"Blocco la storia utente","NOT_ESTIMATED":"Non stimato","OWNER_US":"Questa storia utente appartiene a","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Pubblica come Gig in Taiga Tribe","PUBLISH_INFO":"Più info","PUBLISH_TITLE":"Più info sulla pubblicazione in Taiga Tribe","PUBLISHED_AS_GIG":"Storia pubblicata come Gig in Taiga Tribe","EDIT_LINK":"Modifica collegamento","CLOSE":"Chiudi","SYNCHRONIZE_LINK":"sincronizza con Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Hai bisogno di qualcuno per questo task?","PUBLISH_MORE_INFO_TEXT":"

    Se hai bisogno di aiuto con un particolare lavoro puoi facilmente creare una richiesta su Taiga Tribe e ricevere aiuto da tutto il mondo. Potrai controllare e gestire la richiesta sperimentando una grande comunità desiderosa di aiutare.

    In pratica

    TaigaTribe è il fratello di Taiga. Entrambe le piattaforme possono essere utilizzate separatamente ma noi crediamo che insieme possano essere uno strumento molto potente, per cui ci assicuriamo di rendere la loro integrazione estremamente funzionale.

    "}},"COMMENTS":{"DELETED_INFO":"Commento eliminato da {{user}}","COMMENTS_COUNT":"{{comments}} Commenti","OLDER_FIRST":"I più vecchi prima","RECENT_FIRST":"I più recenti prima","COMMENT":"Commento","EDITED_COMMENT":"Modificato:","SHOW_HISTORY":"Vai alla cronologia","TYPE_NEW_COMMENT":"Scrivi un nuovo commento qui","SHOW_DELETED":"Visualizza commento cancellato","HIDE_DELETED":"Nascondi commento cancellato","DELETE":"Cancella commento","RESTORE":"Ripristina commento","HISTORY":{"TITLE":"Attività"}},"ACTIVITY":{"TITLE":"Attività","ACTIVITIES_COUNT":"{{Activities}} Attività","TAGS_ADDED":"Tag aggiunti:","TAGS_REMOVED":"tag rimossi:","US_POINTS":"{{role}} punti","NEW_ATTACHMENT":"nuovo allegato:","DELETED_ATTACHMENT":"cancella allegato:","UPDATED_ATTACHMENT":"Aggiorna allegato ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"crea un attributo personalizzato","UPDATED_CUSTOM_ATTRIBUTE":"attributo personalizzato aggiornato","BECAME_DEPRECATED":"diventa deprecato","BECAME_UNDEPRECATED":"diventa accettato","TEAM_REQUIREMENT":"Requisito del team","CLIENT_REQUIREMENT":"Requisito del cliente","BLOCKED":"Bloccato","VALUES":{"NOT_SET":"not set","UNASSIGNED":"non assegnato"},"FIELDS":{"SUBJECT":"oggetto","DESCRIPTION":"descrizione","PRIORITY":"priorità","SEVERITY":"criticità","STATUS":"stato","TYPE":"tipo","ASSIGNED_TO":"assegnato a","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"colore"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Il pannello di backlog, con le storie degli utenti e gli sprint di progetto","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Personalizza il grafico del tuo backlog","CUSTOMIZE_GRAPH_TEXT":"Per avere un grafico bello e utile che ti aiuti a seguire l'evoluzione del progetto devi impostare i punti e gli sprint come","CUSTOMIZE_GRAPH_ADMIN":"Amministratore","CUSTOMIZE_GRAPH_TITLE":"Imposta i punti e gli sprint come Amministratore","MOVE_US_TO_CURRENT_SPRINT":"Spostati allo sprint attuale","MOVE_US_TO_LATEST_SPRINT":"Vai allo Sprint più recente","EMPTY":"OMG..Il backlog é vuoto!!","CREATE_NEW_US":"Crea una nuova Storia Utente","CREATE_NEW_US_EMPTY_HELP":"Potresti voler creare una nuova storia utente","EXCESS_OF_POINTS":"Eccesso di punti","PENDING_POINTS":"Punti in sospeso","CLOSED_POINTS":"chiuso","COMPACT_SPRINT":"Ripiega lo sprint","GO_TO_TASKBOARD":"Vai al pannello dei compiti di {{::name}}","EDIT_SPRINT":"Modifica lo sprint","TOTAL_POINTS":"totale","STATUS_NAME":"Nome dello status","SORTABLE_FILTER_ERROR":"Non puoi depositare in backlog quando i filtri sono aperti","DOOMLINE":"Scopo del progetto","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Punti","OPTIMAL":"I punti in sospeso ottimali per lo sprint \"{{sprintName}}\" dovrebbero essere {{value}}","REAL":"I punti in sospeso definitivi per lo sprint \"{{sprintName}}\" sono {{value}}","INCREMENT_TEAM":"I punti incrementati dai requisiti del team per lo sprint \"{{sprintName}}\" sono {{value}}","INCREMENT_CLIENT":"I punti incrementati dai requisiti del cliente per lo sprint \"{{sprintName}}\" sono {{value}}"},"TAGS":{"TOGGLE":"Commuta visibilità tag","SHOW":"Mostra tag","HIDE":"Nascondi tag"},"FORECASTING":{"TITLE":"Previsione di velocità","BACKLOG":"Mostra il backlog","NEW_SPRINT":"Candida Storie Utente per essere inserite nel tuo prossimo sprint in base alla tua velocità. Clicca per creare un nuovo sprint.","CURRENT_SPRINT":"Candida Storie Utente per essere inserite nel tuo sprint attuale in base alla tua velocità. Clicca per aggiungere allo sprint corrente."},"TABLE":{"COLUMN_US":"Storie Utente","TITLE_COLUMN_POINTS":"Seleziona vista per Ruolo"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"punti
    totali","COMPLETED_POINTS":"
    punti completati","OPEN_TASKS":"
    compiti aperti","CLOSED_TASKS":"
    compiti chiusi","IOCAINE_DOSES":"
    pasticche di aspirina","SHOW_STATISTICS_TITLE":"Mostra statistiche","TOGGLE_BAKLOG_GRAPH":"Mostra/nascondi i grafici burndown","POINTS_PER_ROLE":"Punti per ruolo"},"SUMMARY":{"PROJECT_POINTS":"
    punti di progetto","DEFINED_POINTS":"
    punti definiti","CLOSED_POINTS":"
    punti chiusi","POINTS_PER_SPRINT":"
    punti di sprint"},"FILTERS":{"TOGGLE":"Premi i filtri visibilità","HIDE":"Nascondi Filtri","SHOW":"Mostra Filtri"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Pannello dei compiti dello sprint","TITLE_LINK_TASKBOARD":"Vai al pannello dei compiti di \"{{name}}\"","EMPTY":"Non ci sono ancora sprints disponibili","WARNING_EMPTY_SPRINT_ANONYMOUS":"Lo Sprint non ha Storie Utente","WARNING_EMPTY_SPRINT":"Metti qui le storie del tuo backlog che iniziare in nuovo sprint","TITLE_ACTION_NEW_SPRINT":"Aggiungi un nuovo sprint","TEXT_ACTION_NEW_SPRINT":"Potresti voler creare un nuovo sprint nel tuo progetto","ACTION_SHOW_CLOSED_SPRINTS":"Mostra gli sprints terminati","ACTION_HIDE_CLOSED_SPRINTS":"Nascondi lo sprint terminato"}},"ERROR":{"TEXT1":"E' successo qualcosa, ma i nostri Oompa Loompa ci stanno lavorando sodo!","NOT_FOUND":"Non trovato","NOT_FOUND_TEXT":"Errore 404. La pagina che stai cercando non esiste più. Forse puoi tornare alla home e vedere se è possibile trovare quello che stai cercando.","PERMISSION_DENIED":"Permesso negato","PERMISSION_DENIED_TEXT":"Non si hanno i permessi necessari per accedere a questa pagina.","VERSION_ERROR":"Qualcuno all'interno di Taiga ha fatto un cambiamento prima che i nostri Oompa Loompa potessero applicare le modifiche. Per favore ricarica e applica di nuovo le modifiche (altrimenti andranno perse)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Pannello dei compiti dello Sprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (da {{startDate}} a {{endDate}}) di {{projectName}}. Completato {{completedPercentage}}% ({{completedPoints}} di {{totalPoints}} points). {{openTasks}} compiti aperti di {{totalTasks}}","SECTION_NAME":"Pannello dei compiti","TITLE_ACTION_ADD":"Aggiungi un nuovo compito","TITLE_ACTION_ADD_BULK":"Aggiungi qualche nuovo Compito nel carico","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Compito assegnato","PLACEHOLDER_CARD_TITLE":"Questo potrebbe essere un compito","PLACEHOLDER_CARD_TEXT":"Dividi le storie in compiti per tenerne traccia separatamente","TABLE":{"COLUMN":"Storia utente","TITLE_ACTION_FOLD":"Ripiega la colonna","TITLE_ACTION_UNFOLD":"Riapri la colonna","TITLE_ACTION_FOLD_ROW":"Ripiega la riga","TITLE_ACTION_UNFOLD_ROW":"Rivela la riga","FIELD_POINTS":"punti","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Giorni","YAXIS_LABEL":"Punti","OPTIMAL":"Il livello ottimale di punti sospesi per la giornata {{formattedDate}} dovrebbe essere {{roundedValue}}","REAL":"I punti in sospeso definitivi per la giornata {{formattedDate}} sono {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Compiti {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Stato: {{taskStatus }}. Descrizione: {{taskDescription}}","SECTION_NAME":"Compito","LINK_TASKBOARD":"Pannello dei compiti","TITLE_LINK_TASKBOARD":"Vai al pannello dei compiti","PLACEHOLDER_SUBJECT":"Inserisci il soggetto del nuovo compito","TITLE_SELECT_STATUS":"Nome dello status","OWNER_US":"Questo compito appartiene a","TITLE_LINK_GO_OWNER":"Vai alla storia utente","TITLE_DELETE_ACTION":"Rimuovi compito","LIGHTBOX_TITLE_BLOKING_TASK":"Sto bloccando il compito","FIELDS":{"IS_IOCAINE":"E' un'aspirina"},"TITLE_ACTION_IOCAINE":"Sei stremato? Assicurati che gli altri lo sappiano cliccando su \"aspirina\" quando stai lavorando su compito che ti affatica. Ma non demordere, ricordati: si può migliorare solo se di tanto in tanto si accettano sfide extra!"},"NOTIFICATION":{"OK":"E' tutto ok!","WARNING":"Oops, é successo qualcosa...","WARNING_TEXT":"Accidenti! I nostri Oompa Loompa sono tristi..le modifiche non sono state salvate","SAVED":"I nostri Oompa Loompa hanno salvato tutte le modifiche! wow!!","CLOSE":"Chiudi notifica","MAIL":"Notifica tramite mail","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Sei sicuro di voler cancellare?"},"CANCEL_ACCOUNT":{"TITLE":"Elimina il tuo account","SUBTITLE":"Ci spiace se stai lasciando Taiga, speriamo che il tuo soggiorno sia stato piacevole :)","PLACEHOLDER_INPUT_TOKEN":"cancella il token dell'account","ACTION_LEAVING":"Si, sto abbandonando!","SUCCESS":"I nostri Oompa Loompa hanno eliminato il tuo account, e ora sono tristi"},"CHANGE_EMAIL_FORM":{"TITLE":"Cambia la tua email","SUBTITLE":"Un'altro click e la tua mail verrá aggiornata!","PLACEHOLDER_INPUT_TOKEN":"Modifica il token della mail","ACTION_CHANGE_EMAIL":"Cambia email","SUCCESS":"I nostri Oompa Loompa hanno aggiornato la tua mail"},"ISSUES":{"PAGE_TITLE":"Problemi - {{projectName}}","PAGE_DESCRIPTION":"Il pannello con la lista dei problemi del progetto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Problema","ACTION_NEW_ISSUE":"+ NUOVO PROBLEMA","ACTION_PROMOTE_TO_US":"Promuovi la storia utente","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Il problema è stato promosso a storia utente","EXTERNAL_REFERENCE":"Questo problema è stato creato da ","GO_TO_EXTERNAL_REFERENCE":"Ritorna all'inizio","ACTION_DELETE":"Elimina problema","LIGHTBOX_TITLE_BLOKING_ISSUE":"Problema bloccante","LINK_TASKBOARD":"Pannello dei compiti","TITLE_LINK_TASKBOARD":"Vai al pannello dei compiti","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Priorità","SEVERITY":"Gravità","TYPE":"Tipo"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promuovi questo problema come nuova storia utente","MESSAGE":"Sei sicuro di voler creare una nuova storia utente da questo problema?"},"TABLE":{"COLUMNS":{"TYPE":"Tipo","SEVERITY":"Gravità","PRIORITY":"Priorità","SUBJECT":"Oggetto","VOTES":"Voti","STATUS":"Stato","MODIFIED":"Modificato","ASSIGNED_TO":"Assegna a"},"TITLE_ACTION_CHANGE_STATUS":"Cambia stato","TITLE_ACTION_ASSIGNED_TO":"Assegna a","BLOCKED":"Bloccato","EMPTY":{"TITLE":"Non ci sono problemi da segnalare :-)","SUBTITLE":"Hai trovato un problema?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Criticitá {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Stato: {{issueStatus }}. Tipo: {{issueType}}, Prioritá: {{issuePriority}}. Severitá: {{issueSeverity}}. Descrizione: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Il pannello kanban, con le storie utenti del progetto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Ripiega la colonna","TITLE_ACTION_UNFOLD":"Riapri la colonna","TITLE_ACTION_ADD_US":"Aggiungi una nuova storia utente","TITLE_ACTION_ADD_BULK":"Aggiungi un nuovo carico","ACTION_SHOW_ARCHIVED":"Mostra archivio","ACTION_HIDE_ARCHIVED":"Nascondi archivio","HIDDEN_USER_STORIES":"Le storie utente in questo status sono nascoste by default","PLACEHOLDER_CARD_TITLE":"Queste sono le tue storie utente.","PLACEHOLDER_CARD_TEXT":"Le storie possono anche avere dei sotto-compiti che separano i requisiti"},"SEARCH":{"PAGE_TITLE":"Cerca - {{projectName}}","PAGE_DESCRIPTION":"Cerca storie utenti, problemi, compiti o pagine wiki, all'interno del progetto {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epici","FILTER_USER_STORIES":"Storie Utente","FILTER_ISSUES":"Problemi","FILTER_TASKS":"Compiti","FILTER_WIKI":"Pagine wiki","PLACEHOLDER_SEARCH":"Cerca in...","TITLE_ACTION_SEARCH":"cerca","EMPTY_TITLE":"Sembra che non ci sia nulla che corrisponda ai criteri ricerca","EMPTY_DESCRIPTION":"Prova uno dei tab che trovi sopra, o prova a cercare di nuovo"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Il pannello del team da mostrare a tutti i membri del progetto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Squadra","PLACEHOLDER_INPUT_SEARCH":"Cerca con il nome completo","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Problemi chiusi","COLUMN_IOCAINE":"Aspirinomane","EXPLANATION_COLUMN_IOCAINE":"Pasticche di aspirina prese","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Pagine wiki modificate","COLUMN_BUG_HUNTER":"Cacciatore di bug","EXPLANATION_COLUMN_BUG_HUNTER":"Problemi segnalati","COLUMN_NIGHT_SHIFT":"Turno notturno","EXPLANATION_COLUMN_NIGHT_SHIFT":"Compiti chiusi","COLUMN_TOTAL_POWER":"Potere totale","EXPLANATION_COLUMN_TOTAL_POWER":"Totale Punti","SECTION_TITLE_TEAM":"Squadra >","SECTION_FILTER_ALL":"Tutti","CONFIRM_LEAVE_PROJECT":"Sei sicuro di voler abbandonare il progetto?","ACTION_LEAVE_PROJECT":"Abbandona il progetto"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Dimensione massima: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Impostazioni utente","USER_PROFILE":"Profilo utente","CHANGE_PASSWORD":"Cambia password","EMAIL_NOTIFICATIONS":"Notifiche email","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Notifiche email","COLUMN_PROJECT":"Progetto","COLUMN_RECEIVE_ALL":"Ricevi tutto","COLUMN_ONLY_INVOLVED":"Solo coinvolto","COLUMN_NO_NOTIFICATIONS":"Nessuna notifica","OPTION_ALL":"Tutti","OPTION_INVOLVED":"Coinvolto","OPTION_NONE":"Nessuno"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Progetto","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Progetto"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Usa l'immagine di default","ACTION_DELETE_ACCOUNT":"Elimina l'account Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Controlla la tua casella di posta
    abbiamo mandato una mail al tuo account
    con le istruzioni per impostare un nuovo indirizzo","CHANGE_PHOTO":"Cambia foto","FIELD":{"USERNAME":"Username","EMAIL":"Email","FULL_NAME":"Nome completo","PLACEHOLDER_FULL_NAME":"Inserisci il tuo nome completo (es. Alessio Biancalana)","BIO":"Biografia (massimo 210 caratteri)","PLACEHOLDER_BIO":"Raccontaci qualcosa di te","LANGUAGE":"Lingua","LANGUAGE_DEFAULT":"-- usa lingua predefinita --","THEME":"Tema","THEME_DEFAULT":"-- usa tema predefinito --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"L'ultima versione su {{lastModifiedDate}} ({{totalEditions}} versioni in totale) Contenuto: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Rimuovi questa pagina wiki","DELETE_LIGHTBOX_TITLE":"Elimina Pagina Wiki","DELETE_LINK_TITLE":"Cancella collegamento Wiki","NAVIGATION":{"HOME":"Pagina principale","SECTION_NAME":"SEGNALIBRI","ACTION_ADD_LINK":"Aggiungi segnalibro","ALL_PAGES":"Tutte le pagine wiki"},"SUMMARY":{"TIMES_EDITED":"tempo
    modificato","LAST_EDIT":"
    ultima modifica","LAST_MODIFICATION":"ultima modifica"},"SECTION_PAGES_LIST":"Tutte le pagine","PAGES_LIST_COLUMNS":{"TITLE":"Titolo","EDITIONS":"Edizioni","CREATED":"Creato","MODIFIED":"Modificato","CREATOR":"Creato da","LAST_MODIFIER":"Ultimo a modificare"}},"HINTS":{"SECTION_NAME":"Suggerimento","LINK":"Se vuoi sapere come si usa visita la nostra pagina di supporto","LINK_TITLE":"Visita la nostra pagina di supporto","HINT1_TITLE":"Sai che puoi anche importare ed esportare progetti?","HINT1_TEXT":"Questo ti permette di estrarre tutti i tuoi dati da un Taiga e muoverli dentro un altro.","HINT2_TITLE":"Sai che puoi anche creare dei campi personalizzati?","HINT2_TEXT":"I team adesso possono creare dei campi personalizzati. Così hanno uno strumento flessibile per inserire quei dati specifici che sono utili al loro flusso di lavoro.","HINT3_TITLE":"Riordina i tuoi progetti e metti in evidenza quelli più rilevanti.","HINT3_TEXT":"I 10 progetti sono elencati nella barra ad accesso rapido su in alto.","HINT4_TITLE":"Ti sei dimenticato su cosa stavi lavorando?","HINT4_TEXT":"Non preoccuparti, sulla tua dashboard troverai i compiti aperti, i problemi e le storie utenti così da poterci lavorare"},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} ha caricato un nuovo allegato in {{obj_name}}","US_CREATED":"{{username}} ha creato una nuova storia utente {{obj_name}} in {{project_name}}","ISSUE_CREATED":"{{username}} ha creato un nuovo problema {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} ha creato un nuovo compito {{obj_name}} in {{project_name}}","TASK_CREATED_WITH_US":"{{username}} ha creato un nuovo compito {{obj_name}} in {{project_name}} che appartiene alla storia utente {{us_name}}","WIKI_CREATED":"{{username}} ha creato una nuova pagina wiki {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} ha creato un nuovo sprint {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} ha creato un nuovo epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} ha collegato la storia utente {{related_us_name}} all'epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} ha creato il progetto {{project_name}}","MILESTONE_UPDATED":"{{username}} ha aggiornato lo sprint {{obj_name}}","US_UPDATED":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" alla storia utente {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" della storia utente {{obj_name}} a {{new_value}}","US_UPDATED_POINTS":"{{username}} ha aggiornato '{{role_name}}' punti della storia utente {{obj_name}} a {{new_value}}","ISSUE_UPDATED":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del problema {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del problema {{obj_name}} a {{new_value}}","TASK_UPDATED":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} a {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} a {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} che appartiene alla storia utente {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} ha aggiornato l'attributo \"{{field_name}}\" del compito {{obj_name}} che appartiene alla storia utente {{us_name}} a {{new_value}}","WIKI_UPDATED":"{{username}} ha aggiornato la pagina wiki {{obj_name}}","EPIC_UPDATED":"{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}} in {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} ha modificato l'attributo \"{{field_name}}\" dell'epic {{obj_name}} in ","NEW_COMMENT_US":"{{username}} ha commentato nella storia utente {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} ha commentato nel problema {{obj_name}}","NEW_COMMENT_TASK":"{{username}} ha commentato nel compito {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} ha commentato nell'epic {{obj_name}}","NEW_MEMBER":"{{project_name}} ha un nuovo membro","US_ADDED_MILESTONE":"{{username}} ha aggiunto la storia utente {{obj_name}} a {{sprint_name}}","US_MOVED":"{{username}} ha spostato la storia utente {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} ha aggiunto la storia utente {{obj_name}} al backlog","BLOCKED":"{{username}} è stato bloccato {{obj_name}}","UNBLOCKED":"{{username}} è stato sbloccato {{obj_name}}","NEW_USER":"{{username}} si é iscritto su Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Problema","TASK":"Compito"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"Un'applicazione esterna richiede l'autenticazione","PAGE_DESCRIPTION":"Un'applicazione esterna richiede l'autenticazione","AUTHORIZATION_REQUEST":"Vuoi autorizzare {{application}} ad usare il tuo account Taiga?","LOGIN_WITH_ANOTHER_USER":"Accedi come un altro utente","AUTHORIZE_APP":"Autorizza applicazione","CANCEL":"Annulla"},"JOYRIDE":{"NAV":{"NEXT":"Successivo","BACK":"Back","SKIP":"Salta","DONE":"Fatto"},"DASHBOARD":{"STEP1":{"TITLE":"Il tuo progetto","TEXT":"Benvenuto! Qui puoi trovare i progetti in cui sei coinvolto."},"STEP2":{"TITLE":"Sta lavorando su","TEXT":"Qui puoi trovare le storie utente, i compiti e i problemi a cui stai lavorando."},"STEP3":{"TITLE":"In osservazione","TEXT1":"E qui trovi tutte quelle cose del progetto di cui volevi sapere.","TEXT2":"Stai giù lavorando in Taiga ;) "},"STEP4":{"TITLE":"Bene..cominciamo!!","TEXT1":"Il modo migliore per iniziare é creare subito il tuo primo progetto Taiga.","TEXT2":"Buona fortuna!"}},"BACKLOG":{"STEP1":{"TITLE":"Riassunto di progetto","TEXT1":"Qui puoi vedere lo stato del progetto.","TEXT2":"Puoi cambiare qualsiasi impostazione del tuo progetto attraverso l'Amministratore."},"STEP2":{"TITLE":"Backlog di produzione","TEXT":"Il Backlog è la lista dei requisiti (o storie utente) per il progetto. Qui è dove pianificherai i tuoi sprint. "},"STEP3":{"TITLE":"Sprints","TEXT":"Gli sprints durano solitamente poco tempo (circa 2 settimane) durante le quali deve essere completato e consegnato un lavoro specifico."},"STEP4":{"TITLE":"Storie Utente","TEXT":"Questi sono i requisiti di alto livello. Li puoi aggiungere al backlog e spostare nello sprint dove devono essere consegnati."}},"KANBAN":{"STEP1":{"TITLE":"Personalizza il tuo flusso di lavoro","TEXT":"Imposta le colonne di cui hai bisogno per mappare lo stato dei tuoi flussi di lavoro come Amministratore. "},"STEP2":{"TITLE":"Storie utente e compiti","TEXT":"Le storie utente sono i requisiti di alto livello. Puoi spostarle in differenti colonne."},"STEP3":{"TITLE":"Aggiungi le storie utente","TEXT1":"Potresti voler aggiungere una solo storia utente (aggiungi l'icona storia utente) o più di una, in gruppo (icona bulk)","TEXT2":"Buona fortuna! "}}},"DISCOVER":{"PAGE_TITLE":"Scopri i progetti - Taiga","PAGE_DESCRIPTION":"Elenco ricercabile dei progetti pubblici in Taiga. Esplora i backlog, i problemi e i team. Scopri i progetti più apprezzati o più attivi. Filtra per Kanban o Scrum.","DISCOVER_TITLE":"Scopri progetti","DISCOVER_SUBTITLE":"{projects, plural, one{Un progetto pubblico da scoprire} other{# progetti pubblici da scoprire}}","MOST_ACTIVE":"Più attivi","MOST_ACTIVE_EMPTY":"Non ci sono ancora progetti ATTIVI","MOST_LIKED":"Preferiti","MOST_LIKED_EMPTY":"Non ci sono ancora progetti PREFERITI","VIEW_MORE":"Vedi altro","FEATURED":"Progetti in Vetrina","EMPTY":"Non ci sono progetti da mostrare con questi criteri.
    Prova ancora!","FILTERS":{"ALL":"Tutti","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Cerca persone","WEEK":"Ultima settimana","MONTH":"Ultimo mese","YEAR":"Ultimo anno","ALL_TIME":"Tutto","CLEAR":"Cancella filtri"},"SEARCH":{"PAGE_TITLE":"Cerca - Scopri i progetti - Taiga","PAGE_DESCRIPTION":"Elenco ricercabile dei progetti pubblici in Taiga. Esplora i backlog, le timeline, le issue e i team. Scopri i progetti più piaciuti o più attivi. Filtra per Kanban o Scrum.","INPUT_PLACEHOLDER":"Inserisci testo...","ACTION_TITLE":"Cerca","RESULTS":"Risultati della ricerca"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-ja.json b/dist/v-1549282893552/locales/taiga/locale-ja.json new file mode 100644 index 0000000..5b86925 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-ja.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"はい","NO":"いいえ","OR":"または","I_GET_IT":"OK, I get it","LOADING":"ロード中...","DATE":"YYYY年MM月DD日","DATETIME":"YYYY年MM月DD日 HH時mm分","SAVE":"保存","CANCEL":"キャンセル","ACCEPT":"はい","DELETE":"削除","UNLINK":"リンク解除","CREATE":"作成","ADD":"追加","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"編集","DRAG":"ドラッグ","TAG_LINE":"あなたのアジャイルでフリーでオープンソースなマネジメントツールです","TAG_LINE_2":"LOVE YOUR PROJECT","BLOCK":"ブロック","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"ブロック中","UNBLOCK":"ブロック解除","UNBLOCK_TITLE":"ブロックを解除する","BLOCKED_NOTE":"なぜこれはブロックされているのか?","BLOCKED_REASON":"理由を説明してください","CREATED_BY":"{{fullDisplayName}} によって作成","CLOSE":"閉じる","GO_HOME":"ホームに戻る","PLUGINS":"プラグイン","ONE_ITEM_LINE":"1行に1アイテム","NEW_BULK":"一括登録","SUBTASKS":"Subtasks","PREVIOUS":"前","NEXT":"次へ","LOGOUT":"ログアウト","EXTERNAL_USER":"外部ユーザー","GENERIC_ERROR":"ウンパルンパのひとりが「{{error}}」と言っています。","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"プロジェクトオーナー","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"本当にこの編集画面を閉じてもよろしいですか?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"保存せずに編集画面を閉じた場合、すべての変更が失われます。","RELATED_USERSTORIES":"関連するユーザーストーリー","CARD":{"ASSIGN_TO":"割当","EDIT":"編集","DELETE":"カードを削除","DELETE_ISSUE":"課題を削除","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"無効な値です","TYPE_EMAIL":"有効なメールアドレスでなければいけません。","TYPE_URL":"有効なURLでなければいけません","TYPE_URLSTRICT":"有効なURLでなければいけません","TYPE_NUMBER":"有効な数字でなければいけません","TYPE_DIGITS":"アラビア数字でなければいけません","TYPE_DATEISO":"YYYY-MM-DD の形式でなければいけません (例: 2038年01月23日)","TYPE_ALPHANUM":"半角英数字でなければなりません","TYPE_PHONE":"有効な電話番号でなければいけません","NOTNULL":"null以外でなければいけません","NOT_BLANK":"空欄にできません","REQUIRED":"必須です","REGEXP":"無効な値です","MIN":"この値は %s 以上でなければいけません","MAX":"この値は %s 以下でなければいけません","RANGE":"この値は %s と %s の間でなければいけません","MIN_LENGTH":"文字数が短すぎます。%s 文字以上にしてください。","MAX_LENGTH":"入力した値が長すぎます。%s 文字以下にしてください。","RANGE_LENGTH":"文字数が無効です。%s から %s 文字の間でなければいけません ","MIN_CHECK":"%s 以上選択してください。","MAX_CHECK":"選択できるのは %s までです","RANGE_CHECK":"選択できるのは %s から %s までです","EQUAL_TO":"この値は同じでなければいけません","LINEWIDTH":"行がおそらく長すぎます。%s文字以内におさえてください。","PIKADAY":"無効なデータフォーマットです。DD MMM YYYYの形式で入力してください。(例:23 Mar 1984)"},"PICKERDATE":{"FORMAT":"YYYY年MM月DD日","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"先月","NEXT_MONTH":"翌月","MONTHS":{"JAN":"1月","FEB":"2月","MAR":"3月","APR":"4月","MAY":"5月","JUN":"6月","JUL":"7月","AUG":"8月","SEP":"9月","OCT":"10月","NOV":"11月","DEC":"12月"},"WEEK_DAYS":{"SUN":"日曜","MON":"月曜","TUE":"火曜","WED":"水曜","THU":"木曜日","FRI":"金曜","SAT":"土曜"},"WEEK_DAYS_SHORT":{"SUN":"日","MON":"月","TUE":"火","WED":"水","THU":"木","FRI":"金","SAT":"土"}},"SEE_USER_PROFILE":"{{username }} のプロフィールを見る","USER_STORY":"User story","TASK":"タスク","ISSUE":"課題","EPIC":"エピック","TAGS":{"PLACEHOLDER":"タグを入力","DELETE":"タグを削除","ADD":"タグを追加"},"DESCRIPTION":{"EMPTY":"空欄だと退屈です…。説明を追加してください。","NO_DESCRIPTION":"説明はありません"},"FIELDS":{"SUBJECT":"題名","NAME":"名前","URL":"URL","DESCRIPTION":"説明","VALUE":"値","SLUG":"スラッグ","COLOR":"色","IS_CLOSED":"クローズ","STATUS":"ステータス","TYPE":"タイプ","SEVERITY":"深刻度","PRIORITY":"優先度","ASSIGNED_TO":"割当","ASSIGNED_USERS":"割当ユーザー","POINTS":"ポイント","IS_BLOCKED":"はブロックされています。","REF":"参照","VOTES":"投票","SPRINT":"スプリント","DUE_DATE":"締切日","DUE_DATE_REASON":"締切日理由"},"ROLES":{"ALL":"すべて"},"ASSIGNED_TO":{"NOT_ASSIGNED":"未割当","ASSIGN":"割当","DELETE_ASSIGNMENT":"割当を削除","REMOVE_ASSIGNED":"割当を解除","TOO_MANY":"…ユーザーが多すぎます。フィルタを継続してください。","CONFIRM_UNASSIGNED":"本当にこのアサインから外れてもよろしいですか?","TITLE_ACTION_EDIT_ASSIGNMENT":"割当を編集","SELF":"自分に割当"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"締切日を設定"},"ASSIGNED_USERS":{"ADD":"割当ユーザーを選択","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"終了","OPEN":"オープン"},"WATCHERS":{"WATCHERS":"ウォッチャー","ADD":"ウォッチャー追加","TITLE_ADD":"プロジェクトメンバーをウォッチャーリストへ追加","DELETE":"ウォッチャーを削除","TITLE_LIGHTBOX_DELETE_WARTCHER":"ウォッチャーの削除..."},"WATCH_BUTTON":{"WATCH":"フォロー","WATCHING":"フォロー中","UNWATCH":"フォローをやめる","WATCHERS":"ウォッチャー","BUTTON_TITLE":"この項目のフォローを有効/無効にする","COUNTER_TITLE":"{total, plural, one{one watcher} other{# 人がフォロー中}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"賛成/反対の投票を行う","COUNTER_TITLE":"{total, plural, one{one vote} other{# 人が賛成}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"カスタムフィールド","SAVE":"カスタムフィールドを保存","EDIT":"カスタムフィールドを編集","DELETE":"カスタム属性を削除","CONFIRM_DELETE":"このカスタムフィールドのすべての値が削除されることになります。\n本当にこのまま続行してもよろしいですか?"},"FILTERS":{"INPUT_PLACEHOLDER":"Subject or reference","TITLE_ACTION_FILTER_BUTTON":"検索","TITLE":"フィルター","TITLE_ACTION_SEARCH":"検索","ACTION_SAVE_CUSTOM_FILTER":"カスタムフィルターとして保存する","PLACEHOLDER_FILTER_NAME":"フィルター名を入力しエンターキーを押してください。","APPLIED_FILTERS_NUM":"フィルター適用中","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"タイプ","STATUS":"ステータス","SEVERITY":"深刻度","PRIORITIES":"優先度","TAGS":"タグ","ASSIGNED_TO":"割当","ASSIGNED_USERS":"割当ユーザー","ROLE":"役割","CREATED_BY":"作成者","CUSTOM_FILTERS":"カスタムフィルター","EPIC":"エピック"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"ダブルクリックして編集","SELECT_LANGUAGE_PLACEHOLDER":"言語を選択","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown記法のヘルプ"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"エピック","VIEW_EPICS":"エピックの表示","ADD_EPICS":"エピックを追加","MODIFY_EPICS":"エピックの変更","COMMENT_EPICS":"複数のエピックにコメントする","DELETE_EPICS":"エピックの削除"},"SPRINTS":{"NAME":"スプリント","VIEW_SPRINTS":"スプリントの表示","ADD_SPRINTS":"スプリントを追加","MODIFY_SPRINTS":"スプリントの変更","DELETE_SPRINTS":"スプリントの削除"},"USER_STORIES":{"NAME":"ユーザーストーリー","VIEW_USER_STORIES":"ユーザーストーリーの表示","ADD_USER_STORIES":"ユーザーストーリーを追加","MODIFY_USER_STORIES":"ユーザーストーリーの変更","COMMENT_USER_STORIES":"複数のユーザーストーリーにコメントする","DELETE_USER_STORIES":"ユーザーストーリーの削除"},"TASKS":{"NAME":"タスク","VIEW_TASKS":"タスクの表示","ADD_TASKS":"タスクを追加","MODIFY_TASKS":"タスクの変更","COMMENT_TASKS":"複数のタスクにコメントする","DELETE_TASKS":"タスクの削除"},"ISSUES":{"NAME":"課題","VIEW_ISSUES":"課題の表示","ADD_ISSUES":"課題を追加","MODIFY_ISSUES":"課題の変更","COMMENT_ISSUES":"複数の課題にコメントする","DELETE_ISSUES":"課題の削除"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Wikiページの表示","ADD_WIKI_PAGES":"Wikiページを追加","MODIFY_WIKI_PAGES":"Wikiページの変更","DELETE_WIKI_PAGES":"Wikiページの削除","VIEW_WIKI_LINKS":"Wikiリンクの表示","ADD_WIKI_LINKS":"Wikiリンクを追加","DELETE_WIKI_LINKS":"Wikiリンクの削除"}}},"LOGIN":{"PAGE_TITLE":"ログイン - Taiga","PAGE_DESCRIPTION":"スタートアップ、デベロッパー、デザイナーのための、仕事を真から楽しくするシンプルで美しいプロジェクトマネージメントツール、Taigaにログインしましょう。"},"AUTH":{"INVITED_YOU":"があなたをプロジェクトに招待しています","NOT_REGISTERED_YET":"未登録ですか?","REGISTER":"登録","CREATE_ACCOUNT":"こちらから無料でアカウントを作成"},"LOGIN_COMMON":{"HEADER":"すでにログインしたことがあります","PLACEHOLDER_AUTH_NAME":"ユーザー名 または メールアドレス","LINK_FORGOT_PASSWORD":"忘れましたか?","TITLE_LINK_FORGOT_PASSWORD":"パスワードをお忘れですか?","ACTION_ENTER":"決定","ACTION_SIGN_IN":"ログイン","PLACEHOLDER_AUTH_PASSWORD":"パスワード","ALT_LOGIN":"または次でログイン"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"「あなたのユーザー名/メールアドレス または パスワードが間違っている」とウンパルンパたちが言っています。","SUCCESS":"ウンパルンパたちは嬉しいみたいですよ。Taigaへようこそ。"},"REGISTER":{"PAGE_TITLE":"登録 - Taiga","PAGE_DESCRIPTION":"スタートアップ、デベロッパー、デザイナーのための、仕事を真から楽しくするシンプルで美しいプロジェクトマネージメントツール、Taigaのアカウントを作成しましょう。"},"REGISTER_FORM":{"TITLE":"新しいTaigaアカウントを登録する (無料)","PLACEHOLDER_NAME":"ユーザー名を記入","PLACEHOLDER_FULL_NAME":"フルネームを記入","PLACEHOLDER_EMAIL":"メールアドレスを記入","PLACEHOLDER_PASSWORD":"パスワードを設定 (大文字・小文字を区別)","ACTION_SIGN_UP":"サインアップ","TITLE_LINK_LOGIN":"ログイン","LINK_LOGIN":"登録の準備は整いましたか? ログイン"},"FORGOT_PASSWORD":{"PAGE_TITLE":"パスワードを忘れました - Taiga","PAGE_DESCRIPTION":"ユーザー名 または メールアドレスを記入して新しいパスワードを取得すれば、Taigaに再びアクセスできます。"},"FORGOT_PASSWORD_FORM":{"TITLE":"おっと、パスワードを忘れてしまいましたか?","SUBTITLE":"新しく始めるためにユーザー名 または メールアドレスを入力","PLACEHOLDER_FIELD":"ユーザー名 または メールアドレス","ACTION_RESET_PASSWORD":"パスワードをリセット","LINK_CANCEL":"いいえ、戻ります。私はそれを覚えていると思います。","SUCCESS_TITLE":"メールボックスを確認してください","SUCCESS_TEXT":"新しいパスワードを設定するための手順を記載したメールを送信しました","ERROR":"「あなたのアカウントはまだ登録されていない」とウンパルンパたちが言っています。"},"CHANGE_PASSWORD":{"PAGE_TITLE":"パスワードの変更 - Taiga","SECTION_NAME":"パスワード変更","FIELD_CURRENT_PASSWORD":"現在のパスワード","PLACEHOLDER_CURRENT_PASSWORD":"現在のパスワード (パスワードが未設定の場合は空)","FIELD_NEW_PASSWORD":"新しいパスワード","PLACEHOLDER_NEW_PASSWORD":"新しいパスワードを入力","FIELD_RETYPE_PASSWORD":"新しいパスワードを再入力","PLACEHOLDER_RETYPE_PASSWORD":"新しいパスワードを再入力","ERROR_PASSWORD_MATCH":"パスワードが一致しません。"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"新しいTaigaのパスを作成","SUBTITLE":"そして、いくつかの鉄分豊富な食品を摂取しましょう!脳にとって良いことです :-P","PLACEHOLDER_NEW_PASSWORD":"新しいパスワード","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"新しいパスワードを再入力","ACTION_RESET_PASSWORD":"パスワードをリセット","ERROR":"ウンパルンパたちはあなたのパスワード復元依頼を見つけられないようです。もう一度お試しください。","SUCCESS":"ウンパルンパたちはあなたの新しいパスワードを保存しました。
    新しいパスワードでサインイン してみてください。"},"INVITATION":{"PAGE_TITLE":"招待を受諾する - Taiga","PAGE_DESCRIPTION":"スタートアップ、デベロッパー、デザイナーのための、仕事を真から楽しくするシンプルで美しいプロジェクトマネージメントツール、Taigaへの招待を受諾します。"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"「あなたの招待を確認できなかった」とウンパルンパたちが言っています。","SUCCESS":"プロジェクトへの参加に成功しました, {{project_name}}へようこそ"},"HOME":{"PAGE_TITLE":"ホーム - Taiga","PAGE_DESCRIPTION":"あなたのメインプロジェクト、担当あるいはフォローしているユーザーストーリー、タスク、課題が表示されるTaigaのホームページです。","EMPTY_WORKING_ON":"何も表示されていませんか? Taigaで作業を始めると、ここにあなたが取り組んでいるユーザーストーリー、タスク、課題が表示されます。","EMPTY_WATCHING":"ユーザーストーリー、タスク、課題をフォローして変更が発生した際に通知を受け取りましょう。:)","EMPTY_PROJECT_LIST":"参加中のプロジェクトがありません","WORKING_ON_SECTION":"取り組んでいる作業","WATCHING_SECTION":"フォロー中","DASHBOARD":"プロジェクトのダッシュボート"},"EPICS":{"TITLE":"エピック","SECTION_NAME":"エピック","EPIC":"エピック","PAGE_TITLE":"エピック - {{projectName}}","PAGE_DESCRIPTION":"エピックの一覧 {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"エピックを追加","UNASSIGNED":"未割当"},"EMPTY":{"TITLE":"まだエピックが無いようです","EXPLANATION":"エピックはユーザーストーリーを包含する、より上の階層のものです。
    階級のトップにあり、ユーザーストーリーをグループ化してまとめるのにも用いられます。","HELP":"エピックについて"},"TABLE":{"VOTES":"投票","NAME":"名前","PROJECT":"プロジェクト","SPRINT":"スプリント","ASSIGNED_TO":"割当済","STATUS":"ステータス","PROGRESS":"進捗","VIEW_OPTIONS":"オプションの表示"},"CREATE":{"TITLE":"新しいエピック","PLACEHOLDER_DESCRIPTION":"このエピックを他の人が理解できるように説明を加えて下さい","TEAM_REQUIREMENT":"チームからの要求","CLIENT_REQUIREMENT":"お客様からの要求","BLOCKED":"ブロック中","BLOCKED_NOTE_PLACEHOLDER":"なぜこのエピックはブロックされているのか?","CREATE_EPIC":"エピックを作成"}},"PROJECTS":{"PAGE_TITLE":"マイ プロジェクト - Taiga","PAGE_DESCRIPTION":"あなたの全てのプロジェクトのリストです。順序の入れ替えや新規作成ができます。","MY_PROJECTS":"マイ プロジェクト"},"ATTACHMENT":{"SECTION_NAME":"添付ファイル","TITLE":"{{ fileName }} が {{ date }} にアップロードされました","LIST_VIEW_MODE":"ライブビューモード","GALLERY_VIEW_MODE":"ギャラリービューモード","DESCRIPTION":"要約を入力","DEPRECATED":"(非推奨)","DEPRECATED_FILE":"推奨されませんか?","ADD":"新しい添付ファイルを追加する。 {{maxFileSizeMsg}}","DROP":"添付ファイルをここにドロップ!","SHOW_DEPRECATED":"+ 非推奨のアタッチメントを表示する","HIDE_DEPRECATED":"- 非推奨のアタッチメントを隠す","COUNT_DEPRECATED":"({{ counter }} deprecated)","MAX_UPLOAD_SIZE":"アップロード上限サイズは {{maxFileSize}} です","DATE":"YYYY年MM月DD日 hh時mm分","ERROR_UPLOAD_ATTACHMENT":"'{{fileName}}'のアップロードに失敗. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"添付ファイルの削除...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"添付ファイル '{{fileName}}'","ERROR_DELETE_ATTACHMENT":" 削除に失敗: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。"},"PAGINATION":{"PREVIOUS":"前へ","NEXT":"次へ"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"値を編集","TITLE_ACTION_DELETE_VALUE":"値を削除","TITLE_ACTION_DELETE_TAG":"タグを削除"},"HELP":"手助けが必要な場合はサポートページをチェックしてください。","PROJECT_DEFAULT_VALUES":{"TITLE":"初期値設定","SUBTITLE":"プルダウン項目の初期値を設定してください。"},"MEMBERSHIPS":{"TITLE":"メンバー管理","PAGE_TITLE":"メンバーシップ - {{projectName}}","ADD_BUTTON":"+ 新規メンバー","ADD_BUTTON_TITLE":"新規メンバーを追加","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"このプロジェクトは許可されている最大メンバー数({{members}}名)に達しました。上限を増やしたい場合は管理者にお問い合わせください。"},"PROJECT_EXPORT":{"TITLE":"エクスポート","SUBTITLE":"エクスポートの実行によりプロジェクトのバックアップを作成することができます。
    また、バックアップをベースとして新しいプロジェクトを作成することも可能です。","EXPORT_BUTTON":"エクスポート","EXPORT_BUTTON_TITLE":"プロジェクトをエクスポート","LOADING_TITLE":"ダンプファイルを生成中","DUMP_READY":"ダンプファイルの用意が出来ました!","LOADING_MESSAGE":"このページを閉じないでください。","ASYNC_MESSAGE":"準備が出来たらメールで通知します。","SYNC_MESSAGE":"ダウンロードが自動で開始されない場合はこちらをクリックしてください。","ERROR":"ウンパルンパたちはダンプファイルの生成に手こずっているようです。もう一度お試しください。","ERROR_BUSY":"すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。"},"MODULES":{"TITLE":"モジュール","EPICS":"エピック","EPICS_DESCRIPTION":"あなたのプロジェクトの最も戦略的な部分を視覚化し、管理する","BACKLOG":"バックログ","BACKLOG_DESCRIPTION":"ユーザーストーリーが適切にメンテナンスされるよう管理し、優先順位に基づく作業を行うためのビュー","NUMBER_SPRINTS":"予測されるスプリント数","NUMBER_SPRINTS_HELP":"0に設定した場合、無制限となります","NUMBER_US_POINTS":"予測されるストーリーポイントの合計","NUMBER_US_POINTS_HELP":"0に設定した場合、無制限となります","KANBAN":"かんばん","KANBAN_DESCRIPTION":"このかんばんを利用して、無駄のない方法でプロジェクトを整理しましょう。","ISSUES":"課題","ISSUES_DESCRIPTION":"プロジェクトのバグ追跡、質問、機能改善に関する議論などが行えるようになります。","WIKI":"Wiki","WIKI_DESCRIPTION":"他のメンバーと協力してコンテンツを編集することができます。
    プロジェクトの情報を文書化するのにぴったりです。","MEETUP":"会議","MEETUP_DESCRIPTION":"あなたが利用しているビデオ会議システムを選択してください。","SELECT_VIDEOCONFERENCE":"ビデオ会議システムを選択","SALT_CHAT_ROOM":"チャットルーム名に接頭辞を追加","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"カスタム","URL_CHAT_ROOM":"チャットルームのURL"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - プロジェクトプロフィール - {{projectName}}","PROJECT_DETAILS":"プロジェクト詳細","PROJECT_NAME":"プロジェクト名","TAGS":"タグ","DESCRIPTION":"説明","RECRUITING":"プロジェクトメンバーを探していますか?","RECRUITING_MESSAGE":"どんな人を探していますか?","RECRUITING_PLACEHOLDER":"探している人のプロフィールを記載してください","FEEDBACK":"Taigaユーザーからのフィードバックを受け取りますか?","PUBLIC_PROJECT":"パブリック プロジェクト","PRIVATE_PROJECT":"非公開プロジェクト","PRIVATE_OR_PUBLIC":"パブリックプロジェクトとプライベートプロジェクトの違いは何ですか?","DELETE":"このプロジェクトを削除","CHANGE_LOGO":"ロゴを変更","ACTION_USE_DEFAULT_LOGO":"デフォルトのイメージを使用する","MAX_PRIVATE_PROJECTS":"あなたの現在のプランで許可されている非公開プロジェクトの上限数に達しました。","MAX_PRIVATE_PROJECTS_MEMBERS":"非公開プロジェクトの最大メンバー数を超えました。","MAX_PUBLIC_PROJECTS":"あなたの現在のプランで許可されている公開プロジェクトの上限数に達しました。","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"プロジェクトオーナー","REQUEST_OWNERSHIP":"オーナー権限を要求","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"新しいプロジェクトオーナーになりますか?","REQUEST_OWNERSHIP_DESC":"現在のプロジェクトオーナー {{name}} に、このプロジェクトのオーナー権限をあなたに移すよう要求","REQUEST_OWNERSHIP_BUTTON":"リクエスト","REQUEST_OWNERSHIP_SUCCESS":"プロジェクトオーナーに通知します","CHANGE_OWNER":"オーナーを変更","CHANGE_OWNER_SUCCESS_TITLE":"あなたのリクエストが送信されました!","CHANGE_OWNER_SUCCESS_DESC":"プロジェクトのオーナー権限要求が承認または拒否されことをメールでお知らせします"},"REPORTS":{"TITLE":"レポート","SUBTITLE":"オリジナルのレポートを作成するためにプロジェクトのデータをCSVで出力することができます。","DESCRIPTION":"CSVのダウンロードボタンまたは生成されたURLへアクセスしてファイルを入手し、お好みのテキストエディタや表計算ソフトで開いてください。データの可視化や分析を簡単に行うことが可能です。","HELP":"このファイルをどうやって表計算ソフトで活用すればいいですか?","REGENERATE_TITLE":"URLが変更されます","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"エピックレポート","SECTION_TITLE_US":"ユーザーストーリーを出力する","SECTION_TITLE_TASK":"タスクを出力する","SECTION_TITLE_ISSUE":"課題を出力する","DOWNLOAD":"CSVのダウンロード","URL_FIELD_PLACEHOLDER":"CSV出力用のURLを作成してください","TITLE_REGENERATE_URL":"CSV出力用のURLを作成","ACTION_GENERATE_URL":"URL を生成","ACTION_REGENERATE":"再作成","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"削除する"},"CUSTOM_FIELDS":{"TITLE":"カスタムフィールド","SUBTITLE":"ユーザーストーリー、タスク、課題のためのカスタムフィールドを明記してください。","EPIC_DESCRIPTION":"エピックカスタムフィールド","EPIC_ADD":"複数のエピックにカスタムフィールドを追加","US_DESCRIPTION":"ユーザーストーリーのカスタムフィールド","US_ADD":"ユーザーストーリーにカスタムフィールドを追加","TASK_DESCRIPTION":"タスクカスタムフィールド","TASK_ADD":"タスクにカスタムフィールドを追加","ISSUE_DESCRIPTION":"課題のカスタムフィールド","ISSUE_ADD":"課題にカスタムフィールドを追加","FIELD_TYPE_TEXT":"テキスト","FIELD_TYPE_RICHTEXT":"リッチテキスト","FIELD_TYPE_MULTI":"マルチライン","FIELD_TYPE_DATE":"日時","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - プロジェクト値 - {{projectName}}","REPLACEMENT":"この値を持つすべてのアイテムはこちらに変更されます:","ERROR_DELETE_ALL":"すべての値を削除することはできません。"},"PROJECT_VALUES_POINTS":{"TITLE":"ポイント","SUBTITLE":"予測されるユーザーストーリーのポイントを定義することができます。","US_TITLE":"ユーザーストーリーのポイント","ACTION_ADD":"新規ポイントを追加"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"優先度","SUBTITLE":"課題の優先度を定義することができます。","ISSUE_TITLE":"課題の優先度","ACTION_ADD":"新しい優先度を追加"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"深刻度","SUBTITLE":"課題の深刻度を定義することができます。","ISSUE_TITLE":"課題の深刻度","ACTION_ADD":"新しい深刻度を追加"},"PROJECT_VALUES_STATUS":{"TITLE":"ステータス","SUBTITLE":"ユーザーストーリー、タスク、課題のステータスを定義することができます。","EPIC_TITLE":"エピックステータス","US_TITLE":"ユーザーストーリーステータス","TASK_TITLE":"タスクのステータス","ISSUE_TITLE":"課題のステータス"},"PROJECT_VALUES_TYPES":{"TITLE":"タイプ","SUBTITLE":"課題のタイプを定義することができます。","ISSUE_TITLE":"課題のタイプ","ACTION_ADD":"新しい {{objName}} を追加"},"PROJECT_VALUES_TAGS":{"TITLE":"タグ","SUBTITLE":"タグの色を編集","EMPTY":"タグは現在ありません。","EMPTY_SEARCH":"検索条件に当てはまるものはありませんでした。","ACTION_ADD":"タグを追加","NEW_TAG":"新規タグ","MIXING_HELP_TEXT":"マージしたいタグを選択","MIXING_MERGE":"タグを結合","SELECTED":"選択中"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"ステータスを追加","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"役割 - {{projectName}}","WARNING_NO_ROLE":"Be careful, no role in your project will be able to estimate the point value for user stories","HELP_ROLE_ENABLED":"この設定を有効にするとメンバーがこの役割に割り当てられた際にユーザーストーリーのポイントに反映されます。","DISABLE_COMPUTABLE_ALERT_TITLE":"本当に役割見積もりを無効にしてもよろしいですか?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} 名がこの役割を担当","TITLE_DELETE_ROLE":"役割を削除","REPLACEMENT_ROLE":"All the users with this role will be moved to","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"すべての値を削除することはできません","EXTERNAL_USER":"外部ユーザー","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"シークレットキー","PAYLOAD_URL":"Payload URL","VALID_IPS":"Valid origin IPs (separated by ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITHUB":{"SECTION_NAME":"Github","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"新規Webhookを追加","TYPE_NAME":"サービス名を入力","TYPE_PAYLOAD_URL":"サービスペイロードのURLを入力","TYPE_SERVICE_SECRET":"サービスのシークレットキーを入力","SAVE":"Webhookを保存","CANCEL":"Webhookをキャンセル","SHOW_HISTORY":"(履歴を表示)","TEST":"Webhookをテスト","EDIT":"Webhookを編集","DELETE":"Webhookを削除","REQUEST":"リクエスト","RESEND_REQUEST":"リクエストを再送","HEADERS":"ヘッダー","PAYLOAD":"Payload","RESPONSE":"レスポンス","DATE":"YYYY年MM月DD日 hh時mm分ss秒","ACTION_HIDE_HISTORY":"(履歴を非表示)","ACTION_HIDE_HISTORY_TITLE":"履歴を非表示","ACTION_SHOW_HISTORY":"(履歴を表示)","ACTION_SHOW_HISTORY_TITLE":"履歴を表示","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - カスタム属性 - {{projectName}}","ADD":"カスタムフィールドを追加","EDIT":"カスタムフィールドを編集","DELETE":"カスタムフィールドを削除","SAVE_TITLE":"カスタムフィールドを保存","CANCEL_TITLE":"作成するのをやめる","SET_FIELD_NAME":"カスタムフィールド名を設定","SET_FIELD_DESCRIPTION":"カスタムフィールドの説明を設定","FIELD_TYPE_DEFAULT":"-- 1つ選択 --","ACTION_UPDATE":"カスタムフィールドを更新","ACTION_CANCEL_EDITION":"編集をキャンセル"},"MEMBERSHIP":{"COLUMN_MEMBER":"メンバー","COLUMN_ADMIN":"管理","COLUMN_ROLE":"役割","COLUMN_STATUS":"ステータス","STATUS_ACTIVE":"有効","STATUS_PENDING":"保留","DELETE_MEMBER":"メンバーを削除","RESEND":"再送信","SUCCESS_SEND_INVITATION":"招待メールを '{{email}}' へもう一度送りました。","SUCCESS_DELETE":"{{message}} を削除しました","ERROR_DELETE":"{{message}} を削除できませんでした","DEFAULT_DELETE_MESSAGE":"{{email}} への招待メール"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"エピックステータスの初期値","LABEL_US_STATUS":"ユーザーストーリーステータスの初期値","LABEL_POINTS":"ポイントの初期値","LABEL_TASK_STATUS":"タスクステータスの初期値","LABEL_ISSUE_TYPE":"課題タイプの初期値","LABEL_ISSUE_STATUS":"課題ステータスの初期値","LABEL_PRIORITY":"優先度の初期値","LABEL_SEVERITY":"深刻度の初期値"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"新しいステータス名を記入","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"新しいエレメント名を記入"},"US_STATUS":{"ACTION_ADD_STATUS":"ステータスを追加","IS_ARCHIVED_COLUMN":"アーカイブ","IS_CLOSED_COLUMN":"終了","WIP_LIMIT_COLUMN":"WIP制限","PLACEHOLDER_WRITE_NAME":"新しいステータス名を記入"},"MENU":{"PROJECT":"プロジェクト","ATTRIBUTES":"属性","MEMBERS":"メンバー","PERMISSIONS":"権限","INTEGRATIONS":"インテグレーション"},"SUBMENU_PROJECT_VALUES":{"STATUS":"ステータス","POINTS":"ポイント","PRIORITIES":"優先度","SEVERITIES":"深刻度","TYPES":"タイプ","CUSTOM_FIELDS":"カスタムフィールド","TAGS":"タグ","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"役割","ACTION_NEW_ROLE":"+ 新規役割","TITLE_ACTION_NEW_ROLE":"新しい役割を追加"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"新しいプロジェクトオーナーとなりますか?","PRIVATE":"プライベート","ACCEPTED_PROJECT_OWNERNSHIP":"おめでとうございます! あなたが新しいプロジェクトオーナーです。","REJECTED_PROJECT_OWNERNSHIP":"承知致しました。現在のプロジェクトオーナーに連絡します","ACCEPT":"はい","REJECT":"却下","PROPOSE_OWNERSHIP":"プロジェクト {{project}} の現在のオーナー {{owner}} が、あなたに新しいプロジェクトオーナーになるよう要求しています。","ADD_COMMENT":"プロジェクトオーナーにコメントしますか?","UNLIMITED_PROJECTS":"無制限","OWNER_MESSAGE":{"PRIVATE":"あなたが持てる非公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。","PUBLIC":"あなたが持てる公開プロジェクトは最大{{maxProjects}}個までです。現在{{currentProjects}}個持っています。"},"CANT_BE_OWNED":"現在あなたはこのタイプのプロジェクトのオーナーにはなれません。このプロジェクトのオーナーになりたい場合は管理者に問い合わせてオーナー権限を変更してもらってください。"}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"プロフィールを編集","CLOSED_US":"完了したユーザーストーリー","PROJECTS":"プロジェクト","PROJECTS_EMPTY":"{{username}} はまだプロジェクトに参加していません","CONTACTS":"連絡先","CONTACTS_EMPTY":"{{username}} はまだ連絡先を持っていません","CURRENT_USER_CONTACTS_EMPTY":"あなたへのコンタクトはまだありません。","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Taigaで一緒に仕事をしたメンバーは自動的に連絡先へ追加されます","TABS":{"ACTIVITY_TAB":"タイムライン","ACTIVITY_TAB_TITLE":"このユーザのすべてのアクティビティーを表示する","PROJECTS_TAB":"プロジェクト","PROJECTS_TAB_TITLE":"ユーザーが参加しているプロジェクト","LIKES_TAB":"いいね","LIKES_TAB_TITLE":"このユーザーが「いいね」と評価したすべての内容を表示","VOTES_TAB":"投票","VOTES_TAB_TITLE":"このユーザーが「賛成」したすべての内容を表示","WATCHED_TAB":"フォロー","WATCHED_TAB_TITLE":"このユーザーが「フォロー」したすべての内容を表示","CONTACTS_TAB":"連絡先","CONTACTS_TAB_TITLE":"このユーザーが「コンタクト」したすべての内容を表示"}},"PROFILE_SIDEBAR":{"TITLE":"プロフィール","DESCRIPTION":"すべてのメンバーはあなたが完了させた作業、あなたが今取り組んでいる作業を確認することができます。自己紹介を追記してあなたについてもっと知ってもらいましょう!","ADD_INFO":"編集する"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"入力してください","FILTER_TYPE_ALL":"すべて","FILTER_TYPE_ALL_TITLE":"すべてを表示","FILTER_TYPE_PROJECTS":"プロジェクト","FILTER_TYPE_PROJECTS_TITLE":"プロジェクトのみ表示","FILTER_TYPE_EPICS":"エピック","FILTER_TYPE_EPICS_TITLE":"エピックのみ表示","FILTER_TYPE_USER_STORIES":"ストーリー","FILTER_TYPE_USER_STORIES_TITLE":"ユーザーストーリーを表示","FILTER_TYPE_TASKS":"タスク","FILTER_TYPE_TASKS_TITLE":"タスクのみ表示","FILTER_TYPE_ISSUES":"課題","FILTER_TYPE_ISSUES_TITLE":"課題のみ表示","EMPTY_TITLE":"表示するものがありません。"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"最も良く使うプロジェクトがトップになるように順序を入れ替えてみましょう。
    トップ10のプロジェクトが上のナビゲーションバーのプロジェクトリストに現れます。","PRIVATE":"プライベート プロジェクト","LOOKING_FOR_PEOPLE":"プロジェクトはメンバーを探しています","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# 人のファン}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# 人がフォロー中}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# 人のメンバー}}","BLOCKED_PROJECT":{"BLOCKED":"ブロックされたプロジェクト","THIS_PROJECT_IS_BLOCKED":"このプロジェクトは一時的にブロックされています。","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"プロジェクトのブロックを解除したい場合は管理者にお問い合わせください。"},"SECTION":{"SEARCH":"検索","TIMELINE":"タイムライン","EPICS":"エピック","BACKLOG":"バックログ","KANBAN":"かんばん","ISSUES":"課題","WIKI":"Wiki","TEAM":"チーム","MEETUP":"会議","ADMIN":"管理"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"プロジェクトを作成","MANAGE_PROJECTS":"プロジェクト管理","TITLE_CREATE_PROJECT":"プロジェクトを作成","HELP_TITLE":"Taiga サポートページ","HELP":"ヘルプ","HOMEPAGE":"ホームページ","FEEDBACK_TITLE":"フィードバックを送る","FEEDBACK":"フィードバック","NOTIFICATIONS_TITLE":"通知設定を編集","NOTIFICATIONS":"通知","VIEW_PROFILE_TITLE":"プロフィールを表示","VIEW_PROFILE":"プロフィールを表示","EDIT_PROFILE_TITLE":"プロフィールを編集","EDIT_PROFILE":"プロフィールを編集","CHANGE_PASSWORD_TITLE":"パスワード変更","CHANGE_PASSWORD":"パスワード変更","DASHBOARD_TITLE":"ダッシュボード","DISCOVER_TITLE":"トレンドプロジェクトを探す","DISCOVER":"探す"},"LIKE_BUTTON":{"LIKE":"いいね","LIKED":"いいね","UNLIKE":"「いいね」を取り消す","BUTTON_TITLE":"Like or unlike this project","COUNTER_TITLE":"{total, plural, one{one fan} other{# 人のファン}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"このプロジェクトをフォローして通知ポリシーを設定してください","WATCH":"フォロー","WATCHING":"フォロー中","COUNTER_TITLE":"{total, plural, one{one watcher} other{# 人がフォロー中}}","OPTIONS":{"NOTIFY_ALL":"すべての通知を受信する","NOTIFY_ALL_TITLE":"このプロジェクトのすべての通知を受信する","NOTIFY_INVOLVED":"関連するものだけ","NOTIFY_INVOLVED_TITLE":"あなたが携わっている時のみ通知を受信","UNWATCH":"フォローをやめる","UNWATCH_TITLE":"プロジェクトのフォローをやめる"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"プロジェクトチームに連絡","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"プロジェクトを作成","CHOOSE_TEMPLATE":"どちらのテンプレートがあなたのプロジェクトにより適していますか?","TEMPLATE_SCRUM":"スクラム","TEMPLATE_SCRUM_DESC":"短時間のサイクルでタスクの優先順位付けと解決を行います。","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"かんばん","TEMPLATE_KANBAN_DESC":"独立したタスクで一定のワークフローを維持します。","TEMPLATE_KANBAN_LONGDESC":"かんばん方法論はプロジェクト開発(あらゆる種類のプロジェクト)を工程ごとに区切るのに使われます。\nかんばんカードはインデックスカードやポストイットのようなもので、プロジェクト内の全ての達成する必要のあるタスク(またはユーザーストーリー)がそれぞれのカードに詳細に書かれています。かんばんボードでは各カードを一つの工程が完了するたびに次の工程に動かし、進捗管理をしていきます。","DUPLICATE":"プロジェクトを複製","DUPLICATE_DESC":"設定を維持したままプロジェクトを始めます。","IMPORT":"プロジェクトをインポート","IMPORT_DESC":"複数プラットフォームからのプロジェクトをTaigaにインポート","INVITE":"プロジェクトに招待","SOLO_PROJECT":"このプロジェクトで独りになります","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"バックエンド","MAX_PRIVATE_PROJECTS":"残念ながら許可されている非公開プロジェクトの上限数に達しました。\nもし現在の上限を増やしたい場合は管理者にお問い合わせください。","MAX_PUBLIC_PROJECTS":"残念ながら許可されている公開プロジェクトの上限数に達しました。\nもし現在の上限を増やしたい場合は管理者にお問い合わせください。","PUBLIC_PROJECT":"パブリック プロジェクト","PRIVATE_PROJECT":"プライベート プロジェクト"},"COMMON":{"DETAILS":"新規プロジェクト詳細","PROJECT_TITLE":"プロジェクト名","PROJECT_DESCRIPTION":"プロジェクト概要"},"DUPLICATE":{"TITLE":"プロジェクトを複製","DESCRIPTION":"設定を維持したままプロジェクトを始めます。","SELECT_PLACEHOLDER":"複製する既存プロジェクトを選択"},"IMPORT":{"TITLE":"プロジェクトをインポート","DESCRIPTION":"複数プラットフォームからのプロジェクトをTaigaにインポート","ASYNC_IN_PROGRESS_TITLE":"ウンパルンパたちがあなたのプロジェクトをインポートしています。","ASYNC_IN_PROGRESS_MESSAGE":"この処理には時間がかかります。
    準備が出来たらメールで通知します。","UPLOAD_IN_PROGRESS_MESSAGE":"{{totalSize}} 中 {{uploadedSize}} アップロード済み","ERROR":"ウンパルンパたちはダンプファイルのインポートに手こずっているようです。もう一度お試しください。","ERROR_TOO_MANY_REQUEST":"すみません、ウンパルンパたちはとても忙しいようです。しばらくしてからまたお試しください。","ERROR_MESSAGE":"ウンパルンパたちはダンプファイルのインポートに手こずっているようです。  \n{{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) はウンパルンパたちには重すぎます。({{maxFileSize}})より少ないもので試してください。","SYNC_SUCCESS":"プロジェクトのインポートに成功しました","IMPORT":"インポート","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"あるいは必要であれば、このユーザーがTaigaで使用しているメールアドレスを記入","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Taigaでこのユーザーが使用しているメールアドレスを記入","ACCEEDE":"Acceede","PROJECT_MEMBERS":"プロジェクトメンバー","PROCESS_DESCRIPTION":"{{platform}}のタスクを割り当てたいTaigaユーザーを教えてください。","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"ユーザーを選択","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"指定したユーザーがTaigaアカウントを持っていない場合、タスクを割り当てることはできません。","ASSIGN":"割当","PROJECT_SELECTOR":{"NO_RESULTS":"検索条件に当てはまるものはありませんでした。","ACTION_SEARCH":"検索","ACTION_BACK":"バックエンド"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"インポートしようとしているプロジェクトのメンバー数はあなたを含めて{{members}}名ですが、あなたの現在のプランでは非公開プロジェクト1つにつき最大{{max_memberships}}名までしか許可されていません。 上限を増やしたい場合は管理者にお問い合わせください。","PROJECT_MEMBERS_DESC_PUBLIC":"インポートしようとしているプロジェクトのメンバー数はあなたを含めて{{members}}名ですが、あなたの現在のプランでは公開プロジェクト1つにつき最大{{max_memberships}}名までしか許可されていません。 上限を増やしたい場合は管理者にお問い合わせください。","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"現在のプランではこれ以上の非公開プロジェクトは許可されていません。","DESC":"インポートしようとしているプロジェクトは非公開プロジェクトです。現在のプランではこれ以上の非公開プロジェクトは許可されていません。"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"現在のプランではこれ以上の公開プロジェクトは許可されていません。","DESC":"インポートしようとしているプロジェクトは公開プロジェクトです。現在のプランではこれ以上の公開プロジェクトは許可されていません。"},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"現在のプランでは非公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"現在のプランでは公開プロジェクトごとに最大{{max_memberships}}名のメンバーが許可されています。"},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"現在のプランではこれ以上の非公開プロジェクトの作成や、一つの非公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。","DESC":"インポートしようとしているのは非公開プロジェクトで{{members}}名のメンバーがいます。"},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"現在のプランではこれ以上の公開プロジェクトの作成や、一つの公開プロジェクトに{{max_memberships}}名を超えるメンバーを追加することはできません。","DESC":"インポートしようとしているのは公開プロジェクトで{{members}}名以上のメンバーがいます。"}},"IN_PROGRESS":{"TITLE":"プロジェクトをインポート中","DESCRIPTION":"このプロセスには時間がかかります。ウィンドウを開いたままにしていてください。"},"WARNING":{"TITLE":"いくつかのタスクは未割当になります","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"コンタクトを確認"},"TAIGA":{"SELECTOR":"Taigaプロジェクトをインポート"},"TRELLO":{"SELECTOR":"TrelloボードをTaigaにインポート","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"GitHubプロジェクト課題をインポート","CHOOSE_PROJECT":"インポートしたいプロジェクトを検索","NO_PROJECTS":"GitHubプロジェクトがないようです","HOW_DO_YOU_WANT_TO_IMPORT":"課題をどのようにTaigaにインポートしたいですか?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"課題として","ISSUES_PROJECT_DESCRIPTION":"課題をカンバンまたはスクラムモードで使うことはできません。新しいユーザーストーリーからカンバンまたはスクラムを有効にすることができます。"},"ASANA":{"SELECTOR":"Asanaプロジェクトをインポートし管理方法を選択","CHOOSE_PROJECT":"インポートしたいプロジェクトを選択","NO_PROJECTS":"Asanaにプロジェクトがないようです","KANBAN_PROJECT":"かんばん","SCRUM_PROJECT":"スクラム","CREATE_AS_SCRUM_DESCRIPTION":"あなたのプロジェクトのタスクとサブタスクはTaigaユーザーストーリーとタスクとして作成されます。","CREATE_AS_KANBAN_DESCRIPTION":"あなたのプロジェクトのタスクとサブタスクはTaigaユーザーストーリーとタスクとして作成されます。"},"JIRA":{"SELECTOR":"Jiraプロジェクトをインポートし管理方法を選択","HOW_TO_CONFIGURE":"(設定ヘルプ)","CHOOSE_PROJECT":"インポートしたいプロジェクトまたはボードを選択","NO_PROJECTS":"Jiraにプロジェクトやボードがないようです","URL":"Jira URL","KANBAN_PROJECT":"かんばん","SCRUM_PROJECT":"スクラム","ISSUES_PROJECT":"課題","CREATE_AS_SCRUM_DESCRIPTION":"あなたのプロジェクトの課題とサブ課題はTaigaユーザーストーリーとタスクとして作成されます。","CREATE_AS_KANBAN_DESCRIPTION":"あなたのプロジェクトの課題とサブ課題はTaigaユーザーストーリーとタスクとして作成されます。","CREATE_AS_ISSUES_DESCRIPTION":"Jiraプロジェクトからのサブ課題をどうしますか? (Taigaはサブ課題というものを許可しません)","CREATE_NEW_ISSUES":"サブ課題を新しいTaiga課題に変換する","NOT_CREATE_NEW_ISSUES":"サブ課題をインポートしないでください"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"本当にあなたのTaigaアカウントを削除してもよろしいですか?","CANCEL":"設定に戻る","ACCEPT":"アカウントを削除する","BLOCK_PROJECT":"あなたが所有しているプロジェクトは、あなたのアカウント削除後にブロックされることを覚えておいてください。あなたのアカウントが削除されてプロジェクトがブロックされる前にプロジェクトのオーナー権限を他のメンバーに譲渡してください。"},"DELETE_PROJECT":{"TITLE":"プロジェクトを削除","QUESTION":"本当にこのプロジェクトを削除していいですか?","SUBTITLE":"プロジェクトのすべてのデータ (ユーザーストーリー、タスク、課題、スプリント、Wikiページ) が失われます! :-(","CONFIRM":"はい、問題ありません"},"ASSIGNED_TO":{"SELECT":"割り当てる","SEARCH":"ユーザーを検索"},"ADD_MEMBER":{"TITLE":"新しいメンバー","PLACEHOLDER":"ユーザーをフィルターまたは招待メールを書く","ADD_EMAIL":"メールを追加","REMOVE":"削除","INVITE":"招待","CHOOSE_ROLE":"役割の選択","PLACEHOLDER_INVITATION_TEXT":"(任意) 招待する際のメッセージを追加できます。新メンバーに素敵な言葉を贈りましょう ;-)","HELP_TEXT":"ユーザーが既にTaigaに登録されている場合、自動的に追加されます。そうでない場合は招待状が送信されます。"},"FEEDBACK":{"TITLE":"我々に教えてください...","COMMENT":"...バグ、提案、何かクールなことやTaigaを利用していて発生した悪夢など(英語で記載してください)","ACTION_SEND":"フィードバックを送る"},"SEARCH":{"TITLE":"検索","PLACEHOLDER_SEARCH":"何をお探しですか?"},"ADD_EDIT_SPRINT":{"TITLE":"新しいスプリント","PLACEHOLDER_SPRINT_NAME":"スプリント名","PLACEHOLDER_SPRINT_START":"見積もり開始","PLACEHOLDER_SPRINT_END":"見積もり終了","ACTION_DELETE_SPRINT":"このスプリントを削除しますか?","TITLE_ACTION_DELETE_SPRINT":"スプリントを削除","LAST_SPRINT_NAME":"最後のスプリントは {{lastSprint}}でした ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"変更をまだ保存していません。\n本当にフォームを閉じてもよろしいですか?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"課題を追加","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"締切日を削除","SUBTITLE":"本当にこの終了日を削除してもよろしいですか?"},"DELETE_SPRINT":{"TITLE":"スプリントを削除"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(任意) 招待する際のメッセージを追加できます。新メンバーに素敵な言葉を贈りましょう ;-)","PLACEHOLDER_TYPE_EMAIL":"メールアドレスを入力","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"このプロジェクトで許可されている最大メンバー数{{maxMembers}}名に達しようとしています。上限を増やしたい場合は管理者にお問い合わせください。","LIMIT_USERS_WARNING_MESSAGE":"このプロジェクトで許可されている最大メンバー数{{maxMembers}}名に達しようとしています。"},"LEAVE_PROJECT_WARNING":{"TITLE":"オーナーが不在となるため、プロジェクトを離脱することができません。","CURRENT_USER_OWNER":{"DESC":"現在、あなたはこのプロジェクトのオーナーです。プロジェクトを離脱する前にオーナー権限を他の誰かに譲渡してください。","BUTTON":"プロジェクトのオーナーを変更"},"OTHER_USER_OWNER":{"DESC":"現在のプロジェクトのオーナーになっているメンバーを削除することはできません。まず新しいプロジェクトオーナーを割り当ててください。","BUTTON":"プロジェクトオーナーの変更をリクエスト"}},"CHANGE_OWNER":{"TITLE":"誰を新しいプロジェクトオーナーにしたいですか?","ADD_COMMENT":"コメントを追加","BUTTON":"新しいプロジェクトオーナーとなるようこのメンバーに要求"},"CONTACT_PROJECT":{"TITLE":"メールを送る","WARNING":"プロジェクト管理者がメールを受信します","PLACEHOLDER":"メッセージを書いてください","SEND":"送信"},"SET_DUE_DATE":{"TITLE":"締切日を設定","PLACEHOLDER_DUE_DATE":"日付を選択","REASON_FOR_DUE_DATE":"締切日の設定理由","PLACEHOLDER_REASON_FOR_DUE_DATE":"なぜこのユーザーストーリーに締切日が必要なのでしょうか?","SUGGESTIONS":{"IN_ONE_WEEK":"1週間以内","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"1ヶ月以内","IN_THREE_MONTHS":"3ヶ月以内"},"TITLE_ACTION_DELETE_DUE_DATE":"締切日を削除"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"締切日を削除","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"プロジェクトとは?","CHOOSE_PROJECT_FROM":"プロジェクトとは?","SUBJECT":"題名","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"検索条件に当てはまるものはありませんでした。"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - エピック {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"ステータス: {{epicStatus }}. 説明: {{epicDescription}}","SECTION_NAME":"エピック","ERROR_UNLINK_RELATED_USERSTORY":"リンクの削除に失敗: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"関連付ける","NEW_USERSTORY":"新しいユーザーストーリー","EXISTING_USERSTORY":"既存のユーザーストーリー","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"題名","SUBJECT_BULK_MODE":"題名 (一括登録)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"このプロジェクトにはユーザーストーリーがまだありません。別のプロジェクトを選択してください。","NO_USERSTORIES_FOUND":"検索条件に当てはまるものはありませんでした。","FILTER_USERSTORIES":"ユーザーストーリーをフィルター","LIGHTBOX_TITLE_BLOKING_EPIC":"ブロックしているエピック","ACTION_DELETE":"エピックの削除"},"US":{"PAGE_TITLE":"{{userStorySubject}} - ユーザーストーリー {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"ステータス: {{userStoryStatus }}. 進捗 {{userStoryProgressPercentage}}% ({{userStoryTotalTasks}}中{{userStoryClosedTasks}}タスク完了). ポイント: {{userStoryPoints}}. 説明: {{userStoryDescription}}","SECTION_NAME":"ユーザーストーリー","LINK_TASKBOARD":"タスクボード","TITLE_LINK_TASKBOARD":"タスクボードに移動","TOTAL_POINTS":"合計ポイント","ADD":"+ 新規ユーザーストーリーを追加する","ADD_BULK":"新規ユーザーストーリーを一括で追加する","PROMOTED":"このユーザーストーリーはこちらの課題から発展:","TITLE_LINK_GO_TO_ISSUE":"課題へ移動","TITLE_DELETE_ACTION":"ユーザーストーリーを削除","LIGHTBOX_TITLE_BLOKING_US":"Blocking us","NOT_ESTIMATED":"見積もりが行われていません","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Taiga Tribeでギグとして発行","PUBLISH_INFO":"詳細表示","PUBLISH_TITLE":"Taiga Tribeへの発行に関する情報","PUBLISHED_AS_GIG":"Taiga Tribeでギグとして発行されたストーリー","EDIT_LINK":"リンクを編集","CLOSE":"閉じる","SYNCHRONIZE_LINK":"Taiga Tribeと同期","PUBLISH_MORE_INFO_TITLE":"このタスクに誰か必要ですか?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"{{user}}によってコメントは削除されました。","COMMENTS_COUNT":"{{comments}}コメント","OLDER_FIRST":"古い順","RECENT_FIRST":"新しい順","COMMENT":"コメント","EDITED_COMMENT":"編集済み:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"新しいコメントをここに入力","SHOW_DELETED":"削除済コメントを表示","HIDE_DELETED":"削除済コメントを隠す","DELETE":"コメントを削除","RESTORE":"コメントを復元","HISTORY":{"TITLE":"アクティビティ"}},"ACTIVITY":{"TITLE":"アクティビティ","ACTIVITIES_COUNT":"{{activities}} アクティビティー","TAGS_ADDED":"追加したタグ:","TAGS_REMOVED":"削除したタグ:","US_POINTS":"{{role}} ポイント","NEW_ATTACHMENT":"新しい添付ファイル:","DELETED_ATTACHMENT":"削除された添付ファイル:","UPDATED_ATTACHMENT":"更新された添付ファイル ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"カスタム属性を作成しました","UPDATED_CUSTOM_ATTRIBUTE":"カスタム属性を更新しました","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"チームからの要求","CLIENT_REQUIREMENT":"お客様からの要求","BLOCKED":"ブロック中","VALUES":{"NOT_SET":"not set","UNASSIGNED":"未割当"},"FIELDS":{"SUBJECT":"題名","DESCRIPTION":"説明","PRIORITY":"優先度","SEVERITY":"深刻度","STATUS":"ステータス","TYPE":"タイプ","ASSIGNED_TO":"割当","ASSIGNED_USERS":"割当ユーザー","DUE_DATE":"締切日","MILESTONE":"スプリント","COLOR":"色"}},"BACKLOG":{"PAGE_TITLE":"バックログ - {{projectName}}","PAGE_DESCRIPTION":"バックログパネルです。次のプロジェクトのユーザーストーリーとスプリントが記録されています:{{projectName}}: {{projectDescription}}","SECTION_NAME":"バックログ","CUSTOMIZE_GRAPH":"バックロググラフのカスタマイズ","CUSTOMIZE_GRAPH_TEXT":"プロジェクトの進化に役立つ素敵なグラフを表示するには、ポイントとスプリントを設定する必要があります。","CUSTOMIZE_GRAPH_ADMIN":"管理","CUSTOMIZE_GRAPH_TITLE":"管理ユーザーでポイントとスプリントを設定してください。","MOVE_US_TO_CURRENT_SPRINT":"現在のスプリントに移動","MOVE_US_TO_LATEST_SPRINT":"最新のスプリントに移動","EMPTY":"バックログが空です!","CREATE_NEW_US":"新規US作成","CREATE_NEW_US_EMPTY_HELP":"新しくユーザーストーリーを作成してください。","EXCESS_OF_POINTS":"ポイント超過","PENDING_POINTS":"保留ポイント","CLOSED_POINTS":"完了","COMPACT_SPRINT":"Compact Sprint","GO_TO_TASKBOARD":"タスクボード {{::name}} へ移動","EDIT_SPRINT":"スプリントを編集","TOTAL_POINTS":"合計","STATUS_NAME":"ステータス名","SORTABLE_FILTER_ERROR":"You can't drop on backlog when filters are open","DOOMLINE":"Project Scope [Doomline]","CHART":{"XAXIS_LABEL":"スプリント","YAXIS_LABEL":"ポイント","OPTIMAL":"Optimal pending points for sprint \"{{sprintName}}\" should be {{value}}","REAL":"スプリント \"{{sprintName}}\" の実際の保留ポイントは {{value}} です","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"タグ表示を固定","SHOW":"タグを表示","HIDE":"タグを非表示"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"バックログを表示","NEW_SPRINT":"あなたの作業速度をもとにした次のスプリントのユーザーストーリー候補。新しくスプリントを作成するにはクリックしてください。","CURRENT_SPRINT":"あなたの作業速度をもとにしたスプリント向けのユーザーストーリー候補。現在のスプリントに追加するにはクリックしてください。"},"TABLE":{"COLUMN_US":"User Stories","TITLE_COLUMN_POINTS":"役割ごとにビューを選択"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"合計
    ポイント","COMPLETED_POINTS":"完了済み
    ポイント","OPEN_TASKS":"オープン
    タスク","CLOSED_TASKS":"完了済み
    タスク","IOCAINE_DOSES":"iocaine
    doses","SHOW_STATISTICS_TITLE":"統計を表示","TOGGLE_BAKLOG_GRAPH":"バーンダウングラフ 表示/非表示","POINTS_PER_ROLE":"役割ごとのポイント"},"SUMMARY":{"PROJECT_POINTS":"プロジェクト
    ポイント","DEFINED_POINTS":"定義された
    ポイント","CLOSED_POINTS":"closed
    points","POINTS_PER_SPRINT":"ポイント /
    スプリント"},"FILTERS":{"TOGGLE":"フィルター表示を固定","HIDE":"フィルターを非表示","SHOW":"フィルターを表示"},"SPRINTS":{"TITLE":"スプリント","DATE":"YYYY年MM月DD日","LINK_TASKBOARD":"スプリントタスクボード","TITLE_LINK_TASKBOARD":"タスクボード{{name}}へ移動","EMPTY":"まだスプリントはありません","WARNING_EMPTY_SPRINT_ANONYMOUS":"このスプリントにはユーザーストーリーがありません","WARNING_EMPTY_SPRINT":"新しいスプリントを始めるために、バックログからストーリーをここにドロップしてください。","TITLE_ACTION_NEW_SPRINT":"新しいスプリントを追加","TEXT_ACTION_NEW_SPRINT":"新しくスプリントをプロジェクトに作成してください。","ACTION_SHOW_CLOSED_SPRINTS":"終了したスプリントを表示","ACTION_HIDE_CLOSED_SPRINTS":"終了したスプリントを非表示"}},"ERROR":{"TEXT1":"何かよくないことが発生したようですがウンパルンパたちは問題なく作業しています。","NOT_FOUND":"見つかりません","NOT_FOUND_TEXT":"Error 404. 参照しようとしているページはすでに存在しません。TAIGAホームページに戻って探してみてください。","PERMISSION_DENIED":"権限がありません","PERMISSION_DENIED_TEXT":"このページへのアクセスが許可されていません。","VERSION_ERROR":"以前、Taigaの中の誰かが変更をしたためウンパルンパたちはあなたの変更を適用できません。リロードをしてもう一度適用してみてください。(現在の変更は失われます)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - スプリントタスクボード - {{projectName}}","PAGE_DESCRIPTION":"スプリント {{sprintName}} ({{startDate}}から{{endDate}}まで) / {{projectName}}。{{completedPercentage}}% ({{totalPoints}}中{{completedPoints}}ポイント) 完了。{{totalTasks}}タスク中{{openTasks}}タスクが未完了。","SECTION_NAME":"タスクボード","TITLE_ACTION_ADD":"新規タスクを追加","TITLE_ACTION_ADD_BULK":"新規タスクを一括で追加する","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"タスクの割当","PLACEHOLDER_CARD_TITLE":"This could be a task","PLACEHOLDER_CARD_TEXT":"ストーリーを分割しタスクとして別管理","TABLE":{"COLUMN":"ユーザーストーリー","TITLE_ACTION_FOLD":"列をたたむ","TITLE_ACTION_UNFOLD":"列をひろげる","TITLE_ACTION_FOLD_ROW":"行をたたむ","TITLE_ACTION_UNFOLD_ROW":"行をひろげる","FIELD_POINTS":"ポイント","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"日","YAXIS_LABEL":"ポイント","OPTIMAL":"Optimal pending points for day {{formattedDate}} should be {{roundedValue}}","REAL":"{{formattedDate}} の実際の保留ポイントは {{roundedValue}} です","DATE":"YYYY年MM月DD日"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - タスク {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"ステータス: {{taskStatus }}. 説明: {{taskDescription}}","SECTION_NAME":"タスク","LINK_TASKBOARD":"タスクボード","TITLE_LINK_TASKBOARD":"タスクボードに移動","PLACEHOLDER_SUBJECT":"新しいタスク名を入力","TITLE_SELECT_STATUS":"ステータス名","OWNER_US":"このタスクはこちらに属しています。","TITLE_LINK_GO_OWNER":"ユーザーストーリーに移動","TITLE_DELETE_ACTION":"タスクを削除","LIGHTBOX_TITLE_BLOKING_TASK":"ブロックしているタスク","FIELDS":{"IS_IOCAINE":"Is iocaine"},"TITLE_ACTION_IOCAINE":"Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!"},"NOTIFICATION":{"OK":"すべてOKです","WARNING":"おっと、何か問題があったようです","WARNING_TEXT":"あなたの変更がセーブされなかったことにウンパルンパたちは悲しんでいます!","SAVED":"ウンパルンパたちがすべての変更を保存しました。","CLOSE":"通知を閉じる","MAIL":"メールでの通知","DESKTOP":"ブラウザアラートを使ったデスクトップ通知","ASK_DELETE":"本当に削除してもよろしいですか?"},"CANCEL_ACCOUNT":{"TITLE":"アカウントを解約する","SUBTITLE":"Taigaを脱会されてしまうのは残念です。楽しくご利用頂いていたことを祈ります。:)","PLACEHOLDER_INPUT_TOKEN":"アカウントトークンをキャンセル","ACTION_LEAVING":"はい、離脱します!","SUCCESS":"ウンパルンパたちがあなたのアカウントを削除しました。"},"CHANGE_EMAIL_FORM":{"TITLE":"メール変更","SUBTITLE":"あとはクリックだけであなたのメールアドレスが更新されます!","PLACEHOLDER_INPUT_TOKEN":"メールトークンを変更","ACTION_CHANGE_EMAIL":"メール変更","SUCCESS":"ウンパルンパたちがあなたのメールアドレスを更新しました"},"ISSUES":{"PAGE_TITLE":"課題 - {{projectName}}","PAGE_DESCRIPTION":"課題一覧パネル {{projectName}}: {{projectDescription}}","SECTION_NAME":"課題","ACTION_NEW_ISSUE":"+ 新規課題","ACTION_PROMOTE_TO_US":"ユーザーストーリーに変更する","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"この課題はこちらのユーザーストーリーへ発展:","EXTERNAL_REFERENCE":"課題の作成元: ","GO_TO_EXTERNAL_REFERENCE":"originへ移動","ACTION_DELETE":"課題を削除","LIGHTBOX_TITLE_BLOKING_ISSUE":"ブロックしている課題","LINK_TASKBOARD":"タスクボード","TITLE_LINK_TASKBOARD":"タスクボードに移動","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"優先度","SEVERITY":"深刻度","TYPE":"タイプ"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"この課題を新しいユーザーストーリーに変更","MESSAGE":"この課題から新しいユーザーストーリーを作成しますか?"},"TABLE":{"COLUMNS":{"TYPE":"タイプ","SEVERITY":"深刻度","PRIORITY":"優先度","SUBJECT":"題名","VOTES":"投票","STATUS":"ステータス","MODIFIED":"変更済み","ASSIGNED_TO":"割当"},"TITLE_ACTION_CHANGE_STATUS":"ステータスを変更","TITLE_ACTION_ASSIGNED_TO":"割当","BLOCKED":"ブロック中","EMPTY":{"TITLE":"レポートが必要な課題はありません :-)","SUBTITLE":"課題は見つかりましたか?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - 課題 {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"ステータス: {{issueStatus }}. タイプ: {{issueType}}, 優先度: {{issuePriority}}. 深刻度: {{issueSeverity}}. 説明: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"かんばん - {{projectName}}","PAGE_DESCRIPTION":"かんばんパネルです。次のプロジェクトのユーザーストーリーが記載されています:{{projectName}}: {{projectDescription}}","SECTION_NAME":"かんばん","TITLE_ACTION_FOLD":"列をたたむ","TITLE_ACTION_UNFOLD":"列をひろげる","TITLE_ACTION_ADD_US":"新規ユーザーストーリーを追加","TITLE_ACTION_ADD_BULK":"新規ユーザーストーリーを一括追加","ACTION_SHOW_ARCHIVED":"アーカイブ済を表示","ACTION_HIDE_ARCHIVED":"アーカイブ済を隠す","HIDDEN_USER_STORIES":"このステータスのユーザーストーリーはデフォルトで非表示となります","PLACEHOLDER_CARD_TITLE":"あなたのユーザーストーリーです","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"検索 - {{projectName}}","PAGE_DESCRIPTION":"ユーザーストーリー、課題、タスク、Wikiページ、その他何でもこのプロジェクト内を検索: {{projectName}}: {{projectDescription}}","FILTER_EPICS":"エピック","FILTER_USER_STORIES":"User Stories","FILTER_ISSUES":"課題","FILTER_TASKS":"タスク","FILTER_WIKI":"Wikiページ","PLACEHOLDER_SEARCH":"検索...","TITLE_ACTION_SEARCH":"検索","EMPTY_TITLE":"It looks like nothing was found with your search criteria.","EMPTY_DESCRIPTION":"Maybe try one of the tabs above or search again"},"TEAM":{"PAGE_TITLE":"チーム - {{projectName}}","PAGE_DESCRIPTION":"The team panel to show all the members of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"チーム","PLACEHOLDER_INPUT_SEARCH":"フルネームで検索する","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"完了した課題","COLUMN_IOCAINE":"Iocaine Drinker","EXPLANATION_COLUMN_IOCAINE":"Iocaine doses ingested","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki ページを編集しました","COLUMN_BUG_HUNTER":"バグハンター","EXPLANATION_COLUMN_BUG_HUNTER":"報告されている課題","COLUMN_NIGHT_SHIFT":"ナイトシフト","EXPLANATION_COLUMN_NIGHT_SHIFT":"完了タスク","COLUMN_TOTAL_POWER":"Total Power","EXPLANATION_COLUMN_TOTAL_POWER":"合計ポイント","SECTION_TITLE_TEAM":"チーム >","SECTION_FILTER_ALL":"すべて","CONFIRM_LEAVE_PROJECT":"本当にこのプロジェクトから脱退していいですか?","ACTION_LEAVE_PROJECT":"このプロジェクトから離脱する"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[最大サイズ: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"ユーザー設定","USER_PROFILE":"ユーザープロフィール","CHANGE_PASSWORD":"パスワード変更","EMAIL_NOTIFICATIONS":"メール通知","DESKTOP_NOTIFICATIONS":"デスクトップ通知","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"メール通知","COLUMN_PROJECT":"プロジェクト","COLUMN_RECEIVE_ALL":"すべて受信","COLUMN_ONLY_INVOLVED":"関連するものだけ","COLUMN_NO_NOTIFICATIONS":"通知なし","OPTION_ALL":"すべて","OPTION_INVOLVED":"Involved","OPTION_NONE":"なし"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"プロジェクト","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"プロジェクト"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"デフォルトのイメージを使用する","ACTION_DELETE_ACCOUNT":"Taigaアカウントを削除","ACTION_DOWNLOAD_PROFILE":"Taigaプロフィールをダウンロード","CHANGE_EMAIL_SUCCESS":"メールボックスを確認してください!
    新しいメールアドレスを設定するための手順を送信しました。","CHANGE_PHOTO":"写真を変更","FIELD":{"USERNAME":"ユーザー名","EMAIL":"メール","FULL_NAME":"フルネーム","PLACEHOLDER_FULL_NAME":"フルネームを入力 (例. Íñigo Montoya)","BIO":"自己紹介(最大で全角105文字まで)","PLACEHOLDER_BIO":"あなたについて教えてください","LANGUAGE":"言語","LANGUAGE_DEFAULT":"-- デフォルトの言語を使用 --","THEME":"テーマ","THEME_DEFAULT":"-- デフォルトのテーマを使用 --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"{{lastModifiedDate}} に最後に編集がありました。(合計 {{totalEditions}} 件) 内容: {{ wikiPageContent }}","DATETIME":"YYYY年MM月DD日 HH時mm分","REMOVE":"このWikiページを削除","DELETE_LIGHTBOX_TITLE":"Wikiページを削除","DELETE_LINK_TITLE":"Wikiリンクを削除","NAVIGATION":{"HOME":"メインページ","SECTION_NAME":"ブックマーク","ACTION_ADD_LINK":"ブックマークを追加する","ALL_PAGES":"全Wikiページ"},"SUMMARY":{"TIMES_EDITED":"編集
    回数","LAST_EDIT":"最終
    編集","LAST_MODIFICATION":"最後の変更"},"SECTION_PAGES_LIST":"全ページ","PAGES_LIST_COLUMNS":{"TITLE":"タイトル","EDITIONS":"Editions","CREATED":"作成","MODIFIED":"変更済み","CREATOR":"作者","LAST_MODIFIER":"最後の変更者"}},"HINTS":{"SECTION_NAME":"ヒント","LINK":"利用方法を知りたい場合はサポートページを訪れてください","LINK_TITLE":"サポートページへ行く","HINT1_TITLE":"プロジェクトのインポートやエクスポートができるのをご存知でしたか?","HINT1_TEXT":"ひとつのTaigaアカウントの全てのデータを抽出し、別のアカウントへ移すことができます。","HINT2_TITLE":"カスタムフィールドが作れるのはご存知ですか?","HINT2_TEXT":"Teams can now create custom fields as a flexible means to enter specific data useful for their particular workflow.","HINT3_TITLE":"あなたに最も関連性のあるプロジェクトを見つけやすくするために順序を入れ替えてみましょう。","HINT3_TEXT":"最上部にあるダイレクトアクセスバーに10プロジェクトまで表示されます。","HINT4_TITLE":"何をしているのか忘れましたか?","HINT4_TEXT":"ご心配なさらないでください。ダッシュボードではあなたが取り組んだ順番にオープンなタスク、課題、ユーザーストーリーが表示されます。"},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} さんが新しい添付ファイル {{obj_name}} をアップロードしました","US_CREATED":"{{username}} さんが新しいユーザーストーリー {{obj_name}} を作成しました( {{project_name}} )","ISSUE_CREATED":"{{username}} さんが新しい課題 {{obj_name}} を作成しました( {{project_name}} )","TASK_CREATED":"{{username}} さんが新しいタスク {{obj_name}} を作成しました( {{project_name}} )","TASK_CREATED_WITH_US":"{{username}} さんが新しいタスク {{obj_name}} をユーザーストーリー {{us_name}} に作成しました( {{project_name}} )","WIKI_CREATED":"{{username}} さんが新しいwikiページ {{obj_name}} を作成しました( {{project_name}} )","MILESTONE_CREATED":"{{username}} さんがスプリント {{obj_name}} を作成しました( {{project_name}} )","EPIC_CREATED":"{{username}} さんが {{project_name}} で新しいエピック {{obj_name}} を作成しました","EPIC_RELATED_USERSTORY_CREATED":"{{username}} さんが {{project_name}} でユーザーストーリー {{related_us_name}} をエピック {{epic_name}} に関連付けました","NEW_PROJECT":"{{username}} がプロジェクト {{project_name}} を作成しました","MILESTONE_UPDATED":"{{username}} がスプリント {{obj_name}} を更新しました","US_UPDATED":"{{username}} さんがユーザーストーリー {{obj_name}} の属性 \"{{field_name}}\" を更新しました ","US_UPDATED_WITH_NEW_VALUE":"{{username}} さんがユーザーストーリー {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました","US_UPDATED_POINTS":"{{username}} さんがユーザーストーリー {{obj_name}} における役割 '{{role_name}}' のポイントを {{new_value}} に更新しました","ISSUE_UPDATED":"{{username}} さんが課題 {{obj_name}} の属性 \"{{field_name}}\" を更新しました","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} さんが課題 {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました","TASK_UPDATED":"{{username}} が {{obj_name}} の {{field_name}} を {{new_value}} に更新しました","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} が {{obj_name}} の {{field_name}} を {{new_value}} に更新しました","TASK_UPDATED_WITH_US":"{{username}} さんがユーザーストーリー {{us_name}} のタスク {{obj_name}} の属性 \"{{field_name}}\" を更新しました","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} さんがユーザーストーリー {{us_name}} のタスク {{obj_name}} における属性 \"{{field_name}}\" を {{new_value}} に更新しました","WIKI_UPDATED":"{{username}} さんがWikiページ {{obj_name}} を更新しました","EPIC_UPDATED":"{{username}} さんがエピック {{obj_name}} の属性 \"{{field_name}}\" を更新しました","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} さんがエピック {{obj_name}} の属性 \"{{field_name}}\" を {{new_value}} に更新しました","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} さんが エピック {{obj_name}} の \"{{field_name}}\" を に更新しました","NEW_COMMENT_US":"{{username}} さんがユーザーストーリー {{obj_name}} にコメントしました","NEW_COMMENT_ISSUE":"{{username}} さんが課題 {{obj_name}} にコメントしました","NEW_COMMENT_TASK":"{{username}} さんがタスク {{obj_name}} にコメントしました","NEW_COMMENT_EPIC":"{{username}} さんがエピック {{obj_name}} にコメントしました","NEW_MEMBER":"{{project_name}} に新規メンバーが追加されました","US_ADDED_MILESTONE":"{{username}} さんがユーザーストーリー {{obj_name}} に {{sprint_name}} を追加しました","US_MOVED":"{{username}} さんがユーザーストーリー {{obj_name}} を移動しました","US_REMOVED_FROM_MILESTONE":"{{username}} さんがユーザーストーリー {{obj_name}} をバックログに追加しました","BLOCKED":"{{username}} さんが {{obj_name}} をブロックしました","UNBLOCKED":"{{username}} さんが {{obj_name}} のブロックを解除しました","NEW_USER":"{{username}} さんが Taiga に参加しました","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"課題","TASK":"タスク"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"外部アプリでは認証が必要です","PAGE_DESCRIPTION":"外部アプリでは認証が必要です","AUTHORIZATION_REQUEST":"{{application}} にあなたのTaigaアカウントを使用することを許可しますか?","LOGIN_WITH_ANOTHER_USER":"別のユーザーでログイン","AUTHORIZE_APP":"アプリを許可","CANCEL":"キャンセル"},"JOYRIDE":{"NAV":{"NEXT":"次へ","BACK":"戻る","SKIP":"スキップ","DONE":"完了"},"DASHBOARD":{"STEP1":{"TITLE":"あなたのプロジェクト","TEXT":"ようこそ!ここであなたが関わっているプロジェクトが見つかります。"},"STEP2":{"TITLE":"取り組んでいる作業","TEXT":"あなたが取り組んでいるユーザーストーリー、タスク、課題です。"},"STEP3":{"TITLE":"フォロー中","TEXT1":"そして、ここでは、あなたが知りたいプロジェクトの内容が見みつかるでしょう。","TEXT2":"あなたはもうTaigaで作業しています ;)"},"STEP4":{"TITLE":"さあ始めましょう","TEXT1":"最初のTaigaプロジェクトを作成して始めてみましょう。","TEXT2":"グッドラック!"}},"BACKLOG":{"STEP1":{"TITLE":"プロジェクト概要","TEXT1":"ここではあなたのプロジェクトの進捗を見ることができます。","TEXT2":"管理でプロジェクトの全ての設定を変更できます。"},"STEP2":{"TITLE":"プロダクト バックログ","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"スプリント","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"User Stories","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"ワークフローのカスタマイズ","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"ユーザーストーリー&タスク","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"ユーザーストーリーを追加中","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"グッドラック!"}}},"DISCOVER":{"PAGE_TITLE":"プロジェクトを探す - Taiga","PAGE_DESCRIPTION":"検索できるTaigaの公開プロジェクトディレクトリ。バックログ、タイムライン、課題、そしてチームを探してみてください。最も人気な、あるいは活気のあるプロジェクトも見つけられます。カンバンやスクラムでフィルターしてみるのも良いかもしれません。","DISCOVER_TITLE":"プロジェクトを探す","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# 件のプロジェクトが見つかりました}}","MOST_ACTIVE":"最も活発なプロジェクト","MOST_ACTIVE_EMPTY":"アクティブなプロジェクトはまだありません。","MOST_LIKED":"最も好まれているプロジェクト","MOST_LIKED_EMPTY":"「いいね」されたプロジェクトはまだありません","VIEW_MORE":"もっと見る","FEATURED":"注目プロジェクト","EMPTY":"該当するプロジェクトがありませんでした。
    検索条件を変えて再度試してみてください!","FILTERS":{"ALL":"すべて","KANBAN":"かんばん","SCRUM":"スクラム","PEOPLE":"人","WEEK":"先週","MONTH":"先月","YEAR":"昨年","ALL_TIME":"すべて","CLEAR":"フィルターをクリア"},"SEARCH":{"PAGE_TITLE":"検索結果 - プロジェクトを探す - Taiga","PAGE_DESCRIPTION":"検索できるTaigaの公開プロジェクトディレクトリ。バックログ、タイムライン、課題、そしてチームを探してみてください。最も人気な、あるいは活気のあるプロジェクトも見つけられます。カンバンやスクラムでフィルターしてみるのも良いかもしれません。","INPUT_PLACEHOLDER":"入力してください","ACTION_TITLE":"検索","RESULTS":"検索結果"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-ko.json b/dist/v-1549282893552/locales/taiga/locale-ko.json new file mode 100644 index 0000000..9692538 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-ko.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"예","NO":"아니오","OR":"또는","I_GET_IT":"OK, I get it","LOADING":"불러오는 중...","DATE":"YYYY MMM DD","DATETIME":"YYYY MMM DD HH:mm","SAVE":"저장","CANCEL":"취소","ACCEPT":"확인","DELETE":"삭제하기","UNLINK":"연결끊기","CREATE":"생성하기","ADD":"추가하기","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"수정하기","DRAG":"드래그","TAG_LINE":"당신의 프로젝트 관리를 위한 민첩하고 무료인 오픈소스 도구","TAG_LINE_2":"프로젝트에 사랑을 담아","BLOCK":"차단","BLOCK_TITLE":"조건을 만족하지 않는 경우 이 아이템을 차단하세요.","BLOCKED":"차단됨","UNBLOCK":"차단 해제","UNBLOCK_TITLE":"차단 취소","BLOCKED_NOTE":"왜 차단되었나요?","BLOCKED_REASON":"이유를 적어주시겠어요?","CREATED_BY":"{{fullDisplayName}} 님이 생성","CLOSE":"완료","GO_HOME":"첫 화면으로 가기","PLUGINS":"플러그인","ONE_ITEM_LINE":"한 줄마다 하나씩...","NEW_BULK":"여러개 생성하기","SUBTASKS":"Subtasks","PREVIOUS":"이전","NEXT":"다음","LOGOUT":"로그아웃","EXTERNAL_USER":"외부 사용자","GENERIC_ERROR":"움파룸파가 {{error}} 라고 합니다.","IOCAINE_TEXT":"이 회원은 이 일에 조금 압박감을 ​​느낍니다. 당신의 도움이 필요한 시간이 지나면 아이오케인 독에 면역될 것 입니다. 지금 당장 포옹이 필요할 수도 있어요.","CLIENT_REQUIREMENT":"고객 요구 사항은 이전에 예상하지 않았던 새로운 요구 사항이며 프로젝트의 일부가 되어야만 합니다.","TEAM_REQUIREMENT":"팀 요구 사항은 프로젝트에 반드시 있어야하지만 클라이언트에게는 비용이 없어야합니다.","OWNER":"프로젝트 소유자","CAPSLOCK_WARNING":"조심하세요! 대/소문자를 구분하는 입력란에 대문자를 사용하고 있습니다.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"정말로 수정 모드를 닫겠습니까?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"저장하지 않고 편집 모드를 닫으면 모든 변경 사항이 손실됩니다.","RELATED_USERSTORIES":"연결된 유저 스토리","CARD":{"ASSIGN_TO":"다음으로 할당","EDIT":"카드 수정","DELETE":"Delete card","DELETE_ISSUE":"이슈 삭제","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"값이 유효하지 않습니다","TYPE_EMAIL":"정확한 이메일이어야 합니다.","TYPE_URL":"정확한 URL이어야 합니다.","TYPE_URLSTRICT":"정확한 URL이어야 합니다.","TYPE_NUMBER":"정확한 숫자만 적어 주세요","TYPE_DIGITS":"숫자만 입력해 주세요","TYPE_DATEISO":"유효한 날짜(YYYY-MM-DD)여야 합니다.","TYPE_ALPHANUM":"알파벳과 숫자만 써 주세요.","TYPE_PHONE":"전화번호를 정확히 적어 주세요.","NOTNULL":"이 값은 비워 둘 수 없습니다.","NOT_BLANK":"이 값은 비워 둘 수 없습니다.","REQUIRED":"필수 항목입니다.","REGEXP":"값이 유효하지 않습니다","MIN":"이 값은 %s 와 같거나 커야 합니다.","MAX":"이 값은 %s 와 같거나 작아야 합니다.","RANGE":"이 값은 %와 %s 사이여야 합니다.","MIN_LENGTH":"너무 짧습니다. %s 글자 이상 입력해주세요.","MAX_LENGTH":"너무 깁니다. %s 글자 이하로 입력해주세요.","RANGE_LENGTH":"글자수가 잘못되었습니다. %s와 %s의 사이 글자수여야 합니다.","MIN_CHECK":"%s 개 이상 선택해주세요.","MAX_CHECK":"%s 개 이하로 선택해주세요.","RANGE_CHECK":"%s 값과 %s 값 중에 선택해주세요.","EQUAL_TO":"이 값이 일치해야 합니다.","LINEWIDTH":"하나 또는 그 이상의 줄들이 너무 깁니다. %s 이하의 문자로 다시 시도해주세요.","PIKADAY":"날짜 형식이 올바르지 않습니다. DD MMM YYYY 형식을 사용해주세요. (예, 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"YYYY MMM DD","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"이전 달","NEXT_MONTH":"다음 달","MONTHS":{"JAN":"1월","FEB":"2월","MAR":"3월","APR":"4월","MAY":"5월","JUN":"6월","JUL":"7월","AUG":"8월","SEP":"9월","OCT":"10월","NOV":"11월","DEC":"12월"},"WEEK_DAYS":{"SUN":"일요일","MON":"월요일","TUE":"화요일","WED":"수요일","THU":"목요일","FRI":"금요일","SAT":"토요일"},"WEEK_DAYS_SHORT":{"SUN":"일","MON":"월","TUE":"화","WED":"수","THU":"목","FRI":"금","SAT":"토"}},"SEE_USER_PROFILE":"{{username }}의 프로필 보기","USER_STORY":"유저 스토리","TASK":"태스크","ISSUE":"이슈","EPIC":"에픽","TAGS":{"PLACEHOLDER":"태그 입력","DELETE":"태그 삭제하기","ADD":"태그 추가하기"},"DESCRIPTION":{"EMPTY":"공백으로 남기지 마세요. 재미없어요. 뭐라도 좀 적어보세요...","NO_DESCRIPTION":"아직 설명이 없습니다"},"FIELDS":{"SUBJECT":"주제","NAME":"이름","URL":"URL","DESCRIPTION":"설명","VALUE":"값","SLUG":"슬러그","COLOR":"색","IS_CLOSED":"완료했나요?","STATUS":"상태","TYPE":"타입","SEVERITY":"심각도","PRIORITY":"우선순위","ASSIGNED_TO":"할당됨","ASSIGNED_USERS":"Assigned users","POINTS":"포인트","IS_BLOCKED":"차단됨","REF":"참조","VOTES":"투표","SPRINT":"스프린트","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"전체"},"ASSIGNED_TO":{"NOT_ASSIGNED":"할당 되지 않음","ASSIGN":"할당","DELETE_ASSIGNMENT":"할당 삭제하기","REMOVE_ASSIGNED":"할당 삭제","TOO_MANY":"사용자가 너무 많아요. 필터링 좀....","CONFIRM_UNASSIGNED":"어사인 하지 않은 상태로 둘 건가요?","TITLE_ACTION_EDIT_ASSIGNMENT":"할당 수정하기","SELF":"나에게 할당하기"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"완료함","OPEN":"열림"},"WATCHERS":{"WATCHERS":"구독중인 사람들","ADD":"구독자 추가","TITLE_ADD":"프로젝트 회원을 구독자 목록에 추가","DELETE":"구독자 삭제하기","TITLE_LIGHTBOX_DELETE_WARTCHER":"구독자 삭제..."},"WATCH_BUTTON":{"WATCH":"구독","WATCHING":"구독중","UNWATCH":"구독 취소","WATCHERS":"구독중인 사람들","BUTTON_TITLE":"구독/구독 취소","COUNTER_TITLE":"{total, plural, one{one watcher} other{# 명이 구독중}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"이 아이템 공감/비공감","COUNTER_TITLE":"{total, plural, one{one vote} other{# 명의 찬성}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"사용자 정의 필드","SAVE":"사용자 정의 필드 저장하기","EDIT":"사용자 정의 필드 수정하기","DELETE":"사용자 정의 속성 삭제하기","CONFIRM_DELETE":"이 사용자 정의 필드의 모든 값이 삭제된다는 점을 기억하십시오.\n계속 하시겠습니까?"},"FILTERS":{"INPUT_PLACEHOLDER":"제목 또는 참조","TITLE_ACTION_FILTER_BUTTON":"검색하기","TITLE":"필터","TITLE_ACTION_SEARCH":"검색","ACTION_SAVE_CUSTOM_FILTER":"커스컴 필터 저장하기","PLACEHOLDER_FILTER_NAME":"필터 이름을 쓰고 엔터키를 누르세요","APPLIED_FILTERS_NUM":"적용된 필터","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"타입","STATUS":"상태","SEVERITY":"심각도","PRIORITIES":"우선순위","TAGS":"태그","ASSIGNED_TO":"할당됨","ASSIGNED_USERS":"Assigned users","ROLE":"역할","CREATED_BY":"생성함","CUSTOM_FILTERS":"사용자 정의 필터","EPIC":"에픽"}},"WYSIWYG":{"CODE_SNIPPET":"코드 스니펫","DB_CLICK":"더블클릭하여 수정","SELECT_LANGUAGE_PLACEHOLDER":"언어 선택","SELECT_LANGUAGE_REMOVE_FORMATING":"포매팅 제거","OUTDATED":"다른 사용자가 수정하는 동안 변경하였습니다. 반영하기 전에 액티비티 탭에서 새로운 버전을 확인하세요.","MARKDOWN_HELP":"마크다운 문법 도움말"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"에픽","VIEW_EPICS":"에픽 보기","ADD_EPICS":"에픽 추가","MODIFY_EPICS":"에픽 수정하기","COMMENT_EPICS":"에픽 댓글","DELETE_EPICS":"에픽 삭제하기"},"SPRINTS":{"NAME":"스프린트","VIEW_SPRINTS":"스프린트 보기","ADD_SPRINTS":"스프린트 추가하기","MODIFY_SPRINTS":"스프린트 수정하기","DELETE_SPRINTS":"스프린트 삭제하기"},"USER_STORIES":{"NAME":"유저 스토리","VIEW_USER_STORIES":"유저 스토리 보기","ADD_USER_STORIES":"유저 스토리 추가하기","MODIFY_USER_STORIES":"유저 스토리 수정하기","COMMENT_USER_STORIES":"유저 스토리 댓글","DELETE_USER_STORIES":"유저 스토리 삭제하기"},"TASKS":{"NAME":"태스크","VIEW_TASKS":"태스크 보기","ADD_TASKS":"태스크 추가하기","MODIFY_TASKS":"태스크 수정하기","COMMENT_TASKS":"태스크 댓글","DELETE_TASKS":"태스크 삭제하기"},"ISSUES":{"NAME":"이슈","VIEW_ISSUES":"이슈 보기","ADD_ISSUES":"이슈 추가하기","MODIFY_ISSUES":"이슈 수정하기","COMMENT_ISSUES":"이슈 댓글","DELETE_ISSUES":"이슈 삭제하기"},"WIKI":{"NAME":"위키","VIEW_WIKI_PAGES":"위키 보기","ADD_WIKI_PAGES":"위키 페이지 추가하기","MODIFY_WIKI_PAGES":"위키 페이지 수정하기","DELETE_WIKI_PAGES":"위키 페이지 삭제하기","VIEW_WIKI_LINKS":"위키 링크 보기","ADD_WIKI_LINKS":"위키 링크 추가하기","DELETE_WIKI_LINKS":"위키 링크 삭제하기"}}},"LOGIN":{"PAGE_TITLE":"로그인 - 타이가","PAGE_DESCRIPTION":"타이가에 로그인하세요. 타이가는 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요."},"AUTH":{"INVITED_YOU":"이 프로젝트에 참여하도록 초대받았습니다","NOT_REGISTERED_YET":"아직 가입을 안 했나요?","REGISTER":"회원 가입","CREATE_ACCOUNT":"무료 계정을 생성하세요"},"LOGIN_COMMON":{"HEADER":"타이가 계정을 이미 등록했습니다","PLACEHOLDER_AUTH_NAME":"아이디나 이메일 (대소문자 구분)","LINK_FORGOT_PASSWORD":"비밀번호를 잊었나요?","TITLE_LINK_FORGOT_PASSWORD":"비밀번호를 잊었나요?","ACTION_ENTER":"들어가기","ACTION_SIGN_IN":"로그인","PLACEHOLDER_AUTH_PASSWORD":"비밀번호 (대소문자 구분)","ALT_LOGIN":"또는 다른 방법으로 로그인"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"움파룸파가 말하길, 아이디나 이메일, 비밀번호 중 하나가 틀렸다고 하네요.","SUCCESS":"움파룸파가 즐거워 합니다. 타이가에 어서 오세요."},"REGISTER":{"PAGE_TITLE":"등록 - 타이가","PAGE_DESCRIPTION":"타이가에 계정을 만드세요. 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요."},"REGISTER_FORM":{"TITLE":"타이가 계정을 등록하기(무료)","PLACEHOLDER_NAME":"아이디를 입력하세요 (대소문자 구분)","PLACEHOLDER_FULL_NAME":"전체 이름을 넣으세요","PLACEHOLDER_EMAIL":"이메일","PLACEHOLDER_PASSWORD":"비밀번호 설정하기 (대소문자 구분)","ACTION_SIGN_UP":"등록하기","TITLE_LINK_LOGIN":"로그인","LINK_LOGIN":"이미 등록하셨나요? 로그인"},"FORGOT_PASSWORD":{"PAGE_TITLE":"비밀번호 찾기 - 타이가","PAGE_DESCRIPTION":"새 비밀번호를 발급받을 아이디나 이메일을 입력하세요."},"FORGOT_PASSWORD_FORM":{"TITLE":"혹시 비밀번호를 잊었나요?","SUBTITLE":"새로운 암호를 설정하기 위해서, 아이디나 이메일을 입력하세요.","PLACEHOLDER_FIELD":"아이디나 이메일","ACTION_RESET_PASSWORD":"비밀번호 재설정하기","LINK_CANCEL":"아니요 되돌아갈래요. 기억이 났어요.","SUCCESS_TITLE":"메일함을 확인해보세요!","SUCCESS_TEXT":"이메일 보관함을 확인하세요!
    새 비밀번호를 설정할 수 있는 방법을 이메일로 알려드렸습니다.","ERROR":"움파룸파가 말하길, 아직 등록되지 않은 사용자라고 하네요."},"CHANGE_PASSWORD":{"PAGE_TITLE":"비밀번호 변경하기 - 타이가","SECTION_NAME":"비밀번호 변경하기","FIELD_CURRENT_PASSWORD":"현재 비밀번호","PLACEHOLDER_CURRENT_PASSWORD":"현재 비밀번호 (아직 설정한 적이 없다면 비워두세요)","FIELD_NEW_PASSWORD":"새 비밀번호","PLACEHOLDER_NEW_PASSWORD":"새 비밀번호를 입력하세요","FIELD_RETYPE_PASSWORD":"새 비밀번호를 한 번 더 입력하세요","PLACEHOLDER_RETYPE_PASSWORD":"새 비밀번호를 한 번 더 입력하세요","ERROR_PASSWORD_MATCH":"비밀번호가 일치하지 않습니다"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"타이가 패쓰 생성하기","SUBTITLE":"아참, 철분이 많은 음식을 먹으면 기억력에 좋다네요. ^^","PLACEHOLDER_NEW_PASSWORD":"새 비밀번호","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"새 비밀번호를 한 번 더 입력하세요","ACTION_RESET_PASSWORD":"비밀번호 재설정하기","ERROR":"움파룸파가 암호를 복구하지 못했습니다. 다시 한 번 시도해 주세요.","SUCCESS":"움파룸파가 새 비밀번호를 저장했습니다.
    로그인해보세요."},"INVITATION":{"PAGE_TITLE":"초대 수락 - 타이가","PAGE_DESCRIPTION":"타이가에서 온 프로젝트 초대를 수락하세요. 타이가는 스타트업과 애자일 개발자/디자이너들을 위한 간명하고 아름다운 프로젝트 관리 플랫폼입니다. 정말 즐거울 거예요"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"움파룸파가, 당신의 초대장을 못 찾았습니다.","SUCCESS":"{{project_name}} 프로젝트에 오신 것을 환영합니다."},"HOME":{"PAGE_TITLE":"홈페이지 - 타이가","PAGE_DESCRIPTION":"타이가 홈페이지에서는 여러분의 프로젝트 뿐만 아니라 여러분이 관련된 유저 스토리, 태스크, 이슈를 확인할 수 있습니다.","EMPTY_WORKING_ON":"비어있는 것 같아요. 아닌가요?
    타이가로 일을 시작하고 당신이 일하게 될 스토리, 태스크, 이슈들을 확인해보세요.","EMPTY_WATCHING":"프로젝트의 유저 스토리, 태스크 그리고 이슈들을 팔로우하여 변경사항이 있을 때마다 알림을 받으세요 :)","EMPTY_PROJECT_LIST":"아직 프로젝트가 없습니다.","WORKING_ON_SECTION":"일 하는 중","WATCHING_SECTION":"구독중","DASHBOARD":"프로젝트 대시보드"},"EPICS":{"TITLE":"에픽","SECTION_NAME":"에픽","EPIC":"에픽","PAGE_TITLE":"에픽 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트의 에픽 목록 {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ 에픽 추가","UNASSIGNED":"할당되지 않음"},"EMPTY":{"TITLE":"아직 에픽이 없는 것 같네요.","EXPLANATION":"에픽은 유저 스토리를 포함하는 상위 레벨 항목입니다.
    에픽은 계층 구조의 최상위에 있으며 유저 스토리를 그룹화하는데 사용할 수 있습니다.","HELP":"에픽에 대하여 더 배우기"},"TABLE":{"VOTES":"투표","NAME":"이름","PROJECT":"프로젝트","SPRINT":"스프린트","ASSIGNED_TO":"할당됨","STATUS":"상태","PROGRESS":"진행","VIEW_OPTIONS":"옵션 보기"},"CREATE":{"TITLE":"새로운 에픽 만들기","PLACEHOLDER_DESCRIPTION":"다른 사람들이 이 에픽에 대해 좀 더 쉽게 이해할 수 있도록 설명을 추가해주세요.","TEAM_REQUIREMENT":"팀 요구 사항","CLIENT_REQUIREMENT":"고객 요구 사항","BLOCKED":"차단됨","BLOCKED_NOTE_PLACEHOLDER":"왜 이 에픽이 차단되었나요?","CREATE_EPIC":"에픽 만들기"}},"PROJECTS":{"PAGE_TITLE":"내 프로젝트 - 타이가","PAGE_DESCRIPTION":"프로젝트 목록입니다. 새 프로젝트를 만들거나 순서를 바꿀 수 있습니다.","MY_PROJECTS":"내 프로젝트"},"ATTACHMENT":{"SECTION_NAME":"첨부","TITLE":"{{ fileName }} 파일은 {{ date }}에 업로드되었습니다.","LIST_VIEW_MODE":"목록으로 보기","GALLERY_VIEW_MODE":"갤러리로 보기","DESCRIPTION":"간단한 설명을 입력하세요","DEPRECATED":"(지원 안함)","DEPRECATED_FILE":"더 이상 지원하지 않도록 할까요?","ADD":"첨부 파일 추가. {{maxFileSizeMsg}}","DROP":"여기에 첨부파일을 끌어 놓으세요!","SHOW_DEPRECATED":"+ 더 이상 필요 없는 첨부파일 보기","HIDE_DEPRECATED":"- 더 이상 필요 없는 첨부파일 숨기기","COUNT_DEPRECATED":"({{ counter }} 지원 안함)","MAX_UPLOAD_SIZE":"업로드 가능한 최대 용량은 {{maxFileSize}}","DATE":"YYYY MMM DD [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"'{{fileName}}'를 업로드할 수 없었습니다. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"첨부파일 삭제하기","MSG_LIGHTBOX_DELETE_ATTACHMENT":"첨부 파일 '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"삭제할 수 없었습니다: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요."},"PAGINATION":{"PREVIOUS":"이전","NEXT":"다음"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"값 수정하기","TITLE_ACTION_DELETE_VALUE":"값 삭제하기","TITLE_ACTION_DELETE_TAG":"태그 삭제하기"},"HELP":"도움이 필요하다면 고객 지원 페이지를 확인하세요","PROJECT_DEFAULT_VALUES":{"TITLE":"기본 값","SUBTITLE":"선택된 모든 항목을 모두 초기값으로 설정"},"MEMBERSHIPS":{"TITLE":"회원 관리","PAGE_TITLE":"팀원 - {{projectName}}","ADD_BUTTON":"회원 추가하기","ADD_BUTTON_TITLE":"회원 추가하기","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"이 프로젝트는 허용된 최대 회원 수 ({{members}}) 명에 도달하였습니다. 더 많은 최대 회원 수를 할당받고 싶다면 관리자에게 문의하세요."},"PROJECT_EXPORT":{"TITLE":"내보내기","SUBTITLE":"백업 혹은 새 프로젝트를 만들기 위해 현재 프로젝트의 데이터를 내 컴퓨터에 저장합니다. ","EXPORT_BUTTON":"내보내기","EXPORT_BUTTON_TITLE":"프로젝트 내보내기","LOADING_TITLE":"덤프 파일을 생성하고 있습니다.","DUMP_READY":"덤프 파일을 모두 만들었습니다.","LOADING_MESSAGE":"이 페이지를 닫지 마세요.","ASYNC_MESSAGE":"작업이 끝나면 이메일로 알려드릴게요.","SYNC_MESSAGE":"자동으로 다운로드가 시작되지 않는다면 여기를 클릭하세요.","ERROR":"움파룸파가 덤프 파일을 만들 수 없었습니다. 다시 한 번 시도해주세요.","ERROR_BUSY":"죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?"},"MODULES":{"TITLE":"모듈","EPICS":"에픽","EPICS_DESCRIPTION":"프로젝트의 가장 전략적인 부분을 시각화하고 관리합니다.","BACKLOG":"백로그","BACKLOG_DESCRIPTION":"유저 스토리를 관리하여 다가오는 작업과 우선 순위가 지정된 작업을 체계적으로 볼 수 있습니다.","NUMBER_SPRINTS":"예상되는 스프린트 의 갯수","NUMBER_SPRINTS_HELP":"정하지 않으려면 0을 입력합니다.","NUMBER_US_POINTS":"예상되는 총 스토리 포인트","NUMBER_US_POINTS_HELP":"정하지 않으려면 0을 입력합니다.","KANBAN":"칸반","KANBAN_DESCRIPTION":"이 칸반을 이용해 프로젝트를 효율적으로 만듭시다.","ISSUES":"이슈","ISSUES_DESCRIPTION":"프로젝트와 관련된 버그와 질문 및 개선 사항을 추적하십시오. 그 무엇도 놓치지 마세요!","WIKI":"위키","WIKI_DESCRIPTION":"다른 사람들과 공동으로 콘텐츠를 추가, 수정 또는 삭제합니다. 프로젝트 문서화에 적합합니다.","MEETUP":"미팅","MEETUP_DESCRIPTION":"당신의 화상회의 시스템을 선택하세요.","SELECT_VIDEOCONFERENCE":"화상 회의 시스템 선택","SALT_CHAT_ROOM":"채팅방 이름에 머릿말 추가","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"사용자 정의 ","URL_CHAT_ROOM":"채팅방 URL"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - 프로젝트 프로필 - {{projectName}}","PROJECT_DETAILS":"프로젝트 세부사항","PROJECT_NAME":"프로젝트 이름","TAGS":"태그","DESCRIPTION":"설명","RECRUITING":"이 프로젝트에 다른 사람이 필요합니까?","RECRUITING_MESSAGE":"누구를 찾고 계십니까?","RECRUITING_PLACEHOLDER":"찾고 있는 프로파일을 정의하십시오.","FEEDBACK":"타이가사용자들로부터 피드백을 받으시겠습니까?","PUBLIC_PROJECT":"공개된 프로젝트","PRIVATE_PROJECT":"비공개 프로젝트","PRIVATE_OR_PUBLIC":"공공 프로젝트와 비공개 프로젝트의 차이점은 무엇입니까?","DELETE":"프로젝트 삭제하기","CHANGE_LOGO":"로고 변경하기","ACTION_USE_DEFAULT_LOGO":"기본 이미지 사용","MAX_PRIVATE_PROJECTS":"당신에게 적용된 설정에서 허용하는 최대 비공개 프로젝트 수에 도달했습니다.","MAX_PRIVATE_PROJECTS_MEMBERS":"비공개 프로젝트의 최대 회원수를 초과하였습니다.","MAX_PUBLIC_PROJECTS":"안타깝게도 당신에게 설정된 최대 공공 프로젝트 갯수에 도달하였습니다.","MAX_PUBLIC_PROJECTS_MEMBERS":"프로젝트가 공개 프로젝트의 최대 회원 수를 초과했습니다.","PROJECT_OWNER":"프로젝트 소유자","REQUEST_OWNERSHIP":"소유권 요청","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"새 프로젝트의 소유자가 되고 싶습니까?","REQUEST_OWNERSHIP_DESC":"현재 프로젝트 소유자 {{name}}에게 이 프로젝트의 소유권을 당신에게 양도하도록 요청합니다.","REQUEST_OWNERSHIP_BUTTON":"요청하기","REQUEST_OWNERSHIP_SUCCESS":"프로젝트 소유자에게 알립니다.","CHANGE_OWNER":"소유자 변경하기","CHANGE_OWNER_SUCCESS_TITLE":"당신의 요청이 전송되었습니다!","CHANGE_OWNER_SUCCESS_DESC":"프로젝트 소유권 요청이 수락되거나 거부되면 이메일로 알려드립니다."},"REPORTS":{"TITLE":"보고서","SUBTITLE":"프로젝트 데이터를 CSV 형태로 내보낸 다음 여러분만의 보고서를 만들어 보세요.","DESCRIPTION":"CSV 파일을 다운로드하거나 생성 된 URL을 복사하여 원하는 텍스트 편집기 또는 스프레드 시트에서 프로젝트 데이터 보고서를 만듭니다. 모든 데이터를 쉽게 시각화하고 분석 할 수 있습니다.","HELP":"이걸 스프레드 시트에서 사용하는 방법이 무엇인가요?","REGENERATE_TITLE":"URL 변경하기","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"에픽 보고서","SECTION_TITLE_US":"유저 스토리 보고서","SECTION_TITLE_TASK":"태스크 보고서","SECTION_TITLE_ISSUE":"이슈 보고서","DOWNLOAD":"CSV 다운로드","URL_FIELD_PLACEHOLDER":"CSV url을 다시 생성하세요","TITLE_REGENERATE_URL":"CSV url 재생성하기","ACTION_GENERATE_URL":"URL 생성하기","ACTION_REGENERATE":"재생성","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"삭제"},"CUSTOM_FIELDS":{"TITLE":"사용자 정의 필드","SUBTITLE":"유저 스토리, 태스크 그리고 이슈를 위한 사용자 정의 필드를 지정하세요.","EPIC_DESCRIPTION":"에픽 사용자 정의 필드","EPIC_ADD":"에픽에 사용자 정의 필드 추가","US_DESCRIPTION":"유저 스토리의 사용자 정의 필드","US_ADD":"유저 스토리에 사용자 정의 필드 추가하기","TASK_DESCRIPTION":"태스크의 사용자 정의 필드","TASK_ADD":"태스크에 사용자 정의 필드 추가하기","ISSUE_DESCRIPTION":"이슈의 사용자 정의 필드","ISSUE_ADD":"이슈에 사용자 정의 필드 추가하기","FIELD_TYPE_TEXT":"텍스트","FIELD_TYPE_RICHTEXT":"서식있는 텍스트","FIELD_TYPE_MULTI":"여러 줄","FIELD_TYPE_DATE":"날짜","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - 프로젝트 값들 - {{projectName}}","REPLACEMENT":"이 값을 가진 모든 아이템들의 값을 다음으로 변경합니다.","ERROR_DELETE_ALL":"최소한 한 개의 값은 남겨두어야 합니다."},"PROJECT_VALUES_POINTS":{"TITLE":"포인트","SUBTITLE":"유저 스토리의 포인트를 추산하세요.","US_TITLE":"유저 스토리 포인트","ACTION_ADD":"새 포인트 추가하기"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"우선순위","SUBTITLE":"이슈의 우선순위를 지정하세요.","ISSUE_TITLE":"이슈 우선순위","ACTION_ADD":"우선순위 추가하기"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"심각도","SUBTITLE":"이슈에 대한 심각도를 지정하세요.","ISSUE_TITLE":"이슈 심각도","ACTION_ADD":"심각도 추가하기"},"PROJECT_VALUES_STATUS":{"TITLE":"상태","SUBTITLE":"유저 스토리, 태스크 그리고 이슈의 상태를 지정하세요.","EPIC_TITLE":"에픽 상태","US_TITLE":"유저 스토리 상태","TASK_TITLE":"태스크 상태","ISSUE_TITLE":"이슈 상태"},"PROJECT_VALUES_TYPES":{"TITLE":"타입","SUBTITLE":"이슈의 종류를 지정하세요.","ISSUE_TITLE":"이슈 타입","ACTION_ADD":"{{objName}} 새로 추가하기"},"PROJECT_VALUES_TAGS":{"TITLE":"태그","SUBTITLE":"태그를 보고 색을 변경하세요.","EMPTY":"태그가 없습니다.","EMPTY_SEARCH":"검색 기준에 아무 것도 발견되지 않았습니다.","ACTION_ADD":"태그 추가하기","NEW_TAG":"새로운 태그","MIXING_HELP_TEXT":"병합하기 원하는 태그를 선택하세요.","MIXING_MERGE":"태그 병합","SELECTED":"선택됨"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"상태 추가하기","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"역할 - {{projectName}}","WARNING_NO_ROLE":"주의하세요, 현재 프로젝트에 유저 스토리의 포인트를 산정할 수 있는 역할이 없습니다.","HELP_ROLE_ENABLED":"사용하도록 설정하면, 회원들에게 이 역할이 할당되었을 때 유저 스토리의 포인트 값을 예측할 수 있습니다.","DISABLE_COMPUTABLE_ALERT_TITLE":"이 역할의 예측 기능을 비활성화 하시겠습니까?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"만약 {{roleName}} 역할에 대한 평가 권한을 비활성화 했다면, 이 역할로 수행한 모든 평가는 삭제될 것입니다.","COUNT_MEMBERS":"{{ role.members_count }} 명의 회원이 이 역할을 가지고 있습니다.","TITLE_DELETE_ROLE":"역할 삭제하기","REPLACEMENT_ROLE":"이 역할의 모든 사용자들은 다음의 역할로 변경됨","WARNING_DELETE_ROLE":"조심하세요! 모든 역할 예측이 삭제됩니다.","ERROR_DELETE_ALL":"최소한 한 개의 값은 남겨두어야 합니다.","EXTERNAL_USER":"외부 사용자","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"비밀 키","PAYLOAD_URL":"Payload URL","VALID_IPS":"유효한 원본 IP (콤마','로 구분)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket 요청은 IP를 이용해서 출처를 확인하는 방법으로 서명되지 않았습니다. 필드가 비어있을 경우, IP 유효성 검증이 되지 않습니다."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab 요청은 IP를 이용해서 출처를 확인하는 방법으로 서명되지 않았습니다. 필드가 비어있을 경우, IP 유효성 검증이 되지 않습니다."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"웹훅 - {{projectName}}","SECTION_NAME":"웹훅","ADD_NEW":"웹훅 추가하기","TYPE_NAME":"서비스 이름을 입력해 주세요","TYPE_PAYLOAD_URL":"서비스 주소를 입력하세요","TYPE_SERVICE_SECRET":"서비스 시크릿 키를 입력해 주세요","SAVE":"웹훅 저장하기","CANCEL":"웹훅 취소하기","SHOW_HISTORY":"(이력 보기)","TEST":"웹훅 테스트하기","EDIT":"웹훅 수정하기","DELETE":"웹훅 삭제하기","REQUEST":"요청하기","RESEND_REQUEST":"요청 재전송하기","HEADERS":"헤더","PAYLOAD":"Payload","RESPONSE":"응답하기","DATE":"YYYY MMM DD [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(이력 숨기기)","ACTION_HIDE_HISTORY_TITLE":"상세 이력 숨기기","ACTION_SHOW_HISTORY":"(이력 보기)","ACTION_SHOW_HISTORY_TITLE":"상세 이력 보기","WEBHOOK_NAME":"웹훅 '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - 사용자 정의 속성 - {{projectName}}","ADD":"사용자 정의 필드 추가하기","EDIT":"사용자 정의 필드 수정하기","DELETE":"사용자 정의 필드 삭제하기","SAVE_TITLE":"사용자 정의 필드 저장하기","CANCEL_TITLE":"만들기 취소 하기","SET_FIELD_NAME":"사용자 정의 필드의 이름을 설정하세요","SET_FIELD_DESCRIPTION":"사용자 정의 필드에 대한 설명을 넣으세요","FIELD_TYPE_DEFAULT":"-- 하나를 고르세요 --","ACTION_UPDATE":"사용자 정의 필드 업데이트하기","ACTION_CANCEL_EDITION":"수정 내역 취소하기"},"MEMBERSHIP":{"COLUMN_MEMBER":"회원","COLUMN_ADMIN":"관리자","COLUMN_ROLE":"역할","COLUMN_STATUS":"상태","STATUS_ACTIVE":"활성상태","STATUS_PENDING":"보류 중","DELETE_MEMBER":"회원 삭제하기","RESEND":"다시 보내기","SUCCESS_SEND_INVITATION":"'{{email}}' 님에게 다시 초대장을 보냈습니다.","SUCCESS_DELETE":"{{message}} 를 지웠습니다.","ERROR_DELETE":"{{message}} 를 지울 수 없었습니다.","DEFAULT_DELETE_MESSAGE":"{{email}} 초대하기"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"에픽 상태의 기본값","LABEL_US_STATUS":"유저 스토리 상태의 기본 값","LABEL_POINTS":"포인트의 기본 값","LABEL_TASK_STATUS":"태스크 상태의 기본 값","LABEL_ISSUE_TYPE":"이슈 종류의 기본 값","LABEL_ISSUE_STATUS":"이슈 상태의 기본 값","LABEL_PRIORITY":"우선순위의 기본 값","LABEL_SEVERITY":"심각도의 기본 값"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"새 상태의 이름을 입력하세요","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"새 엘리먼트의 이름을 입력하세요"},"US_STATUS":{"ACTION_ADD_STATUS":"상태 추가하기","IS_ARCHIVED_COLUMN":"보관됨","IS_CLOSED_COLUMN":"완료함","WIP_LIMIT_COLUMN":"동시 진행 제한 갯수","PLACEHOLDER_WRITE_NAME":"새 상태의 이름을 입력하세요"},"MENU":{"PROJECT":"프로젝트","ATTRIBUTES":"속성","MEMBERS":"회원","PERMISSIONS":"권한","INTEGRATIONS":"연동"},"SUBMENU_PROJECT_VALUES":{"STATUS":"상태","POINTS":"포인트","PRIORITIES":"우선순위","SEVERITIES":"심각도","TYPES":"타입","CUSTOM_FIELDS":"사용자 정의 필드","TAGS":"태그","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"역할","ACTION_NEW_ROLE":"역할 추가하기","TITLE_ACTION_NEW_ROLE":"역할 추가하기"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"새 프로젝트의 소유자가 되고 싶습니까?","PRIVATE":"비공개","ACCEPTED_PROJECT_OWNERNSHIP":"축하합니다! 새로운 프로젝트의 소유자가 되었습니다.","REJECTED_PROJECT_OWNERNSHIP":"네. 이 프로젝트 소유자에게 연락하겠습니다.","ACCEPT":"확인","REJECT":"거절","PROPOSE_OWNERSHIP":"{{owner}}가 자신이 소유한 프로젝트 {{project}}의 새로운 소유자가 될 수 있는지 제안하였습니다.","ADD_COMMENT":"프로젝트 소유자에 대한 의견을 추가 하시겠습니까?","UNLIMITED_PROJECTS":"제한 없음","OWNER_MESSAGE":{"PRIVATE":"{{maxProjects}}개의 비공개 프로젝트를 소유 할 수 있음을 기억하십시오. 현재 당신은 {{currentProjects}}개의 비공개 프로젝트를 소유하고 있습니다.","PUBLIC":"{{maxProjects}}개의 공공 프로젝트를 소유 할 수 있음을 기억하십시오. 현재 당신은 {{currentProjects}}개의 공공 프로젝트를 소유하고 있습니다."},"CANT_BE_OWNED":"현재 이 유형의 프로젝트 소유자가 될 수 없습니다. 이 프로젝트의 소유자가되고 싶다면 관리자에게 문의하여 프로젝트 소유권을 사용하도록 계정 설정을 변경하십시오."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"프로필 수정하기","CLOSED_US":"완료한 유저 스토리","PROJECTS":"프로젝트","PROJECTS_EMPTY":"{{username}} 님은 아직 프로젝트가 없습니다","CONTACTS":"연락처","CONTACTS_EMPTY":"{{username}} 님은 연락처가 없습니다","CURRENT_USER_CONTACTS_EMPTY":"연락처가 없습니다","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"타이가에서 일하는 사람들은 자동으로 당신의 연락처가 됩니다.","TABS":{"ACTIVITY_TAB":"타임라인","ACTIVITY_TAB_TITLE":"이 사용자의 전체 액티비티 보기","PROJECTS_TAB":"프로젝트","PROJECTS_TAB_TITLE":"이 사용자가 참여하는 모든 프로젝트 목록","LIKES_TAB":"좋아요","LIKES_TAB_TITLE":"이 사용자의 모든 좋아요 목록","VOTES_TAB":"투표","VOTES_TAB_TITLE":"이 사용자가 투표한 모든 투표 목록 보기","WATCHED_TAB":"구독","WATCHED_TAB_TITLE":"이 사용자가 구독중인 모든 목록 보기","CONTACTS_TAB":"연락처","CONTACTS_TAB_TITLE":"이 사용자가 만든 모든 연락처 목록"}},"PROFILE_SIDEBAR":{"TITLE":"프로필","DESCRIPTION":"당신이 하는 모든 것, 그리고 당신이 어떤 일을 하고 있는 지 사람들이 몽땅 볼 수 있어요. 당신을 알릴 수 있는 멋진 소개를 추가하세요.","ADD_INFO":"이력 수정하기"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"아무거나 입력하세요...","FILTER_TYPE_ALL":"전체","FILTER_TYPE_ALL_TITLE":"모두 보기","FILTER_TYPE_PROJECTS":"프로젝트","FILTER_TYPE_PROJECTS_TITLE":"프로젝트만 보기","FILTER_TYPE_EPICS":"에픽","FILTER_TYPE_EPICS_TITLE":"에픽만 보기","FILTER_TYPE_USER_STORIES":"스토리","FILTER_TYPE_USER_STORIES_TITLE":"유저 스토리만 보기","FILTER_TYPE_TASKS":"태스크","FILTER_TYPE_TASKS_TITLE":"태스크만 보기","FILTER_TYPE_ISSUES":"이슈","FILTER_TYPE_ISSUES_TITLE":"이슈만 보기","EMPTY_TITLE":"여기엔 보여 줄 수 있는게 하나도 없네요."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"자주 사용하는 프로젝트들을 상위로 올려보세요.
    상위 10개 프로젝트는 내비게이션 바의 프로젝트 목록에 나타납니다.","PRIVATE":"비공개 프로젝트","LOOKING_FOR_PEOPLE":"이 프로젝트는 사람을 찾고 있습니다.","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# 명의 좋아요}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# 명이 구독중}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# 명의 회원}}","BLOCKED_PROJECT":{"BLOCKED":"차단된 프로젝트","THIS_PROJECT_IS_BLOCKED":"이 프로젝트는 임시로 차단되었습니다.","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"프로젝트의 차단을 해제하려면 관리자에게 문의하십시오."},"SECTION":{"SEARCH":"검색","TIMELINE":"타임라인","EPICS":"에픽","BACKLOG":"백로그","KANBAN":"칸반","ISSUES":"이슈","WIKI":"위키","TEAM":"팀","MEETUP":"미팅","ADMIN":"관리자"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"프로젝트 생성하기","MANAGE_PROJECTS":"프로젝트 관리하기","TITLE_CREATE_PROJECT":"프로젝트 생성하기","HELP_TITLE":"타이가 고객 지원 페이지","HELP":"도움말","HOMEPAGE":"홈페이지","FEEDBACK_TITLE":"피드백 보내기","FEEDBACK":"피드백","NOTIFICATIONS_TITLE":"알림 설정 수정","NOTIFICATIONS":"알림","VIEW_PROFILE_TITLE":"프로필 보기","VIEW_PROFILE":"프로필 보기","EDIT_PROFILE_TITLE":"프로필 수정하기","EDIT_PROFILE":"프로필 수정하기","CHANGE_PASSWORD_TITLE":"비밀번호 변경하기","CHANGE_PASSWORD":"비밀번호 변경하기","DASHBOARD_TITLE":"대시보드","DISCOVER_TITLE":"트렌드 프로젝트 찾기","DISCOVER":"찾기"},"LIKE_BUTTON":{"LIKE":"좋아요","LIKED":"좋아함","UNLIKE":"좋아요 취소","BUTTON_TITLE":"이 프로젝트를 좋아요 또는 좋아요 취소","COUNTER_TITLE":"{total, plural, one{one fan} other{# 명의 좋아요}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"이 프로젝트를 구독하고 알림 정책 설정하기","WATCH":"구독","WATCHING":"구독중","COUNTER_TITLE":"{total, plural, one{one watcher} other{# 명이 구독중}}","OPTIONS":{"NOTIFY_ALL":"모든 공지 받기","NOTIFY_ALL_TITLE":"이 프로젝트에 대한 모든 공지 받기","NOTIFY_INVOLVED":"내가 관련된 경우에만","NOTIFY_INVOLVED_TITLE":"연관된 경우에만 공지 받기","UNWATCH":"구독 취소","UNWATCH_TITLE":"이 프로젝트의 구독 취소"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"프로젝트 팀 문의","CONTACT_BUTTON":"프로젝트 문의"},"CREATE":{"TITLE":"프로젝트 생성하기","CHOOSE_TEMPLATE":"당신의 프로젝트에 가장 적합한 템플릿이 무엇입니까?","TEMPLATE_SCRUM":"스크럼","TEMPLATE_SCRUM_DESC":"짧은 시간 주기로 작업 우선 순위 지정 및 해결","TEMPLATE_SCRUM_LONGDESC":"스크럼은 제품 개발 과정을 관리하기 위해 반복하며 쌓아가는 애자일 소프트웨어 개발 방법론입니다.\n끊임없이 채워지는 제품 백로그를 만들어야되는 순서대로 정렬하세요. 제품 백로그의 유저스토리를 스프린트로 나누세요. 관리할 만큼, 실행할 만큼 스프린트로 나누세요. 팀원들의 실력과 능력, 가진 것을 고려하여 매번 정해진 때마다 새로운 스프린트를 만들고 백로그에서 몇 개의 유저 스토리를 등록하세요. 백로그를 없애며 프로젝트를 발전시키세요.","TEMPLATE_KANBAN":"칸반","TEMPLATE_KANBAN_DESC":"독립적인 태스크에 대해 지속적인 워크플로 유지","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"프로젝트 복사","DUPLICATE_DESC":"정리를 시작하고 설정을 유지","IMPORT":"프로젝트 불러오기","IMPORT_DESC":"여러 플랫폼의 당신의 프로젝트를 타이가로 가져오십시오.","INVITE":"프로젝트로 초대","SOLO_PROJECT":"이 프로젝트에 당신 혼자 남을 것입니다.","INVITE_LATER":"(나중에 더 많은 회원을 초대 할 수 있습니다.)","BACK":"이전","MAX_PRIVATE_PROJECTS":"비공개 프로젝트 수 제한에 도달하였습니다.\n제한을 늘리고 싶다면 관리자에게 연락하세요.","MAX_PUBLIC_PROJECTS":"공개 프로젝트 수 제한에 도달하였습니다.\n제한을 늘리고 싶다면 관리자에게 문의해주세요.","PUBLIC_PROJECT":"공개된 프로젝트","PRIVATE_PROJECT":"비공개 프로젝트"},"COMMON":{"DETAILS":"새로운 프로젝트 세부사항","PROJECT_TITLE":"프로젝트 이름","PROJECT_DESCRIPTION":"프로젝트 설명"},"DUPLICATE":{"TITLE":"프로젝트 복사","DESCRIPTION":"정리를 시작하고 설정을 유지","SELECT_PLACEHOLDER":"복제 할 기존 프로젝트 선택"},"IMPORT":{"TITLE":"프로젝트 가져오기","DESCRIPTION":"여러 플랫폼의 당신의 프로젝트를 타이가로 가져오십시오.","ASYNC_IN_PROGRESS_TITLE":"움파룸파가 프로젝트를 불러오고 있습니다.","ASYNC_IN_PROGRESS_MESSAGE":"이 작업은 몇 분 정도 걸립니다.
    작업이 끝나면 이메일로 알려드릴게요.","UPLOAD_IN_PROGRESS_MESSAGE":"{{totalSize}} 중 {{uploadedSize}} 만큼 업로드했습니다","ERROR":"움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요.","ERROR_TOO_MANY_REQUEST":"죄송해요. 움파룸파가 지금 좀 바쁘네요. 잠시 후에 다시 해주시겠어요?","ERROR_MESSAGE":"움파룸파가 덤프 파일을 불러올 수 없습니다. 다시 한 번 시도해주세요. {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"우리 움파룸파에게 '{{fileName}}' ({{fileSize}}) 는 너무 커요. ({{maxFileSize}}) 보다 작은 크기로 다시 시도해주세요.","SYNC_SUCCESS":"프로젝트를 불러오는 데 성공했습니다.","IMPORT":"가져오기","WHO_IS":"이 태스크들을 할당 ...","WRITE_EMAIL":"원한다면, 사용자가 사용하는 이메일을 타이가에 작성하십시오.","SEARCH_CONTACT":"또는 연락처에서 찾습니다.","WRITE_EMAIL_LABEL":"Tagia에서 사용자가 사용할 이메일을 작성","ACCEEDE":"Acceede","PROJECT_MEMBERS":"프로젝트 회원","PROCESS_DESCRIPTION":"Tagia에서 {{platform}}의 태스크들을 누구에게 할당할 것인지 알려주세요.","MATCH":"외부의 {{user_external}} 사용자는 내부의 {{user_internal}} 사용자와 동일인입니까?","CHOOSE":"사용자 선택","LINKS":"{{platform}}과 연결","LINKS_DESCRIPTION":"{{platform}} 카드와 모든 아이템들의 연결을 유지하시겠습니까?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"할당","PROJECT_SELECTOR":{"NO_RESULTS":"검색 기준에 아무 것도 발견되지 않았습니다.","ACTION_SEARCH":"검색하기","ACTION_BACK":"이전"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"당신의 계정은 오직 {{members}} 회원만 허가되어있습니다.","PRIVATE_PROJECTS_SPACE":{"TITLE":"안타깝게도, 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다.","DESC":"가져오기하려는 프로젝트가 비공개 되어있습니다. 안타깝게도, 현재 당신의 설정에는 추가 비공개 프로젝트가 허용되어있지 않습니다."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"안타깝게도, 당신의 현재 설정에는 추가 공공 프로젝트가 허용되어있지 않습니다.","DESC":"가져오기 하려는 프로젝트는 공공 프로젝트입니다. 안타깝게도, 당신의 현재 섲렁에는 추가 공공 프로젝트가 허용되어있지 않습니다."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"현재 당신의 설정으로는 비공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다."},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"현재 당신의 설정으로는 공개 프로젝트 당 최대 {{max_memberships}} 명의 회원을 수용할 수 있습니다."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"안타깝게도 현재 당신의 설정으로는 추가 비공개 프로젝트가 허용되지 않았거나 비공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.","DESC":"가져오기 하려는 프로젝트가 비공개이며 {{members}} 명의 회원이 있습니다."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"안타깝게도 현재 당신의 설정으로는 추가 공개 프로젝트가 허용되지 않았거나 공개 프로젝트 당 {{max_memberships}} 명 이상의 회원을 수용할 수 없도록 되어있습니다.","DESC":"가져오기 하려는 프로젝트는 공개되어있으며 {{members}} 이상의 회원이 존재합니다."}},"IN_PROGRESS":{"TITLE":"프로젝트 불러오기","DESCRIPTION":"이 과정은 시간이 걸릴 수 있습니다. 이 창을 닫지 마세요."},"WARNING":{"TITLE":"일부 태스크는 할당되지 않을 것입니다.","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"연락처 확인"},"TAIGA":{"SELECTOR":"타이가 프로젝트 가져오기"},"TRELLO":{"SELECTOR":"타이가로 트렐로 보드 가져오기","CHOOSE_PROJECT":"가져오고 싶은 보드를 선택하세요.","NO_PROJECTS":"트렐로에 당신의 보드가 없는 것 같군요."},"GITHUB":{"SELECTOR":"깃헙 프로젝트 이슈 가져오기","CHOOSE_PROJECT":"가져오고 싶은 프로젝트를 찾으세요.","NO_PROJECTS":"깃헙에 당신의 프로젝트가 없는 것 같군요.","HOW_DO_YOU_WANT_TO_IMPORT":"타이가로 당신의 이슈들을 어떻게 가져오고 싶습니까?","KANBAN_PROJECT":"칸반 프로젝트의 유저 스토리","KANBAN_PROJECT_DESCRIPTION":"이후에 스크럼과 백로그를 활성화할 수 있습니다.","SCRUM_PROJECT":"스크럼 프로젝트의 유저 스토리","SCRUM_PROJECT_DESCRIPTION":"이후에 칸반모드를 활성화할 수 있습니다.","ISSUES_PROJECT":"이슈","ISSUES_PROJECT_DESCRIPTION":"칸반이나 스크럼에서는 이슈를 사용할 수 없습니다. 하지만 유저 스토리를 사용할 수 있습니다."},"ASANA":{"SELECTOR":"가져올 Asana 프로젝트와 어떻게 관리할지를 선택하세요.","CHOOSE_PROJECT":"가져오고 싶은 프로젝트를 선택하세요.","NO_PROJECTS":"Asana에 당신의 프로젝트가 없는 것 같군요.","KANBAN_PROJECT":"칸반","SCRUM_PROJECT":"스크럼","CREATE_AS_SCRUM_DESCRIPTION":"당신의 프로젝트에서 태스크와 하위 태스크는 Taiga 유저 스토리와 태스크로 작성됩니다.","CREATE_AS_KANBAN_DESCRIPTION":"당신의 프로젝트에서 태스크와 하위 태스크는 Taiga 유저 스토리와 태스크로 작성됩니다."},"JIRA":{"SELECTOR":"가져올 Jira 프로젝트와 어떻게 관리할지를 선택하세요","HOW_TO_CONFIGURE":"(설정 도움말)","CHOOSE_PROJECT":"가져오고 싶은 프로젝트나 보드를 선택하세요.","NO_PROJECTS":"Jira에 당신의 프로젝트가나 보드가 없는 것 같군요.","URL":"당신의 Jira URL","KANBAN_PROJECT":"칸반","SCRUM_PROJECT":"스크럼","ISSUES_PROJECT":"이슈","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"하위 이슈를 새로운 타이가 이슈로 변경","NOT_CREATE_NEW_ISSUES":"하위 이슈를 가져오지 마십시오."}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"타이가 계정을 정말로 삭제하시겠어요?","CANCEL":"설정으로 돌아가기","ACCEPT":"계정 삭제","BLOCK_PROJECT":"계정을 삭제한 후에는 당신이 소유하고 있는 모든 프로젝트가 차단됩니다. 이걸 원치 않으시면, 계정을 삭제하기 전에 프로젝트 소유권을 다른 회원에게 넘겨주세요."},"DELETE_PROJECT":{"TITLE":"프로젝트 삭제하기","QUESTION":"프로젝트를 정말 삭제하시려고요?","SUBTITLE":"모든 프로젝트 데이터(유저 스토리, 태스크, 이슈, 스프린트, 위키)가 사라질 겁니다. :-(","CONFIRM":"네. 진심으로 원해요."},"ASSIGNED_TO":{"SELECT":"다음 사람에게 할당","SEARCH":"사용자 검색"},"ADD_MEMBER":{"TITLE":"새 회원","PLACEHOLDER":"사용자를 필터링하거나 초대할 이메일 쓰기","ADD_EMAIL":"이메일 추가","REMOVE":"삭제","INVITE":"초대","CHOOSE_ROLE":"역할 선택","PLACEHOLDER_INVITATION_TEXT":"(선택사항) 초대장에 특별한 메시지를 적으세요. 새로운 회원에게 멋진 말을 전해주세요 ;-)","HELP_TEXT":"타이가에 이미 등록한 사용자라면 자동으로 프로젝트에 추가될 겁니다. 등록하지 않은 사용자라면 초대장이 발송됩니다."},"FEEDBACK":{"TITLE":"말해주세요...","COMMENT":"... 버그, 몇 가지 제안, 멋진 것 ... 아니면 타이가와의 최악의 악몽","ACTION_SEND":"피드백 보내기"},"SEARCH":{"TITLE":"검색","PLACEHOLDER_SEARCH":"무엇을 찾고 있나요?"},"ADD_EDIT_SPRINT":{"TITLE":"다음 스프린트","PLACEHOLDER_SPRINT_NAME":"스프린트 이름","PLACEHOLDER_SPRINT_START":"예정된 시작일","PLACEHOLDER_SPRINT_END":"예정된 종료일","ACTION_DELETE_SPRINT":"이 스프린트를 삭제하시려고요?","TITLE_ACTION_DELETE_SPRINT":"스프린트 삭제하기","LAST_SPRINT_NAME":"마지막 스프린트는 {{lastSprint}} 입니다 ;-)"},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"이슈 추가하기","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"스프린트 삭제하기"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(선택사항) 초대장에 특별한 메시지를 적으세요. 새로운 회원에게 멋진 말을 전해주세요 ;-)","PLACEHOLDER_TYPE_EMAIL":"이메일을 입력하세요","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"이 프로젝트에 허용 된 최대 회원 수인 {{maxMembers}} 명에 도달하려합니다. 최대 회원 수를 늘리려면 관리자에게 문의하십시오.","LIMIT_USERS_WARNING_MESSAGE":"이 프로젝트에 허용 된 최대 회원 수 인 {{maxMembers}} 명에 도달하려고 합니다."},"LEAVE_PROJECT_WARNING":{"TITLE":"안타깝게도 이 프로젝트는 소유자 없이 남아있을 수 없습니다.","CURRENT_USER_OWNER":{"DESC":"현재 이 프로젝트의 소유자입니다. 나가기전에 소유권을 다른 사람에게 양도하시기 바랍니다.","BUTTON":"프로젝트 소유자 변경하기"},"OTHER_USER_OWNER":{"DESC":"안타깝게도 현재 프로젝트 소유자인 회원을 삭제할 수 없습니다. 먼저 새 프로젝트 소유자를 지정하십시오.","BUTTON":"프로젝트 소유자 변경 요청"}},"CHANGE_OWNER":{"TITLE":"누구를 새로운 프로젝트 소유자로 삼고 싶습니까?","ADD_COMMENT":"댓글 추가","BUTTON":"이 프로젝트 회원에게 새 프로젝트 소유자가 되도록 문의하십시오."},"CONTACT_PROJECT":{"TITLE":"이메일 보내기","WARNING":"프로젝트 관리자로부터 이메일을 받았습니다.","PLACEHOLDER":"메시지 쓰기","SEND":"보내기"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"프로젝트가 무엇인가요?","CHOOSE_PROJECT_FROM":"프로젝트가 무엇인가요?","SUBJECT":"주제","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"검색 기준에 아무 것도 발견되지 않았습니다."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - 에픽 {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"상태: {{epicStatus }}. 설명: {{epicDescription}}","SECTION_NAME":"에픽","ERROR_UNLINK_RELATED_USERSTORY":"링크를 해제할 수 없었습니다: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"다음으로 관계 만들기","NEW_USERSTORY":"새 유저 스토리","EXISTING_USERSTORY":"존재하는 유저 스토리","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"주제","SUBJECT_BULK_MODE":"제목 (여러개 생성하기)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"이 프로젝트에는 아직 유저 스토리가 없습니다. 다른 프로젝트를 선택하십시오.","NO_USERSTORIES_FOUND":"검색 기준에 아무 것도 발견되지 않았습니다.","FILTER_USERSTORIES":"유저 스토리 필터","LIGHTBOX_TITLE_BLOKING_EPIC":"에픽 차단","ACTION_DELETE":"에픽 삭제"},"US":{"PAGE_TITLE":"{{userStorySubject}} - 유저 스토리 {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"상태: {{userStoryStatus }}. 완료 {{userStoryProgressPercentage}}% ({{userStoryTotalTasks}} 중 {{userStoryClosedTasks}} 태스크 완료). 포인트: {{userStoryPoints}}. 상세사항: {{userStoryDescription}}","SECTION_NAME":"유저 스토리","LINK_TASKBOARD":"태스크보드","TITLE_LINK_TASKBOARD":"태스크보드로 가기","TOTAL_POINTS":"전체 포인트","ADD":"유저 스토리 추가하기","ADD_BULK":"유저 스토리 여러개 생성하기","PROMOTED":"이 유저 스토리는 이슈에서 만들어졌음","TITLE_LINK_GO_TO_ISSUE":"이슈로 가기","TITLE_DELETE_ACTION":"유저 스토리 삭제하기","LIGHTBOX_TITLE_BLOKING_US":"블로킹 유저 스토리","NOT_ESTIMATED":"추산되지 않음","OWNER_US":"이 유저 스토리를 포함한 에픽은","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Tiaga Tribe의 Gig으로 배포하기","PUBLISH_INFO":"더 많은 정보","PUBLISH_TITLE":"Taiga Tribe로 배포하기에 대한 더 많은 정보","PUBLISHED_AS_GIG":"스토리가 Taiga Tribe의 Gig으로 배포되었습니다.","EDIT_LINK":"링크 수정","CLOSE":"닫기","SYNCHRONIZE_LINK":"Taiga Tribe와 동기화","PUBLISH_MORE_INFO_TITLE":"이 태스크에 누군가가 필요합니까?","PUBLISH_MORE_INFO_TEXT":"

    만약 당신이 어떤 일에 도움이 필요하면 간단하게 Taiga Tribe 의 Gigs를 만들어 전세계의 도움을 받을 수 있습니다. 우리는 당신이 이 위대한 커뮤니티의 gig을 즐기고 제어하거나 관리하면서 기여 할 수 있기를 열망합니다.

    Taiga Tribe 는 타이가의 형제로 태어났습니다. 두 플랫폼은 별개로 살아갈 수 있지만, 우리는 이들을 결합 하였을 때 더 큰 힘을 낼 수 있다고 믿습니다. 그리고 멋지게 통합되어 움직이는 것을 확인하였습니다.

    "}},"COMMENTS":{"DELETED_INFO":"{{user}} 에 의해 댓글이 지워짐.","COMMENTS_COUNT":"{{comments}} 댓글","OLDER_FIRST":"오랜된 순으로","RECENT_FIRST":"최신 순으로","COMMENT":"댓글","EDITED_COMMENT":"수정됨:","SHOW_HISTORY":"역사 보기","TYPE_NEW_COMMENT":"댓글을 입력하세요","SHOW_DELETED":"삭제된 댓글 보기","HIDE_DELETED":"삭제된 댓글 가리기","DELETE":"댓글 삭제","RESTORE":"댓글 되살리기","HISTORY":{"TITLE":"활동 내역"}},"ACTIVITY":{"TITLE":"활동 내역","ACTIVITIES_COUNT":"{{activities}} 활동","TAGS_ADDED":"태그 추가됨:","TAGS_REMOVED":"태그 삭제됨:","US_POINTS":"{{role}} 포인트","NEW_ATTACHMENT":"새로운 첨부파일:","DELETED_ATTACHMENT":"첨부파일 삭제하기","UPDATED_ATTACHMENT":"첨부 파일이 업데이트됨 ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"사용자 정의 속성 만들기","UPDATED_CUSTOM_ATTRIBUTE":"사용자 정의 속성 업데이트하기","BECAME_DEPRECATED":"지원하지 않도록 되었습니다.","BECAME_UNDEPRECATED":"다시 지원하도록 되었습니다.","TEAM_REQUIREMENT":"팀 요구 사항","CLIENT_REQUIREMENT":"고객 요구 사항","BLOCKED":"차단됨","VALUES":{"NOT_SET":"not set","UNASSIGNED":"할당되지 않음"},"FIELDS":{"SUBJECT":"주제","DESCRIPTION":"설명","PRIORITY":"우선 순위","SEVERITY":"심각도","STATUS":"상태","TYPE":"타입","ASSIGNED_TO":"할당됨","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"스프린트","COLOR":"색"}},"BACKLOG":{"PAGE_TITLE":"백로그 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트의 유저 스토리와 스프린트를 보여주는 백 패널 {{projectName}}: {{projectDescription}}","SECTION_NAME":"백로그","CUSTOMIZE_GRAPH":"백로그 그래프 사용자 정의하기","CUSTOMIZE_GRAPH_TEXT":"프로젝트의 진화를 돕는 좋은 그래프를 얻으려면, 당신은 포인트와 스프린트를 설정해야합니다.","CUSTOMIZE_GRAPH_ADMIN":"관리자","CUSTOMIZE_GRAPH_TITLE":"관리자 메뉴에서 포인트와 스프린트를 설정하세요.","MOVE_US_TO_CURRENT_SPRINT":"현재 스프린트로 옮기기","MOVE_US_TO_LATEST_SPRINT":"가장 최근 스프린트로 옮기기","EMPTY":"백로그가 비었습니다!","CREATE_NEW_US":"유저 스토리 생성하기","CREATE_NEW_US_EMPTY_HELP":"새로운 유저 스토리를 만들어 보고 싶죠?","EXCESS_OF_POINTS":"포인트 초과","PENDING_POINTS":"보류 중인 포인트","CLOSED_POINTS":"완료","COMPACT_SPRINT":"스프린트 접기","GO_TO_TASKBOARD":"{{::name}}의 태스크보드로 이동하기","EDIT_SPRINT":"스프린트 수정하기","TOTAL_POINTS":"전체","STATUS_NAME":"상태 이름","SORTABLE_FILTER_ERROR":"필터 창이 열려있을 때에는 백로그를 옮길 수 없습니다.","DOOMLINE":"프로젝트 범위 [둠 라인]","CHART":{"XAXIS_LABEL":"스프린트","YAXIS_LABEL":"포인트","OPTIMAL":"\"{{sprintName}}\" 스프린트에서 최적의 대기 포인트는 {{value}} 로 되어야합니다.","REAL":"\"{{sprintName}}\" 스프린트의 실제 대기포인트는 {{value}} 입니다.","INCREMENT_TEAM":"팀 요구 사항에 따라 \"{{sprintName}}\" 스프린트의 포인트가 {{value}}로 증가했습니다.","INCREMENT_CLIENT":"고객 요구 사항에 따라 \"{{sprintName}}\" 스프린트의 포인트가 {{value}}로 증가했습니다."},"TAGS":{"TOGGLE":"태그 보여짐 토글","SHOW":"태그 보기","HIDE":"태그 숨기기"},"FORECASTING":{"TITLE":"속도 예측","BACKLOG":"백로그 표시","NEW_SPRINT":"당신의 속도를 기반으로한 다음 스프린트의 후보 유저 스토리 입니다. 클릭하여 새로운 스프린트를 만드십시오.","CURRENT_SPRINT":"당신의 속도를 기반으로한 다음 스프린트의 후보 유저 스토리 입니다. 클릭하여 현재 스프린트에 추가하십시오."},"TABLE":{"COLUMN_US":"유저 스토리","TITLE_COLUMN_POINTS":"역할 별로 보기"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"종합
    포인트","COMPLETED_POINTS":"완료한
    포인트","OPEN_TASKS":"태스크
    열림","CLOSED_TASKS":"완료한
    태스크","IOCAINE_DOSES":"아이오케인
    복용","SHOW_STATISTICS_TITLE":"지표 보기","TOGGLE_BAKLOG_GRAPH":"번다운 그래프 보이기/숨기기","POINTS_PER_ROLE":"역할별 포인트"},"SUMMARY":{"PROJECT_POINTS":"프로젝트
    포인트","DEFINED_POINTS":"정의된
    포인트","CLOSED_POINTS":"완료한
    포인트","POINTS_PER_SPRINT":"포인트 /
    스프린트"},"FILTERS":{"TOGGLE":"필터 보여짐 토글","HIDE":"필터 숨기기","SHOW":"필터 보기"},"SPRINTS":{"TITLE":"스프린트","DATE":"YYYY MMM DD","LINK_TASKBOARD":"스프린트 태스크보드","TITLE_LINK_TASKBOARD":"\"{{name}}\" 태스크보드로 가기","EMPTY":"스프린트가 아직 없습니다.","WARNING_EMPTY_SPRINT_ANONYMOUS":"이 스프린트는 유저 스토리가 없습니다.","WARNING_EMPTY_SPRINT":"새 스프린트를 추가하려면 백로그에서 스토리를 끌어 놓으세요","TITLE_ACTION_NEW_SPRINT":"새로운 스프린트 추가","TEXT_ACTION_NEW_SPRINT":"프로젝트에 새로운 스프린트를 만들어 보고 싶죠?","ACTION_SHOW_CLOSED_SPRINTS":"완료한 스프린트 보기","ACTION_HIDE_CLOSED_SPRINTS":"완료한 스프린트 숨기기"}},"ERROR":{"TEXT1":"움파룸파가 무언가를 작업하고 있습니다.","NOT_FOUND":"찾지 못함","NOT_FOUND_TEXT":"404 에러: 당신이 접속한 페이지는 더 이상 존재하지 않습니다. 타이가홈페이지로 돌아가서 당신이 찾고 있는 페이지를 찾아보세요.","PERMISSION_DENIED":"권한이 없습니다","PERMISSION_DENIED_TEXT":"이 페이지를 볼 수 있는 권한이 없습니다.","VERSION_ERROR":"타이가 내부의 누군가가 이전에 이를 변경했으며 우리 움파룸파는 변경 사항을 적용 할 수 없습니다. 다시 로드하고 변경 사항을 다시 적용하십시오. (지금의 변경사항들은 손실 될 것입니다)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - 스프린트 태스크보드 - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}}의 스프린트 {{sprintName}} ({{startDate}}에서 {{endDate}}까지). {{completedPercentage}}% 완료됨 ({{completedPoints}} 중 {{totalPoints}}). {{openTasks}}는 {{totalTasks}}의 작업을 열었습니다.","SECTION_NAME":"태스크보드","TITLE_ACTION_ADD":"태스크 추가하기","TITLE_ACTION_ADD_BULK":"태스트 여러개 생성하기","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"태스크 할당하기","PLACEHOLDER_CARD_TITLE":"이것은 태스크가 될 수 있습니다.","PLACEHOLDER_CARD_TEXT":"스토리를 여러 태스크로 나누고 개별적으로 추적하세요.","TABLE":{"COLUMN":"유저 스토리","TITLE_ACTION_FOLD":"컬럼 접기","TITLE_ACTION_UNFOLD":"컬럼 접기","TITLE_ACTION_FOLD_ROW":"행 접기","TITLE_ACTION_UNFOLD_ROW":"행 접기","FIELD_POINTS":"포인트","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"일","YAXIS_LABEL":"포인트","OPTIMAL":"{{formattedDate}}에 대한 최적의 일일 대기 포인트는 {{roundedValue}}이어야 합니다.","REAL":"{{formattedDate}}의 실제 대기 포인트는 {{roundedValue}} 입니다.","DATE":"YYYY MMMM DD"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - 태스크 {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"상태: {{taskStatus }}. 세부사항: {{taskDescription}}","SECTION_NAME":"태스크","LINK_TASKBOARD":"태스크보드","TITLE_LINK_TASKBOARD":"태스크보드로 가기","PLACEHOLDER_SUBJECT":"새 태스크의 이름을 입력하세요","TITLE_SELECT_STATUS":"상태 이름","OWNER_US":"이 태스크는 다음에 속합니다.","TITLE_LINK_GO_OWNER":"유저 스토리로 가기","TITLE_DELETE_ACTION":"태스크 삭제하기","LIGHTBOX_TITLE_BLOKING_TASK":"블로킹 태스크","FIELDS":{"IS_IOCAINE":"독약인가요?"},"TITLE_ACTION_IOCAINE":"이 태스크에 대해 조금 압박감을 느끼나요? 이 태스크를 수정할 때 아이오케인을 클릭해 다른 사람들에게 알리세요. 조금씩 이 독에 맞서면 이 (허구의)치명적인 독에 면역이 될 수 있습니다. 때로는 추가 도전 과제를 취함으로써 당신이 하는 일을 더 잘 할 수 있는 것 처럼 말이죠!"},"NOTIFICATION":{"OK":"모든게 좋네요","WARNING":"음? 뭔가 문제가 있는데...","WARNING_TEXT":"변경사항이 저장되지 않아서 움파룸파는 슬퍼요.","SAVED":"움파룸파가 모든 사항을 저장했습니다.","CLOSE":"알림 닫기","MAIL":"메일로 알림","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"정말 삭제하실 건가요?"},"CANCEL_ACCOUNT":{"TITLE":"계정 취소 하기","SUBTITLE":"당신이 타이가 떠난다니 아쉽네요. 부디 좋은 기억만 남기를 바랍니다 :)","PLACEHOLDER_INPUT_TOKEN":"계정 토큰 삭제","ACTION_LEAVING":"네, 나갈래요!","SUCCESS":"움파룸파가 당신 계정을 지웠습니다"},"CHANGE_EMAIL_FORM":{"TITLE":"이메일 변경하기","SUBTITLE":"한번 더 클릭하시면 이메일 정보가 업데이트 됩니다.","PLACEHOLDER_INPUT_TOKEN":"이메일 토큰 변경","ACTION_CHANGE_EMAIL":"이메일 변경하기","SUCCESS":"움파룸파가 당신의 이메일을 업데이트 하였습니다."},"ISSUES":{"PAGE_TITLE":"이슈 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트 {{projectName}}: {{projectDescription}}의 이슈 목록 패널","SECTION_NAME":"이슈","ACTION_NEW_ISSUE":"이슈 추가하기","ACTION_PROMOTE_TO_US":"유저 스토리에 등록하기","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"이 이슈가 유저 스토리에 등록되었습니다.","EXTERNAL_REFERENCE":"이 이슈가 만들어 진 곳은 ","GO_TO_EXTERNAL_REFERENCE":"원본으로 가기","ACTION_DELETE":"이슈 삭제하기","LIGHTBOX_TITLE_BLOKING_ISSUE":"걸림돌이 되는 이슈","LINK_TASKBOARD":"태스크보드","TITLE_LINK_TASKBOARD":"태스크보드로 가기","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"우선순위","SEVERITY":"심각도","TYPE":"타입"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"이 이슈를 유저 스토리에 등록하기","MESSAGE":"이 이슈에서 새 유저 스토리를 생성하시겠어요?"},"TABLE":{"COLUMNS":{"TYPE":"타입","SEVERITY":"심각도","PRIORITY":"우선순위","SUBJECT":"주제","VOTES":"투표","STATUS":"상태","MODIFIED":"수정됨","ASSIGNED_TO":"할당됨"},"TITLE_ACTION_CHANGE_STATUS":"상태 변경하기","TITLE_ACTION_ASSIGNED_TO":"할당됨","BLOCKED":"차단됨","EMPTY":{"TITLE":"보고할 이슈가 없습니다. :-)","SUBTITLE":"이슈를 찾았나요?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - 이슈 {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"상태: {{issueStatus }}. 종류: {{issueType}}, 우선순위: {{issuePriority}}. 심각도: {{issueSeverity}}. 설명: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"칸반 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트 {{projectName}}: {{projectDescription}}의 유저 스토리를 보여주는 칸반 패널","SECTION_NAME":"칸반","TITLE_ACTION_FOLD":"컬럼 접기","TITLE_ACTION_UNFOLD":"컬럼 접기","TITLE_ACTION_ADD_US":"새 유저 스토리 추가하기","TITLE_ACTION_ADD_BULK":"여러개 생성하기","ACTION_SHOW_ARCHIVED":"보관된 것 보기","ACTION_HIDE_ARCHIVED":"보관된 것 숨기기","HIDDEN_USER_STORIES":"이 상태에 있는 유저 스토리는 기본적으로 숨겨집니다.","PLACEHOLDER_CARD_TITLE":"당신의 유저 스토리들 입니다.","PLACEHOLDER_CARD_TEXT":"스토리에는 요구 사항을 구분하는 하위 태스크가 있을 수도 있습니다."},"SEARCH":{"PAGE_TITLE":"검색 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트 내에서 유저 스토리, 이슈, 태스크 또는 위키 페이지를 포함한 모든 검색 {{projectName}}: {{projectDescription}}","FILTER_EPICS":"에픽","FILTER_USER_STORIES":"유저 스토리","FILTER_ISSUES":"이슈","FILTER_TASKS":"태스크","FILTER_WIKI":"위키 페이지","PLACEHOLDER_SEARCH":"검색하기","TITLE_ACTION_SEARCH":"검색하기","EMPTY_TITLE":"검색 조건에 부합하는 결과가 하나도 없네요.","EMPTY_DESCRIPTION":"위의 탭 중 하나를 사용하거나 다시 검색하십시오."},"TEAM":{"PAGE_TITLE":"팀 - {{projectName}}","PAGE_DESCRIPTION":"프로젝트의 모든 회원들을 보여주기 위한 팀 패널 {{projectName}}: {{projectDescription}}","SECTION_NAME":"팀","PLACEHOLDER_INPUT_SEARCH":"전체 이름 검색하기","COLUMN_MR_WOLF":"울프씨","EXPLANATION_COLUMN_MR_WOLF":" 완료한 이슈","COLUMN_IOCAINE":"아이오케인 중독자","EXPLANATION_COLUMN_IOCAINE":"복용한 아이오케인 양","COLUMN_CERVANTES":"세르반테스","EXPLANATION_COLUMN_CERVANTES":"위키 페이지가 수정되었습니다.","COLUMN_BUG_HUNTER":"버그 사냥꾼","EXPLANATION_COLUMN_BUG_HUNTER":"이슈 보고서","COLUMN_NIGHT_SHIFT":"야간 근무","EXPLANATION_COLUMN_NIGHT_SHIFT":"완료한 태스크","COLUMN_TOTAL_POWER":"전체 파워","EXPLANATION_COLUMN_TOTAL_POWER":"전체 포인트","SECTION_TITLE_TEAM":"팀 >","SECTION_FILTER_ALL":"전체","CONFIRM_LEAVE_PROJECT":"이 프로젝트를 정말로 떠나시려고요?","ACTION_LEAVE_PROJECT":"프로젝트 나가기"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[최대 크기: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"사용자 설정","USER_PROFILE":"사용자 프로필","CHANGE_PASSWORD":"비밀번호 변경하기","EMAIL_NOTIFICATIONS":"이메일 알림","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"이메일 알림","COLUMN_PROJECT":"프로젝트","COLUMN_RECEIVE_ALL":"모두 받기","COLUMN_ONLY_INVOLVED":"내가 관련된 경우에만","COLUMN_NO_NOTIFICATIONS":"알림 없음","OPTION_ALL":"전체","OPTION_INVOLVED":"관련됨","OPTION_NONE":"없음"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"프로젝트","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"프로젝트"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"기본 이미지 사용","ACTION_DELETE_ACCOUNT":"타이가 계정 삭제하기","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"이메일 보관함을 확인하세요!
    새 주소를 설정할 수 있는 방법을
    이메일로 알려드렸습니다.","CHANGE_PHOTO":"사진 변경하기","FIELD":{"USERNAME":"아이디","EMAIL":"이메일","FULL_NAME":"전체 이름","PLACEHOLDER_FULL_NAME":"이름 전체를 적어 주세요(예. 조찬제)","BIO":"소개 (최대 210자)","PLACEHOLDER_BIO":"당신에 대해서 알려 주세요.","LANGUAGE":"언어","LANGUAGE_DEFAULT":"-- 기본 언어 사용하기 --","THEME":"테마","THEME_DEFAULT":"-- 기본 테마 사용하기 --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - 위키 - {{projectName}}","PAGE_DESCRIPTION":"{{lastModifiedDate}}에 최종 수정 (총 {{totalEditions}} 회 수정) 내용: {{ wikiPageContent }}","DATETIME":"YYYY MMM DD HH:mm","REMOVE":"이 위키 페이지 삭제하기","DELETE_LIGHTBOX_TITLE":"위키 페이지 삭제하기","DELETE_LINK_TITLE":"위키 링크 삭제하기","NAVIGATION":{"HOME":"메인 페이지","SECTION_NAME":"북마크","ACTION_ADD_LINK":"북마크 추가","ALL_PAGES":"모든 위키 페이지"},"SUMMARY":{"TIMES_EDITED":"번
    수정됨","LAST_EDIT":"에
    수정됨","LAST_MODIFICATION":"마지막 수정"},"SECTION_PAGES_LIST":"모든 페이지","PAGES_LIST_COLUMNS":{"TITLE":"제목","EDITIONS":"판","CREATED":"생성됨","MODIFIED":"수정됨","CREATOR":"작성자","LAST_MODIFIER":"마지막 수정"}},"HINTS":{"SECTION_NAME":"힌트","LINK":"사용법을 알고싶으시다면 지원 페이지를 방문해주세요.","LINK_TITLE":"지원 페이지를 방문하세요","HINT1_TITLE":"프로젝트를 내보내거나 가져올 수 있다는 건 아세요?","HINT1_TEXT":"이것은 당신에게 하나의 타이가에서 당신의 모든 데이터를 추출하여 다른 곳으로 이동시킬 수 있도록 허용합니다.","HINT2_TITLE":"사용자 정의 필드를 만들 수 있다는건 아세요?","HINT2_TEXT":"이제 팀은 특정 워크 플로우에 유용한 특정 데이터를 입력하는 유연한 방법으로 사용자 정의 필드를 만들 수 있습니다.","HINT3_TITLE":"당신과 가장 관련성이 높은 순서대로 프로젝트를 정렬하세요.","HINT3_TEXT":"상단의 빠른 접근 항목에서 10개의 목록이 보여 집니다.","HINT4_TITLE":"뭘 하고 있었는지 잊었습니까?","HINT4_TEXT":"걱정마세요, 대시보드에서 당신이 연 태스크, 이슈, 유저 스토리를 작업한 순서데로 찾아볼 수 있습니다."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} 님이 {{obj_name}} 첨부파일을 업로드했습니다.","US_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 유저 스토리를 생성하였습니다.","ISSUE_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 이슈를 생성하였습니다.","TASK_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 태스크를 추가하였습니다.","TASK_CREATED_WITH_US":"{{username}} 님이 {{project_name}} {{us_name}} 유저 스토리에 {{obj_name}}을 생성하였습니다.","WIKI_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 위키 페이지를 만들었습니다.","MILESTONE_CREATED":"{{username}} 님이 {{project_name}}에 {{obj_name}} 스프린트를 만들었습니다.","EPIC_CREATED":"{{username}} 님이 새로운 에픽을 {{project_name}} 프로젝트에 {{obj_name}} 명으로 생성하였습니다.","EPIC_RELATED_USERSTORY_CREATED":"{{username}} 님이 {{project_name}} 프로젝트에서 {{related_us_name}} 유저 스토리를 {{epic_name}} 에픽과의 연결에 사용하였습니다.","NEW_PROJECT":"{{username}} 님이 {{project_name}} 프로젝트를 만들었습니다.","MILESTONE_UPDATED":"{{username}} 님이 {{obj_name}} 스프린트를 업데이트 했습니다.","US_UPDATED":"{{obj_name}} 유저 스토리에서 \"{{field_name}}\" 속성을 {{username}} 님이 업데이트 했습니다.","US_UPDATED_WITH_NEW_VALUE":"{{username}} 님이 {{obj_name}} 유저 스토리의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.","US_UPDATED_POINTS":"{{username}} 님이 {{obj_name}} 유저 스토리의 '{{role_name}}' 포인트를 {{new_value}}로 변경하였습니다.","ISSUE_UPDATED":"{{username}}님이 {{obj_name}} 이슈의 \"{{field_name}}\" 속성을 변경하였습니다.","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} 님이 {{obj_name}} 이슈의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.","TASK_UPDATED":"{{username}} 님이 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} 님이 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 변경하였습니다.","TASK_UPDATED_WITH_US":"{{username}} 님이 {{us_name}} 유저 스토리에 있는 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 수정하였습니다.","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} 님이 {{us_name}} 유저스토리에 있는 {{obj_name}} 태스크의 \"{{field_name}}\" 속성을 {{new_value}}로 수정하였습니다.","WIKI_UPDATED":"{{username}} 님이 {{obj_name}} 위키 페이지를 업데이트했습니다.","EPIC_UPDATED":"{{username}}님이 에픽 {{obj_name}}의 속성 \"{{field_name}}\"을 변경하였습니다.","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}}님이 에픽 {{obj_name}}의 속성 \"{{field_name}}\"을 {{new_value}}로 변경하였습니다.","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}}님이 에픽 {{obj_name}}의 \"{{field_name}}\"을 으로 변경하였습니다.","NEW_COMMENT_US":"{{username}} 님이 {{obj_name}} 유저 스토리에 댓글을 남겼습니다.","NEW_COMMENT_ISSUE":"{{username}} 님이 {{obj_name}} 이슈에 댓글을 남겼습니다.","NEW_COMMENT_TASK":"{{username}} 님이 {{obj_name}} 태스크에 댓글을 남겼습니다.","NEW_COMMENT_EPIC":"{{username}} 님이 {{obj_name}} 에픽에 댓글을 남겼습니다.","NEW_MEMBER":"{{project_name}}에 새 팀원이 들어왔습니다.","US_ADDED_MILESTONE":"{{username}} 님이 {{obj_name}} 유저 스토리를 {{sprint_name}}에 추가하였습니다.","US_MOVED":"{{username}} 님이 {{obj_name}} 유저 스토리를 이동했습니다.","US_REMOVED_FROM_MILESTONE":"{{username}} 님이 {{obj_name}} 유저 스토리를 백로그에 추가하였습니다.","BLOCKED":"{{username}} 님이 {{obj_name}}를 차단하였습니다.","UNBLOCKED":"{{username}} 님이 {{obj_name}}를 차단 해제하였습니다.","NEW_USER":"{{username}} 님이 타이가에 등록하였습니다.","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"이슈","TASK":"태스크"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"외부 연동 앱은 권한이 필요합니다.","PAGE_DESCRIPTION":"외부 연동 앱은 권한이 필요합니다.","AUTHORIZATION_REQUEST":"{{application}}이 당신의 타이가 계정을 사용하도록 허가하시겠어요?","LOGIN_WITH_ANOTHER_USER":"다른 사용자로 로그인 하기","AUTHORIZE_APP":"인증 앱","CANCEL":"취소"},"JOYRIDE":{"NAV":{"NEXT":"다음","BACK":"이전","SKIP":"건너뛰기","DONE":"완료됨"},"DASHBOARD":{"STEP1":{"TITLE":"프로젝트","TEXT":"환영합니다! 여기에서 당신이 참여하고 있는 프로젝트를 찾으실 수 있습니다."},"STEP2":{"TITLE":"일 하는 중","TEXT":"여기에는 당신이 작업하고 있는 유저 스토리, 태스크, 이슈들이 표시됩니다."},"STEP3":{"TITLE":"구독중","TEXT1":"그리고 여기에서 프로젝트에 대해 알고 싶은 것들을 찾을 수 있습니다.","TEXT2":"이미 타이가에 있으신걸요? ;)"},"STEP4":{"TITLE":"시작해 봅시다.","TEXT1":"여러분의 첫번째 Tagia 프로젝트를 만드세요.","TEXT2":"행운을 빌어요!"}},"BACKLOG":{"STEP1":{"TITLE":"프로젝트 요약","TEXT1":"여기에서는 당신의 프로젝트의 상태를 알 수 있습니다.","TEXT2":"관리자 메뉴에서 프로젝트의 모든 설정을 변경할 수 있어요."},"STEP2":{"TITLE":"제품 백로그","TEXT":"백 로그는 프로젝트의 요구 사항 (유저 스토리)목록입니다. 스프린트를 계획 할 곳은 다음과 같습니다."},"STEP3":{"TITLE":"스프린트","TEXT":"스프린트는 특정 작업을 완료하고 전달해야하는 짧은 기간 (일반적으로 2주)입니다."},"STEP4":{"TITLE":"유저 스토리","TEXT":"그것들은 높은 수준의 요구 사항입니다. 백 로그에 추가하고 전달해야하는 스프린트로 드래그 할 수 있습니다."}},"KANBAN":{"STEP1":{"TITLE":"워크플로우 사용자 정의하기","TEXT":"관리자를 통해 워크 플로우 상태를 매핑하는 데 필요한 열을 설정하십시오"},"STEP2":{"TITLE":"유저 스토리 & 태스크","TEXT":"유저 스토리에 더 높은 권한이 필요합니다. 다른 컬럼에 끌어 놓으세요."},"STEP3":{"TITLE":"유저 스토리 추가하기","TEXT1":"단일 유저 스토리 (유저 스토리 아이콘 추가) 또는 그 그룹 (여러개의 아이콘)을 추가 할 수 있습니다.","TEXT2":"행운을 빌어요!"}}},"DISCOVER":{"PAGE_TITLE":"프로젝트 찾기 - 타이가","PAGE_DESCRIPTION":"타이가 공공 프로젝트 디렉토리를 검색 할 수 있습니다. 백 로그, 타임 라인, 이슈 및 팀을 탐색하십시오. 가장 인기 있거나 가장 활동적인 프로젝트를 확인하십시오. 칸반 또는 스크럼으로 필터","DISCOVER_TITLE":"프로젝트 찾기","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# 개의 프로젝트를 발견}}","MOST_ACTIVE":"가장 활동적인","MOST_ACTIVE_EMPTY":"아직 활성화된 프로젝트가 없습니다.","MOST_LIKED":"가장 인기있는","MOST_LIKED_EMPTY":"아직 '좋아요' 표시한 프로젝트가 없습니다.","VIEW_MORE":"더 보기","FEATURED":"주요 프로젝트","EMPTY":"이 검색 기준으로 표시 할 프로젝트가 없습니다.
    다시 시도해주세요!","FILTERS":{"ALL":"전체","KANBAN":"칸반","SCRUM":"스크럼","PEOPLE":"사용자 찾기","WEEK":"지난 주","MONTH":"지난 달","YEAR":"작년","ALL_TIME":"모든 날짜","CLEAR":"필터 없애기"},"SEARCH":{"PAGE_TITLE":"검색 - 프로젝트 찾기 - 타이가","PAGE_DESCRIPTION":"타이가 공공 프로젝트 디렉토리를 검색 할 수 있습니다. 백 로그, 타임 라인, 이슈 및 팀을 탐색하십시오. 가장 인기 있거나 가장 활동적인 프로젝트를 확인하십시오. 칸반 또는 스크럼으로 필터","INPUT_PLACEHOLDER":"아무거나 입력하세요...","ACTION_TITLE":"검색","RESULTS":"검색 결과"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-nb.json b/dist/v-1549282893552/locales/taiga/locale-nb.json new file mode 100644 index 0000000..da052bd --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-nb.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Ja","NO":"Nei","OR":"eller","I_GET_IT":"OK, jeg forstår","LOADING":"Laster...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Lagre","CANCEL":"Avbryt","ACCEPT":"Aksepter","DELETE":"Slett","UNLINK":"Koble fra","CREATE":"Opprett","ADD":"Legg til","COPY_TO_CLIPBOARD":"Kopier til utklippstavle","COPIED_TO_CLIPBOARD":"Tekst kopiert til utklippstavlen","EDIT":"Endre","DRAG":"Dra","TAG_LINE":"Ditt smidige, gratis og åpen kildekode prosjektstyringsverktøy","TAG_LINE_2":"ELSK DITT PROSJEKT","BLOCK":"Blokker","BLOCK_TITLE":"Blokker elementet for eksempel hvis det har en avhengighet som ikke kan oppfylles","BLOCKED":"Blokkert","UNBLOCK":"Opphev blokkeringen","UNBLOCK_TITLE":"Avblokker dette elementet","BLOCKED_NOTE":"Hvorfor er dette blokkert?","BLOCKED_REASON":"Venligst forklar årsaken","CREATED_BY":"Opprettet av {{fullDisplayName}}","CLOSE":"lukk","GO_HOME":"Led meg hjem","PLUGINS":"Programtillegg","ONE_ITEM_LINE":"En enhet per linje...","NEW_BULK":"Ny sett (mange)","SUBTASKS":"Subtasks","PREVIOUS":"Previous","NEXT":"Neste","LOGOUT":"Logg ut","EXTERNAL_USER":"en ekstern bruker","GENERIC_ERROR":"En av våre Oompa Loompaer sier {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Klientkravet er nytt krav som tidligere ikke var forventet, og det er nødt til å være en del av prosjektet","TEAM_REQUIREMENT":"TeamBehov er et behov som må eksistere i prosjektet, men som ikke har noen kostnad for klienten","OWNER":"Prosjekteier","CAPSLOCK_WARNING":"Vær forsiktig! Du bruker blokkbokstaver i et felt som er for store og små bokstaver.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Slett hendelse","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Denne verdien virker å være ugyldig","TYPE_EMAIL":"Dette skal være en gyldig epost.","TYPE_URL":"Denne verdien skal være en URL","TYPE_URLSTRICT":"Denne verdien skal være en URL","TYPE_NUMBER":"Denne verdien skal være et gyldig tall.","TYPE_DIGITS":"Denne verdien skal være sifre.","TYPE_DATEISO":"Denne verdien skal være en gyldig dato (YYYY-MM-DD).","TYPE_ALPHANUM":"Denne verdien skal være alfanumerisk.","TYPE_PHONE":"Denne verdien skal være et gyldig telefonnummer.","NOTNULL":"Denne verdien skal ikke være \"null\"","NOT_BLANK":"Denne verdien skal ikke være blank.","REQUIRED":"Denne verdien er nødvendig.","REGEXP":"Denne verdien virker å være ugyldig","MIN":"Denne verdien skal være større eller lik %s.","MAX":"Denne verdien skal være mindre eller lik %s.","RANGE":"Denne verdien skal være mellom %s og %s.","MIN_LENGTH":"Denne verdien er for kort. Den skal ha %s eller flere bokstaver.","MAX_LENGTH":"Denne verdien er for lang. Den skal ha %s eller færre bokstaver.","RANGE_LENGTH":"Lengden på denne verdien er ikke gydlig. Den skal være mellom %s og %s teng lang.","MIN_CHECK":"Du må velge minst %s valg.","MAX_CHECK":"Du må velge %s valg eller mindre.","RANGE_CHECK":"Du må velge mellom %s og %s valg.","EQUAL_TO":"Denne verdien skal være den samme.","LINEWIDTH":"En eller flere av linjene er kanskje for lang. Prøv å hold de under %s tegn.","PIKADAY":"Ugyldig datoformat , kan du bruke DD MMM YYYY (eks: 23 mars 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Forrige Måned","NEXT_MONTH":"Neste Måned","MONTHS":{"JAN":"Januar","FEB":"Februar","MAR":"Mars","APR":"April","MAY":"Mai","JUN":"Juni","JUL":"Juli","AUG":"August","SEP":"September","OCT":"Oktober","NOV":"November","DEC":"Desember"},"WEEK_DAYS":{"SUN":"Søndag","MON":"Mandag","TUE":"Tirsdag","WED":"Onsdag","THU":"Torsdag","FRI":"Fredag","SAT":"Lørdag"},"WEEK_DAYS_SHORT":{"SUN":"Man","MON":"Man","TUE":"Tirs","WED":"Ons","THU":"Tors","FRI":"Fre","SAT":"Lør"}},"SEE_USER_PROFILE":"Se See {{username }} profil","USER_STORY":"Brukerhistorie","TASK":"Oppgave","ISSUE":"Hendelse","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Slett etikett","ADD":"Legg til etikett"},"DESCRIPTION":{"EMPTY":"Tomme felter er så kjedelig... kom igjen, vær kreativ...","NO_DESCRIPTION":"Ingen beskrivelse enda"},"FIELDS":{"SUBJECT":"Subjekt","NAME":"Navn","URL":"URL","DESCRIPTION":"Beskrivelse","VALUE":"Verdi","SLUG":"Slug","COLOR":"Farge","IS_CLOSED":"Er lukket?","STATUS":"Status","TYPE":"Type","SEVERITY":"Alvorlighetsgrad","PRIORITY":"Prioritet","ASSIGNED_TO":"Tildelt til","ASSIGNED_USERS":"Assigned users","POINTS":"Poeng","IS_BLOCKED":"er blokkert","REF":"Ref","VOTES":"Stemmer","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Alle"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Ikke tildelt","ASSIGN":"Tildel","DELETE_ASSIGNMENT":"Slett tildeling","REMOVE_ASSIGNED":"Fjern tildeling","TOO_MANY":"...for mange brukere, forstett å filtrere","CONFIRM_UNASSIGNED":"Er du sikker på at du vil la den være ikke tildelt?","TITLE_ACTION_EDIT_ASSIGNMENT":"Rediger tildeling","SELF":"Tildel til meg"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Lukket","OPEN":"Åpen"},"WATCHERS":{"WATCHERS":"Følgere","ADD":"Legg til følgere","TITLE_ADD":"Legg til et prosjektmedlem til følgerlisten","DELETE":"Slett følger","TITLE_LIGHTBOX_DELETE_WARTCHER":"Slett følger..."},"WATCH_BUTTON":{"WATCH":"Følg","WATCHING":"Følger med på","UNWATCH":"Ikke overvåk","WATCHERS":"Følgere","BUTTON_TITLE":"Følg/Ikke følg denne enheten","COUNTER_TITLE":"{total, plural, one{en følger} other{# følgere}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Stem opp / Stem ned dette elementet","COUNTER_TITLE":"{total, plural, one{en stemme} other{# stemmer}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Egendefinerte felter","SAVE":"Lagre Egendefinert Felt","EDIT":"Endre Egendefinert Felt","DELETE":"Slett egendefinert egenskap","CONFIRM_DELETE":"Husk at alle verdier i dette egendefinerte feltet vil bli slettet.\nEr du sikker på at du vil fortsette?"},"FILTERS":{"INPUT_PLACEHOLDER":"Subjekt eller referanse","TITLE_ACTION_FILTER_BUTTON":"Søk","TITLE":"Filtre","TITLE_ACTION_SEARCH":"Søk","ACTION_SAVE_CUSTOM_FILTER":"lagre som egendefinert filter","PLACEHOLDER_FILTER_NAME":"Skriv filternavnet og trykk enter","APPLIED_FILTERS_NUM":"filters applied","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Type","STATUS":"Status","SEVERITY":"Alvorlighetsgrad","PRIORITIES":"Prioriteter","TAGS":"Etiketter","ASSIGNED_TO":"Tildelt til","ASSIGNED_USERS":"Assigned users","ROLE":"Rolle","CREATED_BY":"Laget av","CUSTOM_FILTERS":"Egendefinert filtre","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown syntaks hjelp"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Episk","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"Sprinter","VIEW_SPRINTS":"Se sprinter","ADD_SPRINTS":"Legg til sprinter","MODIFY_SPRINTS":"Rediger sprinter","DELETE_SPRINTS":"Slett sprinter"},"USER_STORIES":{"NAME":"Brukerhistorie","VIEW_USER_STORIES":"Se på brukerhistorier","ADD_USER_STORIES":"Legg til brukerhistorier","MODIFY_USER_STORIES":"Rediger brukerhistorier","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Slett brukerhistorier"},"TASKS":{"NAME":"Oppgaver","VIEW_TASKS":"Se på oppgaver","ADD_TASKS":"Legg til oppgave","MODIFY_TASKS":"Rediger oppgaver","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Slett oppgaver"},"ISSUES":{"NAME":"Hendelser","VIEW_ISSUES":"Vis hendelser","ADD_ISSUES":"Legg til hendelser","MODIFY_ISSUES":"Endre hendelser","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Slett hendelser"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Se wiki-sider","ADD_WIKI_PAGES":"Legg til wiki-sider","MODIFY_WIKI_PAGES":"Endre wiki-sider","DELETE_WIKI_PAGES":"Slett wiki-sider","VIEW_WIKI_LINKS":"Se wiki-lenker","ADD_WIKI_LINKS":"Legg til wiki-lenker","DELETE_WIKI_LINKS":"Slett wiki-lenker"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Logg på Taiga, prosjektledelsesplattformen for startups, smidige utviklere og designere som ønsker et enkelt og pent verktøy som gjør arbeidet en fornøyelse."},"AUTH":{"INVITED_YOU":"har invitert deg til å delta i prosjektet","NOT_REGISTERED_YET":"Ikke registrert?","REGISTER":"Registrer","CREATE_ACCOUNT":"opprett gratis konto her"},"LOGIN_COMMON":{"HEADER":"Jeg har allerede en konto","PLACEHOLDER_AUTH_NAME":"Brukernavn eller e-post (case sensitiv)","LINK_FORGOT_PASSWORD":"Glemte det?","TITLE_LINK_FORGOT_PASSWORD":"Har du glemt ditt passord?","ACTION_ENTER":"Enter","ACTION_SIGN_IN":"Login","PLACEHOLDER_AUTH_PASSWORD":"Passord (case sensitiv)","ALT_LOGIN":"Eller logg inn med"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Ifølge våre Oompa Loompaer er ditt brukernavn, e-post eller passord feil.","SUCCESS":"Våre Oompa Loompaer er glade, velkommen til Taiga ."},"REGISTER":{"PAGE_TITLE":"Registrer - Taiga","PAGE_DESCRIPTION":"Opprett en konto i Taiga , prosjektledelsesplattformen for startups, smidige utviklere og designere som ønsker et enkelt og pent verktøy som gjør arbeidet en fornøyelse."},"REGISTER_FORM":{"TITLE":"Registrer en ny Taiga konto (gratis)","PLACEHOLDER_NAME":"Velg et brukernavn (case sensitiv)","PLACEHOLDER_FULL_NAME":"Skriv inn fullt navn","PLACEHOLDER_EMAIL":"Din e-post","PLACEHOLDER_PASSWORD":"Set et passord (case sensitiv)","ACTION_SIGN_UP":"Registrer","TITLE_LINK_LOGIN":"Logg inn","LINK_LOGIN":"Er du allerede registrert? Logg inn"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Glemt passord - Taiga","PAGE_DESCRIPTION":"Skriv inn brukernavn eller e-post for å få et nytt passord, og du kan få tilgang til Taiga igjen."},"FORGOT_PASSWORD_FORM":{"TITLE":"Obs, har du glemt passordet ditt?","SUBTITLE":"Skriv inn ditt brukernavn eller e-post for å få et nytt","PLACEHOLDER_FIELD":"Brukernavn eller e-post","ACTION_RESET_PASSWORD":"Nullstill passord","LINK_CANCEL":"Eh, ta meg tilbake. Jeg tror jeg husker det.","SUCCESS_TITLE":"Sjekk innboksen din!","SUCCESS_TEXT":"\nVi har sendte deg en e-post med instruksjoner for å sette et nytt passord","ERROR":"I følge våre Oompa Loompas har du ikke registert deg ennå."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Endre ditt passord - Taiga","SECTION_NAME":"Endre passord","FIELD_CURRENT_PASSWORD":"Nåværende passord","PLACEHOLDER_CURRENT_PASSWORD":"Din nåværende passord (eller tomt hvis du ikke har ett)","FIELD_NEW_PASSWORD":"Nytt passord","PLACEHOLDER_NEW_PASSWORD":"Skriv inn nytt passord","FIELD_RETYPE_PASSWORD":"Gjenta nytt passord","PLACEHOLDER_RETYPE_PASSWORD":"Skriv inn passordet på nytt","ERROR_PASSWORD_MATCH":"Passordene er ikke like"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Opprett ett nytt Taiga pass","SUBTITLE":"Og hei, det kan være lurt å spise litt mer jern-rik mat, det er godt for hjernen din :P","PLACEHOLDER_NEW_PASSWORD":"Nytt passord","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Skriv inn passord på nytt","ACTION_RESET_PASSWORD":"Nullstill passord","ERROR":"Våre Oompa Loompaer finner ikke forespørselen om å gjenopprette passordet ditt. Prøv å å gjennopprette en gang til.","SUCCESS":"Oompa Loompaene våre lagret ditt nye passord.
    Prøv å logge inn med det."},"INVITATION":{"PAGE_TITLE":"Invitasjonsbekreftelse - Taiga","PAGE_DESCRIPTION":"Godta invitasjonen til å delta i et prosjekt i Taiga, prosjektledelsesplattformen for startups, smidige utviklere og designere som ønsker et enkelt og pent verktøy som gjør arbeidet fornøyelig."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Våre Oompa Loompas can ikke finne invitasjonen din.","SUCCESS":"Du er nå sluttet til prosjektet {{project_name}}, velkommen!"},"HOME":{"PAGE_TITLE":"Hjem - Taiga","PAGE_DESCRIPTION":"Taiga hjemmeside med dine viktigste prosjekter og alle dine tildelte og overvåkede brukerhistorier, oppgaver og hendelser","EMPTY_WORKING_ON":"Det føles tom, gjør det ikke? Start å jobbe med Taiga og du vil se her brukerhistorier, opggaver og hendelser du jobber med.","EMPTY_WATCHING":"Følg Brukerhistorier, Oppgaver, Hendelser i dine projekter og bli varslet når noe blir endret :)","EMPTY_PROJECT_LIST":"Du har ikke noen prosjekter enda","WORKING_ON_SECTION":"Arbeider med","WATCHING_SECTION":"Følger med på","DASHBOARD":"Prosjektoversikt"},"EPICS":{"TITLE":"EPISK","SECTION_NAME":"Episk","EPIC":"EPISK","PAGE_TITLE":"Episk - {{projectName}}","PAGE_DESCRIPTION":"Liste over episke hendelser i prosjekt {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ Legg til episk hendelse","UNASSIGNED":"Ikke tildelt"},"EMPTY":{"TITLE":"Det ser ut som det ikke finnes noen episke hendelser enda","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Stemmer","NAME":"Navn","PROJECT":"Prosjekt","SPRINT":"Sprint","ASSIGNED_TO":"Assigned","STATUS":"Status","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Blokkert","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Mine prosjekter - Taiga","PAGE_DESCRIPTION":"Liste med alle dine prosjekter du kan endre rekkefølgen på eller opprette et nytt.","MY_PROJECTS":"Mine prosjekter"},"ATTACHMENT":{"SECTION_NAME":"vedlegg","TITLE":"{{ fileName }} lastet opp {{ date }}","LIST_VIEW_MODE":"Listevisnings-modus","GALLERY_VIEW_MODE":"Gallerivisningsmodus","DESCRIPTION":"Skriv en kort beskrivelse","DEPRECATED":"(avviklet)","DEPRECATED_FILE":"Avviklet?","ADD":"Legg til nytt vedlegg. {{maxFileSizeMsg}}","DROP":"Slipp vedlegg her!","SHOW_DEPRECATED":"+ vis foreldete vedlegg","HIDE_DEPRECATED":"- skjul foreldete vedlegg","COUNT_DEPRECATED":"({{ counter }} avviklet)","MAX_UPLOAD_SIZE":"Maksimal størrelse for opplastning er {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Vi var ikke kapable til å laste opp '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Slett vedlegg...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"vedlegget '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Vi hadde ikke mulighet til å slette: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Forrige","NEXT":"Neste"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Rediger verdi","TITLE_ACTION_DELETE_VALUE":"Slett verdi","TITLE_ACTION_DELETE_TAG":"Slett etikett"},"HELP":"Trenger du hjelp? Sjekk ut vår hjelpeside!","PROJECT_DEFAULT_VALUES":{"TITLE":"Standard verdier","SUBTITLE":"Sett standard verdi for alle valgte felter."},"MEMBERSHIPS":{"TITLE":"Konfigurer medlemmer","PAGE_TITLE":"Medlemskap - {{projectName}}","ADD_BUTTON":"+ Nytt medlem","ADD_BUTTON_TITLE":"Legg til nytt medlem","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"Dersom du ønsker å legge til flere medlemmer, kontakt prosjekteier {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Dette prosjektet har nådd sin grense for ({{members}}) tillatte medlemmer. Dersom du ønsker å øke den grensen, venligst kontakt en administrator."},"PROJECT_EXPORT":{"TITLE":"Eksport","SUBTITLE":"Eksportér prosjektet for å lagre en backup, eller for å lage et nytt en basert på dette.","EXPORT_BUTTON":"Eksport","EXPORT_BUTTON_TITLE":"Eksporter ditt prosjekt","LOADING_TITLE":"Vi genererer din eksportfil","DUMP_READY":"Din data-dump-fil er klar!","LOADING_MESSAGE":"Vennligst ikke lukk denne siden.","ASYNC_MESSAGE":"Vi sender deg en epost når det er klart.","SYNC_MESSAGE":"Hvis nedlastningen ikke starter automatisk, klikk her.","ERROR":"Våre Oompa Loompaer har problemer med å generere din data dump. Vennligst prøv på nytt.","ERROR_BUSY":"Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter."},"MODULES":{"TITLE":"Moduler","EPICS":"Episk","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Hold styr på dine brukerhistorier for å vedlikeholde en organisert visning over kommende og prioritert arbeid.","NUMBER_SPRINTS":"Antatt antall sprinter","NUMBER_SPRINTS_HELP":"0 for et ubestemt antall","NUMBER_US_POINTS":"Antatt total av brukerhistoriepoeng","NUMBER_US_POINTS_HELP":"0 for et ubestemt antall","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organiser prosjektet ditt på en avabalansert måte med dette panelet.","ISSUES":"Hendelser","ISSUES_DESCRIPTION":"Forfølg feil, spørsmål og forbedringer relatert til ditt prosjekt. Ikke gå glipp av noe!","WIKI":"Wiki","WIKI_DESCRIPTION":"Legg til, endre eller slette innhold i samarbeid med andre. Dette er det rette stedet for din prosjektdokumentasjon.","MEETUP":"Møtes","MEETUP_DESCRIPTION":"Velg ditt videokonferansesystem","SELECT_VIDEOCONFERENCE":"Velg et videokonferansesystem","SALT_CHAT_ROOM":"Legg et prefiks til navnet til chatterommet","JITSI_CHAT_ROOM":"Jitsl","APPEARIN_CHAT_ROOM":"Vises","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Egendefinert","URL_CHAT_ROOM":"URL til ditt chatrom"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Prosjektprofil - {{projectName}}","PROJECT_DETAILS":"Prosjektdetaljer","PROJECT_NAME":"Prosjektnavn","TAGS":"Etiketter","DESCRIPTION":"Beskrivelse","RECRUITING":"Leter dette prosjektet etter folk?","RECRUITING_MESSAGE":"Hva leter du etter?","RECRUITING_PLACEHOLDER":"Definer profilene du leter etter","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Offentlig prosjekt","PRIVATE_PROJECT":"Privat prosjekt","PRIVATE_OR_PUBLIC":"Hva er forskjellen mellom offentlige og private prosjekt?","DELETE":"Slett dette prosjektet","CHANGE_LOGO":"Endre logo","ACTION_USE_DEFAULT_LOGO":"Bruk standardbilde","MAX_PRIVATE_PROJECTS":"Du har nådd maksimalt antall private prosjekter som tillates med din gjeldende plan","MAX_PRIVATE_PROJECTS_MEMBERS":"Det maksimale antall medlemmer for private prosjekter er overskredet","MAX_PUBLIC_PROJECTS":"Dessverre , du har nådd det maksimale antallet offentlige prosjekter som tillates av din gjeldende plan","MAX_PUBLIC_PROJECTS_MEMBERS":"Prosjektet overskrider maksimalt antall medlemmer for offentlige prosjekter","PROJECT_OWNER":"Prosjekteier","REQUEST_OWNERSHIP":"Be om eierskap","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Ønsker du å bli den nye prosjekteieren?","REQUEST_OWNERSHIP_DESC":"Be om at den nåværende prosjekteieren {{name}} overfører eierskapet av dette prosjektet til deg.","REQUEST_OWNERSHIP_BUTTON":"Be om","REQUEST_OWNERSHIP_SUCCESS":"Vi vil varsle prosjekteieren","CHANGE_OWNER":"Endre eier","CHANGE_OWNER_SUCCESS_TITLE":"Ok, din henvendelse har blitt sendt!","CHANGE_OWNER_SUCCESS_DESC":"Vi vil varsle deg via epost hvis anmodningen om eierskap til prosjektet ble godtatt eller avslått"},"REPORTS":{"TITLE":"Rapporter","SUBTITLE":"Eksporter dine prosjektdata i CSV-format og lag dine egne rapporter.","DESCRIPTION":"Last ned en CSV fil eller kopier den genererte URL'en og åpne den i din favoritt tekstbehandler for å lage dine egne prosjektdatarapporter. Du vil kunne visualisere og analysere alle dine data enkelt.","HELP":"Hvordan bruke dette i mitt eget regneark?","REGENERATE_TITLE":"Endre URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"brukerhistorie-rapporter","SECTION_TITLE_TASK":"oppgaverapport","SECTION_TITLE_ISSUE":"Hendelsesrapport","DOWNLOAD":"Last ned CSV","URL_FIELD_PLACEHOLDER":"Venligst regenerer CSV url","TITLE_REGENERATE_URL":"Regenerer CSV url","ACTION_GENERATE_URL":"Generer URL","ACTION_REGENERATE":"Generer på nytt","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Slett"},"CUSTOM_FIELDS":{"TITLE":"Egendefinerte felter","SUBTITLE":"Spesifiser egendefinerte felter for dine brukerhistorier, oppgaver og hendelser","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"Brukerhistorier tilpassede felter","US_ADD":"Legg til et egendefinert felt i Brukerhistorier","TASK_DESCRIPTION":"Oppgaver egendefinerte felter","TASK_ADD":"Legg til et egendefinert felt i flere oppgaver","ISSUE_DESCRIPTION":"Hendelser egendefinerte felter","ISSUE_ADD":"Legg til et egendefinert felt i Hendelser","FIELD_TYPE_TEXT":"Tekst","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Flere linjer","FIELD_TYPE_DATE":"Dato","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Prosjekt verdier - {{projectName}}","REPLACEMENT":"Alle elementer med denne verdien vil bli endre til","ERROR_DELETE_ALL":"Du kan ikke slette alle verdier."},"PROJECT_VALUES_POINTS":{"TITLE":"Poeng","SUBTITLE":"Spesifiser poengene dine brukerhistorier kan estimeres som","US_TITLE":"BH poeng","ACTION_ADD":"Legg til nytt poeng"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioriteter","SUBTITLE":"Angi prioriteringen som dine hendelser vil ha","ISSUE_TITLE":"Hendelse prioriteringer","ACTION_ADD":"Legg til ny prioritet"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Alvorlighetsgrad","SUBTITLE":"Spesifiser alvorlighetsgraden som hendelsen vil ha","ISSUE_TITLE":"Hendelse alvorlighetsgrad","ACTION_ADD":"Legg til ny alvorlighetsgrad"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"Angi statusene som dine brukerhistorier, oppgaver og hendelser vil følge","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Oppgave Statuser","ISSUE_TITLE":"Hendelsesstatuser"},"PROJECT_VALUES_TYPES":{"TITLE":"Typer","SUBTITLE":"Angi hvilke typer dine hendelser kan være","ISSUE_TITLE":"Hendelsestyper","ACTION_ADD":"Legg til {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiketter","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Legg til etikett","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Legg til ny status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roller - {{projectName}}","WARNING_NO_ROLE":"Vær forsiktig, ingen roller i ditt prosjekt vil kunne estimere poengverdier for brukerhistorier","HELP_ROLE_ENABLED":"Når aktivert; medlemmer tildelt denne rollen vil kunne estimere poengverdier for brukerhistorier","DISABLE_COMPUTABLE_ALERT_TITLE":"Er du sikker på at du vil deaktivere denne rollens beregninger?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Hvis du deaktiverer estimeringstillatelser for rollen {{roleName}} vil alle tidligere anslag gjort av denne rollen bli fjernet","COUNT_MEMBERS":"{{ role.members_count }} medlemmer med denne rollen","TITLE_DELETE_ROLE":"Slett rolle","REPLACEMENT_ROLE":"Alle brukerene med denne rollen vil bli flyttet til","WARNING_DELETE_ROLE":"Vær forsiktig! Alle rolle-estimatene vil bli fjernet","ERROR_DELETE_ALL":"Du kan ikke slette alle verdier","EXTERNAL_USER":"Ekstern bruker","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Hemmelig nøkkel","PAYLOAD_URL":"Nyttelast URL","VALID_IPS":"Gyldige opprinnelses IP-adresser (atskilt med,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket forespørsler er ikke signert så den beste måten å verifisere opphavet på er med IP. Hvis feltet er tomt blir det ingen IP validering."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"GitHub-forespørsler er ikke signert så den beste måten å verifisere opprinnelsen på er med IP. Hvis feltet er tomt blir det ingen IP validering."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webkoblinger","ADD_NEW":"Legg til en ny webkobling","TYPE_NAME":"Skriv inn tjenestenavn","TYPE_PAYLOAD_URL":"Skriv inn tjenestens payload url","TYPE_SERVICE_SECRET":"Skriv inn tjenesten hemmelige nøkkel","SAVE":"Lagre webkobling","CANCEL":"Fjern Webkobling","SHOW_HISTORY":"(Vis historie)","TEST":"Test Webkobling","EDIT":"Rediger Webkobling","DELETE":"Slett Webkobling","REQUEST":"Be om","RESEND_REQUEST":"Send forespørsel på nytt","HEADERS":"Overskrifter","PAYLOAD":"Payload","RESPONSE":"Respons","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Skjul historikk)","ACTION_HIDE_HISTORY_TITLE":"Skjul historikk detaljer","ACTION_SHOW_HISTORY":"(Vis historie)","ACTION_SHOW_HISTORY_TITLE":"Vis historiedetaljer","WEBHOOK_NAME":"Webkobling \"{{name}}\""},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{Seksjon navn}} - Egendefinerte felter - {{prosjekt Name}}","ADD":"Legg til et egendefinert felt","EDIT":"Endre Egendefinert Felt","DELETE":"Slett Egendefinert felt","SAVE_TITLE":"Lagre Egendefinert Felt","CANCEL_TITLE":"Avbryt opprettelsen","SET_FIELD_NAME":"Sett navnet til ditt egendefinerte felt","SET_FIELD_DESCRIPTION":"Gi en beskrivelse til ditt egendefinerte felt","FIELD_TYPE_DEFAULT":"-- velg en --","ACTION_UPDATE":"Oppdater Egendefinert Felt","ACTION_CANCEL_EDITION":"Avbryt redigering"},"MEMBERSHIP":{"COLUMN_MEMBER":"Medlem","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rolle","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Aktiv","STATUS_PENDING":"Avventer","DELETE_MEMBER":"Slett medlem","RESEND":"Send igjen","SUCCESS_SEND_INVITATION":"Vi har sendt invitasjonen på nytt til '{{email}}'.","SUCCESS_DELETE":"Vi har slettet {{message}}.","ERROR_DELETE":"Vi har ikke vært i stand til å slette {{message}}.","DEFAULT_DELETE_MESSAGE":"invitasjonen til {{epost}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Standardverdi for poengvelger","LABEL_TASK_STATUS":"Standardverdi for oppgave statusvelger","LABEL_ISSUE_TYPE":"Standard verdi for hendelses type-velger","LABEL_ISSUE_STATUS":"Standard verdi for hendelse statusvelger","LABEL_PRIORITY":"Standardverdi for prioritetsvelger","LABEL_SEVERITY":"Standardverdi for alvorlighetsgradsvelgeren"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Skriv et navn til den nye statusen","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Skriv et navn til det nye elementet"},"US_STATUS":{"ACTION_ADD_STATUS":"Legg til ny status","IS_ARCHIVED_COLUMN":"Arkivert","IS_CLOSED_COLUMN":"Lukket","WIP_LIMIT_COLUMN":"WIP Grense","PLACEHOLDER_WRITE_NAME":"Skriv et navn til den nye statusen"},"MENU":{"PROJECT":"Prosjekt","ATTRIBUTES":"Egenskaper","MEMBERS":"Medlemmer","PERMISSIONS":"Tilganger","INTEGRATIONS":"Integrasjoner"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Poeng","PRIORITIES":"Prioriteter","SEVERITIES":"Alvorlighetsgrad","TYPES":"Typer","CUSTOM_FIELDS":"Egendefinerte felter","TAGS":"Etiketter","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roller","ACTION_NEW_ROLE":"+ Ny rolle","TITLE_ACTION_NEW_ROLE":"Legg til ny rolle"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Har du lyst til å bli den nye prosjekteieren?","PRIVATE":"Privat","ACCEPTED_PROJECT_OWNERNSHIP":"Gratulerer! Du er nå den nye prosjekteieren.","REJECTED_PROJECT_OWNERNSHIP":"OK. Vi kontakter den nåværende prosjekteieren","ACCEPT":"Aksepter","REJECT":"Avvis","PROPOSE_OWNERSHIP":"{{owner}}, den nåværende eiere av prosjekt {{project}} har spurt om du vil bli den nye prosjekteieren.","ADD_COMMENT":"Har du lyst til å gi en kommentar til prosjekteieren?","UNLIMITED_PROJECTS":"Ubegrenset","OWNER_MESSAGE":{"PRIVATE":"Husk, du kan eie opp til {{maxProjects}} private prosjekter. Du eier for tiden {{currentProjects}} private prosjekter","PUBLIC":"Husk, du kan eie opp til {{maxProjects}} offentlige prosjekter. Du eier foreløpig {{currentProjects}} offentlige prosjekter"},"CANT_BE_OWNED":"For øyeblikket kan du ikke bli eier av et prosjekt av denne typen. Dersom du ønsker å bli eier av dette prosjektet, venligst kontakt en administrator så de kan endre dine kontoinstillinger slik at du kan eie et prosjekt."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Endre profil","CLOSED_US":"Lukket historie","PROJECTS":"Prosjekter","PROJECTS_EMPTY":"{{username}} har ikke prosjekter enda","CONTACTS":"Kontakter","CONTACTS_EMPTY":"{{username}} har ingen kontakter enda","CURRENT_USER_CONTACTS_EMPTY":"Du har ingen kontakter enda","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Personene som du jobber sammen med i Taiga vil automatisk bli dine kontakter","TABS":{"ACTIVITY_TAB":"Tidslinje","ACTIVITY_TAB_TITLE":"Vis all aktiviteten til denne brukeren","PROJECTS_TAB":"Prosjekter","PROJECTS_TAB_TITLE":"Liste over alle prosjekter som brukeren er medlem av","LIKES_TAB":"Liker","LIKES_TAB_TITLE":"List alle \"liker\" gjort av denne brukeren","VOTES_TAB":"Stemmer","VOTES_TAB_TITLE":"List alle stemmer gitt av denne brukeren","WATCHED_TAB":"Overvåket","WATCHED_TAB_TITLE":"List alle element overvåket av denne brukeren","CONTACTS_TAB":"Kontakter","CONTACTS_TAB_TITLE":"List alle kontakter laget av denne brukeren"}},"PROFILE_SIDEBAR":{"TITLE":"Din profil","DESCRIPTION":"Alle kan se alt du gjør og hva du jobber med. Legg til en informativ biografi av deg selv.","ADD_INFO":"Endre bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Skriv noe...","FILTER_TYPE_ALL":"Alle","FILTER_TYPE_ALL_TITLE":"Vis alle","FILTER_TYPE_PROJECTS":"Prosjekter","FILTER_TYPE_PROJECTS_TITLE":"Vis kun prosjekter","FILTER_TYPE_EPICS":"Episk","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Historier","FILTER_TYPE_USER_STORIES_TITLE":"Vis kun brukerhistorier","FILTER_TYPE_TASKS":"Oppgaver","FILTER_TYPE_TASKS_TITLE":"Vis kun oppgaver","FILTER_TYPE_ISSUES":"Hendelser","FILTER_TYPE_ISSUES_TITLE":"Vis kun hendelser","EMPTY_TITLE":"Det ser ut som om det ikke er noe å vise her."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reorganiser prosjektene dine etter de mest brukte.
    De topp 10 mest brukte prosjektene vil vises i navigasjonslenken på toppen.","PRIVATE":"Privat prosjekt","LOOKING_FOR_PEOPLE":"Dette prosjekter søker etter mennesker","FANS_COUNTER_TITLE":"{total, plural, one{en fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{en følger} other{# følgere}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{ett medlem} other{# medlemmer}}","BLOCKED_PROJECT":{"BLOCKED":"Blokkert prosjekt","THIS_PROJECT_IS_BLOCKED":"Dette prosjektet er midlertidig blokkert","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"For å avblokkere dine prosjekter, kontakt administratoren"},"SECTION":{"SEARCH":"Søk","TIMELINE":"Tidslinje","EPICS":"Episk","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Hendelser","WIKI":"Wiki","TEAM":"Team","MEETUP":"Møtes","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Opprett prosjekt","MANAGE_PROJECTS":"Håndter prosjekter","TITLE_CREATE_PROJECT":"Opprett prosjekt","HELP_TITLE":"Taiga Brukerstøtte","HELP":"Hjelp","HOMEPAGE":"Hjemmeside","FEEDBACK_TITLE":"Gi tilbakemelding","FEEDBACK":"Tilbakemelding","NOTIFICATIONS_TITLE":"Endre dine varslingsinstillinger","NOTIFICATIONS":"Varsler","VIEW_PROFILE_TITLE":"Vis Profil","VIEW_PROFILE":"Vis Profil","EDIT_PROFILE_TITLE":"Rediger din profil","EDIT_PROFILE":"Rediger Profil","CHANGE_PASSWORD_TITLE":"Endre passord","CHANGE_PASSWORD":"Endre passord","DASHBOARD_TITLE":"Dashbord","DISCOVER_TITLE":"Oppdag populære prosjekter","DISCOVER":"Oppdag"},"LIKE_BUTTON":{"LIKE":"Liker","LIKED":"Likt","UNLIKE":"Ikke lik","BUTTON_TITLE":"Like eller ikke like dette prosjektet","COUNTER_TITLE":"{total, plural, one{en fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Overvåk dette prosjektet og sett varslingsstrategi","WATCH":"Følg","WATCHING":"Følger med på","COUNTER_TITLE":"{total, plural, one{en følger} other{# følgere}}","OPTIONS":{"NOTIFY_ALL":"Motta alle varsler","NOTIFY_ALL_TITLE":"Motta alle varsler for dette prosjektet","NOTIFY_INVOLVED":"Kun involvert","NOTIFY_INVOLVED_TITLE":"Motta varsler kun når du er involvert","UNWATCH":"Ikke overvåk","UNWATCH_TITLE":"Ikke overvåk dette prosjektet"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Opprett prosjekt","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Importer prosjekt","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Offentlig Prosjekt","PRIVATE_PROJECT":"Privat Prosjekt"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Våre Oompa Loompaer importerer ditt prosjekt","ASYNC_IN_PROGRESS_MESSAGE":"Denne prosessen kan ta noen minutter
    Vi vil sende deg en e-post når den er klar","UPLOAD_IN_PROGRESS_MESSAGE":"Opplastet {{uploadedSize}} av {{totalSize}}","ERROR":"Våre Oompa Loompaer har problemer med å importere din data-dump. Vennligst prøv på nytt.","ERROR_TOO_MANY_REQUEST":"Beklager, våre Oompa Loomper er svært opptatt akkuratt nå. Venligst prøv igjen om noen få minutter.","ERROR_MESSAGE":"Våre Oompa Loompaer har problemer med å importere din data-dump: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) er for stor for våre Oompa Loompaer. Prøv med en mindre enn ({{maxFileSize}})","SYNC_SUCCESS":"Importen av ditt prosjekt var vellykket","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Prosjektmedlemmer","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Tildel","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"søk","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Dessverre, din nåværende plan tillater ikke private prosjekter","DESC":"Prosjektet du prøver å importere er privat. Dessverre tillater ikke din gjeldende flere private prosjekter."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Dessverre din gjeldende plan tillatee ikke flere offentlige prosjekter","DESC":"Prosjektet du prøver å importere er offentlig. Dessverre, din nåværende plan tillater ikke offentlige prosjekter."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Din nåværende plan tillater et maksimalt antall av {{max_memberships}} medlemmer per private prosjekt"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Din nåværende plan tillater maksimum {{max_memberships}} medlemmer per offentlige prosjekt."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Dessverre, din nåværende plan tillater ikke flere private prosjekter eller mer enn {{max_memberships}} medlemmer per private prosjekt","DESC":"Prosjektet som du prøver å importere er privat og har {{members}} medlemmer."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Dessverre, din nåværende plan tillater ikke flere offentlige prosjekter eller en økning til fler enn {{max_memberships}} medlemmer per offentlige prosjekt","DESC":"Prosjektet du prøver å importere er offentlig og har fler enn {{members}} medlemmer."}},"IN_PROGRESS":{"TITLE":"Importer prosjekt","DESCRIPTION":"Denne prosessen kan ta en stund, vennligst hold vinduet åpent."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Hendelser","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Er du sikker på at du vil slette din Taiga konto?","CANCEL":"Tilbake til instillinger","ACCEPT":"Slett konto","BLOCK_PROJECT":"Merk at alle prosjektene der du står som eier vil bli blokkert etter at du sletter din konto. Dersom du ikke ønsker dette, overfør eierskapet til et annet medlem før du sletter kontoen."},"DELETE_PROJECT":{"TITLE":"Slett prosjekt","QUESTION":"Er du sikker på at du vil slette dette prosjektet?","SUBTITLE":"All prosjekt-data (burkerhistorier, oppgaver, saker, sprinter og wiki-sider) vil gå tapt! :(","CONFIRM":"Ja, jeg er virkelig sikker"},"ASSIGNED_TO":{"SELECT":"Velg ansvarlig","SEARCH":"Søk etter brukere"},"ADD_MEMBER":{"TITLE":"Nytt medlem","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Add email","REMOVE":"Remove","INVITE":"Invite","CHOOSE_ROLE":"Choose a role","PLACEHOLDER_INVITATION_TEXT":"(Valgfritt) Legg til en egen tekst til invitasjonen. Fortell dine nye medlemmer noe fantastisk ;-)","HELP_TEXT":"Hvis brukere allerede er registrerte på Taiga, vil de bli lagt til automatisk. Ellers vil de motta en invitasjon."},"FEEDBACK":{"TITLE":"Fortell oss noe...","COMMENT":"...en feil, noen forslag, noe kult... eller til og med ditt værste mareritt med Taiga","ACTION_SEND":"Gi tilbakemelding"},"SEARCH":{"TITLE":"Søk","PLACEHOLDER_SEARCH":"Hva ser du etter?"},"ADD_EDIT_SPRINT":{"TITLE":"Ny sprint","PLACEHOLDER_SPRINT_NAME":"sprint navn","PLACEHOLDER_SPRINT_START":"Estimert Start","PLACEHOLDER_SPRINT_END":"Estimert Slutt","ACTION_DELETE_SPRINT":"Vil du slette denne sprinten?","TITLE_ACTION_DELETE_SPRINT":"slett sprint","LAST_SPRINT_NAME":"siste sprinten er {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Legg til hendelse","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Slett sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Valgfritt) Legg til en egen tekst til invitasjonen. Fortell dine nye medlemmer noe fantastisk ;-)","PLACEHOLDER_TYPE_EMAIL":"Skriv en epost","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Dessverre, dette prosjektet kan ikke stå uten en eier","CURRENT_USER_OWNER":{"DESC":"Du er den nåværende eieren av dette prosjektet. Før du forlater, vennligst overfør eierskapet til noen andre.","BUTTON":"Endre eieren av prosjektet"},"OTHER_USER_OWNER":{"DESC":"Dessverre, du kan ikke slette et medlem som også er den nåværende prosjekteieren. Vennligst tildel eierskapet til et annet medlem først.","BUTTON":"Be om endring av prosjekteier"}},"CHANGE_OWNER":{"TITLE":"Hvem vil du at skal være den nye eieren av prosjektet?","ADD_COMMENT":"Legg til kommentar","BUTTON":"Spør dette prosjektetmedlemet om å bli den nye prosjekteieren"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"What's the project?","CHOOSE_PROJECT_FROM":"What's the project?","SUBJECT":"Subjekt","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"Ny brukerhistorie","EXISTING_USERSTORY":"Existing user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Subjekt","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Brukerhistorie {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Ferdigstilt: {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} av {{userStoryTotalTasks}} lukkede hendelser). Poeng: {{userStoryPoints}}. Beskrivelse: {{userStoryDescription}}","SECTION_NAME":"Brukerhistorie","LINK_TASKBOARD":"Oppgavetavle","TITLE_LINK_TASKBOARD":"Gå til oppgavetavlen","TOTAL_POINTS":"totale poeng","ADD":"+ Legg til en ny brukerhistorie","ADD_BULK":"Legg til mange nye Brukerhistorier","PROMOTED":"Denne Brukerhistorien har blitt oppgradert fra Hendelse:","TITLE_LINK_GO_TO_ISSUE":"Gå til hendelse","TITLE_DELETE_ACTION":"Slett Brukerhistorie","LIGHTBOX_TITLE_BLOKING_US":"Blokkerer oss","NOT_ESTIMATED":"Ikke estimert","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Mer info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Close","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Comment deleted by {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Older first","RECENT_FIRST":"Recent first","COMMENT":"Kommentar","EDITED_COMMENT":"Edited:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Skriv en ny kommentar her","SHOW_DELETED":"Vis slettede kommentarer","HIDE_DELETED":"Skjul slettede kommentarer","DELETE":"Slett kommentar","RESTORE":"Gjennoprett kommentarer","HISTORY":{"TITLE":"Aktivitet"}},"ACTIVITY":{"TITLE":"Aktivitet","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"tags added:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"new attachment:","DELETED_ATTACHMENT":"deleted attachment:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Team behov","CLIENT_REQUIREMENT":"Klientkrav","BLOCKED":"Blokkert","VALUES":{"NOT_SET":"not set","UNASSIGNED":"ikke tildelt"},"FIELDS":{"SUBJECT":"subjekt","DESCRIPTION":"beskrivelse","PRIORITY":"prioritet","SEVERITY":"alvorlighetsgrad","STATUS":"status","TYPE":"type","ASSIGNED_TO":"tildelt til","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"farge"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Backlogpanelet, med brukerhistorier og sprinter for prosjektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Tilpass din backlog-graf","CUSTOMIZE_GRAPH_TEXT":"For å ha en flott graf som hjelper deg å følge utviklingen av prosjektet må du sette opp poeng og sprinter gjennom","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Sett opp poengene og sprintene gjennom Admin-panelet","MOVE_US_TO_CURRENT_SPRINT":"Gå til nåværende sprint","MOVE_US_TO_LATEST_SPRINT":"Flytt til siste Sprint","EMPTY":"Backlogen er tom!","CREATE_NEW_US":"Opprett en ny BH","CREATE_NEW_US_EMPTY_HELP":"Det kan være lurt å opprette en ny brukerhistorie","EXCESS_OF_POINTS":"Overskudd av poeng","PENDING_POINTS":"Ventende poeng","CLOSED_POINTS":"lukket","COMPACT_SPRINT":"Kompakt Sprint","GO_TO_TASKBOARD":"Gå til oppgavepanelet for {{::name}}","EDIT_SPRINT":"Rediger Sprint","TOTAL_POINTS":"total","STATUS_NAME":"Status Navn","SORTABLE_FILTER_ERROR":"Du kan ikke slippe på backlog når filtere er åpen","DOOMLINE":"Prosjektomfang [Dommedagslinje]","CHART":{"XAXIS_LABEL":"Sprinter","YAXIS_LABEL":"Poeng","OPTIMAL":"Optimal mengde avventede poeng for sprint \"{{sprintName}}\" skal være {{value}}","REAL":"Ekte avventende poeng for sprint \"{{sprintName}}\" er {{value}}","INCREMENT_TEAM":"Inkrementelle poeng ved gruppekrav for sprint \"{{sprintName}}\" er {{value}}","INCREMENT_CLIENT":"Inkrementelle poeng med klientkrav for sprint \"{{sprintNam}}\" er {{verdi}}"},"TAGS":{"TOGGLE":"Endre synligheten til etiketter","SHOW":"Vis etiketter","HIDE":"Skjul etiketter"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Brukerhistorie","TITLE_COLUMN_POINTS":"Velg visning per Rolle"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"total
    poeng","COMPLETED_POINTS":"fullførte
    poeng","OPEN_TASKS":"åpne
    oppgaver","CLOSED_TASKS":"lukkede
    oppgaver","IOCAINE_DOSES":"iocaine
    doser","SHOW_STATISTICS_TITLE":"Vis statistikker","TOGGLE_BAKLOG_GRAPH":"Vis/Skjul Burndown Graf","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"prosjekt
    poeng","DEFINED_POINTS":"definerte
    poeng","CLOSED_POINTS":"lukkede
    poeng","POINTS_PER_SPRINT":"poeng /
    sprint"},"FILTERS":{"TOGGLE":"Veksle filteres synlighet","HIDE":"Skjul Filtere","SHOW":"Vis Filtere"},"SPRINTS":{"TITLE":"SPRINTER","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Sprint Oppgavepanel","TITLE_LINK_TASKBOARD":"Gå til Oppgavepanel for \"{{name}}\"","EMPTY":"Det er ingen sprinter enda","WARNING_EMPTY_SPRINT_ANONYMOUS":"Denne sprinten har ingen Brukerhistorier","WARNING_EMPTY_SPRINT":"Slipp Brukerhistorier her fra din backlog for å starte en ny sprint","TITLE_ACTION_NEW_SPRINT":"Legg til ny sprint","TEXT_ACTION_NEW_SPRINT":"Det kan være lurt å lage en ny sprint i prosjektet ditt","ACTION_SHOW_CLOSED_SPRINTS":"Vis lukkede sprinter","ACTION_HIDE_CLOSED_SPRINTS":"Skjul lukkede sprinter"}},"ERROR":{"TEXT1":"Noe skjedde og våre Oompa Loompaer jobber med det.","NOT_FOUND":"Ikke funnet","NOT_FOUND_TEXT":"Error 404. Siden du ser etter eksisterer ikke lenger. Kanskje du kan returnere til TAIGA-hjemmesiden og se om du kan finne det du leter etter.","PERMISSION_DENIED":"Tilgang nektet","PERMISSION_DENIED_TEXT":"Du har ikke tilgang til å aksessere denne siden","VERSION_ERROR":"Noen andre som bruker Taiga har endret dette før, og våre Oompa Loompaer kan ikke lagre dine endringer. Vennligst last om og lagre dine endringer igjen (de vil gå tapt)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint oppgavepanel - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} til {{endDate}}) med {{projectName}}. Fullført {{completedPercentage}}% ({{completedPoints}} av {{totalPoints}} poeng). {{openTasks}} åpne oppgaver av {{totalTasks}}.","SECTION_NAME":"Oppgavetavle","TITLE_ACTION_ADD":"Legg til en ny oppgave","TITLE_ACTION_ADD_BULK":"Legg til noen nye Oppgaver samlet","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Tildel oppgave","PLACEHOLDER_CARD_TITLE":"Dette kunne vært en oppgave","PLACEHOLDER_CARD_TEXT":"Splitt historier inn i oppgaver og følg dem separat","TABLE":{"COLUMN":"Brukerhistorie","TITLE_ACTION_FOLD":"Slå sammen kolonne","TITLE_ACTION_UNFOLD":"Brett ut kolonne","TITLE_ACTION_FOLD_ROW":"Brett Rad","TITLE_ACTION_UNFOLD_ROW":"Brett ut Rad","FIELD_POINTS":"poeng","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Dager","YAXIS_LABEL":"Poeng","OPTIMAL":"Optimal mengde ventende poeng for dagen {{formattedDate}} bør være {{roundedValue}}","REAL":"Reelle ventende poeng for dagen {{formattedDate}} er {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Oppgave {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Beskrivelse: {{taskDescription}}","SECTION_NAME":"Oppgave","LINK_TASKBOARD":"Oppgavetavle","TITLE_LINK_TASKBOARD":"Gå til oppgavetavlen","PLACEHOLDER_SUBJECT":"Skriv inn subjektet til den nye oppgaven","TITLE_SELECT_STATUS":"Status Navn","OWNER_US":"Denne oppgaven tilhører","TITLE_LINK_GO_OWNER":"Gå til brukerhistorie","TITLE_DELETE_ACTION":"Slett oppgave","LIGHTBOX_TITLE_BLOKING_TASK":"Blokkerende oppgave","FIELDS":{"IS_IOCAINE":"Er Iocaine"},"TITLE_ACTION_IOCAINE":"Føler du deg litt overveldet av en oppgave? Sørg for at andre vet om det ved å klikke på \"Iocane\" når du redigerer en oppgave. Det er mulig å bli immun mot denne (fiktive) dødelige giften ved å konsumere små mengder over tid, akkurat som det er mulig å bli bedre på det du gjør ved av og til å ta på deg ekstra utfordringer!"},"NOTIFICATION":{"OK":"Alt er ok","WARNING":"Opps, noe skjedde...","WARNING_TEXT":"Våre Oompa Loompaer er lei seg :-( , dine endringer ble ikke lagret!","SAVED":"Våre Oompa Loompaer har lagret alle endringer!","CLOSE":"Lukk melding","MAIL":"Varsler per Epost","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Er du sikker på at du vil slette?"},"CANCEL_ACCOUNT":{"TITLE":"Kanseler din konto","SUBTITLE":"Vi er lei oss for at du forlater Taiga, vi håper du nøt oppholdet :)","PLACEHOLDER_INPUT_TOKEN":"kanseler konto token","ACTION_LEAVING":"Ja, jeg går!","SUCCESS":"Våre Oompa Loompaer har slettet din konto"},"CHANGE_EMAIL_FORM":{"TITLE":"Bytt din epost","SUBTITLE":"Ett klikk til og din epost vil være oppdatert!","PLACEHOLDER_INPUT_TOKEN":"skift epost token","ACTION_CHANGE_EMAIL":"Endre epost","SUCCESS":"Våre Oompa Loompaer oppdaterte din epost"},"ISSUES":{"PAGE_TITLE":"Hendelser - {{projectName}}","PAGE_DESCRIPTION":"Hendelsespanelet for prosjekt {{projectName}}: {{projectDescription}}","SECTION_NAME":"Hendelse","ACTION_NEW_ISSUE":"+ NY HENDELSE","ACTION_PROMOTE_TO_US":"Oppgrader til Brukerhistorie","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Denne hendelsen har blitt oppgradert til BH","EXTERNAL_REFERENCE":"Denne hendelsen har blitt opprettet av","GO_TO_EXTERNAL_REFERENCE":"Gå til opphav","ACTION_DELETE":"Slett hendelse","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blokker hendelse","LINK_TASKBOARD":"Oppgavetavle","TITLE_LINK_TASKBOARD":"Gå til oppgavetavlen","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioritet","SEVERITY":"Alvorlighetsgrad","TYPE":"Type"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Oppgrader denne henelsen til en ny brukerhistorie","MESSAGE":"Er du sikker på at du vil lage en ny BH fra denne hendelsen?"},"TABLE":{"COLUMNS":{"TYPE":"Type","SEVERITY":"Alvorlighetsgrad","PRIORITY":"Prioritet","SUBJECT":"Subjekt","VOTES":"Stemmer","STATUS":"Status","MODIFIED":"Modified","ASSIGNED_TO":"Tildelt til"},"TITLE_ACTION_CHANGE_STATUS":"Endre status","TITLE_ACTION_ASSIGNED_TO":"Tildelt til","BLOCKED":"Blokkert","EMPTY":{"TITLE":"Det er ingen hendelser å jobbe med :-)","SUBTITLE":"Oppdaget du en hendelse?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Hendelse {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Type: {{issueType}}, Prioritet: {{issuePriority}}. Alvorlighetsgrad: {{issueSeverity}}. Beskrivelse: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Kanbanpanelet, med brukerhistorier til prosjektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Slå sammen kolonne","TITLE_ACTION_UNFOLD":"Brett ut kolonne","TITLE_ACTION_ADD_US":"Legg til ny Brukerhistorie","TITLE_ACTION_ADD_BULK":"Legg til ny samling","ACTION_SHOW_ARCHIVED":"Vis arkiverte","ACTION_HIDE_ARCHIVED":"Skjul arkivert","HIDDEN_USER_STORIES":"Brukerhistoriene med denne statusen er skjult som standard","PLACEHOLDER_CARD_TITLE":"Dette er dine Brukerhistorier","PLACEHOLDER_CARD_TEXT":"Historier kan også ha underoppgaver med egne krav"},"SEARCH":{"PAGE_TITLE":"Søk - {{projectName}}","PAGE_DESCRIPTION":"Søk etter hva som helst, brukerhistorier, hendelser, oppgaver or wiki-sider i prosjektet {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Episk","FILTER_USER_STORIES":"Brukerhistorie","FILTER_ISSUES":"Hendelser","FILTER_TASKS":"Oppgaver","FILTER_WIKI":"Wiki-sider","PLACEHOLDER_SEARCH":"Søk i...","TITLE_ACTION_SEARCH":"søk","EMPTY_TITLE":"Det ser ut som ingenting ble funnet med søkekriteriene dine","EMPTY_DESCRIPTION":"Kanskje prøve en av fanene ovenfor eller søk på nytt"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Teampanelet for å vise alle medlemmene i prosjektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Team","PLACEHOLDER_INPUT_SEARCH":"Søk på fult navn---","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Lukkede hendelser","COLUMN_IOCAINE":"Iocaine Drikker","EXPLANATION_COLUMN_IOCAINE":"Iocainedoser inntatt","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki-sider redigert","COLUMN_BUG_HUNTER":"Bug Jeger","EXPLANATION_COLUMN_BUG_HUNTER":"Hendelser som er medlt inn","COLUMN_NIGHT_SHIFT":"Nattevakt","EXPLANATION_COLUMN_NIGHT_SHIFT":"Oppgaver lukket","COLUMN_TOTAL_POWER":"Total Styrke","EXPLANATION_COLUMN_TOTAL_POWER":"Totalt Antall Poeng","SECTION_TITLE_TEAM":"Team >","SECTION_FILTER_ALL":"Alle","CONFIRM_LEAVE_PROJECT":"Er du sikker på at du vil forlate prosjektet?","ACTION_LEAVE_PROJECT":"Forlat dette prosjektet"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. størrelse: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Brukerinstillinger","USER_PROFILE":"Brukerprofil","CHANGE_PASSWORD":"Endre passord","EMAIL_NOTIFICATIONS":"Epost-varsler","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"E-postvarsler","COLUMN_PROJECT":"Prosjekt","COLUMN_RECEIVE_ALL":"Motta alle","COLUMN_ONLY_INVOLVED":"Kun involvert","COLUMN_NO_NOTIFICATIONS":"Ingen varsler","OPTION_ALL":"Alle","OPTION_INVOLVED":"Involvert","OPTION_NONE":"Ingen"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Prosjekt","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Prosjekt"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Bruk standardbilde","ACTION_DELETE_ACCOUNT":"Slett Taiga-konto","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Sjekk din innboks!
    Vi har sent en epost til din konto
    med instruksjonene for å velge ny epostadresse.","CHANGE_PHOTO":"Endre bilde","FIELD":{"USERNAME":"Brukernavn","EMAIL":"Epost","FULL_NAME":"Fullt navn","PLACEHOLDER_FULL_NAME":"Skriv ditt fulle navn (f.eks: Ola Nordmann)","BIO":"Bio (max. 210 tegn)","PLACEHOLDER_BIO":"Fortell oss noe om deg selv","LANGUAGE":"Språk","LANGUAGE_DEFAULT":"-- bruk standard språk --","THEME":"Tema","THEME_DEFAULT":"-- bruk standard tema --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Siste versjon: {{lastModifiedDate}} ({{totalEditions}} versjoner totalt) Innhold: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Fjern denne wiki-siden","DELETE_LIGHTBOX_TITLE":"Slett wiki-siden","DELETE_LINK_TITLE":"Slett wiki-lenke","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"ganger
    redigert","LAST_EDIT":"siste
    endring","LAST_MODIFICATION":"siste endring"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"Opprettet","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Tips","LINK":"Hvis du vil vite hvordan du bruker den, besøk vår brukerstøtte","LINK_TITLE":"Besøk vår brukerstøtte","HINT1_TITLE":"Viste du at du kan importere og eksportere prosjekter?","HINT1_TEXT":"Dette gir deg muligheten til å ta ut alle dine data fra en Taiga og flytte den til en annen.","HINT2_TITLE":"Viste du at du kan opprette egendefinerte felter?","HINT2_TEXT":"Team kan nå lage egendefinerte felter som en fleksibel måte å legge til spesifik data nyttig for deres egne arbeidsflyt.","HINT3_TITLE":"Endre rekkefølge på dine prosjekter for å fremvise de som er mest relevante for deg.","HINT3_TEXT":"De 10 prosjektene er listet opp i navigasjonslinjen på toppen.","HINT4_TITLE":"Glemte du det du arbeidet med?","HINT4_TEXT":"Ikke fortvil, på ditt dashboard finner du åpne oppgaver, hendelser og brukerhistorier i den rekkefølgen du jobbet med de."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} har lastet opp ett nytt vedlegg i {{obj_name}}","US_CREATED":"{{username}} har opprettet en ny BH {{obj_name}} i {{project_name}}","ISSUE_CREATED":"{{username}} har opprettet en ny hendelse {{obj_name}} i {{project_name}}","TASK_CREATED":"{{username}} har opprettet en ny oppgave {{obj_name}} i {{project_name}}","TASK_CREATED_WITH_US":"{{username}} har opprettet en ny oppgave {{obj_name}} i {{project_name}} som tilhører BH {{us_name}}","WIKI_CREATED":"{{username}} har opprettet en ny wiki-side {{obj_name}} i {{project_name}}","MILESTONE_CREATED":"{{username}} har opprettet en ny sprint {{obj_name}} i {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} opprettet prosjektet {{project_name}}","MILESTONE_UPDATED":"{{username}} har oppdatert sprint {{obj_name}}","US_UPDATED":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til BH {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til BH {{obj_name}} til {{new_value}}","US_UPDATED_POINTS":"{{username}} har oppdatert '{{role_name}}' poeng for BH {{obj_name}} til {{new_value}}","ISSUE_UPDATED":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til hendelsen {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til hendelsen {{obj_name}} til {{new_value}}","TASK_UPDATED":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til oppgave {{obj_name}} til {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til oppgave {{obj_name}} til {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til oppgave {{obj_name}} som tilhører BH {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} har oppdatert egenskapen \"{{field_name}}\" til oppgaven {{obj_name}} som tilhører BH {{us_name}} til {{new_value}}","WIKI_UPDATED":"{{username}} har oppdatert wiki-siden {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} har kommentert på BH {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} har kommentert på hendelsen {{obj_name}}","NEW_COMMENT_TASK":"{{username}} har kommentert på oppgave {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} har et nytt medlem","US_ADDED_MILESTONE":"{{username}} har lagt til BH {{obj_name}} til {{sprint_name}}","US_MOVED":"{{username}} har flyttet BH {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} har lagt til BH {{obj_name}} til backlogen","BLOCKED":"{{username}} har blokkert {{obj_name}}","UNBLOCKED":"{{username}} har avblokkert {{obj_name}}","NEW_USER":"{{username}} har sluttet seg til Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Hendelse","TASK":"Oppgave"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"En ekstern app krever autentisering","PAGE_DESCRIPTION":"En ekstern app krever autentisering","AUTHORIZATION_REQUEST":"Tillat {{application}} til å bruke din Taiga konto?","LOGIN_WITH_ANOTHER_USER":"Logg inn med en annen bruker","AUTHORIZE_APP":"Godkjenn app","CANCEL":"Avbryt"},"JOYRIDE":{"NAV":{"NEXT":"Neste","BACK":"Tilbake","SKIP":"Hopp over","DONE":"Ferdig"},"DASHBOARD":{"STEP1":{"TITLE":"Ditt prosjekt","TEXT":"Velkommen! Her finner du prosjektene du er involvert i."},"STEP2":{"TITLE":"Arbeider med","TEXT":"Her vil du finne Brukerhistorier, Oppgaver og Hendelser som du jobber med."},"STEP3":{"TITLE":"Følger med på","TEXT1":"Og akkuratt her vil du finne de i prosjektet ditt som du vil vite om.","TEXT2":"Du arbeider allerede med Taiga ;)"},"STEP4":{"TITLE":"La oss begynne","TEXT1":"Du kan starte med å opprette ditt første Taiga prosjekt","TEXT2":"Lykke til!"}},"BACKLOG":{"STEP1":{"TITLE":"Prosjektsammendrag","TEXT1":"Her vil du se tilstanden til ditt prosjekt.","TEXT2":"Du kan endre alle prosjektegenskaper gjennom administrasjonpanelet"},"STEP2":{"TITLE":"Produkt backlog","TEXT":"Backlogen er listen over kravene (Brukerhistorier) til prosjektet. Her kan du planlegge dine sprinter."},"STEP3":{"TITLE":"Sprinter","TEXT":"Sprinter er korte tidsperioder (vanligvis 2 uker) der spesifikt arbeide må ferdigstilles og leveres."},"STEP4":{"TITLE":"Brukerhistorie","TEXT":"Dette er kravene på et overordnet nivå. Du kan legge dem til backlogen og dra dem inn i den sprinten der det skal leveres."}},"KANBAN":{"STEP1":{"TITLE":"Tilpass din arbeidsflyt","TEXT":"Sett opp kolonnene du trenger for å kartlegge statusene til din arbeidsflyt gjennom administrasjonspanelet."},"STEP2":{"TITLE":"Brukerhistorier & Oppgaver","TEXT":"Brukerhistorier er krav på et overordnet nivå. Du kan dra de inn i ulike kolonner."},"STEP3":{"TITLE":"Legger til Brukerhistorier","TEXT1":"Det kan være lurt å legge til en Brukerhistorie (legg til BH ikon) eller en samling av dem (bulk ikon)","TEXT2":"Lykke til!"}}},"DISCOVER":{"PAGE_TITLE":"Oppdag prosjekter -Taiga","PAGE_DESCRIPTION":"Søkbar katalog med offentlige prosjekter i Taiga. Utforsk backlogger, tidslinjer, hendelser og team. Sjekk ut de mest likte og mest aktive prosjektene. Filtrer etter Kanban og Scrum.","DISCOVER_TITLE":"Oppdag prosjekter","DISCOVER_SUBTITLE":"{projects, plural, one{Ett offentlig prosjekt å oppdage} other{# offentlige prosjekt å oppdage}}","MOST_ACTIVE":"Mest aktiv","MOST_ACTIVE_EMPTY":"Det er ingen AKTIVE prosjekter enda","MOST_LIKED":"Mest likt","MOST_LIKED_EMPTY":"Det er ingen LIKTE prosjekter enda","VIEW_MORE":"Vis mer","FEATURED":"Utvalgte Prosjekter","EMPTY":"Det er ingen prosjekter å vise med dette søkekriteriet.
    Prøv igjen!","FILTERS":{"ALL":"Alle","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Søker etter folk","WEEK":"Forrige uke","MONTH":"Forrige måned","YEAR":"Forrige år","ALL_TIME":"All tid","CLEAR":"Fjern filtrene"},"SEARCH":{"PAGE_TITLE":"Søk - Oppdag prosjekter - Taiga","PAGE_DESCRIPTION":"Søkbar katalog med offentlige prosjekter i Taiga. Utforsk backlogger, tidslinjer, hendelser og team. Sjekk ut de mest likte og mest aktive prosjektene. Filtrer etter Kanban og Scrum.","INPUT_PLACEHOLDER":"Skriv noe...","ACTION_TITLE":"Søk","RESULTS":"Søkeresultater"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-nl.json b/dist/v-1549282893552/locales/taiga/locale-nl.json new file mode 100644 index 0000000..9d6a47f --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-nl.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Ja","NO":"Nee","OR":"of","I_GET_IT":"OK, I get it","LOADING":"Aan het laden...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Bewaar","CANCEL":"Annuleren","ACCEPT":"Accepteren","DELETE":"Verwijder","UNLINK":"ontkoppel","CREATE":"Aanmaken","ADD":"Toevoegen","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Bewerk","DRAG":"Sleep","TAG_LINE":"Jouw agile, gratis en open source project management tool","TAG_LINE_2":"HOU VAN JE PROJECT","BLOCK":"Blokkeer","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"Geblokkeerd","UNBLOCK":"Deblokkeer","UNBLOCK_TITLE":"Dit item deblokkeren","BLOCKED_NOTE":"Waarom is dit geblokkeerd?","BLOCKED_REASON":"Gelieve de reden uit te leggen","CREATED_BY":"Aangemaakt door {{fullDisplayName}}","CLOSE":"sluiten","GO_HOME":"Neem me naar de homepage","PLUGINS":"Plugins","ONE_ITEM_LINE":"Eén item per regel...","NEW_BULK":"Nieuwe bulk toevoeging","SUBTASKS":"Subtasks","PREVIOUS":"Vorige","NEXT":"Volgende","LOGOUT":"Afmelden","EXTERNAL_USER":"een extern gebruiker","GENERIC_ERROR":"Een van onze Oempa Loempa's zegt {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Project Owner","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Verwijder issue","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Deze waarde lijkt ongeldig te zijn","TYPE_EMAIL":"Deze waarde moet een geldig emailadres bevatten","TYPE_URL":"Deze waarde moet een geldige url bevatten","TYPE_URLSTRICT":"Deze waarde moet een geldige url bevatten","TYPE_NUMBER":"Deze waarde moet een geldig nummer bevatten","TYPE_DIGITS":"Deze waarde moet alleen cijfers bevatten.","TYPE_DATEISO":"Deze waarde moet een geldige datum zijn (YYYY-MM-DD).","TYPE_ALPHANUM":"Deze waarde moet alfanumeriek zijn","TYPE_PHONE":"Deze waarde moet een geldig telefoonnummer bevatten","NOTNULL":"Deze waarde zou niet null moeten zijn","NOT_BLANK":"Deze waarde zou niet leeg moeten zijn","REQUIRED":"Dit veld is verplicht.","REGEXP":"Deze waarde lijkt ongeldig te zijn","MIN":"Deze waarde zou groter of gelijk aan %s moeten zijn.","MAX":"Deze waarde zou lager of gelijk aan %s moeten zijn.","RANGE":"Deze waarde zou tussen %s en %s moeten zijn.","MIN_LENGTH":"Deze waarde is te kort. Hij zou %s tekens of meer moeten bevatten.","MAX_LENGTH":"Deze waarde is te lang. Hij zou %s tekens of minder moeten bevatten.","RANGE_LENGTH":"Deze lengte is ongeldig. Hij zou tussen de %s en %s tekens lang moeten zijn.","MIN_CHECK":"Je moet minstens %s opties selecteren.","MAX_CHECK":"Je moet %s keuzes of minder selecteren.","RANGE_CHECK":"Je moet tussen %s en %s keuzes selecteren.","EQUAL_TO":"Deze waarde zou hetzelfde moeten zijn.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Ongeldige datum, gebruik DD MMM YYYY (vb 23 mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Vorige maand","NEXT_MONTH":"Volgende maand","MONTHS":{"JAN":"Januari","FEB":"Februari","MAR":"Maart","APR":"April","MAY":"Mei","JUN":"Julli","JUL":"Jullie","AUG":"Augustus","SEP":"September","OCT":"Oktober","NOV":"November","DEC":"December"},"WEEK_DAYS":{"SUN":"Zondag","MON":"Maandag","TUE":"Dinsdag","WED":"Woensdag","THU":"Donderdag","FRI":"Vrijdag","SAT":"Zaterdag"},"WEEK_DAYS_SHORT":{"SUN":"Zon","MON":"Maa","TUE":"Din","WED":"Woens","THU":"Don","FRI":"Vrij","SAT":"Zat"}},"SEE_USER_PROFILE":"Bekijk het profiel van {{username}}","USER_STORY":"User story","TASK":"Taak","ISSUE":"Issue","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Verwijder tag","ADD":"Tag tovoegen"},"DESCRIPTION":{"EMPTY":"Lege ruimte is zo saai... vooruit, wees beschrijflijk...","NO_DESCRIPTION":"Nog geen beschrijving"},"FIELDS":{"SUBJECT":"Onderwerp","NAME":"Naam","URL":"URL","DESCRIPTION":"Beschrijving","VALUE":"Waarde","SLUG":"Slug","COLOR":"Kleur","IS_CLOSED":"Is gesloten?","STATUS":"Status","TYPE":"Type","SEVERITY":"Ernst","PRIORITY":"Prioriteit","ASSIGNED_TO":"Toegewezen aan","ASSIGNED_USERS":"Assigned users","POINTS":"Punten","IS_BLOCKED":"is geblokkeerd","REF":"Ref","VOTES":"Stemmen","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Alles"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Niet toegewezen","ASSIGN":"Assign","DELETE_ASSIGNMENT":"Toewijzing verwijderen","REMOVE_ASSIGNED":"Verwijder toegewezene","TOO_MANY":"...te veel gebruikers, blijf filteren","CONFIRM_UNASSIGNED":"Weet je zeker dat je deze niet wilt toewijzen?","TITLE_ACTION_EDIT_ASSIGNMENT":"Toewijzing bewerken","SELF":"Aan mezelf toewijzen"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Gesloten","OPEN":"Open"},"WATCHERS":{"WATCHERS":"Volgers","ADD":"Add watchers","TITLE_ADD":"Add a project member to the watchers list","DELETE":"Verwijder waarnemer","TITLE_LIGHTBOX_DELETE_WARTCHER":"Verwijder waarnemer..."},"WATCH_BUTTON":{"WATCH":"Bekijk","WATCHING":"Volgers","UNWATCH":"Unwatch","WATCHERS":"Volgers","BUTTON_TITLE":"Watch/Unwatch this item","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Eigen velden","SAVE":"Eigen velden opslaan","EDIT":"Eigen velden bewerken","DELETE":"Verwijder eigen attribuut","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Onderwerp of referentie","TITLE_ACTION_FILTER_BUTTON":"zoek","TITLE":"Filters","TITLE_ACTION_SEARCH":"Zoek","ACTION_SAVE_CUSTOM_FILTER":"Als eigen filter opslaan","PLACEHOLDER_FILTER_NAME":"Geef de filternaam in en druk op enter","APPLIED_FILTERS_NUM":"filters applied","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Type","STATUS":"Status","SEVERITY":"Ernst","PRIORITIES":"Prioriteit","TAGS":"Tags","ASSIGNED_TO":"Toegewezen aan","ASSIGNED_USERS":"Assigned users","ROLE":"Rol","CREATED_BY":"Aangemaakt door","CUSTOM_FILTERS":"Eigen filters","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown syntax help"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Verwijder epics"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Sprints bekijken","ADD_SPRINTS":"Sprints toevoegen","MODIFY_SPRINTS":"Sprints bewerken","DELETE_SPRINTS":"Sprints verwijderen"},"USER_STORIES":{"NAME":"User Stories","VIEW_USER_STORIES":"Bekijk user stories","ADD_USER_STORIES":"User stories toevoegen","MODIFY_USER_STORIES":"user stories bewerken","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Verwijderd user stories"},"TASKS":{"NAME":"Taak","VIEW_TASKS":"Bekijk taken","ADD_TASKS":"Taak toevoegen","MODIFY_TASKS":"Bewerk taken","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Verwijder taken"},"ISSUES":{"NAME":"Kwesties","VIEW_ISSUES":"Bekijk kwesties","ADD_ISSUES":"Kwesties toevoegen","MODIFY_ISSUES":"Bewerk kwesties","COMMENT_ISSUES":"Becommentarieer kwesties","DELETE_ISSUES":"Kwesties verwijderen"},"WIKI":{"NAME":"Wiki\n","VIEW_WIKI_PAGES":"Bekijk wiki pagina's","ADD_WIKI_PAGES":"Wiki pagina's toevoegen","MODIFY_WIKI_PAGES":"Bewerk wiki pagina's","DELETE_WIKI_PAGES":"Verwijder wiki pagina's","VIEW_WIKI_LINKS":"Wiki links bekijken","ADD_WIKI_LINKS":"Wiki links toevoegen","DELETE_WIKI_LINKS":"Verwijder wiki links"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Inloggen op Taiga, een project management platform voor startups en agile ontwikkelaars & designers die een simpele, mooie tool willen om werken echt leuk te maken."},"AUTH":{"INVITED_YOU":"Heeft je uitgenodigd voor het project","NOT_REGISTERED_YET":"Nog niet geregistreerd?","REGISTER":"Registreer","CREATE_ACCOUNT":"maak hier je gratis account aan"},"LOGIN_COMMON":{"HEADER":"Ik heb al een Taiga login","PLACEHOLDER_AUTH_NAME":"Gebruikersnaam of email (case sensitive)","LINK_FORGOT_PASSWORD":"Vergeten?","TITLE_LINK_FORGOT_PASSWORD":"Ben je je wachtwoord vergeten?","ACTION_ENTER":"Enter","ACTION_SIGN_IN":"Log in","PLACEHOLDER_AUTH_PASSWORD":"Wachtwoord (hoofdlettergevoelig)","ALT_LOGIN":"Of login met"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Volgens onze Oempa-Loempa's, zijn je gebruikers/email of wachtwoord incorrect.","SUCCESS":"Onze Oempa-Loempa's zijn blij, welkom bij Taiga."},"REGISTER":{"PAGE_TITLE":"Registreer - Taiga","PAGE_DESCRIPTION":"Maak je account op Taiga, een project management platform voor startups en agile ontwikkelaars & designers die een simpele, mooie tool willen om werken echt leuk te maken."},"REGISTER_FORM":{"TITLE":"Registreer een nieuw Taiga account (gratis)","PLACEHOLDER_NAME":"Kies een gebruikersnaam (hoofdlettergevoelig)","PLACEHOLDER_FULL_NAME":"Kies je volledige naam","PLACEHOLDER_EMAIL":"Jouw e-mail","PLACEHOLDER_PASSWORD":"Kies een wachtwoord (hoofdlettergevoelig)","ACTION_SIGN_UP":"Aanmelden","TITLE_LINK_LOGIN":"Inloggen","LINK_LOGIN":"Ben je al geregistreerd? Log in"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Wachtwoord vergeten - Taiga","PAGE_DESCRIPTION":"Geef je gebruikersnaam of e-mail in om een nieuw wachtwoord te krijgen. Zo heb je weer toegang tot Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Oeps, ben je je wachtwoord vergeten?","SUBTITLE":"Voer je gebruikersnaam of email in om een nieuwe te ontvangen","PLACEHOLDER_FIELD":"Gebruikersnaam of e-mail","ACTION_RESET_PASSWORD":"Wachtwoord resetten","LINK_CANCEL":"Nah, stuur me terug. I denk dat ik het zal onthouden.","SUCCESS_TITLE":"Controleer je inbox!","SUCCESS_TEXT":"We hebben je een e-mail gestuurd met de instructie om een nieuw wachtwoord aan te maken","ERROR":"Volgens onze Oempa-Loempa's ben je nog niet geregisteerd"},"CHANGE_PASSWORD":{"PAGE_TITLE":"Verander je wachtwoord - Taiga","SECTION_NAME":"Wachtwoord wijzigen","FIELD_CURRENT_PASSWORD":"Huidig wachtwoord","PLACEHOLDER_CURRENT_PASSWORD":"Je huidige wachtwoord (of leeg als je nog geen wachtwoord hebt)","FIELD_NEW_PASSWORD":"Nieuw wachtwoord","PLACEHOLDER_NEW_PASSWORD":"Type een wachtwoord","FIELD_RETYPE_PASSWORD":"Herhaal nieuwe wachtwoord","PLACEHOLDER_RETYPE_PASSWORD":"Herhaal nieuw wachtwoord","ERROR_PASSWORD_MATCH":"De wachtwoorden komen niet overeen"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Maak een nieuwe Taiga pass aan","SUBTITLE":"En hé, misschien dat je wat ijzer-rijk voedsel kunt eten, het is goed voor je brein :P","PLACEHOLDER_NEW_PASSWORD":"Nieuw wachtwoord","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Herhaal wachtwoord","ACTION_RESET_PASSWORD":"Wachtwoord resetten","ERROR":"Onze Oempa-Loempa's kunnen het verzoek om je wachtwoord te herstellen niet terugvinden. Probeer het nog een keer.","SUCCESS":"Onze Oempa-Loempas hebben je nieuwe wachtwoord opgeslagen.
    Probeer ermee in te loggen."},"INVITATION":{"PAGE_TITLE":"Uitnodiging accepteren - Taiga","PAGE_DESCRIPTION":"Accepteer de uitnodiging voor een project in Taiga, een project management platform voor startups en agile ontwikkelaars & designers die een simpele, mooie tool willen om werken echt leuk te maken."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Onze Oompa Loompa's kunnen je uitnodiging niet vinden.","SUCCESS":"Je bent met succes toegetreden tot dit project, Welkom bij {{project_name}}"},"HOME":{"PAGE_TITLE":"Home -Taiga","PAGE_DESCRIPTION":"De Taiga start pagina met jouw projecten en de aan jou toegewezen en gevolgde user stories, taken en kwesties","EMPTY_WORKING_ON":"Voelt leeg, vind je niet? Begin met Taiga te werken en hier zullen de stories, taken en kwesties verschijnen waar jij aan werkt.","EMPTY_WATCHING":"Volg User Stories, Taken, Kwesties binnen jouw projecten en ontvang een bericht bij veranderingen :)","EMPTY_PROJECT_LIST":"Je hebt nog geen projecten","WORKING_ON_SECTION":"Werkt aan","WATCHING_SECTION":"Volgers","DASHBOARD":"Projects Dashboard"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ NIEUWE EPIC","UNASSIGNED":"Niet toegewezen"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Stemmen","NAME":"Naam","PROJECT":"Project","SPRINT":"Sprint","ASSIGNED_TO":"Toegewezen","STATUS":"Status","PROGRESS":"Vooruitgang","VIEW_OPTIONS":"Toon opties"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Geblokkeerd","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Mijn projecten - Taiga","PAGE_DESCRIPTION":"Een lijst met al jouw projecten, je kunt deze herodenen of een nieuwe aanmaken.","MY_PROJECTS":"Mijn projecten"},"ATTACHMENT":{"SECTION_NAME":"bijlagen","TITLE":"{{ fileName }} toegevoegd op {{ date }}","LIST_VIEW_MODE":"Lijst weergave","GALLERY_VIEW_MODE":"Afbeeldingweergave","DESCRIPTION":"Geef een korte beschrijving","DEPRECATED":"(verouderd)","DEPRECATED_FILE":"Verouderd?","ADD":"Nieuwe bijlage toevoegen. {{maxFileSizeMsg}}","DROP":"Voeg bijlagen hier toe!","SHOW_DEPRECATED":"+ toon verouderde bijlagen","HIDE_DEPRECATED":"- verberg verouderde bijlagen","COUNT_DEPRECATED":"({{ counter }} verouderd)","MAX_UPLOAD_SIZE":"Maximale upload grootte is {{maxFileSize}}","DATE":"DD MMM YYYY [om] hh:mm","ERROR_UPLOAD_ATTACHMENT":"We konden '{{fileName}}' niet uploaden. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Verwijder bijlage","MSG_LIGHTBOX_DELETE_ATTACHMENT":"de bijlage '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"We zijn er niet in geslaagd om te verwijderen: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Vor","NEXT":"Volgende"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Bewerk waarde","TITLE_ACTION_DELETE_VALUE":"Verwijder waarde","TITLE_ACTION_DELETE_TAG":"Verwijder tag"},"HELP":"Help je hulp nodig? Bekijk onze support pagina!","PROJECT_DEFAULT_VALUES":{"TITLE":"Standaard waardes","SUBTITLE":"Standaard waardes instellen voor alle invoer selecties."},"MEMBERSHIPS":{"TITLE":"Gebruikers beheren","PAGE_TITLE":"Lidmaatschappen - {{projectName}}","ADD_BUTTON":"+ Nieuwe gebruiker","ADD_BUTTON_TITLE":"Nieuwe gebruiker toevoegen","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Export","SUBTITLE":"Exporteer je project om een backup te bewaren of om een nieuwe aan te maken gebaseerd op deze.","EXPORT_BUTTON":"Export","EXPORT_BUTTON_TITLE":"Exporteer je project","LOADING_TITLE":"We zijn bezig met het genereren van je dump bestand","DUMP_READY":"Je dump bestand is klaar!","LOADING_MESSAGE":"Gelieve deze pagina niet te sluiten.","ASYNC_MESSAGE":"We sturen je een email als het klaar is","SYNC_MESSAGE":"Als de download niet automatisch start, klik dan hier.","ERROR":"Onze Oempa-Loempa's hebben wat problemen bij het genereren van uw dump.\nProbeer het opnieuw a.u.b.","ERROR_BUSY":"Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten."},"MODULES":{"TITLE":"Modules","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Organiseer je user stories om een duidelijk overzicht van aankomend en geprioritiseerd werk te behouden.","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organiseer je project volgens het lean principe met dit bord.","ISSUES":"Kwesties","ISSUES_DESCRIPTION":"Volg de bugs, vragen en verbeteringen gerelateerd aan je project.\nMis niets meer!","WIKI":"Wiki\n","WIKI_DESCRIPTION":"Voeg toe, wijzig of verwijder inhoud in samenwerking met anderen. Dit is the juiste plaats voor je project documentatie.","MEETUP":"Meet Up","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Kies een videoconference systeem","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Op maat","URL_CHAT_ROOM":"URL van je chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Project profiel - {{projectName}}","PROJECT_DETAILS":"Project details","PROJECT_NAME":"Naam project","TAGS":"Tags","DESCRIPTION":"Beschrijving","RECRUITING":"Is dit project opzoek naar mensen?","RECRUITING_MESSAGE":"Who are you looking for?","RECRUITING_PLACEHOLDER":"Define the profiles you are looking for","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Open project","PRIVATE_PROJECT":"Gesloten project","PRIVATE_OR_PUBLIC":"What's the difference between public and private projects?","DELETE":"Verwijder dit project","CHANGE_LOGO":"Change logo","ACTION_USE_DEFAULT_LOGO":"Use default image","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Verzoek","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Change owner","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Rapporten","SUBTITLE":"Exporteer je project data in CSV formaat en maak je eigen rapporten","DESCRIPTION":"Download een CSV bestand of kopieer de gegenereerde URL en open deze in je favoriete tekst editor of spreadsheet om je eigen rapportages te maken. Op die manier kun je al je data gemakkelijk analyseren en visualiseren.","HELP":"Hoe kan ik dit gebruiken in mijn eigen spreadsheet?","REGENERATE_TITLE":"Wijzig URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"user stories rapporten","SECTION_TITLE_TASK":"taak rapporten","SECTION_TITLE_ISSUE":"Kwesties rapporten","DOWNLOAD":"Download CSV","URL_FIELD_PLACEHOLDER":"Genereer de CSV url opnieuw alsjeblieft","TITLE_REGENERATE_URL":"Opnieuw CSV url genereren","ACTION_GENERATE_URL":"Url genereren","ACTION_REGENERATE":"Opnieuw genereren","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Verwijder"},"CUSTOM_FIELDS":{"TITLE":"Eigen velden","SUBTITLE":"Specifieer de aangepaste velden voor je user stories, taken en kwesties","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"Eigen velden user stories","US_ADD":"Voeg eigen velden toe in user stories","TASK_DESCRIPTION":"Eigen velden taken","TASK_ADD":"Voeg een aangepast veld toe in taken","ISSUE_DESCRIPTION":"Kwesties aangepaste velden","ISSUE_ADD":"Voeg een aangepast veld toe in kwesties","FIELD_TYPE_TEXT":"Tekst","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Over meerdere regels","FIELD_TYPE_DATE":"Date","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Project waardes - {{projectName}}","REPLACEMENT":"Alle items met deze waarde zullen worden veranderd in","ERROR_DELETE_ALL":"Je kunt niet alle waardes verwijderen"},"PROJECT_VALUES_POINTS":{"TITLE":"Punten","SUBTITLE":"Specifieer de punten waar naar je user stories kunnen worden ingeschat","US_TITLE":"US punten","ACTION_ADD":"Nieuw punt toevoegen"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioriteit","SUBTITLE":"Kies de prioriteit die je kwesties zullen hebben","ISSUE_TITLE":"Issue prioriteit","ACTION_ADD":"Nieuwe prioriteit toevoegen"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Ernstniveaus","SUBTITLE":"Kies het belang die je kwesties zullen hebben","ISSUE_TITLE":"Ernst van het issue","ACTION_ADD":"Nieuwe ernst toevoegen"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"Specifieer de stadia die je user stories, taken en kwesties door zullen maken","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Taak statussen","ISSUE_TITLE":"Issue statussen"},"PROJECT_VALUES_TYPES":{"TITLE":"Types","SUBTITLE":"Kies de types die je kwesties kunnen hebben","ISSUE_TITLE":"Kwestie types","ACTION_ADD":"Voeg nieuwe {{objName}} toe"},"PROJECT_VALUES_TAGS":{"TITLE":"Tags","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Tag tovoegen","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specifieer de deadlines die je user stories, taken en kwesties door zullen maken","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Nieuwe status toevoegen","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Rollen - {{projectName}}","WARNING_NO_ROLE":"Wees voorzichtig, geen enkele rol in je project zal de puntenwaarde van een user story kunnen estimeren","HELP_ROLE_ENABLED":"Als dit actief is, zullen leden met deze rol de punten waarde voor user stories kunnen schatten","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} leden met deze rol","TITLE_DELETE_ROLE":"Verwijder Rol","REPLACEMENT_ROLE":"Al de gebruikers met deze rol zullen verplaats worden naar","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Je kan niet alle waarden verwijderen","EXTERNAL_USER":"Externe gebruiker","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Geheime sleutel","PAYLOAD_URL":"Payload URL","VALID_IPS":"Correct origine IPs (gescheiden door ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket requests zijn niet gesigneerd, dus de beste manier om hun oorsprong te verifiëren is op basis van IP. Als het veld leeg is zal er geen IP validatie plaatsvinden."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab requests zijn niet gesigneerd, dus de beste manier om hun oorsprong te verifiëren is op basis van IP. Als het veld leeg is zal er geen IP validatie plaatsvinden."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Nieuwe webhook toevoegen","TYPE_NAME":"Type de service naam","TYPE_PAYLOAD_URL":"Type de service payload url","TYPE_SERVICE_SECRET":"Type de geheime service sleutel","SAVE":"Webhook opslaan","CANCEL":"Webhook Annuleren","SHOW_HISTORY":"(Toon historie)","TEST":"Test webhook","EDIT":"Webhook bewerken","DELETE":"Verwijder Webhook","REQUEST":"Verzoek","RESEND_REQUEST":"Verzoek opnieuw versturen","HEADERS":"Koppen","PAYLOAD":"Payload","RESPONSE":"Reactie","DATE":"DD MMM YYYY [om] hh:mm:ss","ACTION_HIDE_HISTORY":"(Verberg historie)","ACTION_HIDE_HISTORY_TITLE":"Verberg geschiedenis","ACTION_SHOW_HISTORY":"(Toon geschiedenis)","ACTION_SHOW_HISTORY_TITLE":"Toon geschiedenis","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Eigen attributen - {{projectName}}","ADD":"Voeg aangepast veld toe","EDIT":"Eigen veld bewerken","DELETE":"Eigen veld verwijderen","SAVE_TITLE":"Eigen velden opslaan","CANCEL_TITLE":"Annuleer aanmaken","SET_FIELD_NAME":"Stel de naam van je eigen veld in","SET_FIELD_DESCRIPTION":"Eigen veld omschrijving instellen","FIELD_TYPE_DEFAULT":"-- select one --","ACTION_UPDATE":"Eigen veld bijwerken","ACTION_CANCEL_EDITION":"Editie annuleren"},"MEMBERSHIP":{"COLUMN_MEMBER":"Gebruiker","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rol","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Actief","STATUS_PENDING":"Resterend","DELETE_MEMBER":"Verwijder gebruiker","RESEND":"Resend","SUCCESS_SEND_INVITATION":"We hebben de uitnodiging opnieuw gestuurd aan '{{email}}'.","SUCCESS_DELETE":"We hebben {{message}} verwijderd.","ERROR_DELETE":"We zijn er niet in geslaagd om te verwijderen {{message}}","DEFAULT_DELETE_MESSAGE":"de uitnodiging naar {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Standaard waarde voor punten selectie","LABEL_TASK_STATUS":"Standaard waarde voor taak status selectie","LABEL_ISSUE_TYPE":"Standaard waarde voor issue type selectie","LABEL_ISSUE_STATUS":"Standaard waarde voor issue status selectie","LABEL_PRIORITY":"Standaard waarde voor prioriteit selectie","LABEL_SEVERITY":"Standaard waarde voor ernst selectie"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Geef een naam voor de nieuwe status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Geef een naam voor het nieuwe element"},"US_STATUS":{"ACTION_ADD_STATUS":"Nieuwe status toevoegen","IS_ARCHIVED_COLUMN":"Gearchiveerd","IS_CLOSED_COLUMN":"Gesloten","WIP_LIMIT_COLUMN":"WIP limiet","PLACEHOLDER_WRITE_NAME":"Schrijf een naam voor de nieuwe status"},"MENU":{"PROJECT":"Project","ATTRIBUTES":"Attributen","MEMBERS":"Gebruikers","PERMISSIONS":"Permissies","INTEGRATIONS":"Integraties"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Punten","PRIORITIES":"Prioriteiten","SEVERITIES":"Ernst","TYPES":"Types","CUSTOM_FIELDS":"Eigen velden","TAGS":"Tags","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Rollen","ACTION_NEW_ROLE":"+ Nieuwe rol","TITLE_ACTION_NEW_ROLE":"Nieuwe rol toevoegen"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Verborgen","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Accepteren","REJECT":"Afwijzen","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Ongelimiteerd","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Profiel bewerken","CLOSED_US":"Gesloten US","PROJECTS":"Projecten","PROJECTS_EMPTY":"{{username}} heeft nog geen projecten","CONTACTS":"Contacten","CONTACTS_EMPTY":"{{username}} heeft nog geen contacten","CURRENT_USER_CONTACTS_EMPTY":"Je hebt nog geen contacten","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"De mensen waarmee je via Taiga werkt zullen automatisch je contacten worden","TABS":{"ACTIVITY_TAB":"Tijdlijn","ACTIVITY_TAB_TITLE":"Alle activiteit van deze gebruiker weergeven","PROJECTS_TAB":"Projecten","PROJECTS_TAB_TITLE":"List of all projects in which the user is a member","LIKES_TAB":"Personen die dit leuk vinden","LIKES_TAB_TITLE":"Lijst alles op wat deze gebruiker leuk vind","VOTES_TAB":"Stemmen","VOTES_TAB_TITLE":"List all votes made by this user","WATCHED_TAB":"Watched","WATCHED_TAB_TITLE":"List all item watched by this user","CONTACTS_TAB":"Contacten","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"Jouw profiel","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"Bio aanpassen"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Typ iets...","FILTER_TYPE_ALL":"Alles","FILTER_TYPE_ALL_TITLE":"Alles weergeven","FILTER_TYPE_PROJECTS":"Projecten","FILTER_TYPE_PROJECTS_TITLE":"Enkel projecten weergeven","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Verhalen","FILTER_TYPE_USER_STORIES_TITLE":"Enkel verhalen van gebruikers weergeven","FILTER_TYPE_TASKS":"Taken","FILTER_TYPE_TASKS_TITLE":"Enkel taken weergeven","FILTER_TYPE_ISSUES":"Kwesties","FILTER_TYPE_ISSUES_TITLE":"Alleen kwesties weergeven","EMPTY_TITLE":"Het ziet er naar uit dat er hier niets is om weer te geven."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Herorden je projecten met de vaakst gebruikte bovenaan.
    De top 10 projecten zullen verschijnen in de project lijst bovenaan in de navigatie bar.","PRIVATE":"Gesloten project","LOOKING_FOR_PEOPLE":"This project is looking for people","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Geblokkeerd project","THIS_PROJECT_IS_BLOCKED":"This project is temporarily blocked","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Neem contact op met de administrator om je projecten te deblokkeren."},"SECTION":{"SEARCH":"Zoek","TIMELINE":"Tijdlijn","EPICS":"Epics","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Kwesties","WIKI":"Wiki","TEAM":"Team","MEETUP":"Meet Up","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Project aanmaken","MANAGE_PROJECTS":"Manage projects","TITLE_CREATE_PROJECT":"Project aanmaken","HELP_TITLE":"Taiga support pagina","HELP":"Help","HOMEPAGE":"Startpagina","FEEDBACK_TITLE":"Stuur feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Notificatie instellingen bewerken","NOTIFICATIONS":"Notificaties","VIEW_PROFILE_TITLE":"Bekijk profiel","VIEW_PROFILE":"Bekijk profiel","EDIT_PROFILE_TITLE":"Bewerk je profiel","EDIT_PROFILE":"Bewerk profiel","CHANGE_PASSWORD_TITLE":"Wachtwoord wijzigen","CHANGE_PASSWORD":"Wachtwoord wijzigen","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Ontdek trending projecten","DISCOVER":"Ontdek"},"LIKE_BUTTON":{"LIKE":"Vind ik leuk","LIKED":"Leuk gevonden","UNLIKE":"Vind ik niet meer leu","BUTTON_TITLE":"Vind dit project leuk of niet","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Watch this project and set notification policy","WATCH":"Bekijk","WATCHING":"Volgers","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Ontvang alle notificaties","NOTIFY_ALL_TITLE":"Ontvang alle notificaties voor dit project","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Recive notificacions only when you are involved","UNWATCH":"Unwatch","UNWATCH_TITLE":"Unwatch this project"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Neem contact op met het project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Project aanmaken","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Importeer project","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Private Project"},"COMMON":{"DETAILS":"Nieuwe project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Onze Oempa-Loempa's zijn je project aan het importeren","ASYNC_IN_PROGRESS_MESSAGE":"Dit proces kan een paar minuten duren
    We sturen je een email als het gereed is","UPLOAD_IN_PROGRESS_MESSAGE":"{{uploadedSize}} van {{totalSize}} geupload","ERROR":"Onze Oempa-Loempa's hebben wat problemen bij het importeren van de dump. Probeer het opnieuw.","ERROR_TOO_MANY_REQUEST":"Sorry, onze Oempa-Loempa's zijn op het moment erg druk. Probeer het nog eens over een paar minuten.","ERROR_MESSAGE":"Onze Oempa-Loempa's hebben wat problemen met het importeren van je dump: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is te zwaar voor onze Oempa-Loempa's, probeer het met een bestand kleiner dan ({{maxFileSize}})","SYNC_SUCCESS":"Je project werd met succes geïmporteerd","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Kies gebruiker","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Assign","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"zoek","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Importeren project","DESCRIPTION":"Dit proces kan even duren, laat het venster even open alsjeblieft."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Importeer je GitHub project kwesties","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Hoe wil je je kwesties in Taiga importeren?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"Als kwesties","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Kwesties","CREATE_AS_SCRUM_DESCRIPTION":"De kwesties en sub-kwesties van je project zullen in Taiga als user stories en taken worden aangemaakt.","CREATE_AS_KANBAN_DESCRIPTION":"De kwesties en sub-kwesties van je project zullen in Taiga als user stories en taken worden aangemaakt.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Weet je zeker dat je je Taiga account wilt verwijderen?","CANCEL":"Terug naar instellingen","ACCEPT":"Verwijder account","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Verwijder project","QUESTION":"Weet je zeker dat je dit project wilt verwijderen?","SUBTITLE":"Alle projectgegevens (user stories, taken, kwesties, sprints en wiki pagina's) zullen verloren gaan! :-(","CONFIRM":"Ja, ik weet het zeker"},"ASSIGNED_TO":{"SELECT":"Selecteer toegewezen aan","SEARCH":"Zoek gebruikers"},"ADD_MEMBER":{"TITLE":"Nieuwe gebruiker","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Voeg e-mail toe","REMOVE":"Verwijder","INVITE":"Uitnodigen","CHOOSE_ROLE":"Kies een rol","PLACEHOLDER_INVITATION_TEXT":"(Optioneel) Voeg een gepersonaliseerd bericht toe aan je uitnodiging. Vertel iets leuks aan je nieuwe leden ;-)","HELP_TEXT":"Als gebruikers al geregistreerd zijn op Taiga, zullen ze automatisch toegevoegd worden. Anders krijgen ze een uitnodiging."},"FEEDBACK":{"TITLE":"Vertel ons iets...","COMMENT":"...een bug, suggesties, iets cools... of zelfs je ergste nachtmerrie met Taiga.","ACTION_SEND":"Stuur feedback"},"SEARCH":{"TITLE":"Zoek","PLACEHOLDER_SEARCH":"Wat zoek je?"},"ADD_EDIT_SPRINT":{"TITLE":"Nieuwe sprint","PLACEHOLDER_SPRINT_NAME":"naam sprint","PLACEHOLDER_SPRINT_START":"Geschatte start","PLACEHOLDER_SPRINT_END":"Geschat einde","ACTION_DELETE_SPRINT":"Wil je deze sprint verwijderen?","TITLE_ACTION_DELETE_SPRINT":"sprint verwijderen","LAST_SPRINT_NAME":"laatste sprint is {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Voeg Issue toe","FILTER_ISSUES":"Filter kwesties"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Verwijder sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optioneel) Voeg een gepersonaliseerd bericht toe aan je uitnodiging. Vertel iets leuks aan je nieuwe leden ;-)","PLACEHOLDER_TYPE_EMAIL":"Type en E-mail","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Opmerking toevoegen","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Wat is dit project?","CHOOSE_PROJECT_FROM":"Wat is dit project?","SUBJECT":"Onderwerp","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"Nieuwe user story","EXISTING_USERSTORY":"Bestaande user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Onderwerp","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - User Story {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Voltooid {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} van {{userStoryTotalTasks}} taken gesloten). Punten: {{userStoryPoints}}. Omschrijving: {{userStoryDescription}}","SECTION_NAME":"User story","LINK_TASKBOARD":"Taakbord","TITLE_LINK_TASKBOARD":"Ga naar het dashboard","TOTAL_POINTS":"totaal aantal punten","ADD":"+ Nieuwe User Story toevoegen","ADD_BULK":"Voeg enkele nieuwe User Stories in bulk toe","PROMOTED":"Deze US werd gepromoveerd van Issue:","TITLE_LINK_GO_TO_ISSUE":"Ga naar probleem","TITLE_DELETE_ACTION":"Verwijder user story","LIGHTBOX_TITLE_BLOKING_US":"User story blokkeren","NOT_ESTIMATED":"Niet ingeschat","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Close","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Opmerking verwijderd door {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Oudste eerst","RECENT_FIRST":"Nieuwste eerst","COMMENT":"Reageer","EDITED_COMMENT":"Aangepast:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Type hier nieuw commentaar","SHOW_DELETED":"Toon verwijderd commentaar","HIDE_DELETED":"Verberg verwijderde opmerkingen","DELETE":"Opmerking verwijderen","RESTORE":"Opmerking herstellen","HISTORY":{"TITLE":"Activiteit"}},"ACTIVITY":{"TITLE":"Activiteit","ACTIVITIES_COUNT":"{{activities}} Activiteiten","TAGS_ADDED":"tags toegevoegd:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"new attachment:","DELETED_ATTACHMENT":"deleted attachment:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Eisen team","CLIENT_REQUIREMENT":"Requirement van de klant","BLOCKED":"Geblokkeerd","VALUES":{"NOT_SET":"not set","UNASSIGNED":"niet toegewezen"},"FIELDS":{"SUBJECT":"onderwerp","DESCRIPTION":"beschrijving","PRIORITY":"prioriteit","SEVERITY":"erstniveau","STATUS":"status","TYPE":"type","ASSIGNED_TO":"toegewezen aan","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"kleur"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Het backlog overzicht, met user stories en sprints van het project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Je backlog grafiek aanpassen","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Verplaats naar huidige sprint","MOVE_US_TO_LATEST_SPRINT":"Move to latest Sprint","EMPTY":"De backlog is leeg!","CREATE_NEW_US":"Nieuwe US aanmaken","CREATE_NEW_US_EMPTY_HELP":"Misschien wil je een nieuwe user story aanmaken","EXCESS_OF_POINTS":"Overschot aan punten","PENDING_POINTS":"Resterende punten","CLOSED_POINTS":"gesloten","COMPACT_SPRINT":"Compacte Sprint","GO_TO_TASKBOARD":"Ga naar het taakbord van {{::name}}","EDIT_SPRINT":"Bewerk sprint","TOTAL_POINTS":"totaal","STATUS_NAME":"Naam status","SORTABLE_FILTER_ERROR":"Je kan niet loslaten op de backlog als er filters geopend zijn","DOOMLINE":"Project scope [doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Punten","OPTIMAL":"Optimaal aantal openstaande punten voor sprint \"{{sprintName}}\" zou {{value}} moeten zijn","REAL":"Reële openstaande punten voor sprint \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Toegevoegde aantal punten door team vereisten voor sprint \"{{sprintName}}\" is {{vallue}}","INCREMENT_CLIENT":"Toegevoegde aantal punten door klant vereisten voor sprint \"{{sprintName}}\" is {{vallue}}"},"TAGS":{"TOGGLE":"Zet de tag zichtbaarheid aan of af","SHOW":"Toon tags","HIDE":"Verberg tags"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"User Stories","TITLE_COLUMN_POINTS":"Selecteer view per rol"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"totaal
    punten","COMPLETED_POINTS":"afgeronde
    punten","OPEN_TASKS":"open
    taken","CLOSED_TASKS":"gesloten
    taken","IOCAINE_DOSES":"iocaine
    dosissen","SHOW_STATISTICS_TITLE":"Toon statistieken","TOGGLE_BAKLOG_GRAPH":"Toon/Verstop burndown grafiek","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"project
    punten","DEFINED_POINTS":"definieer
    punten","CLOSED_POINTS":"gesloten
    punten","POINTS_PER_SPRINT":"punten/
    sprint"},"FILTERS":{"TOGGLE":"Zet de filter zichtbaarheid aan of af","HIDE":"Filters verbergen","SHOW":"Toon filters"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Sprint taakbord","TITLE_LINK_TASKBOARD":"Ga naar taakbord van \"{{name}}\"","EMPTY":"There are no sprints yet","WARNING_EMPTY_SPRINT_ANONYMOUS":"This sprint has no User Stories","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"Add new sprint","TEXT_ACTION_NEW_SPRINT":"You may want to create a new sprint in your project","ACTION_SHOW_CLOSED_SPRINTS":"Toon gesloten sprints","ACTION_HIDE_CLOSED_SPRINTS":"Verberg afgesloten sprints"}},"ERROR":{"TEXT1":"Er is iets gebeurd en onze Oempa-Loempa's zijn er mee bezig.","NOT_FOUND":"Niet gevonden","NOT_FOUND_TEXT":"Error 404. De pagina die je zoekt bestaat niet meer. Misschien kan je terugkeren naar de TAIGA startpagina en kijken of je kan vinden wat je zoekt.","PERMISSION_DENIED":"Niet toegestaan","PERMISSION_DENIED_TEXT":"Je hebt geen toegangsrechten tot deze pagina","VERSION_ERROR":"Iemand bij Taiga heeft dit vooraf veranderd en onze Oempa-Loempa's konden je veranderingen niet toepassen. Gelieve te herladen en je veranderingen opnieuw toe te passen (ze zullen verloren gaan)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint taakbord - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (van {{startDate}} tot {{endDate}}) van {{projectName}}. Voltooid {{completedPercentage}}% ({{completedPoints}} van {{totalPoints}} punten). {{openTasks}} geopende taken van {{totalTasks}}.","SECTION_NAME":"Taakbord","TITLE_ACTION_ADD":"Voeg een nieuwe taak toe","TITLE_ACTION_ADD_BULK":"Wat nieuwe taken in bulk toevoegen","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Voeg kwesties in bulk toe","TITLE_ACTION_ASSIGN":"Toegewezen taak","PLACEHOLDER_CARD_TITLE":"Dit zou een taak kunnen zijn","PLACEHOLDER_CARD_TEXT":"Split Stories into tasks to track them separately","TABLE":{"COLUMN":"User story","TITLE_ACTION_FOLD":"Kolom inklappen","TITLE_ACTION_UNFOLD":"Kolom uitklappen","TITLE_ACTION_FOLD_ROW":"Regel inklappen","TITLE_ACTION_UNFOLD_ROW":"Regel uitklappen","FIELD_POINTS":"punten","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint kwesties"},"CHARTS":{"XAXIS_LABEL":"Dagen","YAXIS_LABEL":"Punten","OPTIMAL":"Optimaal resterende punten voor dag {{formattedDate}} zou {{roundedValue}} zijn","REAL":"Werkelijk aantal resterende punten op {{formattedDate}} zijn {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Taak {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Omschrijving: {{taskDescription}}","SECTION_NAME":"Taak","LINK_TASKBOARD":"Taakbord","TITLE_LINK_TASKBOARD":"Ga naar het taakbord","PLACEHOLDER_SUBJECT":"Type het nieuwe onderwerp voor de taak","TITLE_SELECT_STATUS":"Status naam","OWNER_US":"Deze taak is van","TITLE_LINK_GO_OWNER":"Ga naar user story","TITLE_DELETE_ACTION":"Verwijder taak","LIGHTBOX_TITLE_BLOKING_TASK":"Blokkerende taak","FIELDS":{"IS_IOCAINE":"Is iocaine"},"TITLE_ACTION_IOCAINE":"Voel je je wat overweldigd door een taak? Zorg ervoor dat anderen dit weten door op Iocaine te klikken bij het wijzigen van een taak. Je kan stapsgewijs immuun worden tegen dit (fictioneel) dodelijk gif door kleine dosissen op te nemen. Net zoals je beter kan worden in wat je doet door af en toe een extra uitdaging aan te gaan!"},"NOTIFICATION":{"OK":"Alles is goed","WARNING":"Oeps, er ging iets mis...","WARNING_TEXT":"Onze Oempa-Loempa's zijn verdrietig, uw veranderingen werden niet opgeslagen!","SAVED":"Onze Oompa Loompas hebben al je wijzigingen opgeslagen!","CLOSE":"Notificatie sluiten","MAIL":"Notificaties per mail","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Weet je zeker dat je wilt verwijderen?"},"CANCEL_ACCOUNT":{"TITLE":"Annuleer je account","SUBTITLE":"We vinden het spijtig dat je de taiga verlaat, hopelijk heb je van je verblijf genoten :)","PLACEHOLDER_INPUT_TOKEN":"annuleer account token","ACTION_LEAVING":"Ja, ik ga weg!","SUCCESS":"Onze Oempa-Loempa's hebben je account verwijderd"},"CHANGE_EMAIL_FORM":{"TITLE":"Wijzig je e-mail","SUBTITLE":"Nog één klik en je email wordt geüpdatet!","PLACEHOLDER_INPUT_TOKEN":"wijzig email token","ACTION_CHANGE_EMAIL":"Email wijzigen","SUCCESS":"Onze Oempa-Loempa's hebben je email bijgewerkt"},"ISSUES":{"PAGE_TITLE":"Kwesties - {{projectName}}","PAGE_DESCRIPTION":"Het kwesties lijstje van het project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Issue","ACTION_NEW_ISSUE":"+ nieuw probleem","ACTION_PROMOTE_TO_US":"Promoveer tot User Story","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Dit issue is gepromoveerd tot US:","EXTERNAL_REFERENCE":"Dit issue is aangemaakt vanaf","GO_TO_EXTERNAL_REFERENCE":"Ga naar bron","ACTION_DELETE":"Verwijderd issue","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blokkerend issue","LINK_TASKBOARD":"Taakbord","TITLE_LINK_TASKBOARD":"Ga naar het taakbord","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioriteit","SEVERITY":"Ernst","TYPE":"Type"},"FILTER_ISSUES":"Filter kwesties","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Bevorder dit issue tot een nieuwe user story","MESSAGE":"Weet je zeker dat je een nieuw US van dit issue wilt maken?"},"TABLE":{"COLUMNS":{"TYPE":"Type","SEVERITY":"Ernst","PRIORITY":"Prioriteit","SUBJECT":"Onderwerp","VOTES":"Stemmen","STATUS":"Status","MODIFIED":"Modified","ASSIGNED_TO":"Toegewezen aan"},"TITLE_ACTION_CHANGE_STATUS":"Status veranderen","TITLE_ACTION_ASSIGNED_TO":"Toegewezen aan","BLOCKED":"Geblokkeerd","EMPTY":{"TITLE":"Er zijn geen kwesties om te rapporteren :-)","SUBTITLE":"Heb je een issue gevonden?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Kwestie {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Type: {{issueType}}, Prioriteit: {{issuePriority}}. Ernst: {{issueSeverity}}. Omschrijving: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Het kanban overzicht, met user stories van het project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Kolom inklappen","TITLE_ACTION_UNFOLD":"Kolom uitklappen","TITLE_ACTION_ADD_US":"Nieuwe user story toevoegen","TITLE_ACTION_ADD_BULK":"Nieuwe bulk toevoegen","ACTION_SHOW_ARCHIVED":"Toon gearchiveerd","ACTION_HIDE_ARCHIVED":"Verberg gearchiveerde","HIDDEN_USER_STORIES":"De user stories met deze status zijn standaard verborgen","PLACEHOLDER_CARD_TITLE":"These are your User Stories","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Zoek - {{projectName}}","PAGE_DESCRIPTION":"Zoek op alles, user stories, kwesties, taken, wiki pagina's, in het project {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"User Stories","FILTER_ISSUES":"Kwesties","FILTER_TASKS":"Taken","FILTER_WIKI":"Wiki pagina's","PLACEHOLDER_SEARCH":"Zoeken in...","TITLE_ACTION_SEARCH":"zoek","EMPTY_TITLE":"Het lijkt erop dat er niets kon gevonden worden met je opgegeven zoektermen.","EMPTY_DESCRIPTION":"Probeer één van de bovenstaande tabs of zoek opnieuw"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Het team overzicht toont alle leden van het project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Team","PLACEHOLDER_INPUT_SEARCH":"Zoek op volledige naam","COLUMN_MR_WOLF":"Dhr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Gesloten kwesties","COLUMN_IOCAINE":"Iocaine Drinker","EXPLANATION_COLUMN_IOCAINE":"Ingenomen Iocaine dosissen","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki pagina's bewerkt","COLUMN_BUG_HUNTER":"Bug Jager","EXPLANATION_COLUMN_BUG_HUNTER":"Kwesties gerapporteerd","COLUMN_NIGHT_SHIFT":"Nacht Shift","EXPLANATION_COLUMN_NIGHT_SHIFT":"Taak gesloten","COLUMN_TOTAL_POWER":"Volledige Controle","EXPLANATION_COLUMN_TOTAL_POWER":"Totaal punten","SECTION_TITLE_TEAM":"Team >","SECTION_FILTER_ALL":"Alles","CONFIRM_LEAVE_PROJECT":"Weet je zeker dat je dit project wilt verlaten?","ACTION_LEAVE_PROJECT":"Verlaat dit project"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. grootte: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Gebruikersinstellingen","USER_PROFILE":"Gebruikersprofiel","CHANGE_PASSWORD":"Wachtwoord wijzigen","EMAIL_NOTIFICATIONS":"Email notificaties","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Email notificaties","COLUMN_PROJECT":"Project","COLUMN_RECEIVE_ALL":"Alles ontvangen","COLUMN_ONLY_INVOLVED":"Alleen betrokkken","COLUMN_NO_NOTIFICATIONS":"Geen notificaties","OPTION_ALL":"Alles","OPTION_INVOLVED":"Betrokken","OPTION_NONE":"Geen"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Project","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Project"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Use default image","ACTION_DELETE_ACCOUNT":"Verwijderd Taiga account","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Controleer je inbox!
    We hebben je een email gestuurd met instructie om je nieuwe adres in te stellen","CHANGE_PHOTO":"Foto wijzigen","FIELD":{"USERNAME":"Gebruikersnaam","EMAIL":"E-mail","FULL_NAME":"Volledige naam","PLACEHOLDER_FULL_NAME":"Vul je volledige naam in (ex. Íñigo Montoya)","BIO":"Bio","PLACEHOLDER_BIO":"Vertel iets over jezelf","LANGUAGE":"Taal","LANGUAGE_DEFAULT":"-- gebruik standaard taal --","THEME":"Thema","THEME_DEFAULT":"-- gebruikt standaard thema --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Laatst bewerkt op {{lastModifiedDate}} ({{totalEditions}} keer bewerkt in totaal) Inhoud: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Verwijder deze wiki pagina","DELETE_LIGHTBOX_TITLE":"Verwijderd wiki pagina","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"keer
    bewerkt","LAST_EDIT":"laatst
    bewerkt","LAST_MODIFICATION":"laatste wijziging"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Titel","EDITIONS":"Editions","CREATED":"Aangemaakt","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Hint","LINK":"Als je wilt weten hoe, bezoek dan onze support-pagina","LINK_TITLE":"Bezoek onze supportpagina","HINT1_TITLE":"Wist je dat je nu projecten kunt importeren en exporteren?","HINT1_TEXT":"Dit maakt het mogelijk om al je data vanuit de ene taiga te verplaatsen naar een andere","HINT2_TITLE":"Weet je dat je custom velden kunt aanmaken?","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 forget what were you working on?","HINT4_TEXT":"Maak je geen zorgen, op je dashboard vind je al jouw open taken, kwesties en user stories in de volgorde waarin je hebt gewerkt."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} heeft een nieuwe bijlage geüpload in {{obj_name}}","US_CREATED":"{{username}} heeft een nieuwe US aangemaakt {{obj_name}} in {{project_name}}","ISSUE_CREATED":"{{username}} heeft een nieuw Issue aangemaakt {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} heeft een nieuwe taak aangemaakt {{obj_name}} in {{project_name}}","TASK_CREATED_WITH_US":"{{username}} heeft de nieuwe taak {{obj_name}} aangemakt in {{project_name}} die hoort bij de US {{us_name}}","WIKI_CREATED":"{{username}} heeft een nieuwe Wiki-pagina aangemaakt {{obj_name}} in {{project_name}}","MILESTONE_CREATED":"{{username}} heeft een nieuwe sprint aangemaakt {{obj_name}} in {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} heeft een nieuw project aangemaakt {{project_name}}","MILESTONE_UPDATED":"{{username}} heeft de sprint {{obj_name}} bijgewerkt","US_UPDATED":"{{username}} heeft de eigenschap \"{{field_name}}\" van de US {{obj_name}} bijgewerkt","US_UPDATED_WITH_NEW_VALUE":"{{username}} heeft het attribuut \"{{field_name}}\" van de US {{obj_name}} gewijzigd naar {{new_value}}","US_UPDATED_POINTS":"{{username}} heeft '{{role_name}}' punten van de user story {{obj_name}} gewijzigd naar {{new_value}}","ISSUE_UPDATED":"{{username}} heeft de eigenschap \"{{field_name}}\" van het issue {{obj_name}} bijgewerkt","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} heeft het attribuut \"{{field_name}}\" van de issue gewijzigd van {{obj_name}} naar {{new_value}}","TASK_UPDATED":"{{username}} heeft het attribuut \"{{field_name}}\" van de taak {{obj_name}} gewijzigd naar {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} heeft het attribuut \"{{field_name}}\" van de taak {{obj_name}} gewijzigd naar {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} heeft de eigenschap \"{{field_name}}\" van de taak {{obj_name}} die behoort tot de US {{us_name}} bijgewerkt","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} heeft de eigenschap \"{{field_name}}\" van de taak {{obj_name}} die behoort tot de US {{us_name}} gewijzigd naar {{new_value}}","WIKI_UPDATED":"{{username}} heeft de wiki pagina {{obj_name}} bijgewerkt","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} heeft gereageerd op de US {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} heeft gereageerd op het issue {{obj_name}}","NEW_COMMENT_TASK":"{{username}} heeft gereageerd op de taak {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} heeft gereageerd op de epic {{obj_name}}","NEW_MEMBER":"{{project_name}} heeft een nieuw lid","US_ADDED_MILESTONE":"{{username}} heeft de US {{obj_name}} toegevoegd aan {{sprint_name}}","US_MOVED":"{{username}} heeft de user story {{obj_name}} verplaatst","US_REMOVED_FROM_MILESTONE":"{{username}} heeft de US {{obj_name}} toegevoegd aan de Backlog","BLOCKED":"{{username}} heeft {{obj_name}} geblokkeerd","UNBLOCKED":"{{username}} heeft {{obj_name}} gedeblokkeerd","NEW_USER":"{{username}} heeft zich aangemeld voor Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Issue","TASK":"Taak"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Login with another user","AUTHORIZE_APP":"Authorize app","CANCEL":"Annuleren"},"JOYRIDE":{"NAV":{"NEXT":"Volgende","BACK":"Back","SKIP":"Skip","DONE":"Afgewerkt"},"DASHBOARD":{"STEP1":{"TITLE":"Your project","TEXT":"Welcome! Here you will find the projects you are involved on."},"STEP2":{"TITLE":"Werkt aan","TEXT":"Hier vind je de user stories, taken en kwesties waar je aan werkt."},"STEP3":{"TITLE":"Volgers","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"You are already working with Taiga ;)"},"STEP4":{"TITLE":"Laten we beginnen","TEXT1":"You can start by creating your first Taiga project.","TEXT2":"Veel succes!"}},"BACKLOG":{"STEP1":{"TITLE":"Project summary","TEXT1":"Here you will see the state of your project.","TEXT2":"You can change every kind of project settings through the admin."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"User Stories","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"User Stories & Tasks","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Veel succes!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Discover projects","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Most liked","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"Meer","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Alles","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Looking for people","WEEK":"Vorige week","MONTH":"Vorige maand","YEAR":"Vorig jaar","ALL_TIME":"All time","CLEAR":"Filters ongedaan maken"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Typ iets...","ACTION_TITLE":"Zoek","RESULTS":"Search results"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-pl.json b/dist/v-1549282893552/locales/taiga/locale-pl.json new file mode 100644 index 0000000..6ffd66e --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-pl.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Tak","NO":"Nie","OR":"lub","I_GET_IT":"OK, I get it","LOADING":"Wczytywanie...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Zapisz","CANCEL":"Anuluj","ACCEPT":"Akceptuj","DELETE":"Usuń","UNLINK":"Odłącz","CREATE":"Stwórz","ADD":"Dodaj","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Edycja","DRAG":"Przeciągnij","TAG_LINE":"Twoje zwinne, wolne, otwartoźródłowe narzędzie do zarządzania projektem","TAG_LINE_2":"Pokochaj swój projekt!","BLOCK":"Blokuj","BLOCK_TITLE":"Zablokuj to np. jeżeli posiada zależności, które nie mogą być zrealizowane","BLOCKED":"Zablokowane","UNBLOCK":"Odblokuj","UNBLOCK_TITLE":"Odblokuj","BLOCKED_NOTE":"Dlaczego jest zabokowane?","BLOCKED_REASON":"Wyjaśnij powód","CREATED_BY":"Utworzone przez {{fullDisplayName}}","CLOSE":"zamknij","GO_HOME":"Zabierz mnie do strony domowej","PLUGINS":"Wtyczki","ONE_ITEM_LINE":"Jedna pozycja na wiersz...","NEW_BULK":"Nowe zbiorcze dodawanie","SUBTASKS":"Subtasks","PREVIOUS":"Poprzedni","NEXT":"Następny","LOGOUT":"Wyloguj","EXTERNAL_USER":"zewnętrzny użytkownik","GENERIC_ERROR":"Umpa Lumpa mówi {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Project Owner","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Powiązane historyjki użytkownika","CARD":{"ASSIGN_TO":"Przypisz Do","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Usuń zgłoszenie","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Nieprawidłowa wartość","TYPE_EMAIL":"Podaj prawidłowy adres email.","TYPE_URL":"Podaj prawidłowy link.","TYPE_URLSTRICT":"Tutaj powinien być prawidłowy link.","TYPE_NUMBER":"Podaj prawidłową wartość liczbową.","TYPE_DIGITS":"Tutaj powinny znajdować się cyfry.","TYPE_DATEISO":"Tutaj powinna znajdować się data w formacie (RRRR-MM-DD).","TYPE_ALPHANUM":"Tutaj powinna znajdować się wartość alfanumeryczna.","TYPE_PHONE":"Wpisz numer telefonu.","NOTNULL":"Ta wartość nie powinna być zerowa.","NOT_BLANK":"To pole nie powinno zostać puste.","REQUIRED":"To pole jest wymagane.","REGEXP":"Nieprawidłowa wartość","MIN":"Ta wartość powinna być większa lub równa od %s.","MAX":"Ta wartość powinna być mniejsza lub równa od %s.","RANGE":"Ta wartość powinna mieścić się w przedziale od %s do %s.","MIN_LENGTH":"Zbyt mało znaków. Wpisz %s lub więcej znaków.","MAX_LENGTH":"Zbyt dużo znaków. Wpisz %s lub mniej znaków.","RANGE_LENGTH":"Niewłaściwa ilość znaków. Wpisz pomiędzy %s a %s znaków.","MIN_CHECK":"Musisz zaznaczyć przynajmniej %s pozycji.","MAX_CHECK":"Musisz zaznaczyć %s pozycji lub mniej.","RANGE_CHECK":"Musisz zaznaczyć pomiędzy %s a %s pozycji.","EQUAL_TO":"Ta wartość powinna być taka sama.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Poprzedni Miesiąc","NEXT_MONTH":"Następny Miesiąc","MONTHS":{"JAN":"Styczeń","FEB":"Luty","MAR":"Marzec","APR":"Kwiecień","MAY":"Maj","JUN":"Czerwiec","JUL":"Lipiec","AUG":"Sierpień","SEP":"Wrzesień","OCT":"Październik","NOV":"Listopad","DEC":"Grudzień"},"WEEK_DAYS":{"SUN":"Niedziela","MON":"Poniedziałek","TUE":"Wtorek","WED":"Środa","THU":"Czwartek","FRI":"Piątek","SAT":"Sobota"},"WEEK_DAYS_SHORT":{"SUN":"Nd","MON":"Pon","TUE":"Wt","WED":"Śr","THU":"Czw","FRI":"Pt","SAT":"Sob"}},"SEE_USER_PROFILE":"Zobacz profil użytkownika {{username }}","USER_STORY":"Historyjka użytkownika","TASK":"Zadania","ISSUE":"Zgłoszenie","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"Usuń tag","ADD":"Dodaj tag"},"DESCRIPTION":{"EMPTY":"Puste miejsce jest takie nudne... opisz, nadaj sensu...","NO_DESCRIPTION":"Jeszcze bez opisu"},"FIELDS":{"SUBJECT":"Temat","NAME":"Nazwa","URL":"Link","DESCRIPTION":"Opis","VALUE":"Wartość","SLUG":"Slug","COLOR":"Kolor","IS_CLOSED":"Zamknięte?","STATUS":"Status","TYPE":"Typ","SEVERITY":"Ważność","PRIORITY":"Priorytet","ASSIGNED_TO":"Przydzielone do","ASSIGNED_USERS":"Assigned users","POINTS":"Punkty","IS_BLOCKED":"zablokowana","REF":"Ref","VOTES":"Głosy","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Wszystko"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Nieprzypisane","ASSIGN":"Assign","DELETE_ASSIGNMENT":"Usuń przypisanie","REMOVE_ASSIGNED":"Ukryj przypisane","TOO_MANY":"...zbyt wielu użytkowników, filtruj dalej Umpa Lumpy nie ogarniają","CONFIRM_UNASSIGNED":"Jesteś pewny, że chcesz pozostawić nieprzypisane?","TITLE_ACTION_EDIT_ASSIGNMENT":"Edytuj przypisanie","SELF":"Przypisz do mnie"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Zamknięte","OPEN":"Otwórz"},"WATCHERS":{"WATCHERS":"Obserwatorzy","ADD":"Dodaj obserwatorów","TITLE_ADD":"Dodaj członka projektu do listy obserwatorów.","DELETE":"Usuń obserwatora","TITLE_LIGHTBOX_DELETE_WARTCHER":"Usuwanie obserwatora..."},"WATCH_BUTTON":{"WATCH":"Obserwuj","WATCHING":"Obserwujesz","UNWATCH":"Nie obserwuj","WATCHERS":"Obserwatorzy","BUTTON_TITLE":"Obserwuj lub przestań obserwować","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Ocen ten obiekt","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Własne Pola","SAVE":"Zapisz pole niestandardowe","EDIT":"Edytuj pole niestandardowe","DELETE":"Usuń niestandardowy atrybut","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Temat lub odniesienie","TITLE_ACTION_FILTER_BUTTON":"szukaj","TITLE":"Filtry","TITLE_ACTION_SEARCH":"Szukaj","ACTION_SAVE_CUSTOM_FILTER":"zapisz jako filtr niestandardowy","PLACEHOLDER_FILTER_NAME":"Wpisz nazwę filtru i kliknij enter","APPLIED_FILTERS_NUM":"filters applied","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Typ","STATUS":"Statusy","SEVERITY":"Ważność","PRIORITIES":"Priorytety","TAGS":"Tagi","ASSIGNED_TO":"Przypisane do","ASSIGNED_USERS":"Assigned users","ROLE":"Rola","CREATED_BY":"Stworzona przez","CUSTOM_FILTERS":"Filtry niestandardowe","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Składnia Markdown pomoc"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epiki","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"Sprinty","VIEW_SPRINTS":"Przeglądaj Sprinty","ADD_SPRINTS":"Dodawaj sprinty","MODIFY_SPRINTS":"Modyfikuj sprinty","DELETE_SPRINTS":"Usuwaj sprinty"},"USER_STORIES":{"NAME":"Historyjki użytkownika","VIEW_USER_STORIES":"Przeglądaj historyjki użytkownika","ADD_USER_STORIES":"Dodawaj historyjki użytkownika","MODIFY_USER_STORIES":"Modyfikuj historyjki użytkownika","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Usuwaj historyjki użytkownika"},"TASKS":{"NAME":"Zadania","VIEW_TASKS":"Przeglądaj zadania","ADD_TASKS":"Dodawaj zadania","MODIFY_TASKS":"Modyfikuj zadania","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Usuwaj zadania"},"ISSUES":{"NAME":"Zgłoszenia","VIEW_ISSUES":"Przeglądaj zgłoszenia","ADD_ISSUES":"Dodawaj zgłoszenia","MODIFY_ISSUES":"Modyfikuj zgłoszenia","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Usuwaj zgłoszenia"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Przeglądaj strony Wiki","ADD_WIKI_PAGES":"Dodawaj strony Wiki","MODIFY_WIKI_PAGES":"Modyfikuj strony Wiki","DELETE_WIKI_PAGES":"Usuwaj strony Wiki","VIEW_WIKI_LINKS":"Przeglądaj linki Wiki","ADD_WIKI_LINKS":"Dodawaj linki Wiki","DELETE_WIKI_LINKS":"Usuwaj linki Wiki"}}},"LOGIN":{"PAGE_TITLE":"Logowanie - Taiga","PAGE_DESCRIPTION":"Logowanie do Taiga, platformy do zarządzania projektami dla startup'ów oraz zwinnych developerów i designerów, którzy potrzebują prostego, ładnego narzędzia, które sprawi, że praca stanie się przyjemnością."},"AUTH":{"INVITED_YOU":"zaprasza cię do dołączenia do projektu","NOT_REGISTERED_YET":"Jeszcze nie zarejestrowany?","REGISTER":"Zarejestruj","CREATE_ACCOUNT":"Tutaj utwórz swoje darmowe konto"},"LOGIN_COMMON":{"HEADER":"Mam już login do Taigi","PLACEHOLDER_AUTH_NAME":"Login albo e-mail (uwzględnij wielkość liter)","LINK_FORGOT_PASSWORD":"Zapomniałeś?","TITLE_LINK_FORGOT_PASSWORD":"Zapomniałeś hasło? ","ACTION_ENTER":"Wprowadź","ACTION_SIGN_IN":"Zaloguj","PLACEHOLDER_AUTH_PASSWORD":"Hasło (uwzględnij wielkość liter)","ALT_LOGIN":"Lub zaloguj z"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Nasze Umpa Lumpy twierdzą,że Twój login/e-mail lub hasło nie są poprawne.","SUCCESS":"Nasze Umpa Lumpy są szczęśliwe, witaj w Taiga."},"REGISTER":{"PAGE_TITLE":"Rejestracja - Taiga","PAGE_DESCRIPTION":"Załóż własne konto w Taiga, platformie do zarządzania projektami dla startup'ów i zwinnych deweloperów oraz designerów, którzy chcą prostego, pięknego narzędzia sprawiającego, że praca jest przyjemna."},"REGISTER_FORM":{"TITLE":"Utwórz nowe konto (bezpłatnie)","PLACEHOLDER_NAME":"Wybierz nazwę użytkownika (z uwzględnieniem wielkości liter)","PLACEHOLDER_FULL_NAME":"Podaj twoje imię i nazwisko","PLACEHOLDER_EMAIL":"Twój e-mail","PLACEHOLDER_PASSWORD":"Wpisz nowe hasło (z uwzględnieniem wielkości liter)","ACTION_SIGN_UP":"Zarejestruj","TITLE_LINK_LOGIN":"Zaloguj","LINK_LOGIN":"Jesteś już zarejestrowany? Zaloguj się"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Zapomniałem hasła - Taiga","PAGE_DESCRIPTION":"Podaj twoją nazwę użytkownika lub e-mail by zdobyć nowe hasło i odzyskać dostęp do Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Ups, czyżbyś zapomniał hasło?","SUBTITLE":"Podaj twoją nazwę użytkownika lub e-mail by zdobyć nowe","PLACEHOLDER_FIELD":"Login albo e-mail","ACTION_RESET_PASSWORD":"Resetuj hasło","LINK_CANCEL":"Nie, zabierz mnie stąd. Chyba je pamiętam.","SUCCESS_TITLE":"Sprawdź swoją skrzynkę mailową!","SUCCESS_TEXT":"Sprawdź swoją skrzynkę!
    Wysłaliśmy Ci wiadomość e-mail z instrukcją jak ustawić nowe hasło.","ERROR":"Nasze Umpa Lumpy twierdzą, że nie jesteś jeszcze zarejestrowany."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Zmień hasło - Taiga","SECTION_NAME":"Zmień hasło","FIELD_CURRENT_PASSWORD":"Obecne hasło","PLACEHOLDER_CURRENT_PASSWORD":"Twoje obecne hasło (lub puste, jeśli jeszcze go nie masz)","FIELD_NEW_PASSWORD":"Nowe hasło","PLACEHOLDER_NEW_PASSWORD":"Wpisz nowe hasło","FIELD_RETYPE_PASSWORD":"Wpisz ponownie nowe hasło","PLACEHOLDER_RETYPE_PASSWORD":"Wpisz ponownie nowe hasło","ERROR_PASSWORD_MATCH":"Hasło nie jest zgodne"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Ustaw nowe hasło do Taiga","SUBTITLE":"Powinieneś spróbować jeść więcej rzeczy bogatych w żelazo, są dobre dla Twojej pamięci :P","PLACEHOLDER_NEW_PASSWORD":"Nowe hasło","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Wpisz ponownie nowe hasło","ACTION_RESET_PASSWORD":"Resetuj hasło","ERROR":"Our Oompa Loompas can't find your request to recover your password. Try to ask for it again.","SUCCESS":"Nasze Umpa Lumpy zapisały Twoje nowe hasło
    Spróbuj zalogować się z jego pomocą."},"INVITATION":{"PAGE_TITLE":"Akceptowanie zaproszenia - Taiga","PAGE_DESCRIPTION":"Zaakceptuj zaproszenie, aby dołączyć do projektu w Taiga, platformie do zarządzania projektami dla startup'ów i zwinnych deweloperów oraz designerów, którzy chcą prostego, pięknego narzędzia sprawiającego, że praca jest przyjemna."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Nasze Umpa Lumpy nie znajdują Twojego zaproszenia :(","SUCCESS":"Udało Ci się dołączyć do tego projektu. Witaj w {{project_name}}"},"HOME":{"PAGE_TITLE":"Strona główna - Taiga","PAGE_DESCRIPTION":"Główna strona Taiga, z Twoimi głównymi projektami i wszystkimi przypisanymi Tobie i obserwowanymi historyjkami użytkownika, zadaniami i zgłoszeniami.","EMPTY_WORKING_ON":"Trochę pusto, nieprawdaż? Zacznij pracować z Taiga a tutaj pojawią się historie, zadania i zgłoszenia nad którymi pracujesz.","EMPTY_WATCHING":"Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)","EMPTY_PROJECT_LIST":"Nie masz jeszcze żadnych projektów","WORKING_ON_SECTION":"Pracujesz nad","WATCHING_SECTION":"Obserwujesz","DASHBOARD":"Panel projektów"},"EPICS":{"TITLE":"EPIKI","SECTION_NAME":"Epiki","EPIC":"EPIK","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+DODAJ EPIK","UNASSIGNED":"Nieprzypisane"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Głosy","NAME":"Nazwa","PROJECT":"Projekt","SPRINT":"Sprint","ASSIGNED_TO":"Przydzielone","STATUS":"Statusy","PROGRESS":"Postęp","VIEW_OPTIONS":"Zobacz opcje"},"CREATE":{"TITLE":"Nowy epik","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Wymaganie zespołu","CLIENT_REQUIREMENT":"Wymaganie klienta","BLOCKED":"Zablokowane","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Moje projekty - Taiga","PAGE_DESCRIPTION":"Lista wszystkich Twoich projektów, możesz zmieniać ich kolejność lub tworzyć nowe.","MY_PROJECTS":"Moje projekty"},"ATTACHMENT":{"SECTION_NAME":"załączniki","TITLE":"{{ plik }} załadowany dnia {{ data }}","LIST_VIEW_MODE":"Tryb listy","GALLERY_VIEW_MODE":"Tryb galerii","DESCRIPTION":"Wpisz krótki opis","DEPRECATED":"(przestarzały)","DEPRECATED_FILE":"Przestarzałe?","ADD":"Dodaj nowy załącznik. {{maxFileSizeMsg}}","DROP":"Upuść załączniki tutaj","SHOW_DEPRECATED":"+ pokaż przestarzałe załączniki","HIDE_DEPRECATED":"- ukryj przestarzałe załączniki","COUNT_DEPRECATED":"({{ counter }} przestarzałych","MAX_UPLOAD_SIZE":"Maksymalny rozmiar wysyłania to {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Nie udało się przesłać pliku '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Usuń załącznik...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"załącznik '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Nie udało się usunąć załącznika w związku z następującym błędem: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Poprzedni","NEXT":"Następny"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Edytuj wartość","TITLE_ACTION_DELETE_VALUE":"Usuń wartość","TITLE_ACTION_DELETE_TAG":"Usuń tag"},"HELP":"Potrzebujesz pomocy? Sprawdź naszą stronę wsparcia!","PROJECT_DEFAULT_VALUES":{"TITLE":"Domyślne wartości","SUBTITLE":"Ustaw wartości domyślne dla wszystkich pól wyboru."},"MEMBERSHIPS":{"TITLE":"Zarządzaj członkami","PAGE_TITLE":"Członkostwa - {{projectName}}","ADD_BUTTON":"+ Nowy członek","ADD_BUTTON_TITLE":"Dodaj nowego członka","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Ten projekt osiągną limit ({{members}}) użytkowników. Jeśli chcesz zwiększyć ten limit, skontaktuj się z administratorem."},"PROJECT_EXPORT":{"TITLE":"Eksport","SUBTITLE":"Wyeksportuj twój projekt aby utworzyć kopię zapasową lub stworzyć nowy bazujący na nim.","EXPORT_BUTTON":"Eksport","EXPORT_BUTTON_TITLE":"Eksport projektu","LOADING_TITLE":"Generujemy plik zrzutu","DUMP_READY":"Twój plik zrzutu jest gotowy!","LOADING_MESSAGE":"Proszę, nie zamykaj tej strony.","ASYNC_MESSAGE":"Wyślemy Ci wiadomość e-mail, kiedy będziemy gotowi.","SYNC_MESSAGE":"Jeśli pobieranie nie rozpocznie się automatycznie kliknij tutaj.","ERROR":"Umpa Lumpy mają problem z wygenerowaniem zrzutu. Spróbuj ponownie.","ERROR_BUSY":"Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę."},"MODULES":{"TITLE":"Moduły","EPICS":"Epiki","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Dziennik","BACKLOG_DESCRIPTION":"Zarządzaj swoimi historyjkami użytkownika aby utrzymać zorganizowany widok i priorytety zadań","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 dla nieokreślonej liczby","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 dla nieokreślonej liczby","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organizuj swój projekt przy użyciu metody lean.","ISSUES":"Zgłoszenia","ISSUES_DESCRIPTION":"Śledź błędy, pytania i ulepszenia związane z projektem. Nie przegap niczego!","WIKI":"Wiki","WIKI_DESCRIPTION":"Dodawaj, modyfikuj lub usuwaj dane we współpracy z innymi. To jest właściwe miejsce dla Twojej dokumentacji projektowej.","MEETUP":"Spotkaj się","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Wybierz system do wideokonferencji.","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Niestandardowy","URL_CHAT_ROOM":"Link do chat roomu"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Profil projektu - {{projectName}}","PROJECT_DETAILS":"Szczegóły projektu","PROJECT_NAME":"Nazwa projektu","TAGS":"Tagi","DESCRIPTION":"Opis","RECRUITING":"Czy ten pojekt szuka uczestników?","RECRUITING_MESSAGE":"Kogo szukasz?","RECRUITING_PLACEHOLDER":"Zdefiniuj jakich profilów szukasz","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Projekt publiczny","PRIVATE_PROJECT":"Projekt prywatny","PRIVATE_OR_PUBLIC":"Jaka jest różnica między publicznymi a prywatnymi projektami?","DELETE":"Usuń ten projekt","CHANGE_LOGO":"Zmień logo","ACTION_USE_DEFAULT_LOGO":"Użyj domyślnego obrazu","MAX_PRIVATE_PROJECTS":"Osiągnąłeś maksymalną liczbę prywatnych projektów dozwoloną przez obecny plan","MAX_PRIVATE_PROJECTS_MEMBERS":"Maksymalna liczba członków dla prywatnych projektów została przekroczona.","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Żądanie","REQUEST_OWNERSHIP_SUCCESS":"Powiadomimy właściciela projektu","CHANGE_OWNER":"Zmień właściciela","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Raporty","SUBTITLE":"Wyeksportuj dane projektu w CSV i stwórz swoje własne projekty","DESCRIPTION":"Pobierz plik CSV lub skopiuj wygenerowany adres URL i otwórz go w edytorze tekstu lub arkuszu kalkulacyjnym, aby tworzyć własne raporty danych projektu. Będziesz mógł łatwo wizualizować i analizować wszystkie dane.","HELP":"Jak mogę tego użyć we własnym arkuszu kalkulacyjnym?","REGENERATE_TITLE":"Zmień link","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"raporty historii użytkownika","SECTION_TITLE_TASK":"Raporty zadań","SECTION_TITLE_ISSUE":"raporty zgłoszeń","DOWNLOAD":"Ściągnij CSV","URL_FIELD_PLACEHOLDER":"Proszę wygeneruj ponownie link do CSV","TITLE_REGENERATE_URL":"Wygeneruj ponownie link do CSV","ACTION_GENERATE_URL":"Wygeneruj link","ACTION_REGENERATE":"Wygeneruj ponownie","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Usuń"},"CUSTOM_FIELDS":{"TITLE":"Własne Pola","SUBTITLE":"Zdefiniuj własne dodatkowe pola dla historyjek użytkownika, zadań i zgłoszeń.","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"Własne pola dla historyjek użytkownika","US_ADD":"Dodaj własne pole dla historyjek użytkownika","TASK_DESCRIPTION":"Własne pola dla zadań","TASK_ADD":"Dodaj Własne pole dla zadań","ISSUE_DESCRIPTION":"Własne pola dla zgłoszeń","ISSUE_ADD":"Dodaj własne pole dla zgłoszeń","FIELD_TYPE_TEXT":"Tekst","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Pole wielowierszowe","FIELD_TYPE_DATE":"Date","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Wartości projektu - {{projectName}}","REPLACEMENT":"Wszystkie wpisy z tą wartością zostaną zmienione na","ERROR_DELETE_ALL":"Nie możesz usunąć wszystkich wartości."},"PROJECT_VALUES_POINTS":{"TITLE":"Punkty","SUBTITLE":"Podaj możliwe estymaty dla historyjek użytkownika","US_TITLE":"punkty","ACTION_ADD":"Dodaj nową wartość"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Priorytety","SUBTITLE":"Zdefiniuj priorytety dla zgłoszeń","ISSUE_TITLE":"Priorytety zgłoszeń","ACTION_ADD":"Dodaj nowy priorytet"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Ważność","SUBTITLE":"Zdefiniuj ważność dla zgłoszeń","ISSUE_TITLE":"Ważność zgłoszeń","ACTION_ADD":"Dodaj nową ważność"},"PROJECT_VALUES_STATUS":{"TITLE":"Statusy","SUBTITLE":"Zdefiniuj statusy dla historyjek użytkownika, zadań i zgłoszeń.","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"Statusy zadań","ISSUE_TITLE":"Statusy zgłoszeń"},"PROJECT_VALUES_TYPES":{"TITLE":"Typy","SUBTITLE":"Zdefiniuj typy zgłoszeń","ISSUE_TITLE":"Typy zgłoszeń","ACTION_ADD":"Dodaj nowy {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Tagi","SUBTITLE":"Zobacz i edytuj kolory tagów","EMPTY":"Aktualnie nie ma tu tagów","EMPTY_SEARCH":"Nie znaleziono niczego, co spełniałoby podane kryteria.","ACTION_ADD":"Dodaj tag","NEW_TAG":"Nowy tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Dodaj nowy status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Role - {{projectName}}","WARNING_NO_ROLE":"Bez przydzielenia ról w projekcie nie ma możliwości oceniania historyjek użytkownika. Umpa Lumpy nie będą wiedziały komu wolno to zrobić :)","HELP_ROLE_ENABLED":"Jeśli aktywne użytkownicy pełniący tę rolę będą mogli szacować wartości historyjek","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} użytkowników pełniących tę rolę w projekcie","TITLE_DELETE_ROLE":"Usuń rolę","REPLACEMENT_ROLE":"Wszyscy użytkownicy pełniący tę rolę zostaną przeniesieni do","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Nie możesz usunąć wszystkich wartości","EXTERNAL_USER":"Zewnętrzny użytkownik","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Tajny klucz","PAYLOAD_URL":"Payload URL","VALID_IPS":"Adresy IP(oddzielone przecinkami)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Zapytania Bitbucket nie są szyfrowane zatem najlepszym sposobem weryfikacji źródła jest sprawdzenie adresu IP.Jeśli pole pozostanie puste sprawdzanie IP nie będzie działać."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Zapytania Gitlab nie są szyfrowane zatem najlepszym sposobem weryfikacji źródła jest sprawdzenie adresu IP.Jeśli pole pozostanie puste sprawdzanie IP nie będzie działać."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Dodaj nowy webhook","TYPE_NAME":"Wpisz nazwę serwisu","TYPE_PAYLOAD_URL":"Type the service payload url","TYPE_SERVICE_SECRET":"Wpisz sekretny klucz","SAVE":"Zapisz Webhook","CANCEL":"Cancel Webhook","SHOW_HISTORY":"(Show history)","TEST":"Testuj Webhook","EDIT":"Zmień Webhook","DELETE":"Usuń Webhook","REQUEST":"Żądanie","RESEND_REQUEST":"Resend request","HEADERS":"Headers","PAYLOAD":"Payload","RESPONSE":"Response","DATE":"DD MMM YYYY [at] hh:mm","ACTION_HIDE_HISTORY":"(Ukryj historię)","ACTION_HIDE_HISTORY_TITLE":"Ukryj szczegóły historii","ACTION_SHOW_HISTORY":"(Pokaż historię)","ACTION_SHOW_HISTORY_TITLE":"Pokaż szczegóły historii","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Niestandardowe atrybuty - {{projectName}}","ADD":"Dodaj niestandardowe pole","EDIT":"Edytuj niestandardowe pole","DELETE":"Usuń niestandardowe pole","SAVE_TITLE":"Zapisz niestandardowe pole","CANCEL_TITLE":"Anuluj tworzenie","SET_FIELD_NAME":"podaj nazwę pola","SET_FIELD_DESCRIPTION":"podaj opis pola","FIELD_TYPE_DEFAULT":"-- wybierz --","ACTION_UPDATE":"Aktualizuj pole","ACTION_CANCEL_EDITION":"Anuluj edycję"},"MEMBERSHIP":{"COLUMN_MEMBER":"Członek","COLUMN_ADMIN":"Admin","COLUMN_ROLE":"Rola","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Aktywny","STATUS_PENDING":"Nieaktywny","DELETE_MEMBER":"Usuń członka","RESEND":"Wyślij ponownie","SUCCESS_SEND_INVITATION":"Ponownie wysłano zaproszenie do '{{e-mail}}'.","SUCCESS_DELETE":"Usunięto {{message}}.","ERROR_DELETE":"Nie usunięto {{message}}.","DEFAULT_DELETE_MESSAGE":"zaproszenie do {{e-mail}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Domyślna wartość dla selektora punktów","LABEL_TASK_STATUS":"Domyśla wartość dla selektora statusu zadań","LABEL_ISSUE_TYPE":"Domyślna wartość dla selektora typu zgłoszenia","LABEL_ISSUE_STATUS":"Domyślna wartość dla selektora statusu zgłoszenia","LABEL_PRIORITY":"Domyślna wartość dla selektora priorytetu","LABEL_SEVERITY":"Domyślna wartość dla selektora ważności"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Wpisz nazwę nowego statusu","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Wpisz nazwę nowego elementu"},"US_STATUS":{"ACTION_ADD_STATUS":"Dodaj nowy status","IS_ARCHIVED_COLUMN":"Zarchiwizowane","IS_CLOSED_COLUMN":"Zamknięte","WIP_LIMIT_COLUMN":"WIP Limit","PLACEHOLDER_WRITE_NAME":"Wpisz nazwę nowego statusu"},"MENU":{"PROJECT":"Projekt","ATTRIBUTES":"Atrybuty","MEMBERS":"Członkowie","PERMISSIONS":"Uprawnienia","INTEGRATIONS":"Integracje"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Punkty","PRIORITIES":"Priorytety","SEVERITIES":"Ważność","TYPES":"Typy","CUSTOM_FIELDS":"Niestandardowe pola","TAGS":"Tagi","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Role","ACTION_NEW_ROLE":"+ Nowa rola","TITLE_ACTION_NEW_ROLE":"Dodaj nową rolę"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Akceptuj","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Edycja profilu","CLOSED_US":"Zamknięte historyjki użytkownika","PROJECTS":"Projekty","PROJECTS_EMPTY":"{{username}} jeszcze nie uczestniczy w żadnym projekcie","CONTACTS":"Kontakty","CONTACTS_EMPTY":"{{username}} jeszcze nie ma kontaktów","CURRENT_USER_CONTACTS_EMPTY":"Jeszcze nie masz kontaktów","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Ludzie z którymi pracujesz w Taiga staną się Twoimi kontaktami automatycznie.","TABS":{"ACTIVITY_TAB":"Oś czasu","ACTIVITY_TAB_TITLE":"Wyświetl całą aktywność użytkownika","PROJECTS_TAB":"Projekty","PROJECTS_TAB_TITLE":"Lista wszystkich projektów, do których należy użytkownik","LIKES_TAB":"Polubienia","LIKES_TAB_TITLE":"Zobacz wszystkie polubienia tego użytkownika","VOTES_TAB":"Głosy","VOTES_TAB_TITLE":"Zobacz wszystkie głosy tego użytkownika","WATCHED_TAB":"Obserwowane","WATCHED_TAB_TITLE":"List all item watched by this user","CONTACTS_TAB":"Kontakty","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"Twój profil","DESCRIPTION":"Ludzie mogą zobaczyć wszystko co robisz i nad czym pracujesz. Dodaj dobre bio, żeby przedstawić więcej informacji.","ADD_INFO":"Edytuj biografię"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Type something...","FILTER_TYPE_ALL":"Wszystkie","FILTER_TYPE_ALL_TITLE":"Show all","FILTER_TYPE_PROJECTS":"Projekty","FILTER_TYPE_PROJECTS_TITLE":"Show only projects","FILTER_TYPE_EPICS":"Epiki","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"Stories","FILTER_TYPE_USER_STORIES_TITLE":"Show only user stories","FILTER_TYPE_TASKS":"Zadania","FILTER_TYPE_TASKS_TITLE":"Show only tasks","FILTER_TYPE_ISSUES":"Zgłoszenia","FILTER_TYPE_ISSUES_TITLE":"Show only issues","EMPTY_TITLE":"Wygląda na to, że nie ma niczego do wyświetlenia tutaj."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Ustal kolejność Twoich projektów tak, aby na górze znalazły się te najważniejsze.
    Pierwsze 10 projektów pojawi się w liście projektów na górnym pasku nawigacji.","PRIVATE":"Projekt prywatny","LOOKING_FOR_PEOPLE":"Ten projekt szuka uczestników","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Projekt zablokowany","THIS_PROJECT_IS_BLOCKED":"Ten projekt jest tymczasowo zablokowany","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Aby odblokować swój projekt, skontaktuj się z administacją"},"SECTION":{"SEARCH":"Szukaj","TIMELINE":"Oś czasu","EPICS":"Epiki","BACKLOG":"Dziennik","KANBAN":"Kanban","ISSUES":"Zgłoszenia","WIKI":"Wiki","TEAM":"Zespół","MEETUP":"Spotkaj się","ADMIN":"Admin"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Stwórz projekt","MANAGE_PROJECTS":"Zarządzaj projektami","TITLE_CREATE_PROJECT":"Utwórz projekt","HELP_TITLE":"Taiga strona wsparcia","HELP":"Pomoc","HOMEPAGE":"Strona startowa","FEEDBACK_TITLE":"Prześlij opinię","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Edytuj ustawienia powiadomień","NOTIFICATIONS":"Powiadomienia","VIEW_PROFILE_TITLE":"Zobacz profil","VIEW_PROFILE":"Zobacz profil","EDIT_PROFILE_TITLE":"Edytuj profil","EDIT_PROFILE":"Edytuj profil","CHANGE_PASSWORD_TITLE":"Zmień hasło","CHANGE_PASSWORD":"Zmień hasło","DASHBOARD_TITLE":"Dashboard","DISCOVER_TITLE":"Odkryj projekty","DISCOVER":"Odkryj"},"LIKE_BUTTON":{"LIKE":"Like","LIKED":"Liked","UNLIKE":"Unlike","BUTTON_TITLE":"Like or unlike this project","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Watch this project and set notification policy","WATCH":"Watch","WATCHING":"Obserwujesz","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Receive all notifications","NOTIFY_ALL_TITLE":"Receive all notifications for this project","NOTIFY_INVOLVED":"Only involved","NOTIFY_INVOLVED_TITLE":"Recive notificacions only when you are involved","UNWATCH":"Unwatch","UNWATCH_TITLE":"Unwatch this project"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Skontaktuj się z projektem"},"CREATE":{"TITLE":"Utwórz projekt","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Importuj projekt","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Niestety, osiągnąłeś maksimum dozwolonych projektów prywatnych.\nJeśli chciałbyś zwiększyć obecny limit, skontaktuj się z administratorem.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Projekt publiczny","PRIVATE_PROJECT":"Projekt prywatny"},"COMMON":{"DETAILS":"Szczegóły nowego projektu","PROJECT_TITLE":"Nazwa Projektu","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplikuj projekt","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Importuj projekt","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Umpa Lumpy importują projekt","ASYNC_IN_PROGRESS_MESSAGE":"To może zając kilka minut.
    Otrzymasz mail gdy wszystko będzie gotowe.","UPLOAD_IN_PROGRESS_MESSAGE":"Wysłano {{uploadedSize}} z {{totalSize}}","ERROR":"Umpa Lumpy mają problem z importem. Spróbuj ponownie.","ERROR_TOO_MANY_REQUEST":"Przepraszam, Umpa Lumpy są teraz bardzo zajęte, spróbuj ponownie za chwilę.","ERROR_MESSAGE":"Przy imporcie wystąpił następujący problem: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) plik jest za ciężki, maksymalna wartość to: ({{maxFileSize}})","SYNC_SUCCESS":"Twój projekt zaimportował się prawidłowo!","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Assign","PROJECT_SELECTOR":{"NO_RESULTS":"Nie znaleziono niczego, co spełniałoby podane kryteria.","ACTION_SEARCH":"szukaj","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Importowanie Projektu","DESCRIPTION":"Proces może zająć chwilkę, proszę nie zamykaj okna."},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Zgłoszenia","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Czy na pewno chcesz usunąć swoje konto z Taiga?","CANCEL":"Powrót do ustawień","ACCEPT":"Usuń konto","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Usuń projekt","QUESTION":"Czy masz pewność, że chcesz skasować ten projekt?","SUBTITLE":"Wszystkie dane projektu będą stracone! :(","CONFIRM":"Tak, jestem pewny"},"ASSIGNED_TO":{"SELECT":"Wybierz przypisane do","SEARCH":"Szukaj użytkowników"},"ADD_MEMBER":{"TITLE":"Nowy Członek","PLACEHOLDER":"Filtruj użytkowników lub napisz emaila, żeby zaprosić","ADD_EMAIL":"Dodaj e-mail","REMOVE":"Usuń","INVITE":"Zaproś","CHOOSE_ROLE":"Wybierz rolę","PLACEHOLDER_INVITATION_TEXT":"(Opcjonalne) Dodaj spersonalizowany tekst do zaproszenia. Napisz coś słodziachnego do nowego członka zespołu :)","HELP_TEXT":"Jeżeli użytkownik jest już zarejestrowany w Taiga, będzie dodany automatycznie. W przeciwnym wypadku otrzyma zaproszenie."},"FEEDBACK":{"TITLE":"Powiedz nam coś...","COMMENT":"...błędy, sugestie, fajne propozycje..., nawet najgorsze koszmary z Taigi.","ACTION_SEND":"Prześlij opinię"},"SEARCH":{"TITLE":"Szukaj","PLACEHOLDER_SEARCH":"Czego szukasz?"},"ADD_EDIT_SPRINT":{"TITLE":"Nowy sprint","PLACEHOLDER_SPRINT_NAME":"Nazwa sprintu","PLACEHOLDER_SPRINT_START":"Oszacowany Początek","PLACEHOLDER_SPRINT_END":"Oszacowane Zakończenie","ACTION_DELETE_SPRINT":"Chcesz usunąć sprint?","TITLE_ACTION_DELETE_SPRINT":"usuń sprint","LAST_SPRINT_NAME":"ostatni sprint to: {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Dodaj zgłoszenie","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Usuń sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opcjonalne) Dodaj spersonalizowany tekst do zaproszenia. Napisz coś słodziachnego do nowego członka zespołu :)","PLACEHOLDER_TYPE_EMAIL":"Wpisz Email","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Wkrótce osiągniesz maksimum dozwolonych członków dla tego projektu - {{maxMembers}} członków. Jeśli chciałbyś zwiększyć obecny limit, skontaktuj się z administratorem.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Niestety, ten projekt nie może zostać opuszczony bez właściciela","CURRENT_USER_OWNER":{"DESC":"Jesteś aktualnym właścicielem tego projektu. Przed opuszczeniem przetransferuj własność do kogoś innego.","BUTTON":"Zmień właściciela projektu"},"OTHER_USER_OWNER":{"DESC":"Niestety, nie możesz usunąć użytkownika kto jest również aktualnym właścicielem projektu. Najpierw proszę ustaw nowego właściciela projektu.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Kto ma być nowym właścicielem projektu?","ADD_COMMENT":"Dodaj komentarz","BUTTON":"Poproś tego użytkownika o zostanie nowym właścicielem projektu"},"CONTACT_PROJECT":{"TITLE":"Wyślij e-mail do","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Wyślij"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Co to za projekt?","CHOOSE_PROJECT_FROM":"Co to za projekt?","SUBJECT":"Temat","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Nie znaleziono niczego, co spełniałoby podane kryteria."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Opis: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"Nie byliśmy w stanie odlinkować: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Stwórz relację z","NEW_USERSTORY":"Nowa historyjka użytkownika","EXISTING_USERSTORY":"Istniejąca historia użytkownika","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Temat","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"Nie znaleziono niczego, co spełniałoby podane kryteria.","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Historyjka użytkownika {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. Zakończono {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} z {{userStoryTotalTasks}} zadań). Punktów: {{userStoryPoints}}. Opis: {{userStoryDescription}}","SECTION_NAME":"Historyjka użytkownika","LINK_TASKBOARD":"Tablica zadań","TITLE_LINK_TASKBOARD":"Idź do listy zadań","TOTAL_POINTS":"total points","ADD":"+ Dodaj nową historyjkę użytkownika","ADD_BULK":"Masowo dodaj nowe historyjki użytkownika","PROMOTED":"Ta historyjka awansowała ze zgłoszenia:","TITLE_LINK_GO_TO_ISSUE":"Idź do zgłoszenia","TITLE_DELETE_ACTION":"Usuń historyjkę użytkownika","LIGHTBOX_TITLE_BLOKING_US":"Blokuje nas","NOT_ESTIMATED":"Nie oszacowane","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edytuj link","CLOSE":"Zamknij","SYNCHRONIZE_LINK":"synchronizuj z Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Potrzebujesz kogoś do tego zadania?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Komentarz usunięty przez {{user}}","COMMENTS_COUNT":"{{comments}} Komentarze","OLDER_FIRST":"Starsze najpierw","RECENT_FIRST":"Ostatnie najpierw","COMMENT":"Komentarz","EDITED_COMMENT":"Edytowano","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Tutaj wpisz nowy komentarz","SHOW_DELETED":"Pokaż usunięty komentarz","HIDE_DELETED":"Ukryj skasowane komentarze","DELETE":"Usuń komentarz","RESTORE":"Przywróć komentarz","HISTORY":{"TITLE":"Aktywność"}},"ACTIVITY":{"TITLE":"Aktywność","ACTIVITIES_COUNT":"{{activities}} Aktywności","TAGS_ADDED":"dodano klucz","TAGS_REMOVED":"usunięto tag:","US_POINTS":"{{role}} punktów","NEW_ATTACHMENT":"nowy załącznik","DELETED_ATTACHMENT":"załącznik usunięty:","UPDATED_ATTACHMENT":"zaktualizowany załącznik ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Wymaganie zespołu","CLIENT_REQUIREMENT":"Wymaganie klienta","BLOCKED":"Zablokowane","VALUES":{"NOT_SET":"not set","UNASSIGNED":"nieprzypisany"},"FIELDS":{"SUBJECT":"temat","DESCRIPTION":"opis","PRIORITY":"priorytet","SEVERITY":"ważność","STATUS":"status","TYPE":"typ","ASSIGNED_TO":"przypisane do","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"kolor"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"Panel backlogu zawierający historyjki użytkownika i sprinty {{projectName}}: {{projectDescription}}","SECTION_NAME":"Dziennik","CUSTOMIZE_GRAPH":"Customize your backlog graph","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Admin","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Przejdź do bieżącego sprintu","MOVE_US_TO_LATEST_SPRINT":"Przejdź do ostatniego sprintu","EMPTY":"The backlog is empty!","CREATE_NEW_US":"Utwórz nową HU","CREATE_NEW_US_EMPTY_HELP":"Możesz utworzyć nową historyjkę użytkownika","EXCESS_OF_POINTS":"Nadwyżka punktów","PENDING_POINTS":"Oczekujące punkty","CLOSED_POINTS":"zamkniętych","COMPACT_SPRINT":"Kompaktuj sprint","GO_TO_TASKBOARD":"Idź do tablicy zadań{{::name}}","EDIT_SPRINT":"Edytuj sprint","TOTAL_POINTS":"w sumie","STATUS_NAME":"Nazwa statusu","SORTABLE_FILTER_ERROR":"Nie możesz przenosić do backlogu kiedy filtry są otwarte","DOOMLINE":"Zakres projektu [Doomline]","CHART":{"XAXIS_LABEL":"Sprinty","YAXIS_LABEL":"Punkty","OPTIMAL":"Optymalna ilość puntów oczekujących w sprincie {{xval}} to {{yval}}","REAL":"Faktyczna ilość punktów oczekujących w sprincie {{xval}} to {{yval}}","INCREMENT_TEAM":"Punkty dodane na podstawie wymagań zespołu w sprincie {{xval}} to {{yval}}","INCREMENT_CLIENT":"Punkty dodane na podstawie wymagań klienta w sprincie {{xval}} to {{yval}}"},"TAGS":{"TOGGLE":"Przełącz widoczność tagów","SHOW":"Pokaż tagi","HIDE":"Ukryj tagi"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Historyjki użytkownika","TITLE_COLUMN_POINTS":"Widok według ról"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"łącznie
    punktów","COMPLETED_POINTS":"wypalonych
    punktów","OPEN_TASKS":"otwartych
    zadań","CLOSED_TASKS":"zamkniętych
    zadań","IOCAINE_DOSES":"dawek
    Iokainy","SHOW_STATISTICS_TITLE":"Pokaż statystyki","TOGGLE_BAKLOG_GRAPH":"Pokaż/Ukryj wykres spalania","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"punktów w
    projekcie","DEFINED_POINTS":"zdefiniowanych
    punktów","CLOSED_POINTS":"zamkniętych
    punktów","POINTS_PER_SPRINT":"punktów na /
    sprint"},"FILTERS":{"TOGGLE":"Przełącz widoczność filtrów","HIDE":"Ukryj filtry","SHOW":"Pokaż filtry"},"SPRINTS":{"TITLE":"SPRINTY","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Tablica zadań sprintu","TITLE_LINK_TASKBOARD":"Idź do tablicy zadań użytkownika {{name}}","EMPTY":"There are no sprints yet","WARNING_EMPTY_SPRINT_ANONYMOUS":"This sprint has no User Stories","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"Add new sprint","TEXT_ACTION_NEW_SPRINT":"You may want to create a new sprint in your project","ACTION_SHOW_CLOSED_SPRINTS":"Pokaż zamknięte sprinty","ACTION_HIDE_CLOSED_SPRINTS":"Ukryj zamknięte sprinty"}},"ERROR":{"TEXT1":"Wystąpił błąd, nasze Umpa Lumpy będą pracować nad jego rozwiązaniem.","NOT_FOUND":"Nie znaleziono","NOT_FOUND_TEXT":"Błąd 404 - strona której szukasz nie istnieje. Wróć do strony głównej Taiga i zobacz, czy znajdziesz tam to, czego szukasz.","PERMISSION_DENIED":"Dostęp zabroniony","PERMISSION_DENIED_TEXT":"You don't have permission to access this page.","VERSION_ERROR":"Odśwież i zastosuj zmiany ponownie gdyż może ktoś przed Tobą zapisał jakieś zmiany."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Lista zadań sprintu - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (od {{startDate}} do {{endDate}}) z {{projectName}}. Ukończono {{completedPercentage}}% ({{completedPoints}} z {{totalPoints}} punktów). {{openTasks}} otwartych zadań z {{totalTasks}}.","SECTION_NAME":"Tablica zadań","TITLE_ACTION_ADD":"Dodaj nowe zadanie","TITLE_ACTION_ADD_BULK":"Dodaj nowe zadania zbiorczo","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Przydziel zadanie","PLACEHOLDER_CARD_TITLE":"This could be a task","PLACEHOLDER_CARD_TEXT":"Split Stories into tasks to track them separately","TABLE":{"COLUMN":"Historyjka użytkownika","TITLE_ACTION_FOLD":"Zwiń kolumnę","TITLE_ACTION_UNFOLD":"Rozwiń kolumnę","TITLE_ACTION_FOLD_ROW":"Zwiń wiersz","TITLE_ACTION_UNFOLD_ROW":"Rozwiń wiersz","FIELD_POINTS":"punkty","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Dni","YAXIS_LABEL":"Punkty","OPTIMAL":"Optymalna ilość oczekujących punktów na dzień {{formattedDate}} to {{roundedValue}}","REAL":"Faktyczna ilość punktów oczekujących na dzień {{formattedDate}} to {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Zadanie {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Opis: {{taskDescription}}","SECTION_NAME":"Zadania","LINK_TASKBOARD":"Tablica zadań","TITLE_LINK_TASKBOARD":"Idź do listy zadań","PLACEHOLDER_SUBJECT":"Wpisz temat zadania","TITLE_SELECT_STATUS":"SNazwa statusu","OWNER_US":"To zadanie należy do","TITLE_LINK_GO_OWNER":"Idź do historyjki użytkownika","TITLE_DELETE_ACTION":"Usuń zadanie","LIGHTBOX_TITLE_BLOKING_TASK":"Blokowanie zadania","FIELDS":{"IS_IOCAINE":"Iocaina"},"TITLE_ACTION_IOCAINE":"Czujesz się trochę przytłoczony zadaniem? Daj znać innym klikając na ikonę Iokainy podczas edycji zadania. Jest szansa, że staniesz się odporny na tą (fikcyjną ;) ) śmiertelną truciznę biorąc małe dawki. Z pewnością jednak da Ci ona dodatkowego kopa, który pomoże w pokonaniu nowego wyzwania i staniu się lepszym w tym co robisz!"},"NOTIFICATION":{"OK":"Wszystko ok","WARNING":"Ups, coś się stało...","WARNING_TEXT":"Twoje zmiany nie zostały zapisane z powodu błędu!","SAVED":"Wszystkie zmiany zapisane!","CLOSE":"Zamknij powiadomienie","MAIL":"Powiadomienia na e-mail","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Czy na pewno chcesz usunąć?"},"CANCEL_ACCOUNT":{"TITLE":"Unieważnij swoje konto","SUBTITLE":"Przykro nam, że opuszczasz Taiga. Mamy nadzieję, że było miło :)","PLACEHOLDER_INPUT_TOKEN":"unieważnij token konta","ACTION_LEAVING":"Tak, odchodzę!","SUCCESS":"Nasze Umpa Lumpy usunęły twoje konto"},"CHANGE_EMAIL_FORM":{"TITLE":"Zmień swój e-mail","SUBTITLE":"Jeszcze tylko jeden klik i twój email będzie zaktualizowany!","PLACEHOLDER_INPUT_TOKEN":"zmień token e-maila","ACTION_CHANGE_EMAIL":"Zmień e-mail","SUCCESS":"Nasze Umpa Lumpy zaktualizowały Twój e-mail"},"ISSUES":{"PAGE_TITLE":"Zgłoszenia - {{projectName}}","PAGE_DESCRIPTION":"Lista zgłoszeń w projekcie {{projectName}}: {{projectDescription}}","SECTION_NAME":"Zgłoszenie","ACTION_NEW_ISSUE":"+ NOWE ZGŁOSZENIE","ACTION_PROMOTE_TO_US":"Awansuj na historyjkę użytkownika","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"To zgłoszenie zostało wypromowane na HU:","EXTERNAL_REFERENCE":"Źródło zgłoszenia","GO_TO_EXTERNAL_REFERENCE":"Idź do źródła","ACTION_DELETE":"Usuń zgłoszenie","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blokowanie zgłoszenia","LINK_TASKBOARD":"Tablica zadań","TITLE_LINK_TASKBOARD":"Idź do listy zadań","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Priorytet","SEVERITY":"Ważność","TYPE":"Typ"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Awansuj to zgłoszenie na historyjkę użytkownika","MESSAGE":"Jesteś pewny, że chcesz wypromować to zgłoszenie na historyjkę użytkownika?"},"TABLE":{"COLUMNS":{"TYPE":"Typ","SEVERITY":"Ważność","PRIORITY":"Priorytet","SUBJECT":"Temat","VOTES":"Głosy","STATUS":"Status","MODIFIED":"Modified","ASSIGNED_TO":"Przypisane do"},"TITLE_ACTION_CHANGE_STATUS":"Zmień status","TITLE_ACTION_ASSIGNED_TO":"Przypisane do","BLOCKED":"Zablokowane","EMPTY":{"TITLE":"Brak zgłoszeń :-)","SUBTITLE":"Masz zgłoszenie?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Zgłoszenie {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Typ: {{issueType}}, Priorytet: {{issuePriority}}. Ważność: {{issueSeverity}}. Opis: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Panel kanban zawierający historyjki użytkownika wchodzące w skład projektu {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanaban","TITLE_ACTION_FOLD":"Zwiń kolumnę","TITLE_ACTION_UNFOLD":"Rozwiń kolumnę","TITLE_ACTION_ADD_US":"Dodaj nową HU","TITLE_ACTION_ADD_BULK":"Dodaj zbiorczo HU","ACTION_SHOW_ARCHIVED":"Pokaż archiwalne","ACTION_HIDE_ARCHIVED":"Ukryj archiwalne","HIDDEN_USER_STORIES":"Historyjki użytkownika o tym statusie są domyślnie ukryte","PLACEHOLDER_CARD_TITLE":"To są Twoje Historyjki Użytkownika","PLACEHOLDER_CARD_TEXT":"Stories might also have subtasks to separate requirements"},"SEARCH":{"PAGE_TITLE":"Szukaj - {{projectName}}","PAGE_DESCRIPTION":"Możesz przeszukiwać wszystko, historyjki użytkownika, zgłoszenia, zadania oraz strony Wiki w projekcie {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epiki","FILTER_USER_STORIES":"Historyjki użytkownika","FILTER_ISSUES":"Zgłoszenia","FILTER_TASKS":"Zadania","FILTER_WIKI":"Strony Wiki","PLACEHOLDER_SEARCH":"Szukaj w ...","TITLE_ACTION_SEARCH":"szukaj","EMPTY_TITLE":"Nie znaleziono niczego, co spełniałoby podane kryteria.","EMPTY_DESCRIPTION":"Spróbuj użyć zakładek powyżej przy ponownym wyszukiwaniu"},"TEAM":{"PAGE_TITLE":"Zespół - {{projectName}}","PAGE_DESCRIPTION":"Panel zespołu w którym zebrani są wszyscy jego członkowie pracujący przy projekcie {{projectName}}: {{projectDescription}}","SECTION_NAME":"Zespół","PLACEHOLDER_INPUT_SEARCH":"Szukaj po imieniu...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Zamknięte zgłoszenia","COLUMN_IOCAINE":"Iokainista","EXPLANATION_COLUMN_IOCAINE":"Spożyte dawki","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Edytowane strony Wiki","COLUMN_BUG_HUNTER":"Łowca Bugów","EXPLANATION_COLUMN_BUG_HUNTER":"Zgłoszone zadania","COLUMN_NIGHT_SHIFT":"Niezłomny","EXPLANATION_COLUMN_NIGHT_SHIFT":"Zamknięte zadania","COLUMN_TOTAL_POWER":"Ogólna potęga","EXPLANATION_COLUMN_TOTAL_POWER":"Punktów łącznie","SECTION_TITLE_TEAM":"Zespół >","SECTION_FILTER_ALL":"Wszystko","CONFIRM_LEAVE_PROJECT":"Na pewno chcesz opuścić projekt?","ACTION_LEAVE_PROJECT":"Opuść projekt"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Maks. rozmiar: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Ustawienia użytkownika","USER_PROFILE":"Profil użytkownika","CHANGE_PASSWORD":"Zmień hasło","EMAIL_NOTIFICATIONS":"Powiadomienia e-mail","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Powiadomienia przez e-mail","COLUMN_PROJECT":"Projekt","COLUMN_RECEIVE_ALL":"Otrzymuj wszystkie","COLUMN_ONLY_INVOLVED":"Tylko te, w których bierzesz udział","COLUMN_NO_NOTIFICATIONS":"Nie otrzymuj żadnych","OPTION_ALL":"Wszystkie","OPTION_INVOLVED":"Z moim udziałem","OPTION_NONE":"Żadne"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projekt","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projekt"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Użyj domyślnego obrazu","ACTION_DELETE_ACCOUNT":"Usuń konto Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Sprawdź swoją skrzynkę e-mail!
    Wysłaliśmy wiadomość z instrukcjami.","CHANGE_PHOTO":"Zmień zdjęcie","FIELD":{"USERNAME":"Nazwa użytkownika","EMAIL":"Email","FULL_NAME":"Imię i nazwisko","PLACEHOLDER_FULL_NAME":"Podaj swoje imię i nazwisko","BIO":"Bio (max. 210 znaków)","PLACEHOLDER_BIO":"Powiedz coś o sobie","LANGUAGE":"Język","LANGUAGE_DEFAULT":"-- używaj domyślnego języka --","THEME":"Szablon strony","THEME_DEFAULT":"-- używaj domyślnego szablonu --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Ostatnio edytowane dnia {{lastModifiedDate}} ({{totalEditions}} edycji łącznie) Zawartość: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Usuń tą stronę Wiki","DELETE_LIGHTBOX_TITLE":"Usuń tą stronę Wiki","DELETE_LINK_TITLE":"Usuń link Wiki","NAVIGATION":{"HOME":"Strona Główna","SECTION_NAME":"ZAKŁADKI","ACTION_ADD_LINK":"Dodaj zakładkę","ALL_PAGES":"Wszystkie strony Wiki"},"SUMMARY":{"TIMES_EDITED":"razy
    edytowano","LAST_EDIT":"ostatnia
    edycja","LAST_MODIFICATION":"ostatnia modyfikacja"},"SECTION_PAGES_LIST":"Wszystkie strony","PAGES_LIST_COLUMNS":{"TITLE":"Tytuł","EDITIONS":"Editions","CREATED":"Utworzone","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Wskazówka","LINK":"Jeśli chcesz się dowiedzieć jak tego używać odwiedź nasz support","LINK_TITLE":"Odwiedź nasz support","HINT1_TITLE":"Czy wiesz, że możesz eksportować i importować projekty?","HINT1_TEXT":"Dzięki temu możesz przenieść wszystkie swoje dane z jednej instalacji Taiga do drugiej.","HINT2_TITLE":"Czy wiesz, że możesz tworzyć niestandardowe pola?","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":"Zapomniałeś nad czym pracowałeś?","HINT4_TEXT":"Nie martw się, na Twojej tablicy znajdziesz otwarte zadania, zgłoszenia i historyjki użytkownika w takiej kolejności, w jakiej nad nimi pracowałeś."},"TIMELINE":{"UPLOAD_ATTACHMENT":"Użytkownik {{username}} wysłał nowy załącznik do {{obj_name}}","US_CREATED":"Użytkownik {{username}} utworzył nową historyjkę użytkownika {{obj_name}} w projekcie {{project_name}}","ISSUE_CREATED":"Użytkownik {{username}} utworzył nowe zgłoszenie {{obj_name}} w projekcie {{project_name}}","TASK_CREATED":"Użytkownik {{username}} utworzył nowe zadanie {{obj_name}} w projekcie {{project_name}}","TASK_CREATED_WITH_US":"Użytkownik {{username}} utworzył nowe zadanie {{obj_name}} w projekcie {{project_name}} należące do HU {{us_name}}","WIKI_CREATED":"Użytkownik {{username}} utworzył nową stronę Wiki {{obj_name}} w projekcie {{project_name}}","MILESTONE_CREATED":"Użytkownik {{username}} utworzył nowy sprint {{obj_name}} w projekcie {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"Użytkownik {{username}} utworzył projekt {{project_name}}","MILESTONE_UPDATED":"Użytkownik {{username}} zaktualizował sprint {{obj_name}}","US_UPDATED":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} historyjki użytkownika {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} historyjki użytkownika {{obj_name}} na {{new_value}}","US_UPDATED_POINTS":"Użytkownik {{username}} zaktualizował '{{role_name}}' punkty w historyjce użytkownika {{obj_name}} na {{new_value}}","ISSUE_UPDATED":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zgłoszenia {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zgłoszenia {{obj_name}} na {{new_value}}","TASK_UPDATED":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zadania {{obj_name}} na {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zadania {{obj_name}} na {{new_value}}","TASK_UPDATED_WITH_US":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zadania {{obj_name}} należącego do HU {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"Użytkownik {{username}} zaktualizował atrybut {{field_name}} zadania {{obj_name}} należącego do HU {{us_name}} na {{new_value}}","WIKI_UPDATED":"Użytkownik {{username}} zaktualizował stronę Wiki {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"Użytkownik {{username}} skomentował historyjkę użytkownika {{obj_name}}","NEW_COMMENT_ISSUE":"Użytkownik {{username}} skomentował zgłoszenie {{obj_name}}","NEW_COMMENT_TASK":"Użytkownik {{username}} skomentował zadanie {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"Projekt {{project_name}} ma nowego członka","US_ADDED_MILESTONE":"Użytkownik{{username}} dodał HU {{obj_name}} do {{sprint_name}}","US_MOVED":"{{username}} przeniósł historyjkę użytkownika {{obj_name}}","US_REMOVED_FROM_MILESTONE":"Użytkownik {{username}} dodał HU {{obj_name}} do backlogu","BLOCKED":"Użytkownik {{username}} zablokował {{obj_name}}","UNBLOCKED":"Użytkownik {{username}} odblokował {{obj_name}}","NEW_USER":"Nowy użytkownik{{username}} dołączył do Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Zgłoszenie","TASK":"Zadania"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Login with another user","AUTHORIZE_APP":"Authorize app","CANCEL":"Anuluj"},"JOYRIDE":{"NAV":{"NEXT":"Następny","BACK":"Back","SKIP":"Pomiń","DONE":"Gotowe!"},"DASHBOARD":{"STEP1":{"TITLE":"Twój projekt","TEXT":"Welcome! Here you will find the projects you are involved on."},"STEP2":{"TITLE":"Pracujesz nad","TEXT":"Tutaj znajdziesz Historyjki Użytkownika, Zadania i Problemy nad którymi pracujesz."},"STEP3":{"TITLE":"Obserwujesz","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"Już korzystasz z Taiga ;)"},"STEP4":{"TITLE":"Zaczynajmy","TEXT1":"Możesz zacząć od stworzenia swojego pierwszego projektu w Taiga.","TEXT2":"Powodzenia!"}},"BACKLOG":{"STEP1":{"TITLE":"Podsumowanie projektu","TEXT1":"Tutaj zobaczysz status Twojego projektu.","TEXT2":"You can change every kind of project settings through the admin."},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"Sprinty","TEXT":"Sprinty to krótkie odcinki czasu (z reguły trwające 2 tygodnie) podczas których określona praca musi zostać wykonana i dostarczona."},"STEP4":{"TITLE":"Historyjki użytkownika","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"Historyjki Użytkownika i Zadania","TEXT":"Historyjki Użytkownika to wymagania wysokiego poziomu. Możesz przeciągnąć je do różnych kolumn."},"STEP3":{"TITLE":"Dodawanie Historyjek Użytkownika","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"Powodzenia!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Odkryj projekty","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Most active","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Najbardziej lubiane","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"View more","FEATURED":"Featured Projects","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Wszystkie","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Looking for people","WEEK":"Last week","MONTH":"Ostatni miesiąc","YEAR":"Ostatni rok","ALL_TIME":"All time","CLEAR":"Clear filters"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Type something...","ACTION_TITLE":"Szukaj","RESULTS":"Search results"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-pt-br.json b/dist/v-1549282893552/locales/taiga/locale-pt-br.json new file mode 100644 index 0000000..b94351b --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-pt-br.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Sim","NO":"Não","OR":"ou","I_GET_IT":"OK, entendi","LOADING":"Carregando...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Salvar","CANCEL":"Cancelar","ACCEPT":"Aceitar","DELETE":"Excluir","UNLINK":"Separar","CREATE":"Criar","ADD":"Adicionar","COPY_TO_CLIPBOARD":"Copiar para área de transferência","COPIED_TO_CLIPBOARD":"O texto foi copiado para a área de transferência","EDIT":"Editar","DRAG":"Arrastar","TAG_LINE":"Sua ferramenta de código aberto, gratuita e ágil.","TAG_LINE_2":"AME SEU PROJETO","BLOCK":"Bloquear","BLOCK_TITLE":"Bloqueia este item, por exemplo, se ele possui uma dependência não resolvida","BLOCKED":"Bloqueado","UNBLOCK":"Desbloquear","UNBLOCK_TITLE":"Desbloquear este item","BLOCKED_NOTE":"Por que esta bloqueado?","BLOCKED_REASON":"Por favor, explique a razão","CREATED_BY":"Criado por {{fullDisplayName}}","CLOSE":"fechar","GO_HOME":"Ir ao início","PLUGINS":"Plugins","ONE_ITEM_LINE":"Um item por linha...","NEW_BULK":"Nova inserção em lote","SUBTASKS":"Subtasks","PREVIOUS":"Anterior","NEXT":"Próximo","LOGOUT":"Sair","EXTERNAL_USER":"um usuário externo","GENERIC_ERROR":"Um Oompa Loompas disse {{error}}.","IOCAINE_TEXT":"Este membro está se sentindo um pouco oprimido por esta tarefa. Ficará imune ao veneno de iocaína ao longo do tempo com sua ajuda. Por agora, pode precisar de um abraço.","CLIENT_REQUIREMENT":"Requisito de cliente é um novo requisito que não foi anteriormente previsto e que necessita se tornar uma parte do projeto.","TEAM_REQUIREMENT":"Requisito de time é um requisito que deve existir no projeto, mas que não deve ter nenhum custo para o cliente.","OWNER":"Dono do Projeto","CAPSLOCK_WARNING":"Seja cuidadoso! Você está escrevendo em letras maiúsculas e esse campo é case sensitive, ou seja, trata com distinção as letras maiúsculas das minúsculas.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Você tem certeza que quer fechar o modo de edição?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Lembre-se que se você fechar o modo de edição sem salvar, todas as mudanças serão perdidas","RELATED_USERSTORIES":"Histórias de usuário relacionadas","CARD":{"ASSIGN_TO":"Atribuir a","EDIT":"Editar cartão","DELETE":"Excluir cartão","DELETE_ISSUE":"Problema excluído","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Este valor parece ser inválido.","TYPE_EMAIL":"Este valor deve ser um e-mail válido.","TYPE_URL":"Este valor deve ser uma url válida.","TYPE_URLSTRICT":"Este valor deve ser uma url válida.","TYPE_NUMBER":"Este valor deve ser um número válido.","TYPE_DIGITS":"Este valor deve ser dígitos.","TYPE_DATEISO":"Este valor deve ser uma data válida (YYYY-MM-DD).","TYPE_ALPHANUM":"Este valor deve ser alfanumérico.","TYPE_PHONE":"Este valor deveria ser um número telefônico valido.","NOTNULL":"Este valor não deveria ser nulo.","NOT_BLANK":"Esta campo não deveria esta em branco.","REQUIRED":"Este campo é obrigatório.","REGEXP":"Este valor parece ser inválido.","MIN":"O valor deve ser maior que ou igual a %s.","MAX":"Esse valor deve ser menor que ou igual a %s.","RANGE":"Esse valor deve ser entre %s e %s.","MIN_LENGTH":"Esse valor é muito curto. deve ter %s caracteres ou mais.","MAX_LENGTH":"Valor muito longo. O campo deve conter %s caracteres ou menos.","RANGE_LENGTH":"Esse comprimento de valor é inválido. Deve ser entre %s e %s caracteres de comprimento.","MIN_CHECK":"Você deve selecionar pelo menos %s escolhas.","MAX_CHECK":"Você deve selecionar %s escolhas ou menos.","RANGE_CHECK":"Você deve selecionar entre %s e %s escolhas.","EQUAL_TO":"Esse valor deveria ser o mesmo.","LINEWIDTH":"Talvez uma ou mais linhas estejam muito grandes. Tente usar menos de %s caracteres.","PIKADAY":"Formato de data inválido, por favor, use DD MMM YYYY (exemplo: 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Mês Anterior","NEXT_MONTH":"Próximo Mês","MONTHS":{"JAN":"Janeiro","FEB":"Fevereiro","MAR":"Março","APR":"Abril","MAY":"Maio","JUN":"Junho","JUL":"Julho","AUG":"Agosto","SEP":"Setembro","OCT":"Outubro","NOV":"Novembro","DEC":"Dezembro"},"WEEK_DAYS":{"SUN":"Domingo","MON":"Segunda-feira","TUE":"Terça-feira","WED":"Quarta-feira","THU":"Quinta-feira","FRI":"Sexta-feira","SAT":"Sábado"},"WEEK_DAYS_SHORT":{"SUN":"Dom","MON":"Seg","TUE":"Ter","WED":"Qua","THU":"Qui","FRI":"Sex","SAT":"Sab"}},"SEE_USER_PROFILE":"Ver o perfil de {{username }}","USER_STORY":"História de usuário","TASK":"Tarefa","ISSUE":"Problema","EPIC":"Épico","TAGS":{"PLACEHOLDER":"Inserir tag","DELETE":"Excluir tag","ADD":"Adicionar tag"},"DESCRIPTION":{"EMPTY":"Espaço vazio é tão monótono... escreva algo, vai...","NO_DESCRIPTION":"Sem descrição ainda"},"FIELDS":{"SUBJECT":"Assunto","NAME":"Nome","URL":"URL","DESCRIPTION":"Descrição","VALUE":"Valor","SLUG":"Rótulo","COLOR":"Cor","IS_CLOSED":"Está fechado?","STATUS":"Status","TYPE":"Tipo","SEVERITY":"Gravidade","PRIORITY":"Prioridade","ASSIGNED_TO":"Atribuído a","ASSIGNED_USERS":"Usuários atribuídos","POINTS":"Pontos","IS_BLOCKED":"está bloqueada","REF":"Ref","VOTES":"Votos","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Tudo"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Não assinado","ASSIGN":"Atribuir","DELETE_ASSIGNMENT":"Excluir atribuição","REMOVE_ASSIGNED":"Remover assinatura","TOO_MANY":"...muitos usuários, continue filtrando","CONFIRM_UNASSIGNED":"Você tem certeza que deseja deixar sem ","TITLE_ACTION_EDIT_ASSIGNMENT":"E","SELF":"Atribuir a mim"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Fechado","OPEN":"Aberto"},"WATCHERS":{"WATCHERS":"Observadores","ADD":"Adicionar observadores","TITLE_ADD":"Adicionar um membro do projeto para a lista de observadores","DELETE":"Excluir observador","TITLE_LIGHTBOX_DELETE_WARTCHER":"Excluir observador..."},"WATCH_BUTTON":{"WATCH":"Observar","WATCHING":"Observando","UNWATCH":"Deixar de Observar","WATCHERS":"Observadores","BUTTON_TITLE":"Observar/Deixar de observar este item","COUNTER_TITLE":"{total, plural, one{um observador} other{#watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Aprovar/Reprovar este item","COUNTER_TITLE":"{total, plural, one{um voto} other{# votos}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Campos Personalizados","SAVE":"Salvar Campo Personalizado","EDIT":"Editar Campo Personalizado","DELETE":"Excluir atributo personalizado","CONFIRM_DELETE":"Lembre-se que todos os valores neste campo customizado serão excluídos.\nVocê tem certeza que quer continuar?"},"FILTERS":{"INPUT_PLACEHOLDER":"Assunto ou referência","TITLE_ACTION_FILTER_BUTTON":"procurar","TITLE":"Filtros","TITLE_ACTION_SEARCH":"Procurar","ACTION_SAVE_CUSTOM_FILTER":"salve como filtro personalizado","PLACEHOLDER_FILTER_NAME":"Digite o nome do filtro e pressione Enter","APPLIED_FILTERS_NUM":"filtros aplicados","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Tipo","STATUS":"Status","SEVERITY":"Gravidade","PRIORITIES":"Prioridades","TAGS":"Tags","ASSIGNED_TO":"Atribuído a","ASSIGNED_USERS":"Usuários atribuídos","ROLE":"Função","CREATED_BY":"Criado por","CUSTOM_FILTERS":"Filtros personalizados","EPIC":"Épico"}},"WYSIWYG":{"CODE_SNIPPET":"Pedaço de código","DB_CLICK":"duplo clique para editar","SELECT_LANGUAGE_PLACEHOLDER":"Selecione sua linguagem","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatação","OUTDATED":"Outra pessoa fez mudanças enquanto estava editando. Verifique a nova versão na guia atividade antes de salvar suas alterações.","MARKDOWN_HELP":"Ajuda de sintaxe markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Épicos","VIEW_EPICS":"Ver épicos","ADD_EPICS":"Adicionar épicos","MODIFY_EPICS":"Modificar épicos","COMMENT_EPICS":"Comentar épicos","DELETE_EPICS":"Excluir épicos"},"SPRINTS":{"NAME":"Sprints","VIEW_SPRINTS":"Ver sprints","ADD_SPRINTS":"Adicionar sprints","MODIFY_SPRINTS":"Modificar sprints","DELETE_SPRINTS":"Excluir sprints"},"USER_STORIES":{"NAME":"Histórias de Usuários","VIEW_USER_STORIES":"Ver histórias de usuários","ADD_USER_STORIES":"Adicionar histórias de usuários","MODIFY_USER_STORIES":"Modificar histórias de usuários","COMMENT_USER_STORIES":"Comentar histórias de usuário","DELETE_USER_STORIES":"Excluir histórias de usuários"},"TASKS":{"NAME":"Tarefas","VIEW_TASKS":"Ver tarefas","ADD_TASKS":"Adicionar uma nova Tarefa","MODIFY_TASKS":"Modificar tarefa","COMMENT_TASKS":"Comentar tarefas","DELETE_TASKS":"Excluir tarefas"},"ISSUES":{"NAME":"Problemas","VIEW_ISSUES":"Ver problemas","ADD_ISSUES":"Adicionar problemas","MODIFY_ISSUES":"Modificar problemas","COMMENT_ISSUES":"Comentar problemas","DELETE_ISSUES":"Excluir problemas"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Exibir páginas da wiki","ADD_WIKI_PAGES":"Adicionar páginas wiki","MODIFY_WIKI_PAGES":"Modificar páginas wiki","DELETE_WIKI_PAGES":"Excluir páginas wiki","VIEW_WIKI_LINKS":"Exibir links da wiki","ADD_WIKI_LINKS":"Adicionar links da wiki","DELETE_WIKI_LINKS":"Excluir links da wiki"}}},"LOGIN":{"PAGE_TITLE":"Login - Taiga","PAGE_DESCRIPTION":"Entrando no Taiga, uma plataforma de gerenciamento de projetos para startups com desenvolvedores e designers ágeis que desejam uma ferramenta simples e bela que torne o trabalho realmente agradável."},"AUTH":{"INVITED_YOU":"convidou você para entrar no projeto","NOT_REGISTERED_YET":"Não é cadastrado ainda?","REGISTER":"Registrar","CREATE_ACCOUNT":"crie sua conta grátis aqui"},"LOGIN_COMMON":{"HEADER":"Eu já tenho um login Taiga","PLACEHOLDER_AUTH_NAME":"Nome de usuário ou email (case sensitive)","LINK_FORGOT_PASSWORD":"Esqueceu?","TITLE_LINK_FORGOT_PASSWORD":"Esqueceu sua senha?","ACTION_ENTER":"Entre","ACTION_SIGN_IN":"Entrar","PLACEHOLDER_AUTH_PASSWORD":"Senha (case sensitive)","ALT_LOGIN":"Ou entre com"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"De acordo com nossos Oompa Loompas, seu nome de usuario/email ou senha estão incorretos.","SUCCESS":"Nossos Oompa Loompas estão felizes, bem vindo ao Taiga."},"REGISTER":{"PAGE_TITLE":"Cadastre-se - Taiga","PAGE_DESCRIPTION":"Crie sua conta no Taiga, uma plataforma de gerenciamento de projetos para startups e desenvolvedores ágeis & designers que desejam uma ferramenta bela e simples que torne o trabalho realmente agradável.\""},"REGISTER_FORM":{"TITLE":"Registre uma nova conta Taiga (Grátis)","PLACEHOLDER_NAME":"Escolha um nome de usuário (case sensitive)","PLACEHOLDER_FULL_NAME":"Insira seu nome completo","PLACEHOLDER_EMAIL":"Seu email","PLACEHOLDER_PASSWORD":"Escolha uma senha (case sensitive)","ACTION_SIGN_UP":"Registre-se","TITLE_LINK_LOGIN":"Identifique-se","LINK_LOGIN":"Você já está registrado? Idenfique-se"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Esqueceu sua senha - Taiga","PAGE_DESCRIPTION":"Informe seu nome de usuário ou email para receber uma nova senha e ter acesso ao Taiga novamente."},"FORGOT_PASSWORD_FORM":{"TITLE":"Opaaa, você esqueceu sua senha?","SUBTITLE":"Entre seu usuário ou email para conseguir uma senha nova","PLACEHOLDER_FIELD":"Nome de usuário ou email","ACTION_RESET_PASSWORD":"Resetar Senha","LINK_CANCEL":"Nããão, me leve de volta. Acho que me lembrei.","SUCCESS_TITLE":"Verifique sua caixa de entrada!","SUCCESS_TEXT":"Nós lhe enviamos um e-mail com instruções para definição de uma nova senha.","ERROR":"Segundo nossos Oompa Loompas, você ainda não está inscrito."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Alterar sua senha - Taiga","SECTION_NAME":"Alterar senha","FIELD_CURRENT_PASSWORD":"Senha atual","PLACEHOLDER_CURRENT_PASSWORD":"Sua senha atual (ou vazio caso ainda não tenha uma senha)","FIELD_NEW_PASSWORD":"Nova senha","PLACEHOLDER_NEW_PASSWORD":"Digite a nova senha","FIELD_RETYPE_PASSWORD":"Redigite a nova senha","PLACEHOLDER_RETYPE_PASSWORD":"Digite novamente a sua nova senha","ERROR_PASSWORD_MATCH":"As senhas não coincidem"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Criar um novo passe Taiga","SUBTITLE":"Hey, você deveria comer comida rica em ferro, é ótimo para o cérebro :P","PLACEHOLDER_NEW_PASSWORD":"Nova senha","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Redigite a nova senha","ACTION_RESET_PASSWORD":"Resetar Senha","ERROR":"Nossos Oompa Loompas não encontraram a solicitação para recuperar sua senha. Tente solicitar novamente.","SUCCESS":"Nossos Oompa Loompas salvaram sua nova senha.
    Tente identificar-se com ela."},"INVITATION":{"PAGE_TITLE":"Aceitando um convite - Taiga","PAGE_DESCRIPTION":"Aceitar o convite para participar de um projeto no Taiga, uma plataforma de gerenciamento de projetos para startups e desenvolvedores ágeis & designers que desejam uma ferramenta bela e simples que torne o trabalho realmente agradável."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Nossos Oompa Loompas não puderam encontrar seu convite.","SUCCESS":"Você ingressou com sucesso nesse projeto, Seja bem vindo ao projeto {{project_name}}"},"HOME":{"PAGE_TITLE":"Início - Taiga","PAGE_DESCRIPTION":"A página inicial do Taiga com seus principais projetos e todas as histórias de usuários atribuídas ou observadas por você, tarefas e problemas","EMPTY_WORKING_ON":"Parece vazio, não acha? Comece a trabalhar com Taiga e você verá aqui as histórias, tarefas e problemas em que está trabalhando.","EMPTY_WATCHING":"Siga Histórias de Usuários, Tarefas e Problemas nos seus projetos e seja notificado das mudanças :)","EMPTY_PROJECT_LIST":"Você ainda não tem projetos","WORKING_ON_SECTION":"Trabalhando em","WATCHING_SECTION":"Observando","DASHBOARD":"Painel de Projetos"},"EPICS":{"TITLE":"ÉPICOS","SECTION_NAME":"Épicos","EPIC":"ÉPICO","PAGE_TITLE":"Épico - {{projectName}}","PAGE_DESCRIPTION":"A lista de épicos do projeto {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADICIONAR ÉPICO","UNASSIGNED":"Não-atribuído"},"EMPTY":{"TITLE":"Parece que não há nenhum épico ainda","EXPLANATION":"Épicos são itens em um nível mais alto que contêm histórias de usuário.
    Épicos são o topo da hierarquia e podem ser usados para agrupar histórias.","HELP":"Saiba mais sobre épicos"},"TABLE":{"VOTES":"Votos","NAME":"Nome","PROJECT":"Projeto","SPRINT":"Sprint","ASSIGNED_TO":"Atribuído","STATUS":"Status","PROGRESS":"Progresso","VIEW_OPTIONS":"Ver opções"},"CREATE":{"TITLE":"Novo Épico","PLACEHOLDER_DESCRIPTION":"Por favor, adicione um texto descritivo para ajudar outras pessoas a entenderem melhor este épico","TEAM_REQUIREMENT":"Requisitos da equipe","CLIENT_REQUIREMENT":"Requisitos do cliente","BLOCKED":"Bloqueado","BLOCKED_NOTE_PLACEHOLDER":"Por que esse épico está bloqueado?","CREATE_EPIC":"Criar épico"}},"PROJECTS":{"PAGE_TITLE":"Meus projetos - Taiga","PAGE_DESCRIPTION":"Uma lista com todos os seus projetos, você pode reorganizá-los ou criar um novo.","MY_PROJECTS":"Meus Projetos"},"ATTACHMENT":{"SECTION_NAME":"anexos","TITLE":"{{ fileName }} enviado em {{ date }}","LIST_VIEW_MODE":"Modo de visualização lista","GALLERY_VIEW_MODE":"Modo de Visualização Galeria","DESCRIPTION":"Escreva uma curta descrição","DEPRECATED":"(obsoleto)","DEPRECATED_FILE":"Obsoleto?","ADD":"Adicionar novo anexo. {{maxFileSizeMsg}}","DROP":"Jogue os anexos aqui!","SHOW_DEPRECATED":"+ mostrar anexos deprecados","HIDE_DEPRECATED":"- esconder anexos obsoletos","COUNT_DEPRECATED":"({{ counter }} deprecados)","MAX_UPLOAD_SIZE":"Tamanho máximo de upload é {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Não fomos capazes de carregar '{{fileName}}'.\n{{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Excluir anexo...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"o anexo '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Não fomos capazes de excluir: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Anterior","NEXT":"Próximo"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Editar valor","TITLE_ACTION_DELETE_VALUE":"Excluir valor","TITLE_ACTION_DELETE_TAG":"Excluir tag"},"HELP":"Você precisa de ajuda? Verifique nossa pagina de suporte!","PROJECT_DEFAULT_VALUES":{"TITLE":"Valores Padrão","SUBTITLE":"Seleciona valores default para todos os seletores"},"MEMBERSHIPS":{"TITLE":"Gerenciar Membros","PAGE_TITLE":"Filiados - {{projectName}}","ADD_BUTTON":"+ Novo Membro","ADD_BUTTON_TITLE":"Adicionar novo membro","UPGRADE_BUTTON":"Fazer Upgrade no seu plano","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Este projeto atingiu o limite de ({{members}}) membros permitidos. Se você deseja aumentar este limite entre em contato com o administrador."},"PROJECT_EXPORT":{"TITLE":"Exportar","SUBTITLE":"Exporte seu projeto para guardar um backup ou para criar um novo a partir deste.","EXPORT_BUTTON":"Exportar","EXPORT_BUTTON_TITLE":"Exportar seu projeto","LOADING_TITLE":"Estamos gernado o arquivo de dump","DUMP_READY":"Seu arquivo de dump está pronto!","LOADING_MESSAGE":"Por favor, não feche esta pagina.","ASYNC_MESSAGE":"Enviaremos um email para você assim que estiver pronto.","SYNC_MESSAGE":"Se o download não iniciar automáticamente clique aqui","ERROR":"Nossos Oompa Loopmas tiveram alguns problemas gerando o dump. Por favor, tente novamente.","ERROR_BUSY":"Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos."},"MODULES":{"TITLE":"Modulos","EPICS":"Épicos","EPICS_DESCRIPTION":"Visualize e gerencie a parte mais estratégica do seu projeto","BACKLOG":"Backlog","BACKLOG_DESCRIPTION":"Gerencie suas histórias de usuários para manter uma visualização organizada de trabalhos futuros e priorizados.","NUMBER_SPRINTS":"Número de sprints esperadas","NUMBER_SPRINTS_HELP":"0 para um número indeterminado","NUMBER_US_POINTS":"Total esperado de pontos de história","NUMBER_US_POINTS_HELP":"0 para um número indeterminado","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organize seu projeto de um jeito \"lean\" com esse mural","ISSUES":"Problemas","ISSUES_DESCRIPTION":"Acompanhe os bugs, problemas e melhorias relacionados ao seu projeto. Não perca nada!","WIKI":"Wiki","WIKI_DESCRIPTION":"Adicione, modifique ou exclua conteúdo em colaboração com outras pessoas. Este é o local certo pra documentação do seu projeto.","MEETUP":"Reunião","MEETUP_DESCRIPTION":"Selecione seu sistema de videoconferência.","SELECT_VIDEOCONFERENCE":"Selecione um sistema de videoconferência","SALT_CHAT_ROOM":"Adicionar um prefixo ao nome da sala de chat","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Personalizar","URL_CHAT_ROOM":"URL da sua sala de bate-papo"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Perfil do projeto - {{projectName}}","PROJECT_DETAILS":"Detalhes do projeto","PROJECT_NAME":"Nome do projeto","TAGS":"Tags","DESCRIPTION":"Descrição","RECRUITING":"Este projeto esta a procura de colaboradores?","RECRUITING_MESSAGE":"O que você está procurando?","RECRUITING_PLACEHOLDER":"Defina o perfil que você procura?","FEEDBACK":"Receber notificações de usuários Taiga?","PUBLIC_PROJECT":"Projeto Publico","PRIVATE_PROJECT":"Projeto Privado","PRIVATE_OR_PUBLIC":"Qual a diferença entre projeto público e privado?","DELETE":"Excluir este projeto","CHANGE_LOGO":"Alterar logo","ACTION_USE_DEFAULT_LOGO":"Usar imagem padrão","MAX_PRIVATE_PROJECTS":"Você atingiu o número máximo de projetos privados permitidos para seu plano atual.","MAX_PRIVATE_PROJECTS_MEMBERS":"O número máximo de membros para projetos privados foi excedido.","MAX_PUBLIC_PROJECTS":"Infelizmente você atingiu o número máximo de projetos público permitidos para seu plano atual","MAX_PUBLIC_PROJECTS_MEMBERS":"Este projeto atingiu o seu limite atual de membros para projetos públicos","PROJECT_OWNER":"Dono do projeto","REQUEST_OWNERSHIP":"Solicitar propriedade","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Gostaria de se tornar o novo dono do projeto?","REQUEST_OWNERSHIP_DESC":"Solicitar ao atual dono de projeto {{name}} a transferência da propriedade deste projeto para você.","REQUEST_OWNERSHIP_BUTTON":"Solicitação","REQUEST_OWNERSHIP_SUCCESS":"Vamos notificar o dono do projeto","CHANGE_OWNER":"Mudar dono","CHANGE_OWNER_SUCCESS_TITLE":"Ok, sua requisição foi enviada!","CHANGE_OWNER_SUCCESS_DESC":"Nós notificaremos você por email se a requisição de propriedade do projeto for aceita ou recusada"},"REPORTS":{"TITLE":"Relatórios","SUBTITLE":"Exporte os dados do seu projeto no formato CSV e faça seus próprios relatórios.","DESCRIPTION":"Baixe o arquivo CSV ou copie a URL gerada e abra no seu editor de texto favorito ou planilha para fazer seu próprio relatório. Você poderá visualizar e analisar todos os seus dados facilmente.","HELP":"Como utilizar isto em minha própria planilha?","REGENERATE_TITLE":"Mudar URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Apagar URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"relatórios de épicos","SECTION_TITLE_US":"Relatórios de histórias de usuários","SECTION_TITLE_TASK":"relatórios de tarefas","SECTION_TITLE_ISSUE":"relatórios de problemas","DOWNLOAD":"Baixar CSV","URL_FIELD_PLACEHOLDER":"Por favor, gere novamente a url do CSV","TITLE_REGENERATE_URL":"Regerar URL CSV","ACTION_GENERATE_URL":"Gerar URL","ACTION_REGENERATE":"Regenerar","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Excluir"},"CUSTOM_FIELDS":{"TITLE":"Campos Personalizados","SUBTITLE":"Especificar campos personalizados para histórias de usuários, tarefas e problemas","EPIC_DESCRIPTION":"Campos personalizados dos épicos","EPIC_ADD":"Adicionar campos personalizados em épicos","US_DESCRIPTION":"Campos personalizados das histórias de usuários","US_ADD":"Adicionar campo personalizado nas histórias de usuários","TASK_DESCRIPTION":"Campos personalizados das Tarefas","TASK_ADD":"Adicionar campos personalizados na tarefa","ISSUE_DESCRIPTION":"Campos personalizados dos problemas","ISSUE_ADD":"Adicionar um campo personalizado em problemas ","FIELD_TYPE_TEXT":"Texto","FIELD_TYPE_RICHTEXT":"Texto rico","FIELD_TYPE_MULTI":"Multi-linha","FIELD_TYPE_DATE":"Data","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Valores do projeto - {{projectName}}","REPLACEMENT":"Todos os itens com este valor serão modificados para","ERROR_DELETE_ALL":"Você não pode excluir todos os valores."},"PROJECT_VALUES_POINTS":{"TITLE":"Pontos","SUBTITLE":"Especifique os pontos em que suas histórias de usuários poderiam ser estimados ","US_TITLE":"Pontos de Histórias de Usuários","ACTION_ADD":"Adicionar novo ponto"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioridades","SUBTITLE":"Especifique as prioridades que seus problemas terão","ISSUE_TITLE":"Severidade dos apontamentos","ACTION_ADD":"Adicionar nova prioridade"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Gravidades","SUBTITLE":"Especifique as gravidades que seus problemas terão","ISSUE_TITLE":"Gravidades do problema","ACTION_ADD":"Adicionar nova gravidade"},"PROJECT_VALUES_STATUS":{"TITLE":"Status","SUBTITLE":"Especifique os status pelos quais suas histórias de usuários, tarefas e problemas passarão","EPIC_TITLE":"Estados do Épico","US_TITLE":"Status de história de usuário","TASK_TITLE":"Estados da Tarefa","ISSUE_TITLE":"Estados do problema"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipos","SUBTITLE":"Especifique de que tipos seus problemas poderão ser","ISSUE_TITLE":"Tipos de problemas","ACTION_ADD":"Adicionar novo {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Tags","SUBTITLE":"Ver e editar as cores das suas tags","EMPTY":"Atualmente não há tags","EMPTY_SEARCH":"Parece que nada foi encontrado com os critérios de sua pesquisa.","ACTION_ADD":"Adicionar tag","NEW_TAG":"Nova tag","MIXING_HELP_TEXT":"Selecione as tags que você quer mesclar","MIXING_MERGE":"Mesclar Tags","SELECTED":"Selecionado"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Adicionar novo status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Funções - {{projectName}}","WARNING_NO_ROLE":"Seja cuidadoso, nenhuma função em seu projeto será capaz de estimar o valor dos pontos para as histórias de usuários","HELP_ROLE_ENABLED":"Quando habilitado, membros atribuídos a esta função serão capazes de estimar valores para histórias de usuários","DISABLE_COMPUTABLE_ALERT_TITLE":"Você tem certeza que quer desativar esta permissão de estimativas?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Se você desativar a permissão de estimativas para esta regra {{roleName}} todas estimativas feitas anteriormente por esta regra serão removidas.","COUNT_MEMBERS":"{{ role.members_count }} membros com a mesma função","TITLE_DELETE_ROLE":"Excluir Função","REPLACEMENT_ROLE":"Todos os usuários com essa função serão movidos para","WARNING_DELETE_ROLE":"Cuidado! Todas as estimativas de papéis serão removidas","ERROR_DELETE_ALL":"Você não pode excluir todos os valores","EXTERNAL_USER":"Usuário externo","NOTE_EXTERNAL_USERS":"Nota: Por usuário externo, nos referimos a qualquer usuário anônimo que não pertença à plataforma Taiga, incluindo os motores de busca. Use esse papel com cuidado."},"THIRD_PARTIES":{"SECRET_KEY":"Chave secreta","PAYLOAD_URL":"URL da Payload","VALID_IPS":"IPs de origem válidos (separados por vírgulas)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Requisições do Bitbucket não são assinadas, ou seja, a melhor maneira de verificar a origem é por IP. Se o campo estiver vazio não será realizada verificação de IP."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Requisições do Gitlab não são assinadas, ou seja, a melhor maneira de verificar a origem é por IP. Se o campo estiver vazio não será realizada verificação de IP."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Adicionar um Novo Webhook","TYPE_NAME":"Digite o nome do serviço","TYPE_PAYLOAD_URL":"Digite a url do serviço Payload","TYPE_SERVICE_SECRET":"Escreva a palavra segredo do serviço","SAVE":"Salvar Webhook","CANCEL":"Cancelar Webhook","SHOW_HISTORY":"(Mostrar história)","TEST":"Testar Webhook","EDIT":"Editar Webhook","DELETE":"Excluir Webhook","REQUEST":"Solicitação","RESEND_REQUEST":"Reenviar pedido","HEADERS":"Cabeçalhos","PAYLOAD":"Payload","RESPONSE":"Resposta","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Esconder histórico)","ACTION_HIDE_HISTORY_TITLE":"Esconder os detalhes da história","ACTION_SHOW_HISTORY":"(Mostrar histórico)","ACTION_SHOW_HISTORY_TITLE":"Mostrar detalhes da história","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Atributos personalizados - {{projectName}}","ADD":"Adicionar campos personalizados","EDIT":"Editar Campo Personalizado","DELETE":"Excluir campo personalizado","SAVE_TITLE":"Salvar Campo Personalizado","CANCEL_TITLE":"Cancelar criação","SET_FIELD_NAME":"Definir nome do seu campo personalizados","SET_FIELD_DESCRIPTION":"Definir a descrição do seu campo personalizado","FIELD_TYPE_DEFAULT":"-- selecionar --","ACTION_UPDATE":"Atualizar campo personalizado","ACTION_CANCEL_EDITION":"Cancelar edição"},"MEMBERSHIP":{"COLUMN_MEMBER":"Membro","COLUMN_ADMIN":"Administrador","COLUMN_ROLE":"Função","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Ativo","STATUS_PENDING":"Pendente","DELETE_MEMBER":"Excluir membro","RESEND":"Reenviar","SUCCESS_SEND_INVITATION":"Enviamos novamente um convite para '{{email}}'.","SUCCESS_DELETE":"Nós excluimos {{message}}.","ERROR_DELETE":"Nós não fomos capaz de excluir {{message}}.","DEFAULT_DELETE_MESSAGE":"o convite para {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Valor padrão para seletor de status de épico","LABEL_US_STATUS":"Valor padrão para seletor de status da história de usuário","LABEL_POINTS":"Valores padrões para o seletor de pontos","LABEL_TASK_STATUS":"Valor padrão para seletor de status de tarefa","LABEL_ISSUE_TYPE":"Valor padrão para seletor de tipo de problema ","LABEL_ISSUE_STATUS":"Valor padrão para seletor de status de problema","LABEL_PRIORITY":"Valor padão para seletor de prioridade","LABEL_SEVERITY":"Valor padrão para seletor de gravidade"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Digite um nome para o novo status","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Escreva o nome do novo elemento"},"US_STATUS":{"ACTION_ADD_STATUS":"Adicionar novo status","IS_ARCHIVED_COLUMN":"Arquivado","IS_CLOSED_COLUMN":"Fechado","WIP_LIMIT_COLUMN":"Limite WIP","PLACEHOLDER_WRITE_NAME":"Digite um nome para o novo status"},"MENU":{"PROJECT":"Projeto","ATTRIBUTES":"Atributos","MEMBERS":"Membros","PERMISSIONS":"Permissões","INTEGRATIONS":"Integrações"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Pontos","PRIORITIES":"Prioridades","SEVERITIES":"Gravidades","TYPES":"Tipos","CUSTOM_FIELDS":"Campos personalizados","TAGS":"Tags","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Funções","ACTION_NEW_ROLE":"+ Nova Função","TITLE_ACTION_NEW_ROLE":"Adicionar nova função"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Você gostaria de se tornar o novo dono do projeto?","PRIVATE":"Privado","ACCEPTED_PROJECT_OWNERNSHIP":"Parabéns! Você é o proprietário do projeto agora.","REJECTED_PROJECT_OWNERNSHIP":"OK. Entraremos em contato com o atual dono do projeto.","ACCEPT":"Aceitar","REJECT":"Rejeitar","PROPOSE_OWNERSHIP":"{{owner}}, o atual dono do projeto {{project}} te pediu para ser o novo dono do projeto.","ADD_COMMENT":"Você gostaria de adicionar um comentário para o dono do projeto?","UNLIMITED_PROJECTS":"Ilimitado","OWNER_MESSAGE":{"PRIVATE":"Por favor, lembre-se que você pode ser dono de até {{maxProjects}} projetos privados. Você, atualmente, é dono de {{currentProjects}} projetos privados","PUBLIC":"Por favor, lembre-se que você pode ser dono de até {{maxProjects}} projetos públicos. Você, atualmente, é dono de {{currentProjects}} projetos públicos"},"CANT_BE_OWNED":"No momento, você não pode se tornar dono de um projeto desse tipo. Se você quiser se tornar dono desse projeto, por favor, entre em contato com os administradores para mudarem as configurações da sua conta para habilitar a propriedade do projeto."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Editar Perfil","CLOSED_US":"Histórias Fechadas","PROJECTS":"Projetos","PROJECTS_EMPTY":"{{username}} ainda não tem projetos","CONTACTS":"Contatos","CONTACTS_EMPTY":"{{username}} ainda não tem nenhum contato","CURRENT_USER_CONTACTS_EMPTY":"Você não tem nenhum contato","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"As pessoas que trabalahm na Taiga serão seus contatos automaticamente","TABS":{"ACTIVITY_TAB":"Linha do Tempo","ACTIVITY_TAB_TITLE":"Exibir todas as atividade deste usuário","PROJECTS_TAB":"Projetos","PROJECTS_TAB_TITLE":"Lista de todos os projetos em que o membro esteja envolvido","LIKES_TAB":"Curtir","LIKES_TAB_TITLE":"Lista todos curtidas feitas por este usuário","VOTES_TAB":"Votos","VOTES_TAB_TITLE":"Listar todos os votos feitos por este usuário","WATCHED_TAB":"Observado","WATCHED_TAB_TITLE":"Exibe todos itens seguidos por este usuário","CONTACTS_TAB":"Contatos","CONTACTS_TAB_TITLE":"Exibe todos contatos feitos por este usuário"}},"PROFILE_SIDEBAR":{"TITLE":"Seu perfil","DESCRIPTION":"As pessoas podem ver tudo que você faz e no que você está trabalhando. Adicione uma bela biografia para disponibilizar uma versão melhorada das sua informações.","ADD_INFO":"Editar biografia"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Digite algo...","FILTER_TYPE_ALL":"Tudo","FILTER_TYPE_ALL_TITLE":"Mostrar tudo","FILTER_TYPE_PROJECTS":"Projetos","FILTER_TYPE_PROJECTS_TITLE":"Mostrar somente projetos","FILTER_TYPE_EPICS":"Épicos","FILTER_TYPE_EPICS_TITLE":"Mostrar somente épicos","FILTER_TYPE_USER_STORIES":"Histórias","FILTER_TYPE_USER_STORIES_TITLE":"Mostrar apenas histórias de usuários","FILTER_TYPE_TASKS":"Tarefas","FILTER_TYPE_TASKS_TITLE":"Mostrar apenas tarefas","FILTER_TYPE_ISSUES":"Problemas","FILTER_TYPE_ISSUES_TITLE":"mostrar apenas apontamentos","EMPTY_TITLE":"Parece que não há nada para exibir aqui."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reordene seus projetos para colocar no topo os mais usados.
    Os 10 primeiros projetos aparecerão na lista de projetos da barra de navegação superior.","PRIVATE":"Projeto Privado","LOOKING_FOR_PEOPLE":"Este projeto esta a procura de colaboradores","FANS_COUNTER_TITLE":"{total, plural, one{um fã} other{# fãs}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{um observador} other{#watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Projeto bloqueado","THIS_PROJECT_IS_BLOCKED":"Este projeto está temporariamente bloqueado","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Para desbloquear seus projetos, contate o administrador."},"SECTION":{"SEARCH":"Procurar","TIMELINE":"Linha do Tempo","EPICS":"Épicos","BACKLOG":"Backlog","KANBAN":"Kanban","ISSUES":"Problemas","WIKI":"Wiki","TEAM":"Time","MEETUP":"Reunião","ADMIN":"Administrador"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Criar projeto","MANAGE_PROJECTS":"Gerenciar projetos","TITLE_CREATE_PROJECT":"Criar projeto","HELP_TITLE":"Página de Suporte do Taiga","HELP":"Ajuda","HOMEPAGE":"Página pessoal","FEEDBACK_TITLE":"Enviar feedback","FEEDBACK":"Feedback","NOTIFICATIONS_TITLE":"Editar suas configurações de notificações","NOTIFICATIONS":"Notificações","VIEW_PROFILE_TITLE":"Ver perfil","VIEW_PROFILE":"Ver perfil","EDIT_PROFILE_TITLE":"Edit seu perfil","EDIT_PROFILE":"Editar Perfil","CHANGE_PASSWORD_TITLE":"Alterar senha","CHANGE_PASSWORD":"Alterar senha","DASHBOARD_TITLE":"Painel","DISCOVER_TITLE":"Descobrir projetos em destaques","DISCOVER":"Descubra"},"LIKE_BUTTON":{"LIKE":"Curtir","LIKED":"Curtiu","UNLIKE":"Descurtir","BUTTON_TITLE":"Curtir ou descurtir este projeto","COUNTER_TITLE":"{total, plural, one{um fã} other{# fãs}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Observar este projeto e definir política de notificação","WATCH":"Observar","WATCHING":"Observando","COUNTER_TITLE":"{total, plural, one{um observador} other{#watchers}}","OPTIONS":{"NOTIFY_ALL":"receber todas notificações","NOTIFY_ALL_TITLE":"Receber todas notificações para este projeto","NOTIFY_INVOLVED":"Apenas envolvidos","NOTIFY_INVOLVED_TITLE":"Receber notificações apenas enquanto você estiver envolvido","UNWATCH":"Deixar de Observar","UNWATCH_TITLE":"Deixar de observar este projeto"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contatar o time do projeto","CONTACT_BUTTON":"Contatar o projeto"},"CREATE":{"TITLE":"Criar Projeto","CHOOSE_TEMPLATE":"Qual modelo se encaixa melhor no seu projeto?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Priorize e resolva suas tarefas em curtos ciclos de tempo.","TEMPLATE_SCRUM_LONGDESC":"Scrum é uma metodologia de desenvolvimento de software agilizável e incremental para gerenciar o desenvolvimento de produtos.\nO backlog do produto é o que será finalmente entregue, ordenado na sequência em que deve ser entregue. Os Backlogs de produtos são divididos em pedaços executáveis ​​gerenciáveis, denominados sprints. Toda certa quantidade de tempo que a equipe inicia um novo sprint e compromete-se a entregar um certo número de histórias de usuários do backlog, de acordo com suas habilidades, habilidades e recursos. O projeto avança à medida que o backlog se torna esgotado.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Mantenha um fluxo de trabalho constante em tarefas independentes","TEMPLATE_KANBAN_LONGDESC":"A metodologia Kanban é usada para dividir o desenvolvimento do projeto (qualquer tipo de projeto) em etapas.Um cartão kanban é como um cartão de índice ou uma nota post-it que detalha cada tarefa (ou história do usuário) em um projeto que precisa ser concluído. O quadro Kanban é usado para mover cada cartão de um estado de conclusão para o próximo e, ao fazê-lo, ajuda a rastrear o progresso.","DUPLICATE":"Projeto duplicado","DUPLICATE_DESC":"Inicie limpo e mantenha suas configurações","IMPORT":"Importar projeto","IMPORT_DESC":"Importar seu projeto de múltiplas plataformas para o Taiga","INVITE":"Convidar para o projeto","SOLO_PROJECT":"Você estará sozinho neste projeto","INVITE_LATER":"(Você poderá convidar mais membros depois)","BACK":"Back","MAX_PRIVATE_PROJECTS":"Infelizmente, você atingiu o número máximo de projetos privados. Se você quiser aumentar o limite atual, entre em contato com o administrador.","MAX_PUBLIC_PROJECTS":"Infelizmente, você atingiu o número máximo de projetos públicos.\nSe você quiser aumentar o limite atual, entre em contato com o administrador.","PUBLIC_PROJECT":"Projeto Público","PRIVATE_PROJECT":"Projeto Privado"},"COMMON":{"DETAILS":"Detalhes do novo projeto","PROJECT_TITLE":"Nome do Projeto","PROJECT_DESCRIPTION":"Descrição do Projeto"},"DUPLICATE":{"TITLE":"Duplicar Projeto","DESCRIPTION":"Inicie limpo e mantenha suas configurações","SELECT_PLACEHOLDER":"Escolha um projeto existente para duplicar"},"IMPORT":{"TITLE":"Importar Projeto","DESCRIPTION":"Importar seu projeto de múltiplas plataformas para o Taiga","ASYNC_IN_PROGRESS_TITLE":"Nossos Oompa Loompas estão importando seu projeto","ASYNC_IN_PROGRESS_MESSAGE":"Este processo pode levar alguns minutos
    Enviaremos um email a você assim que estiver pronto","UPLOAD_IN_PROGRESS_MESSAGE":"Enviado {{uploadedSize}} de {{totalSize}}","ERROR":"Nossos Oompa Loompas tiveram alguns problemas importando os dados do seu dump. Tente novamente.","ERROR_TOO_MANY_REQUEST":"Desculpe, nossos Oompa Loompas estão muito ocupados neste instante. Tente novamente em alguns minutos.","ERROR_MESSAGE":"Nossos Oompa Loompas tiveram alguns problemas ao importar seu arquivo de despejo: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) é muito pesado para nossos Oompa Loompas, tente algo menor que ({{maxFileSize}})","SYNC_SUCCESS":"Seu projeto foi importado com sucesso","IMPORT":"Importar","WHO_IS":"As tarefas deles serão atribuídas para","WRITE_EMAIL":"Ou se você quiser, escreva o email que este usuário utiliza no Taiga","SEARCH_CONTACT":"Ou se você quiser, pesquise em seus contatos","WRITE_EMAIL_LABEL":"Escreva o email que este usuário utiliza no Taiga","ACCEEDE":"Aderir","PROJECT_MEMBERS":"Membros do Projeto","PROCESS_DESCRIPTION":"Diga-nos quem da Taiga você deseja atribuir as tarefas de {{platform}}","MATCH":"É{{user_external}} a mesma pessoa que {{user_internal}}?","CHOOSE":"Selecione o usuário","LINKS":"Links com {{platform}}","LINKS_DESCRIPTION":"Deseja manter o link de cada item com o cartão {{platform}} original?","WARNING_MAIL_USER":"Observe que, se o usuário não tiver uma conta na Taiga, não poderemos lhe atribuir as tarefas.","ASSIGN":"Atribuir","PROJECT_SELECTOR":{"NO_RESULTS":"Parece que nada foi encontrado com os critérios de sua pesquisa.","ACTION_SEARCH":"procurar","ACTION_BACK":"Back"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"O projeto que você está tentando importar tem {{members}} membros incluindo você, infelizmente, seu plano atual permite um máximo de {{max_memberships}} membros por projeto privado. Se você gostaria de aumentar esse limite, entre em contato com o administrador.","PROJECT_MEMBERS_DESC_PUBLIC":"O projeto que você está tentando importar tem {{members}} membros incluindo você, infelizmente, seu plano atual permite um máximo de {{max_memberships}} membros por projeto público. Se você gostaria de aumentar esse limite, entre em contato com o administrador.","ACCOUNT_ALLOW_MEMBERS":"Sua conta só permite {{members}} membros","PRIVATE_PROJECTS_SPACE":{"TITLE":"Infelizmente, seu plano atual não permite projetos privados adicionais.","DESC":"O projeto que você está tentando importar é privado. Infelizmente, seu plano plano atual não permite projetos privados adicionais."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Infelizmente, seu plano atual não permite projetos públicos adicionais.","DESC":"O projeto que você está tentando importar é público. Infelizmente, seu plano plano atual não permite projetos públicos adicionais."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Seu plano atual permite um máximo de {{max_memberships}} membros por projeto privado"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Seu plano atual permite um máximo de {{max_memberships}} membros por projeto público."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Infelizmente, seu plano atual não permite projetos privados adicionais ou um aumento de mais de {{max_memberships}} membros por projeto privado.","DESC":"O projeto que você está tentando importar é privado e tem {{members}} membros."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Infelizmente, seu plano atual não permite projetos públicos adicionais ou um aumento de mais de {{max_memberships}} membros por projeto público.","DESC":"O projeto que você está tentando importar é público e tem mais que {{members}} membros."}},"IN_PROGRESS":{"TITLE":"Importando Projeto","DESCRIPTION":"Este processo pode levar algum tempo, mantenha a janela aberta por favor."},"WARNING":{"TITLE":"Algumas tarefas não serão atribuídas","DESCRIPTION":"Ainda há pessoas não identificadas. Os cartões atribuídos a essas pessoas permanecerão não atribuídos. Verifique todos os contatos para não perder essa informação.","CHECK":"Verificar contatos"},"TAIGA":{"SELECTOR":"Importe seu projeto Taiga"},"TRELLO":{"SELECTOR":"Importe seu quadro Trello para o Taiga","CHOOSE_PROJECT":"Escolha o quadro que você deseja importar","NO_PROJECTS":"Parece que você não possui quadros no Trello"},"GITHUB":{"SELECTOR":"Importe seus problemas de projeto Github","CHOOSE_PROJECT":"Ache o projeto que deseja importar","NO_PROJECTS":"Parece que você não tem nenhum projeto no GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Como você quer importar seus problemas para o Taiga?","KANBAN_PROJECT":"Como histórias de usuários em um projeto kanban","KANBAN_PROJECT_DESCRIPTION":"Depois disso, você pode ativar o scrum com backlog.","SCRUM_PROJECT":"Como histórias de usuário em um projeto de Scrum","SCRUM_PROJECT_DESCRIPTION":"Depois disso você pode habilitar o modo kanban.","ISSUES_PROJECT":"Como problemas","ISSUES_PROJECT_DESCRIPTION":"Você não sera capaz de usar seus problemas no modo kanban ou scrum. Você poderá habilitar o kanban ou scrum para novas histórias de usuário"},"ASANA":{"SELECTOR":"Importe seu projeto Asana e escolha como administra-lo","CHOOSE_PROJECT":"Escolha o projeto que deseja importar","NO_PROJECTS":"Parece que você não tem nenhum projeto no Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"As tarefas e sub tarefas de seu projeto serão criados como história de usuário Taiga e tarefas.","CREATE_AS_KANBAN_DESCRIPTION":"As tarefas e sub tarefas de seu projeto serão criados como história de usuário Taiga e tarefas."},"JIRA":{"SELECTOR":"Importe seu projeto Jira e escolha como gerenciá-lo","HOW_TO_CONFIGURE":"(Ajuda de configuração)","CHOOSE_PROJECT":"Escolha o projeto ou quadro que deseja importar","NO_PROJECTS":"Parece que você não tem projetos ou quadros no Jira","URL":"Sua url Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Tipos de problemas","CREATE_AS_SCRUM_DESCRIPTION":"Os problemas e sub problemas do seu projeto serão criados como histórias de usuário Taiga e tarefas.","CREATE_AS_KANBAN_DESCRIPTION":"Os problemas e sub problemas do seu projeto serão criados como histórias de usuário Taiga e tarefas.","CREATE_AS_ISSUES_DESCRIPTION":"O que você quer fazer com os sub problemas do projeto Jira? (Taiga não permite sub problemas)","CREATE_NEW_ISSUES":"Converta sub problemas para novos problemas Taiga","NOT_CREATE_NEW_ISSUES":"Não importe sub problemas"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Você tem certeza que quer excluir sua conta Taiga?","CANCEL":"Voltar para configurações","ACCEPT":"Excluir conta","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Excluir projeto","QUESTION":"Você tem certeza que quer excluir este projeto?","SUBTITLE":"Todas as informações do projeto (histórias, tarefas, problemas, sprints e páginas de wiki) serão perdidas! :-(","CONFIRM":"Sim, eu tenho certeza"},"ASSIGNED_TO":{"SELECT":"Selecionar assinalados para","SEARCH":"Procurar por usuários"},"ADD_MEMBER":{"TITLE":"Novo Membro","PLACEHOLDER":"Filtre usuários ou escreva um email para convidá-los","ADD_EMAIL":"Adicione e-mail.","REMOVE":"Remover","INVITE":"Convidar","CHOOSE_ROLE":"Escolha um papel","PLACEHOLDER_INVITATION_TEXT":"(Opcional) Adicione uma mensagem de texto ao convite. Diga algo animador para os novos membros ;-)","HELP_TEXT":"Se os usuários já estiverem registrados no Taiga, eles serão adicionados automaticamente. Caso contrário, eles receberão um convite."},"FEEDBACK":{"TITLE":"Diga-nos algo...","COMMENT":"...um problema, algumas sugestões, algo legal... ou até seu pior pesadelo com Taiga","ACTION_SEND":"Enviar feedback"},"SEARCH":{"TITLE":"Procurar","PLACEHOLDER_SEARCH":"O que você está procurando?"},"ADD_EDIT_SPRINT":{"TITLE":"Nova Sprint","PLACEHOLDER_SPRINT_NAME":"nome da sprint","PLACEHOLDER_SPRINT_START":"Inicio Estimado","PLACEHOLDER_SPRINT_END":"Estimativa de Termino","ACTION_DELETE_SPRINT":"Você quer excluir esta sprint?","TITLE_ACTION_DELETE_SPRINT":"excluir sprint","LAST_SPRINT_NAME":"última sprint é {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"Nova tarefa","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"Você não salvou as alterações.\nTem certeza que deseja fechar o formulário?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Adicionar problema","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Excluir sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opcional) Adicione uma mensagem de texto ao convite. Diga algo animador para os novos membros ;-)","PLACEHOLDER_TYPE_EMAIL":"Digite um Email","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Você está próximo de atingir o número máximo de membros permitidos para este projeto, {{maxMembers}} membros. Se você deseja aumentar este limite, por favor entre em contato com o administrador.","LIMIT_USERS_WARNING_MESSAGE":"Você está próximo de atingir o número máximo de membros permitidos para este projeto, {{maxMembers}} membros."},"LEAVE_PROJECT_WARNING":{"TITLE":"Infelizmente, este projeto não pode ficar sem um dono","CURRENT_USER_OWNER":{"DESC":"Você é o dono atual deste projeto. Antes de sair, por favor transfira o projeto para outra pessoa.","BUTTON":"Mude o dono do projeto"},"OTHER_USER_OWNER":{"DESC":"Infelizmente, você não pode excluir um membro que também é o dono de um projeto. Primeiro designe um novo proprietário para o projeto.","BUTTON":"Solicite a mudança do dono do projeto"}},"CHANGE_OWNER":{"TITLE":"Quem você quer que seja o novo dono do projeto?","ADD_COMMENT":"Adicionar comentário","BUTTON":"Pedir a este membro do projeto para se tornar o novo dono do projeto"},"CONTACT_PROJECT":{"TITLE":"Enviar um e-mail para","WARNING":"O e-mail será recebido pelos administradores do projeto","PLACEHOLDER":"Escreva sua mensagem","SEND":"Enviar"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"Em uma semana","IN_TWO_WEEKS":"Em duas semanas","IN_ONE_MONTH":"Em um mês","IN_THREE_MONTHS":"Em três meses"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Qual é o projeto?","CHOOSE_PROJECT_FROM":"Qual é o projeto?","SUBJECT":"Assunto","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Parece que nada foi encontrado com os critérios de sua pesquisa."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Épico {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{epicStatus }}. Descrição: {{epicDescription}}","SECTION_NAME":"Épico","ERROR_UNLINK_RELATED_USERSTORY":"Não fomos capazes de separar: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Criar um relacionamento com","NEW_USERSTORY":"Nova história de usuário","EXISTING_USERSTORY":"História de usuário existente","CHOOSE_PROJECT_FOR_CREATION":"Qual projeto?","SUBJECT":"Assunto","SUBJECT_BULK_MODE":"Sujeito (inserção em lote)","CHOOSE_PROJECT_FROM":"Qual projeto?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"Esse projeto ainda não possui Histórias de Usuário. Por favor, selecione outro projeto.","NO_USERSTORIES_FOUND":"Parece que nada foi encontrado com os critérios de sua pesquisa.","FILTER_USERSTORIES":"Filtrar histórias de usuário","LIGHTBOX_TITLE_BLOKING_EPIC":"Épico bloqueador","ACTION_DELETE":"Excluir épico"},"US":{"PAGE_TITLE":"{{userStorySubject}} - História de Usuário {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{userStoryStatus }}. Completos {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} de {{userStoryTotalTasks}} tarefas encerradas). Pontos: {{userStoryPoints}}. Descrição: {{userStoryDescription}}","SECTION_NAME":"História de usuário","LINK_TASKBOARD":"Quadro de Tarefas","TITLE_LINK_TASKBOARD":"Ir para o quadro de tarefas","TOTAL_POINTS":"total de pontos","ADD":"+ Adicionar uma nova História de Usuário","ADD_BULK":"Adicionar Histórias de Usuários em lote","PROMOTED":"Esta História de Usuário foi criada a partir do Problema:","TITLE_LINK_GO_TO_ISSUE":"Adicionar comentários aos apontamentos","TITLE_DELETE_ACTION":"Apagar história de usuário","LIGHTBOX_TITLE_BLOKING_US":"História de usuário bloqueadora","NOT_ESTIMATED":"Não estimado","OWNER_US":"Esta história de usuário pertence a","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publicar como Gig no Taiga Tribe","PUBLISH_INFO":"Mais informações","PUBLISH_TITLE":"Mais informações sobre como publicar na Tribo Taiga","PUBLISHED_AS_GIG":"História publicada como Apresentação na Tribo Taiga","EDIT_LINK":"Editar link","CLOSE":"Fechar","SYNCHRONIZE_LINK":"sincronizar com a Tribo Taiga","PUBLISH_MORE_INFO_TITLE":"Você precisa de alguém para esta tarefa?","PUBLISH_MORE_INFO_TEXT":"

    Se você precisar de ajuda com um determinado trabalho, você pode facilmente criar trabalhos em Taiga Tribe E receber ajuda de todo o mundo. Você será capaz de controlar e gerenciar o trabalho desfrutando de uma grande comunidade ansiosa para contribuir.

    TaigaTribe Nasceu como um irmão gêmeo taiga. Ambas as plataformas podem viver separadamente, mas acreditamos que há muito poder em usá-las combinadas, então estamos assegurando que a integração funcione como um charme.

    "}},"COMMENTS":{"DELETED_INFO":"Comentário excluído por {{user}}","COMMENTS_COUNT":"{{comments}} comentários","OLDER_FIRST":"Antigos primeiro","RECENT_FIRST":"Recentes primeiro","COMMENT":"Comentário","EDITED_COMMENT":"Editado:","SHOW_HISTORY":"Ver histórico","TYPE_NEW_COMMENT":"Escreva um novo comentário aqui","SHOW_DELETED":"Mostrar comentários excluídos","HIDE_DELETED":"Esconder comentário excluído","DELETE":"Excluir comentário","RESTORE":"Restaurar comentário","HISTORY":{"TITLE":"Atividade"}},"ACTIVITY":{"TITLE":"Atividade","ACTIVITIES_COUNT":"{{activities}} atividades","TAGS_ADDED":"tags adicionadas:","TAGS_REMOVED":"tags removidas:","US_POINTS":"{{role}} pontos","NEW_ATTACHMENT":"novo anexo:","DELETED_ATTACHMENT":"anexo excluído:","UPDATED_ATTACHMENT":"anexo atualizado ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"atributo personalizado criado","UPDATED_CUSTOM_ATTRIBUTE":"atributo personalizado atualizado","BECAME_DEPRECATED":"foi depreciado","BECAME_UNDEPRECATED":"foi depreciado","TEAM_REQUIREMENT":"Requisitos da Equipe","CLIENT_REQUIREMENT":"Requisitos do Cliente","BLOCKED":"Bloqueado","VALUES":{"NOT_SET":"not set","UNASSIGNED":"não atribuído"},"FIELDS":{"SUBJECT":"assunto","DESCRIPTION":"descrição","PRIORITY":"prioridade","SEVERITY":"gravidade","STATUS":"status","TYPE":"Digite","ASSIGNED_TO":"Assinado à","ASSIGNED_USERS":"Usuários atribuídos","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"cor"}},"BACKLOG":{"PAGE_TITLE":"Backlog - {{projectName}}","PAGE_DESCRIPTION":"O painel de backlog, com histórias de usuário e sprints do projeto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Backlog","CUSTOMIZE_GRAPH":"Personalize seu gráficos de backlog","CUSTOMIZE_GRAPH_TEXT":"Para ter um gráfico que te ajuda a seguir a evolução do projeto você deve configurar os pontos e as sprints via","CUSTOMIZE_GRAPH_ADMIN":"Administrador","CUSTOMIZE_GRAPH_TITLE":"Configure os pontos e sprints pelo Administrador","MOVE_US_TO_CURRENT_SPRINT":"Mover para a Sprint Atual","MOVE_US_TO_LATEST_SPRINT":"Mover para a última Sprint","EMPTY":"O backlog está vazio!","CREATE_NEW_US":"Criar uma nova História de Usuário","CREATE_NEW_US_EMPTY_HELP":"Você talvez queira criar uma nova história de usuário","EXCESS_OF_POINTS":"Excesso de pontos","PENDING_POINTS":"Pontos Pendentes","CLOSED_POINTS":"fechado","COMPACT_SPRINT":"Sprint Resumida","GO_TO_TASKBOARD":"Ir ao quadro de tarefas de {{::name}}","EDIT_SPRINT":"Editar sprint","TOTAL_POINTS":"total","STATUS_NAME":"Nome de Status","SORTABLE_FILTER_ERROR":"Você não pode jogar sobre o backlog quando filtros estão abertos","DOOMLINE":"Escopo do projeto [Doomline]","CHART":{"XAXIS_LABEL":"Sprints","YAXIS_LABEL":"Pontos","OPTIMAL":"Ideal de pontos pendentes para a sprint \"{{sprintName}}\" deve ser {{value}}","REAL":"Pontos realmente pendentes para a sprint \"{{sprintName}}\" é {{value}}","INCREMENT_TEAM":"Pontos acrescentados pelos requisitos do time para a sprint \"{{sprintName}}\" é {{value}}","INCREMENT_CLIENT":"Pontos acrescentados pelos requisitos do cliente para a sprint \"{{sprintName}}\" é {{value}}"},"TAGS":{"TOGGLE":"Alternar visibilidade das tags","SHOW":"Exibir tags","HIDE":"Esconder tags"},"FORECASTING":{"TITLE":"Projeção de velocidade","BACKLOG":"Exibir backlog","NEW_SPRINT":"Candidatos a Histórias do Usuário do para o seu próximo sprint com base na sua velocidade. Clique para criar um novo sprint.","CURRENT_SPRINT":"Candidatos a Histórias do Usuário do para o seu próximo sprint com base na sua velocidade. Clique para adicionar ao sprint atual."},"TABLE":{"COLUMN_US":"Histórias de Usuários","TITLE_COLUMN_POINTS":"Selecionar exibição por função"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"pontos
    totais","COMPLETED_POINTS":"pontos
    completados","OPEN_TASKS":"tarefas
    abertas","CLOSED_TASKS":"tarefas
    fechadas","IOCAINE_DOSES":"iocaine
    doses","SHOW_STATISTICS_TITLE":"Mostrar estatísticas","TOGGLE_BAKLOG_GRAPH":"Mostrar/Esconder gráfico de burndown","POINTS_PER_ROLE":"Pontos por regra"},"SUMMARY":{"PROJECT_POINTS":"pontos do
    projeto","DEFINED_POINTS":"pontos
    definidos","CLOSED_POINTS":"pontos
    fechados","POINTS_PER_SPRINT":"pontos /
    sprint"},"FILTERS":{"TOGGLE":"Alternar visibilidade de filtros","HIDE":"Esconder Filtros","SHOW":"Mostrar Filtros"},"SPRINTS":{"TITLE":"SPRINTS","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Quadro de tarefas da Sprint","TITLE_LINK_TASKBOARD":"ir para quadro de tarefas de \"{{name}}\"","EMPTY":"Ainda não temos sprints.","WARNING_EMPTY_SPRINT_ANONYMOUS":"Esta sprint não tem Histórias de Usuário","WARNING_EMPTY_SPRINT":"Solte aqui Histórias do seu backlog para iniciar uma nova sprint","TITLE_ACTION_NEW_SPRINT":"Adicionar nova sprint","TEXT_ACTION_NEW_SPRINT":"Você poderá querer criar uma nova sprint em seu projeto","ACTION_SHOW_CLOSED_SPRINTS":"Mostrar sprints fechadas","ACTION_HIDE_CLOSED_SPRINTS":"Esconder sprints fechadas"}},"ERROR":{"TEXT1":"Alguma coisa aconteceu e nossos Oompa Loompas estão trabalhando nisso.","NOT_FOUND":"Não encontrado","NOT_FOUND_TEXT":"Erro 404. A página que você procura não existe mais. Você pode voltar para a página do TAIGA e ver se consegue encontrar o que está procurando.","PERMISSION_DENIED":"Permissão negada","PERMISSION_DENIED_TEXT":"Você não tem permissão de acesso a esta página.","VERSION_ERROR":"Alguém dentro da Taiga mudou isso antes e nosso Oompa Loompa não podem aplicar suas alterações. Recarregue a página e aplique-as novamente (elas serão perdidas, agora)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Quadro de Tarefas da Sprint - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (de{{startDate}} até {{endDate}}) para {{projectName}}. Completos {{completedPercentage}}% ({{completedPoints}} de {{totalPoints}} pontos). {{openTasks}} tarefas abertas de {{totalTasks}}.","SECTION_NAME":"Quadro de Tarefas","TITLE_ACTION_ADD":"Adicionar uma nova Tarefa","TITLE_ACTION_ADD_BULK":"Adicionar algumas tarefas em lote","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Assinalar tarefa","PLACEHOLDER_CARD_TITLE":"Isto pode ser uma atividade","PLACEHOLDER_CARD_TEXT":"Separe Histórias de Usuários em atividades para rastreá-las separadamente.","TABLE":{"COLUMN":"História de usuário","TITLE_ACTION_FOLD":"Recolher coluna","TITLE_ACTION_UNFOLD":"Abrir coluna","TITLE_ACTION_FOLD_ROW":"Guardar Linha","TITLE_ACTION_UNFOLD_ROW":"Abrir linha","FIELD_POINTS":"pontos","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Dias","YAXIS_LABEL":"Pontos","OPTIMAL":"Pontos pendentes ideais para o dia {{formattedDate}} deve ser {{roundedValue}}","REAL":"\"Pontos pendentes reais para o dia {{formattedDate}} são {{roundedValue}}\"","DATE":"DD MMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Tarefa {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{taskStatus }}. Descrição: {{taskDescription}}","SECTION_NAME":"Tarefa","LINK_TASKBOARD":"Quadro de Tarefas","TITLE_LINK_TASKBOARD":"Ir para o quadro de tarefas","PLACEHOLDER_SUBJECT":"Digite um novo titulo para tarefa","TITLE_SELECT_STATUS":"Nome de Status","OWNER_US":"Esta tarefa pertence a ","TITLE_LINK_GO_OWNER":"Ir para história de usuário","TITLE_DELETE_ACTION":"Excluir Tarefa","LIGHTBOX_TITLE_BLOKING_TASK":"Tarefa bloqueadora","FIELDS":{"IS_IOCAINE":"É Iocaine"},"TITLE_ACTION_IOCAINE":"Se sentindo sobrecarregado por uma tarefa? Assegure-se de que os outros saibam disso clicando em Iocaine quando estiver editando a tarefa. É possível se tornar imune a essse veneno mortal (fictício) consumindo pequenas quantidades ao longo do tempo, assim como é possível ficar melhor no que faz, ocasionalmente, por assumir desafios extras!"},"NOTIFICATION":{"OK":"Tudo está ok","WARNING":"Oops, aconteceu algo...","WARNING_TEXT":"Nossos Oompa Loompas estão tristes, suas alterações não foram salvas.","SAVED":"Nossos Oompa Loompas salvaram todas as suas mudanças!","CLOSE":"Fechar Notificação","MAIL":"Notificações por Email","DESKTOP":"Notificações da área de trabalho usando alertas do navegador","ASK_DELETE":"Você tem certeza que quer excluir?"},"CANCEL_ACCOUNT":{"TITLE":"Cancelar sua conta","SUBTITLE":"Sentimos por você estar saindo. Esperamos que tenha gostado :)","PLACEHOLDER_INPUT_TOKEN":"cancelar o token da conta","ACTION_LEAVING":"Sim, estou indo embora!","SUCCESS":"Nossos Oompa Loompas removeram sua conta"},"CHANGE_EMAIL_FORM":{"TITLE":"Mudar seu e-mail","SUBTITLE":"Só mais um clique e seu email será atualizado!","PLACEHOLDER_INPUT_TOKEN":"mudar token do email","ACTION_CHANGE_EMAIL":"Mudar email","SUCCESS":"Nossos Oompa Loompas atualizaram seu email"},"ISSUES":{"PAGE_TITLE":"Apontamentos - {{projectName}}","PAGE_DESCRIPTION":"O painel de problemas do projeto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Problema","ACTION_NEW_ISSUE":"+ NOVO PROBLEMA","ACTION_PROMOTE_TO_US":"Promover para História de Usuário","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Esse problema foi promovido para história de usuário","EXTERNAL_REFERENCE":"Esse problema foi criado a partir de","GO_TO_EXTERNAL_REFERENCE":"Ir para a origem","ACTION_DELETE":"Problema excluído","LIGHTBOX_TITLE_BLOKING_ISSUE":"Problema que está bloqueando","LINK_TASKBOARD":"Quadro de Tarefas","TITLE_LINK_TASKBOARD":"Ir para o quadro de tarefas","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioridade","SEVERITY":"Gravidade","TYPE":"Tipo"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Promover esse problema para nova história de usuário","MESSAGE":"Você tem certeza que deseja criar uma nova História de Usuário a partir desse problema?"},"TABLE":{"COLUMNS":{"TYPE":"Tipo","SEVERITY":"Gravidade","PRIORITY":"Prioridade","SUBJECT":"Assunto","VOTES":"Votos","STATUS":"Status","MODIFIED":"Modificado","ASSIGNED_TO":"Atribuído a"},"TITLE_ACTION_CHANGE_STATUS":"Mudar status","TITLE_ACTION_ASSIGNED_TO":"Atribuído a","BLOCKED":"Bloqueado","EMPTY":{"TITLE":"Não há problemas para reportar :-)","SUBTITLE":"Você encontrou um problema?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - problema {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Estado: {{issueStatus }}. Tipo: {{issueType}}, Prioridade: {{issuePriority}}. gravidade: {{issueSeverity}}. Descrição: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"O painel do kanban, contendo histórias de usuários do projeto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Recolher coluna","TITLE_ACTION_UNFOLD":"Abrir coluna","TITLE_ACTION_ADD_US":"Adicionar Nova História de Usuário","TITLE_ACTION_ADD_BULK":"Adicionar novo lote","ACTION_SHOW_ARCHIVED":"Mostrar arquivados","ACTION_HIDE_ARCHIVED":"esconder arquivados","HIDDEN_USER_STORIES":"As histórias de usuários nesse status são escondidas por padrão","PLACEHOLDER_CARD_TITLE":"Estas são suas Histórias de Usuários","PLACEHOLDER_CARD_TEXT":"Histórias poderão também ter sub-atividades para separar os requisitos"},"SEARCH":{"PAGE_TITLE":"Buscar - {{projectName}}","PAGE_DESCRIPTION":"Busque qualquer coisa, histórias de usuários, problemas, tarefas, ou páginas da wiki, no projeto {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Épicos","FILTER_USER_STORIES":"Histórias de Usuários","FILTER_ISSUES":"Problemas","FILTER_TASKS":"Tarefas","FILTER_WIKI":"Paginas Wiki","PLACEHOLDER_SEARCH":"Procurar em...","TITLE_ACTION_SEARCH":"procurar","EMPTY_TITLE":"Parece que nada foi encontrado com o critério de busca","EMPTY_DESCRIPTION":"Talvez tente uma das abas acima ou busque novamente"},"TEAM":{"PAGE_TITLE":"Equipe - {{projectName}}","PAGE_DESCRIPTION":"O painel do time irá exibir todos os membros envolvidos no projeto {{projectName}}: {{projectDescription}}","SECTION_NAME":"Time","PLACEHOLDER_INPUT_SEARCH":"Procurar pelo nome completo...","COLUMN_MR_WOLF":"Sr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Adicionar apontamentos","COLUMN_IOCAINE":"Bebedor de Iocaine","EXPLANATION_COLUMN_IOCAINE":"Doses de Iocaine ingeridas","COLUMN_CERVANTES":"Pero Vaz de Caminha","EXPLANATION_COLUMN_CERVANTES":"Páginas wiki editadas","COLUMN_BUG_HUNTER":"Caçador de bugs","EXPLANATION_COLUMN_BUG_HUNTER":"Problemas reportados","COLUMN_NIGHT_SHIFT":"Periodo Noturno","EXPLANATION_COLUMN_NIGHT_SHIFT":"Tarefa fechada","COLUMN_TOTAL_POWER":"Total de poder","EXPLANATION_COLUMN_TOTAL_POWER":"Pontuação Total","SECTION_TITLE_TEAM":"Equipe >","SECTION_FILTER_ALL":"Tudo","CONFIRM_LEAVE_PROJECT":"Você tem certeza que quer deixar o projeto?","ACTION_LEAVE_PROJECT":"Deixar este projeto"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Tamanho máximo: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Configurações de usuário","USER_PROFILE":"Perfil do Usuário","CHANGE_PASSWORD":"Alterar senha","EMAIL_NOTIFICATIONS":"Notificações por email","DESKTOP_NOTIFICATIONS":"Notificações da área de trabalho","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Notificações da área de trabalho","SECTION_NAME":"Notificações por email","COLUMN_PROJECT":"Projeto","COLUMN_RECEIVE_ALL":"Receber todos","COLUMN_ONLY_INVOLVED":"Apenas envolvido","COLUMN_NO_NOTIFICATIONS":"Sem notificações","OPTION_ALL":"Tudo","OPTION_INVOLVED":"Envolvido","OPTION_NONE":"Nada"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projeto","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projeto"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Usar imagem padrão","ACTION_DELETE_ACCOUNT":"Excluir conta Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Verifique sua caixa de entrada!
    Enviamos um e-mail para sua conta
    com as instruções para definir seu novo endereço","CHANGE_PHOTO":"Mudar foto","FIELD":{"USERNAME":"Nome do usuário","EMAIL":"Email","FULL_NAME":"Nome completo","PLACEHOLDER_FULL_NAME":"Preencha seu nome completo (ex. Íñigo Montoya)","BIO":"Bio (max. 210 caracteres)","PLACEHOLDER_BIO":"Diga algo sobre você","LANGUAGE":"Idioma","LANGUAGE_DEFAULT":"-- usar idioma padrão --","THEME":"Tema","THEME_DEFAULT":"-- usar tema padrão --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Ultima edição em {{lastModifiedDate}} ({{totalEditions}} total de edições) Conteúdo: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Remover essa página wiki","DELETE_LIGHTBOX_TITLE":"Excluir página Wiki","DELETE_LINK_TITLE":"Excluir link de Wiki","NAVIGATION":{"HOME":"Página principal","SECTION_NAME":"MARCADORES","ACTION_ADD_LINK":"Adicionar marcador","ALL_PAGES":"Todas as páginas wiki"},"SUMMARY":{"TIMES_EDITED":"vezes
    editadas","LAST_EDIT":"última
    edição","LAST_MODIFICATION":"ultima modificação"},"SECTION_PAGES_LIST":"Todas as páginas","PAGES_LIST_COLUMNS":{"TITLE":"Título","EDITIONS":"Edições","CREATED":"Criado","MODIFIED":"Modificado","CREATOR":"Criador","LAST_MODIFIER":"Último modificador"}},"HINTS":{"SECTION_NAME":"Sugestões","LINK":"Se você quer saber como usar visite nossa página de suporte","LINK_TITLE":"Visite nossa página de suporte","HINT1_TITLE":"Você sabia que você pode importar e exportar projetos?","HINT1_TEXT":"Isso permite você extrair todo o seu conteúdo de um Taiga e mover para outro.","HINT2_TITLE":"Você sabia que pode criar campos personalizados?","HINT2_TEXT":"Equipes agora podem personalizar campos, um jeito flexível de inserir dados específicos para uso em seu próprio fluxo de trabalho.","HINT3_TITLE":"Reordene seus projetos para evidenciar os mais relevantes para você.","HINT3_TEXT":"Os 10 projetos estão listados na barra de acesso direto, no topo.","HINT4_TITLE":"Você esqueceu onde está trabalhando?","HINT4_TEXT":"Não se preocupe, no seu painel você vai encontrar suas tarefas abertas, problemas, e histórias de usuários na ordem em que você trabalhou nelas."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} adicionou um novo anexo em {{obj_name}}","US_CREATED":"{{username}} criou uma nova História de Usuário {{obj_name}} em {{project_name}}","ISSUE_CREATED":"{{username}} criou um novo problema {{obj_name}} em {{project_name}}","TASK_CREATED":"{{username}} criou uma nova tarefa {{obj_name}} em {{project_name}}","TASK_CREATED_WITH_US":"{{username}} criou nova tarefa {{obj_name}} em {{project_name}} que pertence a História de Usuário {{us_name}}","WIKI_CREATED":"{{username}} criou uma página wiki {{obj_name}} em {{project_name}}","MILESTONE_CREATED":"{{username}} criou uma nova sprint {{obj_name}} em {{project_name}}","EPIC_CREATED":"{{username}} criou um novo épico {{obj_name}} em {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} relacionou a história de usuário {{related_us_name}} ao épico {{epic_name}} em {{project_name}}","NEW_PROJECT":"{{username}} criou o projeto {{project_name}}","MILESTONE_UPDATED":"{{username}} atualizou a sprint {{obj_name}}","US_UPDATED":"{{username}} atualizou o atributo \"{{field_name}}\" da História de Usuário {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" da História de Usuário {{obj_name}} para {{new_value}}","US_UPDATED_POINTS":"{{username}} atualizou os pontos de '{{role_name}}' da História de Usuário {{obj_name}} para {{new_value}}","ISSUE_UPDATED":"{{username}} atualizou o atributo \"{{field_name}}\" do problema {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" do problema {{obj_name}} para {{new_value}}","TASK_UPDATED":"{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} para {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} para {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} que pertence à História de Usuário {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" da tarefa {{obj_name}} que pertence à História de Usuário {{us_name}} para {{new_value}}","WIKI_UPDATED":"{{username}} atualizou a página wiki {{obj_name}}","EPIC_UPDATED":"{{username}} atualizou o atributo \"{{field_name}}\" do épico {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} atualizou o atributo \"{{field_name}}\" do épico {{obj_name}} para {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} atualizou o \"{{field_name}}\" do épico {{obj_name}} para ","NEW_COMMENT_US":"{{username}} comentou na História de Usuário {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} comentou no problema {{obj_name}}","NEW_COMMENT_TASK":"{{username}} comentou na tarefa {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} comentou no épico {{obj_name}}","NEW_MEMBER":"{{project_name}} tem um membro novo","US_ADDED_MILESTONE":"{{username}} adicionou a História de Usuário {{obj_name}} a {{sprint_name}}","US_MOVED":"{{username}} moveu a História de Usuário {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} adicionou a História de Usuário {{obj_name}} ao backlog","BLOCKED":"{{username}} bloqueou {{obj_name}}","UNBLOCKED":"{{username}} desbloqueou {{obj_name}}","NEW_USER":"{{username}} ingressou no Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Problema","TASK":"Tarefa"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"Ao criar uma nova conta, você concorda com nossos termos de serviço e política de privacidade.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"Você viu isso chegando, certo? Atualizações aos nossos Termos de Serviço","GDPR_ANNOUNCEMENT_INFOLINK":"Por favor, leia nossa declaração aqui"},"EXTERNAL_APP":{"PAGE_TITLE":"Um app externo requer autenticação","PAGE_DESCRIPTION":"Um app externo requer autenticação","AUTHORIZATION_REQUEST":"Autorizar {{application}} a usar sua conta Taiga?","LOGIN_WITH_ANOTHER_USER":"Login com um outro usuário","AUTHORIZE_APP":"Autorizar app","CANCEL":"Cancelar"},"JOYRIDE":{"NAV":{"NEXT":"Próximo","BACK":"Back","SKIP":"Pular","DONE":"Terminado"},"DASHBOARD":{"STEP1":{"TITLE":"Seu projeto","TEXT":"Bem-Vindo! Aqui você encontrará os projetos que você está envolvido."},"STEP2":{"TITLE":"Trabalhando em","TEXT":"Aqui você irá encontrar as Histórias de Usuários, Atividades e Problemas em que você está trabalhando."},"STEP3":{"TITLE":"Observando","TEXT1":"E aqui você vai encontrar os do seu projeto que você escolheu seguir.","TEXT2":"Você já está trabalhando com Taiga ;)"},"STEP4":{"TITLE":"Vamos começar","TEXT1":"Você pode iniciar por criando seu primeiro Projeto no Taiga","TEXT2":"Boa Sorte!"}},"BACKLOG":{"STEP1":{"TITLE":"Sumário do projeto","TEXT1":"Aqui você verá o estado do seu projeto","TEXT2":"Você pode alterar qualquer configuração do projeto no menu admin."},"STEP2":{"TITLE":"Backlog do Produto","TEXT":"O backlog é a lista de requisitos (Histórias de Usuário) do projeto. Aqui é onde você planejará suas sprints."},"STEP3":{"TITLE":"Sprints","TEXT":"Sprints são períodos curtos de tempo (geralmente 2 semanas) durante as quais o trabalho especificado tem que ser concluído e entregue."},"STEP4":{"TITLE":"Histórias de Usuários","TEXT":"Estes são os requisitos em alto nível. Você pode adicioná-los ao backlog e arrastá-los à sprint em que devem ser entregues. "}},"KANBAN":{"STEP1":{"TITLE":"Personalize seu fluxo de trabalho","TEXT":"Configure as colunas que você precisa para mapear seu workflow através do Admin"},"STEP2":{"TITLE":"Histórias de Usuários & Atividades","TEXT":"Histórias de Usuários são os requisitos de alto nível. Você pode arrastá-los para diferentes colunas."},"STEP3":{"TITLE":"Adicionando Histórias de Usuários","TEXT1":"Você poderá adicionar uma única História do Usuário (Ícone add US) ou um grupo delas (ícone de add em massa)","TEXT2":"Boa Sorte!"}}},"DISCOVER":{"PAGE_TITLE":"Descubra projetos - Taiga","PAGE_DESCRIPTION":"Diretório pesquisável de projetos públicos no Taiga. Explore backlogs, linhas do tempo, problemas e times. Encontre os projetos mais curtidos ou mais ativos. Filtre por Kanban ou Scrum.","DISCOVER_TITLE":"Descobrir projetos","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Mais ativo","MOST_ACTIVE_EMPTY":"Não tem projetos ativos ainda","MOST_LIKED":"Mais curtidas","MOST_LIKED_EMPTY":"Não existe projetos curtidos ainda","VIEW_MORE":"Visualizar mais","FEATURED":"Projetos em destaque","EMPTY":"Não há projetos para exibir sob esse critério de pesquisa.
    Tente novamente!","FILTERS":{"ALL":"Tudo","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Procurando por pessoas.","WEEK":"Última semana","MONTH":"Último mês","YEAR":"Último ano","ALL_TIME":"Todo tempo","CLEAR":"Limpar filtros"},"SEARCH":{"PAGE_TITLE":"Procurar - Descobrir projetos - Taiga","PAGE_DESCRIPTION":"Diretório pesquisável de projetos públicos no Taiga. Explore backlogs, linhas do tempo, problemas e times. Encontre os projetos mais curtidos ou mais ativos. Filtre por Kanban ou Scrum.","INPUT_PLACEHOLDER":"Digite algo...","ACTION_TITLE":"Procurar","RESULTS":"Resultado de pesquisa."}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-ru.json b/dist/v-1549282893552/locales/taiga/locale-ru.json new file mode 100644 index 0000000..1e4acf9 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-ru.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Да","NO":"Нет","OR":"или","I_GET_IT":"OK, I get it","LOADING":"Пожалуйста, подождите...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"Сохранить","CANCEL":"Отмена","ACCEPT":"Принимаю","DELETE":"Удалить","UNLINK":"Отсоединить","CREATE":"Создать","ADD":"Добавить","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"Редактировать","DRAG":"Перетащите","TAG_LINE":"Ваш свободный, agile инструмент управления проектами с открытым исходным кодом","TAG_LINE_2":"Любите свой проект","BLOCK":"Блокировать","BLOCK_TITLE":"Заблокировать это, например, если имеются зависимости, которые не могут быть удовлетворены","BLOCKED":"Заблокирован","UNBLOCK":"Разблокировать","UNBLOCK_TITLE":"Разблокировать это","BLOCKED_NOTE":"Почему это заблокировано?","BLOCKED_REASON":"Пожалуйста разъясните причину","CREATED_BY":"Создано {{fullDisplayName}}","CLOSE":"закрыть","GO_HOME":"Домой","PLUGINS":"Плагины","ONE_ITEM_LINE":"Один объект на строку...","NEW_BULK":"Добавить пакетно","SUBTASKS":"Subtasks","PREVIOUS":"Предыдущий","NEXT":"Следующий","LOGOUT":"Выйти","EXTERNAL_USER":"внешний пользователь","GENERIC_ERROR":"Один из Умпа-Лумп говорит {{error}}.","IOCAINE_TEXT":"Пользователь не справляется с этой задачей. Возможно со временем Вы сможете ему помочь. Сейчас, просто обнимите его.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Владелец проекта","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Связанные пользовательские истории","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"Удалить запрос","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Кажется, это значение некорректно.","TYPE_EMAIL":"Значение должно быть корректной электронной почтой.","TYPE_URL":"Это значение должно быть корректным URL-адресом.","TYPE_URLSTRICT":"Это значение должно быть корректным URL-адресом.","TYPE_NUMBER":"Это значение должно быть правильным числом","TYPE_DIGITS":"Это значение должно состоять из цифр.","TYPE_DATEISO":"Это значение должно быть корректной датой (в формате ГГГГ-ММ-ДД).","TYPE_ALPHANUM":"Это значение должно состоять только из букв и цифр.","TYPE_PHONE":"Это значение должно быть корректным номером телефона.","NOTNULL":"Это значение не должно быть пустым.","NOT_BLANK":"Это значение не должно быть пустым.","REQUIRED":"Это значение обязательно.","REGEXP":"Кажется, это значение некорректно.","MIN":"Это значение должно быть больше или равно %s.","MAX":"Значение должно быть меньше либо равно %s.","RANGE":"Это значение должно быть между %s и %s.","MIN_LENGTH":"Это значение слишком короткое. Оно должно иметь %s символов или больше.","MAX_LENGTH":"Это значение слишком длинное. Оно должно иметь %s символов или меньше.","RANGE_LENGTH":"Длина этого значения некорректна. Оно должно быть от %s до %s символов в длину.","MIN_CHECK":"Вы должны выбрать хотя бы %s вариантов.","MAX_CHECK":"Вы должны выбрать %s вариантов или меньше.","RANGE_CHECK":"Вы должны выбрать от %s до %s вариантов.","EQUAL_TO":"Это значение должно быть таким же.","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Предыдущий Месяц","NEXT_MONTH":"Следующий Месяц","MONTHS":{"JAN":"Январь","FEB":"Февраль","MAR":"Март","APR":"Апрель","MAY":"Май","JUN":"Июнь","JUL":"Июль","AUG":"Август","SEP":"Сентябрь","OCT":"Октябрь","NOV":"Ноябрь","DEC":"Декабрь"},"WEEK_DAYS":{"SUN":"Воскресенье","MON":"Понедельник","TUE":"Вторник","WED":"Среда","THU":"Черверг","FRI":"Пятница","SAT":"Суббота"},"WEEK_DAYS_SHORT":{"SUN":"Вск","MON":"Пнд","TUE":"Втр","WED":"Срд","THU":"Чтв","FRI":"Птн","SAT":"Сбт"}},"SEE_USER_PROFILE":"Посмотреть профиль {{username }}","USER_STORY":"Пользовательская история","TASK":"Задача","ISSUE":"Запрос","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Ввести тэг","DELETE":"Удалить тэг","ADD":"Добавить тэг"},"DESCRIPTION":{"EMPTY":"Пустые места удручают... не стесняйтесь, напишите описание...","NO_DESCRIPTION":"Описания ещё нет"},"FIELDS":{"SUBJECT":"Тема","NAME":"Имя","URL":"URL","DESCRIPTION":"Описание","VALUE":"Значение","SLUG":"Ссылочное имя","COLOR":"Цвет","IS_CLOSED":"Закрыто?","STATUS":"Статус","TYPE":"Тип","SEVERITY":"Важность","PRIORITY":"Приоритет","ASSIGNED_TO":"Назначено","ASSIGNED_USERS":"Assigned users","POINTS":"Очки","IS_BLOCKED":"заблокирован","REF":"Ссылка","VOTES":"Голоса","SPRINT":"Спринт","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Все"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Не назначен","ASSIGN":"Назначить","DELETE_ASSIGNMENT":"Удалить назначение","REMOVE_ASSIGNED":"Удалить назначение","TOO_MANY":"...слишком много пользователей, продолжайте фильтровать","CONFIRM_UNASSIGNED":"Вы уверены что не хотите назначить ответственного?","TITLE_ACTION_EDIT_ASSIGNMENT":"Изменить назначение","SELF":"Назначено мне"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Закрыт","OPEN":"Открыть"},"WATCHERS":{"WATCHERS":"Наблюдатели","ADD":"Добавить наблюдателей","TITLE_ADD":"Добавить участника проекта к списку наблюдателей","DELETE":"Удалить наблюдателя","TITLE_LIGHTBOX_DELETE_WARTCHER":"Удалить наблюдателя..."},"WATCH_BUTTON":{"WATCH":"Отслеживать","WATCHING":"Отслеживаемое","UNWATCH":"Прекратить отслеживание","WATCHERS":"Наблюдатели","BUTTON_TITLE":"Начать/прекратить отслеживание","COUNTER_TITLE":"{total, plural, one{один наблюдатель} other{# наблюдателя (-ей)}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Повысить/понизить","COUNTER_TITLE":"{total, plural, one{один голос} other{# голоса (-ов)}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Пользовательские поля","SAVE":"Сохранить поле","EDIT":"Редактировать поле","DELETE":"Удалить атрибут","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Название ссылки","TITLE_ACTION_FILTER_BUTTON":"поиск","TITLE":"Фильтры","TITLE_ACTION_SEARCH":"Поиск","ACTION_SAVE_CUSTOM_FILTER":"сохранить как специальный фильтр","PLACEHOLDER_FILTER_NAME":"Введите название фильтра и нажмите \"ввод\"","APPLIED_FILTERS_NUM":"фильтры применены","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Тип","STATUS":"Статус","SEVERITY":"Важность","PRIORITIES":"Приоритеты","TAGS":"Тэги","ASSIGNED_TO":"Назначено","ASSIGNED_USERS":"Assigned users","ROLE":"Роль","CREATED_BY":"Создано","CUSTOM_FILTERS":"Собственные фильтры","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Блок Кода","DB_CLICK":"двойной клик для редактирования","SELECT_LANGUAGE_PLACEHOLDER":"Выбор языка","SELECT_LANGUAGE_REMOVE_FORMATING":"Убрать форматирование","OUTDATED":"Другой пользователь внес изменения в систему. Проверьте новую версию на вкладке активности, прежде чем вы сохраните ваши изменения.","MARKDOWN_HELP":"Помощь по синтаксису Markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"Посмотреть эпосы","ADD_EPICS":"Добавить эпосы","MODIFY_EPICS":"Изменить эпосы","COMMENT_EPICS":"Комментировать эпик","DELETE_EPICS":"Удалить эпосы"},"SPRINTS":{"NAME":"Спринты","VIEW_SPRINTS":"Посмотреть спринты","ADD_SPRINTS":"Добавить спринты","MODIFY_SPRINTS":"Изменить спринты","DELETE_SPRINTS":"Удалить спринты"},"USER_STORIES":{"NAME":"Пользовательские Истории","VIEW_USER_STORIES":"Просматривать пользовательские истории","ADD_USER_STORIES":"Добавлять пользовательские истории","MODIFY_USER_STORIES":"Изменять пользовательские истории","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"Удалять пользовательские истории"},"TASKS":{"NAME":"Задачи","VIEW_TASKS":"Просмотреть задачи","ADD_TASKS":"Добавить задачи","MODIFY_TASKS":"Редактировать задачи","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"Удалить задачи"},"ISSUES":{"NAME":"Запросы","VIEW_ISSUES":"Посмотреть запросы","ADD_ISSUES":"Добавить запросы","MODIFY_ISSUES":"Изменить запросы","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Удалить запросы"},"WIKI":{"NAME":"Вики","VIEW_WIKI_PAGES":"Посмотреть wiki-страницы","ADD_WIKI_PAGES":"Добавить wiki-страницы","MODIFY_WIKI_PAGES":"Модифицировать wiki-страницы","DELETE_WIKI_PAGES":"Удалить wiki-страницы","VIEW_WIKI_LINKS":"Посмотреть wiki-ссылки","ADD_WIKI_LINKS":"Добавить wiki-ссылки","DELETE_WIKI_LINKS":"Удалить wiki-ссылки"}}},"LOGIN":{"PAGE_TITLE":"Вход - Taiga","PAGE_DESCRIPTION":"Выполняется вход в Taiga, платформу для управления проектами стартапов, сделанную для разработчиков и дизайнеров, которые хотят простой и красивый инструмент превращающий работу в удовольствие."},"AUTH":{"INVITED_YOU":"пригласил Вас присоединиться к проекту","NOT_REGISTERED_YET":"Еще не зарегистрированы?","REGISTER":"Зарегистрироваться","CREATE_ACCOUNT":"Создать бесплатный аккаунт"},"LOGIN_COMMON":{"HEADER":"У меня уже есть логин в Taiga","PLACEHOLDER_AUTH_NAME":"Имя пользователя или электронная почта (с учётом регистра)","LINK_FORGOT_PASSWORD":"Забыли?","TITLE_LINK_FORGOT_PASSWORD":"Вы забыли свой пароль?","ACTION_ENTER":"Ввод","ACTION_SIGN_IN":"Логин","PLACEHOLDER_AUTH_PASSWORD":"Пароль (чувствителен к регистру)","ALT_LOGIN":"Или войдите с помощью"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Oompa Loompas считает, что ваше имя пользователя, электронная почта или пароль неправильные.","SUCCESS":"Oompa Loompas счастлив, добро пожаловать в Тайгу!"},"REGISTER":{"PAGE_TITLE":"Зарегистрироваться","PAGE_DESCRIPTION":"Создайте аккаунт в Taiga — платформе для управления проектами стартапов, agile разработчиков и дизайнеров, которые хотят простой и красивый инструмент превращающий работу в удовольствие."},"REGISTER_FORM":{"TITLE":"Зарегистрируйте аккаунт Taiga (бесплатно)","PLACEHOLDER_NAME":"Выберите имя учётной записи (с учётом регистра)","PLACEHOLDER_FULL_NAME":"Введите Ваше полное имя","PLACEHOLDER_EMAIL":"Ваша электронная почта","PLACEHOLDER_PASSWORD":"Задайте новый пароль (с учетом регистра)","ACTION_SIGN_UP":"Зарегистрироваться","TITLE_LINK_LOGIN":"Войти","LINK_LOGIN":"Уже зарегистрированы? Авторизуйтесь"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Забыли пароль?","PAGE_DESCRIPTION":"Введите Ваш логин или email для получения нового пароля и Вы сможете получить доступ к Taiga снова."},"FORGOT_PASSWORD_FORM":{"TITLE":"Упс, забыли пароль?","SUBTITLE":"Введите ваше имя пользователя или электронную почту, чтобы получить новый пароль","PLACEHOLDER_FIELD":"Имя пользователя или электронная почта","ACTION_RESET_PASSWORD":"Сбросить пароль","LINK_CANCEL":"Не, давай назад, думаю я вспомню.","SUCCESS_TITLE":"Проверьте Вашу почту!","SUCCESS_TEXT":"Мы отправили вам письмо с инструкциями по восстановлению пароля","ERROR":"Умпа-Лумпы говорят, что вы еще не зарегистрированы."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Изменить пароль - Taiga","SECTION_NAME":"Изменить пароль","FIELD_CURRENT_PASSWORD":"Текущий пароль","PLACEHOLDER_CURRENT_PASSWORD":"Ваш текущий пароль (или оставьте пустым, если пароль еще не задан)","FIELD_NEW_PASSWORD":"Новый пароль","PLACEHOLDER_NEW_PASSWORD":"Введите новый пароль","FIELD_RETYPE_PASSWORD":"Введите повторно новый пароль","PLACEHOLDER_RETYPE_PASSWORD":"Введите повторно новый пароль","ERROR_PASSWORD_MATCH":"Пароли не совпадают"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Задать новый пароль","SUBTITLE":"И кстати, может быть Вам будет полезна еда богатая железом — она укрепляет память :P","PLACEHOLDER_NEW_PASSWORD":"Новый пароль","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Введите повторно новый пароль","ACTION_RESET_PASSWORD":"Сбросить пароль","ERROR":"У наших Умпа-Лумп не получается найти ваш запрос на восстановление пароля. Попробуйте получить его ещё раз.","SUCCESS":"Наши Умпа Лумпы сохранили ваш новый пароль.
    Попробуйте войти, используя его."},"INVITATION":{"PAGE_TITLE":"Приглашение принято - Taiga","PAGE_DESCRIPTION":"Принять приглашение и присоединиться к Taiga — платформе для управления проектами стартапов, agile разработчиков и дизайнеров, которые хотят простой и красивый инструмент превращающий работу в удовольствие."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"У наших Умпа-Лумп не получается найти ваше приглашение.","SUCCESS":"Вы успешно добавлены к проекту. Добро пожаловать в {{project_name}}"},"HOME":{"PAGE_TITLE":"Домашняя страница - Taiga","PAGE_DESCRIPTION":"Главная страница Taiga с вашими основными проектами, назначенными и отслеживаемыми ПИ, задачами и запросами","EMPTY_WORKING_ON":"Тут кажется пусто, не правда ли? Начинайте использовать Taiga и вы увидите здесь истории, задачи и запросы над которыми вы сейчас работаете.","EMPTY_WATCHING":"Следите за пользовательскими историями, задачами, запросами в ваших проектах и будьте уведомлены об изменениях :)","EMPTY_PROJECT_LIST":"У Вас пока нет проектов","WORKING_ON_SECTION":"Работает над","WATCHING_SECTION":"Отслеживаемые","DASHBOARD":"Рабочий стол с проектами"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Эпосы - {{projectName}}","PAGE_DESCRIPTION":"Список эпосов этого проекта {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADD EPIC","UNASSIGNED":"Не назначено"},"EMPTY":{"TITLE":"Похоже, здесь пока нет ни одного эпоса ","EXPLANATION":"Эпосы - это сущности высокого уровня, которые направляют пользовательские истории.
    Эпосы находятся на вершине иерархии и могут быть использованы, чтобы связывать вместе пользовательские истории.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"Голоса","NAME":"Имя","PROJECT":"Проект","SPRINT":"Спринт","ASSIGNED_TO":"Assigned","STATUS":"Статус","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Пожалуйста, добавьте описание, чтобы другие лучше поняли этот эпос","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"Заблокирован","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"Мои проекты","PAGE_DESCRIPTION":"Список Ваших проектов, отсортируйте их или создайте новый.","MY_PROJECTS":"Мои проекты"},"ATTACHMENT":{"SECTION_NAME":"Вложения","TITLE":"{{ fileName }} загружен {{ date }}","LIST_VIEW_MODE":"Режим \"список\"","GALLERY_VIEW_MODE":"Режим \"галерея\"","DESCRIPTION":"Введите краткое описание","DEPRECATED":"(устаревший)","DEPRECATED_FILE":"Устаревший?","ADD":"Добавить вложение. {{maxFileSizeMsg}}","DROP":"Перетяните вложение сюда","SHOW_DEPRECATED":"+ Показать устаревшие приложения","HIDE_DEPRECATED":"- спрятать устаревшие приложения","COUNT_DEPRECATED":"({{ counter }} устарело)","MAX_UPLOAD_SIZE":"Максимальный объем для загрузки {{maxFileSize}}","DATE":"DD MMM YYYY [в] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Мы не смогли загрузить '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Удалить вложение...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"приложение '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Мы не смогли провести удаление: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Пред.","NEXT":"Следующий"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Изменить значение","TITLE_ACTION_DELETE_VALUE":"Удалить значение","TITLE_ACTION_DELETE_TAG":"Удалить тэг"},"HELP":"Вам нужна помощь? Проверьте нашу страницу техподдержки!","PROJECT_DEFAULT_VALUES":{"TITLE":"Значения по умолчанию","SUBTITLE":"Задать начальные значения для всех полей"},"MEMBERSHIPS":{"TITLE":"Управление участниками","PAGE_TITLE":"Участие - {{projectName}}","ADD_BUTTON":"+ Новый участник","ADD_BUTTON_TITLE":"Добавить нового участника","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Экспорт","SUBTITLE":"Экспортируйте ваш проект, чтобы сохранить резервную копию или создать новый, основываясь на текущем.","EXPORT_BUTTON":"Экспорт","EXPORT_BUTTON_TITLE":"Экспортировать проект","LOADING_TITLE":"Мы создали ваш файл резервной копии","DUMP_READY":"Файл резервной копии готов!","LOADING_MESSAGE":"Пожалуйста, не закрывайте эту страницу","ASYNC_MESSAGE":"Мы отправим вам письмо когда будет готово.","SYNC_MESSAGE":"Если загрузка не начинается самостоятельно, нажмите здесь.","ERROR":"У Oompa Loompas возникли проблемы при создании резервной копии. Повторите еще раз.","ERROR_BUSY":"Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут."},"MODULES":{"TITLE":"Модули","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"Список задач","BACKLOG_DESCRIPTION":"Управляйте пользовательскими историями, чтобы поддерживать организованное видение важных и приоритетных задач.","NUMBER_SPRINTS":"Ожидаемое количество спринтов","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Организуйте эффективную работу с проектом с помощью этой панели","ISSUES":"Запросы","ISSUES_DESCRIPTION":"Следите за ошибками, вопросами и улучшениями вашего проекта. Ничего не пропустите!","WIKI":"Вики","WIKI_DESCRIPTION":"Добавляйте, изменяйте или удаляйте контент совместно с остальными. Это самое правильное место для документации вашего проекта.","MEETUP":"Созвониться","MEETUP_DESCRIPTION":"Выберите Вашу систему видеоконференций","SELECT_VIDEOCONFERENCE":"Выберите систему видеоконференций","SALT_CHAT_ROOM":"Добавить префикс к имени чата","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Другое","URL_CHAT_ROOM":"Ссылка на Ваш чат"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - профиль Проекта - {{projectName}}","PROJECT_DETAILS":"Детали проекта","PROJECT_NAME":"Название проекта","TAGS":"Тэги","DESCRIPTION":"Описание","RECRUITING":"Этот проект ищет людей?","RECRUITING_MESSAGE":"Кого вы ищете?","RECRUITING_PLACEHOLDER":"Уточните, какие профили вы ищете","FEEDBACK":"Получать обратную связь от пользователей Тайги?","PUBLIC_PROJECT":"Публичный проект","PRIVATE_PROJECT":"Закрытый проект","PRIVATE_OR_PUBLIC":"В чём разница между публичными и приватными проектами?","DELETE":"Удалить проект","CHANGE_LOGO":"Изменить лого","ACTION_USE_DEFAULT_LOGO":"Использовать картинку по умолчанию","MAX_PRIVATE_PROJECTS":"Вы достигли максимального числа приватных проектов которое разрешено вашим планом.","MAX_PRIVATE_PROJECTS_MEMBERS":"Максимальное количество участников в приватном проекте достигло лимита","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Владелец проекта","REQUEST_OWNERSHIP":"Запрос владельца","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Хотите стать новым владельцем проекта?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Запрос","REQUEST_OWNERSHIP_SUCCESS":"Мы уведомим владельца проекта","CHANGE_OWNER":"Сменить владельца","CHANGE_OWNER_SUCCESS_TITLE":"ОК, ваш запрос был отправлен!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Отчеты","SUBTITLE":"Экспортируйте данные вашего проекта в формате CSV и создавайте ваши собственные отчёты","DESCRIPTION":"Скачайте файл CSV или скопируйте сгенерированную ссылку, затем откройте в любом текстовом редакторе или редакторе таблиц, чтобы создать ваши собственные отчёты о проекте. Вы сможете легко визуализировать и анализировать ваши данные.","HELP":"Как использовать это в моей таблице?","REGENERATE_TITLE":"Изменить URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"отчёты о эпосах","SECTION_TITLE_US":"Отчёты по пользовательским историям","SECTION_TITLE_TASK":"отчёты о задачах","SECTION_TITLE_ISSUE":"отчёты о запросах","DOWNLOAD":"Скачать CSV","URL_FIELD_PLACEHOLDER":"Упс, забыли пароль?","TITLE_REGENERATE_URL":"Сделать CSV ссылку ещё раз","ACTION_GENERATE_URL":"Сгенерировать ссылку","ACTION_REGENERATE":"Создать заново","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Удалить"},"CUSTOM_FIELDS":{"TITLE":"Пользовательские поля","SUBTITLE":"Укажите специальные поля для ваших пользовательских историй, задач и запросов","EPIC_DESCRIPTION":"Специальные поля эпосов","EPIC_ADD":"Добавить специальное поле для эпосов","US_DESCRIPTION":"Специальные поля для пользовательских историй","US_ADD":"Добавить специальное поле для пользовательских историй","TASK_DESCRIPTION":"Специальные поля задач","TASK_ADD":"Добавить новые типы задач","ISSUE_DESCRIPTION":"Специальные поля запросов","ISSUE_ADD":"Добавить специальное поле для запросов","FIELD_TYPE_TEXT":"Текст","FIELD_TYPE_RICHTEXT":"Форматируемый текст","FIELD_TYPE_MULTI":"Многостроковое","FIELD_TYPE_DATE":"Дата","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Значения атрибутов проекта - {{projectName}}","REPLACEMENT":"Все объекты с этим значением будут заменены на","ERROR_DELETE_ALL":"Невозможно удалить все значения"},"PROJECT_VALUES_POINTS":{"TITLE":"Очки","SUBTITLE":"Введите приблизительное количество очков для пользовательских историй","US_TITLE":"Очки ПИ","ACTION_ADD":"Добавить очки"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Приоритеты","SUBTITLE":"Укажите, какие приоритеты будут иметь ваши запросы","ISSUE_TITLE":"Приоритеты запросов","ACTION_ADD":"Добавить новый приоритет"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Степени важности","SUBTITLE":"Укажите степени важности, которые будут иметь ваши запросы","ISSUE_TITLE":"Степени важности запросов","ACTION_ADD":"Добавить новую степень важности"},"PROJECT_VALUES_STATUS":{"TITLE":"Статусы","SUBTITLE":"Укажите, какие статусы будут принимать ваши пользовательские истории, задачи и запросы","EPIC_TITLE":"Статусы Эпоса","US_TITLE":"Статусы пользовательских историй","TASK_TITLE":"Статус задач","ISSUE_TITLE":"Статусы запроса"},"PROJECT_VALUES_TYPES":{"TITLE":"Типы","SUBTITLE":"Укажите, какие типы смогут иметь ваши запросы","ISSUE_TITLE":"Типы запросов","ACTION_ADD":"Добавить новый"},"PROJECT_VALUES_TAGS":{"TITLE":"Тэги","SUBTITLE":"Просмотреть и изменить цвет ваших тэгов","EMPTY":"В данный момент тэги отсутствуют","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"Добавить тэг","NEW_TAG":"Новый тэг","MIXING_HELP_TEXT":"Выберите тэги которые вы хотели бы объединить","MIXING_MERGE":"Объединить Тэги","SELECTED":"Выбранные"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Добавить новый статус","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Роли - {{projectName}}","WARNING_NO_ROLE":"Осторожнее: ни с какими ролями на вашем проекте участники не смогут оценить очки для пользовательских историй.","HELP_ROLE_ENABLED":"Когда включено, участники, назначенные на эту роль, смогут оценивать очки для пользовательских историй","DISABLE_COMPUTABLE_ALERT_TITLE":"Вы уверены, что хотите отключить оценку очков для этой роли?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} участников с этой ролью","TITLE_DELETE_ROLE":"Удалить Роль","REPLACEMENT_ROLE":"Все пользователи этой роли будут перемещены в","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Вы не можете удалить все значения","EXTERNAL_USER":"Внешний пользователь","NOTE_EXTERNAL_USERS":"Примечание: под 'внешним пользователем' мы имеем ввиду анонимного пользователя, не имеющего платформы Taiga, включая поисковые движки. Пожалуйста, используйте этот функционал с осторожностью."},"THIRD_PARTIES":{"SECRET_KEY":"Секретный ключ","PAYLOAD_URL":"Ссылка на полезную нагрузку","VALID_IPS":"Правильные IP-адреса (через ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Запросы к Bitbucket не подписаны, так что лучший способ их проверки - через IP-адрес. Если это поле пустое, то проверка по IP-адресу не будет проводиться."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Запросы к Gitlab не подписаны, так что лучший способ их проверки - это проверка по IP-адресу. Если это поле пустое, IP-адрес не будет проверяться."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Веб-хуки - {{projectName}}","SECTION_NAME":"Веб-хуки","ADD_NEW":"Добавить новый веб-хук","TYPE_NAME":"Укажите имя сервиса","TYPE_PAYLOAD_URL":"Укажите нагрузочную ссылку сервиса","TYPE_SERVICE_SECRET":"Введите секретный код сервиса","SAVE":"Сохранить веб-хук","CANCEL":"Отменить веб-хук","SHOW_HISTORY":"(Показать историю)","TEST":"Протестировать веб-хук","EDIT":"Редактировать веб-хук","DELETE":"Удалить веб-хук","REQUEST":"Запрос","RESEND_REQUEST":"Переслать запрос","HEADERS":"Заголовки","PAYLOAD":"Нагрузка","RESPONSE":"Ответ","DATE":"DD MMM YYYY [в] hh:mm:ss","ACTION_HIDE_HISTORY":"(Спрятать историю)","ACTION_HIDE_HISTORY_TITLE":"Скрыть детали истории","ACTION_SHOW_HISTORY":"(Показать историю)","ACTION_SHOW_HISTORY_TITLE":"Показать детали истории","WEBHOOK_NAME":"Веб-хук '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Специальные Атрибуты - {{projectName}}","ADD":"Добавить поле","EDIT":"Редактировать специальное поле","DELETE":"Удалить поле","SAVE_TITLE":"Сохранить поле","CANCEL_TITLE":"Отменить создание","SET_FIELD_NAME":"Введите имя поля","SET_FIELD_DESCRIPTION":"Назначьте описание специальному полю","FIELD_TYPE_DEFAULT":"-- выберите --","ACTION_UPDATE":"Обновить поле","ACTION_CANCEL_EDITION":"Отменить правку"},"MEMBERSHIP":{"COLUMN_MEMBER":"Участник","COLUMN_ADMIN":"Админка","COLUMN_ROLE":"Роль","COLUMN_STATUS":"Статус","STATUS_ACTIVE":"Активный","STATUS_PENDING":"В ожидании","DELETE_MEMBER":"Удалить участника","RESEND":"Переотправить","SUCCESS_SEND_INVITATION":"Мы отправили ещё одно приглашение на адрес '{{email}}'.","SUCCESS_DELETE":"Мы удалили {{message}}.","ERROR_DELETE":"Мы не смогли удалить {{message}}","DEFAULT_DELETE_MESSAGE":"приглашение на {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Значение по умолчанию для селектора эпического статуса","LABEL_US_STATUS":"Выбор значения статуса по умолчанию для пользовательской истории","LABEL_POINTS":"Значения по умолчанию для выбора очков","LABEL_TASK_STATUS":"Значение по умолчанию для статуса задачи","LABEL_ISSUE_TYPE":"Значение по умолчанию для типа запроса","LABEL_ISSUE_STATUS":"Значение по умолчанию для статуса запроса","LABEL_PRIORITY":"Значение по умолчанию для выбора приоритета","LABEL_SEVERITY":"Значение важности по умолчанию"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Укажите название для нового статуса","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Введите имя нового элемента"},"US_STATUS":{"ACTION_ADD_STATUS":"Добавить новый статус","IS_ARCHIVED_COLUMN":"В архиве","IS_CLOSED_COLUMN":"Закрыта","WIP_LIMIT_COLUMN":"Лимит текущей работы","PLACEHOLDER_WRITE_NAME":"Укажите название для нового статуса"},"MENU":{"PROJECT":"Проект","ATTRIBUTES":"Атрибуты","MEMBERS":"Участники","PERMISSIONS":"Разрешения","INTEGRATIONS":"Интеграции"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Статус","POINTS":"Очки","PRIORITIES":"Приоритет","SEVERITIES":"Степени важности","TYPES":"Типы","CUSTOM_FIELDS":"Собственные поля","TAGS":"Тэги","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Роли","ACTION_NEW_ROLE":"+ Новая роль","TITLE_ACTION_NEW_ROLE":"Добавить новую роль"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Поздравляем! Вы новый владелец проекта.","REJECTED_PROJECT_OWNERNSHIP":"Хорошо. Мы свяжемся с текущим владельцем проекта","ACCEPT":"Принимаю","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Изменить профиль","CLOSED_US":"Закрытые ПИ","PROJECTS":"Проекты","PROJECTS_EMPTY":"{{username}} пока не имеет проектов","CONTACTS":"Контакты","CONTACTS_EMPTY":"{{username}} ещё не имеет контактов","CURRENT_USER_CONTACTS_EMPTY":"У вас пока нет контактов","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Люди, с которыми вы работаете в Taiga, будут отмечены как ваши контакты автоматически","TABS":{"ACTIVITY_TAB":"График работ","ACTIVITY_TAB_TITLE":"Показать все действия пользователя","PROJECTS_TAB":"Проекты","PROJECTS_TAB_TITLE":"Список всех проектов, в которых участвует пользователь","LIKES_TAB":"Лайки","LIKES_TAB_TITLE":"Список всех лайков, поставленных этим пользователем","VOTES_TAB":"Голоса","VOTES_TAB_TITLE":"Список всех голосов, сделанных этим пользователем","WATCHED_TAB":"Просмотренные","WATCHED_TAB_TITLE":"Список всего, за чем наблюдает пользователь","CONTACTS_TAB":"Контакты","CONTACTS_TAB_TITLE":"Список всех контактов, созданных этим пользователем"}},"PROFILE_SIDEBAR":{"TITLE":"Ваш профиль","DESCRIPTION":"Люди могут видеть всё что Вы делаете и всё над чем Вы работаете. Вы также можете добавить краткую биографию.","ADD_INFO":"Редактировать биографию"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Введите что-нибудь...","FILTER_TYPE_ALL":"Все","FILTER_TYPE_ALL_TITLE":"Показать все","FILTER_TYPE_PROJECTS":"Проекты","FILTER_TYPE_PROJECTS_TITLE":"Показать только проекты","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Показывать только эпосы","FILTER_TYPE_USER_STORIES":"Истории","FILTER_TYPE_USER_STORIES_TITLE":"Показывать только пользовательские истории","FILTER_TYPE_TASKS":"Задачи","FILTER_TYPE_TASKS_TITLE":"Показывать только задачи","FILTER_TYPE_ISSUES":"Запросы","FILTER_TYPE_ISSUES_TITLE":"Показывать только запросы","EMPTY_TITLE":"Похоже, здесь ничего нет."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Реорганизуйте свои проекты так чтобы часто используемые были бы наверху.
    Первые 10 проектов будут находится вверху списка проектов.","PRIVATE":"Закрытый проект","LOOKING_FOR_PEOPLE":"Этот проект ищет людей","FANS_COUNTER_TITLE":"{total, plural, one{один фанат} other{# фаната (-ов)}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{один наблюдатель} other{# наблюдателя (-ей)}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Заблокированный проект","THIS_PROJECT_IS_BLOCKED":"Этот проект временно заблокирован","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"In order to unblock your projects, contact the administrator."},"SECTION":{"SEARCH":"Поиск","TIMELINE":"График работ","EPICS":"Epics","BACKLOG":"Список задач","KANBAN":"Kanban","ISSUES":"Запросы","WIKI":"Wiki","TEAM":"Команда","MEETUP":"Созвониться","ADMIN":"Админка"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Создать проект","MANAGE_PROJECTS":"Управлять проектами","TITLE_CREATE_PROJECT":"Создать проект","HELP_TITLE":"Страница поддержки Taiga","HELP":"Помощь","HOMEPAGE":"Домашняя страница","FEEDBACK_TITLE":"Оставить отзыв","FEEDBACK":"Обратная связь","NOTIFICATIONS_TITLE":"Настроить уведомления","NOTIFICATIONS":"Уведомления","VIEW_PROFILE_TITLE":"Посмотреть профиль","VIEW_PROFILE":"Посмотреть профиль","EDIT_PROFILE_TITLE":"Править свой профиль","EDIT_PROFILE":"Править профиль","CHANGE_PASSWORD_TITLE":"Изменить пароль","CHANGE_PASSWORD":"Изменить пароль","DASHBOARD_TITLE":"Рабочий стол","DISCOVER_TITLE":"Найти проекты в тренде","DISCOVER":"Найти"},"LIKE_BUTTON":{"LIKE":"Мне нравится","LIKED":"Понравилось","UNLIKE":"Не нравится","BUTTON_TITLE":"Оценить проект","COUNTER_TITLE":"{total, plural, one{один фанат} other{# фаната (-ов)}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Отслеживать этот проект и настроить уведомления","WATCH":"Отслеживать","WATCHING":"Отслеживаемое","COUNTER_TITLE":"{total, plural, one{один наблюдатель} other{# наблюдателя (-ей)}}","OPTIONS":{"NOTIFY_ALL":"Получать все уведомления","NOTIFY_ALL_TITLE":"Получать все уведомления для этого проекта","NOTIFY_INVOLVED":"Только вовлечённые","NOTIFY_INVOLVED_TITLE":"Получать уведомления только если вовлечён в работу","UNWATCH":"Прекратить отслеживание","UNWATCH_TITLE":"Прекратить отслеживание этого проекта"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Связаться с командой проекта","CONTACT_BUTTON":"Связаться с проектом"},"CREATE":{"TITLE":"Создать проект","CHOOSE_TEMPLATE":"Какой из шаблонов лучше подходит Вашему проекту?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Регулярно выставляйте приоритеты вашим задачам и меняйте их статусы","TEMPLATE_SCRUM_LONGDESC":"Скрам это методология управления процессом разработки программного обеспечения построенная на коротких итерациях и постепенном прогрессе. Бэклог по продукту это те задачи которые нужно сделать, отсортированные в порядке приоритета. Бэклоги разбиваются на относительно короткие, управляемые куски - спринты. На основании возможностей, навыков и ресурсов команды в каждый спринт вносится несколько выбранных пользовательских историй из бэклога. На каждый спринт выделяется оговоренный период времени. С развитием проекта бэклог уменьшается.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Придерживайтесь одинаковых принципов работы над независимыми задачами","TEMPLATE_KANBAN_LONGDESC":"Метод \"Канбан\" используется, чтобы разделить разработку проекта (проекта любого типа) на стадии. В этой методологоии, карточки похожи на примечания, которые описывают каждую задачу (или пользовательскую историю) проекта, который должен быть выполнен. Карточки в системе, построенной на методе \"Канбан\", обычно переводятся из одного состояния завершенности в другое, таким образом позволяя отслеживать прогресс всего проекта.","DUPLICATE":"Клонировать проект","DUPLICATE_DESC":"Начните сначала и сохраняйте вашу конфигурацию","IMPORT":"Импортировать проект","IMPORT_DESC":"Импортируйте Ваши проекты в Taiga из других систем ","INVITE":"Пригласить в проект","SOLO_PROJECT":"Вы единственный пользователь в этом проекте","INVITE_LATER":"(Вы сможете пригласить больше пользователей позже)","BACK":"Вернуться","MAX_PRIVATE_PROJECTS":"К сожалению Вы исчерпали количество приватных проектов. Если Вы хотите увеличить текущий лимит, пожалуйста обратитесь к администратору.","MAX_PUBLIC_PROJECTS":"К сожалению, Вы исчерпали количество публичных проектов. Если Вы хотите увеличить лимит, пожалуйста свяжитесь с администратором.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Частный проект"},"COMMON":{"DETAILS":"Новые свойства проекта","PROJECT_TITLE":"Название проекта","PROJECT_DESCRIPTION":"Описание проекта"},"DUPLICATE":{"TITLE":"Клонировать проект","DESCRIPTION":"Начните сначала и сохраняйте вашу конфигурацию","SELECT_PLACEHOLDER":"Выберите имеющийся проект чтобы его клонировать"},"IMPORT":{"TITLE":"Импортировать проект","DESCRIPTION":"Импортируйте Ваши проекты в Taiga из других систем ","ASYNC_IN_PROGRESS_TITLE":"Oompa Loompas импортирует ваш проект","ASYNC_IN_PROGRESS_MESSAGE":"Этот процесс может занять несколько минут
    Мы отправим вам email, когда всё будет готово","UPLOAD_IN_PROGRESS_MESSAGE":"Загружено {{uploadedSize}} размера {{totalSize}}","ERROR":"У Oompa Loompas возникли проблемы при импорте резервной копии. Попробуйте еще раз.","ERROR_TOO_MANY_REQUEST":"Извините, Oompa Loompas очень загружен сейчас. Повторите через несколько минут.","ERROR_MESSAGE":"У Oompa Loompas возникли проблемы при импорте резервной копии: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) это слишком много для наших Умпа-Лумп, попробуйте еще раз с размером меньшим, чем ({{maxFileSize}})","SYNC_SUCCESS":"Импорт проекта выполнен успешно","IMPORT":"Импортировать","WHO_IS":"Их задачи будут переданы ...","WRITE_EMAIL":"Или, если Вы хотите, напишите почтовое сообщение этому пользователю Taiga","SEARCH_CONTACT":"Или, если Вы хотите, поищите в Ваших контактах","WRITE_EMAIL_LABEL":"Написать почтовое сообщение на адрес используемый этим пользователем Taiga","ACCEEDE":"Согласиться","PROJECT_MEMBERS":"Участники проекта","PROCESS_DESCRIPTION":"Сообщите нам кому из Taiga Вы хотите назначить на выполнения задач проекта {{platform}}","MATCH":"{{user_external}} это {{user_internal}}?","CHOOSE":"Выбрать пользователя","LINKS":"Связь с {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Заметьте, если у пользователя нету аккаунта Taiga, мы не сможем назначить ему задачи.","ASSIGN":"Назначить","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"поиск","ACTION_BACK":"Вернуться"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Ваш аккаунт позволяет использовать {{members}} пользователей.","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Импорт проекта","DESCRIPTION":"Этот процесс может занять некоторое время. Пожалуйста, сохраняйте это окно открытым."},"WARNING":{"TITLE":"Некоторые задачи останутся не распределенными","DESCRIPTION":"Неидентифицируемые пользователи все еще остались. Задачи назначенные таким пользователям останутся нераспределенными. Проверьте все контактные данные чтобы не потерять информацию о них.","CHECK":"Контакты"},"TAIGA":{"SELECTOR":"Импортируйте свой проект из Тайги"},"TRELLO":{"SELECTOR":"Импортируйте Ваши доски из Trello в Taiga","CHOOSE_PROJECT":"Выберите доску которую Вы хотите импортировать","NO_PROJECTS":"Кажется у вас нет досок в Trello"},"GITHUB":{"SELECTOR":"Импортируйте задачи из Вашего проекта на Github","CHOOSE_PROJECT":"Выберите проект который Вы хотите импортировать","NO_PROJECTS":"Кажется у Вас нет проектов на Github","HOW_DO_YOU_WANT_TO_IMPORT":"Как Вы хотите импортировать Ваши задачи в Taiga?","KANBAN_PROJECT":"Как пользовательские истории в Канбан проекте","KANBAN_PROJECT_DESCRIPTION":"Далее Вы сможете включить Скрам с бэклогом.","SCRUM_PROJECT":"Как пользовательские истории в Скрам проекте","SCRUM_PROJECT_DESCRIPTION":"Далее Вы сможете включить режим Канбан.","ISSUES_PROJECT":"Как задачи","ISSUES_PROJECT_DESCRIPTION":"Вы не сможете использовать Ваши задачи в Канбан и Скрам режимах. Вы сможете включить Канбан и Скрам для новых пользовательских историй."},"ASANA":{"SELECTOR":"Импортируйте Ваш проект из Asana и выберите как управлять им","CHOOSE_PROJECT":"Выберите проект который Вы хотите импортировать","NO_PROJECTS":"Кажется в Вас нет проектов в Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Задачи и подзадачи Вашего проекта будут созданы как пользовательские истории и задачи Taiga соответственно.","CREATE_AS_KANBAN_DESCRIPTION":"Задачи и подзадачи Вашего проекта будут созданы как пользовательские истории и задачи Taiga соответственно."},"JIRA":{"SELECTOR":"Импортируйте Ваш проект из Jira и выберите как управлять им","HOW_TO_CONFIGURE":"(помощь в конфигурации)","CHOOSE_PROJECT":"Выберите проект или доску которую Вы хотите импортировать","NO_PROJECTS":"Кажется у Вас нет проектов и досок в Jira","URL":"URL Вашей Jira","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Запросы","CREATE_AS_SCRUM_DESCRIPTION":"Задачи и подзадачи Вашего проекта будут созданы как пользовательские истории и задачи Taiga соответственно.","CREATE_AS_KANBAN_DESCRIPTION":"Задачи и подзадачи Вашего проекта будут созданы как пользовательские истории и задачи Taiga соответственно.","CREATE_AS_ISSUES_DESCRIPTION":"Что Вы хотите сделать с подзадачами из проекта Jira (в Тайге нет подзадач)","CREATE_NEW_ISSUES":"Конвертировать подзадачи в новые задачи Taiga","NOT_CREATE_NEW_ISSUES":"Не импортировать подзадачи"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Вы уверены, что хотите удалить ваш аккаунт?","CANCEL":"Вернуться к настройкам","ACCEPT":"Удалить аккаунт","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Удалить проект","QUESTION":"Вы уверены, что хотите удалить данный проект?","SUBTITLE":"Все данные проекта (пользовательские истории, задачи, запросы, спринты и вики страницы) будут утрачены! :-(","CONFIRM":"Да, я уверен"},"ASSIGNED_TO":{"SELECT":"Назначить","SEARCH":"Найти пользователей"},"ADD_MEMBER":{"TITLE":"Новый участник","PLACEHOLDER":"Выберите пользователей или отправьте приглашение по почте","ADD_EMAIL":"Добавить электронную почту","REMOVE":"Удалить","INVITE":"Пригласить","CHOOSE_ROLE":"Выберите роль","PLACEHOLDER_INVITATION_TEXT":"(Необязательно) Добавьте персональный текст в приглашение. Скажите что-нибудь приятное вашим новым участникам ;-)","HELP_TEXT":"Если пользователи уже зарегистрированы в Тайге они добавятся автоматически. В противном случае им будет отправлено приглашение."},"FEEDBACK":{"TITLE":"Расскажи что-нибудь...","COMMENT":"... ошибки, предложения, что-нибудь клёвое... или даже Ваш самый страшный кошмар с Taiga","ACTION_SEND":"Оставить отзыв"},"SEARCH":{"TITLE":"Поиск","PLACEHOLDER_SEARCH":"Что вы ищете?"},"ADD_EDIT_SPRINT":{"TITLE":"Новый спринт","PLACEHOLDER_SPRINT_NAME":"Название спринта","PLACEHOLDER_SPRINT_START":"Начало - примерно","PLACEHOLDER_SPRINT_END":"Окончание - примерно","ACTION_DELETE_SPRINT":"Вы уверены, что хотите удалить данный спринт?","TITLE_ACTION_DELETE_SPRINT":"удалить спринт","LAST_SPRINT_NAME":"последний этап sprint - {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Добавить запрос","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Удалить спринт"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Необязательно) Добавьте персональный текст в приглашение. Скажите что-нибудь приятное вашим новым участникам ;-)","PLACEHOLDER_TYPE_EMAIL":"Введите электронную почту","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Сменить владельца проекта"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Запрос смены владельца проекта"}},"CHANGE_OWNER":{"TITLE":"Кого вы хотите назначить новым владельцем проекта?","ADD_COMMENT":"Добавить комментарий","BUTTON":"Предложить участнику проекта стать его новым владельцем"},"CONTACT_PROJECT":{"TITLE":"Отправить почтовое сообщение","WARNING":"Сообщение будет отправлено администраторам проекта","PLACEHOLDER":"Напишите Ваше сообщение","SEND":"Отправить"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Какой проект Вам нужен?","CHOOSE_PROJECT_FROM":"Какой проект Вам нужен?","SUBJECT":"Тема","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Эпос {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{epicStatus }}. Описание: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"Мы не смогли открепить ссылку: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Создать связь с","NEW_USERSTORY":"Новая пользовательская история","EXISTING_USERSTORY":"Существующая пользовательская история","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Тема","SUBJECT_BULK_MODE":"Тема (массовое заполнение)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"В проекте нет ни одной пользовательской истории. Пожалуйста выберите другой проект.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Фильтровать ПИ","LIGHTBOX_TITLE_BLOKING_EPIC":"Блокирующая задача","ACTION_DELETE":"Удалить эпос"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Пользовательская История {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{userStoryStatus }}. Выполнено {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} из {{userStoryTotalTasks}} задач). Очки: {{userStoryPoints}}. Описание: {{userStoryDescription}}","SECTION_NAME":"Пользовательская история","LINK_TASKBOARD":"Панель задач","TITLE_LINK_TASKBOARD":"Перейти к панели задач","TOTAL_POINTS":"общее число очков","ADD":"+ Добавить Пользовательскую Историю","ADD_BULK":"Добавить Пользовательские Истории пакетно","PROMOTED":"Эта ПИ была сформирована из запроса:","TITLE_LINK_GO_TO_ISSUE":"Перейти к запросу","TITLE_DELETE_ACTION":"Удалить пользовательскую историю","LIGHTBOX_TITLE_BLOKING_US":"Блокирующая ПИ","NOT_ESTIMATED":"Не оценено","OWNER_US":"Эта пользовательская история принадлежит","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Больше инфо","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Редактировать ссылку","CLOSE":"Закрыть","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Комментарий удалён {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Сначала старые","RECENT_FIRST":"Сначала новые","COMMENT":"Комментарий","EDITED_COMMENT":"Изменено:","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"Добавить комментарий","SHOW_DELETED":"Показать удаленный комментарий","HIDE_DELETED":"Скрыть удаленный комментарий","DELETE":"Удалить комментарий","RESTORE":"Показать удаленный комментарий","HISTORY":{"TITLE":"Действия"}},"ACTIVITY":{"TITLE":"Действия","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"тэги добавлены:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"новое вложение:","DELETED_ATTACHMENT":"удалённое вложение:","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Требование от Команды","CLIENT_REQUIREMENT":"Требование клиента","BLOCKED":"Заблокирован","VALUES":{"NOT_SET":"not set","UNASSIGNED":"нет ответственного"},"FIELDS":{"SUBJECT":"название","DESCRIPTION":"описание","PRIORITY":"приоритет","SEVERITY":"важность","STATUS":"cтатус","TYPE":"тип","ASSIGNED_TO":"назначено на","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"спринт","COLOR":"цвет"}},"BACKLOG":{"PAGE_TITLE":"Список задач - {{projectName}}","PAGE_DESCRIPTION":"Список задач с пользовательскими историями и спринтами проекта {{projectName}}: {{projectDescription}}","SECTION_NAME":"Список задач","CUSTOMIZE_GRAPH":"Настроить граф вашего списка задач","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Админка","CUSTOMIZE_GRAPH_TITLE":"Настройте очки и спринты в админке","MOVE_US_TO_CURRENT_SPRINT":"Перейти к текущему спринту","MOVE_US_TO_LATEST_SPRINT":"Перейти к последнему спринту","EMPTY":"Список задач пуст!","CREATE_NEW_US":"Создать новую ПИ","CREATE_NEW_US_EMPTY_HELP":"Вы можете создать пользовательскую историю","EXCESS_OF_POINTS":"Избыток очков","PENDING_POINTS":"Текущие очки","CLOSED_POINTS":"закрыта","COMPACT_SPRINT":"Компактный Спринт","GO_TO_TASKBOARD":"Перейти на панель задач: {{::name}}","EDIT_SPRINT":"Изменить Спринт","TOTAL_POINTS":"всего","STATUS_NAME":"Статус","SORTABLE_FILTER_ERROR":"Вы не можете перетаскивать на список задач, когда фильтры открыты","DOOMLINE":"Рамки Проекта [Крайний срок]","CHART":{"XAXIS_LABEL":"Спринты","YAXIS_LABEL":"Очки","OPTIMAL":"Оптимальное число очков для работы по спринту \"{{sprintName}}\" должно быть {{value}}","REAL":"Реальные очки для работы по спринту \"{{sprintName}}\" - {{value}}","INCREMENT_TEAM":"Для спринта \"{{sprintName}}\" очки увеличены на {{value}} засчёт требований от команды","INCREMENT_CLIENT":"Для спринта \"{{sprintName}}\" очки увеличены на {{value}} засчёт требований от клиентов"},"TAGS":{"TOGGLE":"Переключить видимость тэга","SHOW":"Показать теги","HIDE":"Скрыть тэги"},"FORECASTING":{"TITLE":"Прогноз скорости выполнения","BACKLOG":"Отобразить бэклог","NEW_SPRINT":"Предлагаемые к выполнению в следующем спринте пользовательские истории на основании Вашей скорости выполнения. Нажмите для создания нового спринта.","CURRENT_SPRINT":"Предлагаемые к выполнению в следующем спринте пользовательские истории на основании Вашей скорости выполнения. Нажмите для добавления в текущий спринт."},"TABLE":{"COLUMN_US":"Пользовательские Истории","TITLE_COLUMN_POINTS":"Выберите вид для Роли"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"всего
    очков","COMPLETED_POINTS":"получено
    очков","OPEN_TASKS":"открытые
    задачи","CLOSED_TASKS":"завершённые
    задачи","IOCAINE_DOSES":"дозы
    иокаина","SHOW_STATISTICS_TITLE":"Показать статистику","TOGGLE_BAKLOG_GRAPH":"Показать/Скрыть график решения задач","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"проектные
    очки","DEFINED_POINTS":"определено
    очков","CLOSED_POINTS":"закрытые
    очки","POINTS_PER_SPRINT":"очков на /
    спринт"},"FILTERS":{"TOGGLE":"Переключить видимость фильтров","HIDE":"Спрятать фильтры","SHOW":"Показать фильтры"},"SPRINTS":{"TITLE":"СПРИНТЫ","DATE":"DD MMM YYYY","LINK_TASKBOARD":"Панель задач Спринта","TITLE_LINK_TASKBOARD":"Перейти к Панели Задач \"{{name}}\"","EMPTY":"Спринтов пока что нет","WARNING_EMPTY_SPRINT_ANONYMOUS":"У этого спринта нет пользовательских историй","WARNING_EMPTY_SPRINT":"Накидайте сюда ПИ из списка задач чтобы начать новый спринт","TITLE_ACTION_NEW_SPRINT":"Добавить новый спринт","TEXT_ACTION_NEW_SPRINT":"Вы можете создать новый спринт в проекте","ACTION_SHOW_CLOSED_SPRINTS":"Показать закрытые спринты","ACTION_HIDE_CLOSED_SPRINTS":"Спрятать закрытые спринты"}},"ERROR":{"TEXT1":"Что-то случилось, Oompa Loompas работает над этим.","NOT_FOUND":"Не найдено","NOT_FOUND_TEXT":"Ошибка 404. Страница не найдена.","PERMISSION_DENIED":"Доступ закрыт","PERMISSION_DENIED_TEXT":"У вас нет прав для доступа к этой странице.","VERSION_ERROR":"Кто-то в Тайге изменил это раньше вас и Умпа-Лумпы не могут применить ваши изменения. Пожалуйста обновите страницу (Внимание! При обновлении страницы текущие правки будут утеряны) и внесите правки еще раз."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - панель задач спринта - {{projectName}}","PAGE_DESCRIPTION":"Спринт {{sprintName}} (с {{startDate}} по {{endDate}}) проекта {{projectName}}. Выполнено {{completedPercentage}}% ({{completedPoints}} из {{totalPoints}} очков). Открытые задачи: {{openTasks}} из {{totalTasks}}.","SECTION_NAME":"Панель задач","TITLE_ACTION_ADD":"Добавить новую Задачу","TITLE_ACTION_ADD_BULK":"Добавить новые задачи пакетно","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Назначить задачу","PLACEHOLDER_CARD_TITLE":"Это может быть задачей","PLACEHOLDER_CARD_TEXT":"Разделяйте ПИ в задачи чтобы отслеживать их по отдельности","TABLE":{"COLUMN":"Пользовательская история","TITLE_ACTION_FOLD":"Свернуть колонку","TITLE_ACTION_UNFOLD":"Развернуть колонку","TITLE_ACTION_FOLD_ROW":"Свернуть ряд","TITLE_ACTION_UNFOLD_ROW":"Развернуть ряд","FIELD_POINTS":"очков","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Дней","YAXIS_LABEL":"Очки","OPTIMAL":"Оптимальное количество очков для работы на день {{formattedDate}}: {{roundedValue}}","REAL":"Реальные очки для работы на день: {{formattedDate}} - {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Задача {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{taskStatus }}. Описание: {{taskDescription}}","SECTION_NAME":"Задача","LINK_TASKBOARD":"Панель задач","TITLE_LINK_TASKBOARD":"Перейти к панели задач","PLACEHOLDER_SUBJECT":"Укажите новое название задачи","TITLE_SELECT_STATUS":"Статус","OWNER_US":"Эта задача принадлежит:","TITLE_LINK_GO_OWNER":"Перейти к пользовательской истории","TITLE_DELETE_ACTION":"Удалить задачу","LIGHTBOX_TITLE_BLOKING_TASK":"Блокирующее задание","FIELDS":{"IS_IOCAINE":"- иокаин"},"TITLE_ACTION_IOCAINE":"Чувствуете, что задание берет верх над вами? Дайте другим знать об этом, нажав на \"Иокаин\", когда редактируете задание. Возможно стать неуязвимым к этому (выдуманному) смертельном яду, потребляя небольшие количества время от времени, так же как возможно стать лучше в том, что вы делаете, временами беря на себя дополнительные препятствия!"},"NOTIFICATION":{"OK":"Всё хорошо","WARNING":"Упс, что-то случилось...","WARNING_TEXT":"Oompa Loompas сказал, что ваши изменения не сохранились!","SAVED":"Oompa Loompas сохранил изменения!","CLOSE":"закрыть уведомление","MAIL":"Уведомления почтой","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Вы уверены, что хотите удалить?"},"CANCEL_ACCOUNT":{"TITLE":"Аннулировать ваш аккаунт","SUBTITLE":"Жаль, что вы покидаете taiga, надеемся, вам здесь понравилось :)","PLACEHOLDER_INPUT_TOKEN":"идентификатор аннулирования аккаунта","ACTION_LEAVING":"Да, я ухожу!","SUCCESS":"Oompa Loompas удалил ваш аккаунт"},"CHANGE_EMAIL_FORM":{"TITLE":"Сменить вашу электронную почту","SUBTITLE":"Ещё один клик и Ваш email будет обновлён!","PLACEHOLDER_INPUT_TOKEN":"изменить идентификатор email","ACTION_CHANGE_EMAIL":"Сменить электронную почту","SUCCESS":"Наш Oompa Loompas обновил вашу электронную почту"},"ISSUES":{"PAGE_TITLE":"Запросы - {{projectName}}","PAGE_DESCRIPTION":"Панель запросов проекта {{projectName}}: {{projectDescription}}","SECTION_NAME":"Запрос","ACTION_NEW_ISSUE":"+НОВЫЙ ЗАПРОС","ACTION_PROMOTE_TO_US":"Повысить до пользовательской истории","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Этот запрос был переделан в ПИ:","EXTERNAL_REFERENCE":"Этот запрос был создан из","GO_TO_EXTERNAL_REFERENCE":"Перейти в начало","ACTION_DELETE":"Удалить запрос","LIGHTBOX_TITLE_BLOKING_ISSUE":"Блокирующий запрос","LINK_TASKBOARD":"Панель задач","TITLE_LINK_TASKBOARD":"Перейти к панели задач","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Приоритет","SEVERITY":"Важность","TYPE":"Тип"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Превратить этот запрос в новую пользовательскую историю","MESSAGE":"Вы уверены, что хотите создать новую ПИ из этого запроса?"},"TABLE":{"COLUMNS":{"TYPE":"Тип","SEVERITY":"Важность","PRIORITY":"Приоритет","SUBJECT":"Тема","VOTES":"Голоса","STATUS":"Статус","MODIFIED":"Modified","ASSIGNED_TO":"Назначено"},"TITLE_ACTION_CHANGE_STATUS":"Изменить статус","TITLE_ACTION_ASSIGNED_TO":"Назначено","BLOCKED":"Заблокирован","EMPTY":{"TITLE":"Нет присланных запросов :-)","SUBTITLE":"Вы нашли запрос?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Запрос {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{issueStatus }}. Тип: {{issueType}}, Приоритет: {{issuePriority}}. Важность: {{issueSeverity}}. Описание: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Панель kanban, с пользовательскими историями для проекта {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Свернуть колонку","TITLE_ACTION_UNFOLD":"Развернуть колонку","TITLE_ACTION_ADD_US":"Добавить Пользовательскую Историю","TITLE_ACTION_ADD_BULK":"Добавить пакетно","ACTION_SHOW_ARCHIVED":"Показать архивные","ACTION_HIDE_ARCHIVED":"Спрятать архив","HIDDEN_USER_STORIES":"Пользовательские истории в этом статусе скрыты по умолчанию","PLACEHOLDER_CARD_TITLE":"Это - ваши Пользовательские Истории.","PLACEHOLDER_CARD_TEXT":"У ПИ также могут быть подзадачи чтобы можно было разделять требования"},"SEARCH":{"PAGE_TITLE":"Поиск - {{projectName}}","PAGE_DESCRIPTION":"Ищите что угодно, пользовательские истории, задачи, запросы и вики-страницы, в проекте {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"Пользовательские Истории","FILTER_ISSUES":"Запросы","FILTER_TASKS":"Задачи","FILTER_WIKI":"Вики страницы","PLACEHOLDER_SEARCH":"Искать в...","TITLE_ACTION_SEARCH":"поиск","EMPTY_TITLE":"Кажется, по вашему запросу ничего не найдено.","EMPTY_DESCRIPTION":"Попробуйте одну из вкладок выше и запустите поиск ещё раз"},"TEAM":{"PAGE_TITLE":"Команда - {{projectName}}","PAGE_DESCRIPTION":"Панель команды показывает всех участников проекта {{projectName}}: {{projectDescription}}","SECTION_NAME":"Команда","PLACEHOLDER_INPUT_SEARCH":"Искать по имени","COLUMN_MR_WOLF":"Мр. Вульф","EXPLANATION_COLUMN_MR_WOLF":"Закрытые запросы","COLUMN_IOCAINE":"Употребляющий иокаин","EXPLANATION_COLUMN_IOCAINE":"потреблено доз иокаина","COLUMN_CERVANTES":"Сервантес","EXPLANATION_COLUMN_CERVANTES":"Отредактировано вики-страниц","COLUMN_BUG_HUNTER":"Охотник за ошибками","EXPLANATION_COLUMN_BUG_HUNTER":"Присланные запросы","COLUMN_NIGHT_SHIFT":"Ночная смена","EXPLANATION_COLUMN_NIGHT_SHIFT":"Задача закрыта","COLUMN_TOTAL_POWER":"Могущество","EXPLANATION_COLUMN_TOTAL_POWER":"Всего очков","SECTION_TITLE_TEAM":"Команда","SECTION_FILTER_ALL":"Все","CONFIRM_LEAVE_PROJECT":"Вы уверены, что хотите покинуть данный проект?","ACTION_LEAVE_PROJECT":"Покинуть проект"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[макс. размер: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Настройки пользователя","USER_PROFILE":"Профиль пользователя","CHANGE_PASSWORD":"Изменить пароль","EMAIL_NOTIFICATIONS":"Уведомления почтой","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Уведомления почтой","COLUMN_PROJECT":"Проект","COLUMN_RECEIVE_ALL":"Получать все","COLUMN_ONLY_INVOLVED":"Только вовлечённые","COLUMN_NO_NOTIFICATIONS":"Уведомлений нет","OPTION_ALL":"Все","OPTION_INVOLVED":"Вовлечен","OPTION_NONE":"Нет"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Проект","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Проект"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Использовать картинку по умолчанию","ACTION_DELETE_ACCOUNT":"Удалить аккаунт","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Проверьте входящие письма!
    Мы послали письмо на ваш аккаунт
    с инструкциями по установке вашего нового адреса.","CHANGE_PHOTO":"Изменить фото","FIELD":{"USERNAME":"Имя пользователя","EMAIL":"Электронная почта","FULL_NAME":"Полное имя","PLACEHOLDER_FULL_NAME":"Полное имя (например, Игорь Николаев)","BIO":"Биография (не более 210 символов)","PLACEHOLDER_BIO":"Расскажите нам что-нибудь о себе","LANGUAGE":"Язык","LANGUAGE_DEFAULT":"-- использовать язык по умолчанию --","THEME":"Тема","THEME_DEFAULT":"-- использовать тему по умолчанию --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Вики - {{projectName}}","PAGE_DESCRIPTION":"Последнее редактирование: {{lastModifiedDate}} ({{totalEditions}} - всего правок) Контент: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Удалить эту вики страницу","DELETE_LIGHTBOX_TITLE":"Удалить вики страницу","DELETE_LINK_TITLE":"Удалить ссылку wiki","NAVIGATION":{"HOME":"Главная страница","SECTION_NAME":"ЗАКЛАДКИ","ACTION_ADD_LINK":"Добавить закладку","ALL_PAGES":"Все wiki-страницы"},"SUMMARY":{"TIMES_EDITED":"раз
    отредактировано","LAST_EDIT":"последняя
    правка","LAST_MODIFICATION":"последнее изменение"},"SECTION_PAGES_LIST":"Все страницы","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"Создан","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"Подсказка","LINK":"Чтобы узать как пользовать этим — посетите нашу страницу поддержки.","LINK_TITLE":"Посетить нашу страницу поддержки","HINT1_TITLE":"Вы знали что можно импортировать и экспортировать проекты?","HINT1_TEXT":"Это позволяет вам собирать данные из одной Taiga и копировать в другую.","HINT2_TITLE":"Вы знали что можно создавать собственные поля?","HINT2_TEXT":"Теперь команды могут создавать специальные поля, чтобы гибко вводить данные, специфические для их рабочего процесса.","HINT3_TITLE":"Перестройте список своих проектов так, чтобы выделить самые важные для себя.","HINT3_TEXT":"Первые 10 проектов доступны из панели прямого доступа сверху.","HINT4_TITLE":"Забыли, над чем вы работали?","HINT4_TEXT":"Не переживайте, на вашем рабочем столе вы найдёте ваши активные задачи, запросы и пользовательские истории в том порядке, в котором вы над ними работали."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} приложил новый файл к {{obj_name}}","US_CREATED":"{{username}} создал новую ПИ {{obj_name}} в {{project_name}}","ISSUE_CREATED":"{{username}} создал новый запрос {{obj_name}} в {{project_name}}","TASK_CREATED":"{{username}} создал новую задачу {{obj_name}} в {{project_name}}","TASK_CREATED_WITH_US":"{{username}} создал новую задачу {{obj_name}} в {{project_name}}, которая принадлежит ПИ {{us_name}}","WIKI_CREATED":"{{username}} создал новую вики-страницу {{obj_name}} в {{project_name}}","MILESTONE_CREATED":"{{username}} создал новый спринт {{obj_name}} в {{project_name}}","EPIC_CREATED":"{{username}} создал новый эпик {{obj_name}} в проекте {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} прикрепил пользовательскую историю {{related_us_name}} к эпику {{epic_name}} в проекте {{project_name}}","NEW_PROJECT":"{{username}} создал проект {{project_name}}","MILESTONE_UPDATED":"{{username}} обновил спринт {{obj_name}}","US_UPDATED":"{{username}} обновил атрибут \"{{field_name}}\" ПИ {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} установил атрибут \"{{field_name}}\" для ПИ {{obj_name}} на {{new_value}}","US_UPDATED_POINTS":"{{username}} установил очки для '{{role_name}}' для ПИ {{obj_name}} на {{new_value}}","ISSUE_UPDATED":"{{username}} обновил атрибут \"{{field_name}}\" запроса {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} установил атрибут \"{{field_name}}\" запроса {{obj_name}} на {{new_value}}","TASK_UPDATED":"{{username}} установил атрибут \"{{field_name}}\" задачи {{obj_name}} на {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} установил атрибут \"{{field_name}}\" задачи {{obj_name}} на {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} изменил атрибут \"{{field_name}}\" задачи {{obj_name}}, которая принадлежит ПИ {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} установил атрибут \"{{field_name}}\" задачи {{obj_name}}, которая принадлежит ПИ {{us_name}}, на {{new_value}}","WIKI_UPDATED":"{{username}} обновил вики-страницу {{obj_name}}","EPIC_UPDATED":"{{username}} обновил атрибут \"{{field_name}}\" ПИ {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} обновил атрибут поля \"{{field_name}}\" эпика {{obj_name}} на {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} обновил поле \"{{field_name}}\" эпика {{obj_name}} на ","NEW_COMMENT_US":"{{username}} прокомментировал ПИ {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} прокомментировал запрос {{obj_name}}","NEW_COMMENT_TASK":"{{username}} прокомментировал задачу {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} написал комментарий в эпике {{obj_name}}","NEW_MEMBER":"У {{project_name}} появился новый участник","US_ADDED_MILESTONE":"{{username}} добавил ПИ {{obj_name}} для {{sprint_name}}","US_MOVED":"{{username}} переместил ПИ {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} добавил ПИ {{obj_name}} к списку задач","BLOCKED":"{{username}} заблокировал {{obj_name}}","UNBLOCKED":"{{username}} разблокировал {{obj_name}}","NEW_USER":"{{username}} присоединился к Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Запрос","TASK":"Задача"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"Внешнее приложение требующие аутентификации","PAGE_DESCRIPTION":"Внешнее приложение требующие аутентификации","AUTHORIZATION_REQUEST":"Разрешить {{application}} использовать ваш Taiga аккаунт?","LOGIN_WITH_ANOTHER_USER":"Войти под другим пользователем","AUTHORIZE_APP":"Авторизировать приложение","CANCEL":"Отмена"},"JOYRIDE":{"NAV":{"NEXT":"Следующий","BACK":"Вернуться","SKIP":"Пропустить","DONE":"Завершена"},"DASHBOARD":{"STEP1":{"TITLE":"Ваш проект","TEXT":"Добро пожаловать! Здесь вы найдете проекты, над которыми работаете."},"STEP2":{"TITLE":"Работает над","TEXT":"Здесь вы найдете Пользовательские Истории, Задачи и Запросы, над которыми работаете."},"STEP3":{"TITLE":"Отслеживаемое","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"Вы уже работаете с Taiga ;)"},"STEP4":{"TITLE":"Давайте начнём","TEXT1":"Вы можете начать, создав свой первый проект в Taiga.","TEXT2":"Удачи!"}},"BACKLOG":{"STEP1":{"TITLE":"Содержание проекта","TEXT1":"Здесь вы будете видеть состояние проекта.","TEXT2":"Вы можете изменять все настройки проекта в админке."},"STEP2":{"TITLE":"Список задач проекта","TEXT":"Список задач - набор требований (Пользовательский Историй) к вашему проекту. Здесь вы можете планировать спринты."},"STEP3":{"TITLE":"Спринты","TEXT":"Спринты - это небольшие промежутки времени (обычно 2 недели), на протяжении которых конкретные задачи должны быть закончены и доставлены."},"STEP4":{"TITLE":"Пользовательские Истории","TEXT":"Это высокоуровневые требования. Вы можете добавить их в список задач и перетащить в спринт, в который они должны быть реализованы."}},"KANBAN":{"STEP1":{"TITLE":"Customize your workflow","TEXT":"Set up the columns you need to map your workflow statuses through the admin."},"STEP2":{"TITLE":"Пользовательские Истории и Задачи","TEXT":"Пользовательские истории - это высокоуровневые требования. Вы можете перетаскивать их между колонками."},"STEP3":{"TITLE":"Adding User Stories","TEXT1":"Вы можете добавить одну пользовательскую историю (кнопка \"добавить ПИ\") или сразу несколько (кнопка \"пакетное добавление\")","TEXT2":"Удачи!"}}},"DISCOVER":{"PAGE_TITLE":"Найти проекты - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Найти проекты","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Наиболее активные","MOST_ACTIVE_EMPTY":"There are no ACTIVE projects yet","MOST_LIKED":"Больше всего лайков","MOST_LIKED_EMPTY":"There are no LIKED projects yet","VIEW_MORE":"Показать больше","FEATURED":"Популярные проекты","EMPTY":"Нету проектов, удовлетворяющих заданным критериям поиска.
    Попробуйте снова!","FILTERS":{"ALL":"Все","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Ищем людей","WEEK":"За неделю","MONTH":"За месяц","YEAR":"За год","ALL_TIME":"За всё время","CLEAR":"Очистить фильтры"},"SEARCH":{"PAGE_TITLE":"Поиск - Найти проекты - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Введите что-нибудь...","ACTION_TITLE":"Поиск","RESULTS":"Результаты поиска"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-sv.json b/dist/v-1549282893552/locales/taiga/locale-sv.json new file mode 100644 index 0000000..df463ca --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-sv.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Ja","NO":"Nej","OR":"eller","I_GET_IT":"OK, I get it","LOADING":"Laddar...","DATE":"YYYY-MM-DD","DATETIME":"YYYY-MM-DD HH:mm","SAVE":"Spara","CANCEL":"Avbryt","ACCEPT":"Acceptera","DELETE":"Radera","UNLINK":"Avlänka","CREATE":"Skapa","ADD":"Lägg till","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Texten är kopierad","EDIT":"Redigera","DRAG":"Dra","TAG_LINE":"Ditt agila, gratis och öppen-källkod projekthanteringsverktyg","TAG_LINE_2":"Älska ditt projekt","BLOCK":"Blockera","BLOCK_TITLE":"Blockera denna post, till exempel om den har ett beroende som inte kan tillgodoses","BLOCKED":"Blockerad","UNBLOCK":"Avblockera","UNBLOCK_TITLE":"Avblockera denna post","BLOCKED_NOTE":"Varför är denna blockerad?","BLOCKED_REASON":"Vänligen förklara orsaken","CREATED_BY":"Skapad av {{fullDisplayName}}","CLOSE":"stäng","GO_HOME":"Ta mig hem","PLUGINS":"Insticksprogram","ONE_ITEM_LINE":"En post per rad ...","NEW_BULK":"Lägg till flera nya","SUBTASKS":"Subtasks","PREVIOUS":"Föregående","NEXT":"Nästa","LOGOUT":"Logga ut","EXTERNAL_USER":"en extern användare","GENERIC_ERROR":"En av våra Oompa Loompier säger {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"Projektägare","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Är du säker på att du vill stänga redigeringsläget?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Kom ihåg att alla ändringar kommer förloras om du stänger utan att spara","RELATED_USERSTORIES":"Relaterade användarhistorier","CARD":{"ASSIGN_TO":"Tilldela Till","EDIT":"Ändra kort","DELETE":"Delete card","DELETE_ISSUE":"Ta bort ärende","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Det här värdet är felaktigt. ","TYPE_EMAIL":"Värdet måste vara en giltig e-postadress","TYPE_URL":"Det här värdet borde vara en giltig länk","TYPE_URLSTRICT":"Det här värdet borde vara en giltig länk","TYPE_NUMBER":"Det här värdet måste vara ett giltigt nummer","TYPE_DIGITS":"Det här värdet måste vara ett siffer.","TYPE_DATEISO":"Värdet ska vara ett giltigt datum (YYYY-MM-DD).","TYPE_ALPHANUM":"Det här värdet ska vara alfanumeriskt","TYPE_PHONE":"Det här värdet ska vara ett giltigt telefonnummer","NOTNULL":"Det här värdet kan inte vara null.","NOT_BLANK":"Det här värdet ska inte vara blankt. ","REQUIRED":"Det här värdet är obligatoriskt.","REGEXP":"Det här värdet är felaktigt. ","MIN":"Det här värdet skulle vara större eller lika med %s.","MAX":"Det här värdet ska vara lägre eller lika med %s. ","RANGE":"Värdet ska vara mellan %s och %s. ","MIN_LENGTH":"Det här värdet är för kort. Det ska ha %s tecken eller flera. ","MAX_LENGTH":"Det här värdet är för långt. Du kan ha %s tecken eller mindre. ","RANGE_LENGTH":"Värdets längd är ej giltig. Det ska vara mellan %s och %s tecken långt. ","MIN_CHECK":"Du måste välja minst %s val.","MAX_CHECK":"Du måste välja %s val eller mindre.","RANGE_CHECK":"Du måste välja mellan %s och %s val.","EQUAL_TO":"Det här värdet skulle vara det samma. ","LINEWIDTH":"En eller fler rader är kanske för långa. Försök hålla det under % bokstäver.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"YYYY-MM-DD","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Tidigare månad","NEXT_MONTH":"Nästa månad","MONTHS":{"JAN":"Januar","FEB":"Februar","MAR":"Mars","APR":"April","MAY":"Maj","JUN":"Juni","JUL":"Juli","AUG":"Augusti","SEP":"September","OCT":"Oktober","NOV":"November","DEC":"December"},"WEEK_DAYS":{"SUN":"Söndag","MON":"Måndag","TUE":"Tisdag","WED":"Onsdag","THU":"Torsdag","FRI":"Fredag","SAT":"Lördag"},"WEEK_DAYS_SHORT":{"SUN":"Sol","MON":"Mån","TUE":"Tis","WED":"Ons","THU":"Tor","FRI":"Fre","SAT":"Lör"}},"SEE_USER_PROFILE":"Se {{username }}s profil","USER_STORY":"Användarhistorie","TASK":"Uppgift","ISSUE":"ärende","EPIC":"Epost","TAGS":{"PLACEHOLDER":"Ange tagg","DELETE":"Ta bort etikett","ADD":"Lägg till etikett"},"DESCRIPTION":{"EMPTY":"Så tråkigt med ingen information ... här kan du beskriva det ...","NO_DESCRIPTION":"Ingen beskrivning än"},"FIELDS":{"SUBJECT":"Titel","NAME":"Namn","URL":"Länk","DESCRIPTION":"Beskrivning","VALUE":"Värde","SLUG":"Slugg","COLOR":"Färg","IS_CLOSED":"Är den stängd?","STATUS":"Status","TYPE":"Typ","SEVERITY":"Allvarsgrad","PRIORITY":"Prioritet","ASSIGNED_TO":"Tilldelad till","ASSIGNED_USERS":"Assigned users","POINTS":"Poäng","IS_BLOCKED":"är blockerad","REF":"Ref. ","VOTES":"Röster","SPRINT":"Sprint","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Alla"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Ej tilldelad","ASSIGN":"Tilldela","DELETE_ASSIGNMENT":"Ta bort tilldelning","REMOVE_ASSIGNED":"Ta bort tilldelning","TOO_MANY":"... för många användare, fortsätter filtreringen","CONFIRM_UNASSIGNED":"Vill du lämna det utan att tilldela det? ","TITLE_ACTION_EDIT_ASSIGNMENT":"Redigera tilldelning","SELF":"Tilldela mig"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Stängd","OPEN":"Öppen"},"WATCHERS":{"WATCHERS":"Observatörer","ADD":"Lägg till bevakare","TITLE_ADD":"Lägg till en projektmedlem till bevakningslistan","DELETE":"Ta bort observatör","TITLE_LIGHTBOX_DELETE_WARTCHER":"Ta bort observatör ..."},"WATCH_BUTTON":{"WATCH":"Visa","WATCHING":"Bevakar","UNWATCH":"Frånkoppla visning","WATCHERS":"Observatörer","BUTTON_TITLE":"Visa/Visa inte den här posten","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Rösta för / Rösta emot den här posten","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Anpassade fält","SAVE":"Spara anpassad fält","EDIT":"Ändra anpassad fält","DELETE":"Ta bort anpassad egenskap","CONFIRM_DELETE":"Remeber that all values in this custom field will be deleted.\n Are you sure you want to continue?"},"FILTERS":{"INPUT_PLACEHOLDER":"Titel eller referens","TITLE_ACTION_FILTER_BUTTON":"sök","TITLE":"Filter","TITLE_ACTION_SEARCH":"Sök","ACTION_SAVE_CUSTOM_FILTER":"spara som anpassad filter","PLACEHOLDER_FILTER_NAME":"Skriv filternamnet och tryck på ","APPLIED_FILTERS_NUM":"applicerade filter","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Typ","STATUS":"Status","SEVERITY":"Allvarsgrad","PRIORITIES":"Prioritet","TAGS":"Etiketter","ASSIGNED_TO":"Tilldelad till","ASSIGNED_USERS":"Assigned users","ROLE":"Roll","CREATED_BY":"Skapad av","CUSTOM_FILTERS":"Anpassad filter","EPIC":"Epost"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Välj Språk","SELECT_LANGUAGE_REMOVE_FORMATING":"Ta bort formatering","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Hjälp för markeringssyntax"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epos","VIEW_EPICS":"Visa Epics","ADD_EPICS":"Lägg till Epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Radera eipcs"},"SPRINTS":{"NAME":"Sprintar","VIEW_SPRINTS":"Visa sprintar","ADD_SPRINTS":"Lägg till sprintar","MODIFY_SPRINTS":"Ändra sprintar","DELETE_SPRINTS":"Ta bort sprintar"},"USER_STORIES":{"NAME":"Användarhistorie","VIEW_USER_STORIES":"Visa användarhistorier","ADD_USER_STORIES":"Lägg till användarhistorier","MODIFY_USER_STORIES":"Modifiera användarhistorier","COMMENT_USER_STORIES":"Kommentera användningsfall","DELETE_USER_STORIES":"Ta bort användarhistorier"},"TASKS":{"NAME":"Uppgift","VIEW_TASKS":"Visa uppgifter","ADD_TASKS":"Lägg till uppgifter","MODIFY_TASKS":"Modifiera uppgifter","COMMENT_TASKS":"Kommentera uppgifter","DELETE_TASKS":"Ta bort uppgift"},"ISSUES":{"NAME":"Ärenden","VIEW_ISSUES":"Visa ärenden","ADD_ISSUES":"Lägg till ärenden","MODIFY_ISSUES":"Modifiera ärenden","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"Ta bort uppgifter"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Visa wiki-sidor","ADD_WIKI_PAGES":"Lägg till wiki-sida","MODIFY_WIKI_PAGES":"Modifiera wiki-sidor","DELETE_WIKI_PAGES":"Ta bort wiki-sidor","VIEW_WIKI_LINKS":"Visa wiki-länkar","ADD_WIKI_LINKS":"Lägg till wiki-länkar","DELETE_WIKI_LINKS":"Ta bort wiki-länkar"}}},"LOGIN":{"PAGE_TITLE":"Logga in - Taiga","PAGE_DESCRIPTION":"Loggar in till Taiga, en projekthanteringsplatform för startups och agila utvecklare & designers som vill ha ett simpelt, vackert verktyg som gör arbetet till en fröjd."},"AUTH":{"INVITED_YOU":"har bjudit in dig till projektet","NOT_REGISTERED_YET":"Inte registrerad ännu?","REGISTER":"Registrera","CREATE_ACCOUNT":"skapa ett gratis konto här"},"LOGIN_COMMON":{"HEADER":"Jag har redan ett Taiga-konto","PLACEHOLDER_AUTH_NAME":"Användarnamn eller e-postadress (skiftlägeskänsligt)","LINK_FORGOT_PASSWORD":"Glömt det?","TITLE_LINK_FORGOT_PASSWORD":"Har du glömt ditt lösenord?","ACTION_ENTER":"Gå in","ACTION_SIGN_IN":"Logga in","PLACEHOLDER_AUTH_PASSWORD":"Lösenord (skiftlägeskänslig)","ALT_LOGIN":"Eller logga in med"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Enligt våra Ooma Loompas är ditt användarnamn, din e-postadress eller ditt lösenord inkorrekt.","SUCCESS":"Våra Ooma Loompas är glada, välkommen till Taiga!"},"REGISTER":{"PAGE_TITLE":"Registrera - Taiga","PAGE_DESCRIPTION":"Skapa ditt konto i Taiga, en projekthanteringsplatform för startups och agila utvecklare & designers som vill ha ett simpelt, vackert verktyg som gör arbetet till en fröjd."},"REGISTER_FORM":{"TITLE":"Registrera ett nytt Taiga-konto (gratis)","PLACEHOLDER_NAME":"Välj ett användarnamn (skiflägeskänsligt)","PLACEHOLDER_FULL_NAME":"Ange ditt fullständiga namn","PLACEHOLDER_EMAIL":"Din e-postadress","PLACEHOLDER_PASSWORD":"Välj ett lösenord (skiftlägeskänsligt)","ACTION_SIGN_UP":"Registrera","TITLE_LINK_LOGIN":"Logga in","LINK_LOGIN":"Redan registrerad? Logg in"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Glömt lösenord - Taiga","PAGE_DESCRIPTION":"Skriv ditt användarnamn eller e-postadress för att få ett nytt lösenord så att du kan få åtkomst till Taiga igen. "},"FORGOT_PASSWORD_FORM":{"TITLE":"Oj, har du glömt ditt lösenord?","SUBTITLE":"Skriv ditt användarnamn eller e-postadress för att få ett nytt. ","PLACEHOLDER_FIELD":"Användarnamn eller e-postadress","ACTION_RESET_PASSWORD":"Återställ lösenord","LINK_CANCEL":"Nej, ta mig tillbaka. Jag tror att jag minns det.","SUCCESS_TITLE":"Kolla din inkorg!","SUCCESS_TEXT":"Vi skickade dig ett e-postmeddelande med anvisningar hur du byter lösenord","ERROR":"Enligt våra Oompaloompier är du inte registrerad ännu."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Byt ditt lösenord - Taiga","SECTION_NAME":"Byt lösenord","FIELD_CURRENT_PASSWORD":"Befintligt lösenord","PLACEHOLDER_CURRENT_PASSWORD":"Ditt nuvarande lösenord (eller tomt om du inte har något lösenord än)","FIELD_NEW_PASSWORD":"Nytt lösenord","PLACEHOLDER_NEW_PASSWORD":"Skriv in lösenordet på nytt","FIELD_RETYPE_PASSWORD":"Skriv in lösenordet på nytt","PLACEHOLDER_RETYPE_PASSWORD":"Skriv in ditt nya lösenord på nytt","ERROR_PASSWORD_MATCH":"Lösenordet överensstämmer inte. "},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Skapa ett nytt Taiga-lösenord","SUBTITLE":"Vet du va? Du kanske behöver äta mera järnrika livsmedel. Det är bra för hjärnan :P","PLACEHOLDER_NEW_PASSWORD":"Nytt lösenord","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Skriv in lösenordet på nytt","ACTION_RESET_PASSWORD":"Återställ lösenord","ERROR":"Våra Oompa Loompier kan inte hitta din begäran om att återställa lösenordet. Fråga om det på nytt.","SUCCESS":"Våra Oompa Loompier har sparat ditt nya lösenord
    Försök att logga in med det. "},"INVITATION":{"PAGE_TITLE":"Invitation accepterad - Taiga","PAGE_DESCRIPTION":"Acceptera invitationer för att bli medlem i ett Taiga-projekt. Taiga är ett projekthanteringsverktyg för uppstartsföretag och agila utvecklare och designers som behöver ett enkelt, vackert verktyg som är mycket trevligt att använda. "},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Våra Oompa Loompier kan inte hitta din invitation.","SUCCESS":"Du har nu blitt medlem i det här projektet. Välkommen till {{project_name}}"},"HOME":{"PAGE_TITLE":"Hem - Taiga","PAGE_DESCRIPTION":"Taiga hemsida med dina viktigaste projekt, alla dina tilldelade användaruppgifter, uppdrag och frågor","EMPTY_WORKING_ON":"Känns det inte lite tomt? Börja arbeta med Taiga så kommer se användningsfall, uppgifter och frågor du arbetar på.","EMPTY_WATCHING":"Följ Användningsfall, Uppgifter och Frågor i dina projekt och få meddelanden om förändringar i dem :)","EMPTY_PROJECT_LIST":"Du har inte än några projekt","WORKING_ON_SECTION":"Arbetar med","WATCHING_SECTION":"Bevakar","DASHBOARD":"Instrumentpanel för projekt"},"EPICS":{"TITLE":"EPOS","SECTION_NAME":"Epos","EPIC":"EPOS","PAGE_TITLE":"Epos - {{projectName}}","PAGE_DESCRIPTION":"Listan med epost för projektet {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ LÄGG TILL EPOS","UNASSIGNED":"Ej tilldelad"},"EMPTY":{"TITLE":"Det ser ut som att det inte finns några epos än","EXPLANATION":"Epost är poster på en högre nivå som omfattar användningsfall.
    Epost är på toppen av hierarkin och kan användas för att grupper användningsfall.","HELP":"Lär dig med om epos"},"TABLE":{"VOTES":"Röster","NAME":"Namn","PROJECT":"Projekt","SPRINT":"Sprint","ASSIGNED_TO":"Tilldelad","STATUS":"Status","PROGRESS":"Framsteg","VIEW_OPTIONS":"Visningsalternativ"},"CREATE":{"TITLE":"Nytt epos","PLACEHOLDER_DESCRIPTION":"Lägg till beskrivande text för att hjälpa andra bättre förstå detta epos","TEAM_REQUIREMENT":"Teamets krav","CLIENT_REQUIREMENT":"Klientkrav","BLOCKED":"Blockerad","BLOCKED_NOTE_PLACEHOLDER":"Varför är detta epos blockerat? ","CREATE_EPIC":"Skapa epos"}},"PROJECTS":{"PAGE_TITLE":"Mina projekt - Taiga","PAGE_DESCRIPTION":"En lista med alla dina projekt som du kan organisera eller skapa ett nytt. ","MY_PROJECTS":"Mina projekt"},"ATTACHMENT":{"SECTION_NAME":"bilagor","TITLE":"{{ fileName }} laddat upp {{ date }}","LIST_VIEW_MODE":"Visningsläge listvy","GALLERY_VIEW_MODE":"Visningsläge galleri","DESCRIPTION":"Skriv en kort beskrivning","DEPRECATED":"(borttagen)","DEPRECATED_FILE":"Borttagen?","ADD":"Lägg till ny bilaga. {{maxFileSizeMsg}}","DROP":"Drag och släpp filer som ska bifogas här!","SHOW_DEPRECATED":"+ visa ogillade bilagor","HIDE_DEPRECATED":"- dölj ogillade bilagor","COUNT_DEPRECATED":"({{ counter }} deprecated)","MAX_UPLOAD_SIZE":"Maximal filstorlek att ladda upp är {{maxFileSize}}","DATE":"DD MM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Det var omöjligt för oss att ladda upp '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Ta bort bilagan ...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"bifogad '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Vi klarade inte att ta bort: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Förra","NEXT":"Nästa"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Redigera","TITLE_ACTION_DELETE_VALUE":"Ta bort","TITLE_ACTION_DELETE_TAG":"Ta bort etikett"},"HELP":"Behöver du hjälp? Besök hjälpsidorna!","PROJECT_DEFAULT_VALUES":{"TITLE":"Standardvärden","SUBTITLE":"Sätt standardvärden för alla ingångsval."},"MEMBERSHIPS":{"TITLE":"Hantera medlemmar","PAGE_TITLE":"Medlemskap - {{projectName}}","ADD_BUTTON":"+ Ny medlem","ADD_BUTTON_TITLE":"Lägg till ny medlem","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Detta projektet har nått sin gräns för ({{members}}) tillåtna medlemmar. Kontakta administratören om du vill utöka gränsen."},"PROJECT_EXPORT":{"TITLE":"Exportera","SUBTITLE":"Exportera ditt projekt som säkerhetskopia eller för att skapa ett nytt projekt baserad på det här projektet. ","EXPORT_BUTTON":"Exportera","EXPORT_BUTTON_TITLE":"Exportera dina projekt","LOADING_TITLE":"Vi skapar en hämtningsfil för dig. ","DUMP_READY":"Din hämtningsfil är klar!","LOADING_MESSAGE":"Vänligen stäng inte den här sidan. ","ASYNC_MESSAGE":"Vi vill skicka dig ett e-postmeddelande när vi är klara.","SYNC_MESSAGE":"Om hämtningen inte startar automatiskt, klick här.","ERROR":"Våra Oompa Loompier har vissa problemer med att skapa din hämtningsfil. Vänligen försök på nytt!","ERROR_BUSY":"Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. "},"MODULES":{"TITLE":"Moduler","EPICS":"Epos","EPICS_DESCRIPTION":"Visualisera och hantera den mest strategiska delen av ditt projekt","BACKLOG":"Inkorg","BACKLOG_DESCRIPTION":"Hantera dina användarhistorier för att organisera visningar av kommande och prioriterade jobb. ","NUMBER_SPRINTS":"Förväntat antal sprintar","NUMBER_SPRINTS_HELP":"0 för ett obestämt antal","NUMBER_US_POINTS":"Förväntat antal totala användningsfallspoäng","NUMBER_US_POINTS_HELP":"0 för ett obestämt nummer","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Organisera dina projekt med Lean med den här tavlan. ","ISSUES":"Frågor","ISSUES_DESCRIPTION":"Sök efter buggar, visa frågor eller gör förbättringar relaterad till dina projekt. Missa inte något!","WIKI":"Wiki","WIKI_DESCRIPTION":"Lägg till, modifiera eller ta bort innehåll i samarbetet med andra. Det här är rätt plats för ditt projektdokumentation. ","MEETUP":"Möt upp","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"Välj videokonferenssystem","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"Dyker upp i ","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Anpassa","URL_CHAT_ROOM":"Länken till ditt chattrum"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Projektprofil - {{projectName}}","PROJECT_DETAILS":"Projektdetaljer","PROJECT_NAME":"Projektnamn","TAGS":"Etiketter","DESCRIPTION":"Beskrivning","RECRUITING":"Letar detta projekt efter personer? ","RECRUITING_MESSAGE":"Vem letar du efter?","RECRUITING_PLACEHOLDER":"Definiera profilerna du letar efter","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"Publika projekt","PRIVATE_PROJECT":"Privata projekt","PRIVATE_OR_PUBLIC":"Vad är skillnaden mellan publika och privata projekt?","DELETE":"Ta bort projekt","CHANGE_LOGO":"Ändra logga","ACTION_USE_DEFAULT_LOGO":"Använd standardbilden","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"Projektet överstiger antalet tillåtna medlemmar för ett publikt projekt","PROJECT_OWNER":"Projektägare","REQUEST_OWNERSHIP":"Efterfråga ägareskap","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Begär att den nuvarande projektägaren {{namn}} överför ägarskap av det här projektet till dig.","REQUEST_OWNERSHIP_BUTTON":"Förfrågan","REQUEST_OWNERSHIP_SUCCESS":"Vi noterar projektägaren","CHANGE_OWNER":"Ända ägare","CHANGE_OWNER_SUCCESS_TITLE":"Ok, din förfrågan har skickats!","CHANGE_OWNER_SUCCESS_DESC":"Vi kommer kontakta dig via email om ändringen av ägarskapet för projektet accepteras eller nekas"},"REPORTS":{"TITLE":"Rapporter","SUBTITLE":"Exportera dina projektdata i CSV-format och skapa dina egna rapporter. ","DESCRIPTION":"Hämta en CSV-fil eller kopiera den genererade länken och öppna i din favorit ordbehandlare eller kalkylark för att skapa dina egna projektdatarapporter. Du kan lätt visualisera och analysera alla dina data. ","HELP":"Hur använda i mitt eget kalkylark?","REGENERATE_TITLE":"Ändra länken","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"eposrapporter","SECTION_TITLE_US":"rapporter för användarhistorier","SECTION_TITLE_TASK":"Rapport för uppgifter","SECTION_TITLE_ISSUE":"Rapporter för ärenden","DOWNLOAD":"Hämta CSV","URL_FIELD_PLACEHOLDER":"Vänligen skapa en ny CSV-länk","TITLE_REGENERATE_URL":"Skapa CSV länk","ACTION_GENERATE_URL":"Skapa länk","ACTION_REGENERATE":"Regenerera","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Ta bort"},"CUSTOM_FIELDS":{"TITLE":"Anpassade fält","SUBTITLE":"Specificera anpassade fält för användarhistorier, uppgifter och ärenden. ","EPIC_DESCRIPTION":"Epos anpassade fält","EPIC_ADD":"Lägg till ett anpassat fält i epos","US_DESCRIPTION":"Användarhistorier för anpassade fält","US_ADD":"Lägg till ett anpassad fält i användarhistorien","TASK_DESCRIPTION":"Anpassade fält för uppgifter","TASK_ADD":"Lägg till anpassade fält i uppgifter","ISSUE_DESCRIPTION":"Anpassade fält för ärenden","ISSUE_ADD":"Anpassade fält för ärenden","FIELD_TYPE_TEXT":"Text","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"Flerradig","FIELD_TYPE_DATE":"Datum","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Projektvärden - {{projectName}}","REPLACEMENT":"Alla poster med det här värdet vill ändras till ","ERROR_DELETE_ALL":"Du kan inte ta bort alla värden. "},"PROJECT_VALUES_POINTS":{"TITLE":"Poäng","SUBTITLE":"Specificera antal poäng som användarhistorien ska estimeras till","US_TITLE":"US-poäng","ACTION_ADD":"Lägg till nytt punkt"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Prioritet","SUBTITLE":"Specificera den prioriteten dina ärenden ska ha","ISSUE_TITLE":"Prioritet för ärenden ","ACTION_ADD":"Lägg till en ny prioritet"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Allvarsgrad","SUBTITLE":"Specificera den allvarsgrad dina ärenden vill ha","ISSUE_TITLE":"Allvarighetsgrad för ärenden","ACTION_ADD":"Lägg till ny allvarlighetsgrad"},"PROJECT_VALUES_STATUS":{"TITLE":"Status","SUBTITLE":"Specificera status för dina användarhistorier, uppgifter och ärenden ska ha i olika faser. ","EPIC_TITLE":"Status för Epics","US_TITLE":"User Story Statuses","TASK_TITLE":"Status för uppgifter","ISSUE_TITLE":"Status för ärenden"},"PROJECT_VALUES_TYPES":{"TITLE":"Typ","SUBTITLE":"Specificera typer av ärenden","ISSUE_TITLE":"Ärendetyper","ACTION_ADD":"Lägg till ny {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiketter","SUBTITLE":"Visa och ändra färgerna på dina taggar","EMPTY":"För närvarande finns inga taggar","EMPTY_SEARCH":"Det ser ut som om vi inte hittade något som matchade din sökning.","ACTION_ADD":"Lägg till etikett","NEW_TAG":"Ny tagg","MIXING_HELP_TEXT":"Välj de taggar du vill slå samman","MIXING_MERGE":"Slå samman taggar","SELECTED":"Valda"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Lägg till ny status","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roller - {{projectName}}","WARNING_NO_ROLE":"Var försiktig. Inga roller i ditt projekt kan estimera poängvärden för användarhistorier","HELP_ROLE_ENABLED":"När det är aktivt, vill medlemmarna tilldelad den här rollen kunna estimera punktvärlden för användarhistorier","DISABLE_COMPUTABLE_ALERT_TITLE":"ÄR du säker på att du vill avvaktivera den här rollens beräkningar?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"Om du avaktiverar behörigheter för beräkning för rollen {{roleName}} vill alla tidigare beräkningar gjord av den här rollen tas bort. ","COUNT_MEMBERS":"{{ role.members_count }} medlemmar med den här rollen","TITLE_DELETE_ROLE":"Ta bort rollen","REPLACEMENT_ROLE":"Alla användarna med den här rollen vill flyttas till","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Du kan inte ta bort alla värden","EXTERNAL_USER":"Extern användare","NOTE_EXTERNAL_USERS":"Notera: med Extern Användare menar vi alla anonyma användare som inte tillhör Taiga-plattformen, inklusive sökmotorer. Vänligen använd denna rollen med försiktighet."},"THIRD_PARTIES":{"SECRET_KEY":"Hemlig nyckel","PAYLOAD_URL":"Länk för paketinnhåll","VALID_IPS":"Giltig ursprunglig IP-adresser (separerat med ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket-förfrågningar är inte signerad så det bästa är att bekräfta ursprunglig IP. Om fältet är tomt blir det ingen IP-kontroll. "},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab-förfrågningar är inte signerade. Det bästa är att kontrollera ursprunglig IP-adress. Om fältet är tomt vill det inte bli någon IP-kontroll."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webbkrok - {{projectName}}","SECTION_NAME":"Webbkrokar","ADD_NEW":"Lägg till en ny Webbkrok","TYPE_NAME":"Skriv in tjänstens namn","TYPE_PAYLOAD_URL":"Skriv in länken till tjänsten","TYPE_SERVICE_SECRET":"Skriv in tjänstens hemliga nyckel","SAVE":"Spara webbkroken","CANCEL":"Avbryt webbkrok","SHOW_HISTORY":"(Vis historiken)","TEST":"Testa webbkroken","EDIT":"Ändra webkrok","DELETE":"Ta bort webbkrok","REQUEST":"Förfrågan","RESEND_REQUEST":"Skicka på nytt förfrågan","HEADERS":"Rubriker","PAYLOAD":"Tjänster","RESPONSE":"Respons","DATE":"DD MM YYY [at} hh:mm:ss","ACTION_HIDE_HISTORY":"(Dölj historiken)","ACTION_HIDE_HISTORY_TITLE":"Dölj detaljer för historiken","ACTION_SHOW_HISTORY":"(Vis historiken)","ACTION_SHOW_HISTORY_TITLE":"Visa detaljer för historiken","WEBHOOK_NAME":"Webbkrok '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Anpassade egenskaper - {{projectName}}","ADD":"Lägg till ett anpassad fält","EDIT":"Ändra anpassad fält","DELETE":"Ta bort anpassad fält","SAVE_TITLE":"Spara anpassad fält","CANCEL_TITLE":"Avbryt det du skapar","SET_FIELD_NAME":"Sätt ditt anpassade fältnamn","SET_FIELD_DESCRIPTION":"Sätt beskrivning för anpassad fält","FIELD_TYPE_DEFAULT":"-- välj en --","ACTION_UPDATE":"Uppdatera anpassad fält","ACTION_CANCEL_EDITION":"Avbryt ändringen"},"MEMBERSHIP":{"COLUMN_MEMBER":"Medlem","COLUMN_ADMIN":"Administrator","COLUMN_ROLE":"Roll","COLUMN_STATUS":"Status","STATUS_ACTIVE":"Aktiv","STATUS_PENDING":"Avvaktar","DELETE_MEMBER":"Ta bort medlem","RESEND":"Skicka på nytt","SUCCESS_SEND_INVITATION":"Vi har skickat på nytt invitationen till '{{email}}'.","SUCCESS_DELETE":"Vi har tagit bort {{message}}.","ERROR_DELETE":"Vi har inte lyckats att ta bort {{message}}.","DEFAULT_DELETE_MESSAGE":"den här invitationen till {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Standardvärde för poängväljaren","LABEL_TASK_STATUS":"Standardvärdet för val av uppgiftsstatus","LABEL_ISSUE_TYPE":"Standardvärde för ärendetyp-väljare","LABEL_ISSUE_STATUS":"Standardvärde för väljare för ärendestatus","LABEL_PRIORITY":"Standardvärde för val av prioritet","LABEL_SEVERITY":"Standardvärde för val av allvarlighet"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Skriv ett namn för den nya statusen","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Skriv ett namn för det nya elementet"},"US_STATUS":{"ACTION_ADD_STATUS":"Lägg till ny status","IS_ARCHIVED_COLUMN":"Arkiverad","IS_CLOSED_COLUMN":"Stängd","WIP_LIMIT_COLUMN":"WIP-begränsning","PLACEHOLDER_WRITE_NAME":"Skriv ett namn för den nya statusen"},"MENU":{"PROJECT":"Projekt","ATTRIBUTES":"Egenskaper","MEMBERS":"Medlemmar","PERMISSIONS":"Behörigheter","INTEGRATIONS":"Integrationer"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Status","POINTS":"Poäng","PRIORITIES":"Prioritet","SEVERITIES":"Allvarsgrad","TYPES":"Typ","CUSTOM_FIELDS":"Anpassade fält","TAGS":"Etiketter","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roller","ACTION_NEW_ROLE":"+ Ny roll","TITLE_ACTION_NEW_ROLE":"Lägg till ny roll"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Vill du bli den nya projektägaren?","PRIVATE":"Privat","ACCEPTED_PROJECT_OWNERNSHIP":"Gratulerar. Du är nu den nya projektägaren.","REJECTED_PROJECT_OWNERNSHIP":"OK. Vi kontaktar nuvarande projektägare.","ACCEPT":"Acceptera","REJECT":"Avvisa","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Vill du lämna en kommentar till projektägaren?","UNLIMITED_PROJECTS":"Obegränsad","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Ändra profil","CLOSED_US":"Stängd US","PROJECTS":"Projekt","PROJECTS_EMPTY":"{{username}} har inga projekt än","CONTACTS":"Kontakter","CONTACTS_EMPTY":"{{username}} har inte några kontakter än","CURRENT_USER_CONTACTS_EMPTY":"Du har inga kontakter än","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"De du arbetar med på Taiga vill automatiskt bli dina kontakter. ","TABS":{"ACTIVITY_TAB":"Tidslinje","ACTIVITY_TAB_TITLE":"Visa alla aktiviteter för den här användaren","PROJECTS_TAB":"Projekt","PROJECTS_TAB_TITLE":"Lista på alla projekt som användaren är medlem i","LIKES_TAB":"Gillar","LIKES_TAB_TITLE":"Lista allt vad användaren gillar","VOTES_TAB":"Röster","VOTES_TAB_TITLE":"Lista alla röster från den här användaren","WATCHED_TAB":"Visad","WATCHED_TAB_TITLE":"Lista alla element som användaren ser","CONTACTS_TAB":"Kontakter","CONTACTS_TAB_TITLE":"Lista alla kontakter för den här användaren"}},"PROFILE_SIDEBAR":{"TITLE":"Din profil","DESCRIPTION":"Folk kan se allt vad du gör och vad du arbetar med. Lägg till en trevlig bio för att förhöja din information. ","ADD_INFO":"Ändra bio"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Skriv något ...","FILTER_TYPE_ALL":"Alla","FILTER_TYPE_ALL_TITLE":"Visa alla","FILTER_TYPE_PROJECTS":"Projekt","FILTER_TYPE_PROJECTS_TITLE":"Visa bara projekt","FILTER_TYPE_EPICS":"Epos","FILTER_TYPE_EPICS_TITLE":"Visa endast epos","FILTER_TYPE_USER_STORIES":"Berättelser","FILTER_TYPE_USER_STORIES_TITLE":"Visa endast användarhistorier","FILTER_TYPE_TASKS":"Uppgift","FILTER_TYPE_TASKS_TITLE":"Visar endast uppgifter","FILTER_TYPE_ISSUES":"Ärenden","FILTER_TYPE_ISSUES_TITLE":"Visa bara ärenden ","EMPTY_TITLE":"Det verkar som om vi inte har något att visa just nu"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Organisera dina projekt och sätt in de mest använda här.
    De första 10 toppprojekten vill visas i toppnavigeringens projektlista. ","PRIVATE":"Privata projekt","LOOKING_FOR_PEOPLE":"Detta projekt söker efter fler personer","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, en{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Blockerat projekt","THIS_PROJECT_IS_BLOCKED":"Detta projekt är tillfälligt blockerat","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Kontakta administratören för att avblockera dina projekt."},"SECTION":{"SEARCH":"Sök","TIMELINE":"Tidslinje","EPICS":"Epos","BACKLOG":"Inkorg","KANBAN":"Kanban","ISSUES":"Ärenden","WIKI":"Wiki","TEAM":"Arbetsgrupp","MEETUP":"Möt upp","ADMIN":"Administrator"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Skapa projekt","MANAGE_PROJECTS":"Hantera projekt","TITLE_CREATE_PROJECT":"Skapa projekt","HELP_TITLE":"Taiga hjälpsida","HELP":"Hjälp","HOMEPAGE":"Webbplats","FEEDBACK_TITLE":"Skicka återkoppling","FEEDBACK":"Återkoppling","NOTIFICATIONS_TITLE":"Ändra inställningar för dina notifieringar","NOTIFICATIONS":"Notifieringar","VIEW_PROFILE_TITLE":"Visa profil","VIEW_PROFILE":"Visa profil","EDIT_PROFILE_TITLE":"Ändra din profil","EDIT_PROFILE":"Ändra profil","CHANGE_PASSWORD_TITLE":"Byt lösenord","CHANGE_PASSWORD":"Byt lösenord","DASHBOARD_TITLE":"Instrumentpanel","DISCOVER_TITLE":"Upptäck nya rörliga projekt","DISCOVER":"Upptäck"},"LIKE_BUTTON":{"LIKE":"Gillar","LIKED":"Likte","UNLIKE":"Ogillar","BUTTON_TITLE":"Gilla eller ogilla projektet","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Visa projektet och lägg till egenskaper för avisering","WATCH":"Visa","WATCHING":"Bevakar","COUNTER_TITLE":"{total, plural, en{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Motta alla notifieringar","NOTIFY_ALL_TITLE":"Motta alla notifieringar för det här projektet","NOTIFY_INVOLVED":"Endast involverad","NOTIFY_INVOLVED_TITLE":"Motta notifieringar bara när du är involverad","UNWATCH":"Frånkoppla visning","UNWATCH_TITLE":"Visa inte projektet"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Kontakta projektet"},"CREATE":{"TITLE":"Skapa projekt","CHOOSE_TEMPLATE":"Vilken mall passar ditt projekt bättre?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritera och lös dina uppgifter i korta tidscykler.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Kopiera projekt","DUPLICATE_DESC":"Påbörja städning och behåll din konfiguration","IMPORT":"Importerar projekt","IMPORT_DESC":"Importera dina projekt ifrån multipla platformer till Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"Du kommer vara ensam i detta projektet","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Baksida","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Publika projekt","PRIVATE_PROJECT":"Privat Projekt"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Projektnamn","PROJECT_DESCRIPTION":"Projektbeskrivning"},"DUPLICATE":{"TITLE":"Kopiera Projekt","DESCRIPTION":"Påbörja städning och behåll din konfiguration","SELECT_PLACEHOLDER":"Välj ett befintligt projekt för att kopiera"},"IMPORT":{"TITLE":"Importera Projekt","DESCRIPTION":"Importera dina projekt ifrån multipla platformer till Taiga","ASYNC_IN_PROGRESS_TITLE":"Våra Oompa Loompier importerar ditt projekt","ASYNC_IN_PROGRESS_MESSAGE":"Den här processen kan ta några minuter
    . Vi vill skicka dig en e-post när det blir klart. ","UPLOAD_IN_PROGRESS_MESSAGE":"Laddat upp {{uploadedSize}} av {{totalSize}}","ERROR":"Våra Oompa Loompier har problem med att importera din hämtningsfil. Vänligen försök igen. ","ERROR_TOO_MANY_REQUEST":"Beklagar. Våra oompa loompier är mycket upptagna. Vänligen försök på nytt om några minuter. ","ERROR_MESSAGE":"Våra Oompa Loompier har lite problem med att importera dina hämtningsdata: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) är för tungt för våra Oompa Loompier. Försök med något mindre än ({{maxFileSize}})","SYNC_SUCCESS":"Ditt projekt är korrekt importerad","IMPORT":"Importera","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Eller om du vill, sök i dina kontakter","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Projektmedlem","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Välj användare","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Tilldela","PROJECT_SELECTOR":{"NO_RESULTS":"Det ser ut som om vi inte hittade något som matchade din sökning.","ACTION_SEARCH":"sök","ACTION_BACK":"Baksida"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"Projektet du försöker importera är publikt och har fler än {{members}} medlemmar."}},"IN_PROGRESS":{"TITLE":"Importerar projekt","DESCRIPTION":"Den här processen kan ta en liten stund, vänligen försök med fönstret öppet. "},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"Det finns fortfarande oidentifierade användare. Korten som är tilldelade till de personerna, kommer fortsatt att vara otilldelade. Kontrollera alla kontakter för att inte förlora informationen.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Importera ditt Taiga projekt"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"Det verkar som om du har några tavlor på Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"Det verkar som om du har några projekt på GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Välj projekt som du vill importera","NO_PROJECTS":"Det verkar som om du inte har några projekt i Asana","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(konfigurationshjälp)","CHOOSE_PROJECT":"Välj ett projekt eller en tavla du vill importera","NO_PROJECTS":"Det verkar som om du inte har några projekt eller tavlor i Jira","URL":"Din Jira URL","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Frågor","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Är du säker på att du vill radera kontot?","CANCEL":"Tillbaka till inställningar","ACCEPT":"Ta bort konto","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Ta bort projekt","QUESTION":"Är du säker på att du vill ta bort projektet?","SUBTITLE":"Alla projektdata (användarhistorier, uppgifter, ärenden, sprintar och wikisidor) vill raderas! :-(","CONFIRM":"Ja! Jag är verkligen säker på det"},"ASSIGNED_TO":{"SELECT":"Välj att tilldela till","SEARCH":"Sök efter användare"},"ADD_MEMBER":{"TITLE":"Ny medlem","PLACEHOLDER":"Filtrera användare eller skriv ett mail för att bjuda in","ADD_EMAIL":"Lägg till e-post","REMOVE":"Ta bort","INVITE":"Bjud In","CHOOSE_ROLE":"Välj en roll","PLACEHOLDER_INVITATION_TEXT":"(Valfritt) Lägg till en personlig hälsning till invitationen. Berätta något trevligt till din nya projektmedlem ;-)","HELP_TEXT":"Om användaren redan är registrerad på Taiga vill hen bli lagt till automatiskt. I annat fall vill de motta en invitation. "},"FEEDBACK":{"TITLE":"Berätta för oss ...","COMMENT":"... en bug, några förslag, något spännande ... eller din värsta mardröm med Taiga","ACTION_SEND":"Skicka återkoppling"},"SEARCH":{"TITLE":"Sök","PLACEHOLDER_SEARCH":"Vad letar du efter?"},"ADD_EDIT_SPRINT":{"TITLE":"Ny sprint","PLACEHOLDER_SPRINT_NAME":"sprintens namn","PLACEHOLDER_SPRINT_START":"Beräknad start","PLACEHOLDER_SPRINT_END":"Beräknad slutdato","ACTION_DELETE_SPRINT":"Vill du verkligen ta bort den här sprinten?","TITLE_ACTION_DELETE_SPRINT":"ta bort sprint","LAST_SPRINT_NAME":"senaste sprint är {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Lägg till ärende","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Ta bort sprint"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Valfritt) Lägg till en personlig hälsning till invitationen. Berätta något trevligt till din nya projektmedlem ;-)","PLACEHOLDER_TYPE_EMAIL":"Skriv in en e-postadress","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Ändra projektägaren"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Lägg till kommentar","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Skicka ett e-postmeddelande till","WARNING":"Detta mailet kommer mottagas utav projektadministratörerna","PLACEHOLDER":"Skriv ditt meddelande","SEND":"Skicka"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Vilket är projektet?","CHOOSE_PROJECT_FROM":"Vilket är projektet?","SUBJECT":"Titel","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Det ser ut som om vi inte hittade något som matchade din sökning."}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epost {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Beskrivning: {{epicDescription}}","SECTION_NAME":"Epost","ERROR_UNLINK_RELATED_USERSTORY":"Vi har inte lyckats att ta bort: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Skapa en relation med","NEW_USERSTORY":"Ny användarhistorie","EXISTING_USERSTORY":"Befintligt användningsfal","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"Titel","SUBJECT_BULK_MODE":"Ämne (infoga bulk)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"Det ser ut som om vi inte hittade något som matchade din sökning.","FILTER_USERSTORIES":"Filtrera användningsfall","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Radera epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Användarhistorier {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{userStoryStatus }}. avslutad{{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} av {{userStoryTotalTasks}} tasks closed). Poäng: {{userStoryPoints}}. Beskrivning: {{userStoryDescription}}","SECTION_NAME":"Användarhistorie","LINK_TASKBOARD":"Uppgiftstavla","TITLE_LINK_TASKBOARD":"Gå till uppgiftstavlan","TOTAL_POINTS":"totalpoäng","ADD":"+ Lägg till ny användarhistorie","ADD_BULK":"Lägg till flera nya användarhistorier","PROMOTED":"Denna US har blivit flyttat från ärende: ","TITLE_LINK_GO_TO_ISSUE":"Gå till ärende","TITLE_DELETE_ACTION":"Ta bort användarhistorien","LIGHTBOX_TITLE_BLOKING_US":"Blockera oss","NOT_ESTIMATED":"Ej beräknad","OWNER_US":"Denna användarstoryn tillhör","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Mer information","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Ändra länk","CLOSE":"Stäng","SYNCHRONIZE_LINK":"synkronisera med Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Behöver du någon för den här uppgiften?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Kommentar raderad av {{user}}","COMMENTS_COUNT":"{{comments}} Kommentarer","OLDER_FIRST":"Äldre först","RECENT_FIRST":"Senast först","COMMENT":"Kommentarer","EDITED_COMMENT":"Redigerad:","SHOW_HISTORY":"Se historik","TYPE_NEW_COMMENT":"Skriv en ny kommentar här","SHOW_DELETED":"Visa raderade kommentarer","HIDE_DELETED":"Dölj raderade kommentarer","DELETE":"Ta bort kommentar","RESTORE":"Hämta tillbaka tidigare kommentarer","HISTORY":{"TITLE":"Aktiviteter"}},"ACTIVITY":{"TITLE":"Aktiviteter","ACTIVITIES_COUNT":"{{activities}} Aktiviteter","TAGS_ADDED":"taggar tillagda","TAGS_REMOVED":"borttagna taggar:","US_POINTS":"{{role}} poäng","NEW_ATTACHMENT":"ny bilaga:","DELETED_ATTACHMENT":"radera bilaga:","UPDATED_ATTACHMENT":"uppdatera bifogat ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"Uppdatera anpassat attribut","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Teamets behov","CLIENT_REQUIREMENT":"Kräver beställare","BLOCKED":"Blockerad","VALUES":{"NOT_SET":"not set","UNASSIGNED":"otilldelad"},"FIELDS":{"SUBJECT":"titel","DESCRIPTION":"beskrivning","PRIORITY":"prioritet","SEVERITY":"Allvarsgrad","STATUS":"status","TYPE":"typ","ASSIGNED_TO":"tilldelad till","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"sprint","COLOR":"färg"}},"BACKLOG":{"PAGE_TITLE":"Inkorg - {{projectName}}","PAGE_DESCRIPTION":"Panelen för inkorgen, användarhistorier och sprintar i projektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Inkorg","CUSTOMIZE_GRAPH":"Anpassa din graf för inkorgen","CUSTOMIZE_GRAPH_TEXT":"För att få en fin graf som hjälper dig att följa projektets gång kan du sätta upp poäng och sprintar genom ","CUSTOMIZE_GRAPH_ADMIN":"Administrator","CUSTOMIZE_GRAPH_TITLE":"Lägg till poäng och sprintar via Administratorn","MOVE_US_TO_CURRENT_SPRINT":"Flytta till nuvarande sprint","MOVE_US_TO_LATEST_SPRINT":"Move to latest Sprint","EMPTY":"Inkorgen är tom!","CREATE_NEW_US":"Skapa en ny US","CREATE_NEW_US_EMPTY_HELP":"Du kanske vill skapa en ny användarhistorie","EXCESS_OF_POINTS":"Poängöverskott","PENDING_POINTS":"Poäng som väntar","CLOSED_POINTS":"stängd","COMPACT_SPRINT":"Komprimera sprint","GO_TO_TASKBOARD":"Gå till uppgiftstavlan till {{::name}}","EDIT_SPRINT":"Ändra sprint","TOTAL_POINTS":"totalt","STATUS_NAME":"Status namn","SORTABLE_FILTER_ERROR":"Du kan inte lägga till i inkorgen när filter är öppen","DOOMLINE":"Projektbegränsningar [Doomline]","CHART":{"XAXIS_LABEL":"Sprintar","YAXIS_LABEL":"Poäng","OPTIMAL":"Optimala poäng som avvaktar sprinten \"{{sprintName}}\" skulle varit {{value}}","REAL":"Verkliga poäng som avvaktar för sprinten \"{{sprintName}}\" is {{value}}","INCREMENT_TEAM":"Ökande poäng för arbetsgruppens krav för sprint \"{{sprintName}}\" är {{value}}","INCREMENT_CLIENT":"Ökande poäng för beställarkrav till sprinten \"{{sprintName}}\" är {{value}}"},"TAGS":{"TOGGLE":"Växla visning av etiketter","SHOW":"Visa etiketter","HIDE":"Dölj etiketter"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Användarhistorie","TITLE_COLUMN_POINTS":"Välj visning per roll"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"totalt
    poäng","COMPLETED_POINTS":"avslutad
    poäng","OPEN_TASKS":"öppna
    uppgifter\n","CLOSED_TASKS":"stängd
    uppgifer","IOCAINE_DOSES":"iocaine
    doser","SHOW_STATISTICS_TITLE":"Visa statistik","TOGGLE_BAKLOG_GRAPH":"Visa/Dölj burn down-graf","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"projekt
    poäng","DEFINED_POINTS":"definiera
    poäng","CLOSED_POINTS":"stängda
    poäng","POINTS_PER_SPRINT":"poäng/
    sprint"},"FILTERS":{"TOGGLE":"Växla filtrens synlighet","HIDE":"Dölj filter","SHOW":"Visa filter"},"SPRINTS":{"TITLE":"SPRINTAR","DATE":"YYYY-MM-DD","LINK_TASKBOARD":"Sprint uppgiftspanel","TITLE_LINK_TASKBOARD":"Gå till uppgiftspanelen för \"{{name}}\"","EMPTY":"Det är inga sprintar än","WARNING_EMPTY_SPRINT_ANONYMOUS":"Den här sprinten har inga användarhistorier","WARNING_EMPTY_SPRINT":"Här kan du föra in användarhistorier från inkorgen för att starta en ny sprint","TITLE_ACTION_NEW_SPRINT":"Lägg till ny sprint","TEXT_ACTION_NEW_SPRINT":"Du kanske vill skapa en ny sprint i ditt projekt","ACTION_SHOW_CLOSED_SPRINTS":"Visa stängda sprintar","ACTION_HIDE_CLOSED_SPRINTS":"Dölj stängda sprintar"}},"ERROR":{"TEXT1":"Någonting har hänt och våra Oompa Loompier arbetar på att hitta en lösning. ","NOT_FOUND":"Hittade inte","NOT_FOUND_TEXT":"Fel 404. Sidan du letar efter existerar inte längre. Du kan gå tillbaka till TAIGA hemsidan och se om du hittar vad du letar efter. ","PERMISSION_DENIED":"Du har inte behöriget","PERMISSION_DENIED_TEXT":"Du har inte behörighet till den här sidan. ","VERSION_ERROR":"Någon inuti Taiga har ändrat den här tidigare och våra Oompa Loompier kan inte lägga till din ändring. Vänligen hämta sidan på nytt och lägg till ändringarna (de här ändringar du gör just nu förlorar du). "},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Sprint uppgiftstavla - {{projectName}}","PAGE_DESCRIPTION":"Sprint {{sprintName}} (from {{startDate}} till {{endDate}}) av {{projectName}}. Avslutad {{completedPercentage}} % ({{completedPoints}} av {{totalPoints}} points). {{openTasks}} öppna ärenden av {{totalTasks}}.","SECTION_NAME":"Uppgiftstavla","TITLE_ACTION_ADD":"Lägg till en ny uppgift","TITLE_ACTION_ADD_BULK":"Lägg till några flera nya uppgifter","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Tilldela uppgift","PLACEHOLDER_CARD_TITLE":"Det har kan vara en uppgift","PLACEHOLDER_CARD_TEXT":"Dela användarhistorier upp i uppgifter och spåra dem separat","TABLE":{"COLUMN":"Användarhistorie","TITLE_ACTION_FOLD":"Vika i hop kolumnen","TITLE_ACTION_UNFOLD":"Veckla ut kolumnen","TITLE_ACTION_FOLD_ROW":"Vika i hop raden","TITLE_ACTION_UNFOLD_ROW":"Veckla ut rad","FIELD_POINTS":"poäng","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Dagar","YAXIS_LABEL":"Poäng","OPTIMAL":"Optimala poäng som väntar för dag {{formattedDate}} ska vara {{roundedValue}}","REAL":"Verkliga poäng som väntar för dag {{formattedDate}} är {{roundedValue}}","DATE":"DD MM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Uppgift {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{taskStatus }}. Beskrivning: {{taskDescription}}","SECTION_NAME":"Uppgift","LINK_TASKBOARD":"Uppgiftstavla","TITLE_LINK_TASKBOARD":"Gå till uppgiftstavlan","PLACEHOLDER_SUBJECT":"Skriv in den nya uppgiftens titel","TITLE_SELECT_STATUS":"Status namn","OWNER_US":"Den här uppgiften tillhör","TITLE_LINK_GO_OWNER":"Gå till användarhistorie","TITLE_DELETE_ACTION":"Ta bort uppgift","LIGHTBOX_TITLE_BLOKING_TASK":"Blockerad uppgift","FIELDS":{"IS_IOCAINE":"Är iocaine"},"TITLE_ACTION_IOCAINE":"Känner du dig lite bortkommen med en uppgift? Försäkra dig om att andra känner till uppgiften när du klickar på Iocaine-knappen när du ändrar uppgiften. Det är möjligt att bli immun till det här (påhittade) dödliga giftet om du tar små mängder över tid - och du kan även så småningom om bli bättre på vad du gör när du då och då tar på dig större utmaningar!"},"NOTIFICATION":{"OK":"Allt är OK","WARNING":"Ojsan, något har hänt ...","WARNING_TEXT":"Våra Oompa Loompier är ledsna, dina ändringar gick inte att spara!","SAVED":"Vår oompa loompier har sparat alla dina ändringar!","CLOSE":"Stäng avisering","MAIL":"Notifieringar via e-post","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Är du säker på att du vill radera?"},"CANCEL_ACCOUNT":{"TITLE":"Ta bort ditt konto","SUBTITLE":"Vi beklagar att du lämnar Taiga, men hoppas att du hade det trevligt i alla fall :-)","PLACEHOLDER_INPUT_TOKEN":"avbryt kontoförekomsten","ACTION_LEAVING":"Ja. Jag lämnar det!","SUCCESS":"Våra Oompa Loompier har tagit bort ditt konto"},"CHANGE_EMAIL_FORM":{"TITLE":"Ändra din e-postadress","SUBTITLE":"Ett klick mera och din e-post uppdateras!","PLACEHOLDER_INPUT_TOKEN":"ändra e-postförekomsten","ACTION_CHANGE_EMAIL":"Ändra din e-postadress","SUCCESS":"Våra Oompa Loompier uppdaterade din e-postadress"},"ISSUES":{"PAGE_TITLE":"Ärenden - {{projectName}}","PAGE_DESCRIPTION":"Ärenden som listas för projektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"ärende","ACTION_NEW_ISSUE":"+ NYTT ÄRENDE","ACTION_PROMOTE_TO_US":"Flytta till användarhistorie","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Ärendet har flyttats till US:","EXTERNAL_REFERENCE":"Den här uppgiften är skapat från","GO_TO_EXTERNAL_REFERENCE":"Gå till början","ACTION_DELETE":"Ta bort ärende","LIGHTBOX_TITLE_BLOKING_ISSUE":"Blockerad ärende","LINK_TASKBOARD":"Uppgiftstavla","TITLE_LINK_TASKBOARD":"Gå till uppgiftstavlan","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Prioritet","SEVERITY":"Allvarsgrad","TYPE":"Typ"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Flytta det här ärendet till en ny användarhistorie","MESSAGE":"Är du säker på att du vill skapa en ny US från det här ärendet?"},"TABLE":{"COLUMNS":{"TYPE":"Typ","SEVERITY":"Allvarsgrad","PRIORITY":"Prioritet","SUBJECT":"Titel","VOTES":"Röster","STATUS":"Status","MODIFIED":"Modifierad","ASSIGNED_TO":"Tilldelad till"},"TITLE_ACTION_CHANGE_STATUS":"Ändra status","TITLE_ACTION_ASSIGNED_TO":"Tilldelad till","BLOCKED":"Blockerad","EMPTY":{"TITLE":"Det är inte några ärenden att rapportera","SUBTITLE":"Hittade du ett ärende?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Ärende {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{issueStatus }}. Typ: {{issueType}}, Prioritet: {{issuePriority}}. Allvarlighetsgrad: {{issueSeverity}}. Beskrivning: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"Kanbanpanelet, med projekt {{projectName}}: {{projectDescription}} användarhistorier. ","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Vika i hop kolumnen","TITLE_ACTION_UNFOLD":"Veckla ut kolumnen","TITLE_ACTION_ADD_US":"Lägg till ny användarhistorie","TITLE_ACTION_ADD_BULK":"Lägg till flera nya","ACTION_SHOW_ARCHIVED":"Visa arkiverad","ACTION_HIDE_ARCHIVED":"Dölj arkiverad","HIDDEN_USER_STORIES":"Användarhistorien för den här statusen är dolt som standard","PLACEHOLDER_CARD_TITLE":"Detta är dina användarhistorier","PLACEHOLDER_CARD_TEXT":"Användarhistorier behöver även underuppgifter för att separera kraven."},"SEARCH":{"PAGE_TITLE":"Sök - {{projectName}}","PAGE_DESCRIPTION":"Sök på vad som helst, användarhistorier, uppgifter, ärenden och wiki-innehåll i projektet {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epos","FILTER_USER_STORIES":"Användarhistorier","FILTER_ISSUES":"Ärenden","FILTER_TASKS":"Uppgift","FILTER_WIKI":"Wiki-sidor","PLACEHOLDER_SEARCH":"Sök i ...","TITLE_ACTION_SEARCH":"sök","EMPTY_TITLE":"Det ser ut som om vi inte hittade något för ditt sök. ","EMPTY_DESCRIPTION":"Kanske du kan försöka en av flikarna ovan eller sök på nytt"},"TEAM":{"PAGE_TITLE":"Team - {{projectName}}","PAGE_DESCRIPTION":"Panelen för arbetsgrupper visar alla medlemmar i projektet {{projectName}}: {{projectDescription}}","SECTION_NAME":"Arbetsgrupp","PLACEHOLDER_INPUT_SEARCH":"Sök på hela namnet ...","COLUMN_MR_WOLF":"Herr Hansson","EXPLANATION_COLUMN_MR_WOLF":"Stängda ärenden","COLUMN_IOCAINE":"Iocaine-drinkare","EXPLANATION_COLUMN_IOCAINE":"Tagna iocaine-doser","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Ändrade wiki-sidor","COLUMN_BUG_HUNTER":"Buggjägare","EXPLANATION_COLUMN_BUG_HUNTER":"Rapporterade ärenden","COLUMN_NIGHT_SHIFT":"Nattarbete","EXPLANATION_COLUMN_NIGHT_SHIFT":"Stängda uppgifter","COLUMN_TOTAL_POWER":"Totalkraft","EXPLANATION_COLUMN_TOTAL_POWER":"Totalpoäng","SECTION_TITLE_TEAM":"Arbetsgrupp >","SECTION_FILTER_ALL":"Alla","CONFIRM_LEAVE_PROJECT":"Är du säker på att du vill lämna projektet?","ACTION_LEAVE_PROJECT":"Lämna det här projektet"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. size: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Inställningar för användare","USER_PROFILE":"Användarprofil","CHANGE_PASSWORD":"Byt lösenord","EMAIL_NOTIFICATIONS":"E-postnotifieringar","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"E-postnotifieringar","COLUMN_PROJECT":"Projekt","COLUMN_RECEIVE_ALL":"Motta alla","COLUMN_ONLY_INVOLVED":"Bara involverade","COLUMN_NO_NOTIFICATIONS":"Inga notifieringar","OPTION_ALL":"Alla","OPTION_INVOLVED":"Involverad","OPTION_NONE":"Ingen"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Projekt","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Projekt"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Använd standardbilden","ACTION_DELETE_ACCOUNT":"Ta bort Taiga-kontot","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Kontrollera din inbox!
    Vi har skickad dig ett e-postmeddelande
    med instruktioner för hur du sätter upp din nya adress","CHANGE_PHOTO":"Ändra foto","FIELD":{"USERNAME":"Användarnamn","EMAIL":"E-post","FULL_NAME":"Hela namnet","PLACEHOLDER_FULL_NAME":"Skriv in hela namnet (ex. Medelsvensson)","BIO":"Personlig bio (max. 210 tecken)","PLACEHOLDER_BIO":"Berätta något om dig själv","LANGUAGE":"Språk","LANGUAGE_DEFAULT":"-- använda standardspråk --","THEME":"Tema","THEME_DEFAULT":"-- använd standardtema --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Senaste ändringar utförd {{lastModifiedDate}} ({{totalEditions}} editions in total) Innehållt: {{ wikiPageContent }}","DATETIME":"YYYY-MM-DD HH:mm","REMOVE":"Ta bort den här wiki-sidan","DELETE_LIGHTBOX_TITLE":"Ta bort Wiki-sida","DELETE_LINK_TITLE":"Ta bort wiki-länk","NAVIGATION":{"HOME":"Huvudsida","SECTION_NAME":"BOKMÄRKEN","ACTION_ADD_LINK":"Lägg till bokmärke","ALL_PAGES":"Alla wiki-sidor"},"SUMMARY":{"TIMES_EDITED":"gånger
    ändrad","LAST_EDIT":"senaste
    ändring","LAST_MODIFICATION":"senast modifierad"},"SECTION_PAGES_LIST":"Alla sidor","PAGES_LIST_COLUMNS":{"TITLE":"Titel","EDITIONS":"Editions","CREATED":"Skapad","MODIFIED":"Modifierad","CREATOR":"Skapare","LAST_MODIFIER":"Senaste modifiering"}},"HINTS":{"SECTION_NAME":"Tips","LINK":"Om du önskar att veta hur du ska använda det - besök vår hjälpsida ","LINK_TITLE":"Besök vår hjälpsida","HINT1_TITLE":"Visste du att du kan importera och exportera projekten?","HINT1_TEXT":"Det gör det möjligt att extrahera alla dina data från en Taiga och flytta det till en annan. ","HINT2_TITLE":"Visste du att du kan skapa anpassade fält?","HINT2_TEXT":"Arbetsgrupper kan skapa anpassade flexibla fält för att använda specifika data som passar arbetsflödet. ","HINT3_TITLE":"Omorganizera dina projekt så de blir mera relevanta för dig","HINT3_TEXT":"De 10 projekten är listad och du har åtkomst till dem på verktyglinjen på toppen av sidan. ","HINT4_TITLE":"Har du glömt vad du jobbade på?","HINT4_TEXT":"Du behöver inte bekymra dig. På vårt instrumentpanel vill du hitta öppna uppgifter, ärenden och användarhistorier sorterad efter hur du arbetar med dem. "},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} har laddat upp en ny bilaga i {{obj_name}}","US_CREATED":"{{username}} har skapat en ny US {{obj_name}} i {{project_name}}","ISSUE_CREATED":"{{username}} har skapat en ny uppgift {{obj_name}} i {{project_name}}","TASK_CREATED":"{{username}} har skapat en ny uppgift {{obj_name}} i {{project_name}}","TASK_CREATED_WITH_US":"{{username}} har skapat en ny uppgift {{obj_name}} i {{project_name}} som hör till US {{us_name}}","WIKI_CREATED":"{{username}} skapade en ny wiki-sida {{obj_name}} i {{project_name}}","MILESTONE_CREATED":"{{username}} har skapad en ny sprint {{obj_name}} i {{project_name}}","EPIC_CREATED":"{{username}} har skapat en ny epic {{obj_name}} i {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} skapade projektet {{project_name}}","MILESTONE_UPDATED":"{{username}} har uppdaterad sprinten {{obj_name}}","US_UPDATED":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" i US {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för US {{obj_name}} till {{new_value}}","US_UPDATED_POINTS":"{{username}} har uppdaterad '{{role_name}}' poäng av US {{obj_name}} till {{new_value}}","ISSUE_UPDATED":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" i ärendet {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för ärendet {{obj_name}} till {{new_value}}","TASK_UPDATED":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för uppgiften {{obj_name}} till {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för uppgiften {{obj_name}} till {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för uppgiften {{obj_name}} som tillhör US {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} har uppdaterad egenskapen \"{{field_name}}\" för uppgiften {{obj_name}} som tillhör US {{us_name}} till {{new_value}}","WIKI_UPDATED":"{{username}} har uppdaterad wiki-sidan {{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} har kommenterad i {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} har kommenterad i ärendet {{obj_name}}","NEW_COMMENT_TASK":"{{username}} har kommenterad uppgiften {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} har en ny medlem","US_ADDED_MILESTONE":"{{username}} har lagt till US {{obj_name}} till {{sprint_name}}","US_MOVED":"{{username}} har flyttat US {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} har lagt till US {{obj_name}} till inkorgen","BLOCKED":"{{username}} har blockerad {{obj_name}}","UNBLOCKED":"{{username}} har tagit bort blockeringen för {{obj_name}}","NEW_USER":"{{username}} har blitt medlem i Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"ärende","TASK":"Uppgift"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"En extern app kräver verifiering","PAGE_DESCRIPTION":"En extern app kräver verifiering","AUTHORIZATION_REQUEST":"Auktorisera {{application}} för att använda det med ditt Taiga-konto?","LOGIN_WITH_ANOTHER_USER":"Logga in med ett annat användarnamn","AUTHORIZE_APP":"Auktorisera appen","CANCEL":"Avbryt"},"JOYRIDE":{"NAV":{"NEXT":"Nästa","BACK":"Baksida","SKIP":"Skip","DONE":"Färdig"},"DASHBOARD":{"STEP1":{"TITLE":"Ditt projekt","TEXT":"välkommen! Her hittar du projekt du är involverad i."},"STEP2":{"TITLE":"Arbetar med","TEXT":"Här kan du hitta användarhistorier, uppgifter och ärenden som du arbetar på."},"STEP3":{"TITLE":"Bevakar","TEXT1":"And right here you will find the ones in your projects that you want to know about.","TEXT2":"Du arbetar redan med Taiga ;)"},"STEP4":{"TITLE":"Låt oss börja","TEXT1":"Du kan starta att skapa ditt första Taiga-projekt.","TEXT2":"Lycka till!"}},"BACKLOG":{"STEP1":{"TITLE":"Uppsummering projekt","TEXT1":"Har kan du se ditt projekts status.","TEXT2":"Du kanändra varje del av projektinställningarna i Admin."},"STEP2":{"TITLE":"Produkt-inkorg","TEXT":"Inkorgen består av kravlistor (användarhistorier) för projektet. Det är här du planerar dina sprintar."},"STEP3":{"TITLE":"Sprintar","TEXT":"Sprintar är korta tidsperioder (normalt 2 veckor) där specifika arbetsuppgifter ska utföras eller levereras. "},"STEP4":{"TITLE":"Användarhistorie","TEXT":"Det här är kraven på en hög nivå. Du kan lägga till dem i inkorgen och dra dem till sprinten som de ska ligga i."}},"KANBAN":{"STEP1":{"TITLE":"Anpassa ditt arbetsflöde","TEXT":"Lägg till de kolumner du behöver för att få en översikt över arbetsflödets statusar genom Admin. "},"STEP2":{"TITLE":"Användarhistorier & uppgifter","TEXT":"Användarhistorier är kraven på en hög nivå. Du kan dra dem till olika kolumner."},"STEP3":{"TITLE":"Lägg till användarhistorier","TEXT1":"Du kanske vill lägga till en enda användarhistorie (lägg till US-ikon) eller en grupp av dem (bulk icon). ","TEXT2":"Lycka till!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Upptäck projekt","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Mest aktiva","MOST_ACTIVE_EMPTY":"Det finns inga AKTIVA projekt ännu.","MOST_LIKED":"Mest gillade","MOST_LIKED_EMPTY":"Det finns inga GILLADE projekt ännu.","VIEW_MORE":"Visa fler","FEATURED":"Utvalda Projekt","EMPTY":"There are no projects to show with this search criteria.
    Try again!","FILTERS":{"ALL":"Alla","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"Letar efter människor","WEEK":"Förra veckan","MONTH":"Senaste månaden","YEAR":"Förra året","ALL_TIME":"All tid","CLEAR":"Clear filters"},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Skriv något ...","ACTION_TITLE":"Sök","RESULTS":"Sökresultat"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-tr.json b/dist/v-1549282893552/locales/taiga/locale-tr.json new file mode 100644 index 0000000..8bf9489 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-tr.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Evet","NO":"Hayır","OR":"veya","I_GET_IT":"Tamam, Anlaşıldı.","LOADING":"Yükleniyor...","DATE":"DD MM YYYY","DATETIME":"DD MM YYYY HH:mm","SAVE":"Kaydet","CANCEL":"İptal","ACCEPT":"Kabul et","DELETE":"Sil","UNLINK":"Bağlantıyı Kopar","CREATE":"Oluştur","ADD":"Ekle","COPY_TO_CLIPBOARD":"Kopyala","COPIED_TO_CLIPBOARD":"Yazı belleğe kopyalandı.","EDIT":"Düzenle","DRAG":"Sürükle","TAG_LINE":"Çevik, ücretsiz ve açık kaynak proje yönetim aracınız","TAG_LINE_2":"PROJENİ SEV","BLOCK":"Engelle","BLOCK_TITLE":"Mesela, bu maddenin çözülemeyen bir bağlantısı varsa engelleyin","BLOCKED":"Engelli","UNBLOCK":"Engellemeyi kaldır","UNBLOCK_TITLE":"Bu maddeden engellemeyi kaldır","BLOCKED_NOTE":"Bu niye engelli?","BLOCKED_REASON":"Lütfen sebebini açıklayın","CREATED_BY":"{{fullDisplayName}} tarafından oluşturuldu","CLOSE":"kapat","GO_HOME":"Ana sayfaya götür beni","PLUGINS":"Eklentiler","ONE_ITEM_LINE":"Her satıra bir kalem...","NEW_BULK":"Yeni toplu ekleme","SUBTASKS":"Alt Görev","PREVIOUS":"Önceki","NEXT":"İleri","LOGOUT":"Çıkış","EXTERNAL_USER":"bir dış kullanıcı","GENERIC_ERROR":"Honki ponkilerimizden biri derki; {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Müşteri gereksinimi, daha önceden belli olmayan ama projeye dahil olması gereken bir gereksinimdir","TEAM_REQUIREMENT":"Takım gereksinimi, müsteriyi ilgilendirmeyen, ama projede yer alması zorunlu olan bir gereksinimdir.","OWNER":"Proje Sahibi","CAPSLOCK_WARNING":"Be careful! You are using capital letters in an input field that is case sensitive.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Atanmış","EDIT":"Kartı düzenle","DELETE":"Delete card","DELETE_ISSUE":"Sorun sil","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Bu değer geçersiz gözüküyor","TYPE_EMAIL":"Bu değer geçerli bir e-posta adresi olmalı.","TYPE_URL":"Bu değer geçerli bir URL şeklinde olmalı","TYPE_URLSTRICT":"Bu değer geçerli bir URL şeklinde olmalı","TYPE_NUMBER":"Bu değer geçerli bir sayı şeklinde olmalı.","TYPE_DIGITS":"Bu değer rakam olmalı","TYPE_DATEISO":"Bu değer geçerli bir tarih olmalı (YYYY-MM-DD).","TYPE_ALPHANUM":"Bu değer alfanümerik olmalıdır.","TYPE_PHONE":"Bu değer geçerli bir telefon numarası şeklinde olmalı","NOTNULL":"Bu değer boş olmamalı","NOT_BLANK":"Bu değer boş olmamalı","REQUIRED":"Bu değer gerekli.","REGEXP":"Bu değer geçersiz gözüküyor","MIN":"Bu değer %s e eşit yada daha büyük olmalı.","MAX":"Bu değer %s den az ya da eşit olmalı.","RANGE":"Bu değer %s ve %s aralığında olmalıdır.","MIN_LENGTH":"Bu değer çok kısa. Karakter sayısı en az %s olmalıdır.","MAX_LENGTH":"Bu değer çok uzun. Karakter sayısı %s kadar ya da daha az olmalıdır.","RANGE_LENGTH":"Bu değer uzunluğu geçersiz. Karakter sayısı %s ve %s aralığında olmalıdır.","MIN_CHECK":"En az %s seçenek belirtmek zorundasınız.","MAX_CHECK":"%s seçenek ya da daha azını seçmek zorunlu.","RANGE_CHECK":"%s ve %s seçenekleri arasında bir seçim yapmak zorunludu.","EQUAL_TO":"Bu değer aynı olmalı.","LINEWIDTH":"Satırların uzunluğu sistem için çok fazla olabilir. %s karakterden kısa tutmaya çalışınız.","PIKADAY":"Hatalı tarih biçimi, lütfen GG AAA YYYY (örnek 23 Mar 1984) biçimini kullanın"},"PICKERDATE":{"FORMAT":"DD MM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Önceki Ay","NEXT_MONTH":"Gelecek Ay","MONTHS":{"JAN":"Ocak","FEB":"Şubat","MAR":"Mart","APR":"Nisan","MAY":"Mayıs","JUN":"Haziran","JUL":"Temmuz","AUG":"Ağustos","SEP":"Eylül","OCT":"Ekim","NOV":"Kasım","DEC":"Aralık"},"WEEK_DAYS":{"SUN":"Pazar","MON":"Pazartesi","TUE":"Salı","WED":"Çarşamba","THU":"Perşembe","FRI":"Cuma","SAT":"Cumartesi"},"WEEK_DAYS_SHORT":{"SUN":"Pzr","MON":"Pzt","TUE":"Salı","WED":"Çar","THU":"Per","FRI":"Cum","SAT":"Cmt"}},"SEE_USER_PROFILE":" {{username }} profilini gör","USER_STORY":"Kullanıcı hikayesi","TASK":"Görev","ISSUE":"Sorun","EPIC":"Destan","TAGS":{"PLACEHOLDER":"Etiket gir","DELETE":"Etiket sil","ADD":"Etiket ekle"},"DESCRIPTION":{"EMPTY":"Boş alan oldukça sıkıcı oluyor... daha betimleyici olun...","NO_DESCRIPTION":"Bir tanım henüz yok"},"FIELDS":{"SUBJECT":"Konu","NAME":"İsim","URL":"URL","DESCRIPTION":"TanımTanım","VALUE":"Değer","SLUG":"Satır","COLOR":"Renk","IS_CLOSED":"Kapatılsın?","STATUS":"Durum ","TYPE":"Tip ","SEVERITY":"Önem Derecesi","PRIORITY":"Öncelik","ASSIGNED_TO":"Atanmış","ASSIGNED_USERS":"Assigned users","POINTS":"Puanlar","IS_BLOCKED":"engellendi ","REF":"Ref","VOTES":"Oylar","SPRINT":"Koşu","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"Hepsi"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Atanmamış","ASSIGN":"Ata","DELETE_ASSIGNMENT":"Atama sil","REMOVE_ASSIGNED":"Atanmışı sil","TOO_MANY":"...çok sayıda kullanıcı, filtrelemeye devam","CONFIRM_UNASSIGNED":"Atanmamış şekilde bırakmak istediğinizden emin misiniz?","TITLE_ACTION_EDIT_ASSIGNMENT":"Atama düzenle","SELF":"Bana ata"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Kapalı","OPEN":"Aç"},"WATCHERS":{"WATCHERS":"İzleyiciler","ADD":"İzleyicileri ekle","TITLE_ADD":"İzleyiciler listesine bir proje üyesi ekle","DELETE":"izleyici sil","TITLE_LIGHTBOX_DELETE_WARTCHER":"İzleyici sil"},"WATCH_BUTTON":{"WATCH":"İzle","WATCHING":"İzliyor","UNWATCH":"İzleme","WATCHERS":"İzleyiciler","BUTTON_TITLE":"Bu madeyi izle/izleme ","COUNTER_TITLE":"{total, plural, one{bir takipçi} other{# takipçi}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Bu konuya oy/karşı oy ver","COUNTER_TITLE":"{total, plural, one{bir oy} other{# oy}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Özel Alanlar","SAVE":"Özel Alan Kaydet","EDIT":"Özel Alan Düzenle","DELETE":"özel öznitelik sil","CONFIRM_DELETE":"Bu özel alandaki tüm bilgiler silinecek.\nDevam etmek istediğinize emin misiniz?"},"FILTERS":{"INPUT_PLACEHOLDER":"Konu yada referans","TITLE_ACTION_FILTER_BUTTON":"ara","TITLE":"Filtreler","TITLE_ACTION_SEARCH":"Ara","ACTION_SAVE_CUSTOM_FILTER":"özel filtre olarak kaydet","PLACEHOLDER_FILTER_NAME":"Filtre adı yazın ve enter a basın","APPLIED_FILTERS_NUM":"filtre uygulandı","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Tip","STATUS":"Durum ","SEVERITY":"Önem Derecesi","PRIORITIES":"Öncelikler","TAGS":"Etiketler ","ASSIGNED_TO":"Atanmış","ASSIGNED_USERS":"Assigned users","ROLE":"Rol","CREATED_BY":"Oluşturan","CUSTOM_FILTERS":"Özel filtreler","EPIC":"Destan"}},"WYSIWYG":{"CODE_SNIPPET":"Kod Parçacığı","DB_CLICK":"düzenlemek için çift tıklayın","SELECT_LANGUAGE_PLACEHOLDER":"Diş Seçin","SELECT_LANGUAGE_REMOVE_FORMATING":"Biçemi kaldır","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown yazım kılavuzu"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Destanlar","VIEW_EPICS":"Destanları gör","ADD_EPICS":"Destan ekle","MODIFY_EPICS":"Destan düzenle","COMMENT_EPICS":"Destanlara yorum ekleme","DELETE_EPICS":"Destanları sil"},"SPRINTS":{"NAME":"Koşular","VIEW_SPRINTS":"Koşuları gör","ADD_SPRINTS":"Koşular ekle","MODIFY_SPRINTS":"Koşuları değiştir","DELETE_SPRINTS":"Koşuları sil"},"USER_STORIES":{"NAME":"Kullanıcı Hikayeleri","VIEW_USER_STORIES":"Kullanıcı hikayelerini gör","ADD_USER_STORIES":"Kullanıcı hikayeleri ekle","MODIFY_USER_STORIES":"Kullanıcı hikayelerini değiştir","COMMENT_USER_STORIES":"Kullanıcı hikayelerine yorum ekleyebilme","DELETE_USER_STORIES":"Kullanıcı hikayelerini sil"},"TASKS":{"NAME":"Görevler","VIEW_TASKS":"Görevler gör","ADD_TASKS":"Görevleri ekle","MODIFY_TASKS":"Görevleri değiştir","COMMENT_TASKS":"Görevlere yorum ekleyebilme","DELETE_TASKS":"Görevleri sil"},"ISSUES":{"NAME":"Sorunlar","VIEW_ISSUES":"Sorunları gör","ADD_ISSUES":"Sorunları ekle","MODIFY_ISSUES":"Sorunları değiştir","COMMENT_ISSUES":"Taleplere yorum ekleyebilme","DELETE_ISSUES":"Sorunları sil"},"WIKI":{"NAME":"Wiki","VIEW_WIKI_PAGES":"Wiki sayfalarını göster","ADD_WIKI_PAGES":"Wiki sayfaları ekle","MODIFY_WIKI_PAGES":"Wiki sayfalarını değiştir","DELETE_WIKI_PAGES":"Wiki sayfalarını sil","VIEW_WIKI_LINKS":"Wiki bağlantılarını göster","ADD_WIKI_LINKS":"Wiki bağlantıları ekle","DELETE_WIKI_LINKS":"Wiki bağlantılarını sil"}}},"LOGIN":{"PAGE_TITLE":"Giriş - Taiga","PAGE_DESCRIPTION":"Yeni girişimciler, çevik geliştiriciler ve tasarımcılar için çalışmaları gerçekten eğlenceli hale getiren basit, güzel bir proje yönetim platformu Taiga ya giriş yapılıyor."},"AUTH":{"INVITED_YOU":"sizi şu projeye davet etti","NOT_REGISTERED_YET":"Henüz kayıt olmadınız mı?","REGISTER":"Kayıt ol","CREATE_ACCOUNT":"buradan ücretsiz bir hesap oluşturun"},"LOGIN_COMMON":{"HEADER":"Zaten bir Taiga hesabım var","PLACEHOLDER_AUTH_NAME":"Kullanıcı adı yada e-posta (büyük küçük harf duyarlı)","LINK_FORGOT_PASSWORD":"Unuttunuz mu?","TITLE_LINK_FORGOT_PASSWORD":"Parolanızı mı unuttunuz?","ACTION_ENTER":"Giriş","ACTION_SIGN_IN":"Giriş","PLACEHOLDER_AUTH_PASSWORD":"Parola (büyük küçük harf duyarlı)","ALT_LOGIN":"Ya da böyle girin"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Umpa Lumpalarımıza göre, kullanıcı adınızı / e-posta adresinizi ya da parolanızı yanlış girdiniz.","SUCCESS":"Umpa Lumpalarımız çok mutlu oldular, Taiga ya hoşgeldiniz."},"REGISTER":{"PAGE_TITLE":"Kayıt ol - Taiga","PAGE_DESCRIPTION":"Yeni girişimciler, çevik geliştiriciler ve tasarımcılar için çalışmaları gerçekten eğlenceli hale getiren basit, güzel bir proje yönetim platformu Taiga da hesabınızı oluşturun."},"REGISTER_FORM":{"TITLE":"Yeni bir Taiga hesabı oluştur (ücretsiz)","PLACEHOLDER_NAME":"Bir kullanıcı adı seçin (büyük küçük harf duyarlı)","PLACEHOLDER_FULL_NAME":"Tam adınızı girin","PLACEHOLDER_EMAIL":"E-posta adresiniz","PLACEHOLDER_PASSWORD":"Parola belirleyin (büyük küçük harf duyarlı)","ACTION_SIGN_UP":"Kaydol","TITLE_LINK_LOGIN":"Giriş yap","LINK_LOGIN":"Zaten üye misiniz? Giriş yapın"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Parolayı unuttum - Taiga","PAGE_DESCRIPTION":"Kullanıcı adınızı ya da e-posta adresinizi girerek yeni bir parola edinin ve Taiga ya yeniden erişin."},"FORGOT_PASSWORD_FORM":{"TITLE":"Eyvah, parolanızı mı unuttunuz?","SUBTITLE":"Yeni bir tane almak için kullanıcı adınızı ya da e-postanızı girin","PLACEHOLDER_FIELD":"Kullanıcı adı veya e-posta","ACTION_RESET_PASSWORD":"Parolayı Sıfırla","LINK_CANCEL":"Boşver, geri gidelim. Sanırım hatırladım.","SUCCESS_TITLE":"Gelen kutunuza bakınız!","SUCCESS_TEXT":"Yeni parolanızı belirlemeniz için yönergeleri içeren e-posta hesabınıza gönderilmiştir","ERROR":"Honki ponkilerimize göre, siz henüz bir kayıt yaptırmamış durumdasınız."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Parolayı değiştirin - Taiga","SECTION_NAME":"Parolayı değiştir","FIELD_CURRENT_PASSWORD":"Şimdiki parola","PLACEHOLDER_CURRENT_PASSWORD":"Şimdiki parolanız (boş da olabilir eger parola belirlemediyseniz)","FIELD_NEW_PASSWORD":"Yeni parola","PLACEHOLDER_NEW_PASSWORD":"Yeni bir parola yaz","FIELD_RETYPE_PASSWORD":"Yeni parolayı yeniden girin","PLACEHOLDER_RETYPE_PASSWORD":"Yeni parolayı yeniden giriniz","ERROR_PASSWORD_MATCH":"Parolalar uyuşmuyor"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Yeni bir Taiga parolası oluşturun","SUBTITLE":"Bir de, demir yönünden zengin yiyecekler yemek beyninize iyi gelebilir :P","PLACEHOLDER_NEW_PASSWORD":"Yeni parola","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Yeni parolayı yeniden girin","ACTION_RESET_PASSWORD":"Parolayı Sıfırla","ERROR":"Honki ponkiler parola geri kurtarma isteğinizi bulamıyorlar. Tekrar sormayı deneyin.","SUCCESS":"Honki ponkilerimiz yeni parolanızı kaydetti.
    Yeni parolanız ile giriş yapın"},"INVITATION":{"PAGE_TITLE":"Davet kabulü - Taiga","PAGE_DESCRIPTION":"Yeni girişimciler, çevik geliştiriciler ve tasarımcılar için çalışmaları gerçekten eğlenceli hale getiren basit, güzel bir proje yönetim platformu Taiga dan yapılan daveti kabul edin."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Umpa Lumpalarımız davetiyenize ulaşamıyor.","SUCCESS":"Projeye katılımınız başarıyla gerçekleşti. {{project_name}} 'ye hoş geldiniz."},"HOME":{"PAGE_TITLE":"AnaSayfa - Taiga","PAGE_DESCRIPTION":"Atanmış ve izlenen kullanıcı hikayeleri, işler ve sorunların yanı sıra ana projeleriniz için Taiga ana sayfanız","EMPTY_WORKING_ON":"Burası bomboş, değil mi? Taiga ile çalışmaya başlayınca burada hikayeler, isler ve sorunları göreceksin.","EMPTY_WATCHING":"Projelerinizdeki Kullanıcı Hikayelerini, İşleri ve Sorunları takip edin ve değişikliklerden haberdar olun :) ","EMPTY_PROJECT_LIST":"Henüz bir projeniz yok","WORKING_ON_SECTION":"Üzerinde çalışılıyor","WATCHING_SECTION":"İzleniyor","DASHBOARD":"Proje Panosu"},"EPICS":{"TITLE":"DESTANLAR","SECTION_NAME":"Destanlar","EPIC":"DESTAN","PAGE_TITLE":"Destanlar - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin destan listesi paneli: {{projectDescription}}","DASHBOARD":{"ADD":"+ DESTAN EKLE","UNASSIGNED":"Atama Yok"},"EMPTY":{"TITLE":"Görünüşe göre henüz hiç destan yok.","EXPLANATION":"Destanlar kullanıcı hikayelerini kapsayan geniş kapsamlı kavramlardır.
    Destanlar hiyerarşinin en üstünde yer alır ve kullanıcı hikayelerini gruplar.","HELP":"Destanlar hakkında daha fazla bilgi edin"},"TABLE":{"VOTES":"Oylar","NAME":"İsim","PROJECT":"Proje","SPRINT":"Koşu","ASSIGNED_TO":"Aranmış","STATUS":"Durum ","PROGRESS":"İlerleme","VIEW_OPTIONS":"Seçenekleri gör"},"CREATE":{"TITLE":"Yeni Destan","PLACEHOLDER_DESCRIPTION":"Lütfen diğerlerinin bu destanı daha iyi anlayabilmesi için açıklama giriniz","TEAM_REQUIREMENT":"Takım gereksinimi","CLIENT_REQUIREMENT":"İstemci Gereksinimi","BLOCKED":"Engelli","BLOCKED_NOTE_PLACEHOLDER":"Bu destan neden engellenmiş?","CREATE_EPIC":"Destan yarat"}},"PROJECTS":{"PAGE_TITLE":"Projelerim - Taiga","PAGE_DESCRIPTION":"Tüm projelerinizi içeren bir liste, yenide düzenle ya da yeni bir tane yarat.","MY_PROJECTS":"Projelerim"},"ATTACHMENT":{"SECTION_NAME":"ekler","TITLE":" {{ date }} tarihinde {{ fileName }} dosyası yüklendi","LIST_VIEW_MODE":"Liste görünümü biçimi","GALLERY_VIEW_MODE":"Galeri görünümü biçimi","DESCRIPTION":"Kısa bir tanım yaz","DEPRECATED":"(kaldırıldı)","DEPRECATED_FILE":"Kaldırıldı mı?","ADD":"Yeni ek ekleyin {{maxFileSizeMsg}}","DROP":"Ekleri buraya bırakın!","SHOW_DEPRECATED":"+ kaldırılan ekleri göster","HIDE_DEPRECATED":"- kaldırılan ekleri gizle","COUNT_DEPRECATED":"({{ counter }} kaldırılmış)","MAX_UPLOAD_SIZE":"Karşıya yükleme için en yüksek boyut limiti {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"'{{fileName}}' dosyasını yükleyemedik. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Ek sil","MSG_LIGHTBOX_DELETE_ATTACHMENT":"ek '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Silemiyoruz: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin"},"PAGINATION":{"PREVIOUS":"Önceki","NEXT":"İleri"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Değeri düzenle","TITLE_ACTION_DELETE_VALUE":"Değer sil","TITLE_ACTION_DELETE_TAG":"Etiket sil"},"HELP":"Yardıma mı ihtiyacın var? Destek sayfamızı kontrol edin!","PROJECT_DEFAULT_VALUES":{"TITLE":"Varsayılan Değerler","SUBTITLE":"Tüm seçici girdiler için varsayılan değerleri seçin."},"MEMBERSHIPS":{"TITLE":"Üyeleri yönet","PAGE_TITLE":"Üyelikler - {{projectName}}","ADD_BUTTON":"+ Yeni üye","ADD_BUTTON_TITLE":"Yeni üye ekle","UPGRADE_BUTTON":"Planınızı Yükseltin","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"Dışarı aktar","SUBTITLE":"Yedek olarak saklamak ya da yeni bir proje için temel olarak adına projenizi dışarı aktarın.","EXPORT_BUTTON":"Dışarı aktar","EXPORT_BUTTON_TITLE":"Projeni dışarı aktar","LOADING_TITLE":"Döküm dosyanızı oluşturuyoruz","DUMP_READY":"Döküm dosyanız hazır!","LOADING_MESSAGE":"Lütfen bu sayfayı kapatmayın","ASYNC_MESSAGE":"Hazır olduğunda size bir e-posta göndereceğiz.","SYNC_MESSAGE":"Eğer indirme otomatik olarak başlamıyor ise buraya tıklayın.","ERROR":"Bizim Honki ponkiler döküm dosyasını oluştururken birkaç hata ile karşılaştı. Lütfen yeniden deneyin.","ERROR_BUSY":"Üzgünüz, bizim honki ponkiler şu anda çok meşgul. Lütfen bir kaç dakika içinde yeniden deneyin."},"MODULES":{"TITLE":"Modüller","EPICS":"Destanlar","EPICS_DESCRIPTION":"Projenizin en stratejik parçasını görüntüleyin ve yönetin","BACKLOG":"Havuz","BACKLOG_DESCRIPTION":"Yeni gelen ve önceliklendirilmiş işler için düzenli bir görünüm elde etmek için kullanıcı hikayelerinizi yönetin.","NUMBER_SPRINTS":"Beklenen koşu sayısı","NUMBER_SPRINTS_HELP":"Belirsizse 0 giriniz","NUMBER_US_POINTS":"Hikaye puanlarının beklenen toplamı","NUMBER_US_POINTS_HELP":"Belirsizse 0 giriniz","KANBAN":"Kanban","KANBAN_DESCRIPTION":"Bu pano ile projenizi güzel bir şekilde düzenleyin.","ISSUES":"Sorunlar","ISSUES_DESCRIPTION":"Proje ile ilgili hataları, sorular ve geliştirmeleri izle. Hiçbir şeyi kaçırma!!","WIKI":"Wiki","WIKI_DESCRIPTION":"Diğerleriyle işbirliği yaparak içerik ekleyin, düzenleyin ve silin. Burası projenizin dokümantasyonu için doğru yer.","MEETUP":"Toplantı","MEETUP_DESCRIPTION":"Video konferans sistemi seçin","SELECT_VIDEOCONFERENCE":"Bir video konferans sistemi seç","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Özel","URL_CHAT_ROOM":"Sohbet odanızın linki"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Proje profili- {{projectName}}","PROJECT_DETAILS":"Proje detayları","PROJECT_NAME":"Proje adı","TAGS":"Etiketler","DESCRIPTION":"Tanım","RECRUITING":"Bu proje insan arıyor mu?","RECRUITING_MESSAGE":"Ne aramıştınız?","RECRUITING_PLACEHOLDER":"Aradığınız özellikleri yazın","FEEDBACK":"Taiga kullanıcılarından geri bildirim almak ister misiniz?","PUBLIC_PROJECT":"Açık Proje","PRIVATE_PROJECT":"Gizli proje","PRIVATE_OR_PUBLIC":"Açık ve özel projeler arasındaki fark nedir?","DELETE":"Bu projeyi sil","CHANGE_LOGO":"Logoyu değiştir","ACTION_USE_DEFAULT_LOGO":"Varsayılan resmi kullan","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Proje sahibi","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Talep","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Sahibi değiştir","CHANGE_OWNER_SUCCESS_TITLE":"İsteminiz gönderildi!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Raporlar","SUBTITLE":"Kendi raporlarınızı oluşturmak için proje verinizi CSV biçeminde dışarı aktarın.","DESCRIPTION":"Kendi raporlarınızı oluşturmak için CSV dosyası olarak indirin veya oluşturulan URL'yi kopyalayıp istediğiniz metin editörü veya hesap tablosu programında açın. Bu sayede tüm verilerinizi kolayca görüp inceleyebileceksiniz.","HELP":"Bunu elektronik çizelgemde nasıl kullanayım?","REGENERATE_TITLE":"URL değiştir","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Url'yi sil","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"destan raporları","SECTION_TITLE_US":"kullanıcı hikayeleri raporları","SECTION_TITLE_TASK":"görevlere ait raporlar","SECTION_TITLE_ISSUE":"sorun raporları","DOWNLOAD":"CSV İndir","URL_FIELD_PLACEHOLDER":"Lütfen CSV url'ini yeniden oluşturun","TITLE_REGENERATE_URL":"CSV url ini yeniden oluştur","ACTION_GENERATE_URL":"URL oluştur","ACTION_REGENERATE":"Yeniden oluştur","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"Sil"},"CUSTOM_FIELDS":{"TITLE":"Özel Alanlar","SUBTITLE":"Hikayeleriniz, işleriniz ve sorunlarınız için özel alanları tanımlayın","EPIC_DESCRIPTION":"Destanın özel alanları","EPIC_ADD":"Destana özel alan ekle","US_DESCRIPTION":"Kullanıcı hikayeleri özel alanları","US_ADD":"Kullanıcı hikayelerine özel bir alan ekleyin","TASK_DESCRIPTION":"Görevlere ait özel alanlar","TASK_ADD":"Görevlere özel alan ekle","ISSUE_DESCRIPTION":"Sorunlar için özel alanlar","ISSUE_ADD":"Sorunlara yeni bir özel alan ekle","FIELD_TYPE_TEXT":"Metin","FIELD_TYPE_RICHTEXT":"Zengin metin","FIELD_TYPE_MULTI":"Çoklu-satır","FIELD_TYPE_DATE":"Tarih","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Proje değerleri- {{projectName}}","REPLACEMENT":"Bu değerdeki tüm öğeler yandaki gibi değiştirilecek","ERROR_DELETE_ALL":"Bütün değerleri silemezsiniz."},"PROJECT_VALUES_POINTS":{"TITLE":"Puanlar","SUBTITLE":"Kullanıcı hikayelerinin puanları için kestirim değerleri belirtin","US_TITLE":"KH puanları","ACTION_ADD":"Yeni puan ekle"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Öncelikler","SUBTITLE":"Sorunların alabileceği öncelik seviyelerini belirtin","ISSUE_TITLE":"Sorun öncelikleri","ACTION_ADD":"Yeni öncelik ekle"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Önem Dereceleri","SUBTITLE":"Sorunların alabileceği önem derecelerini tanımlayın","ISSUE_TITLE":"Sorun önem dereceleri","ACTION_ADD":"Yeni önem derecesi ekle"},"PROJECT_VALUES_STATUS":{"TITLE":"Durumlar","SUBTITLE":"Hikayeleriniz, işleriniz ve sorunlarınızın alabileceği durumları tanımlayın","EPIC_TITLE":"Epic Statuses","US_TITLE":"Kullanıcı hikayelerinin durumları","TASK_TITLE":"Görev Durumları","ISSUE_TITLE":"Sorun Durumları"},"PROJECT_VALUES_TYPES":{"TITLE":"Tipler","SUBTITLE":"Taleblerinizin olası tiplerini belirtin","ISSUE_TITLE":"Sorun türleri","ACTION_ADD":"Ekle yeni {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Etiketler ","SUBTITLE":"Etiketin rengini gör ve düzenle","EMPTY":"Henüz etiket yok","EMPTY_SEARCH":"Arama kriterlerinize uyan bir kayıt bulunamadı","ACTION_ADD":"Etiket ekle","NEW_TAG":"Yeni etiket","MIXING_HELP_TEXT":"Birleştirmek istediğiniz etiketleri seçiniz","MIXING_MERGE":"Etiketleri Birleştir","SELECTED":"Selected"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"Yeni durum ekle","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Roller - {{projectName}}","WARNING_NO_ROLE":"Dikkat edin, projenizdeki rollerden hiçbiri kullanıcı hikayeleri için puan değeri kestirimi yapma yetkisine sahip değil.","HELP_ROLE_ENABLED":"Etkileştirildiğinde, bu role atanan üyeler kullanıcı hikayeleri için puan kestirimi yapabilecek","DISABLE_COMPUTABLE_ALERT_TITLE":"Bu role ait kestirimleri kapatmak istediğinizden emin misiniz?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"{{roleName}} görevi için tahmin izinlerini kaldırırsanız, bu görevdekiler tarafından daha önce yapılmış tüm tahminler silinir","COUNT_MEMBERS":"bu roldeki üyelerin sayısı {{ role.members_count }} ","TITLE_DELETE_ROLE":"Rol Sil","REPLACEMENT_ROLE":"Bu role sahip kullanıcıların taşınacağı","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"Bütün değerleri silemezsiniz","EXTERNAL_USER":"Dış kullanıcı","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Gizli anahtar","PAYLOAD_URL":"Paket URL'si","VALID_IPS":"Geçerli çıkış IP'leri (virgülle ayrılmış olarak)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket talepleri imzalı değil dolayısıyla kaynağı doğrulamanın en iyi yolu IP 'dir. Eğer bu alan boş ise IP doğrulaması yapılamayacaktır. "},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab istekleri imzalı değiller bu yüzden IP kaynağını doğrulamak en iyi yol. Eğer alan boş bırakılırsa IP doğrulaması yapılmayacak."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Yeni bir Webhook Ekle","TYPE_NAME":"Servis adını girin","TYPE_PAYLOAD_URL":"Servis paket URL'sini yazın","TYPE_SERVICE_SECRET":"Gizli anahtar servisini girin","SAVE":"Webhook Kaydet","CANCEL":"Webhook iptal et","SHOW_HISTORY":"(Tarihçeyi göster)","TEST":"Webhook testi","EDIT":"Webhook Düzenle","DELETE":"Webhook Sil","REQUEST":"Talep","RESEND_REQUEST":"İsteği yeniden gönder","HEADERS":"Başlıklar","PAYLOAD":"Paket","RESPONSE":"Cevap","DATE":"DD MMM YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Tarihçe gizle)","ACTION_HIDE_HISTORY_TITLE":"Tarihçe detaylarını gizle","ACTION_SHOW_HISTORY":"(Tarihçeyi göster)","ACTION_SHOW_HISTORY_TITLE":"Tarihçe detaylarını göster","WEBHOOK_NAME":" '{{name}}' Webhook'u"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Özel Öznitelikler - {{projectName}}","ADD":"Özel alan ekle","EDIT":"Özel Alan Düzenle","DELETE":"Özel Alan Sil","SAVE_TITLE":"Özel Alan Kaydet","CANCEL_TITLE":"oluşturmayı iptal et","SET_FIELD_NAME":"Özel alan adınızı belirtin","SET_FIELD_DESCRIPTION":"Özel alanınıza ait tanım girin","FIELD_TYPE_DEFAULT":"-- birini seçin --","ACTION_UPDATE":"Özel Alanı Güncelle","ACTION_CANCEL_EDITION":"Baskıyı iptal et"},"MEMBERSHIP":{"COLUMN_MEMBER":"Üye","COLUMN_ADMIN":"Yönetim","COLUMN_ROLE":"Rol","COLUMN_STATUS":"Durum","STATUS_ACTIVE":"Aktif","STATUS_PENDING":"Bekliyor","DELETE_MEMBER":"Üye sil","RESEND":"Yeniden gönder","SUCCESS_SEND_INVITATION":"Davetiyeyi '{{email}}' adresine yeniden gönderdik.","SUCCESS_DELETE":"{{message}} 'i sildik","ERROR_DELETE":"Silemiyoruz {{message}}.","DEFAULT_DELETE_MESSAGE":"davetiye {{email}} "},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"Puan seçici için varsayılan değer","LABEL_TASK_STATUS":"Görev durum seçici için varsayılan değer","LABEL_ISSUE_TYPE":"Sorun tipi seçici için varsayılan değer","LABEL_ISSUE_STATUS":"Sorun durumu seçici için varsayılan değer","LABEL_PRIORITY":"Önceli seçicisi için varsayılan değer","LABEL_SEVERITY":"Önem derecesi seçicisi için varsayılan değer"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Yeni durum için bir isim yaz","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Yeni nesne için bir isim yazın"},"US_STATUS":{"ACTION_ADD_STATUS":"Yeni durum ekle","IS_ARCHIVED_COLUMN":"Arşivlenmiş","IS_CLOSED_COLUMN":"Kapatılmış","WIP_LIMIT_COLUMN":"WIP Sınır","PLACEHOLDER_WRITE_NAME":"Yeni durum için bir isim yaz"},"MENU":{"PROJECT":"Proje","ATTRIBUTES":"Öznitelikler","MEMBERS":"Üyeler","PERMISSIONS":"İzinler","INTEGRATIONS":"Bütünleştirmeler"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Durum","POINTS":"Puanlar","PRIORITIES":"Öncelikler","SEVERITIES":"Önem Dereceleri","TYPES":"Tipler","CUSTOM_FIELDS":"Özel alanlar","TAGS":"Etiketler ","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"Roller","ACTION_NEW_ROLE":"+ Yeni rol","TITLE_ACTION_NEW_ROLE":"Yeni rol ekle"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Yeni proje sahibi olmak ister misiniz?","PRIVATE":"Gizli","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"Kabul et","REJECT":"Reddet","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Proje sahibine yorum göndermek ister misiniz?","UNLIMITED_PROJECTS":"Sınırsız","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Profili Düzenle","CLOSED_US":"Kapatılmış KH","PROJECTS":"Projeler","PROJECTS_EMPTY":"{{username}} kullanıcısının henüz bir projesi yok","CONTACTS":"İrtibat Kişileri","CONTACTS_EMPTY":"{{username}} kullanıcısının henüz irtibat kişileri yok","CURRENT_USER_CONTACTS_EMPTY":"Henüz irtibat kişileriniz yok","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"Taiga ile çalışan kişiler otomatik olarak irtibat kişileriniz olacaktır","TABS":{"ACTIVITY_TAB":"Zaman Çizelgesi","ACTIVITY_TAB_TITLE":"Bu kullanıcı için tüm eylemleri göster","PROJECTS_TAB":"Projeler","PROJECTS_TAB_TITLE":"Kullanıcının üyesi olduğu tüm projelerin listesi","LIKES_TAB":"Beğeniler","LIKES_TAB_TITLE":"Bu kullanıcının tüm beğenilerilerini listele","VOTES_TAB":"Oylar","VOTES_TAB_TITLE":"Bu kullanıcı tarafından verilmiş tüm oyları görün","WATCHED_TAB":"İzlendi","WATCHED_TAB_TITLE":"Bu kullanıcı tarafından izlenen herşeyi listele","CONTACTS_TAB":"İrtibat Kişileri","CONTACTS_TAB_TITLE":"Bu kullanıcının tüm kişilerini listele"}},"PROFILE_SIDEBAR":{"TITLE":"Profiliniz","DESCRIPTION":"Yaptığınız herşey ve üzerinde çalıştığınız konular buradan görülebilir. Bilgilerinizi zenginleştirmek için güzel bir özgeçmiş ekleyin.","ADD_INFO":"Bio yu düzenle"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Birşeyler yazın...","FILTER_TYPE_ALL":"Hepsi","FILTER_TYPE_ALL_TITLE":"Hepsini göster","FILTER_TYPE_PROJECTS":"Projeler","FILTER_TYPE_PROJECTS_TITLE":"Sadece projeleri görüntüle","FILTER_TYPE_EPICS":"Destanlar","FILTER_TYPE_EPICS_TITLE":"Sadece destanları göster","FILTER_TYPE_USER_STORIES":"Hikayeler","FILTER_TYPE_USER_STORIES_TITLE":"Sadece kullanıcı hikayelerini göster","FILTER_TYPE_TASKS":"Görevler","FILTER_TYPE_TASKS_TITLE":"Sadece görevleri göster","FILTER_TYPE_ISSUES":"Sorunlar ","FILTER_TYPE_ISSUES_TITLE":"Sadece sorunları göster","EMPTY_TITLE":"Görünüşe göre burada gösterilecek bir şey yok."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"En çok kullanılan projelerinizi en üste koymak için yeniden sıralayın.
    Top 10 projeler gezinti çubuğunun proje listesinin başında gösterilecektir.","PRIVATE":"Gizli proje","LOOKING_FOR_PEOPLE":"Bu proje ahalisini arıyor","FANS_COUNTER_TITLE":"{total, plural, one{bir meraklı} other{# meraklı}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{bir takipçi} other{# takipçi}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{bir üye} other{# üye}}","BLOCKED_PROJECT":{"BLOCKED":"Engellenmiş proje","THIS_PROJECT_IS_BLOCKED":"Proje geçici olarak engellenmiş","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Projenizdeki engellemeyi kaldırmak için yöneticiyle bağlantı kurunuz."},"SECTION":{"SEARCH":"Ara","TIMELINE":"Zaman Çizelgesi","EPICS":"Destanlar","BACKLOG":"Havuz","KANBAN":"Kanban","ISSUES":"Sorunlar","WIKI":"Wiki","TEAM":"Takım","MEETUP":"Toplantı","ADMIN":"Yönetim"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Proje Oluştur","MANAGE_PROJECTS":"Projeleri yönet","TITLE_CREATE_PROJECT":"Proje oluştur","HELP_TITLE":"Taiga Destek Sayfası","HELP":"Yardım","HOMEPAGE":"Ana sayfa","FEEDBACK_TITLE":"Geribildirim Gönder","FEEDBACK":"Geribildirim","NOTIFICATIONS_TITLE":"Bildirim ayarlarını düzenle","NOTIFICATIONS":"Bildirimler","VIEW_PROFILE_TITLE":"Profili Görüntüle","VIEW_PROFILE":"Profili Görüntüle","EDIT_PROFILE_TITLE":"Profilini düzenle","EDIT_PROFILE":"Profil Düzenle","CHANGE_PASSWORD_TITLE":"Parolayı değiştir","CHANGE_PASSWORD":"Parolayı değiştir","DASHBOARD_TITLE":"Pano","DISCOVER_TITLE":"Trend projeleri keşfet","DISCOVER":"Keşfet"},"LIKE_BUTTON":{"LIKE":"Beğen","LIKED":"Beğendi","UNLIKE":"Beğenme","BUTTON_TITLE":"Bu projeyi beğen ya da beğenme","COUNTER_TITLE":"{total, plural, one{bir meraklı} other{# meraklı}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Bu projeyi izle ve bildirim politikasını ayarla","WATCH":"İzle","WATCHING":"İzliyor","COUNTER_TITLE":"{total, plural, one{bir takipçi} other{# takipçi}}","OPTIONS":{"NOTIFY_ALL":"Bütün bildirimleri al","NOTIFY_ALL_TITLE":"Bu proje için tüm bildirimleri al","NOTIFY_INVOLVED":"Sadece ilgililer","NOTIFY_INVOLVED_TITLE":"Sadece ilgilendiğiniz bildirimleri alın","UNWATCH":"İzleme","UNWATCH_TITLE":"Bu projeyi izleme"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Proje ekibiyle bağlantıya geçin","CONTACT_BUTTON":"Proje ile bağlantıya geç"},"CREATE":{"TITLE":"Proje Oluştur","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Projeyi Kopayala","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Projeyi İçe Aktar","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Projeye davet et","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"Arka","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Açık Proje","PRIVATE_PROJECT":"Gizli Proje"},"COMMON":{"DETAILS":"Proje detayları","PROJECT_TITLE":"Proje Adı","PROJECT_DESCRIPTION":"Proje Tanımı"},"DUPLICATE":{"TITLE":"Projeyi Kopyala","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Kopyalamak için var olan bir proje seçin"},"IMPORT":{"TITLE":"Projeyi İçe Aktar","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"Bizim honki ponkiler projenizi içeriye aktarıyor","ASYNC_IN_PROGRESS_MESSAGE":"Bu işlem bir kaç dakika sürecek
    Hazır olduğunda bir e-posta göndereceğiz","UPLOAD_IN_PROGRESS_MESSAGE":"{{totalSize}} in {{uploadedSize}} kadarı karşıya yüklendi","ERROR":"Sarı çizmeli memmet ağamız döküm dosyanızı içeri aktarırken birkaç problem yaşadı. Lütfen yeniden deneyin.","ERROR_TOO_MANY_REQUEST":"Üzgünüm, bizim honki ponkiler şu anda çok meşgul. Lütfen birkaç dakika içinde yeniden deneyin.","ERROR_MESSAGE":"Honki ponkilerimiz döküm dosyanızı içeri aktarırken birkaç problem yaşadı: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"({{fileSize}}) boyutundaki '{{fileName}}' dosya honki ponkilerimiz için oldukça ağır geldi, ({{maxFileSize}}) boyutundan daha küçük bir şeylerle deneyin","SYNC_SUCCESS":"Projeniz başarıyla içe aktarıldı","IMPORT":"İçe Aktar","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Proje Üyeleri","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Kullanıcı seçin","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"Ata","PROJECT_SELECTOR":{"NO_RESULTS":"Arama kriterlerinize uyan bir kayıt bulunamadı","ACTION_SEARCH":"ara","ACTION_BACK":"Arka"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Hesabınız sadece {{members}} kişiye izin veriyor","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"İçe aktarmaya çalıştığınız proje gizli. Maalesef var olan ödeme planınız daha fazla gizli proje yaratmanıza izin vermiyor"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Maalesef var olan ödeme planınız daha fazla açık proje yaratmanıza izin vermiyor","DESC":"İçe aktarmaya çalıştığınız proje açık bir proje. Maalesef şu anki ödeme planınız daha fazla açık projeye izin vermiyor."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Var olan ödeme planınız gizli proje başına {{max_memberships}} kullanıcıya izin veriyor."},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Var olan ödeme planınız açık proje başına {{max_memberships}} kullanıcıya izin veriyor."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Maalesef şu anki ödeme planınız daha fazla gizli proje eklemenize ya da gizli proje başına {{max_memberships}} kullanıcıdan fazla kullanıcı eklemenize izin vermiyor","DESC":"İçe aktarmaya çalıştığınız proje gizli ve {{members}} kullanıcısı var."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Maalesef şu anki ödeme planınız daha fazla açık proje eklemenize ya da açık proje başına {{max_memberships}} kullanıcıdan fazla kullanıcı eklemenize izin vermiyor","DESC":"İçe aktarmak istediğiniz proje açık ve {{members}} kullanıcıdan daha fazla kullanıcı içeriyor."}},"IN_PROGRESS":{"TITLE":"Proje İçe Aktarılıyor","DESCRIPTION":"Bu işlem biraz sürecek, lütfen pencereyi kapatmayın."},"WARNING":{"TITLE":"Bazı görevler atanmamış olacak","DESCRIPTION":"Hala belirlenemeyen kişiler var. Bu kişilere atanmış kartlar atanmamış olarak kalacak. Veri kaybetmemek için ilişkili kişileri kontrol edin.","CHECK":"İrtibat kişilerini kontrol edin"},"TAIGA":{"SELECTOR":"Taiga projenizi içe aktarın"},"TRELLO":{"SELECTOR":"Trello panolarınızı Taiga'ya aktarın","CHOOSE_PROJECT":"İçe aktarmak istediğiniz panoyu seçin","NO_PROJECTS":"Trello içinde panonuz yok"},"GITHUB":{"SELECTOR":"GitHub proje taleplerini içe aktar","CHOOSE_PROJECT":"İçe aktarmak istediğiniz projeyi bulun","NO_PROJECTS":"GitHub'da projeniz yok","HOW_DO_YOU_WANT_TO_IMPORT":"Taleplerinizi Taiga'ya nasıl aktarmak istersiniz?","KANBAN_PROJECT":"Kanban projesine kullanıcı hikayesi olarak","KANBAN_PROJECT_DESCRIPTION":"Bundan sonra scrum havuzunu açabileceksiniz.","SCRUM_PROJECT":"Scrum projesinde kullanıcı hikayesi olarak","SCRUM_PROJECT_DESCRIPTION":"Bundan sonra kanban modunu etkinleştirebilirsiniz.","ISSUES_PROJECT":"Talep olarak","ISSUES_PROJECT_DESCRIPTION":"Taleplerinizi kanban ya da scrum modunda kullanamayacaksınız. Yeni kullanıcı hikayeleri için kanban ve scrum'ı açabileceksiniz."},"ASANA":{"SELECTOR":"Asana projenizi içe aktarın ve nasıl yöneteceğiniz seçin","CHOOSE_PROJECT":"İçe aktarmak istediğiniz projeyi seçiniz","NO_PROJECTS":"Asana da projeniz yok","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"Projenizin görev ve alt görevleri, Taiga kullanıcı hikayeleri ve görevleri olarak oluşturulacak.","CREATE_AS_KANBAN_DESCRIPTION":"Projenizin görev ve alt görevleri, Taiga kullanıcı hikayeleri ve görevleri olarak oluşturulacak."},"JIRA":{"SELECTOR":"Jira projenizi içe aktarın ve nasıl yöneteceğiniz seçin","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"İçe aktarmak istediğiniz proje ya da panoyu seçiniz","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Jira URL'niz","KANBAN_PROJECT":"Kanban","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"Sorunlar","CREATE_AS_SCRUM_DESCRIPTION":"Projenizin talep ve alt talepleri, Taiga kullanıcı hikayeleri ve görevleri olarak yaratılacak.","CREATE_AS_KANBAN_DESCRIPTION":"Projenizin talep ve alt talepleri, Taiga kullanıcı hikayeleri ve görevleri olarak yaratılacak.","CREATE_AS_ISSUES_DESCRIPTION":"Jira projenizin alt taleplerini ne yapmak istersiniz? (Taiga alt taleplere izin vermez)","CREATE_NEW_ISSUES":"Alt talepleri yeni Taiga taleplerine çevir.","NOT_CREATE_NEW_ISSUES":"Alt talepleri aktarma"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Taiga hesabınızı silmek istediğinizden emin misiniz?","CANCEL":"Ayarlara dön","ACCEPT":"Hesabı sil","BLOCK_PROJECT":"Hesabınızı sildiğinizde sahibi olduğunuz tüm projeler bloke edilecek. Eğer bunu istemiyorsanız hesabınızı silmeden önce projelerinizin sahipliğini diğer üyelere devredin."},"DELETE_PROJECT":{"TITLE":"Proje Sil","QUESTION":"Bu projeyi silmek istediğinizden emin misiniz?","SUBTITLE":"Bütün proje verileri (kullanıcı hikayeleri, işler, sorunlar, koşular ve viki sayfaları) kaybolacak! :-(","CONFIRM":"Evet, kesinlikle eminim"},"ASSIGNED_TO":{"SELECT":"Atananı seç","SEARCH":"Kullanıcıları ara"},"ADD_MEMBER":{"TITLE":"Yeni üye","PLACEHOLDER":"Kullanıcıları süzün ya da davet etmek için e-posta yazın","ADD_EMAIL":"e-posta ekle","REMOVE":"Kaldır","INVITE":"Davet et","CHOOSE_ROLE":"Rol seçiniz","PLACEHOLDER_INVITATION_TEXT":"(Opsiyonel) Davetinize kişiselleştirilmiş bir metin ekleyin. Yeni üyelerinize tatlı bir şeyler söyleyin ;-)","HELP_TEXT":"Eğer kullanıcılar önceden Taigaya kayıt olmuşlarsa, otomatik olarak ekleneceklerdir. Eğer olmamışlarsa bir davet mektubu alacaklardır."},"FEEDBACK":{"TITLE":"Bize birşeyler anlat..","COMMENT":"...bir hata, biraz öneri, biraz klas... ya da Taiga ile en kötü kabusunuz","ACTION_SEND":"Geribildirim Gönder"},"SEARCH":{"TITLE":"Ara","PLACEHOLDER_SEARCH":"Neye bakıyorsunuz?"},"ADD_EDIT_SPRINT":{"TITLE":"Yeni koşu","PLACEHOLDER_SPRINT_NAME":"koşu adı","PLACEHOLDER_SPRINT_START":"Tahmini Başlangıç","PLACEHOLDER_SPRINT_END":"Tahmini Bitiş","ACTION_DELETE_SPRINT":"Bu koşuyu silmek istiyor musunuz?","TITLE_ACTION_DELETE_SPRINT":"koşuyu sil","LAST_SPRINT_NAME":"Son koşu {{lastSprint}} ;-)"},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"Yeni Görev","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Görevi Düzenle","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"Sorun Ekle","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"Koşuyu sil"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Opsiyonel) Davetinize kişiselleştirilmiş bir metin ekleyin. Yeni üyelerinize tatlı bir şeyler söyleyin ;-)","PLACEHOLDER_TYPE_EMAIL":"Bir e-posta girin","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Maalesef bu proje sahipsiz olarak terkedilemez","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Proje sahibi değişikliği iste"}},"CHANGE_OWNER":{"TITLE":"Kimin yeni proje sahibi olmasını istersiniz?","ADD_COMMENT":"Yorum ekle","BUTTON":"Şu proje katılımcısından yeni proje sahibi olmasını iste"},"CONTACT_PROJECT":{"TITLE":"e-posta gönder","WARNING":"Bu e-posta proje yöneticileri tarafından alıncak","PLACEHOLDER":"Mesajınızı yazın","SEND":"Gönder"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"Proje nedir?","CHOOSE_PROJECT_FROM":"Proje nedir?","SUBJECT":"Konu","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Arama kriterlerinize uyan bir kayıt bulunamadı"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Destan {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Durum: {{epicStatus }}. Açıklama: {{epicDescription}}","SECTION_NAME":"Destan","ERROR_UNLINK_RELATED_USERSTORY":"Bağlantıyı koparamıyoruz: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"İlişki yarat: ","NEW_USERSTORY":"Yeni kullanıcı hikayesi","EXISTING_USERSTORY":"Var olan kullanıcı hikayesi","CHOOSE_PROJECT_FOR_CREATION":"Hangi proje?","SUBJECT":"Konu","SUBJECT_BULK_MODE":"Konu (toplu giriş)","CHOOSE_PROJECT_FROM":"Hangi proje?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"Bu projenin henüz Kullanıcı Hikayesi yok. Lütfen başka proje seçiniz.","NO_USERSTORIES_FOUND":"Arama kriterlerinize uyan bir kayıt bulunamadı","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Destan sil"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Kullanıcı Hikayesi {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Durum: {{userStoryStatus }}. Tamamlanan {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} of {{userStoryTotalTasks}} tasks closed). Puanlar: {{userStoryPoints}}. Tanım: {{userStoryDescription}}","SECTION_NAME":"Kullanıcı hikayesi","LINK_TASKBOARD":"Görev Panosu","TITLE_LINK_TASKBOARD":"Görev panosuna git","TOTAL_POINTS":"toplam puanlar","ADD":"+ Yeni bir Kullanıcı Hikayesi ekle","ADD_BULK":"Toplu halde yeni Kullanıcı Hikayeleri ekle","PROMOTED":"Bu hikayenin temelindeki sorun:","TITLE_LINK_GO_TO_ISSUE":"Talebe git","TITLE_DELETE_ACTION":"Kullanıcı Hikayesi Sil","LIGHTBOX_TITLE_BLOKING_US":"Bizi engelleyen","NOT_ESTIMATED":"Kestirim yapılmamış","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Taiga Tribe'da Gig olarak yayınla","PUBLISH_INFO":"Daha fazla bilgi","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"Kapat","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Yorum {{user}} tarafından silindi","COMMENTS_COUNT":"{{comments}} Yorum","OLDER_FIRST":"Eskiden yeniye","RECENT_FIRST":"Yeniden eskiye","COMMENT":"Yorum Yap","EDITED_COMMENT":"Düzenlendi:","SHOW_HISTORY":"Tarihçe gör","TYPE_NEW_COMMENT":"Buraya yeni bir yorum yazın","SHOW_DELETED":"Silinmiş yorumları göster","HIDE_DELETED":"Silinmiş yorumu gizle","DELETE":"Yorumu sil","RESTORE":"Yorumu geri yükle","HISTORY":{"TITLE":"Aktivite"}},"ACTIVITY":{"TITLE":"Aktivite","ACTIVITIES_COUNT":"{{activities}} Aktivite","TAGS_ADDED":"eklenen etiketler:","TAGS_REMOVED":"etiketler kaldırıldı:","US_POINTS":"{{role}} puanı","NEW_ATTACHMENT":"yeni eklenti:","DELETED_ATTACHMENT":"silinmiş eklenti:","UPDATED_ATTACHMENT":"eklenti güncellendi ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"özel öznitelik yaratıldı","UPDATED_CUSTOM_ATTRIBUTE":"özel öznitelik güncellendi","BECAME_DEPRECATED":"kaldırıldı olarak işaretlendi","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Takım Gereksinimi","CLIENT_REQUIREMENT":"İstemci Gereksinimi","BLOCKED":"Engelli","VALUES":{"NOT_SET":"not set","UNASSIGNED":"atama yok"},"FIELDS":{"SUBJECT":"konu","DESCRIPTION":"tanım","PRIORITY":"öncelik","SEVERITY":"önem derecesi","STATUS":"durum","TYPE":"tip","ASSIGNED_TO":"atanmış","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"koşu","COLOR":"renk"}},"BACKLOG":{"PAGE_TITLE":"Havuz - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin koşuları ve kullanıcı hikayeleriyle birlikte havuz paneli: {{projectDescription}}","SECTION_NAME":"Havuz","CUSTOMIZE_GRAPH":"Havuz grafiğinizi özelleştirin","CUSTOMIZE_GRAPH_TEXT":"Projenizin gelişimini görebileceğiniz güzel bir grafik için koşu ve puanları ayarlayın","CUSTOMIZE_GRAPH_ADMIN":"Yönetim","CUSTOMIZE_GRAPH_TITLE":"Yönetimden puan ve koşuları ayarlayın","MOVE_US_TO_CURRENT_SPRINT":"Şimdiki Koşuya Taşı","MOVE_US_TO_LATEST_SPRINT":"Son koşuya taşı","EMPTY":"Havuz bomboş!","CREATE_NEW_US":"Yeni bir KH oluştur","CREATE_NEW_US_EMPTY_HELP":"Yeni bir kullanıcı hikayesi oluşturmak isteyebilirsiniz","EXCESS_OF_POINTS":"Puan bolluğu","PENDING_POINTS":"Bekleyen Puanlar","CLOSED_POINTS":"kapatıldı","COMPACT_SPRINT":"Kısa koşu","GO_TO_TASKBOARD":" {{::name}} görev panosuna git ","EDIT_SPRINT":"Koşuyu düzenle","TOTAL_POINTS":"toplam","STATUS_NAME":"Durum Adı","SORTABLE_FILTER_ERROR":"Filtreler açıkken sürükle bırak yapamazsınız","DOOMLINE":"Proje Kapsamı","CHART":{"XAXIS_LABEL":"Koşular","YAXIS_LABEL":"Puanlar","OPTIMAL":"\"{{sprintName}}\" koşusu için ideal puan {{value}} olmalı","REAL":"\"{{sprintName}}\" koşusunda gerçekte kalan puan {{value}}","INCREMENT_TEAM":" {{sprintName}} koşusu için müşteri gereksinimleri nedeniyle artırılan puan {{value}}","INCREMENT_CLIENT":" {{sprintName}} koşusu için takım gereksinimleri nedeniyle artırılan puan {{value}}"},"TAGS":{"TOGGLE":"Etiket görünürlüğünü değiştir","SHOW":"Etiketleri göster","HIDE":"Etiketleri gizler"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Havuzu göster","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Kullanıcı Hikayeleri ","TITLE_COLUMN_POINTS":"Her rol için görünüm seç"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"toplam
    puan","COMPLETED_POINTS":"tamamlanmış
    puanlar","OPEN_TASKS":"açık
    görevler","CLOSED_TASKS":"kapatılmış
    görevler","IOCAINE_DOSES":"baldıran zehri
    dozu","SHOW_STATISTICS_TITLE":"İstatistikleri göster","TOGGLE_BAKLOG_GRAPH":"Eritme grafiğini göster/gizle","POINTS_PER_ROLE":"Rol başına düşen puan"},"SUMMARY":{"PROJECT_POINTS":"proje
    puanları","DEFINED_POINTS":"tanımlı
    puanlar","CLOSED_POINTS":"kapatılmış
    puanlar","POINTS_PER_SPRINT":"puanlar /
    koşu"},"FILTERS":{"TOGGLE":"Filtrelerin görünürlüğünü değiştir","HIDE":"Filtreleri Gizle","SHOW":"Filtreleri Göster"},"SPRINTS":{"TITLE":"KOŞULAR","DATE":"DD MM YYYY","LINK_TASKBOARD":"Koşu İş Panosu","TITLE_LINK_TASKBOARD":"\"{{name}}\" görev panosuna git","EMPTY":"Henüz hiç koşu yok","WARNING_EMPTY_SPRINT_ANONYMOUS":"Bu koşuda hiç kullanıcı hikayesi yok.","WARNING_EMPTY_SPRINT":"Yeni bir koşu başlatmak icin havuzdan buraya hikaye taşıyın","TITLE_ACTION_NEW_SPRINT":"Yeni koşu ekle","TEXT_ACTION_NEW_SPRINT":"Projenizde yeni bri koşu oluşturmak isteyebilirsiniz","ACTION_SHOW_CLOSED_SPRINTS":"Kapatılmış koşuları göster","ACTION_HIDE_CLOSED_SPRINTS":"Kapatılmış koşuları gizle"}},"ERROR":{"TEXT1":"Birşeyler oldu ve bizim Honki ponkilerimiz üzerinde çalışıyor.","NOT_FOUND":"Bulunamadı","NOT_FOUND_TEXT":"Hata 404. Baktığınız sayfa mevcut değil. Belki TAIGA ana sayfasına geri dönerek aradığınızı bulabilirsiniz.","PERMISSION_DENIED":"İzin verilmedi","PERMISSION_DENIED_TEXT":"Bu sayfaya erişim izniniz yok.","VERSION_ERROR":"Honki ponkilerimiz yaptığınız değişiklikleri uygulamadan önce Taiga da çalışan birileri farklı bir değişiklik yapmış. Lütfen sayfayı yeniden yükleyin ve değişikliklerinizi yeniden uygulayın(yenileme ile değişiklikler kaybolabilir)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Koşu İş Panosu - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin koşusu {{sprintName}} ( {{startDate}} - {{endDate}} tarihleri arası) . %{{completedPercentage}} tamam. ({{totalPoints}} puandan {{completedPoints}} bitmiş). {{totalTasks}} işten {{openTasks}} tanesi açık.","SECTION_NAME":"Görev Panosu","TITLE_ACTION_ADD":"Yeni bir Görev ekle","TITLE_ACTION_ADD_BULK":"Toplu halde yeni bir kaç görev ekle","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"Görev ata","PLACEHOLDER_CARD_TITLE":"Bu bir görev olabilir","PLACEHOLDER_CARD_TEXT":"Hikayeleri ve görevleri birbirinden ayırın ve öyle izleyin","TABLE":{"COLUMN":"Kullanıcı hikayesi","TITLE_ACTION_FOLD":"Sütun Katla","TITLE_ACTION_UNFOLD":"Sütun katını aç","TITLE_ACTION_FOLD_ROW":"Satın Katla","TITLE_ACTION_UNFOLD_ROW":"Satır katını aç","FIELD_POINTS":"puanlar","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Günler","YAXIS_LABEL":"Puanlar","OPTIMAL":"{{formattedDate}} günü için ideal kalan puan {{roundedValue}} olmalı","REAL":"{{formattedDate}} günü gerçekten kalan puan {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Görev {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Durum: {{taskStatus }}. Tanım: {{taskDescription}}","SECTION_NAME":"Görev","LINK_TASKBOARD":"Görev Panosu","TITLE_LINK_TASKBOARD":"Görev panosuna git","PLACEHOLDER_SUBJECT":"Yeni görev konusunu gir","TITLE_SELECT_STATUS":"Durum Adı","OWNER_US":"Bu görevin ait olduğu","TITLE_LINK_GO_OWNER":"Kullanıcı hikayesine git","TITLE_DELETE_ACTION":"Görev Sil","LIGHTBOX_TITLE_BLOKING_TASK":"Engelleyen iş","FIELDS":{"IS_IOCAINE":"baldıran zehri"},"TITLE_ACTION_IOCAINE":"Bir görev size ağır geldi ve bunaldınız mı? Diğerlerinin bu durumdan haberi olması için bir görevi düzenlerken baldıran zehrinin(temsili) üzerine tıklayın. Nasıl ki zaman zaman ekstra meydan okumalarla bir işte gittikçe iyi olmanız mümkünse, zaman içerisinde küçük dozlar alarak bu ölümcül zehre de bağışıklık kazanabilmek mümkün!"},"NOTIFICATION":{"OK":"Herşey mükemmel","WARNING":"Amanın, birşeyler oldu..","WARNING_TEXT":"Honki ponkilerimiz üzgün, yaptığınz değişiklikler kaydedilemedi!","SAVED":"Honki ponkilerimiz tüm değişikliklerinizi kaydetti!","CLOSE":"Bildirimleri kapat","MAIL":"Posta ile Bildirim","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Silmek istediğinizden emin misiniz?"},"CANCEL_ACCOUNT":{"TITLE":"Hesabınızı iptal edin","SUBTITLE":"Taigadan ayrıldığınız için üzüldük, umarım kaldığınız sürece sizi memnun kılmışızdır :)","PLACEHOLDER_INPUT_TOKEN":"hesap kuponunu iptal et","ACTION_LEAVING":"Evet, ayrılıyorum!","SUCCESS":"Honki ponkilerimiz hesabınızı sildi"},"CHANGE_EMAIL_FORM":{"TITLE":"E-postanı değiştir","SUBTITLE":"Bir tık daha ve e-postanız güncellenecek!","PLACEHOLDER_INPUT_TOKEN":"e-posta kuponunu değiştir","ACTION_CHANGE_EMAIL":"E-posta değiştir","SUCCESS":"Honki ponkiler e-postanızı güncelledi"},"ISSUES":{"PAGE_TITLE":"Sorunlar - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin sorun listesi paneli: {{projectDescription}}","SECTION_NAME":"Sorun","ACTION_NEW_ISSUE":"+ YENİ SORUN","ACTION_PROMOTE_TO_US":"Kullanıcı Hikayesine Terfi Ettir","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"Bu sorun, kullanıcı hikayesine yükseltildi:","EXTERNAL_REFERENCE":"Bu talebin oluşturulduğu ","GO_TO_EXTERNAL_REFERENCE":"Kökenine git","ACTION_DELETE":"Sorun sil","LIGHTBOX_TITLE_BLOKING_ISSUE":"Engelleyen sorun","LINK_TASKBOARD":"Görev Panosu","TITLE_LINK_TASKBOARD":"Görev panosuna git","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Öncelik","SEVERITY":"Önem Durumu","TYPE":"Tip"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Bu talebi yeni bir kullanıcı hikayesi olacak şekilde terfi ettirin","MESSAGE":"Bu sorundan yeni bir hikaye oluşturmak istediğinize emin misiniz?"},"TABLE":{"COLUMNS":{"TYPE":"Tip","SEVERITY":"Önem Derecesi","PRIORITY":"Öncelik","SUBJECT":"Konu","VOTES":"Oylar","STATUS":"Durum","MODIFIED":"Değiştirilmiş","ASSIGNED_TO":"Atanmış"},"TITLE_ACTION_CHANGE_STATUS":"Durumu değiştir","TITLE_ACTION_ASSIGNED_TO":"Atanmış","BLOCKED":"Engelli","EMPTY":{"TITLE":"Bildirilen sorun yok :)","SUBTITLE":"Bir sorun mu buldunuz?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Sorun {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Durum: {{issueStatus }}. Tip: {{issueType}}, Öncelik: {{issuePriority}}. Önem: {{issueSeverity}}. Tanı: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Kanban - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}} projesinin kullanıcı hikayeleriyle birlikte kanban paneli: {{projectDescription}}","SECTION_NAME":"Kanban","TITLE_ACTION_FOLD":"Sütun Katla","TITLE_ACTION_UNFOLD":"Sütun katını aç","TITLE_ACTION_ADD_US":"Yeni Kullanıcı Hikayesi Ekle","TITLE_ACTION_ADD_BULK":"Yeni toplu ekle","ACTION_SHOW_ARCHIVED":"Arşivlenmişleri Göster","ACTION_HIDE_ARCHIVED":"Arşivlenmişleri gizle","HIDDEN_USER_STORIES":"Bu durumdaki kullanıcı hikayeleri otomatik olarak gizlenir","PLACEHOLDER_CARD_TITLE":"Bunlar Kullanıcı Hikayeleriniz","PLACEHOLDER_CARD_TEXT":"Gereksinimleri ayrıştırmak için hikayeler alt görevlere sahip olabilirler"},"SEARCH":{"PAGE_TITLE":"Ara - {{projectName}}","PAGE_DESCRIPTION":"Projedeki hikayeleri, sorunları, işleri, viki sayfalarını ya da herhangi bir şeyi arayın {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Destanlar","FILTER_USER_STORIES":"Kullanıcı Hikayeleri","FILTER_ISSUES":"Sorunlar ","FILTER_TASKS":"Görevler","FILTER_WIKI":"Wiki Sayfaları","PLACEHOLDER_SEARCH":"Aranan konum...","TITLE_ACTION_SEARCH":"ara","EMPTY_TITLE":"Görünüşe göre arama kriterinize göre hiç bir şey bulunamadı","EMPTY_DESCRIPTION":"Üstteki sekmelerden birini deneyin ya da yeniden arayın"},"TEAM":{"PAGE_TITLE":"Takım - {{projectName}}","PAGE_DESCRIPTION":"Projedeki üyelerin tümünü göstermek için takım paneli {{projectName}}: {{projectDescription}}","SECTION_NAME":"Takım","PLACEHOLDER_INPUT_SEARCH":"Tam ad ile ara","COLUMN_MR_WOLF":"Reyiz","EXPLANATION_COLUMN_MR_WOLF":"Kapatılmış sorunlar","COLUMN_IOCAINE":"Baldıran İçici","EXPLANATION_COLUMN_IOCAINE":"içilen baldıran miktarı","COLUMN_CERVANTES":"Katip","EXPLANATION_COLUMN_CERVANTES":"Düzenlenmiş Wiki sayfaları","COLUMN_BUG_HUNTER":"Böcek Avcısı","EXPLANATION_COLUMN_BUG_HUNTER":"Bildirilen sorunlar","COLUMN_NIGHT_SHIFT":"Akşamcı","EXPLANATION_COLUMN_NIGHT_SHIFT":"Kapatılmış görevler","COLUMN_TOTAL_POWER":"Toplam Güç","EXPLANATION_COLUMN_TOTAL_POWER":"Toplam Puanlar","SECTION_TITLE_TEAM":"Takım >","SECTION_FILTER_ALL":"Hepsi","CONFIRM_LEAVE_PROJECT":"Projeden ayrılmak istediğine emin misin?","ACTION_LEAVE_PROJECT":"Bu projeden ayrıl"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Max. boyut: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Kullanıcı Ayarları","USER_PROFILE":"Kullanıcı profili","CHANGE_PASSWORD":"Parolayı değiştir","EMAIL_NOTIFICATIONS":"E-posta bildirimleri","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"E-posta Bildirimleri","COLUMN_PROJECT":"Proje","COLUMN_RECEIVE_ALL":"Hepsini al","COLUMN_ONLY_INVOLVED":"Sadece İlgililer","COLUMN_NO_NOTIFICATIONS":"Bildirimler kapalı","OPTION_ALL":"Hepsi","OPTION_INVOLVED":"İlgili","OPTION_NONE":"Hiçbiri"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Proje","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Proje"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Varsayılan resmi kullan","ACTION_DELETE_ACCOUNT":"Taiga hesabını sil","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Gelen kutunuzu kontrol edin!
    Yeni adresinizi belirlemek için gerekli
    yönergeleri içeren postayı gönderdik","CHANGE_PHOTO":"Resim değiştir","FIELD":{"USERNAME":"Kullanıcı adı","EMAIL":"E-posta","FULL_NAME":"Tam isim","PLACEHOLDER_FULL_NAME":"Tam adınızı giriniz (ör. Bilge Tonyukuk)","BIO":"Bio (max. 210 karakter)","PLACEHOLDER_BIO":"Bize kendin hakkında bir şeyler söyle","LANGUAGE":"Dil","LANGUAGE_DEFAULT":"-- varsayılan dili kullan --","THEME":"Tema","THEME_DEFAULT":"-- varsayılan temayı kullan --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Wiki - {{projectName}}","PAGE_DESCRIPTION":"Son sürüm {{lastModifiedDate}} ({{totalEditions}} toplamda sürüm sayısı) İçerik: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"Bu wiki sayfasını sil","DELETE_LIGHTBOX_TITLE":"Wiki Sayfası Sil","DELETE_LINK_TITLE":"Wiki bağlantısı sil","NAVIGATION":{"HOME":"Ana Sayfa","SECTION_NAME":"YER İMLERİ","ACTION_ADD_LINK":"Yer imi ekle","ALL_PAGES":"Tüm Wiki sayfaları"},"SUMMARY":{"TIMES_EDITED":"kere
    düzenlendi","LAST_EDIT":"son
    düzenleme","LAST_MODIFICATION":"son düzenleme"},"SECTION_PAGES_LIST":"Tüm sayfalar","PAGES_LIST_COLUMNS":{"TITLE":"Başlık","EDITIONS":"Editions","CREATED":"Oluşturuldu","MODIFIED":"Değiştirilmiş","CREATOR":"Başlatan","LAST_MODIFIER":"Son düzenleyen"}},"HINTS":{"SECTION_NAME":"İpucu","LINK":"Nasıl kullanılacağını öğrenmek isterseniz destek sayfamıza bekleriz","LINK_TITLE":"Destek sayfamızı ziyaret edin","HINT1_TITLE":"Projeleri içe ya da dışarı aktarabileceğinizi biliyor muydunuz?","HINT1_TEXT":"Bu bir Taiga da yer alan tüm verilerinizi çıkararak diğerine taşımanıza olanak sağlar.","HINT2_TITLE":"Özel alanlar oluşturabileceğinizi biliyor muydunuz?","HINT2_TEXT":"Takımlar artık kendi iş akışlarına özgü bilgileri girebilecekleri özel alanlar oluşturabilirler","HINT3_TITLE":"Projelerinizi, sizi en çok ilgilendirenleri öne çıkartacak şekilde sıralayın.","HINT3_TEXT":"10 proje üstteki doğrudan erişim bölümünde gözükür","HINT4_TITLE":"Nerede kaldığınızı unuttunuz mu?","HINT4_TEXT":"Kaygılanmayın, çalışma sıranıza göre ayarlanan açık işlerinize, sorunlarınıza ve kullanıcı hikayelerinize panonuzdan erişebilirsiniz."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} kullanıcısı {{obj_name}} 'ye bir yeni ek yükledi","US_CREATED":"{{project_name}} projesinde yer alacak {{us_name}} adlı yeni bir KH, {{username}} tarafından oluşturuldu","ISSUE_CREATED":"{{username}}, {{project_name}} projesinde yeni sorun ({{obj_name}}) oluşturdu","TASK_CREATED":"{{project_name}} projesindeki yeni görev {{obj_name}}, {{username}} tarafından oluşturuldu","TASK_CREATED_WITH_US":" {{project_name}} projesinde yer alan {{us_name}} adlı KH ya ait yeni bir görev {{obj_name}}, {{username}} tarafından oluşturuldu","WIKI_CREATED":"{{project_name}} projesindeki yeni wiki sayfası {{obj_name}}, {{username}} tarafından oluşturuldu","MILESTONE_CREATED":"{{project_name}} projesinde {{obj_name}} koşusu, {{username}} tarafından oluşturuldu","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{project_name}} proje {{username}} tarafından oluşturuldu","MILESTONE_UPDATED":" {{obj_name}} koşusu {{username}} tarafından güncellendi","US_UPDATED":"{{username}} kullanıcısı, {{obj_name}} KH 'sinin \"{{field_name}}\" alanını güncelledi. ","US_UPDATED_WITH_NEW_VALUE":"{{username}}, {{obj_name}} hikayesinin {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","US_UPDATED_POINTS":"{{username}}, {{obj_name}} hikayesinin {{role_name}} puanını {{new_value}} yaptı","ISSUE_UPDATED":"{{obj_name}} talebinin \"{{field_name}}\" özniteliği {{username}} tarafından güncellendi. ","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}}, {{obj_name}} sorununun {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","TASK_UPDATED":"{{username}}, {{obj_name}} işinin {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","TASK_UPDATED_WITH_NEW_VALUE":"{{username}}, {{obj_name}} işinin {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","TASK_UPDATED_WITH_US":"{{us_name}} adlı KH'ye ait {{obj_name}} talebinin \"{{field_name}}\" özniteliği {{username}} tarafından güncellendi. ","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}}, {{us_name}} hikayesindeki {{obj_name}} işinin {{field_name}} özelliğini {{new_value}} olacak şekilde değiştirdi","WIKI_UPDATED":"{{obj_name}} adlı wiki sayfası {{username}} tarafından güncellendi","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}}, {{obj_name}} adlı destanın \"{{field_name}}\" alanını olarak değiştirdi","NEW_COMMENT_US":" {{obj_name}} KH'sine {{username}} tarafından yorum yapıldı","NEW_COMMENT_ISSUE":" {{obj_name}} talebine {{username}} tarafından yorum yapıldı","NEW_COMMENT_TASK":" {{obj_name}} görevine {{username}} tarafından yorum yapıldı","NEW_COMMENT_EPIC":"{{username}}, {{obj_name}} destanına bir yorum ekledi","NEW_MEMBER":"{{project_name}} projesi yeni bir üyeye sahip","US_ADDED_MILESTONE":" {{username}}, {{sprint_name}} koşusuna {{obj_name}} hikayesini ekledi","US_MOVED":"{{username}}, {{obj_name}} hikayesini taşıdı","US_REMOVED_FROM_MILESTONE":"{{username}} havuza {{obj_name}} hikayesini ekledi","BLOCKED":"{{obj_name}}, {{username}} tarafından engellendi","UNBLOCKED":"{{obj_name}} nin engeli {{username}} tarafından kaldırıldı ","NEW_USER":"{{username}} Taiga ya katıldı","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"Sorun","TASK":"Görev"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"Bir dış uygulama oturum açmayı gerektiriyor","PAGE_DESCRIPTION":"Bir dış uygulama oturum açmayı gerektiriyor","AUTHORIZATION_REQUEST":"Taiga hesabınızı kullanması için {{application}} uygulamasına izin verin?","LOGIN_WITH_ANOTHER_USER":"Başka kullanıcı ile oturum açın","AUTHORIZE_APP":"Uygulamayı yetkilendir","CANCEL":"İptal"},"JOYRIDE":{"NAV":{"NEXT":"İleri","BACK":"Arka","SKIP":"Geç","DONE":"Bitmiş"},"DASHBOARD":{"STEP1":{"TITLE":"Projeniz","TEXT":"Hoşgeldiniz! Burada dahil olduğunuz projeleri göreceksiniz."},"STEP2":{"TITLE":"Üzerinde çalışılıyor","TEXT":"Burada üzerinde çalıştığınız hikayeleri, işleri ve sorunları göreceksiniz."},"STEP3":{"TITLE":"İzliyor","TEXT1":"Ve burada da projenizde bilmek isteyebileceklerinizi bulacaksınız.","TEXT2":"Zaten Taiga ile birlikte çalışmaktasınız ;)"},"STEP4":{"TITLE":"Hadi başlayın","TEXT1":"İlk Taiga projenizi oluşturarak başlayabilirsiniz.","TEXT2":"İyi şanslar!"}},"BACKLOG":{"STEP1":{"TITLE":"Proje özeti","TEXT1":"Buradan projenizin durumunu görebilirsiniz.","TEXT2":"Yönetim bölümünde ile her türlü proje ayarlarını değiştirebilirsiniz."},"STEP2":{"TITLE":"Ürün havuzu","TEXT":"Havuz, proje gereksinimlerinin (Kullanıcı Hikayeleri) sıralı listesidir. Koşularınızı planlayacağınız yer burasıdır."},"STEP3":{"TITLE":"Koşular","TEXT":"Koşular, belirlenmiş bir iş yükünün bitirilip teslim edilmesi beklenen tanımlı, kısa (genellikle 2'şer haftalık) zaman dilimleridir."},"STEP4":{"TITLE":"Kullanıcı Hikayeleri ","TEXT":"Bunlar üst seviye gereksinimler. Bunları önce havuza ekleyip sonra da teslim edilmeleri gereken koşuya çekebilirsiniz."}},"KANBAN":{"STEP1":{"TITLE":"İş akışınızı düzenleyin","TEXT":"İş akışı adımlarınıza eşleşen sütunları yönetim bölümünden ayarlayın."},"STEP2":{"TITLE":"Kullanıcı Hikayeleri & Görevleri","TEXT":"Kullanıcı hikayeleri üst düzey gereksinimlerdir. Onları farklı kolonlara taşıyabilirsiniz."},"STEP3":{"TITLE":"Kullanıcı hikayesi eklemek","TEXT1":"Kullanıcı Hikayelerini tek tek (KH ekle ikonu) veya toptan (toptan ikonu) girmek isteyebilirsiniz","TEXT2":"İyi şanslar!"}}},"DISCOVER":{"PAGE_TITLE":"Projeleri keşfedin - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Proje keşfedin","DISCOVER_SUBTITLE":"{projects, plural, one{Keşfedilecek bir açık proje} other{Keşfedilecek # açık proje}}","MOST_ACTIVE":"En hareketli","MOST_ACTIVE_EMPTY":"Henüz AKTİF proje yok","MOST_LIKED":"En beğenilen","MOST_LIKED_EMPTY":"Henüz BEĞENİLEN proje yok","VIEW_MORE":"Daha fazlası","FEATURED":"Önemli projeler","EMPTY":"Bu arama ölçütlerine göre gösterilebilecek bir proje çıkmadı.
    Tekrar deneyin!","FILTERS":{"ALL":"Hepsi","KANBAN":"Kanban","SCRUM":"Scrum","PEOPLE":"İnsan arıyor","WEEK":"Geçen hafta","MONTH":"Geçen ay","YEAR":"Geçen yıl","ALL_TIME":"Tüm zamanlar","CLEAR":"Filtreleri kaldır"},"SEARCH":{"PAGE_TITLE":"Arama - Proje keşfedin - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Birşeyler yazın...","ACTION_TITLE":"Ara","RESULTS":"Arama sonuçları"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-uk.json b/dist/v-1549282893552/locales/taiga/locale-uk.json new file mode 100644 index 0000000..c60d30f --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-uk.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Так","NO":"Ні","OR":"або","I_GET_IT":"Гаразд, я зрозумів","LOADING":"Завантаження...","DATE":"DD.MM.YYYY","DATETIME":"DD.MM.YYYY HH:mm","SAVE":"Зберегти","CANCEL":"Скасувати","ACCEPT":"Прийняти","DELETE":"Видалити","UNLINK":"Видалити прив'язку","CREATE":"Створити","ADD":"Додати","COPY_TO_CLIPBOARD":"Скопіювати до буферу обміну","COPIED_TO_CLIPBOARD":"Текст скопійовано до буферу обміну","EDIT":"Редагувати","DRAG":"Перетягнути","TAG_LINE":"Ваш гнучкий, безкоштовний з відкритим кодом засіб керування проектом","TAG_LINE_2":"ЛЮБИТЬ ВАШ ПРОЕКТ","BLOCK":"Заблокувати","BLOCK_TITLE":"Заблокуйте цей запис, коли він, наприклад, має залежності, які Ви не можете виконати","BLOCKED":"Заблокований","UNBLOCK":"Розблокувати","UNBLOCK_TITLE":"Розблокувати цей запис","BLOCKED_NOTE":"Чому це заблоковано?","BLOCKED_REASON":"Будь ласка, поясніть причину","CREATED_BY":"Створено {{fullDisplayName}}","CLOSE":"закрити","GO_HOME":"Заберіть мене додому","PLUGINS":"Модулі","ONE_ITEM_LINE":"Один запис на рядок...","NEW_BULK":"Нова масова вставка","SUBTASKS":"Підзавдання","PREVIOUS":"Попередній","NEXT":"Наступний","LOGOUT":"Вийти","EXTERNAL_USER":"зовнішній користувач","GENERIC_ERROR":"Один з наших Oompa Loompas говорить {{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Вимога клієнта - це нова вимога, яка раніше не очікувалась, і вона повинна бути частиною проекту","TEAM_REQUIREMENT":"Вимога команди - це вимога, яка повинна існувати в проекті, але не повинна мати жодних витрат для клієнта","OWNER":"Власник проекту","CAPSLOCK_WARNING":"Будьте обережні! Ви використовуєте великі літери у полі вводу, яке чутливе до регістру.","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Ви дійсно хочете закрити режим редагування?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Пам'ятайте: якщо Ви закриєте режим редагування без збереження, всі зміни будуть втрачені","RELATED_USERSTORIES":"Пов'язані користувацькі історії","CARD":{"ASSIGN_TO":"Назначити на","EDIT":"Редагувати картку","DELETE":"Delete card","DELETE_ISSUE":"Видалити проблему","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"Здається, це значення не вірне.","TYPE_EMAIL":"Це значення повинно бути дійсною електронною поштою.","TYPE_URL":"Це значення має бути правильною URL-адресою.","TYPE_URLSTRICT":"Це значення має бути правильною URL-адресою.","TYPE_NUMBER":"Це значення має бути правильним числом.","TYPE_DIGITS":"Це значення має бути цифрами.","TYPE_DATEISO":"Це значення має бути правильною датою (РРРР-ММ-ДД).","TYPE_ALPHANUM":"Це значення повинне бути алфавітно-цифровим.","TYPE_PHONE":"Це значення має бути дійсним номером телефону.","NOTNULL":"Це значення не повинно бути нульовим.","NOT_BLANK":"Це значення не повинно бути порожнім.","REQUIRED":"Це обов'язкове поле.","REGEXP":"Здається, це значення не вірне.","MIN":"Це значення повинне бути більшим або рівним %s.","MAX":"Це значення повинне бути менше або рівне %s.","RANGE":"Значення повинне бути між %s та %s.","MIN_LENGTH":"Це значення надто коротке. Воно повинно мати %s символів або більше.","MAX_LENGTH":"Це значення надто довге. Воно повинно мати %s символів або менше.","RANGE_LENGTH":"Довжина цього значення не вірна. Воно повинне бути довжиною від %s до %s символів.","MIN_CHECK":"Ви повинні зробити принаймні %s вибір (виборів).","MAX_CHECK":"Ви повинні знобити %s виборів або менше.","RANGE_CHECK":"Ви повинні вибрати від %s до %s записів.","EQUAL_TO":"Це значення повинно бути таким же.","LINEWIDTH":"Можливо однин чи більше рядків занадто довгі. Спробуйте триматись до %s символів.","PIKADAY":"Помилковий формат дати, будь ласка, використовуйте ДД.ММ.РРРР (наприклаю, 23.03.1984)"},"PICKERDATE":{"FORMAT":"DD.MM.YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"Попередній місяць","NEXT_MONTH":"Наступний місяць","MONTHS":{"JAN":"Січень","FEB":"Лютий","MAR":"Березень","APR":"Квітень","MAY":"Травень","JUN":"Червень","JUL":"Липень","AUG":"Серпень","SEP":"Вересень","OCT":"Жовтень","NOV":"Листопад","DEC":"Грудень"},"WEEK_DAYS":{"SUN":"Неділя","MON":"Понеділок","TUE":"Вівторок","WED":"Середа","THU":"Четвер","FRI":"П'ятниця","SAT":"Субота"},"WEEK_DAYS_SHORT":{"SUN":"нд","MON":"пн","TUE":"вт","WED":"ср","THU":"чт","FRI":"пт","SAT":"сб"}},"SEE_USER_PROFILE":"Подивитись профіль користувача {{username }}","USER_STORY":"Історія користувача","TASK":"Завдання","ISSUE":"Проблема","EPIC":"Епік","TAGS":{"PLACEHOLDER":"Введіть мітку","DELETE":"Видалити мітку","ADD":"Додати мітку"},"DESCRIPTION":{"EMPTY":"Порожній простір настільки нудний... продовжуйте з описом...","NO_DESCRIPTION":"Ще немає опису"},"FIELDS":{"SUBJECT":"Тема","NAME":"Ім'я","URL":"URL-адреса","DESCRIPTION":"Опис","VALUE":"Значення","SLUG":"Slug","COLOR":"Колір","IS_CLOSED":"Закритий?","STATUS":"Статус","TYPE":"Тип","SEVERITY":"Важливість","PRIORITY":"Пріоритет","ASSIGNED_TO":"Призначений на","ASSIGNED_USERS":"Assigned users","POINTS":"Кількість очок","IS_BLOCKED":"заблокований","REF":"Посилання","VOTES":"Голоси","SPRINT":"Спринт","DUE_DATE":"Кінцева дата","DUE_DATE_REASON":"Причина кінцевої дати"},"ROLES":{"ALL":"Всі"},"ASSIGNED_TO":{"NOT_ASSIGNED":"Не призначено","ASSIGN":"Назначити","DELETE_ASSIGNMENT":"Видалити назначення","REMOVE_ASSIGNED":"Видалити назначення","TOO_MANY":"...забагато користувачів, продовжуйте фільтрувати","CONFIRM_UNASSIGNED":"Ви впевнені, що хочете залишити це непризначеним?","TITLE_ACTION_EDIT_ASSIGNMENT":"Редагувати назначення","SELF":"Назначити на мене"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Вказати кінцеву дату"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"Закритий","OPEN":"Відкритий"},"WATCHERS":{"WATCHERS":"Відслідковують","ADD":"Додати спостерігачів","TITLE_ADD":"Додати членів команди до списку спостерігачів","DELETE":"Видалити спостерігача","TITLE_LIGHTBOX_DELETE_WARTCHER":"Видалити спостерігача..."},"WATCH_BUTTON":{"WATCH":"Відслідковувати","WATCHING":"Відслідковування","UNWATCH":"Не слідкувати","WATCHERS":"Відслідковують","BUTTON_TITLE":"Відслідковувати/не відслідковувати цей запис","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Проголосувати/скасувати голосування за цей запис","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"Користувацькі поля","SAVE":"Зберегти користувацьке поле","EDIT":"Редагувати користувацьке поле","DELETE":"Видалити користувацький атрибут","CONFIRM_DELETE":"Пам'ятайте: всі значення у цьому власному полі будуть видалені. \nВи дійсно хочете продовжити?"},"FILTERS":{"INPUT_PLACEHOLDER":"Тема або посилання","TITLE_ACTION_FILTER_BUTTON":"пошук","TITLE":"Фільтри","TITLE_ACTION_SEARCH":"Пошук","ACTION_SAVE_CUSTOM_FILTER":"зберегти як користувацький фільтр","PLACEHOLDER_FILTER_NAME":"Напишіть ім'я фільтра та натисніть Enter","APPLIED_FILTERS_NUM":"застосовані фільтри","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"Тип","STATUS":"Статус","SEVERITY":"Важливість","PRIORITIES":"Пріоритети","TAGS":"Мітки","ASSIGNED_TO":"Призначений на","ASSIGNED_USERS":"Assigned users","ROLE":"Роль","CREATED_BY":"Створений","CUSTOM_FILTERS":"Користувацькі фільтри","EPIC":"Епік"}},"WYSIWYG":{"CODE_SNIPPET":"Фрагмент коду","DB_CLICK":"двічі клацніть щоб редагувати","SELECT_LANGUAGE_PLACEHOLDER":"Вибрати мову","SELECT_LANGUAGE_REMOVE_FORMATING":"Видалити форматування","OUTDATED":"Інша особа внесла зміни під час редагування. Перш ніж зберегти зміни, перевірте нову версію на вкладці активності.","MARKDOWN_HELP":"Допомога по синтаксису markdown"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Епіки","VIEW_EPICS":"Переглянути епіки","ADD_EPICS":"Додати епіки","MODIFY_EPICS":"Змінити епіки","COMMENT_EPICS":"Коментувати епіки","DELETE_EPICS":"Видалити епіки"},"SPRINTS":{"NAME":"Спринти","VIEW_SPRINTS":"Переглянути спринти","ADD_SPRINTS":"Додати спринти","MODIFY_SPRINTS":"Змінити спринти","DELETE_SPRINTS":"Видалити спринти"},"USER_STORIES":{"NAME":"Користувацькі Історії","VIEW_USER_STORIES":"Переглянути користувацькі історії","ADD_USER_STORIES":"Додати користувацькі історії","MODIFY_USER_STORIES":"Редагувати користувацькі історії","COMMENT_USER_STORIES":"Коментувати користувацькі історії","DELETE_USER_STORIES":"Видалити користувацькі історії"},"TASKS":{"NAME":"Завдання","VIEW_TASKS":"Переглянути завдання","ADD_TASKS":"Додати завдання","MODIFY_TASKS":"Змінити завдання","COMMENT_TASKS":"Коментувати завдання","DELETE_TASKS":"Видалити завдання"},"ISSUES":{"NAME":"Проблеми","VIEW_ISSUES":"Переглянути проблеми","ADD_ISSUES":"Додати проблеми","MODIFY_ISSUES":"Змінити проблеми","COMMENT_ISSUES":"Коментувати проблеми","DELETE_ISSUES":"Видалити проблеми"},"WIKI":{"NAME":"Вікі","VIEW_WIKI_PAGES":"Переглянути сторінки вікі","ADD_WIKI_PAGES":"Додати сторінки вікі","MODIFY_WIKI_PAGES":"Редагувати сторінки вікі","DELETE_WIKI_PAGES":"Видалити сторінки вікі","VIEW_WIKI_LINKS":"Переглянути посилання вікі","ADD_WIKI_LINKS":"Додати посилання вікі","DELETE_WIKI_LINKS":"Видалити посилання вікі"}}},"LOGIN":{"PAGE_TITLE":"Увійти - Taiga","PAGE_DESCRIPTION":"Вхід до Taiga - платформи керування проектами для розробників і дизайнерів, які займаються стартапами і працюють по гнучкій методології, які хочуть простий гарний інструмент, що перетворює роботу в справжнє задоволення."},"AUTH":{"INVITED_YOU":"запросив Вас до проекту","NOT_REGISTERED_YET":"Ще не зареєстровані?","REGISTER":"Зареєструватись","CREATE_ACCOUNT":"створіть Ваш безкоштовний обліковий запис тут"},"LOGIN_COMMON":{"HEADER":"Я уже маю ім'я у Taiga","PLACEHOLDER_AUTH_NAME":"Ім'я користувача або електронна пошта (чутливе до регістру)","LINK_FORGOT_PASSWORD":"Забули його?","TITLE_LINK_FORGOT_PASSWORD":"Ви забули свій пароль?","ACTION_ENTER":"Введіть","ACTION_SIGN_IN":"Вхід","PLACEHOLDER_AUTH_PASSWORD":"Пароль (чутливий до регістру)","ALT_LOGIN":"Або увійти із"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"Згідно з нашим Oompa Loompas, ваше ім'я користувача / електронна пошта чи пароль невірні.","SUCCESS":"Наш Oompa Loompas задоволений, ласкаво просимо до Taiga."},"REGISTER":{"PAGE_TITLE":"Реєстрація - Taiga","PAGE_DESCRIPTION":"Створіть свій обліковий запис у Taiga - платформі керування проектами для розробників і дизайнерів, які займаються стартапами і працюють по гнучкій методології, які хочуть простий гарний інструмент, що перетворює роботу в справжнє задоволення."},"REGISTER_FORM":{"TITLE":"Зареєструвати новий обліковий запис Taiga (безкоштовно)","PLACEHOLDER_NAME":"Виберіть ім'я користувача (чутливе до регістру)","PLACEHOLDER_FULL_NAME":"Виберіть Ваше повне ім'я","PLACEHOLDER_EMAIL":"Ваша електронна пошта","PLACEHOLDER_PASSWORD":"Вкажіть пароль (чутливий до регістру)","ACTION_SIGN_UP":"Зареєструватись","TITLE_LINK_LOGIN":"Увійти","LINK_LOGIN":"Ви уже зареєстровані? Увійдіть"},"FORGOT_PASSWORD":{"PAGE_TITLE":"Забули пароль - Taiga","PAGE_DESCRIPTION":"Введіть ваше ім'я користувача або електронну пошту, щоб отримати новий пароль і Ви знову матимете доступ до Taiga."},"FORGOT_PASSWORD_FORM":{"TITLE":"Ой, Ви забули свій пароль?","SUBTITLE":"Введіть ваше ім'я користувача чи електронну пошту, щоб отримати нове","PLACEHOLDER_FIELD":"Ім'я користувача або електронна пошта","ACTION_RESET_PASSWORD":"Скинути пароль","LINK_CANCEL":"Ні, поверніть мене назад. Я думаю, я пам'ятаю його.","SUCCESS_TITLE":"Перевірте вхідні листи!","SUCCESS_TEXT":"Ми надіслали Вам електронний лист з інструкціями, яки створити новий пароль","ERROR":"Відповідно до нашого Oompa Loompas, Ви ще не зареєстровані."},"CHANGE_PASSWORD":{"PAGE_TITLE":"Змініть Ваш пароль - Taiga","SECTION_NAME":"Змінити пароль","FIELD_CURRENT_PASSWORD":"Поточний пароль","PLACEHOLDER_CURRENT_PASSWORD":"Ваш поточний пароль (або порожній, якщо Ви ще не маєте паролю)","FIELD_NEW_PASSWORD":"Новий пароль","PLACEHOLDER_NEW_PASSWORD":"Введіть новий пароль","FIELD_RETYPE_PASSWORD":"Введіть ще раз новий пароль","PLACEHOLDER_RETYPE_PASSWORD":"Введіть ще раз новий пароль","ERROR_PASSWORD_MATCH":"Паролі не співпадають"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"Створити новий пароль Taiga","SUBTITLE":"і ей, Ви можливо захочете з'їсти щось багате на залізо, це корисно для Вашого мозку :P","PLACEHOLDER_NEW_PASSWORD":"Новий пароль","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"Підтвердіть новий пароль","ACTION_RESET_PASSWORD":"Скинути пароль","ERROR":"Наш Oompa Loompas не може знайти Ваш запит на відновлення паролю. Спробуйте запитати його ще раз.","SUCCESS":"Наш Oompa Loompas зберіг Ваш новий пароль.
    Спробуйте увійти, використовуючи його."},"INVITATION":{"PAGE_TITLE":"Прийняття запрошення - Taiga","PAGE_DESCRIPTION":"Прийміть запрошення приєднатись до проекту у Taiga - платформі керування проектами для розробників і дизайнерів, які займаються стартапами і працюють по гнучкій методології, які хочуть простий гарний інструмент, що перетворює роботу в справжнє задоволення."},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"Наш Oompa Loompas не може знайти ваше запрошення.","SUCCESS":"Ви успішно приєднались до проекту, ласкаво просимо до {{project_name}}"},"HOME":{"PAGE_TITLE":"Домашня сторінка - Taiga","PAGE_DESCRIPTION":"Домашня сторінка Taiga з Вашими основними проектами та усіма вами призначеними та відслідковуваними користувацькими історіями, завданнями та проблемами","EMPTY_WORKING_ON":"Виглядає порожньо, чи не так? Почніть працювати з Taiga, і Ви побачите тут історії, завдання та проблеми, над якими Ви працюєте.","EMPTY_WATCHING":"Відстежуйте Користувацькі історії, завдання, проблеми Вашого проекту і будьте проінформавані про їх зміни :)","EMPTY_PROJECT_LIST":"У Вас ще немає проектів","WORKING_ON_SECTION":"Працює над","WATCHING_SECTION":"Відслідковування","DASHBOARD":"Інформаційна панель проекту"},"EPICS":{"TITLE":"ЕПІКИ","SECTION_NAME":"Епіки","EPIC":"ЕПІК","PAGE_TITLE":"Епіки - {{projectName}}","PAGE_DESCRIPTION":"Список епіків проекту {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ДОДАТИ ЕПІК","UNASSIGNED":"Не призначено"},"EMPTY":{"TITLE":"Схоже, що тут ще немає епіків","EXPLANATION":"Епіки - елементи на більш високому рівні, що охоплюють користувацькі історії.
    Епії знаходяться на вершині ієрархії і можуть бути використані для групування користувацьких історій.","HELP":"Дізнатись більше про епіки"},"TABLE":{"VOTES":"Голоси","NAME":"Ім'я","PROJECT":"Проект","SPRINT":"Спринт","ASSIGNED_TO":"Назначений","STATUS":"Статус","PROGRESS":"Прогрес","VIEW_OPTIONS":"Варіанти перегляду"},"CREATE":{"TITLE":"Новий епік","PLACEHOLDER_DESCRIPTION":"Будь ласка, додайте описовий текст, щоб допомогти іншим краще зрозуміти цей епік","TEAM_REQUIREMENT":"Вимога команди","CLIENT_REQUIREMENT":"Вимоги клієнта","BLOCKED":"Заблокований","BLOCKED_NOTE_PLACEHOLDER":"Чому цей епік заблокований?","CREATE_EPIC":"Створити епік"}},"PROJECTS":{"PAGE_TITLE":"Мої проекти - Taiga","PAGE_DESCRIPTION":"Список зі всіма Вашими проектами, ви можете змінити порядок або створити новий.","MY_PROJECTS":"Мої проекти"},"ATTACHMENT":{"SECTION_NAME":"вкладення","TITLE":"{{ fileName }} завантажений {{ date }}","LIST_VIEW_MODE":"Режим перегляду у вигляді списку","GALLERY_VIEW_MODE":"Режим перегляду у вигляді галереї","DESCRIPTION":"Введіть короткий опис","DEPRECATED":"(застаріле)","DEPRECATED_FILE":"Застаріле?","ADD":"Додати нове вкладення. {{maxFileSizeMsg}}","DROP":"Перетягніть вкладення сюди!","SHOW_DEPRECATED":"+ показати застарілі вкладення","HIDE_DEPRECATED":"- сховати застарілі вкладення","COUNT_DEPRECATED":"({{ counter }} застарілих)","MAX_UPLOAD_SIZE":"Максимальний розмір завантаження {{maxFileSize}}","DATE":"DD.MM.YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"Ми не змогли вивантажити '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"Видалити вкладення...","MSG_LIGHTBOX_DELETE_ATTACHMENT":"вкладення '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"Ми не змогли видалити: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) занадто великий для нашого Oompa Loompas, спробуйте із меншим за ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Попередній","NEXT":"Наступний"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"Редагувати значення","TITLE_ACTION_DELETE_VALUE":"Видалити значення","TITLE_ACTION_DELETE_TAG":"Видалити мітку"},"HELP":"Потрібна допомога? Завітайте на нашу сторінку підтримки!","PROJECT_DEFAULT_VALUES":{"TITLE":"Типові значення","SUBTITLE":"Встановити типові значення для всіх входів селектора."},"MEMBERSHIPS":{"TITLE":"Керувати учасниками","PAGE_TITLE":"Членство - {{projectName}}","ADD_BUTTON":"+ Новий учасник","ADD_BUTTON_TITLE":"Додати нового учасника","UPGRADE_BUTTON":"Оновіть ваш план","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"Цей проект досяг обмеження з ({{members}}) дозволених членів. Якщо Ви хочете збільшити це обмеження - зверніться до адміністратора."},"PROJECT_EXPORT":{"TITLE":"Екпорт","SUBTITLE":"Export your project to save a backup or to create a new one based on this.","EXPORT_BUTTON":"Екпорт","EXPORT_BUTTON_TITLE":"Екпортувати Ваш проект","LOADING_TITLE":"Ми генеруємо Ваш файл дампа","DUMP_READY":"Ваш файл дампа готовий!","LOADING_MESSAGE":"Будь ласка, не закривайте цю сторінку.","ASYNC_MESSAGE":"Ми надішлемо Вам повідомлення, коли буде готово.","SYNC_MESSAGE":"Якщо завантаження не розпочалось автоматично, натисніть тут.","ERROR":"Our Oompa Loompas have some problems generating your dump. Please try it again.","ERROR_BUSY":"Вибачте, наш Oompa Loompas надто перевантажений зараз. Будь ласка, спробуйте через декілька хвилин."},"MODULES":{"TITLE":"Модулі","EPICS":"Епіки","EPICS_DESCRIPTION":"Візуалізуйте та керуйте найбільш стратегічними частинами Вашого проекту","BACKLOG":"Невиконана робота","BACKLOG_DESCRIPTION":"Manage your user stories to maintain an organized view of upcoming and prioritized work.","NUMBER_SPRINTS":"Очікувана кількість спринтів","NUMBER_SPRINTS_HELP":"0 для невизначеного числа","NUMBER_US_POINTS":"Очікувана загальна кількість очок історій","NUMBER_US_POINTS_HELP":"0 для невизначеного числа","KANBAN":"Канбан","KANBAN_DESCRIPTION":"Organize your project in a lean way with this board.","ISSUES":"Проблеми","ISSUES_DESCRIPTION":"Track the bugs, questions and enhancements related to your project. Don't miss anything!","WIKI":"Вікі","WIKI_DESCRIPTION":"Add, modify, or delete content in collaboration with others. This is the right place for your project documentation.","MEETUP":"Зустріч","MEETUP_DESCRIPTION":"Виберіть систему Ваших відеоконференцій","SELECT_VIDEOCONFERENCE":"Вибрати систему відеоконференцій","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"Custom","URL_CHAT_ROOM":"URL of your chat room"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - Профіль проекту - {{projectName}}","PROJECT_DETAILS":"Деталі проекту","PROJECT_NAME":"Назва проекту","TAGS":"Мітки","DESCRIPTION":"Опис","RECRUITING":"Це проект шукає людей?","RECRUITING_MESSAGE":"Кого Ви шукаєте?","RECRUITING_PLACEHOLDER":"Define the profiles you are looking for","FEEDBACK":"Отримати відгук від користувачів Taiga?","PUBLIC_PROJECT":"Публічний проект","PRIVATE_PROJECT":"Приватний проект","PRIVATE_OR_PUBLIC":"Яка різниця між публічними та приватними проектами?","DELETE":"Видалити проект","CHANGE_LOGO":"Змінити лого","ACTION_USE_DEFAULT_LOGO":"Використовувати типове зображення","MAX_PRIVATE_PROJECTS":"You've reached the maximum number of private projects allowed by your current plan","MAX_PRIVATE_PROJECTS_MEMBERS":"Досягнута максимальна кількість членів для приватного проекту","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Власник проекту","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Ви хочете стати новим власником проекту?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"Запит","REQUEST_OWNERSHIP_SUCCESS":"Ми повідомимо власника проекту","CHANGE_OWNER":"Змінити власника","CHANGE_OWNER_SUCCESS_TITLE":"Гаразд, Ваш запит надіслано!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Звіти","SUBTITLE":"Експортуйте дані Вашого проекту у CSV формат та створіть свої власні звіти.","DESCRIPTION":"Download a CSV file or copy the generated URL and open it in your favourite text editor or spreadsheet to make your own project data reports. You will be able to visualize and analyze all your data easily.","HELP":"How to use this on my own spreadsheet?","REGENERATE_TITLE":"Змінити URL","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Видалити URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"звіти епіків","SECTION_TITLE_US":"звіти користувацьких історій","SECTION_TITLE_TASK":"звіти завдань","SECTION_TITLE_ISSUE":"звіт проблем","DOWNLOAD":"Завантажити CSV","URL_FIELD_PLACEHOLDER":"Будь ласка, згенеруйте знову CSV-адресу","TITLE_REGENERATE_URL":"Згенерувати знову CSV-адресу","ACTION_GENERATE_URL":"Згенерувати Url-адресу","ACTION_REGENERATE":"Регенерувати","TITLE_DELETE_URL":"Видалити CSV-адресу","ACTION_DELETE_URL":"Видалити"},"CUSTOM_FIELDS":{"TITLE":"Користувацькі поля","SUBTITLE":"Вкажіть власні поля для ваших користувацьких історій, завдань та проблем.","EPIC_DESCRIPTION":"Власні поля епіків","EPIC_ADD":"Додати власне поле в епік","US_DESCRIPTION":"Власні поля користувацьких історій","US_ADD":"Додати власне поле у користувацькі історії","TASK_DESCRIPTION":"Власні поля завдань","TASK_ADD":"Додати власне поле у завдання","ISSUE_DESCRIPTION":"Власні поля проблем","ISSUE_ADD":"Додати власне поле у проблеми","FIELD_TYPE_TEXT":"Текст","FIELD_TYPE_RICHTEXT":"Форматований текст","FIELD_TYPE_MULTI":"Багаторядковий","FIELD_TYPE_DATE":"Дата","FIELD_TYPE_URL":"Url","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - Значення проекту - {{projectName}}","REPLACEMENT":"Усі записи із цим значенням будуть замінені на","ERROR_DELETE_ALL":"Ви не можете видалити усі значення."},"PROJECT_VALUES_POINTS":{"TITLE":"Кількість очок","SUBTITLE":"Вкажіть кількість очок, у які можуть бути оцінені ваші користувацькі історії","US_TITLE":"Оцінки ІК","ACTION_ADD":"Add new point"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"Пріоритети","SUBTITLE":"Specify the priorities your issues will have","ISSUE_TITLE":"Пріоритети проблем","ACTION_ADD":"Додати новий пріоритет"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"Важливості","SUBTITLE":"Specify the severities your issues will have","ISSUE_TITLE":"Важливості проблеми","ACTION_ADD":"Додати нову важливість"},"PROJECT_VALUES_STATUS":{"TITLE":"Статуси","SUBTITLE":"Вкажіть статуси, які могтимуть мати ваші історії користувача, завдання та проблеми","EPIC_TITLE":"Статуси епіку","US_TITLE":"Статуси історії користувача","TASK_TITLE":"Статуси завдання","ISSUE_TITLE":"Статуси проблеми"},"PROJECT_VALUES_TYPES":{"TITLE":"Типи","SUBTITLE":"Вкажіть, яких типів можуть бути ваші проблеми","ISSUE_TITLE":"Типи проблем","ACTION_ADD":"Додати новий {{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"Мітки","SUBTITLE":"Переглянути та редагувати колір Ваших міток","EMPTY":"На даний момент немає міток","EMPTY_SEARCH":"Нічого не вдалось знайти за Вашим критерієм пошуку","ACTION_ADD":"Додати мітку","NEW_TAG":"Нова мітка","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"Вибраний"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Кінцеві дати","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"Статус кінцевої дати для користувацької історії","ACTION_ADD_STATUS":"Додати новий статус","TASK_TITLE":"Статус кінцевої дати для завдання","ISSUE_TITLE":"Статус кінцевої дати для проблеми","DAYS_TO_DUE_DATE":"Днів до кінцевої дати","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"Ролі - {{projectName}}","WARNING_NO_ROLE":"Be careful, no role in your project will be able to estimate the point value for user stories","HELP_ROLE_ENABLED":"When enabled, members assigned to this role will be able to estimate the point value for user stories","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} членів із цією роллю","TITLE_DELETE_ROLE":"Delete Role","REPLACEMENT_ROLE":"All the users with this role will be moved to","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"You can't delete all values","EXTERNAL_USER":"Зовнішній користувач","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Таємний ключ","PAYLOAD_URL":"Payload URL","VALID_IPS":"Valid origin IPs (separated by ,)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"Gitlab requests are not signed so the best way of verifying the origin is by IP. If the field is empty there will be no IP validation."},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks - {{projectName}}","SECTION_NAME":"Webhooks","ADD_NEW":"Add a New Webhook","TYPE_NAME":"Type the service name","TYPE_PAYLOAD_URL":"Type the service payload url","TYPE_SERVICE_SECRET":"Type the service secret key","SAVE":"Save Webhook","CANCEL":"Cancel Webhook","SHOW_HISTORY":"(Показати історію)","TEST":"Test Webhook","EDIT":"Edit Webhook","DELETE":"Delete Webhook","REQUEST":"Запит","RESEND_REQUEST":"Надіслати запит повторно","HEADERS":"Заголовки","PAYLOAD":"Корисне навантаження","RESPONSE":"Відповідь","DATE":"DD.MM.YYYY [at] hh:mm:ss","ACTION_HIDE_HISTORY":"(Сховати історію)","ACTION_HIDE_HISTORY_TITLE":"Приховати деталі історії","ACTION_SHOW_HISTORY":"(Показати історію)","ACTION_SHOW_HISTORY_TITLE":"Показати деталі історії","WEBHOOK_NAME":"Webhook '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - Власні характерні ознаки - {{projectName}}","ADD":"Додати власне поле","EDIT":"Редагувати користувацьке поле","DELETE":"Видалити власне поле","SAVE_TITLE":"Зберегти користувацьке поле","CANCEL_TITLE":"Скасувати створення","SET_FIELD_NAME":"Вкажіть ім'я для користувацького поля","SET_FIELD_DESCRIPTION":"Додайте опис для користувацького поля","FIELD_TYPE_DEFAULT":"-- вибрати --","ACTION_UPDATE":"Оновити користувацьке поле","ACTION_CANCEL_EDITION":"Скасувати редагування"},"MEMBERSHIP":{"COLUMN_MEMBER":"Учасник","COLUMN_ADMIN":"Керманич","COLUMN_ROLE":"Роль","COLUMN_STATUS":"Статус","STATUS_ACTIVE":"Активний","STATUS_PENDING":"Очікує","DELETE_MEMBER":"Видалити учасника","RESEND":"Надіслати повторно","SUCCESS_SEND_INVITATION":"Ми знову надіслали запрошення на '{{email}}'.","SUCCESS_DELETE":"Ми видалили {{message}}.","ERROR_DELETE":"Ми не змогли видалити {{message}}.","DEFAULT_DELETE_MESSAGE":"запрошення на {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Типове значення для вибору статусу історії користувача","LABEL_POINTS":"Типове значення для вибору кількості очок","LABEL_TASK_STATUS":"Default value for task status selector","LABEL_ISSUE_TYPE":"Default value for issue type selector","LABEL_ISSUE_STATUS":"Типове значення для вибору статусу проблеми","LABEL_PRIORITY":"Типове значення для вибору пріоритету","LABEL_SEVERITY":"Типове значення для вибору важливості"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"Напишіть ім'я для нового статусу","PLACEHOLDER_DAYS_TO_DUE_DATE":"Вкажіть кількість днів до кінцевої дати"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"Напишіть ім'я для нового елементу"},"US_STATUS":{"ACTION_ADD_STATUS":"Додати новий статус","IS_ARCHIVED_COLUMN":"Заархівований","IS_CLOSED_COLUMN":"Закритий","WIP_LIMIT_COLUMN":"WIP Limit","PLACEHOLDER_WRITE_NAME":"Напишіть ім'я для нового статусу"},"MENU":{"PROJECT":"Проект","ATTRIBUTES":"Характерні ознаки","MEMBERS":"Учасники","PERMISSIONS":"Дозволи","INTEGRATIONS":"Інтеграція"},"SUBMENU_PROJECT_VALUES":{"STATUS":"Статус","POINTS":"Кількість очок","PRIORITIES":"Пріоритети","SEVERITIES":"Рівні важливості","TYPES":"Типи","CUSTOM_FIELDS":"Користувацькі поля","TAGS":"Мітки","DUE_DATES":"Кінцеві дати"},"SUBMENU_ROLES":{"TITLE":"Ролі","ACTION_NEW_ROLE":"+ Нова роль","TITLE_ACTION_NEW_ROLE":"Додати нову роль"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Хочете стати новим власником проекту?","PRIVATE":"Приватний","ACCEPTED_PROJECT_OWNERNSHIP":"Вітаємо! Тепер Ви новий власник проекту.","REJECTED_PROJECT_OWNERNSHIP":"Гаразд. Ми зв'яжемось із власником даного проекту","ACCEPT":"Прийняти","REJECT":"Відхилити","PROPOSE_OWNERSHIP":"{{owner}}, поточний власник проекту {{project}} попросив, щоб Ви стали новим власником проекту.","ADD_COMMENT":"Хочете додати коментар для власника проекту?","UNLIMITED_PROJECTS":"Необмежений","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"Редагувати профіль","CLOSED_US":"Закриті ІК","PROJECTS":"Проекти","PROJECTS_EMPTY":"{{username}} ще не має проектів","CONTACTS":"Контакти","CONTACTS_EMPTY":"{{username}} ще не має контактів","CURRENT_USER_CONTACTS_EMPTY":"У Вас ще немає контактів","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"The people with whom you work at Taiga will be your contacts automatically","TABS":{"ACTIVITY_TAB":"Хронологія","ACTIVITY_TAB_TITLE":"Показати усю активність цього користувача","PROJECTS_TAB":"Проекти","PROJECTS_TAB_TITLE":"List of all projects in which the user is a member","LIKES_TAB":"Подобається","LIKES_TAB_TITLE":"Відобразити усі вподобання цього користувача","VOTES_TAB":"Голоси","VOTES_TAB_TITLE":"Показати усі голосування цього користувача","WATCHED_TAB":"Відслідковується","WATCHED_TAB_TITLE":"Відобразити усі елементи, які відслідковуються цим користувачем","CONTACTS_TAB":"Контакти","CONTACTS_TAB_TITLE":"List all contacts made by this user"}},"PROFILE_SIDEBAR":{"TITLE":"Ваш профіль","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"Редагувати біографію"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"Введіть щось...","FILTER_TYPE_ALL":"Всі","FILTER_TYPE_ALL_TITLE":"Показати все","FILTER_TYPE_PROJECTS":"Проекти","FILTER_TYPE_PROJECTS_TITLE":"Показати лише проекти","FILTER_TYPE_EPICS":"Епіки","FILTER_TYPE_EPICS_TITLE":"Показати лише епіки","FILTER_TYPE_USER_STORIES":"Історії","FILTER_TYPE_USER_STORIES_TITLE":"Показати лише користувацькі історії","FILTER_TYPE_TASKS":"Завдання","FILTER_TYPE_TASKS_TITLE":"Показати лише завдання","FILTER_TYPE_ISSUES":"Проблеми","FILTER_TYPE_ISSUES_TITLE":"Показати лише проблеми","EMPTY_TITLE":"Немає нічого для відображення тут."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"Reorder your projects to set in the top the most used ones.
    The top 10 projects will appear in the top navigation bar project list","PRIVATE":"Приватний проект","LOOKING_FOR_PEOPLE":"Цей проект шукає людей","FANS_COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Заблокований проект","THIS_PROJECT_IS_BLOCKED":"Це проект тимчасово заблокований","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"Щоб розблокувати Ваші проекти, зв'яжіться з адміністратором."},"SECTION":{"SEARCH":"Пошук","TIMELINE":"Хронологія","EPICS":"Епіки","BACKLOG":"Невиконана робота","KANBAN":"Канбан","ISSUES":"Проблеми","WIKI":"Вікі","TEAM":"Команда","MEETUP":"Зустріч","ADMIN":"Керманич"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"Створити проект","MANAGE_PROJECTS":"Керувати проектами","TITLE_CREATE_PROJECT":"Створити проект","HELP_TITLE":"Сторінка підтримки Taiga","HELP":"Допомога","HOMEPAGE":"Домашня сторінка","FEEDBACK_TITLE":"Надіслати відгук","FEEDBACK":"Відгук","NOTIFICATIONS_TITLE":"Відредагуйте Ваші налаштування повідомлень","NOTIFICATIONS":"Повідомлення","VIEW_PROFILE_TITLE":"Переглянути профіль","VIEW_PROFILE":"Переглянути профіль","EDIT_PROFILE_TITLE":"Редагувати профіль","EDIT_PROFILE":"Редагувати профіль","CHANGE_PASSWORD_TITLE":"Змінити пароль","CHANGE_PASSWORD":"Змінити пароль","DASHBOARD_TITLE":"Інформаційна панель","DISCOVER_TITLE":"Відкрити популярні проекти","DISCOVER":"Відкрийте для себе"},"LIKE_BUTTON":{"LIKE":"Подобається","LIKED":"Пов'язані","UNLIKE":"Скасувати вподобання","BUTTON_TITLE":"Вподобати чи скасувати вподобання цього проекту","COUNTER_TITLE":"{total, plural, one{one fan} other{# fans}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"Watch this project and set notification policy","WATCH":"Відслідковувати","WATCHING":"Відслідковування","COUNTER_TITLE":"{total, plural, one{one watcher} other{# watchers}}","OPTIONS":{"NOTIFY_ALL":"Отримувати усі повідомлення","NOTIFY_ALL_TITLE":"Отримувати усі повідомлення для цього проекту","NOTIFY_INVOLVED":"Тільки залучені","NOTIFY_INVOLVED_TITLE":"Отримуйте повідомлення, лише коли Ви залучені","UNWATCH":"Не слідкувати","UNWATCH_TITLE":"Не слідкувати за цим проектом"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Зв'язатись із командою проекту","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"Створити проект","CHOOSE_TEMPLATE":"Який шаблон краще підходить для Вашого проекту?","TEMPLATE_SCRUM":"Скрам","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Канбан","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Дублювати проект","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"Import project","IMPORT_DESC":"Імпортуйте Ваш проект з багатьох платформ у Taiga","INVITE":"Запросити до проекту","SOLO_PROJECT":"Ви будете самі у цьому проекті","INVITE_LATER":"(Пізніше Ви зможете запросити більше членів)","BACK":"Назад","MAX_PRIVATE_PROJECTS":"На жаль, Ви досягли максимальної кількості приватних проектів.\nЯкщо Ви хочете збільшити поточний ліміт, зверніться до адміністратора.","MAX_PUBLIC_PROJECTS":"На жаль, Ви досягли максимальної кількості публічних проектів.\nЯкщо ви хочете збільшити поточний ліміт, зверніться до адміністратора.","PUBLIC_PROJECT":"Відкритий проект","PRIVATE_PROJECT":"Приватний проект"},"COMMON":{"DETAILS":"Деталі нового проекту","PROJECT_TITLE":"Ім'я проекту","PROJECT_DESCRIPTION":"Опис проекту"},"DUPLICATE":{"TITLE":"Дублювати проект","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Виберіть існуючий проект для дублювання"},"IMPORT":{"TITLE":"Імпортувати проект","DESCRIPTION":"Імпортуйте Ваш проект з багатьох платформ у Taiga","ASYNC_IN_PROGRESS_TITLE":"Наш Oompa Loompas імпортує Ваш проект","ASYNC_IN_PROGRESS_MESSAGE":"Цей процес може зайняти декілька хвилин
    Ми надішлемо Вам електронного листа, коли буде готово","UPLOAD_IN_PROGRESS_MESSAGE":"Вивантажено {{uploadedSize}} з {{totalSize}}","ERROR":"Our Oompa Loompas have some problems importing your dump data. Please try again.","ERROR_TOO_MANY_REQUEST":"Вибачте, наш Oompa Loompas надто перевантажений зараз. Будь ласка, спробуйте через декілька хвилин.","ERROR_MESSAGE":"Our Oompa Loompas have some problems importing your dump data: {{error_message}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) is too heavy for our Oompa Loompas, try it with a smaller than ({{maxFileSize}})","SYNC_SUCCESS":"Your project has been imported successfuly","IMPORT":"Імпорт","WHO_IS":"Їхні завдання будуть назначені на ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Або, якщо хочете, знайдіть у своїх контактах","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Приєднатися","PROJECT_MEMBERS":"Учасники проекту","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Чи є {{user_external}} тією самою особою, що і {{user_internal}}?","CHOOSE":"Вибрати користувача","LINKS":"Зв'язки з {{platform}}","LINKS_DESCRIPTION":"Ви хочете зберегти посилання кожного елемента на оригінальну {{platform}} картку?","WARNING_MAIL_USER":"Зауважте, що якщо користувач не має облікового запису Taiga, то ми не зможемо призначити на нього завдання.","ASSIGN":"Назначити","PROJECT_SELECTOR":{"NO_RESULTS":"Нічого не вдалось знайти за Вашим критерієм пошуку","ACTION_SEARCH":"пошук","ACTION_BACK":"Назад"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Ваш обліковий запис дозволяє лише {{members}} членів","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"Імпортування проекту","DESCRIPTION":"Цей процес може зайняти трохи часу. Будь ласка, не закривайте вікно."},"WARNING":{"TITLE":"Деякі завдання будуть не назначені","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Перевірте контакти"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Імпортуйте Ваші дошки Trello у Taiga","CHOOSE_PROJECT":"Виберіть дошку, яку Ви хочете імпортувати","NO_PROJECTS":"Схоже, що Ви не маєте дошок у Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"Схоже, що Ви не маєте проектів у GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"Як Ви хочете імпортувати проблеми у Taiga?","KANBAN_PROJECT":"Як користувацькі історії у канбан-проекті","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"Як користувацькі історії у скрам-проекті","SCRUM_PROJECT_DESCRIPTION":"Після цього Ви зможете ввімкнути режим канбан.","ISSUES_PROJECT":"Як проблеми","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Виберіть проект, який Ви хочете імпортувати","NO_PROJECTS":"Схоже, що Ви не маєте проектів у Asana","KANBAN_PROJECT":"Канбан","SCRUM_PROJECT":"Скрам","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Виберіть проект чи дошку, яку Ви хочете імпортувати","NO_PROJECTS":"Схоже, що у Вас немає проектів чи дошок у Jira","URL":"Ваша URL-адреса Jira","KANBAN_PROJECT":"Канбан","SCRUM_PROJECT":"Скрам","ISSUES_PROJECT":"Проблеми","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Перетворити підпроблеми у нові проблеми Taiga","NOT_CREATE_NEW_ISSUES":"Не імпортувати під-проблеми"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"Ви дійсно хочете видалити обліковий запис Taiga?","CANCEL":"Назад до налаштувань","ACCEPT":"Видалити обліковий запис","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"Видалити проект","QUESTION":"Ви дійсно хочете видалити цей проект?","SUBTITLE":"Усі дані проекту (користувацькі історії, завдання, проблеми, спринти та сторінки вікі) будуть втрачені! :-(","CONFIRM":"Так, я дійсно впевнений"},"ASSIGNED_TO":{"SELECT":"Вибрати назначені на","SEARCH":"Знайти користувачів"},"ADD_MEMBER":{"TITLE":"Новий учасник","PLACEHOLDER":"Відфільтруйте користувачів або напишіть листа, щоб запросити","ADD_EMAIL":"Додати електронну пошту","REMOVE":"Вилучити","INVITE":"Запросити","CHOOSE_ROLE":"Виберіть роль","PLACEHOLDER_INVITATION_TEXT":"(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)","HELP_TEXT":"If users are already registered on Taiga, they will be added automatically. Otherwise they will receive an invitation."},"FEEDBACK":{"TITLE":"Розкажіть нам щось...","COMMENT":"...a bug, some suggestions, something cool... or even your worst nightmare with Taiga","ACTION_SEND":"Надіслати відгук"},"SEARCH":{"TITLE":"Пошук","PLACEHOLDER_SEARCH":"Що Ви шукаєте?"},"ADD_EDIT_SPRINT":{"TITLE":"Новий спринт","PLACEHOLDER_SPRINT_NAME":"ім'я спринта","PLACEHOLDER_SPRINT_START":"Оцінюваний початок","PLACEHOLDER_SPRINT_END":"Оцінюване закінчення","ACTION_DELETE_SPRINT":"Ви дійсно хочете видалити цей спринт?","TITLE_ACTION_DELETE_SPRINT":"видалити спринт","LAST_SPRINT_NAME":"останній спринт {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"Нове завдання","NEW_ISSUE":"Нова проблема","NEW_US":"Нова історія користувача","EDIT_TASK":"Редагувати завдання","EDIT_ISSUE":"Редагувати проблему","EDIT_US":"Редагувати історію користувача","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Існуюча проблема","CHOOSE_EXISTING_ISSUE":"Яка проблема?","ADD_ISSUE":"Додати проблему","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Видалити кінцеву дату","SUBTITLE":"Ви дійсно хочете видалити цю кінцеву дату?"},"DELETE_SPRINT":{"TITLE":"Видалити спринт"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Видалити зв'язок з епіком","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(Optional) Add a personalized text to the invitation. Tell something lovely to your new members ;-)","PLACEHOLDER_TYPE_EMAIL":"Введіть електронну пошту","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"На жаль, цей проект не можна залишити без власника","CURRENT_USER_OWNER":{"DESC":"Ви є поточним власником цього проекту. Перш ніж залишити, передайте право власності іншому.","BUTTON":"Змінити власника проекту"},"OTHER_USER_OWNER":{"DESC":"На жаль, Ви не можете видалити члена, який також є власником проекту. Спочатку, будь-ласка, призначте нового власника проекту.","BUTTON":"Запитати зміни власника проекту"}},"CHANGE_OWNER":{"TITLE":"Кого б Ви хотіли бачити новим власником проекту?","ADD_COMMENT":"Додати коментар","BUTTON":"Попросити цього члена проекту стати новим власником проекту"},"CONTACT_PROJECT":{"TITLE":"Надіслати електронного листа до","WARNING":"Електронний лист буде отримано адміністраторами проекту","PLACEHOLDER":"Напишіть Ваше повідомлення","SEND":"Надіслати"},"SET_DUE_DATE":{"TITLE":"Вказати кінцеву дату","PLACEHOLDER_DUE_DATE":"Вибрати дату","REASON_FOR_DUE_DATE":"Причина для кінцевої дати","PLACEHOLDER_REASON_FOR_DUE_DATE":"Чому потрібна кінцева дата для цієї ІК?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Видалити кінцеву дату"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Видалити кінцеву дату","SUBTITLE_ACTION_DELETE_DUE_DATE":"Ви дійсно хочете видалити статус кінцевої дати {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Прив'язати до епіку","EXISTING_EPIC":"Існуючий епік","NEW_EPIC":"Новий епік","CHOOSE_PROJECT_FOR_CREATION":"Що за проект?","CHOOSE_PROJECT_FROM":"Що за проект?","SUBJECT":"Тема","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"Нічого не вдалось знайти за Вашим критерієм пошуку"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Епік {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{epicStatus }}. Опис: {{epicDescription}}","SECTION_NAME":"Епік","ERROR_UNLINK_RELATED_USERSTORY":"Не можливо відв'язати: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Створити зв'язки з","NEW_USERSTORY":"Нова історія користувача","EXISTING_USERSTORY":"Існуюча історія користувача","CHOOSE_PROJECT_FOR_CREATION":"Який проект?","SUBJECT":"Тема","SUBJECT_BULK_MODE":"Тема (масова вставка)","CHOOSE_PROJECT_FROM":"Який проект?","CHOOSE_USERSTORY":"Яка історія користувача?","NO_USERSTORIES":"Цей проект ще не має користувацьких історій. Будь ласка, виберіть інший проект.","NO_USERSTORIES_FOUND":"Нічого не вдалось знайти за Вашим критерієм пошуку","FILTER_USERSTORIES":"Фільтрувати користувацькі історії","LIGHTBOX_TITLE_BLOKING_EPIC":"Блокуючий епік","ACTION_DELETE":"Видалити епік"},"US":{"PAGE_TITLE":"{{userStorySubject}} - Історія користувача {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{userStoryStatus }}. Завершено {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} з {{userStoryTotalTasks}} завдань закрито). Кількість очок: {{userStoryPoints}}. Опис: {{userStoryDescription}}","SECTION_NAME":"Історія користувача","LINK_TASKBOARD":"Дошка завдань","TITLE_LINK_TASKBOARD":"Перейти до дошки завдань","TOTAL_POINTS":"загальна кількість очок","ADD":"+ Додати нову історію користувача","ADD_BULK":"Додати нові користувацькі історії оптом","PROMOTED":"Ця ІК була підвищена з проблеми:","TITLE_LINK_GO_TO_ISSUE":"Перейти до проблеми","TITLE_DELETE_ACTION":"Видалити історію користувача","LIGHTBOX_TITLE_BLOKING_US":"Блокує нас","NOT_ESTIMATED":"Не оцінено","OWNER_US":"Ця історія користувача належить до","RELATE_TO_EPIC":"Прив'язати до епіку","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"Більше інформації","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Редагувати посилання","CLOSE":"Закрити","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Коментар видалений {{user}}","COMMENTS_COUNT":"{{comments}} коментарів","OLDER_FIRST":"Спочатку старіші","RECENT_FIRST":"Нещодавні спочатку","COMMENT":"Коментар","EDITED_COMMENT":"Редаговано:","SHOW_HISTORY":"Переглянути історично","TYPE_NEW_COMMENT":"Введіть новий коментар тут","SHOW_DELETED":"Показати видалений коментар","HIDE_DELETED":"Сховати видалений коментар","DELETE":"Видалити коментар","RESTORE":"Відновити коментар","HISTORY":{"TITLE":"Активність"}},"ACTIVITY":{"TITLE":"Активність","ACTIVITIES_COUNT":"{{activities}} активностей","TAGS_ADDED":"додані мітки:","TAGS_REMOVED":"видалені мітки:","US_POINTS":"Кількість очок {{role}}","NEW_ATTACHMENT":"нове вкладення:","DELETED_ATTACHMENT":"видалене вкладення:","UPDATED_ATTACHMENT":"оновлене вкладення ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"створена власна характерна ознака","UPDATED_CUSTOM_ATTRIBUTE":"оновлена власна характерна ознака","BECAME_DEPRECATED":"стало застарілим","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"Вимога команди","CLIENT_REQUIREMENT":"Вимога клієнта","BLOCKED":"Заблокований","VALUES":{"NOT_SET":"не вказано","UNASSIGNED":"не назначений"},"FIELDS":{"SUBJECT":"тема","DESCRIPTION":"опис","PRIORITY":"priority","SEVERITY":"severity","STATUS":"статус","TYPE":"тип","ASSIGNED_TO":"назначений на","ASSIGNED_USERS":"assigned users","DUE_DATE":"кінцева дата","MILESTONE":"спринт","COLOR":"колір"}},"BACKLOG":{"PAGE_TITLE":"Невиконана робота - {{projectName}}","PAGE_DESCRIPTION":"Панель невиконаної роботи з користувацькими історіями та спринтами проекту {{projectName}}: {{projectDescription}}","SECTION_NAME":"Невиконана робота","CUSTOMIZE_GRAPH":"Налаштувати графік Вашої невиконаної роботи","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"Керманич","CUSTOMIZE_GRAPH_TITLE":"Set up the points and sprints through the Admin","MOVE_US_TO_CURRENT_SPRINT":"Перемістити у поточний спринт","MOVE_US_TO_LATEST_SPRINT":"Перемістити до останнього спринта","EMPTY":"Список невиконаної роботи порожній!","CREATE_NEW_US":"Створити нову ІК","CREATE_NEW_US_EMPTY_HELP":"Ви можете створити нову історію користувача","EXCESS_OF_POINTS":"Excess of points","PENDING_POINTS":"Кількість очок в очікуванні","CLOSED_POINTS":"закрито","COMPACT_SPRINT":"Compact Sprint","GO_TO_TASKBOARD":"Перейти до дошки завдань {{::name}}","EDIT_SPRINT":"Редагувати спринт","TOTAL_POINTS":"загалом","STATUS_NAME":"Назва статусу","SORTABLE_FILTER_ERROR":"You can't drop on backlog when filters are open","DOOMLINE":"Project Scope [Doomline]","CHART":{"XAXIS_LABEL":"Спринти","YAXIS_LABEL":"Кількість очок","OPTIMAL":"Оптимальна очікувана кількість очок для спринта \"{{sprintName}}\" має бути {{value}}","REAL":"Реальна очікувана кількість очок для спринта \"{{sprintName}}\" є {{value}}","INCREMENT_TEAM":"Incremented points by team requirements for sprint \"{{sprintName}}\" is {{value}}","INCREMENT_CLIENT":"Incremented points by client requirements for sprint \"{{sprintName}}\" is {{value}}"},"TAGS":{"TOGGLE":"Переключити видимість міток","SHOW":"Показати мітки","HIDE":"Сховати мітки"},"FORECASTING":{"TITLE":"Прогнозування швидкості","BACKLOG":"Показати невиконану роботу","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"Користувацькі Історії","TITLE_COLUMN_POINTS":"Вибрати перегляд за роллю"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"загалом
    очок","COMPLETED_POINTS":"завершено
    очок","OPEN_TASKS":"відкрито
    завдань","CLOSED_TASKS":"закрито
    завдань","IOCAINE_DOSES":"
    доз іокаїну","SHOW_STATISTICS_TITLE":"Показати статистику","TOGGLE_BAKLOG_GRAPH":"Показати/Сховати графік вигорання","POINTS_PER_ROLE":"Кількість очок на роль"},"SUMMARY":{"PROJECT_POINTS":"project
    points","DEFINED_POINTS":"визначено
    очок","CLOSED_POINTS":"закрито
    очок","POINTS_PER_SPRINT":"Кількість очок /
    спринт"},"FILTERS":{"TOGGLE":"Переключити видимість фільтрів","HIDE":"Сховати фільтри","SHOW":"Показати фільтри"},"SPRINTS":{"TITLE":"СПРИНТИ","DATE":"DD.MM.YYYY","LINK_TASKBOARD":"Дошка завдань спринта","TITLE_LINK_TASKBOARD":"Перейти до дошки завдань \"{{name}}\"","EMPTY":"Ще немає спринтів","WARNING_EMPTY_SPRINT_ANONYMOUS":"У цьому спринті немає користувацьких історій","WARNING_EMPTY_SPRINT":"Перетягніть сюди історії із вашої невиконаної роботи, щоб розпочати новий спринт","TITLE_ACTION_NEW_SPRINT":"Додати новий спринт","TEXT_ACTION_NEW_SPRINT":"Ви напевно хочете створити новий спринт у проекті","ACTION_SHOW_CLOSED_SPRINTS":"Показати закриті спринти","ACTION_HIDE_CLOSED_SPRINTS":"Сховати закриті спринти"}},"ERROR":{"TEXT1":"Щось трапилось і наш Oompa Loompas працює над цим.","NOT_FOUND":"Не знайдено","NOT_FOUND_TEXT":"Error 404. The page you are looking for no longer exists. Perhaps you can return back to TAIGA homepage and see if you can find what you are looking for.","PERMISSION_DENIED":"Доступ заборонено","PERMISSION_DENIED_TEXT":"У вас немає прав доступу до цієї сторінки.","VERSION_ERROR":"Хтось у Taiga змінив це раніше і наш Oompa Loompas не може зберегти ваші зміни. Будь ласка, перевантажте і зробіть зміни знову (вони будуть втрачені)."},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - Дошка завдань спринта - {{projectName}}","PAGE_DESCRIPTION":"Спринт {{sprintName}} (з {{startDate}} по {{endDate}}) у {{projectName}}. Завершено {{completedPercentage}}% ({{completedPoints}} з {{totalPoints}} очок). {{openTasks}} з {{totalTasks}} завдань відкриті.","SECTION_NAME":"Дошка завдань","TITLE_ACTION_ADD":"Додати нове завдання","TITLE_ACTION_ADD_BULK":"Додати нові завдання оптом","TITLE_ACTION_ADD_ISSUE":"Додати нову проблему","TITLE_ACTION_ADD_ISSUE_BULK":"Додати нові проблеми оптом","TITLE_ACTION_ASSIGN":"Назначити завдання","PLACEHOLDER_CARD_TITLE":"Це не може бути завданням","PLACEHOLDER_CARD_TEXT":"Розділити історії на завдання, щоб відслідковувати їх окремо","TABLE":{"COLUMN":"Історія користувача","TITLE_ACTION_FOLD":"Згорнути колонку","TITLE_ACTION_UNFOLD":"Розгорнути колонку","TITLE_ACTION_FOLD_ROW":"Fold Row","TITLE_ACTION_UNFOLD_ROW":"Unfold Row","FIELD_POINTS":"points","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"Дні","YAXIS_LABEL":"Кількість очок","OPTIMAL":"Optimal pending points for day {{formattedDate}} should be {{roundedValue}}","REAL":"Real pending points for day {{formattedDate}} is {{roundedValue}}","DATE":"DD MMMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - Завдання {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{taskStatus }}. Опис: {{taskDescription}}","SECTION_NAME":"Завдання","LINK_TASKBOARD":"Дошка завдань","TITLE_LINK_TASKBOARD":"Перейти до дошки завдань","PLACEHOLDER_SUBJECT":"Введіть тему нового завдання","TITLE_SELECT_STATUS":"Назва статусу","OWNER_US":"Це завдання належить до","TITLE_LINK_GO_OWNER":"Перейти до історії користувача","TITLE_DELETE_ACTION":"Видалити завдання","LIGHTBOX_TITLE_BLOKING_TASK":"Блокуюче завдання","FIELDS":{"IS_IOCAINE":"Is iocaine"},"TITLE_ACTION_IOCAINE":"Feeling a bit overwhelmed by a task? Make sure others know about it by clicking on Iocaine when editing a task. It's possible to become immune to this (fictional) deadly poison by consuming small amounts over time just as it's possible to get better at what you do by occasionally taking on extra challenges!"},"NOTIFICATION":{"OK":"Все гаразд","WARNING":"Ой, щось трапилось...","WARNING_TEXT":"Наш Oompa Loompas засмучений, ваші зміни не були збережені!","SAVED":"Наш Oompa Loompas зберіг усі Ваші зміни!","CLOSE":"Закрити повідомлення","MAIL":"Повідомлення по електронній пошті","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"Ви дійсно хочете видалити?"},"CANCEL_ACCOUNT":{"TITLE":"Скасувати Ваш обліковий запис","SUBTITLE":"We're sorry you are leaving the taiga, we hope you enjoyed your stay :)","PLACEHOLDER_INPUT_TOKEN":"скасувати токен облікового запису","ACTION_LEAVING":"Так, я йду!","SUCCESS":"Наш Oompa Loompas видалив Ваш обліковий запис"},"CHANGE_EMAIL_FORM":{"TITLE":"Змінити електронну пошту","SUBTITLE":"Ще один клік - і Вашу електронну пошту буде оновлено!","PLACEHOLDER_INPUT_TOKEN":"змінити токен електронної пошти","ACTION_CHANGE_EMAIL":"Змінити електронну пошту","SUCCESS":"Наш Oompa Loompas оновив Вашу електронну пошту"},"ISSUES":{"PAGE_TITLE":"Проблеми - {{projectName}}","PAGE_DESCRIPTION":"The issues list panel of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Проблема","ACTION_NEW_ISSUE":"+ НОВА ПРОБЛЕМА","ACTION_PROMOTE_TO_US":"Підвищити до історії користувача","ACTION_ATTACH_SPRINT":"Додати проблему до спринта","ACTION_DETACH_SPRINT":"Вилучити проблему із спринта","PROMOTED":"Ця проблему підвищено до ІК:","EXTERNAL_REFERENCE":"Ця проблема створена з","GO_TO_EXTERNAL_REFERENCE":"Go to origin","ACTION_DELETE":"Видалити проблему","LIGHTBOX_TITLE_BLOKING_ISSUE":"Блокуюча проблема","LINK_TASKBOARD":"Дошка завдань","TITLE_LINK_TASKBOARD":"Перейти до дошки завдань","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"Пріоритет","SEVERITY":"Важливість","TYPE":"Тип"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Вилучити проблему із спринта","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Додати проблему до спринта","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"Підвищити цю проблему до нової історії користувача","MESSAGE":"Ви дійсно хочете створити нову ІК із цієї проблеми?"},"TABLE":{"COLUMNS":{"TYPE":"Тип","SEVERITY":"Важливість","PRIORITY":"Пріоритет","SUBJECT":"Тема","VOTES":"Голоси","STATUS":"Статус","MODIFIED":"Змінений","ASSIGNED_TO":"Призначений на"},"TITLE_ACTION_CHANGE_STATUS":"Змінити статус","TITLE_ACTION_ASSIGNED_TO":"Призначений на","BLOCKED":"Заблокований","EMPTY":{"TITLE":"Немає проблем для звіту :-)","SUBTITLE":"Ви знайшли проблему?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - Проблема {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"Статус: {{issueStatus }}. Тип: {{issueType}}, Пріоритет: {{issuePriority}}. Важливість: {{issueSeverity}}. Опис: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"Канбан - {{projectName}}","PAGE_DESCRIPTION":"The kanban panel, with user stories of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Канбан","TITLE_ACTION_FOLD":"Згорнути колонку","TITLE_ACTION_UNFOLD":"Розгорнути колонку","TITLE_ACTION_ADD_US":"Додати нову історію користувача","TITLE_ACTION_ADD_BULK":"Add New bulk","ACTION_SHOW_ARCHIVED":"Показати заархівовані","ACTION_HIDE_ARCHIVED":"Приховати заархівовані","HIDDEN_USER_STORIES":"The user stories in this status are hidden by default","PLACEHOLDER_CARD_TITLE":"Це ваші Користувацькі історії","PLACEHOLDER_CARD_TEXT":"Історії також можуть мати підзадачі для розділення вимог"},"SEARCH":{"PAGE_TITLE":"Пошук - {{projectName}}","PAGE_DESCRIPTION":"Search anything, user stories, issues, tasks or wiki pages, in the project {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Епіки","FILTER_USER_STORIES":"Користувацькі Історії","FILTER_ISSUES":"Проблеми","FILTER_TASKS":"Завдання","FILTER_WIKI":"Сторінки Вікі","PLACEHOLDER_SEARCH":"Шукати у...","TITLE_ACTION_SEARCH":"пошук","EMPTY_TITLE":"Схоже, що нічого не вдалося знайти за вашим критерієм пошуку.","EMPTY_DESCRIPTION":"Maybe try one of the tabs above or search again"},"TEAM":{"PAGE_TITLE":"Команда - {{projectName}}","PAGE_DESCRIPTION":"The team panel to show all the members of the project {{projectName}}: {{projectDescription}}","SECTION_NAME":"Команда","PLACEHOLDER_INPUT_SEARCH":"Шукати за повним ім'ям...","COLUMN_MR_WOLF":"Mr. Wolf","EXPLANATION_COLUMN_MR_WOLF":"Закриті проблеми","COLUMN_IOCAINE":"Iocaine Drinker","EXPLANATION_COLUMN_IOCAINE":"Iocaine doses ingested","COLUMN_CERVANTES":"Cervantes","EXPLANATION_COLUMN_CERVANTES":"Wiki pages edited","COLUMN_BUG_HUNTER":"Bug Hunter","EXPLANATION_COLUMN_BUG_HUNTER":"Issues reported","COLUMN_NIGHT_SHIFT":"Night Shift","EXPLANATION_COLUMN_NIGHT_SHIFT":"Закриті завдання","COLUMN_TOTAL_POWER":"Total Power","EXPLANATION_COLUMN_TOTAL_POWER":"Загальна кількість очок","SECTION_TITLE_TEAM":"Команда >","SECTION_FILTER_ALL":"Всі","CONFIRM_LEAVE_PROJECT":"Ви дійсно хочете залишити проект?","ACTION_LEAVE_PROJECT":"Залишити цей проект"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[Макс. розмір: {{maxFileSize}}]","MENU":{"SECTION_TITLE":"Налаштування користувача","USER_PROFILE":"Профіль користувача","CHANGE_PASSWORD":"Змінити пароль","EMAIL_NOTIFICATIONS":"Повідомлення по електронній пошті","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"Повідомлення по електронній пошті","COLUMN_PROJECT":"Проект","COLUMN_RECEIVE_ALL":"Отримати все","COLUMN_ONLY_INVOLVED":"Тільки залучені","COLUMN_NO_NOTIFICATIONS":"Немає повідомлень","OPTION_ALL":"Всі","OPTION_INVOLVED":"Залучений","OPTION_NONE":"Жоден"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"Проект","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"Проект"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"Використовувати типове зображення","ACTION_DELETE_ACCOUNT":"Видалити обліковий запис Taiga","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"Check your inbox!
    We have sent a mail to your account
    with the instructions to set your new address","CHANGE_PHOTO":"Змінити фото","FIELD":{"USERNAME":"Ім'я користувача","EMAIL":"Електронна адреса","FULL_NAME":"Повне ім'я","PLACEHOLDER_FULL_NAME":"Вкажіть повне ім'я (напр., Іван Іванов)","BIO":"Bio (max. 210 chars)","PLACEHOLDER_BIO":"Розкажіть нам щось про себе","LANGUAGE":"Мова","LANGUAGE_DEFAULT":"-- використовувати типову мову --","THEME":"Тема","THEME_DEFAULT":"-- використовувати типову тему --"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - Вікі - {{projectName}}","PAGE_DESCRIPTION":"Last edition on {{lastModifiedDate}} ({{totalEditions}} editions in total) Content: {{ wikiPageContent }}","DATETIME":"DD.MM.YYYY HH:mm","REMOVE":"Видалити цю сторінку вікі","DELETE_LIGHTBOX_TITLE":"Видалити сторінку Вікі","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Головна сторінка","SECTION_NAME":"ЗАКЛАДКИ","ACTION_ADD_LINK":"Додати закладку","ALL_PAGES":"Усі сторінки вікі"},"SUMMARY":{"TIMES_EDITED":"редаговано
    раз","LAST_EDIT":"останні
    редагувань","LAST_MODIFICATION":"остання зміна"},"SECTION_PAGES_LIST":"Усі сторінки","PAGES_LIST_COLUMNS":{"TITLE":"Заголовок","EDITIONS":"Редакції","CREATED":"Створений","MODIFIED":"Змінений","CREATOR":"Творець","LAST_MODIFIER":"Останнім змінював"}},"HINTS":{"SECTION_NAME":"Підказка","LINK":"If you want to know how to use it visit our support page","LINK_TITLE":"Відвідайте нашу сторінку підтримки","HINT1_TITLE":"Did you know you can import and export projects?","HINT1_TEXT":"This allow you to extract all your data from one Taiga and move it to another one.","HINT2_TITLE":"Ви знаєте, що можете створити власне поле?","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":"Ви забули над чим працювали?","HINT4_TEXT":"Не хвилюйтеся, на інформаційній панелі Ви знайдете свої відкриті завдання, проблеми та користувацькі історії у тому порядку, як Ви працювали над ними."},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} вивантажив нове вкладення у {{obj_name}}","US_CREATED":"{{username}} створив нову ІК {{obj_name}} у {{project_name}}","ISSUE_CREATED":"{{username}} створив нову проблему {{obj_name}} у {{project_name}}","TASK_CREATED":"{{username}} створив нове завдання {{obj_name}} у {{project_name}}","TASK_CREATED_WITH_US":"{{username}} створив нове завдання {{obj_name}} у {{project_name}}, яке належить до ІК {{us_name}}","WIKI_CREATED":"{{username}} створив нову сторінку вікі {{obj_name}} у {{project_name}}","MILESTONE_CREATED":"{{username}} створив новий спринт {{obj_name}} у {{project_name}}","EPIC_CREATED":"{{username}} створив новий епік {{obj_name}} у {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} прив'язав історію користувача {{related_us_name}} до епіку {{epic_name}} у {{project_name}}","NEW_PROJECT":"{{username}} створив проект {{project_name}}","MILESTONE_UPDATED":"{{username}} оновив спринт {{obj_name}}","US_UPDATED":"{{username}} оновив характерну ознаку \"{{field_name}}\" у ІК {{obj_name}}","US_UPDATED_WITH_NEW_VALUE":"{{username}} оновив характерну ознаку \"{{field_name}}\" у ІК {{obj_name}} на {{new_value}}","US_UPDATED_POINTS":"{{username}} оновив '{{role_name}}' очки у ІК {{obj_name}} на {{new_value}}","ISSUE_UPDATED":"{{username}} оновив характерну ознаку \"{{field_name}}\" проблеми {{obj_name}}","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} оновив характерну ознаку \"{{field_name}}\" проблеми {{obj_name}} на {{new_value}}","TASK_UPDATED":"{{username}} оновив характерну ознаку \"{{field_name}}\" завдання {{obj_name}} на {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} оновив характерну ознаку \"{{field_name}}\" завдання {{obj_name}} на {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} оновив характерну ознаку \"{{field_name}}\" завдання {{obj_name}}, яке належить до ІК {{us_name}}","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} оновив характерну ознаку \"{{field_name}}\" завдання {{obj_name}}, яке належить до ІК {{us_name}} на {{new_value}}","WIKI_UPDATED":"{{username}} оновив сторінку вікі {{obj_name}}","EPIC_UPDATED":"{{username}} оновив характерну ознаку \"{{field_name}}\" епіку {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} оновив характерну ознаку \"{{field_name}}\" епіку {{obj_name}} на {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} оновив \"{{field_name}}\" епіку {{obj_name}} на ","NEW_COMMENT_US":"{{username}} залишив коментар у ІК {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} залишив коментар до проблеми {{obj_name}}","NEW_COMMENT_TASK":"{{username}} залишив коментар у завданні {{obj_name}}","NEW_COMMENT_EPIC":"{{username}} залишив коментар в епіку {{obj_name}}","NEW_MEMBER":"у {{project_name}} появився новий член","US_ADDED_MILESTONE":"{{username}} додав ІК {{obj_name}} до {{sprint_name}}","US_MOVED":"{{username}} перемістив ІК {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} додав ІК {{obj_name}} до невиконаних завдань","BLOCKED":"{{username}} заблокував {{obj_name}}","UNBLOCKED":"{{username}} заблокував {{obj_name}}","NEW_USER":"{{username}} приєднався до Taiga","ITEM_TYPES":{"USERSTORY":"Історія користувача","ISSUE":"Проблема","TASK":"Завдання"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"An external app requires authentication","PAGE_DESCRIPTION":"An external app requires authentication","AUTHORIZATION_REQUEST":"Authorize {{application}} to use your Taiga account?","LOGIN_WITH_ANOTHER_USER":"Увійти як інший користувач","AUTHORIZE_APP":"Authorize app","CANCEL":"Відмінити"},"JOYRIDE":{"NAV":{"NEXT":"Наступний","BACK":"Назад","SKIP":"Пропустити","DONE":"Виконано"},"DASHBOARD":{"STEP1":{"TITLE":"Ваш проект","TEXT":"Ласкаво просимо! Тут Ви знайдете проекти, до яких Ви долучені."},"STEP2":{"TITLE":"Працює над","TEXT":"Here you will find the User Stories, Tasks and Issues in which you are working on."},"STEP3":{"TITLE":"Відслідковування","TEXT1":"А ось тут Ви знайдете серед Ваших проектів ті, про які Ви хочете знати.","TEXT2":"Ви вже працюєте з Taiga ;)"},"STEP4":{"TITLE":"Давайте розпочнемо","TEXT1":"Ви можете почати, створивши свій перший проект Taiga.","TEXT2":"Удачі!"}},"BACKLOG":{"STEP1":{"TITLE":"Короткий опис проекту","TEXT1":"Тут Ви будете бачити статус Вашого проекту.","TEXT2":"Ви можете змінювати будь-які параметри проекту через адміністратора."},"STEP2":{"TITLE":"Невиконана робота по продукту","TEXT":"Невиконана робота є список вимог (користувацьких історій) для проекту. Тут ви плануєте свої спринти."},"STEP3":{"TITLE":"Спринти","TEXT":"Sprints are short periods of time (usually 2 weeks) during which specific work has to be completed and delivered."},"STEP4":{"TITLE":"Користувацькі Історії","TEXT":"Це вимоги на високому рівні. Ви можете додати їх до невиконаної роботи та перетягнути їх у спринт, в якому їх потрібно виконати."}},"KANBAN":{"STEP1":{"TITLE":"Налаштуйте свій робочий процес","TEXT":"Налаштуйте стовпці, які вам потрібно, щоб відобразити статуси робочого процесу через адміністратора."},"STEP2":{"TITLE":"Користувацькі історії та завдання","TEXT":"Користувацькі історії - це вимоги високого рівня. Ви можете перетягувати їх у різні стовпці."},"STEP3":{"TITLE":"Додавання користувацьких історій","TEXT1":"Ви можете додати одну історію користувача (значок \"додати ІК\") або декілька історій (значок масового додавання)","TEXT2":"Удачі!"}}},"DISCOVER":{"PAGE_TITLE":"Відкрийте для себе проекти - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"Відкрийте для себе проекти","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"Найактивніший","MOST_ACTIVE_EMPTY":"Ще немає АКТИВНИХ проектів","MOST_LIKED":"Найбільше подобається","MOST_LIKED_EMPTY":"Ще поки немає ВПОДОБАНИХ проектів","VIEW_MORE":"Переглянути більше","FEATURED":"Пропоновані проекти","EMPTY":"Немає проектів для показу за цим критерієм пошуку.
    Спробуй ще раз!","FILTERS":{"ALL":"Всі","KANBAN":"Канбан","SCRUM":"Скрам","PEOPLE":"Пошук людей","WEEK":"Минулий тиждень","MONTH":"Останній місяць","YEAR":"Останній рік","ALL_TIME":"Весь час","CLEAR":"Очистити фільтри"},"SEARCH":{"PAGE_TITLE":"Пошук - Перегляд проектів - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"Введіть щось...","ACTION_TITLE":"Пошук","RESULTS":"Результати пошуку"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"Якщо вам потрібно виконати завдання до певної дати, активуйте \"Кінцева дата\" з перегляду деталей завдання.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-zh-hans.json b/dist/v-1549282893552/locales/taiga/locale-zh-hans.json new file mode 100644 index 0000000..0f2ffcb --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-zh-hans.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"是","NO":"否","OR":"或","I_GET_IT":"OK, I get it","LOADING":"载入中...","DATE":"YYYY MMM DD","DATETIME":"YYYY MMM DD HH:mm","SAVE":"保存","CANCEL":"取消","ACCEPT":"接受","DELETE":"删除","UNLINK":"断开链接","CREATE":"创建","ADD":"新增","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"编辑","DRAG":"拖拽","TAG_LINE":"你的敏捷、免费和开源的项目管理工具","TAG_LINE_2":"你喜欢的项目","BLOCK":"锁定","BLOCK_TITLE":"冻结:例如它有一个依赖不能满足,那么请冻结此项","BLOCKED":"已冻结","UNBLOCK":"解除冻结","UNBLOCK_TITLE":"关闭此项","BLOCKED_NOTE":"为什么它被关闭了呢?","BLOCKED_REASON":"请解释此原因","CREATED_BY":"由 {{fullDisplayName}} 创建","CLOSE":"关闭","GO_HOME":"返回首页","PLUGINS":"插件","ONE_ITEM_LINE":"一行一项","NEW_BULK":"批量插入","SUBTASKS":"Subtasks","PREVIOUS":"前一个","NEXT":"下一个","LOGOUT":"退出","EXTERNAL_USER":"外部用户","GENERIC_ERROR":"系统错误:{{error}}。","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"终端需求:是一个之前不存在的新的需求,并且该需求被要求成为项目的一部分","TEAM_REQUIREMENT":"团队需求:必须是项目中已经存在的需求,并且该需求不会对终端造成任何额外成本","OWNER":"项目所有者","CAPSLOCK_WARNING":"注意!你正在输入大写字母,该输入区域是区分大小写的。","CONFIRM_CLOSE_EDIT_MODE_TITLE":"你确定关闭编辑模式吗?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"请记住,如果你在保存之前关闭了编辑模式,所有的更改都会丢失","RELATED_USERSTORIES":"相关用户故事","CARD":{"ASSIGN_TO":"指派给","EDIT":"编辑卡片","DELETE":"删除卡片","DELETE_ISSUE":"删除问题","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"该数值似乎为无效","TYPE_EMAIL":"该电子邮件应为有效地址","TYPE_URL":"该网址应为有效链接","TYPE_URLSTRICT":"该网址应为有效链接","TYPE_NUMBER":"该数值应为有效号码","TYPE_DIGITS":"该数值应为有效数字","TYPE_DATEISO":"该数值应为有效日期 (YYYY-MM-DD)","TYPE_ALPHANUM":"该数值应为字母","TYPE_PHONE":"该数值应为有效的电话号码","NOTNULL":"该数值不应为零","NOT_BLANK":"该数值不应为空白","REQUIRED":"该数值为必须","REGEXP":"该数值似乎无效","MIN":"该数值应大于或等于 %s","MAX":"该数值应小于或等于 %s","RANGE":"该数值应介于 %s 与 %s之间","MIN_LENGTH":"该数值过短,它至少要有 %s 个字符","MAX_LENGTH":"该数值过长,它不可多于 %s 个字符。","RANGE_LENGTH":"该数值长度为无效,它应介于 %s 与 %s 字符之间","MIN_CHECK":"你必须至少选择 %s 选项","MAX_CHECK":"你必须至多选出 %s 选项","RANGE_CHECK":"你必须在 %s 与 %s 之间作出选择","EQUAL_TO":"该数值应为一致","LINEWIDTH":"一行或者多行可能太长了。尝试保持在 %s 字节以内","PIKADAY":"无效的日期格式,请使用DD MMM YYYY (如 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"上个月","NEXT_MONTH":"下个月","MONTHS":{"JAN":"一月","FEB":"二月","MAR":"三月","APR":"四月","MAY":"五月","JUN":"六月","JUL":"七月","AUG":"八月","SEP":"九月","OCT":"十月","NOV":"十一月","DEC":"十二月"},"WEEK_DAYS":{"SUN":"周日","MON":"周一","TUE":"周二","WED":"周三","THU":"周四","FRI":"周五","SAT":"周六"},"WEEK_DAYS_SHORT":{"SUN":"周日","MON":"周一","TUE":"周二","WED":"周三","THU":"周四","FRI":"周五","SAT":"周六"}},"SEE_USER_PROFILE":"查看 {{username }} 个人信息","USER_STORY":"用户故事","TASK":"任务","ISSUE":"问题","EPIC":"史诗","TAGS":{"PLACEHOLDER":"输入标签","DELETE":"删除标签","ADD":"新增标签"},"DESCRIPTION":{"EMPTY":"留下空白显得很无趣,写下点描述吧","NO_DESCRIPTION":"未有任何描述"},"FIELDS":{"SUBJECT":"主题","NAME":"名称","URL":"网址","DESCRIPTION":"描述","VALUE":"值","SLUG":"代称","COLOR":"颜色","IS_CLOSED":"关闭中?","STATUS":"状态","TYPE":"类型","SEVERITY":"严重程度","PRIORITY":"优先级","ASSIGNED_TO":"指派给","ASSIGNED_USERS":"被指派人列表","POINTS":"点数","IS_BLOCKED":"冻结","REF":"Ref","VOTES":"投票数","SPRINT":"冲刺任务","DUE_DATE":"截止日期","DUE_DATE_REASON":"截止日期原因"},"ROLES":{"ALL":"所有"},"ASSIGNED_TO":{"NOT_ASSIGNED":"未指派","ASSIGN":"指派","DELETE_ASSIGNMENT":"删除指派","REMOVE_ASSIGNED":"移除指派","TOO_MANY":"...太多用户,继续过滤中","CONFIRM_UNASSIGNED":"你确定要让它无任何指派吗?","TITLE_ACTION_EDIT_ASSIGNMENT":"编辑指派","SELF":"指派给我"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"设置截止日期"},"ASSIGNED_USERS":{"ADD":"选择指派人","ADD_ASSIGNED":"添加指派人","TITLE_LIGHTBOX_DELETE_ASSIGNED":"删除指派..."},"STATUS":{"CLOSED":"关闭","OPEN":"开启"},"WATCHERS":{"WATCHERS":"关注者列表","ADD":"添加关注者","TITLE_ADD":"添加项目成员到关注者列表","DELETE":"已删除关注者","TITLE_LIGHTBOX_DELETE_WARTCHER":"删除关注者"},"WATCH_BUTTON":{"WATCH":"关注","WATCHING":"关注中","UNWATCH":"撤销关注","WATCHERS":"关注者列表","BUTTON_TITLE":"关注/撤销关注该项","COUNTER_TITLE":"{total, plural, one{一个关注者} other{# 个关注者}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"赞/踩该项","COUNTER_TITLE":"{total, plural, one{一票} other{# 票}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"自定义字段","SAVE":"保存自定义字段","EDIT":"编辑自定义字段","DELETE":"删除自定义字段","CONFIRM_DELETE":"请记住,在这个自定义字段中的所有值都会被删除。你确定继续吗?"},"FILTERS":{"INPUT_PLACEHOLDER":"标题或参考","TITLE_ACTION_FILTER_BUTTON":"搜索","TITLE":"过滤器","TITLE_ACTION_SEARCH":"搜索","ACTION_SAVE_CUSTOM_FILTER":"储存为定制过滤器","PLACEHOLDER_FILTER_NAME":"写入过滤器名称后按下enter","APPLIED_FILTERS_NUM":"已用过滤器","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"类型","STATUS":"状态","SEVERITY":"严重程度","PRIORITIES":"优先级","TAGS":"标签","ASSIGNED_TO":"指派给","ASSIGNED_USERS":"被指派人列表","ROLE":"角色","CREATED_BY":"由创建","CUSTOM_FILTERS":"定制过滤器","EPIC":"史诗"}},"WYSIWYG":{"CODE_SNIPPET":"代码块","DB_CLICK":"双击进行编辑","SELECT_LANGUAGE_PLACEHOLDER":"选择语言","SELECT_LANGUAGE_REMOVE_FORMATING":"删除格式","OUTDATED":"在你编辑的过程中其他用户对其做了更新。在你保存你的修改之前,请在活动标签页查看新版本。","MARKDOWN_HELP":"Markdown 语法帮助"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"史诗","VIEW_EPICS":"查看史诗","ADD_EPICS":"添加史诗","MODIFY_EPICS":"修改史诗","COMMENT_EPICS":"评论史诗","DELETE_EPICS":"删除史诗"},"SPRINTS":{"NAME":"冲刺任务","VIEW_SPRINTS":"查看冲刺任务","ADD_SPRINTS":"增加冲刺任务","MODIFY_SPRINTS":"修改冲刺任务","DELETE_SPRINTS":"删除冲刺任务"},"USER_STORIES":{"NAME":"用户故事","VIEW_USER_STORIES":"查看用户故事","ADD_USER_STORIES":"新增用户故事","MODIFY_USER_STORIES":"修改用户故事","COMMENT_USER_STORIES":"评论用户故事","DELETE_USER_STORIES":"删除用户故事"},"TASKS":{"NAME":"任务","VIEW_TASKS":"查看任务","ADD_TASKS":"新增任务","MODIFY_TASKS":"修改任务","COMMENT_TASKS":"评论任务","DELETE_TASKS":"删除任务"},"ISSUES":{"NAME":"问题","VIEW_ISSUES":"查看问题","ADD_ISSUES":"新增问题","MODIFY_ISSUES":"修改议题","COMMENT_ISSUES":"评论问题","DELETE_ISSUES":"删除问题"},"WIKI":{"NAME":"维基","VIEW_WIKI_PAGES":"查看维基页","ADD_WIKI_PAGES":"新增维基页","MODIFY_WIKI_PAGES":"修改维基页","DELETE_WIKI_PAGES":"删除维基页","VIEW_WIKI_LINKS":"查看维基链接","ADD_WIKI_LINKS":"新增维基链接","DELETE_WIKI_LINKS":"删除维基链接"}}},"LOGIN":{"PAGE_TITLE":"登入 - Taiga","PAGE_DESCRIPTION":"登录Taig,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。"},"AUTH":{"INVITED_YOU":"已邀请您加入此项目","NOT_REGISTERED_YET":"还没注册吗?","REGISTER":"注册","CREATE_ACCOUNT":"在此建立您的免费账户"},"LOGIN_COMMON":{"HEADER":"我已登录Taiga","PLACEHOLDER_AUTH_NAME":"用户名称或电子邮件(注意大小写)","LINK_FORGOT_PASSWORD":"忘记密码?","TITLE_LINK_FORGOT_PASSWORD":"您忘记密码了吗","ACTION_ENTER":"回车","ACTION_SIGN_IN":"登录","PLACEHOLDER_AUTH_PASSWORD":"密码(大小写敏感)","ALT_LOGIN":"或登录为"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"根据我们的系统记录,你的账户名称/电子邮件或密码并不正确","SUCCESS":"欢迎你登录Taiga"},"REGISTER":{"PAGE_TITLE":"注册 - Taiga","PAGE_DESCRIPTION":"在Taiga创建一个账户,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。"},"REGISTER_FORM":{"TITLE":"注册一个新的Taiga账户(免费 )","PLACEHOLDER_NAME":"填写一个用户账号(注意大小写)","PLACEHOLDER_FULL_NAME":"填写你的全名","PLACEHOLDER_EMAIL":"填写你的电子邮件","PLACEHOLDER_PASSWORD":"设置密码(大小写敏感)","ACTION_SIGN_UP":"注册","TITLE_LINK_LOGIN":"登录","LINK_LOGIN":"你是否已注册? 登录"},"FORGOT_PASSWORD":{"PAGE_TITLE":"忘记密码 - Taiga","PAGE_DESCRIPTION":"请输入你的用户名或电子邮件地址获取新密码重新登录Taiga"},"FORGOT_PASSWORD_FORM":{"TITLE":"你是否忘了密码?","SUBTITLE":"输入你的用户名称或电子邮件进行注册","PLACEHOLDER_FIELD":"用户名称或电子邮件","ACTION_RESET_PASSWORD":"重设密码","LINK_CANCEL":"不,请带我回去,我记起来了","SUCCESS_TITLE":"检查你的收件箱!","SUCCESS_TEXT":"我们向你的邮箱发送了一封带有重置密码指令的邮件","ERROR":"根据我们的系统记录,你尚未注册"},"CHANGE_PASSWORD":{"PAGE_TITLE":"修改密码 - Taiga","SECTION_NAME":"更新密码","FIELD_CURRENT_PASSWORD":"当前密码","PLACEHOLDER_CURRENT_PASSWORD":"你当前的密码(如果你未有密码,此处请空白)","FIELD_NEW_PASSWORD":"新密码","PLACEHOLDER_NEW_PASSWORD":"输入新密码","FIELD_RETYPE_PASSWORD":"重新输入新密码","PLACEHOLDER_RETYPE_PASSWORD":"重新输入新密码","ERROR_PASSWORD_MATCH":"密码不匹配"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"创建新Taiga通过","SUBTITLE":"你也许该吃点含铁丰富的食物,它对你的大脑有益处:p","PLACEHOLDER_NEW_PASSWORD":"新密码","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"重新输入新密码","ACTION_RESET_PASSWORD":"重设密码","ERROR":"我们的系统无法响应恢复密码的请求。请再尝试一次。","SUCCESS":"系统已储存你的新密码
    试试 用它登录"},"INVITATION":{"PAGE_TITLE":"接受邀请 - Taiga","PAGE_DESCRIPTION":"接受邀请加入Taiga上的项目,它是一个给新创团队与敏捷开发者设计师使用的项目管理平台。Taiga是一个简易轻松美观的工具,让工作变成乐趣。"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"我们的Oompa Loompas无法找到你邀请","SUCCESS":"你成功地加入此项目,欢迎来到 {{project_name}}"},"HOME":{"PAGE_TITLE":"首页 - Taiga","PAGE_DESCRIPTION":"Taiga 首页,你的主要项目以及任命,观看用户故事,任务与问题。","EMPTY_WORKING_ON":"看起来空荡荡的,是不是?开始使用Taiga,你将会在这里看到你正在处理的用户故事,任务以及问题。","EMPTY_WATCHING":"在你的项目中追踪用户故事、任务、问题并且收到更新的通知 :)","EMPTY_PROJECT_LIST":"你尚无任何项目","WORKING_ON_SECTION":"进行中","WATCHING_SECTION":"关注中","DASHBOARD":"项目仪表盘"},"EPICS":{"TITLE":"史诗","SECTION_NAME":"用户故事","EPIC":"史诗","PAGE_TITLE":"史诗 - {{projectName}}","PAGE_DESCRIPTION":"项目的史诗列表{{projectName}}:{{projectDescription}}","DASHBOARD":{"ADD":"添加史诗","UNASSIGNED":"未指派"},"EMPTY":{"TITLE":"您还未创建任何史诗","EXPLANATION":"史诗是一种包含用户故事的更上层的概念。\n史诗可用于组织用户故事并处于其层次结构的顶层。","HELP":"了解更多关于史诗的信息"},"TABLE":{"VOTES":"投票数","NAME":"名称","PROJECT":"项目","SPRINT":"冲刺任务","ASSIGNED_TO":"已指派","STATUS":"状态","PROGRESS":"进度","VIEW_OPTIONS":"浏览选项"},"CREATE":{"TITLE":"新建史诗","PLACEHOLDER_DESCRIPTION":"请添加一些描述文字来帮助其他人更好的了解这个史诗","TEAM_REQUIREMENT":"团队需求","CLIENT_REQUIREMENT":"客户需求","BLOCKED":"已锁定","BLOCKED_NOTE_PLACEHOLDER":"为什么这个史诗被冻结了?","CREATE_EPIC":"创建史诗"}},"PROJECTS":{"PAGE_TITLE":"我的项目 - Taiga","PAGE_DESCRIPTION":"你的项目列表,你可以重新排序或者创建新项目。","MY_PROJECTS":"我的项目"},"ATTACHMENT":{"SECTION_NAME":"附件","TITLE":"{{ fileName }} 上传于 {{ date }}","LIST_VIEW_MODE":"列表视图模式","GALLERY_VIEW_MODE":"缩略图模式","DESCRIPTION":"输入一段简短描述","DEPRECATED":"(已废弃)","DEPRECATED_FILE":"废弃?","ADD":"加入新附件 {{maxFileSizeMsg}}","DROP":"将附件拖到这里来!","SHOW_DEPRECATED":"+ 显示废弃的附件","HIDE_DEPRECATED":"- 隐藏废弃的附件","COUNT_DEPRECATED":"({{ counter }} 遭废弃)","MAX_UPLOAD_SIZE":"上传文档最大体积限制 {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"无法成功上传 '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"删除附件....","MSG_LIGHTBOX_DELETE_ATTACHMENT":"附件 '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"无法删除: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"上一个","NEXT":"下一个"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"编辑值","TITLE_ACTION_DELETE_VALUE":"删除值","TITLE_ACTION_DELETE_TAG":"删除标签"},"HELP":"需要帮助吗?看看我们的帮助页面吧!","PROJECT_DEFAULT_VALUES":{"TITLE":"预设值","SUBTITLE":"将所有选项设为预设值"},"MEMBERSHIPS":{"TITLE":"管理成员","PAGE_TITLE":"成员资格 - {{projectName}}","ADD_BUTTON":"+ 新成员","ADD_BUTTON_TITLE":"增加新成员","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"这个项目已经达到它的允许最多成员上限 ({{members}})。如果你希望增加这个上限,请联系管理员。"},"PROJECT_EXPORT":{"TITLE":"导出","SUBTITLE":"导出你的项目以备份,或以此为基础来创建一个新的。","EXPORT_BUTTON":"导出","EXPORT_BUTTON_TITLE":"导出你的项目","LOADING_TITLE":"档案正在生成中","DUMP_READY":"你的档案已经准备好了!","LOADING_MESSAGE":"请勿关闭本页","ASYNC_MESSAGE":"准备好后,我们会发送一封电子邮件","SYNC_MESSAGE":"如果未能自动下载,请点击此处.","ERROR":"我们的系统无法导出你的资料,请再试一次","ERROR_BUSY":"抱歉系统繁忙中,请稍后再试试"},"MODULES":{"TITLE":"模块","EPICS":"史诗","EPICS_DESCRIPTION":"可视化和管理你项目的最为要害的部分","BACKLOG":"待办事项","BACKLOG_DESCRIPTION":"管理你的用户故事,让接下来的及优先的工作能被有条理地查看","NUMBER_SPRINTS":"期待的冲刺数量","NUMBER_SPRINTS_HELP":"待确定的数量(0)","NUMBER_US_POINTS":"估计总的故事点","NUMBER_US_POINTS_HELP":"待确定的数量(0)","KANBAN":"看板","KANBAN_DESCRIPTION":"在此看板上组织你的项目","ISSUES":"问题","ISSUES_DESCRIPTION":"追踪错误,问题以及增强你的项目,不要错过任何事","WIKI":"维基文档","WIKI_DESCRIPTION":"新增,修正或是删除与他人合作的文档内容。这里正是项目文件记录区","MEETUP":"视频会议","MEETUP_DESCRIPTION":"选择你的视频会议系统","SELECT_VIDEOCONFERENCE":"选择一个视频会议系统","SALT_CHAT_ROOM":"为聊天室名称添加一个前缀","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"自定","URL_CHAT_ROOM":"聊天室之网址"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - 项目档案 - {{projectName}}","PROJECT_DETAILS":"项目细节","PROJECT_NAME":"项目名称","TAGS":"标签","DESCRIPTION":"描述","RECRUITING":"这个项目是否在招人?","RECRUITING_MESSAGE":"你在寻找什么人?","RECRUITING_PLACEHOLDER":"定义简介","FEEDBACK":"是否接收来自Taiga用户的反馈?","PUBLIC_PROJECT":"公开项目","PRIVATE_PROJECT":"私有项目","PRIVATE_OR_PUBLIC":"公开项目与私有项目有什么区别?","DELETE":"删除此项目","CHANGE_LOGO":"更换图标","ACTION_USE_DEFAULT_LOGO":"使用默认图片","MAX_PRIVATE_PROJECTS":"根据你当前计划,你已经达到了私有项目允许的最大成员限制","MAX_PRIVATE_PROJECTS_MEMBERS":"已超过私有项目的最大成员数目的限制","MAX_PUBLIC_PROJECTS":"对不起,根据你当前计划,你已经达到了公开项目允许的最大成员限制","MAX_PUBLIC_PROJECTS_MEMBERS":"作为公开项目,该项目已经超过了你的最大成员数目","PROJECT_OWNER":"项目所有者","REQUEST_OWNERSHIP":"请求项目所有权","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"你希望成为该项目的新所有者吗?","REQUEST_OWNERSHIP_DESC":"请求当前项目所有者 {{name}} 将项目所有权转给你。","REQUEST_OWNERSHIP_BUTTON":"要求","REQUEST_OWNERSHIP_SUCCESS":"我们将通知项目所有者","CHANGE_OWNER":"改变所有者","CHANGE_OWNER_SUCCESS_TITLE":"好,你的请求已经发出!","CHANGE_OWNER_SUCCESS_DESC":"如果项目所有者请求被接受或者被拒绝,我们将通过邮件通知你"},"REPORTS":{"TITLE":"报告","SUBTITLE":"以 CSV 格式导出你的项目资料,并制作你的专属报告","DESCRIPTION":"下载CSV档案格式是复制生成网址到常用的文字编辑软件/试算表,以保存你的项目资料报告。你可以轻易地视觉化和分析你的资料。","HELP":"如何使用我的表格软件?","REGENERATE_TITLE":"改变网址","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"史诗报告","SECTION_TITLE_US":"用户故事报告","SECTION_TITLE_TASK":"任务报告","SECTION_TITLE_ISSUE":"问题报告","DOWNLOAD":"下载CSV档案","URL_FIELD_PLACEHOLDER":"再次产生CSV 网址","TITLE_REGENERATE_URL":"再次产生CSV 网址","ACTION_GENERATE_URL":"产生网址","ACTION_REGENERATE":"再次产生","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"删除"},"CUSTOM_FIELDS":{"TITLE":"自定义字段","SUBTITLE":"指定用户故事,任务与问题一些自定义字段","EPIC_DESCRIPTION":"史诗自定义字段","EPIC_ADD":"在史诗中加入自定义字段","US_DESCRIPTION":"用户自定义字段","US_ADD":"在用户故事中加入自定义字段","TASK_DESCRIPTION":"任务自定义字段","TASK_ADD":"在任务中加入自定义字段","ISSUE_DESCRIPTION":"问题自定义字段","ISSUE_ADD":"在问题中加入自定义字段","FIELD_TYPE_TEXT":"单行文字","FIELD_TYPE_RICHTEXT":"富文本","FIELD_TYPE_MULTI":"多行文字","FIELD_TYPE_DATE":"日期","FIELD_TYPE_URL":"链接","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - 项目数值 - {{projectName}}","REPLACEMENT":"所有此值的项将被改成","ERROR_DELETE_ALL":"你不能删除所有的值"},"PROJECT_VALUES_POINTS":{"TITLE":"点数","SUBTITLE":"指定你的用户故事的估计点数为","US_TITLE":"用户故事点数","ACTION_ADD":"增加点数"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"优先级","SUBTITLE":"指明你将遇到的问题优先程度","ISSUE_TITLE":"问题优先级","ACTION_ADD":"新增优先级"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"严重程度","SUBTITLE":"指明你将遇到问题的严重程度","ISSUE_TITLE":"问题严重程度","ACTION_ADD":"新增严重程度"},"PROJECT_VALUES_STATUS":{"TITLE":"状态","SUBTITLE":"指明你的用户故事,任务以及问题经历的状态","EPIC_TITLE":"史诗状态","US_TITLE":"用户故事状态","TASK_TITLE":"任务状态","ISSUE_TITLE":"问题状态"},"PROJECT_VALUES_TYPES":{"TITLE":"类型","SUBTITLE":"指定你的问题类型可能是","ISSUE_TITLE":"问题类型","ACTION_ADD":"新增{{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"标签","SUBTITLE":"查看并编辑你的用户故事的颜色","EMPTY":"当前没有标签","EMPTY_SEARCH":"看起来没有符合你的搜索条件的结果","ACTION_ADD":"新增标签","NEW_TAG":"新建标签","MIXING_HELP_TEXT":"选择你想合并的标签","MIXING_MERGE":"合并标签","SELECTED":"已选择"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"增加新状态","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"角色- {{projectName}}","WARNING_NO_ROLE":"注意,你的项目中无角色可以评估用户故事的点数","HELP_ROLE_ENABLED":"当启动时,被指派此角色的成员将可以评估用户故事点数","DISABLE_COMPUTABLE_ALERT_TITLE":"你确定要禁用这个角色评估吗?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"如果该角色“{{roleName}}”被禁止估算用户故事的点数,那么该角色以前做的所有评估将被删除","COUNT_MEMBERS":"{{ role.members_count }} 这类角色的成员","TITLE_DELETE_ROLE":"删除角色","REPLACEMENT_ROLE":"和此角色有关的用户都将被移除","WARNING_DELETE_ROLE":"小心!所有角色估算都将被移除","ERROR_DELETE_ALL":"你不能删除所有值","EXTERNAL_USER":"外部用户","NOTE_EXTERNAL_USERS":"注意:我们所说的外部用户是指不属于Taiga平台的匿名用户。请小心使用这种角色。"},"THIRD_PARTIES":{"SECRET_KEY":"密钥","PAYLOAD_URL":"有效负荷网址","VALID_IPS":"有效来源IP(请用逗点分开)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket要求不指派,因此最佳确认方式为IP位置来源。如果此处空白,表示IP未有效校验。"},"GITLAB":{"SECTION_NAME":"Gitlab","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"GitLab要求不指派因此最佳确认方式为IP位置来源。如果此处空白,表示IP未有效校验。"},"GITHUB":{"SECTION_NAME":"Github","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"网页钩子- {{projectName}}","SECTION_NAME":"网页触发","ADD_NEW":"新增一个网页触发","TYPE_NAME":"键入服务名称","TYPE_PAYLOAD_URL":"键入服务有效负荷网址","TYPE_SERVICE_SECRET":"键入服务密码钥匙","SAVE":"储存网页触发","CANCEL":"取消网页触发","SHOW_HISTORY":"(显示记录)","TEST":"测试网页触发","EDIT":"编辑网页触发","DELETE":"删除网页触发","REQUEST":"要求","RESEND_REQUEST":"重送出要求","HEADERS":"标头","PAYLOAD":"有效负荷","RESPONSE":"回应","DATE":"DD MMM YYYY [at] hh:mm","ACTION_HIDE_HISTORY":"(藏记录)","ACTION_HIDE_HISTORY_TITLE":"藏记录细节","ACTION_SHOW_HISTORY":"(显示记录)","ACTION_SHOW_HISTORY_TITLE":"显示记录细节","WEBHOOK_NAME":"网页触发 '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - 个性设置 - {{projectName}}","ADD":"加入自定义字段","EDIT":"编辑自定义字段","DELETE":"删除自定义字段","SAVE_TITLE":"储存自定义字段","CANCEL_TITLE":"取消创建","SET_FIELD_NAME":"设定你的自定义字段名称","SET_FIELD_DESCRIPTION":"设定你自定义字段的文字描述","FIELD_TYPE_DEFAULT":"-- 选择一个 --","ACTION_UPDATE":"更新自定义字段","ACTION_CANCEL_EDITION":"取消编辑"},"MEMBERSHIP":{"COLUMN_MEMBER":"成员","COLUMN_ADMIN":"管理者","COLUMN_ROLE":"角色","COLUMN_STATUS":"状态","STATUS_ACTIVE":"活跃","STATUS_PENDING":"待办中","DELETE_MEMBER":"删除成员","RESEND":"Resend","SUCCESS_SEND_INVITATION":"我们已再次发出邀请信给'{{email}}'.","SUCCESS_DELETE":"已删除 {{message}}.","ERROR_DELETE":"我们无法删除 {{message}}.","DEFAULT_DELETE_MESSAGE":"邀请 {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"史诗状态选择器的默认值","LABEL_US_STATUS":"用户故事状态选择器的默认值","LABEL_POINTS":"点数选择器预设值","LABEL_TASK_STATUS":"任务状态选择器预设值","LABEL_ISSUE_TYPE":"问题类型选择器预设值","LABEL_ISSUE_STATUS":"问题状态选择器预设值","LABEL_PRIORITY":"优先选择器预设值","LABEL_SEVERITY":"严重程度选择器预设值"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"为此新状态命名","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"为此新元素命名"},"US_STATUS":{"ACTION_ADD_STATUS":"增加新状态","IS_ARCHIVED_COLUMN":"归档","IS_CLOSED_COLUMN":"关闭","WIP_LIMIT_COLUMN":"WIP限制","PLACEHOLDER_WRITE_NAME":"为此新状态命名"},"MENU":{"PROJECT":"项目","ATTRIBUTES":"属性","MEMBERS":"成员","PERMISSIONS":"权限","INTEGRATIONS":"整合"},"SUBMENU_PROJECT_VALUES":{"STATUS":"状态","POINTS":"点数","PRIORITIES":"优先级","SEVERITIES":"严重程度","TYPES":"类型","CUSTOM_FIELDS":"自定义字段","TAGS":"标签","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"角色","ACTION_NEW_ROLE":"+ 新角色","TITLE_ACTION_NEW_ROLE":"新增角色"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"你希望成为新的项目所有者吗?","PRIVATE":"私有的","ACCEPTED_PROJECT_OWNERNSHIP":"恭喜你!你现在是项目新的所有者了。","REJECTED_PROJECT_OWNERNSHIP":"好的。我们将联系当前项目的所有者","ACCEPT":"接受","REJECT":"拒绝","PROPOSE_OWNERSHIP":"{{owner}}, 当前项目 {{project}} 的所有者要求你成为项目的新的所有者。","ADD_COMMENT":"你愿意为项目所有者添加一条评论吗?","UNLIMITED_PROJECTS":"无线的","OWNER_MESSAGE":{"PRIVATE":"请记住你可以拥有最多 {{maxProjects}} 个私有项目。你当前拥有 {{currentProjects}} 个私有项目","PUBLIC":"请记住你最多可以拥有 {{maxProjects}} 个公开项目。你当前拥有 {{currentProjects}} 个公开项目"},"CANT_BE_OWNED":"目前你不能成为这类项目的所有者。如果你希望成为这个项目的所有者,请联系管理员,请其在你的账户设置中启用项目所有权。"}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"编辑个人资料","CLOSED_US":"关闭用户故事","PROJECTS":"项目","PROJECTS_EMPTY":"{{username}} 尚无项目","CONTACTS":"联络人","CONTACTS_EMPTY":"{{username}} 尚无联络人","CURRENT_USER_CONTACTS_EMPTY":"您尚无任何联络人","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"你在Taiga一同工作的伙伴将自动成为你的联络人","TABS":{"ACTIVITY_TAB":"时间表","ACTIVITY_TAB_TITLE":"显示该用户的所有活动","PROJECTS_TAB":"项目","PROJECTS_TAB_TITLE":"列出该用户参与的所有项目","LIKES_TAB":"Likes","LIKES_TAB_TITLE":"List all likes made by this user","VOTES_TAB":"投票数","VOTES_TAB_TITLE":"列出该用户的所有投票","WATCHED_TAB":"关注","WATCHED_TAB_TITLE":"列出该用户关注的所有事项","CONTACTS_TAB":"联络人","CONTACTS_TAB_TITLE":"列出这个用户的所有联系人"}},"PROFILE_SIDEBAR":{"TITLE":"个人信息","DESCRIPTION":"其他人可以看到你做的所有事情以及正在做的事情。添加一个好的简历可以使得你的个人信息更为丰满。","ADD_INFO":"编辑个人简介"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"输入内容...","FILTER_TYPE_ALL":"所有","FILTER_TYPE_ALL_TITLE":"显示所有","FILTER_TYPE_PROJECTS":"项目","FILTER_TYPE_PROJECTS_TITLE":"只显示项目","FILTER_TYPE_EPICS":"史诗","FILTER_TYPE_EPICS_TITLE":"仅显示史诗","FILTER_TYPE_USER_STORIES":"故事","FILTER_TYPE_USER_STORIES_TITLE":"只显示用户故事","FILTER_TYPE_TASKS":"任务","FILTER_TYPE_TASKS_TITLE":"只显示任务","FILTER_TYPE_ISSUES":"问题","FILTER_TYPE_ISSUES_TITLE":"只显示问题","EMPTY_TITLE":"看来没有什么可以显示的."}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"记录你的项目在上方常用栏位
    前十个项目将会显示在上方导览处。","PRIVATE":"私有项目","LOOKING_FOR_PEOPLE":"这个项目在寻找队友","FANS_COUNTER_TITLE":"{total, plural, one{一个粉丝} other{# 个粉丝}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{一个关注者} other{# 个关注者}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{一个成员} other{# 个成员}}","BLOCKED_PROJECT":{"BLOCKED":"关闭项目","THIS_PROJECT_IS_BLOCKED":"这个项目暂时被关闭了","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"要解冻你的项目,请联系管理员。"},"SECTION":{"SEARCH":"搜索","TIMELINE":"时间表","EPICS":"用户故事","BACKLOG":"待办任务","KANBAN":"看板","ISSUES":"问题","WIKI":"维基","TEAM":"团队","MEETUP":"视频会议","ADMIN":"管理者"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"创建项目","MANAGE_PROJECTS":"管理项目","TITLE_CREATE_PROJECT":"创建项目","HELP_TITLE":"Taiga支持页","HELP":"帮助","HOMEPAGE":"主页","FEEDBACK_TITLE":"发送反馈","FEEDBACK":"反馈","NOTIFICATIONS_TITLE":"编辑个人通知设定","NOTIFICATIONS":"通知","VIEW_PROFILE_TITLE":"查看个人资料","VIEW_PROFILE":"查看个人资料","EDIT_PROFILE_TITLE":"编辑你的个人资料","EDIT_PROFILE":"编辑个人资料","CHANGE_PASSWORD_TITLE":"更换密码","CHANGE_PASSWORD":"更换密码","DASHBOARD_TITLE":"控制台","DISCOVER_TITLE":"发现流行项目","DISCOVER":"发现"},"LIKE_BUTTON":{"LIKE":"点赞","LIKED":"已点赞","UNLIKE":"取消点赞","BUTTON_TITLE":"对这个项目点赞或者取消点赞","COUNTER_TITLE":"{total, plural, one{一个粉丝} other{# 个粉丝}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"关注这个项目并设置通知规则","WATCH":"Watch","WATCHING":"关注中","COUNTER_TITLE":"{total, plural, one{一个关注者} other{# 个关注者}}","OPTIONS":{"NOTIFY_ALL":"接收所有通知","NOTIFY_ALL_TITLE":"接收这个项目的所有通知","NOTIFY_INVOLVED":"只接收相关通知","NOTIFY_INVOLVED_TITLE":"只接收与你相关的通知","UNWATCH":"取消关注","UNWATCH_TITLE":"取消关注这个项目"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"联系项目组","CONTACT_BUTTON":"联系项目组"},"CREATE":{"TITLE":"创建项目","CHOOSE_TEMPLATE":"哪个模板更适合你的项目?","TEMPLATE_SCRUM":"冲刺","TEMPLATE_SCRUM_DESC":"优先考虑和解决的时间周期短的任务.","TEMPLATE_SCRUM_LONGDESC":"Scrum是一种管理产品开发的迭代和增量的敏捷软件开发方法论。\n产品挤压(backlog)是需要最终交付的,它们按序进入交付队列的。产品挤压(backlog)被分解为可控可执行的组块,称之为冲刺(sprints)。在每一个确定的时间段内,团队根据他们的技能,能力和资源,发起一个新的冲刺并从产品挤压中提交传递一定量的用户故事(US)。随着挤压的减少,项目向前推进。","TEMPLATE_KANBAN":"看板","TEMPLATE_KANBAN_DESC":"在独立的任务上保持恒定的工作流","TEMPLATE_KANBAN_LONGDESC":"看板方法用于将(任意类型的)项目开发分为各个阶段。\n看板卡片就像一个卡片或者邮箱索引--它表明了在项目中需要完成的每个人物的细节。看板用于将卡片从一种完成状态移动到下一个状态,这样可以跟踪项目进度。","DUPLICATE":"复制项目","DUPLICATE_DESC":"开始清洁并保持您的配置","IMPORT":"导入项目","IMPORT_DESC":"从多平台导入你的项目到Taiga","INVITE":"邀请加入项目","SOLO_PROJECT":"你会单独加入这个项目","INVITE_LATER":"(你可以在之后邀请更多成员)","BACK":"后退","MAX_PRIVATE_PROJECTS":"很抱歉,你创建的私有项目数量已到达限制。如果想创建更多私有项目,请联系管理员","MAX_PUBLIC_PROJECTS":"不幸的是,你已经达到了公开项目的最大数量限制。\n如果您想增加当前限制数量,请与管理员联系。","PUBLIC_PROJECT":"公开项目","PRIVATE_PROJECT":"私有项目"},"COMMON":{"DETAILS":"新的项目详情","PROJECT_TITLE":"项目名称","PROJECT_DESCRIPTION":"项目描述"},"DUPLICATE":{"TITLE":"复制项目","DESCRIPTION":"开始清洁并保持您的配置 ","SELECT_PLACEHOLDER":"选择一个已存在的项目来复制"},"IMPORT":{"TITLE":"导入项目","DESCRIPTION":"从多平台导入你的项目到Taiga","ASYNC_IN_PROGRESS_TITLE":"我们正在导入你的项目","ASYNC_IN_PROGRESS_MESSAGE":"这个过程要花上一点时间
    当弄好时我们会发给你一封邮件","UPLOAD_IN_PROGRESS_MESSAGE":"已上传 {{totalSize}}中的{{uploadedSize}}","ERROR":"系统在滙进你倒入的资料时遇上一些问题,请再试一次","ERROR_TOO_MANY_REQUEST":"抱歉系统繁忙中,请稍后再试试","ERROR_MESSAGE":"我们的系统无法导入你的资料","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) 超过系统设置的附件体积上限, 请重传小一点的附件 ({{maxFileSize}})","SYNC_SUCCESS":"你的项目已成功导入","IMPORT":"导入","WHO_IS":"他们的任务将被分配给…","WRITE_EMAIL":"或者如果你愿意,写下这个用户在Taiga使用的电子邮件","SEARCH_CONTACT":"或者如果你愿意,在你的联系人中检索","WRITE_EMAIL_LABEL":"写下这个用户在Taiga使用的电子邮件","ACCEEDE":"加入","PROJECT_MEMBERS":"项目成员","PROCESS_DESCRIPTION":"告诉我们你想要分配{{platform}}的任务给来自Taiga中的谁","MATCH":"{{user_external}}{{user_internal}}是同一个人吗?","CHOOSE":"选择用户","LINKS":"与{{platform}}链接","LINKS_DESCRIPTION":"是否要保留每个条目与原{{platform}} 卡片的链接?","WARNING_MAIL_USER":"注意,如果用户没有Taiga的帐户将无法分配任务给他。 ","ASSIGN":"指派","PROJECT_SELECTOR":{"NO_RESULTS":"看起来没有符合你的搜索条件的结果","ACTION_SEARCH":"搜索","ACTION_BACK":"后退"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"你尝试导入的项目有包含你在内的 {{members}} 个成员,不幸的是,你当前的计划对于每个私有项目最大允许 {{max_memberships}} 个成员。如果你希望增加人数请联系管理员。","PROJECT_MEMBERS_DESC_PUBLIC":"你尝试导入的项目有包含你在内的 {{members}} 个成员,不幸的是,你当前的计划对于每个公开项目最大允许 {{members}} 个成员。如果你希望增加人数请联系管理员。","ACCOUNT_ALLOW_MEMBERS":"您的账户只允许 {{members}} 成员","PRIVATE_PROJECTS_SPACE":{"TITLE":"对不起,你当前的计划不允许额外的私有项目","DESC":"你尝试导入的项目是私有的。不幸的是,你当前的计划不允许额外的私有项目。"},"PUBLIC_PROJECTS_SPACE":{"TITLE":"对不起,你当前的计划不允许额外的公开项目","DESC":"你尝试导入的项目是公开的。不幸的是,你当前的计划不允许额外的公开项目。"},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"你当前的计划允许每个私有项目最多 {{max_memberships}} 位成员。"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"你当前的计划允许每个项目最多 {{max_memberships}} 位成员。"},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"对不起,你当前的计划不允许额外的私有项目或者每个私有项目多于 {{max_memberships}} 位成员","DESC":"你正在试图导入的项目是私有的并且有 {{members}} 位成员。"},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"对不起,你当前的计划不允许额外的公开项目或者每个公开项目多于 {{max_memberships}} 位成员","DESC":"你正在试图导入的项目是公开的并且有多于 {{members}} 位成员。"}},"IN_PROGRESS":{"TITLE":"导入项目中","DESCRIPTION":"这个过桯要花点时间,请保持视窗开启"},"WARNING":{"TITLE":"一些已分配的任务将被取消","DESCRIPTION":"依然有未经确认的人员。指派给这些人的卡片将保持未指派状态。检查所有的联系方式以保证不会丢失这些信息。","CHECK":"检查联系人"},"TAIGA":{"SELECTOR":"导入您的Taigo项目"},"TRELLO":{"SELECTOR":"将你的Trello面板导入Taiga","CHOOSE_PROJECT":"选择将要导入的面板","NO_PROJECTS":"看起来你在Trello中没有面板"},"GITHUB":{"SELECTOR":"导入你在GitHub上的问题","CHOOSE_PROJECT":"查找你想要导入的项目","NO_PROJECTS":"似乎你在GitHub上没有项目","HOW_DO_YOU_WANT_TO_IMPORT":"你希望如何将你的问题导入Taiga?","KANBAN_PROJECT":"在看板项目中作为用户故事","KANBAN_PROJECT_DESCRIPTION":"之后你可以使用backlog来启用scrum。","SCRUM_PROJECT":"在scrum项目中作为用户故事","SCRUM_PROJECT_DESCRIPTION":"之后你可以启用看板模式。","ISSUES_PROJECT":"作为问题","ISSUES_PROJECT_DESCRIPTION":"你在看板或者scrum模式下将不能使用你的问题。你可以为新的用户故事启用看板或者scrum。"},"ASANA":{"SELECTOR":"导入你的Asana项目并选择如何管理该项目","CHOOSE_PROJECT":"选择你想导入的项目","NO_PROJECTS":"似乎你在Asana上没有项目","KANBAN_PROJECT":"看板","SCRUM_PROJECT":"冲刺","CREATE_AS_SCRUM_DESCRIPTION":"你项目的任务及其子任务将被创建为用户故事和任务。","CREATE_AS_KANBAN_DESCRIPTION":"你项目的任务及其子任务将被创建为用户故事和任务。"},"JIRA":{"SELECTOR":"导入你的Jira项目并选择如何管理这个项目","HOW_TO_CONFIGURE":"(配置帮助)","CHOOSE_PROJECT":"选择你想要导入的项目或者看板","NO_PROJECTS":"看起来你在Jira中没有项目或者看板。","URL":"你的Jira地址","KANBAN_PROJECT":"看板","SCRUM_PROJECT":"冲刺","ISSUES_PROJECT":"问题","CREATE_AS_SCRUM_DESCRIPTION":"你项目的问题及其子问题将被创建为Taiga用户故事和任务。","CREATE_AS_KANBAN_DESCRIPTION":"你项目的问题及其子问题将被创建为Taiga用户故事和任务。","CREATE_AS_ISSUES_DESCRIPTION":"你打算如何使用从Jira项目中导入的子问题?(Taiga不允许存在子问题)","CREATE_NEW_ISSUES":"将子问题转换为Taiga问题","NOT_CREATE_NEW_ISSUES":"不导入子问题"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"你确定要删除Taiga账户吗?","CANCEL":"返回设置","ACCEPT":"删除账号","BLOCK_PROJECT":"请注意,在你删除你的账户之后,所有属于你的项目都会被冻结。如果你确实希望一个项目被冻结,在你删除你的账户之前,请将所有权转移至该项目的其他成员名下。"},"DELETE_PROJECT":{"TITLE":"删除项目","QUESTION":"你确定要删除这个项目吗?","SUBTITLE":"所有项目资料 (用户故事/任务/问题/冲刺/维基页面) 将会丢失! :-(","CONFIRM":"是的,我很确定"},"ASSIGNED_TO":{"SELECT":"选择要指派给","SEARCH":"搜索用户"},"ADD_MEMBER":{"TITLE":"新成员","PLACEHOLDER":"筛选用户或者编写邮件来进行邀请","ADD_EMAIL":"添加收件人邮箱","REMOVE":"移除","INVITE":"邀请","CHOOSE_ROLE":"选择一个角色","PLACEHOLDER_INVITATION_TEXT":"(非必要) 加上一段私人文字在邀请信,告诉你的新成员一些好事 ;-)","HELP_TEXT":"如果用户已注册Taiga账户,他们会自动被加入。否则他们会收到一封加入的邀请信"},"FEEDBACK":{"TITLE":"告诉我们你的故事","COMMENT":"系统错误,有改进建议有乐趣,或者是你使用Taiga 上的恶梦?","ACTION_SEND":"送出反馈"},"SEARCH":{"TITLE":"搜索","PLACEHOLDER_SEARCH":"你在找什么?"},"ADD_EDIT_SPRINT":{"TITLE":"新冲刺任务","PLACEHOLDER_SPRINT_NAME":"冲刺任务名称","PLACEHOLDER_SPRINT_START":"预估开始","PLACEHOLDER_SPRINT_END":"预估结束","ACTION_DELETE_SPRINT":"你确定要删除这个冲刺任务吗?","TITLE_ACTION_DELETE_SPRINT":"删除冲刺任务","LAST_SPRINT_NAME":"最后冲刺任务 {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"你有更改没有保存。\n你确定要关闭该表单吗?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"新增问题","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"删除截止日期","SUBTITLE":"你确定要删除该截止日期吗?"},"DELETE_SPRINT":{"TITLE":"删除冲刺任务"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(非必要) 加上一段私人文字在邀请信,告诉你的新成员一些好事 ;-)","PLACEHOLDER_TYPE_EMAIL":"输入一个电邮地址","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"对不起,该项目不能超过 {{maxMembers}} 位成员。
    如果你希望增加当前限制,请联系管理员。","LIMIT_USERS_WARNING_MESSAGE":"对不起,本项目不能有超过 {{maxMembers}} 名成员。"},"LEAVE_PROJECT_WARNING":{"TITLE":"对不起,该项目不允许在没有所有者的情况下离开","CURRENT_USER_OWNER":{"DESC":"你是本项目的当前所有者。在离开之前,请将所有权转移给其他成员。","BUTTON":"改变项目拥有者"},"OTHER_USER_OWNER":{"DESC":"对不起,你不能删除作为当前项目所有者的成员。首先,请指派一位新的项目所有者。","BUTTON":"请求项目所有者改变"}},"CHANGE_OWNER":{"TITLE":"你希望谁作为项目的新的所有者?","ADD_COMMENT":"评论","BUTTON":"要求这位项目成员作为新的项目所有者"},"CONTACT_PROJECT":{"TITLE":"发送邮件到","WARNING":"项目管理员会收到邮件","PLACEHOLDER":"输入你的消息","SEND":"发送"},"SET_DUE_DATE":{"TITLE":"设置截止日期","PLACEHOLDER_DUE_DATE":"选择截止日期","REASON_FOR_DUE_DATE":"截止日期原因","PLACEHOLDER_REASON_FOR_DUE_DATE":"为什么用户故事需要一个截止日期?","SUGGESTIONS":{"IN_ONE_WEEK":"一周内","IN_TWO_WEEKS":"两周内","IN_ONE_MONTH":"一月内","IN_THREE_MONTHS":"三月内"},"TITLE_ACTION_DELETE_DUE_DATE":"删除截止日期"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"删除截止日期","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"项目是什么","CHOOSE_PROJECT_FROM":"项目是什么","SUBJECT":"主题","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"看起来没有符合你的搜索条件的结果"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - 史诗{{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"状态:{{epicStatus}}。描述:{{epicDescription}}","SECTION_NAME":"史诗","ERROR_UNLINK_RELATED_USERSTORY":"无法断开链接:{{errorMessage}}","CREATE_RELATED_USERSTORIES":"创建关系","NEW_USERSTORY":"新建用户故事","EXISTING_USERSTORY":"已有用户故事","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"主题","SUBJECT_BULK_MODE":"题目(批量插入)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"该项目无用户故事。请选择其他项目。","NO_USERSTORIES_FOUND":"看起来没有符合你的搜索条件的结果","FILTER_USERSTORIES":"过滤用户故事","LIGHTBOX_TITLE_BLOKING_EPIC":"屏蔽史诗","ACTION_DELETE":"删除史诗"},"US":{"PAGE_TITLE":"{{userStorySubject}} - 用户故事 {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"状态: {{userStoryStatus }},已完成 {{userStoryProgressPercentage}}% (任务总数 {{userStoryTotalTasks}},已关闭{{userStoryClosedTasks}}),点数: {{userStoryPoints}},描述: {{userStoryDescription}}","SECTION_NAME":"用户故事","LINK_TASKBOARD":"任务板","TITLE_LINK_TASKBOARD":"到任务板去","TOTAL_POINTS":"总点数","ADD":"+新增用户故事","ADD_BULK":"批次加入新用户故事","PROMOTED":"此用户故事已提升成问题:","TITLE_LINK_GO_TO_ISSUE":"到问题","TITLE_DELETE_ACTION":"删除用户故事","LIGHTBOX_TITLE_BLOKING_US":"封锁中的用户故事","NOT_ESTIMATED":"无预估","OWNER_US":"此User Story属于","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"以Gig的形式在Taiga Tribe中发布","PUBLISH_INFO":"更多信息","PUBLISH_TITLE":"在Taiga Tribe中查找关于发布的更多信息","PUBLISHED_AS_GIG":"用户故事已经以Gig的形式在Taiga Tribe中发布","EDIT_LINK":"编辑链接","CLOSE":"关闭","SYNCHRONIZE_LINK":"与Taiga Tribe同步","PUBLISH_MORE_INFO_TITLE":"你是否需要其他人来做这个任务?","PUBLISH_MORE_INFO_TEXT":"如果你在工作中的某个特殊的地方需要帮助,你可以很容易地在Taiga Tribe 创建gig并接受来自世界各地的帮助。你将能够控制并管理这个gig并享受一个渴望贡献的伟大社区。TaigaTribe 作为Taiga的姊妹存在。两个平台可以相互独立,但是我们相信联合使用他们会更为强大,所以我们确信集成工作将会非常有用。"}},"COMMENTS":{"DELETED_INFO":"评论被用户{{user}}删除","COMMENTS_COUNT":"{{comments}}评论","OLDER_FIRST":"上次第一名","RECENT_FIRST":"最近第一名","COMMENT":"评论","EDITED_COMMENT":"已编辑","SHOW_HISTORY":"查看历史","TYPE_NEW_COMMENT":"在此输入一个新的评论","SHOW_DELETED":"显示遭删除的评论","HIDE_DELETED":"隐藏已删除之评论","DELETE":"删除评论","RESTORE":"恢复原评论","HISTORY":{"TITLE":"动态"}},"ACTIVITY":{"TITLE":"动态","ACTIVITIES_COUNT":"{{activities}} 活动","TAGS_ADDED":"已添加的标签","TAGS_REMOVED":"已移除的标签","US_POINTS":"{{role}} 得分","NEW_ATTACHMENT":"新附件","DELETED_ATTACHMENT":"删除附件:","UPDATED_ATTACHMENT":"更新附件 ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"创建自定义属性","UPDATED_CUSTOM_ATTRIBUTE":"更新自定义属性","BECAME_DEPRECATED":"已置为废弃","BECAME_UNDEPRECATED":"已置为废弃","TEAM_REQUIREMENT":"团队要求","CLIENT_REQUIREMENT":"客户要求","BLOCKED":"已封锁","VALUES":{"NOT_SET":"未设置","UNASSIGNED":"未指派"},"FIELDS":{"SUBJECT":"主旨","DESCRIPTION":"描述","PRIORITY":"优先级","SEVERITY":"严重程度","STATUS":"状态","TYPE":"类型","ASSIGNED_TO":"指派给","ASSIGNED_USERS":"被指派人员列表","DUE_DATE":"截止日期","MILESTONE":"冲刺任务","COLOR":"颜色"}},"BACKLOG":{"PAGE_TITLE":"待办任务 - {{projectName}}","PAGE_DESCRIPTION":"待办任务面板 {{projectName}}(项目的用户故事与冲刺任务): {{projectDescription}}","SECTION_NAME":"待办任务","CUSTOMIZE_GRAPH":"自定义你的代办任务图表","CUSTOMIZE_GRAPH_TEXT":"一个好的图表可以帮助你更好地跟随项目进展,这就要求你设置好点数和冲刺","CUSTOMIZE_GRAPH_ADMIN":"管理者","CUSTOMIZE_GRAPH_TITLE":"通过管理员来设置点数和冲刺","MOVE_US_TO_CURRENT_SPRINT":"移到目前的冲刺","MOVE_US_TO_LATEST_SPRINT":"切换到最近的冲刺","EMPTY":"没有待办任务!","CREATE_NEW_US":"创建一个新的用户故事","CREATE_NEW_US_EMPTY_HELP":"你可以创建一个新用户故事","EXCESS_OF_POINTS":"超过的点数","PENDING_POINTS":"待核点数","CLOSED_POINTS":"关闭","COMPACT_SPRINT":"浓缩冲刺点数","GO_TO_TASKBOARD":"前往任务板 {{spring.name}}","EDIT_SPRINT":"编辑冲刺任务","TOTAL_POINTS":"全部","STATUS_NAME":"状态名称","SORTABLE_FILTER_ERROR":"当过滤器开启时,无法放入待办任务","DOOMLINE":"项目规模 [Doomline]","CHART":{"XAXIS_LABEL":"冲刺任务","YAXIS_LABEL":"点数","OPTIMAL":"最适化的冲刺任务\"{{sprintName}}\"待定点数应为 {{value}}","REAL":"真实的冲刺任务\"{{sprintName}}\"待定点数为 {{value}}","INCREMENT_TEAM":"团队要求的冲刺任务\"{{sprintName}}\"渐增点数为 {{value}}","INCREMENT_CLIENT":"客户要求的冲刺任务\"{{sprintName}}\"渐增点数为 {{value}}"},"TAGS":{"TOGGLE":"切换标签可见度","SHOW":"显示标签","HIDE":"隐藏标签"},"FORECASTING":{"TITLE":"速度预测","BACKLOG":"显示待办任务","NEW_SPRINT":"根据进度确定下一个冲刺目标的候选用户故事。点击创建新的冲刺目标。","CURRENT_SPRINT":"根据进度确定当前冲刺目标的候选用户故事。点击创建当前的冲刺目标。"},"TABLE":{"COLUMN_US":"用户故事","TITLE_COLUMN_POINTS":"选择检示每个角色"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"全部
    点数","COMPLETED_POINTS":"已完成
    点数","OPEN_TASKS":"开启
    任务","CLOSED_TASKS":"已关闭
    任务","IOCAINE_DOSES":"毒物(全新任务挑战)
    剂量","SHOW_STATISTICS_TITLE":"显示统计","TOGGLE_BAKLOG_GRAPH":"显示/隐藏 剩余工作量图","POINTS_PER_ROLE":"每角色的点数"},"SUMMARY":{"PROJECT_POINTS":"项目
    点数","DEFINED_POINTS":"已定义
    点数","CLOSED_POINTS":"已关闭
    点数","POINTS_PER_SPRINT":"点数 /
    冲刺任务"},"FILTERS":{"TOGGLE":"切换过滤器可见度","HIDE":"隐藏过滤器","SHOW":"显示过滤器"},"SPRINTS":{"TITLE":"冲刺任务","DATE":"DD MMM YYYY","LINK_TASKBOARD":"冲刺任务板","TITLE_LINK_TASKBOARD":"到任务板 {{spring.name}}","EMPTY":"还没有冲刺","WARNING_EMPTY_SPRINT_ANONYMOUS":"这个冲刺没有用户故事","WARNING_EMPTY_SPRINT":"从你的待办事项中拖拽一个用户故事到这里来开启一个新的冲刺","TITLE_ACTION_NEW_SPRINT":"添加一个新的冲刺","TEXT_ACTION_NEW_SPRINT":"你可能希望在你的项目中创建一个新的冲刺","ACTION_SHOW_CLOSED_SPRINTS":"显示关闭冲刺任务","ACTION_HIDE_CLOSED_SPRINTS":"隐藏冲刺任务"}},"ERROR":{"TEXT1":"系统出了一点问题,工程师正在抢修中","NOT_FOUND":"找不到","NOT_FOUND_TEXT":"Error 404,你要找的网页不存在,你可以稍后再回来Taiga首页,看看是否能再次找到要找的东西。","PERMISSION_DENIED":"无此权限","PERMISSION_DENIED_TEXT":"你无权访问这个页面","VERSION_ERROR":"Taiga某人之前更改了这个,而我们的工程师无法再做改变。请重新载入页面来使用你的更新(之前设定将消失)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - 冲刺任务看板 - {{projectName}}","PAGE_DESCRIPTION":"冲刺任务 {{sprintName}} (项目 {{projectName}} 从 {{startDate}} 到 {{endDate}})。完成比例{{completedPercentage}}% (总点数 {{totalPoints}} 点,完成 {{completedPoints}} 点)。总任务数 {{totalTasks}},开启任务数 {{openTasks}}。","SECTION_NAME":"任务板","TITLE_ACTION_ADD":"增加新任务","TITLE_ACTION_ADD_BULK":"批次加入新任务","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"指派任务","PLACEHOLDER_CARD_TITLE":"这可能是一个任务","PLACEHOLDER_CARD_TEXT":"将用户故事拆分为多个任务以便单独跟踪","TABLE":{"COLUMN":"用户故事","TITLE_ACTION_FOLD":"隐藏栏位","TITLE_ACTION_UNFOLD":"未隐藏栏位","TITLE_ACTION_FOLD_ROW":"隐藏列数","TITLE_ACTION_UNFOLD_ROW":"未隐藏列数","FIELD_POINTS":"点数","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"天数","YAXIS_LABEL":"点数","OPTIMAL":"一天最适待办点数 {formattedDate},应为 {{roundedValue}}","REAL":"一天真实的待办点数 {{formattedDate}},应为 {{roundedValue}}","DATE":"DD MMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - 任务 {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"状态:{{taskStatus }}。描述:{{taskDescription}}","SECTION_NAME":"任务","LINK_TASKBOARD":"任务板","TITLE_LINK_TASKBOARD":"到任务板去","PLACEHOLDER_SUBJECT":"键入新任务主旨","TITLE_SELECT_STATUS":"状态名称","OWNER_US":"这任务属于","TITLE_LINK_GO_OWNER":"到用户故事","TITLE_DELETE_ACTION":"删除任务","LIGHTBOX_TITLE_BLOKING_TASK":"封锁中的任务","FIELDS":{"IS_IOCAINE":"负予全新任务"},"TITLE_ACTION_IOCAINE":"感到任务的不勘负荷?确定其它人知道此状况在编辑任务时点选此「毒药键」。这种致命毒物如果长期吸食微量,最后可能免疫。因此你最好偶而做点出奇的挑战。"},"NOTIFICATION":{"OK":"一切顺利","WARNING":"哇,有状况发生","WARNING_TEXT":"很抱歉你的变动并未成功保存","SAVED":"系统已保存你所有变动","CLOSE":"关闭通知","MAIL":"通过邮件通知","DESKTOP":"使用浏览器警告作为桌面提醒","ASK_DELETE":"你确定要删除吗?"},"CANCEL_ACCOUNT":{"TITLE":"注销您的账户","SUBTITLE":"很遗憾你要离开Taiga,希望你喜欢这段时光~","PLACEHOLDER_INPUT_TOKEN":"注销账户代码","ACTION_LEAVING":"是的,我要走了","SUCCESS":"我们系统已移除你的账户"},"CHANGE_EMAIL_FORM":{"TITLE":"变更电子邮件","SUBTITLE":"确认要更新你的电子邮件","PLACEHOLDER_INPUT_TOKEN":"变更电邮代码","ACTION_CHANGE_EMAIL":"变更电邮地址","SUCCESS":"我们系统已更新你的电子邮件地址"},"ISSUES":{"PAGE_TITLE":"问题 - {{projectName}}","PAGE_DESCRIPTION":"{{projectName}}的问题清单看版:{{projectDescription}}","SECTION_NAME":"问题","ACTION_NEW_ISSUE":"+ 新问题","ACTION_PROMOTE_TO_US":"提升到用户故事","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"此问题已提升为用户故事","EXTERNAL_REFERENCE":"此问题的提出者是","GO_TO_EXTERNAL_REFERENCE":"回到开头","ACTION_DELETE":"删除议题","LIGHTBOX_TITLE_BLOKING_ISSUE":"冻结中的问题","LINK_TASKBOARD":"任务板","TITLE_LINK_TASKBOARD":"到任务板去","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"优先级","SEVERITY":"严重程度","TYPE":"类型"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"将此问题提为用户故事","MESSAGE":"你确定要用此问题创建一个新的用户故事?"},"TABLE":{"COLUMNS":{"TYPE":"类型","SEVERITY":"严重程度","PRIORITY":"优先级","SUBJECT":"主旨","VOTES":"投票数","STATUS":"状态","MODIFIED":"已修改","ASSIGNED_TO":"指派给"},"TITLE_ACTION_CHANGE_STATUS":"改变状态","TITLE_ACTION_ASSIGNED_TO":"指派给","BLOCKED":"已冻结","EMPTY":{"TITLE":"没有问题回报:-)","SUBTITLE":"你有发现任何问题吗?"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - 问题 {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"状态:{{issueStatus }},类型:{{issueType}},优先级:{{issuePriority}},严重程度:{{issueSeverity}},描述:{{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"看板 - {{projectName}}","PAGE_DESCRIPTION":"看板面板上有项目的用户故事 {{projectName}}:{{projectDescription}}","SECTION_NAME":"看板","TITLE_ACTION_FOLD":"隐藏栏位","TITLE_ACTION_UNFOLD":"未隐藏栏位","TITLE_ACTION_ADD_US":"新增用户故事","TITLE_ACTION_ADD_BULK":"成批增加","ACTION_SHOW_ARCHIVED":"显示归档资料","ACTION_HIDE_ARCHIVED":"隐藏归档","HIDDEN_USER_STORIES":"此状态下的用户故事预设为隐藏","PLACEHOLDER_CARD_TITLE":"这是您的用户故事","PLACEHOLDER_CARD_TEXT":"用户故事可有子任务以便分离需求"},"SEARCH":{"PAGE_TITLE":"搜索 - {{projectName}}","PAGE_DESCRIPTION":"项目搜索(用户故事, 问题, 任务或维基页等信息) {{projectName}}: {{projectDescription}}","FILTER_EPICS":"史诗","FILTER_USER_STORIES":"用户故事","FILTER_ISSUES":"问题","FILTER_TASKS":"任务","FILTER_WIKI":"维基页","PLACEHOLDER_SEARCH":"搜索","TITLE_ACTION_SEARCH":"搜索","EMPTY_TITLE":"依你搜索标准并未找到任何东西","EMPTY_DESCRIPTION":"请试试上方某一个分页或再搜索一次"},"TEAM":{"PAGE_TITLE":"团队- {{projectName}}","PAGE_DESCRIPTION":"团队面版可显示项目中所有成员{{projectName}}:{{projectDescription}}","SECTION_NAME":"团队","PLACEHOLDER_INPUT_SEARCH":"以全名搜索","COLUMN_MR_WOLF":"问题解决高手","EXPLANATION_COLUMN_MR_WOLF":"已关闭议题","COLUMN_IOCAINE":"新任务挑战者","EXPLANATION_COLUMN_IOCAINE":"毒物(新任务)剂量摄取","COLUMN_CERVANTES":"大文豪","EXPLANATION_COLUMN_CERVANTES":"已编辑的维基页","COLUMN_BUG_HUNTER":"Bug猎手","EXPLANATION_COLUMN_BUG_HUNTER":"问题回报","COLUMN_NIGHT_SHIFT":"夜猫子","EXPLANATION_COLUMN_NIGHT_SHIFT":"任务关闭","COLUMN_TOTAL_POWER":"总战斗力","EXPLANATION_COLUMN_TOTAL_POWER":"所有点数","SECTION_TITLE_TEAM":"团队 >","SECTION_FILTER_ALL":"所有","CONFIRM_LEAVE_PROJECT":"你确定要退出这个项目吗?","ACTION_LEAVE_PROJECT":"退出此项目"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[最大尺寸:{{maxFileSize}}]","MENU":{"SECTION_TITLE":"用户设置","USER_PROFILE":"用户设置","CHANGE_PASSWORD":"更新密码","EMAIL_NOTIFICATIONS":"电子邮件通知","DESKTOP_NOTIFICATIONS":"桌面提醒","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"桌面提醒","SECTION_NAME":"电子邮件通知","COLUMN_PROJECT":"项目","COLUMN_RECEIVE_ALL":"接收所有通知","COLUMN_ONLY_INVOLVED":"只接收相关通知","COLUMN_NO_NOTIFICATIONS":"不接收通知","OPTION_ALL":"所有","OPTION_INVOLVED":"相关","OPTION_NONE":"无"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"项目","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"项目"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"使用默认图片","ACTION_DELETE_ACCOUNT":"删除Taiga账户","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"检查你的收信箱
    我们送出了一封信
    里面有设定你新电子邮件的相关指示","CHANGE_PHOTO":"变更照片","FIELD":{"USERNAME":"用户名称","EMAIL":"电子邮件","FULL_NAME":"全名","PLACEHOLDER_FULL_NAME":"你的全名","BIO":"简历(最多210字)","PLACEHOLDER_BIO":"请自我介绍","LANGUAGE":"语言","LANGUAGE_DEFAULT":"-- 使用默认语言 --","THEME":"主题","THEME_DEFAULT":"-- 使用默认主题--"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - 维基 - {{projectName}}","PAGE_DESCRIPTION":"最近编辑{{lastModifiedDate}} (总共编辑了{{totalEditions}}次),内容:{{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"移除此维基页","DELETE_LIGHTBOX_TITLE":"删除维基页","DELETE_LINK_TITLE":"删除维基链接","NAVIGATION":{"HOME":"主页","SECTION_NAME":"连结","ACTION_ADD_LINK":"新增连结","ALL_PAGES":"所有页面"},"SUMMARY":{"TIMES_EDITED":"次数
    编辑","LAST_EDIT":"上次
    编辑","LAST_MODIFICATION":"上回修改"},"SECTION_PAGES_LIST":"所有页面","PAGES_LIST_COLUMNS":{"TITLE":"标题","EDITIONS":"版本","CREATED":"已创建","MODIFIED":"已修改","CREATOR":"创建者","LAST_MODIFIER":"最新修改者"}},"HINTS":{"SECTION_NAME":"提示","LINK":"如果想知道如何使用,可以到我们的支援页面了解详情。","LINK_TITLE":"造访我们的支援页面","HINT1_TITLE":"你知道可以导入与滙出项目吗?","HINT1_TEXT":"可以从 Taiga提取所有个人资料记录,移入其它地方。","HINT2_TITLE":"你知道可以创建个人化栏位吗","HINT2_TEXT":"作为一个灵活手段,团队现在可以创建自定义字段,这意味着需要为特殊的工作流指定有用的数据。","HINT3_TITLE":"根据特性来重新排序与你最为相关的项目。","HINT3_TEXT":"在顶端的直接访问条中,列出了十个项目。","HINT4_TITLE":"你忘记了你正在做什么了吗?","HINT4_TEXT":"别担心,在控制台可以找到你的公开任务、问题以及用户故事的工作次序。"},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} 上传新附件 {{obj_name}}","US_CREATED":"{{username}} 为项目 {{project_name}} 创建新的用户故事 {{obj_name}}","ISSUE_CREATED":"{{username}} 为项目 {{project_name}} 创建新问题 {{obj_name}}","TASK_CREATED":"{{username}} 为项目 {{project_name}} 创建新任务 {{obj_name}}","TASK_CREATED_WITH_US":"{{username}} 为项目 {{project_name}} 创建新任务 {{obj_name}},该任务隶属于用户故事 {{us_name}}","WIKI_CREATED":"{{username}} 为项目 {{project_name}} 创建新维基页 {{obj_name}}","MILESTONE_CREATED":"{{username}} 为项目 {{project_name}} 创建新冲刺任务 {{obj_name}}","EPIC_CREATED":"{{username}} 已经在{{project_name}}中创建了一个新史诗{{obj_name}}","EPIC_RELATED_USERSTORY_CREATED":"在{{project_name}}中{{username}}已经关联到史诗{{epic_name}}的用户故事{{related_us_name}}","NEW_PROJECT":"{{username}} 创建项目 {{project_name}}","MILESTONE_UPDATED":"{{username}} 已更新冲刺任务 {{obj_name}}","US_UPDATED":"{{username}} 已更新用户故事 {{obj_name}} 的 \"{{field_name}}\" 属性","US_UPDATED_WITH_NEW_VALUE":"{{username}} 更新了用户故事 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","US_UPDATED_POINTS":"{{username}} 更新了用户故事 {{obj_name}} 的 \"{{field_name}}\" 点数为 {{new_value}}","ISSUE_UPDATED":"{{username}} 更新了问题 {{obj_name}} 的 \"{{field_name}}\" 属性","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} 更新了问题 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","TASK_UPDATED":"{{username}} 更新了任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} 更新了任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","TASK_UPDATED_WITH_US":"{{username}} 更新了用户故事 {{us_name}} 的任务 {{obj_name}} 的 \"{{field_name}}\" 属性","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} 已更新了用户故事 {{us_name}} 的任务 {{obj_name}} 的 \"{{field_name}}\" 属性为 {{new_value}}","WIKI_UPDATED":"{{username}} 更新了维基页 {{obj_name}}","EPIC_UPDATED":"{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性为{{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}}已经更新了史诗{{obj_name}}的\"{{field_name}}\"属性为","NEW_COMMENT_US":"{{username}} 评论了用户故事 {{obj_name}}","NEW_COMMENT_ISSUE":"{{username}} 评论了问题 {{obj_name}}","NEW_COMMENT_TASK":"{{username}} 评论了任务 {{obj_name}}","NEW_COMMENT_EPIC":"{{username}}在史诗{{obj_name}}做了评论","NEW_MEMBER":"{{project_name}} 有新成员","US_ADDED_MILESTONE":"{{username}} 为冲刺 {{sprint_name}} 添加用户故事 {{obj_name}}","US_MOVED":"{{username}} 已经移动了用户故事 {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} 新增用户故事 {{obj_name}} 到待办任务","BLOCKED":"{{username}} 冻结了 {{obj_name}}","UNBLOCKED":"{{username}} 解除对 {{obj_name}} 的冻结","NEW_USER":"{{username}} 已加入 Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"问题","TASK":"任务"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"一个外部应用需要验证","PAGE_DESCRIPTION":"一个外部应用需要验证","AUTHORIZATION_REQUEST":"向你的Taiga账户验证{{application}}?","LOGIN_WITH_ANOTHER_USER":"以其他用户登录","AUTHORIZE_APP":"授权应用","CANCEL":"取消"},"JOYRIDE":{"NAV":{"NEXT":"下一个","BACK":"后退","SKIP":"跳过","DONE":"完成"},"DASHBOARD":{"STEP1":{"TITLE":"你的项目","TEXT":"欢迎!你将找到你所涉及的项目。"},"STEP2":{"TITLE":"进行中","TEXT":"在这里你将发现一些你正在处理的用户故事,任务,问题。"},"STEP3":{"TITLE":"观看中","TEXT1":"在这里你将会找到那些你希望了解的你的项目成员。","TEXT2":"你已经开始使用Taiga ;)"},"STEP4":{"TITLE":"现在开始!","TEXT1":"你可以以创建你的第一个Taiga项目开始。","TEXT2":"祝你好运!"}},"BACKLOG":{"STEP1":{"TITLE":"项目简介","TEXT1":"在这里你将看到你的项目状态。","TEXT2":"通过管理员,你可以改变项目的各种设置。"},"STEP2":{"TITLE":"产品待办事项","TEXT":"待办事项是产品的需求(用户故事)列表这里也就是你做冲刺计划的地方。"},"STEP3":{"TITLE":"冲刺任务","TEXT":"冲刺是一段时间(一般为两周),在这期间你需要完成指定工作并交付。"},"STEP4":{"TITLE":"用户故事","TEXT":"这些是更高层次的需求。你可以将它们添加到待办事项中,然后将其拖拽到冲刺,它们应该在冲刺中进行交付。"}},"KANBAN":{"STEP1":{"TITLE":"自定义你的工作流","TEXT":"通过管理员,根据你的需要设置这些列来映射你的工作流"},"STEP2":{"TITLE":"用户故事和任务","TEXT":"用户故事是更高层次的需求。你可以将其拖拽到不同列中"},"STEP3":{"TITLE":"添加你的用户故事","TEXT1":"你可能希望添加一个用户故事(添加用户故事图标)或者一组用户故事(批量图标)","TEXT2":"祝你好运!"}}},"DISCOVER":{"PAGE_TITLE":"探索更多项目","PAGE_DESCRIPTION":"Taiga中的公共项目的可搜索的目录。探索积压,时间线,问题,以及团队。检索出最喜欢的或者最活跃的项目。通过看板或者敏捷开发进行过滤。","DISCOVER_TITLE":"探索项目","DISCOVER_SUBTITLE":"{projects, plural, one{一个要发现的公开项目} other{# 个要发现的公开项目}}","MOST_ACTIVE":"最活跃的","MOST_ACTIVE_EMPTY":"还没有活动的项目","MOST_LIKED":"最受欢迎的","MOST_LIKED_EMPTY":"还没有喜欢的项目","VIEW_MORE":"查看更多","FEATURED":"特色项目","EMPTY":"没有满足当前搜索条件的项目。
    再试一次!","FILTERS":{"ALL":"所有","KANBAN":"看板","SCRUM":"冲刺","PEOPLE":"查找队友","WEEK":"上周","MONTH":"上月","YEAR":"去年","ALL_TIME":"长期","CLEAR":"清除过滤"},"SEARCH":{"PAGE_TITLE":"搜索 - 发现项目 - Taiga","PAGE_DESCRIPTION":"Taiga中的公共项目的可搜索的目录。探索积压,时间线,问题,以及团队。检索出最喜欢的或者最活跃的项目。通过看板或者敏捷开发进行过滤。","INPUT_PLACEHOLDER":"输入内容...","ACTION_TITLE":"搜索","RESULTS":"搜索结果"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1549282893552/locales/taiga/locale-zh-hant.json b/dist/v-1549282893552/locales/taiga/locale-zh-hant.json new file mode 100644 index 0000000..e00d3e0 --- /dev/null +++ b/dist/v-1549282893552/locales/taiga/locale-zh-hant.json @@ -0,0 +1 @@ +{"COMMON":{"YES":"Yes","NO":"No","OR":"or","I_GET_IT":"OK, I get it","LOADING":"載入中...","DATE":"DD MMM YYYY","DATETIME":"DD MMM YYYY HH:mm","SAVE":"儲存","CANCEL":"取消","ACCEPT":"接受","DELETE":"刪除","UNLINK":"Unlink","CREATE":"創建","ADD":"新增","COPY_TO_CLIPBOARD":"Copy to clipboard","COPIED_TO_CLIPBOARD":"Text has been copied to clipboard","EDIT":"編輯","DRAG":"拖拉","TAG_LINE":"你的敏捷、免費、和開放原始碼的專案管理工具","TAG_LINE_2":"愛你的專案","BLOCK":"封鎖","BLOCK_TITLE":"Block this item for example if it has a dependency that can not be satisfied","BLOCKED":"已封鎖","UNBLOCK":"解除封鎖","UNBLOCK_TITLE":"解除項目封鎖","BLOCKED_NOTE":"為何遭到封鎖?","BLOCKED_REASON":"請解釋此原因","CREATED_BY":"由 {{fullDisplayName}}創建","CLOSE":"關閉","GO_HOME":"帶我回到首頁","PLUGINS":"外掛","ONE_ITEM_LINE":"一行一物 ","NEW_BULK":"新批次插入","SUBTASKS":"Subtasks","PREVIOUS":"Previous","NEXT":"下一個","LOGOUT":"登出","EXTERNAL_USER":"外部使用者","GENERIC_ERROR":"我們的系統指出{{error}}.","IOCAINE_TEXT":"This member is feeling a bit overwhelmed by this task. Will become immune to the iocaine poison over time with your help. For now, may need a hug.","CLIENT_REQUIREMENT":"Client requirement is new requirement that was not previously expected and it is required to be part of the project","TEAM_REQUIREMENT":"Team requirement is a requirement that must exist in the project but should have no cost for the client","OWNER":"專案主持人","CAPSLOCK_WARNING":"請注意,此欄位大小寫有區別,目前輸入法切換至大寫模式","CONFIRM_CLOSE_EDIT_MODE_TITLE":"Are you sure you want to close the edit mode?","CONFIRM_CLOSE_EDIT_MODE_MESSAGE":"Remember that if you close the edit mode without saving all the changes will be lost","RELATED_USERSTORIES":"Related user stories","CARD":{"ASSIGN_TO":"Assign To","EDIT":"Edit card","DELETE":"Delete card","DELETE_ISSUE":"删除議題 ","DETACH_ISSUE_FROM_SPRINT":"Detach issue from sprint"},"FORM_ERRORS":{"DEFAULT_MESSAGE":"該數值似乎為無效","TYPE_EMAIL":"該電子郵件應為有效地址","TYPE_URL":"該網址應為有效連結","TYPE_URLSTRICT":"該網址應為有效連結","TYPE_NUMBER":"該數值應為有效號碼 ","TYPE_DIGITS":"該數值應為有效數字","TYPE_DATEISO":"該數值應為有效日期 (YYYY-MM-DD).","TYPE_ALPHANUM":"該數值應為字母","TYPE_PHONE":"該數值應為有效的電話號碼 ","NOTNULL":"該數值不應為零","NOT_BLANK":"該數值不應為空白","REQUIRED":"該數值為必要","REGEXP":"該數值似乎無效","MIN":"該數值應大於或等於 %s","MAX":"該數值應小於或等於 %s","RANGE":"該數值應介於 %s 與 %s之間","MIN_LENGTH":"該數值過簡短,它至少要有 %s個字元","MAX_LENGTH":"該數值過長,它不可多於 %s個字元。","RANGE_LENGTH":"該數值長度為無效,它應介於 %s 與 %s 字元之間","MIN_CHECK":"你必須至少選擇 %s 選項","MAX_CHECK":"你必須至多選出 %s選項","RANGE_CHECK":"你必須在%s 與 %s 之間作出選擇","EQUAL_TO":"該數值應為一致","LINEWIDTH":"One or more lines is perhaps too long. Try to keep under %s characters.","PIKADAY":"Invalid date format, please use DD MMM YYYY (like 23 Mar 1984)"},"PICKERDATE":{"FORMAT":"DD MMM YYYY","FIRST_DAY_OF_WEEK":"1","PREV_MONTH":"上個月","NEXT_MONTH":"下個月","MONTHS":{"JAN":"1月份","FEB":"2月份","MAR":"三月","APR":"四月份","MAY":"五月份","JUN":"六月份","JUL":"七月份","AUG":"八月份","SEP":"九月份","OCT":"十月份","NOV":"十一月份","DEC":"十二月份"},"WEEK_DAYS":{"SUN":"週日","MON":"週一","TUE":"週二","WED":"週三","THU":"週四","FRI":"週五","SAT":"週六"},"WEEK_DAYS_SHORT":{"SUN":"週日","MON":"週一","TUE":"週二","WED":"週三","THU":"週四","FRI":"週五","SAT":"週六"}},"SEE_USER_PROFILE":"觀看 {{username }} 個人資訊","USER_STORY":"使用者故事","TASK":"任務","ISSUE":"問題","EPIC":"Epic","TAGS":{"PLACEHOLDER":"Enter tag","DELETE":"刪除Tag","ADD":"新增標籤"},"DESCRIPTION":{"EMPTY":"留下空白顯得很無趣,寫下點描述吧","NO_DESCRIPTION":"未有任何描述"},"FIELDS":{"SUBJECT":"主旨","NAME":"名稱 ","URL":"網址","DESCRIPTION":"描述","VALUE":"數值","SLUG":"代稱 ","COLOR":"顏色","IS_CLOSED":"關閉中?","STATUS":"狀態","TYPE":"類型","SEVERITY":"急迫性","PRIORITY":"優先性","ASSIGNED_TO":"指派給 ","ASSIGNED_USERS":"Assigned users","POINTS":"點數","IS_BLOCKED":"封鎖","REF":"Ref","VOTES":"投票數","SPRINT":"衝刺任務","DUE_DATE":"Due date","DUE_DATE_REASON":"Due date reason"},"ROLES":{"ALL":"所有"},"ASSIGNED_TO":{"NOT_ASSIGNED":"未指派","ASSIGN":"指派","DELETE_ASSIGNMENT":"刪除指派","REMOVE_ASSIGNED":"數值","TOO_MANY":"太多用戶,繼續過濾中","CONFIRM_UNASSIGNED":"你確定要讓它無任何指派嗎?","TITLE_ACTION_EDIT_ASSIGNMENT":"編輯指派","SELF":"指派給我"},"DUE_DATE":{"TITLE_ACTION_SET_DUE_DATE":"Set due date"},"ASSIGNED_USERS":{"ADD":"Select assigned user","ADD_ASSIGNED":"Add assigned","TITLE_LIGHTBOX_DELETE_ASSIGNED":"Delete assigned..."},"STATUS":{"CLOSED":"關閉","OPEN":"開啟"},"WATCHERS":{"WATCHERS":"觀注者","ADD":"新增觀注者","TITLE_ADD":"將專案成員加到觀注者清單裏","DELETE":"已刪除監督者","TITLE_LIGHTBOX_DELETE_WARTCHER":"刪除監督者"},"WATCH_BUTTON":{"WATCH":"觀注","WATCHING":"觀看中","UNWATCH":"不觀注","WATCHERS":"觀注者","BUTTON_TITLE":"Watch/Unwatch this item","COUNTER_TITLE":"{total, plural, one{一個觀注者} other{# 觀注者}}"},"VOTE_BUTTON":{"BUTTON_TITLE":"Upvote/Downvote this item","COUNTER_TITLE":"{total, plural, one{one vote} other{# votes}}"},"CUSTOM_ATTRIBUTES":{"CUSTOM_FIELDS":"客製化欄位","SAVE":"儲存客製化欄位","EDIT":"編輯客製化欄位","DELETE":"刪除客製屬性","CONFIRM_DELETE":"記住在此客制欄位裏的數值資料都將遭刪除\n你確定要繼續嗎?"},"FILTERS":{"INPUT_PLACEHOLDER":"主旨或參考","TITLE_ACTION_FILTER_BUTTON":"搜尋","TITLE":"過濾器","TITLE_ACTION_SEARCH":"搜尋","ACTION_SAVE_CUSTOM_FILTER":"儲存為客製過濾器 ","PLACEHOLDER_FILTER_NAME":"寫入過濾器名稱後按下enter ","APPLIED_FILTERS_NUM":"filters applied","TITLE_ADVANCED_FILTER":"Advanced","ADVANCED_FILTERS":{"INCLUDE":"Include","EXCLUDE":"Exclude"},"CATEGORIES":{"TYPE":"類型","STATUS":"狀態","SEVERITY":"急迫性","PRIORITIES":"優先性","TAGS":"標籤","ASSIGNED_TO":"指派給 ","ASSIGNED_USERS":"Assigned users","ROLE":"角色","CREATED_BY":"由創建","CUSTOM_FILTERS":"客製過濾器 ","EPIC":"Epic"}},"WYSIWYG":{"CODE_SNIPPET":"Code Snippet","DB_CLICK":"double click to edit","SELECT_LANGUAGE_PLACEHOLDER":"Select Language","SELECT_LANGUAGE_REMOVE_FORMATING":"Remove formatting","OUTDATED":"Another person has made changes while you were editing. Check the new version on the activity tab before you save your changes.","MARKDOWN_HELP":"Markdown 語法協助"},"PERMISIONS_CATEGORIES":{"EPICS":{"NAME":"Epics","VIEW_EPICS":"View epics","ADD_EPICS":"Add epics","MODIFY_EPICS":"Modify epics","COMMENT_EPICS":"Comment epics","DELETE_EPICS":"Delete epics"},"SPRINTS":{"NAME":"衝刺任務","VIEW_SPRINTS":"檢視衝刺任務 ","ADD_SPRINTS":"增加衝刺任務","MODIFY_SPRINTS":"修正衝刺任務","DELETE_SPRINTS":"刪除衝刺任務"},"USER_STORIES":{"NAME":"使用者故事","VIEW_USER_STORIES":"檢視使用者故事","ADD_USER_STORIES":"新增使用者故事","MODIFY_USER_STORIES":"修正使用者故事","COMMENT_USER_STORIES":"Comment user stories","DELETE_USER_STORIES":"刪除使用者故事"},"TASKS":{"NAME":"任務 ","VIEW_TASKS":"檢視任務 ","ADD_TASKS":"新增任務 ","MODIFY_TASKS":"修正任務 ","COMMENT_TASKS":"Comment tasks","DELETE_TASKS":"刪除任務"},"ISSUES":{"NAME":"問題 ","VIEW_ISSUES":"檢視問題 ","ADD_ISSUES":"新增問題 ","MODIFY_ISSUES":"修正議題 ","COMMENT_ISSUES":"Comment issues","DELETE_ISSUES":"刪除問題 "},"WIKI":{"NAME":"維基","VIEW_WIKI_PAGES":"檢視維基頁","ADD_WIKI_PAGES":"新增維基頁","MODIFY_WIKI_PAGES":"修正維基頁","DELETE_WIKI_PAGES":"刪除維基頁 ","VIEW_WIKI_LINKS":"檢視維基連結","ADD_WIKI_LINKS":"新增維基連結","DELETE_WIKI_LINKS":"刪除維基連結"}}},"LOGIN":{"PAGE_TITLE":"登入 - Taiga","PAGE_DESCRIPTION":"登入Taig,它是一個給新創團隊與敏捷開發者設計師使用的專案管理平台。Taiga是一個簡易輕鬆美觀的工具,讓工作變成樂趣。"},"AUTH":{"INVITED_YOU":"已邀請您加入此專案","NOT_REGISTERED_YET":"還沒註冊嗎?","REGISTER":"註冊","CREATE_ACCOUNT":"在此建立您的免費帳號"},"LOGIN_COMMON":{"HEADER":"我已登入Taiga","PLACEHOLDER_AUTH_NAME":"使用者名稱或電子郵件(注意大小寫)","LINK_FORGOT_PASSWORD":"忘記了?","TITLE_LINK_FORGOT_PASSWORD":"你是否忘了密碼嗎","ACTION_ENTER":"Enter","ACTION_SIGN_IN":"登入","PLACEHOLDER_AUTH_PASSWORD":"密碼(大小寫有別)","ALT_LOGIN":"Or login with"},"LOGIN_FORM":{"ERROR_AUTH_INCORRECT":"按我們的箹統記錄,你的帳戶名稱/電子郵件或密碼並不正確 ","SUCCESS":"我們系統歡迎你加入Taiga"},"REGISTER":{"PAGE_TITLE":"註冊 - Taiga","PAGE_DESCRIPTION":"在Taiga創建一個帳號,它是一個給新創團隊與敏捷開發者設計師使用的專案管理平台。Taiga是一個簡易輕鬆美觀的工具,讓工作變成樂趣。"},"REGISTER_FORM":{"TITLE":"註冊一個新的Taiga帳戶(免費 )","PLACEHOLDER_NAME":"選一個用戶帳號(注意大小寫)","PLACEHOLDER_FULL_NAME":"選取你的全名","PLACEHOLDER_EMAIL":"你的電子郵件","PLACEHOLDER_PASSWORD":"設定密碼(注意大小寫不同) ","ACTION_SIGN_UP":"註冊","TITLE_LINK_LOGIN":"登入","LINK_LOGIN":"你是否已註冊? 登入"},"FORGOT_PASSWORD":{"PAGE_TITLE":"忘記密碼 - Taiga","PAGE_DESCRIPTION":"輸入用戶名稍或電子郵件以獲取新密碼,可以再重新登入Taiga權限"},"FORGOT_PASSWORD_FORM":{"TITLE":"你是否忘了密碼嗎","SUBTITLE":"輸入你的帳戶名稱或電子郵件以進行註冊","PLACEHOLDER_FIELD":"使用者名稱或電子郵件","ACTION_RESET_PASSWORD":"重設密碼 ","LINK_CANCEL":"不,請帶我回去,我記起來了","SUCCESS_TITLE":"Check your inbox!","SUCCESS_TEXT":"已將重設密碼的郵件寄送至您的電子信箱","ERROR":"按我們的記錄,你尚未註冊"},"CHANGE_PASSWORD":{"PAGE_TITLE":"變更密碼 - Taiga","SECTION_NAME":"改變密碼 ","FIELD_CURRENT_PASSWORD":"現用密碼 ","PLACEHOLDER_CURRENT_PASSWORD":"你目前的密碼(如果你未有密碼,此處請空白)","FIELD_NEW_PASSWORD":"新密碼 ","PLACEHOLDER_NEW_PASSWORD":"輸入新密碼","FIELD_RETYPE_PASSWORD":"重新輸入新密碼","PLACEHOLDER_RETYPE_PASSWORD":"重新輸入新密碼","ERROR_PASSWORD_MATCH":"密碼不符"},"CHANGE_PASSWORD_RECOVERY_FORM":{"TITLE":"創建新Taiga通過","SUBTITLE":"你也許該吃點鐵質豐富的食物,它對你的大腦有益處:p","PLACEHOLDER_NEW_PASSWORD":"新密碼 ","PLACEHOLDER_RE_TYPE_NEW_PASSWORD":"重新輸入新密碼","ACTION_RESET_PASSWORD":"重設密碼 ","ERROR":"Our Oompa Loompas can't find your request to recover your password. Try to ask for it again.","SUCCESS":"系統已儲存你的新密碼
    試試 用它登入 "},"INVITATION":{"PAGE_TITLE":"接受邀請- Taiga","PAGE_DESCRIPTION":"接受邀請加入Taiga上的專案,它是一個給新創團隊與敏捷開發者設計師使用的專案管理平台。Taiga是一個簡易輕鬆美觀的工具,讓工作變成樂趣。"},"INVITATION_LOGIN_FORM":{"NOT_FOUND":"我們找不到你的邀請碼","SUCCESS":"你成功地加入此專案,歡迎來到 {{project_name}}"},"HOME":{"PAGE_TITLE":"首頁 - Taiga","PAGE_DESCRIPTION":"Taiga 首頁,你的主要專案以及任命,觀看使用者故事,任務與問題。","EMPTY_WORKING_ON":"It feels empty, doesn't it? Start working with Taiga and you'll see here the stories, tasks and issues you are working on.","EMPTY_WATCHING":"Follow User Stories, Tasks, Issues in your projects and be notified about its changes :)","EMPTY_PROJECT_LIST":"你尚無任何專案","WORKING_ON_SECTION":"進行中","WATCHING_SECTION":"觀看中","DASHBOARD":"專案控制台"},"EPICS":{"TITLE":"EPICS","SECTION_NAME":"Epics","EPIC":"EPIC","PAGE_TITLE":"Epics - {{projectName}}","PAGE_DESCRIPTION":"The epics list of the project {{projectName}}: {{projectDescription}}","DASHBOARD":{"ADD":"+ ADD EPIC","UNASSIGNED":"未指派"},"EMPTY":{"TITLE":"It looks like there aren't any epics yet","EXPLANATION":"Epics are items at a higher level that encompass user stories.
    Epics are at the top of the hierarchy and can be used to group user stories together.","HELP":"Learn more about epics"},"TABLE":{"VOTES":"投票數","NAME":"名稱 ","PROJECT":"專案","SPRINT":"衝刺任務","ASSIGNED_TO":"Assigned","STATUS":"狀態","PROGRESS":"Progress","VIEW_OPTIONS":"View options"},"CREATE":{"TITLE":"New Epic","PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this epic","TEAM_REQUIREMENT":"Team requirement","CLIENT_REQUIREMENT":"Client requirement","BLOCKED":"已封鎖","BLOCKED_NOTE_PLACEHOLDER":"Why is this epic blocked?","CREATE_EPIC":"Create epic"}},"PROJECTS":{"PAGE_TITLE":"我的專案 - Taiga","PAGE_DESCRIPTION":"你的專案列表,你可以記錄或創建新專案。","MY_PROJECTS":"我的專案"},"ATTACHMENT":{"SECTION_NAME":"附件","TITLE":"{{ fileName }} 上傳於 {{ date }}","LIST_VIEW_MODE":"列出檢視模視","GALLERY_VIEW_MODE":"檢視模視選項","DESCRIPTION":"輸入一段簡短描述","DEPRECATED":"(被棄用)","DEPRECATED_FILE":"棄用?","ADD":"加入新附件 {{maxFileSizeMsg}}","DROP":"在此移除附件 ","SHOW_DEPRECATED":"+ 顯示棄用的附件","HIDE_DEPRECATED":"- 隱藏棄用的附件","COUNT_DEPRECATED":"({{ counter }} 遭棄用)","MAX_UPLOAD_SIZE":"上傳檔案最大容量限制 {{maxFileSize}}","DATE":"DD MMM YYYY [at] hh:mm","ERROR_UPLOAD_ATTACHMENT":"無法成功上傳 '{{fileName}}'. {{errorMessage}}","TITLE_LIGHTBOX_DELETE_ATTACHMENT":"刪除附件....","MSG_LIGHTBOX_DELETE_ATTACHMENT":"附件 '{{fileName}}'","ERROR_DELETE_ATTACHMENT":"無法刪除: {{errorMessage}}","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})"},"PAGINATION":{"PREVIOUS":"Prev","NEXT":"下一個"},"ADMIN":{"COMMON":{"TITLE_ACTION_EDIT_VALUE":"編輯數值","TITLE_ACTION_DELETE_VALUE":"删除值","TITLE_ACTION_DELETE_TAG":"刪除Tag"},"HELP":"需要幫助嗎?看看我們的支援頁面吧!","PROJECT_DEFAULT_VALUES":{"TITLE":"預設值","SUBTITLE":"將所有選項設為預設值"},"MEMBERSHIPS":{"TITLE":"管理成員","PAGE_TITLE":"成員資格 - {{projectName}}","ADD_BUTTON":"+ 新成員","ADD_BUTTON_TITLE":"增加新成員","UPGRADE_BUTTON":"Upgrade your plan","LIMIT_USERS_WARNING_MESSAGE_FOR_ADMIN":"If you would like to add more members, please contact the project owner {{ owner_email }}","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"This project has reached its limit of ({{members}}) allowed members. If you would like to increase that limit please contact the administrator."},"PROJECT_EXPORT":{"TITLE":"匯出","SUBTITLE":"匯出你的專案以備份,或以此為基礎來建立一個新的。","EXPORT_BUTTON":"匯出","EXPORT_BUTTON_TITLE":"匯出你的專案","LOADING_TITLE":"傾倒檔案正在生成中","DUMP_READY":"你注入的檔案已完成","LOADING_MESSAGE":"請勿關閉本頁","ASYNC_MESSAGE":"準備好後,我們會送給 你一封電子郵件","SYNC_MESSAGE":"如果未能自動下載,請點選此處 . ","ERROR":"我們的系統無法製作你的滙出資料,請再試一次 ","ERROR_BUSY":"抱歉系統繁忙中,請稍後再試試 "},"MODULES":{"TITLE":"模組","EPICS":"Epics","EPICS_DESCRIPTION":"Visualize and manage the most strategic part of your project","BACKLOG":"待辦任務優先表","BACKLOG_DESCRIPTION":"管理你的 User Story 讓接下來的及優先的工作能被有條理地檢視 ","NUMBER_SPRINTS":"Expected number of sprints","NUMBER_SPRINTS_HELP":"0 for an undetermined number","NUMBER_US_POINTS":"Expected total of story points","NUMBER_US_POINTS_HELP":"0 for an undetermined number","KANBAN":"Kanban(看板)","KANBAN_DESCRIPTION":"在此看板上組織你的專案","ISSUES":"問題 ","ISSUES_DESCRIPTION":"追踪系統錯誤問題強化你的專案,不要錯過任何事 ","WIKI":"維基","WIKI_DESCRIPTION":"新增,修正或是刪除與他人合作的內容。這裏正是專案文件記錄區","MEETUP":"符合","MEETUP_DESCRIPTION":"Choose your videoconference system.","SELECT_VIDEOCONFERENCE":"選擇一個視訊會議系統 ","SALT_CHAT_ROOM":"Add a prefix to the chatroom name","JITSI_CHAT_ROOM":"Jitsi","APPEARIN_CHAT_ROOM":"AppearIn","TALKY_CHAT_ROOM":"Talky","CUSTOM_CHAT_ROOM":"自定","URL_CHAT_ROOM":"聊天室之網址"},"PROJECT_PROFILE":{"PAGE_TITLE":"{{sectionName}} - 專案檔案 - {{projectName}}","PROJECT_DETAILS":"專案細節","PROJECT_NAME":"專案名稱","TAGS":"標籤","DESCRIPTION":"描述","RECRUITING":"這個專案是否在徵人","RECRUITING_MESSAGE":"你在找誰?","RECRUITING_PLACEHOLDER":"定義你要找的資訊","FEEDBACK":"Receive feedback from Taiga users?","PUBLIC_PROJECT":"公開專案","PRIVATE_PROJECT":"不公開專案","PRIVATE_OR_PUBLIC":"公開專案和私密專案有何差異?","DELETE":"刪除此專案","CHANGE_LOGO":"更改圖標","ACTION_USE_DEFAULT_LOGO":"使用設預圖片","MAX_PRIVATE_PROJECTS":"\b您已到達目前會員等級的私有專案數上限","MAX_PRIVATE_PROJECTS_MEMBERS":"The maximum number of members for private projects has been exceeded","MAX_PUBLIC_PROJECTS":"Unfortunately, you've reached the maximum number of public projects allowed by your current plan","MAX_PUBLIC_PROJECTS_MEMBERS":"The project exceeds your maximum number of members for public projects","PROJECT_OWNER":"Project owner","REQUEST_OWNERSHIP":"Request ownership","REQUEST_OWNERSHIP_CONFIRMATION_TITLE":"Do you want to become the new project owner?","REQUEST_OWNERSHIP_DESC":"Request that current project owner {{name}} transfer ownership of this project to you.","REQUEST_OWNERSHIP_BUTTON":"要求","REQUEST_OWNERSHIP_SUCCESS":"We'll notify the project owner","CHANGE_OWNER":"Change owner","CHANGE_OWNER_SUCCESS_TITLE":"Ok, your request has been sent!","CHANGE_OWNER_SUCCESS_DESC":"We will notify you by email if the project ownership request is accepted or declined"},"REPORTS":{"TITLE":"Reports","SUBTITLE":"以 CSV 格式匯出你的專案資料,並製作你的專屬報告","DESCRIPTION":"下載CSV檔案格式是複制生成網址到常用的文字編輯軟體/試算表,以保存你的專案資料報告。你可以輕易地視覺化和分析你的資料。","HELP":"使用者故事預設欄位","REGENERATE_TITLE":"改變網址","REGENERATE_SUBTITLE":"You are going to change the CSV data access url. The previous url will be disabled. Are you sure?","DELETE_TITLE":"Delete URL","DELETE_SUBTITLE":"You are going to delete the current CSV data access url. Are you sure?"},"CSV":{"SECTION_TITLE_EPIC":"epics reports","SECTION_TITLE_US":"使用者故事報告","SECTION_TITLE_TASK":"任務報告","SECTION_TITLE_ISSUE":"問題報告","DOWNLOAD":"下戴CSV檔案","URL_FIELD_PLACEHOLDER":"再次產生CSV 網址","TITLE_REGENERATE_URL":"再次產生CSV 網址","ACTION_GENERATE_URL":"產生網址","ACTION_REGENERATE":"再次產生","TITLE_DELETE_URL":"Delete CSV url","ACTION_DELETE_URL":"刪除"},"CUSTOM_FIELDS":{"TITLE":"客製化欄位","SUBTITLE":"指定使用者故事,任務與問題一些客製化欄位","EPIC_DESCRIPTION":"Epics custom fields","EPIC_ADD":"Add a custom field in epics","US_DESCRIPTION":"使用者客製欄位","US_ADD":"在使用者故事中加入客制欄位","TASK_DESCRIPTION":"任務客製化欄位","TASK_ADD":"在任務中加入客制欄位","ISSUE_DESCRIPTION":"問題客製化欄位","ISSUE_ADD":"在問題中加入客制欄位","FIELD_TYPE_TEXT":"單行文字","FIELD_TYPE_RICHTEXT":"Rich text","FIELD_TYPE_MULTI":"多行","FIELD_TYPE_DATE":"日期","FIELD_TYPE_URL":"網址","FIELD_TYPE_DROPDOWN":"Dropdown","FIELD_TYPE_CHECKBOX":"Checkbox","FIELD_TYPE_NUMBER":"Number"},"PROJECT_VALUES":{"PAGE_TITLE":"{{sectionName}} - 專案數值 - {{projectName}}","REPLACEMENT":"所有此數值物品將改成","ERROR_DELETE_ALL":"你不能刪除所有數值"},"PROJECT_VALUES_POINTS":{"TITLE":"點數","SUBTITLE":"指定你的使用者故事點數可能預估為","US_TITLE":"使用者故事點數","ACTION_ADD":"增加點數"},"PROJECT_VALUES_PRIORITIES":{"TITLE":"優先性","SUBTITLE":"指明你將遇到的問題優先程度","ISSUE_TITLE":"問題優先性","ACTION_ADD":"新增優先性"},"PROJECT_VALUES_SEVERITIES":{"TITLE":"急迫性","SUBTITLE":"指明你將遇到問題的嚴重程度","ISSUE_TITLE":"問題急迫性","ACTION_ADD":"新增急迫性"},"PROJECT_VALUES_STATUS":{"TITLE":"Statuses","SUBTITLE":"指明你的使用者故事狀態,任務以及經歷問題 ","EPIC_TITLE":"Epic Statuses","US_TITLE":"User Story Statuses","TASK_TITLE":"任務狀態","ISSUE_TITLE":"問題狀態"},"PROJECT_VALUES_TYPES":{"TITLE":"類型","SUBTITLE":"指定你的問題類型可能是","ISSUE_TITLE":"問題類型","ACTION_ADD":"新增{{objName}}"},"PROJECT_VALUES_TAGS":{"TITLE":"標籤","SUBTITLE":"View and edit the color of your tags","EMPTY":"Currently there are no tags","EMPTY_SEARCH":"It looks like nothing was found with your search criteria","ACTION_ADD":"新增標籤","NEW_TAG":"New tag","MIXING_HELP_TEXT":"Select the tags that you want to merge","MIXING_MERGE":"Merge Tags","SELECTED":"已選擇"},"PROJECT_DUE_DATE_STATUS":{"TITLE":"Due Dates","SUBTITLE":"Specify the due dates your user stories, tasks and issues will go through if selected","US_TITLE":"User Story Due Date status","ACTION_ADD_STATUS":"增加新狀態","TASK_TITLE":"Task Due Date status","ISSUE_TITLE":"Issue Due Date status","DAYS_TO_DUE_DATE":"Days to due date","BEFORE_AFTER":"Before/after","BEFORE":"Before","AFTER":"Past"},"ROLES":{"PAGE_TITLE":"角色- {{projectName}}","WARNING_NO_ROLE":"注意,你的專案中無角色可以評估使用者故事的點數","HELP_ROLE_ENABLED":"當啟動時,被指派此角色的成員將可以評估使用者故事點數","DISABLE_COMPUTABLE_ALERT_TITLE":"Are you sure you want to disable this role estimations?","DISABLE_COMPUTABLE_ALERT_SUBTITLE":"If you disable estimation permissions for role {{roleName}} all previous estimations made by this role will be removed","COUNT_MEMBERS":"{{ role.members_count }} 這類角色的成員","TITLE_DELETE_ROLE":"删除角色","REPLACEMENT_ROLE":"和此角色有關的使用者都將遭移除 ","WARNING_DELETE_ROLE":"Be careful! All role estimations will be removed","ERROR_DELETE_ALL":"你不能刪除所有數值","EXTERNAL_USER":"外部使用者","NOTE_EXTERNAL_USERS":"Note: by External User we mean any anonymous user not belonging to the Taiga platform, including search engines. Please use this role with care."},"THIRD_PARTIES":{"SECRET_KEY":"Secret key","PAYLOAD_URL":"有效載荷網址","VALID_IPS":"有效來源IP(請用逗點分開)"},"BITBUCKET":{"SECTION_NAME":"Bitbucket","PAGE_TITLE":"Bitbucket - {{projectName}}","INFO_VERIFYING_IP":"Bitbucket要求不指派因此最佳確認方式為IP位置來源。如果此處空白,表示IP未有效確核。"},"GITLAB":{"SECTION_NAME":"Gitlob","PAGE_TITLE":"Gitlab - {{projectName}}","INFO_VERIFYING_IP":"GitHub要求不指派因此最佳確認方式為IP位置來源。如果此處空白,表示IP未有效確核。"},"GITHUB":{"SECTION_NAME":"GitHub","PAGE_TITLE":"GitHub - {{projectName}}"},"GOGS":{"SECTION_NAME":"Gogs","PAGE_TITLE":"Gogs - {{projectName}}"},"WEBHOOKS":{"PAGE_TITLE":"Webhooks- {{projectName}}","SECTION_NAME":"網頁觸發 ","ADD_NEW":"新增一個網頁觸發 ","TYPE_NAME":"鍵入服務名稱 ","TYPE_PAYLOAD_URL":"鍵入服務有效載荷網址","TYPE_SERVICE_SECRET":"鍵入服務密碼鑰匙 ","SAVE":"儲存網頁觸發 ","CANCEL":"取消網頁觸發 ","SHOW_HISTORY":"(顯示記錄)","TEST":"測試網頁觸發 ","EDIT":"編輯網頁觸發 ","DELETE":"刪除網頁觸發 ","REQUEST":"要求","RESEND_REQUEST":"重送出要求","HEADERS":"標頭 ","PAYLOAD":"有效載荷","RESPONSE":"回應","DATE":"DD MMM YYYY [at] hh:mm","ACTION_HIDE_HISTORY":"(藏記錄)","ACTION_HIDE_HISTORY_TITLE":"藏記錄細節","ACTION_SHOW_HISTORY":"(顯示記錄)","ACTION_SHOW_HISTORY_TITLE":"顯示記錄細節","WEBHOOK_NAME":"網頁觸發 '{{name}}'"},"CUSTOM_ATTRIBUTES":{"PAGE_TITLE":"{{sectionName}} - 個人化屬性 - {{projectName}}","ADD":"加入客製化欄位","EDIT":"編輯客製化欄位","DELETE":"刪除客製欄位","SAVE_TITLE":"儲存客製化欄位","CANCEL_TITLE":"取消創建","SET_FIELD_NAME":"設定你的客制欄位名稱 ","SET_FIELD_DESCRIPTION":"設定你客製化欄位的文字描述","FIELD_TYPE_DEFAULT":"-- 選擇其一 --","ACTION_UPDATE":"更新客製化欄位","ACTION_CANCEL_EDITION":"取消編輯 "},"MEMBERSHIP":{"COLUMN_MEMBER":"成員","COLUMN_ADMIN":"管理者","COLUMN_ROLE":"角色","COLUMN_STATUS":"狀態","STATUS_ACTIVE":"活躍 ","STATUS_PENDING":"待辦中","DELETE_MEMBER":"刪除成員","RESEND":"重新送出","SUCCESS_SEND_INVITATION":"我們已再次發出邀請信給'{{email}}'. ","SUCCESS_DELETE":"已刪除 {{message}}.","ERROR_DELETE":"我們無法刪除 {{message}}.","DEFAULT_DELETE_MESSAGE":"邀請 {{email}}"},"DEFAULT_VALUES":{"LABEL_EPIC_STATUS":"Default value for epic status selector","LABEL_US_STATUS":"Default value for user story status selector","LABEL_POINTS":"點數選擇器預設值","LABEL_TASK_STATUS":"任務狀態選擇器預設值","LABEL_ISSUE_TYPE":"問題類型選擇器預設值","LABEL_ISSUE_STATUS":"問題狀態選擇器預設值","LABEL_PRIORITY":"優先選擇器預設值","LABEL_SEVERITY":"急迫性選擇器預設值"},"STATUS":{"PLACEHOLDER_WRITE_STATUS_NAME":"為此新狀態命名","PLACEHOLDER_DAYS_TO_DUE_DATE":"Write a number of days to due date"},"TYPES":{"PLACEHOLDER_WRITE_NAME":"為此新要素命名"},"US_STATUS":{"ACTION_ADD_STATUS":"增加新狀態","IS_ARCHIVED_COLUMN":"歸檔","IS_CLOSED_COLUMN":"關閉","WIP_LIMIT_COLUMN":"WIP限制","PLACEHOLDER_WRITE_NAME":"為此新狀態命名"},"MENU":{"PROJECT":"專案","ATTRIBUTES":"屬性","MEMBERS":"成員","PERMISSIONS":"權限","INTEGRATIONS":"整合"},"SUBMENU_PROJECT_VALUES":{"STATUS":"狀態","POINTS":"點數","PRIORITIES":"優先性","SEVERITIES":"急迫性","TYPES":"類型","CUSTOM_FIELDS":"客製化欄位","TAGS":"標籤","DUE_DATES":"Due dates"},"SUBMENU_ROLES":{"TITLE":"角色","ACTION_NEW_ROLE":"+ 新角色","TITLE_ACTION_NEW_ROLE":"新增角色"},"PROJECT_TRANSFER":{"DO_YOU_ACCEPT_PROJECT_OWNERNSHIP":"Would you like to become the new project owner?","PRIVATE":"Private","ACCEPTED_PROJECT_OWNERNSHIP":"Congratulations! You're now the new project owner.","REJECTED_PROJECT_OWNERNSHIP":"OK. We'll contact the current project owner","ACCEPT":"接受","REJECT":"Reject","PROPOSE_OWNERSHIP":"{{owner}}, the current owner of the project {{project}} has asked that you become the new project owner.","ADD_COMMENT":"Would you like to add a comment for the project owner?","UNLIMITED_PROJECTS":"Unlimited","OWNER_MESSAGE":{"PRIVATE":"Please remember that you can own up to {{maxProjects}} private projects. You currently own {{currentProjects}} private projects","PUBLIC":"Please remember that you can own up to {{maxProjects}} public projects. You currently own {{currentProjects}} public projects"},"CANT_BE_OWNED":"At the moment you cannot become an owner of a project of this type. If you would like to become the owner of this project, please contact the administrator so they change your account settings to enable project ownership."}},"USER":{"PROFILE":{"PAGE_TITLE":"{{userFullName}} (@{{userUsername}})","EDIT":"編輯個人資料","CLOSED_US":"閞閉使用者故事","PROJECTS":"專案","PROJECTS_EMPTY":"{{username}} 尚無專案","CONTACTS":"聯絡人","CONTACTS_EMPTY":"{{username}} 尚無聯絡人","CURRENT_USER_CONTACTS_EMPTY":"您尚無任何聯絡人","CURRENT_USER_CONTACTS_EMPTY_EXPLAIN":"你在Taiga一同工作的伙伴將自動成為你的聯絡人","TABS":{"ACTIVITY_TAB":"時間表","ACTIVITY_TAB_TITLE":"顯示該用戶的所有活動","PROJECTS_TAB":"專案","PROJECTS_TAB_TITLE":"列出所有專案的用戶成員名單","LIKES_TAB":"喜歡","LIKES_TAB_TITLE":"列出該使用者的喜受清單","VOTES_TAB":"投票數","VOTES_TAB_TITLE":"列出該使用者的所有投票數","WATCHED_TAB":"已觀注","WATCHED_TAB_TITLE":"該使用者所有觀注的專案清單","CONTACTS_TAB":"聯絡人","CONTACTS_TAB_TITLE":"列出該使用者所有的聯絡人"}},"PROFILE_SIDEBAR":{"TITLE":"個人資訊","DESCRIPTION":"People can see everything you do and what you are working on. Add a nice bio to give an enhanced version of your information.","ADD_INFO":"編輯自介"},"PROFILE_FAVS":{"FILTER_INPUT_PLACEHOLDER":"輸入文字","FILTER_TYPE_ALL":"所有","FILTER_TYPE_ALL_TITLE":"顯示全部","FILTER_TYPE_PROJECTS":"專案","FILTER_TYPE_PROJECTS_TITLE":"只顯示專案","FILTER_TYPE_EPICS":"Epics","FILTER_TYPE_EPICS_TITLE":"Show only epics","FILTER_TYPE_USER_STORIES":"故事","FILTER_TYPE_USER_STORIES_TITLE":"只顯視使用者故事","FILTER_TYPE_TASKS":"任務 ","FILTER_TYPE_TASKS_TITLE":"只顯示任務 ","FILTER_TYPE_ISSUES":"問題 ","FILTER_TYPE_ISSUES_TITLE":"只顯示問題 ","EMPTY_TITLE":"似乎沒有東西可顯示"}},"PROJECT":{"PAGE_TITLE":"{{projectName}}","HELP":"記錄你的專案在上方常用欄位
    前十個專案將會顯示在上方導覽處。","PRIVATE":"不公開專案","LOOKING_FOR_PEOPLE":"這個專案正在徵人","FANS_COUNTER_TITLE":"{total, plural, one{一個粉絲} other{# 粉絲}}","WATCHERS_COUNTER_TITLE":"{total, plural, one{一個觀注者} other{# 觀注者}}","MEMBERS_COUNTER_TITLE":"{total, plural, one{one member} other{# members}}","BLOCKED_PROJECT":{"BLOCKED":"Blocked project","THIS_PROJECT_IS_BLOCKED":"This project is temporarily blocked","TO_UNBLOCK_CONTACT_THE_ADMIN_STAFF":"欲解鎖專案請聯絡管理員"},"SECTION":{"SEARCH":"搜尋","TIMELINE":"時間表","EPICS":"Epics","BACKLOG":"待辦任務優先表","KANBAN":"Kanban(看板)","ISSUES":"問題 ","WIKI":"維基","TEAM":"團隊","MEETUP":"符合","ADMIN":"管理者"},"NAVIGATION":{"ACTION_CREATE_PROJECT":"創建專案","MANAGE_PROJECTS":"管理專案","TITLE_CREATE_PROJECT":"創建專案","HELP_TITLE":"Taiga支援頁","HELP":"幫助","HOMEPAGE":"首頁","FEEDBACK_TITLE":"送出回饋 ","FEEDBACK":"回饋 ","NOTIFICATIONS_TITLE":"編輯個人通知設定","NOTIFICATIONS":"通知","VIEW_PROFILE_TITLE":"檢視個人資料","VIEW_PROFILE":"檢視個人資料","EDIT_PROFILE_TITLE":"編輯你的個人資料","EDIT_PROFILE":"編輯個人資料","CHANGE_PASSWORD_TITLE":"更換密碼 ","CHANGE_PASSWORD":"更換密碼 ","DASHBOARD_TITLE":"控制台","DISCOVER_TITLE":"發現流行專案","DISCOVER":"發現"},"LIKE_BUTTON":{"LIKE":"喜歡","LIKED":"喜歡","UNLIKE":"不喜歡","BUTTON_TITLE":"是否喜歡該專案","COUNTER_TITLE":"{total, plural, one{一個粉絲} other{# 粉絲}}"},"WATCH_BUTTON":{"BUTTON_TITLE":"觀注本專案並設置通知選項","WATCH":"觀注","WATCHING":"觀看中","COUNTER_TITLE":"{total, plural, one{一個觀注者} other{# 觀注者}}","OPTIONS":{"NOTIFY_ALL":"接收所有通知","NOTIFY_ALL_TITLE":"接到該專案的所有通知","NOTIFY_INVOLVED":"只有相關","NOTIFY_INVOLVED_TITLE":"只接收與你相關的通知訊息","UNWATCH":"不觀注","UNWATCH_TITLE":"不再觀注此專案"}},"CONTACT_BUTTON":{"CONTACT_TITLE":"Contact the project team","CONTACT_BUTTON":"Contact the project"},"CREATE":{"TITLE":"創建專案","CHOOSE_TEMPLATE":"Which template fits your project better?","TEMPLATE_SCRUM":"Scrum","TEMPLATE_SCRUM_DESC":"Prioritize and solve your tasks in short time cycles.","TEMPLATE_SCRUM_LONGDESC":"Scrum is an iterative and incremental agile software development methodology for managing product development.\nThe product backlog is what will ultimately be delivered, ordered into the sequence in which it should be delivered. Product Backlogs are broken into manageable, executable chunks named sprints. Every certain amount of time the team initiates a new sprint and commits to deliver a certain number of user stories from the backlog, in accordance with their skills, abilities and resources. The project advances as the backlog becomes depleted.","TEMPLATE_KANBAN":"Kanban(看板)","TEMPLATE_KANBAN_DESC":"Keep a constant workflow on independent tasks","TEMPLATE_KANBAN_LONGDESC":"The Kanban methodology is used to divide project development (any sort of project) into stages.\nA kanban card is like an index card or post-it note that details every task (or user story) in a project that needs to be completed. The Kanban board is used to move each card from one state of completion to the next and in so doing, helps track progress.","DUPLICATE":"Duplicate project","DUPLICATE_DESC":"Start clean and keep your configuration","IMPORT":"滙入專案","IMPORT_DESC":"Import your project from multiple platforms into Taiga","INVITE":"Invite to the project","SOLO_PROJECT":"You'll be alone in this project","INVITE_LATER":"(You'll be able to invite more members later)","BACK":"後台","MAX_PRIVATE_PROJECTS":"Unfortunately, You've reached the maximum number of private projects.\nIf you would like to increase the current limit please contact the administrator.","MAX_PUBLIC_PROJECTS":"Unfortunately, You've reached the maximum number of public projects.\nIf you would like to increase the current limit please contact the administrator.","PUBLIC_PROJECT":"Public Project","PRIVATE_PROJECT":"Private Project"},"COMMON":{"DETAILS":"New project details","PROJECT_TITLE":"Project Name","PROJECT_DESCRIPTION":"Project Description"},"DUPLICATE":{"TITLE":"Duplicate Project","DESCRIPTION":"Start clean and keep your configuration","SELECT_PLACEHOLDER":"Choose an existing project to duplicate"},"IMPORT":{"TITLE":"Import Project","DESCRIPTION":"Import your project from multiple platforms into Taiga","ASYNC_IN_PROGRESS_TITLE":"我們的工程師對你的專案很重要哦","ASYNC_IN_PROGRESS_MESSAGE":"這個過程要花上一點時間
    當弄好時我們會發給你一封郵件","UPLOAD_IN_PROGRESS_MESSAGE":"已上傳 {{totalSize}}中的{{uploadedSize}} ","ERROR":"系統在滙進你倒入的資料時遇上一些問題,請再試一次","ERROR_TOO_MANY_REQUEST":"抱歉系統繁忙中,請稍後再試試 ","ERROR_MESSAGE":"我們的系統無法滙入你的資料","ERROR_MAX_SIZE_EXCEEDED":"'{{fileName}}' ({{fileSize}}) 超過系統容量上限, 請重傳小一點的檔案 ({{maxFileSize}})","SYNC_SUCCESS":"你的專案已成功滙入","IMPORT":"Import","WHO_IS":"Their tasks will be assigned to ...","WRITE_EMAIL":"Or if you want, write the email that this user uses in Taiga","SEARCH_CONTACT":"Or if you want, search in your contacts","WRITE_EMAIL_LABEL":"Write the email that this user uses in Taiga","ACCEEDE":"Acceede","PROJECT_MEMBERS":"Project Members","PROCESS_DESCRIPTION":"Tell us who from Taiga you want to assign the tasks of {{platform}}","MATCH":"Is {{user_external}} the same person as {{user_internal}}?","CHOOSE":"Select user","LINKS":"Links with {{platform}}","LINKS_DESCRIPTION":"Do you want to keep the link of each item with the original {{platform}} card?","WARNING_MAIL_USER":"Note that if the user does not have a Taiga account we will not be able to assign the tasks to him.","ASSIGN":"指派","PROJECT_SELECTOR":{"NO_RESULTS":"It looks like nothing was found with your search criteria","ACTION_SEARCH":"搜尋","ACTION_BACK":"後台"},"PROJECT_RESTRICTIONS":{"PROJECT_MEMBERS_DESC_PRIVATE":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per private project. If you would like to increase that limit please contact the administrator.","PROJECT_MEMBERS_DESC_PUBLIC":"The project you are trying to import has {{members}} members including you, unfortunately, your current plan allows for a maximum of {{max_memberships}} members per public project. If you would like to increase that limit please contact the administrator.","ACCOUNT_ALLOW_MEMBERS":"Your account only allows {{members}} members","PRIVATE_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional private projects","DESC":"The project you are trying to import is private. Unfortunately, your current plan does not allow for additional private projects."},"PUBLIC_PROJECTS_SPACE":{"TITLE":"Unfortunately, your current plan does not allow for additional public projects","DESC":"The project you are trying to import is public. Unfortunately, your current plan does not allow additional public projects."},"PRIVATE_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per private project"},"PUBLIC_PROJECTS_MEMBERS":{"TITLE":"Your current plan allows for a maximum of {{max_memberships}} members per public project."},"PRIVATE_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional private projects or an increase of more than {{max_memberships}} members per private project","DESC":"The project that you are trying to import is private and has {{members}} members."},"PUBLIC_PROJECTS_SPACE_MEMBERS":{"TITLE":"Unfortunately your current plan doesn't allow additional public projects or an increase of more than {{max_memberships}} members per public project","DESC":"The project that you are trying to import is public and has more than {{members}} members."}},"IN_PROGRESS":{"TITLE":"滙入專案中","DESCRIPTION":"這個過桯要花點時間,請保持视窗開啟"},"WARNING":{"TITLE":"Some taks will be unassigned","DESCRIPTION":"There are still unidentified people. The cards assigned to these people will remain unassigned. Check all the contacts to not lose that information.","CHECK":"Check contacts"},"TAIGA":{"SELECTOR":"Import your Taiga project"},"TRELLO":{"SELECTOR":"Import your Trello boards into Taiga","CHOOSE_PROJECT":"Choose board that you want to import","NO_PROJECTS":"It seems you have no boards in Trello"},"GITHUB":{"SELECTOR":"Import your GitHub project issues","CHOOSE_PROJECT":"Find the project you want to import","NO_PROJECTS":"It seems you have no porjects in GitHub","HOW_DO_YOU_WANT_TO_IMPORT":"How do you want to import your issues into Taiga?","KANBAN_PROJECT":"As user stories in a kanban project","KANBAN_PROJECT_DESCRIPTION":"After that you can enable scrum with backlog.","SCRUM_PROJECT":"As user stories in a scrum project","SCRUM_PROJECT_DESCRIPTION":"After that you can enable kanban mode.","ISSUES_PROJECT":"As issues","ISSUES_PROJECT_DESCRIPTION":"You will not be able to use your issues in kanban or scrum mode. You will be able to enable kanban or scrum for new user stories"},"ASANA":{"SELECTOR":"Import your Asana project and choose how to manage it","CHOOSE_PROJECT":"Choose project that you want to import","NO_PROJECTS":"It seems you have no porjects in Asana","KANBAN_PROJECT":"Kanban(看板)","SCRUM_PROJECT":"Scrum","CREATE_AS_SCRUM_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The tasks and sub-tasks of your project will be created as Taiga user stories and tasks."},"JIRA":{"SELECTOR":"Import your Jira project and choose how to manage it","HOW_TO_CONFIGURE":"(configuration help)","CHOOSE_PROJECT":"Choose project or board that you want to import","NO_PROJECTS":"It seems you have no porjects or boards in Jira","URL":"Your Jira URL","KANBAN_PROJECT":"Kanban(看板)","SCRUM_PROJECT":"Scrum","ISSUES_PROJECT":"問題 ","CREATE_AS_SCRUM_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_KANBAN_DESCRIPTION":"The issues and sub-issues of your project will be created as Taiga user stories and tasks.","CREATE_AS_ISSUES_DESCRIPTION":"What do you want to do with sub-issues from the Jira project? (Taiga doesn't allow sub-issues)","CREATE_NEW_ISSUES":"Convert sub-issues to new Taiga issues","NOT_CREATE_NEW_ISSUES":"Do not import sub-issues"}}},"LIGHTBOX":{"DELETE_ACCOUNT":{"CONFIRM":"你確定要刪除Taiga帳戶嗎?","CANCEL":"回到設定","ACCEPT":"移除帳號","BLOCK_PROJECT":"Note that all the projects you own projects will be blocked after you delete your account. If you do not want a project blocked, transfer ownership to another member of each project prior to deleting your account."},"DELETE_PROJECT":{"TITLE":"刪除專案","QUESTION":"你確定要刪除這個專案嗎?","SUBTITLE":"所有專案資料 (US/Tasks/Issues/Sprints/WikiPages) 將會遺失! :-(","CONFIRM":"是的,我很確定"},"ASSIGNED_TO":{"SELECT":"選擇要旨派給","SEARCH":"搜尋使用者"},"ADD_MEMBER":{"TITLE":"新成員","PLACEHOLDER":"Filter users or write an email to invite","ADD_EMAIL":"Add email","REMOVE":"移除","INVITE":"Invite","CHOOSE_ROLE":"選擇角色","PLACEHOLDER_INVITATION_TEXT":"(非必要) 加上一段私人文字在邀請信,告訴你的新成員一些好事 ;-)","HELP_TEXT":"如果用戶已註冊Taiga帳戶,他們會自動被加入。否則他們會收到一封加入的邀請信"},"FEEDBACK":{"TITLE":"告訴我們你的故事","COMMENT":"系統錯誤,有改進建議有樂趣,或者是你使用Taiga 上的惡夢?","ACTION_SEND":"送出回饋 "},"SEARCH":{"TITLE":"搜尋","PLACEHOLDER_SEARCH":"你在找什麼?"},"ADD_EDIT_SPRINT":{"TITLE":"新衝刺任務 ","PLACEHOLDER_SPRINT_NAME":"衝刺任務名稱","PLACEHOLDER_SPRINT_START":"預估開始","PLACEHOLDER_SPRINT_END":"預估結束","ACTION_DELETE_SPRINT":"你確定要刪除這個衝刺任務嗎?","TITLE_ACTION_DELETE_SPRINT":"刪除衝刺任務","LAST_SPRINT_NAME":"最後衝刺任務 {{lastSprint}} ;-) "},"CREATE_EDIT":{"TASK_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Task","ISSUE_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this Issue","US_PLACEHOLDER_DESCRIPTION":"Please add descriptive text to help others better understand this User Story","NEW_TASK":"New Task","NEW_ISSUE":"New Issue","NEW_US":"New User Story","EDIT_TASK":"Edit Task","EDIT_ISSUE":"Edit Issue","EDIT_US":"Edit User Story","ADD_EXISTING_ISSUE":"Add Issue to {{ targetName }}","CONFIRM_CLOSE":"You have not saved changes.\nAre you sure you want to close the form?","EXISTING_ISSUE":"Existing Issue","CHOOSE_EXISTING_ISSUE":"Which Issue?","ADD_ISSUE":"新增問題 ","FILTER_ISSUES":"Filter Issues"},"DELETE_DUE_DATE":{"TITLE":"Delete due date","SUBTITLE":"Are you sure you want to delete this due date?"},"DELETE_SPRINT":{"TITLE":"刪除衝刺任務"},"REMOVE_RELATIONSHIP_WITH_EPIC":{"TITLE":"Remove relationship with Epic","MESSAGE":"Are you sure you want to remove the relationship of this User Story with the Epic {{epicSubject}}?"},"CREATE_MEMBER":{"PLACEHOLDER_INVITATION_TEXT":"(非必要) 加上一段私人文字在邀請信,告訴你的新成員一些好事 ;-)","PLACEHOLDER_TYPE_EMAIL":"輸入一個電郵地址","LIMIT_USERS_WARNING_MESSAGE_FOR_OWNER":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members. If you would like to increase the current limit, please contact the administrator.","LIMIT_USERS_WARNING_MESSAGE":"You are about to reach the maximum number of members allowed for this project, {{maxMembers}} members."},"LEAVE_PROJECT_WARNING":{"TITLE":"Unfortunately, this project can't be left without an owner","CURRENT_USER_OWNER":{"DESC":"You are the current owner of this project. Before leaving, please transfer ownership to someone else.","BUTTON":"Change the project owner"},"OTHER_USER_OWNER":{"DESC":"Unfortunately, you can't delete a member who is also the current project owner. First, please assign a new project owner.","BUTTON":"Request project owner change"}},"CHANGE_OWNER":{"TITLE":"Who do you want to be the new project owner?","ADD_COMMENT":"Add comment","BUTTON":"Ask this project member to become the new project owner"},"CONTACT_PROJECT":{"TITLE":"Send an email to","WARNING":"The email will be received by the project admins","PLACEHOLDER":"Write your message","SEND":"Send"},"SET_DUE_DATE":{"TITLE":"Set due date","PLACEHOLDER_DUE_DATE":"Select date","REASON_FOR_DUE_DATE":"Reason for the due date","PLACEHOLDER_REASON_FOR_DUE_DATE":"Why does this US need a due date?","SUGGESTIONS":{"IN_ONE_WEEK":"In one week","IN_TWO_WEEKS":"In two weeks","IN_ONE_MONTH":"In one month","IN_THREE_MONTHS":"In three months"},"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date"},"ADMIN_DUE_DATES":{"TITLE_ACTION_DELETE_DUE_DATE":"Delete due date","SUBTITLE_ACTION_DELETE_DUE_DATE":"Are you sure you want to delete the due date status {{due_date_status_name}}?"},"RELATE_TO_EPIC":{"TITLE":"Link to Epic","EXISTING_EPIC":"Existing epic","NEW_EPIC":"New epic","CHOOSE_PROJECT_FOR_CREATION":"What's the project?","CHOOSE_PROJECT_FROM":"What's the project?","SUBJECT":"主旨","CHOOSE_EPIC":"What's the epic?","FILTER_EPICS":"Filter epics","NO_EPICS_FOUND":"It looks like nothing was found with your search criteria"}},"EPIC":{"PAGE_TITLE":"{{epicSubject}} - Epic {{epicRef}} - {{projectName}}","PAGE_DESCRIPTION":"Status: {{epicStatus }}. Description: {{epicDescription}}","SECTION_NAME":"Epic","ERROR_UNLINK_RELATED_USERSTORY":"We have not been able to unlink: {{errorMessage}}","CREATE_RELATED_USERSTORIES":"Create a relationship with","NEW_USERSTORY":"新使用者故事","EXISTING_USERSTORY":"Existing user story","CHOOSE_PROJECT_FOR_CREATION":"Which project?","SUBJECT":"主旨","SUBJECT_BULK_MODE":"Subject (bulk insert)","CHOOSE_PROJECT_FROM":"Which project?","CHOOSE_USERSTORY":"Which user story?","NO_USERSTORIES":"This project has no User Stories yet. Please select another project.","NO_USERSTORIES_FOUND":"It looks like nothing was found with your search criteria","FILTER_USERSTORIES":"Filter user stories","LIGHTBOX_TITLE_BLOKING_EPIC":"Blocking epic","ACTION_DELETE":"Delete epic"},"US":{"PAGE_TITLE":"{{userStorySubject}} - 使用者故事 {{userStoryRef}} - {{projectName}}","PAGE_DESCRIPTION":"狀態: {{userStoryStatus }}.已完成 {{userStoryProgressPercentage}}% ({{userStoryClosedTasks}} of {{userStoryTotalTasks}} tasks closed). 點數: {{userStoryPoints}}. 描述: {{userStoryDescription}}","SECTION_NAME":"使用者故事","LINK_TASKBOARD":"任務板","TITLE_LINK_TASKBOARD":"到任務板去","TOTAL_POINTS":"所有點數","ADD":"+新增使用者故事","ADD_BULK":"批次加入新使用者故事","PROMOTED":"此使用者故事已提昇成問題:","TITLE_LINK_GO_TO_ISSUE":"到問題 ","TITLE_DELETE_ACTION":"刪除使用者故事","LIGHTBOX_TITLE_BLOKING_US":"封鎖中的使用者故事","NOT_ESTIMATED":"無預估","OWNER_US":"This User Story belongs to","RELATE_TO_EPIC":"Link to Epic","REMOVE_RELATIONSHIP_WITH_EPIC":"Remove Epic relationship","TRIBE":{"PUBLISH":"Publish as Gig in Taiga Tribe","PUBLISH_INFO":"More info","PUBLISH_TITLE":"More info on publishing in Taiga Tribe","PUBLISHED_AS_GIG":"Story published as Gig in Taiga Tribe","EDIT_LINK":"Edit link","CLOSE":"關閉","SYNCHRONIZE_LINK":"synchronize with Taiga Tribe","PUBLISH_MORE_INFO_TITLE":"Do you need somebody for this task?","PUBLISH_MORE_INFO_TEXT":"

    If you need help with a particular piece of work you can easily create gigs on Taiga Tribe and receive help from all over the world. You will be able to control and manage the gig enjoying a great community eager to contribute.

    TaigaTribe was born as a Taiga sibling. Both platforms can live separately but we believe that there is much power in using them combined so we are making sure the integration works like a charm.

    "}},"COMMENTS":{"DELETED_INFO":"Comment deleted by {{user}}","COMMENTS_COUNT":"{{comments}} Comments","OLDER_FIRST":"Older first","RECENT_FIRST":"Recent first","COMMENT":"評論","EDITED_COMMENT":"已編輯","SHOW_HISTORY":"View historic","TYPE_NEW_COMMENT":"在此輸入一個新的評論","SHOW_DELETED":"顯示遭刪除的評論 ","HIDE_DELETED":"隱藏已刪除之評論 ","DELETE":"刪除評論 ","RESTORE":"恢復原評論 ","HISTORY":{"TITLE":"動態"}},"ACTIVITY":{"TITLE":"動態","ACTIVITIES_COUNT":"{{activities}} Activities","TAGS_ADDED":"tags added:","TAGS_REMOVED":"tags removed:","US_POINTS":"{{role}} points","NEW_ATTACHMENT":"新增附件","DELETED_ATTACHMENT":"刪除附件","UPDATED_ATTACHMENT":"updated attachment ({{filename}}):","CREATED_CUSTOM_ATTRIBUTE":"created custom attribute","UPDATED_CUSTOM_ATTRIBUTE":"updated custom attribute","BECAME_DEPRECATED":"became deprecated","BECAME_UNDEPRECATED":"became undeprecated","TEAM_REQUIREMENT":"團隊要求","CLIENT_REQUIREMENT":"客戶要求","BLOCKED":"已封鎖","VALUES":{"NOT_SET":"not set","UNASSIGNED":"未指派"},"FIELDS":{"SUBJECT":"主旨","DESCRIPTION":"描述","PRIORITY":"優先性","SEVERITY":"急迫性","STATUS":"狀態","TYPE":"類型","ASSIGNED_TO":"指派給 ","ASSIGNED_USERS":"assigned users","DUE_DATE":"due date","MILESTONE":"衝刺任務","COLOR":"顏色"}},"BACKLOG":{"PAGE_TITLE":"待辦任務優先表 - {{projectName}}","PAGE_DESCRIPTION":"待辦任務優先表面板 {{projectName}}(專案的使用者故事與衝刺任務): {{projectDescription}}","SECTION_NAME":"待辦任務優先表","CUSTOMIZE_GRAPH":"Customize your backlog graph","CUSTOMIZE_GRAPH_TEXT":"To have a nice graph that helps you follow the evolution of the project you have to set up the points and sprints through the","CUSTOMIZE_GRAPH_ADMIN":"管理者","CUSTOMIZE_GRAPH_TITLE":"透由管理頁面設置點數與衝刺任務 \n ","MOVE_US_TO_CURRENT_SPRINT":"移到目前的 Sprint","MOVE_US_TO_LATEST_SPRINT":"移到最近的一個衝刺任務 ","EMPTY":"The backlog is empty!","CREATE_NEW_US":"創建一個新的使用者故事","CREATE_NEW_US_EMPTY_HELP":"你可以創建一個新使用者故事","EXCESS_OF_POINTS":"超過的點數","PENDING_POINTS":"待核點數","CLOSED_POINTS":"關閉","COMPACT_SPRINT":"濃縮衝刺點數","GO_TO_TASKBOARD":"到任務板 {{spring.name}}","EDIT_SPRINT":"編輯衝刺任務 ","TOTAL_POINTS":"全部","STATUS_NAME":"狀態名稱 ","SORTABLE_FILTER_ERROR":"當過濾器開啟時,無法放入待辦任務優先表","DOOMLINE":"專案規模 [Doomline]","CHART":{"XAXIS_LABEL":"衝刺任務","YAXIS_LABEL":"點數","OPTIMAL":"最適化的衝刺任務\"{{sprintName}}\"待定點數應為 {{value}}","REAL":"真實的衝刺任務\"{{sprintName}}\"待定點數為 {{value}}","INCREMENT_TEAM":"團隊要求的衝刺任務\"{{sprintName}}\"漸增點數為 {{value}}","INCREMENT_CLIENT":"客戶要求的衝刺任務\"{{sprintName}}\"漸增點數為 {{value}}"},"TAGS":{"TOGGLE":"切換標籤可見度","SHOW":"顯示標籤","HIDE":"隱藏標籤"},"FORECASTING":{"TITLE":"Velocity forecasting","BACKLOG":"Display backlog","NEW_SPRINT":"Candidate User Stories for your next sprint based on your velocity. Click to create a new sprint.","CURRENT_SPRINT":"Candidate User Stories for your sprint based on your velocity. Click to add to current sprint."},"TABLE":{"COLUMN_US":"使用者故事","TITLE_COLUMN_POINTS":"選擇檢示每個角色"},"SPRINT_SUMMARY":{"TOTAL_POINTS":"全部
    點數","COMPLETED_POINTS":"已完成
    點數","OPEN_TASKS":"開啟
    任務","CLOSED_TASKS":"已關閉
    任務","IOCAINE_DOSES":"毒物(全新任務挑戰)
    劑量","SHOW_STATISTICS_TITLE":"顯示統計","TOGGLE_BAKLOG_GRAPH":"顯示/隱藏 剩餘工作量圖","POINTS_PER_ROLE":"Points per role"},"SUMMARY":{"PROJECT_POINTS":"專案
    點數","DEFINED_POINTS":"已定義
    點數","CLOSED_POINTS":"已關閉
    點數","POINTS_PER_SPRINT":"點數 /
    衝刺任務"},"FILTERS":{"TOGGLE":"切換過濾器可見度","HIDE":"隱藏過濾器","SHOW":"顯示過濾器"},"SPRINTS":{"TITLE":"衝刺任務","DATE":"DD MMM YYYY","LINK_TASKBOARD":"衝刺任務板","TITLE_LINK_TASKBOARD":"到任務板 {{spring.name}}","EMPTY":"尚無衝刺任務","WARNING_EMPTY_SPRINT_ANONYMOUS":"此衝刺任務無使用者故事","WARNING_EMPTY_SPRINT":"Drop here Stories from your backlog to start a new sprint","TITLE_ACTION_NEW_SPRINT":"增加衝刺任務","TEXT_ACTION_NEW_SPRINT":"你可以在你的專案下創建一個新衝刺任務","ACTION_SHOW_CLOSED_SPRINTS":"顯示關閉衝刺任務","ACTION_HIDE_CLOSED_SPRINTS":"隱藏衝刺任務"}},"ERROR":{"TEXT1":"系統出了一點問題,工程師正在搶修中","NOT_FOUND":"找不到","NOT_FOUND_TEXT":"Error 404,你要找的網頁不存在,你可以稍後再回來TAIGA首頁,看看是否能再次找到要找的東西。","PERMISSION_DENIED":"無此權限","PERMISSION_DENIED_TEXT":"您無權限設進入此頁面","VERSION_ERROR":"Taiga某人之前更改了這個,而我們的工程師無法再做改變。請重新載入頁面來使用你的更新(之前設定將消失)"},"TASKBOARD":{"PAGE_TITLE":"{{sprintName}} - 衝刺任務看板 - {{projectName}}","PAGE_DESCRIPTION":"衝刺任務 {{sprintName}} (from {{startDate}} to {{endDate}}) of {{projectName}}. 完成{{completedPercentage}}% ({{completedPoints}} of {{totalPoints}} points). {{openTasks}} 開啟任務 {{totalTasks}}.","SECTION_NAME":"任務板","TITLE_ACTION_ADD":"增加新任務 ","TITLE_ACTION_ADD_BULK":"批次加入新任務 ","TITLE_ACTION_ADD_ISSUE":"Add a new Issue","TITLE_ACTION_ADD_ISSUE_BULK":"Add some new Issues in bulk","TITLE_ACTION_ASSIGN":"指派任務 ","PLACEHOLDER_CARD_TITLE":"這可能是一項任務","PLACEHOLDER_CARD_TEXT":"Split Stories into tasks to track them separately","TABLE":{"COLUMN":"使用者故事","TITLE_ACTION_FOLD":"隱藏欄位","TITLE_ACTION_UNFOLD":"未隱藏欄位","TITLE_ACTION_FOLD_ROW":"隱藏列數","TITLE_ACTION_UNFOLD_ROW":"未隱藏列數","FIELD_POINTS":"點數","ROW_STORYLESS_TASKS_TITLE":"Storyless tasks","ROW_ISSUES_TITLE":"Sprint Issues"},"CHARTS":{"XAXIS_LABEL":"天數","YAXIS_LABEL":"點數","OPTIMAL":"一天最適待辦點數{formattedDate}應為{{roundedValue}}","REAL":"一天真實的待辦點數 {{formattedDate}} is {{roundedValue}}","DATE":"DD MMM YYYY"},"MOVE_TO_SPRINT":{"TITLE_ACTION_MOVE_UNFINISHED":"Move unfinished items to another sprint","TITLE_MOVE_UNFINISHED":"Move unfinished items to another open sprint","MOVE_TO_OPEN_SPRINT":"Move to open sprint","NO_OPEN_SPRINTS":"There are no other open sprints. Please create one first.","SELECT_DESTINATION_PLACEHOLDER":"Select destination","UNFINISHED_USER_STORIES_COUNT":"{total, plural, one{# unfinished user story} other{# unfinished user stories}}","UNFINISHED_STORYLESS_TASKS_COUNT":"{total, plural, one{# unfinished storyless task} other{# unfinished storyless tasks}}","UNFINISHED_ISSUES_COUNT":"{total, plural, one{# unfinished issue} other{# unfinished issue}}","WARNING_ISSUES_NOT_MOVED_TITLE":"You just moved all user stories and taks, and the sprint'll be closed","WARNING_ISSUES_NOT_MOVED":"The issues'll remain in the sprint and don't be removed","WARNING_SPRINT_STILL_OPEN_TITLE":"{total, plural, one{You just moved # item!} other{You just moved # items!}}","WARNING_SPRINT_STILL_OPEN":"Please note that the sprint {{sprintName}} will remain open as long as it contains unfinished items."}},"TASK":{"PAGE_TITLE":"{{taskSubject}} - 任務 {{taskRef}} - {{projectName}}","PAGE_DESCRIPTION":"狀態: {{taskStatus }}.描述: {{taskDescription}}","SECTION_NAME":"任務","LINK_TASKBOARD":"任務板","TITLE_LINK_TASKBOARD":"到任務板去","PLACEHOLDER_SUBJECT":"鍵入新任務主旨","TITLE_SELECT_STATUS":"狀態名稱 ","OWNER_US":"這任務屬於","TITLE_LINK_GO_OWNER":"到使用者故事","TITLE_DELETE_ACTION":"刪除任務","LIGHTBOX_TITLE_BLOKING_TASK":"封鎖中的任務 ","FIELDS":{"IS_IOCAINE":"負予全新任務"},"TITLE_ACTION_IOCAINE":"感到任務的不勘負荷?確定其它人知道此狀況在編輯任務時點選此「毒藥鍵」。這種致命毒物如果長期吸食微量,最後可能免疫。因此你最好偶而做點出奇的挑戰。"},"NOTIFICATION":{"OK":"一切還好","WARNING":"哇,有狀況發生","WARNING_TEXT":"很抱歉你的變動並未成功儲存","SAVED":"我們系統已儲存你所有變動","CLOSE":"關閉通知","MAIL":"透過郵件通知","DESKTOP":"Desktop notifications using browser alerts","ASK_DELETE":"你確定要刪除嗎?"},"CANCEL_ACCOUNT":{"TITLE":"取消您的帳戶","SUBTITLE":"很遺憾你要離開Taiga,希望你喜歡這段時光:","PLACEHOLDER_INPUT_TOKEN":"取消帳戶代碼 ","ACTION_LEAVING":"是的,我要走了","SUCCESS":"我們系統已移附你的帳戶"},"CHANGE_EMAIL_FORM":{"TITLE":"變更電子郵件","SUBTITLE":"確認你的電子郵件要更新","PLACEHOLDER_INPUT_TOKEN":"變更電郵代碼 ","ACTION_CHANGE_EMAIL":"變更電郵地址","SUCCESS":"我們系統已更新你的電子郵件"},"ISSUES":{"PAGE_TITLE":"問題 - {{projectName}}","PAGE_DESCRIPTION":" {{projectName}}的問題清單看版: {{projectDescription}}","SECTION_NAME":"問題","ACTION_NEW_ISSUE":"+ 新問題 ","ACTION_PROMOTE_TO_US":"提昇到使用者故事","ACTION_ATTACH_SPRINT":"Attach issue to Sprint","ACTION_DETACH_SPRINT":"Detach issue from Sprint","PROMOTED":"此問題已提昇成使用者故事 ","EXTERNAL_REFERENCE":"此問題的提供者是","GO_TO_EXTERNAL_REFERENCE":"回到一開始","ACTION_DELETE":"删除議題 ","LIGHTBOX_TITLE_BLOKING_ISSUE":"封鎖中的問題","LINK_TASKBOARD":"任務板","TITLE_LINK_TASKBOARD":"到任務板去","FILTER_SPRINTS":"Filter Sprints","CHOOSE_SPRINT":"Which Sprint?","FIELDS":{"PRIORITY":"優先性","SEVERITY":"急迫性","TYPE":"類型"},"FILTER_ISSUES":"Filter Issues","CONFIRM_DETACH_FROM_SPRINT":{"TITLE":"Detach issue from Sprint","MESSAGE":"You are about to detach the issue from the sprint {{ sprintName }}"},"CONFIRM_CHANGE_FROM_SPRINT":{"TITLE":"Attach issue to Sprint","MESSAGE":"This issue is currently attached to sprint {{ oldSprintName }}. You are about to detach it from that sprint and attach it instead to sprint {{ newSprintName }}."},"CONFIRM_PROMOTE":{"TITLE":"將此問題提到使用者故事","MESSAGE":"你確定此問題要創建一個新的使用者故事?"},"TABLE":{"COLUMNS":{"TYPE":"類型","SEVERITY":"急迫性","PRIORITY":"優先性","SUBJECT":"主旨","VOTES":"投票數","STATUS":"狀態","MODIFIED":"Modified","ASSIGNED_TO":"指派給 "},"TITLE_ACTION_CHANGE_STATUS":"改變狀態","TITLE_ACTION_ASSIGNED_TO":"指派給 ","BLOCKED":"已封鎖","EMPTY":{"TITLE":"沒有問題回報:-)","SUBTITLE":"你有發現任何問題嗎"}}},"ISSUE":{"PAGE_TITLE":"{{issueSubject}} - 問題 {{issueRef}} - {{projectName}}","PAGE_DESCRIPTION":"狀態: {{issueStatus }}. 類型: {{issueType}}, 優先性: {{issuePriority}}. 急迫性: {{issueSeverity}}. Description: {{issueDescription}}"},"KANBAN":{"PAGE_TITLE":"看板 - {{projectName}}","PAGE_DESCRIPTION":"看板面板 上有專案的使用者故事 {{projectName}}: {{projectDescription}}","SECTION_NAME":"Kanban(看板)","TITLE_ACTION_FOLD":"隱藏欄位","TITLE_ACTION_UNFOLD":"未隱藏欄位","TITLE_ACTION_ADD_US":"新增使用者故事","TITLE_ACTION_ADD_BULK":"增加新批次","ACTION_SHOW_ARCHIVED":"顯示歸檔資料","ACTION_HIDE_ARCHIVED":"隱藏歸檔","HIDDEN_USER_STORIES":"此狀態下的使用者故事預設為隱藏","PLACEHOLDER_CARD_TITLE":"這裏是你的使用者故事","PLACEHOLDER_CARD_TEXT":"在此可以找到你想了解的專案"},"SEARCH":{"PAGE_TITLE":"搜尋 - {{projectName}}","PAGE_DESCRIPTION":"專案搜尋(使用者故事, 問題, 任務或維基頁等資訊) {{projectName}}: {{projectDescription}}","FILTER_EPICS":"Epics","FILTER_USER_STORIES":"使用者故事","FILTER_ISSUES":"問題 ","FILTER_TASKS":"任務 ","FILTER_WIKI":"維基頁","PLACEHOLDER_SEARCH":"搜尋","TITLE_ACTION_SEARCH":"搜尋","EMPTY_TITLE":"依你搜尋標準並未找到任何東西","EMPTY_DESCRIPTION":"請試試上方某一個分頁或再搜尋一次"},"TEAM":{"PAGE_TITLE":"團隊- {{projectName}}","PAGE_DESCRIPTION":"團隊面版可顯示專案中所有成員{{projectName}}: {{projectDescription}}","SECTION_NAME":"團隊","PLACEHOLDER_INPUT_SEARCH":"以全名搜尋","COLUMN_MR_WOLF":"問題解決高手","EXPLANATION_COLUMN_MR_WOLF":"已關閉議題 ","COLUMN_IOCAINE":"毒品吸食者(新領域任務挑戰)","EXPLANATION_COLUMN_IOCAINE":"毒物(新任務)劑量攝取","COLUMN_CERVANTES":"大文豪","EXPLANATION_COLUMN_CERVANTES":"已編輯之維基頁","COLUMN_BUG_HUNTER":"程式錯誤獵人","EXPLANATION_COLUMN_BUG_HUNTER":"問題回報","COLUMN_NIGHT_SHIFT":"熬夜工作","EXPLANATION_COLUMN_NIGHT_SHIFT":"任務關閉","COLUMN_TOTAL_POWER":"所有力量","EXPLANATION_COLUMN_TOTAL_POWER":"所有點數","SECTION_TITLE_TEAM":"團隊 >","SECTION_FILTER_ALL":"所有","CONFIRM_LEAVE_PROJECT":"你確定要退出這個專案嗎?","ACTION_LEAVE_PROJECT":"退出此專案"},"USER_SETTINGS":{"AVATAR_MAX_SIZE":"[最大. 尺寸: {{maxFileSize}}] ","MENU":{"SECTION_TITLE":"使用者設定","USER_PROFILE":"使用者設定檔案","CHANGE_PASSWORD":"更換密碼 ","EMAIL_NOTIFICATIONS":"電子郵件通知","DESKTOP_NOTIFICATIONS":"Desktop notifications","EVENTS":"Events"},"NOTIFICATIONS":{"LIVE_SECTION_NAME":"Desktop Notifications","SECTION_NAME":"電子郵件通知","COLUMN_PROJECT":"專案","COLUMN_RECEIVE_ALL":"接收所有","COLUMN_ONLY_INVOLVED":"只有相關","COLUMN_NO_NOTIFICATIONS":"無通知","OPTION_ALL":"所有","OPTION_INVOLVED":"涉入","OPTION_NONE":"無"},"PROJECT_SETTINGS":{"SET_START_PAGES":"Set start pages","START_PAGES_PER_PROJECT":"Set start pages per project","COLUMN_PROJECT":"專案","COLUMN_STARTPAGE":"Start page","DEFAULT_VALUE":"Default"},"EVENTS":{"SECTION_NAME":"Events","SECTION_DESCRIPTION":"Important events in Taiga header","SECTION_DESCRIPTION_EXPANDED":"(direct mentions, updates in items that you are watching...)","COLUMN_ENABLED":"Enabled","COLUMN_PROJECT":"專案"}},"USER_PROFILE":{"ACTION_USE_GRAVATAR":"使用預設圖像","ACTION_DELETE_ACCOUNT":"刪除Taiga帳戶","ACTION_DOWNLOAD_PROFILE":"Download Taiga profile","CHANGE_EMAIL_SUCCESS":"檢查你的收信箱
    我們送出了一封信
    裏面有設定你新電子郵件的相關指示","CHANGE_PHOTO":"變更照片","FIELD":{"USERNAME":"使用者名稱","EMAIL":"電子郵件","FULL_NAME":"全名","PLACEHOLDER_FULL_NAME":"你的全名","BIO":"自介(最多210字)","PLACEHOLDER_BIO":"請自我介紹","LANGUAGE":"語言","LANGUAGE_DEFAULT":"-- 使用設預語言 -- ","THEME":"主題","THEME_DEFAULT":"-- 使用預設主題--"}},"WIKI":{"PAGE_TITLE":"{{wikiPageName}} - 維基 - {{projectName}}","PAGE_DESCRIPTION":"上回編輯{{lastModifiedDate}} ({{totalEditions}} editions in total) 內容: {{ wikiPageContent }}","DATETIME":"DD MMM YYYY HH:mm","REMOVE":"移除此維基頁 ","DELETE_LIGHTBOX_TITLE":"刪除維基頁","DELETE_LINK_TITLE":"Delete Wiki link","NAVIGATION":{"HOME":"Main Page","SECTION_NAME":"BOOKMARKS","ACTION_ADD_LINK":"Add bookmark","ALL_PAGES":"All wiki pages"},"SUMMARY":{"TIMES_EDITED":"次數
    編輯 ","LAST_EDIT":"上次
    編輯 ","LAST_MODIFICATION":"上回修改"},"SECTION_PAGES_LIST":"All pages","PAGES_LIST_COLUMNS":{"TITLE":"Title","EDITIONS":"Editions","CREATED":"已創建","MODIFIED":"Modified","CREATOR":"Creator","LAST_MODIFIER":"Last modifier"}},"HINTS":{"SECTION_NAME":"提示","LINK":"如果想知道如何使用,可以到我們的支援頁面了解詳情。","LINK_TITLE":"造訪我們的支援頁面","HINT1_TITLE":"你知道可以滙入與滙出專案嗎?","HINT1_TEXT":"可以從 Taiga提取所有個人資料記錄,移入其它地方。","HINT2_TITLE":"你知道可以創建個人化欄位嗎","HINT2_TEXT":"團隊可以使用客制化欄位來彈性地輸入特殊資料以應付其特定的工作流程 ","HINT3_TITLE":"重新整理與你相關的專案特徵","HINT3_TEXT":"本頁上方直接列出前10個專案選單","HINT4_TITLE":"你是否忘了你在做什麼?","HINT4_TEXT":"別憺心,在控制台可以找到你的公開任務、問題以及使用者故事的工作次序。"},"TIMELINE":{"UPLOAD_ATTACHMENT":"{{username}} 上傳新附件檔案 {{obj_name}}","US_CREATED":"{{username}} 創建新的使用者故事 {{obj_name}} 於 {{project_name}}","ISSUE_CREATED":"{{username}} 提出了新問題 {{obj_name}} in {{project_name}}","TASK_CREATED":"{{username}} 創建新任務 {{obj_name}} 於 {{project_name}}","TASK_CREATED_WITH_US":"{{username}} 創建新任務 {{obj_name}} 於 {{project_name}} ,其為{{us_name}}之使用者故事","WIKI_CREATED":"{{username}} 創建新維基頁 {{obj_name}} 於 {{project_name}}","MILESTONE_CREATED":"{{username}} 創建新衝刺任務 {{obj_name}} 於 {{project_name}}","EPIC_CREATED":"{{username}} has created a new epic {{obj_name}} in {{project_name}}","EPIC_RELATED_USERSTORY_CREATED":"{{username}} has related the userstory {{related_us_name}} to the epic {{epic_name}} in {{project_name}}","NEW_PROJECT":"{{username}} 創建專案 {{project_name}}","MILESTONE_UPDATED":"{{username}}更新衝刺任務 {{obj_name}} ","US_UPDATED":"{{username}} 已更新 {{obj_name}}使用者故事之 \"{{field_name}}\"屬性。","US_UPDATED_WITH_NEW_VALUE":"{{username}} 已更新了 {{obj_name}} 使用者故事的\"{{field_name}}\"屬性到{{new_value}}","US_UPDATED_POINTS":"{{username}} 已更新了 {{obj_name}} 的使用者故事\"{{field_name}}\"點數為{{new_value}}","ISSUE_UPDATED":"{{username}} 更新了{{obj_name}}問題的 \"{{field_name}}\" 屬性","ISSUE_UPDATED_WITH_NEW_VALUE":"{{username}} 已更新了 {{obj_name}} 問題的\"{{field_name}}\"屬性到{{new_value}}","TASK_UPDATED":"{{username}} 已更新了 {{obj_name}} 使用者故事的\"{{field_name}}\"屬性到{{new_value}}","TASK_UPDATED_WITH_NEW_VALUE":"{{username}} 已更新了 {{obj_name}} 任務\"{{field_name}}\"的屬性到{{new_value}}","TASK_UPDATED_WITH_US":"{{username}} 更新了 {{obj_name}} 任務之\"{{field_name}}\" 屬性,其為 {{us_name}} 之使用者故事","TASK_UPDATED_WITH_US_NEW_VALUE":"{{username}} 已更新了 {{obj_name}} 下的 {{us_name}} 使用者故事\"{{field_name}}\"屬性到{{new_value}}","WIKI_UPDATED":"\n{{username}} 更新了維基頁{{obj_name}}","EPIC_UPDATED":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}}","EPIC_UPDATED_WITH_NEW_VALUE":"{{username}} has updated the attribute \"{{field_name}}\" of the epic {{obj_name}} to {{new_value}}","EPIC_UPDATED_WITH_NEW_COLOR":"{{username}} has updated the \"{{field_name}}\" of the epic {{obj_name}} to ","NEW_COMMENT_US":"{{username}} 評論了 {{obj_name}}使用者故事","NEW_COMMENT_ISSUE":"{{username}}評論了此問題 {{obj_name}}","NEW_COMMENT_TASK":"{{username}} 評論了此任務{{obj_name}}","NEW_COMMENT_EPIC":"{{username}} has commented in the epic {{obj_name}}","NEW_MEMBER":"{{project_name}} 有新成員","US_ADDED_MILESTONE":"{{username}} 增加使用者故事 {{obj_name}} 給 {{sprint_name}}","US_MOVED":"{{username}} 搬移了使用者故事 {{obj_name}}","US_REMOVED_FROM_MILESTONE":"{{username}} 新增使用者故事 {{obj_name}} 到待辦工作優先列表","BLOCKED":"{{username}} 封鎖了 {{obj_name}}","UNBLOCKED":"{{username}} 解除了封鎖 {{obj_name}}","NEW_USER":"{{username}} 已加入 Taiga","ITEM_TYPES":{"USERSTORY":"User Story","ISSUE":"問題","TASK":"任務"}},"EVENTS":{"TITLE":"Events","MY_EVENTS":"My events","DISMISS_ALL":"Dismiss all","VIEW_ALL":"View all","NO_NEW_EVENTS":"No new events","NO_EVENTS_YET":"There are no events yet","ASSIGNED_YOU":"{{username}} assigned you to {{obj_name}}","ADDED_YOU_AS_WATCHER":"{{username}} added you as watcher on {{obj_name}}","ADDED_YOU_AS_MEMBER":"{{username}} added you as member","MENTIONED_YOU":"{{username}} mentioned you on {{obj_name}}","MENTIONED_YOU_IN_COMMENT":"{{username}} mentioned you in a comment on {{obj_name}}","COMMENTED":"{{username}} has commented on {{obj_name}}"},"LEGAL":{"TERMS_OF_SERVICE_AND_PRIVACY_POLICY_AD":"When creating a new account, you agree to our terms of service and privacy policy.","GDPR_ANNOUNCEMENT_TITLE":"General Data Protection Regulation (GDPR)","GDPR_ANNOUNCEMENT_DESCRIPTION":"You saw this comming, right? Updates to our Terms of Service","GDPR_ANNOUNCEMENT_INFOLINK":"Please read our announcement here"},"EXTERNAL_APP":{"PAGE_TITLE":"外部的應用程式要求取得授權","PAGE_DESCRIPTION":"外部的應用程式要求取得授權","AUTHORIZATION_REQUEST":"同意授權 {{application}} 應用程式使用你的帳戶資訊?","LOGIN_WITH_ANOTHER_USER":"以其它帳號登入","AUTHORIZE_APP":"授權的應用服務 ","CANCEL":"取消"},"JOYRIDE":{"NAV":{"NEXT":"下一個","BACK":"後台","SKIP":"略過","DONE":"完成"},"DASHBOARD":{"STEP1":{"TITLE":"你的專案","TEXT":"歡迎!你可以在此找到相關的專案"},"STEP2":{"TITLE":"進行中","TEXT":"你可以在此找到你正在處理的使用者故事,任務,問題。 "},"STEP3":{"TITLE":"觀看中","TEXT1":"在此你可以找到你想知道的專案","TEXT2":"你現在可利用Taiga進行工作了"},"STEP4":{"TITLE":"我們開始吧","TEXT1":"你可以開始創建你在Taiga上的第一個專案了","TEXT2":"祝好運!"}},"BACKLOG":{"STEP1":{"TITLE":"專案摘要","TEXT1":"你可以看到專案的狀態","TEXT2":"你可以在管理頁面變更專案的設定"},"STEP2":{"TITLE":"Product backlog","TEXT":"The backlog is the list of requirements (User Stories) for the project. Here is where you will plan your sprints."},"STEP3":{"TITLE":"衝刺任務","TEXT":"衝刺任務為短期(通常為2 週)內特定工作必須要完成與送達."},"STEP4":{"TITLE":"使用者故事","TEXT":"Those are the requirements at high level. You can add them to the backlog and drag them to the sprint in which it should be delivered."}},"KANBAN":{"STEP1":{"TITLE":"調整你的工作流程 ","TEXT":"你可在管理者頁面設置欄位來繪製工作流程狀態"},"STEP2":{"TITLE":"使用者故事與任務","TEXT":"User Stories are the requirements at high level. You can drag them to different columns."},"STEP3":{"TITLE":"新增使用者故事","TEXT1":"You may want to add a single User Story (add US icon) or a group of them (bulk icon)","TEXT2":"祝好運!"}}},"DISCOVER":{"PAGE_TITLE":"Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","DISCOVER_TITLE":"發現更多專案","DISCOVER_SUBTITLE":"{projects, plural, one{One public project to discover} other{# public projects to discover}}","MOST_ACTIVE":"最活躍","MOST_ACTIVE_EMPTY":"目前尚無活進行中的專案","MOST_LIKED":"最受喜愛的","MOST_LIKED_EMPTY":"尚未有喜愛的專案","VIEW_MORE":"顯示更多","FEATURED":"受矚目專案","EMPTY":"沒有專案符合你尋找的條件.
    再試一次","FILTERS":{"ALL":"所有","KANBAN":"Kanban(看板)","SCRUM":"Scrum","PEOPLE":"找尋人員","WEEK":"上星期","MONTH":"上個月","YEAR":"去年","ALL_TIME":"全部時間","CLEAR":"清除過濾器 "},"SEARCH":{"PAGE_TITLE":"Search - Discover projects - Taiga","PAGE_DESCRIPTION":"Searchable directory of Public Projects in Taiga. Explore backlogs, timelines, issues, and teams. Check out the most liked or most active projects. Filter by Kanban or Scrum.","INPUT_PLACEHOLDER":"輸入文字","ACTION_TITLE":"搜尋","RESULTS":"搜尋結果"}},"TIPS":{"TIPS_TITLE":"Tip","TIP_PROJECTS_ORDER":"You can sort projects on your project page by placing the ones most frequently accessed at the top.","TIP_VOTING":"Whether you ask your community or your other team members, upvoting items might serve as a way to detect explicit support for a particular task or issue.","TIP_ISSUES_TO_SPRINT":"You can attach issues to a particular sprint by clicking on the pin icon in the detail view.","TIP_DUE_DATE":"If you need to finish a task on a specific date, activate the DueDate from the detail view of the task.","TIP_IOCAIN":"You can signal to team members that a task is being particularly troublesome by clicking on the iocaine button. Doing so indicates that you welcome help, patience and understanding.","TIP_BLOCKED":"You can signal to other team members that something is preventing you from working on a particular task by marking it as \"blocked\"","TIP_PROMOTE":"Is your issue or task more complex than it first appeared? Go to the detail view and turn it into user story.","TIP_BULK":"If you want to add many tasks at once, choose bulk mode and write each task in a single line, one after the other.","TIP_ZOOM":"You can get a wider view of the kanban by reducing the information shown on the cards with the zoom control.","TIP_CUSTOM_FIELDS":"If you're an admin of the project, consider creating custom fields to expand the tasks' configuration.","TIP_SLIDE_ARROWS":"You can cycle over the results of a list, search or filter by clicking on the navigational arrows on the detail view of any one item."}} \ No newline at end of file diff --git a/dist/v-1547534999795/prism/prism-abap.min.js b/dist/v-1549282893552/prism/prism-abap.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-abap.min.js rename to dist/v-1549282893552/prism/prism-abap.min.js diff --git a/dist/v-1547534999795/prism/prism-actionscript.min.js b/dist/v-1549282893552/prism/prism-actionscript.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-actionscript.min.js rename to dist/v-1549282893552/prism/prism-actionscript.min.js diff --git a/dist/v-1547534999795/prism/prism-ada.min.js b/dist/v-1549282893552/prism/prism-ada.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-ada.min.js rename to dist/v-1549282893552/prism/prism-ada.min.js diff --git a/dist/v-1547534999795/prism/prism-apacheconf.min.js b/dist/v-1549282893552/prism/prism-apacheconf.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-apacheconf.min.js rename to dist/v-1549282893552/prism/prism-apacheconf.min.js diff --git a/dist/v-1547534999795/prism/prism-apl.min.js b/dist/v-1549282893552/prism/prism-apl.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-apl.min.js rename to dist/v-1549282893552/prism/prism-apl.min.js diff --git a/dist/v-1547534999795/prism/prism-applescript.min.js b/dist/v-1549282893552/prism/prism-applescript.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-applescript.min.js rename to dist/v-1549282893552/prism/prism-applescript.min.js diff --git a/dist/v-1547534999795/prism/prism-arduino.min.js b/dist/v-1549282893552/prism/prism-arduino.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-arduino.min.js rename to dist/v-1549282893552/prism/prism-arduino.min.js diff --git a/dist/v-1547534999795/prism/prism-arff.min.js b/dist/v-1549282893552/prism/prism-arff.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-arff.min.js rename to dist/v-1549282893552/prism/prism-arff.min.js diff --git a/dist/v-1547534999795/prism/prism-asciidoc.min.js b/dist/v-1549282893552/prism/prism-asciidoc.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-asciidoc.min.js rename to dist/v-1549282893552/prism/prism-asciidoc.min.js diff --git a/dist/v-1547534999795/prism/prism-asm6502.min.js b/dist/v-1549282893552/prism/prism-asm6502.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-asm6502.min.js rename to dist/v-1549282893552/prism/prism-asm6502.min.js diff --git a/dist/v-1547534999795/prism/prism-aspnet.min.js b/dist/v-1549282893552/prism/prism-aspnet.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-aspnet.min.js rename to dist/v-1549282893552/prism/prism-aspnet.min.js diff --git a/dist/v-1547534999795/prism/prism-autohotkey.min.js b/dist/v-1549282893552/prism/prism-autohotkey.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-autohotkey.min.js rename to dist/v-1549282893552/prism/prism-autohotkey.min.js diff --git a/dist/v-1547534999795/prism/prism-autoit.min.js b/dist/v-1549282893552/prism/prism-autoit.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-autoit.min.js rename to dist/v-1549282893552/prism/prism-autoit.min.js diff --git a/dist/v-1547534999795/prism/prism-bash.min.js b/dist/v-1549282893552/prism/prism-bash.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-bash.min.js rename to dist/v-1549282893552/prism/prism-bash.min.js diff --git a/dist/v-1547534999795/prism/prism-basic.min.js b/dist/v-1549282893552/prism/prism-basic.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-basic.min.js rename to dist/v-1549282893552/prism/prism-basic.min.js diff --git a/dist/v-1547534999795/prism/prism-batch.min.js b/dist/v-1549282893552/prism/prism-batch.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-batch.min.js rename to dist/v-1549282893552/prism/prism-batch.min.js diff --git a/dist/v-1547534999795/prism/prism-bison.min.js b/dist/v-1549282893552/prism/prism-bison.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-bison.min.js rename to dist/v-1549282893552/prism/prism-bison.min.js diff --git a/dist/v-1547534999795/prism/prism-brainfuck.min.js b/dist/v-1549282893552/prism/prism-brainfuck.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-brainfuck.min.js rename to dist/v-1549282893552/prism/prism-brainfuck.min.js diff --git a/dist/v-1547534999795/prism/prism-bro.min.js b/dist/v-1549282893552/prism/prism-bro.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-bro.min.js rename to dist/v-1549282893552/prism/prism-bro.min.js diff --git a/dist/v-1547534999795/prism/prism-c.min.js b/dist/v-1549282893552/prism/prism-c.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-c.min.js rename to dist/v-1549282893552/prism/prism-c.min.js diff --git a/dist/v-1547534999795/prism/prism-clike.min.js b/dist/v-1549282893552/prism/prism-clike.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-clike.min.js rename to dist/v-1549282893552/prism/prism-clike.min.js diff --git a/dist/v-1547534999795/prism/prism-clojure.min.js b/dist/v-1549282893552/prism/prism-clojure.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-clojure.min.js rename to dist/v-1549282893552/prism/prism-clojure.min.js diff --git a/dist/v-1547534999795/prism/prism-coffeescript.min.js b/dist/v-1549282893552/prism/prism-coffeescript.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-coffeescript.min.js rename to dist/v-1549282893552/prism/prism-coffeescript.min.js diff --git a/dist/v-1547534999795/prism/prism-core.min.js b/dist/v-1549282893552/prism/prism-core.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-core.min.js rename to dist/v-1549282893552/prism/prism-core.min.js diff --git a/dist/v-1547534999795/prism/prism-cpp.min.js b/dist/v-1549282893552/prism/prism-cpp.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-cpp.min.js rename to dist/v-1549282893552/prism/prism-cpp.min.js diff --git a/dist/v-1547534999795/prism/prism-crystal.min.js b/dist/v-1549282893552/prism/prism-crystal.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-crystal.min.js rename to dist/v-1549282893552/prism/prism-crystal.min.js diff --git a/dist/v-1547534999795/prism/prism-csharp.min.js b/dist/v-1549282893552/prism/prism-csharp.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-csharp.min.js rename to dist/v-1549282893552/prism/prism-csharp.min.js diff --git a/dist/v-1547534999795/prism/prism-csp.min.js b/dist/v-1549282893552/prism/prism-csp.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-csp.min.js rename to dist/v-1549282893552/prism/prism-csp.min.js diff --git a/dist/v-1547534999795/prism/prism-css-extras.min.js b/dist/v-1549282893552/prism/prism-css-extras.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-css-extras.min.js rename to dist/v-1549282893552/prism/prism-css-extras.min.js diff --git a/dist/v-1547534999795/prism/prism-css.min.js b/dist/v-1549282893552/prism/prism-css.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-css.min.js rename to dist/v-1549282893552/prism/prism-css.min.js diff --git a/dist/v-1547534999795/prism/prism-d.min.js b/dist/v-1549282893552/prism/prism-d.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-d.min.js rename to dist/v-1549282893552/prism/prism-d.min.js diff --git a/dist/v-1547534999795/prism/prism-dart.min.js b/dist/v-1549282893552/prism/prism-dart.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-dart.min.js rename to dist/v-1549282893552/prism/prism-dart.min.js diff --git a/dist/v-1547534999795/prism/prism-diff.min.js b/dist/v-1549282893552/prism/prism-diff.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-diff.min.js rename to dist/v-1549282893552/prism/prism-diff.min.js diff --git a/dist/v-1547534999795/prism/prism-django.min.js b/dist/v-1549282893552/prism/prism-django.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-django.min.js rename to dist/v-1549282893552/prism/prism-django.min.js diff --git a/dist/v-1547534999795/prism/prism-docker.min.js b/dist/v-1549282893552/prism/prism-docker.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-docker.min.js rename to dist/v-1549282893552/prism/prism-docker.min.js diff --git a/dist/v-1547534999795/prism/prism-eiffel.min.js b/dist/v-1549282893552/prism/prism-eiffel.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-eiffel.min.js rename to dist/v-1549282893552/prism/prism-eiffel.min.js diff --git a/dist/v-1547534999795/prism/prism-elixir.min.js b/dist/v-1549282893552/prism/prism-elixir.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-elixir.min.js rename to dist/v-1549282893552/prism/prism-elixir.min.js diff --git a/dist/v-1547534999795/prism/prism-elm.min.js b/dist/v-1549282893552/prism/prism-elm.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-elm.min.js rename to dist/v-1549282893552/prism/prism-elm.min.js diff --git a/dist/v-1547534999795/prism/prism-erb.min.js b/dist/v-1549282893552/prism/prism-erb.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-erb.min.js rename to dist/v-1549282893552/prism/prism-erb.min.js diff --git a/dist/v-1547534999795/prism/prism-erlang.min.js b/dist/v-1549282893552/prism/prism-erlang.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-erlang.min.js rename to dist/v-1549282893552/prism/prism-erlang.min.js diff --git a/dist/v-1547534999795/prism/prism-flow.min.js b/dist/v-1549282893552/prism/prism-flow.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-flow.min.js rename to dist/v-1549282893552/prism/prism-flow.min.js diff --git a/dist/v-1547534999795/prism/prism-fortran.min.js b/dist/v-1549282893552/prism/prism-fortran.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-fortran.min.js rename to dist/v-1549282893552/prism/prism-fortran.min.js diff --git a/dist/v-1547534999795/prism/prism-fsharp.min.js b/dist/v-1549282893552/prism/prism-fsharp.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-fsharp.min.js rename to dist/v-1549282893552/prism/prism-fsharp.min.js diff --git a/dist/v-1547534999795/prism/prism-gedcom.min.js b/dist/v-1549282893552/prism/prism-gedcom.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-gedcom.min.js rename to dist/v-1549282893552/prism/prism-gedcom.min.js diff --git a/dist/v-1547534999795/prism/prism-gherkin.min.js b/dist/v-1549282893552/prism/prism-gherkin.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-gherkin.min.js rename to dist/v-1549282893552/prism/prism-gherkin.min.js diff --git a/dist/v-1547534999795/prism/prism-git.min.js b/dist/v-1549282893552/prism/prism-git.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-git.min.js rename to dist/v-1549282893552/prism/prism-git.min.js diff --git a/dist/v-1547534999795/prism/prism-glsl.min.js b/dist/v-1549282893552/prism/prism-glsl.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-glsl.min.js rename to dist/v-1549282893552/prism/prism-glsl.min.js diff --git a/dist/v-1547534999795/prism/prism-go.min.js b/dist/v-1549282893552/prism/prism-go.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-go.min.js rename to dist/v-1549282893552/prism/prism-go.min.js diff --git a/dist/v-1547534999795/prism/prism-graphql.min.js b/dist/v-1549282893552/prism/prism-graphql.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-graphql.min.js rename to dist/v-1549282893552/prism/prism-graphql.min.js diff --git a/dist/v-1547534999795/prism/prism-groovy.min.js b/dist/v-1549282893552/prism/prism-groovy.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-groovy.min.js rename to dist/v-1549282893552/prism/prism-groovy.min.js diff --git a/dist/v-1547534999795/prism/prism-haml.min.js b/dist/v-1549282893552/prism/prism-haml.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-haml.min.js rename to dist/v-1549282893552/prism/prism-haml.min.js diff --git a/dist/v-1547534999795/prism/prism-handlebars.min.js b/dist/v-1549282893552/prism/prism-handlebars.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-handlebars.min.js rename to dist/v-1549282893552/prism/prism-handlebars.min.js diff --git a/dist/v-1547534999795/prism/prism-haskell.min.js b/dist/v-1549282893552/prism/prism-haskell.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-haskell.min.js rename to dist/v-1549282893552/prism/prism-haskell.min.js diff --git a/dist/v-1547534999795/prism/prism-haxe.min.js b/dist/v-1549282893552/prism/prism-haxe.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-haxe.min.js rename to dist/v-1549282893552/prism/prism-haxe.min.js diff --git a/dist/v-1547534999795/prism/prism-hpkp.min.js b/dist/v-1549282893552/prism/prism-hpkp.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-hpkp.min.js rename to dist/v-1549282893552/prism/prism-hpkp.min.js diff --git a/dist/v-1547534999795/prism/prism-hsts.min.js b/dist/v-1549282893552/prism/prism-hsts.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-hsts.min.js rename to dist/v-1549282893552/prism/prism-hsts.min.js diff --git a/dist/v-1547534999795/prism/prism-http.min.js b/dist/v-1549282893552/prism/prism-http.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-http.min.js rename to dist/v-1549282893552/prism/prism-http.min.js diff --git a/dist/v-1547534999795/prism/prism-ichigojam.min.js b/dist/v-1549282893552/prism/prism-ichigojam.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-ichigojam.min.js rename to dist/v-1549282893552/prism/prism-ichigojam.min.js diff --git a/dist/v-1547534999795/prism/prism-icon.min.js b/dist/v-1549282893552/prism/prism-icon.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-icon.min.js rename to dist/v-1549282893552/prism/prism-icon.min.js diff --git a/dist/v-1547534999795/prism/prism-inform7.min.js b/dist/v-1549282893552/prism/prism-inform7.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-inform7.min.js rename to dist/v-1549282893552/prism/prism-inform7.min.js diff --git a/dist/v-1547534999795/prism/prism-ini.min.js b/dist/v-1549282893552/prism/prism-ini.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-ini.min.js rename to dist/v-1549282893552/prism/prism-ini.min.js diff --git a/dist/v-1547534999795/prism/prism-io.min.js b/dist/v-1549282893552/prism/prism-io.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-io.min.js rename to dist/v-1549282893552/prism/prism-io.min.js diff --git a/dist/v-1547534999795/prism/prism-j.min.js b/dist/v-1549282893552/prism/prism-j.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-j.min.js rename to dist/v-1549282893552/prism/prism-j.min.js diff --git a/dist/v-1547534999795/prism/prism-java.min.js b/dist/v-1549282893552/prism/prism-java.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-java.min.js rename to dist/v-1549282893552/prism/prism-java.min.js diff --git a/dist/v-1547534999795/prism/prism-javascript.min.js b/dist/v-1549282893552/prism/prism-javascript.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-javascript.min.js rename to dist/v-1549282893552/prism/prism-javascript.min.js diff --git a/dist/v-1547534999795/prism/prism-jolie.min.js b/dist/v-1549282893552/prism/prism-jolie.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-jolie.min.js rename to dist/v-1549282893552/prism/prism-jolie.min.js diff --git a/dist/v-1547534999795/prism/prism-json.min.js b/dist/v-1549282893552/prism/prism-json.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-json.min.js rename to dist/v-1549282893552/prism/prism-json.min.js diff --git a/dist/v-1547534999795/prism/prism-jsx.min.js b/dist/v-1549282893552/prism/prism-jsx.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-jsx.min.js rename to dist/v-1549282893552/prism/prism-jsx.min.js diff --git a/dist/v-1547534999795/prism/prism-julia.min.js b/dist/v-1549282893552/prism/prism-julia.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-julia.min.js rename to dist/v-1549282893552/prism/prism-julia.min.js diff --git a/dist/v-1547534999795/prism/prism-keyman.min.js b/dist/v-1549282893552/prism/prism-keyman.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-keyman.min.js rename to dist/v-1549282893552/prism/prism-keyman.min.js diff --git a/dist/v-1547534999795/prism/prism-kotlin.min.js b/dist/v-1549282893552/prism/prism-kotlin.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-kotlin.min.js rename to dist/v-1549282893552/prism/prism-kotlin.min.js diff --git a/dist/v-1547534999795/prism/prism-languages.json b/dist/v-1549282893552/prism/prism-languages.json similarity index 100% rename from dist/v-1547534999795/prism/prism-languages.json rename to dist/v-1549282893552/prism/prism-languages.json diff --git a/dist/v-1547534999795/prism/prism-latex.min.js b/dist/v-1549282893552/prism/prism-latex.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-latex.min.js rename to dist/v-1549282893552/prism/prism-latex.min.js diff --git a/dist/v-1547534999795/prism/prism-less.min.js b/dist/v-1549282893552/prism/prism-less.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-less.min.js rename to dist/v-1549282893552/prism/prism-less.min.js diff --git a/dist/v-1547534999795/prism/prism-liquid.min.js b/dist/v-1549282893552/prism/prism-liquid.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-liquid.min.js rename to dist/v-1549282893552/prism/prism-liquid.min.js diff --git a/dist/v-1547534999795/prism/prism-lisp.min.js b/dist/v-1549282893552/prism/prism-lisp.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-lisp.min.js rename to dist/v-1549282893552/prism/prism-lisp.min.js diff --git a/dist/v-1547534999795/prism/prism-livescript.min.js b/dist/v-1549282893552/prism/prism-livescript.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-livescript.min.js rename to dist/v-1549282893552/prism/prism-livescript.min.js diff --git a/dist/v-1547534999795/prism/prism-lolcode.min.js b/dist/v-1549282893552/prism/prism-lolcode.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-lolcode.min.js rename to dist/v-1549282893552/prism/prism-lolcode.min.js diff --git a/dist/v-1547534999795/prism/prism-lua.min.js b/dist/v-1549282893552/prism/prism-lua.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-lua.min.js rename to dist/v-1549282893552/prism/prism-lua.min.js diff --git a/dist/v-1547534999795/prism/prism-makefile.min.js b/dist/v-1549282893552/prism/prism-makefile.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-makefile.min.js rename to dist/v-1549282893552/prism/prism-makefile.min.js diff --git a/dist/v-1547534999795/prism/prism-markdown.min.js b/dist/v-1549282893552/prism/prism-markdown.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-markdown.min.js rename to dist/v-1549282893552/prism/prism-markdown.min.js diff --git a/dist/v-1547534999795/prism/prism-markup-templating.min.js b/dist/v-1549282893552/prism/prism-markup-templating.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-markup-templating.min.js rename to dist/v-1549282893552/prism/prism-markup-templating.min.js diff --git a/dist/v-1547534999795/prism/prism-markup.min.js b/dist/v-1549282893552/prism/prism-markup.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-markup.min.js rename to dist/v-1549282893552/prism/prism-markup.min.js diff --git a/dist/v-1547534999795/prism/prism-matlab.min.js b/dist/v-1549282893552/prism/prism-matlab.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-matlab.min.js rename to dist/v-1549282893552/prism/prism-matlab.min.js diff --git a/dist/v-1547534999795/prism/prism-mel.min.js b/dist/v-1549282893552/prism/prism-mel.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-mel.min.js rename to dist/v-1549282893552/prism/prism-mel.min.js diff --git a/dist/v-1547534999795/prism/prism-mizar.min.js b/dist/v-1549282893552/prism/prism-mizar.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-mizar.min.js rename to dist/v-1549282893552/prism/prism-mizar.min.js diff --git a/dist/v-1547534999795/prism/prism-monkey.min.js b/dist/v-1549282893552/prism/prism-monkey.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-monkey.min.js rename to dist/v-1549282893552/prism/prism-monkey.min.js diff --git a/dist/v-1547534999795/prism/prism-n4js.min.js b/dist/v-1549282893552/prism/prism-n4js.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-n4js.min.js rename to dist/v-1549282893552/prism/prism-n4js.min.js diff --git a/dist/v-1547534999795/prism/prism-nasm.min.js b/dist/v-1549282893552/prism/prism-nasm.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-nasm.min.js rename to dist/v-1549282893552/prism/prism-nasm.min.js diff --git a/dist/v-1547534999795/prism/prism-nginx.min.js b/dist/v-1549282893552/prism/prism-nginx.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-nginx.min.js rename to dist/v-1549282893552/prism/prism-nginx.min.js diff --git a/dist/v-1547534999795/prism/prism-nim.min.js b/dist/v-1549282893552/prism/prism-nim.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-nim.min.js rename to dist/v-1549282893552/prism/prism-nim.min.js diff --git a/dist/v-1547534999795/prism/prism-nix.min.js b/dist/v-1549282893552/prism/prism-nix.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-nix.min.js rename to dist/v-1549282893552/prism/prism-nix.min.js diff --git a/dist/v-1547534999795/prism/prism-nsis.min.js b/dist/v-1549282893552/prism/prism-nsis.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-nsis.min.js rename to dist/v-1549282893552/prism/prism-nsis.min.js diff --git a/dist/v-1547534999795/prism/prism-objectivec.min.js b/dist/v-1549282893552/prism/prism-objectivec.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-objectivec.min.js rename to dist/v-1549282893552/prism/prism-objectivec.min.js diff --git a/dist/v-1547534999795/prism/prism-ocaml.min.js b/dist/v-1549282893552/prism/prism-ocaml.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-ocaml.min.js rename to dist/v-1549282893552/prism/prism-ocaml.min.js diff --git a/dist/v-1547534999795/prism/prism-opencl.min.js b/dist/v-1549282893552/prism/prism-opencl.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-opencl.min.js rename to dist/v-1549282893552/prism/prism-opencl.min.js diff --git a/dist/v-1547534999795/prism/prism-oz.min.js b/dist/v-1549282893552/prism/prism-oz.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-oz.min.js rename to dist/v-1549282893552/prism/prism-oz.min.js diff --git a/dist/v-1547534999795/prism/prism-parigp.min.js b/dist/v-1549282893552/prism/prism-parigp.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-parigp.min.js rename to dist/v-1549282893552/prism/prism-parigp.min.js diff --git a/dist/v-1547534999795/prism/prism-parser.min.js b/dist/v-1549282893552/prism/prism-parser.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-parser.min.js rename to dist/v-1549282893552/prism/prism-parser.min.js diff --git a/dist/v-1547534999795/prism/prism-pascal.min.js b/dist/v-1549282893552/prism/prism-pascal.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-pascal.min.js rename to dist/v-1549282893552/prism/prism-pascal.min.js diff --git a/dist/v-1547534999795/prism/prism-perl.min.js b/dist/v-1549282893552/prism/prism-perl.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-perl.min.js rename to dist/v-1549282893552/prism/prism-perl.min.js diff --git a/dist/v-1547534999795/prism/prism-php-extras.min.js b/dist/v-1549282893552/prism/prism-php-extras.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-php-extras.min.js rename to dist/v-1549282893552/prism/prism-php-extras.min.js diff --git a/dist/v-1547534999795/prism/prism-php.min.js b/dist/v-1549282893552/prism/prism-php.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-php.min.js rename to dist/v-1549282893552/prism/prism-php.min.js diff --git a/dist/v-1547534999795/prism/prism-plsql.min.js b/dist/v-1549282893552/prism/prism-plsql.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-plsql.min.js rename to dist/v-1549282893552/prism/prism-plsql.min.js diff --git a/dist/v-1547534999795/prism/prism-powershell.min.js b/dist/v-1549282893552/prism/prism-powershell.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-powershell.min.js rename to dist/v-1549282893552/prism/prism-powershell.min.js diff --git a/dist/v-1547534999795/prism/prism-processing.min.js b/dist/v-1549282893552/prism/prism-processing.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-processing.min.js rename to dist/v-1549282893552/prism/prism-processing.min.js diff --git a/dist/v-1547534999795/prism/prism-prolog.min.js b/dist/v-1549282893552/prism/prism-prolog.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-prolog.min.js rename to dist/v-1549282893552/prism/prism-prolog.min.js diff --git a/dist/v-1547534999795/prism/prism-properties.min.js b/dist/v-1549282893552/prism/prism-properties.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-properties.min.js rename to dist/v-1549282893552/prism/prism-properties.min.js diff --git a/dist/v-1547534999795/prism/prism-protobuf.min.js b/dist/v-1549282893552/prism/prism-protobuf.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-protobuf.min.js rename to dist/v-1549282893552/prism/prism-protobuf.min.js diff --git a/dist/v-1547534999795/prism/prism-pug.min.js b/dist/v-1549282893552/prism/prism-pug.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-pug.min.js rename to dist/v-1549282893552/prism/prism-pug.min.js diff --git a/dist/v-1547534999795/prism/prism-puppet.min.js b/dist/v-1549282893552/prism/prism-puppet.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-puppet.min.js rename to dist/v-1549282893552/prism/prism-puppet.min.js diff --git a/dist/v-1547534999795/prism/prism-pure.min.js b/dist/v-1549282893552/prism/prism-pure.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-pure.min.js rename to dist/v-1549282893552/prism/prism-pure.min.js diff --git a/dist/v-1547534999795/prism/prism-python.min.js b/dist/v-1549282893552/prism/prism-python.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-python.min.js rename to dist/v-1549282893552/prism/prism-python.min.js diff --git a/dist/v-1547534999795/prism/prism-q.min.js b/dist/v-1549282893552/prism/prism-q.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-q.min.js rename to dist/v-1549282893552/prism/prism-q.min.js diff --git a/dist/v-1547534999795/prism/prism-qore.min.js b/dist/v-1549282893552/prism/prism-qore.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-qore.min.js rename to dist/v-1549282893552/prism/prism-qore.min.js diff --git a/dist/v-1547534999795/prism/prism-r.min.js b/dist/v-1549282893552/prism/prism-r.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-r.min.js rename to dist/v-1549282893552/prism/prism-r.min.js diff --git a/dist/v-1547534999795/prism/prism-reason.min.js b/dist/v-1549282893552/prism/prism-reason.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-reason.min.js rename to dist/v-1549282893552/prism/prism-reason.min.js diff --git a/dist/v-1547534999795/prism/prism-renpy.min.js b/dist/v-1549282893552/prism/prism-renpy.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-renpy.min.js rename to dist/v-1549282893552/prism/prism-renpy.min.js diff --git a/dist/v-1547534999795/prism/prism-rest.min.js b/dist/v-1549282893552/prism/prism-rest.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-rest.min.js rename to dist/v-1549282893552/prism/prism-rest.min.js diff --git a/dist/v-1547534999795/prism/prism-rip.min.js b/dist/v-1549282893552/prism/prism-rip.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-rip.min.js rename to dist/v-1549282893552/prism/prism-rip.min.js diff --git a/dist/v-1547534999795/prism/prism-roboconf.min.js b/dist/v-1549282893552/prism/prism-roboconf.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-roboconf.min.js rename to dist/v-1549282893552/prism/prism-roboconf.min.js diff --git a/dist/v-1547534999795/prism/prism-ruby.min.js b/dist/v-1549282893552/prism/prism-ruby.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-ruby.min.js rename to dist/v-1549282893552/prism/prism-ruby.min.js diff --git a/dist/v-1547534999795/prism/prism-rust.min.js b/dist/v-1549282893552/prism/prism-rust.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-rust.min.js rename to dist/v-1549282893552/prism/prism-rust.min.js diff --git a/dist/v-1547534999795/prism/prism-sas.min.js b/dist/v-1549282893552/prism/prism-sas.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-sas.min.js rename to dist/v-1549282893552/prism/prism-sas.min.js diff --git a/dist/v-1547534999795/prism/prism-sass.min.js b/dist/v-1549282893552/prism/prism-sass.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-sass.min.js rename to dist/v-1549282893552/prism/prism-sass.min.js diff --git a/dist/v-1547534999795/prism/prism-scala.min.js b/dist/v-1549282893552/prism/prism-scala.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-scala.min.js rename to dist/v-1549282893552/prism/prism-scala.min.js diff --git a/dist/v-1547534999795/prism/prism-scheme.min.js b/dist/v-1549282893552/prism/prism-scheme.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-scheme.min.js rename to dist/v-1549282893552/prism/prism-scheme.min.js diff --git a/dist/v-1547534999795/prism/prism-scss.min.js b/dist/v-1549282893552/prism/prism-scss.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-scss.min.js rename to dist/v-1549282893552/prism/prism-scss.min.js diff --git a/dist/v-1547534999795/prism/prism-smalltalk.min.js b/dist/v-1549282893552/prism/prism-smalltalk.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-smalltalk.min.js rename to dist/v-1549282893552/prism/prism-smalltalk.min.js diff --git a/dist/v-1547534999795/prism/prism-smarty.min.js b/dist/v-1549282893552/prism/prism-smarty.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-smarty.min.js rename to dist/v-1549282893552/prism/prism-smarty.min.js diff --git a/dist/v-1547534999795/prism/prism-soy.min.js b/dist/v-1549282893552/prism/prism-soy.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-soy.min.js rename to dist/v-1549282893552/prism/prism-soy.min.js diff --git a/dist/v-1547534999795/prism/prism-sql.min.js b/dist/v-1549282893552/prism/prism-sql.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-sql.min.js rename to dist/v-1549282893552/prism/prism-sql.min.js diff --git a/dist/v-1547534999795/prism/prism-stylus.min.js b/dist/v-1549282893552/prism/prism-stylus.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-stylus.min.js rename to dist/v-1549282893552/prism/prism-stylus.min.js diff --git a/dist/v-1547534999795/prism/prism-swift.min.js b/dist/v-1549282893552/prism/prism-swift.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-swift.min.js rename to dist/v-1549282893552/prism/prism-swift.min.js diff --git a/dist/v-1547534999795/prism/prism-tap.min.js b/dist/v-1549282893552/prism/prism-tap.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-tap.min.js rename to dist/v-1549282893552/prism/prism-tap.min.js diff --git a/dist/v-1547534999795/prism/prism-tcl.min.js b/dist/v-1549282893552/prism/prism-tcl.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-tcl.min.js rename to dist/v-1549282893552/prism/prism-tcl.min.js diff --git a/dist/v-1547534999795/prism/prism-textile.min.js b/dist/v-1549282893552/prism/prism-textile.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-textile.min.js rename to dist/v-1549282893552/prism/prism-textile.min.js diff --git a/dist/v-1547534999795/prism/prism-tsx.min.js b/dist/v-1549282893552/prism/prism-tsx.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-tsx.min.js rename to dist/v-1549282893552/prism/prism-tsx.min.js diff --git a/dist/v-1547534999795/prism/prism-tt2.min.js b/dist/v-1549282893552/prism/prism-tt2.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-tt2.min.js rename to dist/v-1549282893552/prism/prism-tt2.min.js diff --git a/dist/v-1547534999795/prism/prism-twig.min.js b/dist/v-1549282893552/prism/prism-twig.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-twig.min.js rename to dist/v-1549282893552/prism/prism-twig.min.js diff --git a/dist/v-1547534999795/prism/prism-typescript.min.js b/dist/v-1549282893552/prism/prism-typescript.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-typescript.min.js rename to dist/v-1549282893552/prism/prism-typescript.min.js diff --git a/dist/v-1547534999795/prism/prism-vbnet.min.js b/dist/v-1549282893552/prism/prism-vbnet.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-vbnet.min.js rename to dist/v-1549282893552/prism/prism-vbnet.min.js diff --git a/dist/v-1547534999795/prism/prism-velocity.min.js b/dist/v-1549282893552/prism/prism-velocity.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-velocity.min.js rename to dist/v-1549282893552/prism/prism-velocity.min.js diff --git a/dist/v-1547534999795/prism/prism-verilog.min.js b/dist/v-1549282893552/prism/prism-verilog.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-verilog.min.js rename to dist/v-1549282893552/prism/prism-verilog.min.js diff --git a/dist/v-1547534999795/prism/prism-vhdl.min.js b/dist/v-1549282893552/prism/prism-vhdl.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-vhdl.min.js rename to dist/v-1549282893552/prism/prism-vhdl.min.js diff --git a/dist/v-1547534999795/prism/prism-vim.min.js b/dist/v-1549282893552/prism/prism-vim.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-vim.min.js rename to dist/v-1549282893552/prism/prism-vim.min.js diff --git a/dist/v-1547534999795/prism/prism-visual-basic.min.js b/dist/v-1549282893552/prism/prism-visual-basic.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-visual-basic.min.js rename to dist/v-1549282893552/prism/prism-visual-basic.min.js diff --git a/dist/v-1547534999795/prism/prism-wasm.min.js b/dist/v-1549282893552/prism/prism-wasm.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-wasm.min.js rename to dist/v-1549282893552/prism/prism-wasm.min.js diff --git a/dist/v-1547534999795/prism/prism-wiki.min.js b/dist/v-1549282893552/prism/prism-wiki.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-wiki.min.js rename to dist/v-1549282893552/prism/prism-wiki.min.js diff --git a/dist/v-1547534999795/prism/prism-xeora.min.js b/dist/v-1549282893552/prism/prism-xeora.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-xeora.min.js rename to dist/v-1549282893552/prism/prism-xeora.min.js diff --git a/dist/v-1547534999795/prism/prism-xojo.min.js b/dist/v-1549282893552/prism/prism-xojo.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-xojo.min.js rename to dist/v-1549282893552/prism/prism-xojo.min.js diff --git a/dist/v-1547534999795/prism/prism-xquery.min.js b/dist/v-1549282893552/prism/prism-xquery.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-xquery.min.js rename to dist/v-1549282893552/prism/prism-xquery.min.js diff --git a/dist/v-1547534999795/prism/prism-yaml.min.js b/dist/v-1549282893552/prism/prism-yaml.min.js similarity index 100% rename from dist/v-1547534999795/prism/prism-yaml.min.js rename to dist/v-1549282893552/prism/prism-yaml.min.js diff --git a/dist/v-1549282893552/styles/theme-high-contrast.css b/dist/v-1549282893552/styles/theme-high-contrast.css new file mode 100644 index 0000000..60d147c --- /dev/null +++ b/dist/v-1549282893552/styles/theme-high-contrast.css @@ -0,0 +1,4 @@ +@charset "UTF-8";.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;box-sizing:content-box}.introjs-bullets ul,.introjs-bullets ul li,.introjs-bullets ul li a,.introjs-button,.introjs-helperLayer,.introjs-helperNumberLayer,.introjs-hint,.introjs-overlay,.introjs-progress,.introjs-progressbar,.introjs-tooltip,.introjs-tooltipReferenceLayer{box-sizing:content-box}.pika-table,table{border-collapse:collapse;border-spacing:0}.lightbox textarea,textarea{resize:vertical}h1 .date,h1 span{text-overflow:ellipsis}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:100000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0)";filter:"progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000)";box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow.bottom-middle,.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow{border:5px solid transparent;content:'';position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-bottom-color:#fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.right{right:-10px;top:10px;border-left-color:#fff}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-left-color:#fff}.introjs-arrow.bottom,.introjs-arrow.bottom-middle,.introjs-arrow.bottom-right{bottom:-10px;border-top-color:#fff}.introjs-arrow.bottom-right{right:10px}.introjs-arrow.left{left:-10px;top:10px;border-right-color:#fff}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-right-color:#fff}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-bullets,.pika-table th,.pika-title{text-align:center}.introjs-button{position:relative;overflow:visible;display:inline-block;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{box-sizing:content-box;margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-prevbutton.introjs-fullbutton{border:1px solid #d4d4d4;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-nextbutton.introjs-fullbutton{-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0;display:inline-block}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none;cursor:pointer}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{overflow:hidden;height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0%;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{position:absolute;background:0 0;width:20px;height:15px;cursor:pointer}.introjs-hint:focus{border:0;outline:0}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}.introjs-hint-dot,.introjs-hint-pulse{box-sizing:content-box;position:absolute}.introjs-hint:hover>.introjs-hint-pulse{border:5px solid rgba(60,60,60,.57)}.introjs-hint-pulse{width:10px;height:10px;border:5px solid rgba(60,60,60,.27);-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;background-color:rgba(136,136,136,.24);z-index:10;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.introjs-hint-no-anim .introjs-hint-dot{-webkit-animation:none;-moz-animation:none;animation:none}.introjs-hint-dot{border:10px solid rgba(146,146,146,.36);background:0 0;-webkit-border-radius:60px;-moz-border-radius:60px;border-radius:60px;height:50px;width:50px;-webkit-animation:introjspulse 3s ease-out;-moz-animation:introjspulse 3s ease-out;animation:introjspulse 3s ease-out;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;animation-iteration-count:infinite;top:-25px;left:-25px;z-index:1;opacity:0}@-webkit-keyframes introjspulse{0%{-webkit-transform:scale(0);opacity:0}25%{-webkit-transform:scale(0);opacity:.1}50%{-webkit-transform:scale(.1);opacity:.3}75%{-webkit-transform:scale(.5);opacity:.5}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes introjspulse{0%{-moz-transform:scale(0);opacity:0}25%{-moz-transform:scale(0);opacity:.1}50%{-moz-transform:scale(.1);opacity:.3}75%{-moz-transform:scale(.5);opacity:.5}100%{-moz-transform:scale(1);opacity:0}}@keyframes introjspulse{0%{transform:scale(0);opacity:0}25%{transform:scale(0);opacity:.1}50%{transform:scale(.1);opacity:.3}75%{transform:scale(.5);opacity:.5}100%{transform:scale(1);opacity:0}}.gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";filter:alpha(opacity=20)}.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:hsla(0,0%,100%,.9);background:linear-gradient(to bottom right,#fff,hsla(0,0%,100%,.8));border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.2);text-shadow:none}.awesomplete>ul:empty{display:none}@supports (transform:scale(0)){.awesomplete>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.awesomplete>ul:empty,.awesomplete>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.awesomplete>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.awesomplete>ul>li{position:relative;padding:.2em .5em;cursor:pointer}.awesomplete>ul>li:hover{background:#b7d2e0;color:#000}.awesomplete>ul>li[aria-selected=true]{background:#3d6c8e;color:#fff}.awesomplete mark{background:#e9ff00}.awesomplete li:hover mark{background:#b5d100}.awesomplete li[aria-selected=true] mark{background:#3c6b00;color:inherit}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}.project-values-title,h1{text-transform:uppercase}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ + */.pika-single{display:block;position:relative;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.medium-editor-anchor-preview,.medium-editor-toolbar{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;top:0;z-index:2000}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}@-webkit-keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}@keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}.medium-editor-anchor-preview{left:0;line-height:1.4;max-width:280px;position:absolute;text-align:center;word-break:break-all;word-wrap:break-word;visibility:hidden}.medium-editor-anchor-preview a{color:#fff;display:inline-block;margin:5px 5px 10px}.medium-editor-placeholder-relative:after,.medium-editor-placeholder:after{content:attr(data-placeholder)!important;padding:inherit;margin:inherit;white-space:pre;font-style:italic}.medium-editor-anchor-preview-active{visibility:visible}.medium-editor-dragover{background:#ddd}.medium-editor-image-loading{-webkit-animation:medium-editor-image-loading 1s infinite ease-in-out;animation:medium-editor-image-loading 1s infinite ease-in-out;background-color:#333;border-radius:100%;display:inline-block;height:40px;width:40px}.medium-editor-placeholder{position:relative}.medium-editor-placeholder:after{position:absolute;left:0;top:0}.medium-editor-placeholder-relative,.medium-editor-placeholder-relative:after{position:relative}.medium-toolbar-arrow-over:before,.medium-toolbar-arrow-under:after{border-style:solid;content:'';display:block;height:0;left:50%;margin-left:-8px;position:absolute;width:0}.medium-toolbar-arrow-under:after{border-width:8px 8px 0}.medium-toolbar-arrow-over:before{border-width:0 8px 8px}.medium-editor-toolbar{left:0;position:absolute;visibility:hidden}.medium-editor-toolbar ul{margin:0;padding:0}.medium-editor-toolbar li{float:left;list-style:none;margin:0;padding:0}.medium-editor-toolbar li button{box-sizing:border-box;cursor:pointer;display:block;font-size:14px;line-height:1.33;margin:0;padding:15px;text-decoration:none}.medium-editor-toolbar li button:focus{outline:0}.medium-editor-toolbar li .medium-editor-action-underline{text-decoration:underline}.medium-editor-toolbar li .medium-editor-action-pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-weight:100;padding:15px 0}.medium-editor-toolbar-active{visibility:visible}.belong-to-epic-text-wrapper .remove-epic-relationship svg,.colors-table .gu-transit *{visibility:hidden}.medium-editor-sticky-toolbar{position:fixed;top:1px}.master,.medium-editor-relative-toolbar{position:relative}.medium-editor-toolbar-active.medium-editor-stalker-toolbar{-webkit-animation:medium-editor-pop-upwards 160ms forwards linear;animation:medium-editor-pop-upwards 160ms forwards linear}.medium-editor-action-bold{font-weight:bolder}.medium-editor-action-italic{font-style:italic}.medium-editor-toolbar-form{display:none}.medium-editor-toolbar-form a,.medium-editor-toolbar-form input{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.medium-editor-toolbar-form .medium-editor-toolbar-form-row{line-height:14px;margin-left:5px;padding-bottom:5px}.medium-editor-toolbar-form .medium-editor-toolbar-input,.medium-editor-toolbar-form label{border:none;box-sizing:border-box;font-size:14px;margin:0;padding:6px;width:316px;display:inline-block}body,html{width:100%}.medium-editor-toolbar-form .medium-editor-toolbar-input:focus,.medium-editor-toolbar-form label:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;box-shadow:none;outline:0}.medium-editor-toolbar-form a{display:inline-block;font-size:24px;font-weight:bolder;margin:0 10px;text-decoration:none}.medium-editor-toolbar-form-active{display:block}.medium-editor-toolbar-actions:after{clear:both;content:"";display:table}.medium-editor-element{word-wrap:break-word;min-height:30px}.master,body,html{min-height:100%}.medium-editor-element img{max-width:100%}.medium-editor-element sub{vertical-align:sub}.medium-editor-element sup{vertical-align:super}.medium-editor-hidden{display:none}.medium-toolbar-arrow-under:after{border-color:#242424 transparent transparent;top:50px}.medium-toolbar-arrow-over:before{border-color:transparent transparent #242424;top:-8px}.medium-editor-toolbar{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.75));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.75));border:1px solid #000;border-radius:5px;box-shadow:0 0 3px #000}.medium-editor-toolbar li button{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.89));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.89));border:0;border-right:1px solid #000;border-left:1px solid #333;border-left:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px rgba(0,0,0,.3);color:#fff;height:50px;min-width:50px;-webkit-transition:background-color .2s ease-in;transition:background-color .2s ease-in}.medium-editor-toolbar li button:hover{background-color:#000;color:#ff0}.medium-editor-toolbar li .medium-editor-button-first{border-bottom-left-radius:5px;border-top-left-radius:5px}.medium-editor-toolbar li .medium-editor-button-last{border-bottom-right-radius:5px;border-top-right-radius:5px}.medium-editor-toolbar li .medium-editor-button-active{background-color:#000;background:-webkit-linear-gradient(top,#242424,rgba(0,0,0,.89));background:linear-gradient(to bottom,#242424,rgba(0,0,0,.89))}.medium-editor-toolbar-form{background:#242424;border-radius:5px;color:#999}.medium-editor-toolbar-form .medium-editor-toolbar-input{background:#242424;box-sizing:border-box;color:#ccc;height:50px}.medium-editor-toolbar-form a{color:#fff}.medium-editor-toolbar-anchor-preview{background:#242424;border-radius:5px;color:#fff}.medium-editor-placeholder:after{color:#b3b3b1}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}.loader-active,body.loading-project,h1 .date,h1 span{overflow:hidden}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.prism-token.prism-cdata,.prism-token.prism-comment,.prism-token.prism-doctype,.prism-token.prism-prolog{color:#708090}.prism-token.prism-punctuation{color:#f8f8f2}.prism-namespace{opacity:.7}.prism-token.prism-constant,.prism-token.prism-deleted,.prism-token.prism-property,.prism-token.prism-symbol,.prism-token.prism-tag{color:#f92672}.prism-token.prism-boolean,.prism-token.prism-number{color:#ae81ff}.prism-token.prism-attr-name,.prism-token.prism-builtin,.prism-token.prism-char,.prism-token.prism-inserted,.prism-token.prism-selector,.prism-token.prism-string{color:#a6e22e}.prism-language-css .prism-token.prism-string,.prism-style .prism-token.prism-string,.prism-token.prism-entity,.prism-token.prism-operator,.prism-token.prism-url,.prism-token.prism-variable{color:#f8f8f2}.prism-token.prism-atrule,.prism-token.prism-attr-value,.prism-token.prism-class-name,.prism-token.prism-function{color:#e6db74}.prism-token.prism-keyword{color:#66d9ef}.prism-token.prism-important,.prism-token.prism-regex{color:#fd971f}.prism-token.prism-bold,.prism-token.prism-important{font-weight:700}.prism-token.prism-italic{font-style:italic}.prism-token.prism-entity{cursor:help}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}.backlog-table-body .user-story-name span,h1,p{line-height:1.5}.wysiwyg dl dt,.wysiwyg i,em{font-style:italic}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}*{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.3}body .master.ng-animate{transition:0}.drag-active{overflow-x:hidden}.master{height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-ms-flexbox;display:flex;height:100%}.menu-secondary{-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions header{-ms-flex:1;flex:1}.header-with-actions .action-buttons{-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;float:right;margin-left:10px}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.ttf) format("truetype")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.ttf) format("truetype")}@font-face{font-family:OpenSans-Regular;src:url(../fonts/OpenSans-Regular.ttf) format("truetype")}@font-face{font-family:OpenSans-Semibold;src:url(../fonts/OpenSans-Semibold.ttf) format("truetype")}@font-face{font-family:taiga;font-style:normal;font-weight:400;src:url(../fonts/taiga.eot);src:url(../fonts/taiga.eot?) format("eot"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:2rem;margin-bottom:1rem}h1 span,h2{font-size:1.6rem}h1 span{margin-right:.5rem;vertical-align:bottom;white-space:nowrap}h1 span.green,h1 span:last-child{-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#000;fill:#000}h1 .date{display:inline-block;max-width:500px;white-space:nowrap;word-wrap:normal}h2{line-height:1.2;margin-bottom:1rem}p img{margin:0}small{font-size:1rem}strong{font-weight:700}hr{border:solid #212121;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{transition:color .3s linear}@keyframes loading{0%{filter:blur(5px);opacity:0}100%{filter:blur(0);opacity:1}}@keyframes rotate{50%{filter:invert(1);transform:rotate(360deg)}}@keyframes formSlide{0%{filter:blur(5px);opacity:0;transform:translateY(10rem)}50%{filter:blur(0)}100%{opacity:1;transform:translateY(0)}}.ticket-assigned-to .user-avatar.is-iocaine img,.ticket-assigned-users .user-avatar.is-iocaine img{filter:hue-rotate(150deg) saturate(200%)}@keyframes loadBar{0%,20%{-ms-flex:1;flex:1}10%{-ms-flex:10;flex:10}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-.25rem)}60%{opacity:1}100%{transform:translateY(0)}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{font-size:.9rem;display:block}blockquote cite::before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}.card-task,.main-nav,.wysiwyg .list-stye-none{list-style:none}sup{font-size:.9rem;vertical-align:super}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}svg{height:1rem;width:1rem}.pika-single{min-width:240px;width:auto;z-index:999999}.pika-single .pika-title{color:#212121}.pika-single .is-selected .pika-button{background:#000;border-radius:0!important;box-shadow:inset 0 1px 3px #000}.pika-single .is-today .pika-button{color:#000}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#212121!important;border-radius:0!important;box-shadow:inset 0 1px 3px #212121!important}div.awesomplete>ul,div.awesomplete>ul::before{background:rgba(0,0,0,.95)}.spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:2rem;max-width:2rem}.capslock.ng-enter,.capslock.ng-leave{animation:dropdownFade .2s ease-in}div.awesomplete input{display:inline-block}div.awesomplete>ul{color:#212121;top:2.25rem;transition:all .2s ease}div.awesomplete>ul[hidden]{position:absolute;top:1.5rem;transform:scale(1)}div.awesomplete li:hover mark,div.awesomplete mark,div.awesomplete>ul>li:hover{background:#212121;color:#000}fieldset{border:0;margin:0;padding:0;position:relative;width:100%}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{transition:border .3s linear}button,button:active,button:focus{border:0;outline:0}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.capslock.ng-leave{animation-direction:reverse}.capslock .icon-capslock{bottom:.8rem;fill:#757575;height:.9rem;position:absolute;right:1rem;width:.9rem}.admin-membership .header-message{background:#dfdfdf;margin-top:1rem;padding:1rem}.admin-membership .header-message .no-more-membership{-ms-flex-align:center;align-items:center;color:#212121;display:-ms-flexbox;display:flex}.admin-membership .header-message .no-more-membership a,.admin-membership .header-message .no-more-membership strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-membership .header-message .no-more-membership p{color:#212121;-ms-flex-positive:1;flex-grow:1;margin:0;padding-left:2rem;padding-right:1rem}.admin-membership .limit-users-warning{font-size:.9rem;color:#000;margin-right:1rem}.admin-membership .check input{height:40px;width:85px}.add-tag-container{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:.5rem 0;padding:1rem}.add-tag-container .color-column{cursor:pointer;-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative}.add-tag-container .tag-name{-ms-flex-preferred-size:80%;flex-basis:80%;margin-right:1rem}.add-tag-container .options-column{display:-ms-flexbox;display:flex}.add-tag-container .options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.add-tag-container .current-color.empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.add-tag-container .current-color.empty-color:after,.add-tag-container .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.add-tag-container .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.add-tag-container .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.add-tag-container input[type=text]{background:#fff}.add-tag-container .icon.icon-close,.add-tag-container .icon.icon-save{opacity:1}.tags-table .table-tags-editor input[type=text]{background-color:transparent;border:0;border-bottom:1px solid transparent;box-shadow:none;transition:border-bottom .2s linear}.tags-table .table-tags-editor input[type=text]:focus{border-bottom:1px solid #757575;outline:0}.tags-table .table-tags-editor .row.header-tag-row{cursor:default;padding-left:1rem}.tags-table .color-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;padding:0 10px;position:relative}.tags-table .color-filter:hover input{border-bottom:1px solid #c1c1c1}.tags-table .color-filter input{padding:0}.tags-table .color-filter label{cursor:pointer}.tags-table .row.tag-row{margin:.3rem 0;padding:.7rem}.tags-table .row.tag-row:hover{cursor:default}.tags-table .row .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mix-tags{position:relative}.tags-table .mix-tags .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#212121;bottom:2rem;color:#fff;display:none;list-style-type:none;margin:0;padding:10px;position:absolute;right:-85%;width:120px;z-index:99;text-align:"center"}.tags-table .mix-tags .popover a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.tags-table .mix-tags .popover a:last-child{border:0}.tags-table .mix-tags .popover a:hover{color:#212121;transition:color .3s linear}.tags-table .mix-tags .popover a:hover.point{color:#fff}.tags-table .mix-tags .popover:after{background:#212121;bottom:-5px;content:'';height:15px;left:50%;position:absolute;transform:rotate(45deg);width:1rem}.tags-table .mix-tags:hover .popover{display:block}.tags-table .mixing-options-column{text-align:right}.tags-table .mixing-options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mixing-tags-from,.tags-table .mixing-tags-to{background:rgba(110,110,110,.2)}.tags-table .mixing-confirm{margin:0 .5rem}.tags-table .mixing-help-text{font-size:.75rem;color:#000;display:inline;padding-right:.5rem;text-align:center}@media (max-width:1280px){.tags-table .mixing-help-text{display:block;padding:.5rem}}.tags-table .current-color.empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.tags-table .current-color.empty-color:after,.tags-table .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.tags-table .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.tags-table .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,36,0,.7);position:absolute;width:100%}.admin-attributes .admin-attributes-section .admin-tags-section-wrapper-empty{color:#757575;padding:10vh 0 0;text-align:center}.admin-attributes .admin-attributes-section .loading-spinner{max-height:3rem;max-width:3rem}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.admin-roles p{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#757575}.auth .logo,.project-values-title h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.auth .logo,.auth .tagline{color:#fff;text-align:center}.project-values-title{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem}.project-values-title h2{font-size:1.2rem;margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(../images/bg.png) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;overflow-y:auto;position:fixed;right:0;top:0;z-index:999}.auth .auth-container{-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{text-align:center;width:100%}.auth .logo-svg svg{height:8rem;width:8rem}.auth .logo{font-size:3rem}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{margin-left:.5rem;padding-bottom:1rem}.auth .login-text a,.auth .register-text a{text-decoration:underline}.auth .login-text a:hover,.auth .register-text a:hover{color:#212121}.auth .register-terms{margin:.5rem 0 .75rem}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{animation-duration:5s;animation-iteration-count:infinite;animation-name:moustache;animation-timing-function:ease-in-out;fill:rgba(0,0,0,.9);stroke:#212121;stroke-width:1px;transform-origin:50% 50%;transition:.3s}.moustache:hover{fill:rgba(33,33,33,.9);transition:.3s}@keyframes moustache{0%,30%,70%,90%{transform:rotate(0)}10%{transform:rotate(-10deg)}80%{transform:rotate(10deg)}}.backlog-filter{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;opacity:0;overflow:hidden;position:relative;transition:all .2s linear;width:0}.backlog-filter tg-filter{transform:translateX(-260px);transition:all .2s linear}.backlog-filter.active tg-filter,.issues tg-filter{transform:translateX(0)}.backlog-filter.active{opacity:1;transition:all .2s linear;width:260px}.backlog-menu{background:#f5f5f5;color:#212121;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .menu-button.move-to-sprint,.multiple-drag-mirror.us-item-row .icon-drag,.multiple-drag-mirror.us-item-row .points,.multiple-drag-mirror.us-item-row .status,.multiple-drag-mirror.us-item-row .tags-block,.multiple-drag-mirror.us-item-row .us-settings,.multiple-drag-mirror.us-item-row .votes,.multiple-drag-mirror.us-item-row input{display:none}@media (max-width:1280px){.backlog-menu{-ms-flex-direction:column;flex-direction:column}}.backlog-menu .menu-button .icon-move{margin-right:.25rem}.backlog-menu .button-bulk{margin-left:.2rem}.multiple-drag-mirror.us-item-row{background:#fff;border-radius:4px;box-shadow:2px 2px 5px #757575;min-height:calc(40px + 1rem);opacity:.9;padding:1rem}.multiple-drag-mirror.us-item-row.is-checked,.multiple-drag-mirror.us-item-row:hover{background:#fff}.forecasting-add-sprint{font-size:.9rem;background:#f5f5f5;cursor:pointer;padding:.5rem 0;text-align:center}.invitation-main .avatar .person-name,.invitation-main .invitation-text{font-size:1.2rem;color:#fff;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.forecasting-add-sprint:hover{background:#ededed;transition:background .2s}.forecasting-add-sprint .icon-add{width:1.75rem;height:1.75rem;background:#212121;fill:#fff;margin-right:1rem;padding:.25rem;vertical-align:middle}.invitation-main{background:url(../images/invitation_bg.jpg) center center no-repeat;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background-size:cover;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;height:100vh;-ms-flex-pack:center;justify-content:center;z-index:999}.kanban,.taskboard{height:calc(100vh - 40px)}.invitation-main .invitation-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.error-main h1,.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.5rem;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#212121;transition:color .3s linear}.invitation-main .login-form,.invitation-main .register-form{-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff}.invitation-main .register-text{color:#fff;font-size:.9rem;margin-left:.5rem;padding-bottom:1rem;text-align:left}.invitation-main .register-text a{color:#000}.invitation-main .button-auth{display:block}.invitation-main .button-blackish:hover{background:#000}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.invitation-main .public-register-disabled{width:400px}.invitation-main .public-register-disabled .login-form{border-right:0}.invitation-main .contrib-plugins-wrapper label{color:#c1c1c1}.issues .filters-bar{position:relative;width:260px}.kanban{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px);position:relative}.kanban header{min-height:70px}.kanban .kanban-settings{float:right}.kanban .burndown-container{display:none}.kanban .zoom-loading img{display:block;margin-right:1rem}.kanban-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.kanban-header .options{display:-ms-flexbox;display:flex}.taskboard-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.error-main{background:url(../images/invitation_bg.jpg) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.duty-content,.taskboard{position:relative}.error-main .error-container{color:#fff;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff}.error-main a{color:#212121}.rtl .navbar .nav-right{margin:0}.rtl .navbar .nav-right .user-avatar{padding-left:0;padding-right:2em;text-align:left}.rtl .navbar .nav-right img{margin-left:0;margin-right:.5rem}.rtl .main-nav li:hover .helper{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav li:hover .helper::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav .backlog-sprints-menu::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu a{text-align:right}.rtl .admin-menu li a{padding:1rem 1rem 1rem 0}.rtl h1 span{margin-left:.5rem;margin-right:0}.rtl blockquote{border-left:0;border-right:5px solid #f5f5f5}.rtl .single-filter .name,.rtl .tag{border-color:transparent;border-width:0 3px 0 0}.rtl .tag{border-radius:5px 0 0 5px;margin:0 0 .5rem .5rem}.rtl .tag .icon-close{margin-left:0;margin-right:.25rem}.rtl .home-wrapper .working-on-container{margin-left:1rem;margin-right:0}.rtl .home-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .home-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .contact-team-large .icon-mail{margin-left:.5rem;margin-right:0}.rtl .user-profile .project-details-image{margin-left:2rem;margin-right:0}.rtl .profile-timeline .activity-item .profile-contact-picture,.rtl .profile-timeline .activity-item .profile-member-picture,.rtl .single-project .project-logo{margin-left:1rem;margin-right:0}.rtl .profile-timeline .activity-item{padding:1rem 0 1rem .5rem}.rtl .profile-timeline .activity-item .activity-date{left:.5rem;right:auto}.rtl .profile-timeline .activity-item .activity-info{margin-left:130px;margin-right:0}.rtl .profile-timeline .activity-item blockquote{margin-left:0;margin-right:calc(35px + 1rem)}.rtl .profile-timeline .single-attachment .icon{margin-left:.5rem;margin-right:0}.rtl .project-data .involved-team li{margin-left:.13rem;margin-right:0}.rtl .project-details-form-data .actions .delete-account{text-align:left}.rtl .backlog-table-body .backlog-table-title .user-stories,.rtl .backlog-table-body .row .user-stories,.rtl .backlog-table-body .user-story-name a,.rtl .backlog-table-header .backlog-table-title .user-stories,.rtl .backlog-table-header .row .user-stories,.rtl .issues-table .assigned-field,.rtl .issues-table .issue-field,.rtl .issues-table .modified-field,.rtl .issues-table .subject a,.rtl .sprints .sprint-table .column-us{text-align:right}.rtl .project-data .timeline{margin-left:1rem;margin-right:0}.rtl .track-icon{margin-left:.5rem;margin-right:0}.rtl .watch-options-arrow{margin-left:0;margin-right:auto}.rtl .ticket-estimation .ticket-role-points .icon-arrow-down{margin-left:0;margin-right:.25rem}.rtl .ticket-watch .ticket-watch-button,.rtl .ticket-watch svg{margin-left:.25rem;margin-right:0}.rtl .related-tasks-body .task-assignedto .icon{left:.5rem;right:0}.rtl .related-tasks-body .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .related-tasks-body .task-name{margin-left:1rem;margin-right:0}.rtl .related-tasks-body .task-name span{margin-left:.25rem;margin-right:0}.rtl tg-filter .search-action{left:.7rem;right:auto}.rtl .kanban tg-filter,.rtl .taskboard tg-filter{left:auto;right:0;transform:translateX(260px)}.rtl .kanban tg-filter.open,.rtl .taskboard tg-filter.open{transform:translateX(0)}.rtl .category-config .icon,.rtl .icon-arrow-left,.rtl .icon-arrow-right{transform:scaleX(-1)}.rtl .issues-options .button-bulk{margin-left:0;margin-right:.2rem}.rtl .issues-table .assigned-field .icon,.rtl .issues-table .issue-field .icon,.rtl .issues-table .modified-field .icon{margin-left:0;margin-right:.25rem}.rtl .issues-table .pop-status{left:auto;right:0}.rtl .issues-table .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .highlighted .header svg,.rtl .issues-table .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .issues-table .subject{padding-left:1rem;padding-right:0}.rtl .issues-table .issue-assignedto .icon{left:0;right:auto}.rtl .single-filter{padding-left:.5rem;padding-right:0}.rtl .single-filter .number{left:0;right:auto}.rtl .single-filter .name{border-style:solid}.rtl .discover-header .search-button{left:1rem;right:auto}.rtl .highlighted .header svg.icon-activity,.rtl .highlighted .header svg.icon-like{margin-left:.5rem;margin-right:0}.rtl .highlighted tg-most-liked{margin-left:8%;margin-right:0}.rtl .highlighted-project .statistic{margin-left:.5rem;margin-right:0}.rtl .highlighted-project .project-statistics svg{margin-left:.25rem;margin-right:0}.rtl .highlighted-project .project-logo{margin-left:1rem;margin-right:0}.rtl .featured-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .featured-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .project-list-wrapper .project-list{margin-left:2rem;margin-right:0}.rtl .project-list-wrapper .list-itemtype-project .list-itemtype-project-image{margin-left:1rem;margin-right:0}.rtl .create-project-selector-question{left:1.5rem;right:auto}.rtl .create-project-title-wrapper .icon{margin-left:.5rem;margin-right:0}.rtl .create-project-privacity label .icon{margin-left:.25rem;margin-right:0}.rtl .create-project-action-submit{margin-left:0;margin-right:1rem}.rtl .summary-progress-bar{margin-left:10px;margin-right:0}.rtl .empty-burndown svg{margin-left:2rem;margin-right:0}.rtl .backlog-menu .button-bulk{margin-left:0;margin-right:.2rem}.rtl .ticket-header .detail-status{margin-left:0;margin-right:.25rem}.rtl .ticket-status .level-name{float:left}.rtl .ticket-status .level{margin-left:.5rem;margin-right:0}.rtl .ticket-data-container .icon{margin-left:0;margin-right:.25rem}.rtl .ticket-assigned-to .assigned-to{margin-left:0;margin-right:.5rem}.rtl .user-list-avatar{margin-left:.25rem;margin-right:0}.rtl .user-list-name{margin-left:0;margin-right:.5rem}.rtl .assigned-to-list .user-list-multiple .remove-assigned-to,.rtl .assigned-to-list .user-list-single .remove-assigned-to,.rtl .ticket-assigned-to .remove-user,.rtl .ticket-assigned-users .remove-user,.rtl .ticket-watchers .delete-watcher{left:.5rem;right:auto}.rtl .lightbox .close{left:3rem;right:auto}.rtl .activity .activity-avatar,.rtl .comment .comment-avatar{margin-left:1.5rem;margin-right:0}.rtl .comment .comment-creator{margin-left:.5rem;margin-right:0}.rtl tg-wysiwyg .tools{padding-left:0;padding-right:1rem}.rtl .add-tag-button .icon-add{margin:.5rem 0 0 .25rem}.rtl .add-tag-input .save{margin:.5rem .5rem 0 0}.rtl .issue-nav{left:1rem;right:auto}.rtl .upvote-btn{margin-left:.3rem;margin-right:0}.rtl .taskboard-table-header .taskboard-table-inner{margin-left:1rem}.rtl .taskboard-table-header .task-colum-name{margin:0 0 0 5px}.rtl .kanban-table-header{margin-left:-3.7rem}.rtl .kanban-table-body .task-column,.rtl .kanban-table-header .task-colum-name,.rtl .taskboard-table-body .task-column{margin:0 0 0 5px}.rtl .kanban-table-body .task-column:last-child,.rtl .taskboard-table-body .task-column:last-child{margin-left:0;margin-right:initial}.rtl .backlog-table-body .votes svg{margin-left:.25rem;margin-right:0}.rtl .backlog-table-header .backlog-table-title{padding-left:1rem;padding-right:0}.rtl .backlog-table-body .backlog-table-title .status,.rtl .backlog-table-body .row .status,.rtl .backlog-table-header .backlog-table-title .status,.rtl .backlog-table-header .row .status{-ms-flex-preferred-size:150px;flex-basis:150px;text-align:right}.rtl .backlog-table-body .points .icon,.rtl .backlog-table-body .status .icon,.rtl .backlog-table-header .points .icon,.rtl .backlog-table-header .status .icon{margin-left:0;margin-right:.2rem}.rtl .sprints .sprint-table .column-points,.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .created-by .created-title{text-align:left}.rtl .sprints .sprint .edit-sprint{left:0;margin-left:.5rem;margin-right:0;right:auto}.rtl .epic-row .progress-bar,.rtl .epic-row .progress-status{left:auto;right:0}.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem}.rtl tg-wysiwyg .markdown-editor-placeholder,.rtl tg-wysiwyg .medium-editor-placeholder{padding-left:0;padding-right:1rem;text-align:right}.rtl .attachments-header button{margin-left:.2rem;margin-right:0}.rtl .attachments-header label{margin-left:0;margin-right:.25rem}.rtl .attachment-list .attachment-comments,.rtl .attachment-list .editable-attachment-comment{margin-left:.5rem;margin-right:0}.rtl .attachment-list .editable-attachment-deprecated input{margin-left:.2rem;margin-right:0}.rtl .more-attachments .more-attachments-num{margin-left:0;margin-right:.5rem}.rtl .single-attachment .attachment-name{padding-left:1rem;padding-right:0}.rtl .single-attachment .attachment-name svg{margin-left:.25rem;margin-right:0}.rtl .wiki-nav .add-button svg{margin-left:.5rem;margin-right:0}.rtl .wiki-pages-table .created-field,.rtl .wiki-pages-table .creator-field,.rtl .wiki-pages-table .last-modifier-field,.rtl .wiki-pages-table .modified-field,.rtl .wiki-pages-table .title-field{text-align:right}.rtl .wiki-summary div{margin-left:1.25rem;margin-right:0}.rtl .summary .number{margin-left:.3rem;margin-right:0}.rtl .summary .stats{margin-left:initial;margin-right:auto}.rtl .table-team .avatar .avatar-data{margin-left:0;margin-right:1rem;text-align:right}.rtl .table-team .leave-project .icon{margin-left:.2rem;margin-right:0}.rtl .belong-to-epic-text-wrapper{margin-left:1rem;margin-right:0}.rtl .epics-table-options-wrapper{left:.5rem;right:auto}.rtl .epics-table-dropdown{left:0;right:auto}.rtl .epic-row .icon-upvote,.rtl .story-row .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .story-row{margin-left:0;margin-right:4rem}.rtl .epic-row .icon-arrow-down{margin-left:0;margin-right:.1rem}.rtl .epic-header-container .color-selector{margin-left:.5rem;margin-right:0}.rtl .related-userstories-header .related-userstories-title{margin-left:0;margin-right:1rem}.rtl tg-related-userstory-row .userstory-name{margin-left:1rem;margin-right:0}.rtl tg-related-userstory-row .userstory-name span{margin-left:0;margin-right:.25rem}.rtl tg-related-userstory-row .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .card-owner-actions .icon{margin-left:.25rem;margin-right:0}.rtl .card-owner img{margin-left:.5rem;margin-right:0}.rtl .card-owner .card-owner-avatar img{margin-left:.45rem;margin-right:0}.rtl .card-statistics .statistic{margin-left:.5rem;margin-right:.5rem}.rtl .card-statistics .icon{margin-left:.2rem;margin-right:0}.rtl .lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-left:.5rem;margin-right:0}.rtl .lightbox-create-related-user-stories .new-user-story-options{margin-left:0;margin-right:auto}.rtl .lightbox-generic-form .settings fieldset{margin-left:.5rem;margin-right:0}.rtl .ticket-estimation .popover{left:auto;right:.5rem}.rtl .ticket-estimation .popover::after{left:auto;right:10px}.rtl .profile .timeline-wrapper{margin-left:3.5rem;margin-right:0}.rtl .profile .profile-bar{margin-left:1rem;margin-right:0}.rtl .profile-content-tabs .icon{margin-left:.5rem;margin-right:0}.rtl .profile-sidebar h4 .icon{margin-left:.3rem;margin-right:auto}.rtl .profile-filter .searchbox input{margin-left:1rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-project-image,.rtl .list-itemtype-project .list-itemtype-track .list-itemtype-track-likers,.rtl .list-itemtype-ticket .list-itemtype-avatar,.rtl .list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers,.rtl .profile-filter .searchbox .icon-search{margin-left:.5rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-track-likers .icon,.rtl .list-itemtype-project .list-itemtype-track-watchers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-likers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-watchers .icon{margin-left:.25rem;margin-right:0}.rtl .list-itemtype-ticket.blocked-project .icon-blocked-project{margin-left:0;margin-right:.25rem}.rtl .list-itemtype-ticket .list-itemtype-ticket-data{margin-left:1rem;margin-right:0}.rtl .list-itemtype-user .list-itemtype-avatar{margin-left:.75rem;margin-right:0}.rtl .admin-submenu ul a{padding:1rem 1rem 1rem 0}.rtl .admin-functionalities .module-desc{margin:0 0 0 2rem}.rtl .admin-functionalities .module-icon{margin:0 0 0 .5rem}.rtl .project-details .project-details-image{margin-left:2rem;margin-right:0}.rtl .admin-project-profile-owner-actions .owner-info{padding-left:0;padding-right:.5rem}.rtl .admin-roles .general-category .check{margin-left:0;margin-right:.5rem}.rtl .help-button svg,.rtl .project-details .private-or-public svg{margin-left:.5rem;margin-right:0}.rtl .project-csv .option-wrapper{border-left:1px solid #757575;border-radius:5px 0 0 5px;border-right:0}.rtl .colors-table .table-header .row{padding-left:0;padding-right:50px}.rtl .basic-table .row{text-align:right}.rtl .admin-membership-table .avatar img{margin:0 .3rem 0 .5rem}.rtl .admin-membership-table .row-role{padding-left:1rem;padding-right:0}.rtl .project-details .get-feedback-inner .check,.rtl .project-details .looking-for-people-selector .check{margin-left:0;margin-right:auto}.rtl .check input{left:auto;right:-10px}.rtl .check input:checked+div{margin-left:0;margin-right:50%}.rtl .check input:checked~.check-yes{left:.3rem;right:auto}.rtl .check input~.check-no{left:auto;right:.375rem}.rtl .notification-message-success{left:-370px;right:auto}.rtl .notification-message-success.active{animation:animSlideRTL 2s}.rtl .notification-message-success.inactive{animation:animSlideOutRTL .5s}@keyframes animSlideRTL{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}4.1%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,232.117,0,0,1)}8.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,357.804,0,0,1)}12.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,407.374,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,417.342,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,399.585,0,0,1)}60.56%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400.01,0,0,1)}100%,82.78%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400,0,0,1)}}@keyframes animSlideOutRTL{100%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}0%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}}.taskboard{overflow:hidden}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.taskboard .zoom-loading img{display:block;margin-right:1rem}.taskboard-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.taskboard-inner{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden}.team h2{margin:1rem 0}.team h2 span:last-child{color:#000}.us-story-main-data{margin-bottom:1rem}.us-story-main-data header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.subheader{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:1280px){.subheader{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}}.subheader .ticket-created-by{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-negative:0;flex-shrink:0}@media (max-width:1280px){.subheader .ticket-created-by{-ms-flex-preferred-size:auto;flex-basis:auto;-ms-flex-order:1;order:1}}.subheader .tags-block{-ms-flex:1;flex:1}@media (max-width:1280px){.subheader .tags-block{-ms-flex-order:2;order:2}}.subheader .tags-block .tag{border-color:transparent;border-style:solid}.duty-content .in-progress{cursor:progress}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#212121}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#757575}.duty-content .markdown{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;transition:opacity .2s linear}.duty-content .save-container .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:1.5rem;max-width:1.5rem}.duty-content .edit{cursor:pointer;fill:#757575}.duty-content .view-description .edit{background:#f5f5f5;height:2rem;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;transition:all .2s linear;width:2rem}.duty-content .edit-description{margin-bottom:2rem}.duty-content .edit-description .save{cursor:pointer;display:inline-block;position:relative;top:.3rem}.duty-content .edit-description .edit{display:inline-block;position:absolute;right:2.5rem;top:.4rem;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.save-wiki{float:right}.wiki{max-width:1024px}.wiki .wysiwyg{margin-bottom:0}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #b7b7b7;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:.3rem 0;text-align:left;width:100%}@media (max-width:767px){.basic-table .row{-ms-flex-direction:column;flex-direction:column}}.basic-table .row .width-1{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.button,.button-auth,.button-blackish,.button-bulk,.button-filter,.button-gray,.button-green,.button-red,.button-tribe,.menu-button,.trans-button,a.button-gray,a.button-green{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0;border:0;border-radius:3px;color:#fff;cursor:pointer;display:inline-block;padding:.6rem 2rem;text-align:center;text-transform:uppercase;transition:all .2s linear;vertical-align:middle}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-filter:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button-tribe:hover,.button:hover,.menu-button:hover,.trans-button:hover{color:#fff;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-filter:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button-tribe:visited,.button:visited,.menu-button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-filter span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.button-tribe span,.loading.menu-button span,.loading.trans-button span{animation:loading .5s linear}.button .icon,.button span,.button-auth .icon,.button-auth span,.button-blackish .icon,.button-blackish span,.button-bulk .icon,.button-bulk span,.button-filter .icon,.button-filter span,.button-gray .icon,.button-gray span,.button-green .icon,.button-green span,.button-red .icon,.button-red span,.button-tribe .icon,.button-tribe span,.menu-button .icon,.menu-button span,.trans-button .icon,.trans-button span{color:#fff}.button.disabled,.button[disabled],.disabled.button-auth,.disabled.button-blackish,.disabled.button-bulk,.disabled.button-filter,.disabled.button-gray,.disabled.button-green,.disabled.button-red,.disabled.button-tribe,.disabled.menu-button,.disabled.trans-button,[disabled].button-auth,[disabled].button-blackish,[disabled].button-bulk,[disabled].button-filter,[disabled].button-gray,[disabled].button-green,[disabled].button-red,[disabled].button-tribe,[disabled].menu-button,[disabled].trans-button{background:#f5f5f5;box-shadow:none;color:#757575;cursor:not-allowed;opacity:.65}.button.disabled:hover,.button[disabled]:hover,.disabled.button-auth:hover,.disabled.button-blackish:hover,.disabled.button-bulk:hover,.disabled.button-filter:hover,.disabled.button-gray:hover,.disabled.button-green:hover,.disabled.button-red:hover,.disabled.button-tribe:hover,.disabled.menu-button:hover,.disabled.trans-button:hover,[disabled].button-auth:hover,[disabled].button-blackish:hover,[disabled].button-bulk:hover,[disabled].button-filter:hover,[disabled].button-gray:hover,[disabled].button-green:hover,[disabled].button-red:hover,[disabled].button-tribe:hover,[disabled].menu-button:hover,[disabled].trans-button:hover{background:#f5f5f5;color:#757575}.menu-button,.trans-button:visited{color:#212121}.trans-button .icon,.trans-button span{color:#212121;transition:color .2s linear}.trans-button .icon{margin-right:.5rem}.menu-button{border-radius:0}.menu-button:hover{background:#c1c1c1;color:#757575}.menu-button span,.menu-button:visited{color:#212121}.submit-button{width:100%}.button-green,a.button-green{background:#000}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#212121;color:#fff}.button-gray,a.button-gray{background:#757575}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#212121;color:#fff}.button-blackish{background:#212121;color:#c1c1c1}.button-blackish:hover{background:#212121;color:#fff}.button-red{background:#ff0062}.button-red:hover{background:#ff2400;color:#fff}.button-red .icon{color:#fff}.button-bulk{background:#000;padding:.55rem .75rem}.button-bulk .icon{fill:currentColor;margin-right:0;position:relative;top:1px}.button-auth,.button-bulk:hover{background:#212121}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.button-tribe{-ms-flex-align:center;align-items:center;background:#107a8a;display:-ms-flexbox;display:flex;padding:.4rem .4rem .4rem 1.5rem}.button-tribe.active,.button-tribe:hover{background:#0b525c;color:#fff}.button-tribe .tribe-logo{margin-right:.5rem;width:1.5rem}.tribe-more-info{font-size:.9rem;color:#000;display:inline-block;margin-top:.5rem}.button-filter{background:#c1c1c1;margin-left:1rem;padding:.4rem .5rem;position:relative}.button-filter:hover{background:#757575;fill:#c1c1c1}.button-filter .filter-num{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background:#ff2400;border-radius:50%;height:1rem;left:-.5rem;position:absolute;top:-.5rem;width:1rem}.card-placeholder{background:#bcbcbc;border:1px dashed #adadad;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:-ms-flexbox;display:flex}.card-placeholder .image{background:#adadad;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-ms-flex:1;flex:1}.card-placeholder .line{background:#adadad;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;margin:0}.check{background-color:#a8a8a8;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:100px;z-index:999}.check input+div{background-color:#757575;height:25px;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#212121;margin-left:50%;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.check input:disabled+div{background-color:#757575}.ticket-created-by{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end}@media (max-width:1280px){.ticket-created-by{-ms-flex-pack:start;justify-content:flex-start;margin-bottom:.5rem}}.ticket-created-by .user-avatar{-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-positive:0;flex-grow:0;margin-left:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575;display:block;text-align:right}@media (max-width:1280px){.ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem;-ms-flex-order:1;order:1}.ticket-created-by .created-by{-ms-flex-order:2;order:2}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{text-align:left}}.ticket-created-by .created-by .created-title{color:#000}.ticket-created-by .created-by .created-date{margin-left:.5rem}@media (max-width:1280px){.ticket-created-by .created-by .created-date{margin-left:0}}.doom-line{-ms-flex-align:center;align-items:center;background:#ff0062;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:.5rem 0;padding:.25rem 0}.doom-line span{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff}.drag-drop-help,.help-button,.help-markdown{font-size:.75rem}.wysiwyg-help{background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:-.5rem;padding:.45rem .5rem}.wysiwyg-help a{display:inline-block}.help-button:hover span,.help-markdown:hover span{transition:color .2s linear}.help-button:hover .icon,.help-markdown:hover .icon{fill:#212121;transition:fill .2s linear}.help-button span,.help-markdown span{vertical-align:text-top}.help-button .icon,.help-markdown .icon{width:.9rem;height:.9rem;fill:#757575;margin-right:.2rem}.empty-filter,.empty-large,.empty-small{margin-top:4rem;text-align:center}.empty-filter img,.empty-large img,.empty-small img{margin-bottom:1rem;width:100%}.empty-filter .title,.empty-large .title,.empty-small .title{font-size:1.2rem;text-transform:uppercase}.empty-filter p,.empty-large p,.empty-small p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.empty-filter a,.empty-large a,.empty-small a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#000}.empty-small img{max-width:175px}.empty-large img{max-width:800px}.empty-filter{margin-top:1rem}.ticket-estimation .points-per-role{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.ticket-estimation .ticket-role-points{background:rgba(117,117,117,.2);color:#757575;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.1rem;min-height:2rem;padding:.5rem 1rem;position:relative}.ticket-estimation .ticket-role-points.clickable.active,.ticket-estimation .ticket-role-points.clickable:hover{background:rgba(33,33,33,.9);color:#c1c1c1}.ticket-estimation .ticket-role-points.clickable.active .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable.active .points,.ticket-estimation .ticket-role-points.clickable.active .role,.ticket-estimation .ticket-role-points.clickable:hover .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable:hover .points,.ticket-estimation .ticket-role-points.clickable:hover .role{color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points:last-child{background:rgba(0,0,0,.5);border-bottom:0;color:#c1c1c1}.ticket-estimation .ticket-role-points:last-child .icon-arrow-bottom,.ticket-estimation .ticket-role-points:last-child .points,.ticket-estimation .ticket-role-points:last-child .role{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points .icon-arrow-down{fill:currentColor;height:.6rem;margin-left:.25rem;width:.6rem}.ticket-estimation .popover.fix:after,.ticket-estimation .popover:after{height:10px;transform:rotate(45deg);content:''}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0;z-index:99;background:#212121;position:absolute;font-size:.9rem;list-style-type:none}.ticket-estimation .ticket-role-points .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#212121}.ticket-estimation .ticket-role-points .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .popover{color:#fff;display:none;left:.5rem;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#212121;left:10px;position:absolute;top:-5px;width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#212121;color:#fff}.ticket-estimation .popover.fix{color:#fff;display:none;left:-160px;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover.fix a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#212121;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#212121;left:90%;position:absolute;top:-5px;width:10px}.history-tabs{background:#c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.history-tabs a{display:inline-block;padding:.75rem 1rem}.history-tabs a:hover{color:#000}.history-tabs .history-tab{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid transparent;color:#757575;transition:all .1s linear}.history-tabs .history-tab.active{border-bottom:3px solid #212121;color:#212121}.history-tabs .order-comments{color:#212121}.level{background-color:#757575;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project{border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{font-size:.9rem;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#000}.list-itemtype-project .list-itemtype-track-likers.active .icon,.list-itemtype-project .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-project .icon{fill:#757575}.list-itemtype-project h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-project p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .icon-blocked-project{width:.75rem;height:.75rem}.list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-project-data-wrapper .icon-private{fill:#757575;height:22px;margin-left:.5rem;padding-top:.5rem;width:22px}.list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;width:3rem}.list-itemtype-project .list-itemtype-project-image img{width:100%}.list-itemtype-project .list-itemtype-project-members{-ms-flex-item-align:end;align-self:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-ticket .list-itemtype-avatar img,.list-itemtype-user .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-project .tag{-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket,.list-itemtype-user{border-bottom:1px solid #c1c1c1;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-ms-flexbox;display:flex;position:relative}.list-itemtype-ticket .list-itemtype-track{font-size:.9rem;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#000}.list-itemtype-ticket .ticket-id,.list-itemtype-ticket .ticket-project{color:#757575}.list-itemtype-ticket .list-itemtype-track-likers.active .icon,.list-itemtype-ticket .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-ticket .icon{fill:#757575}.list-itemtype-ticket h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1rem}.list-itemtype-ticket p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-ticket .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-type{margin-left:.3rem;text-transform:uppercase}.list-itemtype-ticket .list-itemtype-ticket-data{-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-blocked{color:#ff2400;margin-right:.25rem}.list-itemtype-user{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track{font-size:.9rem;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#000}.list-itemtype-user .list-itemtype-track-likers.active .icon,.list-itemtype-user .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-user .icon{fill:#757575}.list-itemtype-user h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-user p{margin-bottom:0}.list-itemtype-user .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .extra-info{font-size:.9rem;margin-top:.25rem}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:100%;-ms-flex-pack:center;justify-content:center;width:100%}.loader p{font-size:1.2rem;color:#757575;text-align:center}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{animation-duration:5s;animation-iteration-count:infinite;animation-name:loadBar;animation-timing-function:ease-in;background:#757575;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{animation-delay:0s;background:#ffc107}.loading-bar .item-1{animation-delay:1s;background:#009688}.loading-bar .item-2{animation-delay:2s;background:#e91e63}.loading-bar .item-3{animation-delay:3s;background:#9c27b0}.loading-bar .item-4{animation-delay:4s;background:#cddc39}.loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;transform-origin:32 32}.look-for-people{width:1rem;height:1rem;fill:#757575;margin-left:.25rem}.notification-message-success{background:rgba(33,33,33,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);right:-370px;top:2%;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{animation:animSlide 2s;animation-fill-mode:forwards;animation-iteration-count:1;opacity:1}.notification-message-success.inactive{animation:animSlideOut .5s;opacity:0;transform:none}.notification-message-success p{margin:0}.notification-message-success .warning{font-size:1.2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:1.2}@keyframes animSlide{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}100%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlideOut{0%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-message-error{background:rgba(255,36,0,.9);opacity:1;top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;transform:translateY(0);transition:all .6s ease-in-out}.notification-light,.notification-light.inactive{opacity:0;transform:translateY(-100%);transition:all .6s}.notification-message-error.inactive{transition:all .6s ease-in-out}.notification-message-error .icon-error{width:3rem;height:3rem;fill:#fff;margin-right:.5rem}.notification-message-error .warning{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:2.4rem}.notification-light p,.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-message-error .text p{margin:0}.notification-message-error .close{display:block;position:absolute;right:1rem;top:1rem}.notification-message-error .icon-close{cursor:pointer;fill:#fff}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-ms-flex-align:center;align-items:center;background:rgba(117,117,117,.95);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;position:absolute;top:0;width:100%;z-index:99999}.notification-light.active{opacity:1;transform:translateY(0);transition:all .6s}.paginator .active span,.paginator a,.paginator a:hover{transition:all .3s linear;color:#fff}.notification-light p{margin:0}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{display:block;margin-right:1rem;width:2rem}.notification-light .close svg{fill:#fff}.notification-message-light-error{background:rgba(255,36,0,.8)}.paginator{margin:2rem 0}.paginator ul{display:-ms-flexbox;display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator a{background:#757575;padding:.5rem 1rem}.paginator .active span,.paginator a:hover,.select-color{background:#212121}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.select-color{color:#fff;display:none;left:50px;list-style-type:none;margin:0;position:absolute;top:0;width:323px;z-index:99;text-align:"center";border-radius:0 10px 10px 0;padding:15px}.select-color a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#212121;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{background:#212121;content:'';height:15px;left:-7px;position:absolute;top:13px;transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#757575;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color .empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.select-color .empty-color:after,.select-color .empty-color:before{content:"";width:2px;height:47px;background:#ff8282;position:absolute;top:0}.select-color .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.select-color .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background-color:#c1c1c1;width:243px}.summary .description,.summary .number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.select-color input::-webkit-input-placeholder{color:#757575}.select-color input::-moz-placeholder{color:#757575}.select-color input:-moz-placeholder{color:#757575}.select-color input:-ms-input-placeholder{color:#757575}.select-color .selected-color{background:#757575;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.summary{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:65px;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;overflow:hidden;padding:1rem}.summary .summary-stats{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{font-size:.9rem;line-height:1}.summary .stats{cursor:pointer;display:block;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .graph{fill:#212121;transition:fill .2s}.summary .stats.active .graph,.summary .stats.active svg,.summary .stats:hover svg{fill:#000}.summary .stats svg{height:100%;max-height:2rem;max-width:2rem;transition:all .2s;width:100%}.summary .stats .graph{fill:#424242;transition:fill .2s}.summary .main-summary-stats{display:-ms-flexbox;display:flex;transform:translateY(0);transition:all .2s ease-in-out}.summary .show-role-points .points-per-role-stats{transform:translateY(-35px)}.summary .show-role-points .main-summary-stats{transform:translateY(-65px)}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#212121;height:24px}.summary-progress-bar .defined-points{background:#ff0062;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#212121;height:24px;position:absolute}.large-summary{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;padding:.75rem 1rem}.large-summary .stats-wrapper{padding-top:.35rem}.large-summary .large-summary-wrapper{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.large-summary .summary-progress-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding-top:.35rem}.large-summary .summary-progress-bar{-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats.summary-completed-points,.large-summary .summary-stats.summary-move-unfinished{border-right:1px solid #212121;margin-right:0;padding-right:1rem}.large-summary .summary-stats.summary-completed-points+.summary-stats,.large-summary .summary-stats.summary-move-unfinished+.summary-stats{border-left:1px solid #757575;margin-left:0;padding-left:1rem}.large-summary .icon{width:1.3rem;height:1.3rem;fill:currentColor;margin:.1rem .4rem 0 0;vertical-align:middle}.large-summary .icon.icon-stats{color:#000;float:right;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#212121;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#212121}.large-summary .icon.icon-stats.active:hover{color:#000;transition:color .3s linear}.large-summary .points-per-role-stats-content{display:-ms-flexbox;display:flex;padding-left:1rem}.large-summary .points-per-role-stats-content .summary-stats{padding:0}.large-summary .toggle-points-per-role{color:#fff;cursor:pointer}.large-summary .toggle-points-per-role svg{width:1rem;height:1rem}.large-summary .points-per-role-stats{margin-left:.5rem;transform:translateY(35px);transition:all .2s ease-in-out}.large-summary .points-per-role-stats .number{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.empty-burndown,.empty-burndown .title,.large-summary .points-per-role-stats .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.large-summary .points-per-role-stats .role{font-size:.75rem}.empty-burndown{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.15);display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{width:4rem;height:4rem;fill:#000;-ms-flex-preferred-size:4rem;flex-basis:4rem;-ms-flex-negative:0;flex-shrink:0;margin-right:2rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-ms-flex:1;flex:1}.empty-burndown .title{font-size:1.2rem;color:#000;margin:0;text-transform:uppercase}.empty-burndown a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;animation:blink 2s infinite}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name,.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;transition:none}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-ms-flex-align:stretch;align-items:stretch;border-radius:4px;display:-ms-flexbox;display:flex;margin:0;padding:0}.track-button.active .track-inner{background:rgba(33,33,33,.4)}.track-button.active .icon{fill:#000}.track-button.active .track-button-counter{background:rgba(33,33,33,.6)}.track-button.is-hover .track-inner{background:#ff5033;color:#c1c1c1;transition:background .2s}.track-button.is-hover .icon{fill:#ff0062}.track-icon,.watch-options .watch-check svg{fill:#212121}.track-button.is-hover .track-button-counter{background:#ff2400;color:#c1c1c1;transition:background .2s}.track-button .watch-options-arrow{margin-left:auto}.track-button .icon-arrow-down{width:.75rem;height:.75rem}.track-inner{-ms-flex-align:center;align-items:center;background:#c1c1c1;border-radius:4px 0 0 4px;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:start;justify-content:flex-start;min-width:140px;padding:.25rem 1rem}.track-inner:hover{background:#b4b4b4;transition:background .3s}.track-icon{margin-right:.5rem;position:relative;top:2px}.track-button-counter{-ms-flex-align:center;align-items:center;background:#b4b4b4;border-radius:0 4px 4px 0;padding:.25rem .75rem}.contact-team{background:#c1c1c1;border-radius:4px;padding:.25rem .75rem}.contact-team:hover{background:#b4b4b4;transition:background .3s}.watch-options{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.watch-options li{margin:0}.assigned-to-list,.ticket-assigned-users,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{border-bottom:1px solid rgba(117,117,117,.3);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.assigned-to-list .user-list-single,.upvote-btn{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox}.watch-options .watch-check{height:1.25rem;width:1.25rem}.upvote-btn a.active svg,.upvote-btn a:hover path{fill:#000}.upvote-btn{-ms-flex-align:stretch;align-items:stretch;display:flex;-ms-flex:0;flex:0;-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#757575;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#000;transition:background .3s}.upvote-btn a.active{background:rgba(33,33,33,.2);color:#000;transition:all .3s}.upvote-btn a.is-hover{background:#ff2400;color:#c1c1c1}.upvote-btn a.is-hover svg{fill:#ff0062;transform:rotate(180deg);transition:all .3s}.upvote-btn svg{fill:#757575;height:1rem;width:1rem}.assigned-to-list .user-list-avatar img,.ticket-assigned-users .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.upvote-btn span{display:block}.assigned-to-list .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #c1c1c1;display:flex;padding:.25rem 0;vertical-align:middle}.assigned-to-list .user-list-multiple,.ticket-watchers .user-list-single{-ms-flex-line-pack:center;padding:.25rem 0;vertical-align:middle;align-content:center}.assigned-to-list .user-list-single:last-child{border:0}.assigned-to-list .user-list-multiple{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex}.assigned-to-list .user-list-multiple.selected,.assigned-to-list .user-list-multiple:hover,.assigned-to-list .user-list-single.is-active,.assigned-to-list .user-list-single.selected,.assigned-to-list .user-list-single:hover{background:rgba(110,110,110,.3);cursor:pointer}.assigned-to-list .user-list-multiple:last-child{border:0}.assigned-to-list .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-name{color:#212121;margin-left:.5rem}.assigned-to-list .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{margin-bottom:1rem;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-single .remove-assigned-to{display:block;fill:#212121;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-single .remove-assigned-to:hover{fill:#ff2400}.assigned-to-list .user-list-multiple:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-multiple.is-active{background:rgba(110,110,110,.3);cursor:pointer;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-multiple .remove-assigned-to{display:block;fill:#212121;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-multiple .remove-assigned-to:hover{fill:#ff2400}.ticket-watchers .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex}.ticket-watchers .user-list-single:last-child{border:0}.ticket-watchers .user-list-multiple{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.25rem 0;vertical-align:middle}.ticket-assigned-users .user-list-multiple,.ticket-assigned-users .user-list-single{background:0 0;display:-ms-flexbox;padding:.25rem 0;align-content:center;vertical-align:middle}.ticket-watchers .user-list-multiple:last-child{border:0}.ticket-watchers .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-watchers .user-list-name{color:#212121;margin-left:.5rem;-ms-flex:1;flex:1;position:relative}.ticket-watchers .user-list-single:hover .delete-watcher{opacity:1;transition:opacity .2s ease-in}.ticket-watchers .delete-watcher{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-watchers .delete-watcher:hover{fill:#ff2400;transition:color .3s ease-in}.ticket-assigned-users .user-list-single{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:flex}.ticket-assigned-users .user-list-single:last-child{border:0}.ticket-assigned-users .user-list-multiple{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:flex}.ticket-assigned-users .user-list-multiple:last-child{border:0}.ticket-assigned-users .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-assigned-users .user-list-single{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-users .user-list-single:hover .remove-user{opacity:1;transition:opacity .2s ease-in}.ticket-assigned-users .user-list-name{color:#212121;margin-left:.5rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex:1;flex:1;position:relative}.admin-functionalities .module-name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .remove-user{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-assigned-users .remove-user:hover{fill:#ff2400;transition:color .3s ease-in}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{margin-bottom:2rem}.admin-common .admin-subtitle a{color:#000}.admin-common .admin-subtitle a:hover{color:#212121}.admin-common .total{font-size:1.2rem;-ms-flex-align:center;align-items:center;background-color:#c1c1c1;color:#212121;display:-ms-flexbox;display:flex;padding:.3rem 1rem}.custom-fields-table .custom-field-extra,.custom-fields-table .single-custom-field{color:#757575;border-bottom:1px solid #c1c1c1}.admin-common .total:hover .icon-edit{opacity:1;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0}.custom-fields-table .table-header{border-bottom:3px solid #c1c1c1}.custom-fields-table .table-header .custom-description,.custom-fields-table .table-header .custom-name{padding-left:1.1rem}.custom-fields-table .table-body .row:hover{background:rgba(33,33,33,.05);cursor:move;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag{opacity:1;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .js-view-custom-field{padding:.75rem 0}.custom-fields-table .js-view-custom-field .custom-extra-attr-wrapper{margin-left:1em}.custom-fields-table .icon-drag{fill:#757575;opacity:0;padding:0 .25rem 0 .1rem;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{margin-right:.5rem}.custom-fields-table .custom-name{-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-name a{padding:.5em}.custom-fields-table .custom-name svg{height:12px;width:12px}.custom-fields-table .custom-description{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:50%;flex-basis:50%;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-ms-flex-preferred-size:12%;flex-basis:12%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;opacity:0;text-align:center}.custom-fields-table .custom-options svg{cursor:pointer;fill:#757575;margin-right:.5rem;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options svg:hover{fill:#000;transition:color .2s linear}.custom-fields-table .custom-options svg.icon-close,.custom-fields-table .custom-options svg.icon-trash{fill:#ff0062}.custom-fields-table .custom-options-wrapper{opacity:0;transition:opacity .3s linear}.custom-fields-table .custom-options-wrapper:hover,.custom-fields-table .js-form .custom-options-wrapper{opacity:1}.custom-fields-table .custom-options-wrapper a{display:inline-block}.custom-fields-table .custom-field-extra{-ms-flex-align:center;align-items:center;font-size:.95em;padding:.25em 1.5em}.custom-fields-table .custom-extra-actions,.custom-fields-table .js-view-custom-field-extra{padding:.5em}.custom-fields-table .js-edit-custom-field{margin-left:.4rem}.custom-fields-table .custom-extra-attr-wrapper{-ms-flex-positive:1;flex-grow:1}.custom-fields-table .custom-extra-actions a{color:#000}.custom-fields-table .custom-extra-actions svg{height:10px;margin-right:.25em;width:10px}.admin-functionalities .module-container{max-width:900px;width:100%}.admin-project-export-result .spin img,.project-details .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;max-height:1rem;max-width:1rem}.admin-functionalities .module{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:1rem 0}.admin-functionalities .module.active .module-icon .icon,.admin-functionalities .module.active .module-name{color:#000;fill:#000}.admin-functionalities .module-icon{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem 0 0}.admin-functionalities .module-icon .icon{width:3rem;height:3rem;fill:#757575}.admin-functionalities .module-name{font-size:1.2rem;color:#757575;-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem}.admin-functionalities .module-desc{font-size:.9rem;color:#757575;-ms-flex:1;flex:1;margin:0 2rem 0 0}.admin-functionalities .module-desc p{margin:0}.admin-functionalities .module-desc-options,.admin-functionalities .videoconference-attributes{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-top:.5rem}.admin-functionalities .module-desc-options .options,.admin-functionalities .videoconference-attributes .options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:2.5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .module-desc-options fieldset,.admin-functionalities .videoconference-attributes .icon,.admin-functionalities .videoconference-attributes fieldset{margin:0 .5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .videoconference-attributes .icon{fill:#757575}.admin-functionalities .module-desc-options .icon:hover,.admin-functionalities .videoconference-attributes .icon:hover{fill:#000}.admin-functionalities .module-scrum .options{-ms-flex-item-align:end;align-self:flex-end}.admin-functionalities .module-videoconference .options{-ms-flex-item-align:start;align-self:flex-start}.admin-membership-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.admin-membership-table .avatar img{border-radius:4px;-ms-flex-positive:0;flex-grow:0;margin:0 .5rem 0 .3rem;width:50px}.admin-membership-table .avatar .data{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575;margin-top:.2rem}.admin-membership-table .avatar .pending,.admin-menu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-membership-table .avatar .pending{color:#ff0062;display:inline-block;padding-left:.3rem}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#c1c1c1}.admin-membership-table .resend{background-color:#000;color:#fff}.admin-membership-table .resend:hover{background-color:#212121;color:#fff;transition:background-color .3s linear}.admin-membership-table .delete{fill:#757575;transition:fill .2s}.admin-membership-table .delete:hover{fill:#ff2400}.admin-membership-table .pending{color:#ff0062}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-ms-flex-preferred-size:210px;flex-basis:210px;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.admin-menu li{border-bottom:1px solid #a8a8a8;text-transform:uppercase}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{margin:0 auto;transform-origin:32 32;width:100%}.admin-project-export-result h3{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.2rem;background:#f5f5f5;color:#757575;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#757575;margin:.5rem 0;text-align:center}.project-details .delete-project:hover,.project-details .use-default-image:hover{color:#ff2400}.project-details form{display:-ms-flexbox;display:flex}.project-details fieldset{margin-bottom:1rem}.project-details label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.project-details .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.project-details .project-details-image .image{width:100%}.project-details .change-image{display:block}.project-details .image-container{position:relative;margin-bottom:.5rem}.project-details .loading-overlay{display:none}.project-details .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.project-details .loading-spinner{margin:0 auto;border:0;transform-origin:center center}.project-details .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.project-details .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.project-details form{display:block}}.project-details .get-feedback,.project-details .looking-for-people{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid #c1c1c1;padding:1rem 0}.project-details .looking-for-people{border-top:1px solid #c1c1c1;margin-bottom:0}.project-details .get-feedback-inner,.project-details .looking-for-people-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.project-details .get-feedback-inner svg,.project-details .looking-for-people-selector svg{width:1rem;height:1rem;fill:#757575;margin-left:.5rem}.project-details .get-feedback-inner .check,.project-details .looking-for-people-selector .check{margin-left:auto}.project-details .looking-for-people-reason{display:block;margin-top:1rem}.project-details .looking-for-people-reason.ng-hide-remove-active{animation:dropdownFade .3s}.project-details .looking-for-people-reason.ng-hide-add-active{animation:dropdownFade .2s reverse;animation-delay:.1s}.project-details .delete-project{font-size:1rem;display:block;margin-top:1rem;text-align:right}.project-details .private-or-public{font-size:1rem;color:#757575;margin-bottom:2rem}.project-details .private-or-public svg{width:1.1rem;height:1.1rem;fill:#757575;margin-right:.5rem;vertical-align:middle}.project-privacy-settings{display:-ms-flexbox;display:flex;margin-bottom:.5rem}.project-privacy-settings .privacy-option{-ms-flex:1;flex:1;transition:.2 linear}.project-privacy-settings .privacy-option:first-child{margin-right:.5rem}.project-privacy-settings input[type=radio],.project-privacy-settings input[type=text]{display:none}.project-privacy-settings .privacy-project:checked~input[type=text],tg-admin-project-restrictions span{display:block}.project-privacy-settings label{background:#f5f5f5;color:#212121;text-align:center;transition:all .2s linear}.project-privacy-settings label:hover{background:rgba(33,33,33,.4);color:#212121}.project-privacy-settings label:hover svg{fill:#212121}.project-privacy-settings label svg{width:1.1rem;height:1.1rem;fill:#212121;margin-left:.5rem;vertical-align:middle}.project-privacy-settings .privacy-project:checked+label{background:#212121;color:#fff}.project-privacy-settings .privacy-project:checked+label svg{width:1.1rem;height:1.1rem;fill:#fff}.project-privacy-settings .privacy-project[disabled]+label{background:#f5f5f5;box-shadow:none;color:#757575;cursor:not-allowed;opacity:.65}.project-privacy-settings .privacy-project[disabled]+label:hover{background:#f5f5f5;color:#757575}tg-admin-project-restrictions p{font-size:1rem;text-align:center}tg-admin-project-restrictions a{color:#000}tg-admin-project-restrictions span:first-child::before{border:1px solid #ff0062;border-radius:6px;color:#ff0062;content:'!';display:inline-block;height:12px;line-height:12px;margin-right:.5rem;text-align:center;width:12px}.admin-project-profile-owner-actions{-ms-flex-align:center;align-items:center;border-top:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem}.admin-project-profile-owner-actions a{color:#000}.admin-project-profile-owner-actions a:hover{color:#212121;transition:color .2s}.admin-project-profile-owner-actions img{width:100%}.admin-project-profile-owner-actions .owner-info{-ms-flex:1;flex:1;padding-left:.5rem}.admin-project-profile-owner-actions .owner-info-title{color:#757575}.admin-project-profile-owner-actions .owner-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-project-profile-owner-actions .owner-avatar{width:2.5rem}.admin-project-profile-owner-actions .request{-ms-flex-negative:0;flex-shrink:0}.admin-roles .save{display:inline-block}.admin-roles .role-name{font-size:2rem;color:#212121}.admin-roles .icon:hover{fill:#000;transition:fill .2s linear}.admin-roles .icon-edit{cursor:pointer;fill:#757575;margin-left:.5rem;opacity:0;transition:opacity .2s linear}.admin-roles .icon-save{fill:#757575;margin-left:.5rem;transition:fill .2s linear}.admin-roles .edit-role{background-color:#c1c1c1;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .any-computable-role{background:#ff2400;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{font-size:.9rem;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category.external-user{-ms-flex-pack:start;justify-content:flex-start}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.admin-submenu ul a span,.admin-webhooks .webhook-url span{max-width:85%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admin-submenu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575;text-transform:uppercase}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#080808;color:#fff;transition:all .2s}.admin-submenu ul a.active{background:#1a1a1a;color:#fff;transition:all .2s}.admin-submenu ul a span{display:block}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#212121}.admin-webhooks .webhooks-table{margin-bottom:1rem}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;transition:opacity .2s linear}.admin-webhooks .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575}.admin-webhooks .table-body .webhook-service{color:#757575}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #c1c1c1}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-negative:0;flex-shrink:0}.admin-webhooks .webhook-url{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.admin-webhooks .webhook-url span{word-wrap:normal;color:#757575;display:inline-block;vertical-align:middle}.admin-webhooks .webhook-url a{color:#000;cursor:pointer;margin-left:.5rem;white-space:nowrap}.admin-webhooks .webhook-url a:hover{color:#212121}.admin-webhooks .webhook-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.admin-webhooks .webhook-options a{cursor:pointer;display:inline-block;margin-right:.5rem}.admin-webhooks .webhook-options svg{fill:#757575}.admin-webhooks .webhook-options svg:hover{fill:#000;transition:fill .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{display:none}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #c1c1c1;margin-left:22%}.admin-webhooks .history-single{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(33,33,33,.1);transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{transform:rotate(180deg);transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{transform:rotate(0);transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#757575;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#212121}.admin-webhooks .history-response-icon.history-error{background:#ff2400}.admin-webhooks .history-single-response{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#757575}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-header a{font-size:.9rem;color:#757575}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#212121;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{font-family:'courier new',monospace;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{font-size:.9rem;color:#757575;-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace;border:0;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-contrib h2,.admin-contrib label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #c1c1c1;margin-bottom:1rem}.admin-contrib input{margin-bottom:1rem}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #757575;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:0 1rem}.admin-contrib .check-item{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0;margin-bottom:1rem}.contrib-form-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.contrib-form-wrapper input{margin:0}.contrib-form-wrapper .contrib-input{border:0;-ms-flex:5;flex:5;margin:0}.contrib-form-wrapper .contrib-test{border:0;-ms-flex:1;flex:1;margin:0 0 0 1rem}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field a{font-size:.9rem;margin-left:1em;white-space:nowrap}.project-csv .csv-regenerate-field .icon:not(.icon-clipboard){fill:currentColor;height:.9rem;margin-right:.3rem;vertical-align:middle;width:.9rem}.project-csv .field-with-options{display:-ms-flexbox;display:flex;width:100%}.project-csv .field-with-options input{-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #757575;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{cursor:pointer;fill:#757575;opacity:0}.project-values-row .icon:hover{fill:#212121;transition:all .2s ease-in}.project-values-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #c1c1c1}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#999;cursor:move;transition:background .2s ease-in}.project-values-body .project-values-row:hover .icon{opacity:1;transition:opacity .2s ease-in}.project-values-name{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-values-value{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{display:inline-block;margin-right:.5rem}.project-values-settings svg.icon-trash{fill:#ff0062}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p{color:#212121;margin-bottom:.5rem;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #757575;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{font-size:.9rem;opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;transition:opacity .2s linear}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-password-text,.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;transition:opacity .3s linear}.login-form-container .forgot-pass{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.6rem;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#212121;transition:color .3s linear}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin:1rem 0;text-align:center}.register-form-container .register-text{font-size:.9rem}.backlog-table-body,.backlog-table-header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #757575;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-ms-flex-preferred-size:25px;flex-basis:25px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{width:100%}.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .votes,.backlog-table-header .votes{color:#757575;-ms-flex-preferred-size:65px;flex-basis:65px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.backlog-table-body .votes.inactive,.backlog-table-header .votes.inactive{color:#757575}.backlog-table-body .votes.inactive svg,.backlog-table-header .votes.inactive svg{fill:#757575}.backlog-table-body .votes.is-voted,.backlog-table-header .votes.is-voted{color:#212121;fill:#212121}.backlog-table-body .votes svg,.backlog-table-header .votes svg{fill:#757575;height:.75rem;margin-right:.25rem;vertical-align:middle;width:.75rem}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.2rem}.backlog-table-body .pop-points,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-header .pop-points,.backlog-table-header .pop-role,.backlog-table-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#212121;list-style-type:none;margin:0;position:absolute;z-index:99;text-align:"center";font-size:.9rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{color:#fff;display:none;left:65%;padding:10px 1rem 10px 10px;top:0;width:200px}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#212121;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{color:#fff;display:none;left:65%;padding:10px;top:0;width:200px}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#212121;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#212121;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{bottom:10px;color:#fff;display:none;left:30px;padding:10px 3rem 10px 10px;width:150px}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:none;left:30px;list-style-type:none;margin:0;z-index:99;text-align:"center";font-size:.9rem;position:absolute;background:#212121}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#212121;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{color:#fff;padding:10px;top:0;width:200px}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{bottom:0;color:#fff;padding:10px;top:auto;width:200px}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#212121;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#212121;color:#fff}.backlog-table-header .backlog-table-title{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;border-bottom:2px solid #757575;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:1rem}.backlog-table-header .points{cursor:pointer}.backlog-table-header .header-points span{color:#757575}.backlog-table-body.forecasted-stories{border:.5rem solid #f5f5f5;border-bottom:0}.backlog-table-body .row{border-bottom:1px solid #b7b7b7;cursor:move;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#999;transition:background .2s ease-in;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag,.backlog-table-body .row:hover .us-settings{opacity:1;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.gu-mirror{background:#999;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .row .icon-arrow-down{fill:#757575;height:.7rem;width:.7rem}.backlog-table-body .gu-transit{background:#c1c1c1}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .sortable-placeholder *{display:none}.backlog-table-body .is-checked{background:#999;transition:background .2s ease-in}.backlog-table-body input:checked{color:#212121;transition:color .2s ease-in}.backlog-table-body .user-story-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:inline-block;-ms-flex:1;flex:1}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{font-size:.9rem;margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff0062;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:#ff2400;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .us-settings{-ms-flex-negative:0;flex-shrink:0;margin-left:2rem;opacity:0}.backlog-table-body .us-settings svg{fill:#757575;margin-right:.5rem;transition:fill .2s ease-in}.backlog-table-body .us-settings svg:hover{fill:#212121}.backlog-table-body .icon-drag{cursor:move;fill:#757575;opacity:0;padding:.1rem}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.backlog-table-body .us-status tg-svg{display:inline-block}.backlog-table-body .loading{margin:2% auto;width:3rem}.backlog-table-body .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.empty-large .row{display:none}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#000;padding:.25rem .25rem 0;transition:background .2s}.sprints .add-sprint:hover{background:#212121}.sprints .add-sprint svg{fill:#c1c1c1;height:1.4rem;width:1.5rem}.sprints .filter-closed-sprints{font-size:.9rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading{text-align:center}.sprints .loading-spinner{border:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;transform-origin:center center}.sprints .sprint-name a{font-size:1rem;display:inline-block;margin-right:.5rem}.sprints .sprint{margin-bottom:2rem}.sprints .sprint header{position:relative}.sprints .sprint:hover .edit-sprint{opacity:1;transition:opacity .2s ease-in}.sprints .sprint .edit-sprint{opacity:0;position:absolute;right:0;top:0;transition:opacity .2s ease-in;vertical-align:baseline}.lightbox-generic-form .settings .iocaine,.lightbox-generic-form .settings .requirement,.ticket-assigned-to .self-assign .icon,.ticket-assigned-to .user-assigned .icon,.ticket-assigned-users .self-assign .icon,.ticket-assigned-users .user-assigned .icon{vertical-align:middle}.sprints .sprint svg{fill:#757575}.sprints .sprint svg:hover{fill:#000;transition:fill .2s ease-in}.sprints .sprint .number{font-size:.75rem;margin-right:.2rem}.sprints .sprint .description{font-size:.75rem;line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{font-size:.9rem;color:#757575;-ms-flex:1;flex:1}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint ul{margin:0;text-align:right}.sprints .compact-sprint{transform:rotate(0);transition:all .2s}.sprints .compact-sprint.active{transform:rotate(90deg);transition:all .2s}.sprints .compact-sprint:hover .icon{fill:#212121;transition:color .2s}.sprints .sprint-progress-bar{background:#757575;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#000;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table{min-height:2rem}.sprints .sprint-table .sprint-empty{background:#b4b4b4;border:2px dashed #8f8f8f;color:#757575;padding:1rem;text-align:center}.sprints .sprint-table .row{border-bottom:1px solid #757575;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:rgba(117,117,117,.2);cursor:move;transition:background .2s ease-in}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.readonly{cursor:auto}.sprints .sprint-table .row.ui-sortable-helper{background:#999;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.sprints .sprint-table .gu-transit{background:#949494;height:40px}.sprints .sprint-table .gu-transit *{display:none}.sprints .sprint-table .column-us{font-size:.9rem;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{display:block}.sprints .sprint-table .us-name.closed{color:#828282}.sprints .sprint-table .us-name.blocked{color:#ff2400}.sprints .sprint-table .column-points{-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#828282}.sprints .sprint-table .column-points.blocked{color:#ff2400}.sprints .sprint-table.sprint-empty-wrapper .row{display:none}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input{display:none}.sprints .us-item-row .user-story-name{font-size:.9rem;line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#757575}.sprint-closed .sprint-progress-bar .current-progress{background:#5c5c5c}.sprint-closed .button-gray{background:#757575}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{font-size:1.2rem;margin-bottom:.5rem;text-transform:uppercase}.sprints-empty a{color:#000}.taskboard-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.taskboard-table.zoom-0 .task-colum-name span{padding-right:1rem}.taskboard-table .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;background:#f5f5f5;border-top:3px solid #757575;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;text-transform:uppercase;width:300px}.taskboard-table .task-colum-name:last-child{margin-right:0}.taskboard-table .task-colum-name.column-fold{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table .task-colum-name.column-fold span{display:none}.taskboard-table .task-colum-name.column-fold .hfold,.taskboard-table .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table .task-colum-name span{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.taskboard-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;min-height:2.4rem;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.taskboard-table-header tg-svg{display:block;margin-right:.3rem}.taskboard-table-header tg-svg:hover{cursor:pointer}.taskboard-table-header tg-svg.hfold,.taskboard-table-header tg-svg.hunfold{display:inline-block;transform:rotate(90deg)}.taskboard-table-body{-ms-flex:1;flex:1;margin-bottom:5rem;overflow:auto;width:100%}.taskboard-table-body .taskboard-column{-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:300px;width:300px}.taskboard-table-body .column-fold .card .card-owner img,.taskboard-table-body .row-fold .card .card-owner img{height:1.3rem;margin-right:0;width:1.3rem}.taskboard-table-body .taskboard-column:last-child{margin-right:0}.taskboard-table-body .row-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .row-fold .card .card-data,.taskboard-table-body .row-fold .card .card-owner-actions,.taskboard-table-body .row-fold .card .card-owner-name,.taskboard-table-body .row-fold .card .card-statistics,.taskboard-table-body .row-fold .card .card-tag,.taskboard-table-body .row-fold .card .card-title,.taskboard-table-body .row-fold .card .card-unfold,.taskboard-table-body .row-fold .card tg-card-slideshow{display:none}.taskboard-table-body .row-fold .taskboard-column,.taskboard-table-body .row-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .card .card-data,.taskboard-table-body .column-fold .card .card-owner-actions,.taskboard-table-body .column-fold .card .card-owner-name,.taskboard-table-body .column-fold .card .card-statistics,.taskboard-table-body .column-fold .card .card-tag,.taskboard-table-body .column-fold .card .card-title,.taskboard-table-body .column-fold .card .card-unfold,.taskboard-table-body .column-fold .card tg-card-slideshow,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table-body .column-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .column-fold .taskboard-column,.taskboard-table-body .column-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to{display:none}.taskboard-table-body .taskboard-row{display:-ms-flexbox;display:flex;margin-bottom:.25rem;min-height:10rem;width:100%}.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box{background:rgba(255,36,0,.6)}.taskboard-table-body .taskboard-row.blocked .points-value,.taskboard-table-body .taskboard-row.blocked .points-value:hover,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg:hover{color:#fff;fill:#fff;transition:color .3s linear}.taskboard-table-body .taskboard-row.blocked .taskboard-cards-box{background:rgba(255,36,0,.1)}.taskboard-table-body .taskboard-row.row-fold{min-height:0}.taskboard-table-body .taskboard-row.row-fold .us-title{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.ticket-assigned-to .loading-spinner,.ticket-assigned-users .loading-spinner{transform-origin:32 32;max-height:2rem;max-width:2rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.taskboard-table-body .taskboard-row.row-fold .icon-add,.taskboard-table-body .taskboard-row.row-fold .icon-bulk,.taskboard-table-body .taskboard-row.row-fold .points-value,.taskboard-table-body .taskboard-row.row-fold .us-data{display:none}.taskboard-table-body .taskboard-row.issues-row{margin-top:1em}.taskboard-table-body .taskboard-row.issues-row .taskboard-cards-box{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:start;align-items:flex-start;border-top:3px solid #757575;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.taskboard-table-body .taskboard-row.issues-row .taskboard-row-title-box{padding:0}.taskboard-table-body .taskboard-row.issues-row .task-colum-name{-ms-flex-pack:start;justify-content:flex-start;padding:.5rem .5rem .5rem 2em}.taskboard-table-body .taskboard-row.issues-row .row-title{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-to,.ticket-assigned-users{-ms-flex-align:center;border-bottom:1px solid #757575;border-top:1px solid #757575}.taskboard-table-body .taskboard-row.issues-row .toggle-fold{display:block;left:.5rem;position:absolute;top:-.4rem}.taskboard-table-body .taskboard-row.issues-row .card{cursor:default;height:auto;margin:.3rem .1rem .3rem .5rem}.taskboard-table-body .taskboard-row.issues-row:not(.row-fold) .card{width:280px}.taskboard-table-body .taskboard-row-title-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-row-title-box{position:relative}.taskboard-row-title-box .us-title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-row-title-box .points-value{font-size:.9rem;color:#757575}.taskboard-row-title-box .points-value span{margin-right:.1rem}.taskboard-row-title-box .us-data{display:-ms-flexbox;display:flex}.taskboard-row-title-box .due-date tg-svg{position:inherit}.taskboard-row-title-box tg-svg{cursor:pointer;display:block;position:absolute;right:.5rem;top:.7rem}.taskboard-row-title-box tg-svg:hover svg{fill:#000}.taskboard-row-title-box tg-svg.add-action{right:2rem}.taskboard-row-title-box tg-svg.fold-action{left:0;right:inherit;top:1rem}.ticket-assigned-to{align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:1rem 0;position:relative}.ticket-assigned-to:hover .remove-user{opacity:1;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{margin:1rem auto}.ticket-assigned-to .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-to .user-avatar .iocaine-symbol svg{background:#212121;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.ticket-assigned-to .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;margin:.2rem 0 .25rem}.ticket-assigned-to .assigned-to .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-to .assigned-to .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-to .assigned-to .self-assign,.ticket-assigned-to .assigned-to .user-assigned{color:#000;cursor:default}.ticket-assigned-to .assigned-to .self-assign:hover,.ticket-assigned-to .assigned-to .user-assigned:hover,.ticket-assigned-to .remove-user:hover,.ticket-assigned-to .self-assign.editable:hover,.ticket-assigned-to .user-assigned.editable:hover,.ticket-assigned-users .self-assign.editable:hover,.ticket-assigned-users .user-assigned.editable:hover{cursor:pointer}.ticket-assigned-to .assigned-to .self-assign .icon,.ticket-assigned-to .assigned-to .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-to .remove-user{fill:#757575;opacity:0;position:absolute;right:.5rem;top:2rem}.ticket-assigned-to .remove-user:hover{fill:#ff2400;transition:fill .2s}.ticket-assigned-to .self-assign,.ticket-assigned-to .user-assigned{color:#000}.ticket-assigned-to .self-assign:hover,.ticket-assigned-to .user-assigned:hover{color:currentColor}.ticket-assigned-to .self-assign.editable,.ticket-assigned-to .user-assigned.editable{color:#000}.ticket-assigned-users .assigned-title,.ticket-assigned-users .tg-add-assigned span{color:#757575;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-assigned-users{align-items:center;margin-bottom:1rem;padding:.5rem 0;position:relative}.ticket-assigned-users .loading-spinner{margin:1rem auto}.ticket-assigned-users .assigned-title{display:block;margin:.2rem 0 .25rem}.ticket-assigned-users .tg-assigned-users{-ms-flex-align:center;align-items:center;position:relative}.ticket-assigned-users .tg-add-assigned{margin-top:.25rem}.ticket-assigned-users .tg-add-assigned .add-assigned{fill:#757575;opacity:1;right:.5rem;top:2rem}.ticket-assigned-users .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:#ff2400;transition:fill .2s}.ticket-assigned-users .tg-add-assigned span{margin:.2rem .5rem}.ticket-assigned-users .assigned-users-options{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .assigned-users-options a{margin-right:.2rem}.ticket-assigned-users .self-assign,.ticket-assigned-users .self-assign.editable,.ticket-assigned-users .user-assigned,.ticket-assigned-users .user-assigned.editable{color:#000}.ticket-assigned-users .not-assigned-users{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;margin:.2rem 0 .25rem}.colors-table .table-header,.duty-custom-fields .custom-fields-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .not-assigned-users .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-users .not-assigned-users .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-users .not-assigned-users .self-assign,.ticket-assigned-users .not-assigned-users .user-assigned{color:#000;cursor:default}.colors-table .row.edition .current-color,.ticket-assigned-users .not-assigned-users .self-assign:hover,.ticket-assigned-users .not-assigned-users .user-assigned:hover{cursor:pointer}.ticket-assigned-users .not-assigned-users .self-assign .icon,.ticket-assigned-users .not-assigned-users .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-users .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-users .user-avatar img{width:100%}.ticket-assigned-users .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-users .user-avatar .iocaine-symbol svg{background:#212121;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.category-config{border-bottom:1px solid #757575}.category-config:first-child{border-top:1px solid #757575}.category-config .resume{-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:-ms-flexbox;display:flex;padding:1rem;position:relative}.category-config .resume.open-drawer .icon{transform:rotate(90deg)}.category-config .icon{transform:rotate(0);transition:all .4s}.category-config .resume-title{width:280px}.category-config .count{color:#757575;float:left;padding-right:5px}.category-config .summary-role{-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#757575;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#000}.category-config .summary-role .role-summary-single.inactive{background:#757575}.category-config .category-items{max-height:0;transition:max-height .5s ease-in;overflow:hidden;background-color:#c1c1c1;width:100%}.colors-table .table-header .row:hover,.colors-table .table-header:hover{background:0 0}.category-config .category-items.open{transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #c1c1c1}.colors-table .table-header .row{padding-left:50px}.colors-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:last-child{border:0}.colors-table .row.edition{padding-left:3rem}.colors-table .row.hidden{display:none}.colors-table .row:hover{background:rgba(110,110,110,.2);cursor:move;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;transition:opacity .3s linear}.colors-table .row.no-draggable{padding-left:50px}.colors-table .row.no-draggable:hover{cursor:auto}.colors-table .row .color-column{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .before-after-column,.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit,.colors-table .row .thresold-column{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.colors-table .row .before-after-column{padding:0 10px}.colors-table .row .color-name,.colors-table .row .status-name{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 10px;position:relative}.colors-table .row .color-name span,.colors-table .row .status-name span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.colors-table .row .color-name{-ms-flex-preferred-size:100px;flex-basis:100px}.colors-table .row .status-slug{display:none;-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:6;flex-grow:6;padding:0 10px}@media (min-width:1400px){.colors-table .row .status-slug{display:block}}.colors-table .row .status-slug span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:100px;text-align:center}.colors-table .row .status-wip-limit{display:none;max-width:100px;padding:0 0 0 10px;text-align:center}@media (min-width:1400px){.colors-table .row .status-wip-limit{display:block}}.colors-table .before-after-selector{display:-ms-flexbox;display:flex;font-size:.9rem}.colors-table .before-after-selector input{display:none}.colors-table .before-after-selector input+label{background:rgba(193,193,193,.7);cursor:pointer;display:block;padding:.5rem .25rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.colors-table .before-after-selector input+label:hover{background:rgba(33,33,33,.3);transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single{-ms-flex:1;flex:1;margin-right:.25rem}.colors-table .before-after-selector .before-after-selector-single:last-child{margin-right:0}.colors-table .before-after-selector .before-after-selector-single.checked label{background:#212121;color:#fff;transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single.checked label:hover{background:#212121}.colors-table .options-column a{cursor:pointer;display:inline-block}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#c1c1c1;border-radius:2px;height:40px;width:40px}.colors-table .icon{cursor:pointer;fill:#757575;margin-right:1rem;opacity:0}.colors-table .icon:hover{fill:#212121;transition:all .2s ease-in}.colors-table .icon.icon-check{cursor:default;fill:#000;opacity:1}.colors-table .icon.icon-merge{cursor:default;opacity:1}.colors-table .icon.icon-search{cursor:none;fill:#000;opacity:1}.colors-table .icon.icon-drag{cursor:move}.colors-table .icon.icon-trash{fill:#ff0062}.colors-table .gu-mirror{background:#999;opacity:1}.contrib-plugins-wrapper{margin:1rem 0 2rem}.contrib-plugins-wrapper label{font-size:.9rem;display:block;margin-bottom:.5rem}.duty-custom-fields{margin-bottom:2rem}.duty-custom-fields .custom-fields-header{-ms-flex-line-pack:justify;align-content:space-between;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value,.lightbox h2,.lightbox-create-edit .tg-add-assigned span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header .icon{cursor:pointer}.duty-custom-fields .custom-fields-header .collapse{display:block;transform:rotate(-90deg);transition:.1s ease-out}.duty-custom-fields .custom-fields-header .open{transform:rotate(0)}.duty-custom-fields .custom-field-single{border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;padding:.7rem}.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-options{margin:0;opacity:0;transition:opacity .2s linear}.duty-custom-fields .custom-field-options a{display:inline-block}.duty-custom-fields .custom-field-options svg{fill:#757575}.duty-custom-fields .custom-field-options svg:hover{fill:#000}.duty-custom-fields .custom-field-data{-ms-flex:0;flex:0;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem;display:block;line-height:.9rem}.duty-custom-fields .custom-field-value{-ms-flex-align:start;align-items:flex-start;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields .custom-field-value.js-value-view-mode.wysiwyg{white-space:normal}.duty-custom-fields form label{cursor:pointer}.duty-custom-fields form input{width:100%}.custom-fields-body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:50%;flex-basis:50%}@media (max-width:1280px){.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even),.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0}}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even){padding:0 0 0 2rem}.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0 2rem 0 0}.custom-fields-body .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body .custom-attribute:nth-child(even),.custom-fields-body .custom-attribute:nth-child(odd){padding:0}.custom-fields-body .custom-field-single{height:100%}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff0062}.external-reference{font-size:.9rem;color:#757575;margin-top:.5rem}.external-reference a{border-left:1px solid #757575;padding:0 .2rem;transition:color .3s linear}.external-reference a:hover{color:#000}.external-reference a:first-child{border:0}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox .close{width:2rem;height:2rem;cursor:pointer;fill:#757575;position:absolute;right:3rem;top:3rem;transition:fill .2s;display:block}.lightbox .close:hover{fill:#ff0062}.lightbox .close svg{width:2rem;height:2rem;pointer-events:none}.lightbox.open{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1;transition:opacity .3s ease}.lightbox.close{opacity:0;transition:opacity .3s ease}.lightbox .lb-icon{margin:1rem auto;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single:first-child,.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox .lb-icon svg{width:6rem;height:6rem;display:block;fill:#c1c1c1}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox h2{font-size:2rem}.lightbox-generic-form form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form fieldset{position:relative}.lightbox-generic-form textarea{min-height:4.5rem;resize:vertical}.lightbox-generic-form .existing-or-new-selector{display:-ms-flexbox;display:flex;margin-bottom:2rem}.lightbox-generic-form .existing-or-new-selector input{display:none}.lightbox-generic-form .existing-or-new-selector input:checked+label{background:#212121;color:#fff;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input:checked+label:hover{background:#212121}.lightbox-generic-form .existing-or-new-selector input+label{background:rgba(193,193,193,.7);cursor:pointer;display:block;font-size:1em;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input+label:hover{background:rgba(33,33,33,.3);transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single{-ms-flex:1;flex:1}.lightbox-generic-form .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#212121;border:1px solid #000}.lightbox-generic-form .settings .iocaine svg,.lightbox-generic-form .settings .requirement svg{width:.75rem;height:.75rem}.lightbox-generic-form .settings .blocked:hover{background:#ff0062;border:1px solid #ff2400}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#000;border:1px solid #000;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:#ff2400;border:1px solid #ff2400;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-form .attachments{margin-bottom:0}.lightbox-search fieldset,.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-generic-form .attachment-body{max-height:7.5rem;overflow-y:auto}.lightbox-generic-form .attachment-delete{right:.5rem}.lightbox-generic-form .attachment-delete svg{fill:#757575;height:1.25rem;width:1.25rem}.lightbox-generic-form .attachment-delete:hover svg{fill:#ff2400}.lightbox-sprint-add-edit .delete-sprint .icon,.lightbox-sprint-add-edit .delete-sprint:hover .icon{fill:currentColor}.lightbox-generic-bulk form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-search form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-sprint-add-edit form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.7rem;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-sprint-add-edit .delete-sprint{font-size:.9rem;color:#757575;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-ask-choice .subtitle,.lightbox-generic-ask .subtitle{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint:hover{color:#ff2400;transition:color .3s linear}.lightbox-generic-ask form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .subtitle{white-space:pre-line}.lightbox-generic-ask .options{display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-ask-choice .warning{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-delete-account p{text-align:center}.lightbox-delete-account form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .newsletter input+label{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-delete-project .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem}.lightbox-delete-account .options{display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-ms-flexbox;display:flex}.lightbox-delete-project .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:100%;max-width:100%;width:100%}.backlog-sprints-menu::after,.lightbox-create-edit .pop-status:after,.lightbox-create-edit .pop-users:after,.main-nav a:hover .helper::after,.related-tasks-body .pop-status:after,.ticket-header .pop-status:after{content:'';transform:rotate(45deg)}.lightbox-generic-loading .progress-bar-wrapper{background:#b4b4b4;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#212121;height:24px;position:absolute;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#b4b4b4;bottom:35px;color:#757575;padding:.3rem;position:absolute;transition:left .1s linear}.lightbox-import-error .description a,.lightbox-select-user .add-comment a{color:#000}.lightbox-create-issue form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row fieldset{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block textarea,.lightbox-create-issue textarea{margin-bottom:1rem;max-height:12rem;min-height:8rem}.lightbox-select-user .add-comment textarea,.lightbox-select-user .submit-button{margin-top:1rem}.lightbox-block .form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single.selected,.lightbox-select-user .user-list-single:hover{background:rgba(110,110,110,.3);cursor:pointer}.lightbox-select-user .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.lightbox-select-user .more-watchers{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;padding:.5rem;text-align:center}.lightbox-select-user .add-comment{position:relative;text-align:center}.lightbox-select-user .add-comment .icon-close{cursor:pointer;fill:#757575;position:absolute;right:0;top:0;transition:fill .2s}.lightbox-select-user .add-comment .icon-close:hover{fill:#ff0062}.lightbox-select-user .add-comment .icon-close svg{width:2rem;height:2rem}.lb-create-edit-userstory .points-per-role{-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0}.lb-create-edit-userstory .ticket-role-points{margin:.1rem;min-width:20%}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(4n+4){margin-right:0}.lb-create-edit-userstory .ticket-role-points:last-child{-ms-flex-preferred-size:100%;flex-basis:100%;margin:.1rem 0;min-width:100%}.lightbox-import-error{text-align:center}.lightbox-import-error .content{width:500px}.lightbox-import-error h2{margin-top:1rem}.lightbox-import-error img{height:5rem}.lightbox-leave-project-warning{text-align:center}.lightbox-leave-project-warning .icon{fill:#757575;height:3rem;margin-bottom:1rem;width:3rem}.lightbox-set-due-date .delete-due-date .icon,.lightbox-set-due-date .delete-due-date:hover .icon{fill:currentColor}.lightbox-leave-project-warning .content,.lightbox-request-ownership .content{width:500px}.lightbox-request-ownership{text-align:center}.lightbox-set-due-date{z-index:9999}.lightbox-set-due-date form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-set-due-date .date{margin:2rem 0 1rem}.lightbox-set-due-date .reason textarea{margin-top:.5rem}.lightbox-set-due-date .due-date-suggestions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:1rem 0 .5rem}.lightbox-set-due-date .suggestion{background:rgba(184,184,184,.2);color:#B8B8B8;-ms-flex-pack:start;justify-content:flex-start;margin:0 .5rem .5rem;min-height:2rem;padding:.5rem .75rem;position:relative}.lightbox-set-due-date .suggestion:first-child{margin-left:0}.lightbox-set-due-date .suggestion:nth-child(4n+4){margin-right:0}.lightbox-set-due-date .suggestion.clickable.active,.lightbox-set-due-date .suggestion.clickable:hover{background:rgba(33,33,33,.9);color:#fff}.lightbox-set-due-date .delete-due-date{font-size:.9rem;color:#757575;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-set-due-date .delete-due-date:hover{color:#ff2400;transition:color .3s linear}.lightbox-create-edit{z-index:9998}.lightbox-create-edit form{-ms-flex-preferred-size:700px;flex-basis:700px;max-width:700px;width:700px}.lightbox-create-edit .form-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:700px;flex-basis:700px;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;margin-bottom:30px}.lightbox-create-edit .form-wrapper main{-ms-flex-positive:1;flex-grow:1;max-width:480px}.lightbox-create-edit .form-wrapper .sidebar{border-left:2px solid #c1c1c1;margin-left:15px;padding-left:15px;width:220px}.lightbox-create-edit .existing-item-wrapper{margin-bottom:30px}.lightbox-create-edit .existing-item-wrapper select .strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-create-edit .add-existing-button{width:100%}.lightbox-create-edit .status-button{display:-ms-flexbox;display:flex;position:relative}.lightbox-create-edit .status-dropdown{-ms-flex-line-pack:center;align-content:center;color:#fff;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;height:30px;padding:.25rem .5rem}.lightbox-create-edit .status-dropdown .status-text{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.lightbox-create-edit .status-dropdown svg{fill:#fff;height:.9rem;width:.9rem}.lightbox-create-edit .popover a{color:#fff;display:block;padding:.5rem 1rem;text-align:left}.lightbox-create-edit .popover a.active,.lightbox-create-edit .popover a:hover{color:#212121}.lightbox-create-edit .ticket-assigned-to{border:0;padding:0}.lightbox-create-edit .ticket-assigned-to.single-assign{margin:0}.lightbox-create-edit .ticket-assigned-to.multiple-assign{-ms-flex-align:start;align-items:start;-ms-flex-direction:column;flex-direction:column;margin:0}.lightbox-create-edit .ticket-assigned-to .assigned-to-actions{display:block}.lightbox-create-edit .ticket-assigned-to .remove-user{top:1.2rem}.lightbox-create-edit .user-list{display:-ms-flexbox;display:flex;width:100%}.lightbox-create-edit .user-list .user-list-item{margin-right:.5rem;width:44.75px}.lightbox-create-edit .user-list .user-list-item img{height:44.75px;width:44.75px}.lightbox-create-edit .user-list .user-list-item:last-child{margin-right:0}.lightbox-create-edit .user-list .user-list-item.counter{background:#B8B8B8;color:#757575;font-weight:400;height:44.75px;line-height:44.75px;text-align:center}.lightbox-create-edit .tg-add-assigned{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:.25rem 0 .75rem}.lightbox-create-edit .tg-add-assigned .add-assigned{fill:#757575;opacity:1;right:.5rem;top:2rem}.lightbox-create-edit .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:#ff2400;transition:fill .2s}.lightbox-create-edit .tg-add-assigned span{font-size:.9rem;color:#757575;margin:.2rem .5rem}.lightbox-create-edit .pop-status,.lightbox-create-edit .pop-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;text-align:"center";background:#212121;font-size:.9rem;z-index:99}.lightbox-create-edit .users-dropdown{position:relative}.lightbox-create-edit .pop-status{color:#fff;display:none;padding:10px;position:absolute;top:28px;width:203px}.lightbox-create-edit .pop-status a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-status a:last-child{border:0}.lightbox-create-edit .pop-status a:hover{color:#212121;transition:color .3s linear}.lightbox-create-edit .pop-status a:hover.point{color:#fff}.lightbox-create-edit .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.lightbox-create-edit .pop-users{color:#fff;display:none;left:0;padding:10px;position:absolute;top:60px;width:203px}.lightbox-create-edit .pop-users a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-users a:last-child{border:0}.lightbox-create-edit .pop-users a:hover{color:#212121;transition:color .3s linear}.lightbox-create-edit .pop-users a:hover.point{color:#fff}.lightbox-create-edit .pop-users:after{background:#212121;height:15px;left:67.67px;position:absolute;top:-7px;width:16px}.lightbox-create-edit .pop-users.multiple{top:84px}.lightbox-create-edit .pop-users.multiple::after{left:30px}.lightbox-create-edit .pop-users ul{margin-bottom:.5rem}.lightbox-create-edit .pop-users li{border-bottom:1px solid #757575}.lightbox-create-edit .pop-users li:last-child{border:0}.lightbox-create-edit .pop-users .user-list-single{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;padding:.5rem 0}.lightbox-create-edit .pop-users .user-list-single.selected{color:#000}.lightbox-create-edit .pop-users .user-list-avatar{height:32px;margin-right:.5rem;width:32px}.lightbox-create-edit .pop-users .user-list-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-positive:1;flex-grow:1;position:relative}.lightbox-create-edit .pop-users .remove svg{fill:#c1c1c1;height:.8rem;width:.8rem}.lightbox-create-edit .pop-users .show-more{border-top:1px solid #757575;padding-top:.5rem;text-align:center}.lightbox-create-edit .ticket-data-container{margin:0;padding:0 0 .1rem}.lightbox-create-edit .ticket-data-container .ticket-status .priority-data,.lightbox-create-edit .ticket-estimation .points-per-role{margin:0}.lightbox-create-edit .ticket-detail-settings{height:52px;-ms-flex-pack:left;justify-content:left;margin:1rem 0 0}.lightbox-create-edit .ticket-detail-settings label{border:0;padding:12px 13px;width:auto}.lightbox-create-edit .ticket-detail-settings .item-block,.lightbox-create-edit .ticket-detail-settings .item-unblock{display:block;margin:0}.lightbox-create-edit .blocked-note{margin-top:.5rem}.ticket-detail-settings .lightbox-assign-sprint-to-issue .lightbox-assign-related-sprint{width:700px}.ticket-detail-settings .lightbox-assign-sprint-to-issue svg{fill:initial;max-height:initial;max-width:initial}.ticket-detail-settings img,.ticket-detail-settings svg{max-height:1.25rem;max-width:1.25rem;width:100%}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label{background:0 0;display:inline-block;margin-bottom:.5rem;margin-right:0;padding:0}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label+input{display:initial}.ticket-detail-settings .lightbox-assign-sprint-to-issue button{width:100%}.lightbox-relate-to-epic .lightbox-create-related-epic-wrapper{max-width:600px;width:90%}.lightbox-relate-to-epic .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-relate-to-epic .related-with-selector input{display:none}.lightbox-relate-to-epic .related-with-selector input:checked+label{background:#212121;color:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input:checked+label:hover{background:#212121}.lightbox-relate-to-epic .related-with-selector input+label{background:rgba(193,193,193,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input+label:hover{background:rgba(33,33,33,.3);transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-relate-to-epic fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-relate-to-epic .new-epic-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-relate-to-epic .existing-epic-form,.lightbox-relate-to-epic .new-epic-form{margin-bottom:1rem}.lightbox-relate-to-epic .no-epics-found{padding:1rem 0 0}.lightbox-relate-to-epic .new-epic-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-relate-to-epic .new-epic-options input{display:none}.lightbox-relate-to-epic .new-epic-options input:checked+label{background:#212121;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label{background:#f5f5f5;color:#212121;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label:hover{background:#212121;color:#fff;fill:#fff}.lightbox-relate-to-epic button{width:100%}tg-project-menu{background-position:0 -300px;display:inline-block;min-height:calc(100vh - 40px);min-width:50px;padding:1rem 0;position:relative;text-transform:uppercase;z-index:99}.main-nav a,.main-nav span{display:block}tg-project-menu .menu.menu-fixed{position:fixed;top:1rem}.main-nav,.main-nav a,.main-nav li{position:relative}.main-nav{padding:0;text-align:center}.main-nav a{padding:1rem .7rem}.main-nav a:hover{background:rgba(0,0,0,.2);transition:color .3s linear}.main-nav a:hover svg{fill:#212121;transition:fill .3s linear}.backlog-sprints-menu,.main-nav a:hover .helper{animation:slideLeft .2s ease-in-out both;padding:.4rem 1rem;transition:all .2s;position:absolute;white-space:nowrap}.main-nav a:hover .helper{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:calc(50% - 1rem);z-index:99}.main-nav a:hover .helper::after{background:#212121;height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);width:12px;z-index:98}.main-nav svg{height:1.7rem;width:1.7rem}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .item{font-size:1.2rem}.main-nav .active{color:#000}.main-nav .active svg{opacity:1;stroke:#000}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.backlog-sprints-menu{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:1rem;z-index:99}.backlog-sprints-menu a{color:#fff;padding:.6rem .8rem;text-align:left;text-transform:none}.backlog-sprints-menu a:nth-child(2){padding:1rem .8rem .6rem}.backlog-sprints-menu a:last-child{padding:.6rem .8rem .4rem}.backlog-sprints-menu a:hover{background:0 0}.backlog-sprints-menu::after{background:#212121;height:12px;left:calc(-12px/2);position:absolute;top:calc(1rem - 12px/2);width:12px;z-index:98}.related-tasks,.related-tasks-body .status{position:relative}.related-tasks{margin-bottom:2rem}.related-tasks-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-tasks-header .related-tasks-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-tasks-header .add-button{background:#212121;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-tasks-header .add-button.is-active,.related-tasks-header .add-button:hover{background:#212121}.related-tasks-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-tasks-body{width:100%}.related-tasks-body .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}.related-tasks-body .row:hover .task-settings{opacity:1;transition:all .2s ease-in}.related-tasks-body .row .task-name{-ms-flex:1;flex:1}.related-tasks-body .row .task-settings{-ms-flex-negative:0;flex-shrink:0;width:60px}.related-tasks-body .row .status{-ms-flex-negative:0;flex-shrink:0;width:125px}.related-tasks-body .row .assigned-to{cursor:pointer;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .single-related-task:hover{background:rgba(33,33,33,.05)}.related-tasks-body .single-related-task:hover .icon-drag{opacity:1}.related-tasks-body .single-related-task .task-reorder{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .single-related-task .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#c1c1c1;opacity:0;transition:opacity .1s}.issues-table .title div,.issues-table .votes,.related-tasks-body .task-assignedto.editable,.related-tasks-body .task-settings a:hover,.ticket-detail-settings .assign-issue-button.editable,.ticket-detail-settings .button-delete.editable,.ticket-detail-settings .item-block.editable,.ticket-detail-settings .item-unblock.editable,.ticket-detail-settings .promote-button.editable,.ticket-detail-settings label.editable{cursor:pointer}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .iocaine{background:rgba(33,33,33,.1);border-left:10px solid #212121}.related-tasks-body .task-name{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .task-name span{margin-right:.25rem}.related-tasks-body .task-name input{font-size:1rem;margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .pop-status,.ticket-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;z-index:99;text-align:"center"}.related-tasks-body .task-name.loading span{animation:loading .5s linear,spin 1s linear infinite}.related-tasks-body .status .not-clickable:hover{color:#212121}.related-tasks-body .status .popover{left:0;top:1rem}.related-tasks-body .status .popover a{display:block}.related-tasks-body .status .icon{width:.8rem;height:.8rem;fill:currentColor;margin-left:.2rem}.related-tasks-body .closed,.related-tasks-body .closed:hover{border-left:10px solid #c1c1c1;color:#c1c1c1}.related-tasks-body .closed a,.related-tasks-body .closed svg,.related-tasks-body .closed:hover a,.related-tasks-body .closed:hover svg{fill:#c1c1c1}.related-tasks-body .closed .task-name a,.related-tasks-body .closed:hover .task-name a{color:#c1c1c1;text-decoration:line-through}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .pop-status{font-size:.9rem;background:#212121;color:#fff;display:none;left:40%;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px}.related-tasks-body .pop-status a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#212121;transition:color .3s linear}.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:rgba(255,0,98,.2);border-left:10px solid #ff0062}.related-tasks-body .task-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;opacity:0}.related-tasks-body .task-settings svg{width:1.1rem;height:1.1rem;fill:#757575;margin-right:.5rem;transition:fill .2s ease-in}.related-tasks-body .task-settings svg:hover{fill:#757575}.related-tasks-body .delete-task:hover .icon-edit,.related-tasks-body .edit-task:hover .icon-edit,.related-tasks-body .save-task:hover .icon-edit{fill:#212121}.related-tasks-body .delete-task:hover .icon-save,.related-tasks-body .edit-task:hover .icon-save,.related-tasks-body .save-task:hover .icon-save{fill:#000}.related-tasks-body .delete-task:hover .icon-trash,.related-tasks-body .edit-task:hover .icon-trash,.related-tasks-body .save-task:hover .icon-trash{fill:#ff0062}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{width:.8rem;height:.8rem;fill:#757575;opacity:0;position:absolute;right:.5rem;top:.5rem;transition:opacity .3s linear}.related-tasks-body .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:1.5rem 0 2rem;position:relative}.ticket-header .ticket-title{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;text-transform:uppercase;vertical-align:sub}.ticket-header .detail-status{font-size:.9rem;display:-ms-flexbox;display:flex;margin-left:.25rem;position:relative}.ticket-header .detail-status .icon-arrow-down{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem}.ticket-header .detail-status-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start}.ticket-header .detail-status-inner>span{color:#fff;padding:.15rem .25rem;text-transform:uppercase}.ticket-header .pop-status{font-size:.9rem;background:#212121;color:#fff;display:none;left:0;margin:0;position:absolute;top:1.25rem;width:150px;padding:0;text-transform:none}.ticket-data-container,.ticket-header .pop-status a{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.ticket-header .pop-status a{border-bottom:1px solid #212121;color:#fff;display:block;padding:.5rem 1rem;text-align:left}.ticket-header .pop-status a:last-child{border:0}.ticket-header .pop-status a:hover{color:#212121;transition:color .3s linear}.ticket-header .pop-status a:hover.point{color:#fff}.ticket-header .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.ticket-header .pop-status a:hover{background:rgba(33,33,33,.2)}.ticket-data-container{margin-bottom:1rem}.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .type-data .pop-type{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;left:30px;top:30px;text-align:"left";font-size:.9rem;z-index:99;list-style-type:none}.ticket-data-container .icon{width:.7rem;height:.7rem;color:currentColor;margin-left:.25rem}.ticket-status .priority-data .pop-priority:after,.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;transform:rotate(45deg)}.ticket-status:last-child{margin:0}.ticket-status .level{display:inline-block;margin-right:.5rem;vertical-align:top}.ticket-status .level-name{color:#8e8e8e;float:right;text-transform:lowercase}.ticket-status .clickable:hover{background:#a8a8a8;transition:background .2s ease-in}.ticket-status .type-data{background:#b4b4b4;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .type-data .pop-type{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .type-data .pop-type a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#212121;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#212121;position:absolute;width:0}.ticket-status .severity-data{background:#b4b4b4;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .severity-data .pop-severity{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .severity-data .pop-severity a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#212121;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#212121;position:absolute;width:0}.ticket-status .priority-data{background:#b4b4b4;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .priority-data .pop-priority{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-watch .ticket-watch-button,.ticket-watch svg{margin-right:.25rem}.ticket-status .priority-data .pop-priority a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#212121;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{background:#212121;position:absolute;width:0}.ticket-watch-buttons{margin-bottom:1rem}.ticket-watch .ticket-watch-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.introjs-tooltip p,.single-project .description,.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-watch .ticket-watch-inner{display:-ms-flexbox;display:flex}.ticket-watch svg{position:relative;top:2px}.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-size:.9rem;background:#757575;color:#fff;-ms-flex:1;flex:1;padding:.25rem;text-align:center;text-transform:uppercase;transition:background .25s}.ticket-watch .add-watcher svg,.ticket-watch .ticket-watch-button svg{fill:#fff}.ticket-watch .add-watcher:hover,.ticket-watch .ticket-watch-button:hover{background:#212121}.ticket-watch .add-watcher.is-hover,.ticket-watch .ticket-watch-button.is-hover{background:#ff2400;color:#c1c1c1;transition:background .3s}.ticket-watch .add-watcher.is-hover svg,.ticket-watch .ticket-watch-button.is-hover svg{fill:#ff0062}.ticket-watch .add-watcher.active,.ticket-watch .ticket-watch-button.active{background:#212121}.ticket-watch .add-watcher.active:hover,.ticket-watch .ticket-watch-button.active:hover{background:#ff0062}.ticket-watch .add-watcher.active svg,.ticket-watch .ticket-watch-button.active svg{fill:#fff}.ticket-detail-settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:2rem}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .button-delete,.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock,.ticket-detail-settings .promote-button,.ticket-detail-settings label{background:#757575;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .assign-issue-button+input,.ticket-detail-settings .button-delete+input,.ticket-detail-settings .item-block+input,.ticket-detail-settings .item-unblock+input,.ticket-detail-settings .promote-button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .assign-issue-button:hover,.ticket-detail-settings .button-delete:hover,.ticket-detail-settings .item-block:hover,.ticket-detail-settings .item-unblock:hover,.ticket-detail-settings .promote-button:hover,.ticket-detail-settings label:hover{background:#757575}.ticket-detail-settings .assign-issue-button.button-set,.ticket-detail-settings .assign-issue-button.text-button.button-set:hover,.ticket-detail-settings .button-delete.button-set,.ticket-detail-settings .button-delete.text-button.button-set:hover,.ticket-detail-settings .item-block.button-set,.ticket-detail-settings .item-block.text-button.button-set:hover,.ticket-detail-settings .item-unblock.button-set,.ticket-detail-settings .item-unblock.text-button.button-set:hover,.ticket-detail-settings .promote-button.button-set,.ticket-detail-settings .promote-button.text-button.button-set:hover,.ticket-detail-settings label.button-set,.ticket-detail-settings label.text-button.button-set:hover{background:#9dce0a;border-color:#9dce0a}.ticket-detail-settings .assign-issue-button:hover{background:#9dce0a}.ticket-detail-settings .assign-issue-button.button-set:hover,.ticket-detail-settings .item-unblock{background:#ff0062}.ticket-detail-settings .assign-issue-button.is-active{display:inline-block}.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock{display:none}.ticket-detail-settings .item-block.is-active,.ticket-detail-settings .item-unblock.is-active{display:inline-block}.ticket-detail-settings .item-unblock:hover{background:#ff2400}.ticket-detail-settings .button-delete{background:#ff0062}.ticket-detail-settings .button-delete:hover{background:#ff2400}.ticket-detail-settings svg{fill:#fff;height:100%;stroke:#fff}.ticket-detail-settings .icon-private{margin:0}.ticket-detail-settings a{display:block}.epic-header-container{display:-ms-flexbox;display:flex}.epic-header-container .color-selector{margin-right:.5rem}.epic-header-container tg-detail-header{-ms-flex:1;flex:1;width:100%}.introjs-overlay{background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(193,193,193,.2) 100%);background-color:#c1c1c1}.introjs-helperLayer{border:1px solid rgba(33,33,33,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(33,33,33,.2)}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-bullets ul li a.active{background:#212121}.introjs-button{background-color:#000;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#212121;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .single-project-intro{display:-ms-flexbox;display:flex;margin-bottom:2rem}.single-project .project-logo{margin-right:1rem;width:6rem}.single-project .like-button,tg-filter .filters-advanced .filter-mode.include{margin-right:.75rem}.single-project .project-logo img{width:100%}.single-project .single-project-title-wrapper{-ms-flex:1;flex:1}.single-project .intro-options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem}.single-project .intro-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.single-project .intro-title .icon-private{fill:#757575;height:24px;margin-left:.25rem;margin-top:1rem;width:24px}.single-project h1{color:#000;display:inline-block;line-height:1.2;margin-bottom:0;vertical-align:middle}.single-project .private{width:1.1rem;height:1.1rem}.single-project .track-buttons-container{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track{font-size:.9rem;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#000}.single-project .track-container .list-itemtype-track-likers.active .icon,.single-project .track-container .list-itemtype-track-watchers.active .icon{fill:currentcolor}.single-project .track-container .icon{fill:#757575}.single-project .description{font-size:1rem;margin:0}.single-project .project-data{display:-ms-flexbox;display:flex}.single-project .title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-ms-flex:1;flex:1;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .looking-for-people img{width:100%}.single-project .looking-for-people h3{font-size:.9rem}.single-project .looking-for-people .is-empty{margin-bottom:.5rem}.single-project .looking-for-people p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.single-project .looking-for-people .contact-team{margin-bottom:1rem}.single-project .involved-data{-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-team{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-team li{-ms-flex-preferred-size:24%;flex-basis:24%;margin-right:.14rem;position:relative}.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-team a{display:block}.single-project .involved-team img{border-radius:.2rem;width:100%}.single-project .involved-team .icon-badge{width:1.2rem;height:1.2rem;background:rgba(0,0,0,.5);bottom:5%;fill:#212121;padding:.1rem;position:absolute;right:5%;stroke:#212121}.issues-options{-ms-flex-align:center;align-items:center;background-color:#c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table{display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#a6a6a6;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .row.is-blocked{background:#ff66a1}.issues-table .row.is-blocked .blocked-text{color:#ff2400;margin-right:.5rem}.issues-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575}.issues-table .title:hover{background:0 0}.issues-table .title .votes{color:#757575}.issues-table .table-main{font-size:.9rem;border-bottom:1px solid #b7b7b7}.issues-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-ms-flex-preferred-size:85px;flex-basis:85px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:85px}.issues-table .votes{color:#757575;-ms-flex-preferred-size:75px;flex-basis:75px;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes:hover{color:#212121;transition:all .2s linear}.issues-table .votes:hover svg{fill:#212121;transition:all .2s linear}.issues-table .votes.inactive{color:#757575}.issues-table .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.issues-table .icon-arrow-down,.issues-table .icon-arrow-up{width:.7rem;height:.7rem;fill:#757575;margin-left:.25rem;vertical-align:middle}.issues-table .is-voted{color:#212121;transition:all .2s linear}.issues-table .is-voted svg{fill:#212121;transition:all .2s linear}.issues-table .is-voted:hover{color:#ff0062}.issues-table .is-voted:hover svg{fill:#ff0062;transform:rotate(180deg)}.issues-table .pop-status:after,.table-team .popover:after{transform:rotate(45deg);content:''}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .issue-field,.issues-table .modified-field{-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field .icon,.issues-table .issue-field .icon,.issues-table .modified-field .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem;vertical-align:middle}.issues-table .assigned-field{-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{width:.75rem;height:.75rem;opacity:0;position:absolute;right:0;top:.75rem;transition:opacity .3s linear}.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#212121;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99;text-align:"center"}.kanban-table-body .taskboard-column .kanban-column-intro,.search-result-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.issues-table .pop-status a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#212121;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1280px){.issues-table .level-field,.issues-table .modified-field{display:none}}.issues-table .issue-status{display:inline-block}.kanban-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table.zoom-0 .task-colum-name,.kanban-table.zoom-0 .taskboard-column{max-width:148px}.kanban-table.zoom-0 .task-colum-name span{padding-right:1rem}.kanban-table .vfold tg-card{display:none}.kanban-table .vfold.task-colum-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold.task-colum-name .option:not(.hunfold),.kanban-table .vfold.task-colum-name .title,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.taskboard-column{-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;min-height:2.4rem;position:relative}.kanban-table-header .kanban-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute;width:100%}.kanban-table-header .options{display:-ms-flexbox;display:flex}.kanban-table-header .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:296px;padding:.5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;width:100%}.kanban-table-header .task-colum-name .title .counter{font-size:.75rem;line-height:1.6;margin:0 .5rem}.kanban-table-header .task-colum-name .title .name{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.kanban-table-header .task-colum-name .option{margin-right:.3rem}.kanban-table-header .task-colum-name .icon{fill:#757575;height:1rem;transition:color .2s linear;width:1rem}.kanban-table-header .task-colum-name .icon:hover{fill:#000}.kanban-table-body{font-size:1rem;display:-ms-flexbox;display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-body .taskboard-column{-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:296px;overflow-y:auto;widows:296px;width:296px}.kanban-table-body .taskboard-column:last-child{margin-right:0}.kanban-table-body .taskboard-column .kanban-column-intro{font-size:.9rem;color:#757575;margin:1rem 2rem}.kanban-table-body .taskboard-column .kanban-column-intro.active{color:#212121}.kanban-table-body .taskboard-column .kanban-wip-limit{background:#ff2400;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-body .kanban-task-selected.card:not(.gu-transit-multi){box-shadow:0 0 0 1px #212121,2px 2px 4px #a8a8a8}.kanban-table-inner{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.card-transit-multi{background:#bcbcbc;border:1px dashed #adadad;display:none;opacity:1;padding:1rem}.search-filter,.search-result-table,.table-team .hero .row{border-top:1px solid #c1c1c1}.card-transit-multi .fake-img,.card-transit-multi .fake-text{background:#adadad}.card-transit-multi .fake-us{display:-ms-flexbox;display:flex;margin-bottom:1rem}.card-transit-multi .fake-us:last-child{margin-bottom:0}.card-transit-multi .column{padding-left:.5rem;width:100%}.card-transit-multi .fake-img{-ms-flex-preferred-size:48px;flex-basis:48px;-ms-flex-negative:0;flex-shrink:0;height:48px;width:48px}.card-transit-multi .fake-text{height:1rem;margin-bottom:1rem;width:80%}.card-transit-multi .fake-text:last-child{margin-bottom:0;width:40%}.card.gu-transit-multi .card-transit-multi{display:block}.card.gu-transit-multi .card-inner{display:none}.search-filter{display:-ms-flexbox;display:flex;margin-bottom:0;z-index:9}.search-filter a{background:#fff;color:#757575;display:inline-block;margin-right:1rem;padding:1rem 1.25rem}.search-filter .name,.search-filter a:hover .name{padding-left:5px}.search-filter a:hover{transition:color .3s linear}.search-filter a:hover .icon{fill:currentColor}.search-filter a.active{border-left:1px solid #c1c1c1;border-right:1px solid #c1c1c1;color:#212121;position:relative;top:1px}.search-filter a.active .icon{fill:#212121}.search-filter .icon{fill:currentColor;margin-right:.4rem}.search-in input{background:#212121;color:#fff}.search-in input::-webkit-input-placeholder{color:#757575}.search-in input::-moz-placeholder{color:#757575}.search-in input:-moz-placeholder{color:#757575}.search-in input:-ms-input-placeholder{color:#757575}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{fill:#757575}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row .ref{margin-right:.5rem}.search-result-table .row .user-stories{overflow:hidden;padding-right:1rem;width:100%}.search-result-table .row .points,.search-result-table .row .sprint,.search-result-table .row .status{-ms-flex:0 0 150px;flex:0 0 150px;-ms-flex-positive:0;flex-grow:0;max-width:150px;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;padding:0 1rem}.search-result-table .row-selected{background:#999;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon{font-size:1rem;color:#757575}.search-result-table .user-story-name .icon:hover{color:#212121;transition:color .3s linear}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #c1c1c1}.search-result-table .points,.search-result-table .sprint,.search-result-table .status{position:relative}.search-result-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters li{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575;text-transform:uppercase}.table-team .attribute,.table-team .attribute .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.team-filters li:last-child{border-bottom:0}.team-filters li .icon{fill:#212121;opacity:0;transition:opacity .3s linear}.team-filters a{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.team-filters a.active,.team-filters a:hover{color:#000;transition:color .3s linear}.team-filters a.active .icon,.team-filters a:hover .icon{fill:currentColor;opacity:1}.team-filters .active{opacity:1;transition:opacity .3s linear}.table-team .row{padding:.5rem}.table-team .username{-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:6;flex:6;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{width:1.75rem;height:1.75rem;fill:#757575}.table-team .attribute .points{font-size:1.6rem;color:#212121}.table-team .attribute .top{fill:#212121;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{font-size:.9rem;color:#ff0062}.table-team .leave-project .icon{width:.8rem;height:.8rem;fill:currentColor;margin-right:.2rem}.table-team .leave-project:hover{color:#ff2400}.table-team .leave-project:hover .icon{color:currentColor;transition:fill .3s linear}.table-team .team-header{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:0}.table-team .hero{width:100%}.table-team .hero .row{border-bottom:1px solid #c1c1c1;margin:1rem 0;padding:1.5rem 1rem}.table-team .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.table-team .avatar img{-ms-flex-preferred-size:66px;flex-basis:66px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:66px}.table-team .avatar .avatar-data{margin-left:1rem}.table-team .avatar .avatar-data span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.table-team .popover{font-size:.9rem;background:#212121;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99;text-align:"center"}.table-team .popover a{font-size:.9rem;border-bottom:1px solid #212121;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#212121;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#212121;bottom:-5px;height:15px;left:50%;position:absolute;width:15px}.table-team .icon-badge{fill:#212121;position:relative;stroke:#212121;top:.15rem}.policy-table .policy-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #757575}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#000;transition:background .3s linear}.policy-table label{background:#757575;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#212121;cursor:pointer;transition:background .3s linear}.project-settings-table .project-settings-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.project-settings-table .project-settings-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #757575}.project-settings-table .project-settings-table-homepage,.project-settings-table .project-settings-table-project{padding:1rem}.project-settings-table .project-settings-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-settings-table .project-settings-table-homepage{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile{max-width:780px}.user-profile form{display:-ms-flexbox;display:flex}.user-profile fieldset{margin-bottom:1rem}.user-profile label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.user-profile .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.user-profile .project-details-image .image,.user-profile .submit-button{width:100%}.user-profile .change-image{display:block}.user-profile .image-container{position:relative;margin-bottom:.5rem}.user-profile .loading-overlay{display:none}.user-profile .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;border:0;transform-origin:center center}.filters-cats ul,.wiki-nav .wiki-link-container.wiki-all-links{border-top:1px solid #757575}.user-profile .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.user-profile .use-default-image:hover{color:#ff2400}.user-profile .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.user-profile form{display:block}}.user-profile .actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:.5rem}.user-profile .delete-account,.user-profile .download-profile{font-size:.9rem;display:block;-ms-flex:1;flex:1;margin-top:.5rem}.user-profile .delete-account{text-align:right}.wiki-nav{padding:0;width:240px}.wiki-nav .title{font-size:1.6rem;padding:2rem 1rem 0 2rem}.wiki-nav .add-button{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:1rem 1rem 1rem 2rem;text-transform:uppercase;vertical-align:middle}.wiki-nav .add-button:hover svg{background:#212121}.wiki-nav .add-button svg{width:1.25rem;height:1.25rem;background:#757575;border-radius:2px;fill:#fff;margin-right:.5rem;padding:.25rem;transition:background .2s linear}.wiki-nav .wiki-link-container{margin:0}.wiki-nav input[type=text]{background:#c1c1c1;color:#212121;margin:1rem 1rem 1rem 2rem;width:80%}.wiki-nav input[type=text]::-webkit-input-placeholder{color:#757575}.wiki-nav input[type=text]::-moz-placeholder{color:#757575}.wiki-nav input[type=text]:-moz-placeholder{color:#757575}.wiki-nav input[type=text]:-ms-input-placeholder{color:#757575}.wiki-nav .loading{padding:1rem;text-align:center}.wiki-link{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-left:2rem;padding-right:1rem;position:relative}.wiki-link:hover .remove-wiki-page{cursor:pointer;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link:hover .dragger{cursor:move;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link.gu-mirror{border-bottom:0}.wiki-link.fixed-link{font-size:1.2rem;text-transform:uppercase}.wiki-link.is-sortable{cursor:move}.wiki-link .link-title{cursor:pointer;display:block;-ms-flex-positive:1;flex-grow:1;padding:1rem 0}.wiki-link .dragger{fill:#757575;left:-1rem;opacity:0;position:absolute;top:1rem}.wiki-link .dragger svg{width:.7rem;height:.7rem}.wiki-link .remove-wiki-page{opacity:0}.wiki-link .remove-wiki-page:hover .icon{fill:#ff2400}.wiki-pages-table{display:-ms-flexbox;display:flex}.wiki-pages-table .row{padding:.5rem}.wiki-pages-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.wiki-pages-table .table-main{font-size:.9rem}.wiki-pages-table .title-field{-ms-flex-preferred-size:180px;flex-basis:180px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.wiki-pages-table .created-field,.wiki-pages-table .modified-field{-ms-flex-preferred-size:10vw;flex-basis:10vw;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.wiki-pages-table .editions-field{-ms-flex-preferred-size:80px;flex-basis:80px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;text-align:center}.wiki-pages-table .creator-field,.wiki-pages-table .last-modifier-field{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:200px;flex-basis:200px}.wiki-pages-table .creator-field .user-avatar,.wiki-pages-table .last-modifier-field .user-avatar{-ms-flex-positive:0;flex-grow:0}.wiki-pages-table .creator-field .user-avatar img,.wiki-pages-table .last-modifier-field .user-avatar img{height:2rem}.wiki-pages-table .creator-field .user-full-name,.wiki-pages-table .last-modifier-field .user-full-name{-ms-flex-positive:1;flex-grow:1;padding:.5rem}.wiki-summary{-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.wiki-summary.summary{background:#f5f5f5;color:#757575}.wiki-summary div{display:-ms-flexbox;display:flex;margin-right:1.25rem}.wiki-summary .wiki-user-modification{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary .avatar{margin-right:.5rem;width:2.25rem}.wiki-summary img{height:100%;width:100%}.wiki-summary .username{font-size:1.2rem;white-space:nowrap}.wiki-summary .remove{fill:#757575;margin-left:auto;transition:fill .1s linear}.wiki-summary .remove:hover{cursor:pointer;fill:#ff0062}.wiki-summary .remove svg{width:1.5rem;height:1.5rem}.attachment-gallery{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.attachment-gallery .single-attachment{margin-bottom:.5rem;margin-right:.5rem;max-width:200px}.attachment-gallery .single-attachment:hover .icon-delete{opacity:1}.attachment-gallery .single-attachment .attachment-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.attachment-gallery .attachment-image{display:inline-block}.attachment-gallery img{height:150px;margin-bottom:.2rem;width:200px}.attachment-gallery img:hover{filter:saturate(150%) hue-rotate(60deg);transition:all .3s cubic-bezier(.01,.7,1,1)}.attachment-gallery.deprecated img{opacity:.5}.attachment-gallery.deprecated .attachment-name{color:#757575}.attachment-gallery .attachment-data{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.attachment-gallery .icon-delete{margin-left:auto;opacity:0;transition:opacity .2s ease-in;transition-delay:.1s}.attachment-gallery .icon-delete svg{fill:#ff0062}.attachment-gallery .icon-delete:hover svg{color:#ff2400}.attachment-list .attachment-comments span,.attachment-list .editable-attachment-comment span,.attachment-list .editable-attachment-deprecated span,.attachment-list .single-attachment.deprecated,.attachment-list .single-attachment.deprecated .attachment-name a{color:#757575}.attachment-gallery .loading-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:150px;-ms-flex-pack:center;justify-content:center;margin:0 .5rem .5rem 0;width:200px}.attachment-gallery .loading-spinner{margin:0 auto;max-height:3rem;max-width:3rem}.attachment-list .single-attachment{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;position:relative}.attachment-list .single-attachment:hover .settings{opacity:1;transition:opacity .2s ease-in}.attachment-list .attachment-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding-right:1rem}.attachment-list .attachment-comments,.attachment-list .editable-attachment-comment{-ms-flex:2;flex:2;-ms-flex-preferred-size:50%;flex-basis:50%;margin-right:.5rem}.attachment-list .attachment-size{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.attachment-list .attachment-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:10%;flex-basis:10%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:distribute;justify-content:space-around;margin-left:auto}.attachment-list .attachment-settings .settings{opacity:0}.attachments .gu-mirror,.card-owner:hover .card-owner-actions{opacity:1}.attachment-list .attachment-settings .editable-settings{display:block;opacity:1}.attachment-list .attachment-settings svg{fill:#757575;pointer-events:none}.attachment-list .attachment-settings .icon-edit:hover,.attachment-list .attachment-settings .icon-save:hover{fill:#000}.attachment-list .attachment-settings .icon-close:hover,.attachment-list .attachment-settings .icon-trash:hover{fill:#ff2400}.attachment-list .attachment-settings .icon-drag{cursor:move}.attachment-list .editable-attachment-deprecated{display:-ms-flexbox;display:flex;padding-left:1rem}.attachment-list .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.attachment-list .editable-attachment-deprecated input:checked+span{color:#212121}.attachment-list .percentage{background:rgba(0,0,0,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.attachments{margin-bottom:4rem}.attachments .gu-transit{background:#c1c1c1;height:40px}.attachments .gu-transit *{display:none}.attachments .gu-mirror form{background:#999;box-shadow:1px 1px 10px rgba(0,0,0,.1);transition:background .2s ease-in}.attachments-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.attachments-header .attachments-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1rem;color:#212121;line-height:36px;padding:0 1rem}.attachments-header .options{display:-ms-flexbox;display:flex}.attachments-header label{cursor:pointer;margin-left:.25rem}.attachments-header label.add-attachment-button{background:#757575;border:0;display:inline-block;padding:.5rem;transition:background .25s}.attachments-header label.add-attachment-button:hover{background:#212121}.attachments-header label svg{fill:#fff;height:1.2rem;margin-bottom:-.2rem;width:1.2rem}.attachments-header button{background:0 0;margin-right:.2rem}.attachments-header button.is-active svg,.attachments-header button:hover svg{fill:#212121}.attachments-header button svg{fill:#757575;height:1.6rem;width:1.6rem}.attachments-header .size-info{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;padding-left:1rem}.attachments-empty,.single-attachment .attachment-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.attachments-header input{display:none}.attachments-empty{font-size:1.2rem;border:3px dashed #c1c1c1;color:#757575;margin-top:.5rem;padding:1rem;text-align:center}.single-attachment{font-size:.9rem;background:rgba(255,255,255,.9)}.single-attachment .attachment-name{padding-right:1rem}.single-attachment .attachment-name svg{fill:#757575;height:.9rem;margin-right:.25rem;width:.9rem}.single-attachment .attachment-size{color:#757575}.more-attachments{font-size:.9rem;border-bottom:1px solid #757575;display:block;padding:1rem 0 1rem 1rem}.more-attachments .more-attachments-num{color:#000;margin-left:.5rem}.more-attachments:hover{background:#999;transition:background .2s ease-in}.attachment-preview .attachment-preview-container svg{width:3rem;height:3rem;fill:#757575}.attachment-preview .attachment-preview-container svg:hover{fill:#212121;transition:fill .3s linear}.attachment-preview .previous{left:3rem;position:absolute;top:calc(50% - 3rem)}.attachment-preview .next{position:absolute;right:3rem;top:calc(50% - 3rem)}.attachment-preview img{max-height:80vh;max-width:80vw}.assignable-member-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:.25rem 0}.assigned-members-option .assignable-member-single{background:#fff;border-bottom:1px solid #c1c1c1;cursor:pointer}.assignable-member-single:hover{background:rgba(33,33,33,.05)}.assignable-member-single .assignable-member-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.5rem;max-height:3rem;max-width:3rem}.assignable-member-single .assignable-member-name{-ms-flex:1;flex:1}.assigned-to-container{width:600px}.assignable-member-list{margin-top:1rem}.assignable-member-list .assigned-member{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.05);border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.assignable-member-list .unassign-epic{cursor:pointer;margin-right:1rem}.assignable-member-list .icon{fill:#ff0062;transition:fill .2s}.assignable-member-list .icon:hover{cursor:pointer;fill:#ff2400}.belong-to-epic-pill-wrapper{display:inline-block;position:relative}.belong-to-epic-pill-wrapper:hover .belong-to-epic-pill-data{display:block}.belong-to-epics-list{margin-bottom:.5rem}.belong-to-epics-list svg{position:relative;top:.1rem}.belong-to-epics-list.unique,.belong-to-epics-list.unique li{display:inline-block}.belong-to-epics-list.unique li svg{top:.2rem}.belong-to-epic-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;padding-top:.25rem}.belong-to-epic-text-wrapper .remove-epic-relationship{display:inline-block;line-height:.5rem;margin-left:.5rem}.belong-to-epic-text-wrapper:hover .remove-epic-relationship svg{visibility:visible}.belong-to-epic-label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;background:#212121;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.belong-to-epic-pill{background-color:#f5f5f5;border-radius:50%;display:inline-block;height:.7rem;margin:0 .1rem;position:relative;width:.7rem}.range-slider{-webkit-appearance:none;display:block;margin:7px 0;width:200px}.range-slider:focus{outline:0}.range-slider:focus::-webkit-slider-runnable-track{background:#050505}.range-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(33,33,33,.3)}.range-slider:focus::-moz-range-thumb{box-shadow:0 0 0 4px rgba(33,33,33,.3)}.range-slider:focus::-ms-fill-lower{background:#c1c1c1}.range-slider:focus::-ms-fill-upper{background:#c6c6c6}.range-slider::-webkit-slider-runnable-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#c1c1c1;border:0 solid transparent;border-radius:1px}.range-slider::-webkit-slider-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#212121;cursor:pointer;box-shadow:0 0 0 2px rgba(33,33,33,.3);transition:box-shadow .2s;-webkit-appearance:none;margin-top:-5.5px}.range-slider::-moz-range-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#c1c1c1;border:0 solid transparent;border-radius:1px}.range-slider::-moz-range-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#212121;cursor:pointer;box-shadow:0 0 0 2px rgba(33,33,33,.3);transition:box-shadow .2s}.range-slider::-ms-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:0 0;border-color:transparent;border-width:14px 0;color:transparent}.range-slider::-ms-fill-lower{background:#bcbcbc;border:0 solid transparent;border-radius:2px}.range-slider::-ms-fill-upper{background:#c1c1c1;border:0 solid transparent;border-radius:2px}.range-slider::-ms-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#212121;cursor:pointer;box-shadow:0 0 0 2px rgba(33,33,33,.3);transition:box-shadow .2s}.card{box-shadow:2px 2px 4px #a8a8a8;cursor:move;display:block;margin:0 .6rem .6rem;outline:0;overflow:hidden;transition:box-shadow .2s ease-in}.card .loading-extra.loading{padding:.2rem;text-align:center}.card:hover{box-shadow:3px 3px 6px #a8a8a8}.card-inner{background:#fff;border-radius:.25rem}.card-inner.zoom-0 .card-title,.card-inner.zoom-1 .card-title{-ms-flex:1;flex:1;margin:0;padding:.25rem}.card-inner.zoom-1 .card-owner-info{-ms-flex-align:start;align-items:flex-start}.card-inner.card-blocked{background:#ff0062}.card-inner.card-blocked .card-owner-actions,.card-inner.card-blocked .card-unfold:hover{background:rgba(255,0,98,.9)}.card-inner.card-blocked .card-estimation,.card-inner.card-blocked .card-owner-name,.card-inner.card-blocked .card-title a,.card-inner.card-blocked .statistic{color:#fff}.card-inner.card-blocked .card-task a.blocked-task{color:#ff2400}.card-inner.card-blocked .card-owner-actions a:hover,.card-inner.card-blocked .statistic.active,.card-inner.card-blocked.zoom-0 .card-title,.card-inner.card-blocked.zoom-1 .card-title{color:#fff}.card-inner.card-blocked svg{fill:#fff}.card-owner-actions:hover svg,.card-statistics .statistic.active svg{fill:currentColor}.card-tags{display:-ms-flexbox;display:flex}.card-tags .card-tag{display:block;-ms-flex:1;flex:1;height:.5rem}.card-owner{position:relative}.card-owner .card-owner-info{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.card-owner .card-owner-info.multiple .card-owner-avatar img{margin-right:.45rem}.card-owner .card-owner-avatar{line-height:0;position:relative}.card-owner .is-iocaine{filter:hue-rotate(265deg) saturate(3)}.card-owner img{-ms-flex-negative:0;flex-shrink:0;height:2.5rem;margin-right:.5rem;width:2.5rem}.card-owner .card-owner-name{color:#757575}.card-owner-actions{background:rgba(255,255,255,.9);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;left:0;opacity:0;position:absolute;top:0;transition:all .2s;width:100%}.card-owner-actions:hover{color:#212121}.card-owner-actions .card-actions{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:0 0 0 .5rem}.card-owner-actions .card-delete:hover{color:#ff0062}.card-owner-actions .icon{width:1.2rem;height:1.2rem;display:inline-block;margin-right:.25rem;padding:0}.card-owner-actions a{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;padding:.6rem .5rem}.card-title{font-size:1rem;line-height:1.25;margin-bottom:.25rem;padding:1rem 1rem 0}.card-title span{padding-right:.25rem}.card-data{color:#757575;display:-ms-flexbox;display:flex;font-size:14px;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem .5rem}.card-data .card-status-tag{font-size:.75rem;height:.1rem;line-height:.1rem;padding:0 .5em 0 0}.card-data .card-estimation.not-estimated{font-size:.8125rem}.card-statistics{font-size:.9rem;color:#b5b5b5;display:-ms-flexbox;display:flex;margin-left:auto}.card-statistics .statistic{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;margin-left:.5rem}.card-statistics .statistic.active{color:#212121}.card-statistics .statistic.card-iocaine{cursor:help}.card-statistics .statistic.card-votes{margin-left:.2rem}.card-statistics .statistic.card-due-date{margin-left:.1rem}.card-statistics .icon{width:.75rem;height:.75rem;fill:#b5b5b5;margin-right:.2rem}.card-statistics .icon-iocaine{fill:#9c27b0}.card-completion{margin:0 1rem .5rem;position:relative}.card-completion:hover .card-tooltip{display:block}.card-completion .card-completion-bar{background:#c1c1c1;height:.4rem;width:100%}.card-completion .card-completion-percentage{background:#212121;cursor:pointer;height:.4rem;left:0;position:absolute;top:0}.card-completion .card-tooltip{background:#212121;border-radius:5px;color:#fff;display:none;font-size:14px;left:calc(25% - 50px);padding:.25rem 1rem;position:absolute;text-align:center;top:-2.25rem;width:100px}.card-completion .card-tooltip::after{background:#000;content:'';height:10px;left:50%;position:absolute;top:70%;transform:rotate(45deg);width:10px}.color-selector .tag-color.empty-color:after,.color-selector .tag-color.empty-color:before{content:"";top:0;height:48px;width:2px;background:#ff8282;position:absolute}.card-unfold{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0;outline:0;padding:.25rem}.card-unfold:hover{background:linear-gradient(to bottom,#fff,#fcfcfc)}.card-unfold svg{width:2rem;height:.3rem;fill:#c1c1c1}.card-tasks{border-top:1px solid #c1c1c1;margin:.5rem 0 0;padding:0}.card-task{font-size:.75rem;border-bottom:1px solid #c1c1c1}.card-task a{color:#757575;display:block;overflow:hidden;padding:.5rem .75rem;text-overflow:ellipsis;transition:color .2s;white-space:nowrap}.card-task a.blocked-task{color:#ff0062}.card-task a.closed-task{color:#757575;text-decoration:line-through}.card-task a:hover{color:#000}.detail-header-container.blocked,.detail-header-container.blocked .detail-number,.detail-header-container.blocked .detail-subject,.detail-header-container.blocked a{color:#fff}.card-slideshow{position:relative}.card-slideshow:hover .slideshow-left,.card-slideshow:hover .slideshow-right{background:rgba(255,255,255,.2);padding:.25rem;transition:background .2s}.card-slideshow .slideshow-icon{cursor:pointer;position:absolute;top:35%}.card-slideshow .slideshow-icon:hover{background:rgba(33,33,33,.5);transition:background .2s}.card-slideshow svg{width:1.2rem;height:1.2rem;transition:fill .2s}.card-slideshow .slideshow-left,.card-slideshow .slideshow-right{background:0 0;padding:.25rem}.card-slideshow .slideshow-left{left:0}.card-slideshow .slideshow-right{right:0}.card-slideshow img{width:100%}.card-slideshow-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:120px;-ms-flex-pack:center;justify-content:center;overflow:hidden}.card-slideshow-wrapper .loading-spinner{min-height:3rem;min-width:3rem}.color-selector{position:relative}.color-selector .tag-color{cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;border:1px solid #757575;border-radius:0;margin:0;transition:background .3s ease-out}.color-selector .tag-color:nth-child(7n){margin-right:0}.color-selector .tag-color.disabled{cursor:auto}.color-selector .tag-color.empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.color-selector .tag-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector .tag-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.color-selector-dropdown{background:#212121;left:0;padding:1rem;position:absolute;top:2.25rem;width:332px;z-index:99}.color-selector-dropdown-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;margin-bottom:0}.color-selector-dropdown-list .color-selector-option{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0}.color-selector-dropdown-list .color-selector-option:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0;background:#f5f5f5;border:1px solid #c1c1c1;position:relative}.color-selector-dropdown-list .empty-color:after,.color-selector-dropdown-list .empty-color:before{width:2px;height:48px;background:#ff8282;position:absolute;top:0;content:""}.color-selector-dropdown-list .empty-color:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector-dropdown-list .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.custom-color-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.custom-color-selector .custom-color-input{margin:0;width:100%}.custom-color-selector .display-custom-color-wrapper{background:#f5f5f5;margin-right:.5rem}.custom-color-selector .display-custom-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;-ms-flex-negative:0;flex-shrink:0;margin:0}.custom-color-selector .display-custom-color:nth-child(7n){margin-right:0}.custom-color-selector .display-custom-color.empty-color{background:#f5f5f5;border:1px solid #c1c1c1;position:relative;cursor:default}.custom-color-selector .display-custom-color.empty-color:after{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(-45deg);position:absolute;top:0;left:0;transform-origin:top}.custom-color-selector .display-custom-color.empty-color:before{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(45deg);position:absolute;top:0;right:0;transform-origin:top}.detail-header-container{background:#f5f5f5;-ms-flex:1;flex:1;padding:1rem;position:relative}.detail-header-container.blocked,.detail-title-wrapper.blocked{background:#ff2400;transition:all .2s linear}.detail-header-container:hover .detail-edit{opacity:1}.detail-header-container.blocked svg{fill:#fff}.detail-header-container .belong-to-epics-wrapper,.detail-header-container .block-desc-container,.detail-header-container .issue-external-reference,.detail-header-container .item-generated-us,.detail-header-container .item-origin-issue,.detail-header-container .task-belongs-to{font-size:.9rem;margin-top:.5rem}.detail-header-container .relate-to-epic-button{color:#757575;cursor:pointer;display:inline-block}.detail-header-container .relate-to-epic-button:hover{color:#212121}.detail-header-container .relate-to-epic-button .icon-epics{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.detail-header-container .relate-to-epic-button .relate-to-epic-text{font-size:.9rem}.detail-title-wrapper,.edit-title-wrapper{font-size:1.6rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.detail-header-container .issue-external-reference a,.detail-header-container .item-generated-us a,.detail-header-container .item-origin-issue a,.detail-header-container .task-belongs-to a{cursor:pointer;padding:0 .2rem}.detail-header-container .issue-external-reference .item-ref,.detail-header-container .item-generated-us .item-ref,.detail-header-container .item-origin-issue .item-ref,.detail-header-container .task-belongs-to .item-ref{padding:0 .2rem}.detail-title-wrapper{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;max-width:95%;position:relative;transition:all .2s linear}.detail-title-wrapper .detail-title-text{line-height:normal;margin:0}.detail-title-wrapper .detail-number{color:#757575;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.detail-title-wrapper .detail-subject{color:#757575;-ms-flex-positive:1;flex-grow:1}.detail-title-wrapper .detail-edit{cursor:pointer;margin-left:.75rem;opacity:0;transition:opacity .2s}.detail-title-wrapper .detail-edit svg,.detail-title-wrapper .due-date-icon svg{width:1.3rem;height:1.3rem}.detail-title-wrapper.readonly .due-date-icon{margin-left:2.7rem}.edit-title-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-input{background:#fff;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-button{background:0 0;display:inline;transition:fill .2s}.due-date-icon,.issue-nav a{display:inline-block}.edit-title-wrapper .edit-title-button:hover{fill:#000}.edit-title-wrapper .save-title-button{margin-left:1rem}.block-desc-container .block-description-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-right:.5rem}.issue-nav{position:absolute;right:1rem;top:1rem}.issue-nav svg{width:1.2rem;height:1.2rem;fill:currentColor}.due-date-button,[disabled].due-date-button{background:#757575;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.due-date-button.closed,.due-date-button.text-button.closed:hover,[disabled].due-date-button.closed,[disabled].due-date-button.text-button.closed:hover{background:#B8B8B8;border-color:#B8B8B8}.due-date-button.due-set,.due-date-button.text-button.due-set:hover,[disabled].due-date-button.due-set,[disabled].due-date-button.text-button.due-set:hover{background:#9dce0a;border-color:#9dce0a}.due-date-button.due-soon,.due-date-button.text-button.due-soon:hover,[disabled].due-date-button.due-soon,[disabled].due-date-button.text-button.due-soon:hover{background:#fcaf3e;border-color:#fcaf3e}.due-date-button.past-due,.due-date-button.text-button.past-due:hover,[disabled].due-date-button.past-due,[disabled].due-date-button.text-button.past-due:hover{background:#ff0062;border-color:#ff0062}.due-date-button:hover,[disabled].due-date-button:hover{background:#757575}.due-date-button.editable,[disabled].due-date-button.editable{cursor:pointer}.due-date-button.text-button,[disabled].due-date-button.text-button{color:#fff;margin:0;padding:.5rem}.due-date-button.text-button.not-set:hover,[disabled].due-date-button.text-button.not-set:hover{color:#fff}.due-date-button.text-button.not-set,[disabled].due-date-button.text-button.not-set{color:#757575}.due-date-icon{margin:0 .25rem;position:relative}.due-date-icon svg{fill:#757575;transition:fill .2s ease-in}.due-date-icon.closed svg{fill:#B8B8B8}.due-date-icon.due-set svg{fill:#9dce0a}.due-date-icon.due-soon svg{fill:#fcaf3e}.due-date-icon.past-due svg{fill:#ff0062}.backlog-table-body .user-story-name .due-date-icon,.related-tasks .task-name .due-date-icon{top:.1rem}.issues-table .subject .due-date-icon{top:.25rem}.card-statistics .due-date-icon{margin:.1rem 0 0}.card-statistics .due-date-icon svg{height:.9rem;width:.9rem}.due-date-button-wrapper{display:-ms-flexbox;display:flex;position:relative}.date-picker-container{overflow:visible}.date-picker-popover{background:#fff;border:1px solid #757575;left:0;overflow:visible;position:absolute;top:0;width:auto}.date-picker-popover .pika-single.is-bound{border:0;box-shadow:none}.date-picker-popover-footer{padding:.2rem .5rem;text-align:right}.date-picker-popover-footer svg{fill:#757575;height:1rem;width:1rem}.date-picker-popover-footer a:hover svg{fill:#ff2400}tg-filter{background-color:#f5f5f5;display:block;left:0;max-height:100%;min-height:100%;overflow-y:scroll;padding:1rem 0;position:absolute;top:0;transform:translateX(-260px);transition-duration:.5s;width:260px;z-index:1}tg-filter .filters-applied{padding:0 1rem 1rem}tg-filter .filters-applied .single-filter.exclude{background:#fcc;text-decoration:line-through}tg-filter .filters-applied .single-filter:hover{color:currentColor;cursor:default;transition:none}.move-to-sprint-button:not(.disabled),.search-list .choice,.single-filter,tg-filter .filters-advanced .filter-mode{cursor:pointer}tg-filter .filters-advanced{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;font-size:10pt;font-weight:600;padding:0 1rem 1rem}.wysiwyg b,.wysiwyg dl dt,tg-wysiwyg .mention{font-weight:700}tg-filter .filters-advanced .collapsed.exclude{color:#ff0062}tg-filter .filters-advanced a .icon{margin-left:5px;vertical-align:bottom;width:.5rem}.single-filter .name img,.tag img{vertical-align:middle}tg-filter .filters-advanced .filters-advanced-form{padding:.75rem 0;text-align:center}tg-filter .filters-advanced .custom-radio{display:inline}tg-filter .filters-advanced .custom-radio input[type=radio]{display:none}tg-filter .filters-advanced .filter-mode.active .radio-mark-inner{opacity:1}tg-filter .filters-advanced .filter-mode.active.include{color:#000}tg-filter .filters-advanced .filter-mode.active.exclude{color:#ff0062}tg-filter .filters-advanced .radio-mark,tg-filter .filters-advanced .radio-mark-inner{border-radius:50%;display:inline-block}tg-filter .filters-advanced .radio-mark{background:#d6d5d5;height:22px;margin-right:3px;text-align:center;width:22px}tg-filter .filters-advanced .radio-mark-inner{height:14px;margin-top:4px;opacity:0;width:14px}tg-filter .filters-advanced .radio-mark-inner.include{background:#000}tg-filter .filters-advanced .radio-mark-inner.exclude{background:#ff0062}tg-filter form,tg-filter h1{padding:0 1rem}tg-filter input{background:#212121;color:#fff;padding-right:2rem}tg-filter input::-webkit-input-placeholder{color:#757575}tg-filter input::-moz-placeholder{color:#757575}tg-filter input:-moz-placeholder{color:#757575}tg-filter input:-ms-input-placeholder{color:#757575}tg-filter .search-action{position:absolute;right:.7rem;top:.7rem}tg-filter.open{box-shadow:1px 1px 5px rgba(0,0,0,.2);transform:translateX(0)}.filter-list{overflow-y:auto;padding:1rem}.filters-step-cat{margin-top:2rem}.filters-cats ul{margin-bottom:0}.filters-cats li{border-bottom:1px solid #757575;text-transform:uppercase}.filters-cats li.selected{border-bottom:0}.filters-cats li .filter-list{min-height:60px}.filters-cats .custom-filters .title{color:#000}.filters-cats .filters-cat-single{-ms-flex-align:center;align-items:center;color:#212121;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 1.5rem;transition:color .2s ease-in}.filters-cats .filters-cat-single.selected,.filters-cats .filters-cat-single:hover{background-color:#a8a8a8;color:#212121;transition:background-color .2s ease-in}.filters-cats .filters-cat-single.selected .icon,.filters-cats .filters-cat-single:hover .icon{opacity:1;transition:opacity .2s ease-in}.filters-cats .icon-arrow-down{fill:currentColor;float:right;height:.9rem;opacity:0;transition:opacity .2s ease-in;width:.9rem}.single-filter{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-align:center;align-items:center;background:#b4b4b4;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;opacity:.5;padding-right:.5rem;position:relative}.live-announcement-inner .title,.live-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.single-filter::after{clear:both;content:"";display:block}.single-filter.active,.single-filter.selected{color:#212121;opacity:1;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;border-color:transparent;border-style:solid;border-width:0 0 0 3px;display:block;width:100%}.profile-bar .not-full-name,.profile-bar h1,.wysiwyg p{word-wrap:break-word}.single-filter .number{background:#8e8e8e;position:absolute;right:0;top:0}.single-filter .remove-filter{cursor:pointer;display:block}.single-filter .remove-filter svg{fill:#757575;transition:fill .2s linear}.single-filter .remove-filter:hover svg{fill:#ff2400}.live-announcement{-ms-flex-line-pack:center;align-content:center;background:#107a8a;display:-ms-flexbox;display:flex;height:0;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.live-announcement .live-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.live-announcement.visible{height:146px;pointer-events:auto;transition-delay:0s;width:100%}.live-announcement.visible .live-announcement-inner{opacity:1;transition:opacity .5s .5s}.live-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.live-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;margin-right:1rem}.live-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.live-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.live-announcement-inner .warning,.live-announcement-inner .warning a{color:#0b525c}.live-announcement-inner .close{display:block;position:absolute;right:0;top:1rem}.live-announcement-inner .close svg{width:2rem;height:2rem;fill:#138ea1;pointer-events:none;transition:fill .2s}.live-announcement-inner .close svg:hover{fill:#0b525c}.lightbox-move-to-sprint .move-to-sprint-container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:550px;width:100%}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header{margin:0 auto;max-width:400px;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header ul{display:inline-block;margin:.5em auto 2.5em;width:auto}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header li{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header .check{margin-left:4em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls p{margin-bottom:2.5em;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .sprint-select{margin-top:.5em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .move-button{width:100%}.move-to-sprint-button{color:#fff}.move-to-sprint-button:not(.disabled):hover{color:#212121}.move-to-sprint-button.disabled:hover,.search-list .choice.selected .info{color:#fff}.move-to-sprint-button.disabled{opacity:.5}.search-list .show-closed{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;float:right;font-size:.9em}.add-tag-button .add-tag-text,.tag{font-size:.9rem}.search-list .show-closed svg{height:1em;margin-right:.25em;width:1em}.search-list ul{background:#f5f5f5;border:1px solid #757575;height:200px;margin:.25em 0 0;max-height:200px;overflow-y:auto}.search-list .choice{padding:.25em .5em}.search-list .choice.selected{background:#9dce0a;color:#fff}.search-list .choice[disabled]{color:#B8B8B8;cursor:not-allowed}.search-list .choice[disabled] .info{color:#B8B8B8}.search-list .choice ng-include{display:-ms-flexbox;display:flex;width:100%}.search-list .choice ng-include .title{-ms-flex-positive:1;flex-grow:1;text-align:left}.search-list .choice ng-include .info{color:#757575;text-align:right}.search-list .choice .title span{margin-right:.5em}.add-tag-input{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative;width:250px}.add-tag-input input{border-color:#757575;padding:6px;width:14rem}.add-tag-input .save{cursor:pointer;display:inline-block;fill:#212121;margin:.5rem 0 0 .5rem;transition:.2s linear}.add-tag-input .save:hover{fill:#000}.add-tag-input .tags-dropdown{font-size:.9rem;background:#fff;border:1px solid #757575;border-top:0;box-shadow:2px 2px 3px rgba(0,0,0,.2);left:0;max-height:20vh;min-height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:2.25rem;width:85%;z-index:99}.add-tag-input .tags-dropdown-option{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.tags-block,.terms-announcement{align-content:center;display:-ms-flexbox}.add-tag-input .tags-dropdown-color{height:1rem;width:1rem}.add-tag-input li.selected,.add-tag-input li:hover{background:#a1a1a1;cursor:pointer;transition:.2s;transition-delay:.1s}.tags-block{-ms-flex-line-pack:center;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.add-tag-button,.tag{display:inline-block}.add-tag-button{color:#757575;cursor:pointer}.add-tag-button:hover,.tag{color:#212121}.add-tag-button .icon-add{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-radius:0 5px 5px 0;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.terms-announcement-inner .title,.terms-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.tag .icon-close{width:.7rem;height:.7rem;cursor:pointer;fill:#ff0062;margin-left:.25rem}.tag .loading-spinner{height:1rem;width:1rem}.terms-announcement{-ms-flex-line-pack:center;background:#107a8a;display:flex;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.terms-announcement .terms-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.terms-announcement.visible{min-height:146px;pointer-events:auto;transition-delay:0s;width:100%}.terms-announcement.visible .terms-announcement-inner{opacity:1;transition:opacity .5s .5s}.terms-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.terms-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;height:auto;margin-right:1rem}.terms-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.terms-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.terms-announcement-inner .warning,.terms-announcement-inner .warning a{color:#0b525c}.tribe-linked.is-active .delete-link,.tribe-linked.is-active .gig-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.terms-announcement-inner .close{display:block;position:absolute;right:.5rem;top:1rem}.terms-announcement-inner .close svg{width:2rem;height:2rem;fill:#f5f5f5;pointer-events:none;transition:fill .2s}.terms-announcement-inner .close svg:hover{fill:#0b525c}.terms-announcement-inner a{color:#f5f5f5}.loader .tip-color-1 p{color:#ae4fb0}.loader .tip-color-1 svg{fill:#ae4fb0;stroke:#ae4fb0}.loader .tip-color-2 p{color:#4e88df}.loader .tip-color-2 svg{fill:#4e88df;stroke:#4e88df}.loader .tip-color-3 p{color:#6360d6}.loader .tip-color-3 svg{fill:#6360d6;stroke:#6360d6}.loader .tip-color-4 p{color:#47b3a6}.loader .tip-color-4 svg{fill:#47b3a6;stroke:#47b3a6}.loader .tip-color-5 p{color:#d76969}.loader .tip-color-5 svg{fill:#d76969;stroke:#d76969}.tip{text-align:center;width:auto}.tip .translate-cloak{display:none}.tip p{display:-ms-flexbox;display:flex;font-size:1.1em;-ms-flex-pack:center;justify-content:center;margin-bottom:1em;max-width:440px}.tip p.title{color:#000;font-size:1em;margin-bottom:1.75em}.tip p.range{width:1px}.tip svg{height:32px;margin:0 .3em;width:32px}.tip svg.icon-upvote{height:30px;width:24px}.tip .range-slider{display:initial;width:100px}.tip .arrows svg{height:40px;margin:0}.tip .arrows svg.icon-arrow-left{margin-left:7px}.tip .arrows svg.icon-arrow-right{margin-left:-7px}.tribe-linked{margin-left:auto;overflow:hidden;position:absolute;right:0;top:0;z-index:99}.tribe-linked .tribe-linked-inner{padding:.5rem;transition:.2s}.tribe-linked .tribe-linked-inner:hover{background:#fff;cursor:pointer}.tribe-linked .tribe-linked-inner .close,.tribe-linked .tribe-linked-inner .delete-link,.tribe-linked .tribe-linked-inner .gig-title,.tribe-linked .tribe-linked-inner .synchronize-link,.tribe-linked .tribe-linked-inner .title{display:none;opacity:0}.tribe-linked .tribe-logo{height:2rem;width:2rem}.tribe-linked.is-active{animation-duration:1s;animation-name:slideTribeInner;background:#fff;box-shadow:1px 1px 5px rgba(33,33,33,.2);overflow:hidden}.epic-row .epic-statuses,.epics-table-dropdown{box-shadow:3px 3px 2px rgba(0,0,0,.1);z-index:99}.tribe-linked.is-active .tribe-linked-inner{height:100%;min-width:300px}.tribe-linked.is-active .tribe-linked-inner .close,.tribe-linked.is-active .tribe-linked-inner .delete-link,.tribe-linked.is-active .tribe-linked-inner .gig-title,.tribe-linked.is-active .tribe-linked-inner .synchronize-link,.tribe-linked.is-active .tribe-linked-inner .title{animation-duration:1.25s;animation-name:fadeInFromNone;display:block;opacity:1}.tribe-linked.is-active .tribe-linked-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.tribe-linked.is-active .tribe-logo{margin-right:.5rem;vertical-align:text-bottom}.tribe-linked.is-active svg{width:1rem;height:1rem;fill:#ff0062;transition:all .2s}.tribe-linked.is-active svg:hover{fill:#ff2400}.tribe-linked.is-active .title{margin-bottom:0}.tribe-linked.is-active .gig-title{color:#107a8a;margin-bottom:.5rem}.tribe-linked.is-active .delete-link{font-size:.9rem;color:#000;display:block;margin-bottom:1rem}.tribe-linked.is-active .synchronize-link{display:block;padding:.5rem}.tribe-linked.is-active .close{-ms-flex-item-align:start;align-self:flex-start;margin-left:1rem}@keyframes slideTribeInner{0%{max-height:60px;width:100px}20%{max-height:60px;width:300px}100%{max-height:225px}}@keyframes fadeInFromNone{0%{display:none;opacity:0}80%{display:block;opacity:0}100%{display:block;opacity:1}}tg-wysiwyg-code-lightbox textarea{height:350px}.wysiwyg{line-height:1.4rem;overflow:auto;padding:1rem}.wysiwyg h1,.wysiwyg h2,.wysiwyg h3{padding-bottom:.5rem}.wysiwyg h1{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:2.25em;line-height:1.2;margin-bottom:1rem;margin-top:1rem;text-transform:uppercase}.wysiwyg h2,.wysiwyg h3,.wysiwyg h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-top:1rem;margin-bottom:1rem}.wysiwyg h2{font-size:1.6rem;line-height:1.225}.wysiwyg h3{font-size:1.2rem}.wysiwyg ol,.wysiwyg ul{line-height:1.5;list-style-position:outside;margin-bottom:1rem;margin-top:0;padding-left:2em}.wysiwyg ol ol,.wysiwyg ol ul,.wysiwyg ul ol,.wysiwyg ul ul{padding-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#000;cursor:pointer}.wysiwyg a:hover{color:#212121}.wysiwyg code,.wysiwyg pre:not([class*=language-]){font-size:.9rem;background:#272822;color:#c1c1c1;direction:ltr;font-family:'courier new',monospace;overflow:auto;unicode-bidi:embed}.wysiwyg p{margin-bottom:1rem}.wysiwyg .codehilite{overflow:auto}.wysiwyg blockquote p{margin:0}.wysiwyg pre:not([class*=language-]){line-height:1.4rem;margin-bottom:.5rem;padding:1rem;white-space:pre-wrap}.wysiwyg code{padding:.2rem}.wysiwyg table{border:1px solid #757575;margin-bottom:1rem}.medium-editor-mention-panel ul,tg-wysiwyg div[contenteditable=true] :last-child{margin-bottom:0}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#757575 1px solid}.wysiwyg th{border-right:#757575 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#757575 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.wysiwyg textarea{background:#fff;max-height:none}.wysiwyg hr{border:1px solid #c1c1c1}.medium-editor-mention-panel{background-color:#fff;border:1px solid #757575;position:absolute}.medium-editor-mention-panel:empty{border:0}.medium-editor-mention-panel li{border-top:1px solid #757575;cursor:pointer;padding:2px 5px}.medium-editor-mention-panel li:first-child{border-top:0}.medium-editor-mention-panel li.active,.medium-editor-mention-panel li:hover{background-color:#000;color:#fff}.code-language-search,.code-language-selector{font-size:.75rem;background-color:#fff;position:absolute}tg-wysiwyg{display:-ms-flexbox;display:flex;margin-bottom:2rem}tg-wysiwyg pre{cursor:pointer}tg-wysiwyg .outdated{color:#ff2400}tg-wysiwyg .tools{padding-left:1rem}tg-wysiwyg .tools:not(.visible){opacity:0;pointer-events:none}tg-wysiwyg .tools:not(.visible) a{cursor:default}tg-wysiwyg .tools a{display:block;margin-bottom:.5rem}tg-wysiwyg .tools svg{fill:#757575}tg-wysiwyg .editor{width:100%}tg-wysiwyg .mode-editor span{color:#757575;cursor:pointer;margin-right:.5rem}tg-wysiwyg .markdown-editor-placeholder,tg-wysiwyg .medium-editor-placeholder{color:#757575;overflow:visible;padding-left:1rem}tg-wysiwyg .markdown-editor-placeholder::after,tg-wysiwyg .medium-editor-placeholder::after{color:#757575;font-style:normal}tg-wysiwyg .markdown:not(.empty) p{margin-bottom:0;white-space:pre-wrap}tg-wysiwyg .read-mode{cursor:pointer}tg-wysiwyg .medium{border:1px solid transparent}.code-language-search,.code-language-selector,tg-wysiwyg .edit-mode .markdown,tg-wysiwyg .edit-mode .medium{border:1px solid #757575}tg-wysiwyg .edit-mode .medium-editor-element{min-height:10rem}.code-language-selector{cursor:pointer;padding:.2rem .5rem 0}.code-language-search ul{cursor:pointer;margin-bottom:0;max-height:20vh;overflow-y:scroll}.epic-row .sprint,.epics-table-header .sprint,.story-row .sprint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.code-language-search li{padding:.2rem .5rem}.medium-editor-toolbar li .medium-editor-button-active{color:#212121}.medium-editor-toolbar svg{fill:#fff}.medium-editor-toolbar button:hover svg{fill:#212121}.discover-header{background:url(../images/discover.png) bottom left repeat-x #c1c1c1;margin-bottom:2.5rem;padding:1rem 1rem 2rem;text-align:center}.discover-header .discover-header-inner{max-width:1200px;min-width:768px;margin:0 auto}.discover-header .title{font-size:3rem;margin-bottom:0}.discover-header .project-number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#000}.discover-results-header .title,.featured-projects .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.discover-header form{margin:0 30%;position:relative}@media (max-width:767px){.discover-header .discover-header-inner{width:90%;min-width:0}.discover-header form{margin:0 .5rem}}.discover-header input[type=text]{background:#fff;border:0;padding:1rem;width:100%}.discover-header input[type=text]:focus{outline-color:#212121}.discover-header input[type=text]:-webkit-autofill{background:rgba(0,0,0,.5)}.discover-header .search-button{width:1.5rem;height:1.5rem;fill:#757575;position:absolute;right:1rem;top:1rem;transition:fill .2s}.discover-header .search-button:hover{cursor:pointer;fill:#000}.discover-results-header .discover-results-header-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.discover-results-header svg{width:1.2rem;height:1.2rem;fill:#757575;margin-right:.25rem}.discover-results-header .title{font-size:1.6rem;text-transform:uppercase}.discover-results-header h2{display:inline-block}.filter-discover-search .discover-search-filter{margin-right:1rem}.filter-discover-search .discover-search-filter.active{color:#000}.filter-discover-search .discover-search-filter.active svg{fill:#000}.filter-discover-search svg{width:.8rem;height:.8rem}.discover-search-subfilter{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative}.discover-search-subfilter:after,.discover-search-subfilter:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.discover-search-subfilter:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.discover-search-subfilter:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.discover-search-subfilter.most-liked-subfilter::after,.discover-search-subfilter.most-liked-subfilter::before{left:85%}.discover-search-subfilter.most-active-subfilter::after,.discover-search-subfilter.most-active-subfilter::before{left:95%}.discover-search-subfilter.ng-enter{animation:dropdownFade .2s}.discover-search-subfilter .results{font-size:.9rem;color:#ff0062;display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .results:hover{color:#ff2400}.discover-search-subfilter .filter-list{display:-ms-flexbox;display:flex;margin:0 0 0 auto}.discover-search-subfilter .filter-list a{display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .filter-list a:hover{background:#757575;color:currentColor}.discover-search-subfilter .filter-list a.active{background:#212121;color:#fff}.featured-projects{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.featured-projects{width:90%;min-width:0}}.featured-projects .title{font-size:1.6rem;color:#212121;text-align:center}.featured-projects-inner{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.featured-project{background:#fff;border:1px solid #c1c1c1;margin:.5rem;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:23%;flex-basis:23%;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:23%}.featured-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.featured-project .project-tag{-ms-flex:1;flex:1}.featured-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.featured-project .project-card-description{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575}.featured-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.featured-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.featured-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.featured-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.featured-project .statistic{font-size:.9rem;color:#757575;display:inline-block;margin-right:.5rem}.featured-project .statistic.active{color:#000}.featured-project .statistic.active svg{fill:currentColor}.featured-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.featured-project .project-card-header .icon-badge{fill:#212121}.featured-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.featured-project .project-card-logo img{width:100%}.featured-project .project-card-name{line-height:1.25}.featured-project .project-card-name a{font-size:1.2rem;color:#000}.featured-project .project-card-name a:hover{color:#212121}@media (max-width:767px){.featured-project{-ms-flex-preferred-size:45%;flex-basis:45%}}@media (max-width:480px){.featured-project{-ms-flex-preferred-size:100%;flex-basis:100%}}.highlighted{margin:1rem auto 4rem;max-width:1200px;min-width:768px;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}@media (max-width:767px){.highlighted{width:90%;min-width:0;-ms-flex-direction:column;flex-direction:column}.highlighted tg-most-active{margin-top:4rem}}.highlighted tg-most-active,.highlighted tg-most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.highlighted tg-most-liked{margin-right:8%}@media (max-width:767px){.highlighted tg-most-liked{margin-right:0}}.highlighted .most-active,.highlighted .most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column}.highlighted .header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.highlighted .header svg{width:.8rem;height:.8rem;fill:#757575;margin-left:.5rem}.highlighted .title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.highlighted .title-wrapper svg{width:1.25rem;height:1.25rem;fill:#757575;margin-right:.5rem}.highlighted .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.6rem;color:#212121;display:inline-block;margin:0}.highlighted .highlighted-projects-container{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.highlighted .loading-container{margin-top:calc(50% - 1rem)}.highlighted .loading-spinner{display:block;margin:2rem auto;max-height:3rem;max-width:3rem}.highlighted .view-more-projects{margin-top:auto;width:100%}.highlighted .empty-highlighted-project{border:2px dashed #c1c1c1;-ms-flex:1;flex:1;padding:2rem;text-align:center}.highlighted .empty-highlighted-project svg{width:2rem;height:2rem;display:block;fill:#757575;margin:1rem auto}.highlighted .empty-highlighted-project span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block}.filter-highlighted{position:relative}.filter-highlighted .current-filter{padding:1rem}.filter-highlighted .current-filter span{margin-left:.2rem;position:relative;top:.2rem}.filter-highlighted .current-filter:hover svg{fill:currentColor}.filter-highlighted .filter-list{background:#000;position:absolute;right:0;top:1.5rem}.filter-highlighted .filter-list.ng-enter{animation:dropdownFade .2s ease-in}.filter-highlighted .filter-list.ng-leave{animation:dropdownFade .2s ease-in;animation-direction:reverse}.filter-highlighted li{font-size:.9rem;color:#fff;cursor:pointer;min-width:8rem;padding:.25rem .5rem}.filter-highlighted li:hover{background:rgba(33,33,33,.4)}.highlighted-project{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:9rem;flex-basis:9rem;min-height:9rem;padding:1.5rem 0}.highlighted-project:nth-last-child(-n+2){border-bottom:0}.highlighted-project .project-logo{-ms-flex-preferred-size:3rem;flex-basis:3rem;height:auto;margin-right:1rem;width:3rem}.highlighted-project .project-logo img{width:100%}.highlighted-project .project-data-container{-ms-flex:1;flex:1}.highlighted-project .single-project-header{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.highlighted-project .project-title{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.epic-row .epic-pill,.epic-row .epic-statuses{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.highlighted-project .project-title a{color:#000}.highlighted-project .project-title a:hover{color:#212121}.highlighted-project .project-description{font-size:.9rem;color:#757575;margin-bottom:0}.highlighted-project .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:end;justify-content:flex-end}.highlighted-project .project-statistics svg{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem}.highlighted-project .statistic{font-size:.9rem;color:#757575;display:inline-block;margin-right:.5rem}.highlighted-project .statistic.active{color:#000}.highlighted-project .statistic.active svg{fill:#000}.discover-search .discover-header form{margin:0 8rem;position:relative}.discover-search .discover-header .search-button{left:1rem;right:auto}.discover-search .discover-header .searchbox input{padding-left:3.5rem;padding-right:23rem}.discover-search .searchbox-filters{position:absolute;right:1rem;top:.7rem;width:auto}.discover-search .searchbox-filters input{display:none}.discover-search .searchbox-filters label{border-radius:4px;color:#757575;cursor:pointer;display:inline-block;padding:.4rem .75rem;transition:all .2s;transition-delay:.2s}.discover-search .searchbox-filters label.active{background:#212121;color:#fff}.discover-search .searchbox-filters label:hover{background:#c1c1c1;color:#757575}.discover-results{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.discover-results{width:90%;min-width:0}}.discover-results .discover-results-inner .spin{margin-top:4rem}.discover-results .list-itemtype-project{border-bottom:1px solid #757575;display:-ms-flexbox;display:flex;padding:1rem 0}.discover-results .list-itemtype-project:last-child{border-bottom:0}.discover-results .list-itemtype-project-left{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;width:100%}.discover-results .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.discover-results .list-itemtype-project-data{-ms-flex:1;flex:1;vertical-align:middle}.discover-results .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-pack:end;justify-content:flex-end}.discover-results .project-statistics svg{width:.7rem;height:.7rem;fill:#757575;margin-right:.2rem}.discover-results .statistic{font-size:.9rem;color:#757575;display:inline-block;margin-right:.5rem}.discover-results .statistic svg{fill:#757575;stroke:#757575}.discover-results .statistic.active{color:#000}.discover-results .statistic.active svg{fill:#000}.discover-results .more-results{display:block;margin:0 20rem;transition:inherit}.discover-results div[tg-loading] img{display:block;margin:0 auto}.lightbox-create-epic{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1}.lightbox-create-epic .create-epic-container{max-width:700px;width:90%}.lightbox-create-epic .subject-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.lightbox-create-epic .subject-container .subject{padding-left:1rem;width:100%}.lightbox-create-epic .attachments{margin-bottom:0}.lightbox-create-epic .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-create-epic .settings fieldset{margin-right:.5rem}.lightbox-create-epic .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-create-epic .settings fieldset:last-child{margin:0}.lightbox-create-epic .settings input{display:none}.lightbox-create-epic .settings input:checked+label{background:#000;border:1px solid #000;color:#fff}.lightbox-create-epic .settings input:checked+.blocked{background:#ff2400;border:1px solid #ff2400;color:#fff}.lightbox-create-epic label{font-size:.9rem;background:#f5f5f5;border:1px solid #757575;color:#757575;cursor:pointer;display:block;padding:.5rem 3rem;text-transform:none;transition:all .2s ease-in}.lightbox-create-epic label:hover{background:#212121;border:1px solid #000;color:#fff}.lightbox-create-epic label.blocked:hover{background:#ff0062;border:1px solid #ff2400}.lightbox-create-epic .create-epic-button{display:block;width:100%}.epic-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #c1c1c1;cursor:move;display:-ms-flexbox;display:flex;transition:background .2s}.epic-row .assigned,.epic-row .project{padding:.5rem}.epic-row .name,.epic-row .progress,.epic-row .sprint,.epic-row .status,.epic-row .vote{padding:1rem .5rem}.epic-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .assigned,.epic-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .sprint,.epic-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epic-row .name,.epic-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epic-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epic-row .sprint{width:90%}.epic-row:hover{background:rgba(33,33,33,.05)}.epic-row:hover .icon-drag{opacity:1}.epic-row.not-empty{cursor:pointer}.epic-row.is-blocked{background:rgba(255,0,98,.5)}.epic-row.is-closed .name a{color:#9b9b9b;text-decoration:line-through}.epic-row.unfold .name .icon{transform:rotate(0)}.epic-row .name .icon{transform:rotate(180deg);transition:all .2s}.epic-row .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#c1c1c1;opacity:0;transition:opacity .1s}.epic-row .epic-pill{font-size:.75rem;background:#212121;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.epic-row .status{cursor:pointer;position:relative}.epic-row .status button{background:0 0}.epic-row .icon-arrow-down{width:.7rem;height:.7rem;fill:#757575;margin-left:.1rem}.epic-row .progress-bar,.epic-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.epic-row .progress-bar{background:#f5f5f5;max-width:40vw;padding-right:1rem;width:100%}.epic-row .progress-status{background:#212121;width:10vw}.epic-row .vote{color:#757575}.epic-row .vote.is-voter{color:#212121;fill:#212121}.epic-row .assigned img{width:40px}.epic-row .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.epic-row .is-unassigned{color:#757575}.epic-row .epic-statuses{font-size:.9rem;background:rgba(33,33,33,.9);border-bottom:1px solid #212121;color:#fff;left:0;list-style-type:none;margin:0;position:absolute;text-align:left;top:2.5rem;width:200px}.epic-row .epic-statuses:last-child{border:0}.epic-row .epic-statuses li{padding:.5rem}.epic-row .epic-statuses li:hover{color:#212121;transition:color .3s linear}.empty-epics{text-align:center}.empty-epics a{color:#000;display:block;margin-bottom:2rem}.epics-table{margin-top:2rem}.epics-table .loading{margin:2% auto;width:3rem}.epics-table .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.epics-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #757575;display:-ms-flexbox;display:flex;padding:.5rem;position:relative}.epics-table-header .name,.epics-table-header .progress,.epics-table-header .sprint,.epics-table-header .status,.epics-table-header .vote{padding:1rem .5rem}.epics-table-header .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epics-table-header .assigned,.epics-table-header .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center;padding:1rem .5rem}.epics-table-header .sprint,.epics-table-header .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epics-table-header .name,.epics-table-header .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epics-table-header .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epics-table-header .sprint{width:90%}.epics-table-options-wrapper{bottom:1rem;position:absolute;right:.5rem}.epics-table-option-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0}.epics-table-option-button .icon{width:.7rem;height:.7rem}.epics-table-dropdown{background:#fff;border-bottom:1px solid rgba(0,0,0,.1);border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);padding:.5rem;position:absolute;right:0;top:1.3rem;width:250px}.epics-table-dropdown.ng-hide-remove{animation:dropdownFade .2s}.epics-table-dropdown.ng-hide-add{animation:dropdownFade .2s reverse}.epics-table-dropdown .fieldset{font-size:.9rem;border-bottom:1px solid #c1c1c1;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.epics-table-dropdown .fieldset:last-child{border:0}.story-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;margin-left:4rem;transition:background .2s}.story-row .assigned,.story-row .project{padding:.5rem}.story-row .name,.story-row .progress,.story-row .sprint,.story-row .status,.story-row .vote{padding:1rem .5rem}.story-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center;color:#757575}.story-row .assigned,.story-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .sprint,.story-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.story-row .name,.story-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.story-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.story-row .sprint{width:90%}.story-row:hover{background:rgba(33,33,33,.05)}.story-row.is-blocked{background:rgba(255,0,98,.5)}.story-row.is-closed .name{color:#757575;text-decoration:line-through}.story-row .name{-ms-flex-preferred-size:17.5vw;flex-basis:17.5vw}.story-row .name a{cursor:pointer}.story-row .progress-bar,.story-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.story-row .progress-bar{background:#f5f5f5;max-width:40vw;width:100%}.story-row .progress-status{background:#212121;width:10vw}.story-row .vote.is-voter{color:#212121;fill:#212121}.story-row .project{cursor:pointer}.story-row .assigned img,.story-row .project img{width:40px}.story-row .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.lightbox-create-related-user-stories .lightbox-create-related-user-stories-wrapper{max-width:600px;width:90%}.lightbox-create-related-user-stories .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-create-related-user-stories .related-with-selector input{display:none}.lightbox-create-related-user-stories .related-with-selector input:checked+label{background:#212121;color:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input:checked+label:hover{background:#212121}.lightbox-create-related-user-stories .related-with-selector input+label{background:rgba(193,193,193,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input+label:hover{background:rgba(33,33,33,.3);transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-create-related-user-stories fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-create-related-user-stories .new-user-story-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-create-related-user-stories .existing-user-story-form,.lightbox-create-related-user-stories .new-user-story-form{margin-bottom:1rem}.lightbox-create-related-user-stories .no-stories-found{padding:1rem 0 0}.lightbox-create-related-user-stories .new-user-story-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-create-related-user-stories .new-user-story-options input{display:none}.lightbox-create-related-user-stories .new-user-story-options input:checked+label{background:#212121;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label{background:#f5f5f5;color:#212121;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label:hover{background:#212121;color:#fff;fill:#fff}.lightbox-create-related-user-stories button{width:100%}.related-userstories{margin-bottom:2rem;position:relative}.related-userstories-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-userstories-header .related-userstories-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-userstories-header .add-button{background:#212121;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-userstories-header .add-button.is-active,.related-userstories-header .add-button:hover{background:#212121}.related-userstories-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-userstories-body{width:100%}tg-related-userstory-row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}tg-related-userstory-row.sortable{cursor:move}tg-related-userstory-row.sortable:hover{background:rgba(33,33,33,.05)}tg-related-userstory-row.sortable:hover .userstory-settings{opacity:1;transition:all .2s ease-in}tg-related-userstory-row.sortable:hover .icon-drag{opacity:1}tg-related-userstory-row.sortable .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#c1c1c1;opacity:0;transition:opacity .1s}tg-related-userstory-row .status{-ms-flex-negative:0;flex-shrink:0;position:relative;width:125px}tg-related-userstory-row .assigned-to-column{-ms-flex-negative:0;flex-shrink:0;width:150px}tg-related-userstory-row .assigned-to-column img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .project{cursor:pointer;-ms-flex-preferred-size:100px;flex-basis:100px}tg-related-userstory-row .project img{width:40px}tg-related-userstory-row .userstory-name{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;margin-right:1rem}tg-related-userstory-row .userstory-name a{cursor:pointer}tg-related-userstory-row .userstory-name span{display:inline-block;margin-left:.25rem}tg-related-userstory-row .closed{border-left:10px solid #c1c1c1;color:#c1c1c1}tg-related-userstory-row .closed a,tg-related-userstory-row .closed svg{fill:#c1c1c1}tg-related-userstory-row .closed .userstory-name a{color:#c1c1c1;text-decoration:line-through}tg-related-userstory-row .blocked{background:rgba(255,0,98,.2);border-left:10px solid #ff0062}tg-related-userstory-row .userstory-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;opacity:0;width:60px}tg-related-userstory-row .userstory-settings svg{width:1.1rem;height:1.1rem;fill:#757575;margin-right:.5rem;transition:fill .2s ease-in}tg-related-userstory-row .userstory-settings svg:hover{fill:#757575}tg-related-userstory-row .userstory-settings a:hover{cursor:pointer}tg-related-userstory-row .delete-userstory:hover .icon-trash{fill:#ff0062}tg-related-userstory-row .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}tg-related-userstory-row .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .avatar figcaption{margin-left:.5rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:4rem;margin:0 auto;width:4rem}.external-app-wrapper svg{width:4rem;height:4rem}.comment .comment-main,.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-ms-flexbox;display:flex}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper .app-card a,.external-app-wrapper .user-card a{font-size:1rem;display:block}.external-app-wrapper .app-card .app-image{-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-ms-flex:1;flex:1}.external-app-wrapper .app-card p{font-size:1rem}.external-app-wrapper .user-card{background:#F0EFD1;border:1px solid #000;padding:1rem}.external-app-wrapper .user-card .user-image{-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .button-green{display:block}.external-app-wrapper .cancel{font-size:.9rem;display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.comments{clear:both}.comments tg-wysiwyg{margin-top:1.5rem}.comments .read-mode{border:1px solid #757575;height:55px}.activity,.comment .comment-wrapper,.comment .deleted-comment-wrapper,.entry .entry-wrapper{border-bottom:1px solid #c1c1c1}.comments .read-mode .markdown-editor-placeholder,.comments .read-mode .medium-editor-placeholder{height:55px}.comments .add-comment{margin-top:1rem}.comments .add-comment textarea{height:3rem}.comments .add-comment .edit,.comments .add-comment .preview-icon{position:absolute;right:1rem}.comments .save-comment-wrapper{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.comments .save-comment{margin-top:1rem;padding:.5rem 4rem}.comment{display:block}.comment .comment-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.comment .comment-wrapper:hover .comment-option{opacity:1}.comment .comment-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.comment .comment-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:1rem}.comment .comment-creator{color:#000;margin-right:.5rem}.comment .comment-date{font-size:.9rem;color:#757575}.comment .comment-edited{font-size:.9rem;background:#c1c1c1;margin:0 .5rem;padding:.25rem}.comment .comment-edited .separator{margin:0 .25rem}.comment .comment-edited a{color:#000;fill:#000}.comment .comment-edited svg{width:.75rem;height:.75rem;margin:0 0 0 .25rem}.comment .comment-options .icon-close,.comment .comment-options .icon-edit{fill:#757575;margin-right:.5rem}.comment .comment-options{-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;margin-left:1.5rem}.comment .comment-options .comment-option{cursor:pointer;opacity:0}.comment .comment-options .icon-edit:hover{fill:#757575}.comment .comment-options .icon-close:hover{fill:#ff2400}.comment .comment-options .icon-trash{fill:#ff0062}.comment .comment-options .icon-trash:hover{fill:#ff2400}.comment .deleted-comment-wrapper{padding:1rem 0;width:100%}.comment .deleted-comment-main{font-size:.75rem;color:#757575;display:-ms-flexbox;display:flex;width:100%}.comment .toggle-deleted-comment{color:#000;fill:#000;margin:0 1rem;transition:none}.comment .toggle-deleted-comment .icon-arrow-down,.comment .toggle-deleted-comment .icon-arrow-up{width:.8rem;height:.8rem;margin-left:.25rem}.comment .restore-comment{margin-left:auto;transition:all .2s}.comment .restore-comment:hover{color:#000;fill:#000}.comment .restore-comment .icon-reload{width:.8rem;height:.8rem;margin-right:.25rem}.comment .deleted-comment-comment{margin-top:1rem}.comment-text{max-width:80rem}.comment-text.wysiwyg{margin-bottom:0;padding:0}.lightbox-display-historic{display:none}.lightbox-display-historic .history-container{max-width:800px;width:90%}.lightbox-display-historic .history-wrapper{max-height:600px;overflow-x:hidden;overflow-y:auto;padding:2rem}.entry{display:block}.entry .entry-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.entry .entry-avatar{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:50px}.entry .entry-main{-ms-flex:1;flex:1;max-width:calc(100% - 100px)}.entry .entry-data{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.entry .entry-creator{color:#000;margin-right:.5rem}.entry .entry-date{font-size:.9rem;color:#757575}.entry .display-full-entry{width:1.25rem;height:1.25rem;cursor:pointer;fill:#000;margin-left:auto;transform:rotate(0);transition:transform .2s}.entry .display-full-entry.inactive{transform:rotate(180deg)}.entry .entry-text{margin-bottom:0}.entry .entry-text.ellipsed{max-height:3rem;overflow:hidden}.entry .entry-text.blurry{position:relative}.entry .entry-text.blurry::after{background-image:linear-gradient(to top,#fff,transparent);content:'';height:100%;left:0;position:absolute;top:0;width:100%}.history-tabs .order-comments{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:auto;transition:none}.history-tabs .icon-arrow-down,.history-tabs .icon-arrow-up{width:.75rem;height:.75rem}.activity-diff .key{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#c1c1c1;margin-right:.5rem;padding:.25rem}.add-member-suggest .add-member-suggest-name,.home-project .project-card-description,.home-wrapper .title-bar,.invite-members-form .invite-members-single-help,.projects-empty p,.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.activity-diff .diff{line-height:1.6}.activity-diff .icon-arrow-right{width:.75rem;height:.75rem;fill:#757575;margin:0 .5rem}.activity-diff .diff-status-wrapper p{display:inline-block}.activity-diff .diff-status-wrapper ins{background:rgba(84,84,84,.3);text-decoration:underline}.activity-diff .diff-status-wrapper del{background:rgba(255,0,98,.3)}.activity-diff .diff-color-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.activity-diff .diff-color-wrapper .diff{display:inline-block;height:1.2rem;width:1.2rem}.activity{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.activity .activity-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.activity .activity-data{margin-bottom:1rem}.activity .activity-creator{color:#000;margin-right:.5rem}.activity .activity-date{color:#757575}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #c1c1c1;cursor:pointer;transition:background .2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(33,33,33,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single>a,.working-on .duty-single>a{-ms-flex-align:center;align-items:center;border-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.watching .duty-single>a.blocked,.working-on .duty-single>a.blocked{background:rgba(255,0,98,.2);color:#ff2400}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper{display:-ms-flexbox;display:flex}@media (max-width:767px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .duty-summary{-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .dashboard-container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@media (max-width:1280px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:767px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .watching-container,.home-wrapper .working-on-container{-ms-flex:1;flex:1;padding-left:.5rem;padding-right:.5rem}.home-wrapper .working-on-container{margin-right:1rem}.home-wrapper .project-list{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.2rem;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0 0 .5rem;padding:.5rem 1rem}.home-project{background:#fff;border:1px solid #c1c1c1;margin:.5rem .5rem 1rem;cursor:pointer;transition:all .2s}.home-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.home-project .project-tag{-ms-flex:1;flex:1}.home-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-project .project-card-description{font-size:.9rem;color:#757575}.home-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.home-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.home-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.home-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.home-project .statistic{font-size:.9rem;color:#757575;display:inline-block;margin-right:.5rem}.home-project .statistic.active{color:#000}.home-project .statistic.active svg{fill:currentColor}.home-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.home-project .project-card-header .icon-badge{fill:#212121}.home-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.home-project .project-card-logo img{width:100%}.home-project .project-card-name{line-height:1.25}.home-project .project-card-name a{font-size:1.2rem;color:#000}.home-project .project-card-name a:hover{color:#212121}.home-project:hover{border:1px solid rgba(33,33,33,.2);box-shadow:0 0 5px #c1c1c1}.home-project.blocked-project{border:#c1c1c1}.home-project.blocked-project:hover{border:#c1c1c1;box-shadow:none}.home-project.blocked-project .project-card-description,.home-project.blocked-project .project-card-logo,.home-project.blocked-project .project-card-name a,.home-project.blocked-project .project-card-statistics,.home-project.blocked-project .tags-container{opacity:.3}.projects-empty{text-align:center}.projects-empty svg{fill:#c1c1c1;height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty p{font-size:.9rem}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{margin:2rem 2rem 1rem;text-align:center}.empty-ticket{display:-ms-flexbox;display:flex}.empty-ticket:not(:last-child){border-bottom:1px solid #c1c1c1;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#b4b4b4;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:8vw}@media (max-width:1280px){.empty-ticket .line{width:30vw}}@media (max-width:767px){.empty-ticket .line{width:30vw}}@media (max-width:480px){.empty-ticket .line{width:30vw}}.empty-ticket .line:last-child{margin:0;width:18vw}@media (max-width:1280px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:767px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:480px){.empty-ticket .line:last-child{width:50vw}}.invite-members-form{border-top:1px solid #c1c1c1;margin:0 5rem}.invite-members-form .invite-members-form-list{margin:0 0 1rem}.invite-members-form .invite-members-single{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem}.invite-members-form .invite-members-single-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.invite-members-form .invite-members-single-avatar{height:4rem;margin-right:1rem;width:4rem}.invite-members-form .invite-members-single-remove{color:#ff0062;margin-left:1rem;transition:color .2s}.invite-members-form .invite-members-single-remove:hover{color:#ff2400}.invite-members-form .invite-members-single-role{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:0;flex-shrink:0}.invite-members-form .invite-members-single-new{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem 0}.invite-members-form .invite-members-single-new .invite-members-single-new-btn{cursor:pointer}.invite-members-form .invite-members-single-new .icon-add{width:2rem;height:2rem;fill:#212121;transition:fill .2s}.invite-members-form .invite-members-single-new:hover .icon-add{fill:#212121}.invite-members-form .invite-members-single-send{font-size:1.2rem;display:block;margin:1.5rem 0 1rem;padding:1rem;width:100%}.invite-members-form .invite-members-single-help{font-size:.9rem}.lightbox-add-member .add-members-wrapper{max-width:900px;width:90%}.add-member-suggest .add-member-suggest-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:2rem 0 0}.add-member-suggest .add-member-suggest-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:0 15rem;position:relative}.add-member-suggest .add-member-suggest-filter-input{-ms-flex:1;flex:1;margin-right:.25rem}.add-member-suggest .add-member-suggest-filter-hint{font-size:.75rem;color:#757575;position:absolute;right:16rem;top:.5rem}.add-member-suggest .add-member-suggest-filter-hint.to-send{right:19rem}.add-member-suggest .add-member-suggest-filter-addmail{background:#212121;border-radius:.25rem;padding:.5rem .75rem;transition:background .2s linear}.add-member-suggest .add-member-suggest-filter-addmail:hover{background:#212121}.add-member-suggest .add-member-suggest-filter-addmail svg{width:1.3rem;height:1.3rem;fill:#fff}.add-member-suggest .add-member-suggest-single{-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #c1c1c1;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:calc(25% - 1rem);flex-basis:calc(25% - 1rem);-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;padding:.2rem;transition:.2s linear}.add-member-suggest .add-member-suggest-single:hover{background:rgba(33,33,33,.1)}.add-member-suggest .add-member-suggest-single:nth-child(4n){margin-right:0}.add-member-suggest .add-member-suggest-avatar{-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;height:5rem;margin:.5rem;width:5rem}.notifications-list .entry .entry-project,.notifications-list .entry a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.navbar{display:-ms-flexbox;display:flex;height:40px;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar::after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.navbar .nav-left a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left .logo{background:rgba(0,0,0,.2);padding:.3rem .75rem}.navbar .nav-left svg{width:1.6rem;height:1.6rem}.navbar .nav-right{margin-left:auto}.navbar .nav-right .topnav-dropdown-wrapper>a,.navbar .nav-right>a{color:#fff;margin:0;padding:.5rem 2rem}.navbar .nav-right .active{background:rgba(255,255,255,.95);color:#000}.navbar .nav-right svg{width:1.2rem;height:1.2rem;fill:rgba(0,0,0,.8);transition:all .2s linear}.navbar .nav-right>a,.navbar .topnav-dropdown-wrapper>a{color:#fff;display:inline-block;transition:all .2s linear}.navbar .nav-right>a:hover,.navbar .topnav-dropdown-wrapper>a:hover{background:rgba(0,0,0,.2);color:#212121}.navbar .nav-right>a:hover svg,.navbar .topnav-dropdown-wrapper>a:hover svg{fill:#212121;transition:all .2s linear}.navbar .nav-right>a.user-avatar,.navbar .topnav-dropdown-wrapper>a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar .nav-right>a.user-avatar span,.navbar .topnav-dropdown-wrapper>a.user-avatar span{padding-right:1rem}.navbar .user-avatar img{height:2.5rem;margin-left:.5rem;vertical-align:middle}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#212121;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.navbar-dropdown ul:after{border-color:rgba(33,33,33,0);border-bottom-color:#212121;border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-color:rgba(33,33,33,0);border-bottom-color:#212121;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown .plugin:hover .new{color:#fff}.navbar-dropdown .plugin .new{font-size:.9rem;background:#ff0062;float:right;margin-left:auto;padding:.1rem .25rem}.navbar-dropdown a{color:#757575;display:block;padding:.8rem .5rem}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#212121}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-ms-flex:1;flex:1}.navbar-dropdown a.blocked-project{color:#757575}.navbar-dropdown a.blocked-project svg{margin-left:.5rem;position:relative;top:.25rem}.navbar-dropdown .create-options{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@keyframes highlightFadeOut{0%{background:#212121;font-size:.75rem;height:22px;left:49px;line-height:22px;top:-1px;width:22px}20%{font-size:.7rem;height:20px;left:50px;line-height:20px;top:0;width:20px}100%{background:#000}}.topnav-dropdown-wrapper{position:relative}.topnav-dropdown-wrapper:hover .navbar-dropdown-notifications{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.topnav-dropdown-wrapper .counter{background:#000;border-radius:50%;color:#fff;font-size:.7rem;height:18px;left:52px;line-height:18px;position:absolute;text-align:center;top:3px;width:18px}.topnav-dropdown-wrapper .counter.small{height:17px;line-height:17px;width:17px}.topnav-dropdown-wrapper .counter.large{height:22px;line-height:22px;top:2px;width:22px}.topnav-dropdown-wrapper .counter.counter-active{animation-duration:2s;animation-name:highlightFadeOut}.topnav-dropdown-wrapper .navbar-dropdown-notifications{background:#fff;border:1px solid #c1c1c1;border-radius:2px;box-shadow:0 0 3px 3px rgba(184,184,184,.2);color:#212121;display:none;left:calc(50% - 450px/2);margin-top:1px;min-width:450px;padding:0;position:absolute;top:2.4rem;z-index:999}.topnav-dropdown-wrapper .navbar-dropdown-notifications .empty{color:#757575;font-size:.9em;padding:1.5em 0;text-align:center;width:100%}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header{background:#f5f5f5;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:.6rem .75rem}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after,.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header .notifications-title{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action{font-size:.9rem;padding-left:1.2rem;text-align:right}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action.disabled{color:#B8B8B8;cursor:default}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled){color:#000}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled):hover{color:#212121}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-wrapper{min-height:70px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-list{max-height:400px;overflow-y:auto}.notifications-page{margin-top:1.5em;min-width:initial;padding-bottom:5em}.notifications-page .header{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0;padding:.5em 1em}.notifications-page .title{color:#000;-ms-flex-positive:1;flex-grow:1;font-size:1.8em;line-height:1.8em;margin:0;text-transform:uppercase}.notifications-page .action{color:#000;font-size:1em;line-height:.75em;margin-right:1em}.notifications-page .action.disabled{color:#B8B8B8}.notifications-list .entry a.project-link,.notifications-list .entry a.user-link,.notifications-page .action:not(.disabled):hover{color:#212121}.notifications-page .empty{margin:4rem auto;text-align:center;width:100%}.notifications-page .notifications-list .entry{-ms-flex-align:center;align-items:center;font-size:.95rem;margin:.5rem 0;padding:1rem .6rem}.notifications-page .notifications-list .entry.new{background-color:#E0E0E0}.notifications-page .notifications-list .entry .entry-content{font-size:1.05rem}.notifications-page .notifications-list .entry .entry-project{max-width:initial;text-overflow:initial;white-space:initial}.notifications-page .notifications-list .entry .entry-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:1rem;width:3rem}.notifications-page .notifications-list .entry .entry-date{font-size:.85rem;margin-right:.5rem}.notifications-list .entry{color:#212121;display:-ms-flexbox;display:flex;font-size:.9rem;margin:0 .8rem;padding:.8rem 0;position:relative}.notifications-list .entry:not(:last-child){border-bottom:1px solid #c1c1c1}.notifications-list .entry p{line-height:1.25em;margin-bottom:0}.notifications-list .entry a.object-link{color:#000}.notifications-list .entry a:hover{color:#212121}.notifications-list .entry .entry-avatar{border-radius:.1rem;-ms-flex-preferred-size:2.5rem;flex-basis:2.5rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.7rem;vertical-align:center;width:2.5rem}.notifications-list .entry .entry-avatar img{width:100%}.notifications-list .entry .entry-content{-ms-flex-positive:1;flex-grow:1;line-height:1.1em;margin-right:.7rem}.notifications-list .entry .entry-project{color:#B8B8B8;display:inline-block;font-size:.9rem;margin-top:.5em;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notifications-list .spin img,.profile .timeline-wrapper .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;transform-origin:32 32;max-height:3rem;max-width:3rem}.notifications-list .entry .entry-date{font-size:.7rem;white-space:nowrap}.notifications-list .spin{margin:5% auto;width:3rem}.notifications-list .spin img{margin:0 auto}.profile-favs{border-top:1px solid #c1c1c1}.profile-filter{-ms-flex-align:center;align-items:center;background:#c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile-filter .searchbox{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{fill:#757575;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-ms-flex:1;flex:1;margin-right:1rem}.import-project-asana-form-selector li:first-child,.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs{border-top:1px solid #c1c1c1}.profile-filter .searchbox input:focus{border-bottom:1px solid #757575;outline:0;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#757575;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#212121}.profile{display:-ms-flexbox;display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .timeline-wrapper .spin img{margin:0 auto}.profile .profile-sidebar{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{fill:#c1c1c1;height:10rem;margin:2rem auto;text-align:center;width:10rem}.profile .empty-tab p{color:#757575;font-size:.9rem;margin:0}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{filter:brightness(40%) saturate(150%) hue-rotate(60deg);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;transform:translateY(0);transition:all .2s cubic-bezier(.01,.7,1,1);transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#757575;transition:all .2s linear}.profile-bar .flag:hover path{fill:#ff2400;transition:all .2s linear}.profile-bar h1{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:2rem;line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar .location,.profile-bar .username,.profile-bar h2{margin-bottom:1rem;color:#757575}.profile-bar h2{font-size:1.6rem;line-height:1.2}.profile-bar .username{font-size:1.2rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#757575}.profile-bar .profile-stats{border-bottom:1px solid #c1c1c1;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;display:block;line-height:1}.profile-bar .profile-stats .stat-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:.9rem;display:block}.profile-bar .profile-quote{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;background:url(../images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contacts{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{display:inline-block;padding:1rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#757575;transition:color .2s linear}.profile-content-tabs .tab.active .icon,.profile-content-tabs .tab:hover .icon{fill:#212121}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #c1c1c1;border-right:1px solid #c1c1c1;position:relative;top:1px;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#000}.profile-content-tabs .icon{fill:#757575;height:.8rem;margin-right:.5rem;transition:fill .2s linear}.profile-sidebar h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#757575;margin-bottom:.5rem;padding:.5rem}.contact-team-large,.import-project-asana-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-sidebar h4 .icon{fill:#757575;margin-right:.3rem;margin-top:-3px;vertical-align:middle}.profile-sidebar p{font-size:.9rem}.profile-sidebar a{color:#000}.contact-team{margin-left:.75rem}.contact-team-large{font-size:.9rem;-ms-flex-pack:center;justify-content:center;margin-left:0;width:100%}.contact-team-large .icon-mail{margin-right:.5rem;vertical-align:center}.lightbox-contact-project{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-contact-project-container{max-width:600px;text-align:center;width:90%}.lightbox-contact-project-logo{width:5rem}.lightbox-contact-project-title{margin:0}.lightbox-contact-project-name{font-size:1.6rem;color:#000;margin-bottom:1rem}.lightbox-contact-project-message{max-height:400px}.lightbox-contact-project-button{display:block;margin-top:.5rem;width:100%}.import-project-asana-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-asana-form{width:90%;min-width:0}}.import-project-asana-form fieldset{margin-bottom:1rem}.import-project-asana-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-asana-form label span{font-size:.9rem}.import-project-asana-form label .mumble{margin-left:.25rem}.import-project-asana-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-asana-form-check span{display:block}.import-project-asana-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-asana-form-check .check{position:absolute;right:0;top:0}.import-project-asana-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-asana-form-title-wrapper .create-project-title{display:inline-block}.import-project-asana-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-description,.import-project-asana-form-title{margin:0;text-align:center}.import-project-asana-form-description{color:#757575;margin-bottom:2rem}.import-project-asana-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-asana-form-import-type input:checked+label,.import-project-asana-form-privacity input:checked+label,.import-project-asana-form-selector-template,.import-project-asana-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-asana-form-import-type{display:-ms-flexbox;display:flex}.import-project-asana-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-import-type label .icon{margin-right:.25rem}.import-project-asana-form-import-type input:checked+label{background:#dcdcdc}.import-project-asana-form-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-asana-form-import-type input:disabled+label .icon{color:#9b9b9b}.import-project-asana-form-import-type input{display:none}.import-project-asana-form-import-type label{background:#f5f5f5}.import-project-asana-form-privacity{display:-ms-flexbox;display:flex}.import-project-asana-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-privacity input:checked+label{background:#dcdcdc}.import-project-asana-form-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-asana-form-privacity input:disabled+label .icon{color:#9b9b9b}.import-project-asana-form-privacity input{display:none}.import-project-asana-form-privacity label{background:#f5f5f5}.import-project-asana-form-privacity label .icon{margin-right:.5em}.import-project-asana-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-asana-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-asana-form-type span{margin-left:.5rem}.import-project-asana-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-asana-form-action-back,.import-project-asana-form-action-cancel,.import-project-asana-form-selector a:hover{color:currentColor}.import-project-asana-form-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-asana-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-asana-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-asana-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-asana-form-selector-template{text-transform:uppercase}.import-project-asana-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-asana-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-asana-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-asana-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-asana-form-selector-question:hover svg{fill:#000;transition:fill .2s linear}.import-project-asana-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.import-project-asana-form-selector p{margin-bottom:0}.import-project-asana-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-asana-form-action button{font-size:1.2rem;padding:.75rem}.import-project-asana-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-asana-form-action-back:hover,.import-project-asana-form-action-cancel:hover{color:#212121}.import-project-asana-form-action-cancel{-ms-flex:1;flex:1}.import-project-asana-form-action-back{width:10%}.import-project-asana-form-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-asana-form-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-warning a{color:#000;display:inline-block;margin-left:.25rem}.import-project-asana-form .spin{text-align:center;width:100%}.create-project-asana-import-type{margin-bottom:1rem;text-align:center}.create-project-asana-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-asana-import-type fieldset{background:#fff;border-right:1px solid #c1c1c1;transition:background .2s linear}.create-project-asana-import-type fieldset:last-child{border:0}.create-project-asana-import-type input{display:none}.create-project-asana-import-type input:checked+label{background:rgba(0,0,0,.1)}.create-project-asana-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-asana-import-type label:hover{background:rgba(0,0,0,.1);cursor:pointer}.create-project-asana-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-asana-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.create-project{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.create-project{width:90%;min-width:0}}.create-project fieldset{margin-bottom:1rem}.create-project label{display:block;margin-bottom:.25rem;max-height:44px}.create-project label span{font-size:.9rem}.create-project label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.create-project-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.create-project-check span{display:block}.create-project-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-check .check{position:absolute;right:0;top:0}.create-project-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.create-project-title-wrapper .create-project-title{display:inline-block}.create-project-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.create-project-description,.create-project-title{margin:0;text-align:center}.create-project-description{color:#757575;margin-bottom:2rem}.create-project-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.create-project-import-type input:checked+label,.create-project-privacity input:checked+label,.create-project-selector-template,.create-project-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-import-type{display:-ms-flexbox;display:flex}.create-project-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.create-project-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-import-type label .icon{margin-right:.25rem}.create-project-import-type input:checked+label{background:#dcdcdc}.create-project-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.create-project-import-type input:disabled+label .icon{color:#9b9b9b}.create-project-import-type input{display:none}.create-project-import-type label{background:#f5f5f5}.create-project-privacity{display:-ms-flexbox;display:flex}.create-project-privacity label,.create-project-type{-ms-flex-align:center;display:-ms-flexbox;text-transform:uppercase}.create-project-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-privacity label{align-items:center;cursor:pointer;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem}.create-project-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-privacity input:checked+label{background:#dcdcdc}.create-project-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.create-project-privacity input:disabled+label .icon{color:#9b9b9b}.create-project-privacity input{display:none}.create-project-privacity label{background:#f5f5f5}.create-project-privacity label .icon{margin-right:.5em}.create-project-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.create-project-type{align-items:center;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem}.create-project-type span{margin-left:.5rem}.create-project-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.create-project-action-back,.create-project-action-cancel,.create-project-selector a:hover{color:currentColor}.create-project-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.create-project-selector li:first-child{border-top:1px solid #c1c1c1}.create-project-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.create-project-selector-icon .icon{width:2.25rem;height:2.25rem}.create-project-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.create-project-selector-template{text-transform:uppercase}.create-project-selector-description,.import-project-github-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.create-project-selector-long-description.ng-hide{line-height:0;max-height:0}.create-project-selector-question{position:absolute;right:1.5rem;top:1.5rem}.create-project-selector-question:hover svg{fill:#000;transition:fill .2s linear}.create-project-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.create-project-selector p{margin-bottom:0}.create-project-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.create-project-action button{font-size:1.2rem;padding:.75rem}.create-project-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.create-project-action-back:hover,.create-project-action-cancel:hover{color:#212121}.create-project-action-cancel{-ms-flex:1;flex:1}.create-project-action-back{width:10%}.create-project-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.create-project-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.create-project-warning a{color:#000;display:inline-block;margin-left:.25rem}.create-project .spin{text-align:center;width:100%}.duplicate-project-reference{margin-bottom:2rem}.import-project-github-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-github-form{width:90%;min-width:0}}.import-project-github-form fieldset{margin-bottom:1rem}.import-project-github-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-github-form label span{font-size:.9rem}.import-project-github-form label .mumble{margin-left:.25rem}.import-project-github-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-github-form-check span{display:block}.import-project-github-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-github-form-check .check{position:absolute;right:0;top:0}.import-project-github-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-github-form-title-wrapper .create-project-title{display:inline-block}.import-project-github-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-github-form-description,.import-project-github-form-title{margin:0;text-align:center}.import-project-github-form-description{color:#757575;margin-bottom:2rem}.import-project-github-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-github-form-import-type input:checked+label,.import-project-github-form-privacity input:checked+label,.import-project-github-form-selector-template,.import-project-github-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-github-form-import-type{display:-ms-flexbox;display:flex}.import-project-github-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-import-type label .icon{margin-right:.25rem}.import-project-github-form-import-type input:checked+label{background:#dcdcdc}.import-project-github-form-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-github-form-import-type input:disabled+label .icon{color:#9b9b9b}.import-project-github-form-import-type input{display:none}.import-project-github-form-import-type label{background:#f5f5f5}.import-project-github-form-privacity{display:-ms-flexbox;display:flex}.import-project-github-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-privacity input:checked+label{background:#dcdcdc}.import-project-github-form-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-github-form-privacity input:disabled+label .icon{color:#9b9b9b}.import-project-github-form-privacity input{display:none}.import-project-github-form-privacity label{background:#f5f5f5}.import-project-github-form-privacity label .icon{margin-right:.5em}.import-project-github-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-github-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-github-form-type span{margin-left:.5rem}.import-project-github-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-github-form-action-back,.import-project-github-form-action-cancel,.import-project-github-form-selector a:hover{color:currentColor}.import-project-github-form-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-github-form-selector li:first-child{border-top:1px solid #c1c1c1}.import-project-github-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-github-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-github-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-github-form-selector-template{text-transform:uppercase}.import-project-github-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-github-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-github-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-github-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-github-form-selector-question:hover svg{fill:#000;transition:fill .2s linear}.import-project-github-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.import-project-github-form-selector p{margin-bottom:0}.import-project-github-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-github-form-action button{font-size:1.2rem;padding:.75rem}.import-project-github-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-github-form-action-back:hover,.import-project-github-form-action-cancel:hover{color:#212121}.import-project-github-form-action-cancel{-ms-flex:1;flex:1}.import-project-github-form-action-back{width:10%}.import-project-github-form-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-github-form-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.import-project-github-form-warning a{color:#000;display:inline-block;margin-left:.25rem}.import-project-github-form .spin{text-align:center;width:100%}.create-project-github-import-type{margin-bottom:1rem;text-align:center}.create-project-github-import-type p{margin-bottom:.5rem}.create-project-github-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-github-import-type fieldset{background:#fff;border-right:1px solid #c1c1c1;transition:background .2s linear}.create-project-github-import-type fieldset:last-child{border:0}.create-project-github-import-type input{display:none}.create-project-github-import-type input:checked+label{background:rgba(0,0,0,.1)}.create-project-github-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-github-import-type label:hover{background:rgba(0,0,0,.1);cursor:pointer}.create-project-github-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-github-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.import-project-members{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-members{width:90%;min-width:0}}.import-project-members .avatar{width:48px}.import-project-members-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:0}.import-project-description,.import-project-jira-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-members-system{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0 0;padding:.5rem 0}.import-project-members-system img{width:100%}.import-project-members-logo{max-height:3rem;max-width:3rem}.import-project-members-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;border-top:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.import-project-members-row:hover .import-project-members-delete{opacity:1;transition:all .2s ease-in}.import-project-members-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-username{margin-left:1rem}.import-project-members .avatar.empty{background-color:#c1c1c1;line-height:3rem;text-align:center;width:3rem}.import-project-members-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-delete{background:0 0;opacity:0;padding:.25rem .5rem}.import-project-members-delete svg{width:.75rem;height:.75rem;fill:#ff2400}.import-project-members-match{color:#757575}.import-project-members-match button{background:#fff;border-radius:50%;padding:.25rem .5rem}.import-project-members-match button svg{width:.75rem;height:.75rem}.import-project-members-match-true{border:1px solid #000;margin:0 .1rem 0 .25rem;transition:background .2s}.import-project-members-match-true:hover{background:rgba(33,33,33,.3)}.import-project-members-match-true svg{fill:#000}.import-project-members-match-false{border:1px solid #ff2400;margin:0 .25rem 0 .1rem;transition:background .2s}.import-project-members-match-false:hover{background:rgba(255,36,0,.3)}.import-project-members-match-false svg{fill:#ff2400}.import-project-members-choose{color:#000;padding-right:0;text-transform:lowercase}.import-project-members-choose:hover{color:#212121}.import-project-members-selected{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-selected-img{margin-left:.5rem;max-width:3rem}.import-project-members-selected img{width:100%}.import-project-members-submit{display:block;margin:2rem auto 0;padding:.75rem 4rem}.import-project-selector{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-selector{width:90%;min-width:0}}.import-project-selector .import-project-selector-service img{display:block;margin:1rem auto;width:4rem}.import-project-selector .import-project-selector-filter{-ms-flex-align:center;align-items:center;background:#c1c1c1;display:-ms-flexbox;display:flex;padding:.5rem}.import-project-selector .import-project-selector-filter input{background:#f5f5f5;border:0;-ms-flex:1;flex:1;padding:.5rem}.import-project-from-site,.import-project-selector .import-project-selector-title{border-bottom:1px solid #c1c1c1;padding:1rem}.import-project-selector .import-project-selector-filter svg{width:1rem;height:1rem;fill:#757575;margin:0 1rem}.import-project-selector .import-project-selector-title:hover{background:rgba(0,0,0,.1);cursor:pointer}.import-project-from-site{-ms-flex-align:center;align-items:center;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;position:relative}.import-project-from-site:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-from-site:first-child{border-top:1px solid #c1c1c1}.import-project-from-site:first-child .import-project-name{margin:0}.import-project-from-site:first-child .import-project-logo img{padding:0 .9rem 0 1rem;width:5.1rem}.import-project-logo{-ms-flex-item-align:start;align-self:flex-start;margin-right:.5rem}.import-project-logo img{padding:0 1rem;width:5rem}.import-project-name-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.import-project-description{margin-bottom:0}.import-project-description a{color:#000;margin-left:.3rem}.import-project-url{margin-top:.5rem}.import-project-input{vertical-align:middle}.import-project-button{background:#000;color:#fff;padding:.4rem 1rem}.create-project-invite-avatars{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.create-project-invite-avatar{cursor:pointer;display:block;margin-right:.25rem}.create-project-invite-avatar:hover{background:#f5f5f5;position:relative;border:0;opacity:.9;transition:all .2s;transition-delay:.2s}.create-project-invite-avatar:hover:after,.create-project-invite-avatar:hover:before{content:"";width:2px;height:66px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled{opacity:.3;transition:opacity .2s}.create-project-invite-avatar.disabled:hover{background:#f5f5f5;position:relative;border:0;opacity:.6;transition:all .2s ease-in}.create-project-invite-avatar.disabled:hover:after,.create-project-invite-avatar.disabled:hover:before{content:"";width:2px;height:33px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar.disabled:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar.disabled:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled:hover::after{background:#212121;left:24px;top:8px;transform:rotate(0);transform-origin:center}.create-project-invite-avatar.disabled:hover::before{background:#212121;right:22px;top:8px;transform:rotate(90deg);transform-origin:center}.create-project-invite-avatar img{cursor:pointer;width:3rem}.import-project-jira-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-jira-form{width:90%;min-width:0}}.import-project-jira-form fieldset{margin-bottom:1rem}.import-project-jira-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-jira-form label span{font-size:.9rem}.import-project-jira-form label .mumble{margin-left:.25rem}.import-project-jira-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-jira-form-check span{display:block}.import-project-jira-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-jira-form-check .check{position:absolute;right:0;top:0}.import-project-jira-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-jira-form-title-wrapper .create-project-title{display:inline-block}.import-project-jira-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-description,.import-project-jira-form-title{margin:0;text-align:center}.import-project-jira-form-description{color:#757575;margin-bottom:2rem}.import-project-jira-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-jira-form-import-type input:checked+label,.import-project-jira-form-privacity input:checked+label,.import-project-jira-form-selector-template,.import-project-jira-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-jira-form-import-type{display:-ms-flexbox;display:flex}.import-project-jira-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-import-type label .icon{margin-right:.25rem}.import-project-jira-form-import-type input:checked+label{background:#dcdcdc}.import-project-jira-form-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-jira-form-import-type input:disabled+label .icon{color:#9b9b9b}.import-project-jira-form-import-type input{display:none}.import-project-jira-form-import-type label{background:#f5f5f5}.import-project-jira-form-privacity{display:-ms-flexbox;display:flex}.import-project-jira-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-privacity input:checked+label{background:#dcdcdc}.import-project-jira-form-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-jira-form-privacity input:disabled+label .icon{color:#9b9b9b}.import-project-jira-form-privacity input{display:none}.import-project-jira-form-privacity label{background:#f5f5f5}.import-project-jira-form-privacity label .icon{margin-right:.5em}.import-project-jira-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-jira-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-jira-form-type span{margin-left:.5rem}.import-project-jira-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-jira-form-action-back,.import-project-jira-form-action-cancel,.import-project-jira-form-selector a:hover{color:currentColor}.import-project-jira-form-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-jira-form-selector li:first-child{border-top:1px solid #c1c1c1}.import-project-jira-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-jira-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-jira-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-jira-form-selector-template{text-transform:uppercase}.create-project-import-type-info,.import-project-jira-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-jira-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-jira-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-jira-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-jira-form-selector-question:hover svg{fill:#000;transition:fill .2s linear}.import-project-jira-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.import-project-jira-form-selector p{margin-bottom:0}.import-project-jira-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-jira-form-action button{font-size:1.2rem;padding:.75rem}.import-project-jira-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-jira-form-action-back:hover,.import-project-jira-form-action-cancel:hover{color:#212121}.import-project-jira-form-action-cancel{-ms-flex:1;flex:1}.import-project-jira-form-action-back{width:10%}.import-project-jira-form-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-jira-form-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-warning a{color:#000;display:inline-block;margin-left:.25rem}.import-project-jira-form .spin{text-align:center;width:100%}.create-project-import-type-info{font-size:.9rem;margin-bottom:1rem}.create-project-type-issues-subform{margin:1rem 0 2rem}.create-project-type-issues-subform-title{font-size:.9rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-type-issues-subform-radiogr input{opacity:0}.create-project-type-issues-subform-radiogr input:checked+svg{fill:rgba(0,0,0,.6);stroke:rgba(0,0,0,.1)}.create-project-type-issues-subform-radiogr svg{fill:#c1c1c1;stroke:#a8a8a8;stroke-width:1px;vertical-align:middle}.create-project-type-issues-subform-radiogr .control-indicator{padding-left:.25rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-import-type{margin-bottom:.25rem}.create-project-import-type fieldset{margin:0}tg-select-import-user-lightbox .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}tg-select-import-user-lightbox .candidate-user{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1.5rem}tg-select-import-user-lightbox .candidate-user .candidate-user-name{margin-left:.5rem}tg-select-import-user-lightbox .candidate-user .user-list-avatar{background-color:#ff2400;height:32px;margin-right:.5rem;width:32px}tg-select-import-user-lightbox .error{color:#ff0062;text-align:center}tg-select-import-user-lightbox .more-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;padding:1rem;text-align:center}tg-select-import-user-lightbox .group{display:-ms-flexbox;display:flex}tg-select-import-user-lightbox .group input{-ms-flex-positive:2;flex-grow:2;margin-right:.5rem}tg-select-import-user-lightbox .group .submit-button{-ms-flex-positive:0;flex-grow:0;width:auto}tg-select-import-user-lightbox .search-user-mode{font-size:.9rem;background:0 0;margin-top:2rem;padding:.5rem;text-align:left;transition:.2s;width:100%}tg-select-import-user-lightbox .search-user-mode:hover{color:#000}tg-select-import-user-lightbox label{display:block;padding-bottom:.5rem}.import-project-trello-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-trello-form{width:90%;min-width:0}}.import-project-trello-form fieldset{margin-bottom:1rem}.import-project-trello-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-trello-form label span{font-size:.9rem}.import-project-trello-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.import-project-trello-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-trello-form-check span{display:block}.import-project-trello-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-trello-form-check .check{position:absolute;right:0;top:0}.import-project-trello-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-trello-form-title-wrapper .create-project-title{display:inline-block}.import-project-trello-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-description,.import-project-trello-form-title{margin:0;text-align:center}.import-project-trello-form-description{color:#757575;margin-bottom:2rem}.import-project-trello-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-trello-form-import-type input:checked+label,.import-project-trello-form-privacity input:checked+label,.import-project-trello-form-selector-template,.import-project-trello-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-trello-form-import-type{display:-ms-flexbox;display:flex}.import-project-trello-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-import-type label .icon{margin-right:.25rem}.import-project-trello-form-import-type input:checked+label{background:#dcdcdc}.import-project-trello-form-import-type input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-trello-form-import-type input:disabled+label .icon{color:#9b9b9b}.import-project-trello-form-import-type input{display:none}.import-project-trello-form-import-type label{background:#f5f5f5}.import-project-trello-form-privacity{display:-ms-flexbox;display:flex}.import-project-trello-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-privacity input:checked+label{background:#dcdcdc}.import-project-trello-form-privacity input:disabled+label{cursor:not-allowed;color:#9b9b9b}.import-project-trello-form-privacity input:disabled+label .icon{color:#9b9b9b}.import-project-trello-form-privacity input{display:none}.import-project-trello-form-privacity label{background:#f5f5f5}.import-project-trello-form-privacity label .icon{margin-right:.5em}.import-project-trello-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-trello-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-trello-form-type span{margin-left:.5rem}.import-project-trello-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;color:#212121;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-trello-form-action-back,.import-project-trello-form-action-cancel,.import-project-trello-form-selector a:hover{color:currentColor}.import-project-trello-form-selector li:hover{background:rgba(0,0,0,.1);transition:background .3s ease-in}.import-project-trello-form-selector li:first-child{border-top:1px solid #c1c1c1}.import-project-trello-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-trello-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-trello-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-trello-form-selector-template{text-transform:uppercase}.import-project-trello-form-selector-description,.project-list-wrapper .project-list-title h1,.transfer-project .transfer-title,.transfer-project-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-trello-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-trello-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-trello-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-trello-form-selector-question:hover svg{fill:#000;transition:fill .2s linear}.import-project-trello-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#212121}.import-project-trello-form-selector p{margin-bottom:0}.import-project-trello-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-trello-form-action button{font-size:1.2rem;padding:.75rem}.import-project-trello-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-trello-form-action-back:hover,.import-project-trello-form-action-cancel:hover{color:#212121}.import-project-trello-form-action-cancel{-ms-flex:1;flex:1}.import-project-trello-form-action-back{width:10%}.import-project-trello-form-warning{font-size:.9rem;border:1px solid #ff0062;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.profile-projects,.profile-timeline,.transfer-project-detail{border-top:1px solid #c1c1c1}.import-project-trello-form-warning .icon-exclamation{fill:#ff0062;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-warning a{color:#000;display:inline-block;margin-left:.25rem}.import-project-trello-form .spin{text-align:center;width:100%}.warning-users-import-lightbox{max-width:600px}.warning-users-import-lightbox .warning-users-import-title{text-align:center}.warning-users-import-lightbox .actions{display:-ms-flexbox;display:flex;margin:2rem}.warning-users-import-lightbox .actions button{-ms-flex:1;flex:1}.warning-users-import-lightbox .actions button:first-child{-ms-flex:0;flex:0;-ms-flex-preferred-size:40%;flex-basis:40%;margin-right:.5rem}.warning-users-import-lightbox .actions .button-trans{color:#212121}.profile-projects .list-itemtype-project{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:9rem;padding:.75rem}.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-image,.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-right,.profile-projects .list-itemtype-project.blocked-project .project-description,.profile-projects .list-itemtype-project.blocked-project .project-title{opacity:.4}.profile-projects .list-itemtype-project .project-list-single-title-wrapper{display:-ms-flexbox;display:flex}.profile-projects .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0}.profile-projects .list-itemtype-project .list-itemtype-project-right{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;width:200px}.profile-projects .list-itemtype-project .icon-blocked-project{width:1rem;height:1rem;fill:#fff;stroke:#ff0062}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;margin:0}.project-list-wrapper .icon-badge,.project-list-wrapper .icon-blocked-project,.project-list-wrapper .icon-private{width:1rem;height:1rem}.project-list-wrapper .icon-badge{fill:#212121;margin-left:.5rem;stroke:#212121}.project-list-wrapper .create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .import-project-button{padding:.53rem .8rem}.project-list-wrapper .import-project-button:hover .icon-upload{fill:#212121}.project-list-wrapper .import-project-button .icon-upload{fill:#fff}.project-list-wrapper .project-list-section{display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .help-area{font-size:.9rem;color:#757575;width:200px}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:rgba(33,33,33,.1);cursor:move;transition:background .3s}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .list-itemtype-project.blocked-project .icon-badge,.project-list-wrapper .list-itemtype-project.blocked-project .list-itemtype-project-image,.project-list-wrapper .list-itemtype-project.blocked-project .private,.project-list-wrapper .list-itemtype-project.blocked-project .project-description,.project-list-wrapper .list-itemtype-project.blocked-project .project-title{opacity:.25}.project-list-wrapper .list-itemtype-project.blocked-project:hover .icon-drag{opacity:1}.project-list-wrapper .list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.project-list-wrapper .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.project-list-wrapper .drag{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;opacity:0}.project-list-wrapper .drag svg{fill:#757575;height:1.1rem;margin-right:.5rem;transition:opacity .2s;width:1.1rem}.project-list-wrapper .gu-transit{background-color:#c9c9c9;height:5rem;opacity:1}.project-list-wrapper .gu-transit *{display:none}.project-list-wrapper .gu-mirror{background:#a1a1a1;opacity:1}.blocked-project-detail,.transfer-project{background:url(../images/discover.png) bottom center repeat-x;min-height:calc(100vh - 40px)}.blocked-project-detail{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center;min-width:100vw;width:100vw}.blocked-project-inner{width:330px}.blocked-project-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.blocked-project-title .project-image{-ms-flex-preferred-size:6rem;flex-basis:6rem;margin-right:1rem;max-width:6rem;position:relative}.blocked-project-title img{width:100%}.blocked-project-title .icon-blocked-project{width:1.5rem;height:1.5rem;position:absolute;right:-.5rem;top:-.5rem}.blocked-project-title .project-title{font-size:1.6rem}.blocked-project-message{margin-top:4rem;text-align:center}.blocked-project-message .project-block-title{font-size:2rem}.transfer-project-wrapper{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;width:90%}.transfer-project{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center}.transfer-project-detail{-ms-flex-align:center;align-items:center;border-bottom:1px solid #c1c1c1;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin:1rem 0 3rem;padding:1rem 0}.transfer-project-image{margin-right:1rem;width:4rem}.transfer-project-title{font-size:1.6rem;margin-bottom:.25rem}.transfer-project-statistics span{color:#757575;margin-right:.5rem}.transfer-project-statistics svg{fill:#757575;margin-right:.25rem}.transfer-project-private{text-transform:uppercase}.transfer-project-comment-link{color:#000;cursor:pointer;display:block;margin-bottom:1rem}.transfer-project-comment-link:hover{color:#212121}.transfer-project-comment-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.transfer-project-comment-header .icon-close{cursor:pointer;fill:#757575}.transfer-project-comment-header .icon-close:hover{fill:#ff0062;transition:fill .2s}.transfer-project-comment-form.ng-enter{animation:dropdownFade .2s}.transfer-project-comment-label{display:block;margin-bottom:.5rem}.transfer-project-comment{margin-bottom:1rem;min-height:6rem}.transfer-project-options{display:-ms-flexbox;display:flex}.transfer-project-options a{font-size:1.2rem;display:block;-ms-flex:1;flex:1;padding:.75rem}.transfer-project-options a:first-child{margin-right:.5rem}.profile-timeline .activity-item{border-bottom:1px solid #c1c1c1;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#000}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#757575}.profile-timeline .activity-item a:hover{color:#212121}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-ms-flex-align:center;align-items:center;color:#757575;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#757575;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-item .new-color{border-radius:50%;display:inline-block;height:1rem;margin-left:.2rem;position:relative;top:.1rem;width:1rem}.profile-timeline .activity-member-view{display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-ms-flex:1;flex:1}.profile-timeline .activity-member-view a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.profile-timeline .activity-member-view p{color:#757575}a:hover,body,h1 .date,h2 .date,h3 .date,h4 .date,h5 .date,h6 .date{color:#000}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:sub;white-space:nowrap}.profile-timeline .single-attachment .icon{fill:#212121;margin-right:.5rem}.main-nav svg,.navbar a svg,.summary .stats svg{fill:#fff}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.wiki-history{margin-bottom:2rem}:root .taskboard-table-body .taskboard-row,_:-ms-fullscreen .taskboard-row{min-height:auto}svg{pointer-events:none}a[ng-click] svg{pointer-events:auto}tg-card .card-title span:last-child{word-break:break-word}body{background:#fff}.extrabar,.master,.menu-secondary,.menu-tertiary{background:#fff;border-left:1px solid #000;border-right:1px solid #000}.master,.menu-secondary{background:#fff}.menu-tertiary{background-color:#fff}.extrabar{background:#fff}h1,h2,h3,h4,h5,h6{color:#212121;font-family:Arial,Helvetica,sans-serif}a{color:#212121}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{background:#fff;border-color:#000;color:#000}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=url]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#000}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=url]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#000}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=url]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#000}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#000}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid #ff2400}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,36,0,.7);color:#fff}blockquote{border-left:5px solid #757575}.home-project-list li,.tag{border:1px solid #000}blockquote,blockquote p,cite{color:#000}.navbar a :hover,.summary{color:#fff}.button-gray{background:#000}.tag{background:#fff}.summary{background:#212121}.navbar{background:#000}.navbar::after{background:url(../images/menu-vert.png) top left}.home-project-list p,.watch-options a.active,.working-on-container .list-itemtype-ticket .ticket-project,.working-on-container .list-itemtype-ticket .ticket-status,.working-on-container .list-itemtype-ticket .ticket-type{color:#000}tg-project-menu{background-color:#000;background-image:none}.main-nav .active svg,.taskboard-table-header .task-colum-name .icon{fill:#000}.main-nav .active{background:#fff}.single-project .title{background:#c1c1c1;color:#000}.summary .data .number,.wiki-summary .username{color:#fff}.activity-item p,.drag-drop-help,.duty-custom-fields .custom-field-data .custom-field-description,.kanban-table-header .task-colum-name .icon,.points-per-role>li,.private path,.table-team .avatar .position,.us-created-by .created-by .created-date,.us-created-by .created-by .created-title,.watching .duty-id,.working-on .duty-id{color:#000}.wiki-content.editable:hover .wysiwyg{background:#fff;border:1px solid}.taskboard-table-header .task-colum-name{background:#fff;border-top:3px solid #000}.taskboard-table-body .taskboard-cards-box{background:#fff;border:1px solid #000}.kanban-table-header .task-colum-name{background:#fff;border-top:3px solid #000}.kanban-table-body .kanban-uses-box{background:#fff}.us-detail-settings .button-gray{background:0 0;border:1px solid #000;color:#000}.us-detail-settings .button-gray.active,.us-detail-settings .button-gray:hover{color:#fff}.history-tabs a,.more-attachments span,.us-detail-settings .button-gray span,.us-story-main-data .us-title .us-name{color:#000}.us-story-main-data .us-title{background:#fff}.login-main,.login-main a{color:#fff}.profile-content-tabs .tab,.profile-sidebar p{color:#212121}.settings-nav .active{background:#000;color:#fff}.admin-submenu ul a{color:#000}.policy-table input:checked+label,.policy-table label:hover{color:#fff}.admin-common .admin-subtitle,.admin-membership-table .avatar .email,.admin-membership-table .delete,.home-wrapper .title-bar{color:#000}.admin-functionalities .functionality.active{background:#fff;border:1px solid #000} \ No newline at end of file diff --git a/dist/v-1549282893552/styles/theme-material-design.css b/dist/v-1549282893552/styles/theme-material-design.css new file mode 100644 index 0000000..3eeb5e9 --- /dev/null +++ b/dist/v-1549282893552/styles/theme-material-design.css @@ -0,0 +1,4 @@ +@charset "UTF-8";.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;box-sizing:content-box}.introjs-bullets ul,.introjs-bullets ul li,.introjs-bullets ul li a,.introjs-button,.introjs-helperLayer,.introjs-helperNumberLayer,.introjs-hint,.introjs-overlay,.introjs-progress,.introjs-progressbar,.introjs-tooltip,.introjs-tooltipReferenceLayer{box-sizing:content-box}.pika-table,table{border-collapse:collapse;border-spacing:0}.lightbox textarea,textarea{resize:vertical}h1 .date,h1 span{text-overflow:ellipsis}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:100000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0)";filter:"progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000)";box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow.bottom-middle,.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow{border:5px solid transparent;content:'';position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-bottom-color:#fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.right{right:-10px;top:10px;border-left-color:#fff}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-left-color:#fff}.introjs-arrow.bottom,.introjs-arrow.bottom-middle,.introjs-arrow.bottom-right{bottom:-10px;border-top-color:#fff}.introjs-arrow.bottom-right{right:10px}.introjs-arrow.left{left:-10px;top:10px;border-right-color:#fff}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-right-color:#fff}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-bullets,.pika-table th,.pika-title{text-align:center}.introjs-button{position:relative;overflow:visible;display:inline-block;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{box-sizing:content-box;margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-prevbutton.introjs-fullbutton{border:1px solid #d4d4d4;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-nextbutton.introjs-fullbutton{-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0;display:inline-block}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none;cursor:pointer}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{overflow:hidden;height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0%;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{position:absolute;background:0 0;width:20px;height:15px;cursor:pointer}.introjs-hint:focus{border:0;outline:0}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}.introjs-hint-dot,.introjs-hint-pulse{box-sizing:content-box;position:absolute}.introjs-hint:hover>.introjs-hint-pulse{border:5px solid rgba(60,60,60,.57)}.introjs-hint-pulse{width:10px;height:10px;border:5px solid rgba(60,60,60,.27);-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;background-color:rgba(136,136,136,.24);z-index:10;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.introjs-hint-no-anim .introjs-hint-dot{-webkit-animation:none;-moz-animation:none;animation:none}.introjs-hint-dot{border:10px solid rgba(146,146,146,.36);background:0 0;-webkit-border-radius:60px;-moz-border-radius:60px;border-radius:60px;height:50px;width:50px;-webkit-animation:introjspulse 3s ease-out;-moz-animation:introjspulse 3s ease-out;animation:introjspulse 3s ease-out;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;animation-iteration-count:infinite;top:-25px;left:-25px;z-index:1;opacity:0}@-webkit-keyframes introjspulse{0%{-webkit-transform:scale(0);opacity:0}25%{-webkit-transform:scale(0);opacity:.1}50%{-webkit-transform:scale(.1);opacity:.3}75%{-webkit-transform:scale(.5);opacity:.5}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes introjspulse{0%{-moz-transform:scale(0);opacity:0}25%{-moz-transform:scale(0);opacity:.1}50%{-moz-transform:scale(.1);opacity:.3}75%{-moz-transform:scale(.5);opacity:.5}100%{-moz-transform:scale(1);opacity:0}}@keyframes introjspulse{0%{transform:scale(0);opacity:0}25%{transform:scale(0);opacity:.1}50%{transform:scale(.1);opacity:.3}75%{transform:scale(.5);opacity:.5}100%{transform:scale(1);opacity:0}}.gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";filter:alpha(opacity=20)}.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:hsla(0,0%,100%,.9);background:linear-gradient(to bottom right,#fff,hsla(0,0%,100%,.8));border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.2);text-shadow:none}.awesomplete>ul:empty{display:none}@supports (transform:scale(0)){.awesomplete>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.awesomplete>ul:empty,.awesomplete>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.awesomplete>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.awesomplete>ul>li{position:relative;padding:.2em .5em;cursor:pointer}.awesomplete>ul>li:hover{background:#b7d2e0;color:#000}.awesomplete>ul>li[aria-selected=true]{background:#3d6c8e;color:#fff}.awesomplete mark{background:#e9ff00}.awesomplete li:hover mark{background:#b5d100}.awesomplete li[aria-selected=true] mark{background:#3c6b00;color:inherit}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}.project-values-title,h1{text-transform:uppercase}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ + */.pika-single{display:block;position:relative;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.medium-editor-anchor-preview,.medium-editor-toolbar{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;top:0;z-index:2000}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}@-webkit-keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}@keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}.medium-editor-anchor-preview{left:0;line-height:1.4;max-width:280px;position:absolute;text-align:center;word-break:break-all;word-wrap:break-word;visibility:hidden}.medium-editor-anchor-preview a{color:#fff;display:inline-block;margin:5px 5px 10px}.medium-editor-placeholder-relative:after,.medium-editor-placeholder:after{content:attr(data-placeholder)!important;padding:inherit;margin:inherit;white-space:pre;font-style:italic}.medium-editor-anchor-preview-active{visibility:visible}.medium-editor-dragover{background:#ddd}.medium-editor-image-loading{-webkit-animation:medium-editor-image-loading 1s infinite ease-in-out;animation:medium-editor-image-loading 1s infinite ease-in-out;background-color:#333;border-radius:100%;display:inline-block;height:40px;width:40px}.medium-editor-placeholder{position:relative}.medium-editor-placeholder:after{position:absolute;left:0;top:0}.medium-editor-placeholder-relative,.medium-editor-placeholder-relative:after{position:relative}.medium-toolbar-arrow-over:before,.medium-toolbar-arrow-under:after{border-style:solid;content:'';display:block;height:0;left:50%;margin-left:-8px;position:absolute;width:0}.medium-toolbar-arrow-under:after{border-width:8px 8px 0}.medium-toolbar-arrow-over:before{border-width:0 8px 8px}.medium-editor-toolbar{left:0;position:absolute;visibility:hidden}.medium-editor-toolbar ul{margin:0;padding:0}.medium-editor-toolbar li{float:left;list-style:none;margin:0;padding:0}.medium-editor-toolbar li button{box-sizing:border-box;cursor:pointer;display:block;font-size:14px;line-height:1.33;margin:0;padding:15px;text-decoration:none}.medium-editor-toolbar li button:focus{outline:0}.medium-editor-toolbar li .medium-editor-action-underline{text-decoration:underline}.medium-editor-toolbar li .medium-editor-action-pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-weight:100;padding:15px 0}.medium-editor-toolbar-active{visibility:visible}.belong-to-epic-text-wrapper .remove-epic-relationship svg,.colors-table .gu-transit *{visibility:hidden}.medium-editor-sticky-toolbar{position:fixed;top:1px}.master,.medium-editor-relative-toolbar{position:relative}.medium-editor-toolbar-active.medium-editor-stalker-toolbar{-webkit-animation:medium-editor-pop-upwards 160ms forwards linear;animation:medium-editor-pop-upwards 160ms forwards linear}.medium-editor-action-bold{font-weight:bolder}.medium-editor-action-italic{font-style:italic}.medium-editor-toolbar-form{display:none}.medium-editor-toolbar-form a,.medium-editor-toolbar-form input{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.medium-editor-toolbar-form .medium-editor-toolbar-form-row{line-height:14px;margin-left:5px;padding-bottom:5px}.medium-editor-toolbar-form .medium-editor-toolbar-input,.medium-editor-toolbar-form label{border:none;box-sizing:border-box;font-size:14px;margin:0;padding:6px;width:316px;display:inline-block}body,html{width:100%}.medium-editor-toolbar-form .medium-editor-toolbar-input:focus,.medium-editor-toolbar-form label:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;box-shadow:none;outline:0}.medium-editor-toolbar-form a{display:inline-block;font-size:24px;font-weight:bolder;margin:0 10px;text-decoration:none}.medium-editor-toolbar-form-active{display:block}.medium-editor-toolbar-actions:after{clear:both;content:"";display:table}.medium-editor-element{word-wrap:break-word;min-height:30px}.master,body,html{min-height:100%}.medium-editor-element img{max-width:100%}.medium-editor-element sub{vertical-align:sub}.medium-editor-element sup{vertical-align:super}.medium-editor-hidden{display:none}.medium-toolbar-arrow-under:after{border-color:#242424 transparent transparent;top:50px}.medium-toolbar-arrow-over:before{border-color:transparent transparent #242424;top:-8px}.medium-editor-toolbar{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.75));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.75));border:1px solid #000;border-radius:5px;box-shadow:0 0 3px #000}.medium-editor-toolbar li button{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.89));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.89));border:0;border-right:1px solid #000;border-left:1px solid #333;border-left:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px rgba(0,0,0,.3);color:#fff;height:50px;min-width:50px;-webkit-transition:background-color .2s ease-in;transition:background-color .2s ease-in}.medium-editor-toolbar li button:hover{background-color:#000;color:#ff0}.medium-editor-toolbar li .medium-editor-button-first{border-bottom-left-radius:5px;border-top-left-radius:5px}.medium-editor-toolbar li .medium-editor-button-last{border-bottom-right-radius:5px;border-top-right-radius:5px}.medium-editor-toolbar li .medium-editor-button-active{background-color:#000;background:-webkit-linear-gradient(top,#242424,rgba(0,0,0,.89));background:linear-gradient(to bottom,#242424,rgba(0,0,0,.89))}.medium-editor-toolbar-form{background:#242424;border-radius:5px;color:#999}.medium-editor-toolbar-form .medium-editor-toolbar-input{background:#242424;box-sizing:border-box;color:#ccc;height:50px}.medium-editor-toolbar-form a{color:#fff}.medium-editor-toolbar-anchor-preview{background:#242424;border-radius:5px;color:#fff}.medium-editor-placeholder:after{color:#b3b3b1}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}.loader-active,body.loading-project,h1 .date,h1 span{overflow:hidden}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.prism-token.prism-cdata,.prism-token.prism-comment,.prism-token.prism-doctype,.prism-token.prism-prolog{color:#708090}.prism-token.prism-punctuation{color:#f8f8f2}.prism-namespace{opacity:.7}.prism-token.prism-constant,.prism-token.prism-deleted,.prism-token.prism-property,.prism-token.prism-symbol,.prism-token.prism-tag{color:#f92672}.prism-token.prism-boolean,.prism-token.prism-number{color:#ae81ff}.prism-token.prism-attr-name,.prism-token.prism-builtin,.prism-token.prism-char,.prism-token.prism-inserted,.prism-token.prism-selector,.prism-token.prism-string{color:#a6e22e}.prism-language-css .prism-token.prism-string,.prism-style .prism-token.prism-string,.prism-token.prism-entity,.prism-token.prism-operator,.prism-token.prism-url,.prism-token.prism-variable{color:#f8f8f2}.prism-token.prism-atrule,.prism-token.prism-attr-value,.prism-token.prism-class-name,.prism-token.prism-function{color:#e6db74}.prism-token.prism-keyword{color:#66d9ef}.prism-token.prism-important,.prism-token.prism-regex{color:#fd971f}.prism-token.prism-bold,.prism-token.prism-important{font-weight:700}.prism-token.prism-italic{font-style:italic}.prism-token.prism-entity{cursor:help}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}h1,p{line-height:1.5}.wysiwyg dl dt,.wysiwyg i,em{font-style:italic}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}*{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.3}body .master.ng-animate{transition:0}.drag-active{overflow-x:hidden}.master{height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-ms-flexbox;display:flex;height:100%}.menu-secondary{-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions header{-ms-flex:1;flex:1}.header-with-actions .action-buttons{-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;float:right;margin-left:10px}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.ttf) format("truetype")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.ttf) format("truetype")}@font-face{font-family:OpenSans-Regular;src:url(../fonts/OpenSans-Regular.ttf) format("truetype")}@font-face{font-family:OpenSans-Semibold;src:url(../fonts/OpenSans-Semibold.ttf) format("truetype")}@font-face{font-family:taiga;font-style:normal;font-weight:400;src:url(../fonts/taiga.eot);src:url(../fonts/taiga.eot?) format("eot"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:1rem}h1 span,h2{font-size:1.6rem}h1 span{margin-right:.5rem;vertical-align:bottom;white-space:nowrap}h1 span.green,h1 span:last-child{-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#3f51b5;fill:#3f51b5}h1 .date{display:inline-block;max-width:500px;white-space:nowrap;word-wrap:normal;color:#BDBDBD}h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.2;margin-bottom:1rem}p img{margin:0}small{font-size:1rem}strong{font-weight:700}hr{border:solid #212121;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{transition:color .3s linear}@keyframes loading{0%{filter:blur(5px);opacity:0}100%{filter:blur(0);opacity:1}}@keyframes rotate{50%{filter:invert(1);transform:rotate(360deg)}}@keyframes formSlide{0%{filter:blur(5px);opacity:0;transform:translateY(10rem)}50%{filter:blur(0)}100%{opacity:1;transform:translateY(0)}}.ticket-assigned-to .user-avatar.is-iocaine img,.ticket-assigned-users .user-avatar.is-iocaine img{filter:hue-rotate(150deg) saturate(200%)}@keyframes loadBar{0%,20%{-ms-flex:1;flex:1}10%{-ms-flex:10;flex:10}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-.25rem)}60%{opacity:1}100%{transform:translateY(0)}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{font-size:.9rem;display:block}blockquote cite::before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}.card-task,.main-nav,.wysiwyg .list-stye-none{list-style:none}sup{font-size:.9rem;vertical-align:super}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}svg{height:1rem;width:1rem}.pika-single{min-width:240px;width:auto;z-index:999999}.pika-single .pika-title{color:#424242}.pika-single .is-selected .pika-button{background:#3f51b5;border-radius:0!important;box-shadow:inset 0 1px 3px #3f51b5}.pika-single .is-today .pika-button{color:#3f51b5}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#8c9eff!important;border-radius:0!important;box-shadow:inset 0 1px 3px #8c9eff!important}div.awesomplete>ul,div.awesomplete>ul::before{background:rgba(0,0,0,.95)}.spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:2rem;max-width:2rem}.capslock.ng-enter,.capslock.ng-leave{animation:dropdownFade .2s ease-in}div.awesomplete input{display:inline-block}div.awesomplete>ul{color:#8c9eff;top:2.25rem;transition:all .2s ease}div.awesomplete>ul[hidden]{position:absolute;top:1.5rem;transform:scale(1)}div.awesomplete li:hover mark,div.awesomplete mark,div.awesomplete>ul>li:hover{background:#8c9eff;color:#000}fieldset{border:0;margin:0;padding:0;position:relative;width:100%}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{transition:border .3s linear}button,button:active,button:focus{border:0;outline:0}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.capslock.ng-leave{animation-direction:reverse}.capslock .icon-capslock{bottom:.8rem;fill:#757575;height:.9rem;position:absolute;right:1rem;width:.9rem}.admin-membership .header-message{background:#929dd8;margin-top:1rem;padding:1rem}.admin-membership .header-message .no-more-membership{-ms-flex-align:center;align-items:center;color:#424242;display:-ms-flexbox;display:flex}.admin-membership .header-message .no-more-membership a,.admin-membership .header-message .no-more-membership strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-membership .header-message .no-more-membership p{color:#424242;-ms-flex-positive:1;flex-grow:1;margin:0;padding-left:2rem;padding-right:1rem}.admin-membership .limit-users-warning{font-size:.9rem;color:#3f51b5;margin-right:1rem}.admin-membership .check input{height:40px;width:85px}.add-tag-container{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:.5rem 0;padding:1rem}.add-tag-container .color-column{cursor:pointer;-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative}.add-tag-container .tag-name{-ms-flex-preferred-size:80%;flex-basis:80%;margin-right:1rem}.add-tag-container .options-column{display:-ms-flexbox;display:flex}.add-tag-container .options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.add-tag-container .current-color.empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative}.add-tag-container .current-color.empty-color:after,.add-tag-container .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.add-tag-container .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.add-tag-container .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.add-tag-container input[type=text]{background:#fff}.add-tag-container .icon.icon-close,.add-tag-container .icon.icon-save{opacity:1}.tags-table .table-tags-editor input[type=text]{background-color:transparent;border:0;border-bottom:1px solid transparent;box-shadow:none;transition:border-bottom .2s linear}.tags-table .table-tags-editor input[type=text]:focus{border-bottom:1px solid #757575;outline:0}.tags-table .table-tags-editor .row.header-tag-row{cursor:default;padding-left:1rem}.tags-table .color-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;padding:0 10px;position:relative}.tags-table .color-filter:hover input{border-bottom:1px solid #EEE}.tags-table .color-filter input{padding:0}.tags-table .color-filter label{cursor:pointer}.tags-table .row.tag-row{margin:.3rem 0;padding:.7rem}.tags-table .row.tag-row:hover{cursor:default}.tags-table .row .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mix-tags{position:relative}.tags-table .mix-tags .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#212121;bottom:2rem;color:#fff;display:none;list-style-type:none;margin:0;padding:10px;position:absolute;right:-85%;width:120px;z-index:99;text-align:"center"}.tags-table .mix-tags .popover a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.tags-table .mix-tags .popover a:last-child{border:0}.tags-table .mix-tags .popover a:hover{color:#8c9eff;transition:color .3s linear}.tags-table .mix-tags .popover a:hover.point{color:#fff}.tags-table .mix-tags .popover:after{background:#212121;bottom:-5px;content:'';height:15px;left:50%;position:absolute;transform:rotate(45deg);width:1rem}.tags-table .mix-tags:hover .popover{display:block}.tags-table .mixing-options-column{text-align:right}.tags-table .mixing-options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mixing-tags-from,.tags-table .mixing-tags-to{background:rgba(255,255,255,.2)}.tags-table .mixing-confirm{margin:0 .5rem}.tags-table .mixing-help-text{font-size:.75rem;color:#1a237e;display:inline;padding-right:.5rem;text-align:center}@media (max-width:1280px){.tags-table .mixing-help-text{display:block;padding:.5rem}}.tags-table .current-color.empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative}.tags-table .current-color.empty-color:after,.tags-table .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.tags-table .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.tags-table .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(244,67,54,.7);position:absolute;width:100%}.admin-attributes .admin-attributes-section .admin-tags-section-wrapper-empty{color:#BDBDBD;padding:10vh 0 0;text-align:center}.admin-attributes .admin-attributes-section .loading-spinner{max-height:3rem;max-width:3rem}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.admin-roles p{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#BDBDBD}.auth .logo,.project-values-title h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.auth .logo,.auth .tagline{color:#fff;text-align:center}.project-values-title{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem}.project-values-title h2{font-size:1.2rem;margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(../images/bg.png) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;overflow-y:auto;position:fixed;right:0;top:0;z-index:999}.auth .auth-container{-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{text-align:center;width:100%}.auth .logo-svg svg{height:8rem;width:8rem}.auth .logo{font-size:3rem}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{margin-left:.5rem;padding-bottom:1rem}.auth .login-text a,.auth .register-text a{text-decoration:underline}.auth .login-text a:hover,.auth .register-text a:hover{color:#8c9eff}.auth .register-terms{margin:.5rem 0 .75rem}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{animation-duration:5s;animation-iteration-count:infinite;animation-name:moustache;animation-timing-function:ease-in-out;fill:rgba(63,81,181,.9);stroke:#8c9eff;stroke-width:1px;transform-origin:50% 50%;transition:.3s}.moustache:hover{fill:rgba(140,158,255,.9);transition:.3s}@keyframes moustache{0%,30%,70%,90%{transform:rotate(0)}10%{transform:rotate(-10deg)}80%{transform:rotate(10deg)}}.backlog-filter{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;opacity:0;overflow:hidden;position:relative;transition:all .2s linear;width:0}.backlog-filter tg-filter{transform:translateX(-260px);transition:all .2s linear}.backlog-filter.active tg-filter,.issues tg-filter{transform:translateX(0)}.backlog-filter.active{opacity:1;transition:all .2s linear;width:260px}.backlog-menu{background:#f5f5f5;color:#212121;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .menu-button.move-to-sprint,.multiple-drag-mirror.us-item-row .icon-drag,.multiple-drag-mirror.us-item-row .points,.multiple-drag-mirror.us-item-row .status,.multiple-drag-mirror.us-item-row .tags-block,.multiple-drag-mirror.us-item-row .us-settings,.multiple-drag-mirror.us-item-row .votes,.multiple-drag-mirror.us-item-row input{display:none}@media (max-width:1280px){.backlog-menu{-ms-flex-direction:column;flex-direction:column}}.backlog-menu .menu-button .icon-move{margin-right:.25rem}.backlog-menu .button-bulk{margin-left:.2rem}.multiple-drag-mirror.us-item-row{background:#fff;border-radius:4px;box-shadow:2px 2px 5px #757575;min-height:calc(40px + 1rem);opacity:.9;padding:1rem}.multiple-drag-mirror.us-item-row.is-checked,.multiple-drag-mirror.us-item-row:hover{background:#fff}.forecasting-add-sprint{font-size:.9rem;background:#f5f5f5;cursor:pointer;padding:.5rem 0;text-align:center}.invitation-main .avatar .person-name,.invitation-main .invitation-text{font-size:1.2rem;color:#fff;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.forecasting-add-sprint:hover{background:#ededed;transition:background .2s}.forecasting-add-sprint .icon-add{width:1.75rem;height:1.75rem;background:#8c9eff;fill:#fff;margin-right:1rem;padding:.25rem;vertical-align:middle}.invitation-main{background:url(../images/invitation_bg.jpg) center center no-repeat;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background-size:cover;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;height:100vh;-ms-flex-pack:center;justify-content:center;z-index:999}.kanban,.taskboard{height:calc(100vh - 40px)}.invitation-main .invitation-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.error-main h1,.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{font-size:.9rem;color:#BDBDBD;opacity:1;position:absolute;right:1rem;top:.5rem;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#424242;transition:color .3s linear}.invitation-main .login-form,.invitation-main .register-form{-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff}.invitation-main .register-text{color:#fff;font-size:.9rem;margin-left:.5rem;padding-bottom:1rem;text-align:left}.invitation-main .register-text a{color:#3f51b5}.invitation-main .button-auth{display:block}.invitation-main .button-blackish:hover{background:#3f51b5}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.invitation-main .public-register-disabled{width:400px}.invitation-main .public-register-disabled .login-form{border-right:0}.invitation-main .contrib-plugins-wrapper label{color:#EEE}.issues .filters-bar{position:relative;width:260px}.kanban{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px);position:relative}.kanban header{min-height:70px}.kanban .kanban-settings{float:right}.kanban .burndown-container{display:none}.kanban .zoom-loading img{display:block;margin-right:1rem}.kanban-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.kanban-header .options{display:-ms-flexbox;display:flex}.taskboard-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.error-main{background:url(../images/invitation_bg.jpg) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.duty-content,.taskboard{position:relative}.error-main .error-container{color:#fff;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff}.error-main a{color:#8c9eff}.rtl .navbar .nav-right{margin:0}.rtl .navbar .nav-right .user-avatar{padding-left:0;padding-right:2em;text-align:left}.rtl .navbar .nav-right img{margin-left:0;margin-right:.5rem}.rtl .main-nav li:hover .helper{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav li:hover .helper::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav .backlog-sprints-menu::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu a{text-align:right}.rtl .admin-menu li a{padding:1rem 1rem 1rem 0}.rtl h1 span{margin-left:.5rem;margin-right:0}.rtl blockquote{border-left:0;border-right:5px solid #f5f5f5}.rtl .single-filter .name,.rtl .tag{border-color:transparent;border-width:0 3px 0 0}.rtl .tag{border-radius:5px 0 0 5px;margin:0 0 .5rem .5rem}.rtl .tag .icon-close{margin-left:0;margin-right:.25rem}.rtl .home-wrapper .working-on-container{margin-left:1rem;margin-right:0}.rtl .home-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .home-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .contact-team-large .icon-mail{margin-left:.5rem;margin-right:0}.rtl .user-profile .project-details-image{margin-left:2rem;margin-right:0}.rtl .profile-timeline .activity-item .profile-contact-picture,.rtl .profile-timeline .activity-item .profile-member-picture,.rtl .single-project .project-logo{margin-left:1rem;margin-right:0}.rtl .profile-timeline .activity-item{padding:1rem 0 1rem .5rem}.rtl .profile-timeline .activity-item .activity-date{left:.5rem;right:auto}.rtl .profile-timeline .activity-item .activity-info{margin-left:130px;margin-right:0}.rtl .profile-timeline .activity-item blockquote{margin-left:0;margin-right:calc(35px + 1rem)}.rtl .profile-timeline .single-attachment .icon{margin-left:.5rem;margin-right:0}.rtl .project-data .involved-team li{margin-left:.13rem;margin-right:0}.rtl .project-details-form-data .actions .delete-account{text-align:left}.rtl .backlog-table-body .backlog-table-title .user-stories,.rtl .backlog-table-body .row .user-stories,.rtl .backlog-table-body .user-story-name a,.rtl .backlog-table-header .backlog-table-title .user-stories,.rtl .backlog-table-header .row .user-stories,.rtl .issues-table .assigned-field,.rtl .issues-table .issue-field,.rtl .issues-table .modified-field,.rtl .issues-table .subject a,.rtl .sprints .sprint-table .column-us{text-align:right}.rtl .project-data .timeline{margin-left:1rem;margin-right:0}.rtl .track-icon{margin-left:.5rem;margin-right:0}.rtl .watch-options-arrow{margin-left:0;margin-right:auto}.rtl .ticket-estimation .ticket-role-points .icon-arrow-down{margin-left:0;margin-right:.25rem}.rtl .ticket-watch .ticket-watch-button,.rtl .ticket-watch svg{margin-left:.25rem;margin-right:0}.rtl .related-tasks-body .task-assignedto .icon{left:.5rem;right:0}.rtl .related-tasks-body .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .related-tasks-body .task-name{margin-left:1rem;margin-right:0}.rtl .related-tasks-body .task-name span{margin-left:.25rem;margin-right:0}.rtl tg-filter .search-action{left:.7rem;right:auto}.rtl .kanban tg-filter,.rtl .taskboard tg-filter{left:auto;right:0;transform:translateX(260px)}.rtl .kanban tg-filter.open,.rtl .taskboard tg-filter.open{transform:translateX(0)}.rtl .category-config .icon,.rtl .icon-arrow-left,.rtl .icon-arrow-right{transform:scaleX(-1)}.rtl .issues-options .button-bulk{margin-left:0;margin-right:.2rem}.rtl .issues-table .assigned-field .icon,.rtl .issues-table .issue-field .icon,.rtl .issues-table .modified-field .icon{margin-left:0;margin-right:.25rem}.rtl .issues-table .pop-status{left:auto;right:0}.rtl .issues-table .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .highlighted .header svg,.rtl .issues-table .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .issues-table .subject{padding-left:1rem;padding-right:0}.rtl .issues-table .issue-assignedto .icon{left:0;right:auto}.rtl .single-filter{padding-left:.5rem;padding-right:0}.rtl .single-filter .number{left:0;right:auto}.rtl .single-filter .name{border-style:solid}.rtl .discover-header .search-button{left:1rem;right:auto}.rtl .highlighted .header svg.icon-activity,.rtl .highlighted .header svg.icon-like{margin-left:.5rem;margin-right:0}.rtl .highlighted tg-most-liked{margin-left:8%;margin-right:0}.rtl .highlighted-project .statistic{margin-left:.5rem;margin-right:0}.rtl .highlighted-project .project-statistics svg{margin-left:.25rem;margin-right:0}.rtl .highlighted-project .project-logo{margin-left:1rem;margin-right:0}.rtl .featured-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .featured-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .project-list-wrapper .project-list{margin-left:2rem;margin-right:0}.rtl .project-list-wrapper .list-itemtype-project .list-itemtype-project-image{margin-left:1rem;margin-right:0}.rtl .create-project-selector-question{left:1.5rem;right:auto}.rtl .create-project-title-wrapper .icon{margin-left:.5rem;margin-right:0}.rtl .create-project-privacity label .icon{margin-left:.25rem;margin-right:0}.rtl .create-project-action-submit{margin-left:0;margin-right:1rem}.rtl .summary-progress-bar{margin-left:10px;margin-right:0}.rtl .empty-burndown svg{margin-left:2rem;margin-right:0}.rtl .backlog-menu .button-bulk{margin-left:0;margin-right:.2rem}.rtl .ticket-header .detail-status{margin-left:0;margin-right:.25rem}.rtl .ticket-status .level-name{float:left}.rtl .ticket-status .level{margin-left:.5rem;margin-right:0}.rtl .ticket-data-container .icon{margin-left:0;margin-right:.25rem}.rtl .ticket-assigned-to .assigned-to{margin-left:0;margin-right:.5rem}.rtl .user-list-avatar{margin-left:.25rem;margin-right:0}.rtl .user-list-name{margin-left:0;margin-right:.5rem}.rtl .assigned-to-list .user-list-multiple .remove-assigned-to,.rtl .assigned-to-list .user-list-single .remove-assigned-to,.rtl .ticket-assigned-to .remove-user,.rtl .ticket-assigned-users .remove-user,.rtl .ticket-watchers .delete-watcher{left:.5rem;right:auto}.rtl .lightbox .close{left:3rem;right:auto}.rtl .activity .activity-avatar,.rtl .comment .comment-avatar{margin-left:1.5rem;margin-right:0}.rtl .comment .comment-creator{margin-left:.5rem;margin-right:0}.rtl tg-wysiwyg .tools{padding-left:0;padding-right:1rem}.rtl .add-tag-button .icon-add{margin:.5rem 0 0 .25rem}.rtl .add-tag-input .save{margin:.5rem .5rem 0 0}.rtl .issue-nav{left:1rem;right:auto}.rtl .upvote-btn{margin-left:.3rem;margin-right:0}.rtl .taskboard-table-header .taskboard-table-inner{margin-left:1rem}.rtl .taskboard-table-header .task-colum-name{margin:0 0 0 5px}.rtl .kanban-table-header{margin-left:-3.7rem}.rtl .kanban-table-body .task-column,.rtl .kanban-table-header .task-colum-name,.rtl .taskboard-table-body .task-column{margin:0 0 0 5px}.rtl .kanban-table-body .task-column:last-child,.rtl .taskboard-table-body .task-column:last-child{margin-left:0;margin-right:initial}.rtl .backlog-table-body .votes svg{margin-left:.25rem;margin-right:0}.rtl .backlog-table-header .backlog-table-title{padding-left:1rem;padding-right:0}.rtl .backlog-table-body .backlog-table-title .status,.rtl .backlog-table-body .row .status,.rtl .backlog-table-header .backlog-table-title .status,.rtl .backlog-table-header .row .status{-ms-flex-preferred-size:150px;flex-basis:150px;text-align:right}.rtl .backlog-table-body .points .icon,.rtl .backlog-table-body .status .icon,.rtl .backlog-table-header .points .icon,.rtl .backlog-table-header .status .icon{margin-left:0;margin-right:.2rem}.rtl .sprints .sprint-table .column-points,.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .created-by .created-title{text-align:left}.rtl .sprints .sprint .edit-sprint{left:0;margin-left:.5rem;margin-right:0;right:auto}.rtl .epic-row .progress-bar,.rtl .epic-row .progress-status{left:auto;right:0}.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem}.rtl tg-wysiwyg .markdown-editor-placeholder,.rtl tg-wysiwyg .medium-editor-placeholder{padding-left:0;padding-right:1rem;text-align:right}.rtl .attachments-header button{margin-left:.2rem;margin-right:0}.rtl .attachments-header label{margin-left:0;margin-right:.25rem}.rtl .attachment-list .attachment-comments,.rtl .attachment-list .editable-attachment-comment{margin-left:.5rem;margin-right:0}.rtl .attachment-list .editable-attachment-deprecated input{margin-left:.2rem;margin-right:0}.rtl .more-attachments .more-attachments-num{margin-left:0;margin-right:.5rem}.rtl .single-attachment .attachment-name{padding-left:1rem;padding-right:0}.rtl .single-attachment .attachment-name svg{margin-left:.25rem;margin-right:0}.rtl .wiki-nav .add-button svg{margin-left:.5rem;margin-right:0}.rtl .wiki-pages-table .created-field,.rtl .wiki-pages-table .creator-field,.rtl .wiki-pages-table .last-modifier-field,.rtl .wiki-pages-table .modified-field,.rtl .wiki-pages-table .title-field{text-align:right}.rtl .wiki-summary div{margin-left:1.25rem;margin-right:0}.rtl .summary .number{margin-left:.3rem;margin-right:0}.rtl .summary .stats{margin-left:initial;margin-right:auto}.rtl .table-team .avatar .avatar-data{margin-left:0;margin-right:1rem;text-align:right}.rtl .table-team .leave-project .icon{margin-left:.2rem;margin-right:0}.rtl .belong-to-epic-text-wrapper{margin-left:1rem;margin-right:0}.rtl .epics-table-options-wrapper{left:.5rem;right:auto}.rtl .epics-table-dropdown{left:0;right:auto}.rtl .epic-row .icon-upvote,.rtl .story-row .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .story-row{margin-left:0;margin-right:4rem}.rtl .epic-row .icon-arrow-down{margin-left:0;margin-right:.1rem}.rtl .epic-header-container .color-selector{margin-left:.5rem;margin-right:0}.rtl .related-userstories-header .related-userstories-title{margin-left:0;margin-right:1rem}.rtl tg-related-userstory-row .userstory-name{margin-left:1rem;margin-right:0}.rtl tg-related-userstory-row .userstory-name span{margin-left:0;margin-right:.25rem}.rtl tg-related-userstory-row .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .card-owner-actions .icon{margin-left:.25rem;margin-right:0}.rtl .card-owner img{margin-left:.5rem;margin-right:0}.rtl .card-owner .card-owner-avatar img{margin-left:.45rem;margin-right:0}.rtl .card-statistics .statistic{margin-left:.5rem;margin-right:.5rem}.rtl .card-statistics .icon{margin-left:.2rem;margin-right:0}.rtl .lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-left:.5rem;margin-right:0}.rtl .lightbox-create-related-user-stories .new-user-story-options{margin-left:0;margin-right:auto}.rtl .lightbox-generic-form .settings fieldset{margin-left:.5rem;margin-right:0}.rtl .ticket-estimation .popover{left:auto;right:.5rem}.rtl .ticket-estimation .popover::after{left:auto;right:10px}.rtl .profile .timeline-wrapper{margin-left:3.5rem;margin-right:0}.rtl .profile .profile-bar{margin-left:1rem;margin-right:0}.rtl .profile-content-tabs .icon{margin-left:.5rem;margin-right:0}.rtl .profile-sidebar h4 .icon{margin-left:.3rem;margin-right:auto}.rtl .profile-filter .searchbox input{margin-left:1rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-project-image,.rtl .list-itemtype-project .list-itemtype-track .list-itemtype-track-likers,.rtl .list-itemtype-ticket .list-itemtype-avatar,.rtl .list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers,.rtl .profile-filter .searchbox .icon-search{margin-left:.5rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-track-likers .icon,.rtl .list-itemtype-project .list-itemtype-track-watchers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-likers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-watchers .icon{margin-left:.25rem;margin-right:0}.rtl .list-itemtype-ticket.blocked-project .icon-blocked-project{margin-left:0;margin-right:.25rem}.rtl .list-itemtype-ticket .list-itemtype-ticket-data{margin-left:1rem;margin-right:0}.rtl .list-itemtype-user .list-itemtype-avatar{margin-left:.75rem;margin-right:0}.rtl .admin-submenu ul a{padding:1rem 1rem 1rem 0}.rtl .admin-functionalities .module-desc{margin:0 0 0 2rem}.rtl .admin-functionalities .module-icon{margin:0 0 0 .5rem}.rtl .project-details .project-details-image{margin-left:2rem;margin-right:0}.rtl .admin-project-profile-owner-actions .owner-info{padding-left:0;padding-right:.5rem}.rtl .admin-roles .general-category .check{margin-left:0;margin-right:.5rem}.rtl .help-button svg,.rtl .project-details .private-or-public svg{margin-left:.5rem;margin-right:0}.rtl .project-csv .option-wrapper{border-left:1px solid #BDBDBD;border-radius:5px 0 0 5px;border-right:0}.rtl .colors-table .table-header .row{padding-left:0;padding-right:50px}.rtl .basic-table .row{text-align:right}.rtl .admin-membership-table .avatar img{margin:0 .3rem 0 .5rem}.rtl .admin-membership-table .row-role{padding-left:1rem;padding-right:0}.rtl .project-details .get-feedback-inner .check,.rtl .project-details .looking-for-people-selector .check{margin-left:0;margin-right:auto}.rtl .check input{left:auto;right:-10px}.rtl .check input:checked+div{margin-left:0;margin-right:50%}.rtl .check input:checked~.check-yes{left:.3rem;right:auto}.rtl .check input~.check-no{left:auto;right:.375rem}.rtl .notification-message-success{left:-370px;right:auto}.rtl .notification-message-success.active{animation:animSlideRTL 2s}.rtl .notification-message-success.inactive{animation:animSlideOutRTL .5s}@keyframes animSlideRTL{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}4.1%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,232.117,0,0,1)}8.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,357.804,0,0,1)}12.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,407.374,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,417.342,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,399.585,0,0,1)}60.56%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400.01,0,0,1)}100%,82.78%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400,0,0,1)}}@keyframes animSlideOutRTL{100%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}0%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}}.taskboard{overflow:hidden}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.taskboard .zoom-loading img{display:block;margin-right:1rem}.taskboard-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.taskboard-inner{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden}.team h2{margin:1rem 0}.team h2 span:last-child{color:#3f51b5}.us-story-main-data{margin-bottom:1rem}.us-story-main-data header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.subheader{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:1280px){.subheader{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}}.subheader .ticket-created-by{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-negative:0;flex-shrink:0}@media (max-width:1280px){.subheader .ticket-created-by{-ms-flex-preferred-size:auto;flex-basis:auto;-ms-flex-order:1;order:1}}.subheader .tags-block{-ms-flex:1;flex:1}@media (max-width:1280px){.subheader .tags-block{-ms-flex-order:2;order:2}}.subheader .tags-block .tag{border-color:transparent;border-style:solid}.duty-content .in-progress{cursor:progress}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#424242}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#BDBDBD}.duty-content .markdown{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;transition:opacity .2s linear}.duty-content .save-container .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:1.5rem;max-width:1.5rem}.duty-content .edit{cursor:pointer;fill:#757575}.duty-content .view-description .edit{background:#f5f5f5;height:2rem;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;transition:all .2s linear;width:2rem}.duty-content .edit-description{margin-bottom:2rem}.duty-content .edit-description .save{cursor:pointer;display:inline-block;position:relative;top:.3rem}.duty-content .edit-description .edit{display:inline-block;position:absolute;right:2.5rem;top:.4rem;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.save-wiki{float:right}.wiki{max-width:1024px}.wiki .wysiwyg{margin-bottom:0}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e4e4;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:.3rem 0;text-align:left;width:100%}@media (max-width:767px){.basic-table .row{-ms-flex-direction:column;flex-direction:column}}.basic-table .row .width-1{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.button,.button-auth,.button-blackish,.button-bulk,.button-filter,.button-gray,.button-green,.button-red,.button-tribe,.menu-button,.trans-button,a.button-gray,a.button-green{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0;border:0;border-radius:3px;color:#fff;cursor:pointer;display:inline-block;padding:.6rem 2rem;text-align:center;text-transform:uppercase;transition:all .2s linear;vertical-align:middle}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-filter:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button-tribe:hover,.button:hover,.menu-button:hover,.trans-button:hover{color:#fff;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-filter:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button-tribe:visited,.button:visited,.menu-button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-filter span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.button-tribe span,.loading.menu-button span,.loading.trans-button span{animation:loading .5s linear}.button .icon,.button span,.button-auth .icon,.button-auth span,.button-blackish .icon,.button-blackish span,.button-bulk .icon,.button-bulk span,.button-filter .icon,.button-filter span,.button-gray .icon,.button-gray span,.button-green .icon,.button-green span,.button-red .icon,.button-red span,.button-tribe .icon,.button-tribe span,.menu-button .icon,.menu-button span,.trans-button .icon,.trans-button span{color:#fff}.button.disabled,.button[disabled],.disabled.button-auth,.disabled.button-blackish,.disabled.button-bulk,.disabled.button-filter,.disabled.button-gray,.disabled.button-green,.disabled.button-red,.disabled.button-tribe,.disabled.menu-button,.disabled.trans-button,[disabled].button-auth,[disabled].button-blackish,[disabled].button-bulk,[disabled].button-filter,[disabled].button-gray,[disabled].button-green,[disabled].button-red,[disabled].button-tribe,[disabled].menu-button,[disabled].trans-button{background:#f5f5f5;box-shadow:none;color:#BDBDBD;cursor:not-allowed;opacity:.65}.button.disabled:hover,.button[disabled]:hover,.disabled.button-auth:hover,.disabled.button-blackish:hover,.disabled.button-bulk:hover,.disabled.button-filter:hover,.disabled.button-gray:hover,.disabled.button-green:hover,.disabled.button-red:hover,.disabled.button-tribe:hover,.disabled.menu-button:hover,.disabled.trans-button:hover,[disabled].button-auth:hover,[disabled].button-blackish:hover,[disabled].button-bulk:hover,[disabled].button-filter:hover,[disabled].button-gray:hover,[disabled].button-green:hover,[disabled].button-red:hover,[disabled].button-tribe:hover,[disabled].menu-button:hover,[disabled].trans-button:hover{background:#f5f5f5;color:#BDBDBD}.menu-button,.trans-button:visited{color:#212121}.trans-button .icon,.trans-button span{color:#212121;transition:color .2s linear}.trans-button .icon{margin-right:.5rem}.menu-button{border-radius:0}.menu-button:hover{background:#EEE;color:#757575}.menu-button span,.menu-button:visited{color:#212121}.submit-button{width:100%}.button-green,a.button-green{background:#3f51b5}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#8c9eff;color:#fff}.button-gray,a.button-gray{background:#757575}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#8c9eff;color:#fff}.button-blackish{background:#212121;color:#EEE}.button-blackish:hover{background:#212121;color:#fff}.button-red{background:#ff5252}.button-red:hover{background:#f44336;color:#fff}.button-red .icon{color:#fff}.button-bulk{background:#3f51b5;padding:.55rem .75rem}.button-bulk .icon{fill:currentColor;margin-right:0;position:relative;top:1px}.button-bulk:hover{background:#8c9eff}.button-auth{background:#424242}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.button-tribe{-ms-flex-align:center;align-items:center;background:#107a8a;display:-ms-flexbox;display:flex;padding:.4rem .4rem .4rem 1.5rem}.button-tribe.active,.button-tribe:hover{background:#0b525c;color:#fff}.button-tribe .tribe-logo{margin-right:.5rem;width:1.5rem}.tribe-more-info{font-size:.9rem;color:#3f51b5;display:inline-block;margin-top:.5rem}.button-filter{background:#EEE;margin-left:1rem;padding:.4rem .5rem;position:relative}.button-filter:hover{background:#BDBDBD;fill:#EEE}.button-filter .filter-num{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background:#f44336;border-radius:50%;height:1rem;left:-.5rem;position:absolute;top:-.5rem;width:1rem}.card-placeholder{background:#e9e9e9;border:1px dashed #dadada;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:-ms-flexbox;display:flex}.card-placeholder .image{background:#dadada;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-ms-flex:1;flex:1}.card-placeholder .line{background:#dadada;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;margin:0}.check{background-color:#d5d5d5;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:100px;z-index:999}.check input+div{background-color:#757575;height:25px;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#8c9eff;margin-left:50%;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.check input:disabled+div{background-color:#BDBDBD}.ticket-created-by{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end}@media (max-width:1280px){.ticket-created-by{-ms-flex-pack:start;justify-content:flex-start;margin-bottom:.5rem}}.ticket-created-by .user-avatar{-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-positive:0;flex-grow:0;margin-left:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575;display:block;text-align:right}@media (max-width:1280px){.ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem;-ms-flex-order:1;order:1}.ticket-created-by .created-by{-ms-flex-order:2;order:2}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{text-align:left}}.ticket-created-by .created-by .created-title{color:#3f51b5}.ticket-created-by .created-by .created-date{margin-left:.5rem}@media (max-width:1280px){.ticket-created-by .created-by .created-date{margin-left:0}}.doom-line{-ms-flex-align:center;align-items:center;background:#ff5252;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:.5rem 0;padding:.25rem 0}.doom-line span{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff}.drag-drop-help,.help-button,.help-markdown{font-size:.75rem}.wysiwyg-help{background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:-.5rem;padding:.45rem .5rem}.wysiwyg-help a{display:inline-block}.drag-drop-help{color:#757575}.help-button:hover span,.help-markdown:hover span{transition:color .2s linear}.help-button:hover .icon,.help-markdown:hover .icon{fill:#8c9eff;transition:fill .2s linear}.help-button span,.help-markdown span{vertical-align:text-top}.help-button .icon,.help-markdown .icon{width:.9rem;height:.9rem;fill:#BDBDBD;margin-right:.2rem}.empty-filter,.empty-large,.empty-small{margin-top:4rem;text-align:center}.empty-filter img,.empty-large img,.empty-small img{margin-bottom:1rem;width:100%}.empty-filter .title,.empty-large .title,.empty-small .title{font-size:1.2rem;text-transform:uppercase}.empty-filter p,.empty-large p,.empty-small p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.empty-filter a,.empty-large a,.empty-small a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#3f51b5}.empty-small img{max-width:175px}.empty-large img{max-width:800px}.empty-filter{margin-top:1rem}.ticket-estimation .points-per-role{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.ticket-estimation .ticket-role-points{background:rgba(189,189,189,.2);color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.1rem;min-height:2rem;padding:.5rem 1rem;position:relative}.ticket-estimation .ticket-role-points.clickable.active,.ticket-estimation .ticket-role-points.clickable:hover{background:rgba(140,158,255,.9);color:#EEE}.ticket-estimation .ticket-role-points.clickable.active .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable.active .points,.ticket-estimation .ticket-role-points.clickable.active .role,.ticket-estimation .ticket-role-points.clickable:hover .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable:hover .points,.ticket-estimation .ticket-role-points.clickable:hover .role{color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points:last-child{background:rgba(26,35,126,.5);border-bottom:0;color:#EEE}.ticket-estimation .ticket-role-points:last-child .icon-arrow-bottom,.ticket-estimation .ticket-role-points:last-child .points,.ticket-estimation .ticket-role-points:last-child .role{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points .icon-arrow-down{fill:currentColor;height:.6rem;margin-left:.25rem;width:.6rem}.ticket-estimation .popover.fix:after,.ticket-estimation .popover:after{height:10px;transform:rotate(45deg);content:''}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0;z-index:99;position:absolute;font-size:.9rem;list-style-type:none}.ticket-estimation .ticket-role-points .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#424242}.ticket-estimation .ticket-role-points .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .popover{background:#212121;color:#fff;display:none;left:.5rem;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#212121;left:10px;position:absolute;top:-5px;width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#8c9eff;color:#fff}.ticket-estimation .popover.fix{background:#212121;color:#fff;display:none;left:-160px;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover.fix a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#8c9eff;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#212121;left:90%;position:absolute;top:-5px;width:10px}.history-tabs{background:#EEE;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.history-tabs a{display:inline-block;padding:.75rem 1rem}.history-tabs a:hover{color:#3f51b5}.history-tabs .history-tab{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid transparent;color:#BDBDBD;transition:all .1s linear}.history-tabs .history-tab.active{border-bottom:3px solid #424242;color:#424242}.history-tabs .order-comments{color:#424242}.level{background-color:#BDBDBD;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project{border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{font-size:.9rem;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-project .list-itemtype-track-likers.active .icon,.list-itemtype-project .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-project .icon{fill:#BDBDBD}.list-itemtype-project h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-project p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .icon-blocked-project{width:.75rem;height:.75rem}.list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-project-data-wrapper .icon-private{fill:#BDBDBD;height:22px;margin-left:.5rem;padding-top:.5rem;width:22px}.list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;width:3rem}.list-itemtype-project .list-itemtype-project-image img{width:100%}.list-itemtype-project .list-itemtype-project-members{-ms-flex-item-align:end;align-self:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-ticket .list-itemtype-avatar img,.list-itemtype-user .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-project .tag{-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket,.list-itemtype-user{border-bottom:1px solid #EEE;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-ms-flexbox;display:flex;position:relative}.list-itemtype-ticket .list-itemtype-track{font-size:.9rem;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-ticket .ticket-id,.list-itemtype-ticket .ticket-project{color:#BDBDBD}.list-itemtype-ticket .list-itemtype-track-likers.active .icon,.list-itemtype-ticket .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-ticket .icon{fill:#BDBDBD}.list-itemtype-ticket h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1rem}.list-itemtype-ticket p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-ticket .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-type{margin-left:.3rem;text-transform:uppercase}.list-itemtype-ticket .list-itemtype-ticket-data{-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-blocked{color:#f44336;margin-right:.25rem}.list-itemtype-user{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track{font-size:.9rem;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#3f51b5}.list-itemtype-user .list-itemtype-track-likers.active .icon,.list-itemtype-user .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-user .icon{fill:#BDBDBD}.list-itemtype-user h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-user p{margin-bottom:0}.list-itemtype-user .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .extra-info{font-size:.9rem;margin-top:.25rem}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:100%;-ms-flex-pack:center;justify-content:center;width:100%}.loader p{font-size:1.2rem;color:#757575;text-align:center}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{animation-duration:5s;animation-iteration-count:infinite;animation-name:loadBar;animation-timing-function:ease-in;background:#757575;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{animation-delay:0s;background:#ffc107}.loading-bar .item-1{animation-delay:1s;background:#009688}.loading-bar .item-2{animation-delay:2s;background:#e91e63}.loading-bar .item-3{animation-delay:3s;background:#9c27b0}.loading-bar .item-4{animation-delay:4s;background:#cddc39}.loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;transform-origin:32 32}.look-for-people{width:1rem;height:1rem;fill:#BDBDBD;margin-left:.25rem}.notification-message-success{background:rgba(140,158,255,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);right:-370px;top:2%;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{animation:animSlide 2s;animation-fill-mode:forwards;animation-iteration-count:1;opacity:1}.notification-message-success.inactive{animation:animSlideOut .5s;opacity:0;transform:none}.notification-message-success p{margin:0}.notification-message-success .warning{font-size:1.2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:1.2}@keyframes animSlide{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}100%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlideOut{0%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-message-error{background:rgba(244,67,54,.9);opacity:1;top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;transform:translateY(0);transition:all .6s ease-in-out}.notification-light,.notification-light.inactive{opacity:0;transform:translateY(-100%);transition:all .6s}.notification-message-error.inactive{transition:all .6s ease-in-out}.notification-message-error .icon-error{width:3rem;height:3rem;fill:#fff;margin-right:.5rem}.notification-message-error .warning{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:2.4rem}.notification-light p,.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-message-error .text p{margin:0}.notification-message-error .close{display:block;position:absolute;right:1rem;top:1rem}.notification-message-error .icon-close{cursor:pointer;fill:#fff}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-ms-flex-align:center;align-items:center;background:rgba(189,189,189,.95);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;position:absolute;top:0;width:100%;z-index:99999}.notification-light.active{opacity:1;transform:translateY(0);transition:all .6s}.notification-light p{margin:0}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{display:block;margin-right:1rem;width:2rem}.notification-light .close svg{fill:#fff}.notification-message-light-error{background:rgba(244,67,54,.8)}.paginator{margin:2rem 0}.paginator ul{display:-ms-flexbox;display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator a{background:#BDBDBD;color:#fff;padding:.5rem 1rem;transition:all .3s linear}.paginator a:hover{background:#212121;color:#fff;transition:all .3s linear}.paginator .active span{background:#8c9eff}.select-color,.select-color:after{background:#212121;position:absolute}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.select-color{color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;text-align:"center";border-radius:0 10px 10px 0;padding:15px}.select-color a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#8c9eff;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#BDBDBD;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color .empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative}.select-color .empty-color:after,.select-color .empty-color:before{content:"";width:2px;height:47px;background:#ff8282;position:absolute;top:0}.select-color .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.select-color .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background-color:#EEE;width:243px}.summary .description,.summary .number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.select-color input::-webkit-input-placeholder{color:#757575}.select-color input::-moz-placeholder{color:#757575}.select-color input:-moz-placeholder{color:#757575}.select-color input:-ms-input-placeholder{color:#757575}.select-color .selected-color{background:#BDBDBD;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.settings-nav .active{background:#fff}.summary{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:65px;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;overflow:hidden;padding:1rem}.summary .summary-stats{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#8c9eff}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{font-size:.9rem;line-height:1}.summary .stats{cursor:pointer;display:block;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .graph{fill:#8c9eff;transition:fill .2s}.summary .stats.active .graph,.summary .stats.active svg,.summary .stats:hover svg{fill:#3f51b5}.summary .stats svg{fill:#000;height:100%;max-height:2rem;max-width:2rem;transition:all .2s;width:100%}.summary .stats .graph{fill:#8a8a8a;transition:fill .2s}.summary .main-summary-stats{display:-ms-flexbox;display:flex;transform:translateY(0);transition:all .2s ease-in-out}.summary .show-role-points .points-per-role-stats{transform:translateY(-35px)}.summary .show-role-points .main-summary-stats{transform:translateY(-65px)}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#8c9eff;height:24px}.summary-progress-bar .defined-points{background:#ff5252;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#8c9eff;height:24px;position:absolute}.large-summary{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;padding:.75rem 1rem}.large-summary .stats-wrapper{padding-top:.35rem}.large-summary .large-summary-wrapper{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.large-summary .summary-progress-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding-top:.35rem}.large-summary .summary-progress-bar{-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats.summary-completed-points,.large-summary .summary-stats.summary-move-unfinished{border-right:1px solid #212121;margin-right:0;padding-right:1rem}.large-summary .summary-stats.summary-completed-points+.summary-stats,.large-summary .summary-stats.summary-move-unfinished+.summary-stats{border-left:1px solid #757575;margin-left:0;padding-left:1rem}.large-summary .icon{width:1.3rem;height:1.3rem;fill:currentColor;margin:.1rem .4rem 0 0;vertical-align:middle}.large-summary .icon.icon-stats{color:#3f51b5;float:right;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#8c9eff;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#8c9eff}.large-summary .icon.icon-stats.active:hover{color:#3f51b5;transition:color .3s linear}.large-summary .points-per-role-stats-content{display:-ms-flexbox;display:flex;padding-left:1rem}.large-summary .points-per-role-stats-content .summary-stats{padding:0}.large-summary .toggle-points-per-role{color:#fff;cursor:pointer}.large-summary .toggle-points-per-role svg{width:1rem;height:1rem}.large-summary .points-per-role-stats{margin-left:.5rem;transform:translateY(35px);transition:all .2s ease-in-out}.large-summary .points-per-role-stats .number{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.empty-burndown,.empty-burndown .title,.large-summary .points-per-role-stats .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.large-summary .points-per-role-stats .role{font-size:.75rem}.empty-burndown{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:rgba(26,35,126,.15);display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{width:4rem;height:4rem;fill:#1a237e;-ms-flex-preferred-size:4rem;flex-basis:4rem;-ms-flex-negative:0;flex-shrink:0;margin-right:2rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-ms-flex:1;flex:1}.empty-burndown .title{font-size:1.2rem;color:#1a237e;margin:0;text-transform:uppercase}.empty-burndown a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;animation:blink 2s infinite}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name,.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;transition:none}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-ms-flex-align:stretch;align-items:stretch;border-radius:4px;display:-ms-flexbox;display:flex;margin:0;padding:0}.track-button.active .track-inner{background:rgba(140,158,255,.4)}.track-button.active .icon{fill:#3f51b5}.track-button.active .track-button-counter{background:rgba(140,158,255,.6)}.track-button.is-hover .track-inner{background:#f77066;color:#EEE;transition:background .2s}.track-button.is-hover .icon{fill:#ff5252}.track-button.is-hover .track-button-counter{background:#f44336;color:#EEE;transition:background .2s}.track-button .watch-options-arrow{margin-left:auto}.track-button .icon-arrow-down{width:.75rem;height:.75rem}.track-inner{-ms-flex-align:center;align-items:center;background:#EEE;border-radius:4px 0 0 4px;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:start;justify-content:flex-start;min-width:140px;padding:.25rem 1rem}.track-inner:hover{background:#e1e1e1;transition:background .3s}.track-icon{fill:#424242;margin-right:.5rem;position:relative;top:2px}.track-button-counter{-ms-flex-align:center;align-items:center;background:#e1e1e1;border-radius:0 4px 4px 0;padding:.25rem .75rem}.contact-team{background:#EEE;border-radius:4px;padding:.25rem .75rem}.contact-team:hover{background:#e1e1e1;transition:background .3s}.watch-options{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.watch-options li{margin:0}.assigned-to-list,.ticket-assigned-users,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{border-bottom:1px solid rgba(189,189,189,.3);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.assigned-to-list .user-list-single,.upvote-btn{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox}.watch-options a.active{color:#8c9eff}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check svg{fill:#8c9eff}.upvote-btn{-ms-flex-align:stretch;align-items:stretch;display:flex;-ms-flex:0;flex:0;-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#BDBDBD;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#1a237e;transition:background .3s}.upvote-btn a:hover path{fill:#1a237e}.upvote-btn a.active{background:rgba(140,158,255,.2);color:#3f51b5;transition:all .3s}.upvote-btn a.active svg{fill:#3f51b5}.upvote-btn a.is-hover{background:#f44336;color:#EEE}.upvote-btn a.is-hover svg{fill:#ff5252;transform:rotate(180deg);transition:all .3s}.upvote-btn svg{fill:#BDBDBD;height:1rem;width:1rem}.assigned-to-list .user-list-avatar img,.ticket-assigned-users .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.upvote-btn span{display:block}.assigned-to-list .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #EEE;display:flex;padding:.25rem 0;vertical-align:middle}.assigned-to-list .user-list-multiple,.ticket-watchers .user-list-single{-ms-flex-line-pack:center;padding:.25rem 0;vertical-align:middle;align-content:center}.assigned-to-list .user-list-single:last-child{border:0}.assigned-to-list .user-list-multiple{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex}.assigned-to-list .user-list-multiple.selected,.assigned-to-list .user-list-multiple:hover,.assigned-to-list .user-list-single.is-active,.assigned-to-list .user-list-single.selected,.assigned-to-list .user-list-single:hover{background:rgba(255,255,255,.3);cursor:pointer}.assigned-to-list .user-list-multiple:last-child{border:0}.assigned-to-list .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-name{color:#424242;margin-left:.5rem}.assigned-to-list .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{margin-bottom:1rem;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-single .remove-assigned-to{display:block;fill:#424242;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-single .remove-assigned-to:hover{fill:#f44336}.assigned-to-list .user-list-multiple:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-multiple.is-active{background:rgba(255,255,255,.3);cursor:pointer;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-multiple .remove-assigned-to{display:block;fill:#424242;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-multiple .remove-assigned-to:hover{fill:#f44336}.ticket-watchers .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex}.ticket-watchers .user-list-single:last-child{border:0}.ticket-watchers .user-list-multiple{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.25rem 0;vertical-align:middle}.ticket-assigned-users .user-list-multiple,.ticket-assigned-users .user-list-single{background:0 0;display:-ms-flexbox;padding:.25rem 0;align-content:center;vertical-align:middle}.ticket-watchers .user-list-multiple:last-child{border:0}.ticket-watchers .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-watchers .user-list-name{color:#424242;margin-left:.5rem;-ms-flex:1;flex:1;position:relative}.ticket-watchers .user-list-single:hover .delete-watcher{opacity:1;transition:opacity .2s ease-in}.ticket-watchers .delete-watcher{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-watchers .delete-watcher:hover{fill:#f44336;transition:color .3s ease-in}.ticket-assigned-users .user-list-single{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:flex}.ticket-assigned-users .user-list-single:last-child{border:0}.ticket-assigned-users .user-list-multiple{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:flex}.ticket-assigned-users .user-list-multiple:last-child{border:0}.ticket-assigned-users .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-assigned-users .user-list-single{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-users .user-list-single:hover .remove-user{opacity:1;transition:opacity .2s ease-in}.ticket-assigned-users .user-list-name{color:#424242;margin-left:.5rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex:1;flex:1;position:relative}.admin-functionalities .module-name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .remove-user{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-assigned-users .remove-user:hover{fill:#f44336;transition:color .3s ease-in}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{color:#BDBDBD;margin-bottom:2rem}.admin-common .admin-subtitle a{color:#3f51b5}.admin-common .admin-subtitle a:hover{color:#8c9eff}.admin-common .total{font-size:1.2rem;-ms-flex-align:center;align-items:center;background-color:#EEE;color:#424242;display:-ms-flexbox;display:flex;padding:.3rem 1rem}.admin-common .total:hover .icon-edit{opacity:1;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0}.custom-fields-table .table-header{border-bottom:3px solid #EEE}.custom-fields-table .table-header .custom-description,.custom-fields-table .table-header .custom-name{padding-left:1.1rem}.custom-fields-table .table-body .row:hover{background:rgba(140,158,255,.05);cursor:move;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag{opacity:1;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .single-custom-field{border-bottom:1px solid #EEE;color:#757575}.custom-fields-table .js-view-custom-field{padding:.75rem 0}.custom-fields-table .js-view-custom-field .custom-extra-attr-wrapper{margin-left:1em}.custom-fields-table .icon-drag{fill:#BDBDBD;opacity:0;padding:0 .25rem 0 .1rem;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{margin-right:.5rem}.custom-fields-table .custom-name{-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-name a{padding:.5em}.custom-fields-table .custom-name svg{height:12px;width:12px}.custom-fields-table .custom-description{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:50%;flex-basis:50%;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-ms-flex-preferred-size:12%;flex-basis:12%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;opacity:0;text-align:center}.custom-fields-table .custom-options svg{cursor:pointer;fill:#BDBDBD;margin-right:.5rem;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options svg:hover{fill:#3f51b5;transition:color .2s linear}.custom-fields-table .custom-options svg.icon-close,.custom-fields-table .custom-options svg.icon-trash{fill:#ff5252}.custom-fields-table .custom-options-wrapper{opacity:0;transition:opacity .3s linear}.custom-fields-table .custom-options-wrapper:hover,.custom-fields-table .js-form .custom-options-wrapper{opacity:1}.custom-fields-table .custom-options-wrapper a{display:inline-block}.custom-fields-table .custom-field-extra{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#BDBDBD;font-size:.95em;padding:.25em 1.5em}.custom-fields-table .custom-extra-actions,.custom-fields-table .js-view-custom-field-extra{padding:.5em}.custom-fields-table .js-edit-custom-field{margin-left:.4rem}.custom-fields-table .custom-extra-attr-wrapper{-ms-flex-positive:1;flex-grow:1}.custom-fields-table .custom-extra-actions a{color:#3f51b5}.custom-fields-table .custom-extra-actions svg{height:10px;margin-right:.25em;width:10px}.admin-functionalities .module-container{max-width:900px;width:100%}.admin-project-export-result .spin img,.project-details .loading-spinner{max-height:1rem;max-width:1rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.admin-functionalities .module{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:1rem 0}.admin-functionalities .module.active .module-icon .icon,.admin-functionalities .module.active .module-name{color:#3f51b5;fill:#3f51b5}.admin-functionalities .module-icon{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem 0 0}.admin-functionalities .module-icon .icon{width:3rem;height:3rem;fill:#BDBDBD}.admin-functionalities .module-name{font-size:1.2rem;color:#BDBDBD;-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem}.admin-functionalities .module-desc{font-size:.9rem;color:#BDBDBD;-ms-flex:1;flex:1;margin:0 2rem 0 0}.admin-functionalities .module-desc p{margin:0}.admin-functionalities .module-desc-options,.admin-functionalities .videoconference-attributes{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-top:.5rem}.admin-functionalities .module-desc-options .options,.admin-functionalities .videoconference-attributes .options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:2.5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .module-desc-options fieldset,.admin-functionalities .videoconference-attributes .icon,.admin-functionalities .videoconference-attributes fieldset{margin:0 .5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .videoconference-attributes .icon{fill:#BDBDBD}.admin-functionalities .module-desc-options .icon:hover,.admin-functionalities .videoconference-attributes .icon:hover{fill:#3f51b5}.admin-functionalities .module-scrum .options{-ms-flex-item-align:end;align-self:flex-end}.admin-functionalities .module-videoconference .options{-ms-flex-item-align:start;align-self:flex-start}.admin-membership-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.admin-membership-table .avatar img{border-radius:4px;-ms-flex-positive:0;flex-grow:0;margin:0 .5rem 0 .3rem;width:50px}.admin-membership-table .avatar .data{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575;margin-top:.2rem}.admin-membership-table .avatar .pending,.admin-menu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-membership-table .avatar .pending{color:#ff5252;display:inline-block;padding-left:.3rem}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#EEE}.admin-membership-table .resend{background-color:#3f51b5;color:#fff}.admin-membership-table .resend:hover{background-color:#8c9eff;color:#fff;transition:background-color .3s linear}.admin-membership-table .delete{fill:#BDBDBD;transition:fill .2s}.admin-membership-table .delete:hover{fill:#f44336}.admin-membership-table .pending{color:#ff5252}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-ms-flex-preferred-size:210px;flex-basis:210px;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.admin-menu li{border-bottom:1px solid #d5d5d5;text-transform:uppercase}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{margin:0 auto;transform-origin:32 32;width:100%}.admin-project-export-result h3{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.2rem;background:#f5f5f5;color:#757575;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#BDBDBD;margin:.5rem 0;text-align:center}.project-details .delete-project:hover,.project-details .use-default-image:hover{color:#f44336}.project-details form{display:-ms-flexbox;display:flex}.project-details fieldset{margin-bottom:1rem}.project-details label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.project-details .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.project-details .project-details-image .image{width:100%}.project-details .change-image{display:block}.project-details .image-container{position:relative;margin-bottom:.5rem}.project-details .loading-overlay{display:none}.project-details .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.project-details .loading-spinner{margin:0 auto;border:0;transform-origin:center center}.project-details .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.project-details .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.project-details form{display:block}}.project-details .get-feedback,.project-details .looking-for-people{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid #EEE;padding:1rem 0}.project-details .looking-for-people{border-top:1px solid #EEE;margin-bottom:0}.project-details .get-feedback-inner,.project-details .looking-for-people-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.project-details .get-feedback-inner svg,.project-details .looking-for-people-selector svg{width:1rem;height:1rem;fill:#BDBDBD;margin-left:.5rem}.project-details .get-feedback-inner .check,.project-details .looking-for-people-selector .check{margin-left:auto}.project-details .looking-for-people-reason{display:block;margin-top:1rem}.project-details .looking-for-people-reason.ng-hide-remove-active{animation:dropdownFade .3s}.project-details .looking-for-people-reason.ng-hide-add-active{animation:dropdownFade .2s reverse;animation-delay:.1s}.project-details .delete-project{font-size:1rem;display:block;margin-top:1rem;text-align:right}.project-details .private-or-public{font-size:1rem;color:#BDBDBD;margin-bottom:2rem}.project-details .private-or-public svg{width:1.1rem;height:1.1rem;fill:#BDBDBD;margin-right:.5rem;vertical-align:middle}.project-privacy-settings{display:-ms-flexbox;display:flex;margin-bottom:.5rem}.project-privacy-settings .privacy-option{-ms-flex:1;flex:1;transition:.2 linear}.project-privacy-settings .privacy-option:first-child{margin-right:.5rem}.project-privacy-settings input[type=radio],.project-privacy-settings input[type=text]{display:none}.project-privacy-settings .privacy-project:checked~input[type=text],tg-admin-project-restrictions span{display:block}.project-privacy-settings label{background:#f5f5f5;color:#424242;text-align:center;transition:all .2s linear}.project-privacy-settings label:hover{background:rgba(140,158,255,.4);color:#424242}.project-privacy-settings label:hover svg{fill:#424242}.project-privacy-settings label svg{width:1.1rem;height:1.1rem;fill:#424242;margin-left:.5rem;vertical-align:middle}.project-privacy-settings .privacy-project:checked+label{background:#8c9eff;color:#fff}.project-privacy-settings .privacy-project:checked+label svg{width:1.1rem;height:1.1rem;fill:#fff}.project-privacy-settings .privacy-project[disabled]+label{background:#f5f5f5;box-shadow:none;color:#BDBDBD;cursor:not-allowed;opacity:.65}.project-privacy-settings .privacy-project[disabled]+label:hover{background:#f5f5f5;color:#BDBDBD}tg-admin-project-restrictions p{font-size:1rem;text-align:center}tg-admin-project-restrictions a{color:#3f51b5}tg-admin-project-restrictions span:first-child::before{border:1px solid #ff5252;border-radius:6px;color:#ff5252;content:'!';display:inline-block;height:12px;line-height:12px;margin-right:.5rem;text-align:center;width:12px}.admin-project-profile-owner-actions{-ms-flex-align:center;align-items:center;border-top:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem}.admin-project-profile-owner-actions a{color:#3f51b5}.admin-project-profile-owner-actions a:hover{color:#8c9eff;transition:color .2s}.admin-project-profile-owner-actions img{width:100%}.admin-project-profile-owner-actions .owner-info{-ms-flex:1;flex:1;padding-left:.5rem}.admin-project-profile-owner-actions .owner-info-title{color:#BDBDBD}.admin-project-profile-owner-actions .owner-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-project-profile-owner-actions .owner-avatar{width:2.5rem}.admin-project-profile-owner-actions .request{-ms-flex-negative:0;flex-shrink:0}.admin-roles .save{display:inline-block}.admin-roles .role-name{font-size:2rem;color:#424242}.admin-roles .icon:hover{fill:#3f51b5;transition:fill .2s linear}.admin-roles .icon-edit{cursor:pointer;fill:#BDBDBD;margin-left:.5rem;opacity:0;transition:opacity .2s linear}.admin-roles .icon-save{fill:#BDBDBD;margin-left:.5rem;transition:fill .2s linear}.admin-roles .edit-role{background-color:#EEE;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .any-computable-role{background:#f44336;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{font-size:.9rem;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category.external-user{-ms-flex-pack:start;justify-content:flex-start}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.admin-submenu ul a span,.admin-webhooks .webhook-url span{max-width:85%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admin-submenu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD;text-transform:uppercase}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#1d278b;color:#fff;transition:all .2s}.admin-submenu ul a.active{background:#232fa8;color:#fff;transition:all .2s}.admin-submenu ul a span{display:block}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#212121}.admin-webhooks .webhooks-table{margin-bottom:1rem}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;transition:opacity .2s linear}.admin-webhooks .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD}.admin-webhooks .table-body .webhook-service{color:#757575}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #EEE}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-negative:0;flex-shrink:0}.admin-webhooks .webhook-url{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.admin-webhooks .webhook-url span{word-wrap:normal;color:#BDBDBD;display:inline-block;vertical-align:middle}.admin-webhooks .webhook-url a{color:#3f51b5;cursor:pointer;margin-left:.5rem;white-space:nowrap}.admin-webhooks .webhook-url a:hover{color:#8c9eff}.admin-webhooks .webhook-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.admin-webhooks .webhook-options a{cursor:pointer;display:inline-block;margin-right:.5rem}.admin-webhooks .webhook-options svg{fill:#BDBDBD}.admin-webhooks .webhook-options svg:hover{fill:#3f51b5;transition:fill .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{display:none}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #EEE;margin-left:22%}.admin-webhooks .history-single{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(140,158,255,.1);transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{transform:rotate(180deg);transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{transform:rotate(0);transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#757575;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#8c9eff}.admin-webhooks .history-response-icon.history-error{background:#f44336}.admin-webhooks .history-single-response{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#BDBDBD}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-header a{font-size:.9rem;color:#BDBDBD}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#8c9eff;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{font-family:'courier new',monospace;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#EEE;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{font-size:.9rem;color:#BDBDBD;-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace;border:0;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-contrib h2,.admin-contrib label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #EEE;margin-bottom:1rem}.admin-contrib input{margin-bottom:1rem}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #BDBDBD;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:0 1rem}.admin-contrib .check-item{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0;margin-bottom:1rem}.contrib-form-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.contrib-form-wrapper input{margin:0}.contrib-form-wrapper .contrib-input{border:0;-ms-flex:5;flex:5;margin:0}.contrib-form-wrapper .contrib-test{border:0;-ms-flex:1;flex:1;margin:0 0 0 1rem}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field a{font-size:.9rem;margin-left:1em;white-space:nowrap}.project-csv .csv-regenerate-field .icon:not(.icon-clipboard){fill:currentColor;height:.9rem;margin-right:.3rem;vertical-align:middle;width:.9rem}.project-csv .field-with-options{display:-ms-flexbox;display:flex;width:100%}.project-csv .field-with-options input{-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #BDBDBD;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{cursor:pointer;fill:#BDBDBD;opacity:0}.project-values-row .icon:hover{fill:#424242;transition:all .2s ease-in}.project-values-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #EEE}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#fff;cursor:move;transition:background .2s ease-in}.project-values-body .project-values-row:hover .icon{opacity:1;transition:opacity .2s ease-in}.project-values-name{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-values-value{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{display:inline-block;margin-right:.5rem}.project-values-settings svg.icon-trash{fill:#ff5252}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p{color:#424242;margin-bottom:.5rem;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #BDBDBD;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{font-size:.9rem;opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;transition:opacity .2s linear}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-password-text,.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;transition:opacity .3s linear}.login-form-container .forgot-pass{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.6rem;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#424242;transition:color .3s linear}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin:1rem 0;text-align:center}.register-form-container .register-text{font-size:.9rem}.backlog-table-body,.backlog-table-header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #BDBDBD;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-ms-flex-preferred-size:25px;flex-basis:25px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{width:100%}.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .votes,.backlog-table-header .votes{color:#757575;-ms-flex-preferred-size:65px;flex-basis:65px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.backlog-table-body .votes.inactive,.backlog-table-header .votes.inactive{color:#BDBDBD}.backlog-table-body .votes.inactive svg,.backlog-table-header .votes.inactive svg{fill:#BDBDBD}.backlog-table-body .votes.is-voted,.backlog-table-header .votes.is-voted{color:#8c9eff;fill:#8c9eff}.backlog-table-body .votes svg,.backlog-table-header .votes svg{fill:#757575;height:.75rem;margin-right:.25rem;vertical-align:middle;width:.75rem}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.2rem}.backlog-table-body .pop-points,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-header .pop-points,.backlog-table-header .pop-role,.backlog-table-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;position:absolute;z-index:99;text-align:"center";font-size:.9rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#212121;color:#fff;display:none;left:65%;padding:10px 1rem 10px 10px;top:0;width:200px}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#212121;color:#fff;display:none;left:65%;padding:10px;top:0;width:200px}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#8c9eff;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#8c9eff;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#212121;bottom:10px;color:#fff;display:none;left:30px;padding:10px 3rem 10px 10px;width:150px}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:none;left:30px;list-style-type:none;margin:0;z-index:99;text-align:"center";font-size:.9rem;background:#212121;position:absolute}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#8c9eff;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{color:#fff;padding:10px;top:0;width:200px}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{bottom:0;color:#fff;padding:10px;top:auto;width:200px}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#8c9eff;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#212121;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#8c9eff;color:#fff}.backlog-table-header .backlog-table-title{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;border-bottom:2px solid #BDBDBD;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:1rem}.backlog-table-header .points{cursor:pointer}.backlog-table-header .header-points span{color:#BDBDBD}.backlog-table-body.forecasted-stories{border:.5rem solid #f5f5f5;border-bottom:0}.backlog-table-body .row{border-bottom:1px solid #e4e4e4;cursor:move;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#fff;transition:background .2s ease-in;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag,.backlog-table-body .row:hover .us-settings{opacity:1;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.gu-mirror{background:#fff;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .row .icon-arrow-down{fill:#BDBDBD;height:.7rem;width:.7rem}.backlog-table-body .gu-transit{background:#EEE}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .sortable-placeholder *{display:none}.backlog-table-body .is-checked{background:#fff;transition:background .2s ease-in}.backlog-table-body input:checked{color:#8c9eff;transition:color .2s ease-in}.backlog-table-body .user-story-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:inline-block;-ms-flex:1;flex:1}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.backlog-table-body .user-story-name span{line-height:1.5}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{font-size:.9rem;margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff5252;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:#f44336;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .us-settings{-ms-flex-negative:0;flex-shrink:0;margin-left:2rem;opacity:0}.backlog-table-body .us-settings svg{fill:#BDBDBD;margin-right:.5rem;transition:fill .2s ease-in}.backlog-table-body .us-settings svg:hover{fill:#8c9eff}.backlog-table-body .icon-drag{cursor:move;fill:#BDBDBD;opacity:0;padding:.1rem}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.backlog-table-body .us-status tg-svg{display:inline-block}.backlog-table-body .loading{margin:2% auto;width:3rem}.backlog-table-body .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.empty-large .row{display:none}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#3f51b5;padding:.25rem .25rem 0;transition:background .2s}.sprints .add-sprint:hover{background:#8c9eff}.sprints .add-sprint svg{fill:#EEE;height:1.4rem;width:1.5rem}.sprints .filter-closed-sprints{font-size:.9rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading{text-align:center}.sprints .loading-spinner{border:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;transform-origin:center center}.sprints .sprint-name a{font-size:1rem;display:inline-block;margin-right:.5rem}.sprints .sprint{margin-bottom:2rem}.sprints .sprint header{position:relative}.sprints .sprint:hover .edit-sprint{opacity:1;transition:opacity .2s ease-in}.sprints .sprint .edit-sprint{opacity:0;position:absolute;right:0;top:0;transition:opacity .2s ease-in;vertical-align:baseline}.lightbox-generic-form .settings .iocaine,.lightbox-generic-form .settings .requirement,.ticket-assigned-to .self-assign .icon,.ticket-assigned-to .user-assigned .icon,.ticket-assigned-users .self-assign .icon,.ticket-assigned-users .user-assigned .icon{vertical-align:middle}.sprints .sprint svg{fill:#BDBDBD}.sprints .sprint svg:hover{fill:#3f51b5;transition:fill .2s ease-in}.sprints .sprint .number{font-size:.75rem;margin-right:.2rem}.sprints .sprint .description{font-size:.75rem;line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{font-size:.9rem;color:#BDBDBD;-ms-flex:1;flex:1}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint ul{margin:0;text-align:right}.sprints .compact-sprint{transform:rotate(0);transition:all .2s}.sprints .compact-sprint.active{transform:rotate(90deg);transition:all .2s}.sprints .compact-sprint:hover .icon{fill:#8c9eff;transition:color .2s}.sprints .sprint-progress-bar{background:#BDBDBD;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#3f51b5;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table{min-height:2rem}.sprints .sprint-table .sprint-empty{background:#e1e1e1;border:2px dashed #d7d7d7;color:#757575;padding:1rem;text-align:center}.sprints .sprint-table .row{border-bottom:1px solid #BDBDBD;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:rgba(189,189,189,.2);cursor:move;transition:background .2s ease-in}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.readonly{cursor:auto}.sprints .sprint-table .row.ui-sortable-helper{background:#fff;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.sprints .sprint-table .gu-transit{background:#dcdcdc;height:40px}.sprints .sprint-table .gu-transit *{display:none}.sprints .sprint-table .column-us{font-size:.9rem;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{display:block}.sprints .sprint-table .us-name.closed{color:#cacaca}.sprints .sprint-table .us-name.blocked{color:#f44336}.sprints .sprint-table .column-points{-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#cacaca}.sprints .sprint-table .column-points.blocked{color:#f44336}.sprints .sprint-table.sprint-empty-wrapper .row{display:none}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input{display:none}.sprints .us-item-row .user-story-name{font-size:.9rem;line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#BDBDBD}.sprint-closed .sprint-progress-bar .current-progress{background:#a4a4a4}.sprint-closed .button-gray{background:#BDBDBD}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{font-size:1.2rem;margin-bottom:.5rem;text-transform:uppercase}.sprints-empty a{color:#3f51b5}.taskboard-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.taskboard-table.zoom-0 .task-colum-name span{padding-right:1rem}.taskboard-table .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;background:#f5f5f5;border-top:3px solid #BDBDBD;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;text-transform:uppercase;width:300px}.taskboard-table .task-colum-name:last-child{margin-right:0}.taskboard-table .task-colum-name.column-fold{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table .task-colum-name.column-fold span{display:none}.taskboard-table .task-colum-name.column-fold .hfold,.taskboard-table .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table .task-colum-name span{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.taskboard-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;min-height:2.4rem;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.taskboard-table-header tg-svg{display:block;margin-right:.3rem}.taskboard-table-header tg-svg:hover{cursor:pointer}.taskboard-table-header tg-svg.hfold,.taskboard-table-header tg-svg.hunfold{display:inline-block;transform:rotate(90deg)}.taskboard-table-body{-ms-flex:1;flex:1;margin-bottom:5rem;overflow:auto;width:100%}.taskboard-table-body .taskboard-column{-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:300px;width:300px}.taskboard-table-body .column-fold .card .card-owner img,.taskboard-table-body .row-fold .card .card-owner img{height:1.3rem;margin-right:0;width:1.3rem}.taskboard-table-body .taskboard-column:last-child{margin-right:0}.taskboard-table-body .row-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .row-fold .card .card-data,.taskboard-table-body .row-fold .card .card-owner-actions,.taskboard-table-body .row-fold .card .card-owner-name,.taskboard-table-body .row-fold .card .card-statistics,.taskboard-table-body .row-fold .card .card-tag,.taskboard-table-body .row-fold .card .card-title,.taskboard-table-body .row-fold .card .card-unfold,.taskboard-table-body .row-fold .card tg-card-slideshow{display:none}.taskboard-table-body .row-fold .taskboard-column,.taskboard-table-body .row-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .card .card-data,.taskboard-table-body .column-fold .card .card-owner-actions,.taskboard-table-body .column-fold .card .card-owner-name,.taskboard-table-body .column-fold .card .card-statistics,.taskboard-table-body .column-fold .card .card-tag,.taskboard-table-body .column-fold .card .card-title,.taskboard-table-body .column-fold .card .card-unfold,.taskboard-table-body .column-fold .card tg-card-slideshow,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table-body .column-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .column-fold .taskboard-column,.taskboard-table-body .column-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to{display:none}.taskboard-table-body .taskboard-row{display:-ms-flexbox;display:flex;margin-bottom:.25rem;min-height:10rem;width:100%}.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box{background:rgba(244,67,54,.6)}.taskboard-table-body .taskboard-row.blocked .points-value,.taskboard-table-body .taskboard-row.blocked .points-value:hover,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg:hover{color:#fff;fill:#fff;transition:color .3s linear}.taskboard-table-body .taskboard-row.blocked .taskboard-cards-box{background:rgba(244,67,54,.1)}.taskboard-table-body .taskboard-row.row-fold{min-height:0}.taskboard-table-body .taskboard-row.row-fold .us-title{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.ticket-assigned-to .loading-spinner,.ticket-assigned-users .loading-spinner{transform-origin:32 32;max-height:2rem;max-width:2rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.taskboard-table-body .taskboard-row.row-fold .icon-add,.taskboard-table-body .taskboard-row.row-fold .icon-bulk,.taskboard-table-body .taskboard-row.row-fold .points-value,.taskboard-table-body .taskboard-row.row-fold .us-data{display:none}.taskboard-table-body .taskboard-row.issues-row{margin-top:1em}.taskboard-table-body .taskboard-row.issues-row .taskboard-cards-box{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:start;align-items:flex-start;border-top:3px solid #BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.taskboard-table-body .taskboard-row.issues-row .taskboard-row-title-box{padding:0}.taskboard-table-body .taskboard-row.issues-row .task-colum-name{-ms-flex-pack:start;justify-content:flex-start;padding:.5rem .5rem .5rem 2em}.taskboard-table-body .taskboard-row.issues-row .row-title{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-to,.ticket-assigned-users{-ms-flex-align:center;border-bottom:1px solid #BDBDBD;border-top:1px solid #BDBDBD}.taskboard-table-body .taskboard-row.issues-row .toggle-fold{display:block;left:.5rem;position:absolute;top:-.4rem}.taskboard-table-body .taskboard-row.issues-row .card{cursor:default;height:auto;margin:.3rem .1rem .3rem .5rem}.taskboard-table-body .taskboard-row.issues-row:not(.row-fold) .card{width:280px}.taskboard-table-body .taskboard-row-title-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-row-title-box{position:relative}.taskboard-row-title-box .us-title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-row-title-box .points-value{font-size:.9rem;color:#BDBDBD}.taskboard-row-title-box .points-value span{margin-right:.1rem}.taskboard-row-title-box .us-data{display:-ms-flexbox;display:flex}.taskboard-row-title-box .due-date tg-svg{position:inherit}.taskboard-row-title-box tg-svg{cursor:pointer;display:block;position:absolute;right:.5rem;top:.7rem}.taskboard-row-title-box tg-svg:hover svg{fill:#3f51b5}.taskboard-row-title-box tg-svg.add-action{right:2rem}.taskboard-row-title-box tg-svg.fold-action{left:0;right:inherit;top:1rem}.ticket-assigned-to{align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:1rem 0;position:relative}.ticket-assigned-to:hover .remove-user{opacity:1;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{margin:1rem auto}.ticket-assigned-to .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-to .user-avatar .iocaine-symbol svg{background:#424242;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.ticket-assigned-to .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;margin:.2rem 0 .25rem}.ticket-assigned-to .assigned-to .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-to .assigned-to .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-to .assigned-to .self-assign,.ticket-assigned-to .assigned-to .user-assigned{color:#3f51b5;cursor:default}.ticket-assigned-to .assigned-to .self-assign:hover,.ticket-assigned-to .assigned-to .user-assigned:hover,.ticket-assigned-to .remove-user:hover,.ticket-assigned-to .self-assign.editable:hover,.ticket-assigned-to .user-assigned.editable:hover,.ticket-assigned-users .self-assign.editable:hover,.ticket-assigned-users .user-assigned.editable:hover{cursor:pointer}.ticket-assigned-to .assigned-to .self-assign .icon,.ticket-assigned-to .assigned-to .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-to .remove-user{fill:#757575;opacity:0;position:absolute;right:.5rem;top:2rem}.ticket-assigned-to .remove-user:hover{fill:#f44336;transition:fill .2s}.ticket-assigned-to .self-assign,.ticket-assigned-to .user-assigned{color:#3f51b5}.ticket-assigned-to .self-assign:hover,.ticket-assigned-to .user-assigned:hover{color:currentColor}.ticket-assigned-to .self-assign.editable,.ticket-assigned-to .user-assigned.editable{color:#3f51b5}.ticket-assigned-users .assigned-title,.ticket-assigned-users .tg-add-assigned span{color:#757575;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-assigned-users{align-items:center;margin-bottom:1rem;padding:.5rem 0;position:relative}.ticket-assigned-users .loading-spinner{margin:1rem auto}.ticket-assigned-users .assigned-title{display:block;margin:.2rem 0 .25rem}.ticket-assigned-users .tg-assigned-users{-ms-flex-align:center;align-items:center;position:relative}.ticket-assigned-users .tg-add-assigned{margin-top:.25rem}.ticket-assigned-users .tg-add-assigned .add-assigned{fill:#757575;opacity:1;right:.5rem;top:2rem}.ticket-assigned-users .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:#f44336;transition:fill .2s}.ticket-assigned-users .tg-add-assigned span{margin:.2rem .5rem}.ticket-assigned-users .assigned-users-options{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .assigned-users-options a{margin-right:.2rem}.ticket-assigned-users .self-assign,.ticket-assigned-users .self-assign.editable,.ticket-assigned-users .user-assigned,.ticket-assigned-users .user-assigned.editable{color:#3f51b5}.ticket-assigned-users .not-assigned-users{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block;margin:.2rem 0 .25rem}.colors-table .table-header,.duty-custom-fields .custom-fields-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .not-assigned-users .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-users .not-assigned-users .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-users .not-assigned-users .self-assign,.ticket-assigned-users .not-assigned-users .user-assigned{color:#3f51b5;cursor:default}.colors-table .row.edition .current-color,.ticket-assigned-users .not-assigned-users .self-assign:hover,.ticket-assigned-users .not-assigned-users .user-assigned:hover{cursor:pointer}.ticket-assigned-users .not-assigned-users .self-assign .icon,.ticket-assigned-users .not-assigned-users .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-users .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-users .user-avatar img{width:100%}.ticket-assigned-users .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-users .user-avatar .iocaine-symbol svg{background:#424242;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.category-config{border-bottom:1px solid #BDBDBD}.category-config:first-child{border-top:1px solid #BDBDBD}.category-config .resume{-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:-ms-flexbox;display:flex;padding:1rem;position:relative}.category-config .resume.open-drawer .icon{transform:rotate(90deg)}.category-config .icon{transform:rotate(0);transition:all .4s}.category-config .resume-title{width:280px}.category-config .count{color:#BDBDBD;float:left;padding-right:5px}.category-config .summary-role{-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#BDBDBD;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#3f51b5}.category-config .summary-role .role-summary-single.inactive{background:#757575}.category-config .category-items{max-height:0;transition:max-height .5s ease-in;overflow:hidden;background-color:#EEE;width:100%}.colors-table .table-header .row:hover,.colors-table .table-header:hover{background:0 0}.category-config .category-items.open{transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #EEE}.colors-table .table-header .row{padding-left:50px}.colors-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:last-child{border:0}.colors-table .row.edition{padding-left:3rem}.colors-table .row.hidden{display:none}.colors-table .row:hover{background:rgba(255,255,255,.2);cursor:move;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;transition:opacity .3s linear}.colors-table .row.no-draggable{padding-left:50px}.colors-table .row.no-draggable:hover{cursor:auto}.colors-table .row .color-column{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .before-after-column,.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit,.colors-table .row .thresold-column{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.colors-table .row .before-after-column{padding:0 10px}.colors-table .row .color-name,.colors-table .row .status-name{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 10px;position:relative}.colors-table .row .color-name span,.colors-table .row .status-name span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.colors-table .row .color-name{-ms-flex-preferred-size:100px;flex-basis:100px}.colors-table .row .status-slug{display:none;-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:6;flex-grow:6;padding:0 10px}@media (min-width:1400px){.colors-table .row .status-slug{display:block}}.colors-table .row .status-slug span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:100px;text-align:center}.colors-table .row .status-wip-limit{display:none;max-width:100px;padding:0 0 0 10px;text-align:center}@media (min-width:1400px){.colors-table .row .status-wip-limit{display:block}}.colors-table .before-after-selector{display:-ms-flexbox;display:flex;font-size:.9rem}.colors-table .before-after-selector input{display:none}.colors-table .before-after-selector input+label{background:rgba(238,238,238,.7);cursor:pointer;display:block;padding:.5rem .25rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.colors-table .before-after-selector input+label:hover{background:rgba(140,158,255,.3);transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single{-ms-flex:1;flex:1;margin-right:.25rem}.colors-table .before-after-selector .before-after-selector-single:last-child{margin-right:0}.colors-table .before-after-selector .before-after-selector-single.checked label{background:#8c9eff;color:#fff;transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single.checked label:hover{background:#8c9eff}.colors-table .options-column a{cursor:pointer;display:inline-block}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#EEE;border-radius:2px;height:40px;width:40px}.colors-table .icon{cursor:pointer;fill:#BDBDBD;margin-right:1rem;opacity:0}.colors-table .icon:hover{fill:#8c9eff;transition:all .2s ease-in}.colors-table .icon.icon-check{cursor:default;fill:#3f51b5;opacity:1}.colors-table .icon.icon-merge{cursor:default;opacity:1}.colors-table .icon.icon-search{cursor:none;fill:#3f51b5;opacity:1}.colors-table .icon.icon-drag{cursor:move}.colors-table .icon.icon-trash{fill:#ff5252}.colors-table .gu-mirror{background:#fff;opacity:1}.contrib-plugins-wrapper{margin:1rem 0 2rem}.contrib-plugins-wrapper label{font-size:.9rem;display:block;margin-bottom:.5rem}.duty-custom-fields{margin-bottom:2rem}.duty-custom-fields .custom-fields-header{-ms-flex-line-pack:justify;align-content:space-between;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value,.lightbox h2,.lightbox-create-edit .tg-add-assigned span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header .icon{cursor:pointer}.duty-custom-fields .custom-fields-header .collapse{display:block;transform:rotate(-90deg);transition:.1s ease-out}.duty-custom-fields .custom-fields-header .open{transform:rotate(0)}.duty-custom-fields .custom-field-single{border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;padding:.7rem}.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-options{margin:0;opacity:0;transition:opacity .2s linear}.duty-custom-fields .custom-field-options a{display:inline-block}.duty-custom-fields .custom-field-options svg{fill:#BDBDBD}.duty-custom-fields .custom-field-options svg:hover{fill:#3f51b5}.duty-custom-fields .custom-field-data{-ms-flex:0;flex:0;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem;color:#a8a8a8;display:block;line-height:.9rem}.duty-custom-fields .custom-field-value{-ms-flex-align:start;align-items:flex-start;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields .custom-field-value.js-value-view-mode.wysiwyg{white-space:normal}.duty-custom-fields form label{cursor:pointer}.duty-custom-fields form input{width:100%}.custom-fields-body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:50%;flex-basis:50%}@media (max-width:1280px){.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even),.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0}}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even){padding:0 0 0 2rem}.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0 2rem 0 0}.custom-fields-body .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body .custom-attribute:nth-child(even),.custom-fields-body .custom-attribute:nth-child(odd){padding:0}.custom-fields-body .custom-field-single{height:100%}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff5252}.external-reference{font-size:.9rem;color:#BDBDBD;margin-top:.5rem}.external-reference a{border-left:1px solid #BDBDBD;padding:0 .2rem;transition:color .3s linear}.external-reference a:hover{color:#3f51b5}.external-reference a:first-child{border:0}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox .close{width:2rem;height:2rem;cursor:pointer;fill:#757575;position:absolute;right:3rem;top:3rem;transition:fill .2s;display:block}.lightbox .close:hover{fill:#ff5252}.lightbox .close svg{width:2rem;height:2rem;pointer-events:none}.lightbox.open{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1;transition:opacity .3s ease}.lightbox.close{opacity:0;transition:opacity .3s ease}.lightbox .lb-icon{margin:1rem auto;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single:first-child,.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox .lb-icon svg{width:6rem;height:6rem;display:block;fill:#EEE}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox h2{font-size:2rem}.lightbox-generic-form form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form fieldset{position:relative}.lightbox-generic-form textarea{min-height:4.5rem;resize:vertical}.lightbox-generic-form .existing-or-new-selector{display:-ms-flexbox;display:flex;margin-bottom:2rem}.lightbox-generic-form .existing-or-new-selector input{display:none}.lightbox-generic-form .existing-or-new-selector input:checked+label{background:#8c9eff;color:#fff;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input:checked+label:hover{background:#8c9eff}.lightbox-generic-form .existing-or-new-selector input+label{background:rgba(238,238,238,.7);cursor:pointer;display:block;font-size:1em;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input+label:hover{background:rgba(140,158,255,.3);transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single{-ms-flex:1;flex:1}.lightbox-generic-form .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#8c9eff;border:1px solid #3f51b5}.lightbox-generic-form .settings .iocaine svg,.lightbox-generic-form .settings .requirement svg{width:.75rem;height:.75rem}.lightbox-generic-form .settings .blocked:hover{background:#ff5252;border:1px solid #f44336}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#3f51b5;border:1px solid #3f51b5;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:#f44336;border:1px solid #f44336;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-form .attachments{margin-bottom:0}.lightbox-search fieldset,.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-generic-form .attachment-body{max-height:7.5rem;overflow-y:auto}.lightbox-generic-form .attachment-delete{right:.5rem}.lightbox-generic-form .attachment-delete svg{fill:#BDBDBD;height:1.25rem;width:1.25rem}.lightbox-generic-form .attachment-delete:hover svg{fill:#f44336}.lightbox-sprint-add-edit .delete-sprint .icon,.lightbox-sprint-add-edit .delete-sprint:hover .icon{fill:currentColor}.lightbox-generic-bulk form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-search form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-sprint-add-edit form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem;color:#757575;opacity:1;position:absolute;right:1rem;top:.7rem;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-sprint-add-edit .delete-sprint{font-size:.9rem;color:#757575;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-ask-choice .subtitle,.lightbox-generic-ask .subtitle{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint:hover{color:#f44336;transition:color .3s linear}.lightbox-generic-ask form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .subtitle{white-space:pre-line}.lightbox-generic-ask .options{display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-ask-choice .warning{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-delete-account p{text-align:center}.lightbox-delete-account form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .newsletter input+label{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-delete-project .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem}.lightbox-delete-account .options{display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-ms-flexbox;display:flex}.lightbox-delete-project .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:100%;max-width:100%;width:100%}.backlog-sprints-menu::after,.lightbox-create-edit .pop-status:after,.lightbox-create-edit .pop-users:after,.main-nav a:hover .helper::after,.related-tasks-body .pop-status:after,.ticket-header .pop-status:after{content:'';transform:rotate(45deg)}.lightbox-generic-loading .progress-bar-wrapper{background:#e1e1e1;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#8c9eff;height:24px;position:absolute;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#e1e1e1;bottom:35px;color:#757575;padding:.3rem;position:absolute;transition:left .1s linear}.lightbox-import-error .description a,.lightbox-select-user .add-comment a{color:#3f51b5}.lightbox-create-issue form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row fieldset{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block textarea,.lightbox-create-issue textarea{margin-bottom:1rem;max-height:12rem;min-height:8rem}.lightbox-select-user .add-comment textarea,.lightbox-select-user .submit-button{margin-top:1rem}.lightbox-block .form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single.selected,.lightbox-select-user .user-list-single:hover{background:rgba(255,255,255,.3);cursor:pointer}.lightbox-select-user .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.lightbox-select-user .more-watchers{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;padding:.5rem;text-align:center}.lightbox-select-user .add-comment{position:relative;text-align:center}.lightbox-select-user .add-comment .icon-close{cursor:pointer;fill:#757575;position:absolute;right:0;top:0;transition:fill .2s}.lightbox-select-user .add-comment .icon-close:hover{fill:#ff5252}.lightbox-select-user .add-comment .icon-close svg{width:2rem;height:2rem}.lb-create-edit-userstory .points-per-role{-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0}.lb-create-edit-userstory .ticket-role-points{margin:.1rem;min-width:20%}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(4n+4){margin-right:0}.lb-create-edit-userstory .ticket-role-points:last-child{-ms-flex-preferred-size:100%;flex-basis:100%;margin:.1rem 0;min-width:100%}.lightbox-import-error{text-align:center}.lightbox-import-error .content{width:500px}.lightbox-import-error h2{margin-top:1rem}.lightbox-import-error img{height:5rem}.lightbox-leave-project-warning{text-align:center}.lightbox-leave-project-warning .icon{fill:#BDBDBD;height:3rem;margin-bottom:1rem;width:3rem}.lightbox-set-due-date .delete-due-date .icon,.lightbox-set-due-date .delete-due-date:hover .icon{fill:currentColor}.lightbox-leave-project-warning .content,.lightbox-request-ownership .content{width:500px}.lightbox-request-ownership{text-align:center}.lightbox-set-due-date{z-index:9999}.lightbox-set-due-date form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-set-due-date .date{margin:2rem 0 1rem}.lightbox-set-due-date .reason textarea{margin-top:.5rem}.lightbox-set-due-date .due-date-suggestions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:1rem 0 .5rem}.lightbox-set-due-date .suggestion{background:rgba(184,184,184,.2);color:#B8B8B8;-ms-flex-pack:start;justify-content:flex-start;margin:0 .5rem .5rem;min-height:2rem;padding:.5rem .75rem;position:relative}.lightbox-set-due-date .suggestion:first-child{margin-left:0}.lightbox-set-due-date .suggestion:nth-child(4n+4){margin-right:0}.lightbox-set-due-date .suggestion.clickable.active,.lightbox-set-due-date .suggestion.clickable:hover{background:rgba(140,158,255,.9);color:#fff}.lightbox-set-due-date .delete-due-date{font-size:.9rem;color:#757575;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-set-due-date .delete-due-date:hover{color:#f44336;transition:color .3s linear}.lightbox-create-edit{z-index:9998}.lightbox-create-edit form{-ms-flex-preferred-size:700px;flex-basis:700px;max-width:700px;width:700px}.lightbox-create-edit .form-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:700px;flex-basis:700px;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;margin-bottom:30px}.lightbox-create-edit .form-wrapper main{-ms-flex-positive:1;flex-grow:1;max-width:480px}.lightbox-create-edit .form-wrapper .sidebar{border-left:2px solid #EEE;margin-left:15px;padding-left:15px;width:220px}.lightbox-create-edit .existing-item-wrapper{margin-bottom:30px}.lightbox-create-edit .existing-item-wrapper select .strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-create-edit .add-existing-button{width:100%}.lightbox-create-edit .status-button{display:-ms-flexbox;display:flex;position:relative}.lightbox-create-edit .status-dropdown{-ms-flex-line-pack:center;align-content:center;color:#fff;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;height:30px;padding:.25rem .5rem}.lightbox-create-edit .status-dropdown .status-text{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.lightbox-create-edit .status-dropdown svg{fill:#fff;height:.9rem;width:.9rem}.lightbox-create-edit .popover a{color:#fff;display:block;padding:.5rem 1rem;text-align:left}.lightbox-create-edit .popover a.active,.lightbox-create-edit .popover a:hover{color:#8c9eff}.lightbox-create-edit .ticket-assigned-to{border:0;padding:0}.lightbox-create-edit .ticket-assigned-to.single-assign{margin:0}.lightbox-create-edit .ticket-assigned-to.multiple-assign{-ms-flex-align:start;align-items:start;-ms-flex-direction:column;flex-direction:column;margin:0}.lightbox-create-edit .ticket-assigned-to .assigned-to-actions{display:block}.lightbox-create-edit .ticket-assigned-to .remove-user{top:1.2rem}.lightbox-create-edit .user-list{display:-ms-flexbox;display:flex;width:100%}.lightbox-create-edit .user-list .user-list-item{margin-right:.5rem;width:44.75px}.lightbox-create-edit .user-list .user-list-item img{height:44.75px;width:44.75px}.lightbox-create-edit .user-list .user-list-item:last-child{margin-right:0}.lightbox-create-edit .user-list .user-list-item.counter{background:#B8B8B8;color:#BDBDBD;font-weight:400;height:44.75px;line-height:44.75px;text-align:center}.lightbox-create-edit .tg-add-assigned{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:.25rem 0 .75rem}.lightbox-create-edit .tg-add-assigned .add-assigned{fill:#757575;opacity:1;right:.5rem;top:2rem}.lightbox-create-edit .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:#f44336;transition:fill .2s}.lightbox-create-edit .tg-add-assigned span{font-size:.9rem;color:#757575;margin:.2rem .5rem}.lightbox-create-edit .pop-status,.lightbox-create-edit .pop-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;text-align:"center";background:#212121;font-size:.9rem;z-index:99}.lightbox-create-edit .users-dropdown{position:relative}.lightbox-create-edit .pop-status{color:#fff;display:none;padding:10px;position:absolute;top:28px;width:203px}.lightbox-create-edit .pop-status a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-status a:last-child{border:0}.lightbox-create-edit .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.lightbox-create-edit .pop-status a:hover.point{color:#fff}.lightbox-create-edit .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.lightbox-create-edit .pop-users{color:#fff;display:none;left:0;padding:10px;position:absolute;top:60px;width:203px}.lightbox-create-edit .pop-users a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-users a:last-child{border:0}.lightbox-create-edit .pop-users a:hover{color:#8c9eff;transition:color .3s linear}.lightbox-create-edit .pop-users a:hover.point{color:#fff}.lightbox-create-edit .pop-users:after{background:#212121;height:15px;left:67.67px;position:absolute;top:-7px;width:16px}.lightbox-create-edit .pop-users.multiple{top:84px}.lightbox-create-edit .pop-users.multiple::after{left:30px}.lightbox-create-edit .pop-users ul{margin-bottom:.5rem}.lightbox-create-edit .pop-users li{border-bottom:1px solid #BDBDBD}.lightbox-create-edit .pop-users li:last-child{border:0}.lightbox-create-edit .pop-users .user-list-single{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;padding:.5rem 0}.lightbox-create-edit .pop-users .user-list-single.selected{color:#3f51b5}.lightbox-create-edit .pop-users .user-list-avatar{height:32px;margin-right:.5rem;width:32px}.lightbox-create-edit .pop-users .user-list-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-positive:1;flex-grow:1;position:relative}.lightbox-create-edit .pop-users .remove svg{fill:#EEE;height:.8rem;width:.8rem}.lightbox-create-edit .pop-users .show-more{border-top:1px solid #BDBDBD;padding-top:.5rem;text-align:center}.lightbox-create-edit .ticket-data-container{margin:0;padding:0 0 .1rem}.lightbox-create-edit .ticket-data-container .ticket-status .priority-data,.lightbox-create-edit .ticket-estimation .points-per-role{margin:0}.lightbox-create-edit .ticket-detail-settings{height:52px;-ms-flex-pack:left;justify-content:left;margin:1rem 0 0}.lightbox-create-edit .ticket-detail-settings label{border:0;padding:12px 13px;width:auto}.lightbox-create-edit .ticket-detail-settings .item-block,.lightbox-create-edit .ticket-detail-settings .item-unblock{display:block;margin:0}.lightbox-create-edit .blocked-note{margin-top:.5rem}.ticket-detail-settings .lightbox-assign-sprint-to-issue .lightbox-assign-related-sprint{width:700px}.ticket-detail-settings .lightbox-assign-sprint-to-issue svg{fill:initial;max-height:initial;max-width:initial}.ticket-detail-settings img,.ticket-detail-settings svg{max-height:1.25rem;max-width:1.25rem;width:100%}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label{background:0 0;display:inline-block;margin-bottom:.5rem;margin-right:0;padding:0}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label+input{display:initial}.ticket-detail-settings .lightbox-assign-sprint-to-issue button{width:100%}.lightbox-relate-to-epic .lightbox-create-related-epic-wrapper{max-width:600px;width:90%}.lightbox-relate-to-epic .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-relate-to-epic .related-with-selector input{display:none}.lightbox-relate-to-epic .related-with-selector input:checked+label{background:#8c9eff;color:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input:checked+label:hover{background:#8c9eff}.lightbox-relate-to-epic .related-with-selector input+label{background:rgba(238,238,238,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input+label:hover{background:rgba(140,158,255,.3);transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-relate-to-epic fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-relate-to-epic .new-epic-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-relate-to-epic .existing-epic-form,.lightbox-relate-to-epic .new-epic-form{margin-bottom:1rem}.lightbox-relate-to-epic .no-epics-found{padding:1rem 0 0}.lightbox-relate-to-epic .new-epic-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-relate-to-epic .new-epic-options input{display:none}.lightbox-relate-to-epic .new-epic-options input:checked+label{background:#8c9eff;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label{background:#f5f5f5;color:#424242;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label:hover{background:#8c9eff;color:#fff;fill:#fff}.lightbox-relate-to-epic button{width:100%}tg-project-menu{background-position:0 -300px;display:inline-block;min-height:calc(100vh - 40px);min-width:50px;padding:1rem 0;position:relative;text-transform:uppercase;z-index:99}.main-nav a,.main-nav span{display:block}tg-project-menu .menu.menu-fixed{position:fixed;top:1rem}.main-nav,.main-nav a,.main-nav li{position:relative}.main-nav{padding:0;text-align:center}.main-nav a{padding:1rem .7rem}.main-nav a:hover{background:rgba(0,0,0,.2);transition:color .3s linear}.main-nav a:hover svg{fill:#8c9eff;transition:fill .3s linear}.backlog-sprints-menu,.main-nav a:hover .helper{animation:slideLeft .2s ease-in-out both;padding:.4rem 1rem;transition:all .2s;position:absolute;white-space:nowrap}.main-nav a:hover .helper{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:calc(50% - 1rem);z-index:99}.main-nav a:hover .helper::after{background:#212121;height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);width:12px;z-index:98}.main-nav svg{fill:#fff;height:1.7rem;width:1.7rem}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .item{font-size:1.2rem}.main-nav .active{background:rgba(255,255,255,.95);color:#1a237e}.main-nav .active svg{fill:#1a237e;opacity:1;stroke:#1a237e}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.backlog-sprints-menu{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:1rem;z-index:99}.backlog-sprints-menu a{color:#fff;padding:.6rem .8rem;text-align:left;text-transform:none}.backlog-sprints-menu a:nth-child(2){padding:1rem .8rem .6rem}.backlog-sprints-menu a:last-child{padding:.6rem .8rem .4rem}.backlog-sprints-menu a:hover{background:0 0}.backlog-sprints-menu::after{background:#212121;height:12px;left:calc(-12px/2);position:absolute;top:calc(1rem - 12px/2);width:12px;z-index:98}.related-tasks,.related-tasks-body .status{position:relative}.related-tasks{margin-bottom:2rem}.related-tasks-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-tasks-header .related-tasks-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-tasks-header .add-button{background:#424242;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-tasks-header .add-button.is-active,.related-tasks-header .add-button:hover{background:#8c9eff}.related-tasks-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-tasks-body{width:100%}.related-tasks-body .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}.related-tasks-body .row:hover .task-settings{opacity:1;transition:all .2s ease-in}.related-tasks-body .row .task-name{-ms-flex:1;flex:1}.related-tasks-body .row .task-settings{-ms-flex-negative:0;flex-shrink:0;width:60px}.related-tasks-body .row .status{-ms-flex-negative:0;flex-shrink:0;width:125px}.related-tasks-body .row .assigned-to{cursor:pointer;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .single-related-task:hover{background:rgba(140,158,255,.05)}.related-tasks-body .single-related-task:hover .icon-drag{opacity:1}.related-tasks-body .single-related-task .task-reorder{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .single-related-task .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#EEE;opacity:0;transition:opacity .1s}.issues-table .title div,.issues-table .votes,.related-tasks-body .task-assignedto.editable,.related-tasks-body .task-settings a:hover,.ticket-detail-settings .assign-issue-button.editable,.ticket-detail-settings .button-delete.editable,.ticket-detail-settings .item-block.editable,.ticket-detail-settings .item-unblock.editable,.ticket-detail-settings .promote-button.editable,.ticket-detail-settings label.editable{cursor:pointer}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .iocaine{background:rgba(140,158,255,.1);border-left:10px solid #8c9eff}.related-tasks-body .task-name{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .task-name span{margin-right:.25rem}.related-tasks-body .task-name input{font-size:1rem;margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .pop-status,.ticket-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;z-index:99;text-align:"center"}.related-tasks-body .task-name.loading span{animation:loading .5s linear,spin 1s linear infinite}.related-tasks-body .status .not-clickable:hover{color:#424242}.related-tasks-body .status .popover{left:0;top:1rem}.related-tasks-body .status .popover a{display:block}.related-tasks-body .status .icon{width:.8rem;height:.8rem;fill:currentColor;margin-left:.2rem}.related-tasks-body .closed,.related-tasks-body .closed:hover{border-left:10px solid #EEE;color:#EEE}.related-tasks-body .closed a,.related-tasks-body .closed svg,.related-tasks-body .closed:hover a,.related-tasks-body .closed:hover svg{fill:#EEE}.related-tasks-body .closed .task-name a,.related-tasks-body .closed:hover .task-name a{color:#EEE;text-decoration:line-through}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .pop-status{font-size:.9rem;background:#212121;color:#fff;display:none;left:40%;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px}.related-tasks-body .pop-status a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:rgba(255,82,82,.2);border-left:10px solid #ff5252}.related-tasks-body .task-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;opacity:0}.related-tasks-body .task-settings svg{width:1.1rem;height:1.1rem;fill:#BDBDBD;margin-right:.5rem;transition:fill .2s ease-in}.related-tasks-body .task-settings svg:hover{fill:#757575}.related-tasks-body .delete-task:hover .icon-edit,.related-tasks-body .edit-task:hover .icon-edit,.related-tasks-body .save-task:hover .icon-edit{fill:#424242}.related-tasks-body .delete-task:hover .icon-save,.related-tasks-body .edit-task:hover .icon-save,.related-tasks-body .save-task:hover .icon-save{fill:#3f51b5}.related-tasks-body .delete-task:hover .icon-trash,.related-tasks-body .edit-task:hover .icon-trash,.related-tasks-body .save-task:hover .icon-trash{fill:#ff5252}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{width:.8rem;height:.8rem;fill:#BDBDBD;opacity:0;position:absolute;right:.5rem;top:.5rem;transition:opacity .3s linear}.related-tasks-body .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:1.5rem 0 2rem;position:relative}.ticket-header .ticket-title{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;text-transform:uppercase;vertical-align:sub}.ticket-header .detail-status{font-size:.9rem;display:-ms-flexbox;display:flex;margin-left:.25rem;position:relative}.ticket-header .detail-status .icon-arrow-down{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem}.ticket-header .detail-status-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start}.ticket-header .detail-status-inner>span{color:#fff;padding:.15rem .25rem;text-transform:uppercase}.ticket-header .pop-status{font-size:.9rem;background:#212121;color:#fff;display:none;left:0;margin:0;position:absolute;top:1.25rem;width:150px;padding:0;text-transform:none}.ticket-data-container,.ticket-header .pop-status a{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.ticket-header .pop-status a{border-bottom:1px solid #424242;color:#fff;display:block;padding:.5rem 1rem;text-align:left}.ticket-header .pop-status a:last-child{border:0}.ticket-header .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.ticket-header .pop-status a:hover.point{color:#fff}.ticket-header .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.ticket-header .pop-status a:hover{background:rgba(140,158,255,.2)}.ticket-data-container{margin-bottom:1rem}.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .type-data .pop-type{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;left:30px;top:30px;text-align:"left";font-size:.9rem;z-index:99;list-style-type:none}.ticket-data-container .icon{width:.7rem;height:.7rem;color:currentColor;margin-left:.25rem}.ticket-status .priority-data .pop-priority:after,.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;transform:rotate(45deg)}.ticket-status:last-child{margin:0}.ticket-status .level{display:inline-block;margin-right:.5rem;vertical-align:top}.ticket-status .level-name{color:#bbb;float:right;text-transform:lowercase}.ticket-status .clickable:hover{background:#d5d5d5;transition:background .2s ease-in}.ticket-status .type-data{background:#e1e1e1;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .type-data .pop-type{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .type-data .pop-type a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#8c9eff;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#212121;position:absolute;width:0}.ticket-status .severity-data{background:#e1e1e1;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .severity-data .pop-severity{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .severity-data .pop-severity a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#8c9eff;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#212121;position:absolute;width:0}.ticket-status .priority-data{background:#e1e1e1;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .priority-data .pop-priority{background:#212121;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-watch .ticket-watch-button,.ticket-watch svg{margin-right:.25rem}.ticket-status .priority-data .pop-priority a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#8c9eff;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{background:#212121;position:absolute;width:0}.ticket-watch-buttons{margin-bottom:1rem}.ticket-watch .ticket-watch-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.introjs-tooltip p,.single-project .description,.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-watch .ticket-watch-inner{display:-ms-flexbox;display:flex}.ticket-watch svg{position:relative;top:2px}.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-size:.9rem;background:#BDBDBD;color:#fff;-ms-flex:1;flex:1;padding:.25rem;text-align:center;text-transform:uppercase;transition:background .25s}.ticket-watch .add-watcher svg,.ticket-watch .ticket-watch-button svg{fill:#fff}.ticket-watch .add-watcher:hover,.ticket-watch .ticket-watch-button:hover{background:#8c9eff}.ticket-watch .add-watcher.is-hover,.ticket-watch .ticket-watch-button.is-hover{background:#f44336;color:#EEE;transition:background .3s}.ticket-watch .add-watcher.is-hover svg,.ticket-watch .ticket-watch-button.is-hover svg{fill:#ff5252}.ticket-watch .add-watcher.active,.ticket-watch .ticket-watch-button.active{background:#8c9eff}.ticket-watch .add-watcher.active:hover,.ticket-watch .ticket-watch-button.active:hover{background:#ff5252}.ticket-watch .add-watcher.active svg,.ticket-watch .ticket-watch-button.active svg{fill:#fff}.ticket-detail-settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:2rem}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .button-delete,.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock,.ticket-detail-settings .promote-button,.ticket-detail-settings label{background:#BDBDBD;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .assign-issue-button+input,.ticket-detail-settings .button-delete+input,.ticket-detail-settings .item-block+input,.ticket-detail-settings .item-unblock+input,.ticket-detail-settings .promote-button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .assign-issue-button:hover,.ticket-detail-settings .button-delete:hover,.ticket-detail-settings .item-block:hover,.ticket-detail-settings .item-unblock:hover,.ticket-detail-settings .promote-button:hover,.ticket-detail-settings label:hover{background:#757575}.ticket-detail-settings .assign-issue-button.button-set,.ticket-detail-settings .assign-issue-button.text-button.button-set:hover,.ticket-detail-settings .button-delete.button-set,.ticket-detail-settings .button-delete.text-button.button-set:hover,.ticket-detail-settings .item-block.button-set,.ticket-detail-settings .item-block.text-button.button-set:hover,.ticket-detail-settings .item-unblock.button-set,.ticket-detail-settings .item-unblock.text-button.button-set:hover,.ticket-detail-settings .promote-button.button-set,.ticket-detail-settings .promote-button.text-button.button-set:hover,.ticket-detail-settings label.button-set,.ticket-detail-settings label.text-button.button-set:hover{background:#9dce0a;border-color:#9dce0a}.ticket-detail-settings .assign-issue-button:hover{background:#9dce0a}.ticket-detail-settings .assign-issue-button.button-set:hover,.ticket-detail-settings .item-unblock{background:#ff5252}.ticket-detail-settings .assign-issue-button.is-active{display:inline-block}.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock{display:none}.ticket-detail-settings .item-block.is-active,.ticket-detail-settings .item-unblock.is-active{display:inline-block}.ticket-detail-settings .item-unblock:hover{background:#f44336}.ticket-detail-settings .button-delete{background:#ff5252}.ticket-detail-settings .button-delete:hover{background:#f44336}.ticket-detail-settings svg{fill:#fff;height:100%;stroke:#fff}.ticket-detail-settings .icon-private{margin:0}.ticket-detail-settings a{display:block}.epic-header-container{display:-ms-flexbox;display:flex}.epic-header-container .color-selector{margin-right:.5rem}.epic-header-container tg-detail-header{-ms-flex:1;flex:1;width:100%}.introjs-overlay{background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(238,238,238,.2) 100%);background-color:#EEE}.introjs-helperLayer{border:1px solid rgba(140,158,255,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(66,66,66,.2)}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-bullets ul li a.active{background:#8c9eff}.introjs-button{background-color:#3f51b5;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#8c9eff;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .single-project-intro{display:-ms-flexbox;display:flex;margin-bottom:2rem}.single-project .project-logo{margin-right:1rem;width:6rem}.single-project .like-button,tg-filter .filters-advanced .filter-mode.include{margin-right:.75rem}.single-project .project-logo img{width:100%}.single-project .single-project-title-wrapper{-ms-flex:1;flex:1}.single-project .intro-options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem}.single-project .intro-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.single-project .intro-title .icon-private{fill:#BDBDBD;height:24px;margin-left:.25rem;margin-top:1rem;width:24px}.single-project h1{color:#3f51b5;display:inline-block;line-height:1.2;margin-bottom:0;vertical-align:middle}.single-project .private{width:1.1rem;height:1.1rem}.single-project .track-buttons-container{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track{font-size:.9rem;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#3f51b5}.single-project .track-container .list-itemtype-track-likers.active .icon,.single-project .track-container .list-itemtype-track-watchers.active .icon{fill:currentcolor}.single-project .track-container .icon{fill:#BDBDBD}.single-project .description{font-size:1rem;margin:0}.single-project .project-data{display:-ms-flexbox;display:flex}.single-project .title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-ms-flex:1;flex:1;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .looking-for-people img{width:100%}.single-project .looking-for-people h3{font-size:.9rem}.single-project .looking-for-people .is-empty{margin-bottom:.5rem}.single-project .looking-for-people p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.single-project .looking-for-people .contact-team{margin-bottom:1rem}.single-project .involved-data{-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-team{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-team li{-ms-flex-preferred-size:24%;flex-basis:24%;margin-right:.14rem;position:relative}.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-team a{display:block}.single-project .involved-team img{border-radius:.2rem;width:100%}.single-project .involved-team .icon-badge{width:1.2rem;height:1.2rem;background:rgba(0,0,0,.5);bottom:5%;fill:#8c9eff;padding:.1rem;position:absolute;right:5%;stroke:#8c9eff}.issues-options{-ms-flex-align:center;align-items:center;background-color:#EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table{display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#fff;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .row.is-blocked{background:#ffb8b8}.issues-table .row.is-blocked .blocked-text{color:#f44336;margin-right:.5rem}.issues-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD}.issues-table .title:hover{background:0 0}.issues-table .title .votes{color:#757575}.issues-table .table-main{font-size:.9rem;border-bottom:1px solid #e4e4e4}.issues-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-ms-flex-preferred-size:85px;flex-basis:85px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:85px}.issues-table .votes{color:#757575;-ms-flex-preferred-size:75px;flex-basis:75px;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes:hover{color:#8c9eff;transition:all .2s linear}.issues-table .votes:hover svg{fill:#8c9eff;transition:all .2s linear}.issues-table .votes.inactive{color:#BDBDBD}.issues-table .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.issues-table .icon-arrow-down,.issues-table .icon-arrow-up{width:.7rem;height:.7rem;fill:#BDBDBD;margin-left:.25rem;vertical-align:middle}.issues-table .is-voted{color:#8c9eff;transition:all .2s linear}.issues-table .is-voted svg{fill:#8c9eff;transition:all .2s linear}.issues-table .is-voted:hover{color:#ff5252}.issues-table .is-voted:hover svg{fill:#ff5252;transform:rotate(180deg)}.issues-table .pop-status:after,.table-team .popover:after{transform:rotate(45deg);content:''}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .issue-field,.issues-table .modified-field{-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field .icon,.issues-table .issue-field .icon,.issues-table .modified-field .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem;vertical-align:middle}.issues-table .assigned-field{-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{width:.75rem;height:.75rem;opacity:0;position:absolute;right:0;top:.75rem;transition:opacity .3s linear}.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#212121;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99;text-align:"center"}.kanban-table-body .taskboard-column .kanban-column-intro,.search-result-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.issues-table .pop-status a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#8c9eff;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#212121;height:15px;position:absolute;width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1280px){.issues-table .level-field,.issues-table .modified-field{display:none}}.issues-table .issue-status{display:inline-block}.kanban-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table.zoom-0 .task-colum-name,.kanban-table.zoom-0 .taskboard-column{max-width:148px}.kanban-table.zoom-0 .task-colum-name span{padding-right:1rem}.kanban-table .vfold tg-card{display:none}.kanban-table .vfold.task-colum-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold.task-colum-name .option:not(.hunfold),.kanban-table .vfold.task-colum-name .title,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.taskboard-column{-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;min-height:2.4rem;position:relative}.kanban-table-header .kanban-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute;width:100%}.kanban-table-header .options{display:-ms-flexbox;display:flex}.kanban-table-header .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:296px;padding:.5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;width:100%}.kanban-table-header .task-colum-name .title .counter{font-size:.75rem;line-height:1.6;margin:0 .5rem}.kanban-table-header .task-colum-name .title .name{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.kanban-table-header .task-colum-name .option{margin-right:.3rem}.kanban-table-header .task-colum-name .icon{fill:#BDBDBD;height:1rem;transition:color .2s linear;width:1rem}.kanban-table-header .task-colum-name .icon:hover{fill:#3f51b5}.kanban-table-body{font-size:1rem;display:-ms-flexbox;display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-body .taskboard-column{-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:296px;overflow-y:auto;widows:296px;width:296px}.kanban-table-body .taskboard-column:last-child{margin-right:0}.kanban-table-body .taskboard-column .kanban-column-intro{font-size:.9rem;color:#BDBDBD;margin:1rem 2rem}.kanban-table-body .taskboard-column .kanban-column-intro.active{color:#212121}.kanban-table-body .taskboard-column .kanban-wip-limit{background:#f44336;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-body .kanban-task-selected.card:not(.gu-transit-multi){box-shadow:0 0 0 1px #8c9eff,2px 2px 4px #d5d5d5}.kanban-table-inner{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.card-transit-multi{background:#e9e9e9;border:1px dashed #dadada;display:none;opacity:1;padding:1rem}.search-filter,.search-result-table,.table-team .hero .row{border-top:1px solid #EEE}.card-transit-multi .fake-img,.card-transit-multi .fake-text{background:#dadada}.card-transit-multi .fake-us{display:-ms-flexbox;display:flex;margin-bottom:1rem}.card-transit-multi .fake-us:last-child{margin-bottom:0}.card-transit-multi .column{padding-left:.5rem;width:100%}.card-transit-multi .fake-img{-ms-flex-preferred-size:48px;flex-basis:48px;-ms-flex-negative:0;flex-shrink:0;height:48px;width:48px}.card-transit-multi .fake-text{height:1rem;margin-bottom:1rem;width:80%}.card-transit-multi .fake-text:last-child{margin-bottom:0;width:40%}.card.gu-transit-multi .card-transit-multi{display:block}.card.gu-transit-multi .card-inner{display:none}.search-filter{display:-ms-flexbox;display:flex;margin-bottom:0;z-index:9}.search-filter a{background:#fff;color:#BDBDBD;display:inline-block;margin-right:1rem;padding:1rem 1.25rem}.search-filter .name,.search-filter a:hover .name{padding-left:5px}.search-filter a:hover{transition:color .3s linear}.search-filter a:hover .icon{fill:currentColor}.search-filter a.active{border-left:1px solid #EEE;border-right:1px solid #EEE;color:#424242;position:relative;top:1px}.search-filter a.active .icon{fill:#8c9eff}.search-filter .icon{fill:currentColor;margin-right:.4rem}.search-in input{background:#424242;color:#fff}.search-in input::-webkit-input-placeholder{color:#BDBDBD}.search-in input::-moz-placeholder{color:#BDBDBD}.search-in input:-moz-placeholder{color:#BDBDBD}.search-in input:-ms-input-placeholder{color:#BDBDBD}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{fill:#BDBDBD}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row .ref{margin-right:.5rem}.search-result-table .row .user-stories{overflow:hidden;padding-right:1rem;width:100%}.search-result-table .row .points,.search-result-table .row .sprint,.search-result-table .row .status{-ms-flex:0 0 150px;flex:0 0 150px;-ms-flex-positive:0;flex-grow:0;max-width:150px;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;padding:0 1rem}.search-result-table .row-selected{background:#fff;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon{font-size:1rem;color:#BDBDBD}.search-result-table .user-story-name .icon:hover{color:#424242;transition:color .3s linear}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #EEE}.search-result-table .points,.search-result-table .sprint,.search-result-table .status{position:relative}.search-result-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters li{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD;text-transform:uppercase}.table-team .attribute,.table-team .attribute .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.team-filters li:last-child{border-bottom:0}.team-filters li .icon{fill:#212121;opacity:0;transition:opacity .3s linear}.team-filters a{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.team-filters a.active,.team-filters a:hover{color:#3f51b5;transition:color .3s linear}.team-filters a.active .icon,.team-filters a:hover .icon{fill:currentColor;opacity:1}.team-filters .active{opacity:1;transition:opacity .3s linear}.table-team .row{padding:.5rem}.table-team .username{-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:6;flex:6;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{width:1.75rem;height:1.75rem;fill:#757575}.table-team .attribute .points{font-size:1.6rem;color:#424242}.table-team .attribute .top{fill:#8c9eff;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{font-size:.9rem;color:#ff5252}.table-team .leave-project .icon{width:.8rem;height:.8rem;fill:currentColor;margin-right:.2rem}.table-team .leave-project:hover{color:#f44336}.table-team .leave-project:hover .icon{color:currentColor;transition:fill .3s linear}.table-team .team-header{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:0}.table-team .hero{width:100%}.table-team .hero .row{border-bottom:1px solid #EEE;margin:1rem 0;padding:1.5rem 1rem}.table-team .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.table-team .avatar img{-ms-flex-preferred-size:66px;flex-basis:66px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:66px}.table-team .avatar .avatar-data{margin-left:1rem}.table-team .avatar .avatar-data span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.table-team .avatar .position{color:#BDBDBD}.table-team .popover{font-size:.9rem;background:#212121;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99;text-align:"center"}.table-team .popover a{font-size:.9rem;border-bottom:1px solid #424242;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#8c9eff;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#212121;bottom:-5px;height:15px;left:50%;position:absolute;width:15px}.table-team .icon-badge{fill:#8c9eff;position:relative;stroke:#8c9eff;top:.15rem}.policy-table .policy-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #BDBDBD}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#3f51b5;transition:background .3s linear}.policy-table label{background:#BDBDBD;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#8c9eff;cursor:pointer;transition:background .3s linear}.project-settings-table .project-settings-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.project-settings-table .project-settings-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #BDBDBD}.project-settings-table .project-settings-table-homepage,.project-settings-table .project-settings-table-project{padding:1rem}.project-settings-table .project-settings-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-settings-table .project-settings-table-homepage{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile{max-width:780px}.user-profile form{display:-ms-flexbox;display:flex}.user-profile fieldset{margin-bottom:1rem}.user-profile label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.user-profile .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.user-profile .project-details-image .image,.user-profile .submit-button{width:100%}.user-profile .change-image{display:block}.user-profile .image-container{position:relative;margin-bottom:.5rem}.user-profile .loading-overlay{display:none}.user-profile .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(33,33,33,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;border:0;transform-origin:center center}.filters-cats ul,.wiki-nav .wiki-link-container.wiki-all-links{border-top:1px solid #BDBDBD}.user-profile .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.user-profile .use-default-image:hover{color:#f44336}.user-profile .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.user-profile form{display:block}}.user-profile .actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:.5rem}.user-profile .delete-account,.user-profile .download-profile{font-size:.9rem;display:block;-ms-flex:1;flex:1;margin-top:.5rem}.user-profile .delete-account{text-align:right}.wiki-nav{padding:0;width:240px}.wiki-nav .title{font-size:1.6rem;padding:2rem 1rem 0 2rem}.wiki-nav .add-button{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:1rem 1rem 1rem 2rem;text-transform:uppercase;vertical-align:middle}.wiki-nav .add-button:hover svg{background:#8c9eff}.wiki-nav .add-button svg{width:1.25rem;height:1.25rem;background:#BDBDBD;border-radius:2px;fill:#fff;margin-right:.5rem;padding:.25rem;transition:background .2s linear}.wiki-nav .wiki-link-container{margin:0}.wiki-nav input[type=text]{background:#EEE;color:#424242;margin:1rem 1rem 1rem 2rem;width:80%}.wiki-nav input[type=text]::-webkit-input-placeholder{color:#BDBDBD}.wiki-nav input[type=text]::-moz-placeholder{color:#BDBDBD}.wiki-nav input[type=text]:-moz-placeholder{color:#BDBDBD}.wiki-nav input[type=text]:-ms-input-placeholder{color:#BDBDBD}.wiki-nav .loading{padding:1rem;text-align:center}.wiki-link{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-left:2rem;padding-right:1rem;position:relative}.wiki-link:hover .remove-wiki-page{cursor:pointer;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link:hover .dragger{cursor:move;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link.gu-mirror{border-bottom:0}.wiki-link.fixed-link{font-size:1.2rem;text-transform:uppercase}.wiki-link.is-sortable{cursor:move}.wiki-link .link-title{cursor:pointer;display:block;-ms-flex-positive:1;flex-grow:1;padding:1rem 0}.wiki-link .dragger{fill:#BDBDBD;left:-1rem;opacity:0;position:absolute;top:1rem}.wiki-link .dragger svg{width:.7rem;height:.7rem}.wiki-link .remove-wiki-page{opacity:0}.wiki-link .remove-wiki-page:hover .icon{fill:#f44336}.wiki-pages-table{display:-ms-flexbox;display:flex}.wiki-pages-table .row{padding:.5rem}.wiki-pages-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.wiki-pages-table .table-main{font-size:.9rem}.wiki-pages-table .title-field{-ms-flex-preferred-size:180px;flex-basis:180px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.wiki-pages-table .created-field,.wiki-pages-table .modified-field{-ms-flex-preferred-size:10vw;flex-basis:10vw;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.wiki-pages-table .editions-field{-ms-flex-preferred-size:80px;flex-basis:80px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;text-align:center}.wiki-pages-table .creator-field,.wiki-pages-table .last-modifier-field{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:200px;flex-basis:200px}.wiki-pages-table .creator-field .user-avatar,.wiki-pages-table .last-modifier-field .user-avatar{-ms-flex-positive:0;flex-grow:0}.wiki-pages-table .creator-field .user-avatar img,.wiki-pages-table .last-modifier-field .user-avatar img{height:2rem}.wiki-pages-table .creator-field .user-full-name,.wiki-pages-table .last-modifier-field .user-full-name{-ms-flex-positive:1;flex-grow:1;padding:.5rem}.wiki-summary{-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.wiki-summary.summary{background:#f5f5f5;color:#757575}.wiki-summary div{display:-ms-flexbox;display:flex;margin-right:1.25rem}.wiki-summary .wiki-user-modification{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary .avatar{margin-right:.5rem;width:2.25rem}.wiki-summary img{height:100%;width:100%}.wiki-summary .username{font-size:1.2rem;white-space:nowrap}.wiki-summary .remove{fill:#BDBDBD;margin-left:auto;transition:fill .1s linear}.wiki-summary .remove:hover{cursor:pointer;fill:#ff5252}.wiki-summary .remove svg{width:1.5rem;height:1.5rem}.attachment-gallery{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.attachment-gallery .single-attachment{margin-bottom:.5rem;margin-right:.5rem;max-width:200px}.attachment-gallery .single-attachment:hover .icon-delete{opacity:1}.attachment-gallery .single-attachment .attachment-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.attachment-gallery .attachment-image{display:inline-block}.attachment-gallery img{height:150px;margin-bottom:.2rem;width:200px}.attachment-gallery img:hover{filter:saturate(150%) hue-rotate(60deg);transition:all .3s cubic-bezier(.01,.7,1,1)}.attachment-gallery.deprecated img{opacity:.5}.attachment-gallery.deprecated .attachment-name{color:#BDBDBD}.attachment-gallery .attachment-data{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.attachment-gallery .icon-delete{margin-left:auto;opacity:0;transition:opacity .2s ease-in;transition-delay:.1s}.attachment-gallery .icon-delete svg{fill:#ff5252}.attachment-gallery .icon-delete:hover svg{color:#f44336}.attachment-gallery .loading-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:150px;-ms-flex-pack:center;justify-content:center;margin:0 .5rem .5rem 0;width:200px}.attachment-gallery .loading-spinner{margin:0 auto;max-height:3rem;max-width:3rem}.attachment-list .single-attachment{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;position:relative}.attachment-list .single-attachment:hover .settings{opacity:1;transition:opacity .2s ease-in}.attachment-list .single-attachment.deprecated,.attachment-list .single-attachment.deprecated .attachment-name a{color:#BDBDBD}.attachment-list .attachment-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding-right:1rem}.attachment-list .attachment-comments,.attachment-list .editable-attachment-comment{-ms-flex:2;flex:2;-ms-flex-preferred-size:50%;flex-basis:50%;margin-right:.5rem}.attachment-list .attachment-comments span,.attachment-list .editable-attachment-comment span{color:#757575}.attachment-list .attachment-size{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.attachment-list .attachment-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:10%;flex-basis:10%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:distribute;justify-content:space-around;margin-left:auto}.attachment-list .attachment-settings .settings{opacity:0}.attachments .gu-mirror,.card-owner:hover .card-owner-actions{opacity:1}.attachment-list .attachment-settings .editable-settings{display:block;opacity:1}.attachment-list .attachment-settings svg{fill:#BDBDBD;pointer-events:none}.attachment-list .attachment-settings .icon-edit:hover,.attachment-list .attachment-settings .icon-save:hover{fill:#3f51b5}.attachment-list .attachment-settings .icon-close:hover,.attachment-list .attachment-settings .icon-trash:hover{fill:#f44336}.attachment-list .attachment-settings .icon-drag{cursor:move}.attachment-list .editable-attachment-deprecated{display:-ms-flexbox;display:flex;padding-left:1rem}.attachment-list .editable-attachment-deprecated span{color:#BDBDBD}.attachment-list .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.attachment-list .editable-attachment-deprecated input:checked+span{color:#424242}.attachment-list .percentage{background:rgba(63,81,181,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.attachments{margin-bottom:4rem}.attachments .gu-transit{background:#EEE;height:40px}.attachments .gu-transit *{display:none}.attachments .gu-mirror form{background:#fff;box-shadow:1px 1px 10px rgba(0,0,0,.1);transition:background .2s ease-in}.attachments-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.attachments-header .attachments-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1rem;color:#424242;line-height:36px;padding:0 1rem}.attachments-header .options{display:-ms-flexbox;display:flex}.attachments-header label{cursor:pointer;margin-left:.25rem}.attachments-header label.add-attachment-button{background:#757575;border:0;display:inline-block;padding:.5rem;transition:background .25s}.attachments-header label.add-attachment-button:hover{background:#8c9eff}.attachments-header label svg{fill:#fff;height:1.2rem;margin-bottom:-.2rem;width:1.2rem}.attachments-header button{background:0 0;margin-right:.2rem}.attachments-header button.is-active svg,.attachments-header button:hover svg{fill:#8c9eff}.attachments-header button svg{fill:#BDBDBD;height:1.6rem;width:1.6rem}.attachments-header .size-info{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;padding-left:1rem}.attachments-empty,.single-attachment .attachment-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.more-attachments span,.single-attachment .attachment-size{color:#BDBDBD}.attachments-header input{display:none}.attachments-empty{font-size:1.2rem;border:3px dashed #EEE;color:#BDBDBD;margin-top:.5rem;padding:1rem;text-align:center}.single-attachment{font-size:.9rem;background:rgba(255,255,255,.9)}.single-attachment .attachment-name{padding-right:1rem}.single-attachment .attachment-name svg{fill:#757575;height:.9rem;margin-right:.25rem;width:.9rem}.more-attachments{font-size:.9rem;border-bottom:1px solid #BDBDBD;display:block;padding:1rem 0 1rem 1rem}.more-attachments .more-attachments-num{color:#3f51b5;margin-left:.5rem}.more-attachments:hover{background:#fff;transition:background .2s ease-in}.attachment-preview .attachment-preview-container svg{width:3rem;height:3rem;fill:#BDBDBD}.attachment-preview .attachment-preview-container svg:hover{fill:#8c9eff;transition:fill .3s linear}.attachment-preview .previous{left:3rem;position:absolute;top:calc(50% - 3rem)}.attachment-preview .next{position:absolute;right:3rem;top:calc(50% - 3rem)}.attachment-preview img{max-height:80vh;max-width:80vw}.assignable-member-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:.25rem 0}.assigned-members-option .assignable-member-single{background:#fff;border-bottom:1px solid #EEE;cursor:pointer}.assignable-member-single:hover{background:rgba(140,158,255,.05)}.assignable-member-single .assignable-member-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.5rem;max-height:3rem;max-width:3rem}.assignable-member-single .assignable-member-name{-ms-flex:1;flex:1}.assigned-to-container{width:600px}.assignable-member-list{margin-top:1rem}.assignable-member-list .assigned-member{-ms-flex-align:center;align-items:center;background:rgba(140,158,255,.05);border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.assignable-member-list .unassign-epic{cursor:pointer;margin-right:1rem}.assignable-member-list .icon{fill:#ff5252;transition:fill .2s}.assignable-member-list .icon:hover{cursor:pointer;fill:#f44336}.belong-to-epic-pill-wrapper{display:inline-block;position:relative}.belong-to-epic-pill-wrapper:hover .belong-to-epic-pill-data{display:block}.belong-to-epics-list{margin-bottom:.5rem}.belong-to-epics-list svg{position:relative;top:.1rem}.belong-to-epics-list.unique,.belong-to-epics-list.unique li{display:inline-block}.belong-to-epics-list.unique li svg{top:.2rem}.belong-to-epic-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;padding-top:.25rem}.belong-to-epic-text-wrapper .remove-epic-relationship{display:inline-block;line-height:.5rem;margin-left:.5rem}.belong-to-epic-text-wrapper:hover .remove-epic-relationship svg{visibility:visible}.belong-to-epic-label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;background:#424242;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.belong-to-epic-pill{background-color:#f5f5f5;border-radius:50%;display:inline-block;height:.7rem;margin:0 .1rem;position:relative;width:.7rem}.range-slider{-webkit-appearance:none;display:block;margin:7px 0;width:200px}.range-slider:focus{outline:0}.range-slider:focus::-webkit-slider-runnable-track{background:#1c2586}.range-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(66,66,66,.3)}.range-slider:focus::-moz-range-thumb{box-shadow:0 0 0 4px rgba(66,66,66,.3)}.range-slider:focus::-ms-fill-lower{background:#EEE}.range-slider:focus::-ms-fill-upper{background:#f3f3f3}.range-slider::-webkit-slider-runnable-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#EEE;border:0 solid transparent;border-radius:1px}.range-slider::-webkit-slider-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#424242;cursor:pointer;box-shadow:0 0 0 2px rgba(66,66,66,.3);transition:box-shadow .2s;-webkit-appearance:none;margin-top:-5.5px}.range-slider::-moz-range-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#EEE;border:0 solid transparent;border-radius:1px}.range-slider::-moz-range-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#424242;cursor:pointer;box-shadow:0 0 0 2px rgba(66,66,66,.3);transition:box-shadow .2s}.range-slider::-ms-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:0 0;border-color:transparent;border-width:14px 0;color:transparent}.range-slider::-ms-fill-lower{background:#e9e9e9;border:0 solid transparent;border-radius:2px}.range-slider::-ms-fill-upper{background:#EEE;border:0 solid transparent;border-radius:2px}.range-slider::-ms-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#424242;cursor:pointer;box-shadow:0 0 0 2px rgba(66,66,66,.3);transition:box-shadow .2s}.card{box-shadow:2px 2px 4px #d5d5d5;cursor:move;display:block;margin:0 .6rem .6rem;outline:0;overflow:hidden;transition:box-shadow .2s ease-in}.card .loading-extra.loading{padding:.2rem;text-align:center}.card:hover{box-shadow:3px 3px 6px #d5d5d5}.card-inner{background:#fff;border-radius:.25rem}.card-inner.zoom-0 .card-title,.card-inner.zoom-1 .card-title{-ms-flex:1;flex:1;margin:0;padding:.25rem}.card-inner.zoom-1 .card-owner-info{-ms-flex-align:start;align-items:flex-start}.card-inner.card-blocked{background:#ff5252}.card-inner.card-blocked .card-owner-actions,.card-inner.card-blocked .card-unfold:hover{background:rgba(255,82,82,.9)}.card-inner.card-blocked .card-estimation,.card-inner.card-blocked .card-owner-name,.card-inner.card-blocked .card-title a,.card-inner.card-blocked .statistic{color:#fff}.card-inner.card-blocked .card-task a.blocked-task{color:#f44336}.card-inner.card-blocked .card-owner-actions a:hover,.card-inner.card-blocked .statistic.active,.card-inner.card-blocked.zoom-0 .card-title,.card-inner.card-blocked.zoom-1 .card-title{color:#fff}.card-inner.card-blocked svg{fill:#fff}.card-owner-actions:hover svg,.card-statistics .statistic.active svg{fill:currentColor}.card-tags{display:-ms-flexbox;display:flex}.card-tags .card-tag{display:block;-ms-flex:1;flex:1;height:.5rem}.card-owner{position:relative}.card-owner .card-owner-info{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.card-owner .card-owner-info.multiple .card-owner-avatar img{margin-right:.45rem}.card-owner .card-owner-avatar{line-height:0;position:relative}.card-owner .is-iocaine{filter:hue-rotate(265deg) saturate(3)}.card-owner img{-ms-flex-negative:0;flex-shrink:0;height:2.5rem;margin-right:.5rem;width:2.5rem}.card-owner .card-owner-name{color:#BDBDBD}.card-owner-actions{background:rgba(255,255,255,.9);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;left:0;opacity:0;position:absolute;top:0;transition:all .2s;width:100%}.card-owner-actions:hover{color:#8c9eff}.card-owner-actions .card-actions{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:0 0 0 .5rem}.card-owner-actions .card-delete:hover{color:#ff5252}.card-owner-actions .icon{width:1.2rem;height:1.2rem;display:inline-block;margin-right:.25rem;padding:0}.card-owner-actions a{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;padding:.6rem .5rem}.card-title{font-size:1rem;line-height:1.25;margin-bottom:.25rem;padding:1rem 1rem 0}.card-title span{padding-right:.25rem}.card-data{color:#BDBDBD;display:-ms-flexbox;display:flex;font-size:14px;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem .5rem}.card-data .card-status-tag{font-size:.75rem;height:.1rem;line-height:.1rem;padding:0 .5em 0 0}.card-data .card-estimation.not-estimated{font-size:.8125rem}.card-statistics{font-size:.9rem;color:#fdfdfd;display:-ms-flexbox;display:flex;margin-left:auto}.card-statistics .statistic{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;margin-left:.5rem}.card-statistics .statistic.active{color:#8c9eff}.card-statistics .statistic.card-iocaine{cursor:help}.card-statistics .statistic.card-votes{margin-left:.2rem}.card-statistics .statistic.card-due-date{margin-left:.1rem}.card-statistics .icon{width:.75rem;height:.75rem;fill:#fdfdfd;margin-right:.2rem}.card-statistics .icon-iocaine{fill:#9c27b0}.card-completion{margin:0 1rem .5rem;position:relative}.card-completion:hover .card-tooltip{display:block}.card-completion .card-completion-bar{background:#EEE;height:.4rem;width:100%}.card-completion .card-completion-percentage{background:#8c9eff;cursor:pointer;height:.4rem;left:0;position:absolute;top:0}.card-completion .card-tooltip{background:#212121;border-radius:5px;color:#fff;display:none;font-size:14px;left:calc(25% - 50px);padding:.25rem 1rem;position:absolute;text-align:center;top:-2.25rem;width:100px}.card-completion .card-tooltip::after{background:#000;content:'';height:10px;left:50%;position:absolute;top:70%;transform:rotate(45deg);width:10px}.color-selector .tag-color.empty-color:after,.color-selector .tag-color.empty-color:before{content:"";top:0;height:48px;width:2px;background:#ff8282;position:absolute}.card-unfold{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0;outline:0;padding:.25rem}.card-unfold:hover{background:linear-gradient(to bottom,#fff,#fcfcfc)}.card-unfold svg{width:2rem;height:.3rem;fill:#EEE}.card-tasks{border-top:1px solid #EEE;margin:.5rem 0 0;padding:0}.card-task{font-size:.75rem;border-bottom:1px solid #EEE}.card-task a{color:#BDBDBD;display:block;overflow:hidden;padding:.5rem .75rem;text-overflow:ellipsis;transition:color .2s;white-space:nowrap}.card-task a.blocked-task{color:#ff5252}.card-task a.closed-task{color:#BDBDBD;text-decoration:line-through}.card-task a:hover{color:#3f51b5}.detail-header-container.blocked,.detail-header-container.blocked .detail-number,.detail-header-container.blocked .detail-subject,.detail-header-container.blocked a{color:#fff}.card-slideshow{position:relative}.card-slideshow:hover .slideshow-left,.card-slideshow:hover .slideshow-right{background:rgba(255,255,255,.2);padding:.25rem;transition:background .2s}.card-slideshow .slideshow-icon{cursor:pointer;position:absolute;top:35%}.card-slideshow .slideshow-icon:hover{background:rgba(140,158,255,.5);transition:background .2s}.card-slideshow svg{width:1.2rem;height:1.2rem;transition:fill .2s}.card-slideshow .slideshow-left,.card-slideshow .slideshow-right{background:0 0;padding:.25rem}.card-slideshow .slideshow-left{left:0}.card-slideshow .slideshow-right{right:0}.card-slideshow img{width:100%}.card-slideshow-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:120px;-ms-flex-pack:center;justify-content:center;overflow:hidden}.card-slideshow-wrapper .loading-spinner{min-height:3rem;min-width:3rem}.color-selector{position:relative}.color-selector .tag-color{cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;border:1px solid #BDBDBD;border-radius:0;margin:0;transition:background .3s ease-out}.color-selector .tag-color:nth-child(7n){margin-right:0}.color-selector .tag-color.disabled{cursor:auto}.color-selector .tag-color.empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative}.color-selector .tag-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector .tag-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.color-selector-dropdown{background:#212121;left:0;padding:1rem;position:absolute;top:2.25rem;width:332px;z-index:99}.color-selector-dropdown-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;margin-bottom:0}.color-selector-dropdown-list .color-selector-option{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0}.color-selector-dropdown-list .color-selector-option:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0;background:#f5f5f5;border:1px solid #EEE;position:relative}.color-selector-dropdown-list .empty-color:after,.color-selector-dropdown-list .empty-color:before{width:2px;height:48px;background:#ff8282;position:absolute;top:0;content:""}.color-selector-dropdown-list .empty-color:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector-dropdown-list .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.custom-color-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.custom-color-selector .custom-color-input{margin:0;width:100%}.custom-color-selector .display-custom-color-wrapper{background:#f5f5f5;margin-right:.5rem}.custom-color-selector .display-custom-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;-ms-flex-negative:0;flex-shrink:0;margin:0}.custom-color-selector .display-custom-color:nth-child(7n){margin-right:0}.custom-color-selector .display-custom-color.empty-color{background:#f5f5f5;border:1px solid #EEE;position:relative;cursor:default}.custom-color-selector .display-custom-color.empty-color:after{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(-45deg);position:absolute;top:0;left:0;transform-origin:top}.custom-color-selector .display-custom-color.empty-color:before{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(45deg);position:absolute;top:0;right:0;transform-origin:top}.detail-header-container{background:#f5f5f5;-ms-flex:1;flex:1;padding:1rem;position:relative}.detail-header-container.blocked,.detail-title-wrapper.blocked{background:#f44336;transition:all .2s linear}.detail-header-container:hover .detail-edit{opacity:1}.detail-header-container.blocked svg{fill:#fff}.detail-header-container .belong-to-epics-wrapper,.detail-header-container .block-desc-container,.detail-header-container .issue-external-reference,.detail-header-container .item-generated-us,.detail-header-container .item-origin-issue,.detail-header-container .task-belongs-to{font-size:.9rem;margin-top:.5rem}.detail-header-container .relate-to-epic-button{color:#BDBDBD;cursor:pointer;display:inline-block}.detail-header-container .relate-to-epic-button:hover{color:#8c9eff}.detail-header-container .relate-to-epic-button .icon-epics{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.detail-header-container .relate-to-epic-button .relate-to-epic-text{font-size:.9rem}.detail-title-wrapper,.edit-title-wrapper{font-size:1.6rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.detail-header-container .issue-external-reference a,.detail-header-container .item-generated-us a,.detail-header-container .item-origin-issue a,.detail-header-container .task-belongs-to a{cursor:pointer;padding:0 .2rem}.detail-header-container .issue-external-reference .item-ref,.detail-header-container .item-generated-us .item-ref,.detail-header-container .item-origin-issue .item-ref,.detail-header-container .task-belongs-to .item-ref{padding:0 .2rem}.detail-title-wrapper{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;max-width:95%;position:relative;transition:all .2s linear}.detail-title-wrapper .detail-title-text{line-height:normal;margin:0}.detail-title-wrapper .detail-number{color:#BDBDBD;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.detail-title-wrapper .detail-subject{color:#757575;-ms-flex-positive:1;flex-grow:1}.detail-title-wrapper .detail-edit{cursor:pointer;margin-left:.75rem;opacity:0;transition:opacity .2s}.detail-title-wrapper .detail-edit svg,.detail-title-wrapper .due-date-icon svg{width:1.3rem;height:1.3rem}.detail-title-wrapper.readonly .due-date-icon{margin-left:2.7rem}.edit-title-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-input{background:#fff;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-button{background:0 0;display:inline;transition:fill .2s}.due-date-icon,.issue-nav a{display:inline-block}.edit-title-wrapper .edit-title-button:hover{fill:#3f51b5}.edit-title-wrapper .save-title-button{margin-left:1rem}.block-desc-container .block-description-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-right:.5rem}.issue-nav{position:absolute;right:1rem;top:1rem}.issue-nav svg{width:1.2rem;height:1.2rem;fill:currentColor}.due-date-button,[disabled].due-date-button{background:#BDBDBD;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.due-date-button.closed,.due-date-button.text-button.closed:hover,[disabled].due-date-button.closed,[disabled].due-date-button.text-button.closed:hover{background:#B8B8B8;border-color:#B8B8B8}.due-date-button.due-set,.due-date-button.text-button.due-set:hover,[disabled].due-date-button.due-set,[disabled].due-date-button.text-button.due-set:hover{background:#9dce0a;border-color:#9dce0a}.due-date-button.due-soon,.due-date-button.text-button.due-soon:hover,[disabled].due-date-button.due-soon,[disabled].due-date-button.text-button.due-soon:hover{background:#fcaf3e;border-color:#fcaf3e}.due-date-button.past-due,.due-date-button.text-button.past-due:hover,[disabled].due-date-button.past-due,[disabled].due-date-button.text-button.past-due:hover{background:#ff5252;border-color:#ff5252}.due-date-button:hover,[disabled].due-date-button:hover{background:#757575}.due-date-button.editable,[disabled].due-date-button.editable{cursor:pointer}.due-date-button.text-button,[disabled].due-date-button.text-button{color:#fff;margin:0;padding:.5rem}.due-date-button.text-button.not-set:hover,[disabled].due-date-button.text-button.not-set:hover{color:#fff}.due-date-button.text-button.not-set,[disabled].due-date-button.text-button.not-set{color:#757575}.due-date-icon{margin:0 .25rem;position:relative}.due-date-icon svg{fill:#BDBDBD;transition:fill .2s ease-in}.due-date-icon.closed svg{fill:#B8B8B8}.due-date-icon.due-set svg{fill:#9dce0a}.due-date-icon.due-soon svg{fill:#fcaf3e}.due-date-icon.past-due svg{fill:#ff5252}.backlog-table-body .user-story-name .due-date-icon,.related-tasks .task-name .due-date-icon{top:.1rem}.issues-table .subject .due-date-icon{top:.25rem}.card-statistics .due-date-icon{margin:.1rem 0 0}.card-statistics .due-date-icon svg{height:.9rem;width:.9rem}.due-date-button-wrapper{display:-ms-flexbox;display:flex;position:relative}.date-picker-container{overflow:visible}.date-picker-popover{background:#fff;border:1px solid #757575;left:0;overflow:visible;position:absolute;top:0;width:auto}.date-picker-popover .pika-single.is-bound{border:0;box-shadow:none}.date-picker-popover-footer{padding:.2rem .5rem;text-align:right}.date-picker-popover-footer svg{fill:#757575;height:1rem;width:1rem}.date-picker-popover-footer a:hover svg{fill:#f44336}tg-filter{background-color:#f5f5f5;display:block;left:0;max-height:100%;min-height:100%;overflow-y:scroll;padding:1rem 0;position:absolute;top:0;transform:translateX(-260px);transition-duration:.5s;width:260px;z-index:1}tg-filter .filters-applied{padding:0 1rem 1rem}tg-filter .filters-applied .single-filter.exclude{background:#fcc;text-decoration:line-through}tg-filter .filters-applied .single-filter:hover{color:currentColor;cursor:default;transition:none}.move-to-sprint-button:not(.disabled),.search-list .choice,.single-filter,tg-filter .filters-advanced .filter-mode{cursor:pointer}tg-filter .filters-advanced{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;font-size:10pt;font-weight:600;padding:0 1rem 1rem}.wysiwyg b,.wysiwyg dl dt,tg-wysiwyg .mention{font-weight:700}tg-filter .filters-advanced .collapsed.exclude{color:#ff5252}tg-filter .filters-advanced a .icon{margin-left:5px;vertical-align:bottom;width:.5rem}.single-filter .name img,.tag img{vertical-align:middle}tg-filter .filters-advanced .filters-advanced-form{padding:.75rem 0;text-align:center}tg-filter .filters-advanced .custom-radio{display:inline}tg-filter .filters-advanced .custom-radio input[type=radio]{display:none}tg-filter .filters-advanced .filter-mode.active .radio-mark-inner{opacity:1}tg-filter .filters-advanced .filter-mode.active.include{color:#3f51b5}tg-filter .filters-advanced .filter-mode.active.exclude{color:#ff5252}tg-filter .filters-advanced .radio-mark,tg-filter .filters-advanced .radio-mark-inner{border-radius:50%;display:inline-block}tg-filter .filters-advanced .radio-mark{background:#d6d5d5;height:22px;margin-right:3px;text-align:center;width:22px}tg-filter .filters-advanced .radio-mark-inner{height:14px;margin-top:4px;opacity:0;width:14px}tg-filter .filters-advanced .radio-mark-inner.include{background:#3f51b5}tg-filter .filters-advanced .radio-mark-inner.exclude{background:#ff5252}tg-filter form,tg-filter h1{padding:0 1rem}tg-filter input{background:#424242;color:#fff;padding-right:2rem}tg-filter input::-webkit-input-placeholder{color:#BDBDBD}tg-filter input::-moz-placeholder{color:#BDBDBD}tg-filter input:-moz-placeholder{color:#BDBDBD}tg-filter input:-ms-input-placeholder{color:#BDBDBD}tg-filter .search-action{position:absolute;right:.7rem;top:.7rem}tg-filter.open{box-shadow:1px 1px 5px rgba(63,81,181,.2);transform:translateX(0)}.filter-list{overflow-y:auto;padding:1rem}.filters-step-cat{margin-top:2rem}.filters-cats ul{margin-bottom:0}.filters-cats li{border-bottom:1px solid #BDBDBD;text-transform:uppercase}.filters-cats li.selected{border-bottom:0}.filters-cats li .filter-list{min-height:60px}.filters-cats .custom-filters .title{color:#3f51b5}.filters-cats .filters-cat-single{-ms-flex-align:center;align-items:center;color:#424242;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 1.5rem;transition:color .2s ease-in}.filters-cats .filters-cat-single.selected,.filters-cats .filters-cat-single:hover{background-color:#d5d5d5;color:#424242;transition:background-color .2s ease-in}.filters-cats .filters-cat-single.selected .icon,.filters-cats .filters-cat-single:hover .icon{opacity:1;transition:opacity .2s ease-in}.filters-cats .icon-arrow-down{fill:currentColor;float:right;height:.9rem;opacity:0;transition:opacity .2s ease-in;width:.9rem}.single-filter{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-align:center;align-items:center;background:#e1e1e1;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;opacity:.5;padding-right:.5rem;position:relative}.live-announcement-inner .title,.live-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.single-filter::after{clear:both;content:"";display:block}.single-filter.active,.single-filter.selected{color:#424242;opacity:1;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;border-color:transparent;border-style:solid;border-width:0 0 0 3px;display:block;width:100%}.profile-bar .not-full-name,.profile-bar h1,.wysiwyg p{word-wrap:break-word}.single-filter .number{background:#bbb;position:absolute;right:0;top:0}.single-filter .remove-filter{cursor:pointer;display:block}.single-filter .remove-filter svg{fill:#757575;transition:fill .2s linear}.single-filter .remove-filter:hover svg{fill:#f44336}.live-announcement{-ms-flex-line-pack:center;align-content:center;background:#107a8a;display:-ms-flexbox;display:flex;height:0;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.live-announcement .live-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.live-announcement.visible{height:146px;pointer-events:auto;transition-delay:0s;width:100%}.live-announcement.visible .live-announcement-inner{opacity:1;transition:opacity .5s .5s}.live-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.live-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;margin-right:1rem}.live-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.live-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.live-announcement-inner .warning,.live-announcement-inner .warning a{color:#0b525c}.live-announcement-inner .close{display:block;position:absolute;right:0;top:1rem}.live-announcement-inner .close svg{width:2rem;height:2rem;fill:#138ea1;pointer-events:none;transition:fill .2s}.live-announcement-inner .close svg:hover{fill:#0b525c}.lightbox-move-to-sprint .move-to-sprint-container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:550px;width:100%}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header{margin:0 auto;max-width:400px;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header ul{display:inline-block;margin:.5em auto 2.5em;width:auto}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header li{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header .check{margin-left:4em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls p{margin-bottom:2.5em;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .sprint-select{margin-top:.5em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .move-button{width:100%}.move-to-sprint-button{color:#fff}.move-to-sprint-button:not(.disabled):hover{color:#8c9eff}.move-to-sprint-button.disabled:hover,.search-list .choice.selected .info{color:#fff}.move-to-sprint-button.disabled{opacity:.5}.search-list .show-closed{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;float:right;font-size:.9em}.add-tag-button .add-tag-text,.tag{font-size:.9rem}.search-list .show-closed svg{height:1em;margin-right:.25em;width:1em}.search-list ul{background:#f5f5f5;border:1px solid #BDBDBD;height:200px;margin:.25em 0 0;max-height:200px;overflow-y:auto}.search-list .choice{padding:.25em .5em}.search-list .choice.selected{background:#9dce0a;color:#fff}.search-list .choice[disabled]{color:#B8B8B8;cursor:not-allowed}.search-list .choice[disabled] .info{color:#B8B8B8}.search-list .choice ng-include{display:-ms-flexbox;display:flex;width:100%}.search-list .choice ng-include .title{-ms-flex-positive:1;flex-grow:1;text-align:left}.search-list .choice ng-include .info{color:#BDBDBD;text-align:right}.search-list .choice .title span{margin-right:.5em}.add-tag-input{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative;width:250px}.add-tag-input input{border-color:#BDBDBD;padding:6px;width:14rem}.add-tag-input .save{cursor:pointer;display:inline-block;fill:#424242;margin:.5rem 0 0 .5rem;transition:.2s linear}.add-tag-input .save:hover{fill:#3f51b5}.add-tag-input .tags-dropdown{font-size:.9rem;background:#fff;border:1px solid #BDBDBD;border-top:0;box-shadow:2px 2px 3px rgba(0,0,0,.2);left:0;max-height:20vh;min-height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:2.25rem;width:85%;z-index:99}.add-tag-input .tags-dropdown-option{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.tags-block,.terms-announcement{align-content:center;display:-ms-flexbox}.add-tag-input .tags-dropdown-color{height:1rem;width:1rem}.add-tag-input li.selected,.add-tag-input li:hover{background:#fff;cursor:pointer;transition:.2s;transition-delay:.1s}.tags-block{-ms-flex-line-pack:center;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.add-tag-button,.tag{display:inline-block}.add-tag-button{color:#BDBDBD;cursor:pointer}.add-tag-button:hover{color:#8c9eff}.add-tag-button .icon-add{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#f5f5f5;border-left:5px solid;border-radius:0 5px 5px 0;color:#424242;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.terms-announcement-inner .title,.terms-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.tag .icon-close{width:.7rem;height:.7rem;cursor:pointer;fill:#ff5252;margin-left:.25rem}.tag .loading-spinner{height:1rem;width:1rem}.terms-announcement{-ms-flex-line-pack:center;background:#107a8a;display:flex;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.terms-announcement .terms-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.terms-announcement.visible{min-height:146px;pointer-events:auto;transition-delay:0s;width:100%}.terms-announcement.visible .terms-announcement-inner{opacity:1;transition:opacity .5s .5s}.terms-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.terms-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;height:auto;margin-right:1rem}.terms-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.terms-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.terms-announcement-inner .warning,.terms-announcement-inner .warning a{color:#0b525c}.tribe-linked.is-active .delete-link,.tribe-linked.is-active .gig-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.terms-announcement-inner .close{display:block;position:absolute;right:.5rem;top:1rem}.terms-announcement-inner .close svg{width:2rem;height:2rem;fill:#f5f5f5;pointer-events:none;transition:fill .2s}.terms-announcement-inner .close svg:hover{fill:#0b525c}.terms-announcement-inner a{color:#f5f5f5}.loader .tip-color-1 p{color:#ae4fb0}.loader .tip-color-1 svg{fill:#ae4fb0;stroke:#ae4fb0}.loader .tip-color-2 p{color:#4e88df}.loader .tip-color-2 svg{fill:#4e88df;stroke:#4e88df}.loader .tip-color-3 p{color:#6360d6}.loader .tip-color-3 svg{fill:#6360d6;stroke:#6360d6}.loader .tip-color-4 p{color:#47b3a6}.loader .tip-color-4 svg{fill:#47b3a6;stroke:#47b3a6}.loader .tip-color-5 p{color:#d76969}.loader .tip-color-5 svg{fill:#d76969;stroke:#d76969}.tip{text-align:center;width:auto}.tip .translate-cloak{display:none}.tip p{display:-ms-flexbox;display:flex;font-size:1.1em;-ms-flex-pack:center;justify-content:center;margin-bottom:1em;max-width:440px}.tip p.title{color:#000;font-size:1em;margin-bottom:1.75em}.tip p.range{width:1px}.tip svg{height:32px;margin:0 .3em;width:32px}.tip svg.icon-upvote{height:30px;width:24px}.tip .range-slider{display:initial;width:100px}.tip .arrows svg{height:40px;margin:0}.tip .arrows svg.icon-arrow-left{margin-left:7px}.tip .arrows svg.icon-arrow-right{margin-left:-7px}.tribe-linked{margin-left:auto;overflow:hidden;position:absolute;right:0;top:0;z-index:99}.tribe-linked .tribe-linked-inner{padding:.5rem;transition:.2s}.tribe-linked .tribe-linked-inner:hover{background:#fff;cursor:pointer}.tribe-linked .tribe-linked-inner .close,.tribe-linked .tribe-linked-inner .delete-link,.tribe-linked .tribe-linked-inner .gig-title,.tribe-linked .tribe-linked-inner .synchronize-link,.tribe-linked .tribe-linked-inner .title{display:none;opacity:0}.tribe-linked .tribe-logo{height:2rem;width:2rem}.tribe-linked.is-active{animation-duration:1s;animation-name:slideTribeInner;background:#fff;box-shadow:1px 1px 5px rgba(66,66,66,.2);overflow:hidden}.epic-row .epic-statuses,.epics-table-dropdown{box-shadow:3px 3px 2px rgba(0,0,0,.1);z-index:99}.tribe-linked.is-active .tribe-linked-inner{height:100%;min-width:300px}.tribe-linked.is-active .tribe-linked-inner .close,.tribe-linked.is-active .tribe-linked-inner .delete-link,.tribe-linked.is-active .tribe-linked-inner .gig-title,.tribe-linked.is-active .tribe-linked-inner .synchronize-link,.tribe-linked.is-active .tribe-linked-inner .title{animation-duration:1.25s;animation-name:fadeInFromNone;display:block;opacity:1}.tribe-linked.is-active .tribe-linked-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.tribe-linked.is-active .tribe-logo{margin-right:.5rem;vertical-align:text-bottom}.tribe-linked.is-active svg{width:1rem;height:1rem;fill:#ff5252;transition:all .2s}.tribe-linked.is-active svg:hover{fill:#f44336}.tribe-linked.is-active .title{margin-bottom:0}.tribe-linked.is-active .gig-title{color:#107a8a;margin-bottom:.5rem}.tribe-linked.is-active .delete-link{font-size:.9rem;color:#3f51b5;display:block;margin-bottom:1rem}.tribe-linked.is-active .synchronize-link{display:block;padding:.5rem}.tribe-linked.is-active .close{-ms-flex-item-align:start;align-self:flex-start;margin-left:1rem}@keyframes slideTribeInner{0%{max-height:60px;width:100px}20%{max-height:60px;width:300px}100%{max-height:225px}}@keyframes fadeInFromNone{0%{display:none;opacity:0}80%{display:block;opacity:0}100%{display:block;opacity:1}}tg-wysiwyg-code-lightbox textarea{height:350px}.wysiwyg{line-height:1.4rem;overflow:auto;padding:1rem}.wysiwyg h1,.wysiwyg h2,.wysiwyg h3{padding-bottom:.5rem}.wysiwyg h1{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:2.25em;line-height:1.2;margin-bottom:1rem;margin-top:1rem;text-transform:uppercase}.wysiwyg h2,.wysiwyg h3,.wysiwyg h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-top:1rem;margin-bottom:1rem}.wysiwyg h2{font-size:1.6rem;line-height:1.225}.wysiwyg h3{font-size:1.2rem}.wysiwyg ol,.wysiwyg ul{line-height:1.5;list-style-position:outside;margin-bottom:1rem;margin-top:0;padding-left:2em}.wysiwyg ol ol,.wysiwyg ol ul,.wysiwyg ul ol,.wysiwyg ul ul{padding-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#3f51b5;cursor:pointer}.wysiwyg a:hover{color:#8c9eff}.wysiwyg code,.wysiwyg pre:not([class*=language-]){font-size:.9rem;background:#272822;color:#EEE;direction:ltr;font-family:'courier new',monospace;overflow:auto;unicode-bidi:embed}.wysiwyg p{margin-bottom:1rem}.wysiwyg .codehilite{overflow:auto}.wysiwyg blockquote p{margin:0}.wysiwyg pre:not([class*=language-]){line-height:1.4rem;margin-bottom:.5rem;padding:1rem;white-space:pre-wrap}.wysiwyg code{padding:.2rem}.wysiwyg table{border:1px solid #BDBDBD;margin-bottom:1rem}.medium-editor-mention-panel ul,tg-wysiwyg div[contenteditable=true] :last-child{margin-bottom:0}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#BDBDBD 1px solid}.wysiwyg th{border-right:#BDBDBD 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#BDBDBD 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.wysiwyg textarea{background:#fff;max-height:none}.wysiwyg hr{border:1px solid #EEE}.medium-editor-mention-panel{background-color:#fff;border:1px solid #BDBDBD;position:absolute}.medium-editor-mention-panel:empty{border:0}.medium-editor-mention-panel li{border-top:1px solid #BDBDBD;cursor:pointer;padding:2px 5px}.medium-editor-mention-panel li:first-child{border-top:0}.medium-editor-mention-panel li.active,.medium-editor-mention-panel li:hover{background-color:#1a237e;color:#fff}.code-language-search,.code-language-selector{font-size:.75rem;background-color:#fff;position:absolute}tg-wysiwyg{display:-ms-flexbox;display:flex;margin-bottom:2rem}tg-wysiwyg pre{cursor:pointer}tg-wysiwyg .outdated{color:#f44336}tg-wysiwyg .tools{padding-left:1rem}tg-wysiwyg .tools:not(.visible){opacity:0;pointer-events:none}tg-wysiwyg .tools:not(.visible) a{cursor:default}tg-wysiwyg .tools a{display:block;margin-bottom:.5rem}tg-wysiwyg .tools svg{fill:#BDBDBD}tg-wysiwyg .editor{width:100%}tg-wysiwyg .mode-editor span{color:#BDBDBD;cursor:pointer;margin-right:.5rem}tg-wysiwyg .markdown-editor-placeholder,tg-wysiwyg .medium-editor-placeholder{color:#BDBDBD;overflow:visible;padding-left:1rem}tg-wysiwyg .markdown-editor-placeholder::after,tg-wysiwyg .medium-editor-placeholder::after{color:#BDBDBD;font-style:normal}tg-wysiwyg .markdown:not(.empty) p{margin-bottom:0;white-space:pre-wrap}tg-wysiwyg .read-mode{cursor:pointer}tg-wysiwyg .medium{border:1px solid transparent}.code-language-search,.code-language-selector,tg-wysiwyg .edit-mode .markdown,tg-wysiwyg .edit-mode .medium{border:1px solid #BDBDBD}tg-wysiwyg .edit-mode .medium-editor-element{min-height:10rem}.code-language-selector{cursor:pointer;padding:.2rem .5rem 0}.code-language-search ul{cursor:pointer;margin-bottom:0;max-height:20vh;overflow-y:scroll}.epic-row .sprint,.epics-table-header .sprint,.story-row .sprint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.code-language-search li{padding:.2rem .5rem}.medium-editor-toolbar li .medium-editor-button-active{color:#8c9eff}.medium-editor-toolbar svg{fill:#fff}.medium-editor-toolbar button:hover svg{fill:#8c9eff}.discover-header{background:url(../images/discover.png) bottom left repeat-x #EEE;margin-bottom:2.5rem;padding:1rem 1rem 2rem;text-align:center}.discover-header .discover-header-inner{max-width:1200px;min-width:768px;margin:0 auto}.discover-header .title{font-size:3rem;margin-bottom:0}.discover-header .project-number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#3f51b5}.discover-results-header .title,.featured-projects .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.discover-header form{margin:0 30%;position:relative}@media (max-width:767px){.discover-header .discover-header-inner{width:90%;min-width:0}.discover-header form{margin:0 .5rem}}.discover-header input[type=text]{background:#fff;border:0;padding:1rem;width:100%}.discover-header input[type=text]:focus{outline-color:#8c9eff}.discover-header input[type=text]:-webkit-autofill{background:rgba(26,35,126,.5)}.discover-header .search-button{width:1.5rem;height:1.5rem;fill:#BDBDBD;position:absolute;right:1rem;top:1rem;transition:fill .2s}.discover-header .search-button:hover{cursor:pointer;fill:#3f51b5}.discover-results-header .discover-results-header-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.discover-results-header svg{width:1.2rem;height:1.2rem;fill:#BDBDBD;margin-right:.25rem}.discover-results-header .title{font-size:1.6rem;text-transform:uppercase}.discover-results-header h2{display:inline-block}.filter-discover-search .discover-search-filter{margin-right:1rem}.filter-discover-search .discover-search-filter.active{color:#3f51b5}.filter-discover-search .discover-search-filter.active svg{fill:#3f51b5}.filter-discover-search svg{width:.8rem;height:.8rem}.discover-search-subfilter{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative}.discover-search-subfilter:after,.discover-search-subfilter:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.discover-search-subfilter:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.discover-search-subfilter:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.discover-search-subfilter.most-liked-subfilter::after,.discover-search-subfilter.most-liked-subfilter::before{left:85%}.discover-search-subfilter.most-active-subfilter::after,.discover-search-subfilter.most-active-subfilter::before{left:95%}.discover-search-subfilter.ng-enter{animation:dropdownFade .2s}.discover-search-subfilter .results{font-size:.9rem;color:#ff5252;display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .results:hover{color:#f44336}.discover-search-subfilter .filter-list{display:-ms-flexbox;display:flex;margin:0 0 0 auto}.discover-search-subfilter .filter-list a{display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .filter-list a:hover{background:#BDBDBD;color:currentColor}.discover-search-subfilter .filter-list a.active{background:#8c9eff;color:#fff}.featured-projects{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.featured-projects{width:90%;min-width:0}}.featured-projects .title{font-size:1.6rem;color:#424242;text-align:center}.featured-projects-inner{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.featured-project{background:#fff;border:1px solid #EEE;margin:.5rem;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:23%;flex-basis:23%;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:23%}.featured-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.featured-project .project-tag{-ms-flex:1;flex:1}.featured-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.featured-project .project-card-description{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575}.featured-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.featured-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.featured-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.featured-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.featured-project .statistic{font-size:.9rem;color:#BDBDBD;display:inline-block;margin-right:.5rem}.featured-project .statistic.active{color:#3f51b5}.featured-project .statistic.active svg{fill:currentColor}.featured-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.featured-project .project-card-header .icon-badge{fill:#8c9eff}.featured-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.featured-project .project-card-logo img{width:100%}.featured-project .project-card-name{line-height:1.25}.featured-project .project-card-name a{font-size:1.2rem;color:#3f51b5}.featured-project .project-card-name a:hover{color:#8c9eff}@media (max-width:767px){.featured-project{-ms-flex-preferred-size:45%;flex-basis:45%}}@media (max-width:480px){.featured-project{-ms-flex-preferred-size:100%;flex-basis:100%}}.highlighted{margin:1rem auto 4rem;max-width:1200px;min-width:768px;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}@media (max-width:767px){.highlighted{width:90%;min-width:0;-ms-flex-direction:column;flex-direction:column}.highlighted tg-most-active{margin-top:4rem}}.highlighted tg-most-active,.highlighted tg-most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.highlighted tg-most-liked{margin-right:8%}@media (max-width:767px){.highlighted tg-most-liked{margin-right:0}}.highlighted .most-active,.highlighted .most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column}.highlighted .header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.highlighted .header svg{width:.8rem;height:.8rem;fill:#BDBDBD;margin-left:.5rem}.highlighted .title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.highlighted .title-wrapper svg{width:1.25rem;height:1.25rem;fill:#BDBDBD;margin-right:.5rem}.highlighted .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.6rem;color:#424242;display:inline-block;margin:0}.highlighted .highlighted-projects-container{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.highlighted .loading-container{margin-top:calc(50% - 1rem)}.highlighted .loading-spinner{display:block;margin:2rem auto;max-height:3rem;max-width:3rem}.highlighted .view-more-projects{margin-top:auto;width:100%}.highlighted .empty-highlighted-project{border:2px dashed #EEE;-ms-flex:1;flex:1;padding:2rem;text-align:center}.highlighted .empty-highlighted-project svg{width:2rem;height:2rem;display:block;fill:#BDBDBD;margin:1rem auto}.highlighted .empty-highlighted-project span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#757575;display:block}.filter-highlighted{position:relative}.filter-highlighted .current-filter{padding:1rem}.filter-highlighted .current-filter span{margin-left:.2rem;position:relative;top:.2rem}.filter-highlighted .current-filter:hover svg{fill:currentColor}.filter-highlighted .filter-list{background:#000;position:absolute;right:0;top:1.5rem}.filter-highlighted .filter-list.ng-enter{animation:dropdownFade .2s ease-in}.filter-highlighted .filter-list.ng-leave{animation:dropdownFade .2s ease-in;animation-direction:reverse}.filter-highlighted li{font-size:.9rem;color:#fff;cursor:pointer;min-width:8rem;padding:.25rem .5rem}.filter-highlighted li:hover{background:rgba(140,158,255,.4)}.highlighted-project{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:9rem;flex-basis:9rem;min-height:9rem;padding:1.5rem 0}.highlighted-project:nth-last-child(-n+2){border-bottom:0}.highlighted-project .project-logo{-ms-flex-preferred-size:3rem;flex-basis:3rem;height:auto;margin-right:1rem;width:3rem}.highlighted-project .project-logo img{width:100%}.highlighted-project .project-data-container{-ms-flex:1;flex:1}.highlighted-project .single-project-header{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.highlighted-project .project-title{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.epic-row .epic-pill,.epic-row .epic-statuses{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.highlighted-project .project-title a{color:#3f51b5}.highlighted-project .project-title a:hover{color:#8c9eff}.highlighted-project .project-description{font-size:.9rem;color:#757575;margin-bottom:0}.highlighted-project .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:end;justify-content:flex-end}.highlighted-project .project-statistics svg{width:.75rem;height:.75rem;fill:#BDBDBD;margin-right:.25rem}.highlighted-project .statistic{font-size:.9rem;color:#BDBDBD;display:inline-block;margin-right:.5rem}.highlighted-project .statistic.active{color:#3f51b5}.highlighted-project .statistic.active svg{fill:#3f51b5}.discover-search .discover-header form{margin:0 8rem;position:relative}.discover-search .discover-header .search-button{left:1rem;right:auto}.discover-search .discover-header .searchbox input{padding-left:3.5rem;padding-right:23rem}.discover-search .searchbox-filters{position:absolute;right:1rem;top:.7rem;width:auto}.discover-search .searchbox-filters input{display:none}.discover-search .searchbox-filters label{border-radius:4px;color:#BDBDBD;cursor:pointer;display:inline-block;padding:.4rem .75rem;transition:all .2s;transition-delay:.2s}.discover-search .searchbox-filters label.active{background:#8c9eff;color:#fff}.discover-search .searchbox-filters label:hover{background:#EEE;color:#757575}.discover-results{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.discover-results{width:90%;min-width:0}}.discover-results .discover-results-inner .spin{margin-top:4rem}.discover-results .list-itemtype-project{border-bottom:1px solid #BDBDBD;display:-ms-flexbox;display:flex;padding:1rem 0}.discover-results .list-itemtype-project:last-child{border-bottom:0}.discover-results .list-itemtype-project-left{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;width:100%}.discover-results .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.discover-results .list-itemtype-project-data{-ms-flex:1;flex:1;vertical-align:middle}.discover-results .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-pack:end;justify-content:flex-end}.discover-results .project-statistics svg{width:.7rem;height:.7rem;fill:#BDBDBD;margin-right:.2rem}.discover-results .statistic{font-size:.9rem;color:#BDBDBD;display:inline-block;margin-right:.5rem}.discover-results .statistic svg{fill:#BDBDBD;stroke:#BDBDBD}.discover-results .statistic.active{color:#3f51b5}.discover-results .statistic.active svg{fill:#3f51b5}.discover-results .more-results{display:block;margin:0 20rem;transition:inherit}.discover-results div[tg-loading] img{display:block;margin:0 auto}.lightbox-create-epic{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1}.lightbox-create-epic .create-epic-container{max-width:700px;width:90%}.lightbox-create-epic .subject-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.lightbox-create-epic .subject-container .subject{padding-left:1rem;width:100%}.lightbox-create-epic .attachments{margin-bottom:0}.lightbox-create-epic .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-create-epic .settings fieldset{margin-right:.5rem}.lightbox-create-epic .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-create-epic .settings fieldset:last-child{margin:0}.lightbox-create-epic .settings input{display:none}.lightbox-create-epic .settings input:checked+label{background:#3f51b5;border:1px solid #3f51b5;color:#fff}.lightbox-create-epic .settings input:checked+.blocked{background:#f44336;border:1px solid #f44336;color:#fff}.lightbox-create-epic label{font-size:.9rem;background:#f5f5f5;border:1px solid #BDBDBD;color:#BDBDBD;cursor:pointer;display:block;padding:.5rem 3rem;text-transform:none;transition:all .2s ease-in}.lightbox-create-epic label:hover{background:#8c9eff;border:1px solid #3f51b5;color:#fff}.lightbox-create-epic label.blocked:hover{background:#ff5252;border:1px solid #f44336}.lightbox-create-epic .create-epic-button{display:block;width:100%}.epic-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #EEE;cursor:move;display:-ms-flexbox;display:flex;transition:background .2s}.epic-row .assigned,.epic-row .project{padding:.5rem}.epic-row .name,.epic-row .progress,.epic-row .sprint,.epic-row .status,.epic-row .vote{padding:1rem .5rem}.epic-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .assigned,.epic-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .sprint,.epic-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epic-row .name,.epic-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epic-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epic-row .sprint{width:90%}.epic-row:hover{background:rgba(140,158,255,.05)}.epic-row:hover .icon-drag{opacity:1}.epic-row.not-empty{cursor:pointer}.epic-row.is-blocked{background:rgba(255,82,82,.5)}.epic-row.is-closed .name a{color:#e3e3e3;text-decoration:line-through}.epic-row.unfold .name .icon{transform:rotate(0)}.epic-row .name .icon{transform:rotate(180deg);transition:all .2s}.epic-row .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#EEE;opacity:0;transition:opacity .1s}.epic-row .epic-pill{font-size:.75rem;background:#424242;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.epic-row .status{cursor:pointer;position:relative}.epic-row .status button{background:0 0}.epic-row .icon-arrow-down{width:.7rem;height:.7rem;fill:#BDBDBD;margin-left:.1rem}.epic-row .progress-bar,.epic-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.epic-row .progress-bar{background:#f5f5f5;max-width:40vw;padding-right:1rem;width:100%}.epic-row .progress-status{background:#8c9eff;width:10vw}.epic-row .vote{color:#757575}.epic-row .vote.is-voter{color:#8c9eff;fill:#8c9eff}.epic-row .assigned img{width:40px}.epic-row .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.epic-row .is-unassigned{color:#BDBDBD}.epic-row .epic-statuses{font-size:.9rem;background:rgba(33,33,33,.9);border-bottom:1px solid #424242;color:#fff;left:0;list-style-type:none;margin:0;position:absolute;text-align:left;top:2.5rem;width:200px}.epic-row .epic-statuses:last-child{border:0}.epic-row .epic-statuses li{padding:.5rem}.epic-row .epic-statuses li:hover{color:#8c9eff;transition:color .3s linear}.empty-epics{text-align:center}.empty-epics a{color:#3f51b5;display:block;margin-bottom:2rem}.epics-table{margin-top:2rem}.epics-table .loading{margin:2% auto;width:3rem}.epics-table .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.epics-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #BDBDBD;display:-ms-flexbox;display:flex;padding:.5rem;position:relative}.epics-table-header .name,.epics-table-header .progress,.epics-table-header .sprint,.epics-table-header .status,.epics-table-header .vote{padding:1rem .5rem}.epics-table-header .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epics-table-header .assigned,.epics-table-header .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center;padding:1rem .5rem}.epics-table-header .sprint,.epics-table-header .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epics-table-header .name,.epics-table-header .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epics-table-header .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epics-table-header .sprint{width:90%}.epics-table-options-wrapper{bottom:1rem;position:absolute;right:.5rem}.epics-table-option-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0}.epics-table-option-button .icon{width:.7rem;height:.7rem}.epics-table-dropdown{background:#fff;border-bottom:1px solid rgba(0,0,0,.1);border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);padding:.5rem;position:absolute;right:0;top:1.3rem;width:250px}.epics-table-dropdown.ng-hide-remove{animation:dropdownFade .2s}.epics-table-dropdown.ng-hide-add{animation:dropdownFade .2s reverse}.epics-table-dropdown .fieldset{font-size:.9rem;border-bottom:1px solid #EEE;color:#BDBDBD;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.epics-table-dropdown .fieldset:last-child{border:0}.story-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;margin-left:4rem;transition:background .2s}.story-row .assigned,.story-row .project{padding:.5rem}.story-row .name,.story-row .progress,.story-row .sprint,.story-row .status,.story-row .vote{padding:1rem .5rem}.story-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .assigned,.story-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .sprint,.story-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.story-row .name,.story-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.story-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.story-row .sprint{width:90%}.story-row:hover{background:rgba(140,158,255,.05)}.story-row.is-blocked{background:rgba(255,82,82,.5)}.story-row.is-closed .name{color:#BDBDBD;text-decoration:line-through}.story-row .name{-ms-flex-preferred-size:17.5vw;flex-basis:17.5vw}.story-row .name a{cursor:pointer}.story-row .progress-bar,.story-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.story-row .progress-bar{background:#f5f5f5;max-width:40vw;width:100%}.story-row .progress-status{background:#8c9eff;width:10vw}.story-row .vote{color:#757575}.story-row .vote.is-voter{color:#8c9eff;fill:#8c9eff}.story-row .project{cursor:pointer}.story-row .assigned img,.story-row .project img{width:40px}.story-row .icon-upvote{width:.75rem;height:.75rem;fill:#757575;margin-right:.25rem;vertical-align:middle}.lightbox-create-related-user-stories .lightbox-create-related-user-stories-wrapper{max-width:600px;width:90%}.lightbox-create-related-user-stories .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-create-related-user-stories .related-with-selector input{display:none}.lightbox-create-related-user-stories .related-with-selector input:checked+label{background:#8c9eff;color:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input:checked+label:hover{background:#8c9eff}.lightbox-create-related-user-stories .related-with-selector input+label{background:rgba(238,238,238,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input+label:hover{background:rgba(140,158,255,.3);transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-create-related-user-stories fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-create-related-user-stories .new-user-story-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-create-related-user-stories .existing-user-story-form,.lightbox-create-related-user-stories .new-user-story-form{margin-bottom:1rem}.lightbox-create-related-user-stories .no-stories-found{padding:1rem 0 0}.lightbox-create-related-user-stories .new-user-story-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-create-related-user-stories .new-user-story-options input{display:none}.lightbox-create-related-user-stories .new-user-story-options input:checked+label{background:#8c9eff;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label{background:#f5f5f5;color:#424242;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label:hover{background:#8c9eff;color:#fff;fill:#fff}.lightbox-create-related-user-stories button{width:100%}.related-userstories{margin-bottom:2rem;position:relative}.related-userstories-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-userstories-header .related-userstories-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-userstories-header .add-button{background:#424242;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-userstories-header .add-button.is-active,.related-userstories-header .add-button:hover{background:#8c9eff}.related-userstories-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-userstories-body{width:100%}tg-related-userstory-row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}tg-related-userstory-row.sortable{cursor:move}tg-related-userstory-row.sortable:hover{background:rgba(140,158,255,.05)}tg-related-userstory-row.sortable:hover .userstory-settings{opacity:1;transition:all .2s ease-in}tg-related-userstory-row.sortable:hover .icon-drag{opacity:1}tg-related-userstory-row.sortable .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#EEE;opacity:0;transition:opacity .1s}tg-related-userstory-row .status{-ms-flex-negative:0;flex-shrink:0;position:relative;width:125px}tg-related-userstory-row .assigned-to-column{-ms-flex-negative:0;flex-shrink:0;width:150px}tg-related-userstory-row .assigned-to-column img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .project{cursor:pointer;-ms-flex-preferred-size:100px;flex-basis:100px}tg-related-userstory-row .project img{width:40px}tg-related-userstory-row .userstory-name{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;margin-right:1rem}tg-related-userstory-row .userstory-name a{cursor:pointer}tg-related-userstory-row .userstory-name span{display:inline-block;margin-left:.25rem}tg-related-userstory-row .closed{border-left:10px solid #EEE;color:#EEE}tg-related-userstory-row .closed a,tg-related-userstory-row .closed svg{fill:#EEE}tg-related-userstory-row .closed .userstory-name a{color:#EEE;text-decoration:line-through}tg-related-userstory-row .blocked{background:rgba(255,82,82,.2);border-left:10px solid #ff5252}tg-related-userstory-row .userstory-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;opacity:0;width:60px}tg-related-userstory-row .userstory-settings svg{width:1.1rem;height:1.1rem;fill:#BDBDBD;margin-right:.5rem;transition:fill .2s ease-in}tg-related-userstory-row .userstory-settings svg:hover{fill:#757575}tg-related-userstory-row .userstory-settings a:hover{cursor:pointer}tg-related-userstory-row .delete-userstory:hover .icon-trash{fill:#ff5252}tg-related-userstory-row .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}tg-related-userstory-row .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .avatar figcaption{margin-left:.5rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:4rem;margin:0 auto;width:4rem}.external-app-wrapper svg{width:4rem;height:4rem}.comment .comment-main,.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-ms-flexbox;display:flex}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper .app-card a,.external-app-wrapper .user-card a{font-size:1rem;display:block}.external-app-wrapper .app-card .app-image{-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-ms-flex:1;flex:1}.external-app-wrapper .app-card p{font-size:1rem}.external-app-wrapper .user-card{background:#fff8e4;border:1px solid #f1e8cd;padding:1rem}.external-app-wrapper .user-card .user-image{-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .button-green{display:block}.external-app-wrapper .cancel{font-size:.9rem;display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.comments{clear:both}.comments tg-wysiwyg{margin-top:1.5rem}.comments .read-mode{border:1px solid #BDBDBD;height:55px}.comments .read-mode .markdown-editor-placeholder,.comments .read-mode .medium-editor-placeholder{height:55px}.comments .add-comment{margin-top:1rem}.comments .add-comment textarea{height:3rem}.comments .add-comment .edit,.comments .add-comment .preview-icon{position:absolute;right:1rem}.comments .save-comment-wrapper{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.comments .save-comment{margin-top:1rem;padding:.5rem 4rem}.comment{display:block}.comment .comment-wrapper{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:2rem 0}.comment .comment-wrapper:hover .comment-option{opacity:1}.comment .comment-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.comment .comment-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:1rem}.comment .comment-creator{color:#3f51b5;margin-right:.5rem}.comment .comment-date{font-size:.9rem;color:#BDBDBD}.comment .comment-edited{font-size:.9rem;background:#EEE;margin:0 .5rem;padding:.25rem}.comment .comment-edited .separator{margin:0 .25rem}.comment .comment-edited a{color:#3f51b5;fill:#3f51b5}.comment .comment-edited svg{width:.75rem;height:.75rem;margin:0 0 0 .25rem}.comment .comment-options{-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;margin-left:1.5rem}.comment .comment-options .comment-option{cursor:pointer;opacity:0}.comment .comment-options .icon-edit{fill:#BDBDBD;margin-right:.5rem}.comment .comment-options .icon-edit:hover{fill:#757575}.comment .comment-options .icon-close{fill:#BDBDBD;margin-right:.5rem}.comment .comment-options .icon-close:hover{fill:#f44336}.comment .comment-options .icon-trash{fill:#ff5252}.comment .comment-options .icon-trash:hover{fill:#f44336}.comment .deleted-comment-wrapper{border-bottom:1px solid #EEE;padding:1rem 0;width:100%}.comment .deleted-comment-main{font-size:.75rem;color:#BDBDBD;display:-ms-flexbox;display:flex;width:100%}.comment .toggle-deleted-comment{color:#3f51b5;fill:#3f51b5;margin:0 1rem;transition:none}.comment .toggle-deleted-comment .icon-arrow-down,.comment .toggle-deleted-comment .icon-arrow-up{width:.8rem;height:.8rem;margin-left:.25rem}.comment .restore-comment{margin-left:auto;transition:all .2s}.comment .restore-comment:hover{color:#3f51b5;fill:#3f51b5}.comment .restore-comment .icon-reload{width:.8rem;height:.8rem;margin-right:.25rem}.comment .deleted-comment-comment{margin-top:1rem}.comment-text{max-width:80rem}.comment-text.wysiwyg{margin-bottom:0;padding:0}.lightbox-display-historic{display:none}.lightbox-display-historic .history-container{max-width:800px;width:90%}.lightbox-display-historic .history-wrapper{max-height:600px;overflow-x:hidden;overflow-y:auto;padding:2rem}.entry{display:block}.entry .entry-wrapper{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:2rem 0}.entry .entry-avatar{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:50px}.entry .entry-main{-ms-flex:1;flex:1;max-width:calc(100% - 100px)}.entry .entry-data{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.entry .entry-creator{color:#3f51b5;margin-right:.5rem}.entry .entry-date{font-size:.9rem;color:#BDBDBD}.entry .display-full-entry{width:1.25rem;height:1.25rem;cursor:pointer;fill:#3f51b5;margin-left:auto;transform:rotate(0);transition:transform .2s}.entry .display-full-entry.inactive{transform:rotate(180deg)}.entry .entry-text{margin-bottom:0}.entry .entry-text.ellipsed{max-height:3rem;overflow:hidden}.entry .entry-text.blurry{position:relative}.entry .entry-text.blurry::after{background-image:linear-gradient(to top,#fff,transparent);content:'';height:100%;left:0;position:absolute;top:0;width:100%}.history-tabs .order-comments{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:auto;transition:none}.history-tabs .icon-arrow-down,.history-tabs .icon-arrow-up{width:.75rem;height:.75rem}.activity-diff .key{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#EEE;margin-right:.5rem;padding:.25rem}.add-member-suggest .add-member-suggest-name,.home-project .project-card-description,.home-wrapper .title-bar,.invite-members-form .invite-members-single-help,.projects-empty p,.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.activity-diff .diff{line-height:1.6}.activity-diff .icon-arrow-right{width:.75rem;height:.75rem;fill:#BDBDBD;margin:0 .5rem}.activity-diff .diff-status-wrapper p{display:inline-block}.activity-diff .diff-status-wrapper ins{background:rgba(242,244,255,.3);text-decoration:underline}.activity-diff .diff-status-wrapper del{background:rgba(255,82,82,.3)}.activity-diff .diff-color-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.activity-diff .diff-color-wrapper .diff{display:inline-block;height:1.2rem;width:1.2rem}.activity{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;padding:2rem 0}.activity .activity-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.activity .activity-data{margin-bottom:1rem}.activity .activity-creator{color:#3f51b5;margin-right:.5rem}.activity .activity-date{color:#BDBDBD}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #EEE;cursor:pointer;transition:background .2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(140,158,255,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single>a,.working-on .duty-single>a{-ms-flex-align:center;align-items:center;border-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.watching .duty-single>a.blocked,.working-on .duty-single>a.blocked{background:rgba(255,82,82,.2);color:#f44336}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper{display:-ms-flexbox;display:flex}@media (max-width:767px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .duty-summary{-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .dashboard-container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@media (max-width:1280px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:767px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .watching-container,.home-wrapper .working-on-container{-ms-flex:1;flex:1;padding-left:.5rem;padding-right:.5rem}.home-wrapper .working-on-container{margin-right:1rem}.home-wrapper .project-list{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.2rem;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0 0 .5rem;padding:.5rem 1rem}.home-project{background:#fff;border:1px solid #EEE;margin:.5rem .5rem 1rem;cursor:pointer;transition:all .2s}.home-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.home-project .project-tag{-ms-flex:1;flex:1}.home-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-project .project-card-description{font-size:.9rem;color:#757575}.home-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.home-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.home-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.home-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.home-project .statistic{font-size:.9rem;color:#BDBDBD;display:inline-block;margin-right:.5rem}.home-project .statistic.active{color:#3f51b5}.home-project .statistic.active svg{fill:currentColor}.home-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.home-project .project-card-header .icon-badge{fill:#8c9eff}.home-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.home-project .project-card-logo img{width:100%}.home-project .project-card-name{line-height:1.25}.home-project .project-card-name a{font-size:1.2rem;color:#3f51b5}.home-project .project-card-name a:hover{color:#8c9eff}.home-project:hover{border:1px solid rgba(140,158,255,.2);box-shadow:0 0 5px #EEE}.home-project.blocked-project{border:#EEE}.home-project.blocked-project:hover{border:#EEE;box-shadow:none}.home-project.blocked-project .project-card-description,.home-project.blocked-project .project-card-logo,.home-project.blocked-project .project-card-name a,.home-project.blocked-project .project-card-statistics,.home-project.blocked-project .tags-container{opacity:.3}.projects-empty{text-align:center}.projects-empty svg{fill:#EEE;height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty p{font-size:.9rem}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{margin:2rem 2rem 1rem;text-align:center}.empty-ticket{display:-ms-flexbox;display:flex}.empty-ticket:not(:last-child){border-bottom:1px solid #EEE;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#e1e1e1;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:8vw}@media (max-width:1280px){.empty-ticket .line{width:30vw}}@media (max-width:767px){.empty-ticket .line{width:30vw}}@media (max-width:480px){.empty-ticket .line{width:30vw}}.empty-ticket .line:last-child{margin:0;width:18vw}@media (max-width:1280px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:767px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:480px){.empty-ticket .line:last-child{width:50vw}}.invite-members-form{border-top:1px solid #EEE;margin:0 5rem}.invite-members-form .invite-members-form-list{margin:0 0 1rem}.invite-members-form .invite-members-single{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem}.invite-members-form .invite-members-single-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.invite-members-form .invite-members-single-avatar{height:4rem;margin-right:1rem;width:4rem}.invite-members-form .invite-members-single-remove{color:#ff5252;margin-left:1rem;transition:color .2s}.invite-members-form .invite-members-single-remove:hover{color:#f44336}.invite-members-form .invite-members-single-role{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:0;flex-shrink:0}.invite-members-form .invite-members-single-new{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem 0}.invite-members-form .invite-members-single-new .invite-members-single-new-btn{cursor:pointer}.invite-members-form .invite-members-single-new .icon-add{width:2rem;height:2rem;fill:#424242;transition:fill .2s}.invite-members-form .invite-members-single-new:hover .icon-add{fill:#8c9eff}.invite-members-form .invite-members-single-send{font-size:1.2rem;display:block;margin:1.5rem 0 1rem;padding:1rem;width:100%}.invite-members-form .invite-members-single-help{font-size:.9rem}.lightbox-add-member .add-members-wrapper{max-width:900px;width:90%}.add-member-suggest .add-member-suggest-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:2rem 0 0}.add-member-suggest .add-member-suggest-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:0 15rem;position:relative}.add-member-suggest .add-member-suggest-filter-input{-ms-flex:1;flex:1;margin-right:.25rem}.add-member-suggest .add-member-suggest-filter-hint{font-size:.75rem;color:#BDBDBD;position:absolute;right:16rem;top:.5rem}.add-member-suggest .add-member-suggest-filter-hint.to-send{right:19rem}.add-member-suggest .add-member-suggest-filter-addmail{background:#424242;border-radius:.25rem;padding:.5rem .75rem;transition:background .2s linear}.add-member-suggest .add-member-suggest-filter-addmail:hover{background:#212121}.add-member-suggest .add-member-suggest-filter-addmail svg{width:1.3rem;height:1.3rem;fill:#fff}.add-member-suggest .add-member-suggest-single{-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #EEE;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:calc(25% - 1rem);flex-basis:calc(25% - 1rem);-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;padding:.2rem;transition:.2s linear}.add-member-suggest .add-member-suggest-single:hover{background:rgba(140,158,255,.1)}.add-member-suggest .add-member-suggest-single:nth-child(4n){margin-right:0}.add-member-suggest .add-member-suggest-avatar{-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;height:5rem;margin:.5rem;width:5rem}.notifications-list .entry .entry-project,.notifications-list .entry a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.navbar{display:-ms-flexbox;display:flex;height:40px;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar::after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.navbar .nav-left a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left .logo{background:rgba(0,0,0,.2);padding:.3rem .75rem}.navbar .nav-left svg{width:1.6rem;height:1.6rem}.navbar .nav-right{margin-left:auto}.navbar .nav-right .topnav-dropdown-wrapper>a,.navbar .nav-right>a{color:#fff;margin:0;padding:.5rem 2rem}.navbar .nav-right .active{background:rgba(255,255,255,.95);color:#1a237e}.navbar .nav-right svg{width:1.2rem;height:1.2rem;fill:rgba(26,35,126,.8);transition:all .2s linear}.navbar .nav-right>a,.navbar .topnav-dropdown-wrapper>a{color:#fff;display:inline-block;transition:all .2s linear}.navbar .nav-right>a:hover,.navbar .topnav-dropdown-wrapper>a:hover{background:rgba(0,0,0,.2);color:#8c9eff}.navbar .nav-right>a:hover svg,.navbar .topnav-dropdown-wrapper>a:hover svg{fill:#8c9eff;transition:all .2s linear}.navbar .nav-right>a.user-avatar,.navbar .topnav-dropdown-wrapper>a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar .nav-right>a.user-avatar span,.navbar .topnav-dropdown-wrapper>a.user-avatar span{padding-right:1rem}.navbar .user-avatar img{height:2.5rem;margin-left:.5rem;vertical-align:middle}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#212121;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.navbar-dropdown ul:after{border-color:rgba(33,33,33,0);border-bottom-color:#212121;border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-color:rgba(33,33,33,0);border-bottom-color:#212121;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown .plugin:hover .new{color:#fff}.navbar-dropdown .plugin .new{font-size:.9rem;background:#ff5252;float:right;margin-left:auto;padding:.1rem .25rem}.navbar-dropdown a{color:#BDBDBD;display:block;padding:.8rem .5rem}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#8c9eff}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-ms-flex:1;flex:1}.navbar-dropdown a.blocked-project{color:#757575}.navbar-dropdown a.blocked-project svg{margin-left:.5rem;position:relative;top:.25rem}.navbar-dropdown .create-options{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@keyframes highlightFadeOut{0%{background:#8c9eff;font-size:.75rem;height:22px;left:49px;line-height:22px;top:-1px;width:22px}20%{font-size:.7rem;height:20px;left:50px;line-height:20px;top:0;width:20px}100%{background:#3f51b5}}.topnav-dropdown-wrapper{position:relative}.topnav-dropdown-wrapper:hover .navbar-dropdown-notifications{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.topnav-dropdown-wrapper .counter{background:#3f51b5;border-radius:50%;color:#fff;font-size:.7rem;height:18px;left:52px;line-height:18px;position:absolute;text-align:center;top:3px;width:18px}.topnav-dropdown-wrapper .counter.small{height:17px;line-height:17px;width:17px}.topnav-dropdown-wrapper .counter.large{height:22px;line-height:22px;top:2px;width:22px}.topnav-dropdown-wrapper .counter.counter-active{animation-duration:2s;animation-name:highlightFadeOut}.topnav-dropdown-wrapper .navbar-dropdown-notifications{background:#fff;border:1px solid #EEE;border-radius:2px;box-shadow:0 0 3px 3px rgba(184,184,184,.2);color:#212121;display:none;left:calc(50% - 450px/2);margin-top:1px;min-width:450px;padding:0;position:absolute;top:2.4rem;z-index:999}.topnav-dropdown-wrapper .navbar-dropdown-notifications .empty{color:#BDBDBD;font-size:.9em;padding:1.5em 0;text-align:center;width:100%}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header{background:#f5f5f5;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:.6rem .75rem}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after,.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header .notifications-title{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action{font-size:.9rem;padding-left:1.2rem;text-align:right}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action.disabled{color:#B8B8B8;cursor:default}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled){color:#3f51b5}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled):hover{color:#8c9eff}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-wrapper{min-height:70px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-list{max-height:400px;overflow-y:auto}.notifications-page{margin-top:1.5em;min-width:initial;padding-bottom:5em}.notifications-page .header{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0;padding:.5em 1em}.notifications-page .title{color:#000;-ms-flex-positive:1;flex-grow:1;font-size:1.8em;line-height:1.8em;margin:0;text-transform:uppercase}.notifications-page .action{color:#3f51b5;font-size:1em;line-height:.75em;margin-right:1em}.notifications-page .action.disabled{color:#B8B8B8}.notifications-page .action:not(.disabled):hover{color:#8c9eff}.notifications-page .empty{margin:4rem auto;text-align:center;width:100%}.notifications-page .notifications-list .entry{-ms-flex-align:center;align-items:center;font-size:.95rem;margin:.5rem 0;padding:1rem .6rem}.notifications-page .notifications-list .entry.new{background-color:#ECEDFB}.notifications-page .notifications-list .entry .entry-content{font-size:1.05rem}.notifications-page .notifications-list .entry .entry-project{max-width:initial;text-overflow:initial;white-space:initial}.notifications-page .notifications-list .entry .entry-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:1rem;width:3rem}.notifications-page .notifications-list .entry .entry-date{font-size:.85rem;margin-right:.5rem}.notifications-list .entry{color:#212121;display:-ms-flexbox;display:flex;font-size:.9rem;margin:0 .8rem;padding:.8rem 0;position:relative}.notifications-list .entry:not(:last-child){border-bottom:1px solid #EEE}.notifications-list .entry p{line-height:1.25em;margin-bottom:0}.notifications-list .entry a.project-link,.notifications-list .entry a.user-link{color:#212121}.notifications-list .entry a.object-link{color:#3f51b5}.notifications-list .entry a:hover{color:#8c9eff}.notifications-list .entry .entry-avatar{border-radius:.1rem;-ms-flex-preferred-size:2.5rem;flex-basis:2.5rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.7rem;vertical-align:center;width:2.5rem}.notifications-list .entry .entry-avatar img{width:100%}.notifications-list .entry .entry-content{-ms-flex-positive:1;flex-grow:1;line-height:1.1em;margin-right:.7rem}.notifications-list .entry .entry-project{color:#B8B8B8;display:inline-block;font-size:.9rem;margin-top:.5em;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notifications-list .spin img,.profile .timeline-wrapper .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;transform-origin:32 32;max-height:3rem;max-width:3rem}.notifications-list .entry .entry-date{font-size:.7rem;white-space:nowrap}.notifications-list .spin{margin:5% auto;width:3rem}.notifications-list .spin img{margin:0 auto}.profile-favs{border-top:1px solid #EEE}.profile-filter{-ms-flex-align:center;align-items:center;background:#EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile-filter .searchbox{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{fill:#757575;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-ms-flex:1;flex:1;margin-right:1rem}.import-project-asana-form-selector li:first-child,.profile-contacts,.profile-content-tabs{border-top:1px solid #EEE}.profile-filter .searchbox input:focus{border-bottom:1px solid #BDBDBD;outline:0;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#BDBDBD;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#212121}.profile{display:-ms-flexbox;display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .timeline-wrapper .spin img{margin:0 auto}.profile .profile-sidebar{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{fill:#EEE;height:10rem;margin:2rem auto;text-align:center;width:10rem}.profile .empty-tab p{color:#BDBDBD;font-size:.9rem;margin:0}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{filter:brightness(40%) saturate(150%) hue-rotate(60deg);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;transform:translateY(0);transition:all .2s cubic-bezier(.01,.7,1,1);transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#BDBDBD;transition:all .2s linear}.profile-bar .flag:hover path{fill:#f44336;transition:all .2s linear}.profile-bar h1{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:2rem;line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar h2{font-size:1.6rem;color:#757575;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#BDBDBD;margin-bottom:1rem}.profile-bar .username{font-size:1.2rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#BDBDBD}.profile-bar .profile-stats{border-bottom:1px solid #EEE;border-top:1px solid #EEE;color:#757575;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;display:block;line-height:1}.profile-bar .profile-stats .stat-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:.9rem;display:block}.profile-bar .profile-quote{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;background:url(../images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contacts{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{color:#BDBDBD;display:inline-block;padding:1rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#757575;transition:color .2s linear}.profile-content-tabs .tab.active .icon,.profile-content-tabs .tab:hover .icon{fill:#8c9eff}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #EEE;border-right:1px solid #EEE;position:relative;top:1px;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#3f51b5}.profile-content-tabs .icon{fill:#BDBDBD;height:.8rem;margin-right:.5rem;transition:fill .2s linear}.profile-sidebar h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#757575;margin-bottom:.5rem;padding:.5rem}.contact-team-large,.import-project-asana-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-sidebar h4 .icon{fill:#BDBDBD;margin-right:.3rem;margin-top:-3px;vertical-align:middle}.profile-sidebar p{font-size:.9rem;color:#BDBDBD}.profile-sidebar a{color:#3f51b5}.contact-team{margin-left:.75rem}.contact-team-large{font-size:.9rem;-ms-flex-pack:center;justify-content:center;margin-left:0;width:100%}.contact-team-large .icon-mail{margin-right:.5rem;vertical-align:center}.lightbox-contact-project{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-contact-project-container{max-width:600px;text-align:center;width:90%}.lightbox-contact-project-logo{width:5rem}.lightbox-contact-project-title{margin:0}.lightbox-contact-project-name{font-size:1.6rem;color:#3f51b5;margin-bottom:1rem}.lightbox-contact-project-message{max-height:400px}.lightbox-contact-project-button{display:block;margin-top:.5rem;width:100%}.import-project-asana-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-asana-form{width:90%;min-width:0}}.import-project-asana-form fieldset{margin-bottom:1rem}.import-project-asana-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-asana-form label span{font-size:.9rem}.import-project-asana-form label .mumble{margin-left:.25rem}.import-project-asana-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-asana-form-check span{display:block}.import-project-asana-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-asana-form-check .check{position:absolute;right:0;top:0}.import-project-asana-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-asana-form-title-wrapper .create-project-title{display:inline-block}.import-project-asana-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-description,.import-project-asana-form-title{margin:0;text-align:center}.import-project-asana-form-description{color:#BDBDBD;margin-bottom:2rem}.import-project-asana-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-asana-form-import-type input:checked+label,.import-project-asana-form-privacity input:checked+label,.import-project-asana-form-selector-template,.import-project-asana-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-asana-form-import-type{display:-ms-flexbox;display:flex}.import-project-asana-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-import-type label .icon{margin-right:.25rem}.import-project-asana-form-import-type input:checked+label{background:#dcdcdc}.import-project-asana-form-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-asana-form-import-type input:disabled+label .icon{color:#e3e3e3}.import-project-asana-form-import-type input{display:none}.import-project-asana-form-import-type label{background:#f5f5f5}.import-project-asana-form-privacity{display:-ms-flexbox;display:flex}.import-project-asana-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-privacity input:checked+label{background:#dcdcdc}.import-project-asana-form-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-asana-form-privacity input:disabled+label .icon{color:#e3e3e3}.import-project-asana-form-privacity input{display:none}.import-project-asana-form-privacity label{background:#f5f5f5}.import-project-asana-form-privacity label .icon{margin-right:.5em}.import-project-asana-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-asana-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-asana-form-type span{margin-left:.5rem}.import-project-asana-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-asana-form-action-back,.import-project-asana-form-action-cancel,.import-project-asana-form-selector a:hover{color:currentColor}.import-project-asana-form-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-asana-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-asana-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-asana-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-asana-form-selector-template{text-transform:uppercase}.import-project-asana-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-asana-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-asana-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-asana-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-asana-form-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.import-project-asana-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.import-project-asana-form-selector p{margin-bottom:0}.import-project-asana-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-asana-form-action button{font-size:1.2rem;padding:.75rem}.import-project-asana-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-asana-form-action-back:hover,.import-project-asana-form-action-cancel:hover{color:#8c9eff}.import-project-asana-form-action-cancel{-ms-flex:1;flex:1}.import-project-asana-form-action-back{width:10%}.import-project-asana-form-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-asana-form-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.import-project-asana-form .spin{text-align:center;width:100%}.create-project-asana-import-type{margin-bottom:1rem;text-align:center}.create-project-asana-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-asana-import-type fieldset{background:#fff;border-right:1px solid #EEE;transition:background .2s linear}.create-project-asana-import-type fieldset:last-child{border:0}.create-project-asana-import-type input{display:none}.create-project-asana-import-type input:checked+label{background:rgba(63,81,181,.1)}.create-project-asana-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-asana-import-type label:hover{background:rgba(63,81,181,.1);cursor:pointer}.create-project-asana-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-asana-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.create-project{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.create-project{width:90%;min-width:0}}.create-project fieldset{margin-bottom:1rem}.create-project label{display:block;margin-bottom:.25rem;max-height:44px}.create-project label span{font-size:.9rem}.create-project label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.create-project-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.create-project-check span{display:block}.create-project-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-check .check{position:absolute;right:0;top:0}.create-project-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.create-project-title-wrapper .create-project-title{display:inline-block}.create-project-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.create-project-description,.create-project-title{margin:0;text-align:center}.create-project-description{color:#BDBDBD;margin-bottom:2rem}.create-project-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.create-project-import-type input:checked+label,.create-project-privacity input:checked+label,.create-project-selector-template,.create-project-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-import-type{display:-ms-flexbox;display:flex}.create-project-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.create-project-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-import-type label .icon{margin-right:.25rem}.create-project-import-type input:checked+label{background:#dcdcdc}.create-project-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.create-project-import-type input:disabled+label .icon{color:#e3e3e3}.create-project-import-type input{display:none}.create-project-import-type label{background:#f5f5f5}.create-project-privacity{display:-ms-flexbox;display:flex}.create-project-privacity label,.create-project-type{-ms-flex-align:center;display:-ms-flexbox;text-transform:uppercase}.create-project-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-privacity label{align-items:center;cursor:pointer;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem}.create-project-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-privacity input:checked+label{background:#dcdcdc}.create-project-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.create-project-privacity input:disabled+label .icon{color:#e3e3e3}.create-project-privacity input{display:none}.create-project-privacity label{background:#f5f5f5}.create-project-privacity label .icon{margin-right:.5em}.create-project-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.create-project-type{align-items:center;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem}.create-project-type span{margin-left:.5rem}.create-project-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.create-project-action-back,.create-project-action-cancel,.create-project-selector a:hover{color:currentColor}.create-project-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.create-project-selector li:first-child{border-top:1px solid #EEE}.create-project-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.create-project-selector-icon .icon{width:2.25rem;height:2.25rem}.create-project-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.create-project-selector-template{text-transform:uppercase}.create-project-selector-description,.import-project-github-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.create-project-selector-long-description.ng-hide{line-height:0;max-height:0}.create-project-selector-question{position:absolute;right:1.5rem;top:1.5rem}.create-project-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.create-project-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.create-project-selector p{margin-bottom:0}.create-project-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.create-project-action button{font-size:1.2rem;padding:.75rem}.create-project-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.create-project-action-back:hover,.create-project-action-cancel:hover{color:#8c9eff}.create-project-action-cancel{-ms-flex:1;flex:1}.create-project-action-back{width:10%}.create-project-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.create-project-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.create-project-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.create-project .spin{text-align:center;width:100%}.duplicate-project-reference{margin-bottom:2rem}.import-project-github-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-github-form{width:90%;min-width:0}}.import-project-github-form fieldset{margin-bottom:1rem}.import-project-github-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-github-form label span{font-size:.9rem}.import-project-github-form label .mumble{margin-left:.25rem}.import-project-github-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-github-form-check span{display:block}.import-project-github-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-github-form-check .check{position:absolute;right:0;top:0}.import-project-github-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-github-form-title-wrapper .create-project-title{display:inline-block}.import-project-github-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-github-form-description,.import-project-github-form-title{margin:0;text-align:center}.import-project-github-form-description{color:#BDBDBD;margin-bottom:2rem}.import-project-github-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-github-form-import-type input:checked+label,.import-project-github-form-privacity input:checked+label,.import-project-github-form-selector-template,.import-project-github-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-github-form-import-type{display:-ms-flexbox;display:flex}.import-project-github-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-import-type label .icon{margin-right:.25rem}.import-project-github-form-import-type input:checked+label{background:#dcdcdc}.import-project-github-form-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-github-form-import-type input:disabled+label .icon{color:#e3e3e3}.import-project-github-form-import-type input{display:none}.import-project-github-form-import-type label{background:#f5f5f5}.import-project-github-form-privacity{display:-ms-flexbox;display:flex}.import-project-github-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-privacity input:checked+label{background:#dcdcdc}.import-project-github-form-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-github-form-privacity input:disabled+label .icon{color:#e3e3e3}.import-project-github-form-privacity input{display:none}.import-project-github-form-privacity label{background:#f5f5f5}.import-project-github-form-privacity label .icon{margin-right:.5em}.import-project-github-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-github-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-github-form-type span{margin-left:.5rem}.import-project-github-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-github-form-action-back,.import-project-github-form-action-cancel,.import-project-github-form-selector a:hover{color:currentColor}.import-project-github-form-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-github-form-selector li:first-child{border-top:1px solid #EEE}.import-project-github-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-github-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-github-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-github-form-selector-template{text-transform:uppercase}.import-project-github-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-github-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-github-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-github-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-github-form-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.import-project-github-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.import-project-github-form-selector p{margin-bottom:0}.import-project-github-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-github-form-action button{font-size:1.2rem;padding:.75rem}.import-project-github-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-github-form-action-back:hover,.import-project-github-form-action-cancel:hover{color:#8c9eff}.import-project-github-form-action-cancel{-ms-flex:1;flex:1}.import-project-github-form-action-back{width:10%}.import-project-github-form-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-github-form-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.import-project-github-form-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.import-project-github-form .spin{text-align:center;width:100%}.create-project-github-import-type{margin-bottom:1rem;text-align:center}.create-project-github-import-type p{margin-bottom:.5rem}.create-project-github-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-github-import-type fieldset{background:#fff;border-right:1px solid #EEE;transition:background .2s linear}.create-project-github-import-type fieldset:last-child{border:0}.create-project-github-import-type input{display:none}.create-project-github-import-type input:checked+label{background:rgba(63,81,181,.1)}.create-project-github-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-github-import-type label:hover{background:rgba(63,81,181,.1);cursor:pointer}.create-project-github-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-github-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.import-project-members{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-members{width:90%;min-width:0}}.import-project-members .avatar{width:48px}.import-project-members-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:0}.import-project-description,.import-project-jira-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-members-system{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0 0;padding:.5rem 0}.import-project-members-system img{width:100%}.import-project-members-logo{max-height:3rem;max-width:3rem}.import-project-members-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;border-top:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.import-project-members-row:hover .import-project-members-delete{opacity:1;transition:all .2s ease-in}.import-project-members-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-username{margin-left:1rem}.import-project-members .avatar.empty{background-color:#EEE;line-height:3rem;text-align:center;width:3rem}.import-project-members-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-delete{background:0 0;opacity:0;padding:.25rem .5rem}.import-project-members-delete svg{width:.75rem;height:.75rem;fill:#f44336}.import-project-members-match{color:#BDBDBD}.import-project-members-match button{background:#fff;border-radius:50%;padding:.25rem .5rem}.import-project-members-match button svg{width:.75rem;height:.75rem}.import-project-members-match-true{border:1px solid #3f51b5;margin:0 .1rem 0 .25rem;transition:background .2s}.import-project-members-match-true:hover{background:rgba(140,158,255,.3)}.import-project-members-match-true svg{fill:#3f51b5}.import-project-members-match-false{border:1px solid #f44336;margin:0 .25rem 0 .1rem;transition:background .2s}.import-project-members-match-false:hover{background:rgba(244,67,54,.3)}.import-project-members-match-false svg{fill:#f44336}.import-project-members-choose{color:#3f51b5;padding-right:0;text-transform:lowercase}.import-project-members-choose:hover{color:#8c9eff}.import-project-members-selected{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-selected-img{margin-left:.5rem;max-width:3rem}.import-project-members-selected img{width:100%}.import-project-members-submit{display:block;margin:2rem auto 0;padding:.75rem 4rem}.import-project-selector{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-selector{width:90%;min-width:0}}.import-project-selector .import-project-selector-service img{display:block;margin:1rem auto;width:4rem}.import-project-selector .import-project-selector-filter{-ms-flex-align:center;align-items:center;background:#EEE;display:-ms-flexbox;display:flex;padding:.5rem}.import-project-selector .import-project-selector-filter input{background:#f5f5f5;border:0;-ms-flex:1;flex:1;padding:.5rem}.import-project-from-site,.import-project-selector .import-project-selector-title{border-bottom:1px solid #EEE;padding:1rem}.import-project-selector .import-project-selector-filter svg{width:1rem;height:1rem;fill:#757575;margin:0 1rem}.import-project-selector .import-project-selector-title:hover{background:rgba(63,81,181,.1);cursor:pointer}.import-project-from-site{-ms-flex-align:center;align-items:center;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;position:relative}.import-project-from-site:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-from-site:first-child{border-top:1px solid #EEE}.import-project-from-site:first-child .import-project-name{margin:0}.import-project-from-site:first-child .import-project-logo img{padding:0 .9rem 0 1rem;width:5.1rem}.import-project-logo{-ms-flex-item-align:start;align-self:flex-start;margin-right:.5rem}.import-project-logo img{padding:0 1rem;width:5rem}.import-project-name-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.import-project-description{margin-bottom:0}.import-project-description a{color:#3f51b5;margin-left:.3rem}.import-project-url{margin-top:.5rem}.import-project-input{vertical-align:middle}.import-project-button{background:#3f51b5;color:#fff;padding:.4rem 1rem}.create-project-invite-avatars{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.create-project-invite-avatar{cursor:pointer;display:block;margin-right:.25rem}.create-project-invite-avatar:hover{background:#f5f5f5;position:relative;border:0;opacity:.9;transition:all .2s;transition-delay:.2s}.create-project-invite-avatar:hover:after,.create-project-invite-avatar:hover:before{content:"";width:2px;height:66px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled{opacity:.3;transition:opacity .2s}.create-project-invite-avatar.disabled:hover{background:#f5f5f5;position:relative;border:0;opacity:.6;transition:all .2s ease-in}.create-project-invite-avatar.disabled:hover:after,.create-project-invite-avatar.disabled:hover:before{content:"";width:2px;height:33px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar.disabled:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar.disabled:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled:hover::after{background:#424242;left:24px;top:8px;transform:rotate(0);transform-origin:center}.create-project-invite-avatar.disabled:hover::before{background:#424242;right:22px;top:8px;transform:rotate(90deg);transform-origin:center}.create-project-invite-avatar img{cursor:pointer;width:3rem}.import-project-jira-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-jira-form{width:90%;min-width:0}}.import-project-jira-form fieldset{margin-bottom:1rem}.import-project-jira-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-jira-form label span{font-size:.9rem}.import-project-jira-form label .mumble{margin-left:.25rem}.import-project-jira-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-jira-form-check span{display:block}.import-project-jira-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-jira-form-check .check{position:absolute;right:0;top:0}.import-project-jira-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-jira-form-title-wrapper .create-project-title{display:inline-block}.import-project-jira-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-description,.import-project-jira-form-title{margin:0;text-align:center}.import-project-jira-form-description{color:#BDBDBD;margin-bottom:2rem}.import-project-jira-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-jira-form-import-type input:checked+label,.import-project-jira-form-privacity input:checked+label,.import-project-jira-form-selector-template,.import-project-jira-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-jira-form-import-type{display:-ms-flexbox;display:flex}.import-project-jira-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-import-type label .icon{margin-right:.25rem}.import-project-jira-form-import-type input:checked+label{background:#dcdcdc}.import-project-jira-form-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-jira-form-import-type input:disabled+label .icon{color:#e3e3e3}.import-project-jira-form-import-type input{display:none}.import-project-jira-form-import-type label{background:#f5f5f5}.import-project-jira-form-privacity{display:-ms-flexbox;display:flex}.import-project-jira-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-privacity input:checked+label{background:#dcdcdc}.import-project-jira-form-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-jira-form-privacity input:disabled+label .icon{color:#e3e3e3}.import-project-jira-form-privacity input{display:none}.import-project-jira-form-privacity label{background:#f5f5f5}.import-project-jira-form-privacity label .icon{margin-right:.5em}.import-project-jira-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-jira-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-jira-form-type span{margin-left:.5rem}.import-project-jira-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-jira-form-action-back,.import-project-jira-form-action-cancel,.import-project-jira-form-selector a:hover{color:currentColor}.import-project-jira-form-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-jira-form-selector li:first-child{border-top:1px solid #EEE}.import-project-jira-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-jira-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-jira-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-jira-form-selector-template{text-transform:uppercase}.create-project-import-type-info,.import-project-jira-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-jira-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-jira-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-jira-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-jira-form-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.import-project-jira-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.import-project-jira-form-selector p{margin-bottom:0}.import-project-jira-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-jira-form-action button{font-size:1.2rem;padding:.75rem}.import-project-jira-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-jira-form-action-back:hover,.import-project-jira-form-action-cancel:hover{color:#8c9eff}.import-project-jira-form-action-cancel{-ms-flex:1;flex:1}.import-project-jira-form-action-back{width:10%}.import-project-jira-form-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-jira-form-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.import-project-jira-form .spin{text-align:center;width:100%}.create-project-import-type-info{font-size:.9rem;margin-bottom:1rem}.create-project-type-issues-subform{margin:1rem 0 2rem}.create-project-type-issues-subform-title{font-size:.9rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-type-issues-subform-radiogr input{opacity:0}.create-project-type-issues-subform-radiogr input:checked+svg{fill:rgba(63,81,181,.6);stroke:rgba(63,81,181,.1)}.create-project-type-issues-subform-radiogr svg{fill:#EEE;stroke:#d5d5d5;stroke-width:1px;vertical-align:middle}.create-project-type-issues-subform-radiogr .control-indicator{padding-left:.25rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-import-type{margin-bottom:.25rem}.create-project-import-type fieldset{margin:0}tg-select-import-user-lightbox .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}tg-select-import-user-lightbox .candidate-user{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1.5rem}tg-select-import-user-lightbox .candidate-user .candidate-user-name{margin-left:.5rem}tg-select-import-user-lightbox .candidate-user .user-list-avatar{background-color:#f44336;height:32px;margin-right:.5rem;width:32px}tg-select-import-user-lightbox .error{color:#ff5252;text-align:center}tg-select-import-user-lightbox .more-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;padding:1rem;text-align:center}tg-select-import-user-lightbox .group{display:-ms-flexbox;display:flex}tg-select-import-user-lightbox .group input{-ms-flex-positive:2;flex-grow:2;margin-right:.5rem}tg-select-import-user-lightbox .group .submit-button{-ms-flex-positive:0;flex-grow:0;width:auto}tg-select-import-user-lightbox .search-user-mode{font-size:.9rem;background:0 0;margin-top:2rem;padding:.5rem;text-align:left;transition:.2s;width:100%}tg-select-import-user-lightbox .search-user-mode:hover{color:#3f51b5}tg-select-import-user-lightbox label{display:block;padding-bottom:.5rem}.import-project-trello-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-trello-form{width:90%;min-width:0}}.import-project-trello-form fieldset{margin-bottom:1rem}.import-project-trello-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-trello-form label span{font-size:.9rem}.import-project-trello-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.import-project-trello-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-trello-form-check span{display:block}.import-project-trello-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-trello-form-check .check{position:absolute;right:0;top:0}.import-project-trello-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-trello-form-title-wrapper .create-project-title{display:inline-block}.import-project-trello-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-description,.import-project-trello-form-title{margin:0;text-align:center}.import-project-trello-form-description{color:#BDBDBD;margin-bottom:2rem}.import-project-trello-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#757575}.import-project-trello-form-import-type input:checked+label,.import-project-trello-form-privacity input:checked+label,.import-project-trello-form-selector-template,.import-project-trello-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-trello-form-import-type{display:-ms-flexbox;display:flex}.import-project-trello-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-import-type label .icon{margin-right:.25rem}.import-project-trello-form-import-type input:checked+label{background:#dcdcdc}.import-project-trello-form-import-type input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-trello-form-import-type input:disabled+label .icon{color:#e3e3e3}.import-project-trello-form-import-type input{display:none}.import-project-trello-form-import-type label{background:#f5f5f5}.import-project-trello-form-privacity{display:-ms-flexbox;display:flex}.import-project-trello-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-privacity input:checked+label{background:#dcdcdc}.import-project-trello-form-privacity input:disabled+label{cursor:not-allowed;color:#e3e3e3}.import-project-trello-form-privacity input:disabled+label .icon{color:#e3e3e3}.import-project-trello-form-privacity input{display:none}.import-project-trello-form-privacity label{background:#f5f5f5}.import-project-trello-form-privacity label .icon{margin-right:.5em}.import-project-trello-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-trello-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-trello-form-type span{margin-left:.5rem}.import-project-trello-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;color:#424242;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-trello-form-action-back,.import-project-trello-form-action-cancel,.import-project-trello-form-selector a:hover{color:currentColor}.import-project-trello-form-selector li:hover{background:rgba(63,81,181,.1);transition:background .3s ease-in}.import-project-trello-form-selector li:first-child{border-top:1px solid #EEE}.import-project-trello-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-trello-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-trello-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-trello-form-selector-template{text-transform:uppercase}.import-project-trello-form-selector-description,.project-list-wrapper .project-list-title h1,.transfer-project .transfer-title,.transfer-project-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-trello-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-trello-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-trello-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-trello-form-selector-question:hover svg{fill:#3f51b5;transition:fill .2s linear}.import-project-trello-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#424242}.import-project-trello-form-selector p{margin-bottom:0}.import-project-trello-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-trello-form-action button{font-size:1.2rem;padding:.75rem}.import-project-trello-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-trello-form-action-back:hover,.import-project-trello-form-action-cancel:hover{color:#8c9eff}.import-project-trello-form-action-cancel{-ms-flex:1;flex:1}.import-project-trello-form-action-back{width:10%}.import-project-trello-form-warning{font-size:.9rem;border:1px solid #ff5252;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.profile-projects,.profile-timeline,.transfer-project-detail{border-top:1px solid #EEE}.import-project-trello-form-warning .icon-exclamation{fill:#ff5252;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-warning a{color:#3f51b5;display:inline-block;margin-left:.25rem}.import-project-trello-form .spin{text-align:center;width:100%}.warning-users-import-lightbox{max-width:600px}.warning-users-import-lightbox .warning-users-import-title{text-align:center}.warning-users-import-lightbox .actions{display:-ms-flexbox;display:flex;margin:2rem}.warning-users-import-lightbox .actions button{-ms-flex:1;flex:1}.warning-users-import-lightbox .actions button:first-child{-ms-flex:0;flex:0;-ms-flex-preferred-size:40%;flex-basis:40%;margin-right:.5rem}.warning-users-import-lightbox .actions .button-trans{color:#424242}.profile-projects .list-itemtype-project{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:9rem;padding:.75rem}.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-image,.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-right,.profile-projects .list-itemtype-project.blocked-project .project-description,.profile-projects .list-itemtype-project.blocked-project .project-title{opacity:.4}.profile-projects .list-itemtype-project .project-list-single-title-wrapper{display:-ms-flexbox;display:flex}.profile-projects .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0}.profile-projects .list-itemtype-project .list-itemtype-project-right{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;width:200px}.profile-projects .list-itemtype-project .icon-blocked-project{width:1rem;height:1rem;fill:#fff;stroke:#ff5252}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;margin:0}.project-list-wrapper .icon-badge,.project-list-wrapper .icon-blocked-project,.project-list-wrapper .icon-private{width:1rem;height:1rem}.project-list-wrapper .icon-badge{fill:#8c9eff;margin-left:.5rem;stroke:#8c9eff}.project-list-wrapper .create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .import-project-button{padding:.53rem .8rem}.project-list-wrapper .import-project-button:hover .icon-upload{fill:#8c9eff}.project-list-wrapper .import-project-button .icon-upload{fill:#fff}.project-list-wrapper .project-list-section{display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .help-area{font-size:.9rem;color:#BDBDBD;width:200px}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:rgba(140,158,255,.1);cursor:move;transition:background .3s}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .list-itemtype-project.blocked-project .icon-badge,.project-list-wrapper .list-itemtype-project.blocked-project .list-itemtype-project-image,.project-list-wrapper .list-itemtype-project.blocked-project .private,.project-list-wrapper .list-itemtype-project.blocked-project .project-description,.project-list-wrapper .list-itemtype-project.blocked-project .project-title{opacity:.25}.project-list-wrapper .list-itemtype-project.blocked-project:hover .icon-drag{opacity:1}.project-list-wrapper .list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.project-list-wrapper .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.project-list-wrapper .drag{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;opacity:0}.project-list-wrapper .drag svg{fill:#BDBDBD;height:1.1rem;margin-right:.5rem;transition:opacity .2s;width:1.1rem}.project-list-wrapper .gu-transit{background-color:#f6f6f6;height:5rem;opacity:1}.project-list-wrapper .gu-transit *{display:none}.project-list-wrapper .gu-mirror{background:#fff;opacity:1}.blocked-project-detail,.transfer-project{background:url(../images/discover.png) bottom center repeat-x;min-height:calc(100vh - 40px)}.blocked-project-detail{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center;min-width:100vw;width:100vw}.blocked-project-inner{width:330px}.blocked-project-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.blocked-project-title .project-image{-ms-flex-preferred-size:6rem;flex-basis:6rem;margin-right:1rem;max-width:6rem;position:relative}.blocked-project-title img{width:100%}.blocked-project-title .icon-blocked-project{width:1.5rem;height:1.5rem;position:absolute;right:-.5rem;top:-.5rem}.blocked-project-title .project-title{font-size:1.6rem}.blocked-project-message{margin-top:4rem;text-align:center}.blocked-project-message .project-block-title{font-size:2rem}.transfer-project-wrapper{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;width:90%}.transfer-project{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center}.master,body{background:#fff}.transfer-project-detail{-ms-flex-align:center;align-items:center;border-bottom:1px solid #EEE;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin:1rem 0 3rem;padding:1rem 0}.transfer-project-image{margin-right:1rem;width:4rem}.transfer-project-title{font-size:1.6rem;margin-bottom:.25rem}.transfer-project-statistics span{color:#BDBDBD;margin-right:.5rem}.transfer-project-statistics svg{fill:#BDBDBD;margin-right:.25rem}.transfer-project-private{text-transform:uppercase}.transfer-project-comment-link{color:#3f51b5;cursor:pointer;display:block;margin-bottom:1rem}.transfer-project-comment-link:hover{color:#8c9eff}.transfer-project-comment-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.transfer-project-comment-header .icon-close{cursor:pointer;fill:#BDBDBD}.transfer-project-comment-header .icon-close:hover{fill:#ff5252;transition:fill .2s}.transfer-project-comment-form.ng-enter{animation:dropdownFade .2s}.transfer-project-comment-label{display:block;margin-bottom:.5rem}.transfer-project-comment{margin-bottom:1rem;min-height:6rem}.transfer-project-options{display:-ms-flexbox;display:flex}.transfer-project-options a{font-size:1.2rem;display:block;-ms-flex:1;flex:1;padding:.75rem}.transfer-project-options a:first-child{margin-right:.5rem}.profile-timeline .activity-item{border-bottom:1px solid #EEE;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#3f51b5}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#757575}.profile-timeline .activity-item a:hover{color:#8c9eff}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-ms-flex-align:center;align-items:center;color:#BDBDBD;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#BDBDBD;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-item .new-color{border-radius:50%;display:inline-block;height:1rem;margin-left:.2rem;position:relative;top:.1rem;width:1rem}.profile-timeline .activity-member-view{display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-ms-flex:1;flex:1}.profile-timeline .activity-member-view a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.profile-timeline .activity-member-view p{color:#BDBDBD}a,body{color:#424242}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:sub;white-space:nowrap}.profile-timeline .single-attachment .icon{fill:#424242;margin-right:.5rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.wiki-history{margin-bottom:2rem}:root .taskboard-table-body .taskboard-row,_:-ms-fullscreen .taskboard-row{min-height:auto}svg{pointer-events:none}a[ng-click] svg{pointer-events:auto}tg-card .card-title span:last-child{word-break:break-word}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-CondLight.woff) format("woff"),url(../fonts/OpenSans-CondLight.ttf) format("truetype"),url(../fonts/OpenSans-CondLight.svgOpenSans-CondLight) format("svg")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light.woff) format("woff"),url(../fonts/OpenSans-Light.ttf) format("truetype"),url(../fonts/OpenSans-Light.svgOpenSans-Light) format("svg")}@font-face{font-family:opensans-regular;src:url(../fonts/opensans-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-regular.woff) format("woff"),url(../fonts/opensans-regular.ttf) format("truetype"),url(../fonts/opensans-regular.svgopensans-regular) format("svg")}@font-face{font-family:opensans-semibold;src:url(../fonts/opensans-semibold.eot?#iefix) format("embedded-opentype"),url(../fonts/opensans-semibold.woff) format("woff"),url(../fonts/opensans-semibold.ttf) format("truetype"),url(../fonts/opensans-semibold.svgopensans-semibold) format("svg")}@font-face{font-family:taiga;src:url(../fonts/taiga.eot?#iefix) format("embedded-opentype"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype"),url(../fonts/taiga.svgtaiga) format("svg")}.menu-secondary{background:#fcfdff}.menu-tertiary{background-color:#1a237e}.extrabar{background:#fcfdff}h1,h2,h3,h4,h5,h6{color:#212121}a:hover{color:#3f51b5}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{background:#f5f5f5;border-color:#3f51b5;color:#424242}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=url]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#a4a4a4}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=url]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#a4a4a4}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=url]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#a4a4a4}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#a4a4a4}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid #f44336}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(244,67,54,.7);color:#fff}blockquote{border-left:5px solid #8c9eff}blockquote,blockquote p,cite{color:#757575}.summary{background:#424242;color:#fff}.navbar{background:rgba(233,30,99,.6)}.navbar::after{background:url(../images/menu-vert.png) top left}tg-project-menu{background-color:#0d113f;background-image:none}.main-nav svg path{fill:#fff}.taskboard-table-header .task-colum-name{background:#f5f5f5;border-top:3px solid #3f51b5}.taskboard-table-header .task-colum-name .icon{fill:#3f51b5}.taskboard-table-body .taskboard-cards-box{background:#f5f5f5}.kanban-table-header .task-colum-name{background:#fbfbfb;border-top:3px solid #3f51b5}.kanban-table-header .task-colum-name .icon{color:#3f51b5}.kanban-table-body .kanban-uses-box{background:#fbfbfb} \ No newline at end of file diff --git a/dist/v-1549282893552/styles/theme-taiga.css b/dist/v-1549282893552/styles/theme-taiga.css new file mode 100644 index 0000000..40166dc --- /dev/null +++ b/dist/v-1549282893552/styles/theme-taiga.css @@ -0,0 +1,4 @@ +@charset "UTF-8";.introjs-helperLayer,.introjs-overlay{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;box-sizing:content-box}.introjs-bullets ul,.introjs-bullets ul li,.introjs-bullets ul li a,.introjs-button,.introjs-helperLayer,.introjs-helperNumberLayer,.introjs-hint,.introjs-overlay,.introjs-progress,.introjs-progressbar,.introjs-tooltip,.introjs-tooltipReferenceLayer{box-sizing:content-box}.pika-table,table{border-collapse:collapse;border-spacing:0}.lightbox textarea,textarea{resize:vertical}h1 .date,h1 span{text-overflow:ellipsis}.introjs-overlay{position:absolute;z-index:999999;opacity:0;transition:all .3s ease-out}.introjs-fixParent{z-index:auto!important;opacity:1!important;-webkit-transform:none!important;-moz-transform:none!important;-ms-transform:none!important;-o-transform:none!important;transform:none!important}.introjs-showElement,tr.introjs-showElement>td,tr.introjs-showElement>th{z-index:9999999!important}.introjs-disableInteraction{z-index:99999999!important;position:absolute;background-color:#fff;opacity:0;filter:alpha(opacity=0)}.introjs-relativePosition,tr.introjs-showElement>td,tr.introjs-showElement>th{position:relative}.introjs-helperLayer{position:absolute;z-index:9999998;background-color:#FFF;background-color:rgba(255,255,255,.9);border:1px solid #777;border-radius:4px;transition:all .3s ease-out}.introjs-tooltipReferenceLayer{position:absolute;visibility:hidden;z-index:100000000;background-color:transparent;-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out}.introjs-helperLayer *,.introjs-helperLayer :after,.introjs-helperLayer :before{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;-ms-box-sizing:content-box;-o-box-sizing:content-box;box-sizing:content-box}.introjs-helperNumberLayer{position:absolute;visibility:visible;top:-16px;left:-16px;z-index:9999999999!important;padding:2px;font-family:Arial,verdana,tahoma;font-size:13px;font-weight:700;color:#fff;text-align:center;text-shadow:1px 1px 1px rgba(0,0,0,.3);background:#ff3019;background:-webkit-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#ff3019),color-stop(100%,#cf0404));background:-moz-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-ms-linear-gradient(top,#ff3019 0,#cf0404 100%);background:-o-linear-gradient(top,#ff3019 0,#cf0404 100%);background:linear-gradient(to bottom,#ff3019 0,#cf0404 100%);width:20px;height:20px;line-height:20px;border:3px solid #fff;border-radius:50%;filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3019', endColorstr='#cf0404', GradientType=0)";filter:"progid:DXImageTransform.Microsoft.Shadow(direction=135, strength=2, color=ff0000)";box-shadow:0 2px 5px rgba(0,0,0,.4)}.introjs-arrow.bottom-middle,.introjs-arrow.top-middle{left:50%;margin-left:-5px}.introjs-arrow{border:5px solid transparent;content:'';position:absolute}.introjs-arrow.top,.introjs-arrow.top-middle,.introjs-arrow.top-right{top:-10px;border-bottom-color:#fff}.introjs-arrow.top-right{right:10px}.introjs-arrow.right{right:-10px;top:10px;border-left-color:#fff}.introjs-arrow.right-bottom{bottom:10px;right:-10px;border-left-color:#fff}.introjs-arrow.bottom,.introjs-arrow.bottom-middle,.introjs-arrow.bottom-right{bottom:-10px;border-top-color:#fff}.introjs-arrow.bottom-right{right:10px}.introjs-arrow.left{left:-10px;top:10px;border-right-color:#fff}.introjs-arrow.left-bottom{left:-10px;bottom:10px;border-right-color:#fff}.introjs-tooltip{position:absolute;visibility:visible;padding:10px;background-color:#fff;min-width:200px;max-width:300px;border-radius:3px;-webkit-transition:opacity .1s ease-out;-moz-transition:opacity .1s ease-out;-ms-transition:opacity .1s ease-out;-o-transition:opacity .1s ease-out;transition:opacity .1s ease-out}.introjs-tooltipbuttons{text-align:right;white-space:nowrap}.introjs-bullets,.pika-table th,.pika-title{text-align:center}.introjs-button{position:relative;overflow:visible;display:inline-block;margin:10px 0 0;text-decoration:none;font:11px/normal sans-serif;white-space:nowrap;cursor:pointer;outline:0;-webkit-background-clip:padding;-moz-background-clip:padding;-o-background-clip:padding-box;-webkit-border-radius:.2em;-moz-border-radius:.2em;zoom:1}.introjs-button:hover{border-color:#bcbcbc;text-decoration:none;box-shadow:0 1px 1px #e3e3e3}.introjs-button:active,.introjs-button:focus{background-image:-webkit-gradient(linear,0 0,0 100%,from(#ececec),to(#f4f4f4));background-image:-moz-linear-gradient(#ececec,#f4f4f4);background-image:-o-linear-gradient(#ececec,#f4f4f4);background-image:linear-gradient(#ececec,#f4f4f4)}.introjs-button::-moz-focus-inner{padding:0;border:0}.introjs-skipbutton{box-sizing:content-box;margin-right:5px;color:#7a7a7a}.introjs-prevbutton{-webkit-border-radius:.2em 0 0 .2em;-moz-border-radius:.2em 0 0 .2em;border-radius:.2em 0 0 .2em;border-right:none}.introjs-prevbutton.introjs-fullbutton{border:1px solid #d4d4d4;-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-nextbutton{-webkit-border-radius:0 .2em .2em 0;-moz-border-radius:0 .2em .2em 0;border-radius:0 .2em .2em 0}.introjs-nextbutton.introjs-fullbutton{-webkit-border-radius:.2em;-moz-border-radius:.2em;border-radius:.2em}.introjs-disabled,.introjs-disabled:focus,.introjs-disabled:hover{color:#9a9a9a;border-color:#d4d4d4;box-shadow:none;cursor:default;background-color:#f4f4f4;background-image:none;text-decoration:none}.introjs-hidden{display:none}.introjs-bullets ul{clear:both;margin:15px auto 0;padding:0;display:inline-block}.introjs-bullets ul li{list-style:none;float:left;margin:0 2px}.introjs-bullets ul li a{display:block;width:6px;height:6px;background:#ccc;border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;text-decoration:none;cursor:pointer}.introjs-bullets ul li a.active,.introjs-bullets ul li a:hover{background:#999}.introjs-progress{overflow:hidden;height:10px;margin:10px 0 5px;border-radius:4px;background-color:#ecf0f1}.introjs-progressbar{float:left;width:0%;height:100%;font-size:10px;line-height:10px;text-align:center;background-color:#08c}.introjsFloatingElement{position:absolute;height:0;width:0;left:50%;top:50%}.introjs-fixedTooltip{position:fixed}.introjs-hint{position:absolute;background:0 0;width:20px;height:15px;cursor:pointer}.introjs-hint:focus{border:0;outline:0}.introjs-hidehint{display:none}.introjs-fixedhint{position:fixed}.introjs-hint-dot,.introjs-hint-pulse{box-sizing:content-box;position:absolute}.introjs-hint:hover>.introjs-hint-pulse{border:5px solid rgba(60,60,60,.57)}.introjs-hint-pulse{width:10px;height:10px;border:5px solid rgba(60,60,60,.27);-webkit-border-radius:30px;-moz-border-radius:30px;border-radius:30px;background-color:rgba(136,136,136,.24);z-index:10;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}.introjs-hint-no-anim .introjs-hint-dot{-webkit-animation:none;-moz-animation:none;animation:none}.introjs-hint-dot{border:10px solid rgba(146,146,146,.36);background:0 0;-webkit-border-radius:60px;-moz-border-radius:60px;border-radius:60px;height:50px;width:50px;-webkit-animation:introjspulse 3s ease-out;-moz-animation:introjspulse 3s ease-out;animation:introjspulse 3s ease-out;-webkit-animation-iteration-count:infinite;-moz-animation-iteration-count:infinite;animation-iteration-count:infinite;top:-25px;left:-25px;z-index:1;opacity:0}@-webkit-keyframes introjspulse{0%{-webkit-transform:scale(0);opacity:0}25%{-webkit-transform:scale(0);opacity:.1}50%{-webkit-transform:scale(.1);opacity:.3}75%{-webkit-transform:scale(.5);opacity:.5}100%{-webkit-transform:scale(1);opacity:0}}@-moz-keyframes introjspulse{0%{-moz-transform:scale(0);opacity:0}25%{-moz-transform:scale(0);opacity:.1}50%{-moz-transform:scale(.1);opacity:.3}75%{-moz-transform:scale(.5);opacity:.5}100%{-moz-transform:scale(1);opacity:0}}@keyframes introjspulse{0%{transform:scale(0);opacity:0}25%{transform:scale(0);opacity:.1}50%{transform:scale(.1);opacity:.3}75%{transform:scale(.5);opacity:.5}100%{transform:scale(1);opacity:0}}.gu-mirror{position:fixed!important;margin:0!important;z-index:9999!important;opacity:.8;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";filter:alpha(opacity=80)}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=20)";filter:alpha(opacity=20)}.awesomplete [hidden]{display:none}.awesomplete .visually-hidden{position:absolute;clip:rect(0,0,0,0)}.awesomplete{display:inline-block;position:relative}.awesomplete>input{display:block}.awesomplete>ul{position:absolute;left:0;z-index:1;min-width:100%;box-sizing:border-box;list-style:none;padding:0;border-radius:.3em;margin:.2em 0 0;background:hsla(0,0%,100%,.9);background:linear-gradient(to bottom right,#fff,hsla(0,0%,100%,.8));border:1px solid rgba(0,0,0,.3);box-shadow:.05em .2em .6em rgba(0,0,0,.2);text-shadow:none}.awesomplete>ul:empty{display:none}@supports (transform:scale(0)){.awesomplete>ul{transition:.3s cubic-bezier(.4,.2,.5,1.4);transform-origin:1.43em -.43em}.awesomplete>ul:empty,.awesomplete>ul[hidden]{opacity:0;transform:scale(0);display:block;transition-timing-function:ease}}.awesomplete>ul:before{content:"";position:absolute;top:-.43em;left:1em;width:0;height:0;padding:.4em;background:#fff;border:inherit;border-right:0;border-bottom:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.awesomplete>ul>li{position:relative;padding:.2em .5em;cursor:pointer}.awesomplete>ul>li:hover{background:#b7d2e0;color:#000}.awesomplete>ul>li[aria-selected=true]{background:#3d6c8e;color:#fff}.awesomplete mark{background:#e9ff00}.awesomplete li:hover mark{background:#b5d100}.awesomplete li[aria-selected=true] mark{background:#3c6b00;color:inherit}.dropdown-menu{border:1px solid #ddd;background-color:#fff}.dropdown-menu li{border-top:1px solid #ddd;padding:2px 5px}.dropdown-menu li:first-child{border-top:none}.dropdown-menu .active,.dropdown-menu li:hover{background-color:#6eb7db;color:#fff}.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#fff}.dropdown-menu{list-style:none;padding:0;margin:0}.dropdown-menu a:hover{cursor:pointer}/*! normalize.css v3.0.1 | MIT License | git.io/normalize */body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}mark{background:#ff0;color:#000}sub,sup{line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box}pre,textarea{overflow:auto}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}.project-values-title,h1{text-transform:uppercase}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}optgroup{font-weight:700}/*! + * Pikaday + * Copyright © 2014 David Bushell | BSD & MIT license | http://dbushell.com/ + */.pika-single{display:block;position:relative;padding:8px;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px rgba(0,0,0,.5)}.pika-title{position:relative}.pika-label{display:inline-block;position:relative;z-index:9999;overflow:hidden;margin:0;padding:5px 3px;font-size:14px;line-height:20px;font-weight:700;background-color:#fff}.pika-title select{cursor:pointer;position:absolute;z-index:9998;margin:0;left:0;top:5px;filter:alpha(opacity=0);opacity:0}.pika-next,.pika-prev{display:block;cursor:pointer;position:relative;outline:0;border:0;padding:0;width:20px;height:30px;text-indent:20px;white-space:nowrap;overflow:hidden;background-color:transparent;background-position:center center;background-repeat:no-repeat;background-size:75% 75%;opacity:.5}.pika-next:hover,.pika-prev:hover{opacity:1}.is-rtl .pika-next,.pika-prev{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.is-rtl .pika-prev,.pika-next{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-next.is-disabled,.pika-prev.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{width:100%;border:0}.pika-table td,.pika-table th{width:14.285714285714286%;padding:0}.pika-table th{color:#999;font-size:12px;line-height:25px;font-weight:700}.pika-button{cursor:pointer;display:block;outline:0;border:0;margin:0;width:100%;padding:5px;color:#666;font-size:12px;line-height:15px;text-align:right;background:#f5f5f5}.medium-editor-anchor-preview,.medium-editor-toolbar{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;top:0;z-index:2000}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button{color:#fff;font-weight:700;background:#3af;box-shadow:inset 0 1px 3px #178fe5;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.pika-button:hover{color:#fff!important;background:#ff8000!important;box-shadow:none!important;border-radius:3px!important}@-webkit-keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes medium-editor-image-loading{0%{-webkit-transform:scale(0);transform:scale(0)}100%{-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}@keyframes medium-editor-pop-upwards{0%{opacity:0;-webkit-transform:matrix(.97,0,0,1,0,12);transform:matrix(.97,0,0,1,0,12)}20%{opacity:.7;-webkit-transform:matrix(.99,0,0,1,0,2);transform:matrix(.99,0,0,1,0,2)}40%{opacity:1;-webkit-transform:matrix(1,0,0,1,0,-1);transform:matrix(1,0,0,1,0,-1)}100%{-webkit-transform:matrix(1,0,0,1,0,0);transform:matrix(1,0,0,1,0,0)}}.medium-editor-anchor-preview{left:0;line-height:1.4;max-width:280px;position:absolute;text-align:center;word-break:break-all;word-wrap:break-word;visibility:hidden}.medium-editor-anchor-preview a{color:#fff;display:inline-block;margin:5px 5px 10px}.medium-editor-placeholder-relative:after,.medium-editor-placeholder:after{content:attr(data-placeholder)!important;padding:inherit;margin:inherit;white-space:pre;font-style:italic}.medium-editor-anchor-preview-active{visibility:visible}.medium-editor-dragover{background:#ddd}.medium-editor-image-loading{-webkit-animation:medium-editor-image-loading 1s infinite ease-in-out;animation:medium-editor-image-loading 1s infinite ease-in-out;background-color:#333;border-radius:100%;display:inline-block;height:40px;width:40px}.medium-editor-placeholder{position:relative}.medium-editor-placeholder:after{position:absolute;left:0;top:0}.medium-editor-placeholder-relative,.medium-editor-placeholder-relative:after{position:relative}.medium-toolbar-arrow-over:before,.medium-toolbar-arrow-under:after{border-style:solid;content:'';display:block;height:0;left:50%;margin-left:-8px;position:absolute;width:0}.medium-toolbar-arrow-under:after{border-width:8px 8px 0}.medium-toolbar-arrow-over:before{border-width:0 8px 8px}.medium-editor-toolbar{left:0;position:absolute;visibility:hidden}.medium-editor-toolbar ul{margin:0;padding:0}.medium-editor-toolbar li{float:left;list-style:none;margin:0;padding:0}.medium-editor-toolbar li button{box-sizing:border-box;cursor:pointer;display:block;font-size:14px;line-height:1.33;margin:0;padding:15px;text-decoration:none}.medium-editor-toolbar li button:focus{outline:0}.medium-editor-toolbar li .medium-editor-action-underline{text-decoration:underline}.medium-editor-toolbar li .medium-editor-action-pre{font-family:Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px;font-weight:100;padding:15px 0}.medium-editor-toolbar-active{visibility:visible}.belong-to-epic-text-wrapper .remove-epic-relationship svg,.colors-table .gu-transit *{visibility:hidden}.medium-editor-sticky-toolbar{position:fixed;top:1px}.master,.medium-editor-relative-toolbar{position:relative}.medium-editor-toolbar-active.medium-editor-stalker-toolbar{-webkit-animation:medium-editor-pop-upwards 160ms forwards linear;animation:medium-editor-pop-upwards 160ms forwards linear}.medium-editor-action-bold{font-weight:bolder}.medium-editor-action-italic{font-style:italic}.medium-editor-toolbar-form{display:none}.medium-editor-toolbar-form a,.medium-editor-toolbar-form input{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.medium-editor-toolbar-form .medium-editor-toolbar-form-row{line-height:14px;margin-left:5px;padding-bottom:5px}.medium-editor-toolbar-form .medium-editor-toolbar-input,.medium-editor-toolbar-form label{border:none;box-sizing:border-box;font-size:14px;margin:0;padding:6px;width:316px;display:inline-block}body,html{width:100%}.medium-editor-toolbar-form .medium-editor-toolbar-input:focus,.medium-editor-toolbar-form label:focus{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;box-shadow:none;outline:0}.medium-editor-toolbar-form a{display:inline-block;font-size:24px;font-weight:bolder;margin:0 10px;text-decoration:none}.medium-editor-toolbar-form-active{display:block}.medium-editor-toolbar-actions:after{clear:both;content:"";display:table}.medium-editor-element{word-wrap:break-word;min-height:30px}.master,body,html{min-height:100%}.medium-editor-element img{max-width:100%}.medium-editor-element sub{vertical-align:sub}.medium-editor-element sup{vertical-align:super}.medium-editor-hidden{display:none}.medium-toolbar-arrow-under:after{border-color:#242424 transparent transparent;top:50px}.medium-toolbar-arrow-over:before{border-color:transparent transparent #242424;top:-8px}.medium-editor-toolbar{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.75));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.75));border:1px solid #000;border-radius:5px;box-shadow:0 0 3px #000}.medium-editor-toolbar li button{background-color:#242424;background:-webkit-linear-gradient(top,#242424,rgba(36,36,36,.89));background:linear-gradient(to bottom,#242424,rgba(36,36,36,.89));border:0;border-right:1px solid #000;border-left:1px solid #333;border-left:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px rgba(0,0,0,.3);color:#fff;height:50px;min-width:50px;-webkit-transition:background-color .2s ease-in;transition:background-color .2s ease-in}.medium-editor-toolbar li button:hover{background-color:#000;color:#ff0}.medium-editor-toolbar li .medium-editor-button-first{border-bottom-left-radius:5px;border-top-left-radius:5px}.medium-editor-toolbar li .medium-editor-button-last{border-bottom-right-radius:5px;border-top-right-radius:5px}.medium-editor-toolbar li .medium-editor-button-active{background-color:#000;background:-webkit-linear-gradient(top,#242424,rgba(0,0,0,.89));background:linear-gradient(to bottom,#242424,rgba(0,0,0,.89))}.medium-editor-toolbar-form{background:#242424;border-radius:5px;color:#999}.medium-editor-toolbar-form .medium-editor-toolbar-input{background:#242424;box-sizing:border-box;color:#ccc;height:50px}.medium-editor-toolbar-form a{color:#fff}.medium-editor-toolbar-anchor-preview{background:#242424;border-radius:5px;color:#fff}.medium-editor-placeholder:after{color:#b3b3b1}code[class*=language-],pre[class*=language-]{color:#f8f8f2;background:0 0;text-shadow:0 1px rgba(0,0,0,.3);font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto;border-radius:.3em}.loader-active,body.loading-project,h1 .date,h1 span{overflow:hidden}:not(pre)>code[class*=language-],pre[class*=language-]{background:#272822}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.prism-token.prism-cdata,.prism-token.prism-comment,.prism-token.prism-doctype,.prism-token.prism-prolog{color:#708090}.prism-token.prism-punctuation{color:#f8f8f2}.prism-namespace{opacity:.7}.prism-token.prism-constant,.prism-token.prism-deleted,.prism-token.prism-property,.prism-token.prism-symbol,.prism-token.prism-tag{color:#f92672}.prism-token.prism-boolean,.prism-token.prism-number{color:#ae81ff}.prism-token.prism-attr-name,.prism-token.prism-builtin,.prism-token.prism-char,.prism-token.prism-inserted,.prism-token.prism-selector,.prism-token.prism-string{color:#a6e22e}.prism-language-css .prism-token.prism-string,.prism-style .prism-token.prism-string,.prism-token.prism-entity,.prism-token.prism-operator,.prism-token.prism-url,.prism-token.prism-variable{color:#f8f8f2}.prism-token.prism-atrule,.prism-token.prism-attr-value,.prism-token.prism-class-name,.prism-token.prism-function{color:#e6db74}.prism-token.prism-keyword{color:#66d9ef}.prism-token.prism-important,.prism-token.prism-regex{color:#fd971f}.prism-token.prism-bold,.prism-token.prism-important{font-weight:700}.prism-token.prism-italic{font-style:italic}.prism-token.prism-entity{cursor:help}a,abbr,acronym,address,applet,article,aside,audio,b,big,blockquote,body,canvas,caption,center,cite,code,dd,del,details,dfn,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,html,i,iframe,img,ins,kbd,label,legend,li,mark,menu,nav,object,ol,output,p,pre,q,ruby,s,samp,section,small,span,strike,strong,sub,summary,sup,table,tbody,td,tfoot,th,thead,time,tr,tt,u,ul,var,video{margin:0;padding:0;border:0;font:inherit;vertical-align:baseline}h1,p{line-height:1.5}.wysiwyg dl dt,.wysiwyg i,em{font-style:italic}article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section{display:block}blockquote,q{quotes:none}blockquote:after,blockquote:before,q:after,q:before{content:"";content:none}*{box-sizing:border-box}html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.3}body .master.ng-animate{transition:0}.drag-active{overflow-x:hidden}.master{height:100%}.menu-secondary,.menu-tertiary,.wrapper{min-height:calc(100vh - 40px)}.centered{margin:1rem auto;max-width:1200px;min-width:960px;width:90%}.wrapper{display:-ms-flexbox;display:flex;height:100%}.menu-secondary{-ms-flex:0 0 auto;flex:0 0 auto;min-width:0;padding:1rem;width:320px}.menu-secondary .search-in{margin-top:.5rem}.menu-tertiary{-ms-flex:0 0 auto;flex:0 0 auto;width:250px}.main{-ms-flex:1;flex:1;min-width:0;padding:1rem 2rem}.hidden{display:none!important}.header-with-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.header-with-actions header{-ms-flex:1;flex:1}.header-with-actions .action-buttons{-ms-flex-negative:0;flex-shrink:0}.header-with-actions .button{color:#fff;float:right;margin-left:10px}.header-with-actions .button:hover{color:#fff}.header-with-actions h1{margin-bottom:0}@font-face{font-family:OpenSans-CondLight;src:url(../fonts/OpenSans-CondLight.ttf) format("truetype")}@font-face{font-family:OpenSans-Light;src:url(../fonts/OpenSans-Light.ttf) format("truetype")}@font-face{font-family:OpenSans-Regular;src:url(../fonts/OpenSans-Regular.ttf) format("truetype")}@font-face{font-family:OpenSans-Semibold;src:url(../fonts/OpenSans-Semibold.ttf) format("truetype")}@font-face{font-family:taiga;font-style:normal;font-weight:400;src:url(../fonts/taiga.eot);src:url(../fonts/taiga.eot?) format("eot"),url(../fonts/taiga.woff) format("woff"),url(../fonts/taiga.ttf) format("truetype")}h1,h2,h3,h4,h5,h6{font-weight:400;line-height:1.5}h1 a,h2 a,h3 a,h4 a,h5 a,h6 a{font-weight:inherit}h1{font-size:2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:1rem}h1 span,h2{font-size:1.6rem}h1 span{margin-right:.5rem;vertical-align:bottom;white-space:nowrap}h1 span.green,h1 span:last-child{-ms-flex-negative:0;flex-shrink:0}h1 .project-name{display:inline-block;margin-bottom:0}blockquote,p{margin:0 0 20px}h1 .project-name-short{display:inline-block;max-width:40%}h1 .green{color:#5b8200;fill:#5b8200}h1 .date{display:inline-block;max-width:500px;white-space:nowrap;word-wrap:normal;color:#767676}h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.2;margin-bottom:1rem}p img{margin:0}small{font-size:1rem}strong{font-weight:700}hr{border:solid #050505;border-width:1px 0 0;clear:both;height:0;margin:10px 0 30px}a,a:visited{text-decoration:none}a:hover,a:visited:hover{transition:color .3s linear}@keyframes loading{0%{filter:blur(5px);opacity:0}100%{filter:blur(0);opacity:1}}@keyframes rotate{50%{filter:invert(1);transform:rotate(360deg)}}@keyframes formSlide{0%{filter:blur(5px);opacity:0;transform:translateY(10rem)}50%{filter:blur(0)}100%{opacity:1;transform:translateY(0)}}.ticket-assigned-to .user-avatar.is-iocaine img,.ticket-assigned-users .user-avatar.is-iocaine img{filter:hue-rotate(150deg) saturate(200%)}@keyframes loadBar{0%,20%{-ms-flex:1;flex:1}10%{-ms-flex:10;flex:10}}@keyframes dropdownFade{0%{opacity:0;transform:translateY(-.25rem)}60%{opacity:1}100%{transform:translateY(0)}}@keyframes blink{85%{opacity:1}100%{opacity:.6}}blockquote,blockquote p{line-height:1.25rem}blockquote{padding:.5rem 1.25rem}blockquote cite{font-size:.9rem;display:block}blockquote cite::before{content:'\2014 \0020'}ol,ul{margin-bottom:20px}ul{list-style:none}ol{list-style:decimal}.card-task,.main-nav,.wysiwyg .list-stye-none{list-style:none}sup{font-size:.9rem;vertical-align:super}.clickable{cursor:pointer}.not-clickable{cursor:default}.draggable{cursor:move}svg{height:1rem;width:1rem}.pika-single{min-width:240px;width:auto;z-index:999999}.pika-single .pika-title{color:#444}.pika-single .is-selected .pika-button{background:#5b8200;border-radius:0!important;box-shadow:inset 0 1px 3px #5b8200}.pika-single .is-today .pika-button{color:#5b8200}.pika-single .is-today.is-selected button{color:#fff}.pika-single .pika-button:hover{background:#9dce0a!important;border-radius:0!important;box-shadow:inset 0 1px 3px #9dce0a!important}div.awesomplete>ul,div.awesomplete>ul::before{background:rgba(0,0,0,.95)}.spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:2rem;max-width:2rem}.capslock.ng-enter,.capslock.ng-leave{animation:dropdownFade .2s ease-in}div.awesomplete input{display:inline-block}div.awesomplete>ul{color:#9dce0a;top:2.25rem;transition:all .2s ease}div.awesomplete>ul[hidden]{position:absolute;top:1.5rem;transform:scale(1)}div.awesomplete li:hover mark,div.awesomplete mark,div.awesomplete>ul>li:hover{background:#9dce0a;color:#000}fieldset{border:0;margin:0;padding:0;position:relative;width:100%}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{border:1px solid;margin:0;padding:8px;width:100%}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{transition:border .3s linear}button,button:active,button:focus{border:0;outline:0}textarea{min-height:10rem}.checksley-error-list{margin-bottom:0}.checksley-error-list li{padding:.2rem}.capslock.ng-leave{animation-direction:reverse}.capslock .icon-capslock{bottom:.8rem;fill:#555;height:.9rem;position:absolute;right:1rem;width:.9rem}.admin-membership .header-message{background:#E8F5E3;margin-top:1rem;padding:1rem}.admin-membership .header-message .no-more-membership{-ms-flex-align:center;align-items:center;color:#444;display:-ms-flexbox;display:flex}.admin-membership .header-message .no-more-membership a,.admin-membership .header-message .no-more-membership strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-membership .header-message .no-more-membership p{color:#444;-ms-flex-positive:1;flex-grow:1;margin:0;padding-left:2rem;padding-right:1rem}.admin-membership .limit-users-warning{font-size:.9rem;color:#5b8200;margin-right:1rem}.admin-membership .check input{height:40px;width:85px}.add-tag-container{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:.5rem 0;padding:1rem}.add-tag-container .color-column{cursor:pointer;-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative}.add-tag-container .tag-name{-ms-flex-preferred-size:80%;flex-basis:80%;margin-right:1rem}.add-tag-container .options-column{display:-ms-flexbox;display:flex}.add-tag-container .options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.add-tag-container .current-color.empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.add-tag-container .current-color.empty-color:after,.add-tag-container .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.add-tag-container .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.add-tag-container .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.add-tag-container input[type=text]{background:#fff}.add-tag-container .icon.icon-close,.add-tag-container .icon.icon-save{opacity:1}.tags-table .table-tags-editor input[type=text]{background-color:transparent;border:0;border-bottom:1px solid transparent;box-shadow:none;transition:border-bottom .2s linear}.tags-table .table-tags-editor input[type=text]:focus{border-bottom:1px solid #555;outline:0}.tags-table .table-tags-editor .row.header-tag-row{cursor:default;padding-left:1rem}.tags-table .color-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;padding:0 10px;position:relative}.tags-table .color-filter:hover input{border-bottom:1px solid #e4e3e3}.tags-table .color-filter input{padding:0}.tags-table .color-filter label{cursor:pointer}.tags-table .row.tag-row{margin:.3rem 0;padding:.7rem}.tags-table .row.tag-row:hover{cursor:default}.tags-table .row .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mix-tags{position:relative}.tags-table .mix-tags .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#050505;bottom:2rem;color:#fff;display:none;list-style-type:none;margin:0;padding:10px;position:absolute;right:-85%;width:120px;z-index:99;text-align:"center"}.tags-table .mix-tags .popover a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.tags-table .mix-tags .popover a:last-child{border:0}.tags-table .mix-tags .popover a:hover{color:#9dce0a;transition:color .3s linear}.tags-table .mix-tags .popover a:hover.point{color:#fff}.tags-table .mix-tags .popover:after{background:#050505;bottom:-5px;content:'';height:15px;left:50%;position:absolute;transform:rotate(45deg);width:1rem}.tags-table .mix-tags:hover .popover{display:block}.tags-table .mixing-options-column{text-align:right}.tags-table .mixing-options-column .loading-spinner{margin-right:1.2rem;width:1.2rem}.tags-table .mixing-tags-from,.tags-table .mixing-tags-to{background:rgba(216,248,121,.2)}.tags-table .mixing-confirm{margin:0 .5rem}.tags-table .mixing-help-text{font-size:.75rem;color:#879b89;display:inline;padding-right:.5rem;text-align:center}@media (max-width:1280px){.tags-table .mixing-help-text{display:block;padding:.5rem}}.tags-table .current-color.empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.tags-table .current-color.empty-color:after,.tags-table .current-color.empty-color:before{content:"";width:2px;height:54px;background:#ff8282;position:absolute;top:0}.tags-table .current-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.tags-table .current-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.admin-attributes .admin-attributes-section{margin-bottom:2rem}.admin-attributes .admin-attributes-section .checksley-error-list{height:0;position:relative}.admin-attributes .admin-attributes-section .checksley-error-list li{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,0,0,.7);position:absolute;width:100%}.admin-attributes .admin-attributes-section .admin-tags-section-wrapper-empty{color:#767676;padding:10vh 0 0;text-align:center}.admin-attributes .admin-attributes-section .loading-spinner{max-height:3rem;max-width:3rem}.admin-roles header{position:relative}.admin-roles h1{margin-bottom:0}.admin-roles p{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#767676}.auth .logo,.project-values-title h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.auth .logo,.auth .tagline{color:#fff;text-align:center}.project-values-title{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.8em 1rem}.project-values-title h2{font-size:1.2rem;margin:0}.auth .logo,.auth .tagline,.auth form{margin-bottom:1rem}.project-values-title h2 span{margin-left:.5rem;text-transform:none}.project-values-title a{display:inline-block}.auth{background:url(../images/bg.png) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;overflow-y:auto;position:fixed;right:0;top:0;z-index:999}.auth .auth-container{-ms-flex-preferred-size:400px;flex-basis:400px}.auth .logo-svg{text-align:center;width:100%}.auth .logo-svg svg{height:8rem;width:8rem}.auth .logo{font-size:3rem}.auth .tagline{font-size:2rem;line-height:2rem;text-transform:uppercase}.auth fieldset{margin-bottom:.5rem}.auth .login-text,.auth .register-text{margin-left:.5rem;padding-bottom:1rem}.auth .login-text a,.auth .register-text a{text-decoration:underline}.auth .login-text a:hover,.auth .register-text a:hover{color:#9dce0a}.auth .register-terms{margin:.5rem 0 .75rem}.auth .button{color:#fff;display:block;text-align:center}.auth a:hover{color:#fff}.moustache{animation-duration:5s;animation-iteration-count:infinite;animation-name:moustache;animation-timing-function:ease-in-out;fill:rgba(91,130,0,.9);stroke:#9dce0a;stroke-width:1px;transform-origin:50% 50%;transition:.3s}.moustache:hover{fill:rgba(157,206,10,.9);transition:.3s}@keyframes moustache{0%,30%,70%,90%{transform:rotate(0)}10%{transform:rotate(-10deg)}80%{transform:rotate(10deg)}}.backlog-filter{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;opacity:0;overflow:hidden;position:relative;transition:all .2s linear;width:0}.backlog-filter tg-filter{transform:translateX(-260px);transition:all .2s linear}.backlog-filter.active tg-filter,.issues tg-filter{transform:translateX(0)}.backlog-filter.active{opacity:1;transition:all .2s linear;width:260px}.backlog-menu{background:#f5f5f5;color:#050505;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.backlog-menu .menu-button.move-to-sprint,.multiple-drag-mirror.us-item-row .icon-drag,.multiple-drag-mirror.us-item-row .points,.multiple-drag-mirror.us-item-row .status,.multiple-drag-mirror.us-item-row .tags-block,.multiple-drag-mirror.us-item-row .us-settings,.multiple-drag-mirror.us-item-row .votes,.multiple-drag-mirror.us-item-row input{display:none}@media (max-width:1280px){.backlog-menu{-ms-flex-direction:column;flex-direction:column}}.backlog-menu .menu-button .icon-move{margin-right:.25rem}.backlog-menu .button-bulk{margin-left:.2rem}.multiple-drag-mirror.us-item-row{background:#fff;border-radius:4px;box-shadow:2px 2px 5px #555;min-height:calc(40px + 1rem);opacity:.9;padding:1rem}.multiple-drag-mirror.us-item-row.is-checked,.multiple-drag-mirror.us-item-row:hover{background:#fff}.forecasting-add-sprint{font-size:.9rem;background:#f5f5f5;cursor:pointer;padding:.5rem 0;text-align:center}.invitation-main .avatar .person-name,.invitation-main .invitation-text{font-size:1.2rem;color:#fff;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.forecasting-add-sprint:hover{background:#ededed;transition:background .2s}.forecasting-add-sprint .icon-add{width:1.75rem;height:1.75rem;background:#9dce0a;fill:#fff;margin-right:1rem;padding:.25rem;vertical-align:middle}.invitation-main{background:url(../images/invitation_bg.jpg) center center no-repeat;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background-size:cover;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;height:100vh;-ms-flex-pack:center;justify-content:center;z-index:999}.kanban,.taskboard{height:calc(100vh - 40px)}.invitation-main .invitation-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:800px;min-width:420px}.invitation-main .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.invitation-main .avatar img{margin-bottom:.5rem;width:50px}.invitation-main .invitation-text{text-align:center}.invitation-main .invitation-text .project-name{font-size:2rem;display:block;text-transform:uppercase}.invitation-main .invitation-form{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;width:100%}.invitation-main .invitation-form fieldset{margin-bottom:.5rem}.error-main h1,.invitation-main .register-form fieldset:last-child{margin-bottom:1rem}.invitation-main .invitation-form input:focus+.forgot-pass{opacity:0;transition:opacity .5s linear}.invitation-main .invitation-form .forgot-pass{font-size:.9rem;color:#767676;opacity:1;position:absolute;right:1rem;top:.5rem;transition:all .3s linear}.invitation-main .invitation-form .forgot-pass:hover{color:#444;transition:color .3s linear}.invitation-main .login-form,.invitation-main .register-form{-ms-flex:1;flex:1;padding:1rem 3rem;text-align:center}.invitation-main .login-form .form-header,.invitation-main .register-form .form-header{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#fff}.invitation-main .register-text{color:#fff;font-size:.9rem;margin-left:.5rem;padding-bottom:1rem;text-align:left}.invitation-main .register-text a{color:#5b8200}.invitation-main .button-auth{display:block}.invitation-main .button-blackish:hover{background:#5b8200}.invitation-main .login-form{border-right:1px solid rgba(255,255,255,.3)}.invitation-main .public-register-disabled{width:400px}.invitation-main .public-register-disabled .login-form{border-right:0}.invitation-main .contrib-plugins-wrapper label{color:#e4e3e3}.issues .filters-bar{position:relative;width:260px}.kanban{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-height:calc(100vh - 40px);max-width:calc(100vw - 50px);position:relative}.kanban header{min-height:70px}.kanban .kanban-settings{float:right}.kanban .burndown-container{display:none}.kanban .zoom-loading img{display:block;margin-right:1rem}.kanban-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.kanban-header .options{display:-ms-flexbox;display:flex}.taskboard-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.error-main{background:url(../images/invitation_bg.jpg) center center no-repeat;background-size:cover;-ms-flex-align:center;align-items:center;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.duty-content,.taskboard{position:relative}.error-main .error-container{color:#fff;-ms-flex-preferred-size:400px;flex-basis:400px;text-align:center}.error-main .logo-svg{padding:0 32%;text-align:center;width:100%}.error-main h1{color:#fff}.error-main a{color:#9dce0a}.rtl .navbar .nav-right{margin:0}.rtl .navbar .nav-right .user-avatar{padding-left:0;padding-right:2em;text-align:left}.rtl .navbar .nav-right img{margin-left:0;margin-right:.5rem}.rtl .main-nav li:hover .helper{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav li:hover .helper::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu{background:linear-gradient(to left,#000 0,rgba(0,0,0,.8) 100%);left:initial;right:50px}.rtl .main-nav .backlog-sprints-menu::after{left:initial;right:calc(-12px/2)}.rtl .main-nav .backlog-sprints-menu a{text-align:right}.rtl .admin-menu li a{padding:1rem 1rem 1rem 0}.rtl h1 span{margin-left:.5rem;margin-right:0}.rtl blockquote{border-left:0;border-right:5px solid #f5f5f5}.rtl .single-filter .name,.rtl .tag{border-color:transparent;border-width:0 3px 0 0}.rtl .tag{border-radius:5px 0 0 5px;margin:0 0 .5rem .5rem}.rtl .tag .icon-close{margin-left:0;margin-right:.25rem}.rtl .home-wrapper .working-on-container{margin-left:1rem;margin-right:0}.rtl .home-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .home-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .contact-team-large .icon-mail{margin-left:.5rem;margin-right:0}.rtl .user-profile .project-details-image{margin-left:2rem;margin-right:0}.rtl .profile-timeline .activity-item .profile-contact-picture,.rtl .profile-timeline .activity-item .profile-member-picture,.rtl .single-project .project-logo{margin-left:1rem;margin-right:0}.rtl .profile-timeline .activity-item{padding:1rem 0 1rem .5rem}.rtl .profile-timeline .activity-item .activity-date{left:.5rem;right:auto}.rtl .profile-timeline .activity-item .activity-info{margin-left:130px;margin-right:0}.rtl .profile-timeline .activity-item blockquote{margin-left:0;margin-right:calc(35px + 1rem)}.rtl .profile-timeline .single-attachment .icon{margin-left:.5rem;margin-right:0}.rtl .project-data .involved-team li{margin-left:.13rem;margin-right:0}.rtl .project-details-form-data .actions .delete-account{text-align:left}.rtl .backlog-table-body .backlog-table-title .user-stories,.rtl .backlog-table-body .row .user-stories,.rtl .backlog-table-body .user-story-name a,.rtl .backlog-table-header .backlog-table-title .user-stories,.rtl .backlog-table-header .row .user-stories,.rtl .issues-table .assigned-field,.rtl .issues-table .issue-field,.rtl .issues-table .modified-field,.rtl .issues-table .subject a,.rtl .sprints .sprint-table .column-us{text-align:right}.rtl .project-data .timeline{margin-left:1rem;margin-right:0}.rtl .track-icon{margin-left:.5rem;margin-right:0}.rtl .watch-options-arrow{margin-left:0;margin-right:auto}.rtl .ticket-estimation .ticket-role-points .icon-arrow-down{margin-left:0;margin-right:.25rem}.rtl .ticket-watch .ticket-watch-button,.rtl .ticket-watch svg{margin-left:.25rem;margin-right:0}.rtl .related-tasks-body .task-assignedto .icon{left:.5rem;right:0}.rtl .related-tasks-body .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .related-tasks-body .task-name{margin-left:1rem;margin-right:0}.rtl .related-tasks-body .task-name span{margin-left:.25rem;margin-right:0}.rtl tg-filter .search-action{left:.7rem;right:auto}.rtl .kanban tg-filter,.rtl .taskboard tg-filter{left:auto;right:0;transform:translateX(260px)}.rtl .kanban tg-filter.open,.rtl .taskboard tg-filter.open{transform:translateX(0)}.rtl .category-config .icon,.rtl .icon-arrow-left,.rtl .icon-arrow-right{transform:scaleX(-1)}.rtl .issues-options .button-bulk{margin-left:0;margin-right:.2rem}.rtl .issues-table .assigned-field .icon,.rtl .issues-table .issue-field .icon,.rtl .issues-table .modified-field .icon{margin-left:0;margin-right:.25rem}.rtl .issues-table .pop-status{left:auto;right:0}.rtl .issues-table .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .highlighted .header svg,.rtl .issues-table .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .issues-table .subject{padding-left:1rem;padding-right:0}.rtl .issues-table .issue-assignedto .icon{left:0;right:auto}.rtl .single-filter{padding-left:.5rem;padding-right:0}.rtl .single-filter .number{left:0;right:auto}.rtl .single-filter .name{border-style:solid}.rtl .discover-header .search-button{left:1rem;right:auto}.rtl .highlighted .header svg.icon-activity,.rtl .highlighted .header svg.icon-like{margin-left:.5rem;margin-right:0}.rtl .highlighted tg-most-liked{margin-left:8%;margin-right:0}.rtl .highlighted-project .statistic{margin-left:.5rem;margin-right:0}.rtl .highlighted-project .project-statistics svg{margin-left:.25rem;margin-right:0}.rtl .highlighted-project .project-logo{margin-left:1rem;margin-right:0}.rtl .featured-project .project-card-logo{margin-left:.5rem;margin-right:0}.rtl .featured-project .project-card-statistics svg{margin-left:.25rem;margin-right:0}.rtl .project-list-wrapper .project-list{margin-left:2rem;margin-right:0}.rtl .project-list-wrapper .list-itemtype-project .list-itemtype-project-image{margin-left:1rem;margin-right:0}.rtl .create-project-selector-question{left:1.5rem;right:auto}.rtl .create-project-title-wrapper .icon{margin-left:.5rem;margin-right:0}.rtl .create-project-privacity label .icon{margin-left:.25rem;margin-right:0}.rtl .create-project-action-submit{margin-left:0;margin-right:1rem}.rtl .summary-progress-bar{margin-left:10px;margin-right:0}.rtl .empty-burndown svg{margin-left:2rem;margin-right:0}.rtl .backlog-menu .button-bulk{margin-left:0;margin-right:.2rem}.rtl .ticket-header .detail-status{margin-left:0;margin-right:.25rem}.rtl .ticket-status .level-name{float:left}.rtl .ticket-status .level{margin-left:.5rem;margin-right:0}.rtl .ticket-data-container .icon{margin-left:0;margin-right:.25rem}.rtl .ticket-assigned-to .assigned-to{margin-left:0;margin-right:.5rem}.rtl .user-list-avatar{margin-left:.25rem;margin-right:0}.rtl .user-list-name{margin-left:0;margin-right:.5rem}.rtl .assigned-to-list .user-list-multiple .remove-assigned-to,.rtl .assigned-to-list .user-list-single .remove-assigned-to,.rtl .ticket-assigned-to .remove-user,.rtl .ticket-assigned-users .remove-user,.rtl .ticket-watchers .delete-watcher{left:.5rem;right:auto}.rtl .lightbox .close{left:3rem;right:auto}.rtl .activity .activity-avatar,.rtl .comment .comment-avatar{margin-left:1.5rem;margin-right:0}.rtl .comment .comment-creator{margin-left:.5rem;margin-right:0}.rtl tg-wysiwyg .tools{padding-left:0;padding-right:1rem}.rtl .add-tag-button .icon-add{margin:.5rem 0 0 .25rem}.rtl .add-tag-input .save{margin:.5rem .5rem 0 0}.rtl .issue-nav{left:1rem;right:auto}.rtl .upvote-btn{margin-left:.3rem;margin-right:0}.rtl .taskboard-table-header .taskboard-table-inner{margin-left:1rem}.rtl .taskboard-table-header .task-colum-name{margin:0 0 0 5px}.rtl .kanban-table-header{margin-left:-3.7rem}.rtl .kanban-table-body .task-column,.rtl .kanban-table-header .task-colum-name,.rtl .taskboard-table-body .task-column{margin:0 0 0 5px}.rtl .kanban-table-body .task-column:last-child,.rtl .taskboard-table-body .task-column:last-child{margin-left:0;margin-right:initial}.rtl .backlog-table-body .votes svg{margin-left:.25rem;margin-right:0}.rtl .backlog-table-header .backlog-table-title{padding-left:1rem;padding-right:0}.rtl .backlog-table-body .backlog-table-title .status,.rtl .backlog-table-body .row .status,.rtl .backlog-table-header .backlog-table-title .status,.rtl .backlog-table-header .row .status{-ms-flex-preferred-size:150px;flex-basis:150px;text-align:right}.rtl .backlog-table-body .points .icon,.rtl .backlog-table-body .status .icon,.rtl .backlog-table-header .points .icon,.rtl .backlog-table-header .status .icon{margin-left:0;margin-right:.2rem}.rtl .sprints .sprint-table .column-points,.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .created-by .created-title{text-align:left}.rtl .sprints .sprint .edit-sprint{left:0;margin-left:.5rem;margin-right:0;right:auto}.rtl .epic-row .progress-bar,.rtl .epic-row .progress-status{left:auto;right:0}.rtl .ticket-created-by .created-by .created-date,.rtl .ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem}.rtl tg-wysiwyg .markdown-editor-placeholder,.rtl tg-wysiwyg .medium-editor-placeholder{padding-left:0;padding-right:1rem;text-align:right}.rtl .attachments-header button{margin-left:.2rem;margin-right:0}.rtl .attachments-header label{margin-left:0;margin-right:.25rem}.rtl .attachment-list .attachment-comments,.rtl .attachment-list .editable-attachment-comment{margin-left:.5rem;margin-right:0}.rtl .attachment-list .editable-attachment-deprecated input{margin-left:.2rem;margin-right:0}.rtl .more-attachments .more-attachments-num{margin-left:0;margin-right:.5rem}.rtl .single-attachment .attachment-name{padding-left:1rem;padding-right:0}.rtl .single-attachment .attachment-name svg{margin-left:.25rem;margin-right:0}.rtl .wiki-nav .add-button svg{margin-left:.5rem;margin-right:0}.rtl .wiki-pages-table .created-field,.rtl .wiki-pages-table .creator-field,.rtl .wiki-pages-table .last-modifier-field,.rtl .wiki-pages-table .modified-field,.rtl .wiki-pages-table .title-field{text-align:right}.rtl .wiki-summary div{margin-left:1.25rem;margin-right:0}.rtl .summary .number{margin-left:.3rem;margin-right:0}.rtl .summary .stats{margin-left:initial;margin-right:auto}.rtl .table-team .avatar .avatar-data{margin-left:0;margin-right:1rem;text-align:right}.rtl .table-team .leave-project .icon{margin-left:.2rem;margin-right:0}.rtl .belong-to-epic-text-wrapper{margin-left:1rem;margin-right:0}.rtl .epics-table-options-wrapper{left:.5rem;right:auto}.rtl .epics-table-dropdown{left:0;right:auto}.rtl .epic-row .icon-upvote,.rtl .story-row .icon-upvote{margin-left:.25rem;margin-right:0}.rtl .story-row{margin-left:0;margin-right:4rem}.rtl .epic-row .icon-arrow-down{margin-left:0;margin-right:.1rem}.rtl .epic-header-container .color-selector{margin-left:.5rem;margin-right:0}.rtl .related-userstories-header .related-userstories-title{margin-left:0;margin-right:1rem}.rtl tg-related-userstory-row .userstory-name{margin-left:1rem;margin-right:0}.rtl tg-related-userstory-row .userstory-name span{margin-left:0;margin-right:.25rem}.rtl tg-related-userstory-row .avatar figcaption{margin-left:0;margin-right:.5rem}.rtl .card-owner-actions .icon{margin-left:.25rem;margin-right:0}.rtl .card-owner img{margin-left:.5rem;margin-right:0}.rtl .card-owner .card-owner-avatar img{margin-left:.45rem;margin-right:0}.rtl .card-statistics .statistic{margin-left:.5rem;margin-right:.5rem}.rtl .card-statistics .icon{margin-left:.2rem;margin-right:0}.rtl .lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-left:.5rem;margin-right:0}.rtl .lightbox-create-related-user-stories .new-user-story-options{margin-left:0;margin-right:auto}.rtl .lightbox-generic-form .settings fieldset{margin-left:.5rem;margin-right:0}.rtl .ticket-estimation .popover{left:auto;right:.5rem}.rtl .ticket-estimation .popover::after{left:auto;right:10px}.rtl .profile .timeline-wrapper{margin-left:3.5rem;margin-right:0}.rtl .profile .profile-bar{margin-left:1rem;margin-right:0}.rtl .profile-content-tabs .icon{margin-left:.5rem;margin-right:0}.rtl .profile-sidebar h4 .icon{margin-left:.3rem;margin-right:auto}.rtl .profile-filter .searchbox input{margin-left:1rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-project-image,.rtl .list-itemtype-project .list-itemtype-track .list-itemtype-track-likers,.rtl .list-itemtype-ticket .list-itemtype-avatar,.rtl .list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers,.rtl .profile-filter .searchbox .icon-search{margin-left:.5rem;margin-right:0}.rtl .list-itemtype-project .list-itemtype-track-likers .icon,.rtl .list-itemtype-project .list-itemtype-track-watchers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-likers .icon,.rtl .list-itemtype-ticket .list-itemtype-track-watchers .icon{margin-left:.25rem;margin-right:0}.rtl .list-itemtype-ticket.blocked-project .icon-blocked-project{margin-left:0;margin-right:.25rem}.rtl .list-itemtype-ticket .list-itemtype-ticket-data{margin-left:1rem;margin-right:0}.rtl .list-itemtype-user .list-itemtype-avatar{margin-left:.75rem;margin-right:0}.rtl .admin-submenu ul a{padding:1rem 1rem 1rem 0}.rtl .admin-functionalities .module-desc{margin:0 0 0 2rem}.rtl .admin-functionalities .module-icon{margin:0 0 0 .5rem}.rtl .project-details .project-details-image{margin-left:2rem;margin-right:0}.rtl .admin-project-profile-owner-actions .owner-info{padding-left:0;padding-right:.5rem}.rtl .admin-roles .general-category .check{margin-left:0;margin-right:.5rem}.rtl .help-button svg,.rtl .project-details .private-or-public svg{margin-left:.5rem;margin-right:0}.rtl .project-csv .option-wrapper{border-left:1px solid #767676;border-radius:5px 0 0 5px;border-right:0}.rtl .colors-table .table-header .row{padding-left:0;padding-right:50px}.rtl .basic-table .row{text-align:right}.rtl .admin-membership-table .avatar img{margin:0 .3rem 0 .5rem}.rtl .admin-membership-table .row-role{padding-left:1rem;padding-right:0}.rtl .project-details .get-feedback-inner .check,.rtl .project-details .looking-for-people-selector .check{margin-left:0;margin-right:auto}.rtl .check input{left:auto;right:-10px}.rtl .check input:checked+div{margin-left:0;margin-right:50%}.rtl .check input:checked~.check-yes{left:.3rem;right:auto}.rtl .check input~.check-no{left:auto;right:.375rem}.rtl .notification-message-success{left:-370px;right:auto}.rtl .notification-message-success.active{animation:animSlideRTL 2s}.rtl .notification-message-success.inactive{animation:animSlideOutRTL .5s}@keyframes animSlideRTL{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}4.1%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,232.117,0,0,1)}8.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,357.804,0,0,1)}12.11%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,407.374,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,417.342,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,399.585,0,0,1)}60.56%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400.01,0,0,1)}100%,82.78%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,400,0,0,1)}}@keyframes animSlideOutRTL{100%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}0%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,30,0,0,0,1)}}.taskboard{overflow:hidden}.taskboard .graphics-container,.taskboard .summary,.taskboard h1{-ms-flex-negative:0;flex-shrink:0}.taskboard .graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.taskboard .graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.taskboard .zoom-loading img{display:block;margin-right:1rem}.taskboard-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.taskboard-inner{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden}.team h2{margin:1rem 0}.team h2 span:last-child{color:#5b8200}.us-story-main-data{margin-bottom:1rem}.us-story-main-data header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:.5rem}.subheader{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}@media (max-width:1280px){.subheader{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}}.subheader .ticket-created-by{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-negative:0;flex-shrink:0}@media (max-width:1280px){.subheader .ticket-created-by{-ms-flex-preferred-size:auto;flex-basis:auto;-ms-flex-order:1;order:1}}.subheader .tags-block{-ms-flex:1;flex:1}@media (max-width:1280px){.subheader .tags-block{-ms-flex-order:2;order:2}}.subheader .tags-block .tag{border-color:transparent;border-style:solid}.duty-content .in-progress{cursor:progress}.duty-content:hover .view-description .edit{opacity:1;top:-1.5rem;transition:all .2s linear}.duty-content:hover .view-description .editable{background:#f5f5f5;cursor:pointer}.duty-content:hover .view-description .no-description{color:#444}.duty-content.wysiwyg{overflow:visible}.duty-content .no-description{color:#767676}.duty-content .markdown{background:#fff;height:10rem}.duty-content .save-container{position:absolute;right:1rem;top:.2rem}.duty-content .save-container:hover{opacity:.3;transition:opacity .2s linear}.duty-content .save-container .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:1.5rem;max-width:1.5rem}.duty-content .edit{cursor:pointer;fill:#555}.duty-content .view-description .edit{background:#f5f5f5;height:2rem;left:0;opacity:0;padding:.2rem .5rem;position:absolute;top:0;transition:all .2s linear;width:2rem}.duty-content .edit-description{margin-bottom:2rem}.duty-content .edit-description .save{cursor:pointer;display:inline-block;position:relative;top:.3rem}.duty-content .edit-description .edit{display:inline-block;position:absolute;right:2.5rem;top:.4rem;transition:all .2s linear}.duty-content .edit-description .preview{padding-top:1.5rem}.comment-list{padding:1rem}.save-wiki{float:right}.wiki{max-width:1024px}.wiki .wysiwyg{margin-bottom:0}.avatar img{border:2px solid #fff;border-radius:8%;width:100%}.basic-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.basic-table .row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #dad9d9;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:.3rem 0;text-align:left;width:100%}@media (max-width:767px){.basic-table .row{-ms-flex-direction:column;flex-direction:column}}.basic-table .row .width-1{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.basic-table .row .width-2{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:2;flex-grow:2}.basic-table .row .width-3{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:3;flex-grow:3}.basic-table .row .width-4{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:4;flex-grow:4}.basic-table .row .width-5{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:5;flex-grow:5}.basic-table .row .width-6{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:6;flex-grow:6}.basic-table .row .width-7{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:7;flex-grow:7}.basic-table .row .width-8{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:8;flex-grow:8}.basic-table .row:last-child{border-bottom:0}.button,.button-auth,.button-blackish,.button-bulk,.button-filter,.button-gray,.button-green,.button-red,.button-tribe,.menu-button,.trans-button,a.button-gray,a.button-green{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0;border:0;border-radius:3px;color:#fff;cursor:pointer;display:inline-block;padding:.6rem 2rem;text-align:center;text-transform:uppercase;transition:all .2s linear;vertical-align:middle}.button-auth:hover,.button-blackish:hover,.button-bulk:hover,.button-filter:hover,.button-gray:hover,.button-green:hover,.button-red:hover,.button-tribe:hover,.button:hover,.menu-button:hover,.trans-button:hover{color:#fff;transition:all .2s linear}.button-auth:visited,.button-blackish:visited,.button-bulk:visited,.button-filter:visited,.button-gray:visited,.button-green:visited,.button-red:visited,.button-tribe:visited,.button:visited,.menu-button:visited,.trans-button:visited{color:#fff}.button.loading span,.loading.button-auth span,.loading.button-blackish span,.loading.button-bulk span,.loading.button-filter span,.loading.button-gray span,.loading.button-green span,.loading.button-red span,.loading.button-tribe span,.loading.menu-button span,.loading.trans-button span{animation:loading .5s linear}.button .icon,.button span,.button-auth .icon,.button-auth span,.button-blackish .icon,.button-blackish span,.button-bulk .icon,.button-bulk span,.button-filter .icon,.button-filter span,.button-gray .icon,.button-gray span,.button-green .icon,.button-green span,.button-red .icon,.button-red span,.button-tribe .icon,.button-tribe span,.menu-button .icon,.menu-button span,.trans-button .icon,.trans-button span{color:#fff}.button.disabled,.button[disabled],.disabled.button-auth,.disabled.button-blackish,.disabled.button-bulk,.disabled.button-filter,.disabled.button-gray,.disabled.button-green,.disabled.button-red,.disabled.button-tribe,.disabled.menu-button,.disabled.trans-button,[disabled].button-auth,[disabled].button-blackish,[disabled].button-bulk,[disabled].button-filter,[disabled].button-gray,[disabled].button-green,[disabled].button-red,[disabled].button-tribe,[disabled].menu-button,[disabled].trans-button{background:#f5f5f5;box-shadow:none;color:#767676;cursor:not-allowed;opacity:.65}.button.disabled:hover,.button[disabled]:hover,.disabled.button-auth:hover,.disabled.button-blackish:hover,.disabled.button-bulk:hover,.disabled.button-filter:hover,.disabled.button-gray:hover,.disabled.button-green:hover,.disabled.button-red:hover,.disabled.button-tribe:hover,.disabled.menu-button:hover,.disabled.trans-button:hover,[disabled].button-auth:hover,[disabled].button-blackish:hover,[disabled].button-bulk:hover,[disabled].button-filter:hover,[disabled].button-gray:hover,[disabled].button-green:hover,[disabled].button-red:hover,[disabled].button-tribe:hover,[disabled].menu-button:hover,[disabled].trans-button:hover{background:#f5f5f5;color:#767676}.menu-button,.trans-button:visited{color:#050505}.trans-button .icon,.trans-button span{color:#050505;transition:color .2s linear}.trans-button .icon{margin-right:.5rem}.menu-button{border-radius:0}.menu-button:hover{background:#e4e3e3;color:#555}.menu-button span,.menu-button:visited{color:#050505}.submit-button{width:100%}.button-green,a.button-green{background:#5b8200}.button-green.active,.button-green:hover,a.button-green.active,a.button-green:hover{background:#9dce0a;color:#fff}.button-gray,a.button-gray{background:#555}.button-gray.active,.button-gray:hover,a.button-gray.active,a.button-gray:hover{background:#9dce0a;color:#fff}.button-blackish{background:#050505;color:#e4e3e3}.button-blackish:hover{background:#050505;color:#fff}.button-red{background:#ff8282}.button-red:hover{background:red;color:#fff}.button-red .icon{color:#fff}.button-bulk{background:#5b8200;padding:.55rem .75rem}.button-bulk .icon{fill:currentColor;margin-right:0;position:relative;top:1px}.button-bulk:hover{background:#9dce0a}.button-auth{background:#444}.button-auth .icon,.button-auth img{font-size:1.2rem;color:#fff;margin-right:.5rem}.button-auth:hover{background:#000}.button-tribe{-ms-flex-align:center;align-items:center;background:#107a8a;display:-ms-flexbox;display:flex;padding:.4rem .4rem .4rem 1.5rem}.button-tribe.active,.button-tribe:hover{background:#0b525c;color:#fff}.button-tribe .tribe-logo{margin-right:.5rem;width:1.5rem}.tribe-more-info{font-size:.9rem;color:#5b8200;display:inline-block;margin-top:.5rem}.button-filter{background:#e4e3e3;margin-left:1rem;padding:.4rem .5rem;position:relative}.button-filter:hover{background:#767676;fill:#e4e3e3}.button-filter .filter-num{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background:red;border-radius:50%;height:1rem;left:-.5rem;position:absolute;top:-.5rem;width:1rem}.card-placeholder{background:#dfdede;border:1px dashed #d0cece;cursor:default;padding:1rem}.card-placeholder .placeholder-avatar{display:-ms-flexbox;display:flex}.card-placeholder .image{background:#d0cece;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:.5rem;width:48px}.card-placeholder .text{-ms-flex:1;flex:1}.card-placeholder .line{background:#d0cece;height:1rem;margin-bottom:1rem;width:80%}.card-placeholder .line:last-child{width:40%}.card-placeholder .title{text-transform:uppercase}.card-placeholder p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;margin:0}.check{background-color:#cbc9c9;border-radius:2px;cursor:pointer;height:1.5rem;overflow:hidden;position:relative;width:65px}.check input{cursor:pointer;height:50px;left:-10px;opacity:0;position:absolute;top:-10px;width:100px;z-index:999}.check input+div{background-color:#555;height:25px;transition:all .2s linear;width:50%}.check input~.check-text{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff;position:absolute;top:.2rem}.check input~.check-yes{opacity:0;right:.5rem}.check input~.check-no{left:.5rem;opacity:.6}.check input:checked+div{background-color:#9dce0a;margin-left:50%;transition:all .2s linear}.check input:checked~.check-yes{opacity:.8;right:.25rem}.check input:checked~.check-no{left:.25rem;opacity:0}.check input:disabled{cursor:auto}.check input:disabled+div{background-color:#767676}.ticket-created-by{display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end}@media (max-width:1280px){.ticket-created-by{-ms-flex-pack:start;justify-content:flex-start;margin-bottom:.5rem}}.ticket-created-by .user-avatar{-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-positive:0;flex-grow:0;margin-left:.5rem}.ticket-created-by .user-avatar img{width:100%}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555;display:block;text-align:right}@media (max-width:1280px){.ticket-created-by .user-avatar{margin-left:0;margin-right:.5rem;-ms-flex-order:1;order:1}.ticket-created-by .created-by{-ms-flex-order:2;order:2}.ticket-created-by .created-by .created-date,.ticket-created-by .created-by .created-title{text-align:left}}.ticket-created-by .created-by .created-title{color:#5b8200}.ticket-created-by .created-by .created-date{margin-left:.5rem}@media (max-width:1280px){.ticket-created-by .created-by .created-date{margin-left:0}}.doom-line{-ms-flex-align:center;align-items:center;background:#ff8282;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:.5rem 0;padding:.25rem 0}.doom-line span{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:#fff}.drag-drop-help,.help-button,.help-markdown{font-size:.75rem}.wysiwyg-help{background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:-.5rem;padding:.45rem .5rem}.wysiwyg-help a{display:inline-block}.drag-drop-help{color:#555}.help-button:hover span,.help-markdown:hover span{transition:color .2s linear}.help-button:hover .icon,.help-markdown:hover .icon{fill:#9dce0a;transition:fill .2s linear}.help-button span,.help-markdown span{vertical-align:text-top}.help-button .icon,.help-markdown .icon{width:.9rem;height:.9rem;fill:#767676;margin-right:.2rem}.empty-filter,.empty-large,.empty-small{margin-top:4rem;text-align:center}.empty-filter img,.empty-large img,.empty-small img{margin-bottom:1rem;width:100%}.empty-filter .title,.empty-large .title,.empty-small .title{font-size:1.2rem;text-transform:uppercase}.empty-filter p,.empty-large p,.empty-small p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0}.empty-filter a,.empty-large a,.empty-small a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#5b8200}.empty-small img{max-width:175px}.empty-large img{max-width:800px}.empty-filter{margin-top:1rem}.ticket-estimation .points-per-role{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.ticket-estimation .ticket-role-points{background:rgba(118,118,118,.2);color:#767676;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.1rem;min-height:2rem;padding:.5rem 1rem;position:relative}.ticket-estimation .ticket-role-points.clickable.active,.ticket-estimation .ticket-role-points.clickable:hover{background:rgba(157,206,10,.9);color:#e4e3e3}.ticket-estimation .ticket-role-points.clickable.active .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable.active .points,.ticket-estimation .ticket-role-points.clickable.active .role,.ticket-estimation .ticket-role-points.clickable:hover .icon-arrow-bottom,.ticket-estimation .ticket-role-points.clickable:hover .points,.ticket-estimation .ticket-role-points.clickable:hover .role{color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points:last-child{background:rgba(135,155,137,.5);border-bottom:0;color:#e4e3e3}.ticket-estimation .ticket-role-points:last-child .icon-arrow-bottom,.ticket-estimation .ticket-role-points:last-child .points,.ticket-estimation .ticket-role-points:last-child .role{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;color:currentColor;fill:currentColor}.ticket-estimation .ticket-role-points .icon-arrow-down{fill:currentColor;height:.6rem;margin-left:.25rem;width:.6rem}.ticket-estimation .popover.fix:after,.ticket-estimation .popover:after{height:10px;transform:rotate(45deg);content:''}.ticket-estimation .popover,.ticket-estimation .popover.fix{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin:0;z-index:99;position:absolute;font-size:.9rem;list-style-type:none}.ticket-estimation .ticket-role-points .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#444}.ticket-estimation .ticket-role-points .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-estimation .popover{background:#050505;color:#fff;display:none;left:.5rem;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;padding:10px 2px}.ticket-estimation .popover a:last-child{border:0}.ticket-estimation .popover a:hover{transition:color .3s linear}.ticket-estimation .popover a:hover.point{color:#fff}.ticket-estimation .popover:after{background:#050505;left:10px;position:absolute;top:-5px;width:10px}.ticket-estimation .popover li{display:inline-block;width:23%}.ticket-estimation .popover a{display:block;text-align:center}.ticket-estimation .popover a.active,.ticket-estimation .popover a:hover{background:#9dce0a;color:#fff}.ticket-estimation .popover.fix{background:#050505;color:#fff;display:none;left:-160px;padding:10px;top:100%;width:200px;text-align:"center"}.ticket-estimation .popover.fix a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-estimation .popover.fix a:last-child{border:0}.ticket-estimation .popover.fix a:hover{color:#9dce0a;transition:color .3s linear}.ticket-estimation .popover.fix a:hover.point{color:#fff}.ticket-estimation .popover.fix:after{background:#050505;left:90%;position:absolute;top:-5px;width:10px}.history-tabs{background:#e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.history-tabs a{display:inline-block;padding:.75rem 1rem}.history-tabs a:hover{color:#5b8200}.history-tabs .history-tab{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid transparent;color:#767676;transition:all .1s linear}.history-tabs .history-tab.active{border-bottom:3px solid #444;color:#444}.history-tabs .order-comments{color:#444}.level{background-color:#767676;border-radius:9px;height:18px;margin:0 auto;width:18px}.list-itemtype-project{border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;-ms-flex-pack:justify;justify-content:space-between}.list-itemtype-project .list-itemtype-track{font-size:.9rem;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-project .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-project .list-itemtype-track-likers,.list-itemtype-project .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-track-likers .icon,.list-itemtype-project .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-project .list-itemtype-track-likers.active,.list-itemtype-project .list-itemtype-track-watchers.active{color:#5b8200}.list-itemtype-project .list-itemtype-track-likers.active .icon,.list-itemtype-project .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-project .icon{fill:#767676}.list-itemtype-project h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-project p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-project .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-project .list-itemtype-avatar img{width:100%}.list-itemtype-project .icon-blocked-project{width:.75rem;height:.75rem}.list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.list-itemtype-project .list-itemtype-project-data-wrapper .icon-private{fill:#767676;height:22px;margin-left:.5rem;padding-top:.5rem;width:22px}.list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;width:3rem}.list-itemtype-project .list-itemtype-project-image img{width:100%}.list-itemtype-project .list-itemtype-project-members{-ms-flex-item-align:end;align-self:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap-reverse;flex-wrap:wrap-reverse;margin-top:1rem}.list-itemtype-project .list-itemtype-project-members img{border-radius:.1rem;margin-right:.3rem;width:2rem}.list-itemtype-ticket .list-itemtype-avatar img,.list-itemtype-user .list-itemtype-avatar img,.loader{width:100%}.list-itemtype-project .tag{-ms-flex-item-align:end;align-self:flex-end;margin:0 .25rem .25rem 0;padding:.5rem}.list-itemtype-ticket,.list-itemtype-user{border-bottom:1px solid #e4e3e3;padding:.5rem 0 .5rem .5rem}.list-itemtype-ticket{display:-ms-flexbox;display:flex;position:relative}.list-itemtype-ticket .list-itemtype-track{font-size:.9rem;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-ticket .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-ticket .list-itemtype-track-likers,.list-itemtype-ticket .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-ticket .list-itemtype-track-likers .icon,.list-itemtype-ticket .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-ticket .list-itemtype-track-likers.active,.list-itemtype-ticket .list-itemtype-track-watchers.active{color:#5b8200}.list-itemtype-ticket .ticket-id,.list-itemtype-ticket .ticket-project{color:#767676}.list-itemtype-ticket .list-itemtype-track-likers.active .icon,.list-itemtype-ticket .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-ticket .icon{fill:#767676}.list-itemtype-ticket h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1rem}.list-itemtype-ticket p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:0}.list-itemtype-ticket .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-ticket .ticket-project,.list-itemtype-ticket .ticket-type{margin-right:.3rem}.list-itemtype-ticket .ticket-type{margin-left:.3rem;text-transform:uppercase}.list-itemtype-ticket .list-itemtype-ticket-data{-ms-flex:1;flex:1;margin-right:1rem}.list-itemtype-ticket .ticket-blocked{color:red;margin-right:.25rem}.list-itemtype-user{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track{font-size:.9rem;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.list-itemtype-user .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.list-itemtype-user .list-itemtype-track-likers,.list-itemtype-user .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.list-itemtype-user .list-itemtype-track-likers .icon,.list-itemtype-user .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.list-itemtype-user .list-itemtype-track-likers.active,.list-itemtype-user .list-itemtype-track-watchers.active{color:#5b8200}.list-itemtype-user .list-itemtype-track-likers.active .icon,.list-itemtype-user .list-itemtype-track-watchers.active .icon{fill:currentcolor}.list-itemtype-user .icon{fill:#767676}.list-itemtype-user h2{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;line-height:1.4;margin-bottom:0;text-transform:none;font-size:1.2rem}.list-itemtype-user .extra-info,.list-itemtype-user p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.list-itemtype-user p{margin-bottom:0}.list-itemtype-user .list-itemtype-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.75rem;min-width:3rem}.list-itemtype-user .extra-info{font-size:.9rem;margin-top:.25rem}.loader{background-color:#fff;bottom:0;display:none;height:100%;left:0;opacity:0;position:fixed;right:0;top:0;z-index:-100}.loader .container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:100%;-ms-flex-pack:center;justify-content:center;width:100%}.loader p{font-size:1.2rem;color:#555;text-align:center}.loader.active{background-color:rgba(255,255,255,.95);display:block;opacity:1;z-index:99900}.loading-bar{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:start;justify-content:flex-start}.loading-bar .item{animation-duration:5s;animation-iteration-count:infinite;animation-name:loadBar;animation-timing-function:ease-in;background:#555;-ms-flex:1;flex:1;height:5px}.loading-bar .item-0{animation-delay:0s;background:#bbe831}.loading-bar .item-1{animation-delay:1s;background:#237400}.loading-bar .item-2{animation-delay:2s;background:#e43050}.loading-bar .item-3{animation-delay:3s;background:#810061}.loading-bar .item-4{animation-delay:4s;background:#618000}.loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;transform-origin:32 32}.look-for-people{width:1rem;height:1rem;fill:#767676;margin-left:.25rem}.notification-message-success{background:rgba(157,206,10,.95);box-shadow:0 25px 10px -15px rgba(0,0,0,.05);right:-370px;top:2%;transition:opacity .2s ease-in;width:370px}.notification-message-success.active{animation:animSlide 2s;animation-fill-mode:forwards;animation-iteration-count:1;opacity:1}.notification-message-success.inactive{animation:animSlideOut .5s;opacity:0;transform:none}.notification-message-success p{margin:0}.notification-message-success .warning{font-size:1.2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:1.2}@keyframes animSlide{0%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1)}0.52%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-34.485,0,0,1)}1.02%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-66.555,0,0,1)}2.28%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-141.457,0,0,1)}3.52%{transform:matrix3d(1.281,0,0,0,0,1,0,0,0,0,1,0,-205.594,0,0,1)}4.1%{transform:matrix3d(1.111,0,0,0,0,1,0,0,0,0,1,0,-232.117,0,0,1)}4.78%{transform:matrix3d(1.034,0,0,0,0,1,0,0,0,0,1,0,-260.381,0,0,1)}6.03%{transform:matrix3d(.947,0,0,0,0,1,0,0,0,0,1,0,-304.285,0,0,1)}8.11%{transform:matrix3d(.986,0,0,0,0,1,0,0,0,0,1,0,-357.804,0,0,1)}11.03%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-399.29,0,0,1)}12.11%{transform:matrix3d(1.001,0,0,0,0,1,0,0,0,0,1,0,-407.374,0,0,1)}16.04%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.343,0,0,1)}16.12%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-417.342,0,0,1)}20%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-413.214,0,0,1)}27.23%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-403.135,0,0,1)}38.34%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-399.585,0,0,1)}100%{transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}@keyframes animSlideOut{0%{opacity:1;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}100%{opacity:0;transform:matrix3d(1,0,0,0,0,1,0,0,0,0,1,0,-400,0,0,1)}}.notification-message-error{background:rgba(255,0,0,.9);opacity:1;top:0;transform:translateY(-100%);width:100%}.notification-message-error.active{opacity:1;transform:translateY(0);transition:all .6s ease-in-out}.notification-light,.notification-light.inactive{opacity:0;transform:translateY(-100%);transition:all .6s}.notification-message-error.inactive{transition:all .6s ease-in-out}.notification-message-error .icon-error{width:3rem;height:3rem;fill:#fff;margin-right:.5rem}.notification-message-error .warning{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#fff;line-height:2.4rem}.notification-light p,.select-color{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.notification-message-error .text{display:inline-block;margin-left:.5rem;width:80%}.notification-message-error .text p{margin:0}.notification-message-error .close{display:block;position:absolute;right:1rem;top:1rem}.notification-message-error .icon-close{cursor:pointer;fill:#fff}.notification-message{color:#fff;opacity:0;padding:1rem;position:fixed;z-index:99920}.notification-light{-ms-flex-align:center;align-items:center;background:rgba(118,118,118,.95);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;position:absolute;top:0;width:100%;z-index:99999}.notification-light.active{opacity:1;transform:translateY(0);transition:all .6s}.notification-light p{margin:0}.notification-light .warning{color:#fff;line-height:1.5rem}.notification-light .close{display:block;margin-right:1rem;width:2rem}.notification-light .close svg{fill:#fff}.notification-message-light-error{background:rgba(255,0,0,.8)}.paginator{margin:2rem 0}.paginator ul{display:-ms-flexbox;display:flex;margin-left:1rem}.paginator li{margin-right:.4rem}.paginator .active span,.paginator a{background:#767676;color:#fff;padding:.5rem 1rem;transition:all .3s linear}.paginator a:hover{background:#050505;color:#fff;transition:all .3s linear}.paginator .active span{background:#9dce0a}.select-color,.select-color:after{background:#050505;position:absolute}.popover.pop-points-open.horizontal li{white-space:nowrap;width:100%}.select-color{color:#fff;display:none;left:50px;list-style-type:none;margin:0;top:0;width:323px;z-index:99;text-align:"center";border-radius:0 10px 10px 0;padding:15px}.select-color a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.select-color a:last-child{border:0}.select-color a:hover{color:#9dce0a;transition:color .3s linear}.select-color a:hover.point{color:#fff}.select-color:after{content:'';height:15px;left:-7px;top:13px;transform:rotate(45deg);width:15px}.select-color li{float:left;margin:0 .5rem .5rem 0}.select-color li:nth-child(7n){margin-right:0}.select-color li:nth-last-child(-n+7){margin-bottom:0}.select-color .color{background-color:#767676;border-radius:2px;cursor:pointer;height:35px;width:35px}.select-color .empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.select-color .empty-color:after,.select-color .empty-color:before{content:"";width:2px;height:47px;background:#ff8282;position:absolute;top:0}.select-color .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.select-color .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.select-color ul{float:left;margin-bottom:1rem}.select-color input{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;background-color:#e4e3e3;width:243px}.summary .description,.summary .number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.select-color input::-webkit-input-placeholder{color:#555}.select-color input::-moz-placeholder{color:#555}.select-color input:-moz-placeholder{color:#555}.select-color input:-ms-input-placeholder{color:#555}.select-color .selected-color{background:#767676;border-radius:2px;cursor:pointer;float:right;height:40px;width:40px}.settings-nav{padding:0;width:250px}.settings-nav .active{background:#fff}.summary{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;height:65px;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:2rem;overflow:hidden;padding:1rem}.summary .summary-stats{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:0 .5rem}.summary .data .number{color:#9dce0a}.summary .number{font-size:2rem;line-height:.9;margin-right:.3rem}.summary .description{font-size:.9rem;line-height:1}.summary .stats{cursor:pointer;display:block;height:2rem;margin-left:auto;width:2rem}.summary .stats path{opacity:1}.summary .stats:hover .graph{fill:#9dce0a;transition:fill .2s}.summary .stats.active .graph,.summary .stats.active svg,.summary .stats:hover svg{fill:#5b8200}.summary .stats svg{fill:#000;height:100%;max-height:2rem;max-width:2rem;transition:all .2s;width:100%}.summary .stats .graph{fill:#434343;transition:fill .2s}.summary .main-summary-stats{display:-ms-flexbox;display:flex;transform:translateY(0);transition:all .2s ease-in-out}.summary .show-role-points .points-per-role-stats{transform:translateY(-35px)}.summary .show-role-points .main-summary-stats{transform:translateY(-65px)}.summary-progress-bar{background:#fff;height:30px;margin-bottom:0;margin-right:10px;padding:3px;position:relative;width:15%}.summary-progress-bar .current-progress{background:#9dce0a;height:24px}.summary-progress-bar .defined-points{background:#ff8282;height:24px;position:absolute;width:calc(100% - 6px)}.summary-progress-bar .project-points-progress{background:#fff;height:24px;position:absolute}.summary-progress-bar .closed-points-progress{background:#9dce0a;height:24px;position:absolute}.large-summary{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:stretch;align-items:stretch;-ms-flex-pack:justify;justify-content:space-between;padding:.75rem 1rem}.large-summary .stats-wrapper{padding-top:.35rem}.large-summary .large-summary-wrapper{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.large-summary .summary-progress-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding-top:.35rem}.large-summary .summary-progress-bar{-ms-flex-preferred-size:200px;flex-basis:200px;min-width:200px}.large-summary .summary-stats{margin-right:1rem}.large-summary .summary-stats:last-child{border:0;margin:0}.large-summary .summary-stats.summary-completed-points,.large-summary .summary-stats.summary-move-unfinished{border-right:1px solid #050505;margin-right:0;padding-right:1rem}.large-summary .summary-stats.summary-completed-points+.summary-stats,.large-summary .summary-stats.summary-move-unfinished+.summary-stats{border-left:1px solid #555;margin-left:0;padding-left:1rem}.large-summary .icon{width:1.3rem;height:1.3rem;fill:currentColor;margin:.1rem .4rem 0 0;vertical-align:middle}.large-summary .icon.icon-stats{color:#5b8200;float:right;transition:color .3s linear}.large-summary .icon.icon-stats:hover{color:#9dce0a;transition:color .3s linear}.large-summary .icon.icon-stats.active{color:#9dce0a}.large-summary .icon.icon-stats.active:hover{color:#5b8200;transition:color .3s linear}.large-summary .points-per-role-stats-content{display:-ms-flexbox;display:flex;padding-left:1rem}.large-summary .points-per-role-stats-content .summary-stats{padding:0}.large-summary .toggle-points-per-role{color:#fff;cursor:pointer}.large-summary .toggle-points-per-role svg{width:1rem;height:1rem}.large-summary .points-per-role-stats{margin-left:.5rem;transform:translateY(35px);transition:all .2s ease-in-out}.large-summary .points-per-role-stats .number{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.empty-burndown,.empty-burndown .title,.large-summary .points-per-role-stats .role{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.large-summary .points-per-role-stats .role{font-size:.75rem}.empty-burndown{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:rgba(135,155,137,.15);display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin-bottom:1rem;padding:2rem 6rem}.empty-burndown svg{width:4rem;height:4rem;fill:#879b89;-ms-flex-preferred-size:4rem;flex-basis:4rem;-ms-flex-negative:0;flex-shrink:0;margin-right:2rem}.empty-burndown p{margin:0}.empty-burndown .empty-text{-ms-flex:1;flex:1}.empty-burndown .title{font-size:1.2rem;color:#879b89;margin:0;text-transform:uppercase}.empty-burndown a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;animation:blink 2s infinite}.assigned-to-list .user-list-name,.ticket-watchers .user-list-name,.watch-options a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.graphics-container{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.graphics-container.open{transition:max-height .5s ease-in;max-height:300px}.graphics-container.shown{max-height:300px;transition:none}.track-buttons-container{font-size:.9rem;position:relative}.track-button{-ms-flex-align:stretch;align-items:stretch;border-radius:4px;display:-ms-flexbox;display:flex;margin:0;padding:0}.track-button.active .track-inner{background:rgba(157,206,10,.4)}.track-button.active .icon{fill:#5b8200}.track-button.active .track-button-counter{background:rgba(157,206,10,.6)}.track-button.is-hover .track-inner{background:#f33;color:#e4e3e3;transition:background .2s}.track-button.is-hover .icon{fill:#ff8282}.track-button.is-hover .track-button-counter{background:red;color:#e4e3e3;transition:background .2s}.track-button .watch-options-arrow{margin-left:auto}.track-button .icon-arrow-down{width:.75rem;height:.75rem}.track-inner{-ms-flex-align:center;align-items:center;background:#e4e3e3;border-radius:4px 0 0 4px;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:start;justify-content:flex-start;min-width:140px;padding:.25rem 1rem}.track-inner:hover{background:#d7d6d6;transition:background .3s}.track-icon{fill:#444;margin-right:.5rem;position:relative;top:2px}.track-button-counter{-ms-flex-align:center;align-items:center;background:#d7d6d6;border-radius:0 4px 4px 0;padding:.25rem .75rem}.contact-team{background:#e4e3e3;border-radius:4px;padding:.25rem .75rem}.contact-team:hover{background:#d7d6d6;transition:background .3s}.watch-options{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) alternate;background:rgba(0,0,0,.9);border-radius:4px;margin:2.5rem 0 0;min-width:300px;padding:1rem;position:absolute;right:0;top:0;z-index:99}.watch-options.hidden{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) reverse}.watch-options li{margin:0}.assigned-to-list,.ticket-assigned-users,.ticket-watchers{margin-top:1rem}.watch-options li:last-child a{border:0}.watch-options a{border-bottom:1px solid rgba(118,118,118,.3);color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.assigned-to-list .user-list-single,.upvote-btn{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox}.watch-options a.active{color:#9dce0a}.watch-options .watch-check{height:1.25rem;width:1.25rem}.watch-options .watch-check svg{fill:#9dce0a}.upvote-btn{-ms-flex-align:stretch;align-items:stretch;display:flex;-ms-flex:0;flex:0;-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-pack:center;justify-content:center;margin-right:.3rem}.upvote-btn .vote-inner{background:#f5f5f5;color:#767676;display:block;padding:1rem;text-align:center}.upvote-btn a:hover{background:#e8e8e8;color:#879b89;transition:background .3s}.upvote-btn a:hover path{fill:#879b89}.upvote-btn a.active{background:rgba(157,206,10,.2);color:#5b8200;transition:all .3s}.upvote-btn a.active svg{fill:#5b8200}.upvote-btn a.is-hover{background:red;color:#e4e3e3}.upvote-btn a.is-hover svg{fill:#ff8282;transform:rotate(180deg);transition:all .3s}.upvote-btn svg{fill:#767676;height:1rem;width:1rem}.assigned-to-list .user-list-avatar img,.ticket-assigned-users .user-list-avatar img,.ticket-watchers .user-list-avatar img{width:100%}.upvote-btn span{display:block}.assigned-to-list .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #e4e3e3;display:flex;padding:.25rem 0;vertical-align:middle}.assigned-to-list .user-list-multiple,.ticket-watchers .user-list-single{-ms-flex-line-pack:center;padding:.25rem 0;vertical-align:middle;align-content:center}.assigned-to-list .user-list-single:last-child{border:0}.assigned-to-list .user-list-multiple{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex}.assigned-to-list .user-list-multiple.selected,.assigned-to-list .user-list-multiple:hover,.assigned-to-list .user-list-single.is-active,.assigned-to-list .user-list-single.selected,.assigned-to-list .user-list-single:hover{background:rgba(216,248,121,.3);cursor:pointer}.assigned-to-list .user-list-multiple:last-child{border:0}.assigned-to-list .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.assigned-to-list .user-list-name{color:#444;margin-left:.5rem}.assigned-to-list .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-single.is-active{margin-bottom:1rem;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-single .remove-assigned-to{display:block;fill:#444;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-single .remove-assigned-to:hover{fill:red}.assigned-to-list .user-list-multiple:hover{transition:background .3s linear;transition-delay:.2s}.assigned-to-list .user-list-multiple.is-active{background:rgba(216,248,121,.3);cursor:pointer;position:relative;transition:background .3s linear;transition-delay:.1s}.assigned-to-list .user-list-multiple .remove-assigned-to{display:block;fill:#444;opacity:1;position:absolute;right:1rem;top:1.5rem;transition:all .2s ease-in}.assigned-to-list .user-list-multiple .remove-assigned-to:hover{fill:red}.ticket-watchers .user-list-single{-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex}.ticket-watchers .user-list-single:last-child{border:0}.ticket-watchers .user-list-multiple{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:0 0;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.25rem 0;vertical-align:middle}.ticket-assigned-users .user-list-multiple,.ticket-assigned-users .user-list-single{background:0 0;display:-ms-flexbox;padding:.25rem 0;align-content:center;vertical-align:middle}.ticket-watchers .user-list-multiple:last-child{border:0}.ticket-watchers .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-watchers .user-list-name{color:#444;margin-left:.5rem;-ms-flex:1;flex:1;position:relative}.ticket-watchers .user-list-single:hover .delete-watcher{opacity:1;transition:opacity .2s ease-in}.ticket-watchers .delete-watcher{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-watchers .delete-watcher:hover{fill:red;transition:color .3s ease-in}.ticket-assigned-users .user-list-single{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:flex}.ticket-assigned-users .user-list-single:last-child{border:0}.ticket-assigned-users .user-list-multiple{-ms-flex-line-pack:center;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:flex}.ticket-assigned-users .user-list-multiple:last-child{border:0}.ticket-assigned-users .user-list-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.25rem;max-width:3rem}.ticket-assigned-users .user-list-single{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-users .user-list-single:hover .remove-user{opacity:1;transition:opacity .2s ease-in}.ticket-assigned-users .user-list-name{color:#444;margin-left:.5rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex:1;flex:1;position:relative}.admin-functionalities .module-name,.admin-membership-table .title,.custom-fields-table .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .remove-user{cursor:pointer;fill:currentColor;opacity:0;position:absolute;right:.5rem;top:0;transition:all .2s ease-in}.ticket-assigned-users .remove-user:hover{fill:red;transition:color .3s ease-in}.admin-common header h1{margin-bottom:0}.admin-common .admin-subtitle{color:#767676;margin-bottom:2rem}.admin-common .admin-subtitle a{color:#5b8200}.admin-common .admin-subtitle a:hover{color:#9dce0a}.admin-common .total{font-size:1.2rem;-ms-flex-align:center;align-items:center;background-color:#e4e3e3;color:#444;display:-ms-flexbox;display:flex;padding:.3rem 1rem}.admin-common .total:hover .icon-edit{opacity:1;transition:opacity .3s linear}.custom-field-options{margin-bottom:1rem;text-align:right}.custom-fields-table{margin-bottom:2em}.custom-fields-table .row{border-bottom:0}.custom-fields-table .table-header{border-bottom:3px solid #e4e3e3}.custom-fields-table .table-header .custom-description,.custom-fields-table .table-header .custom-name{padding-left:1.1rem}.custom-fields-table .table-body .row:hover{background:rgba(157,206,10,.05);cursor:move;transition:background .2s linear}.custom-fields-table .table-body .row:hover .custom-options,.custom-fields-table .table-body .row:hover .icon-drag{opacity:1;transition:opacity .2s linear}.custom-fields-table .table-body form.row:hover{background:0 0;cursor:default}.custom-fields-table .single-custom-field{border-bottom:1px solid #e4e3e3;color:#555}.custom-fields-table .js-view-custom-field{padding:.75rem 0}.custom-fields-table .js-view-custom-field .custom-extra-attr-wrapper{margin-left:1em}.custom-fields-table .icon-drag{fill:#767676;opacity:0;padding:0 .25rem 0 .1rem;transition:color .2s linear}.custom-fields-table .custom-description,.custom-fields-table .custom-name{margin-right:.5rem}.custom-fields-table .custom-name{-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-name a{padding:.5em}.custom-fields-table .custom-name svg{height:12px;width:12px}.custom-fields-table .custom-description{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:50%;flex-basis:50%;-ms-flex-positive:8;flex-grow:8}.custom-fields-table .custom-field-type{-ms-flex-preferred-size:12%;flex-basis:12%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.custom-fields-table .custom-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;opacity:0;text-align:center}.custom-fields-table .custom-options svg{cursor:pointer;fill:#767676;margin-right:.5rem;transition:color .2s linear;vertical-align:middle}.custom-fields-table .custom-options svg:hover{fill:#5b8200;transition:color .2s linear}.custom-fields-table .custom-options svg.icon-close,.custom-fields-table .custom-options svg.icon-trash{fill:#ff8282}.custom-fields-table .custom-options-wrapper{opacity:0;transition:opacity .3s linear}.custom-fields-table .custom-options-wrapper:hover,.custom-fields-table .js-form .custom-options-wrapper{opacity:1}.custom-fields-table .custom-options-wrapper a{display:inline-block}.custom-fields-table .custom-field-extra{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#767676;font-size:.95em;padding:.25em 1.5em}.custom-fields-table .custom-extra-actions,.custom-fields-table .js-view-custom-field-extra{padding:.5em}.custom-fields-table .js-edit-custom-field{margin-left:.4rem}.custom-fields-table .custom-extra-attr-wrapper{-ms-flex-positive:1;flex-grow:1}.custom-fields-table .custom-extra-actions a{color:#5b8200}.custom-fields-table .custom-extra-actions svg{height:10px;margin-right:.25em;width:10px}.admin-functionalities .module-container{max-width:900px;width:100%}.admin-project-export-result .spin img,.project-details .loading-spinner{max-height:1rem;max-width:1rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.admin-functionalities .module{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:1rem 0}.admin-functionalities .module.active .module-icon .icon,.admin-functionalities .module.active .module-name{color:#5b8200;fill:#5b8200}.admin-functionalities .module-icon{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem 0 0}.admin-functionalities .module-icon .icon{width:3rem;height:3rem;fill:#767676}.admin-functionalities .module-name{font-size:1.2rem;color:#767676;-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-negative:0;flex-shrink:0;margin:0 .5rem}.admin-functionalities .module-desc{font-size:.9rem;color:#767676;-ms-flex:1;flex:1;margin:0 2rem 0 0}.admin-functionalities .module-desc p{margin:0}.admin-functionalities .module-desc-options,.admin-functionalities .videoconference-attributes{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-top:.5rem}.admin-functionalities .module-desc-options .options,.admin-functionalities .videoconference-attributes .options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:2.5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .module-desc-options fieldset,.admin-functionalities .videoconference-attributes .icon,.admin-functionalities .videoconference-attributes fieldset{margin:0 .5rem}.admin-functionalities .module-desc-options .icon,.admin-functionalities .videoconference-attributes .icon{fill:#767676}.admin-functionalities .module-desc-options .icon:hover,.admin-functionalities .videoconference-attributes .icon:hover{fill:#5b8200}.admin-functionalities .module-scrum .options{-ms-flex-item-align:end;align-self:flex-end}.admin-functionalities .module-videoconference .options{-ms-flex-item-align:start;align-self:flex-start}.admin-membership-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.admin-membership-table .avatar img{border-radius:4px;-ms-flex-positive:0;flex-grow:0;margin:0 .5rem 0 .3rem;width:50px}.admin-membership-table .avatar .data{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555;margin-top:.2rem}.admin-membership-table .avatar .pending,.admin-menu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-membership-table .avatar .pending{color:#ff8282;display:inline-block;padding-left:.3rem}.admin-membership-table .header-role,.admin-membership-table .header-status{padding-left:.5rem}.admin-membership-table .row-role{padding-right:1rem}.admin-membership-table .row-status{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.admin-membership-table .active,.admin-membership-table .resend{padding:.4rem .5rem}.admin-membership-table .active{background-color:#e4e3e3}.admin-membership-table .resend{background-color:#5b8200;color:#fff}.admin-membership-table .resend:hover{background-color:#9dce0a;color:#fff;transition:background-color .3s linear}.admin-membership-table .delete{fill:#767676;transition:fill .2s}.admin-membership-table .delete:hover{fill:red}.admin-membership-table .pending{color:#ff8282}.admin-membership-table .row-admin input{vertical-align:middle}.admin-membership-table .row-admin label{font-size:.9rem}.admin-membership-table .header-member,.admin-membership-table .header-role,.admin-membership-table .row-member,.admin-membership-table .row-role{-ms-flex-preferred-size:210px;flex-basis:210px;-ms-flex-positive:3;flex-grow:3;min-width:210px}.admin-membership-table .header-admin,.admin-membership-table .row-admin{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;min-width:70px}.admin-membership-table .header-status,.admin-membership-table .row-status{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:1;flex-grow:1}.admin-menu li{border-bottom:1px solid #cbc9c9;text-transform:uppercase}.admin-menu li:last-child{border-bottom:0}.admin-menu a{display:block;padding:1rem 0 1rem 1rem}.admin-project-export-buttons{margin:2rem 0 1rem}.admin-project-export-result{margin-top:1rem}.admin-project-export-result .spin{margin:0 auto;width:2.5rem}.admin-project-export-result .spin img{margin:0 auto;transform-origin:32 32;width:100%}.admin-project-export-result h3{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.2rem;background:#f5f5f5;color:#555;margin:.5rem;padding:.5rem;text-align:center}.admin-project-export-result p{color:#767676;margin:.5rem 0;text-align:center}.project-details .delete-project:hover,.project-details .use-default-image:hover{color:red}.project-details form{display:-ms-flexbox;display:flex}.project-details fieldset{margin-bottom:1rem}.project-details label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.project-details .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.project-details .project-details-image .image{width:100%}.project-details .change-image{display:block}.project-details .image-container{position:relative;margin-bottom:.5rem}.project-details .loading-overlay{display:none}.project-details .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.project-details .loading-spinner{margin:0 auto;border:0;transform-origin:center center}.project-details .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.project-details .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.project-details form{display:block}}.project-details .get-feedback,.project-details .looking-for-people{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;border-bottom:1px solid #e4e3e3;padding:1rem 0}.project-details .looking-for-people{border-top:1px solid #e4e3e3;margin-bottom:0}.project-details .get-feedback-inner,.project-details .looking-for-people-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.project-details .get-feedback-inner svg,.project-details .looking-for-people-selector svg{width:1rem;height:1rem;fill:#767676;margin-left:.5rem}.project-details .get-feedback-inner .check,.project-details .looking-for-people-selector .check{margin-left:auto}.project-details .looking-for-people-reason{display:block;margin-top:1rem}.project-details .looking-for-people-reason.ng-hide-remove-active{animation:dropdownFade .3s}.project-details .looking-for-people-reason.ng-hide-add-active{animation:dropdownFade .2s reverse;animation-delay:.1s}.project-details .delete-project{font-size:1rem;display:block;margin-top:1rem;text-align:right}.project-details .private-or-public{font-size:1rem;color:#767676;margin-bottom:2rem}.project-details .private-or-public svg{width:1.1rem;height:1.1rem;fill:#767676;margin-right:.5rem;vertical-align:middle}.project-privacy-settings{display:-ms-flexbox;display:flex;margin-bottom:.5rem}.project-privacy-settings .privacy-option{-ms-flex:1;flex:1;transition:.2 linear}.project-privacy-settings .privacy-option:first-child{margin-right:.5rem}.project-privacy-settings input[type=radio],.project-privacy-settings input[type=text]{display:none}.project-privacy-settings .privacy-project:checked~input[type=text],tg-admin-project-restrictions span{display:block}.project-privacy-settings label{background:#f5f5f5;color:#444;text-align:center;transition:all .2s linear}.project-privacy-settings label:hover{background:rgba(157,206,10,.4);color:#444}.project-privacy-settings label:hover svg{fill:#444}.project-privacy-settings label svg{width:1.1rem;height:1.1rem;fill:#444;margin-left:.5rem;vertical-align:middle}.project-privacy-settings .privacy-project:checked+label{background:#9dce0a;color:#fff}.project-privacy-settings .privacy-project:checked+label svg{width:1.1rem;height:1.1rem;fill:#fff}.project-privacy-settings .privacy-project[disabled]+label{background:#f5f5f5;box-shadow:none;color:#767676;cursor:not-allowed;opacity:.65}.project-privacy-settings .privacy-project[disabled]+label:hover{background:#f5f5f5;color:#767676}tg-admin-project-restrictions p{font-size:1rem;text-align:center}tg-admin-project-restrictions a{color:#5b8200}tg-admin-project-restrictions span:first-child::before{border:1px solid #ff8282;border-radius:6px;color:#ff8282;content:'!';display:inline-block;height:12px;line-height:12px;margin-right:.5rem;text-align:center;width:12px}.admin-project-profile-owner-actions{-ms-flex-align:center;align-items:center;border-top:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding-top:1rem}.admin-project-profile-owner-actions a{color:#5b8200}.admin-project-profile-owner-actions a:hover{color:#9dce0a;transition:color .2s}.admin-project-profile-owner-actions img{width:100%}.admin-project-profile-owner-actions .owner-info{-ms-flex:1;flex:1;padding-left:.5rem}.admin-project-profile-owner-actions .owner-info-title{color:#767676}.admin-project-profile-owner-actions .owner-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.admin-roles .general-category,.admin-roles .role-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.admin-project-profile-owner-actions .owner-avatar{width:2.5rem}.admin-project-profile-owner-actions .request{-ms-flex-negative:0;flex-shrink:0}.admin-roles .save{display:inline-block}.admin-roles .role-name{font-size:2rem;color:#444}.admin-roles .icon:hover{fill:#5b8200;transition:fill .2s linear}.admin-roles .icon-edit{cursor:pointer;fill:#767676;margin-left:.5rem;opacity:0;transition:opacity .2s linear}.admin-roles .icon-save{fill:#767676;margin-left:.5rem;transition:fill .2s linear}.admin-roles .edit-role{background-color:#e4e3e3;display:none;margin-bottom:1rem;padding:.3rem 1rem}.admin-roles .edit-role input{background-color:#fff;width:50%}.admin-roles .any-computable-role{background:red;color:#fff;margin-bottom:.5rem;padding:.5rem}.admin-roles .general-category{font-size:.9rem;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;padding-bottom:2rem}.admin-roles .general-category.external-user{-ms-flex-pack:start;justify-content:flex-start}.admin-roles .general-category .check{margin-left:.5rem}.admin-roles .general-category .check input{height:40px;width:85px}.admin-submenu-roles .single-role{max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.admin-submenu ul a span,.admin-webhooks .webhook-url span{max-width:85%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admin-submenu li{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676;text-transform:uppercase}.admin-submenu li:last-child{border-bottom:0}.admin-submenu ul a{color:#fff;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.admin-submenu ul a:hover{background:#8fa291;color:#fff;transition:all .2s}.admin-submenu ul a.active{background:#a3b2a4;color:#fff;transition:all .2s}.admin-submenu ul a span{display:block}.admin-submenu input{margin:0 1rem;width:85%}.admin-submenu .button-gray{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0 1rem;padding:.5rem 0;text-align:center}.admin-submenu .button-gray:hover{background-color:#050505}.admin-webhooks .webhooks-table{margin-bottom:1rem}.admin-webhooks .webhooks-table .row{border-bottom:0;padding:.5rem 0}.admin-webhooks .webhooks-table .row:hover .webhook-options-wrapper{opacity:1;transition:opacity .2s linear}.admin-webhooks .table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676}.admin-webhooks .table-body .webhook-service{color:#555}.admin-webhooks .single-webhook-wrapper{border-bottom:1px solid #e4e3e3}.admin-webhooks .webhook-service,.admin-webhooks .webhook-url{margin-right:.5rem}.admin-webhooks .webhook-service{-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-negative:0;flex-shrink:0}.admin-webhooks .webhook-url{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;overflow:hidden}.admin-webhooks .webhook-url span{word-wrap:normal;color:#767676;display:inline-block;vertical-align:middle}.admin-webhooks .webhook-url a{color:#5b8200;cursor:pointer;margin-left:.5rem;white-space:nowrap}.admin-webhooks .webhook-url a:hover{color:#9dce0a}.admin-webhooks .webhook-options{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-left:auto}.admin-webhooks .webhook-options a{cursor:pointer;display:inline-block;margin-right:.5rem}.admin-webhooks .webhook-options svg{fill:#767676}.admin-webhooks .webhook-options svg:hover{fill:#5b8200;transition:fill .2s linear}.admin-webhooks .webhook-options-wrapper{opacity:0;transition:opacity .3s linear}.admin-webhooks .webhook-url-inputs{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:center;justify-content:center}.admin-webhooks .webhook-url-inputs fieldset{-ms-flex-positive:1;flex-grow:1;margin-right:.3rem}.admin-webhooks .webhooks-history{display:none}.admin-webhooks .history-single-wrapper{border-bottom:1px solid #e4e3e3;margin-left:22%}.admin-webhooks .history-single{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem;transition:background .2s linear}.admin-webhooks .history-single:hover{background:rgba(157,206,10,.1);transition:background .2s linear}.admin-webhooks .history-single.history-single-open:hover{background:0 0}.admin-webhooks .history-single.history-single-open .icon-arrow-bottom{transform:rotate(180deg);transition:transform .3s linear}.admin-webhooks .history-single .icon-arrow-bottom{transform:rotate(0);transition:transform .3s linear}.admin-webhooks .history-response-icon{background:#555;border-radius:25%;display:inline-block;height:.8rem;margin-right:.5rem;width:.8rem}.admin-webhooks .history-response-icon.history-success{background:#9dce0a}.admin-webhooks .history-response-icon.history-error{background:red}.admin-webhooks .history-single-response{max-height:0;transition:max-height .5s ease-in;overflow:hidden}.admin-webhooks .history-single-response.open{transition:max-height .5s ease-in;max-height:1000px}.admin-webhooks .history-single-request-header,.admin-webhooks .history-single-response-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem 0 .5rem}.admin-webhooks .history-single-request-header span:first-child,.admin-webhooks .history-single-response-header span:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#767676}.admin-webhooks .history-single-request-header a,.admin-webhooks .history-single-response-header a{font-size:.9rem;color:#767676}.admin-webhooks .history-single-request-header a:hover,.admin-webhooks .history-single-response-header a:hover{color:#9dce0a;transition:color .2s linear}.admin-webhooks .history-single-request-header .icon,.admin-webhooks .history-single-response-header .icon{margin-right:.3rem;vertical-align:middle}.admin-webhooks .history-single-request-body .response-container,.admin-webhooks .history-single-response-body .response-container{font-family:'courier new',monospace;-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:distribute;justify-content:space-around;margin-bottom:.5rem}.admin-webhooks .history-single-request-body span,.admin-webhooks .history-single-response-body span{font-size:.9rem;color:#767676;-ms-flex-preferred-size:20%;flex-basis:20%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;text-align:center}.admin-webhooks .history-single-request-body textarea,.admin-webhooks .history-single-response-body textarea{font-family:'courier new',monospace;border:0;-ms-flex-positive:2;flex-grow:2;min-height:7.5rem}.admin-contrib h2,.admin-contrib label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.admin-webhooks .history-single-response-body textarea{min-height:10rem}.admin-contrib form{margin:1rem 0;max-width:700px;width:100%}.admin-contrib h2{font-size:1.2rem;margin-bottom:0}.admin-contrib fieldset{border-bottom:1px solid #e4e3e3;margin-bottom:1rem}.admin-contrib input{margin-bottom:1rem}.admin-contrib label{display:block;margin-bottom:.25rem}.admin-contrib .submit-button{display:block;text-align:center}.admin-contrib .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-contrib .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #767676;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:0 1rem}.admin-contrib .check-item{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1rem}.admin-contrib .check-item:last-child{border-bottom:0;margin-bottom:1rem}.contrib-form-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.contrib-form-wrapper input{margin:0}.contrib-form-wrapper .contrib-input{border:0;-ms-flex:5;flex:5;margin:0}.contrib-form-wrapper .contrib-test{border:0;-ms-flex:1;flex:1;margin:0 0 0 1rem}.default-values fieldset{margin-bottom:1rem}.default-values fieldset:last-child{margin-top:1.5rem}.default-values label,.default-values select{display:inline-block;width:49.7%}.default-values a{color:#fff;display:block;text-align:center}.project-csv{margin-bottom:2.5rem}.project-csv .project-values-title{margin-bottom:1rem}.project-csv .csv-regenerate-field{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.project-csv .csv-regenerate-field a{font-size:.9rem;margin-left:1em;white-space:nowrap}.project-csv .csv-regenerate-field .icon:not(.icon-clipboard){fill:currentColor;height:.9rem;margin-right:.3rem;vertical-align:middle;width:.9rem}.project-csv .field-with-options{display:-ms-flexbox;display:flex;width:100%}.project-csv .field-with-options input{-ms-flex-positive:1;flex-grow:1}.project-csv .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #767676;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.project-csv .button{padding:.5rem 1rem}.project-csv .button span{margin:0}.project-values-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.project-values-row div{margin-left:1rem;position:relative}.project-values-row .icon{cursor:pointer;fill:#767676;opacity:0}.project-values-row .icon:hover{fill:#444;transition:all .2s ease-in}.project-values-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:3px solid #e4e3e3}.admin-third-parties input,.admin-third-parties label,.admin-third-parties textarea{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.project-values-body form:last-child .project-values-row{border:0}.project-values-body .project-values-row:hover{background:#e9ffb5;cursor:move;transition:background .2s ease-in}.project-values-body .project-values-row:hover .icon{opacity:1;transition:opacity .2s ease-in}.project-values-name{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-values-value{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.project-values-isclosed,.project-values-settings{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:right}.project-values-settings a{display:inline-block;margin-right:.5rem}.project-values-settings svg.icon-trash{fill:#ff8282}.admin-third-parties form{margin:1rem 0;max-width:700px;width:100%}.cancel-account form,.change-email-form form{margin-top:1rem}.admin-third-parties fieldset{margin-bottom:1rem}.admin-third-parties label{display:block;margin-bottom:.2rem}.admin-third-parties textarea{height:10rem}.admin-third-parties .submit-button{color:#fff;display:block;text-align:center}.cancel-account p,.change-email-form p{color:#444;margin-bottom:.5rem;text-align:center}.admin-third-parties .select-input-text .field-with-option{display:-ms-flexbox;display:flex}.admin-third-parties .select-input-text .option-wrapper{-ms-flex-align:center;align-items:center;border:1px solid #767676;border-left:0;border-radius:0 5px 5px 0;cursor:pointer;display:-ms-flexbox;display:flex;padding:0 1rem}.admin-third-parties .select-input-text .help-copy{font-size:.9rem;opacity:0}.admin-third-parties .select-input-text .help-copy.visible{opacity:1;transition:opacity .2s linear}.cancel-account fieldset{text-align:center}.change-email-form fieldset{text-align:center}.change-password-text,.forgot-form-container{text-align:center}.login-form-container .login-password{position:relative}.login-form-container input:focus+.forgot-pass{opacity:0;transition:opacity .3s linear}.login-form-container .forgot-pass{font-size:.9rem;color:#555;opacity:1;position:absolute;right:1rem;top:.6rem;transition:all .3s linear}.login-form-container .forgot-pass:hover{color:#444;transition:color .3s linear}.register-form-container{display:block}.register-form-container .register-text-top{display:block;margin:1rem 0;text-align:center}.register-form-container .register-text{font-size:.9rem}.backlog-table-body,.backlog-table-header{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%}.backlog-table-body.show-tags .tags-block,.backlog-table-header.show-tags .tags-block{display:block}.backlog-table-body .row,.backlog-table-header .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #767676;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;text-align:left;width:100%}.backlog-table-body .backlog-table-title:hover,.backlog-table-body .row:hover,.backlog-table-header .backlog-table-title:hover,.backlog-table-header .row:hover{background:0 0}.backlog-table-body .backlog-table-title .input,.backlog-table-body .row .input,.backlog-table-header .backlog-table-title .input,.backlog-table-header .row .input{-ms-flex-preferred-size:25px;flex-basis:25px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .user-stories,.backlog-table-body .row .user-stories,.backlog-table-header .backlog-table-title .user-stories,.backlog-table-header .row .user-stories{width:100%}.backlog-table-body .backlog-table-title .status,.backlog-table-body .row .status,.backlog-table-header .backlog-table-title .status,.backlog-table-header .row .status{-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.backlog-table-body .backlog-table-title .points,.backlog-table-body .row .points,.backlog-table-header .backlog-table-title .points,.backlog-table-header .row .points{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0}.backlog-table-body .votes,.backlog-table-header .votes{color:#555;-ms-flex-preferred-size:65px;flex-basis:65px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center}.backlog-table-body .votes.inactive,.backlog-table-header .votes.inactive{color:#767676}.backlog-table-body .votes.inactive svg,.backlog-table-header .votes.inactive svg{fill:#767676}.backlog-table-body .votes.is-voted,.backlog-table-header .votes.is-voted{color:#9dce0a;fill:#9dce0a}.backlog-table-body .votes svg,.backlog-table-header .votes svg{fill:#555;height:.75rem;margin-right:.25rem;vertical-align:middle;width:.75rem}.backlog-table-body .points,.backlog-table-body .status,.backlog-table-header .points,.backlog-table-header .status{position:relative;text-align:right}.backlog-table-body .points .popover a,.backlog-table-body .status .popover a,.backlog-table-header .points .popover a,.backlog-table-header .status .popover a{text-align:left;width:100%}.backlog-table-body .points .popover .point,.backlog-table-body .status .popover .point,.backlog-table-header .points .popover .point,.backlog-table-header .status .popover .point{text-align:center}.backlog-table-body .points .icon,.backlog-table-body .status .icon,.backlog-table-header .points .icon,.backlog-table-header .status .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.2rem}.backlog-table-body .pop-points,.backlog-table-body .pop-role,.backlog-table-body .pop-status,.backlog-table-header .pop-points,.backlog-table-header .pop-role,.backlog-table-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;position:absolute;z-index:99;text-align:"center";font-size:.9rem}.backlog-table-body .pop-status,.backlog-table-header .pop-status{background:#050505;color:#fff;display:none;left:65%;padding:10px 1rem 10px 10px;top:0;width:200px}.backlog-table-body .pop-status a,.backlog-table-header .pop-status a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-status a:last-child,.backlog-table-header .pop-status a:last-child{border:0}.backlog-table-body .pop-status a:hover,.backlog-table-header .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.backlog-table-body .pop-status a:hover.point,.backlog-table-header .pop-status a:hover.point{color:#fff}.backlog-table-body .pop-status:after,.backlog-table-header .pop-status:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-status.fix,.backlog-table-header .pop-status.fix{bottom:0;top:auto}.backlog-table-body .pop-role,.backlog-table-header .pop-role{background:#050505;color:#fff;display:none;left:65%;padding:10px;top:0;width:200px}.backlog-table-body .pop-role a,.backlog-table-header .pop-role a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-role a:last-child,.backlog-table-header .pop-role a:last-child{border:0}.backlog-table-body .pop-role a:hover,.backlog-table-header .pop-role a:hover{color:#9dce0a;transition:color .3s linear}.backlog-table-body .pop-role a:hover.point,.backlog-table-header .pop-role a:hover.point{color:#fff}.backlog-table-body .pop-role:after,.backlog-table-header .pop-role:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-role a.active,.backlog-table-header .pop-role a.active{background:#9dce0a;color:#fff}.backlog-table-body .pop-points,.backlog-table-header .pop-points{background:#050505;bottom:10px;color:#fff;display:none;left:30px;padding:10px 3rem 10px 10px;width:150px}.backlog-table-body .pop-points a,.backlog-table-header .pop-points a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open,.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open,.backlog-table-header .pop-points-open.pop-bottom{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:none;left:30px;list-style-type:none;margin:0;z-index:99;text-align:"center";font-size:.9rem;background:#050505;position:absolute}.backlog-table-body .pop-points a:last-child,.backlog-table-header .pop-points a:last-child{border:0}.backlog-table-body .pop-points a:hover,.backlog-table-header .pop-points a:hover{color:#9dce0a;transition:color .3s linear}.backlog-table-body .pop-points a:hover.point,.backlog-table-header .pop-points a:hover.point{color:#fff}.backlog-table-body .pop-points:after,.backlog-table-header .pop-points:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open,.backlog-table-header .pop-points-open{color:#fff;padding:10px;top:0;width:200px}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;padding:10px 2px}.backlog-table-body .pop-points-open a:last-child,.backlog-table-header .pop-points-open a:last-child{border:0}.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a:hover{transition:color .3s linear}.backlog-table-body .pop-points-open a:hover.point,.backlog-table-header .pop-points-open a:hover.point{color:#fff}.backlog-table-body .pop-points-open:after,.backlog-table-header .pop-points-open:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open.pop-bottom,.backlog-table-header .pop-points-open.pop-bottom{bottom:0;color:#fff;padding:10px;top:auto;width:200px}.backlog-table-body .pop-points-open.pop-bottom a,.backlog-table-header .pop-points-open.pop-bottom a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.backlog-table-body .pop-points-open.pop-bottom a:last-child,.backlog-table-header .pop-points-open.pop-bottom a:last-child{border:0}.backlog-table-body .pop-points-open.pop-bottom a:hover,.backlog-table-header .pop-points-open.pop-bottom a:hover{color:#9dce0a;transition:color .3s linear}.backlog-table-body .pop-points-open.pop-bottom a:hover.point,.backlog-table-header .pop-points-open.pop-bottom a:hover.point{color:#fff}.backlog-table-body .pop-points-open.pop-bottom:after,.backlog-table-header .pop-points-open.pop-bottom:after{background:#050505;content:'';height:15px;position:absolute;transform:rotate(45deg);width:0}.backlog-table-body .pop-points-open li,.backlog-table-header .pop-points-open li{display:inline-block;width:23%}.backlog-table-body .pop-points-open a,.backlog-table-header .pop-points-open a{display:block;text-align:center}.backlog-table-body .pop-points-open a.active,.backlog-table-body .pop-points-open a:hover,.backlog-table-header .pop-points-open a.active,.backlog-table-header .pop-points-open a:hover{background:#9dce0a;color:#fff}.backlog-table-header .backlog-table-title{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;border-bottom:2px solid #767676;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding-right:1rem}.backlog-table-header .points{cursor:pointer}.backlog-table-header .header-points span{color:#767676}.backlog-table-body.forecasted-stories{border:.5rem solid #f5f5f5;border-bottom:0}.backlog-table-body .row{border-bottom:1px solid #dad9d9;cursor:move;-ms-flex-wrap:nowrap;flex-wrap:nowrap;position:relative}.backlog-table-body .row:hover{background:#e9ffb5;transition:background .2s ease-in;transition-delay:.2s}.backlog-table-body .row:hover .icon-drag,.backlog-table-body .row:hover .us-settings{opacity:1;transition:all .2s ease-in}.backlog-table-body .row:last-child{border-bottom:0}.backlog-table-body .row.gu-mirror{background:#e9ffb5;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.backlog-table-body .row .points .not-clickable:hover{color:#000;cursor:text}.backlog-table-body .row .icon-arrow-down{fill:#767676;height:.7rem;width:.7rem}.backlog-table-body .gu-transit{background:#e4e3e3}.backlog-table-body .sortable-placeholder{background:#f5f5f5;height:40px;width:100%}.backlog-table-body .sortable-placeholder *{display:none}.backlog-table-body .is-checked{background:#e9ffb5;transition:background .2s ease-in}.backlog-table-body input:checked{color:#9dce0a;transition:color .2s ease-in}.backlog-table-body .user-story-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.backlog-table-body .user-story-name a{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:inline-block;-ms-flex:1;flex:1}.sprints .sprint .sprint-date,.sprints .sprint-name a{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.backlog-table-body .user-story-name span{line-height:1.5}.backlog-table-body .tags-block{display:none;margin-bottom:.3rem}.backlog-table-body .tags-block .tag{font-size:.9rem;margin-right:.5rem;padding:.2rem .5rem}.backlog-table-body .blocked{background:#ff8282;border-bottom:1px solid #fff;color:#fff}.backlog-table-body .blocked:hover{background:red;transition:background .2s ease-in}.backlog-table-body .blocked a{color:#fff!important}.backlog-table-body .blocked .icon,.backlog-table-body .blocked .icon:hover,.backlog-table-body .blocked a:hover{color:#fff}.backlog-table-body .us-settings{-ms-flex-negative:0;flex-shrink:0;margin-left:2rem;opacity:0}.backlog-table-body .us-settings svg{fill:#767676;margin-right:.5rem;transition:fill .2s ease-in}.backlog-table-body .us-settings svg:hover{fill:#9dce0a}.backlog-table-body .icon-drag{cursor:move;fill:#767676;opacity:0;padding:.1rem}.backlog-table-body .readonly{cursor:auto;padding-right:45px}.backlog-table-body .us-status tg-svg{display:inline-block}.backlog-table-body .loading{margin:2% auto;width:3rem}.backlog-table-body .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.empty-large .row{display:none}.burndown{margin-bottom:2rem;width:100%}.sprints .sprint-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints h1{margin:0}.sprints .add-sprint{background:#5b8200;padding:.25rem .25rem 0;transition:background .2s}.sprints .add-sprint:hover{background:#9dce0a}.sprints .add-sprint svg{fill:#e4e3e3;height:1.4rem;width:1.5rem}.sprints .filter-closed-sprints{font-size:.9rem;-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1rem;vertical-align:middle}.sprints .filter-closed-sprints .icon-archive{margin-right:.3rem}.sprints .loading{text-align:center}.sprints .loading-spinner{border:0;-ms-flex-positive:0;flex-grow:0;margin-bottom:1rem;max-height:2rem;max-width:2rem;transform-origin:center center}.sprints .sprint-name a{font-size:1rem;display:inline-block;margin-right:.5rem}.sprints .sprint{margin-bottom:2rem}.sprints .sprint header{position:relative}.sprints .sprint:hover .edit-sprint{opacity:1;transition:opacity .2s ease-in}.sprints .sprint .edit-sprint{opacity:0;position:absolute;right:0;top:0;transition:opacity .2s ease-in;vertical-align:baseline}.lightbox-generic-form .settings .iocaine,.lightbox-generic-form .settings .requirement,.ticket-assigned-to .self-assign .icon,.ticket-assigned-to .user-assigned .icon,.ticket-assigned-users .self-assign .icon,.ticket-assigned-users .user-assigned .icon{vertical-align:middle}.sprints .sprint svg{fill:#767676}.sprints .sprint svg:hover{fill:#5b8200;transition:fill .2s ease-in}.sprints .sprint .number{font-size:.75rem;margin-right:.2rem}.sprints .sprint .description{font-size:.75rem;line-height:.6rem;margin-top:5px}.sprints .sprint .sprint-summary{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.sprints .sprint .sprint-date{font-size:.9rem;color:#767676;-ms-flex:1;flex:1}.sprints .sprint-table .sprint-empty,.sprints-empty{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.sprints .sprint ul{margin:0;text-align:right}.sprints .compact-sprint{transform:rotate(0);transition:all .2s}.sprints .compact-sprint.active{transform:rotate(90deg);transition:all .2s}.sprints .compact-sprint:hover .icon{fill:#9dce0a;transition:color .2s}.sprints .sprint-progress-bar{background:#767676;border-radius:2px;height:8px;margin-bottom:1rem;margin-top:.5rem;position:relative;width:100%}.sprints .sprint-progress-bar .current-progress{background:#5b8200;border-radius:2px;height:8px;left:0;position:absolute;top:0;width:calc(30% - 4px)}.sprints .sprint-table{min-height:2rem}.sprints .sprint-table .sprint-empty{background:#d7d6d6;border:2px dashed #909090;color:#555;padding:1rem;text-align:center}.sprints .sprint-table .row{border-bottom:1px solid #767676;display:-ms-flexbox;display:flex;padding:.5em 0;text-align:left;width:100%}.sprints .sprint-table .row:hover{background:rgba(118,118,118,.2);cursor:move;transition:background .2s ease-in}.sprints .sprint-table .row:last-child{border-bottom:0}.sprints .sprint-table .row.readonly{cursor:auto}.sprints .sprint-table .row.ui-sortable-helper{background:#e9ffb5;box-shadow:1px 1px 10px rgba(0,0,0,.1);opacity:.9;transition:background .2s ease-in}.sprints .sprint-table .gu-transit{background:#959595;height:40px}.sprints .sprint-table .gu-transit *{display:none}.sprints .sprint-table .column-us{font-size:.9rem;-ms-flex-flow:3;flex-flow:3;padding:0 4px}.sprints .sprint-table .us-name{display:block}.sprints .sprint-table .us-name.closed{color:#838383}.sprints .sprint-table .us-name.blocked{color:red}.sprints .sprint-table .column-points{-ms-flex-positive:1;flex-grow:1;padding:0 4px;text-align:right}.sprints .sprint-table .column-points.closed{color:#838383}.sprints .sprint-table .column-points.blocked{color:red}.sprints .sprint-table.sprint-empty-wrapper .row{display:none}.sprints .button-gray{display:block;margin-top:1rem;text-align:center}.sprint-closed .sprint-table,.sprints .us-item-row .popover,.sprints .us-item-row .status,.sprints .us-item-row .tags-block,.sprints .us-item-row .us-settings,.sprints .us-item-row input{display:none}.sprints .us-item-row .user-story-name{font-size:.9rem;line-height:1rem;margin-top:5px}.sprint-closed .description,.sprint-closed .number{color:#767676}.sprint-closed .sprint-progress-bar .current-progress{background:#5d5d5d}.sprint-closed .button-gray{background:#767676}.sprints-empty{text-align:center}.sprints-empty img{margin:1rem 0;width:50%}.sprints-empty .title{font-size:1.2rem;margin-bottom:.5rem;text-transform:uppercase}.sprints-empty a{color:#5b8200}.taskboard-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.taskboard-table.zoom-0 .task-colum-name span{padding-right:1rem}.taskboard-table .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;background:#f5f5f5;border-top:3px solid #767676;color:#555;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:300px;padding:.5rem 1rem;position:relative;text-transform:uppercase;width:300px}.taskboard-table .task-colum-name:last-child{margin-right:0}.taskboard-table .task-colum-name.column-fold{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;padding:.3rem 0}.taskboard-table .task-colum-name.column-fold span{display:none}.taskboard-table .task-colum-name.column-fold .hfold,.taskboard-table .task-colum-name.column-fold .hunfold{margin:0}.taskboard-table .task-colum-name span{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.taskboard-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;min-height:2.4rem;position:relative;width:100%}.taskboard-table-header .taskboard-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute}.taskboard-table-header tg-svg{display:block;margin-right:.3rem}.taskboard-table-header tg-svg:hover{cursor:pointer}.taskboard-table-header tg-svg.hfold,.taskboard-table-header tg-svg.hunfold{display:inline-block;transform:rotate(90deg)}.taskboard-table-body{-ms-flex:1;flex:1;margin-bottom:5rem;overflow:auto;width:100%}.taskboard-table-body .taskboard-column{-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:300px;width:300px}.taskboard-table-body .column-fold .card .card-owner img,.taskboard-table-body .row-fold .card .card-owner img{height:1.3rem;margin-right:0;width:1.3rem}.taskboard-table-body .taskboard-column:last-child{margin-right:0}.taskboard-table-body .row-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .row-fold .card .card-data,.taskboard-table-body .row-fold .card .card-owner-actions,.taskboard-table-body .row-fold .card .card-owner-name,.taskboard-table-body .row-fold .card .card-statistics,.taskboard-table-body .row-fold .card .card-tag,.taskboard-table-body .row-fold .card .card-title,.taskboard-table-body .row-fold .card .card-unfold,.taskboard-table-body .row-fold .card tg-card-slideshow{display:none}.taskboard-table-body .row-fold .taskboard-column,.taskboard-table-body .row-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .row-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .card .card-data,.taskboard-table-body .column-fold .card .card-owner-actions,.taskboard-table-body .column-fold .card .card-owner-name,.taskboard-table-body .column-fold .card .card-statistics,.taskboard-table-body .column-fold .card .card-tag,.taskboard-table-body .column-fold .card .card-title,.taskboard-table-body .column-fold .card .card-unfold,.taskboard-table-body .column-fold .card tg-card-slideshow,.taskboard-table-body .row-fold .avatar-assigned-to{display:none}.taskboard-table-body .column-fold .card{-ms-flex-item-align:start;align-self:flex-start;margin-top:.5rem}.taskboard-table-body .column-fold .taskboard-column,.taskboard-table-body .column-fold.taskboard-column{-ms-flex-line-pack:start;align-content:flex-start;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-flow:row wrap;flex-flow:row wrap}.taskboard-table-body .column-fold .avatar-task-link{display:block}.taskboard-table-body .column-fold .avatar-assigned-to{display:none}.taskboard-table-body .taskboard-row{display:-ms-flexbox;display:flex;margin-bottom:.25rem;min-height:10rem;width:100%}.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box{background:rgba(255,0,0,.6)}.taskboard-table-body .taskboard-row.blocked .points-value,.taskboard-table-body .taskboard-row.blocked .points-value:hover,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg,.taskboard-table-body .taskboard-row.blocked .taskboard-row-title-box svg:hover{color:#fff;fill:#fff;transition:color .3s linear}.taskboard-table-body .taskboard-row.blocked .taskboard-cards-box{background:rgba(255,0,0,.1)}.taskboard-table-body .taskboard-row.row-fold{min-height:0}.taskboard-table-body .taskboard-row.row-fold .us-title{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.ticket-assigned-to .loading-spinner,.ticket-assigned-users .loading-spinner{transform-origin:32 32;max-height:2rem;max-width:2rem;animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate}.taskboard-table-body .taskboard-row.row-fold .icon-add,.taskboard-table-body .taskboard-row.row-fold .icon-bulk,.taskboard-table-body .taskboard-row.row-fold .points-value,.taskboard-table-body .taskboard-row.row-fold .us-data{display:none}.taskboard-table-body .taskboard-row.issues-row{margin-top:1em}.taskboard-table-body .taskboard-row.issues-row .taskboard-cards-box{-ms-flex-line-pack:start;align-content:flex-start;-ms-flex-align:start;align-items:flex-start;border-top:3px solid #767676;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.taskboard-table-body .taskboard-row.issues-row .taskboard-row-title-box{padding:0}.taskboard-table-body .taskboard-row.issues-row .task-colum-name{-ms-flex-pack:start;justify-content:flex-start;padding:.5rem .5rem .5rem 2em}.taskboard-table-body .taskboard-row.issues-row .row-title{-ms-flex-positive:1;flex-grow:1}.ticket-assigned-to,.ticket-assigned-users{-ms-flex-align:center;border-bottom:1px solid #767676;border-top:1px solid #767676}.taskboard-table-body .taskboard-row.issues-row .toggle-fold{display:block;left:.5rem;position:absolute;top:-.4rem}.taskboard-table-body .taskboard-row.issues-row .card{cursor:default;height:auto;margin:.3rem .1rem .3rem .5rem}.taskboard-table-body .taskboard-row.issues-row:not(.row-fold) .card{width:280px}.taskboard-table-body .taskboard-row-title-box{padding:.5rem .5rem .5rem 1.5rem}.taskboard-row-title-box{position:relative}.taskboard-row-title-box .us-title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;margin-bottom:0;margin-right:3rem}.taskboard-row-title-box .points-value{font-size:.9rem;color:#767676}.taskboard-row-title-box .points-value span{margin-right:.1rem}.taskboard-row-title-box .us-data{display:-ms-flexbox;display:flex}.taskboard-row-title-box .due-date tg-svg{position:inherit}.taskboard-row-title-box tg-svg{cursor:pointer;display:block;position:absolute;right:.5rem;top:.7rem}.taskboard-row-title-box tg-svg:hover svg{fill:#5b8200}.taskboard-row-title-box tg-svg.add-action{right:2rem}.taskboard-row-title-box tg-svg.fold-action{left:0;right:inherit;top:1rem}.ticket-assigned-to{align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem;padding:1rem 0;position:relative}.ticket-assigned-to:hover .remove-user{opacity:1;transition:opacity .3s linear}.ticket-assigned-to .loading-spinner{margin:1rem auto}.ticket-assigned-to .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-to .user-avatar img{width:100%}.ticket-assigned-to .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-to .user-avatar .iocaine-symbol svg{background:#444;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.ticket-assigned-to .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-to .assigned-to .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block;margin:.2rem 0 .25rem}.ticket-assigned-to .assigned-to .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-to .assigned-to .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-to .assigned-to .self-assign,.ticket-assigned-to .assigned-to .user-assigned{color:#5b8200;cursor:default}.ticket-assigned-to .assigned-to .self-assign:hover,.ticket-assigned-to .assigned-to .user-assigned:hover,.ticket-assigned-to .remove-user:hover,.ticket-assigned-to .self-assign.editable:hover,.ticket-assigned-to .user-assigned.editable:hover,.ticket-assigned-users .self-assign.editable:hover,.ticket-assigned-users .user-assigned.editable:hover{cursor:pointer}.ticket-assigned-to .assigned-to .self-assign .icon,.ticket-assigned-to .assigned-to .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-to .remove-user{fill:#555;opacity:0;position:absolute;right:.5rem;top:2rem}.ticket-assigned-to .remove-user:hover{fill:red;transition:fill .2s}.ticket-assigned-to .self-assign,.ticket-assigned-to .user-assigned{color:#5b8200}.ticket-assigned-to .self-assign:hover,.ticket-assigned-to .user-assigned:hover{color:currentColor}.ticket-assigned-to .self-assign.editable,.ticket-assigned-to .user-assigned.editable{color:#5b8200}.ticket-assigned-users .assigned-title,.ticket-assigned-users .tg-add-assigned span{color:#555;font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-assigned-users{align-items:center;margin-bottom:1rem;padding:.5rem 0;position:relative}.ticket-assigned-users .loading-spinner{margin:1rem auto}.ticket-assigned-users .assigned-title{display:block;margin:.2rem 0 .25rem}.ticket-assigned-users .tg-assigned-users{-ms-flex-align:center;align-items:center;position:relative}.ticket-assigned-users .tg-add-assigned{margin-top:.25rem}.ticket-assigned-users .tg-add-assigned .add-assigned{fill:#555;opacity:1;right:.5rem;top:2rem}.ticket-assigned-users .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:red;transition:fill .2s}.ticket-assigned-users .tg-add-assigned span{margin:.2rem .5rem}.ticket-assigned-users .assigned-users-options{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .assigned-users-options a{margin-right:.2rem}.ticket-assigned-users .self-assign,.ticket-assigned-users .self-assign.editable,.ticket-assigned-users .user-assigned,.ticket-assigned-users .user-assigned.editable{color:#5b8200}.ticket-assigned-users .not-assigned-users{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-title{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block;margin:.2rem 0 .25rem}.colors-table .table-header,.duty-custom-fields .custom-fields-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.ticket-assigned-users .not-assigned-users .assigned-to{-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.ticket-assigned-users .not-assigned-users .assigned-to-actions{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex}.ticket-assigned-users .not-assigned-users .assigned-to-actions a{margin-right:.2rem}.ticket-assigned-users .not-assigned-users .self-assign,.ticket-assigned-users .not-assigned-users .user-assigned{color:#5b8200;cursor:default}.colors-table .row.edition .current-color,.ticket-assigned-users .not-assigned-users .self-assign:hover,.ticket-assigned-users .not-assigned-users .user-assigned:hover{cursor:pointer}.ticket-assigned-users .not-assigned-users .self-assign .icon,.ticket-assigned-users .not-assigned-users .user-assigned .icon{fill:currentColor;height:.75rem;width:.75rem}.ticket-assigned-users .user-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;-ms-flex-negative:0;flex-shrink:0;position:relative}.ticket-assigned-users .user-avatar img{width:100%}.ticket-assigned-users .user-avatar .iocaine-symbol{left:-.5rem;position:absolute;top:-.75rem;z-index:9}.ticket-assigned-users .user-avatar .iocaine-symbol svg{background:#444;border-radius:.25rem;fill:#fff;min-height:1.75rem;min-width:1.75rem;padding:.25rem}.category-config{border-bottom:1px solid #767676}.category-config:first-child{border-top:1px solid #767676}.category-config .resume{-ms-flex-align:space-between;align-items:space-between;cursor:pointer;display:-ms-flexbox;display:flex;padding:1rem;position:relative}.category-config .resume.open-drawer .icon{transform:rotate(90deg)}.category-config .icon{transform:rotate(0);transition:all .4s}.category-config .resume-title{width:280px}.category-config .count{color:#767676;float:left;padding-right:5px}.category-config .summary-role{-ms-flex:1;flex:1;width:280px}.category-config .summary-role .role-summary-single{background:#767676;display:inline-block;height:20px;margin-right:.1rem;width:15px}.category-config .summary-role .role-summary-single.active{background:#5b8200}.category-config .summary-role .role-summary-single.inactive{background:#555}.category-config .category-items{max-height:0;transition:max-height .5s ease-in;overflow:hidden;background-color:#e4e3e3;width:100%}.colors-table .table-header .row:hover,.colors-table .table-header:hover{background:0 0}.category-config .category-items.open{transition:max-height .5s ease-in;max-height:400px}.category-config .category-items .items-container{padding:1rem}.category-config .category-item{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 2rem}.category-config .category-item:last-child{border-bottom:0}.category-config .check input{height:40px;width:85px}.colors-table .table-header{font-size:1rem;border-bottom:3px solid #e4e3e3}.colors-table .table-header .row{padding-left:50px}.colors-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem}.colors-table .row:last-child{border:0}.colors-table .row.edition{padding-left:3rem}.colors-table .row.hidden{display:none}.colors-table .row:hover{background:rgba(216,248,121,.2);cursor:move;transition:background .2s ease-in}.colors-table .row:hover .icon{opacity:1;transition:opacity .2s ease-in}.colors-table .row:hover .options-column{opacity:1;transition:opacity .3s linear}.colors-table .row.no-draggable{padding-left:50px}.colors-table .row.no-draggable:hover{cursor:auto}.colors-table .row .color-column{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:1;flex-grow:1;max-width:100px;position:relative}.colors-table .row .before-after-column,.colors-table .row .is-archived-column,.colors-table .row .is-closed-column,.colors-table .row .options-column,.colors-table .row .status-wip-limit,.colors-table .row .thresold-column{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.colors-table .row .before-after-column{padding:0 10px}.colors-table .row .color-name,.colors-table .row .status-name{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 10px;position:relative}.colors-table .row .color-name span,.colors-table .row .status-name span{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.colors-table .row .color-name{-ms-flex-preferred-size:100px;flex-basis:100px}.colors-table .row .status-slug{display:none;-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:6;flex-grow:6;padding:0 10px}@media (min-width:1400px){.colors-table .row .status-slug{display:block}}.colors-table .row .status-slug span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.colors-table .row .options-column{max-width:100px;opacity:0;text-align:right}.colors-table .row .is-archived-column{max-width:130px;padding:0 0 0 10px;text-align:center}.colors-table .row .is-closed-column{max-width:100px;text-align:center}.colors-table .row .status-wip-limit{display:none;max-width:100px;padding:0 0 0 10px;text-align:center}@media (min-width:1400px){.colors-table .row .status-wip-limit{display:block}}.colors-table .before-after-selector{display:-ms-flexbox;display:flex;font-size:.9rem}.colors-table .before-after-selector input{display:none}.colors-table .before-after-selector input+label{background:rgba(228,227,227,.7);cursor:pointer;display:block;padding:.5rem .25rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.colors-table .before-after-selector input+label:hover{background:rgba(157,206,10,.3);transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single{-ms-flex:1;flex:1;margin-right:.25rem}.colors-table .before-after-selector .before-after-selector-single:last-child{margin-right:0}.colors-table .before-after-selector .before-after-selector-single.checked label{background:#9dce0a;color:#fff;transition:background .2s ease-in}.colors-table .before-after-selector .before-after-selector-single.checked label:hover{background:#9dce0a}.colors-table .options-column a{cursor:pointer;display:inline-block}.colors-table .row-edit .options-column{opacity:1}.colors-table .current-color{background-color:#e4e3e3;border-radius:2px;height:40px;width:40px}.colors-table .icon{cursor:pointer;fill:#767676;margin-right:1rem;opacity:0}.colors-table .icon:hover{fill:#9dce0a;transition:all .2s ease-in}.colors-table .icon.icon-check{cursor:default;fill:#5b8200;opacity:1}.colors-table .icon.icon-merge{cursor:default;opacity:1}.colors-table .icon.icon-search{cursor:none;fill:#5b8200;opacity:1}.colors-table .icon.icon-drag{cursor:move}.colors-table .icon.icon-trash{fill:#ff8282}.colors-table .gu-mirror{background:#e9ffb5;opacity:1}.contrib-plugins-wrapper{margin:1rem 0 2rem}.contrib-plugins-wrapper label{font-size:.9rem;display:block;margin-bottom:.5rem}.duty-custom-fields{margin-bottom:2rem}.duty-custom-fields .custom-fields-header{-ms-flex-line-pack:justify;align-content:space-between;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.duty-custom-fields .custom-field-data .custom-field-description,.duty-custom-fields .custom-field-value,.lightbox h2,.lightbox-create-edit .tg-add-assigned span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.duty-custom-fields .custom-fields-header .icon{cursor:pointer}.duty-custom-fields .custom-fields-header .collapse{display:block;transform:rotate(-90deg);transition:.1s ease-out}.duty-custom-fields .custom-fields-header .open{transform:rotate(0)}.duty-custom-fields .custom-field-single{border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;padding:.7rem}.duty-custom-fields .custom-field-single:hover .custom-field-options{opacity:1}.duty-custom-fields .custom-field-single.editable .custom-field-options{margin-top:.5rem}.duty-custom-fields .custom-field-options{margin:0;opacity:0;transition:opacity .2s linear}.duty-custom-fields .custom-field-options a{display:inline-block}.duty-custom-fields .custom-field-options svg{fill:#767676}.duty-custom-fields .custom-field-options svg:hover{fill:#5b8200}.duty-custom-fields .custom-field-data{-ms-flex:0;flex:0;-ms-flex-preferred-size:200px;flex-basis:200px}.duty-custom-fields .custom-field-data .custom-field-name{display:block}.duty-custom-fields .custom-field-data .custom-field-description{font-size:.9rem;color:#888;display:block;line-height:.9rem}.duty-custom-fields .custom-field-value{-ms-flex-align:start;align-items:flex-start;-ms-flex:1;flex:1;padding:0 1rem 0 2rem}.duty-custom-fields .custom-field-value.js-value-view-mode{white-space:pre-line}.duty-custom-fields .custom-field-value.js-value-view-mode.wysiwyg{white-space:normal}.duty-custom-fields form label{cursor:pointer}.duty-custom-fields form input{width:100%}.custom-fields-body{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:50%;flex-basis:50%}@media (max-width:1280px){.custom-fields-body.collapse-fields .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even),.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0}}.custom-fields-body.collapse-fields .custom-attribute:nth-child(even){padding:0 0 0 2rem}.custom-fields-body.collapse-fields .custom-attribute:nth-child(odd){padding:0 2rem 0 0}.custom-fields-body .custom-attribute{-ms-flex-preferred-size:100%;flex-basis:100%}.custom-fields-body .custom-attribute:nth-child(even),.custom-fields-body .custom-attribute:nth-child(odd){padding:0}.custom-fields-body .custom-field-single{height:100%}.blocked .external-reference{color:#fff}.blocked .external-reference a{color:#fff;transition:color .3s linear}.blocked .external-reference a:hover{color:#ff8282}.external-reference{font-size:.9rem;color:#767676;margin-top:.5rem}.external-reference a{border-left:1px solid #767676;padding:0 .2rem;transition:color .3s linear}.external-reference a:hover{color:#5b8200}.external-reference a:first-child{border:0}.lightbox{background:rgba(255,255,255,.95);bottom:0;display:none;left:0;opacity:0;position:fixed;right:0;top:0;z-index:99910}.lightbox .close{width:2rem;height:2rem;cursor:pointer;fill:#555;position:absolute;right:3rem;top:3rem;transition:fill .2s;display:block}.lightbox .close:hover{fill:#ff8282}.lightbox .close svg{width:2rem;height:2rem;pointer-events:none}.lightbox.open{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1;transition:opacity .3s ease}.lightbox.close{opacity:0;transition:opacity .3s ease}.lightbox .lb-icon{margin:1rem auto;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single:first-child,.lightbox-generic-form .settings fieldset{margin-right:.5rem}.lightbox .lb-icon svg{width:6rem;height:6rem;display:block;fill:#e4e3e3}.lightbox .title{text-align:center}.lightbox fieldset{margin-bottom:1rem}.lightbox .button-gray,.lightbox .button-green{display:block;padding:12px;text-align:center}.lightbox h2{font-size:2rem}.lightbox-generic-form form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-form fieldset{position:relative}.lightbox-generic-form textarea{min-height:4.5rem;resize:vertical}.lightbox-generic-form .existing-or-new-selector{display:-ms-flexbox;display:flex;margin-bottom:2rem}.lightbox-generic-form .existing-or-new-selector input{display:none}.lightbox-generic-form .existing-or-new-selector input:checked+label{background:#9dce0a;color:#fff;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input:checked+label:hover{background:#9dce0a}.lightbox-generic-form .existing-or-new-selector input+label{background:rgba(228,227,227,.7);cursor:pointer;display:block;font-size:1em;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector input+label:hover{background:rgba(157,206,10,.3);transition:background .2s ease-in}.lightbox-generic-form .existing-or-new-selector .existing-or-new-selector-single{-ms-flex:1;flex:1}.lightbox-generic-form .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-generic-form .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-generic-form .settings fieldset:last-child{margin:0}.lightbox-generic-form .settings .iocaine:hover,.lightbox-generic-form .settings .requirement:hover{background:#9dce0a;border:1px solid #5b8200}.lightbox-generic-form .settings .iocaine svg,.lightbox-generic-form .settings .requirement svg{width:.75rem;height:.75rem}.lightbox-generic-form .settings .blocked:hover{background:#ff8282;border:1px solid red}.lightbox-generic-form .settings .client-requirement input:checked+label,.lightbox-generic-form .settings .iocaine-flag input:checked+label,.lightbox-generic-form .settings .team-requirement input:checked+label{background:#5b8200;border:1px solid #5b8200;color:#fff}.lightbox-generic-form .settings .blocking-flag label{-ms-flex-item-align:stretch;-ms-grid-row-align:stretch;align-self:stretch;display:block}.lightbox-generic-form .settings .blocking-flag input:checked+label{background:red;border:1px solid red;color:#fff}.lightbox-generic-form .settings input{display:none}.lightbox-generic-form .attachments{margin-bottom:0}.lightbox-search fieldset,.lightbox-sprint-add-edit .dates{margin-bottom:1rem}.lightbox-generic-form .attachment-body{max-height:7.5rem;overflow-y:auto}.lightbox-generic-form .attachment-delete{right:.5rem}.lightbox-generic-form .attachment-delete svg{fill:#767676;height:1.25rem;width:1.25rem}.lightbox-generic-form .attachment-delete:hover svg{fill:red}.lightbox-sprint-add-edit .delete-sprint .icon,.lightbox-sprint-add-edit .delete-sprint:hover .icon{fill:currentColor}.lightbox-generic-bulk form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-generic-bulk textarea{max-height:12rem;min-height:15rem}.lightbox-search form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;max-width:600px}.lightbox-sprint-add-edit form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-sprint-add-edit .last-sprint-name{font-size:.9rem;color:#555;opacity:1;position:absolute;right:1rem;top:.7rem;transition:opacity .3s linear}.lightbox-sprint-add-edit .last-sprint-name.disappear{opacity:0;transition:opacity .3s linear}.lightbox-sprint-add-edit .dates div{float:left;margin-right:1%;position:relative;width:49%}.lightbox-sprint-add-edit .dates div:last-child{margin:0;width:50%}.lightbox-sprint-add-edit .delete-sprint{font-size:.9rem;color:#555;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-ask-choice .subtitle,.lightbox-generic-ask .subtitle{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-ask-choice .options a:first-child,.lightbox-generic-ask .options a:first-child{margin-right:.5rem}.lightbox-sprint-add-edit .delete-sprint:hover{color:red;transition:color .3s linear}.lightbox-generic-ask form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-flow:0;flex-flow:0;max-width:420px}.lightbox-generic-ask .message,.lightbox-generic-ask .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-generic-ask .subtitle{white-space:pre-line}.lightbox-generic-ask .options{display:-ms-flexbox;display:flex}.lightbox-generic-ask .options a{padding:8px 0;text-align:center;width:100%}.lightbox-ask-choice{text-align:center}.lightbox-ask-choice form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0}.lightbox-ask-choice .question,.lightbox-ask-choice .subtitle{display:block;line-height:1.5rem;text-align:center}.lightbox-ask-choice .replacement,.lightbox-ask-choice .replacement span{display:block}.lightbox-ask-choice .choices{margin-bottom:2rem}.lightbox-ask-choice .options{display:-ms-flexbox;display:flex}.lightbox-ask-choice .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-ask-choice .warning{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-delete-account p{text-align:center}.lightbox-delete-account form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-account .question,.lightbox-delete-account .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-account .newsletter{margin:1rem 0;text-align:center}.lightbox-delete-account .newsletter input,.lightbox-delete-account .options a:first-child,.lightbox-delete-project .options a:first-child{margin-right:.5rem}.lightbox-delete-account .newsletter input+label{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.lightbox-delete-project .subtitle,.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1.2rem}.lightbox-delete-account .options{display:-ms-flexbox;display:flex}.lightbox-delete-account .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-delete-project form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-delete-project .question,.lightbox-delete-project .subtitle{display:block;line-height:2rem;text-align:center}.lightbox-delete-project .options{display:-ms-flexbox;display:flex}.lightbox-delete-project .options a{-ms-flex-positive:1;flex-grow:1;padding:8px 0;text-align:center}.lightbox-generic-error section,.lightbox-generic-loading section,.lightbox-generic-success section{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:500px}.lightbox-generic-error h2,.lightbox-generic-loading h2,.lightbox-generic-success h2{line-height:2rem}.lightbox-generic-error p,.lightbox-generic-loading p,.lightbox-generic-success p{text-align:center}.lightbox-generic-loading .spin{margin:1rem auto;width:5rem}.lightbox-generic-loading .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:100%;max-width:100%;width:100%}.backlog-sprints-menu::after,.lightbox-create-edit .pop-status:after,.lightbox-create-edit .pop-users:after,.main-nav a:hover .helper::after,.related-tasks-body .pop-status:after,.ticket-header .pop-status:after{content:'';transform:rotate(45deg)}.lightbox-generic-loading .progress-bar-wrapper{background:#d7d6d6;height:30px;margin-bottom:1rem;padding:3px;position:relative}.lightbox-generic-loading .progress-bar-wrapper .bar{background:#9dce0a;height:24px;position:absolute;transition:width .1s linear}.lightbox-generic-loading .progress-bar-wrapper .progress{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#d7d6d6;bottom:35px;color:#555;padding:.3rem;position:absolute;transition:left .1s linear}.lightbox-import-error .description a,.lightbox-select-user .add-comment a{color:#5b8200}.lightbox-create-issue form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-create-issue .fieldset-row{display:-ms-flexbox;display:flex}.lightbox-create-issue .fieldset-row fieldset{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:1;flex-grow:1;margin-right:.5rem;width:30%}.lightbox-create-issue .fieldset-row fieldset:last-child{margin:0}.lightbox-block textarea,.lightbox-create-issue textarea{margin-bottom:1rem;max-height:12rem;min-height:8rem}.lightbox-select-user .add-comment textarea,.lightbox-select-user .submit-button{margin-top:1rem}.lightbox-block .form{-ms-flex-preferred-size:420px;flex-basis:420px;-ms-flex-positive:0;flex-grow:0;width:420px}.lightbox-select-user .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}.lightbox-select-user .user-list-single.selected,.lightbox-select-user .user-list-single:hover{background:rgba(216,248,121,.3);cursor:pointer}.lightbox-select-user .user-list-single:hover{transition:background .3s linear;transition-delay:.2s}.lightbox-select-user .more-watchers{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;padding:.5rem;text-align:center}.lightbox-select-user .add-comment{position:relative;text-align:center}.lightbox-select-user .add-comment .icon-close{cursor:pointer;fill:#555;position:absolute;right:0;top:0;transition:fill .2s}.lightbox-select-user .add-comment .icon-close:hover{fill:#ff8282}.lightbox-select-user .add-comment .icon-close svg{width:2rem;height:2rem}.lb-create-edit-userstory .points-per-role{-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:0}.lb-create-edit-userstory .ticket-role-points{margin:.1rem;min-width:20%}.lb-create-edit-userstory .ticket-role-points:first-child{margin-left:0}.lb-create-edit-userstory .ticket-role-points:nth-child(4n+4){margin-right:0}.lb-create-edit-userstory .ticket-role-points:last-child{-ms-flex-preferred-size:100%;flex-basis:100%;margin:.1rem 0;min-width:100%}.lightbox-import-error{text-align:center}.lightbox-import-error .content{width:500px}.lightbox-import-error h2{margin-top:1rem}.lightbox-import-error img{height:5rem}.lightbox-leave-project-warning{text-align:center}.lightbox-leave-project-warning .icon{fill:#767676;height:3rem;margin-bottom:1rem;width:3rem}.lightbox-set-due-date .delete-due-date .icon,.lightbox-set-due-date .delete-due-date:hover .icon{fill:currentColor}.lightbox-leave-project-warning .content,.lightbox-request-ownership .content{width:500px}.lightbox-request-ownership{text-align:center}.lightbox-set-due-date{z-index:9999}.lightbox-set-due-date form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-flow:0;flex-flow:0;max-width:600px}.lightbox-set-due-date .date{margin:2rem 0 1rem}.lightbox-set-due-date .reason textarea{margin-top:.5rem}.lightbox-set-due-date .due-date-suggestions{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:1rem 0 .5rem}.lightbox-set-due-date .suggestion{background:rgba(184,184,184,.2);color:#B8B8B8;-ms-flex-pack:start;justify-content:flex-start;margin:0 .5rem .5rem;min-height:2rem;padding:.5rem .75rem;position:relative}.lightbox-set-due-date .suggestion:first-child{margin-left:0}.lightbox-set-due-date .suggestion:nth-child(4n+4){margin-right:0}.lightbox-set-due-date .suggestion.clickable.active,.lightbox-set-due-date .suggestion.clickable:hover{background:rgba(157,206,10,.9);color:#fff}.lightbox-set-due-date .delete-due-date{font-size:.9rem;color:#555;float:right;margin:1rem .25rem 0 0;transition:color .3s linear}.lightbox-set-due-date .delete-due-date:hover{color:red;transition:color .3s linear}.lightbox-create-edit{z-index:9998}.lightbox-create-edit form{-ms-flex-preferred-size:700px;flex-basis:700px;max-width:700px;width:700px}.lightbox-create-edit .form-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:700px;flex-basis:700px;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;margin-bottom:30px}.lightbox-create-edit .form-wrapper main{-ms-flex-positive:1;flex-grow:1;max-width:480px}.lightbox-create-edit .form-wrapper .sidebar{border-left:2px solid #e4e3e3;margin-left:15px;padding-left:15px;width:220px}.lightbox-create-edit .existing-item-wrapper{margin-bottom:30px}.lightbox-create-edit .existing-item-wrapper select .strong{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.lightbox-create-edit .add-existing-button{width:100%}.lightbox-create-edit .status-button{display:-ms-flexbox;display:flex;position:relative}.lightbox-create-edit .status-dropdown{-ms-flex-line-pack:center;align-content:center;color:#fff;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:100%;flex-basis:100%;height:30px;padding:.25rem .5rem}.lightbox-create-edit .status-dropdown .status-text{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.lightbox-create-edit .status-dropdown svg{fill:#fff;height:.9rem;width:.9rem}.lightbox-create-edit .popover a{color:#fff;display:block;padding:.5rem 1rem;text-align:left}.lightbox-create-edit .popover a.active,.lightbox-create-edit .popover a:hover{color:#9dce0a}.lightbox-create-edit .ticket-assigned-to{border:0;padding:0}.lightbox-create-edit .ticket-assigned-to.single-assign{margin:0}.lightbox-create-edit .ticket-assigned-to.multiple-assign{-ms-flex-align:start;align-items:start;-ms-flex-direction:column;flex-direction:column;margin:0}.lightbox-create-edit .ticket-assigned-to .assigned-to-actions{display:block}.lightbox-create-edit .ticket-assigned-to .remove-user{top:1.2rem}.lightbox-create-edit .user-list{display:-ms-flexbox;display:flex;width:100%}.lightbox-create-edit .user-list .user-list-item{margin-right:.5rem;width:44.75px}.lightbox-create-edit .user-list .user-list-item img{height:44.75px;width:44.75px}.lightbox-create-edit .user-list .user-list-item:last-child{margin-right:0}.lightbox-create-edit .user-list .user-list-item.counter{background:#B8B8B8;color:#767676;font-weight:400;height:44.75px;line-height:44.75px;text-align:center}.lightbox-create-edit .tg-add-assigned{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:.25rem 0 .75rem}.lightbox-create-edit .tg-add-assigned .add-assigned{fill:#555;opacity:1;right:.5rem;top:2rem}.lightbox-create-edit .tg-add-assigned .add-assigned:hover{cursor:pointer;fill:red;transition:fill .2s}.lightbox-create-edit .tg-add-assigned span{font-size:.9rem;color:#555;margin:.2rem .5rem}.lightbox-create-edit .pop-status,.lightbox-create-edit .pop-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;margin:0;text-align:"center";background:#050505;font-size:.9rem;z-index:99}.lightbox-create-edit .users-dropdown{position:relative}.lightbox-create-edit .pop-status{color:#fff;display:none;padding:10px;position:absolute;top:28px;width:203px}.lightbox-create-edit .pop-status a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-status a:last-child{border:0}.lightbox-create-edit .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.lightbox-create-edit .pop-status a:hover.point{color:#fff}.lightbox-create-edit .pop-status:after{background:#050505;height:15px;position:absolute;width:0}.lightbox-create-edit .pop-users{color:#fff;display:none;left:0;padding:10px;position:absolute;top:60px;width:203px}.lightbox-create-edit .pop-users a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.lightbox-create-edit .pop-users a:last-child{border:0}.lightbox-create-edit .pop-users a:hover{color:#9dce0a;transition:color .3s linear}.lightbox-create-edit .pop-users a:hover.point{color:#fff}.lightbox-create-edit .pop-users:after{background:#050505;height:15px;left:67.67px;position:absolute;top:-7px;width:16px}.lightbox-create-edit .pop-users.multiple{top:84px}.lightbox-create-edit .pop-users.multiple::after{left:30px}.lightbox-create-edit .pop-users ul{margin-bottom:.5rem}.lightbox-create-edit .pop-users li{border-bottom:1px solid #767676}.lightbox-create-edit .pop-users li:last-child{border:0}.lightbox-create-edit .pop-users .user-list-single{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-positive:0;flex-grow:0;padding:.5rem 0}.lightbox-create-edit .pop-users .user-list-single.selected{color:#5b8200}.lightbox-create-edit .pop-users .user-list-avatar{height:32px;margin-right:.5rem;width:32px}.lightbox-create-edit .pop-users .user-list-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-positive:1;flex-grow:1;position:relative}.lightbox-create-edit .pop-users .remove svg{fill:#e4e3e3;height:.8rem;width:.8rem}.lightbox-create-edit .pop-users .show-more{border-top:1px solid #767676;padding-top:.5rem;text-align:center}.lightbox-create-edit .ticket-data-container{margin:0;padding:0 0 .1rem}.lightbox-create-edit .ticket-data-container .ticket-status .priority-data,.lightbox-create-edit .ticket-estimation .points-per-role{margin:0}.lightbox-create-edit .ticket-detail-settings{height:52px;-ms-flex-pack:left;justify-content:left;margin:1rem 0 0}.lightbox-create-edit .ticket-detail-settings label{border:0;padding:12px 13px;width:auto}.lightbox-create-edit .ticket-detail-settings .item-block,.lightbox-create-edit .ticket-detail-settings .item-unblock{display:block;margin:0}.lightbox-create-edit .blocked-note{margin-top:.5rem}.ticket-detail-settings .lightbox-assign-sprint-to-issue .lightbox-assign-related-sprint{width:700px}.ticket-detail-settings .lightbox-assign-sprint-to-issue svg{fill:initial;max-height:initial;max-width:initial}.ticket-detail-settings img,.ticket-detail-settings svg{max-height:1.25rem;max-width:1.25rem;width:100%}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label{background:0 0;display:inline-block;margin-bottom:.5rem;margin-right:0;padding:0}.ticket-detail-settings .lightbox-assign-sprint-to-issue fieldset label+input{display:initial}.ticket-detail-settings .lightbox-assign-sprint-to-issue button{width:100%}.lightbox-relate-to-epic .lightbox-create-related-epic-wrapper{max-width:600px;width:90%}.lightbox-relate-to-epic .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-relate-to-epic .related-with-selector input{display:none}.lightbox-relate-to-epic .related-with-selector input:checked+label{background:#9dce0a;color:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input:checked+label:hover{background:#9dce0a}.lightbox-relate-to-epic .related-with-selector input+label{background:rgba(228,227,227,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector input+label:hover{background:rgba(157,206,10,.3);transition:background .2s ease-in}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-relate-to-epic .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-relate-to-epic fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-relate-to-epic .new-epic-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-relate-to-epic .existing-epic-form,.lightbox-relate-to-epic .new-epic-form{margin-bottom:1rem}.lightbox-relate-to-epic .no-epics-found{padding:1rem 0 0}.lightbox-relate-to-epic .new-epic-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-relate-to-epic .new-epic-options input{display:none}.lightbox-relate-to-epic .new-epic-options input:checked+label{background:#9dce0a;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label{background:#f5f5f5;color:#444;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-relate-to-epic .new-epic-options input+label:hover{background:#9dce0a;color:#fff;fill:#fff}.lightbox-relate-to-epic button{width:100%}tg-project-menu{background-position:0 -300px;display:inline-block;min-height:calc(100vh - 40px);min-width:50px;padding:1rem 0;position:relative;text-transform:uppercase;z-index:99}.main-nav a,.main-nav span{display:block}tg-project-menu .menu.menu-fixed{position:fixed;top:1rem}.main-nav,.main-nav a,.main-nav li{position:relative}.main-nav{padding:0;text-align:center}.main-nav a{padding:1rem .7rem}.main-nav a:hover{background:rgba(0,0,0,.2);transition:color .3s linear}.main-nav a:hover svg{fill:#9dce0a;transition:fill .3s linear}.backlog-sprints-menu,.main-nav a:hover .helper{animation:slideLeft .2s ease-in-out both;padding:.4rem 1rem;transition:all .2s;position:absolute;white-space:nowrap}.main-nav a:hover .helper{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:calc(50% - 1rem);z-index:99}.main-nav a:hover .helper::after{background:#050505;height:12px;left:calc(-12px/2);position:absolute;top:calc(50% - 12px/2);width:12px;z-index:98}.main-nav svg{height:1.7rem;width:1.7rem}.main-nav svg path{opacity:1}.main-nav .helper{display:none}.main-nav .icon{font-size:1.5rem;line-height:2.2rem}.main-nav .item{font-size:1.2rem}.main-nav .active{background:rgba(255,255,255,.95);color:#718377}.main-nav .active svg{fill:#718377;opacity:1;stroke:#718377}@keyframes slideLeft{0%{opacity:0}100%{opacity:1}}.backlog-sprints-menu{font-size:.9rem;background:linear-gradient(to right,#000 0,rgba(0,0,0,.8) 100%);color:#fff;display:block;left:50px;opacity:1;top:1rem;z-index:99}.backlog-sprints-menu a{color:#fff;padding:.6rem .8rem;text-align:left;text-transform:none}.backlog-sprints-menu a:nth-child(2){padding:1rem .8rem .6rem}.backlog-sprints-menu a:last-child{padding:.6rem .8rem .4rem}.backlog-sprints-menu a:hover{background:0 0}.backlog-sprints-menu::after{background:#050505;height:12px;left:calc(-12px/2);position:absolute;top:calc(1rem - 12px/2);width:12px;z-index:98}.related-tasks,.related-tasks-body .status{position:relative}.related-tasks{margin-bottom:2rem}.related-tasks-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-tasks-header .related-tasks-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-tasks-header .add-button{background:#444;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-tasks-header .add-button.is-active,.related-tasks-header .add-button:hover{background:#9dce0a}.related-tasks-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-tasks-body{width:100%}.related-tasks-body .row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}.related-tasks-body .row:hover .task-settings{opacity:1;transition:all .2s ease-in}.related-tasks-body .row .task-name{-ms-flex:1;flex:1}.related-tasks-body .row .task-settings{-ms-flex-negative:0;flex-shrink:0;width:60px}.related-tasks-body .row .status{-ms-flex-negative:0;flex-shrink:0;width:125px}.related-tasks-body .row .assigned-to{cursor:pointer;-ms-flex-negative:0;flex-shrink:0;width:150px}.related-tasks-body .single-related-task:hover{background:rgba(157,206,10,.05)}.related-tasks-body .single-related-task:hover .icon-drag{opacity:1}.related-tasks-body .single-related-task .task-reorder{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .single-related-task .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#e4e3e3;opacity:0;transition:opacity .1s}.issues-table .title div,.issues-table .votes,.related-tasks-body .task-assignedto.editable,.related-tasks-body .task-settings a:hover,.ticket-detail-settings .assign-issue-button.editable,.ticket-detail-settings .button-delete.editable,.ticket-detail-settings .item-block.editable,.ticket-detail-settings .item-unblock.editable,.ticket-detail-settings .promote-button.editable,.ticket-detail-settings label.editable{cursor:pointer}.related-tasks-body .related-task-create-form{padding:0}.related-tasks-body .related-task-create-form.active{padding:.5rem 0 .5rem .5rem}.related-tasks-body .iocaine{background:rgba(157,206,10,.1);border-left:10px solid #9dce0a}.related-tasks-body .task-name{display:-ms-flexbox;display:flex;margin-right:1rem}.related-tasks-body .task-name span{margin-right:.25rem}.related-tasks-body .task-name input{font-size:1rem;margin-right:1rem;padding:3px;width:85%}.related-tasks-body .task-name.loading{margin:0;padding:8px;text-align:center;width:100%}.related-tasks-body .pop-status,.ticket-header .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;list-style-type:none;z-index:99;text-align:"center"}.related-tasks-body .task-name.loading span{animation:loading .5s linear,spin 1s linear infinite}.related-tasks-body .status .not-clickable:hover{color:#444}.related-tasks-body .status .popover{left:0;top:1rem}.related-tasks-body .status .popover a{display:block}.related-tasks-body .status .icon{width:.8rem;height:.8rem;fill:currentColor;margin-left:.2rem}.related-tasks-body .closed,.related-tasks-body .closed:hover{border-left:10px solid #e4e3e3;color:#e4e3e3}.related-tasks-body .closed a,.related-tasks-body .closed svg,.related-tasks-body .closed:hover a,.related-tasks-body .closed:hover svg{fill:#e4e3e3}.related-tasks-body .closed .task-name a,.related-tasks-body .closed:hover .task-name a{color:#e4e3e3;text-decoration:line-through}.related-tasks-body .icon-iocaine{display:none}.related-tasks-body .pop-status{font-size:.9rem;background:#050505;color:#fff;display:none;left:40%;margin:0;padding:10px 1rem 10px 10px;position:absolute;top:0;width:200px}.related-tasks-body .pop-status a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.related-tasks-body .pop-status a:last-child{border:0}.related-tasks-body .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.related-tasks-body .pop-status a:hover.point{color:#fff}.related-tasks-body .pop-status:after{background:#050505;height:15px;position:absolute;width:0}.related-tasks-body .pop-status.fix{bottom:0;top:auto}.related-tasks-body .blocked,.related-tasks-body .blocked:hover{background:rgba(255,130,130,.2);border-left:10px solid #ff8282}.related-tasks-body .task-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;opacity:0}.related-tasks-body .task-settings svg{width:1.1rem;height:1.1rem;fill:#767676;margin-right:.5rem;transition:fill .2s ease-in}.related-tasks-body .task-settings svg:hover{fill:#555}.related-tasks-body .delete-task:hover .icon-edit,.related-tasks-body .edit-task:hover .icon-edit,.related-tasks-body .save-task:hover .icon-edit{fill:#444}.related-tasks-body .delete-task:hover .icon-save,.related-tasks-body .edit-task:hover .icon-save,.related-tasks-body .save-task:hover .icon-save{fill:#5b8200}.related-tasks-body .delete-task:hover .icon-trash,.related-tasks-body .edit-task:hover .icon-trash,.related-tasks-body .save-task:hover .icon-trash{fill:#ff8282}.related-tasks-body .task-assignedto{position:relative}.related-tasks-body .task-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.related-tasks-body .task-assignedto figcaption{max-width:50%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.related-tasks-body .task-assignedto .icon{width:.8rem;height:.8rem;fill:#767676;opacity:0;position:absolute;right:.5rem;top:.5rem;transition:opacity .3s linear}.related-tasks-body .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.related-tasks-body .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}.related-tasks-body .avatar figcaption{margin-left:.5rem}.ticket-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin:1.5rem 0 2rem;position:relative}.ticket-header .ticket-title{font-size:1.6rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;text-transform:uppercase;vertical-align:sub}.ticket-header .detail-status{font-size:.9rem;display:-ms-flexbox;display:flex;margin-left:.25rem;position:relative}.ticket-header .detail-status .icon-arrow-down{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem}.ticket-header .detail-status-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start}.ticket-header .detail-status-inner>span{color:#fff;padding:.15rem .25rem;text-transform:uppercase}.ticket-header .pop-status{font-size:.9rem;background:#050505;color:#fff;display:none;left:0;margin:0;position:absolute;top:1.25rem;width:150px;padding:0;text-transform:none}.ticket-data-container,.ticket-header .pop-status a{font-size:.9rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.ticket-header .pop-status a{border-bottom:1px solid #444;color:#fff;display:block;padding:.5rem 1rem;text-align:left}.ticket-header .pop-status a:last-child{border:0}.ticket-header .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.ticket-header .pop-status a:hover.point{color:#fff}.ticket-header .pop-status:after{background:#050505;height:15px;position:absolute;width:0}.ticket-header .pop-status a:hover{background:rgba(157,206,10,.2)}.ticket-data-container{margin-bottom:1rem}.ticket-status .priority-data .pop-priority,.ticket-status .severity-data .pop-severity,.ticket-status .type-data .pop-type{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;left:30px;top:30px;text-align:"left";font-size:.9rem;z-index:99;list-style-type:none}.ticket-data-container .icon{width:.7rem;height:.7rem;color:currentColor;margin-left:.25rem}.ticket-status .priority-data .pop-priority:after,.ticket-status .severity-data .pop-severity:after,.ticket-status .type-data .pop-type:after{content:'';height:15px;transform:rotate(45deg)}.ticket-status:last-child{margin:0}.ticket-status .level{display:inline-block;margin-right:.5rem;vertical-align:top}.ticket-status .level-name{color:#b2afaf;float:right;text-transform:lowercase}.ticket-status .clickable:hover{background:#cbc9c9;transition:background .2s ease-in}.ticket-status .type-data{background:#d7d6d6;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .type-data .pop-type{background:#050505;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .type-data .pop-type a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .type-data .pop-type a:last-child{border:0}.ticket-status .type-data .pop-type a:hover{color:#9dce0a;transition:color .3s linear}.ticket-status .type-data .pop-type a:hover.point{color:#fff}.ticket-status .type-data .pop-type:after{background:#050505;position:absolute;width:0}.ticket-status .severity-data{background:#d7d6d6;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .severity-data .pop-severity{background:#050505;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-status .severity-data .pop-severity a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .severity-data .pop-severity a:last-child{border:0}.ticket-status .severity-data .pop-severity a:hover{color:#9dce0a;transition:color .3s linear}.ticket-status .severity-data .pop-severity a:hover.point{color:#fff}.ticket-status .severity-data .pop-severity:after{background:#050505;position:absolute;width:0}.ticket-status .priority-data{background:#d7d6d6;margin-bottom:.5rem;padding:.5rem 1rem .5rem .5rem;position:relative;transition:background .2s ease-in}.ticket-status .priority-data .pop-priority{background:#050505;color:#fff;display:none;margin:0;padding:10px;position:absolute;width:150px}.ticket-watch .ticket-watch-button,.ticket-watch svg{margin-right:.25rem}.ticket-status .priority-data .pop-priority a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.ticket-status .priority-data .pop-priority a:last-child{border:0}.ticket-status .priority-data .pop-priority a:hover{color:#9dce0a;transition:color .3s linear}.ticket-status .priority-data .pop-priority a:hover.point{color:#fff}.ticket-status .priority-data .pop-priority:after{background:#050505;position:absolute;width:0}.ticket-watch-buttons{margin-bottom:1rem}.ticket-watch .ticket-watch-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.introjs-tooltip p,.single-project .description,.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.ticket-watch .ticket-watch-inner{display:-ms-flexbox;display:flex}.ticket-watch svg{position:relative;top:2px}.ticket-watch .add-watcher,.ticket-watch .ticket-watch-button{font-size:.9rem;background:#767676;color:#fff;-ms-flex:1;flex:1;padding:.25rem;text-align:center;text-transform:uppercase;transition:background .25s}.ticket-watch .add-watcher svg,.ticket-watch .ticket-watch-button svg{fill:#fff}.ticket-watch .add-watcher:hover,.ticket-watch .ticket-watch-button:hover{background:#9dce0a}.ticket-watch .add-watcher.is-hover,.ticket-watch .ticket-watch-button.is-hover{background:red;color:#e4e3e3;transition:background .3s}.ticket-watch .add-watcher.is-hover svg,.ticket-watch .ticket-watch-button.is-hover svg{fill:#ff8282}.ticket-watch .add-watcher.active,.ticket-watch .ticket-watch-button.active{background:#9dce0a}.ticket-watch .add-watcher.active:hover,.ticket-watch .ticket-watch-button.active:hover{background:#ff8282}.ticket-watch .add-watcher.active svg,.ticket-watch .ticket-watch-button.active svg{fill:#fff}.ticket-detail-settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:2rem}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .button-delete,.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock,.ticket-detail-settings .promote-button,.ticket-detail-settings label{background:#767676;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.ticket-detail-settings .assign-issue-button,.ticket-detail-settings .assign-issue-button+input,.ticket-detail-settings .button-delete+input,.ticket-detail-settings .item-block+input,.ticket-detail-settings .item-unblock+input,.ticket-detail-settings .promote-button+input,.ticket-detail-settings label+input{display:none}.ticket-detail-settings .assign-issue-button:hover,.ticket-detail-settings .button-delete:hover,.ticket-detail-settings .item-block:hover,.ticket-detail-settings .item-unblock:hover,.ticket-detail-settings .promote-button:hover,.ticket-detail-settings label:hover{background:#555}.ticket-detail-settings .assign-issue-button.button-set,.ticket-detail-settings .assign-issue-button.text-button.button-set:hover,.ticket-detail-settings .button-delete.button-set,.ticket-detail-settings .button-delete.text-button.button-set:hover,.ticket-detail-settings .item-block.button-set,.ticket-detail-settings .item-block.text-button.button-set:hover,.ticket-detail-settings .item-unblock.button-set,.ticket-detail-settings .item-unblock.text-button.button-set:hover,.ticket-detail-settings .promote-button.button-set,.ticket-detail-settings .promote-button.text-button.button-set:hover,.ticket-detail-settings label.button-set,.ticket-detail-settings label.text-button.button-set:hover{background:#9dce0a;border-color:#9dce0a}.ticket-detail-settings .assign-issue-button:hover{background:#9dce0a}.ticket-detail-settings .assign-issue-button.button-set:hover,.ticket-detail-settings .item-unblock{background:#ff8282}.ticket-detail-settings .assign-issue-button.is-active{display:inline-block}.ticket-detail-settings .item-block,.ticket-detail-settings .item-unblock{display:none}.ticket-detail-settings .item-block.is-active,.ticket-detail-settings .item-unblock.is-active{display:inline-block}.ticket-detail-settings .item-unblock:hover{background:red}.ticket-detail-settings .button-delete{background:#ff8282}.ticket-detail-settings .button-delete:hover{background:red}.ticket-detail-settings svg{fill:#fff;height:100%;stroke:#fff}.ticket-detail-settings .icon-private{margin:0}.ticket-detail-settings a{display:block}.epic-header-container{display:-ms-flexbox;display:flex}.epic-header-container .color-selector{margin-right:.5rem}.epic-header-container tg-detail-header{-ms-flex:1;flex:1;width:100%}.introjs-overlay{background:radial-gradient(center,ellipse cover,rgba(255,255,255,.2) 0,rgba(228,227,227,.2) 100%);background-color:#e4e3e3}.introjs-helperLayer{border:1px solid rgba(157,206,10,.8)}.introjs-helperLayer,.introjs-tooltip{box-shadow:0 1px 8px rgba(68,68,68,.2)}.introjs-tooltip h3{font-size:1.2rem;margin-bottom:.5rem}.introjs-tooltip p{line-height:1.4;margin-bottom:0}.introjs-bullets ul li a.active{background:#9dce0a}.introjs-button{background-color:#5b8200;background-image:none;border:0;border-radius:0;color:#fff;margin-top:10px;padding:.3rem .8rem;text-shadow:none}.introjs-button:focus,.introjs-button:hover{background:#9dce0a;color:#fff}.introjs-button.introjs-disabled{background:#f5f5f5;background-color:none;color:#fff}.lightbox-generic-notion section{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:600px;flex-basis:600px}.single-project .single-project-intro{display:-ms-flexbox;display:flex;margin-bottom:2rem}.single-project .project-logo{margin-right:1rem;width:6rem}.single-project .like-button,tg-filter .filters-advanced .filter-mode.include{margin-right:.75rem}.single-project .project-logo img{width:100%}.single-project .single-project-title-wrapper{-ms-flex:1;flex:1}.single-project .intro-options{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem}.single-project .intro-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.single-project .intro-title .icon-private{fill:#767676;height:24px;margin-left:.25rem;margin-top:1rem;width:24px}.single-project h1{color:#5b8200;display:inline-block;line-height:1.2;margin-bottom:0;vertical-align:middle}.single-project .private{width:1.1rem;height:1.1rem}.single-project .track-buttons-container{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track{font-size:.9rem;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:end;justify-content:flex-end}.single-project .track-container .list-itemtype-track .list-itemtype-track-likers{margin-right:.5rem}.single-project .track-container .list-itemtype-track-likers,.single-project .track-container .list-itemtype-track-watchers{display:-ms-flexbox;display:flex}.single-project .track-container .list-itemtype-track-likers .icon,.single-project .track-container .list-itemtype-track-watchers .icon{display:block;margin-right:.25rem}.single-project .track-container .list-itemtype-track-likers.active,.single-project .track-container .list-itemtype-track-watchers.active{color:#5b8200}.single-project .track-container .list-itemtype-track-likers.active .icon,.single-project .track-container .list-itemtype-track-watchers.active .icon{fill:currentcolor}.single-project .track-container .icon{fill:#767676}.single-project .description{font-size:1rem;margin:0}.single-project .project-data{display:-ms-flexbox;display:flex}.single-project .title{font-size:1rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;padding:.5rem 1rem}.single-project .single-project-tags{margin-bottom:1rem;margin-top:1rem}.single-project .timeline{-ms-flex:1;flex:1;-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;max-width:960px;width:0}.single-project .looking-for-people img{width:100%}.single-project .looking-for-people h3{font-size:.9rem}.single-project .looking-for-people .is-empty{margin-bottom:.5rem}.single-project .looking-for-people p{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-bottom:.5rem}.single-project .looking-for-people .contact-team{margin-bottom:1rem}.single-project .involved-data{-ms-flex-preferred-size:220px;flex-basis:220px;width:220px}.single-project .involved-team{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1rem}.single-project .involved-team li{-ms-flex-preferred-size:24%;flex-basis:24%;margin-right:.14rem;position:relative}.single-project .involved-team li:nth-child(4n){margin-right:0}.single-project .involved-team a{display:block}.single-project .involved-team img{border-radius:.2rem;width:100%}.single-project .involved-team .icon-badge{width:1.2rem;height:1.2rem;background:rgba(0,0,0,.5);bottom:5%;fill:#9dce0a;padding:.1rem;position:absolute;right:5%;stroke:#9dce0a}.issues-options{-ms-flex-align:center;align-items:center;background-color:#e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end;margin-bottom:2rem}.issues-options .button-bulk{margin-left:.2rem}.issues-table{display:-ms-flexbox;display:flex;margin-bottom:2rem}.issues-table.empty{display:none}.issues-table .row:hover{background:#f0ffcf;transition:background .2s ease-in}.issues-table .row .icon{display:inline}.issues-table .row.is-blocked{background:#ffe8e8}.issues-table .row.is-blocked .blocked-text{color:red;margin-right:.5rem}.issues-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676}.issues-table .title:hover{background:0 0}.issues-table .title .votes{color:#555}.issues-table .table-main{font-size:.9rem;border-bottom:1px solid #dad9d9}.issues-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.issues-table .avatar img{width:35px}.issues-table .avatar figcaption{-ms-flex-preferred-size:60%;flex-basis:60%;-ms-flex-positive:1;flex-grow:1;margin-left:.5rem}.issues-table .level-field{-ms-flex-preferred-size:85px;flex-basis:85px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:85px}.issues-table .votes{color:#555;-ms-flex-preferred-size:75px;flex-basis:75px;-ms-flex-negative:0;flex-shrink:0;text-align:center;width:75px}.issues-table .votes:hover{color:#9dce0a;transition:all .2s linear}.issues-table .votes:hover svg{fill:#9dce0a;transition:all .2s linear}.issues-table .votes.inactive{color:#767676}.issues-table .icon-upvote{width:.75rem;height:.75rem;fill:#555;margin-right:.25rem;vertical-align:middle}.issues-table .icon-arrow-down,.issues-table .icon-arrow-up{width:.7rem;height:.7rem;fill:#767676;margin-left:.25rem;vertical-align:middle}.issues-table .is-voted{color:#9dce0a;transition:all .2s linear}.issues-table .is-voted svg{fill:#9dce0a;transition:all .2s linear}.issues-table .is-voted:hover{color:#ff8282}.issues-table .is-voted:hover svg{fill:#ff8282;transform:rotate(180deg)}.issues-table .pop-status:after,.table-team .popover:after{transform:rotate(45deg);content:''}.issues-table .subject{overflow:hidden;padding-right:1rem;width:100%}.issues-table .subject a{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:block}.issues-table .subject span{vertical-align:middle}.issues-table .subject span:first-child{margin-right:.5rem}.issues-table .assigned-field,.issues-table .issue-field,.issues-table .modified-field{-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding:0 1rem;position:relative;text-align:left}.issues-table .assigned-field .icon,.issues-table .issue-field .icon,.issues-table .modified-field .icon{width:.75rem;height:.75rem;fill:currentColor;margin-left:.25rem;vertical-align:middle}.issues-table .assigned-field{-ms-flex:0 0 160px;flex:0 0 160px;max-width:160px}.issues-table .issue-assignedto{cursor:pointer;position:relative}.issues-table .issue-assignedto:hover .icon{opacity:1;transition:opacity .3s linear}.issues-table .issue-assignedto figcaption{max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.issues-table .issue-assignedto .icon{width:.75rem;height:.75rem;opacity:0;position:absolute;right:0;top:.75rem;transition:opacity .3s linear}.issues-table .pop-status{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:#050505;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;top:20px;width:200px;z-index:99;text-align:"center"}.kanban-table-body .taskboard-column .kanban-column-intro,.search-result-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.issues-table .pop-status a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.issues-table .pop-status a:last-child{border:0}.issues-table .pop-status a:hover{color:#9dce0a;transition:color .3s linear}.issues-table .pop-status a:hover.point{color:#fff}.issues-table .pop-status:after{background:#050505;height:15px;position:absolute;width:0}.issues-table .pop-status.fix{bottom:0;top:auto}@media (max-width:1280px){.issues-table .level-field,.issues-table .modified-field{display:none}}.issues-table .issue-status{display:inline-block}.kanban-table{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;height:100%;overflow:hidden;width:100%}.kanban-table.zoom-0 .task-colum-name,.kanban-table.zoom-0 .taskboard-column{max-width:148px}.kanban-table.zoom-0 .task-colum-name span{padding-right:1rem}.kanban-table .vfold tg-card{display:none}.kanban-table .vfold.task-colum-name{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:.8;padding:.5rem 0;transition:opacity .3s linear}.kanban-table .vfold .kanban-column-intro,.kanban-table .vfold.task-colum-name .option:not(.hunfold),.kanban-table .vfold.task-colum-name .title,.kanban-table .vfold.task-colum-name span{display:none}.kanban-table .vfold.task-colum-name .hunfold{margin:0}.kanban-table .vfold.task-colum-name,.kanban-table .vfold.taskboard-column{-ms-flex-flow:1;flex-flow:1;max-width:30px;min-height:2.5rem;min-width:30px;width:30px}.kanban-table .readonly{cursor:auto}.kanban-table-header{-ms-flex-preferred-size:2.4rem;flex-basis:2.4rem;min-height:2.4rem;position:relative}.kanban-table-header .kanban-table-inner{display:-ms-flexbox;display:flex;overflow:hidden;position:absolute;width:100%}.kanban-table-header .options{display:-ms-flexbox;display:flex}.kanban-table-header .task-colum-name{font-size:1rem;-ms-flex-align:center;align-items:center;color:#555;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;margin:0 5px 0 0;max-width:296px;padding:.5rem 1rem;position:relative;text-transform:uppercase}.kanban-table-header .task-colum-name:last-child{margin-right:0}.kanban-table-header .task-colum-name .title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;width:100%}.kanban-table-header .task-colum-name .title .counter{font-size:.75rem;line-height:1.6;margin:0 .5rem}.kanban-table-header .task-colum-name .title .name{display:inline-block;max-width:65%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.kanban-table-header .task-colum-name .option{margin-right:.3rem}.kanban-table-header .task-colum-name .icon{fill:#767676;height:1rem;transition:color .2s linear;width:1rem}.kanban-table-header .task-colum-name .icon:hover{fill:#5b8200}.kanban-table-body{font-size:1rem;display:-ms-flexbox;display:flex;height:100%;overflow:hidden;overflow-x:auto;width:100%}.kanban-table-body .taskboard-column{-ms-flex-preferred-size:296px;flex-basis:296px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin:0 5px 0 0;max-width:296px;overflow-y:auto;widows:296px;width:296px}.kanban-table-body .taskboard-column:last-child{margin-right:0}.kanban-table-body .taskboard-column .kanban-column-intro{font-size:.9rem;color:#767676;margin:1rem 2rem}.kanban-table-body .taskboard-column .kanban-column-intro.active{color:#050505}.kanban-table-body .taskboard-column .kanban-wip-limit{background:red;border-radius:2px;height:4px;margin:.5rem 0;padding:0}.kanban-table-body .kanban-task-selected.card:not(.gu-transit-multi){box-shadow:0 0 0 1px #9dce0a,2px 2px 4px #cbc9c9}.kanban-table-inner{display:-ms-flexbox;display:flex;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.card-transit-multi{background:#dfdede;border:1px dashed #d0cece;display:none;opacity:1;padding:1rem}.search-filter,.search-result-table,.table-team .hero .row{border-top:1px solid #e4e3e3}.card-transit-multi .fake-img,.card-transit-multi .fake-text{background:#d0cece}.card-transit-multi .fake-us{display:-ms-flexbox;display:flex;margin-bottom:1rem}.card-transit-multi .fake-us:last-child{margin-bottom:0}.card-transit-multi .column{padding-left:.5rem;width:100%}.card-transit-multi .fake-img{-ms-flex-preferred-size:48px;flex-basis:48px;-ms-flex-negative:0;flex-shrink:0;height:48px;width:48px}.card-transit-multi .fake-text{height:1rem;margin-bottom:1rem;width:80%}.card-transit-multi .fake-text:last-child{margin-bottom:0;width:40%}.card.gu-transit-multi .card-transit-multi{display:block}.card.gu-transit-multi .card-inner{display:none}.search-filter{display:-ms-flexbox;display:flex;margin-bottom:0;z-index:9}.search-filter a{background:#fff;color:#767676;display:inline-block;margin-right:1rem;padding:1rem 1.25rem}.search-filter .name,.search-filter a:hover .name{padding-left:5px}.search-filter a:hover{transition:color .3s linear}.search-filter a:hover .icon{fill:currentColor}.search-filter a.active{border-left:1px solid #e4e3e3;border-right:1px solid #e4e3e3;color:#444;position:relative;top:1px}.search-filter a.active .icon{fill:#9dce0a}.search-filter .icon{fill:currentColor;margin-right:.4rem}.search-in input{background:#444;color:#fff}.search-in input::-webkit-input-placeholder{color:#767676}.search-in input::-moz-placeholder{color:#767676}.search-in input:-moz-placeholder{color:#767676}.search-in input:-ms-input-placeholder{color:#767676}.search-in .icon-search-wrapper{position:absolute;right:.7rem;top:.7rem}.search-in .icon-search{fill:#767676}.search-in .loading-spinner{margin-top:.1rem}.search-result-table .row{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.search-result-table .row .ref{margin-right:.5rem}.search-result-table .row .user-stories{overflow:hidden;padding-right:1rem;width:100%}.search-result-table .row .points,.search-result-table .row .sprint,.search-result-table .row .status{-ms-flex:0 0 150px;flex:0 0 150px;-ms-flex-positive:0;flex-grow:0;max-width:150px;padding:0 1rem;text-align:center}.search-result-table .row .assigned-to{-ms-flex:0 0 150px;flex:0 0 150px;max-width:150px;padding:0 1rem}.search-result-table .row-selected{background:#e9ffb5;transition:background .2s ease-in}.search-result-table .user-story-name input{vertical-align:top}.search-result-table .user-story-name span{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.search-result-table .user-story-name .icon{font-size:1rem;color:#767676}.search-result-table .user-story-name .icon:hover{color:#444;transition:color .3s linear}.search-result-table .table-main{font-size:.9rem;border-bottom:1px solid #e4e3e3}.search-result-table .points,.search-result-table .sprint,.search-result-table .status{position:relative}.search-result-table .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.search-result-table .avatar img{width:35px}.search-result-table .avatar .avatar-caption{display:block;margin-left:.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:80px}.team-filters .search-in{margin-bottom:1rem;position:relative}.team-filters li{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676;text-transform:uppercase}.table-team .attribute,.table-team .attribute .points{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.team-filters li:last-child{border-bottom:0}.team-filters li .icon{fill:#050505;opacity:0;transition:opacity .3s linear}.team-filters a{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 0 1rem 1rem}.team-filters a.active,.team-filters a:hover{color:#5b8200;transition:color .3s linear}.team-filters a.active .icon,.team-filters a:hover .icon{fill:currentColor;opacity:1}.team-filters .active{opacity:1;transition:opacity .3s linear}.table-team .row{padding:.5rem}.table-team .username{-ms-flex-preferred-size:220px;flex-basis:220px;min-width:25%}.table-team .member-stats{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:6;flex:6;-ms-flex-pack:end;justify-content:flex-end}.table-team .attribute{-ms-flex:1;flex:1;position:relative;text-align:center}.table-team .attribute .icon{width:1.75rem;height:1.75rem;fill:#555}.table-team .attribute .points{font-size:1.6rem;color:#444}.table-team .attribute .top{fill:#9dce0a;opacity:1}.table-team .attribute:hover .popover{display:block}.table-team .leave-project{font-size:.9rem;color:#ff8282}.table-team .leave-project .icon{width:.8rem;height:.8rem;fill:currentColor;margin-right:.2rem}.table-team .leave-project:hover{color:red}.table-team .leave-project:hover .icon{color:currentColor;transition:fill .3s linear}.table-team .team-header{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:0}.table-team .hero{width:100%}.table-team .hero .row{border-bottom:1px solid #e4e3e3;margin:1rem 0;padding:1.5rem 1rem}.table-team .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.table-team .avatar img{-ms-flex-preferred-size:66px;flex-basis:66px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;width:66px}.table-team .avatar .avatar-data{margin-left:1rem}.table-team .avatar .avatar-data span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.table-team .avatar .name,.table-team .avatar .position{display:block;width:100%}.table-team .avatar .name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.table-team .avatar .position,.table-team .popover{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.table-team .avatar .position{color:#767676}.table-team .popover{font-size:.9rem;background:#050505;bottom:30px;color:#fff;display:none;left:0;list-style-type:none;margin:0;padding:10px;position:absolute;width:100%;z-index:99;text-align:"center"}.table-team .popover a{font-size:.9rem;border-bottom:1px solid #444;color:#fff;display:block;padding:10px 2px}.table-team .popover a:last-child{border:0}.table-team .popover a:hover{color:#9dce0a;transition:color .3s linear}.table-team .popover a:hover.point{color:#fff}.table-team .popover:after{background:#050505;bottom:-5px;height:15px;left:50%;position:absolute;width:15px}.table-team .icon-badge{fill:#9dce0a;position:relative;stroke:#9dce0a;top:.15rem}.policy-table .policy-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.policy-table .policy-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #767676}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none,.policy-table .policy-table-project{padding:1rem}.policy-table .policy-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.policy-table .policy-table-all,.policy-table .policy-table-enabled,.policy-table .policy-table-involved,.policy-table .policy-table-none{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.policy-table input{display:none}.policy-table input:checked+label{background:#5b8200;transition:background .3s linear}.policy-table label{background:#767676;border-radius:5px;color:#fff;display:block;padding:.5rem}.policy-table label:hover{background:#9dce0a;cursor:pointer;transition:background .3s linear}.project-settings-table .project-settings-table-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.project-settings-table .project-settings-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:2px solid #767676}.project-settings-table .project-settings-table-homepage,.project-settings-table .project-settings-table-project{padding:1rem}.project-settings-table .project-settings-table-project{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:3;flex-grow:3}.project-settings-table .project-settings-table-homepage{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1}.user-change-password fieldset{margin-bottom:1rem;width:50%}.user-change-password fieldset:last-child{margin-top:2rem}.user-change-password label{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:block;margin-bottom:.5rem}.user-change-password .button-green{color:#fff;display:block;padding:12px;text-align:center}.user-profile{max-width:780px}.user-profile form{display:-ms-flexbox;display:flex}.user-profile fieldset{margin-bottom:1rem}.user-profile label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;display:block;margin-bottom:.2rem}.user-profile .project-details-image{-ms-flex-negative:0;flex-shrink:0;-ms-flex-positive:0;flex-grow:0;width:180px;margin-right:2rem}.user-profile .project-details-image .image,.user-profile .submit-button{width:100%}.user-profile .change-image{display:block}.user-profile .image-container{position:relative;margin-bottom:.5rem}.user-profile .loading-overlay{display:none}.user-profile .loading-overlay.active{-ms-flex-align:center;align-items:center;background:rgba(5,5,5,.8);bottom:0;display:-ms-flexbox;display:flex;left:0;position:absolute;right:0;top:0;width:100%}.user-profile .loading-spinner{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;max-height:1rem;max-width:1rem;border:0;transform-origin:center center}.filters-cats ul,.wiki-nav .wiki-link-container.wiki-all-links{border-top:1px solid #767676}.user-profile .use-default-image{font-size:1rem;display:block;margin-top:.25rem;text-align:center}.user-profile .use-default-image:hover{color:red}.user-profile .project-details-form-data{-ms-flex:1;flex:1;max-width:500px}@media (max-width:767px){.user-profile form{display:block}}.user-profile .actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-top:.5rem}.user-profile .delete-account,.user-profile .download-profile{font-size:.9rem;display:block;-ms-flex:1;flex:1;margin-top:.5rem}.user-profile .delete-account{text-align:right}.wiki-nav{padding:0;width:240px}.wiki-nav .title{font-size:1.6rem;padding:2rem 1rem 0 2rem}.wiki-nav .add-button{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:1rem 1rem 1rem 2rem;text-transform:uppercase;vertical-align:middle}.wiki-nav .add-button:hover svg{background:#9dce0a}.wiki-nav .add-button svg{width:1.25rem;height:1.25rem;background:#767676;border-radius:2px;fill:#fff;margin-right:.5rem;padding:.25rem;transition:background .2s linear}.wiki-nav .wiki-link-container{margin:0}.wiki-nav input[type=text]{background:#e4e3e3;color:#444;margin:1rem 1rem 1rem 2rem;width:80%}.wiki-nav input[type=text]::-webkit-input-placeholder{color:#767676}.wiki-nav input[type=text]::-moz-placeholder{color:#767676}.wiki-nav input[type=text]:-moz-placeholder{color:#767676}.wiki-nav input[type=text]:-ms-input-placeholder{color:#767676}.wiki-nav .loading{padding:1rem;text-align:center}.wiki-link{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-left:2rem;padding-right:1rem;position:relative}.wiki-link:hover .remove-wiki-page{cursor:pointer;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link:hover .dragger{cursor:move;opacity:1;transition:opacity .2s linear;transition-delay:.1s}.wiki-link.gu-mirror{border-bottom:0}.wiki-link.fixed-link{font-size:1.2rem;text-transform:uppercase}.wiki-link.is-sortable{cursor:move}.wiki-link .link-title{cursor:pointer;display:block;-ms-flex-positive:1;flex-grow:1;padding:1rem 0}.wiki-link .dragger{fill:#767676;left:-1rem;opacity:0;position:absolute;top:1rem}.wiki-link .dragger svg{width:.7rem;height:.7rem}.wiki-link .remove-wiki-page{opacity:0}.wiki-link .remove-wiki-page:hover .icon{fill:red}.wiki-pages-table{display:-ms-flexbox;display:flex}.wiki-pages-table .row{padding:.5rem}.wiki-pages-table .title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.wiki-pages-table .table-main{font-size:.9rem}.wiki-pages-table .title-field{-ms-flex-preferred-size:180px;flex-basis:180px;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0}.wiki-pages-table .created-field,.wiki-pages-table .modified-field{-ms-flex-preferred-size:10vw;flex-basis:10vw;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.wiki-pages-table .editions-field{-ms-flex-preferred-size:80px;flex-basis:80px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem;text-align:center}.wiki-pages-table .creator-field,.wiki-pages-table .last-modifier-field{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:200px;flex-basis:200px}.wiki-pages-table .creator-field .user-avatar,.wiki-pages-table .last-modifier-field .user-avatar{-ms-flex-positive:0;flex-grow:0}.wiki-pages-table .creator-field .user-avatar img,.wiki-pages-table .last-modifier-field .user-avatar img{height:2rem}.wiki-pages-table .creator-field .user-full-name,.wiki-pages-table .last-modifier-field .user-full-name{-ms-flex-positive:1;flex-grow:1;padding:.5rem}.wiki-summary{-ms-flex-align:center;align-items:center;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.wiki-summary.summary{background:#f5f5f5;color:#555}.wiki-summary div{display:-ms-flexbox;display:flex;margin-right:1.25rem}.wiki-summary .wiki-user-modification{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.wiki-summary .avatar{margin-right:.5rem;width:2.25rem}.wiki-summary img{height:100%;width:100%}.wiki-summary .username{font-size:1.2rem;white-space:nowrap}.wiki-summary .remove{fill:#767676;margin-left:auto;transition:fill .1s linear}.wiki-summary .remove:hover{cursor:pointer;fill:#ff8282}.wiki-summary .remove svg{width:1.5rem;height:1.5rem}.attachment-gallery{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;margin-top:1rem}.attachment-gallery .single-attachment{margin-bottom:.5rem;margin-right:.5rem;max-width:200px}.attachment-gallery .single-attachment:hover .icon-delete{opacity:1}.attachment-gallery .single-attachment .attachment-name{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;max-width:175px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;display:inline-block}.attachment-gallery .attachment-image{display:inline-block}.attachment-gallery img{height:150px;margin-bottom:.2rem;width:200px}.attachment-gallery img:hover{filter:saturate(150%) hue-rotate(60deg);transition:all .3s cubic-bezier(.01,.7,1,1)}.attachment-gallery.deprecated img{opacity:.5}.attachment-gallery.deprecated .attachment-name{color:#767676}.attachment-gallery .attachment-data{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.attachment-gallery .icon-delete{margin-left:auto;opacity:0;transition:opacity .2s ease-in;transition-delay:.1s}.attachment-gallery .icon-delete svg{fill:#ff8282}.attachment-gallery .icon-delete:hover svg{color:red}.attachment-gallery .loading-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:150px;-ms-flex-pack:center;justify-content:center;margin:0 .5rem .5rem 0;width:200px}.attachment-gallery .loading-spinner{margin:0 auto;max-height:3rem;max-width:3rem}.attachment-list .single-attachment{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem;position:relative}.attachment-list .single-attachment:hover .settings{opacity:1;transition:opacity .2s ease-in}.attachment-list .single-attachment.deprecated,.attachment-list .single-attachment.deprecated .attachment-name a{color:#767676}.attachment-list .attachment-name{display:inline-block;max-width:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:0;flex-shrink:0;padding-right:1rem}.attachment-list .attachment-comments,.attachment-list .editable-attachment-comment{-ms-flex:2;flex:2;-ms-flex-preferred-size:50%;flex-basis:50%;margin-right:.5rem}.attachment-list .attachment-comments span,.attachment-list .editable-attachment-comment span{color:#555}.attachment-list .attachment-size{-ms-flex-preferred-size:125px;flex-basis:125px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.attachment-list .attachment-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:10%;flex-basis:10%;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:distribute;justify-content:space-around;margin-left:auto}.attachment-list .attachment-settings .settings{opacity:0}.attachments .gu-mirror,.card-owner:hover .card-owner-actions{opacity:1}.attachment-list .attachment-settings .editable-settings{display:block;opacity:1}.attachment-list .attachment-settings svg{fill:#767676;pointer-events:none}.attachment-list .attachment-settings .icon-edit:hover,.attachment-list .attachment-settings .icon-save:hover{fill:#5b8200}.attachment-list .attachment-settings .icon-close:hover,.attachment-list .attachment-settings .icon-trash:hover{fill:red}.attachment-list .attachment-settings .icon-drag{cursor:move}.attachment-list .editable-attachment-deprecated{display:-ms-flexbox;display:flex;padding-left:1rem}.attachment-list .editable-attachment-deprecated span{color:#767676}.attachment-list .editable-attachment-deprecated input{margin-right:.2rem;vertical-align:middle}.attachment-list .editable-attachment-deprecated input:checked+span{color:#444}.attachment-list .percentage{background:rgba(91,130,0,.1);bottom:0;height:40px;left:0;position:absolute;top:0;width:45%}.attachments{margin-bottom:4rem}.attachments .gu-transit{background:#e4e3e3;height:40px}.attachments .gu-transit *{display:none}.attachments .gu-mirror form{background:#e9ffb5;box-shadow:1px 1px 10px rgba(0,0,0,.1);transition:background .2s ease-in}.attachments-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.attachments-header .attachments-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1rem;color:#444;line-height:36px;padding:0 1rem}.attachments-header .options{display:-ms-flexbox;display:flex}.attachments-header label{cursor:pointer;margin-left:.25rem}.attachments-header label.add-attachment-button{background:#555;border:0;display:inline-block;padding:.5rem;transition:background .25s}.attachments-header label.add-attachment-button:hover{background:#9dce0a}.attachments-header label svg{fill:#fff;height:1.2rem;margin-bottom:-.2rem;width:1.2rem}.attachments-header button{background:0 0;margin-right:.2rem}.attachments-header button.is-active svg,.attachments-header button:hover svg{fill:#9dce0a}.attachments-header button svg{fill:#767676;height:1.6rem;width:1.6rem}.attachments-header .size-info{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;padding-left:1rem}.attachments-empty,.single-attachment .attachment-name{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.more-attachments span,.single-attachment .attachment-size{color:#767676}.attachments-header input{display:none}.attachments-empty{font-size:1.2rem;border:3px dashed #e4e3e3;color:#767676;margin-top:.5rem;padding:1rem;text-align:center}.single-attachment{font-size:.9rem;background:rgba(255,255,255,.9)}.single-attachment .attachment-name{padding-right:1rem}.single-attachment .attachment-name svg{fill:#555;height:.9rem;margin-right:.25rem;width:.9rem}.more-attachments{font-size:.9rem;border-bottom:1px solid #767676;display:block;padding:1rem 0 1rem 1rem}.more-attachments .more-attachments-num{color:#5b8200;margin-left:.5rem}.more-attachments:hover{background:#e9ffb5;transition:background .2s ease-in}.attachment-preview .attachment-preview-container svg{width:3rem;height:3rem;fill:#767676}.attachment-preview .attachment-preview-container svg:hover{fill:#9dce0a;transition:fill .3s linear}.attachment-preview .previous{left:3rem;position:absolute;top:calc(50% - 3rem)}.attachment-preview .next{position:absolute;right:3rem;top:calc(50% - 3rem)}.attachment-preview img{max-height:80vh;max-width:80vw}.assignable-member-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:.25rem 0}.assigned-members-option .assignable-member-single{background:#fff;border-bottom:1px solid #e4e3e3;cursor:pointer}.assignable-member-single:hover{background:rgba(157,206,10,.05)}.assignable-member-single .assignable-member-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:.5rem;max-height:3rem;max-width:3rem}.assignable-member-single .assignable-member-name{-ms-flex:1;flex:1}.assigned-to-container{width:600px}.assignable-member-list{margin-top:1rem}.assignable-member-list .assigned-member{-ms-flex-align:center;align-items:center;background:rgba(157,206,10,.05);border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.assignable-member-list .unassign-epic{cursor:pointer;margin-right:1rem}.assignable-member-list .icon{fill:#ff8282;transition:fill .2s}.assignable-member-list .icon:hover{cursor:pointer;fill:red}.belong-to-epic-pill-wrapper{display:inline-block;position:relative}.belong-to-epic-pill-wrapper:hover .belong-to-epic-pill-data{display:block}.belong-to-epics-list{margin-bottom:.5rem}.belong-to-epics-list svg{position:relative;top:.1rem}.belong-to-epics-list.unique,.belong-to-epics-list.unique li{display:inline-block}.belong-to-epics-list.unique li svg{top:.2rem}.belong-to-epic-text-wrapper{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:25%;flex-basis:25%;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start;padding-top:.25rem}.belong-to-epic-text-wrapper .remove-epic-relationship{display:inline-block;line-height:.5rem;margin-left:.5rem}.belong-to-epic-text-wrapper:hover .remove-epic-relationship svg{visibility:visible}.belong-to-epic-label{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;background:#444;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.belong-to-epic-pill{background-color:#f5f5f5;border-radius:50%;display:inline-block;height:.7rem;margin:0 .1rem;position:relative;width:.7rem}.range-slider{-webkit-appearance:none;display:block;margin:7px 0;width:200px}.range-slider:focus{outline:0}.range-slider:focus::-webkit-slider-runnable-track{background:#8da08e}.range-slider:focus::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(68,68,68,.3)}.range-slider:focus::-moz-range-thumb{box-shadow:0 0 0 4px rgba(68,68,68,.3)}.range-slider:focus::-ms-fill-lower{background:#e4e3e3}.range-slider:focus::-ms-fill-upper{background:#e9e8e8}.range-slider::-webkit-slider-runnable-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#e4e3e3;border:0 solid transparent;border-radius:1px}.range-slider::-webkit-slider-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#444;cursor:pointer;box-shadow:0 0 0 2px rgba(68,68,68,.3);transition:box-shadow .2s;-webkit-appearance:none;margin-top:-5.5px}.range-slider::-moz-range-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:#e4e3e3;border:0 solid transparent;border-radius:1px}.range-slider::-moz-range-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#444;cursor:pointer;box-shadow:0 0 0 2px rgba(68,68,68,.3);transition:box-shadow .2s}.range-slider::-ms-track{width:200px;height:3px;cursor:pointer;transition:all .2s ease;background:0 0;border-color:transparent;border-width:14px 0;color:transparent}.range-slider::-ms-fill-lower{background:#dfdede;border:0 solid transparent;border-radius:2px}.range-slider::-ms-fill-upper{background:#e4e3e3;border:0 solid transparent;border-radius:2px}.range-slider::-ms-thumb{border:0 solid transparent;height:14px;width:14px;border-radius:50%;background:#444;cursor:pointer;box-shadow:0 0 0 2px rgba(68,68,68,.3);transition:box-shadow .2s}.card{box-shadow:2px 2px 4px #cbc9c9;cursor:move;display:block;margin:0 .6rem .6rem;outline:0;overflow:hidden;transition:box-shadow .2s ease-in}.card .loading-extra.loading{padding:.2rem;text-align:center}.card:hover{box-shadow:3px 3px 6px #cbc9c9}.card-inner{background:#fff;border-radius:.25rem}.card-inner.zoom-0 .card-title,.card-inner.zoom-1 .card-title{-ms-flex:1;flex:1;margin:0;padding:.25rem}.card-inner.zoom-1 .card-owner-info{-ms-flex-align:start;align-items:flex-start}.card-inner.card-blocked{background:#ff8282}.card-inner.card-blocked .card-owner-actions,.card-inner.card-blocked .card-unfold:hover{background:rgba(255,130,130,.9)}.card-inner.card-blocked .card-estimation,.card-inner.card-blocked .card-owner-name,.card-inner.card-blocked .card-title a,.card-inner.card-blocked .statistic{color:#fff}.card-inner.card-blocked .card-task a.blocked-task{color:red}.card-inner.card-blocked .card-owner-actions a:hover,.card-inner.card-blocked .statistic.active,.card-inner.card-blocked.zoom-0 .card-title,.card-inner.card-blocked.zoom-1 .card-title{color:#fff}.card-inner.card-blocked svg{fill:#fff}.card-owner-actions:hover svg,.card-statistics .statistic.active svg{fill:currentColor}.card-tags{display:-ms-flexbox;display:flex}.card-tags .card-tag{display:block;-ms-flex:1;flex:1;height:.5rem}.card-owner{position:relative}.card-owner .card-owner-info{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.card-owner .card-owner-info.multiple .card-owner-avatar img{margin-right:.45rem}.card-owner .card-owner-avatar{line-height:0;position:relative}.card-owner .is-iocaine{filter:hue-rotate(265deg) saturate(3)}.card-owner img{-ms-flex-negative:0;flex-shrink:0;height:2.5rem;margin-right:.5rem;width:2.5rem}.card-owner .card-owner-name{color:#767676}.card-owner-actions{background:rgba(255,255,255,.9);display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;left:0;opacity:0;position:absolute;top:0;transition:all .2s;width:100%}.card-owner-actions:hover{color:#9dce0a}.card-owner-actions .card-actions{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:0 0 0 .5rem}.card-owner-actions .card-delete:hover{color:#ff8282}.card-owner-actions .icon{width:1.2rem;height:1.2rem;display:inline-block;margin-right:.25rem;padding:0}.card-owner-actions a{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;padding:.6rem .5rem}.card-title{font-size:1rem;line-height:1.25;margin-bottom:.25rem;padding:1rem 1rem 0}.card-title span{padding-right:.25rem}.card-data{color:#767676;display:-ms-flexbox;display:flex;font-size:14px;-ms-flex-pack:justify;justify-content:space-between;padding:0 1rem .5rem}.card-data .card-status-tag{font-size:.75rem;height:.1rem;line-height:.1rem;padding:0 .5em 0 0}.card-data .card-estimation.not-estimated{font-size:.8125rem}.card-statistics{font-size:.9rem;color:#b6b6b6;display:-ms-flexbox;display:flex;margin-left:auto}.card-statistics .statistic{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;margin-left:.5rem}.card-statistics .statistic.active{color:#9dce0a}.card-statistics .statistic.card-iocaine{cursor:help}.card-statistics .statistic.card-votes{margin-left:.2rem}.card-statistics .statistic.card-due-date{margin-left:.1rem}.card-statistics .icon{width:.75rem;height:.75rem;fill:#b6b6b6;margin-right:.2rem}.card-statistics .icon-iocaine{fill:#810061}.card-completion{margin:0 1rem .5rem;position:relative}.card-completion:hover .card-tooltip{display:block}.card-completion .card-completion-bar{background:#e4e3e3;height:.4rem;width:100%}.card-completion .card-completion-percentage{background:#9dce0a;cursor:pointer;height:.4rem;left:0;position:absolute;top:0}.card-completion .card-tooltip{background:#050505;border-radius:5px;color:#fff;display:none;font-size:14px;left:calc(25% - 50px);padding:.25rem 1rem;position:absolute;text-align:center;top:-2.25rem;width:100px}.card-completion .card-tooltip::after{background:#000;content:'';height:10px;left:50%;position:absolute;top:70%;transform:rotate(45deg);width:10px}.color-selector .tag-color.empty-color:after,.color-selector .tag-color.empty-color:before{content:"";top:0;height:48px;width:2px;background:#ff8282;position:absolute}.card-unfold{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin:0;outline:0;padding:.25rem}.card-unfold:hover{background:linear-gradient(to bottom,#fff,#fcfcfc)}.card-unfold svg{width:2rem;height:.3rem;fill:#e4e3e3}.card-tasks{border-top:1px solid #e4e3e3;margin:.5rem 0 0;padding:0}.card-task{font-size:.75rem;border-bottom:1px solid #e4e3e3}.card-task a{color:#767676;display:block;overflow:hidden;padding:.5rem .75rem;text-overflow:ellipsis;transition:color .2s;white-space:nowrap}.card-task a.blocked-task{color:#ff8282}.card-task a.closed-task{color:#767676;text-decoration:line-through}.card-task a:hover{color:#5b8200}.detail-header-container.blocked,.detail-header-container.blocked .detail-number,.detail-header-container.blocked .detail-subject,.detail-header-container.blocked a{color:#fff}.card-slideshow{position:relative}.card-slideshow:hover .slideshow-left,.card-slideshow:hover .slideshow-right{background:rgba(255,255,255,.2);padding:.25rem;transition:background .2s}.card-slideshow .slideshow-icon{cursor:pointer;position:absolute;top:35%}.card-slideshow .slideshow-icon:hover{background:rgba(157,206,10,.5);transition:background .2s}.card-slideshow svg{width:1.2rem;height:1.2rem;transition:fill .2s}.card-slideshow .slideshow-left,.card-slideshow .slideshow-right{background:0 0;padding:.25rem}.card-slideshow .slideshow-left{left:0}.card-slideshow .slideshow-right{right:0}.card-slideshow img{width:100%}.card-slideshow-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:120px;-ms-flex-pack:center;justify-content:center;overflow:hidden}.card-slideshow-wrapper .loading-spinner{min-height:3rem;min-width:3rem}.color-selector{position:relative}.color-selector .tag-color{cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;border:1px solid #767676;border-radius:0;margin:0;transition:background .3s ease-out}.color-selector .tag-color:nth-child(7n){margin-right:0}.color-selector .tag-color.disabled{cursor:auto}.color-selector .tag-color.empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.color-selector .tag-color.empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector .tag-color.empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.color-selector-dropdown{background:#050505;left:0;padding:1rem;position:absolute;top:2.25rem;width:332px;z-index:99}.color-selector-dropdown-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;list-style-type:none;margin-bottom:0}.color-selector-dropdown-list .color-selector-option{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0}.color-selector-dropdown-list .color-selector-option:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;margin:0 .5rem .5rem 0;background:#f5f5f5;border:1px solid #e4e3e3;position:relative}.color-selector-dropdown-list .empty-color:after,.color-selector-dropdown-list .empty-color:before{width:2px;height:48px;background:#ff8282;position:absolute;top:0;content:""}.color-selector-dropdown-list .empty-color:nth-child(7n){margin-right:0}.color-selector-dropdown-list .empty-color:after{transform:rotate(-45deg);left:0;transform-origin:top}.color-selector-dropdown-list .empty-color:before{transform:rotate(45deg);right:0;transform-origin:top}.custom-color-selector{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.custom-color-selector .custom-color-input{margin:0;width:100%}.custom-color-selector .display-custom-color-wrapper{background:#f5f5f5;margin-right:.5rem}.custom-color-selector .display-custom-color{border-radius:2px;cursor:pointer;height:2.25rem;width:2.25rem;min-width:2.25rem;-ms-flex-negative:0;flex-shrink:0;margin:0}.custom-color-selector .display-custom-color:nth-child(7n){margin-right:0}.custom-color-selector .display-custom-color.empty-color{background:#f5f5f5;border:1px solid #e4e3e3;position:relative;cursor:default}.custom-color-selector .display-custom-color.empty-color:after{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(-45deg);position:absolute;top:0;left:0;transform-origin:top}.custom-color-selector .display-custom-color.empty-color:before{content:"";width:2px;height:48px;background:#ff8282;transform:rotate(45deg);position:absolute;top:0;right:0;transform-origin:top}.detail-header-container{background:#f5f5f5;-ms-flex:1;flex:1;padding:1rem;position:relative}.detail-header-container.blocked,.detail-title-wrapper.blocked{background:red;transition:all .2s linear}.detail-header-container:hover .detail-edit{opacity:1}.detail-header-container.blocked svg{fill:#fff}.detail-header-container .belong-to-epics-wrapper,.detail-header-container .block-desc-container,.detail-header-container .issue-external-reference,.detail-header-container .item-generated-us,.detail-header-container .item-origin-issue,.detail-header-container .task-belongs-to{font-size:.9rem;margin-top:.5rem}.detail-header-container .relate-to-epic-button{color:#767676;cursor:pointer;display:inline-block}.detail-header-container .relate-to-epic-button:hover{color:#9dce0a}.detail-header-container .relate-to-epic-button .icon-epics{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.detail-header-container .relate-to-epic-button .relate-to-epic-text{font-size:.9rem}.detail-title-wrapper,.edit-title-wrapper{font-size:1.6rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.detail-header-container .issue-external-reference a,.detail-header-container .item-generated-us a,.detail-header-container .item-origin-issue a,.detail-header-container .task-belongs-to a{cursor:pointer;padding:0 .2rem}.detail-header-container .issue-external-reference .item-ref,.detail-header-container .item-generated-us .item-ref,.detail-header-container .item-origin-issue .item-ref,.detail-header-container .task-belongs-to .item-ref{padding:0 .2rem}.detail-title-wrapper{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;max-width:95%;position:relative;transition:all .2s linear}.detail-title-wrapper .detail-title-text{line-height:normal;margin:0}.detail-title-wrapper .detail-number{color:#767676;-ms-flex-negative:0;flex-shrink:0;margin-right:.5rem}.detail-title-wrapper .detail-subject{color:#555;-ms-flex-positive:1;flex-grow:1}.detail-title-wrapper .detail-edit{cursor:pointer;margin-left:.75rem;opacity:0;transition:opacity .2s}.detail-title-wrapper .detail-edit svg,.detail-title-wrapper .due-date-icon svg{width:1.3rem;height:1.3rem}.detail-title-wrapper.readonly .due-date-icon{margin-left:2.7rem}.edit-title-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-input{background:#fff;-ms-flex:1;flex:1}.edit-title-wrapper .edit-title-button{background:0 0;display:inline;transition:fill .2s}.due-date-icon,.issue-nav a{display:inline-block}.edit-title-wrapper .edit-title-button:hover{fill:#5b8200}.edit-title-wrapper .save-title-button{margin-left:1rem}.block-desc-container .block-description-title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-right:.5rem}.issue-nav{position:absolute;right:1rem;top:1rem}.issue-nav svg{width:1.2rem;height:1.2rem;fill:currentColor}.due-date-button,[disabled].due-date-button{background:#767676;display:inline-block;margin-right:.5rem;padding:1rem;transition:background .2s linear;transition-delay:.1s}.due-date-button.closed,.due-date-button.text-button.closed:hover,[disabled].due-date-button.closed,[disabled].due-date-button.text-button.closed:hover{background:#B8B8B8;border-color:#B8B8B8}.due-date-button.due-set,.due-date-button.text-button.due-set:hover,[disabled].due-date-button.due-set,[disabled].due-date-button.text-button.due-set:hover{background:#9dce0a;border-color:#9dce0a}.due-date-button.due-soon,.due-date-button.text-button.due-soon:hover,[disabled].due-date-button.due-soon,[disabled].due-date-button.text-button.due-soon:hover{background:#fcaf3e;border-color:#fcaf3e}.due-date-button.past-due,.due-date-button.text-button.past-due:hover,[disabled].due-date-button.past-due,[disabled].due-date-button.text-button.past-due:hover{background:#ff8282;border-color:#ff8282}.due-date-button:hover,[disabled].due-date-button:hover{background:#555}.due-date-button.editable,[disabled].due-date-button.editable{cursor:pointer}.due-date-button.text-button,[disabled].due-date-button.text-button{color:#fff;margin:0;padding:.5rem}.due-date-button.text-button.not-set:hover,[disabled].due-date-button.text-button.not-set:hover{color:#fff}.due-date-button.text-button.not-set,[disabled].due-date-button.text-button.not-set{color:#555}.due-date-icon{margin:0 .25rem;position:relative}.due-date-icon svg{fill:#767676;transition:fill .2s ease-in}.due-date-icon.closed svg{fill:#B8B8B8}.due-date-icon.due-set svg{fill:#9dce0a}.due-date-icon.due-soon svg{fill:#fcaf3e}.due-date-icon.past-due svg{fill:#ff8282}.backlog-table-body .user-story-name .due-date-icon,.related-tasks .task-name .due-date-icon{top:.1rem}.issues-table .subject .due-date-icon{top:.25rem}.card-statistics .due-date-icon{margin:.1rem 0 0}.card-statistics .due-date-icon svg{height:.9rem;width:.9rem}.due-date-button-wrapper{display:-ms-flexbox;display:flex;position:relative}.date-picker-container{overflow:visible}.date-picker-popover{background:#fff;border:1px solid #555;left:0;overflow:visible;position:absolute;top:0;width:auto}.date-picker-popover .pika-single.is-bound{border:0;box-shadow:none}.date-picker-popover-footer{padding:.2rem .5rem;text-align:right}.date-picker-popover-footer svg{fill:#555;height:1rem;width:1rem}.date-picker-popover-footer a:hover svg{fill:red}tg-filter{background-color:#f5f5f5;display:block;left:0;max-height:100%;min-height:100%;overflow-y:scroll;padding:1rem 0;position:absolute;top:0;transform:translateX(-260px);transition-duration:.5s;width:260px;z-index:1}tg-filter .filters-applied{padding:0 1rem 1rem}tg-filter .filters-applied .single-filter.exclude{background:#fcc;text-decoration:line-through}tg-filter .filters-applied .single-filter:hover{color:currentColor;cursor:default;transition:none}.move-to-sprint-button:not(.disabled),.search-list .choice,.single-filter,tg-filter .filters-advanced .filter-mode{cursor:pointer}tg-filter .filters-advanced{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.75rem;font-size:10pt;font-weight:600;padding:0 1rem 1rem}.wysiwyg b,.wysiwyg dl dt,tg-wysiwyg .mention{font-weight:700}tg-filter .filters-advanced .collapsed.exclude{color:#ff8282}tg-filter .filters-advanced a .icon{margin-left:5px;vertical-align:bottom;width:.5rem}.single-filter .name img,.tag img{vertical-align:middle}tg-filter .filters-advanced .filters-advanced-form{padding:.75rem 0;text-align:center}tg-filter .filters-advanced .custom-radio{display:inline}tg-filter .filters-advanced .custom-radio input[type=radio]{display:none}tg-filter .filters-advanced .filter-mode.active .radio-mark-inner{opacity:1}tg-filter .filters-advanced .filter-mode.active.include{color:#5b8200}tg-filter .filters-advanced .filter-mode.active.exclude{color:#ff8282}tg-filter .filters-advanced .radio-mark,tg-filter .filters-advanced .radio-mark-inner{border-radius:50%;display:inline-block}tg-filter .filters-advanced .radio-mark{background:#d6d5d5;height:22px;margin-right:3px;text-align:center;width:22px}tg-filter .filters-advanced .radio-mark-inner{height:14px;margin-top:4px;opacity:0;width:14px}tg-filter .filters-advanced .radio-mark-inner.include{background:#5b8200}tg-filter .filters-advanced .radio-mark-inner.exclude{background:#ff8282}tg-filter form,tg-filter h1{padding:0 1rem}tg-filter input{background:#444;color:#fff;padding-right:2rem}tg-filter input::-webkit-input-placeholder{color:#767676}tg-filter input::-moz-placeholder{color:#767676}tg-filter input:-moz-placeholder{color:#767676}tg-filter input:-ms-input-placeholder{color:#767676}tg-filter .search-action{position:absolute;right:.7rem;top:.7rem}tg-filter.open{box-shadow:1px 1px 5px rgba(91,130,0,.2);transform:translateX(0)}.filter-list{overflow-y:auto;padding:1rem}.filters-step-cat{margin-top:2rem}.filters-cats ul{margin-bottom:0}.filters-cats li{border-bottom:1px solid #767676;text-transform:uppercase}.filters-cats li.selected{border-bottom:0}.filters-cats li .filter-list{min-height:60px}.filters-cats .custom-filters .title{color:#5b8200}.filters-cats .filters-cat-single{-ms-flex-align:center;align-items:center;color:#444;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem .5rem .5rem 1.5rem;transition:color .2s ease-in}.filters-cats .filters-cat-single.selected,.filters-cats .filters-cat-single:hover{background-color:#cbc9c9;color:#444;transition:background-color .2s ease-in}.filters-cats .filters-cat-single.selected .icon,.filters-cats .filters-cat-single:hover .icon{opacity:1;transition:opacity .2s ease-in}.filters-cats .icon-arrow-down{fill:currentColor;float:right;height:.9rem;opacity:0;transition:opacity .2s ease-in;width:.9rem}.single-filter{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;-ms-flex-align:center;align-items:center;background:#d7d6d6;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:.5rem;opacity:.5;padding-right:.5rem;position:relative}.live-announcement-inner .title,.live-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.single-filter::after{clear:both;content:"";display:block}.single-filter.active,.single-filter.selected{color:#444;opacity:1;transition:opacity .2s linear}.single-filter .name,.single-filter .number{padding:8px 10px}.single-filter .name{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;border-color:transparent;border-style:solid;border-width:0 0 0 3px;display:block;width:100%}.profile-bar .not-full-name,.profile-bar h1,.wysiwyg p{word-wrap:break-word}.single-filter .number{background:#b2afaf;position:absolute;right:0;top:0}.single-filter .remove-filter{cursor:pointer;display:block}.single-filter .remove-filter svg{fill:#555;transition:fill .2s linear}.single-filter .remove-filter:hover svg{fill:red}.live-announcement{-ms-flex-line-pack:center;align-content:center;background:#107a8a;display:-ms-flexbox;display:flex;height:0;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.live-announcement .live-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.live-announcement.visible{height:146px;pointer-events:auto;transition-delay:0s;width:100%}.live-announcement.visible .live-announcement-inner{opacity:1;transition:opacity .5s .5s}.live-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.live-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;margin-right:1rem}.live-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.live-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.live-announcement-inner .warning,.live-announcement-inner .warning a{color:#0b525c}.live-announcement-inner .close{display:block;position:absolute;right:0;top:1rem}.live-announcement-inner .close svg{width:2rem;height:2rem;fill:#138ea1;pointer-events:none;transition:fill .2s}.live-announcement-inner .close svg:hover{fill:#0b525c}.lightbox-move-to-sprint .move-to-sprint-container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;max-width:550px;width:100%}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header{margin:0 auto;max-width:400px;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header ul{display:inline-block;margin:.5em auto 2.5em;width:auto}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header li{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-top:1em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-header .check{margin-left:4em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls p{margin-bottom:2.5em;text-align:center}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .sprint-select{margin-top:.5em}.lightbox-move-to-sprint .move-to-sprint-container .move-to-sprint-controls .move-button{width:100%}.move-to-sprint-button{color:#fff}.move-to-sprint-button:not(.disabled):hover{color:#9dce0a}.move-to-sprint-button.disabled:hover,.search-list .choice.selected .info{color:#fff}.move-to-sprint-button.disabled{opacity:.5}.search-list .show-closed{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;float:right;font-size:.9em}.add-tag-button .add-tag-text,.tag{font-size:.9rem}.search-list .show-closed svg{height:1em;margin-right:.25em;width:1em}.search-list ul{background:#f5f5f5;border:1px solid #767676;height:200px;margin:.25em 0 0;max-height:200px;overflow-y:auto}.search-list .choice{padding:.25em .5em}.search-list .choice.selected{background:#9dce0a;color:#fff}.search-list .choice[disabled]{color:#B8B8B8;cursor:not-allowed}.search-list .choice[disabled] .info{color:#B8B8B8}.search-list .choice ng-include{display:-ms-flexbox;display:flex;width:100%}.search-list .choice ng-include .title{-ms-flex-positive:1;flex-grow:1;text-align:left}.search-list .choice ng-include .info{color:#767676;text-align:right}.search-list .choice .title span{margin-right:.5em}.add-tag-input{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;position:relative;width:250px}.add-tag-input input{border-color:#767676;padding:6px;width:14rem}.add-tag-input .save{cursor:pointer;display:inline-block;fill:#444;margin:.5rem 0 0 .5rem;transition:.2s linear}.add-tag-input .save:hover{fill:#5b8200}.add-tag-input .tags-dropdown{font-size:.9rem;background:#fff;border:1px solid #767676;border-top:0;box-shadow:2px 2px 3px rgba(0,0,0,.2);left:0;max-height:20vh;min-height:0;overflow-x:hidden;overflow-y:auto;position:absolute;top:2.25rem;width:85%;z-index:99}.add-tag-input .tags-dropdown-option{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem}.tags-block,.terms-announcement{align-content:center;display:-ms-flexbox}.add-tag-input .tags-dropdown-color{height:1rem;width:1rem}.add-tag-input li.selected,.add-tag-input li:hover{background:#f4fdda;cursor:pointer;transition:.2s;transition-delay:.1s}.tags-block{-ms-flex-line-pack:center;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.add-tag-button,.tag{display:inline-block}.add-tag-button{color:#767676;cursor:pointer}.add-tag-button:hover{color:#9dce0a}.add-tag-button .icon-add{width:.9rem;height:.9rem;fill:currentColor;margin:.5rem .25rem 0 0}.tag{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:#f5f5f5;border-left:5px solid;border-radius:0 5px 5px 0;color:#444;margin:0 .5rem .5rem 0;padding:.5rem;text-align:center}.terms-announcement-inner .title,.terms-announcement-inner .warning a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.tag .icon-close{width:.7rem;height:.7rem;cursor:pointer;fill:#ff8282;margin-left:.25rem}.tag .loading-spinner{height:1rem;width:1rem}.terms-announcement{-ms-flex-line-pack:center;background:#107a8a;display:flex;-ms-flex-pack:center;justify-content:center;overflow:hidden;pointer-events:none;position:fixed;top:0;transition:width .5s,height .5s;transition-delay:.5s;width:0;z-index:99}.terms-announcement .terms-announcement-inner{opacity:0;transition:opacity .5s;width:100%}.terms-announcement.visible{min-height:146px;pointer-events:auto;transition-delay:0s;width:100%}.terms-announcement.visible .terms-announcement-inner{opacity:1;transition:opacity .5s .5s}.terms-announcement-inner{display:-ms-flexbox;display:flex;max-width:1200px}.terms-announcement-inner .announcement-decoration{-ms-flex-item-align:end;align-self:flex-end;height:auto;margin-right:1rem}.terms-announcement-inner .text{padding:1.25rem 3rem 1.25rem 2rem;position:relative;width:100%}.terms-announcement-inner .title{font-size:1.6rem;color:#0b525c;margin-bottom:.5rem}.terms-announcement-inner .warning,.terms-announcement-inner .warning a{color:#0b525c}.tribe-linked.is-active .delete-link,.tribe-linked.is-active .gig-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.terms-announcement-inner .close{display:block;position:absolute;right:.5rem;top:1rem}.terms-announcement-inner .close svg{width:2rem;height:2rem;fill:#f5f5f5;pointer-events:none;transition:fill .2s}.terms-announcement-inner .close svg:hover{fill:#0b525c}.terms-announcement-inner a{color:#f5f5f5}.loader .tip-color-1 p{color:#ae4fb0}.loader .tip-color-1 svg{fill:#ae4fb0;stroke:#ae4fb0}.loader .tip-color-2 p{color:#4e88df}.loader .tip-color-2 svg{fill:#4e88df;stroke:#4e88df}.loader .tip-color-3 p{color:#6360d6}.loader .tip-color-3 svg{fill:#6360d6;stroke:#6360d6}.loader .tip-color-4 p{color:#47b3a6}.loader .tip-color-4 svg{fill:#47b3a6;stroke:#47b3a6}.loader .tip-color-5 p{color:#d76969}.loader .tip-color-5 svg{fill:#d76969;stroke:#d76969}.tip{text-align:center;width:auto}.tip .translate-cloak{display:none}.tip p{display:-ms-flexbox;display:flex;font-size:1.1em;-ms-flex-pack:center;justify-content:center;margin-bottom:1em;max-width:440px}.tip p.title{color:#000;font-size:1em;margin-bottom:1.75em}.tip p.range{width:1px}.tip svg{height:32px;margin:0 .3em;width:32px}.tip svg.icon-upvote{height:30px;width:24px}.tip .range-slider{display:initial;width:100px}.tip .arrows svg{height:40px;margin:0}.tip .arrows svg.icon-arrow-left{margin-left:7px}.tip .arrows svg.icon-arrow-right{margin-left:-7px}.tribe-linked{margin-left:auto;overflow:hidden;position:absolute;right:0;top:0;z-index:99}.tribe-linked .tribe-linked-inner{padding:.5rem;transition:.2s}.tribe-linked .tribe-linked-inner:hover{background:#fff;cursor:pointer}.tribe-linked .tribe-linked-inner .close,.tribe-linked .tribe-linked-inner .delete-link,.tribe-linked .tribe-linked-inner .gig-title,.tribe-linked .tribe-linked-inner .synchronize-link,.tribe-linked .tribe-linked-inner .title{display:none;opacity:0}.tribe-linked .tribe-logo{height:2rem;width:2rem}.tribe-linked.is-active{animation-duration:1s;animation-name:slideTribeInner;background:#fff;box-shadow:1px 1px 5px rgba(68,68,68,.2);overflow:hidden}.epic-row .epic-statuses,.epics-table-dropdown{box-shadow:3px 3px 2px rgba(0,0,0,.1);z-index:99}.tribe-linked.is-active .tribe-linked-inner{height:100%;min-width:300px}.tribe-linked.is-active .tribe-linked-inner .close,.tribe-linked.is-active .tribe-linked-inner .delete-link,.tribe-linked.is-active .tribe-linked-inner .gig-title,.tribe-linked.is-active .tribe-linked-inner .synchronize-link,.tribe-linked.is-active .tribe-linked-inner .title{animation-duration:1.25s;animation-name:fadeInFromNone;display:block;opacity:1}.tribe-linked.is-active .tribe-linked-header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;margin-bottom:1rem}.tribe-linked.is-active .tribe-logo{margin-right:.5rem;vertical-align:text-bottom}.tribe-linked.is-active svg{width:1rem;height:1rem;fill:#ff8282;transition:all .2s}.tribe-linked.is-active svg:hover{fill:red}.tribe-linked.is-active .title{margin-bottom:0}.tribe-linked.is-active .gig-title{color:#107a8a;margin-bottom:.5rem}.tribe-linked.is-active .delete-link{font-size:.9rem;color:#5b8200;display:block;margin-bottom:1rem}.tribe-linked.is-active .synchronize-link{display:block;padding:.5rem}.tribe-linked.is-active .close{-ms-flex-item-align:start;align-self:flex-start;margin-left:1rem}@keyframes slideTribeInner{0%{max-height:60px;width:100px}20%{max-height:60px;width:300px}100%{max-height:225px}}@keyframes fadeInFromNone{0%{display:none;opacity:0}80%{display:block;opacity:0}100%{display:block;opacity:1}}tg-wysiwyg-code-lightbox textarea{height:350px}.wysiwyg{line-height:1.4rem;overflow:auto;padding:1rem}.wysiwyg h1,.wysiwyg h2,.wysiwyg h3{padding-bottom:.5rem}.wysiwyg h1{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:2.25em;line-height:1.2;margin-bottom:1rem;margin-top:1rem;text-transform:uppercase}.wysiwyg h2,.wysiwyg h3,.wysiwyg h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-top:1rem;margin-bottom:1rem}.wysiwyg h2{font-size:1.6rem;line-height:1.225}.wysiwyg h3{font-size:1.2rem}.wysiwyg ol,.wysiwyg ul{line-height:1.5;list-style-position:outside;margin-bottom:1rem;margin-top:0;padding-left:2em}.wysiwyg ol ol,.wysiwyg ol ul,.wysiwyg ul ol,.wysiwyg ul ul{padding-left:1rem}.wysiwyg ul{list-style-type:disc}.wysiwyg dl dt{font-size:1em;margin-top:16px;padding:0}.wysiwyg dl dd{margin-bottom:16px;padding:0 16px}.wysiwyg a{color:#5b8200;cursor:pointer}.wysiwyg a:hover{color:#9dce0a}.wysiwyg code,.wysiwyg pre:not([class*=language-]){font-size:.9rem;background:#272822;color:#e4e3e3;direction:ltr;font-family:'courier new',monospace;overflow:auto;unicode-bidi:embed}.wysiwyg p{margin-bottom:1rem}.wysiwyg .codehilite{overflow:auto}.wysiwyg blockquote p{margin:0}.wysiwyg pre:not([class*=language-]){line-height:1.4rem;margin-bottom:.5rem;padding:1rem;white-space:pre-wrap}.wysiwyg code{padding:.2rem}.wysiwyg table{border:1px solid #767676;margin-bottom:1rem}.medium-editor-mention-panel ul,tg-wysiwyg div[contenteditable=true] :last-child{margin-bottom:0}.wysiwyg table tbody tr:last-child{border-bottom:0}.wysiwyg tr{border-bottom:#767676 1px solid}.wysiwyg th{border-right:#767676 1px solid;padding:1rem 1rem 1rem .5rem}.wysiwyg th:last-child{border-right:0}.wysiwyg td{border-right:#767676 1px solid;padding:.5rem}.wysiwyg td:last-child{border-right:0}.wysiwyg img{max-width:100%}.wysiwyg textarea{background:#fff;max-height:none}.wysiwyg hr{border:1px solid #e4e3e3}.medium-editor-mention-panel{background-color:#fff;border:1px solid #767676;position:absolute}.medium-editor-mention-panel:empty{border:0}.medium-editor-mention-panel li{border-top:1px solid #767676;cursor:pointer;padding:2px 5px}.medium-editor-mention-panel li:first-child{border-top:0}.medium-editor-mention-panel li.active,.medium-editor-mention-panel li:hover{background-color:#879b89;color:#fff}.code-language-search,.code-language-selector{font-size:.75rem;background-color:#fff;position:absolute}tg-wysiwyg{display:-ms-flexbox;display:flex;margin-bottom:2rem}tg-wysiwyg pre{cursor:pointer}tg-wysiwyg .outdated{color:red}tg-wysiwyg .tools{padding-left:1rem}tg-wysiwyg .tools:not(.visible){opacity:0;pointer-events:none}tg-wysiwyg .tools:not(.visible) a{cursor:default}tg-wysiwyg .tools a{display:block;margin-bottom:.5rem}tg-wysiwyg .tools svg{fill:#767676}tg-wysiwyg .editor{width:100%}tg-wysiwyg .mode-editor span{color:#767676;cursor:pointer;margin-right:.5rem}tg-wysiwyg .markdown-editor-placeholder,tg-wysiwyg .medium-editor-placeholder{color:#767676;overflow:visible;padding-left:1rem}tg-wysiwyg .markdown-editor-placeholder::after,tg-wysiwyg .medium-editor-placeholder::after{color:#767676;font-style:normal}tg-wysiwyg .markdown:not(.empty) p{margin-bottom:0;white-space:pre-wrap}tg-wysiwyg .read-mode{cursor:pointer}tg-wysiwyg .medium{border:1px solid transparent}.code-language-search,.code-language-selector,tg-wysiwyg .edit-mode .markdown,tg-wysiwyg .edit-mode .medium{border:1px solid #767676}tg-wysiwyg .edit-mode .medium-editor-element{min-height:10rem}.code-language-selector{cursor:pointer;padding:.2rem .5rem 0}.code-language-search ul{cursor:pointer;margin-bottom:0;max-height:20vh;overflow-y:scroll}.epic-row .sprint,.epics-table-header .sprint,.story-row .sprint{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.code-language-search li{padding:.2rem .5rem}.medium-editor-toolbar li .medium-editor-button-active{color:#9dce0a}.medium-editor-toolbar svg{fill:#fff}.medium-editor-toolbar button:hover svg{fill:#9dce0a}.discover-header{background:url(../images/discover.png) bottom left repeat-x #e4e3e3;margin-bottom:2.5rem;padding:1rem 1rem 2rem;text-align:center}.discover-header .discover-header-inner{max-width:1200px;min-width:768px;margin:0 auto}.discover-header .title{font-size:3rem;margin-bottom:0}.discover-header .project-number{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;color:#5b8200}.discover-results-header .title,.featured-projects .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.discover-header form{margin:0 30%;position:relative}@media (max-width:767px){.discover-header .discover-header-inner{width:90%;min-width:0}.discover-header form{margin:0 .5rem}}.discover-header input[type=text]{background:#fff;border:0;padding:1rem;width:100%}.discover-header input[type=text]:focus{outline-color:#9dce0a}.discover-header input[type=text]:-webkit-autofill{background:rgba(135,155,137,.5)}.discover-header .search-button{width:1.5rem;height:1.5rem;fill:#767676;position:absolute;right:1rem;top:1rem;transition:fill .2s}.discover-header .search-button:hover{cursor:pointer;fill:#5b8200}.discover-results-header .discover-results-header-inner{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.discover-results-header svg{width:1.2rem;height:1.2rem;fill:#767676;margin-right:.25rem}.discover-results-header .title{font-size:1.6rem;text-transform:uppercase}.discover-results-header h2{display:inline-block}.filter-discover-search .discover-search-filter{margin-right:1rem}.filter-discover-search .discover-search-filter.active{color:#5b8200}.filter-discover-search .discover-search-filter.active svg{fill:#5b8200}.filter-discover-search svg{width:.8rem;height:.8rem}.discover-search-subfilter{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;position:relative}.discover-search-subfilter:after,.discover-search-subfilter:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.discover-search-subfilter:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.discover-search-subfilter:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.discover-search-subfilter.most-liked-subfilter::after,.discover-search-subfilter.most-liked-subfilter::before{left:85%}.discover-search-subfilter.most-active-subfilter::after,.discover-search-subfilter.most-active-subfilter::before{left:95%}.discover-search-subfilter.ng-enter{animation:dropdownFade .2s}.discover-search-subfilter .results{font-size:.9rem;color:#ff8282;display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .results:hover{color:red}.discover-search-subfilter .filter-list{display:-ms-flexbox;display:flex;margin:0 0 0 auto}.discover-search-subfilter .filter-list a{display:block;padding:.5rem 1rem;transition:all .2s}.discover-search-subfilter .filter-list a:hover{background:#767676;color:currentColor}.discover-search-subfilter .filter-list a.active{background:#9dce0a;color:#fff}.featured-projects{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.featured-projects{width:90%;min-width:0}}.featured-projects .title{font-size:1.6rem;color:#444;text-align:center}.featured-projects-inner{-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.featured-project{background:#fff;border:1px solid #e4e3e3;margin:.5rem;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:23%;flex-basis:23%;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:23%}.featured-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.featured-project .project-tag{-ms-flex:1;flex:1}.featured-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.featured-project .project-card-description{font-size:.9rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555}.featured-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.featured-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.featured-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.featured-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.featured-project .statistic{font-size:.9rem;color:#767676;display:inline-block;margin-right:.5rem}.featured-project .statistic.active{color:#5b8200}.featured-project .statistic.active svg{fill:currentColor}.featured-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.featured-project .project-card-header .icon-badge{fill:#9dce0a}.featured-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.featured-project .project-card-logo img{width:100%}.featured-project .project-card-name{line-height:1.25}.featured-project .project-card-name a{font-size:1.2rem;color:#5b8200}.featured-project .project-card-name a:hover{color:#9dce0a}@media (max-width:767px){.featured-project{-ms-flex-preferred-size:45%;flex-basis:45%}}@media (max-width:480px){.featured-project{-ms-flex-preferred-size:100%;flex-basis:100%}}.highlighted{margin:1rem auto 4rem;max-width:1200px;min-width:768px;display:-ms-flexbox;display:flex;-ms-flex-pack:distribute;justify-content:space-around}@media (max-width:767px){.highlighted{width:90%;min-width:0;-ms-flex-direction:column;flex-direction:column}.highlighted tg-most-active{margin-top:4rem}}.highlighted tg-most-active,.highlighted tg-most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.highlighted tg-most-liked{margin-right:8%}@media (max-width:767px){.highlighted tg-most-liked{margin-right:0}}.highlighted .most-active,.highlighted .most-liked{-ms-flex-line-pack:stretch;align-content:stretch;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column}.highlighted .header{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1rem}.highlighted .header svg{width:.8rem;height:.8rem;fill:#767676;margin-left:.5rem}.highlighted .title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.highlighted .title-wrapper svg{width:1.25rem;height:1.25rem;fill:#767676;margin-right:.5rem}.highlighted .title{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:1.6rem;color:#444;display:inline-block;margin:0}.highlighted .highlighted-projects-container{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:start;justify-content:flex-start}.highlighted .loading-container{margin-top:calc(50% - 1rem)}.highlighted .loading-spinner{display:block;margin:2rem auto;max-height:3rem;max-width:3rem}.highlighted .view-more-projects{margin-top:auto;width:100%}.highlighted .empty-highlighted-project{border:2px dashed #e4e3e3;-ms-flex:1;flex:1;padding:2rem;text-align:center}.highlighted .empty-highlighted-project svg{width:2rem;height:2rem;display:block;fill:#767676;margin:1rem auto}.highlighted .empty-highlighted-project span{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;color:#555;display:block}.filter-highlighted{position:relative}.filter-highlighted .current-filter{padding:1rem}.filter-highlighted .current-filter span{margin-left:.2rem;position:relative;top:.2rem}.filter-highlighted .current-filter:hover svg{fill:currentColor}.filter-highlighted .filter-list{background:#000;position:absolute;right:0;top:1.5rem}.filter-highlighted .filter-list.ng-enter{animation:dropdownFade .2s ease-in}.filter-highlighted .filter-list.ng-leave{animation:dropdownFade .2s ease-in;animation-direction:reverse}.filter-highlighted li{font-size:.9rem;color:#fff;cursor:pointer;min-width:8rem;padding:.25rem .5rem}.filter-highlighted li:hover{background:rgba(157,206,10,.4)}.highlighted-project{-ms-flex-align:start;align-items:flex-start;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:9rem;flex-basis:9rem;min-height:9rem;padding:1.5rem 0}.highlighted-project:nth-last-child(-n+2){border-bottom:0}.highlighted-project .project-logo{-ms-flex-preferred-size:3rem;flex-basis:3rem;height:auto;margin-right:1rem;width:3rem}.highlighted-project .project-logo img{width:100%}.highlighted-project .project-data-container{-ms-flex:1;flex:1}.highlighted-project .single-project-header{-ms-flex-line-pack:center;align-content:center;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.highlighted-project .project-title{font-size:1.2rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.epic-row .epic-pill,.epic-row .epic-statuses{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.highlighted-project .project-title a{color:#5b8200}.highlighted-project .project-title a:hover{color:#9dce0a}.highlighted-project .project-description{font-size:.9rem;color:#555;margin-bottom:0}.highlighted-project .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:140px;flex-basis:140px;-ms-flex-pack:end;justify-content:flex-end}.highlighted-project .project-statistics svg{width:.75rem;height:.75rem;fill:#767676;margin-right:.25rem}.highlighted-project .statistic{font-size:.9rem;color:#767676;display:inline-block;margin-right:.5rem}.highlighted-project .statistic.active{color:#5b8200}.highlighted-project .statistic.active svg{fill:#5b8200}.discover-search .discover-header form{margin:0 8rem;position:relative}.discover-search .discover-header .search-button{left:1rem;right:auto}.discover-search .discover-header .searchbox input{padding-left:3.5rem;padding-right:23rem}.discover-search .searchbox-filters{position:absolute;right:1rem;top:.7rem;width:auto}.discover-search .searchbox-filters input{display:none}.discover-search .searchbox-filters label{border-radius:4px;color:#767676;cursor:pointer;display:inline-block;padding:.4rem .75rem;transition:all .2s;transition-delay:.2s}.discover-search .searchbox-filters label.active{background:#9dce0a;color:#fff}.discover-search .searchbox-filters label:hover{background:#e4e3e3;color:#555}.discover-results{margin:1rem auto;max-width:1200px;min-width:768px}@media (max-width:767px){.discover-results{width:90%;min-width:0}}.discover-results .discover-results-inner .spin{margin-top:4rem}.discover-results .list-itemtype-project{border-bottom:1px solid #767676;display:-ms-flexbox;display:flex;padding:1rem 0}.discover-results .list-itemtype-project:last-child{border-bottom:0}.discover-results .list-itemtype-project-left{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;width:100%}.discover-results .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.discover-results .list-itemtype-project-data{-ms-flex:1;flex:1;vertical-align:middle}.discover-results .project-statistics{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:300px;flex-basis:300px;-ms-flex-pack:end;justify-content:flex-end}.discover-results .project-statistics svg{width:.7rem;height:.7rem;fill:#767676;margin-right:.2rem}.discover-results .statistic{font-size:.9rem;color:#767676;display:inline-block;margin-right:.5rem}.discover-results .statistic svg{fill:#767676;stroke:#767676}.discover-results .statistic.active{color:#5b8200}.discover-results .statistic.active svg{fill:#5b8200}.discover-results .more-results{display:block;margin:0 20rem;transition:inherit}.discover-results div[tg-loading] img{display:block;margin:0 auto}.lightbox-create-epic{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;opacity:1}.lightbox-create-epic .create-epic-container{max-width:700px;width:90%}.lightbox-create-epic .subject-container{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.lightbox-create-epic .subject-container .subject{padding-left:1rem;width:100%}.lightbox-create-epic .attachments{margin-bottom:0}.lightbox-create-epic .settings{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-create-epic .settings fieldset{margin-right:.5rem}.lightbox-create-epic .settings fieldset:hover{color:#fff;transition:all .2s ease-in;transition-delay:.2s}.lightbox-create-epic .settings fieldset:last-child{margin:0}.lightbox-create-epic .settings input{display:none}.lightbox-create-epic .settings input:checked+label{background:#5b8200;border:1px solid #5b8200;color:#fff}.lightbox-create-epic .settings input:checked+.blocked{background:red;border:1px solid red;color:#fff}.lightbox-create-epic label{font-size:.9rem;background:#f5f5f5;border:1px solid #767676;color:#767676;cursor:pointer;display:block;padding:.5rem 3rem;text-transform:none;transition:all .2s ease-in}.lightbox-create-epic label:hover{background:#9dce0a;border:1px solid #5b8200;color:#fff}.lightbox-create-epic label.blocked:hover{background:#ff8282;border:1px solid red}.lightbox-create-epic .create-epic-button{display:block;width:100%}.epic-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #e4e3e3;cursor:move;display:-ms-flexbox;display:flex;transition:background .2s}.epic-row .assigned,.epic-row .project{padding:.5rem}.epic-row .name,.epic-row .progress,.epic-row .sprint,.epic-row .status,.epic-row .vote{padding:1rem .5rem}.epic-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .assigned,.epic-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epic-row .sprint,.epic-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epic-row .name,.epic-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epic-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epic-row .sprint{width:90%}.epic-row:hover{background:rgba(157,206,10,.05)}.epic-row:hover .icon-drag{opacity:1}.epic-row.not-empty{cursor:pointer}.epic-row.is-blocked{background:rgba(255,130,130,.5)}.epic-row.is-closed .name a{color:#9c9c9c;text-decoration:line-through}.epic-row.unfold .name .icon{transform:rotate(0)}.epic-row .name .icon{transform:rotate(180deg);transition:all .2s}.epic-row .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#e4e3e3;opacity:0;transition:opacity .1s}.epic-row .epic-pill{font-size:.75rem;background:#444;border-radius:.25rem;color:#fff;margin:0 .5rem;padding:.1rem .25rem}.epic-row .status{cursor:pointer;position:relative}.epic-row .status button{background:0 0}.epic-row .icon-arrow-down{width:.7rem;height:.7rem;fill:#767676;margin-left:.1rem}.epic-row .progress-bar,.epic-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.epic-row .progress-bar{background:#f5f5f5;max-width:40vw;padding-right:1rem;width:100%}.epic-row .progress-status{background:#9dce0a;width:10vw}.epic-row .vote{color:#555}.epic-row .vote.is-voter{color:#9dce0a;fill:#9dce0a}.epic-row .assigned img{width:40px}.epic-row .icon-upvote{width:.75rem;height:.75rem;fill:#555;margin-right:.25rem;vertical-align:middle}.epic-row .is-unassigned{color:#767676}.epic-row .epic-statuses{font-size:.9rem;background:rgba(5,5,5,.9);border-bottom:1px solid #444;color:#fff;left:0;list-style-type:none;margin:0;position:absolute;text-align:left;top:2.5rem;width:200px}.epic-row .epic-statuses:last-child{border:0}.epic-row .epic-statuses li{padding:.5rem}.epic-row .epic-statuses li:hover{color:#9dce0a;transition:color .3s linear}.empty-epics{text-align:center}.empty-epics a{color:#5b8200;display:block;margin-bottom:2rem}.epics-table{margin-top:2rem}.epics-table .loading{margin:2% auto;width:3rem}.epics-table .loading img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.epics-table-header{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;border-bottom:1px solid #767676;display:-ms-flexbox;display:flex;padding:.5rem;position:relative}.epics-table-header .name,.epics-table-header .progress,.epics-table-header .sprint,.epics-table-header .status,.epics-table-header .vote{padding:1rem .5rem}.epics-table-header .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.epics-table-header .assigned,.epics-table-header .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center;padding:1rem .5rem}.epics-table-header .sprint,.epics-table-header .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.epics-table-header .name,.epics-table-header .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.epics-table-header .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.epics-table-header .sprint{width:90%}.epics-table-options-wrapper{bottom:1rem;position:absolute;right:.5rem}.epics-table-option-button{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;background:0 0}.epics-table-option-button .icon{width:.7rem;height:.7rem}.epics-table-dropdown{background:#fff;border-bottom:1px solid rgba(0,0,0,.1);border-left:1px solid rgba(0,0,0,.1);border-right:1px solid rgba(0,0,0,.1);padding:.5rem;position:absolute;right:0;top:1.3rem;width:250px}.epics-table-dropdown.ng-hide-remove{animation:dropdownFade .2s}.epics-table-dropdown.ng-hide-add{animation:dropdownFade .2s reverse}.epics-table-dropdown .fieldset{font-size:.9rem;border-bottom:1px solid #e4e3e3;color:#767676;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.epics-table-dropdown .fieldset:last-child{border:0}.story-row{font-size:.9rem;-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;margin-left:4rem;transition:background .2s}.story-row .assigned,.story-row .project{padding:.5rem}.story-row .name,.story-row .progress,.story-row .sprint,.story-row .status,.story-row .vote{padding:1rem .5rem}.story-row .vote{-ms-flex-preferred-size:60px;flex-basis:60px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .assigned,.story-row .project{-ms-flex-preferred-size:100px;flex-basis:100px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;text-align:center}.story-row .sprint,.story-row .status{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:150px;text-align:center}.story-row .name,.story-row .progress{-ms-flex-preferred-size:20vw;flex-basis:20vw;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;max-width:40vw}.story-row .progress{-ms-flex-negative:3;flex-shrink:3;margin-right:1rem;position:relative}.story-row .sprint{width:90%}.story-row:hover{background:rgba(157,206,10,.05)}.story-row.is-blocked{background:rgba(255,130,130,.5)}.story-row.is-closed .name{color:#767676;text-decoration:line-through}.story-row .name{-ms-flex-preferred-size:17.5vw;flex-basis:17.5vw}.story-row .name a{cursor:pointer}.story-row .progress-bar,.story-row .progress-status{height:1.5rem;left:0;position:absolute;top:.25rem}.story-row .progress-bar{background:#f5f5f5;max-width:40vw;width:100%}.story-row .progress-status{background:#9dce0a;width:10vw}.story-row .vote{color:#555}.story-row .vote.is-voter{color:#9dce0a;fill:#9dce0a}.story-row .project{cursor:pointer}.story-row .assigned img,.story-row .project img{width:40px}.story-row .icon-upvote{width:.75rem;height:.75rem;fill:#555;margin-right:.25rem;vertical-align:middle}.lightbox-create-related-user-stories .lightbox-create-related-user-stories-wrapper{max-width:600px;width:90%}.lightbox-create-related-user-stories .related-with-selector{display:-ms-flexbox;display:flex;margin-bottom:1rem}.lightbox-create-related-user-stories .related-with-selector input{display:none}.lightbox-create-related-user-stories .related-with-selector input:checked+label{background:#9dce0a;color:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input:checked+label:hover{background:#9dce0a}.lightbox-create-related-user-stories .related-with-selector input+label{background:rgba(228,227,227,.7);cursor:pointer;display:block;padding:2rem 1rem;text-align:center;text-transform:uppercase;transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector input+label:hover{background:rgba(157,206,10,.3);transition:background .2s ease-in}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single{-ms-flex:1;flex:1}.lightbox-create-related-user-stories .related-with-selector .related-with-selector-single:first-child{margin-right:.5rem}.lightbox-create-related-user-stories fieldset label{display:inline-block;margin-bottom:.5rem}.lightbox-create-related-user-stories .new-user-story-title{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex}.lightbox-create-related-user-stories .existing-user-story-form,.lightbox-create-related-user-stories .new-user-story-form{margin-bottom:1rem}.lightbox-create-related-user-stories .no-stories-found{padding:1rem 0 0}.lightbox-create-related-user-stories .new-user-story-options{display:-ms-flexbox;display:flex;margin-left:auto}.lightbox-create-related-user-stories .new-user-story-options input{display:none}.lightbox-create-related-user-stories .new-user-story-options input:checked+label{background:#9dce0a;color:#fff;fill:#fff;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label{background:#f5f5f5;color:#444;cursor:pointer;display:block;padding:.5rem;transition:background .2s ease-in}.lightbox-create-related-user-stories .new-user-story-options input+label:hover{background:#9dce0a;color:#fff;fill:#fff}.lightbox-create-related-user-stories button{width:100%}.related-userstories{margin-bottom:2rem;position:relative}.related-userstories-header{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:36px}.related-userstories-header .related-userstories-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-left:1rem}.related-userstories-header .add-button{background:#444;border:0;display:inline-block;padding:.5rem;transition:background .25s}.related-userstories-header .add-button.is-active,.related-userstories-header .add-button:hover{background:#9dce0a}.related-userstories-header .add-button svg{fill:#fff;height:1.25rem;margin-bottom:-.2rem;width:1.25rem}.related-userstories-body{width:100%}tg-related-userstory-row{font-size:.9rem;-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem 0 .5rem .5rem}tg-related-userstory-row.sortable{cursor:move}tg-related-userstory-row.sortable:hover{background:rgba(157,206,10,.05)}tg-related-userstory-row.sortable:hover .userstory-settings{opacity:1;transition:all .2s ease-in}tg-related-userstory-row.sortable:hover .icon-drag{opacity:1}tg-related-userstory-row.sortable .icon-drag{width:.75rem;height:.75rem;cursor:move;fill:#e4e3e3;opacity:0;transition:opacity .1s}tg-related-userstory-row .status{-ms-flex-negative:0;flex-shrink:0;position:relative;width:125px}tg-related-userstory-row .assigned-to-column{-ms-flex-negative:0;flex-shrink:0;width:150px}tg-related-userstory-row .assigned-to-column img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .project{cursor:pointer;-ms-flex-preferred-size:100px;flex-basis:100px}tg-related-userstory-row .project img{width:40px}tg-related-userstory-row .userstory-name{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;margin-right:1rem}tg-related-userstory-row .userstory-name a{cursor:pointer}tg-related-userstory-row .userstory-name span{display:inline-block;margin-left:.25rem}tg-related-userstory-row .closed{border-left:10px solid #e4e3e3;color:#e4e3e3}tg-related-userstory-row .closed a,tg-related-userstory-row .closed svg{fill:#e4e3e3}tg-related-userstory-row .closed .userstory-name a{color:#e4e3e3;text-decoration:line-through}tg-related-userstory-row .blocked{background:rgba(255,130,130,.2);border-left:10px solid #ff8282}tg-related-userstory-row .userstory-settings{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-negative:0;flex-shrink:0;opacity:0;width:60px}tg-related-userstory-row .userstory-settings svg{width:1.1rem;height:1.1rem;fill:#767676;margin-right:.5rem;transition:fill .2s ease-in}tg-related-userstory-row .userstory-settings svg:hover{fill:#555}tg-related-userstory-row .userstory-settings a:hover{cursor:pointer}tg-related-userstory-row .delete-userstory:hover .icon-trash{fill:#ff8282}tg-related-userstory-row .avatar{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}tg-related-userstory-row .avatar img{-ms-flex-preferred-size:35px;flex-basis:35px;height:35px;width:35px}tg-related-userstory-row .avatar figcaption{margin-left:.5rem}.external-app-wrapper{margin:2rem auto;text-align:center;width:480px}.external-app-wrapper .logo{height:4rem;margin:0 auto;width:4rem}.external-app-wrapper svg{width:4rem;height:4rem}.comment .comment-main,.external-app-wrapper .app-card img,.external-app-wrapper .user-card img{width:100%}.external-app-wrapper h1{margin-bottom:0}.external-app-wrapper .app-card,.external-app-wrapper .user-card{line-height:1.4;margin-bottom:2rem;text-align:left}.external-app-wrapper .app-card .card-inner,.external-app-wrapper .user-card .card-inner{display:-ms-flexbox;display:flex}.external-app-wrapper .app-card h3,.external-app-wrapper .app-card p,.external-app-wrapper .user-card h3,.external-app-wrapper .user-card p{margin:0}.external-app-wrapper .app-card a,.external-app-wrapper .user-card .card-inner{margin-bottom:.5rem}.external-app-wrapper .app-card h3,.external-app-wrapper .user-card h3{font-size:1.2rem}.external-app-wrapper .app-card a,.external-app-wrapper .user-card a{font-size:1rem;display:block}.external-app-wrapper .app-card .app-image{-ms-flex-preferred-size:100px;flex-basis:100px;margin-right:1rem;max-width:105px}.external-app-wrapper .app-card .app-data{-ms-flex:1;flex:1}.external-app-wrapper .app-card p{font-size:1rem}.external-app-wrapper .user-card{background:#fff8e4;border:1px solid #f1e8cd;padding:1rem}.external-app-wrapper .user-card .user-image{-ms-flex-preferred-size:50px;flex-basis:50px;margin-right:1rem;max-width:55px}.external-app-wrapper .button-green{display:block}.external-app-wrapper .cancel{font-size:.9rem;display:block;margin-top:.5rem;text-align:left}@media (max-width:480px){.external-app-wrapper{margin:0;min-width:100%;padding:2rem 1rem;text-align:center;width:100%}}.comments{clear:both}.comments tg-wysiwyg{margin-top:1.5rem}.comments .read-mode{border:1px solid #767676;height:55px}.activity,.comment .comment-wrapper,.comment .deleted-comment-wrapper,.entry .entry-wrapper{border-bottom:1px solid #e4e3e3}.comments .read-mode .markdown-editor-placeholder,.comments .read-mode .medium-editor-placeholder{height:55px}.comments .add-comment{margin-top:1rem}.comments .add-comment textarea{height:3rem}.comments .add-comment .edit,.comments .add-comment .preview-icon{position:absolute;right:1rem}.comments .save-comment-wrapper{-ms-flex-align:end;align-items:flex-end;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.comments .save-comment{margin-top:1rem;padding:.5rem 4rem}.comment{display:block}.comment .comment-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.comment .comment-wrapper:hover .comment-option{opacity:1}.comment .comment-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.comment .comment-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:1rem}.comment .comment-creator{color:#5b8200;margin-right:.5rem}.comment .comment-date{font-size:.9rem;color:#767676}.comment .comment-edited{font-size:.9rem;background:#e4e3e3;margin:0 .5rem;padding:.25rem}.comment .comment-edited .separator{margin:0 .25rem}.comment .comment-edited a{color:#5b8200;fill:#5b8200}.comment .comment-edited svg{width:.75rem;height:.75rem;margin:0 0 0 .25rem}.comment .comment-options{-ms-flex-align:center;align-items:center;-ms-flex-item-align:stretch;align-self:stretch;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;margin-left:1.5rem}.comment .comment-options .comment-option{cursor:pointer;opacity:0}.comment .comment-options .icon-edit{fill:#767676;margin-right:.5rem}.comment .comment-options .icon-edit:hover{fill:#555}.comment .comment-options .icon-close{fill:#767676;margin-right:.5rem}.comment .comment-options .icon-close:hover{fill:red}.comment .comment-options .icon-trash{fill:#ff8282}.comment .comment-options .icon-trash:hover{fill:red}.comment .deleted-comment-wrapper{padding:1rem 0;width:100%}.comment .deleted-comment-main{font-size:.75rem;color:#767676;display:-ms-flexbox;display:flex;width:100%}.comment .toggle-deleted-comment{color:#5b8200;fill:#5b8200;margin:0 1rem;transition:none}.comment .toggle-deleted-comment .icon-arrow-down,.comment .toggle-deleted-comment .icon-arrow-up{width:.8rem;height:.8rem;margin-left:.25rem}.comment .restore-comment{margin-left:auto;transition:all .2s}.comment .restore-comment:hover{color:#5b8200;fill:#5b8200}.comment .restore-comment .icon-reload{width:.8rem;height:.8rem;margin-right:.25rem}.comment .deleted-comment-comment{margin-top:1rem}.comment-text{max-width:80rem}.comment-text.wysiwyg{margin-bottom:0;padding:0}.lightbox-display-historic{display:none}.lightbox-display-historic .history-container{max-width:800px;width:90%}.lightbox-display-historic .history-wrapper{max-height:600px;overflow-x:hidden;overflow-y:auto;padding:2rem}.entry{display:block}.entry .entry-wrapper{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.entry .entry-avatar{-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:50px}.entry .entry-main{-ms-flex:1;flex:1;max-width:calc(100% - 100px)}.entry .entry-data{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;margin-bottom:.5rem}.entry .entry-creator{color:#5b8200;margin-right:.5rem}.entry .entry-date{font-size:.9rem;color:#767676}.entry .display-full-entry{width:1.25rem;height:1.25rem;cursor:pointer;fill:#5b8200;margin-left:auto;transform:rotate(0);transition:transform .2s}.entry .display-full-entry.inactive{transform:rotate(180deg)}.entry .entry-text{margin-bottom:0}.entry .entry-text.ellipsed{max-height:3rem;overflow:hidden}.entry .entry-text.blurry{position:relative}.entry .entry-text.blurry::after{background-image:linear-gradient(to top,#fff,transparent);content:'';height:100%;left:0;position:absolute;top:0;width:100%}.history-tabs .order-comments{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:auto;transition:none}.history-tabs .icon-arrow-down,.history-tabs .icon-arrow-up{width:.75rem;height:.75rem}.activity-diff .key{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#e4e3e3;margin-right:.5rem;padding:.25rem}.add-member-suggest .add-member-suggest-name,.home-project .project-card-description,.home-wrapper .title-bar,.invite-members-form .invite-members-single-help,.projects-empty p,.watching-empty p,.working-on-empty p{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.activity-diff .diff{line-height:1.6}.activity-diff .icon-arrow-right{width:.75rem;height:.75rem;fill:#767676;margin:0 .5rem}.activity-diff .diff-status-wrapper p{display:inline-block}.activity-diff .diff-status-wrapper ins{background:rgba(203,246,72,.3);text-decoration:underline}.activity-diff .diff-status-wrapper del{background:rgba(255,130,130,.3)}.activity-diff .diff-color-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.activity-diff .diff-color-wrapper .diff{display:inline-block;height:1.2rem;width:1.2rem}.activity{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:2rem 0}.activity .activity-avatar{-ms-flex-negative:0;flex-shrink:0;margin-right:1.5rem;width:60px}.activity .activity-data{margin-bottom:1rem}.activity .activity-creator{color:#5b8200;margin-right:.5rem}.activity .activity-date{color:#767676}.watching,.working-on{margin-bottom:2rem}.watching .duty-single,.working-on .duty-single{border-bottom:1px solid #e4e3e3;cursor:pointer;transition:background .2s;transition-delay:.2s}.watching .duty-single:hover,.working-on .duty-single:hover{background:rgba(157,206,10,.1)}.watching .duty-single:last-child,.working-on .duty-single:last-child{border:0}.watching .duty-single>a,.working-on .duty-single>a{-ms-flex-align:center;align-items:center;border-bottom:0;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}.watching .duty-single>a.blocked,.working-on .duty-single>a.blocked{background:rgba(255,130,130,.2);color:red}.watching .see-more,.working-on .see-more{display:block;margin:2rem 30%}.home-wrapper{display:-ms-flexbox;display:flex}@media (max-width:767px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .duty-summary{-ms-flex:1;flex:1;margin-right:2rem}.home-wrapper .dashboard-container{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@media (max-width:1280px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:767px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}@media (max-width:480px){.home-wrapper .dashboard-container{-ms-flex-direction:column;flex-direction:column}}.home-wrapper .watching-container,.home-wrapper .working-on-container{-ms-flex:1;flex:1;padding-left:.5rem;padding-right:.5rem}.home-wrapper .working-on-container{margin-right:1rem}.home-wrapper .project-list{-ms-flex-preferred-size:250px;flex-basis:250px;-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0}.home-wrapper .see-more-projects-btn{display:block}.home-wrapper .title-bar{font-size:1.2rem;-ms-flex-line-pack:center;align-content:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0 0 .5rem;padding:.5rem 1rem}.home-project{background:#fff;border:1px solid #e4e3e3;margin:.5rem .5rem 1rem;cursor:pointer;transition:all .2s}.home-project .tags-container{display:-ms-flexbox;display:flex;height:.3rem}.home-project .project-tag{-ms-flex:1;flex:1}.home-project .project-card-inner{padding:1rem;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:wrap;flex-wrap:wrap;width:100%}.home-project .project-card-description{font-size:.9rem;color:#555}.home-project .project-card-statistics{display:-ms-flexbox;display:flex;margin-top:auto}.home-project .project-card-statistics svg{fill:currentColor;margin-right:.25rem}.home-project .project-card-statistics svg:not(.icon-private){width:.75rem;height:.75rem}.home-project .project-card-statistics svg.icon-private{width:1.2rem;height:1.2rem;margin-left:1em}.home-project .statistic{font-size:.9rem;color:#767676;display:inline-block;margin-right:.5rem}.home-project .statistic.active{color:#5b8200}.home-project .statistic.active svg{fill:currentColor}.home-project .project-card-header{display:-ms-flexbox;display:flex;-ms-flex-positive:0;flex-grow:0}.home-project .project-card-header .icon-badge{fill:#9dce0a}.home-project .project-card-logo{display:inline-block;-ms-flex-preferred-size:50px;flex-basis:50px;-ms-flex-negative:0;flex-shrink:0;width:50px;height:50px;margin-right:.5rem}.home-project .project-card-logo img{width:100%}.home-project .project-card-name{line-height:1.25}.home-project .project-card-name a{font-size:1.2rem;color:#5b8200}.home-project .project-card-name a:hover{color:#9dce0a}.home-project:hover{border:1px solid rgba(157,206,10,.2);box-shadow:0 0 5px #e4e3e3}.home-project.blocked-project{border:#e4e3e3}.home-project.blocked-project:hover{border:#e4e3e3;box-shadow:none}.home-project.blocked-project .project-card-description,.home-project.blocked-project .project-card-logo,.home-project.blocked-project .project-card-name a,.home-project.blocked-project .project-card-statistics,.home-project.blocked-project .tags-container{opacity:.3}.projects-empty{text-align:center}.projects-empty svg{fill:#e4e3e3;height:100px;margin:1rem auto;text-align:center;width:100%}.projects-empty p{font-size:.9rem}.projects-empty .create-project-button{display:block;margin-bottom:.25rem}.projects-empty .import-project-button{display:block}.watching-empty,.working-on-empty{margin-bottom:4rem}.watching-empty p,.working-on-empty p{margin:2rem 2rem 1rem;text-align:center}.empty-ticket{display:-ms-flexbox;display:flex}.empty-ticket:not(:last-child){border-bottom:1px solid #e4e3e3;padding:1rem 0}.empty-ticket:last-child{padding:1rem 0 0}.empty-ticket .avatar{background:#d7d6d6;-ms-flex-preferred-size:48px;flex-basis:48px;height:48px;margin-right:1rem;width:48px}.empty-ticket .data{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.empty-ticket .line{background:#f5f5f5;height:1rem;margin-bottom:1rem;width:8vw}@media (max-width:1280px){.empty-ticket .line{width:30vw}}@media (max-width:767px){.empty-ticket .line{width:30vw}}@media (max-width:480px){.empty-ticket .line{width:30vw}}.empty-ticket .line:last-child{margin:0;width:18vw}@media (max-width:1280px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:767px){.empty-ticket .line:last-child{width:50vw}}@media (max-width:480px){.empty-ticket .line:last-child{width:50vw}}.invite-members-form{border-top:1px solid #e4e3e3;margin:0 5rem}.invite-members-form .invite-members-form-list{margin:0 0 1rem}.invite-members-form .invite-members-single{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:1rem}.invite-members-form .invite-members-single-data{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.invite-members-form .invite-members-single-avatar{height:4rem;margin-right:1rem;width:4rem}.invite-members-form .invite-members-single-remove{color:#ff8282;margin-left:1rem;transition:color .2s}.invite-members-form .invite-members-single-remove:hover{color:red}.invite-members-form .invite-members-single-role{-ms-flex-preferred-size:40%;flex-basis:40%;-ms-flex-negative:0;flex-shrink:0}.invite-members-form .invite-members-single-new{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding:1rem 0}.invite-members-form .invite-members-single-new .invite-members-single-new-btn{cursor:pointer}.invite-members-form .invite-members-single-new .icon-add{width:2rem;height:2rem;fill:#444;transition:fill .2s}.invite-members-form .invite-members-single-new:hover .icon-add{fill:#9dce0a}.invite-members-form .invite-members-single-send{font-size:1.2rem;display:block;margin:1.5rem 0 1rem;padding:1rem;width:100%}.invite-members-form .invite-members-single-help{font-size:.9rem}.lightbox-add-member .add-members-wrapper{max-width:900px;width:90%}.add-member-suggest .add-member-suggest-list{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin:2rem 0 0}.add-member-suggest .add-member-suggest-filter{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:0 15rem;position:relative}.add-member-suggest .add-member-suggest-filter-input{-ms-flex:1;flex:1;margin-right:.25rem}.add-member-suggest .add-member-suggest-filter-hint{font-size:.75rem;color:#767676;position:absolute;right:16rem;top:.5rem}.add-member-suggest .add-member-suggest-filter-hint.to-send{right:19rem}.add-member-suggest .add-member-suggest-filter-addmail{background:#444;border-radius:.25rem;padding:.5rem .75rem;transition:background .2s linear}.add-member-suggest .add-member-suggest-filter-addmail:hover{background:#050505}.add-member-suggest .add-member-suggest-filter-addmail svg{width:1.3rem;height:1.3rem;fill:#fff}.add-member-suggest .add-member-suggest-single{-ms-flex-align:center;align-items:center;background:#fff;border-bottom:1px solid #e4e3e3;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:calc(25% - 1rem);flex-basis:calc(25% - 1rem);-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;padding:.2rem;transition:.2s linear}.add-member-suggest .add-member-suggest-single:hover{background:rgba(157,206,10,.1)}.add-member-suggest .add-member-suggest-single:nth-child(4n){margin-right:0}.add-member-suggest .add-member-suggest-avatar{-ms-flex-positive:0;flex-grow:0;-ms-flex-negative:0;flex-shrink:0;height:5rem;margin:.5rem;width:5rem}.notifications-list .entry .entry-project,.notifications-list .entry a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.navbar{display:-ms-flexbox;display:flex;height:40px;-ms-flex-pack:justify;justify-content:space-between;position:relative}.navbar::after{background-size:200%;bottom:0;content:'';height:100%;left:0;position:absolute;right:0;top:0;z-index:-1}.navbar .nav-left,.navbar .nav-right{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.navbar .nav-left a{color:#fff;padding:.5rem 1.5rem}.navbar .nav-left .logo{background:rgba(0,0,0,.2);padding:.3rem .75rem}.navbar .nav-left svg{width:1.6rem;height:1.6rem}.navbar .nav-right{margin-left:auto}.navbar .nav-right .topnav-dropdown-wrapper>a,.navbar .nav-right>a{color:#fff;margin:0;padding:.5rem 2rem}.navbar .nav-right .active{background:rgba(255,255,255,.95);color:#718377}.navbar .nav-right svg{width:1.2rem;height:1.2rem;fill:rgba(135,155,137,.8);transition:all .2s linear}.navbar .nav-right>a,.navbar .topnav-dropdown-wrapper>a{color:#fff;display:inline-block;transition:all .2s linear}.navbar .nav-right>a:hover,.navbar .topnav-dropdown-wrapper>a:hover{background:rgba(0,0,0,.2);color:#9dce0a}.navbar .nav-right>a:hover svg,.navbar .topnav-dropdown-wrapper>a:hover svg{fill:#9dce0a;transition:all .2s linear}.navbar .nav-right>a.user-avatar,.navbar .topnav-dropdown-wrapper>a.user-avatar{min-width:200px;padding:0 0 0 2rem;text-align:right}.navbar .nav-right>a.user-avatar span,.navbar .topnav-dropdown-wrapper>a.user-avatar span{padding-right:1rem}.navbar .user-avatar img{height:2.5rem;margin-left:.5rem;vertical-align:middle}.navbar .topnav-dropdown-wrapper{position:relative}.navbar .topnav-dropdown-wrapper:hover .navbar-dropdown{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.navbar .navbar-dropdown a{padding:.8rem .5rem}.navbar .navbar-dropdown{border-radius:2px;display:none;left:calc(50% - 350px/2);min-width:350px;position:absolute;top:2.4rem;z-index:999}.navbar-dropdown{background:#050505;border:1px solid #000;padding:.3rem}.navbar-dropdown.dropdown-user{left:calc(50% - 200px/2);min-width:200px}.navbar-dropdown.dropdown-user ul{margin-bottom:0}.navbar-dropdown ul{margin:0 0 .5rem;padding:0}.navbar-dropdown ul:after,.navbar-dropdown ul:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.navbar-dropdown ul:after{border-color:rgba(5,5,5,0);border-bottom-color:#050505;border-width:8px;margin-left:-8px}.navbar-dropdown ul:before{border-color:rgba(5,5,5,0);border-bottom-color:#050505;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.navbar-dropdown .plugin:hover .new{color:#fff}.navbar-dropdown .plugin .new{font-size:.9rem;background:#ff8282;float:right;margin-left:auto;padding:.1rem .25rem}.navbar-dropdown a{color:#767676;display:block;padding:.8rem .5rem}.navbar-dropdown a:hover{background:rgba(255,255,255,.1);color:#9dce0a}.navbar-dropdown a.create-organization-btn,.navbar-dropdown a.create-project-btn,.navbar-dropdown a.see-more-projects-btn{color:#fff;text-align:center}.navbar-dropdown a.create-organization-btn:hover,.navbar-dropdown a.create-project-btn:hover,.navbar-dropdown a.see-more-projects-btn:hover{color:#fff}.navbar-dropdown a.see-more-projects-btn{margin-bottom:.3rem}.navbar-dropdown a.create-project-btn{-ms-flex:1;flex:1}.navbar-dropdown a.blocked-project{color:#555}.navbar-dropdown a.blocked-project svg{margin-left:.5rem;position:relative;top:.25rem}.navbar-dropdown .create-options{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}@keyframes highlightFadeOut{0%{background:#9dce0a;font-size:.75rem;height:22px;left:49px;line-height:22px;top:-1px;width:22px}20%{font-size:.7rem;height:20px;left:50px;line-height:20px;top:0;width:20px}100%{background:#5b8200}}.topnav-dropdown-wrapper{position:relative}.topnav-dropdown-wrapper:hover .navbar-dropdown-notifications{animation:dropdownFade .2s cubic-bezier(.09,0,.99,.01) both;display:block}.topnav-dropdown-wrapper .counter{background:#5b8200;border-radius:50%;color:#fff;font-size:.7rem;height:18px;left:52px;line-height:18px;position:absolute;text-align:center;top:3px;width:18px}.topnav-dropdown-wrapper .counter.small{height:17px;line-height:17px;width:17px}.topnav-dropdown-wrapper .counter.large{height:22px;line-height:22px;top:2px;width:22px}.topnav-dropdown-wrapper .counter.counter-active{animation-duration:2s;animation-name:highlightFadeOut}.topnav-dropdown-wrapper .navbar-dropdown-notifications{background:#fff;border:1px solid #e4e3e3;border-radius:2px;box-shadow:0 0 3px 3px rgba(184,184,184,.2);color:#050505;display:none;left:calc(50% - 450px/2);margin-top:1px;min-width:450px;padding:0;position:absolute;top:2.4rem;z-index:999}.topnav-dropdown-wrapper .navbar-dropdown-notifications .empty{color:#767676;font-size:.9em;padding:1.5em 0;text-align:center;width:100%}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header{background:#f5f5f5;color:#555;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;padding:.6rem .75rem}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after,.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{bottom:100%;left:50%;border:solid transparent;content:" ";height:0;width:0;position:absolute;pointer-events:none}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:after{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:8px;margin-left:-8px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header:before{border-color:rgba(245,245,245,0);border-bottom-color:#f5f5f5;border-width:calc(8px + 1px);margin-left:calc(-8px + 1px)}.topnav-dropdown-wrapper .navbar-dropdown-notifications .header .notifications-title{-ms-flex-positive:1;flex-grow:1;text-transform:uppercase}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action{font-size:.9rem;padding-left:1.2rem;text-align:right}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action.disabled{color:#B8B8B8;cursor:default}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled){color:#5b8200}.topnav-dropdown-wrapper .navbar-dropdown-notifications .action:not(.disabled):hover{color:#9dce0a}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-wrapper{min-height:70px}.topnav-dropdown-wrapper .navbar-dropdown-notifications .notifications-list{max-height:400px;overflow-y:auto}.notifications-page{margin-top:1.5em;min-width:initial;padding-bottom:5em}.notifications-page .header{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;margin:0;padding:.5em 1em}.notifications-page .title{color:#000;-ms-flex-positive:1;flex-grow:1;font-size:1.8em;line-height:1.8em;margin:0;text-transform:uppercase}.notifications-page .action{color:#5b8200;font-size:1em;line-height:.75em;margin-right:1em}.notifications-page .action.disabled{color:#B8B8B8}.notifications-page .action:not(.disabled):hover{color:#9dce0a}.notifications-page .empty{margin:4rem auto;text-align:center;width:100%}.notifications-page .notifications-list .entry{-ms-flex-align:center;align-items:center;font-size:.95rem;margin:.5rem 0;padding:1rem .6rem}.notifications-page .notifications-list .entry.new{background-color:#EFF3E3}.notifications-page .notifications-list .entry .entry-content{font-size:1.05rem}.notifications-page .notifications-list .entry .entry-project{max-width:initial;text-overflow:initial;white-space:initial}.notifications-page .notifications-list .entry .entry-avatar{-ms-flex-preferred-size:3rem;flex-basis:3rem;margin-right:1rem;width:3rem}.notifications-page .notifications-list .entry .entry-date{font-size:.85rem;margin-right:.5rem}.notifications-list .entry{color:#050505;display:-ms-flexbox;display:flex;font-size:.9rem;margin:0 .8rem;padding:.8rem 0;position:relative}.notifications-list .entry:not(:last-child){border-bottom:1px solid #e4e3e3}.notifications-list .entry p{line-height:1.25em;margin-bottom:0}.notifications-list .entry a.project-link,.notifications-list .entry a.user-link{color:#050505}.notifications-list .entry a.object-link{color:#5b8200}.notifications-list .entry a:hover{color:#9dce0a}.notifications-list .entry .entry-avatar{border-radius:.1rem;-ms-flex-preferred-size:2.5rem;flex-basis:2.5rem;-ms-flex-negative:0;flex-shrink:0;margin-right:.7rem;vertical-align:center;width:2.5rem}.notifications-list .entry .entry-avatar img{width:100%}.notifications-list .entry .entry-content{-ms-flex-positive:1;flex-grow:1;line-height:1.1em;margin-right:.7rem}.notifications-list .entry .entry-project{color:#B8B8B8;display:inline-block;font-size:.9rem;margin-top:.5em;max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.notifications-list .spin img,.profile .timeline-wrapper .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;transform-origin:32 32;max-height:3rem;max-width:3rem}.notifications-list .entry .entry-date{font-size:.7rem;white-space:nowrap}.notifications-list .spin{margin:5% auto;width:3rem}.notifications-list .spin img{margin:0 auto}.profile-favs{border-top:1px solid #e4e3e3}.profile-filter{-ms-flex-align:center;align-items:center;background:#e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0;padding:.5rem 1rem}.profile-filter .searchbox{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.profile-filter .searchbox .icon-search{fill:#555;margin-right:.5rem}.profile-filter .searchbox input{border:0;border-bottom:1px solid transparent;-ms-flex:1;flex:1;margin-right:1rem}.import-project-asana-form-selector li:first-child,.profile-bar .profile-stats,.profile-contacts,.profile-content-tabs{border-top:1px solid #e4e3e3}.profile-filter .searchbox input:focus{border-bottom:1px solid #767676;outline:0;transition:border-bottom .3s ease-in}.profile-filter .filters a{color:#767676;display:inline-block;padding:0 .5rem}.profile-filter .filters a.active,.profile-filter .filters a:hover{color:#050505}.profile{display:-ms-flexbox;display:flex;min-height:calc(100vh - 40px);padding:2rem 0}.profile .profile-bar{margin-right:1rem;width:200px}.profile .main{display:-ms-flexbox;display:flex;padding:0}.profile .timeline-wrapper{margin-right:3.5rem;width:768px}.profile .timeline-wrapper>div{opacity:1;padding-top:0;position:relative;transition:all .3s cubic-bezier(.09,.43,.35,.95)}.profile .timeline-wrapper>div.ng-hide{opacity:0;padding-top:.5vh}.profile .timeline-wrapper .spin{margin:10% auto;width:3rem}.profile .timeline-wrapper .spin img{margin:0 auto}.profile .profile-sidebar{-ms-flex-preferred-size:150px;flex-basis:150px;-ms-flex-negative:0;flex-shrink:0;width:150px}.profile .profile-sidebar .button-gray{display:block;margin-bottom:2rem;padding-left:2rem;padding-right:2rem}.profile .empty-tab{padding:5vh;text-align:center}.profile .empty-tab svg{fill:#e4e3e3;height:10rem;margin:2rem auto;text-align:center;width:10rem}.profile .empty-tab p{color:#767676;font-size:.9rem;margin:0}.profile-bar .profile-image-wrapper{height:200px;margin-bottom:1rem;overflow:hidden;position:relative}.profile-bar .profile-image-wrapper.is-current-user:hover img{filter:brightness(40%) saturate(150%) hue-rotate(60deg);transition:all .2s cubic-bezier(.01,.7,1,1)}.profile-bar .profile-image-wrapper.is-current-user:hover .profile-edition{opacity:1;transform:translateY(0);transition:all .2s cubic-bezier(.01,.7,1,1);transition-delay:.3s}.profile-bar .profile-img{max-width:100%;width:100%}.profile-bar .profile-edition{font-size:1.2rem;font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(0,0,0,.4);bottom:0;color:#fff;left:0;opacity:0;overflow:hidden;padding:1rem;position:absolute;transform:translateY(100%);width:100%}.profile-bar .profile-edition:hover{background:rgba(0,0,0,.8);transition:all .3s cubic-bezier(.01,.7,1,1)}.profile-bar .button-green{display:block;margin-bottom:1rem}.profile-bar .profile-data{position:relative}.profile-bar .flag{position:absolute;right:0;top:0;width:12px}.profile-bar .flag path{fill:#767676;transition:all .2s linear}.profile-bar .flag:hover path{fill:red;transition:all .2s linear}.profile-bar h1{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;font-size:2rem;line-height:1.2;margin-bottom:.25rem;text-transform:none}.profile-bar .username,.profile-bar h2{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-bar h2{font-size:1.6rem;color:#555;line-height:1.2;margin-bottom:1rem}.profile-bar .location,.profile-bar .username{color:#767676;margin-bottom:1rem}.profile-bar .username{font-size:1.2rem}.profile-bar .location svg{position:relative;top:2px;width:.75rem}.profile-bar .location path{fill:#767676}.profile-bar .profile-stats{border-bottom:1px solid #e4e3e3;color:#555;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-bottom:1.25rem;padding:1rem .5rem}.profile-bar .profile-stats .stat{padding:0 .2rem;text-align:center}.profile-bar .profile-stats .stat-number{font-size:2rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;display:block;line-height:1}.profile-bar .profile-stats .stat-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:.9rem;display:block}.profile-bar .profile-quote{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:1.2rem;background:url(../images/quote.png) top left no-repeat;line-height:1.4;padding:.5rem}.profile-contacts{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.profile-content-tabs{z-index:9}.profile-content-tabs .tab{color:#767676;display:inline-block;padding:1rem}.profile-content-tabs .tab.active,.profile-content-tabs .tab:hover{color:#555;transition:color .2s linear}.profile-content-tabs .tab.active .icon,.profile-content-tabs .tab:hover .icon{fill:#9dce0a}.profile-content-tabs .tab.active{background:#fff;border-left:1px solid #e4e3e3;border-right:1px solid #e4e3e3;position:relative;top:1px;transition:color .2s linear}.profile-content-tabs .tab.active .icon{color:#5b8200}.profile-content-tabs .icon{fill:#767676;height:.8rem;margin-right:.5rem;transition:fill .2s linear}.profile-sidebar h4{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;background:#f5f5f5;color:#555;margin-bottom:.5rem;padding:.5rem}.contact-team-large,.import-project-asana-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.profile-sidebar h4 .icon{fill:#767676;margin-right:.3rem;margin-top:-3px;vertical-align:middle}.profile-sidebar p{font-size:.9rem;color:#767676}.profile-sidebar a{color:#5b8200}.contact-team{margin-left:.75rem}.contact-team-large{font-size:.9rem;-ms-flex-pack:center;justify-content:center;margin-left:0;width:100%}.contact-team-large .icon-mail{margin-right:.5rem;vertical-align:center}.lightbox-contact-project{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.lightbox-contact-project-container{max-width:600px;text-align:center;width:90%}.lightbox-contact-project-logo{width:5rem}.lightbox-contact-project-title{margin:0}.lightbox-contact-project-name{font-size:1.6rem;color:#5b8200;margin-bottom:1rem}.lightbox-contact-project-message{max-height:400px}.lightbox-contact-project-button{display:block;margin-top:.5rem;width:100%}.import-project-asana-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-asana-form{width:90%;min-width:0}}.import-project-asana-form fieldset{margin-bottom:1rem}.import-project-asana-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-asana-form label span{font-size:.9rem}.import-project-asana-form label .mumble{margin-left:.25rem}.import-project-asana-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-asana-form-check span{display:block}.import-project-asana-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-asana-form-check .check{position:absolute;right:0;top:0}.import-project-asana-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-asana-form-title-wrapper .create-project-title{display:inline-block}.import-project-asana-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-description,.import-project-asana-form-title{margin:0;text-align:center}.import-project-asana-form-description{color:#767676;margin-bottom:2rem}.import-project-asana-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.import-project-asana-form-import-type input:checked+label,.import-project-asana-form-privacity input:checked+label,.import-project-asana-form-selector-template,.import-project-asana-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-asana-form-import-type{display:-ms-flexbox;display:flex}.import-project-asana-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-import-type label .icon{margin-right:.25rem}.import-project-asana-form-import-type input:checked+label{background:#dcdcdc}.import-project-asana-form-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-asana-form-import-type input:disabled+label .icon{color:#9c9c9c}.import-project-asana-form-import-type input{display:none}.import-project-asana-form-import-type label{background:#f5f5f5}.import-project-asana-form-privacity{display:-ms-flexbox;display:flex}.import-project-asana-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-asana-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-asana-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-asana-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-asana-form-privacity input:checked+label{background:#dcdcdc}.import-project-asana-form-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-asana-form-privacity input:disabled+label .icon{color:#9c9c9c}.import-project-asana-form-privacity input{display:none}.import-project-asana-form-privacity label{background:#f5f5f5}.import-project-asana-form-privacity label .icon{margin-right:.5em}.import-project-asana-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-asana-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-asana-form-type span{margin-left:.5rem}.import-project-asana-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-asana-form-action-back,.import-project-asana-form-action-cancel,.import-project-asana-form-selector a:hover{color:currentColor}.import-project-asana-form-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-asana-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-asana-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-asana-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-asana-form-selector-template{text-transform:uppercase}.import-project-asana-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-asana-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-asana-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-asana-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-asana-form-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.import-project-asana-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.import-project-asana-form-selector p{margin-bottom:0}.import-project-asana-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-asana-form-action button{font-size:1.2rem;padding:.75rem}.import-project-asana-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-asana-form-action-back:hover,.import-project-asana-form-action-cancel:hover{color:#9dce0a}.import-project-asana-form-action-cancel{-ms-flex:1;flex:1}.import-project-asana-form-action-back{width:10%}.import-project-asana-form-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-asana-form-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.import-project-asana-form-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.import-project-asana-form .spin{text-align:center;width:100%}.create-project-asana-import-type{margin-bottom:1rem;text-align:center}.create-project-asana-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-asana-import-type fieldset{background:#fff;border-right:1px solid #e4e3e3;transition:background .2s linear}.create-project-asana-import-type fieldset:last-child{border:0}.create-project-asana-import-type input{display:none}.create-project-asana-import-type input:checked+label{background:rgba(91,130,0,.1)}.create-project-asana-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-asana-import-type label:hover{background:rgba(91,130,0,.1);cursor:pointer}.create-project-asana-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-asana-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.create-project{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.create-project{width:90%;min-width:0}}.create-project fieldset{margin-bottom:1rem}.create-project label{display:block;margin-bottom:.25rem;max-height:44px}.create-project label span{font-size:.9rem}.create-project label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.create-project-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.create-project-check span{display:block}.create-project-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-check .check{position:absolute;right:0;top:0}.create-project-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.create-project-title-wrapper .create-project-title{display:inline-block}.create-project-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.create-project-description,.create-project-title{margin:0;text-align:center}.create-project-description{color:#767676;margin-bottom:2rem}.create-project-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.create-project-import-type input:checked+label,.create-project-privacity input:checked+label,.create-project-selector-template,.create-project-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-import-type{display:-ms-flexbox;display:flex}.create-project-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.create-project-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-import-type label .icon{margin-right:.25rem}.create-project-import-type input:checked+label{background:#dcdcdc}.create-project-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.create-project-import-type input:disabled+label .icon{color:#9c9c9c}.create-project-import-type input{display:none}.create-project-import-type label{background:#f5f5f5}.create-project-privacity{display:-ms-flexbox;display:flex}.create-project-privacity label,.create-project-type{-ms-flex-align:center;display:-ms-flexbox;text-transform:uppercase}.create-project-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.create-project-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.create-project-privacity label{align-items:center;cursor:pointer;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem}.create-project-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.create-project-privacity input:checked+label{background:#dcdcdc}.create-project-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.create-project-privacity input:disabled+label .icon{color:#9c9c9c}.create-project-privacity input{display:none}.create-project-privacity label{background:#f5f5f5}.create-project-privacity label .icon{margin-right:.5em}.create-project-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.create-project-type{align-items:center;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem}.create-project-type span{margin-left:.5rem}.create-project-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.create-project-action-back,.create-project-action-cancel,.create-project-selector a:hover{color:currentColor}.create-project-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.create-project-selector li:first-child{border-top:1px solid #e4e3e3}.create-project-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.create-project-selector-icon .icon{width:2.25rem;height:2.25rem}.create-project-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.create-project-selector-template{text-transform:uppercase}.create-project-selector-description,.import-project-github-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.create-project-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.create-project-selector-long-description.ng-hide{line-height:0;max-height:0}.create-project-selector-question{position:absolute;right:1.5rem;top:1.5rem}.create-project-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.create-project-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.create-project-selector p{margin-bottom:0}.create-project-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.create-project-action button{font-size:1.2rem;padding:.75rem}.create-project-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.create-project-action-back:hover,.create-project-action-cancel:hover{color:#9dce0a}.create-project-action-cancel{-ms-flex:1;flex:1}.create-project-action-back{width:10%}.create-project-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.create-project-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.create-project-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.create-project .spin{text-align:center;width:100%}.duplicate-project-reference{margin-bottom:2rem}.import-project-github-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-github-form{width:90%;min-width:0}}.import-project-github-form fieldset{margin-bottom:1rem}.import-project-github-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-github-form label span{font-size:.9rem}.import-project-github-form label .mumble{margin-left:.25rem}.import-project-github-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-github-form-check span{display:block}.import-project-github-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-github-form-check .check{position:absolute;right:0;top:0}.import-project-github-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-github-form-title-wrapper .create-project-title{display:inline-block}.import-project-github-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-github-form-description,.import-project-github-form-title{margin:0;text-align:center}.import-project-github-form-description{color:#767676;margin-bottom:2rem}.import-project-github-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.import-project-github-form-import-type input:checked+label,.import-project-github-form-privacity input:checked+label,.import-project-github-form-selector-template,.import-project-github-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-github-form-import-type{display:-ms-flexbox;display:flex}.import-project-github-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-import-type label .icon{margin-right:.25rem}.import-project-github-form-import-type input:checked+label{background:#dcdcdc}.import-project-github-form-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-github-form-import-type input:disabled+label .icon{color:#9c9c9c}.import-project-github-form-import-type input{display:none}.import-project-github-form-import-type label{background:#f5f5f5}.import-project-github-form-privacity{display:-ms-flexbox;display:flex}.import-project-github-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-github-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-github-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-github-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-github-form-privacity input:checked+label{background:#dcdcdc}.import-project-github-form-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-github-form-privacity input:disabled+label .icon{color:#9c9c9c}.import-project-github-form-privacity input{display:none}.import-project-github-form-privacity label{background:#f5f5f5}.import-project-github-form-privacity label .icon{margin-right:.5em}.import-project-github-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-github-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-github-form-type span{margin-left:.5rem}.import-project-github-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-github-form-action-back,.import-project-github-form-action-cancel,.import-project-github-form-selector a:hover{color:currentColor}.import-project-github-form-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-github-form-selector li:first-child{border-top:1px solid #e4e3e3}.import-project-github-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-github-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-github-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-github-form-selector-template{text-transform:uppercase}.import-project-github-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-github-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-github-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-github-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-github-form-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.import-project-github-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.import-project-github-form-selector p{margin-bottom:0}.import-project-github-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-github-form-action button{font-size:1.2rem;padding:.75rem}.import-project-github-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-github-form-action-back:hover,.import-project-github-form-action-cancel:hover{color:#9dce0a}.import-project-github-form-action-cancel{-ms-flex:1;flex:1}.import-project-github-form-action-back{width:10%}.import-project-github-form-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-github-form-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.import-project-github-form-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.import-project-github-form .spin{text-align:center;width:100%}.create-project-github-import-type{margin-bottom:1rem;text-align:center}.create-project-github-import-type p{margin-bottom:.5rem}.create-project-github-import-type-question{-ms-flex-line-pack:stretch;align-content:stretch;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex}.create-project-github-import-type fieldset{background:#fff;border-right:1px solid #e4e3e3;transition:background .2s linear}.create-project-github-import-type fieldset:last-child{border:0}.create-project-github-import-type input{display:none}.create-project-github-import-type input:checked+label{background:rgba(91,130,0,.1)}.create-project-github-import-type label{background:#fff;height:100%;padding:1rem;transition:background .2s ease-in}.create-project-github-import-type label:hover{background:rgba(91,130,0,.1);cursor:pointer}.create-project-github-import-type-name{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;display:inline-block;margin-bottom:.5rem}.create-project-github-import-type-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem}.import-project-members{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-members{width:90%;min-width:0}}.import-project-members .avatar{width:48px}.import-project-members-title{font-size:1rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;margin-bottom:0}.import-project-description,.import-project-jira-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-members-system{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:1rem 0 0;padding:.5rem 0}.import-project-members-system img{width:100%}.import-project-members-logo{max-height:3rem;max-width:3rem}.import-project-members-row{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;border-top:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 0}.import-project-members-row:hover .import-project-members-delete{opacity:1;transition:all .2s ease-in}.import-project-members-single{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-username{margin-left:1rem}.import-project-members .avatar.empty{background-color:#e4e3e3;line-height:3rem;text-align:center;width:3rem}.import-project-members-actions{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-delete{background:0 0;opacity:0;padding:.25rem .5rem}.import-project-members-delete svg{width:.75rem;height:.75rem;fill:red}.import-project-members-match{color:#767676}.import-project-members-match button{background:#fff;border-radius:50%;padding:.25rem .5rem}.import-project-members-match button svg{width:.75rem;height:.75rem}.import-project-members-match-true{border:1px solid #5b8200;margin:0 .1rem 0 .25rem;transition:background .2s}.import-project-members-match-true:hover{background:rgba(157,206,10,.3)}.import-project-members-match-true svg{fill:#5b8200}.import-project-members-match-false{border:1px solid red;margin:0 .25rem 0 .1rem;transition:background .2s}.import-project-members-match-false:hover{background:rgba(255,0,0,.3)}.import-project-members-match-false svg{fill:red}.import-project-members-choose{color:#5b8200;padding-right:0;text-transform:lowercase}.import-project-members-choose:hover{color:#9dce0a}.import-project-members-selected{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.import-project-members-selected-img{margin-left:.5rem;max-width:3rem}.import-project-members-selected img{width:100%}.import-project-members-submit{display:block;margin:2rem auto 0;padding:.75rem 4rem}.import-project-selector{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-selector{width:90%;min-width:0}}.import-project-selector .import-project-selector-service img{display:block;margin:1rem auto;width:4rem}.import-project-selector .import-project-selector-filter{-ms-flex-align:center;align-items:center;background:#e4e3e3;display:-ms-flexbox;display:flex;padding:.5rem}.import-project-selector .import-project-selector-filter input{background:#f5f5f5;border:0;-ms-flex:1;flex:1;padding:.5rem}.import-project-from-site,.import-project-selector .import-project-selector-title{border-bottom:1px solid #e4e3e3;padding:1rem}.import-project-selector .import-project-selector-filter svg{width:1rem;height:1rem;fill:#555;margin:0 1rem}.import-project-selector .import-project-selector-title:hover{background:rgba(91,130,0,.1);cursor:pointer}.import-project-from-site{-ms-flex-align:center;align-items:center;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;position:relative}.import-project-from-site:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-from-site:first-child{border-top:1px solid #e4e3e3}.import-project-from-site:first-child .import-project-name{margin:0}.import-project-from-site:first-child .import-project-logo img{padding:0 .9rem 0 1rem;width:5.1rem}.import-project-logo{-ms-flex-item-align:start;align-self:flex-start;margin-right:.5rem}.import-project-logo img{padding:0 1rem;width:5rem}.import-project-name-wrapper{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}.import-project-description{margin-bottom:0}.import-project-description a{color:#5b8200;margin-left:.3rem}.import-project-url{margin-top:.5rem}.import-project-input{vertical-align:middle}.import-project-button{background:#5b8200;color:#fff;padding:.4rem 1rem}.create-project-invite-avatars{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.create-project-invite-avatar{cursor:pointer;display:block;margin-right:.25rem}.create-project-invite-avatar:hover{background:#f5f5f5;position:relative;border:0;opacity:.9;transition:all .2s;transition-delay:.2s}.create-project-invite-avatar:hover:after,.create-project-invite-avatar:hover:before{content:"";width:2px;height:66px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled{opacity:.3;transition:opacity .2s}.create-project-invite-avatar.disabled:hover{background:#f5f5f5;position:relative;border:0;opacity:.6;transition:all .2s ease-in}.create-project-invite-avatar.disabled:hover:after,.create-project-invite-avatar.disabled:hover:before{content:"";width:2px;height:33px;background:#ff8282;position:absolute;top:0}.create-project-invite-avatar.disabled:hover:after{transform:rotate(-45deg);left:0;transform-origin:top}.create-project-invite-avatar.disabled:hover:before{transform:rotate(45deg);right:0;transform-origin:top}.create-project-invite-avatar.disabled:hover::after{background:#444;left:24px;top:8px;transform:rotate(0);transform-origin:center}.create-project-invite-avatar.disabled:hover::before{background:#444;right:22px;top:8px;transform:rotate(90deg);transform-origin:center}.create-project-invite-avatar img{cursor:pointer;width:3rem}.import-project-jira-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-jira-form{width:90%;min-width:0}}.import-project-jira-form fieldset{margin-bottom:1rem}.import-project-jira-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-jira-form label span{font-size:.9rem}.import-project-jira-form label .mumble{margin-left:.25rem}.import-project-jira-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-jira-form-check span{display:block}.import-project-jira-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-jira-form-check .check{position:absolute;right:0;top:0}.import-project-jira-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-jira-form-title-wrapper .create-project-title{display:inline-block}.import-project-jira-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-description,.import-project-jira-form-title{margin:0;text-align:center}.import-project-jira-form-description{color:#767676;margin-bottom:2rem}.import-project-jira-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.import-project-jira-form-import-type input:checked+label,.import-project-jira-form-privacity input:checked+label,.import-project-jira-form-selector-template,.import-project-jira-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-jira-form-import-type{display:-ms-flexbox;display:flex}.import-project-jira-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-import-type label .icon{margin-right:.25rem}.import-project-jira-form-import-type input:checked+label{background:#dcdcdc}.import-project-jira-form-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-jira-form-import-type input:disabled+label .icon{color:#9c9c9c}.import-project-jira-form-import-type input{display:none}.import-project-jira-form-import-type label{background:#f5f5f5}.import-project-jira-form-privacity{display:-ms-flexbox;display:flex}.import-project-jira-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-jira-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-jira-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-jira-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-jira-form-privacity input:checked+label{background:#dcdcdc}.import-project-jira-form-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-jira-form-privacity input:disabled+label .icon{color:#9c9c9c}.import-project-jira-form-privacity input{display:none}.import-project-jira-form-privacity label{background:#f5f5f5}.import-project-jira-form-privacity label .icon{margin-right:.5em}.import-project-jira-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-jira-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-jira-form-type span{margin-left:.5rem}.import-project-jira-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-jira-form-action-back,.import-project-jira-form-action-cancel,.import-project-jira-form-selector a:hover{color:currentColor}.import-project-jira-form-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-jira-form-selector li:first-child{border-top:1px solid #e4e3e3}.import-project-jira-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-jira-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-jira-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-jira-form-selector-template{text-transform:uppercase}.create-project-import-type-info,.import-project-jira-form-selector-description{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-jira-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-jira-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-jira-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-jira-form-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.import-project-jira-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.import-project-jira-form-selector p{margin-bottom:0}.import-project-jira-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-jira-form-action button{font-size:1.2rem;padding:.75rem}.import-project-jira-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-jira-form-action-back:hover,.import-project-jira-form-action-cancel:hover{color:#9dce0a}.import-project-jira-form-action-cancel{-ms-flex:1;flex:1}.import-project-jira-form-action-back{width:10%}.import-project-jira-form-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.import-project-jira-form-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.import-project-jira-form-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.import-project-jira-form .spin{text-align:center;width:100%}.create-project-import-type-info{font-size:.9rem;margin-bottom:1rem}.create-project-type-issues-subform{margin:1rem 0 2rem}.create-project-type-issues-subform-title{font-size:.9rem;font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.create-project-type-issues-subform-radiogr input{opacity:0}.create-project-type-issues-subform-radiogr input:checked+svg{fill:rgba(91,130,0,.6);stroke:rgba(91,130,0,.1)}.create-project-type-issues-subform-radiogr svg{fill:#e4e3e3;stroke:#cbc9c9;stroke-width:1px;vertical-align:middle}.create-project-type-issues-subform-radiogr .control-indicator{padding-left:.25rem;font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.create-project-import-type{margin-bottom:.25rem}.create-project-import-type fieldset{margin:0}tg-select-import-user-lightbox .form{-ms-flex-preferred-size:600px;flex-basis:600px;-ms-flex-positive:0;flex-grow:0;width:600px}tg-select-import-user-lightbox .candidate-user{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-bottom:1.5rem}tg-select-import-user-lightbox .candidate-user .candidate-user-name{margin-left:.5rem}tg-select-import-user-lightbox .candidate-user .user-list-avatar{background-color:red;height:32px;margin-right:.5rem;width:32px}tg-select-import-user-lightbox .error{color:#ff8282;text-align:center}tg-select-import-user-lightbox .more-users{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;padding:1rem;text-align:center}tg-select-import-user-lightbox .group{display:-ms-flexbox;display:flex}tg-select-import-user-lightbox .group input{-ms-flex-positive:2;flex-grow:2;margin-right:.5rem}tg-select-import-user-lightbox .group .submit-button{-ms-flex-positive:0;flex-grow:0;width:auto}tg-select-import-user-lightbox .search-user-mode{font-size:.9rem;background:0 0;margin-top:2rem;padding:.5rem;text-align:left;transition:.2s;width:100%}tg-select-import-user-lightbox .search-user-mode:hover{color:#5b8200}tg-select-import-user-lightbox label{display:block;padding-bottom:.5rem}.import-project-trello-form{margin:1rem auto;min-width:768px;max-width:800px}@media (max-width:767px){.import-project-trello-form{width:90%;min-width:0}}.import-project-trello-form fieldset{margin-bottom:1rem}.import-project-trello-form label{display:block;margin-bottom:.25rem;max-height:44px}.import-project-trello-form label span{font-size:.9rem}.import-project-trello-form label .mumble{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;margin-left:.25rem}.import-project-trello-form-check{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;position:relative}.import-project-trello-form-check span{display:block}.import-project-trello-form-check .description{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif}.import-project-trello-form-check .check{position:absolute;right:0;top:0}.import-project-trello-form-title-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.import-project-trello-form-title-wrapper .create-project-title{display:inline-block}.import-project-trello-form-title-wrapper .icon{width:1.75rem;height:1.75rem;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-description,.import-project-trello-form-title{margin:0;text-align:center}.import-project-trello-form-description{color:#767676;margin-bottom:2rem}.import-project-trello-form-limit{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;font-size:.9rem;color:#555}.import-project-trello-form-import-type input:checked+label,.import-project-trello-form-privacity input:checked+label,.import-project-trello-form-selector-template,.import-project-trello-form-type{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.import-project-trello-form-import-type{display:-ms-flexbox;display:flex}.import-project-trello-form-import-type fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-import-type fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-import-type label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-import-type label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-import-type label .icon{margin-right:.25rem}.import-project-trello-form-import-type input:checked+label{background:#dcdcdc}.import-project-trello-form-import-type input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-trello-form-import-type input:disabled+label .icon{color:#9c9c9c}.import-project-trello-form-import-type input{display:none}.import-project-trello-form-import-type label{background:#f5f5f5}.import-project-trello-form-privacity{display:-ms-flexbox;display:flex}.import-project-trello-form-privacity fieldset:first-child label{border-radius:.25rem 0 0 .25rem}.import-project-trello-form-privacity fieldset:last-child label{border-radius:0 .25rem .25rem 0}.import-project-trello-form-privacity label{-ms-flex-align:center;align-items:center;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;text-align:center;padding:.75rem;text-transform:uppercase}.import-project-trello-form-privacity label:hover{background:#e8e8e8;transition:background .2s linear}.import-project-trello-form-privacity input:checked+label{background:#dcdcdc}.import-project-trello-form-privacity input:disabled+label{cursor:not-allowed;color:#9c9c9c}.import-project-trello-form-privacity input:disabled+label .icon{color:#9c9c9c}.import-project-trello-form-privacity input{display:none}.import-project-trello-form-privacity label{background:#f5f5f5}.import-project-trello-form-privacity label .icon{margin-right:.5em}.import-project-trello-form-privacity .icon-private{width:20px;height:20px;line-height:12px;margin-top:2px}.import-project-trello-form-type{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;margin-bottom:2rem;text-transform:uppercase}.import-project-trello-form-type span{margin-left:.5rem}.import-project-trello-form-selector a{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;color:#444;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;position:relative}.import-project-trello-form-action-back,.import-project-trello-form-action-cancel,.import-project-trello-form-selector a:hover{color:currentColor}.import-project-trello-form-selector li:hover{background:rgba(91,130,0,.1);transition:background .3s ease-in}.import-project-trello-form-selector li:first-child{border-top:1px solid #e4e3e3}.import-project-trello-form-selector-icon{-ms-flex-item-align:start;align-self:flex-start;padding:1.5rem 1rem}.import-project-trello-form-selector-icon .icon{width:2.25rem;height:2.25rem}.import-project-trello-form-selector-template-wrapper{-ms-flex:1;flex:1;padding:1.25rem}.import-project-trello-form-selector-template{text-transform:uppercase}.import-project-trello-form-selector-description,.project-list-wrapper .project-list-title h1,.transfer-project .transfer-title,.transfer-project-title{font-family:OpenSans-Light,Arial,Helvetica,sans-serif}.import-project-trello-form-selector-long-description{margin-top:1rem;overflow:hidden;transition:all .3s .2s cubic-bezier(0,0,.53,1.32)}.import-project-trello-form-selector-long-description.ng-hide{line-height:0;max-height:0}.import-project-trello-form-selector-question{position:absolute;right:1.5rem;top:1.5rem}.import-project-trello-form-selector-question:hover svg{fill:#5b8200;transition:fill .2s linear}.import-project-trello-form-selector-question svg{width:1.2rem;height:1.2rem;fill:#444}.import-project-trello-form-selector p{margin-bottom:0}.import-project-trello-form-action{display:-ms-flexbox;display:flex;margin:3rem 0 0}.import-project-trello-form-action button{font-size:1.2rem;padding:.75rem}.import-project-trello-form-action-submit{-ms-flex:4;flex:4;margin-left:1rem}.import-project-trello-form-action-back:hover,.import-project-trello-form-action-cancel:hover{color:#9dce0a}.import-project-trello-form-action-cancel{-ms-flex:1;flex:1}.import-project-trello-form-action-back{width:10%}.import-project-trello-form-warning{font-size:.9rem;border:1px solid #ff8282;display:-ms-flexbox;display:flex;padding:1rem;margin-bottom:1rem}.profile-projects,.profile-timeline,.transfer-project-detail{border-top:1px solid #e4e3e3}.import-project-trello-form-warning .icon-exclamation{fill:#ff8282;margin-right:.5rem;vertical-align:middle}.import-project-trello-form-warning a{color:#5b8200;display:inline-block;margin-left:.25rem}.import-project-trello-form .spin{text-align:center;width:100%}.warning-users-import-lightbox{max-width:600px}.warning-users-import-lightbox .warning-users-import-title{text-align:center}.warning-users-import-lightbox .actions{display:-ms-flexbox;display:flex;margin:2rem}.warning-users-import-lightbox .actions button{-ms-flex:1;flex:1}.warning-users-import-lightbox .actions button:first-child{-ms-flex:0;flex:0;-ms-flex-preferred-size:40%;flex-basis:40%;margin-right:.5rem}.warning-users-import-lightbox .actions .button-trans{color:#444}.profile-projects .list-itemtype-project{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;min-height:9rem;padding:.75rem}.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-image,.profile-projects .list-itemtype-project.blocked-project .list-itemtype-project-right,.profile-projects .list-itemtype-project.blocked-project .project-description,.profile-projects .list-itemtype-project.blocked-project .project-title{opacity:.4}.profile-projects .list-itemtype-project .project-list-single-title-wrapper{display:-ms-flexbox;display:flex}.profile-projects .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0}.profile-projects .list-itemtype-project .list-itemtype-project-right{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-negative:0;flex-shrink:0;-ms-flex-pack:justify;justify-content:space-between;width:200px}.profile-projects .list-itemtype-project .icon-blocked-project{width:1rem;height:1rem;fill:#fff;stroke:#ff8282}.project-list-wrapper{position:relative}.project-list-wrapper .project-list-title{-ms-flex-align:center;align-items:center;background:#f5f5f5;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin:2rem 0 1rem;padding:.9rem 1rem}.project-list-wrapper .project-list-title h1{font-size:1.6rem;margin:0}.project-list-wrapper .icon-badge,.project-list-wrapper .icon-blocked-project,.project-list-wrapper .icon-private{width:1rem;height:1rem}.project-list-wrapper .icon-badge{fill:#9dce0a;margin-left:.5rem;stroke:#9dce0a}.project-list-wrapper .create-project-btn{margin-right:.25rem;padding:.6rem 2.5rem}.project-list-wrapper .import-project-button{padding:.53rem .8rem}.project-list-wrapper .import-project-button:hover .icon-upload{fill:#9dce0a}.project-list-wrapper .import-project-button .icon-upload{fill:#fff}.project-list-wrapper .project-list-section{display:-ms-flexbox;display:flex}.project-list-wrapper .project-list{-ms-flex:1;flex:1;margin-right:2rem}.project-list-wrapper .help-area{font-size:.9rem;color:#767676;width:200px}.project-list-wrapper .list-itemtype-project{background:rgba(255,255,255,.6)}.project-list-wrapper .list-itemtype-project:hover{background:rgba(157,206,10,.1);cursor:move;transition:background .3s}.project-list-wrapper .list-itemtype-project:hover .drag{opacity:1}.project-list-wrapper .list-itemtype-project.blocked-project .icon-badge,.project-list-wrapper .list-itemtype-project.blocked-project .list-itemtype-project-image,.project-list-wrapper .list-itemtype-project.blocked-project .private,.project-list-wrapper .list-itemtype-project.blocked-project .project-description,.project-list-wrapper .list-itemtype-project.blocked-project .project-title{opacity:.25}.project-list-wrapper .list-itemtype-project.blocked-project:hover .icon-drag{opacity:1}.project-list-wrapper .list-itemtype-project .list-itemtype-project-data-wrapper{display:-ms-flexbox;display:flex}.project-list-wrapper .list-itemtype-project .list-itemtype-project-image{-ms-flex-negative:0;flex-shrink:0;margin-right:1rem}.project-list-wrapper .drag{-ms-flex-item-align:center;-ms-grid-row-align:center;align-self:center;opacity:0}.project-list-wrapper .drag svg{fill:#767676;height:1.1rem;margin-right:.5rem;transition:opacity .2s;width:1.1rem}.project-list-wrapper .gu-transit{background-color:#ecebeb;height:5rem;opacity:1}.project-list-wrapper .gu-transit *{display:none}.project-list-wrapper .gu-mirror{background:#edffc4;opacity:1}.blocked-project-detail,.transfer-project{background:url(../images/discover.png) bottom center repeat-x;min-height:calc(100vh - 40px)}.blocked-project-detail{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center;min-width:100vw;width:100vw}.blocked-project-inner{width:330px}.blocked-project-title{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex}.blocked-project-title .project-image{-ms-flex-preferred-size:6rem;flex-basis:6rem;margin-right:1rem;max-width:6rem;position:relative}.blocked-project-title img{width:100%}.blocked-project-title .icon-blocked-project{width:1.5rem;height:1.5rem;position:absolute;right:-.5rem;top:-.5rem}.blocked-project-title .project-title{font-size:1.6rem}.blocked-project-message{margin-top:4rem;text-align:center}.blocked-project-message .project-block-title{font-size:2rem}.transfer-project-wrapper{-ms-flex-preferred-size:500px;flex-basis:500px;-ms-flex-positive:0;flex-grow:0;width:90%}.transfer-project{-ms-flex-line-pack:center;align-content:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;height:calc(100vh - 40px);-ms-flex-pack:center;justify-content:center}.master,body{background:#fff}.transfer-project-detail{-ms-flex-align:center;align-items:center;border-bottom:1px solid #e4e3e3;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;margin:1rem 0 3rem;padding:1rem 0}.transfer-project-image{margin-right:1rem;width:4rem}.transfer-project-title{font-size:1.6rem;margin-bottom:.25rem}.transfer-project-statistics span{color:#767676;margin-right:.5rem}.transfer-project-statistics svg{fill:#767676;margin-right:.25rem}.transfer-project-private{text-transform:uppercase}.transfer-project-comment-link{color:#5b8200;cursor:pointer;display:block;margin-bottom:1rem}.transfer-project-comment-link:hover{color:#9dce0a}.transfer-project-comment-header{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.transfer-project-comment-header .icon-close{cursor:pointer;fill:#767676}.transfer-project-comment-header .icon-close:hover{fill:#ff8282;transition:fill .2s}.transfer-project-comment-form.ng-enter{animation:dropdownFade .2s}.transfer-project-comment-label{display:block;margin-bottom:.5rem}.transfer-project-comment{margin-bottom:1rem;min-height:6rem}.transfer-project-options{display:-ms-flexbox;display:flex}.transfer-project-options a{font-size:1.2rem;display:block;-ms-flex:1;flex:1;padding:.75rem}.transfer-project-options a:first-child{margin-right:.5rem}.profile-timeline .activity-item{border-bottom:1px solid #e4e3e3;padding:1rem .5rem 1rem 0;position:relative}.profile-timeline .activity-item p{margin-bottom:0}.profile-timeline .activity-item .username,.profile-timeline .activity-item a{color:#5b8200}.profile-timeline .activity-item .username:first-child,.profile-timeline .activity-item a:first-child{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif;color:#555}.profile-timeline .activity-item a:hover{color:#9dce0a}.profile-timeline .activity-item blockquote{line-height:1.4rem;margin-bottom:0;margin-left:calc(35px + 1rem);margin-top:.5rem;overflow-x:auto;overflow-y:hidden;white-space:pre-line}.profile-timeline .activity-item img{max-height:640px;max-width:640px}.profile-timeline .activity-item .activity-info{-ms-flex-align:center;align-items:center;color:#767676;display:-ms-flexbox;display:flex;margin-right:130px}.profile-timeline .activity-item .activity-date{color:#767676;font-size:.75rem;position:absolute;right:.5rem;top:1.2rem}.profile-timeline .activity-item .profile-contact-picture,.profile-timeline .activity-item .profile-member-picture{border-radius:.1rem;-ms-flex-preferred-size:2rem;flex-basis:2rem;-ms-flex-negative:0;flex-shrink:0;margin-right:1rem;vertical-align:center;width:2rem}.profile-timeline .activity-item .profile-contact-picture img,.profile-timeline .activity-item .profile-member-picture img{width:100%}.profile-timeline .activity-item .new-color{border-radius:50%;display:inline-block;height:1rem;margin-left:.2rem;position:relative;top:.1rem;width:1rem}.profile-timeline .activity-member-view{display:-ms-flexbox;display:flex;margin-bottom:.5rem;margin-left:calc(35px + 1rem);margin-top:.5rem}.profile-timeline .activity-member-view .profile-member-picture{-ms-flex-preferred-size:3rem;flex-basis:3rem;width:3rem}.profile-timeline .activity-member-view .activity-member-info{-ms-flex:1;flex:1}.profile-timeline .activity-member-view a{font-family:OpenSans-Semibold,Arial,Helvetica,sans-serif}.profile-timeline .activity-member-view p{color:#767676}a,body{color:#444}.profile-timeline .single-attachment{border:0;padding:0}.profile-timeline .single-attachment span{font-family:OpenSans-Regular,Arial,Helvetica,sans-serif;font-size:1rem;display:inline-block;max-width:95%;overflow:hidden;text-overflow:ellipsis;vertical-align:sub;white-space:nowrap}.profile-timeline .single-attachment .icon{fill:#444;margin-right:.5rem}.profile-timeline .spin{margin:10% auto;width:3rem}.profile-timeline .spin img{animation:rotate 1.5s cubic-bezier(0,.05,.87,1.04) infinite alternate;margin:0 auto;transform-origin:32 32;max-height:3rem;max-width:3rem}.wiki-history{margin-bottom:2rem}:root .taskboard-table-body .taskboard-row,_:-ms-fullscreen .taskboard-row{min-height:auto}svg{pointer-events:none}a[ng-click] svg{pointer-events:auto}tg-card .card-title span:last-child{word-break:break-word}.menu-secondary{background:#f5f5f5}.menu-tertiary{background-color:#879b89}.extrabar{background:#f5f5f5}h1,h2,h3,h4,h5,h6{color:#050505}a:hover{color:#5b8200}input[type=number],input[type=text],input[type=password],input[type=url],input[type=email],input[type=date],select,textarea{background:#f5f5f5;border-color:#767676;color:#444}input[type=number]::-webkit-input-placeholder,input[type=text]::-webkit-input-placeholder,input[type=password]::-webkit-input-placeholder,input[type=url]::-webkit-input-placeholder,input[type=email]::-webkit-input-placeholder,input[type=date]::-webkit-input-placeholder,select::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#909090}input[type=number]::-moz-placeholder,input[type=text]::-moz-placeholder,input[type=password]::-moz-placeholder,input[type=url]::-moz-placeholder,input[type=email]::-moz-placeholder,input[type=date]::-moz-placeholder,select::-moz-placeholder,textarea::-moz-placeholder{color:#909090}input[type=number]:-moz-placeholder,input[type=text]:-moz-placeholder,input[type=password]:-moz-placeholder,input[type=url]:-moz-placeholder,input[type=email]:-moz-placeholder,input[type=date]:-moz-placeholder,select:-moz-placeholder,textarea:-moz-placeholder{color:#909090}input[type=number]:-ms-input-placeholder,input[type=text]:-ms-input-placeholder,input[type=password]:-ms-input-placeholder,input[type=url]:-ms-input-placeholder,input[type=email]:-ms-input-placeholder,input[type=date]:-ms-input-placeholder,select:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#909090}input[type=number].checksley-error,input[type=text].checksley-error,input[type=password].checksley-error,input[type=url].checksley-error,input[type=email].checksley-error,input[type=date].checksley-error,select.checksley-error,textarea.checksley-error{border:1px solid red}.checksley-error-list{font-family:OpenSans-Light,Arial,Helvetica,sans-serif;background:rgba(255,0,0,.7);color:#fff}blockquote{border-left:5px solid #f5f5f5}blockquote,blockquote p,cite{color:#555}.summary{background:#444;color:#fff}.navbar{background:rgba(0,0,0,.5)}.navbar::after{background:url(../images/menu-vert.png) top left}tg-project-menu{background-color:#879b89;background-image:url(../images/menu.png)}.kanban-table-body .kanban-uses-box,.kanban-table-header .task-colum-name,.taskboard-table-body .taskboard-cards-box{background:#f5f5f5}.main-nav svg{fill:#fff}.taskboard-table-header .task-colum-name{background:#f5f5f5;border-top:3px solid #767676}.taskboard-table-header .task-colum-name .icon{fill:#767676}.kanban-table-header .task-colum-name{border-top:3px solid #767676}.kanban-table-header .task-colum-name .icon{color:#767676} \ No newline at end of file diff --git a/dist/v-1547534999795/svg/editor.svg b/dist/v-1549282893552/svg/editor.svg similarity index 100% rename from dist/v-1547534999795/svg/editor.svg rename to dist/v-1549282893552/svg/editor.svg diff --git a/dist/v-1547534999795/svg/icons/block-user.svg b/dist/v-1549282893552/svg/icons/block-user.svg similarity index 100% rename from dist/v-1547534999795/svg/icons/block-user.svg rename to dist/v-1549282893552/svg/icons/block-user.svg diff --git a/dist/v-1547534999795/svg/icons/multi-block-project.svg b/dist/v-1549282893552/svg/icons/multi-block-project.svg similarity index 100% rename from dist/v-1547534999795/svg/icons/multi-block-project.svg rename to dist/v-1549282893552/svg/icons/multi-block-project.svg diff --git a/dist/v-1547534999795/svg/icons/project-limit.svg b/dist/v-1549282893552/svg/icons/project-limit.svg similarity index 100% rename from dist/v-1547534999795/svg/icons/project-limit.svg rename to dist/v-1549282893552/svg/icons/project-limit.svg diff --git a/dist/v-1547534999795/svg/icons/team-question.svg b/dist/v-1549282893552/svg/icons/team-question.svg similarity index 100% rename from dist/v-1547534999795/svg/icons/team-question.svg rename to dist/v-1549282893552/svg/icons/team-question.svg diff --git a/dist/v-1547534999795/svg/logo-color.svg b/dist/v-1549282893552/svg/logo-color.svg similarity index 100% rename from dist/v-1547534999795/svg/logo-color.svg rename to dist/v-1549282893552/svg/logo-color.svg diff --git a/dist/v-1547534999795/svg/logo-moustache.svg b/dist/v-1549282893552/svg/logo-moustache.svg similarity index 100% rename from dist/v-1547534999795/svg/logo-moustache.svg rename to dist/v-1549282893552/svg/logo-moustache.svg diff --git a/dist/v-1547534999795/svg/logo-nav.svg b/dist/v-1549282893552/svg/logo-nav.svg similarity index 100% rename from dist/v-1547534999795/svg/logo-nav.svg rename to dist/v-1549282893552/svg/logo-nav.svg diff --git a/dist/v-1547534999795/svg/logo.svg b/dist/v-1549282893552/svg/logo.svg similarity index 100% rename from dist/v-1547534999795/svg/logo.svg rename to dist/v-1549282893552/svg/logo.svg diff --git a/dist/v-1547534999795/svg/pattern.svg b/dist/v-1549282893552/svg/pattern.svg similarity index 100% rename from dist/v-1547534999795/svg/pattern.svg rename to dist/v-1549282893552/svg/pattern.svg diff --git a/dist/v-1547534999795/svg/spinner-circle.svg b/dist/v-1549282893552/svg/spinner-circle.svg similarity index 100% rename from dist/v-1547534999795/svg/spinner-circle.svg rename to dist/v-1549282893552/svg/spinner-circle.svg diff --git a/dist/v-1547534999795/svg/spinner.svg b/dist/v-1549282893552/svg/spinner.svg similarity index 100% rename from dist/v-1547534999795/svg/spinner.svg rename to dist/v-1549282893552/svg/spinner.svg diff --git a/dist/v-1547534999795/svg/sprite.svg b/dist/v-1549282893552/svg/sprite.svg similarity index 100% rename from dist/v-1547534999795/svg/sprite.svg rename to dist/v-1549282893552/svg/sprite.svg